ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXNiX2hvc3QgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXV3Yl9yYy13dXNiaGMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11c2JfaG9zdApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11d2JfcmMtd3VzYmhjCmluZGV4IDQ2YjY2YWQxLi40ZTgxMDZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXVzYl9ob3N0CisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXdiX3JjLXd1c2JoYwpAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3VzYl9ob3N0L3VzYl9ob3N0Ti93dXNiX2NoaWQKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOL3d1c2JoYy93dXNiX2NoaWQKIERhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKIEtlcm5lbFZlcnNpb246ICAyLjYuMjcKIENvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgpAQCAtOSw3ICs5LDcgQEAKIAogICAgICAgICAgICAgICAgIFNldCBhbiBhbGwgemVybyBDSElEIHRvIHN0b3AgdGhlIGhvc3QgY29udHJvbGxlci4KIAotV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXNiX2hvc3QvdXNiX2hvc3ROL3d1c2JfdHJ1c3RfdGltZW91dAorV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL3V3Yk4vd3VzYmhjL3d1c2JfdHJ1c3RfdGltZW91dAogRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAogS2VybmVsVmVyc2lvbjogIDIuNi4yNwogQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtY2FjaGVfZGlzYWJsZSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzViYjRmLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotV2hhdDogICAgICAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NhY2hlL2luZGV4Ki9jYWNoZV9kaXNhYmxlX1gKLURhdGU6ICAgICAgQXVndXN0IDIwMDgKLUtlcm5lbFZlcnNpb246CTIuNi4yNwotQ29udGFjdDoJbWFyay5sYW5nc2RvcmZAYW1kLmNvbQotRGVzY3JpcHRpb246CVRoZXNlIGZpbGVzIGV4aXN0IGluIGV2ZXJ5IGNwdSdzIGNhY2hlIGluZGV4IGRpcmVjdG9yaWVzLgotCQlUaGVyZSBhcmUgY3VycmVudGx5IDIgY2FjaGVfZGlzYWJsZV8jIGZpbGVzIGluIGVhY2gKLQkJZGlyZWN0b3J5LiAgUmVhZGluZyBmcm9tIHRoZXNlIGZpbGVzIG9uIGEgc3VwcG9ydGVkCi0JCXByb2Nlc3NvciB3aWxsIHJldHVybiB0aGF0IGNhY2hlIGRpc2FibGUgaW5kZXggdmFsdWUKLQkJZm9yIHRoYXQgcHJvY2Vzc29yIGFuZCBub2RlLiAgV3JpdGluZyB0byBvbmUgb2YgdGhlc2UKLQkJZmlsZXMgd2lsbCBjYXVzZSB0aGUgc3BlY2lmaWNlZCBjYWNoZSBpbmRleCB0byBiZSBkaXNhYmxlZC4KLQotCQlDdXJyZW50bHksIG9ubHkgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycyBzdXBwb3J0IGNhY2hlIGluZGV4Ci0JCWRpc2FibGUsIGFuZCBvbmx5IGZvciB0aGVpciBMMyBjYWNoZXMuICBTZWUgdGhlIEJJT1MgYW5kCi0JCUtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBhdAotCQlodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8zMTExNi1QdWJsaWMtR0gtQktER18zLjIwXzItNC0wOS5wZGYKLQkJZm9yIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gYW5kIG90aGVyIGRldGFpbHMgb24gdGhlCi0JCWNhY2hlIGluZGV4IGRpc2FibGUuCi1Vc2VyczogICAgam9hY2hpbS5kZWd1YXJhQGFtZC5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwM2I5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CkBAIC0wLDAgKzEsMTU2IEBACitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvCitEYXRlOgkJcHJlLWdpdCBoaXN0b3J5CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CisJCUEgY29sbGVjdGlvbiBvZiBib3RoIGdsb2JhbCBhbmQgaW5kaXZpZHVhbCBDUFUgYXR0cmlidXRlcworCisJCUluZGl2aWR1YWwgQ1BVIGF0dHJpYnV0ZXMgYXJlIGNvbnRhaW5lZCBpbiBzdWJkaXJlY3RvcmllcworCQluYW1lZCBieSB0aGUga2VybmVsJ3MgbG9naWNhbCBDUFUgbnVtYmVyLCBlLmcuOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9zY2hlZF9tY19wb3dlcl9zYXZpbmdzCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzCitEYXRlOgkJSnVuZSAyMDA2CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGFuZCBhZGp1c3QgdGhlIGtlcm5lbCdzIG11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQuCisKKwkJUG9zc2libGUgdmFsdWVzIGFyZToKKworCQkwIC0gTm8gcG93ZXIgc2F2aW5nIGxvYWQgYmFsYW5jZSAoZGVmYXVsdCB2YWx1ZSkKKwkJMSAtIEZpbGwgb25lIHRocmVhZC9jb3JlL3BhY2thZ2UgZmlyc3QgZm9yIGxvbmcgcnVubmluZyB0aHJlYWRzCisJCTIgLSBBbHNvIGJpYXMgdGFzayB3YWtldXBzIHRvIHNlbWktaWRsZSBjcHUgcGFja2FnZSBmb3IgcG93ZXIKKwkJICAgIHNhdmluZ3MKKworCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX01DLCB3aGljaCBpcworCQlpdHNlbGYgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKworCQlzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyBpcyBkZXBlbmRlbnQgdXBvbiBTQ0hFRF9TTVQsIHdoaWNoCisJCWlzIGl0c2VsZiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorCisJCVRoZSB0d28gZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIEl0IGlzIHBvc3NpYmxlCisJCXRoYXQgb25lIGZpbGUgbWF5IGJlIHByZXNlbnQgd2l0aG91dCB0aGUgb3RoZXIuCisKKwkJSW50cm9kdWNlZCBieSBnaXQgY29tbWl0IDVjNDViZjI3LgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9rZXJuZWxfbWF4CisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29mZmxpbmUKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvb25saW5lCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3Bvc3NpYmxlCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQKK0RhdGU6CQlEZWNlbWJlciAyMDA4CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CUNQVSB0b3BvbG9neSBmaWxlcyB0aGF0IGRlc2NyaWJlIGtlcm5lbCBsaW1pdHMgcmVsYXRlZCB0bworCQlob3RwbHVnLiBCcmllZmx5OgorCisJCWtlcm5lbF9tYXg6IHRoZSBtYXhpbXVtIGNwdSBpbmRleCBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwKKwkJY29uZmlndXJhdGlvbi4KKworCQlvZmZsaW5lOiBjcHVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgorCQlIT1RQTFVHR0VEIG9mZiBvciBleGNlZWQgdGhlIGxpbWl0IG9mIGNwdXMgYWxsb3dlZCBieSB0aGUKKwkJa2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXggYWJvdmUpLgorCisJCW9ubGluZTogY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZC4KKworCQlwb3NzaWJsZTogY3B1cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFuZCBjYW4gYmUKKwkJYnJvdWdodCBvbmxpbmUgaWYgdGhleSBhcmUgcHJlc2VudC4KKworCQlwcmVzZW50OiBjcHVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbgorCQl0aGUgc3lzdGVtLgorCisJCVNlZSBEb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL25vZGUKK0RhdGU6CQlPY3RvYmVyIDIwMDkKK0NvbnRhY3Q6CUxpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IG1haWxpbmcgbGlzdCA8bGludXgtbW1Aa3ZhY2sub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIE5VTUEgbm9kZSBhIENQVSBiZWxvbmdzIHRvCisKKwkJV2hlbiBDT05GSUdfTlVNQSBpcyBlbmFibGVkLCBhIHN5bWJvbGljIGxpbmsgdGhhdCBwb2ludHMKKwkJdG8gdGhlIGNvcnJlc3BvbmRpbmcgTlVNQSBub2RlIGRpcmVjdG9yeS4KKworCQlGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzeW1saW5rIGlzIGNyZWF0ZWQgZm9yIGNwdTQyCisJCWluIE5VTUEgbm9kZSAyOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyL25vZGUyIC0+IC4uLy4uL25vZGUvbm9kZTIKKworCitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS9jb3JlX2lkCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvdG9wb2xvZ3kvY29yZV9zaWJsaW5ncworCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L2NvcmVfc2libGluZ3NfbGlzdAorCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3MKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3NfbGlzdAorRGF0ZToJCURlY2VtYmVyIDIwMDgKK0NvbnRhY3Q6CUxpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+CitEZXNjcmlwdGlvbjoJQ1BVIHRvcG9sb2d5IGZpbGVzIHRoYXQgZGVzY3JpYmUgYSBsb2dpY2FsIENQVSdzIHJlbGF0aW9uc2hpcAorCQl0byBvdGhlciBjb3JlcyBhbmQgdGhyZWFkcyBpbiB0aGUgc2FtZSBwaHlzaWNhbCBwYWNrYWdlLgorCisJCU9uZSBjcHUjIGRpcmVjdG9yeSBpcyBjcmVhdGVkIHBlciBsb2dpY2FsIENQVSBpbiB0aGUgc3lzdGVtLAorCQllLmcuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyLy4KKworCQlCcmllZmx5LCB0aGUgZmlsZXMgYWJvdmUgYXJlOgorCisJCWNvcmVfaWQ6IHRoZSBDUFUgY29yZSBJRCBvZiBjcHUjLiBUeXBpY2FsbHkgaXQgaXMgdGhlCisJCWhhcmR3YXJlIHBsYXRmb3JtJ3MgaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4KKwkJVGhlIGFjdHVhbCB2YWx1ZSBpcyBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKworCQljb3JlX3NpYmxpbmdzOiBpbnRlcm5hbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZSB0aHJlYWRzCisJCXdpdGhpbiB0aGUgc2FtZSBwaHlzaWNhbF9wYWNrYWdlX2lkLgorCisJCWNvcmVfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiB0aGUgbG9naWNhbCBDUFUKKwkJbnVtYmVycyB3aXRoaW4gdGhlIHNhbWUgcGh5c2ljYWxfcGFja2FnZV9pZCBhcyBjcHUjLgorCisJCXBoeXNpY2FsX3BhY2thZ2VfaWQ6IHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgY3B1Iy4gVHlwaWNhbGx5CisJCWNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwgc29ja2V0IG51bWJlciwgYnV0IHRoZSBhY3R1YWwgdmFsdWUKKwkJaXMgYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKKwkJdGhyZWFkX3NpYmxpbmdzOiBpbnRlcm5lbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZQorCQl0aHJlYWRzIHdpdGhpbiB0aGUgc2FtZSBjb3JlIGFzIGNwdSMKKworCQl0aHJlYWRfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiBjcHUjJ3MgaGFyZHdhcmUKKwkJdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUgY29yZSBhcyBjcHUjCisKKwkJU2VlIERvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVpZGxlL2N1cnJlbnRfZHJpdmVyCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdWlkbGUvY3VycmVudF9nb3Zlcm5lcl9ybworRGF0ZToJCVNlcHRlbWJlciAyMDA3CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGNwdWlkbGUgcG9saWN5IGFuZCBtZWNoYW5pc20KKworCQlWYXJpb3VzIENQVXMgdG9kYXkgc3VwcG9ydCBtdWx0aXBsZSBpZGxlIGxldmVscyB0aGF0IGFyZQorCQlkaWZmZXJlbnRpYXRlZCBieSB2YXJ5aW5nIGV4aXQgbGF0ZW5jaWVzIGFuZCBwb3dlcgorCQljb25zdW1wdGlvbiBkdXJpbmcgaWRsZS4KKworCQlJZGxlIHBvbGljeSAoZ292ZXJub3IpIGlzIGRpZmZlcmVudGlhdGVkIGZyb20gaWRsZSBtZWNoYW5pc20KKwkJKGRyaXZlcikKKworCQljdXJyZW50X2RyaXZlcjogZGlzcGxheXMgY3VycmVudCBpZGxlIG1lY2hhbmlzbQorCisJCWN1cnJlbnRfZ292ZXJub3Jfcm86IGRpc3BsYXlzIGN1cnJlbnQgaWRsZSBwb2xpY3kKKworCQlTZWUgZmlsZXMgaW4gRG9jdW1lbnRhdGlvbi9jcHVpZGxlLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitXaGF0OiAgICAgIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY2FjaGUvaW5kZXgqL2NhY2hlX2Rpc2FibGVfWAorRGF0ZTogICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI3CitDb250YWN0OgltYXJrLmxhbmdzZG9yZkBhbWQuY29tCitEZXNjcmlwdGlvbjoJVGhlc2UgZmlsZXMgZXhpc3QgaW4gZXZlcnkgY3B1J3MgY2FjaGUgaW5kZXggZGlyZWN0b3JpZXMuCisJCVRoZXJlIGFyZSBjdXJyZW50bHkgMiBjYWNoZV9kaXNhYmxlXyMgZmlsZXMgaW4gZWFjaAorCQlkaXJlY3RvcnkuICBSZWFkaW5nIGZyb20gdGhlc2UgZmlsZXMgb24gYSBzdXBwb3J0ZWQKKwkJcHJvY2Vzc29yIHdpbGwgcmV0dXJuIHRoYXQgY2FjaGUgZGlzYWJsZSBpbmRleCB2YWx1ZQorCQlmb3IgdGhhdCBwcm9jZXNzb3IgYW5kIG5vZGUuICBXcml0aW5nIHRvIG9uZSBvZiB0aGVzZQorCQlmaWxlcyB3aWxsIGNhdXNlIHRoZSBzcGVjaWZpY2VkIGNhY2hlIGluZGV4IHRvIGJlIGRpc2FibGVkLgorCisJCUN1cnJlbnRseSwgb25seSBBTUQgRmFtaWx5IDEwaCBQcm9jZXNzb3JzIHN1cHBvcnQgY2FjaGUgaW5kZXgKKwkJZGlzYWJsZSwgYW5kIG9ubHkgZm9yIHRoZWlyIEwzIGNhY2hlcy4gIFNlZSB0aGUgQklPUyBhbmQKKwkJS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGF0CisJCWh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzMxMTE2LVB1YmxpYy1HSC1CS0RHXzMuMjBfMi00LTA5LnBkZgorCQlmb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgZGV0YWlscyBvbiB0aGUKKwkJY2FjaGUgaW5kZXggZGlzYWJsZS4KK1VzZXJzOiAgICBqb2FjaGltLmRlZ3VhcmFAYW1kLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHV0b3BvbG9neS50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dAppbmRleCBiNDFmM2U1Li5mMWM1YzRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dApAQCAtMSwxNSArMSwyOCBAQAogCi1FeHBvcnQgY3B1IHRvcG9sb2d5IGluZm8gdmlhIHN5c2ZzLiBJdGVtcyAoYXR0cmlidXRlcykgYXJlIHNpbWlsYXIKK0V4cG9ydCBDUFUgdG9wb2xvZ3kgaW5mbyB2aWEgc3lzZnMuIEl0ZW1zIChhdHRyaWJ1dGVzKSBhcmUgc2ltaWxhcgogdG8gL3Byb2MvY3B1aW5mby4KIAogMSkgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS9waHlzaWNhbF9wYWNrYWdlX2lkOgotcmVwcmVzZW50IHRoZSBwaHlzaWNhbCBwYWNrYWdlIGlkIG9mICBjcHUgWDsKKworCXBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgY3B1WC4gVHlwaWNhbGx5IGNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwKKwlzb2NrZXQgbnVtYmVyLCBidXQgdGhlIGFjdHVhbCB2YWx1ZSBpcyBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtCisJZGVwZW5kZW50LgorCiAyKSAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3RvcG9sb2d5L2NvcmVfaWQ6Ci1yZXByZXNlbnQgdGhlIGNwdSBjb3JlIGlkIHRvIGNwdSBYOworCisJdGhlIENQVSBjb3JlIElEIG9mIGNwdVguIFR5cGljYWxseSBpdCBpcyB0aGUgaGFyZHdhcmUgcGxhdGZvcm0ncworCWlkZW50aWZpZXIgKHJhdGhlciB0aGFuIHRoZSBrZXJuZWwncykuICBUaGUgYWN0dWFsIHZhbHVlIGlzCisJYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKIDMpIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvdG9wb2xvZ3kvdGhyZWFkX3NpYmxpbmdzOgotcmVwcmVzZW50IHRoZSB0aHJlYWQgc2libGluZ3MgdG8gY3B1IFggaW4gdGhlIHNhbWUgY29yZTsKKworCWludGVybmVsIGtlcm5lbCBtYXAgb2YgY3B1WCdzIGhhcmR3YXJlIHRocmVhZHMgd2l0aGluIHRoZSBzYW1lCisJY29yZSBhcyBjcHVYCisKIDQpIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvdG9wb2xvZ3kvY29yZV9zaWJsaW5nczoKLXJlcHJlc2VudCB0aGUgdGhyZWFkIHNpYmxpbmdzIHRvIGNwdSBYIGluIHRoZSBzYW1lIHBoeXNpY2FsIHBhY2thZ2U7CisKKwlpbnRlcm5hbCBrZXJuZWwgbWFwIG9mIGNwdVgncyBoYXJkd2FyZSB0aHJlYWRzIHdpdGhpbiB0aGUgc2FtZQorCXBoeXNpY2FsX3BhY2thZ2VfaWQuCiAKIFRvIGltcGxlbWVudCBpdCBpbiBhbiBhcmNoaXRlY3R1cmUtbmV1dHJhbCB3YXksIGEgbmV3IHNvdXJjZSBmaWxlLAogZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMsIGlzIHRvIGV4cG9ydCB0aGUgNCBhdHRyaWJ1dGVzLgpAQCAtMzIsMzIgKzQ1LDMyIEBACiAzKSB0aHJlYWRfc2libGluZ3M6IGp1c3QgdGhlIGdpdmVuIENQVQogNCkgY29yZV9zaWJsaW5nczoganVzdCB0aGUgZ2l2ZW4gQ1BVCiAKLUFkZGl0aW9uYWxseSwgY3B1IHRvcG9sb2d5IGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIHVuZGVyCitBZGRpdGlvbmFsbHksIENQVSB0b3BvbG9neSBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCB1bmRlcgogL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUgYW5kIGluY2x1ZGVzIHRoZXNlIGZpbGVzLiAgVGhlIGludGVybmFsCiBzb3VyY2UgZm9yIHRoZSBvdXRwdXQgaXMgaW4gYnJhY2tldHMgKCJbXSIpLgogCi0gICAga2VybmVsX21heDogdGhlIG1heGltdW0gY3B1IGluZGV4IGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgorICAgIGtlcm5lbF9tYXg6IHRoZSBtYXhpbXVtIENQVSBpbmRleCBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KIAkJW05SX0NQVVMtMV0KIAotICAgIG9mZmxpbmU6CWNwdXMgdGhhdCBhcmUgbm90IG9ubGluZSBiZWNhdXNlIHRoZXkgaGF2ZSBiZWVuCisgICAgb2ZmbGluZToJQ1BVcyB0aGF0IGFyZSBub3Qgb25saW5lIGJlY2F1c2UgdGhleSBoYXZlIGJlZW4KIAkJSE9UUExVR0dFRCBvZmYgKHNlZSBjcHUtaG90cGx1Zy50eHQpIG9yIGV4Y2VlZCB0aGUgbGltaXQKLQkJb2YgY3B1cyBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiAoa2VybmVsX21heAorCQlvZiBDUFVzIGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIChrZXJuZWxfbWF4CiAJCWFib3ZlKS4gW35jcHVfb25saW5lX21hc2sgKyBjcHVzID49IE5SX0NQVVNdCiAKLSAgICBvbmxpbmU6CWNwdXMgdGhhdCBhcmUgb25saW5lIGFuZCBiZWluZyBzY2hlZHVsZWQgW2NwdV9vbmxpbmVfbWFza10KKyAgICBvbmxpbmU6CUNQVXMgdGhhdCBhcmUgb25saW5lIGFuZCBiZWluZyBzY2hlZHVsZWQgW2NwdV9vbmxpbmVfbWFza10KIAotICAgIHBvc3NpYmxlOgljcHVzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCByZXNvdXJjZXMgYW5kIGNhbiBiZQorICAgIHBvc3NpYmxlOglDUFVzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCByZXNvdXJjZXMgYW5kIGNhbiBiZQogCQlicm91Z2h0IG9ubGluZSBpZiB0aGV5IGFyZSBwcmVzZW50LiBbY3B1X3Bvc3NpYmxlX21hc2tdCiAKLSAgICBwcmVzZW50OgljcHVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbiB0aGUKKyAgICBwcmVzZW50OglDUFVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbiB0aGUKIAkJc3lzdGVtLiBbY3B1X3ByZXNlbnRfbWFza10KIAogVGhlIGZvcm1hdCBmb3IgdGhlIGFib3ZlIG91dHB1dCBpcyBjb21wYXRpYmxlIHdpdGggY3B1bGlzdF9wYXJzZSgpCiBbc2VlIDxsaW51eC9jcHVtYXNrLmg+XS4gIFNvbWUgZXhhbXBsZXMgZm9sbG93LgogCi1JbiB0aGlzIGV4YW1wbGUsIHRoZXJlIGFyZSA2NCBjcHVzIGluIHRoZSBzeXN0ZW0gYnV0IGNwdXMgMzItNjMgZXhjZWVkCitJbiB0aGlzIGV4YW1wbGUsIHRoZXJlIGFyZSA2NCBDUFVzIGluIHRoZSBzeXN0ZW0gYnV0IGNwdXMgMzItNjMgZXhjZWVkCiB0aGUga2VybmVsIG1heCB3aGljaCBpcyBsaW1pdGVkIHRvIDAuLjMxIGJ5IHRoZSBOUl9DUFVTIGNvbmZpZyBvcHRpb24KLWJlaW5nIDMyLiAgTm90ZSBhbHNvIHRoYXQgY3B1cyAyIGFuZCA0LTMxIGFyZSBub3Qgb25saW5lIGJ1dCBjb3VsZCBiZQorYmVpbmcgMzIuICBOb3RlIGFsc28gdGhhdCBDUFVzIDIgYW5kIDQtMzEgYXJlIG5vdCBvbmxpbmUgYnV0IGNvdWxkIGJlCiBicm91Z2h0IG9ubGluZSBhcyB0aGV5IGFyZSBib3RoIHByZXNlbnQgYW5kIHBvc3NpYmxlLgogCiAgICAgIGtlcm5lbF9tYXg6IDMxCkBAIC02Nyw4ICs4MCw4IEBACiAgICAgICAgIHByZXNlbnQ6IDAtMzEKIAogSW4gdGhpcyBleGFtcGxlLCB0aGUgTlJfQ1BVUyBjb25maWcgb3B0aW9uIGlzIDEyOCwgYnV0IHRoZSBrZXJuZWwgd2FzCi1zdGFydGVkIHdpdGggcG9zc2libGVfY3B1cz0xNDQuICBUaGVyZSBhcmUgNCBjcHVzIGluIHRoZSBzeXN0ZW0gYW5kIGNwdTIKLXdhcyBtYW51YWxseSB0YWtlbiBvZmZsaW5lIChhbmQgaXMgdGhlIG9ubHkgY3B1IHRoYXQgY2FuIGJlIGJyb3VnaHQKK3N0YXJ0ZWQgd2l0aCBwb3NzaWJsZV9jcHVzPTE0NC4gIFRoZXJlIGFyZSA0IENQVXMgaW4gdGhlIHN5c3RlbSBhbmQgY3B1Mgord2FzIG1hbnVhbGx5IHRha2VuIG9mZmxpbmUgKGFuZCBpcyB0aGUgb25seSBDUFUgdGhhdCBjYW4gYmUgYnJvdWdodAogb25saW5lLikKIAogICAgICBrZXJuZWxfbWF4OiAxMjcKQEAgLTc4LDQgKzkxLDQgQEAKICAgICAgICAgcHJlc2VudDogMC0zCiAKIFNlZSBjcHUtaG90cGx1Zy50eHQgZm9yIHRoZSBwb3NzaWJsZV9jcHVzPU5VTSBrZXJuZWwgc3RhcnQgcGFyYW1ldGVyCi1hcyB3ZWxsIGFzIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlvdXMgY3B1bWFzaydzLgorYXMgd2VsbCBhcyBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2YXJpb3VzIGNwdW1hc2tzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctdmlhLW9oY2kxMzk0LnR4dCBiL0RvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKaW5kZXggNTlhOTFlNS4uNjExZjVhNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctdmlhLW9oY2kxMzk0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0CkBAIC02NCwxNCArNjQsMTQgQEAKIAogQmVybmhhcmQgS2FpbmRsIGVuaGFuY2VkIGZpcmVzY29wZSB0byBzdXBwb3J0IGFjY2Vzc2luZyA2NC1iaXQgbWFjaGluZXMKIGZyb20gMzItYml0IGZpcmVzY29wZSBhbmQgdmljZSB2ZXJzYToKLS0gZnRwOi8vZnRwLnN1c2UuZGUvcHJpdmF0ZS9iay9maXJld2lyZS90b29scy9maXJlc2NvcGUtMC4yLjIudGFyLmJ6MgorLSBodHRwOi8vaGFsb2JhdGVzLmRlL2ZpcmV3aXJlL2ZpcmVzY29wZS0wLjIuMi50YXIuYnoyCiAKIGFuZCBoZSBpbXBsZW1lbnRlZCBmYXN0IHN5c3RlbSBkdW1wIChhbHBoYSB2ZXJzaW9uIC0gcmVhZCBSRUFETUUudHh0KToKLS0gZnRwOi8vZnRwLnN1c2UuZGUvcHJpdmF0ZS9iay9maXJld2lyZS90b29scy9maXJlZHVtcC0wLjEudGFyLmJ6MgorLSBodHRwOi8vaGFsb2JhdGVzLmRlL2ZpcmV3aXJlL2ZpcmVkdW1wLTAuMS50YXIuYnoyCiAKIFRoZXJlIGlzIGFsc28gYSBnZGIgcHJveHkgZm9yIGZpcmV3aXJlIHdoaWNoIGFsbG93cyB0byB1c2UgZ2RiIHRvIGFjY2VzcwogZGF0YSB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBmcm9tIHN5bWJvbHMgZm91bmQgYnkgZ2RiIGluIHZtbGludXg6Ci0tIGZ0cDovL2Z0cC5zdXNlLmRlL3ByaXZhdGUvYmsvZmlyZXdpcmUvdG9vbHMvZmlyZXByb3h5LTAuMzMudGFyLmJ6MgorLSBodHRwOi8vaGFsb2JhdGVzLmRlL2ZpcmV3aXJlL2ZpcmVwcm94eS0wLjMzLnRhci5iejIKIAogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZ2RiIHByb3h5IChmaXJlcHJveHktMC4zNCkgY2FuIGNvbW11bmljYXRlIChub3QKIHlldCBzdGFibGUpIHdpdGgga2dkYiBvdmVyIGFuIG1lbW9yeS1iYXNlZCBjb21tdW5pY2F0aW9uIG1vZHVsZSAoa2dkYm9tKS4KQEAgLTE3OCw3ICsxNzgsNyBAQAogCiBOb3RlcwogLS0tLS0KLURvY3VtZW50YXRpb24gYW5kIHNwZWNpZmljYXRpb25zOiBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL2RvY3MKK0RvY3VtZW50YXRpb24gYW5kIHNwZWNpZmljYXRpb25zOiBodHRwOi8vaGFsb2JhdGVzLmRlL2ZpcmV3aXJlLwogCiBGaXJlV2lyZSBpcyBhIHRyYWRlbWFyayBvZiBBcHBsZSBJbmMuIC0gZm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHJlZmVyIHRvOgogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXJlV2lyZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDg5YTQ3YjUuLmJjNjkzZmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTQxOCw2ICs0MTgsMTQgQEAKIFdoeToJU2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHVzZXJzcGFjZSwgcG9saWN5IGRhZW1vbi4KIFdobzoJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CUNPTkZJR19JTk9USUZZCitXaGVuOgkyLjYuMzMKK1doeToJbGFzdCB1c2VyIChhdWRpdCkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIG5ld2VyIG1vcmUgZ2VuZXJpYworCWFuZCBtb3JlIGVhc2lseSBtYWludGFpbmVkIGZzbm90aWZ5IHN1YnN5c3RlbQorV2hvOglFcmljIFBhcmlzIDxlcGFyaXNAcmVkaGF0LmNvbT4KKwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXaGF0Oglsb2NrX3BvbGljeV9yd3NlbV8qIGFuZCB1bmxvY2tfcG9saWN5X3J3c2VtXyogd2lsbCBub3QgYmUKQEAgLTQ1MSwzICs0NTksMzMgQEAKIAl3aWxsIGFsc28gYWxsb3cgbWFraW5nIEFMU0EgT1NTIGVtdWxhdGlvbiBpbmRlcGVuZGVudCBvZgogCXNvdW5kX2NvcmUuICBUaGUgZGVwZW5kZW5jeSB3aWxsIGJlIGJyb2tlbiB0aGVuIHRvby4KIFdobzoJVGVqdW4gSGVvIDx0akBrZXJuZWwub3JnPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CVN1cHBvcnQgZm9yIFZNd2FyZSdzIGd1ZXN0IHBhcmF2aXJ0dWxpYXphdGlvbiB0ZWNobmlxdWUgW1ZNSV0gd2lsbCBiZQorCWRyb3BwZWQuCitXaGVuOgkyLjYuMzcgb3IgZWFybGllci4KK1doeToJV2l0aCB0aGUgcmVjZW50IGlubm92YXRpb25zIGluIENQVSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gdGVjaG5vbG9naWVzCisJZnJvbSBJbnRlbCBhbmQgQU1ELCBWTXdhcmUgcmFuIGEgZmV3IGV4cGVyaW1lbnRzIHRvIGNvbXBhcmUgdGhlc2UKKwl0ZWNobmlxdWVzIHRvIGd1ZXN0IHBhcmF2aXJ0dWFsaXphdGlvbiB0ZWNobmlxdWUgb24gVk13YXJlJ3MgcGxhdGZvcm0uCisJVGhlc2UgaGFyZHdhcmUgYXNzaXN0ZWQgdmlydHVhbGl6YXRpb24gdGVjaG5pcXVlcyBoYXZlIG91dHBlcmZvcm1lZCB0aGUKKwlwZXJmb3JtYW5jZSBiZW5lZml0cyBwcm92aWRlZCBieSBWTUkgaW4gbW9zdCBvZiB0aGUgd29ya2xvYWRzLiBWTXdhcmUKKwlleHBlY3RzIHRoYXQgdGhlc2UgaGFyZHdhcmUgZmVhdHVyZXMgd2lsbCBiZSB1YmlxdWl0b3VzIGluIGEgY291cGxlIG9mCisJeWVhcnMsIGFzIGEgcmVzdWx0LCBWTXdhcmUgaGFzIHN0YXJ0ZWQgYSBwaGFzZWQgcmV0aXJlbWVudCBvZiB0aGlzCisJZmVhdHVyZSBmcm9tIHRoZSBoeXBlcnZpc29yLiBXZSB3aWxsIGJlIHJlbW92aW5nIHRoaXMgZmVhdHVyZSBmcm9tIHRoZQorCUtlcm5lbCB0b28uIFJpZ2h0IG5vdyB3ZSBhcmUgdGFyZ2V0aW5nIDIuNi4zNyBidXQgY2FuIHJldGlyZSBlYXJsaWVyIGlmCisJdGVjaG5pY2FsIHJlYXNvbnMgKHJlYWQgb3Bwb3J0dW5pdHkgdG8gcmVtb3ZlIG1ham9yIGNodW5rIG9mIHB2b3BzKQorCWFyaXNlLgorCisJUGxlYXNlIG5vdGUgdGhhdCBWTUkgaGFzIGFsd2F5cyBiZWVuIGFuIG9wdGltaXphdGlvbiBhbmQgbm9uLVZNSSBrZXJuZWxzCisJc3RpbGwgd29yayBmaW5lIG9uIFZNd2FyZSdzIHBsYXRmb3JtLgorCUxhdGVzdCB2ZXJzaW9ucyBvZiBWTXdhcmUncyBwcm9kdWN0IHdoaWNoIHN1cHBvcnQgVk1JIGFyZSwKKwlXb3Jrc3RhdGlvbiA3LjAgYW5kIFZTcGhlcmUgNC4wIG9uIEVTWCBzaWRlLCBmdXR1cmUgbWFpbnRhaW5lbmNlCisJcmVsZWFzZXMgZm9yIHRoZXNlIHByb2R1Y3RzIHdpbGwgY29udGludWUgc3VwcG9ydGluZyBWTUkuCisKKwlGb3IgbW9yZSBkZXRhaWxzIGFib3V0IFZNSSByZXRpcmVtZW50IHRha2UgYSBsb29rIGF0IHRoaXMsCisJaHR0cDovL2Jsb2dzLnZtd2FyZS5jb20vZ3Vlc3Rvc2d1aWRlLzIwMDkvMDkvdm1pLXJldGlyZW1lbnQuaHRtbAorCitXaG86CUFsb2sgTiBLYXRhcmlhIDxha2F0YXJpYUB2bXdhcmUuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dAppbmRleCA1NzBmOWJkLi4wNWQ1Y2YxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKQEAgLTEyMywxMCArMTIzLDE4IEBACiAKIHNiPW4JCQlVc2UgYWx0ZXJuYXRlIHN1cGVyYmxvY2sgYXQgdGhpcyBsb2NhdGlvbi4KIAotcXVvdGEKLW5vcXVvdGEKLWdycHF1b3RhCi11c3JxdW90YQorcXVvdGEJCQlUaGVzZSBvcHRpb25zIGFyZSBpZ25vcmVkIGJ5IHRoZSBmaWxlc3lzdGVtLiBUaGV5Citub3F1b3RhCQkJYXJlIHVzZWQgb25seSBieSBxdW90YSB0b29scyB0byByZWNvZ25pemUgdm9sdW1lcworZ3JwcXVvdGEJCXdoZXJlIHF1b3RhIHNob3VsZCBiZSB0dXJuZWQgb24uIFNlZSBkb2N1bWVudGF0aW9uCit1c3JxdW90YQkJaW4gdGhlIHF1b3RhLXRvb2xzIHBhY2thZ2UgZm9yIG1vcmUgZGV0YWlscworCQkJKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXhxdW90YSkuCisKK2pxZm10PTxxdW90YSB0eXBlPglUaGVzZSBvcHRpb25zIHRlbGwgZmlsZXN5c3RlbSBkZXRhaWxzIGFib3V0IHF1b3RhCit1c3JqcXVvdGE9PGZpbGU+CXNvIHRoYXQgcXVvdGEgaW5mb3JtYXRpb24gY2FuIGJlIHByb3Blcmx5IHVwZGF0ZWQKK2dycGpxdW90YT08ZmlsZT4JZHVyaW5nIGpvdXJuYWwgcmVwbGF5LiBUaGV5IHJlcGxhY2UgdGhlIGFib3ZlCisJCQlxdW90YSBvcHRpb25zLiBTZWUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgcXVvdGEtdG9vbHMKKwkJCXBhY2thZ2UgZm9yIG1vcmUgZGV0YWlscworCQkJKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXhxdW90YSkuCiAKIGJoCQkoKikJZXh0MyBhc3NvY2lhdGVzIGJ1ZmZlciBoZWFkcyB0byBkYXRhIHBhZ2VzIHRvCiBub2JoCQkJKGEpIGNhY2hlIGRpc2sgYmxvY2sgbWFwcGluZyBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CmluZGV4IDg0ZWIyNjguLmNiOGEzYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKQEAgLTEsNSArMSw1IEBACiBVc2luZyBmbGV4aWJsZSBhcnJheXMgaW4gdGhlIGtlcm5lbAotTGFzdCB1cGRhdGVkIGZvciAyLjYuMzEKK0xhc3QgdXBkYXRlZCBmb3IgMi42LjMyCiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgogCiBMYXJnZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBjYW4gYmUgdW5yZWxpYWJsZSBpbiB0aGUgTGludXgga2VybmVsLgpAQCAtNDAsNiArNDAsMTMgQEAKIHRoZSBjdXJyZW50IGNvZGUsIHVzaW5nIGZsYWdzIHRvIGFzayBmb3IgaGlnaCBtZW1vcnkgaXMgbGlrZWx5IHRvIGxlYWQgdG8KIG5vdGFibHkgdW5wbGVhc2FudCBzaWRlIGVmZmVjdHMuCiAKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZGVmaW5lIGZsZXhpYmxlIGFycmF5cyBhdCBjb21waWxlIHRpbWUgd2l0aDoKKworICAgIERFRklORV9GTEVYX0FSUkFZKG5hbWUsIGVsZW1lbnRfc2l6ZSwgdG90YWwpOworCitUaGlzIG1hY3JvIHdpbGwgcmVzdWx0IGluIGEgZGVmaW5pdGlvbiBvZiBhbiBhcnJheSB3aXRoIHRoZSBnaXZlbiBuYW1lOyB0aGUKK2VsZW1lbnQgc2l6ZSBhbmQgdG90YWwgd2lsbCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBhdCBjb21waWxlIHRpbWUuCisKIFN0b3JpbmcgZGF0YSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBjYWxsIHRvOgogCiAgICAgaW50IGZsZXhfYXJyYXlfcHV0KHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIsCkBAIC03NiwxNiArODMsMzAgQEAKIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgYmFjayBhIHZhbGlkIHBvaW50ZXIgZm9yIGFuIGVsZW1lbnQgd2hpY2gKIGhhcyBuZXZlciBiZWVuIHN0b3JlZCBpbiB0aGUgYXJyYXkuICBNZW1vcnkgZm9yIGFycmF5IGVsZW1lbnRzIGlzIGFsbG9jYXRlZAogb25lIHBhZ2UgYXQgYSB0aW1lOyBhIHNpbmdsZSBhbGxvY2F0aW9uIGNvdWxkIHByb3ZpZGUgbWVtb3J5IGZvciBzZXZlcmFsCi1hZGphY2VudCBlbGVtZW50cy4gIFRoZSBmbGV4aWJsZSBhcnJheSBjb2RlIGRvZXMgbm90IGtub3cgaWYgYSBzcGVjaWZpYwotZWxlbWVudCBoYXMgYmVlbiB3cml0dGVuOyBpdCBvbmx5IGtub3dzIGlmIHRoZSBhc3NvY2lhdGVkIG1lbW9yeSBpcwotcHJlc2VudC4gIFNvIGEgZmxleF9hcnJheV9nZXQoKSBjYWxsIG9uIGFuIGVsZW1lbnQgd2hpY2ggd2FzIG5ldmVyIHN0b3JlZAotaW4gdGhlIGFycmF5IGhhcyB0aGUgcG90ZW50aWFsIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gcmFuZG9tIGRhdGEuICBJZiB0aGUKLWNhbGxlciBkb2VzIG5vdCBoYXZlIGEgc2VwYXJhdGUgd2F5IHRvIGtub3cgd2hpY2ggZWxlbWVudHMgd2VyZSBhY3R1YWxseQotc3RvcmVkLCBpdCBtaWdodCBiZSB3aXNlLCBhdCBsZWFzdCwgdG8gYWRkIEdGUF9aRVJPIHRvIHRoZSBmbGFncyBhcmd1bWVudAotdG8gZW5zdXJlIHRoYXQgYWxsIGVsZW1lbnRzIGFyZSB6ZXJvZWQuCithZGphY2VudCBlbGVtZW50cy4gIEZsZXhpYmxlIGFycmF5IGVsZW1lbnRzIGFyZSBub3JtYWxseSBpbml0aWFsaXplZCB0byB0aGUKK3ZhbHVlIEZMRVhfQVJSQVlfRlJFRSAoZGVmaW5lZCBhcyAweDZjIGluIDxsaW51eC9wb2lzb24uaD4pLCBzbyBlcnJvcnMKK2ludm9sdmluZyB0aGF0IG51bWJlciBwcm9iYWJseSByZXN1bHQgZnJvbSB1c2Ugb2YgdW5zdG9yZWQgYXJyYXkgZW50cmllcy4KK05vdGUgdGhhdCwgaWYgYXJyYXkgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX1pFUk8sIHRoZXkgd2lsbCBiZQoraW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhpcyBwb2lzb25pbmcgd2lsbCBub3QgaGFwcGVuLgogCi1UaGVyZSBpcyBubyB3YXkgdG8gcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuICBJdCBpcyBwb3NzaWJsZSwKLXRob3VnaCwgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyB3aXRoIGEgY2FsbCB0bzoKK0luZGl2aWR1YWwgZWxlbWVudHMgaW4gdGhlIGFycmF5IGNhbiBiZSBjbGVhcmVkIHdpdGg6CisKKyAgICBpbnQgZmxleF9hcnJheV9jbGVhcihzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIGludCBlbGVtZW50X25yKTsKKworVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ2l2ZW4gZWxlbWVudCB0byBGTEVYX0FSUkFZX0ZSRUUgYW5kIHJldHVybgoremVyby4gIElmIHN0b3JhZ2UgZm9yIHRoZSBpbmRpY2F0ZWQgZWxlbWVudCBpcyBub3QgYWxsb2NhdGVkIGZvciB0aGUgYXJyYXksCitmbGV4X2FycmF5X2NsZWFyKCkgd2lsbCByZXR1cm4gLUVJTlZBTCBpbnN0ZWFkLiAgTm90ZSB0aGF0IGNsZWFyaW5nIGFuCitlbGVtZW50IGRvZXMgbm90IHJlbGVhc2UgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0OyB0byByZWR1Y2UgdGhlCithbGxvY2F0ZWQgc2l6ZSBvZiBhbiBhcnJheSwgY2FsbDoKKworICAgIGludCBmbGV4X2FycmF5X3NocmluayhzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXkpOworCitUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIG51bWJlciBvZiBwYWdlcyBvZiBtZW1vcnkgYWN0dWFsbHkgZnJlZWQuCitUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHNjYW5uaW5nIHRoZSBhcnJheSBmb3IgcGFnZXMgY29udGFpbmluZyBub3RoaW5nIGJ1dAorRkxFWF9BUlJBWV9GUkVFIGJ5dGVzLCBzbyAoMSkgaXQgY2FuIGJlIGV4cGVuc2l2ZSwgYW5kICgyKSBpdCB3aWxsIG5vdCB3b3JrCitpZiB0aGUgYXJyYXkncyBwYWdlcyBhcmUgYWxsb2NhdGVkIHdpdGggX19HRlBfWkVSTy4KKworSXQgaXMgcG9zc2libGUgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyBvZiBhbiBhcnJheSB3aXRoIGEgY2FsbCB0bzoKIAogICAgIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKaW5kZXggZGNiZDUwMi4uODJkZWY4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKQEAgLTM1MywxMCArMzUzLDIwIEBACiAJCQkJVW5pdDogbWljcm9XYXR0CiAJCQkJUk8KIAotcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsCVBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwKK3Bvd2VyWzEtKl1fYXZlcmFnZV9pbnRlcnZhbAlQb3dlciB1c2UgYXZlcmFnaW5nIGludGVydmFsLiAgQSBwb2xsCisJCQkJbm90aWZpY2F0aW9uIGlzIHNlbnQgdG8gdGhpcyBmaWxlIGlmIHRoZQorCQkJCWhhcmR3YXJlIGNoYW5nZXMgdGhlIGF2ZXJhZ2luZyBpbnRlcnZhbC4KIAkJCQlVbml0OiBtaWxsaXNlY29uZHMKIAkJCQlSVwogCitwb3dlclsxLSpdX2F2ZXJhZ2VfaW50ZXJ2YWxfbWF4CU1heGltdW0gcG93ZXIgdXNlIGF2ZXJhZ2luZyBpbnRlcnZhbAorCQkJCVVuaXQ6IG1pbGxpc2Vjb25kcworCQkJCVJPCisKK3Bvd2VyWzEtKl1fYXZlcmFnZV9pbnRlcnZhbF9taW4JTWluaW11bSBwb3dlciB1c2UgYXZlcmFnaW5nIGludGVydmFsCisJCQkJVW5pdDogbWlsbGlzZWNvbmRzCisJCQkJUk8KKwogcG93ZXJbMS0qXV9hdmVyYWdlX2hpZ2hlc3QJSGlzdG9yaWNhbCBhdmVyYWdlIG1heGltdW0gcG93ZXIgdXNlCiAJCQkJVW5pdDogbWljcm9XYXR0CiAJCQkJUk8KQEAgLTM2NSw2ICszNzUsMTggQEAKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwogCitwb3dlclsxLSpdX2F2ZXJhZ2VfbWF4CQlBIHBvbGwgbm90aWZpY2F0aW9uIGlzIHNlbnQgdG8KKwkJCQlwb3dlclsxLSpdX2F2ZXJhZ2Ugd2hlbiBwb3dlciB1c2UKKwkJCQlyaXNlcyBhYm92ZSB0aGlzIHZhbHVlLgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJXCisKK3Bvd2VyWzEtKl1fYXZlcmFnZV9taW4JCUEgcG9sbCBub3RpZmljYXRpb24gaXMgc2VudCB0bworCQkJCXBvd2VyWzEtKl1fYXZlcmFnZSB3aGVuIHBvd2VyIHVzZQorCQkJCXNpbmtzIGJlbG93IHRoaXMgdmFsdWUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKwogcG93ZXJbMS0qXV9pbnB1dAkJSW5zdGFudGFuZW91cyBwb3dlciB1c2UKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwpAQCAtMzgxLDYgKzQwMywzOSBAQAogCQkJCWF2ZXJhZ2VfaGlnaGVzdCBhbmQgYXZlcmFnZV9sb3dlc3QuCiAJCQkJV08KIAorcG93ZXJbMS0qXV9hY2N1cmFjeQkJQWNjdXJhY3kgb2YgdGhlIHBvd2VyIG1ldGVyLgorCQkJCVVuaXQ6IFBlcmNlbnQKKwkJCQlSTworCitwb3dlclsxLSpdX2FsYXJtCQkxIGlmIHRoZSBzeXN0ZW0gaXMgZHJhd2luZyBtb3JlIHBvd2VyIHRoYW4gdGhlCisJCQkJY2FwIGFsbG93czsgMCBvdGhlcndpc2UuICBBIHBvbGwgbm90aWZpY2F0aW9uIGlzCisJCQkJc2VudCB0byB0aGlzIGZpbGUgd2hlbiB0aGUgcG93ZXIgdXNlIGV4Y2VlZHMgdGhlCisJCQkJY2FwLiAgVGhpcyBmaWxlIG9ubHkgYXBwZWFycyBpZiB0aGUgY2FwIGlzIGtub3duCisJCQkJdG8gYmUgZW5mb3JjZWQgYnkgaGFyZHdhcmUuCisJCQkJUk8KKworcG93ZXJbMS0qXV9jYXAJCQlJZiBwb3dlciB1c2UgcmlzZXMgYWJvdmUgdGhpcyBsaW1pdCwgdGhlCisJCQkJc3lzdGVtIHNob3VsZCB0YWtlIGFjdGlvbiB0byByZWR1Y2UgcG93ZXIgdXNlLgorCQkJCUEgcG9sbCBub3RpZmljYXRpb24gaXMgc2VudCB0byB0aGlzIGZpbGUgaWYgdGhlCisJCQkJY2FwIGlzIGNoYW5nZWQgYnkgdGhlIGhhcmR3YXJlLiAgVGhlICpfY2FwCisJCQkJZmlsZXMgb25seSBhcHBlYXIgaWYgdGhlIGNhcCBpcyBrbm93biB0byBiZQorCQkJCWVuZm9yY2VkIGJ5IGhhcmR3YXJlLgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJXCisKK3Bvd2VyWzEtKl1fY2FwX2h5c3QJCU1hcmdpbiBvZiBoeXN0ZXJlc2lzIGJ1aWx0IGFyb3VuZCBjYXBwaW5nIGFuZAorCQkJCW5vdGlmaWNhdGlvbi4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSVworCitwb3dlclsxLSpdX2NhcF9tYXgJCU1heGltdW0gY2FwIHRoYXQgY2FuIGJlIHNldC4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSTworCitwb3dlclsxLSpdX2NhcF9taW4JCU1pbmltdW0gY2FwIHRoYXQgY2FuIGJlIHNldC4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSTworCiAqKioqKioqKioqCiAqIEVuZXJneSAqCiAqKioqKioqKioqCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCmluZGV4IGJhOTM3M2YuLjA5OGRlNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSAibGludXgvbGd1ZXN0X2xhdW5jaGVyLmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2NvbmZpZy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlICJsaW51eC92aXJ0aW9fbmV0LmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2Jsay5oIgogI2luY2x1ZGUgImxpbnV4L3ZpcnRpb19jb25zb2xlLmgiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IDc1ZmRkYjQuLjRjN2Y5YWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC0zNTksNiArMzU5LDcgQEAKICAgNXN0YWNrLW5vLWZwCUQ5NjUgNXN0YWNrIHdpdGhvdXQgZnJvbnQgcGFuZWwKICAgZGVsbC0zc3RhY2sJRGVsbCBEaW1lbnNpb24gRTUyMAogICBkZWxsLWJpb3MJRml4ZXMgd2l0aCBEZWxsIEJJT1Mgc2V0dXAKKyAgdm9sa25vYglGaXhlcyB3aXRoIHZvbHVtZS1rbm9iIHdpZGdldCAweDI0CiAgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhENzFCKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CmluZGV4IDk1N2IyMmYuLjgxNzk2OTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKQEAgLTEyMzEsNiArMTIzMSw3IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjZGVmaW5lIF9TVFIoeCkgI3gKICNkZWZpbmUgU1RSKHgpIF9TVFIoeCkKQEAgLTEyNjUsNiArMTI2Niw3IEBACiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICB9CiAKKyAgICAgICBzdHJjYXQoZGVidWdmcywgIi90cmFjaW5nLyIpOwogICAgICAgIGRlYnVnZnNfZm91bmQgPSAxOwogCiAgICAgICAgcmV0dXJuIGRlYnVnZnM7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZmFkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dApAQCAtMCwwICsxLDEzNiBAQAorV2hhdCBpcyBod3BvaXNvbj8KKworVXBjb21pbmcgSW50ZWwgQ1BVcyBoYXZlIHN1cHBvcnQgZm9yIHJlY292ZXJpbmcgZnJvbSBzb21lIG1lbW9yeSBlcnJvcnMKKyhgYE1DQSByZWNvdmVyeScnKS4gVGhpcyByZXF1aXJlcyB0aGUgT1MgdG8gZGVjbGFyZSBhIHBhZ2UgInBvaXNvbmVkIiwKK2tpbGwgdGhlIHByb2Nlc3NlcyBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIGF2b2lkIHVzaW5nIGl0IGluIHRoZSBmdXR1cmUuCisKK1RoaXMgcGF0Y2hraXQgaW1wbGVtZW50cyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGluIHRoZSBWTS4KKworVG8gcXVvdGUgdGhlIG92ZXJ2aWV3IGNvbW1lbnQ6CisKKyAqIEhpZ2ggbGV2ZWwgbWFjaGluZSBjaGVjayBoYW5kbGVyLiBIYW5kbGVzIHBhZ2VzIHJlcG9ydGVkIGJ5IHRoZQorICogaGFyZHdhcmUgYXMgYmVpbmcgY29ycnVwdGVkIHVzdWFsbHkgZHVlIHRvIGEgMmJpdCBFQ0MgbWVtb3J5IG9yIGNhY2hlCisgKiBmYWlsdXJlLgorICoKKyAqIFRoaXMgZm9jdXNzZXMgb24gcGFnZXMgZGV0ZWN0ZWQgYXMgY29ycnVwdGVkIGluIHRoZSBiYWNrZ3JvdW5kLgorICogV2hlbiB0aGUgY3VycmVudCBDUFUgdHJpZXMgdG8gY29uc3VtZSBjb3JydXB0aW9uIHRoZSBjdXJyZW50bHkKKyAqIHJ1bm5pbmcgcHJvY2VzcyBjYW4ganVzdCBiZSBraWxsZWQgZGlyZWN0bHkgaW5zdGVhZC4gVGhpcyBpbXBsaWVzCisgKiB0aGF0IGlmIHRoZSBlcnJvciBjYW5ub3QgYmUgaGFuZGxlZCBmb3Igc29tZSByZWFzb24gaXQncyBzYWZlIHRvCisgKiBqdXN0IGlnbm9yZSBpdCBiZWNhdXNlIG5vIGNvcnJ1cHRpb24gaGFzIGJlZW4gY29uc3VtZWQgeWV0LiBJbnN0ZWFkCisgKiB3aGVuIHRoYXQgaGFwcGVucyBhbm90aGVyIG1hY2hpbmUgY2hlY2sgd2lsbCBoYXBwZW4uCisgKgorICogSGFuZGxlcyBwYWdlIGNhY2hlIHBhZ2VzIGluIHZhcmlvdXMgc3RhdGVzLiBUaGUgdHJpY2t5IHBhcnQKKyAqIGhlcmUgaXMgdGhhdCB3ZSBjYW4gYWNjZXNzIGFueSBwYWdlIGFzeW5jaHJvbm91cyB0byBvdGhlciBWTQorICogdXNlcnMsIGJlY2F1c2UgbWVtb3J5IGZhaWx1cmVzIGNvdWxkIGhhcHBlbiBhbnl0aW1lIGFuZCBhbnl3aGVyZSwKKyAqIHBvc3NpYmx5IHZpb2xhdGluZyBzb21lIG9mIHRoZWlyIGFzc3VtcHRpb25zLiBUaGlzIGlzIHdoeSB0aGlzIGNvZGUKKyAqIGhhcyB0byBiZSBleHRyZW1lbHkgY2FyZWZ1bC4gR2VuZXJhbGx5IGl0IHRyaWVzIHRvIHVzZSBub3JtYWwgbG9ja2luZworICogcnVsZXMsIGFzIGluIGdldCB0aGUgc3RhbmRhcmQgbG9ja3MsIGV2ZW4gaWYgdGhhdCBtZWFucyB0aGUKKyAqIGVycm9yIGhhbmRsaW5nIHRha2VzIHBvdGVudGlhbGx5IGEgbG9uZyB0aW1lLgorICoKKyAqIFNvbWUgb2YgdGhlIG9wZXJhdGlvbnMgaGVyZSBhcmUgc29tZXdoYXQgaW5lZmZpY2llbnQgYW5kIGhhdmUgbm9uCisgKiBsaW5lYXIgYWxnb3JpdGhtaWMgY29tcGxleGl0eSwgYmVjYXVzZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgbm90CisgKiBiZWVuIG9wdGltaXplZCBmb3IgdGhpcyBjYXNlLiBUaGlzIGlzIGluIHBhcnRpY3VsYXIgdGhlIGNhc2UKKyAqIGZvciB0aGUgbWFwcGluZyBmcm9tIGEgdm1hIHRvIGEgcHJvY2Vzcy4gU2luY2UgdGhpcyBjYXNlIGlzIGV4cGVjdGVkCisgKiB0byBiZSByYXJlIHdlIGhvcGUgd2UgY2FuIGdldCBhd2F5IHdpdGggdGhpcy4KKworVGhlIGNvZGUgY29uc2lzdHMgb2YgYSB0aGUgaGlnaCBsZXZlbCBoYW5kbGVyIGluIG1tL21lbW9yeS1mYWlsdXJlLmMsCithIG5ldyBwYWdlIHBvaXNvbiBiaXQgYW5kIHZhcmlvdXMgY2hlY2tzIGluIHRoZSBWTSB0byBoYW5kbGUgcG9pc29uZWQKK3BhZ2VzLgorCitUaGUgbWFpbiB0YXJnZXQgcmlnaHQgbm93IGlzIEtWTSBndWVzdHMsIGJ1dCBpdCB3b3JrcyBmb3IgYWxsIGtpbmRzCitvZiBhcHBsaWNhdGlvbnMuIEtWTSBzdXBwb3J0IHJlcXVpcmVzIGEgcmVjZW50IHFlbXUta3ZtIHJlbGVhc2UuCisKK0ZvciB0aGUgS1ZNIHVzZSB0aGVyZSB3YXMgbmVlZCBmb3IgYSBuZXcgc2lnbmFsIHR5cGUgc28gdGhhdAorS1ZNIGNhbiBpbmplY3QgdGhlIG1hY2hpbmUgY2hlY2sgaW50byB0aGUgZ3Vlc3Qgd2l0aCB0aGUgcHJvcGVyCithZGRyZXNzLiBUaGlzIGluIHRoZW9yeSBhbGxvd3Mgb3RoZXIgYXBwbGljYXRpb25zIHRvIGhhbmRsZQorbWVtb3J5IGZhaWx1cmVzIHRvby4gVGhlIGV4cGVjdGlvbiBpcyB0aGF0IG5lYXIgYWxsIGFwcGxpY2F0aW9ucword29uJ3QgZG8gdGhhdCwgYnV0IHNvbWUgdmVyeSBzcGVjaWFsaXplZCBvbmVzIG1pZ2h0LgorCistLS0KKworVGhlcmUgYXJlIHR3byAoYWN0dWFsbHkgdGhyZWUpIG1vZGkgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgY2FuIGJlIGluOgorCit2bS5tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBzeXNjdGwgc2V0IHRvIHplcm86CisJQWxsIG1lbW9yeSBmYWlsdXJlcyBjYXVzZSBhIHBhbmljLiBEbyBub3QgYXR0ZW1wdCByZWNvdmVyeS4KKwkob24geDg2IHRoaXMgY2FuIGJlIGFsc28gYWZmZWN0ZWQgYnkgdGhlIHRvbGVyYW50IGxldmVsIG9mIHRoZQorCU1DRSBzdWJzeXN0ZW0pCisKK2Vhcmx5IGtpbGwKKwkoY2FuIGJlIGNvbnRyb2xsZWQgZ2xvYmFsbHkgYW5kIHBlciBwcm9jZXNzKQorCVNlbmQgU0lHQlVTIHRvIHRoZSBhcHBsaWNhdGlvbiBhcyBzb29uIGFzIHRoZSBlcnJvciBpcyBkZXRlY3RlZAorCVRoaXMgYWxsb3dzIGFwcGxpY2F0aW9ucyB3aG8gY2FuIHByb2Nlc3MgbWVtb3J5IGVycm9ycyBpbiBhIGdlbnRsZQorCXdheSAoZS5nLiBkcm9wIGFmZmVjdGVkIG9iamVjdCkKKwlUaGlzIGlzIHRoZSBtb2RlIHVzZWQgYnkgS1ZNIHFlbXUuCisKK2xhdGUga2lsbAorCVNlbmQgU0lHQlVTIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHJ1bnMgaW50byB0aGUgY29ycnVwdGVkIHBhZ2UuCisJVGhpcyBpcyBiZXN0IGZvciBtZW1vcnkgZXJyb3IgdW5hd2FyZSBhcHBsaWNhdGlvbnMgYW5kIGRlZmF1bHQKKwlOb3RlIHNvbWUgcGFnZXMgYXJlIGFsd2F5cyBoYW5kbGVkIGFzIGxhdGUga2lsbC4KKworLS0tCisKK1VzZXIgY29udHJvbDoKKwordm0ubWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkKKwlTZWUgc3lzY3RsLnR4dAorCit2bS5tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsCisJRW5hYmxlIGVhcmx5IGtpbGwgbW9kZSBnbG9iYWxseQorCitQUl9NQ0VfS0lMTAorCVNldCBlYXJseS9sYXRlIGtpbGwgbW9kZS9yZXZlcnQgdG8gc3lzdGVtIGRlZmF1bHQKKwlhcmcxOiBQUl9NQ0VfS0lMTF9DTEVBUjogUmV2ZXJ0IHRvIHN5c3RlbSBkZWZhdWx0CisJYXJnMTogUFJfTUNFX0tJTExfU0VUOiBhcmcyIGRlZmluZXMgdGhyZWFkIHNwZWNpZmljIG1vZGUKKwkJUFJfTUNFX0tJTExfRUFSTFk6IEVhcmx5IGtpbGwKKwkJUFJfTUNFX0tJTExfTEFURTogIExhdGUga2lsbAorCQlQUl9NQ0VfS0lMTF9ERUZBVUxUOiBVc2Ugc3lzdGVtIGdsb2JhbCBkZWZhdWx0CitQUl9NQ0VfS0lMTF9HRVQKKwlyZXR1cm4gY3VycmVudCBtb2RlCisKKworLS0tCisKK1Rlc3Rpbmc6CisKK21hZHZpc2UoTUFEVl9QT0lTT04sIC4uLi4pCisJKGFzIHJvb3QpCisJUG9pc29uIGEgcGFnZSBpbiB0aGUgcHJvY2VzcyBmb3IgdGVzdGluZworCisKK2h3cG9pc29uLWluamVjdCBtb2R1bGUgdGhyb3VnaCBkZWJ1Z2ZzCisJL3N5cy9kZWJ1Zy9od3BvaXNvbi9jb3JydXB0LXBmbgorCitJbmplY3QgaHdwb2lzb24gZmF1bHQgYXQgUEZOIGVjaG9lZCBpbnRvIHRoaXMgZmlsZQorCisKK0FyY2hpdGVjdHVyZSBzcGVjaWZpYyBNQ0UgaW5qZWN0b3IKKworeDg2IGhhcyBtY2UtaW5qZWN0LCBtY2UtdGVzdAorCitTb21lIHBvcnRhYmxlIGh3cG9pc29uIHRlc3QgcHJvZ3JhbXMgaW4gbWNlLXRlc3QsIHNlZSBibG93LgorCistLS0KKworUmVmZXJlbmNlczoKKworaHR0cDovL2hhbG9iYXRlcy5kZS9tY2UtbGMwOS0yLnBkZgorCU92ZXJ2aWV3IHByZXNlbnRhdGlvbiBmcm9tIExpbnV4Q29uIDA5CisKK2dpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvY3B1L21jZS9tY2UtdGVzdC5naXQKKwlUZXN0IHN1aXRlIChod3BvaXNvbiBzcGVjaWZpYyBwb3J0YWJsZSB0ZXN0cyBpbiB0c3JjKQorCitnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2NwdS9tY2UvbWNlLWluamVjdC5naXQKKwl4ODYgc3BlY2lmaWMgaW5qZWN0b3IKKworCistLS0KKworTGltaXRhdGlvbnM6CisKKy0gTm90IGFsbCBwYWdlIHR5cGVzIGFyZSBzdXBwb3J0ZWQgYW5kIG5ldmVyIHdpbGwuIE1vc3Qga2VybmVsIGludGVybmFsCitvYmplY3RzIGNhbm5vdCBiZSByZWNvdmVyZWQsIG9ubHkgTFJVIHBhZ2VzIGZvciBub3cuCistIFJpZ2h0IG5vdyBodWdlcGFnZSBzdXBwb3J0IGlzIG1pc3NpbmcuCisKKy0tLQorQW5kaSBLbGVlbiwgT2N0IDIwMDkKKwpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBjZjY5MDkxLi5hMWEyYWNlIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNjUsNDMgKzY1LDUxIEBACiAKIDguCUhhcHB5IGhhY2tpbmcuCiAKLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Rlc2NyaXB0aW9ucyBvZiBzZWN0aW9uIGVudHJpZXM6CiAKLU1haW50YWluZXJzIExpc3QgKHRyeSB0byBsb29rIGZvciBtb3N0IHByZWNpc2UgYXJlYXMgZmlyc3QpCisJUDogUGVyc29uIChvYnNvbGV0ZSkKKwlNOiBNYWlsIHBhdGNoZXMgdG86IEZ1bGxOYW1lIDxhZGRyZXNzQGRvbWFpbj4KKwlMOiBNYWlsaW5nIGxpc3QgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIGFyZWEKKwlXOiBXZWItcGFnZSB3aXRoIHN0YXR1cy9pbmZvCisJVDogU0NNIHRyZWUgdHlwZSBhbmQgbG9jYXRpb24uICBUeXBlIGlzIG9uZSBvZjogZ2l0LCBoZywgcXVpbHQsIHN0Z2l0LgorCVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisJICAgU3VwcG9ydGVkOglTb21lb25lIGlzIGFjdHVhbGx5IHBhaWQgdG8gbG9vayBhZnRlciB0aGlzLgorCSAgIE1haW50YWluZWQ6CVNvbWVvbmUgYWN0dWFsbHkgbG9va3MgYWZ0ZXIgaXQuCisJICAgT2RkIEZpeGVzOglJdCBoYXMgYSBtYWludGFpbmVyIGJ1dCB0aGV5IGRvbid0IGhhdmUgdGltZSB0byBkbworCQkJbXVjaCBvdGhlciB0aGFuIHRocm93IHRoZSBvZGQgcGF0Y2ggaW4uIFNlZSBiZWxvdy4uCisJICAgT3JwaGFuOglObyBjdXJyZW50IG1haW50YWluZXIgW2J1dCBtYXliZSB5b3UgY291bGQgdGFrZSB0aGUKKwkJCXJvbGUgYXMgeW91IHdyaXRlIHlvdXIgbmV3IGNvZGVdLgorCSAgIE9ic29sZXRlOglPbGQgY29kZS4gU29tZXRoaW5nIHRhZ2dlZCBvYnNvbGV0ZSBnZW5lcmFsbHkgbWVhbnMKKwkJCWl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIHN5c3RlbSBhbmQgeW91CisJCQlzaG91bGQgYmUgdXNpbmcgdGhhdC4KKwlGOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCB3aWxkY2FyZCBwYXR0ZXJucy4KKwkgICBBIHRyYWlsaW5nIHNsYXNoIGluY2x1ZGVzIGFsbCBmaWxlcyBhbmQgc3ViZGlyZWN0b3J5IGZpbGVzLgorCSAgIEY6CWRyaXZlcnMvbmV0LwlhbGwgZmlsZXMgaW4gYW5kIGJlbG93IGRyaXZlcnMvbmV0CisJICAgRjoJZHJpdmVycy9uZXQvKglhbGwgZmlsZXMgaW4gZHJpdmVycy9uZXQsIGJ1dCBub3QgYmVsb3cKKwkgICBGOgkqL25ldC8qCQlhbGwgZmlsZXMgaW4gImFueSB0b3AgbGV2ZWwgZGlyZWN0b3J5Ii9uZXQKKwkgICBPbmUgcGF0dGVybiBwZXIgbGluZS4gIE11bHRpcGxlIEY6IGxpbmVzIGFjY2VwdGFibGUuCisJWDogRmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgYXJlIE5PVCBtYWludGFpbmVkLCBzYW1lIHJ1bGVzIGFzIEY6CisJICAgRmlsZXMgZXhjbHVzaW9ucyBhcmUgdGVzdGVkIGJlZm9yZSBmaWxlIG1hdGNoZXMuCisJICAgQ2FuIGJlIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIGEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBmb3IgaW5zdGFuY2U6CisJICAgRjoJbmV0LworCSAgIFg6CW5ldC9pcHY2LworCSAgIG1hdGNoZXMgYWxsIGZpbGVzIGluIGFuZCBiZWxvdyBuZXQgZXhjbHVkaW5nIG5ldC9pcHY2LworCUs6IEtleXdvcmQgcGVybCBleHRlbmRlZCByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGNvbnRlbnQgaW4gYQorCSAgIHBhdGNoIG9yIGZpbGUuICBGb3IgaW5zdGFuY2U6CisJICAgSzogb2ZfZ2V0X3Byb2ZpbGUKKwkgICAgICBtYXRjaGVzIHBhdGNoZXMgb3IgZmlsZXMgdGhhdCBjb250YWluICJvZl9nZXRfcHJvZmlsZSIKKwkgICBLOiBcYihwcmludGt8cHJfKGluZm98ZXJyKSlcYgorCSAgICAgIG1hdGNoZXMgcGF0Y2hlcyBvciBmaWxlcyB0aGF0IGNvbnRhaW4gb25lIG9yIG1vcmUgb2YgdGhlIHdvcmRzCisJICAgICAgcHJpbnRrLCBwcl9pbmZvIG9yIHByX2VycgorCSAgIE9uZSByZWdleCBwYXR0ZXJuIHBlciBsaW5lLiAgTXVsdGlwbGUgSzogbGluZXMgYWNjZXB0YWJsZS4KIAogTm90ZTogRm9yIHRoZSBoYXJkIG9mIHRoaW5raW5nLCB0aGlzIGxpc3QgaXMgbWVhbnQgdG8gcmVtYWluIGluIGFscGhhYmV0aWNhbAogb3JkZXIuIElmIHlvdSBjb3VsZCBhZGQgeW91cnNlbHZlcyB0byBpdCBpbiBhbHBoYWJldGljYWwgb3JkZXIgdGhhdCB3b3VsZCBiZQogc28gbXVjaCBlYXNpZXIgW0VkXQogCi1QOiBQZXJzb24gKG9ic29sZXRlKQotTTogTWFpbCBwYXRjaGVzIHRvOiBGdWxsTmFtZSA8YWRkcmVzc0Bkb21haW4+Ci1MOiBNYWlsaW5nIGxpc3QgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIGFyZWEKLVc6IFdlYi1wYWdlIHdpdGggc3RhdHVzL2luZm8KLVQ6IFNDTSB0cmVlIHR5cGUgYW5kIGxvY2F0aW9uLiAgVHlwZSBpcyBvbmUgb2Y6IGdpdCwgaGcsIHF1aWx0LCBzdGdpdC4KLVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CitNYWludGFpbmVycyBMaXN0ICh0cnkgdG8gbG9vayBmb3IgbW9zdCBwcmVjaXNlIGFyZWFzIGZpcnN0KQogCi0JU3VwcG9ydGVkOglTb21lb25lIGlzIGFjdHVhbGx5IHBhaWQgdG8gbG9vayBhZnRlciB0aGlzLgotCU1haW50YWluZWQ6CVNvbWVvbmUgYWN0dWFsbHkgbG9va3MgYWZ0ZXIgaXQuCi0JT2RkIEZpeGVzOglJdCBoYXMgYSBtYWludGFpbmVyIGJ1dCB0aGV5IGRvbid0IGhhdmUgdGltZSB0byBkbwotCQkJbXVjaCBvdGhlciB0aGFuIHRocm93IHRoZSBvZGQgcGF0Y2ggaW4uIFNlZSBiZWxvdy4uCi0JT3JwaGFuOgkJTm8gY3VycmVudCBtYWludGFpbmVyIFtidXQgbWF5YmUgeW91IGNvdWxkIHRha2UgdGhlCi0JCQlyb2xlIGFzIHlvdSB3cml0ZSB5b3VyIG5ldyBjb2RlXS4KLQlPYnNvbGV0ZToJT2xkIGNvZGUuIFNvbWV0aGluZyB0YWdnZWQgb2Jzb2xldGUgZ2VuZXJhbGx5IG1lYW5zCi0JCQlpdCBoYXMgYmVlbiByZXBsYWNlZCBieSBhIGJldHRlciBzeXN0ZW0gYW5kIHlvdQotCQkJc2hvdWxkIGJlIHVzaW5nIHRoYXQuCi0KLUY6IEZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHdpbGRjYXJkIHBhdHRlcm5zLgotICAgQSB0cmFpbGluZyBzbGFzaCBpbmNsdWRlcyBhbGwgZmlsZXMgYW5kIHN1YmRpcmVjdG9yeSBmaWxlcy4KLQlGOglkcml2ZXJzL25ldC8JYWxsIGZpbGVzIGluIGFuZCBiZWxvdyBkcml2ZXJzL25ldAotCUY6CWRyaXZlcnMvbmV0LyoJYWxsIGZpbGVzIGluIGRyaXZlcnMvbmV0LCBidXQgbm90IGJlbG93Ci0JRjoJKi9uZXQvKgkJYWxsIGZpbGVzIGluICJhbnkgdG9wIGxldmVsIGRpcmVjdG9yeSIvbmV0Ci0gICBPbmUgcGF0dGVybiBwZXIgbGluZS4gIE11bHRpcGxlIEY6IGxpbmVzIGFjY2VwdGFibGUuCi1YOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgTk9UIG1haW50YWluZWQsIHNhbWUgcnVsZXMgYXMgRjoKLSAgIEZpbGVzIGV4Y2x1c2lvbnMgYXJlIHRlc3RlZCBiZWZvcmUgZmlsZSBtYXRjaGVzLgotICAgQ2FuIGJlIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIGEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBmb3IgaW5zdGFuY2U6Ci0JRjoJbmV0LwotCVg6CW5ldC9pcHY2LwotICAgbWF0Y2hlcyBhbGwgZmlsZXMgaW4gYW5kIGJlbG93IG5ldCBleGNsdWRpbmcgbmV0L2lwdjYvCisJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIDNDNTA1IE5FVFdPUksgRFJJVkVSCiBNOglQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CkBAIC01NzcsNiArNTg1LDExIEBACiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogCitBUk0vQ09OVEVDIE1JQ1JPOSBNQUNISU5FIFNVUFBPUlQKK006CUh1YmVydCBGZXVyc3RlaW4gPGh1YmVydC5mZXVyc3RlaW5AY29udGVjLmF0PgorUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMKKwogQVJNL0NPUkdJIE1BQ0hJTkUgU1VQUE9SVAogTToJUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAcnBzeXMubmV0PgogUzoJTWFpbnRhaW5lZApAQCAtOTg3LDcgKzEwMDAsNyBAQAogCiBBVE0KIE06CUNoYXMgV2lsbGlhbXMgPGNoYXNAY21mLm5ybC5uYXZ5Lm1pbD4KLUw6CWxpbnV4LWF0bS1nZW5lcmFsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKK0w6CWxpbnV4LWF0bS1nZW5lcmFsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbGludXgtYXRtLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZApAQCAtMTQ3NSw2ICsxNDg4LDcgQEAKIAogQ09SRVRFTVAgSEFSRFdBUkUgTU9OSVRPUklORyBEUklWRVIKIE06CVJ1ZG9sZiBNYXJlayA8ci5tYXJla0Bhc3NlbWJsZXIuY3o+CitNOglIdWF4dSBXYW4gPGh1YXh1LndhbkBpbnRlbC5jb20+CiBMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2h3bW9uL2NvcmV0ZW1wCkBAIC0yMTQ2LDcgKzIxNjAsNyBAQAogRjoJYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvCiBGOglhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vKnFlLmgKIAotRlJFRVNDQUxFIFVTQiBQRVJJUEhFUklBTCBEUklWRVJTCitGUkVFU0NBTEUgVVNCIFBFUklQSEVSQUwgRFJJVkVSUwogTToJTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCkBAIC0yMTk3LDE4ICsyMjExLDYgQEAKIEY6CWZzL2ZzY2FjaGUvCiBGOglpbmNsdWRlL2xpbnV4L2ZzY2FjaGUqLmgKIAotVFJBQ0lORwotTToJU3RldmVuIFJvc3RlZHQgPHJvc3RlZHRAZ29vZG1pcy5vcmc+Ci1NOglGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+Ci1NOglJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGlwL2xpbnV4LTIuNi10aXAuZ2l0IHRyYWNpbmcvY29yZQotUzoJTWFpbnRhaW5lZAotRjoJRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0Ci1GOglhcmNoLyovKi8qL2Z0cmFjZS5oCi1GOglhcmNoLyova2VybmVsL2Z0cmFjZS5jCi1GOglpbmNsdWRlLyovZnRyYWNlLmggaW5jbHVkZS90cmFjZS8gaW5jbHVkZS9saW51eC90cmFjZSouaAotRjoJa2VybmVsL3RyYWNlLwotCiBGVUpJVFNVIEZSLVYgKEZSVikgUE9SVAogTToJRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4KIFM6CU1haW50YWluZWQKQEAgLTIyNjcsOSArMjI2OSw4IEBACiBGOglpbmNsdWRlL2FzbS1nZW5lcmljCiAKIEdFTkVSSUMgVUlPIERSSVZFUiBGT1IgUENJIERFVklDRVMKLU06CU1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+CitNOgkiTWljaGFlbCBTLiBUc2lya2luIiA8bXN0QHJlZGhhdC5jb20+CiBMOglrdm1Admdlci5rZXJuZWwub3JnCi1MOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvdWlvL3Vpb19wY2lfZ2VuZXJpYy5jCiAKQEAgLTI2MTAsNiArMjYxMSw3IEBACiBXOglodHRwOi8vd3d3LmxpbnV4MTM5NC5vcmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2llZWUxMzk0L2xpbnV4MTM5NC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0CiBGOglkcml2ZXJzL2llZWUxMzk0LwogCiBJRUVFIDEzOTQgUkFXIEkvTyBEUklWRVIKQEAgLTI5OTgsOCArMzAwMCw4IEBACiAKIEtFUk5FTCBKQU5JVE9SUwogTDoJa2VybmVsLWphbml0b3JzQHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3d3dy5rZXJuZWxqYW5pdG9ycy5vcmcvCi1TOglNYWludGFpbmVkCitXOglodHRwOi8vamFuaXRvci5rZXJuZWxuZXdiaWVzLm9yZy8KK1M6CU9kZCBGaXhlcwogCiBLRVJORUwgTkZTRCwgU1VOUlBDLCBBTkQgTE9DS0QgU0VSVkVSUwogTToJIkouIEJydWNlIEZpZWxkcyIgPGJmaWVsZHNAZmllbGRzZXMub3JnPgpAQCAtMzY2MSw2ICszNjYzLDcgQEAKIE06CSJEYXZpZCBTLiBNaWxsZXIiIDxkYXZlbUBkYXZlbWxvZnQubmV0PgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2VuL05ldAorVzoJaHR0cDovL3BhdGNod29yay5vemxhYnMub3JnL3Byb2plY3QvbmV0ZGV2L2xpc3QvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2RhdmVtL25ldC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiBGOgluZXQvCkBAIC0zNzc4LDcgKzM3ODEsNyBAQAogRjoJZHJpdmVycy92aWRlby9udmlkaWEvCiAKIE9NQVAgU1VQUE9SVAotTToJIlRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+IiA8dG9ueUBhdG9taWRlLmNvbT4KK006CVRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5tdXJ1LmNvbS9saW51eC9vbWFwLwogVzoJaHR0cDovL2xpbnV4Lm9tYXAuY29tLwpAQCAtMzg4Myw2ICszODg2LDE1IEBACiBGOglEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW9jb3JlcwogRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vY29yZXMuYwogCitPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUUKK006CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KK0w6CWRldmljZXRyZWUtZGlzY3Vzc0BsaXN0cy5vemxhYnMub3JnCitXOglodHRwOi8vZmR0LnNlY3JldGxhYi5jYQorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9vZgorRjoJaW5jbHVkZS9saW51eC9vZiouaAorSzoJb2ZfZ2V0X3Byb3BlcnR5CisKIE9QUk9GSUxFCiBNOglSb2JlcnQgUmljaHRlciA8cm9iZXJ0LnJpY2h0ZXJAYW1kLmNvbT4KIEw6CW9wcm9maWxlLWxpc3RAbGlzdHMuc2YubmV0CkBAIC00MzE4LDcgKzQzMzAsNyBAQAogUkFMSU5LIFJUMlgwMCBXSVJFTEVTUyBMQU4gRFJJVkVSCiBQOglydDJ4MDAgcHJvamVjdAogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCi1MOgl1c2Vyc0BydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbQorTDoJdXNlcnNAcnQyeDAwLnNlcmlhbG1vbmtleS5jb20gKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tLwogUzoJTWFpbnRhaW5lZAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9pdmQvcnQyeDAwLmdpdApAQCAtNDUyNywxMiArNDUzOSwxMSBAQAogRjoJaW5jbHVkZS9saW51eC9zY2hlZC5oCiAKIFNDT1JFIEFSQ0hJVEVDVFVSRQotUDoJQ2hlbiBMaXFpbgotTToJbGlxaW4uY2hlbkBzdW5wbHVzY3QuY29tCi1QOglMZW5ub3ggV3UKLU06CWxlbm5veC53dUBnbWFpbC5jb20KK006CUNoZW4gTGlxaW4gPGxpcWluLmNoZW5Ac3VucGx1c2N0LmNvbT4KK006CUxlbm5veCBXdSA8bGVubm94Lnd1QGdtYWlsLmNvbT4KIFc6CWh0dHA6Ly93d3cuc3VucGx1c2N0LmNvbQogUzoJU3VwcG9ydGVkCitGOglhcmNoL3Njb3JlLwogCiBTQ1NJIENEUk9NIERSSVZFUgogTToJSmVucyBBeGJvZSA8YXhib2VAa2VybmVsLmRrPgpAQCAtNDYwNSwyMCArNDYxNiwyMCBAQAogRjoJZHJpdmVycy9tbWMvaG9zdC9zZHJpY29oX2NzLmMKIAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSAoU0RIQ0kpIERSSVZFUgotUzogICAgIE9ycGhhbgotTDogICAgIGxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKLUY6ICAgICBkcml2ZXJzL21tYy9ob3N0L3NkaGNpLioKK1M6CU9ycGhhbgorTDoJbGludXgtbW1jQHZnZXIua2VybmVsLm9yZworRjoJZHJpdmVycy9tbWMvaG9zdC9zZGhjaS4qCiAKIFNFQ1VSRSBESUdJVEFMIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UsIE9QRU4gRklSTVdBUkUgQklORElOR1MgKFNESENJLU9GKQogTToJQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZwotTDogICAgIGxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKK0w6CWxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKLUY6ICAgICBkcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLioKK0Y6CWRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuKgogCiBTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFIChTREhDSSkgU0FNU1VORyBEUklWRVIKIE06CUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLUw6ICAgICBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCitMOglsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCiAKQEAgLTQ3MjEsOCArNDczMiw3IEBACiBGOglkcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwKgogCiBTSU1QTEUgRklSTVdBUkUgSU5URVJGQUNFIChTRkkpCi1QOglMZW4gQnJvd24KLU06CWxlbmJAa2VybmVsLm9yZworTToJTGVuIEJyb3duIDxsZW5iQGtlcm5lbC5vcmc+CiBMOglzZmktZGV2ZWxAc2ltcGxlZmlybXdhcmUub3JnCiBXOglodHRwOi8vc2ltcGxlZmlybXdhcmUub3JnLwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9sZW5iL2xpbnV4LXNmaS0yLjYuZ2l0CkBAIC01MTcwLDYgKzUxODAsMjAgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvY2hhci90cG0vCiAKK1RSQUNJTkcKK006CVN0ZXZlbiBSb3N0ZWR0IDxyb3N0ZWR0QGdvb2RtaXMub3JnPgorTToJRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgorTToJSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RpcC9saW51eC0yLjYtdGlwLmdpdCB0cmFjaW5nL2NvcmUKK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorRjoJYXJjaC8qLyovKi9mdHJhY2UuaAorRjoJYXJjaC8qL2tlcm5lbC9mdHJhY2UuYworRjoJaW5jbHVkZS8qL2Z0cmFjZS5oCitGOglpbmNsdWRlL2xpbnV4L3RyYWNlKi5oCitGOglpbmNsdWRlL3RyYWNlLworRjoJa2VybmVsL3RyYWNlLworCiBUUklWSUFMIFBBVENIRVMKIE06CUppcmkgS29zaW5hIDx0cml2aWFsQGtlcm5lbC5vcmc+CiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2ppa29zL3RyaXZpYWwuZ2l0CkBAIC01NjU4LDYgKzU2ODIsMTMgQEAKIEY6CWRyaXZlcnMvdmx5bnEvdmx5bnEuYwogRjoJaW5jbHVkZS9saW51eC92bHlucS5oCiAKK1ZNV0FSRSBWTVhORVQzIEVUSEVSTkVUIERSSVZFUgorTTogICAgIFNocmV5YXMgQmhhdGV3YXJhIDxzYmhhdGV3YXJhQHZtd2FyZS5jb20+CitNOiAgICAgVk13YXJlLCBJbmMuIDxwdi1kcml2ZXJzQHZtd2FyZS5jb20+CitMOiAgICAgbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzogICAgIE1haW50YWluZWQKK0Y6ICAgICBkcml2ZXJzL25ldC92bXhuZXQzLworCiBWT0xUQUdFIEFORCBDVVJSRU5UIFJFR1VMQVRPUiBGUkFNRVdPUksKIE06CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBNOglNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KQEAgLTU3MjksOCArNTc2MCw3IEBACiBGOglkcml2ZXJzL3Njc2kvd2Q3MDAwLmMKIAogV0lOQk9ORCBDSVIgRFJJVkVSCi1QOglEYXZpZCBI5HJkZW1hbgotTToJZGF2aWRAaGFyZGVtYW4ubnUKK006CURhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2lucHV0L21pc2Mvd2luYm9uZC1jaXIuYwogCkBAIC01Nzg3LDkgKzU4MTcsNyBAQAogRjoJaW5jbHVkZS9saW51eC93bTk3eHguaAogCiBXT0xGU09OIE1JQ1JPRUxFQ1RST05JQ1MgUE1JQyBEUklWRVJTCi1QOglNYXJrIEJyb3duCi1NOglicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbQotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworTToJTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CiBUOglnaXQgZ2l0Oi8vb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tL2xpbnV4LTIuNi1hdWRpb3BsdXMKIFc6CWh0dHA6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbm9kZS84CiBTOglTdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggOTI3ZDdhMy4uOTQyNWQxZCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKIFNVQkxFVkVMID0gMzIKLUVYVFJBVkVSU0lPTiA9IC1yYzQKK0VYVFJBVkVSU0lPTiA9IC1yYzUKIE5BTUUgPSBNYW4tRWF0aW5nIFNlYWxzIG9mIEFudGlxdWl0eQogCiAjICpET0NVTUVOVEFUSU9OKgpAQCAtMTc5LDQ2ICsxNzksOSBAQAogIyBBbHRlcm5hdGl2ZWx5IENST1NTX0NPTVBJTEUgY2FuIGJlIHNldCBpbiB0aGUgZW52aXJvbm1lbnQuCiAjIERlZmF1bHQgdmFsdWUgZm9yIENST1NTX0NPTVBJTEUgaXMgbm90IHRvIHByZWZpeCBleGVjdXRhYmxlcwogIyBOb3RlOiBTb21lIGFyY2hpdGVjdHVyZXMgYXNzaWduIENST1NTX0NPTVBJTEUgaW4gdGhlaXIgYXJjaC8qL01ha2VmaWxlCi0jCi0jIFRvIGZvcmNlIEFSQ0ggYW5kIENST1NTX0NPTVBJTEUgc2V0dGluZ3MgaW5jbHVkZSBrZXJuZWwuKiBmaWxlcwotIyBpbiB0aGUga2VybmVsIHRyZWUgLSBkbyBub3QgcGF0Y2ggdGhpcyBmaWxlLgogZXhwb3J0IEtCVUlMRF9CVUlMREhPU1QgOj0gJChTVUJBUkNIKQotCi0jIEtidWlsZCBzYXZlIHRoZSBBUkNIIGFuZCBDUk9TU19DT01QSUxFIHNldHRpbmcgaW4ga2VybmVsLiogZmlsZXMuCi0jIFJlc3RvcmUgdGhlc2Ugc2V0dGluZ3MgYW5kIGNoZWNrIHRoYXQgdXNlciBkaWQgbm90IHNwZWNpZnkKLSMgY29uZmxpY3RpbmcgdmFsdWVzLgotCi1zYXZlZF9hcmNoICA6PSAkKHNoZWxsIGNhdCBpbmNsdWRlL2dlbmVyYXRlZC9rZXJuZWwuYXJjaCAgMj4gL2Rldi9udWxsKQotc2F2ZWRfY3Jvc3MgOj0gJChzaGVsbCBjYXQgaW5jbHVkZS9nZW5lcmF0ZWQva2VybmVsLmNyb3NzIDI+IC9kZXYvbnVsbCkKLQotaWZuZXEgKCQoQ1JPU1NfQ09NUElMRSksKQotICAgICAgICBpZm5lcSAoJChzYXZlZF9jcm9zcyksKQotICAgICAgICAgICAgICAgIGlmbmVxICgkKENST1NTX0NPTVBJTEUpLCQoc2F2ZWRfY3Jvc3MpKQotICAgICAgICAgICAgICAgICAgICAgICAgJChlcnJvciBDUk9TU19DT01QSUxFIGNoYW5nZWQgZnJvbSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkKHNhdmVkX2Nyb3NzKSIgdG8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gIiQoQ1JPU1NfQ09NUElMRSkiLiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgIm1ha2UgbXJwcm9wZXIiIHRvIGZpeCBpdCB1cCkKLSAgICAgICAgICAgICAgICBlbmRpZgotICAgICAgICBlbmRpZgotZWxzZQotICAgIENST1NTX0NPTVBJTEUgOj0gJChzYXZlZF9jcm9zcykKLWVuZGlmCi0KLWlmbmVxICgkKEFSQ0gpLCkKLSAgICAgICAgaWZuZXEgKCQoc2F2ZWRfYXJjaCksKQotICAgICAgICAgICAgICAgIGlmbmVxICgkKHNhdmVkX2FyY2gpLCQoQVJDSCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAkKGVycm9yIEFSQ0ggY2hhbmdlZCBmcm9tIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiQoc2F2ZWRfYXJjaCkiIHRvICIkKEFSQ0gpIi4gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlICJtYWtlIG1ycHJvcGVyIiB0byBmaXggaXQgdXApCi0gICAgICAgICAgICAgICAgZW5kaWYKLSAgICAgICAgZW5kaWYKLWVsc2UKLSAgICAgICAgaWZuZXEgKCQoc2F2ZWRfYXJjaCksKQotICAgICAgICAgICAgICAgIEFSQ0ggOj0gJChzYXZlZF9hcmNoKQotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQVJDSCA6PSAkKFNVQkFSQ0gpCi0gICAgICAgIGVuZGlmCi1lbmRpZgorQVJDSAkJPz0gJChTVUJBUkNIKQorQ1JPU1NfQ09NUElMRQk/PQogCiAjIEFyY2hpdGVjdHVyZSBhcyBwcmVzZW50IGluIGNvbXBpbGUuaAogVVRTX01BQ0hJTkUgCTo9ICQoQVJDSCkKQEAgLTQ4MywxMSArNDQ2LDYgQEAKIGluY2x1ZGUgJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvTWFrZWZpbGUKIGV4cG9ydCBLQlVJTERfREVGQ09ORklHIEtCVUlMRF9LQ09ORklHCiAKLSMgc2F2ZSBBUkNIICYgQ1JPU1NfQ09NUElMRSBzZXR0aW5ncwotJChzaGVsbCBta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVjaG8gJChBUkNIKSAgICAgICAgICA+IGluY2x1ZGUvZ2VuZXJhdGVkL2tlcm5lbC5hcmNoICYmIFwKLSAgICAgICAgZWNobyAkKENST1NTX0NPTVBJTEUpID4gaW5jbHVkZS9nZW5lcmF0ZWQva2VybmVsLmNyb3NzKQotCiBjb25maWc6IHNjcmlwdHNfYmFzaWMgb3V0cHV0bWFrZWZpbGUgRk9SQ0UKIAkkKFEpbWtkaXIgLXAgaW5jbHVkZS9saW51eCBpbmNsdWRlL2NvbmZpZwogCSQoUSkkKE1BS0UpICQoYnVpbGQpPXNjcmlwdHMva2NvbmZpZyAkQApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKaW5kZXggOGRhNzVkZS4uMjY0ZjUyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCkBAIC0zMDQsNyArMzA0LDcgQEAKIENPTkZJR19aQk9PVF9ST01fVEVYVD0weDEwQzA4MDAwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDEwMjAwMDAwCiAjIENPTkZJR19aQk9PVF9ST00gaXMgbm90IHNldAotQ09ORklHX0NNRExJTkU9InJvb3Q9MWYwMyByb290ZnN0eXBlPWpmZnMyIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiCitDT05GSUdfQ01ETElORT0icm9vdD0xZjAzIHJvb3Rmc3R5cGU9amZmczIgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKICMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKaW5kZXggMzU3ZDQwMi4uYjNjOGNjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZwpAQCAtOTY5LDcgKzk2OSw2IEBACiAjCiBDT05GSUdfVVNCX09UR19VVElMUz15CiAjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9VU0I9eQogIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCmluZGV4IDdkNjFhZTYuLjk1M2JhMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjMwotIyBUaHUgSnVsIDE2IDIzOjM2OjEwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgU2F0IE9jdCAxNyAyMzozMjoyNCAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15CitDT05GSUdfSEFWRV9UQ009eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNDQsMTEgKzQ0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTgwLDE3ICs4MSwxNSBAQAogIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIwogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMzMsNiArMTMyLDcgQEAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CkBAIC0xNDcsNiArMTQ3LDcgQEAKICMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNjksMTEgKzE3MCwxMyBAQAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfVTMwMD15CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CiAKICMKICMgU1QtRXJpY3Nzb24gQUIgVTMwMC9VMzMwL1UzMzUvVTM2NSBQbGF0Zm9ybQpAQCAtMTk1LDYgKzE5OCw3IEBACiBDT05GSUdfTUFDSF9VMzAwX0RVQUxfUkFNPXkKIENPTkZJR19VMzAwX0RFQlVHPXkKICMgQ09ORklHX01BQ0hfVTMwMF9TRU1JX0lTX1NIQVJFRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9VMzAwX1NQSURVTU1ZPXkKIAogIwogIyBBbGwgdGhlIHNldHRpbmdzIGJlbG93IG11c3QgbWF0Y2ggdGhlIGJvb3Rsb2FkZXIncyBzZXR0aW5ncwpAQCAtMjA3LDcgKzIxMSw3IEBACiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWT15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQpAQCAtMjIyLDYgKzIyNiw3IEBACiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQogQ09ORklHX0FSTV9WSUM9eQogQ09ORklHX0FSTV9WSUNfTlI9MgogQ09ORklHX0NPTU1PTl9DTEtERVY9eQpAQCAtMjQ1LDYgKzI1MCw4IEBACiAjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQpAQCAtMjY1LDYgKzI3Miw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CkBAIC0zMTMsNiArMzIxLDcgQEAKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKQEAgLTM1MSw2ICszNjAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5MSw2ICs0MDEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQwMiw5ICs0MTMsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldApAQCAtNDUzLDYgKzQ2NCw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTIwLDYgKzUzMiw3IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CkBAIC01NDAsMTIgKzU1MywxNiBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKQEAgLTU5Nyw2ICs2MTQsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02MjksOSArNjQ3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC02NTMsMTYgKzY2OCwyMSBAQAogIwogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKICMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3ODIgaXMgbm90IHNldAogIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTY5MCwxMCArNzEwLDI0IEBACiAjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiBDT05GSUdfQUIzMTAwX0NPUkU9eQorQ09ORklHX0FCMzEwMF9PVFA9eQogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUj15CisjIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfQUIzMTAwPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1ggaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc5Miw5ICs4MjYsMTAgQEAKICMKIENPTkZJR19NTUNfQVJNTU1DST15CiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQogCkBAIC04MjAsMTAgKzg1NSwxMCBAQAogIwogIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCiAjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC04NjMsNiArODk4LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTg3OCwyNyArOTE0LDI1IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0FCMzEwMD15CiAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX1BMMDMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUEwwMzEgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQ09IOTAxMzMxPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKIAogIwogIyBETUEgRGV2aWNlcwogIwogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci1DT05GSUdfUkVHVUxBVE9SPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTkxMyw2ICs5NDcsNyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTk3NSw3ICsxMDEwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzMyw2ICsxMDY3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNjYsMTEgKzExMDEsMTMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTIxLDYgKzExNTgsNyBAQAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA2M2E0ODFmLi4zMzhmZjE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtODQsNyArODQsNyBAQAogCSpwID0gcmVzIHwgbWFzazsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuIHJlcyAmIG1hc2s7CisJcmV0dXJuIChyZXMgJiBtYXNrKSAhPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMTAxLDcgKzEwMSw3IEBACiAJKnAgPSByZXMgJiB+bWFzazsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuIHJlcyAmIG1hc2s7CisJcmV0dXJuIChyZXMgJiBtYXNrKSAhPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMTE4LDcgKzExOCw3IEBACiAJKnAgPSByZXMgXiBtYXNrOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlyZXR1cm4gcmVzICYgbWFzazsKKwlyZXR1cm4gKHJlcyAmIG1hc2spICE9IDA7CiB9CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBjM2I5MTFlLi42YWFjM2Y1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaApAQCAtOTgsNiArOTgsOSBAQAogZXh0ZXJuIGludCBhcm1fZWxmX3JlYWRfaW1wbGllc19leGVjKGNvbnN0IHN0cnVjdCBlbGYzMl9oZHIgKiwgaW50KTsKICNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LHN0aykgYXJtX2VsZl9yZWFkX2ltcGxpZXNfZXhlYygmKGV4KSwgc3RrKQogCitpbnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90ICplbGZyZWdzKTsKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1MgZHVtcF90YXNrX3JlZ3MKKwogI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGE0NWFiNWQuLmMyZjE2MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMzUwLDcgKzM1MCw3IEBACiAJaWYgKHRsYl9mbGFnKFRMQl9XQikpCiAJCWRzYigpOwogCi0JaWYgKGNwdW1hc2tfdGVzdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKG1tKSkpIHsKKwlpZiAoY3B1bWFza190ZXN0X2NwdShnZXRfY3B1KCksIG1tX2NwdW1hc2sobW0pKSkgewogCQlpZiAodGxiX2ZsYWcoVExCX1YzX0ZVTEwpKQogCQkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzYsIGMwLCAwIiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCQlpZiAodGxiX2ZsYWcoVExCX1Y0X1VfRlVMTCkpCkBAIC0zNjAsNiArMzYwLDcgQEAKIAkJaWYgKHRsYl9mbGFnKFRMQl9WNF9JX0ZVTEwpKQogCQkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAwIiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCX0KKwlwdXRfY3B1KCk7CiAKIAlpZiAodGxiX2ZsYWcoVExCX1Y2X1VfQVNJRCkpCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNywgMiIgOiA6ICJyIiAoYXNpZCkgOiAiY2MiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCmluZGV4IDMyMjQxMGIuLjAwMjJiNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtNjA4LDMzICs2MDgsMzMgQEAKICBUSFVNQigJYWRkCXBjLCByOAkJCSkKIAlub3AKIAotCVcobW92KQlwYywgbHIJCQkJQCBDUCMwCisJbW92d19wYwlscgkJCQlAIENQIzAKIAlXKGIpCWRvX2ZwZQkJCQlAIENQIzEgKEZQRSkKIAlXKGIpCWRvX2ZwZQkJCQlAIENQIzIgKEZQRSkKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMworCW1vdndfcGMJbHIJCQkJQCBDUCMzCiAjaWZkZWYgQ09ORklHX0NSVU5DSAogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzQgKE1hdmVyaWNrQ3J1bmNoKQogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzUgKE1hdmVyaWNrQ3J1bmNoKQogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzYgKE1hdmVyaWNrQ3J1bmNoKQogI2Vsc2UKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNAotCVcobW92KQlwYywgbHIJCQkJQCBDUCM1Ci0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzYKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjNAorCW1vdndfcGMJbHIJCQkJQCBDUCM1CisJbW92d19wYwlscgkJCQlAIENQIzYKICNlbmRpZgotCVcobW92KQlwYywgbHIJCQkJQCBDUCM3Ci0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzgKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjOQorCW1vdndfcGMJbHIJCQkJQCBDUCM3CisJbW92d19wYwlscgkJCQlAIENQIzgKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjOQogI2lmZGVmIENPTkZJR19WRlAKIAlXKGIpCWRvX3ZmcAkJCQlAIENQIzEwIChWRlApCiAJVyhiKQlkb192ZnAJCQkJQCBDUCMxMSAoVkZQKQogI2Vsc2UKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTAgKFZGUCkKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTEgKFZGUCkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTAgKFZGUCkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTEgKFZGUCkKICNlbmRpZgotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMgotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMwotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxNCAoRGVidWcpCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzE1IChDb250cm9sKQorCW1vdndfcGMJbHIJCQkJQCBDUCMxMgorCW1vdndfcGMJbHIJCQkJQCBDUCMxMworCW1vdndfcGMJbHIJCQkJQCBDUCMxNCAoRGVidWcpCisJbW92d19wYwlscgkJCQlAIENQIzE1IChDb250cm9sKQogCiAjaWZkZWYgQ09ORklHX05FT04KIAkuYWxpZ24JNgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCmluZGV4IGFjMzRjMGQuLjdlOWVkMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKQEAgLTExMCw2ICsxMTAsMTMgQEAKIAltb3YJXHJkLCBzcCwgbHNyICMxMwogCW1vdglccmQsIFxyZCwgbHNsICMxMwogCS5lbmRtCisKKwlACisJQCAzMi1iaXQgd2lkZSAibW92IHBjLCByZWciCisJQAorCS5tYWNybwltb3Z3X3BjLCByZWcKKwltb3YJcGMsIFxyZWcKKwkuZW5kbQogI2Vsc2UJLyogQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KIAkubWFjcm8Jc3ZjX2V4aXQsIHJwc3IKIAljbHJleAkJCQkJQCBjbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKQEAgLTE0Niw2ICsxNTMsMTQgQEAKIAlsc3IJXHJkLCBccmQsICMxMwogCW1vdglccmQsIFxyZCwgbHNsICMxMwogCS5lbmRtCisKKwlACisJQCAzMi1iaXQgd2lkZSAibW92IHBjLCByZWciCisJQAorCS5tYWNybwltb3Z3X3BjLCByZWcKKwltb3YJcGMsIFxyZWcKKwlub3AKKwkuZW5kbQogI2VuZGlmCS8qICFDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNzkwZmJlZS4uMGQ5NmQwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMjgsNiArMzI4LDE1IEBACiB9CiAKIC8qCisgKiBGaWxsIGluIHRoZSB0YXNrJ3MgZWxmcmVncyBzdHJ1Y3R1cmUgZm9yIGEgY29yZSBkdW1wLgorICovCitpbnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90ICplbGZyZWdzKQoreworCWVsZl9jb3JlX2NvcHlfcmVncyhlbGZyZWdzLCB0YXNrX3B0X3JlZ3ModCkpOworCXJldHVybiAxOworfQorCisvKgogICogZmlsbCBpbiB0aGUgZnBlIHN0cnVjdHVyZSBmb3IgYSBjb3JlIGR1bXAuLi4KICAqLwogaW50IGR1bXBfZnB1IChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHVzZXJfZnAgKmZwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCA0NjdiNjllLi5mODM4ZjM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtNDUsMjEgKzQ1LDIxIEBACiBfX3NldHVwKCJ1c2VyX2RlYnVnPSIsIHVzZXJfZGVidWdfc2V0dXApOwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGR1bXBfbWVtKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBib3R0b20sIHVuc2lnbmVkIGxvbmcgdG9wKTsKK3N0YXRpYyB2b2lkIGR1bXBfbWVtKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIAogdm9pZCBkdW1wX2JhY2t0cmFjZV9lbnRyeSh1bnNpZ25lZCBsb25nIHdoZXJlLCB1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgZnJhbWUpCiB7CiAjaWZkZWYgQ09ORklHX0tBTExTWU1TCi0JcHJpbnRrKCJbPCUwOGx4Pl0gIiwgd2hlcmUpOwotCXByaW50X3N5bWJvbCgiKCVzKSAiLCB3aGVyZSk7Ci0JcHJpbnRrKCJmcm9tIFs8JTA4bHg+XSAiLCBmcm9tKTsKLQlwcmludF9zeW1ib2woIiglcylcbiIsIGZyb20pOworCWNoYXIgc3ltMVtLU1lNX1NZTUJPTF9MRU5dLCBzeW0yW0tTWU1fU1lNQk9MX0xFTl07CisJc3ByaW50X3N5bWJvbChzeW0xLCB3aGVyZSk7CisJc3ByaW50X3N5bWJvbChzeW0yLCBmcm9tKTsKKwlwcmludGsoIls8JTA4bHg+XSAoJXMpIGZyb20gWzwlMDhseD5dICglcylcbiIsIHdoZXJlLCBzeW0xLCBmcm9tLCBzeW0yKTsKICNlbHNlCiAJcHJpbnRrKCJGdW5jdGlvbiBlbnRlcmVkIGF0IFs8JTA4bHg+XSBmcm9tIFs8JTA4bHg+XVxuIiwgd2hlcmUsIGZyb20pOwogI2VuZGlmCiAKIAlpZiAoaW5fZXhjZXB0aW9uX3RleHQod2hlcmUpKQotCQlkdW1wX21lbSgiRXhjZXB0aW9uIHN0YWNrIiwgZnJhbWUgKyA0LCBmcmFtZSArIDQgKyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwkJZHVtcF9tZW0oIiIsICJFeGNlcHRpb24gc3RhY2siLCBmcmFtZSArIDQsIGZyYW1lICsgNCArIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwogfQogCiAjaWZuZGVmIENPTkZJR19BUk1fVU5XSU5ECkBAIC04MSw5ICs4MSwxMCBAQAogLyoKICAqIER1bXAgb3V0IHRoZSBjb250ZW50cyBvZiBzb21lIG1lbW9yeSBuaWNlbHkuLi4KICAqLwotc3RhdGljIHZvaWQgZHVtcF9tZW0oY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBsb25nIGJvdHRvbSwgdW5zaWduZWQgbG9uZyB0b3ApCitzdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICpsdmwsIGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBib3R0b20sCisJCSAgICAgdW5zaWduZWQgbG9uZyB0b3ApCiB7Ci0JdW5zaWduZWQgbG9uZyBwID0gYm90dG9tICYgfjMxOworCXVuc2lnbmVkIGxvbmcgZmlyc3Q7CiAJbW1fc2VnbWVudF90IGZzOwogCWludCBpOwogCkBAIC05NSwzMyArOTYsMzcgQEAKIAlmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwogCi0JcHJpbnRrKCIlcygweCUwOGx4IHRvIDB4JTA4bHgpXG4iLCBzdHIsIGJvdHRvbSwgdG9wKTsKKwlwcmludGsoIiVzJXMoMHglMDhseCB0byAweCUwOGx4KVxuIiwgbHZsLCBzdHIsIGJvdHRvbSwgdG9wKTsKIAotCWZvciAocCA9IGJvdHRvbSAmIH4zMTsgcCA8IHRvcDspIHsKLQkJcHJpbnRrKCIlMDRseDogIiwgcCAmIDB4ZmZmZik7CisJZm9yIChmaXJzdCA9IGJvdHRvbSAmIH4zMTsgZmlyc3QgPCB0b3A7IGZpcnN0ICs9IDMyKSB7CisJCXVuc2lnbmVkIGxvbmcgcDsKKwkJY2hhciBzdHJbc2l6ZW9mKCIgMTIzNDU2NzgiKSAqIDggKyAxXTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrLCBwICs9IDQpIHsKLQkJCXVuc2lnbmVkIGludCB2YWw7CisJCW1lbXNldChzdHIsICcgJywgc2l6ZW9mKHN0cikpOworCQlzdHJbc2l6ZW9mKHN0cikgLSAxXSA9ICdcMCc7CiAKLQkJCWlmIChwIDwgYm90dG9tIHx8IHAgPj0gdG9wKQotCQkJCXByaW50aygiICAgICAgICAgIik7Ci0JCQllbHNlIHsKLQkJCQlfX2dldF91c2VyKHZhbCwgKHVuc2lnbmVkIGxvbmcgKilwKTsKLQkJCQlwcmludGsoIiUwOHggIiwgdmFsKTsKKwkJZm9yIChwID0gZmlyc3QsIGkgPSAwOyBpIDwgOCAmJiBwIDwgdG9wOyBpKyssIHAgKz0gNCkgeworCQkJaWYgKHAgPj0gYm90dG9tICYmIHAgPCB0b3ApIHsKKwkJCQl1bnNpZ25lZCBsb25nIHZhbDsKKwkJCQlpZiAoX19nZXRfdXNlcih2YWwsICh1bnNpZ25lZCBsb25nICopcCkgPT0gMCkKKwkJCQkJc3ByaW50ZihzdHIgKyBpICogOSwgIiAlMDhseCIsIHZhbCk7CisJCQkJZWxzZQorCQkJCQlzcHJpbnRmKHN0ciArIGkgKiA5LCAiID8/Pz8/Pz8/Iik7CiAJCQl9CiAJCX0KLQkJcHJpbnRrICgiXG4iKTsKKwkJcHJpbnRrKCIlcyUwNGx4OiVzXG4iLCBsdmwsIGZpcnN0ICYgMHhmZmZmLCBzdHIpOwogCX0KIAogCXNldF9mcyhmcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBfaW5zdHIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBkdW1wX2luc3RyKGNvbnN0IGNoYXIgKmx2bCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKIAljb25zdCBpbnQgdGh1bWIgPSB0aHVtYl9tb2RlKHJlZ3MpOwogCWNvbnN0IGludCB3aWR0aCA9IHRodW1iID8gNCA6IDg7CiAJbW1fc2VnbWVudF90IGZzOworCWNoYXIgc3RyW3NpemVvZigiMDAwMDAwMDAgIikgKiA1ICsgMiArIDFdLCAqcCA9IHN0cjsKIAlpbnQgaTsKIAogCS8qCkBAIC0xMzIsNyArMTM3LDYgQEAKIAlmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwogCi0JcHJpbnRrKCJDb2RlOiAiKTsKIAlmb3IgKGkgPSAtNDsgaSA8IDE7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdmFsLCBiYWQ7CiAKQEAgLTE0MiwxMyArMTQ2LDE0IEBACiAJCQliYWQgPSBfX2dldF91c2VyKHZhbCwgJigodTMyICopYWRkcilbaV0pOwogCiAJCWlmICghYmFkKQotCQkJcHJpbnRrKGkgPT0gMCA/ICIoJTAqeCkgIiA6ICIlMCp4ICIsIHdpZHRoLCB2YWwpOworCQkJcCArPSBzcHJpbnRmKHAsIGkgPT0gMCA/ICIoJTAqeCkgIiA6ICIlMCp4ICIsCisJCQkJCXdpZHRoLCB2YWwpOwogCQllbHNlIHsKLQkJCXByaW50aygiYmFkIFBDIHZhbHVlLiIpOworCQkJcCArPSBzcHJpbnRmKHAsICJiYWQgUEMgdmFsdWUiKTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXByaW50aygiXG4iKTsKKwlwcmludGsoIiVzQ29kZTogJXNcbiIsIGx2bCwgc3RyKTsKIAogCXNldF9mcyhmcyk7CiB9CkBAIC0yMjQsMTggKzIyOSwxOSBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gdGhyZWFkLT50YXNrOwogCXN0YXRpYyBpbnQgZGllX2NvdW50ZXI7CiAKLQlwcmludGsoIkludGVybmFsIGVycm9yOiAlczogJXggWyMlZF0iIFNfUFJFRU1QVCBTX1NNUCAiXG4iLAorCXByaW50ayhLRVJOX0VNRVJHICJJbnRlcm5hbCBlcnJvcjogJXM6ICV4IFsjJWRdIiBTX1BSRUVNUFQgU19TTVAgIlxuIiwKIAkgICAgICAgc3RyLCBlcnIsICsrZGllX2NvdW50ZXIpOworCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKIAlwcmludF9tb2R1bGVzKCk7CiAJX19zaG93X3JlZ3MocmVncyk7Ci0JcHJpbnRrKCJQcm9jZXNzICVzIChwaWQ6ICVkLCBzdGFjayBsaW1pdCA9IDB4JXApXG4iLAotCQl0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIHRocmVhZCArIDEpOworCXByaW50ayhLRVJOX0VNRVJHICJQcm9jZXNzICUuKnMgKHBpZDogJWQsIHN0YWNrIGxpbWl0ID0gMHglcClcbiIsCisJCVRBU0tfQ09NTV9MRU4sIHRzay0+Y29tbSwgdGFza19waWRfbnIodHNrKSwgdGhyZWFkICsgMSk7CiAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSB8fCBpbl9pbnRlcnJ1cHQoKSkgewotCQlkdW1wX21lbSgiU3RhY2s6ICIsIHJlZ3MtPkFSTV9zcCwKKwkJZHVtcF9tZW0oS0VSTl9FTUVSRywgIlN0YWNrOiAiLCByZWdzLT5BUk1fc3AsCiAJCQkgVEhSRUFEX1NJWkUgKyAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UodHNrKSk7CiAJCWR1bXBfYmFja3RyYWNlKHJlZ3MsIHRzayk7Ci0JCWR1bXBfaW5zdHIocmVncyk7CisJCWR1bXBfaW5zdHIoS0VSTl9FTUVSRywgcmVncyk7CiAJfQogfQogCkBAIC0yNTAsMTMgKzI1NiwxNCBAQAogCiAJb29wc19lbnRlcigpOwogCi0JY29uc29sZV92ZXJib3NlKCk7CiAJc3Bpbl9sb2NrX2lycSgmZGllX2xvY2spOworCWNvbnNvbGVfdmVyYm9zZSgpOwogCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCV9fZGllKHN0ciwgZXJyLCB0aHJlYWQsIHJlZ3MpOwogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCWFkZF90YWludChUQUlOVF9ESUUpOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOworCW9vcHNfZXhpdCgpOwogCiAJaWYgKGluX2ludGVycnVwdCgpKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIGluIGludGVycnVwdCIpOwpAQCAtMjY0LDcgKzI3MSw2IEBACiAJaWYgKHBhbmljX29uX29vcHMpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKIAotCW9vcHNfZXhpdCgpOwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKQEAgLTM0OSw3ICszNTUsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19VTkRFRklORUQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgKCVkKTogdW5kZWZpbmVkIGluc3RydWN0aW9uOiBwYz0lcFxuIiwKIAkJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBwYyk7Ci0JCWR1bXBfaW5zdHIocmVncyk7CisJCWR1bXBfaW5zdHIoS0VSTl9JTkZPLCByZWdzKTsKIAl9CiAjZW5kaWYKIApAQCAtNDAwLDcgKzQwNiw3IEBACiAJaWYgKHVzZXJfZGVidWcgJiBVREJHX1NZU0NBTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJbJWRdICVzOiBvYnNvbGV0ZSBzeXN0ZW0gY2FsbCAlMDh4LlxuIiwKIAkJCXRhc2tfcGlkX25yKGN1cnJlbnQpLCBjdXJyZW50LT5jb21tLCBuKTsKLQkJZHVtcF9pbnN0cihyZWdzKTsKKwkJZHVtcF9pbnN0cihLRVJOX0VSUiwgcmVncyk7CiAJfQogI2VuZGlmCiAKQEAgLTU3OSw3ICs1ODUsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19TWVNDQUxMKSB7CiAJCXByaW50aygiWyVkXSAlczogYXJtIHN5c2NhbGwgJWRcbiIsCiAJCSAgICAgICB0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgbm8pOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKCIiLCByZWdzKTsKIAkJaWYgKHVzZXJfbW9kZShyZWdzKSkgewogCQkJX19zaG93X3JlZ3MocmVncyk7CiAJCQljX2JhY2t0cmFjZShyZWdzLT5BUk1fZnAsIHByb2Nlc3Nvcl9tb2RlKHJlZ3MpKTsKQEAgLTY1Niw3ICs2NjIsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19CQURBQk9SVCkgewogCQlwcmludGsoS0VSTl9FUlIgIlslZF0gJXM6IGJhZCBkYXRhIGFib3J0OiBjb2RlICVkIGluc3RyIDB4JTA4bHhcbiIsCiAJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgY29kZSwgaW5zdHIpOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKEtFUk5fRVJSLCByZWdzKTsKIAkJc2hvd19wdGUoY3VycmVudC0+bW0sIGFkZHIpOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMKaW5kZXggZDU4MWNmZi4uMzMyYjc4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCkBAIC04MzgsNyArODM4LDcgQEAKICAqICBXYXRjaGRvZwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05X1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOV9XQVRDSERPR19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0dfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfd2R0X2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXQ5MV93ZHQiLAogCS5pZAkJPSAtMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jCmluZGV4IDRiNGY2OTIuLmU1OTBiYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYwpAQCAtMjcxLDEyICsyNzEsMTIgQEAKIAkuaGFuZGxlciA9IGJjbXJpbmdfdGltZXJfaW50ZXJydXB0LAogfTsKIAotc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMSh2b2lkKQorc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCXJldHVybiB+cmVhZGwoVElNRVIxX1ZBX0JBU0UgKyBUSU1FUl9WQUxVRSk7CiB9CiAKLXN0YXRpYyBjeWNsZV90IGJjbXJpbmdfZ2V0X2N5Y2xlc190aW1lcjModm9pZCkKK3N0YXRpYyBjeWNsZV90IGJjbXJpbmdfZ2V0X2N5Y2xlc190aW1lcjMoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKIAlyZXR1cm4gfnJlYWRsKFRJTUVSM19WQV9CQVNFICsgVElNRVJfVkFMVUUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggY2RiZjkzYy4uMzhiMzcwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yOSw3ICsyOSw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjaGFyICpjbWQpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlwcmludGsoImFyY2hfcmVzZXQ6JWMgJXhcbiIsIG1vZGUsIGJjbXJpbmdfYXJjaF93YXJtX3JlYm9vdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnCmluZGV4IGQ3MjkxYzYuLjkxNjdjM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwpAQCAtMTcsMTMgKzE3LDMxIEBACiAJYm9vbCAiMHgwMDAwMDAwMCAtIFNEQ0UzL1N5bmNCb290IgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBFUDkzeHggYm9hcmRzIHdpdGggdGhlCi0JICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4MDAwMDAwMDAKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHgwMDAwMDAwMC4KIAogY29uZmlnIEVQOTNYWF9TRENFMF9QSFlTX09GRlNFVAogCWJvb2wgIjB4YzAwMDAwMDAgLSBTRENFTyIKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQotCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGMwMDAwMDAwCisJICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4YzAwMDAwMDAuCisKK2NvbmZpZyBFUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQKKwlib29sICIweGQwMDAwMDAwIC0gU0RDRTEiCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIEVQOTN4eCBib2FyZHMgd2l0aCB0aGUKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHhkMDAwMDAwMC4KKworY29uZmlnIEVQOTNYWF9TRENFMl9QSFlTX09GRlNFVAorCWJvb2wgIjB4ZTAwMDAwMDAgLSBTRENFMiIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQorCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGUwMDAwMDAwLgorCitjb25maWcgRVA5M1hYX1NEQ0UzX0FTWU5DX1BIWVNfT0ZGU0VUCisJYm9vbCAiMHhmMDAwMDAwMCAtIFNEQ0UzL0FzeW5jQm9vdCIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQorCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGYwMDAwMDAwLgogCiBlbmRjaG9pY2UKIApAQCAtMTEyLDI4ICsxMzAsMzYgQEAKIAlib29sCiAKIGNvbmZpZyBNQUNIX01JQ1JPOUgKLQlib29sICJTdXBwb3J0IENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUgiCisJYm9vbCAiU3VwcG9ydCBDb250ZWMgTWljcm85LUhpZ2giCiAJZGVwZW5kcyBvbiBFUDkzWFhfU0RDRTNfU1lOQ19QSFlTX09GRlNFVAogCXNlbGVjdCBNQUNIX01JQ1JPOQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktSCBib2FyZC4KKwkgIENvbnRlYyBNaWNybzktSGlnaCBib2FyZC4KIAogY29uZmlnIE1BQ0hfTUlDUk85TQotCWJvb2wgIlN1cHBvcnQgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSIKLQlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19TWU5DX1BIWVNfT0ZGU0VUCisJYm9vbCAiU3VwcG9ydCBDb250ZWMgTWljcm85LU1pZCIKKwlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVAogCXNlbGVjdCBNQUNIX01JQ1JPOQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSBib2FyZC4KKwkgIENvbnRlYyBNaWNybzktTWlkIGJvYXJkLgogCiBjb25maWcgTUFDSF9NSUNSTzlMCi0JYm9vbCAiU3VwcG9ydCBDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1MIgorCWJvb2wgIlN1cHBvcnQgQ29udGVjIE1pY3JvOS1MaXRlIgogCWRlcGVuZHMgb24gRVA5M1hYX1NEQ0UzX1NZTkNfUEhZU19PRkZTRVQKIAlzZWxlY3QgTUFDSF9NSUNSTzkKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKLQkgIENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUwgYm9hcmQuCisJICBDb250ZWMgTWljcm85LUxpdGUgYm9hcmQuCisKK2NvbmZpZyBNQUNIX01JQ1JPOVMKKwlib29sICJTdXBwb3J0IENvbnRlYyBNaWNybzktU2xpbSIKKwlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVAorCXNlbGVjdCBNQUNIX01JQ1JPOQorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgQ29udGVjIE1pY3JvOS1TbGltIGJvYXJkLgogCiBjb25maWcgTUFDSF9UUzcyWFgKIAlib29sICJTdXBwb3J0IFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzJ4eCBTQkMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUuYm9vdAppbmRleCAyN2EwODVhLi4wYWQzM2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290CisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlLmJvb3QKQEAgLTMsMyArMywxMiBAQAogCiAgICB6cmVsYWRkci0kKENPTkZJR19FUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQpCQk6PSAweGMwMDA4MDAwCiBwYXJhbXNfcGh5cy0kKENPTkZJR19FUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQpCQk6PSAweGMwMDAwMTAwCisKKyAgIHpyZWxhZGRyLSQoQ09ORklHX0VQOTNYWF9TRENFMV9QSFlTX09GRlNFVCkJCTo9IDB4ZDAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0VQOTNYWF9TRENFMV9QSFlTX09GRlNFVCkJCTo9IDB4ZDAwMDAxMDAKKworICAgenJlbGFkZHItJChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQkJOj0gMHhlMDAwODAwMAorcGFyYW1zX3BoeXMtJChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQkJOj0gMHhlMDAwMDEwMAorCisgICB6cmVsYWRkci0kKENPTkZJR19FUDkzWFhfU0RDRTNfQVNZTkNfUEhZU19PRkZTRVQpCTo9IDB4ZjAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0VQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVCkJOj0gMHhmMDAwMDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKaW5kZXggZGRhMTljZDcuLjFkMGY5ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwpAQCAtMTYsMTMgKzE2LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogCiBzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgY2xrCSpwYXJlbnQ7CiAJdW5zaWduZWQgbG9uZwlyYXRlOwogCWludAkJdXNlcnM7CiAJaW50CQlzd19sb2NrZWQ7CkBAIC0zOSw0MCArNDIsNjAgQEAKIHN0YXRpYyBpbnQgc2V0X2tleXRjaGNsa19yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHN0YXRpYyBpbnQgc2V0X2Rpdl9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIAorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfeHRhbGkgPSB7CisJLnJhdGUJCT0gRVA5M1hYX0VYVF9DTEtfUkFURSwKK307CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdWFydDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5zd19sb2NrZWQJPSAxLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkcsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkdfVTFFTiwKIAkuZ2V0X3JhdGUJPSBnZXRfdWFydF9yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0MiA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCiAJLnN3X2xvY2tlZAk9IDEsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0RFVkNGRywKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0RFVkNGR19VMkVOLAogCS5nZXRfcmF0ZQk9IGdldF91YXJ0X3JhdGUsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQzID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKIAkuc3dfbG9ja2VkCT0gMSwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHLAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UzRU4sCiAJLmdldF9yYXRlCT0gZ2V0X3VhcnRfcmF0ZSwKIH07Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfcGxsMTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mOwotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2g7Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfcDsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyOworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BsbDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKK307CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdXNiX2hvc3QgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BsbDIsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9VU0hfRU4sCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX2tleXBhZCA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCiAJLnN3X2xvY2tlZAk9IDEsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJViwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9LRU4sCiAJLnNldF9yYXRlCT0gc2V0X2tleXRjaGNsa19yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wd20gPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5yYXRlCQk9IEVQOTNYWF9FWFRfQ0xLX1JBVEUsCiB9OwogCkBAIC04NSw1MCArMTA4LDYyIEBACiAKIC8qIERNQSBDbG9ja3MgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAwID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDAsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQMSwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMiA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlAyLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAzID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDMsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDQgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNCwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwNSA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA1LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA2ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDYsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDcgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNywKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwOCA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA4LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA5ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDksCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ybTAgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJNMCwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJtMSA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMk0xLAogfTsKQEAgLTEzNyw2ICsxNzIsNyBAQAogCXsgLmRldl9pZCA9IGRldiwgLmNvbl9pZCA9IGNvbiwgLmNsayA9IGNrIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGNsb2Nrc1tdID0geworCUlOSVRfQ0soTlVMTCwJCQkieHRhbGkiLAkmY2xrX3h0YWxpKSwKIAlJTklUX0NLKCJhcGI6dWFydDEiLAkJTlVMTCwJCSZjbGtfdWFydDEpLAogCUlOSVRfQ0soImFwYjp1YXJ0MiIsCQlOVUxMLAkJJmNsa191YXJ0MiksCiAJSU5JVF9DSygiYXBiOnVhcnQzIiwJCU5VTEwsCQkmY2xrX3VhcnQzKSwKQEAgLTE2Myw0OCArMTk5LDg0IEBACiAJSU5JVF9DSyhOVUxMLAkJCSJtMm0xIiwJCSZjbGtfbTJtMSksCiB9OwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKKworc3RhdGljIHZvaWQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsay0+dXNlcnMrKykgeworCQlpZiAoY2xrLT5wYXJlbnQpCisJCQlfX2Nsa19lbmFibGUoY2xrLT5wYXJlbnQpOworCisJCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJCXUzMiB2OworCisJCQl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXYgfD0gY2xrLT5lbmFibGVfbWFzazsKKwkJCWlmIChjbGstPnN3X2xvY2tlZCkKKwkJCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCQllbHNlCisJCQkJX19yYXdfd3JpdGVsKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9Cit9CiAKIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoIWNsay0+dXNlcnMrKyAmJiBjbGstPmVuYWJsZV9yZWcpIHsKLQkJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQl2YWx1ZSB8PSBjbGstPmVuYWJsZV9tYXNrOwotCQlpZiAoY2xrLT5zd19sb2NrZWQpCi0JCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwotCQllbHNlCi0JCQlfX3Jhd193cml0ZWwodmFsdWUsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JfQorCWlmICghY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCV9fY2xrX2VuYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CiAKK3N0YXRpYyB2b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmICghLS1jbGstPnVzZXJzKSB7CisJCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJCXUzMiB2OworCisJCQl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXYgJj0gfmNsay0+ZW5hYmxlX21hc2s7CisJCQlpZiAoY2xrLT5zd19sb2NrZWQpCisJCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2LCBjbGstPmVuYWJsZV9yZWcpOworCQkJZWxzZQorCQkJCV9fcmF3X3dyaXRlbCh2LCBjbGstPmVuYWJsZV9yZWcpOworCQl9CisKKwkJaWYgKGNsay0+cGFyZW50KQorCQkJX19jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJfQorfQorCiB2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoIS0tY2xrLT51c2VycyAmJiBjbGstPmVuYWJsZV9yZWcpIHsKLQkJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQl2YWx1ZSAmPSB+Y2xrLT5lbmFibGVfbWFzazsKLQkJaWYgKGNsay0+c3dfbG9ja2VkKQotCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKLQkJZWxzZQotCQkJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwotCX0KKwlpZiAoIWNsaykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CisJX19jbGtfZGlzYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIAl1MzIgdmFsdWU7CiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fUFdSQ05UKTsKIAlpZiAodmFsdWUgJiBFUDkzWFhfU1lTQ09OX1BXUkNOVF9VQVJUQkFVRCkKLQkJcmV0dXJuIEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJCXJldHVybiByYXRlOwogCWVsc2UKLQkJcmV0dXJuIEVQOTNYWF9FWFRfQ0xLX1JBVEUgLyAyOworCQlyZXR1cm4gcmF0ZSAvIDI7CiB9CiAKIHVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKQEAgLTI0NCwxNiArMzE2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfY2xrX2Rpdih1bnNpZ25lZCBsb25nIHJhdGUsIGludCAqcHNlbCwgaW50ICplc2VsLAotCQkJCSAgaW50ICpwZGl2LCBpbnQgKmRpdikKK3N0YXRpYyBpbnQgY2FsY19jbGtfZGl2KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJaW50ICpwc2VsLCBpbnQgKmVzZWwsIGludCAqcGRpdiwgaW50ICpkaXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXhfcmF0ZSwgYmVzdF9yYXRlID0gMCwKLQkJYWN0dWFsX3JhdGUgPSAwLCBtY2xrX3JhdGUgPSAwLCByYXRlX2VyciA9IC0xOworCXN0cnVjdCBjbGsgKm1jbGs7CisJdW5zaWduZWQgbG9uZyBtYXhfcmF0ZSwgYWN0dWFsX3JhdGUsIG1jbGtfcmF0ZSwgcmF0ZV9lcnIgPSAtMTsKIAlpbnQgaSwgZm91bmQgPSAwLCBfX2RpdiA9IDAsIF9fcGRpdiA9IDA7CiAKIAkvKiBEb24ndCBleGNlZWQgdGhlIG1heGltdW0gcmF0ZSAqLwogCW1heF9yYXRlID0gbWF4KG1heChjbGtfcGxsMS5yYXRlIC8gNCwgY2xrX3BsbDIucmF0ZSAvIDQpLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpRVA5M1hYX0VYVF9DTEtfUkFURSAvIDQpOworCQkgICAgICAgY2xrX3h0YWxpLnJhdGUgLyA0KTsKIAlyYXRlID0gbWluKHJhdGUsIG1heF9yYXRlKTsKIAogCS8qCkBAIC0yNjcsMTEgKzMzOSwxMiBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJaWYgKGkgPT0gMCkKLQkJCW1jbGtfcmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEUgKiAyOworCQkJbWNsayA9ICZjbGtfeHRhbGk7CiAJCWVsc2UgaWYgKGkgPT0gMSkKLQkJCW1jbGtfcmF0ZSA9IGNsa19wbGwxLnJhdGUgKiAyOwotCQllbHNlIGlmIChpID09IDIpCi0JCQltY2xrX3JhdGUgPSBjbGtfcGxsMi5yYXRlICogMjsKKwkJCW1jbGsgPSAmY2xrX3BsbDE7CisJCWVsc2UKKwkJCW1jbGsgPSAmY2xrX3BsbDI7CisJCW1jbGtfcmF0ZSA9IG1jbGstPnJhdGUgKiAyOwogCiAJCS8qIFRyeSBlYWNoIHByZWRpdmlkZXIgdmFsdWUgKi8KIAkJZm9yIChfX3BkaXYgPSA0OyBfX3BkaXYgPD0gNjsgX19wZGl2KyspIHsKQEAgLTI4Niw3ICszNTksOCBAQAogCQkJCSpkaXYgPSBfX2RpdjsKIAkJCQkqcHNlbCA9IChpID09IDIpOwogCQkJCSplc2VsID0gKGkgIT0gMCk7Ci0JCQkJYmVzdF9yYXRlID0gYWN0dWFsX3JhdGU7CisJCQkJY2xrLT5wYXJlbnQgPSBtY2xrOworCQkJCWNsay0+cmF0ZSA9IGFjdHVhbF9yYXRlOwogCQkJCXJhdGVfZXJyID0gYWJzKGFjdHVhbF9yYXRlIC0gcmF0ZSk7CiAJCQkJZm91bmQgPSAxOwogCQkJfQpAQCAtMjk0LDIxICszNjgsMTkgQEAKIAl9CiAKIAlpZiAoIWZvdW5kKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gYmVzdF9yYXRlOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNldF9kaXZfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQl1bnNpZ25lZCBsb25nIGFjdHVhbF9yYXRlOwotCWludCBwc2VsID0gMCwgZXNlbCA9IDAsIHBkaXYgPSAwLCBkaXYgPSAwOworCWludCBlcnIsIHBzZWwgPSAwLCBlc2VsID0gMCwgcGRpdiA9IDAsIGRpdiA9IDA7CiAJdTMyIHZhbDsKIAotCWFjdHVhbF9yYXRlID0gY2FsY19jbGtfZGl2KHJhdGUsICZwc2VsLCAmZXNlbCwgJnBkaXYsICZkaXYpOwotCWlmIChhY3R1YWxfcmF0ZSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQljbGstPnJhdGUgPSBhY3R1YWxfcmF0ZTsKKwllcnIgPSBjYWxjX2Nsa19kaXYoY2xrLCByYXRlLCAmcHNlbCwgJmVzZWwsICZwZGl2LCAmZGl2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQ2xlYXIgdGhlIGVzZWwsIHBzZWwsIHBkaXYgYW5kIGRpdiBiaXRzICovCiAJdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKQEAgLTM0NCw3ICs0MTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyByYXRlOwogCWludCBpOwogCi0JcmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJcmF0ZSA9IGNsa194dGFsaS5yYXRlOwogCXJhdGUgKj0gKChjb25maWdfd29yZCA+PiAxMSkgJiAweDFmKSArIDE7CQkvKiBYMUZCRCAqLwogCXJhdGUgKj0gKChjb25maWdfd29yZCA+PiA1KSAmIDB4M2YpICsgMTsJCS8qIFgyRkJEICovCiAJZG9fZGl2KHJhdGUsIChjb25maWdfd29yZCAmIDB4MWYpICsgMSk7CQkJLyogWDJJUEQgKi8KQEAgLTM3Nyw3ICs0NDksNyBAQAogCiAJdmFsdWUgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0NMT0NLX1NFVDEpOwogCWlmICghKHZhbHVlICYgMHgwMDgwMDAwMCkpIHsJCQkvKiBQTEwxIGJ5cGFzc2VkPyAgKi8KLQkJY2xrX3BsbDEucmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJCWNsa19wbGwxLnJhdGUgPSBjbGtfeHRhbGkucmF0ZTsKIAl9IGVsc2UgewogCQljbGtfcGxsMS5yYXRlID0gY2FsY19wbGxfcmF0ZSh2YWx1ZSk7CiAJfQpAQCAtMzg4LDcgKzQ2MCw3IEBACiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMik7CiAJaWYgKCEodmFsdWUgJiAweDAwMDgwMDAwKSkgewkJCS8qIFBMTDIgYnlwYXNzZWQ/ICAqLwotCQljbGtfcGxsMi5yYXRlID0gRVA5M1hYX0VYVF9DTEtfUkFURTsKKwkJY2xrX3BsbDIucmF0ZSA9IGNsa194dGFsaS5yYXRlOwogCX0gZWxzZSBpZiAodmFsdWUgJiAweDAwMDQwMDAwKSB7CQkvKiBQTEwyIGVuYWJsZWQ/ICAqLwogCQljbGtfcGxsMi5yYXRlID0gY2FsY19wbGxfcmF0ZSh2YWx1ZSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCBmN2ViZWQ5Li5iNDM1N2MzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC0yMDYsNyArMjA2LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgewogCQkJaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9CKDApKSArIGk7Ci0JCQlkZXNjID0gaXJxX2Rlc2MgKyBncGlvX2lycTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7CiAJCX0KIAl9CkBAIC01NTAsMTMgKzU0OSwxMSBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXA5M3h4X2V0aF9kZXZpY2UpOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgZXA5M3h4X2kyY19kYXRhID0gewotCS5zZGFfcGluCQk9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMCwKLQkuc2NsX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFQ0xLLAotCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDAsCi0JLnVkZWxheQkJCT0gMiwKLX07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFUDkzeHggaTJjIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVwOTN4eF9pMmNfZGF0YTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X2kyY19kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCkBAIC01NjQsOCArNTYxLDI1IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJmVwOTN4eF9pMmNfZGF0YSwKIH07CiAKLXZvaWQgX19pbml0IGVwOTN4eF9yZWdpc3Rlcl9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnVtKQordm9pZCBfX2luaXQgZXA5M3h4X3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSAqZGF0YSwKKwkJCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBudW0pCiB7CisJLyoKKwkgKiBTZXQgdGhlIEVFUFJPTSBpbnRlcmZhY2UgcGluIGRyaXZlIHR5cGUgY29udHJvbC4KKwkgKiBEZWZpbmVzIHRoZSBkcml2ZXIgdHlwZSBmb3IgdGhlIEVFQ0xLIGFuZCBFRURBVCBwaW5zIGFzIGVpdGhlcgorCSAqIG9wZW4gZHJhaW4sIHdoaWNoIHdpbGwgcmVxdWlyZSBhbiBleHRlcm5hbCBwdWxsLXVwLCBvciBhIG5vcm1hbAorCSAqIENNT1MgZHJpdmVyLgorCSAqLworCWlmIChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zZGFfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQpCisJCXByX3dhcm5pbmcoImVwOTN4eDogc2RhICE9IEVFREFULCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCWlmIChkYXRhLT5zY2xfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zY2xfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVDTEspCisJCXByX3dhcm5pbmcoImVwOTN4eDogc2NsICE9IEVFQ0xLLCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCisJX19yYXdfd3JpdGVsKChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiA8PCAxKSB8CisJCSAgICAgKGRhdGEtPnNjbF9pc19vcGVuX2RyYWluIDw8IDApLAorCQkgICAgIEVQOTNYWF9HUElPX0VFRFJJVkUpOworCisJZXA5M3h4X2kyY19kYXRhID0gKmRhdGE7CiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnVtKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9pMmNfZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwppbmRleCA3MzE0NWFlLi5hNGE3YmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCkBAIC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC03NiwxMyArNzgsMjYgQEAKIAkucGh5X2lkCQk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eGFfaTJjX2RhdGFbXSA9IHsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVEQjkzeHggaTJjIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVkYjkzeHhfaTJjX2dwaW9fZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFREFULAorCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDAsCisJLnNjbF9waW4JCT0gRVA5M1hYX0dQSU9fTElORV9FRUNMSywKKwkuc2NsX2lzX29wZW5fZHJhaW4JPSAwLAorCS51ZGVsYXkJCQk9IDAsCS8qIGRlZmF1bHQgdG8gMTAwIGtIeiAqLworCS50aW1lb3V0CQk9IDAsCS8qIGRlZmF1bHQgdG8gMTAwIG1zICovCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eGFfaTJjX2JvYXJkX2luZm9bXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwgMHg2ZiksCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBlZGI5M3h4X2kyY19kYXRhW10gPSB7CitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eF9pMmNfYm9hcmRfaW5mb1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oImRzMTMzNyIsIDB4NjgpLAogCX0sCkBAIC05MiwxMiArMTA3LDE0IEBACiB7CiAJaWYgKG1hY2hpbmVfaXNfZWRiOTMwMmEoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDdhKCkgfHwKIAkgICAgbWFjaGluZV9pc19lZGI5MzE1YSgpKSB7Ci0JCWVwOTN4eF9yZWdpc3Rlcl9pMmMoZWRiOTN4eGFfaTJjX2RhdGEsCi0JCQkJQVJSQVlfU0laRShlZGI5M3h4YV9pMmNfZGF0YSkpOworCQllcDkzeHhfcmVnaXN0ZXJfaTJjKCZlZGI5M3h4X2kyY19ncGlvX2RhdGEsCisJCQkJICAgIGVkYjkzeHhhX2kyY19ib2FyZF9pbmZvLAorCQkJCSAgICBBUlJBWV9TSVpFKGVkYjkzeHhhX2kyY19ib2FyZF9pbmZvKSk7CiAJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2VkYjkzMDcoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMTIoKSB8fAogCQkgICBtYWNoaW5lX2lzX2VkYjkzMTUoKSkgewotCQllcDkzeHhfcmVnaXN0ZXJfaTJjKGVkYjkzeHhfaTJjX2RhdGEsCi0JCQkJQVJSQVlfU0laRShlZGI5M3h4X2kyY19kYXRhKSk7CisJCWVwOTN4eF9yZWdpc3Rlcl9pMmMoJmVkYjkzeHhfaTJjX2dwaW9fZGF0YSwKKwkJCQkgICAgZWRiOTN4eF9pMmNfYm9hcmRfaW5mbywKKwkJCQkgICAgQVJSQVlfU0laRShlZGI5M3h4X2kyY19ib2FyZF9pbmZvKSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCmluZGV4IDBmYmY4N2IuLmIxZjkzN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCkBAIC01MiwyNSArNTIsMjcgQEAKICNkZWZpbmUgRVA5M1hYX0FIQl9WSVJUX0JBU0UJCTB4ZmVmMDAwMDAKICNkZWZpbmUgRVA5M1hYX0FIQl9TSVpFCQkJMHgwMDEwMDAwMAogCisjZGVmaW5lIEVQOTNYWF9BSEJfUEhZUyh4KQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgKHgpKQogI2RlZmluZSBFUDkzWFhfQUhCX0lPTUVNKHgpCQlJT01FTShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArICh4KSkKIAogI2RlZmluZSBFUDkzWFhfQVBCX1BIWVNfQkFTRQkJMHg4MDgwMDAwMAogI2RlZmluZSBFUDkzWFhfQVBCX1ZJUlRfQkFTRQkJMHhmZWQwMDAwMAogI2RlZmluZSBFUDkzWFhfQVBCX1NJWkUJCQkweDAwMjAwMDAwCiAKKyNkZWZpbmUgRVA5M1hYX0FQQl9QSFlTKHgpCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAoeCkpCiAjZGVmaW5lIEVQOTNYWF9BUEJfSU9NRU0oeCkJCUlPTUVNKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgKHgpKQogCiAKIC8qIEFIQiBwZXJpcGhlcmFscyAqLwogI2RlZmluZSBFUDkzWFhfRE1BX0JBU0UJCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX1BIWVNfQkFTRQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDEwMDAwKQorI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfUEhZU19CQVNFCUVQOTNYWF9BSEJfUEhZUygweDAwMDEwMDAwKQogI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfQkFTRQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMDEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9VU0JfUEhZU19CQVNFCQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDIwMDAwKQorI2RlZmluZSBFUDkzWFhfVVNCX1BIWVNfQkFTRQkJRVA5M1hYX0FIQl9QSFlTKDB4MDAwMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9VU0JfQkFTRQkJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAyMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfUkFTVEVSX1BIWVNfQkFTRQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgMHgwMDAzMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1JBU1RFUl9QSFlTX0JBU0UJCUVQOTNYWF9BSEJfUEhZUygweDAwMDMwMDAwKQogI2RlZmluZSBFUDkzWFhfUkFTVEVSX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAzMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwNDAwMDApCkBAIC0xMTIsMjEgKzExNCwxMCBAQAogCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDA0MDAwMCkKICNkZWZpbmUgRVA5M1hYX0dQSU9fUkVHKHgpCQkoRVA5M1hYX0dQSU9fQkFTRSArICh4KSkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfVFlQRTEJCUVQOTNYWF9HUElPX1JFRygweDRjKQotI2RlZmluZSBFUDkzWFhfR1BJT19GX0lOVF9UWVBFMgkJRVA5M1hYX0dQSU9fUkVHKDB4NTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX0FDSwkJRVA5M1hYX0dQSU9fUkVHKDB4NTQpCi0jZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX0VOQUJMRQlFUDkzWFhfR1BJT19SRUcoMHg1OCkKICNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfU1RBVFVTCUVQOTNYWF9HUElPX1JFRygweDVjKQotI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9UWVBFMQkJRVA5M1hYX0dQSU9fUkVHKDB4OTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0FfSU5UX1RZUEUyCQlFUDkzWFhfR1BJT19SRUcoMHg5NCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfQUNLCQlFUDkzWFhfR1BJT19SRUcoMHg5OCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfRU5BQkxFCUVQOTNYWF9HUElPX1JFRygweDljKQogI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9TVEFUVVMJRVA5M1hYX0dQSU9fUkVHKDB4YTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1RZUEUxCQlFUDkzWFhfR1BJT19SRUcoMHhhYykKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQl9JTlRfVFlQRTIJCUVQOTNYWF9HUElPX1JFRygweGIwKQotI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9BQ0sJCUVQOTNYWF9HUElPX1JFRygweGI0KQotI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9FTkFCTEUJRVA5M1hYX0dQSU9fUkVHKDB4YjgpCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1NUQVRVUwlFUDkzWFhfR1BJT19SRUcoMHhiYykKKyNkZWZpbmUgRVA5M1hYX0dQSU9fRUVEUklWRQkJRVA5M1hYX0dQSU9fUkVHKDB4YzgpCiAKICNkZWZpbmUgRVA5M1hYX0FBQ19CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMDgwMDAwKQogCkBAIC0xMzQsMTMgKzEyNSwxMyBAQAogCiAjZGVmaW5lIEVQOTNYWF9JUkRBX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBiMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDFfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGMwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDFfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBjMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQxX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBjMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDJfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGQwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDJfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBkMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQyX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBkMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDNfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGUwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDNfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBlMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQzX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBlMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfS0VZX01BVFJJWF9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwZjAwMDApCkBAIC0xNDgsMTAgKzEzOSwxMCBAQAogI2RlZmluZSBFUDkzWFhfQURDX0JBU0UJCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAjZGVmaW5lIEVQOTNYWF9UT1VDSFNDUkVFTl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1BXTV9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAxMTAwMDApCisjZGVmaW5lIEVQOTNYWF9QV01fUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDExMDAwMCkKICNkZWZpbmUgRVA5M1hYX1BXTV9CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMTEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9SVENfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMTIwMDAwKQorI2RlZmluZSBFUDkzWFhfUlRDX1BIWVNfQkFTRQkJRVA5M1hYX0FQQl9QSFlTKDB4MDAxMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9SVENfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDEyMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDEzMDAwMCkKQEAgLTIxOCw2ICsyMDksMTcgQEAKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfQURJVgkoMTw8MTYpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tFTgkoMTw8MTUpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tESVYJKDE8PDApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHCQlFUDkzWFhfU1lTQ09OX1JFRygweDljKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19SRVZfTUFTSwkoMHhmMDAwMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfUkVWX1NISUZUCSgyOCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfU0JPT1QJKDE8PDgpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xDU043CSgxPDw3KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NONgkoMTw8NikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfTEFTRE8JKDE8PDUpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xFRURBCSgxPDw0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MRUVDTEsJKDE8PDMpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xDU04yCSgxPDwxKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NOMQkoMTw8MCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TV0xPQ0sJCUVQOTNYWF9TWVNDT05fUkVHKDB4YzApCiAKICNkZWZpbmUgRVA5M1hYX1dBVENIRE9HX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDE0MDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDBhMTQ5OGEuLmM5OTFiMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMTE0LDE3ICsxMTQsOSBAQAogICogICAgICAgICAgQjAuLkI3ICAoNy4uMTUpIHRvIGlycSA3Mi4uNzksIGFuZAogICogICAgICAgICAgRjAuLkY3ICgxNi4uMjQpIHRvIGlycSA4MC4uODcuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKGdwaW8gPD0gRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKQotCQlyZXR1cm4gNjQgKyBncGlvOworI2RlZmluZSBncGlvX3RvX2lycShncGlvKQlcCisJKCgoZ3BpbykgPD0gRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKSA/ICg2NCArIChncGlvKSkgOiAtRUlOVkFMKQogCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gaXJxIC0gZ3Bpb190b19pcnEoMCk7Ci19CisjZGVmaW5lIGlycV90b19ncGlvKGlycSkJKChpcnEpIC0gZ3Bpb190b19pcnEoMCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDkyNWIxMmUuLjU1NDA2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTksNiArOSwxMiBAQAogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgwMDAwMDAwMCkKICNlbGlmIGRlZmluZWQoQ09ORklHX0VQOTNYWF9TRENFMF9QSFlTX09GRlNFVCkKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4YzAwMDAwMDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19FUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQpCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweGQwMDAwMDAwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQorI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHhlMDAwMDAwMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0VQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVCkKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ZjAwMDAwMDApCiAjZWxzZQogI2Vycm9yICJLY29uZmlnIGJ1ZzogTm8gRVA5M3h4IFBIWVNfT0ZGU0VUIHNldCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCAwMWEwZjA4Li40NjlmZDk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtNCw2ICs0LDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgaTJjX2JvYXJkX2luZm87CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbzsKQEAgLTE2LDcgKzE3LDYgQEAKIAogdm9pZCBlcDkzeHhfbWFwX2lvKHZvaWQpOwogdm9pZCBlcDkzeHhfaW5pdF9pcnEodm9pZCk7Ci12b2lkIGVwOTN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7CiAKIC8qIEVQOTN4eCBTeXN0ZW0gQ29udHJvbGxlciBzb2Z0d2FyZSBsb2NrZWQgcmVnaXN0ZXIgd3JpdGUgKi8KIHZvaWQgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh1bnNpZ25lZCBpbnQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZyk7CkBAIC0zMyw3ICszMyw4IEBACiB9CiAKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX2V0aChzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhICpkYXRhLCBpbnQgY29weV9hZGRyKTsKLXZvaWQgZXA5M3h4X3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBudW0pOwordm9pZCBlcDkzeHhfcmVnaXN0ZXJfaTJjKHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhICpkYXRhLAorCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG51bSk7CiB2b2lkIGVwOTN4eF9yZWdpc3Rlcl9mYihzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvICpkYXRhKTsKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX3B3bShpbnQgcHdtMCwgaW50IHB3bTEpOwogaW50IGVwOTN4eF9wd21fYWNxdWlyZV9ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwppbmRleCAwYTMxM2U4Li5kODNiODA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwpAQCAtMiw3ICsyLDkgQEAKICAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBDb250ZWMgU3RldWVydW5nc3RlY2huaWsgJiBBdXRvbWF0aW9uIEdtYkgKLSAqICAgICAgICAgICAgICAgICAgIE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+CisgKiAgICAgICAgICAgICAgICAgICAgTWFuZnJlZCBHcnViZXIgPG0uZ3J1YmVyQHRpcm9sLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBDb250ZWMgU3RldWVydW5nc3RlY2huaWsgJiBBdXRvbWF0aW9uIEdtYkgKKyAqICAgICAgICAgICAgICAgICAgICBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTIwLDEwNCArMjIsMTI0IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCiAKLXN0YXRpYyBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhIG1pY3JvOV9ldGhfZGF0YSA9IHsKLQkucGh5X2lkCQk9IDB4MWYsCi19OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1pY3JvOSBOT1IgRmxhc2gKKyAqCisgKiBNaWNybzktSGlnaCBoYXMgdXAgdG8gNjRNQiBvZiAzMi1iaXQgZmxhc2ggb24gQ1MxCisgKiBNaWNybzktTWlkIGhhcyB1cCB0byA2NE1CIG9mIGVpdGhlciAzMi1iaXQgb3IgMTYtYml0IGZsYXNoIG9uIENTMQorICogTWljcm85LUxpdGUgdXNlcyBhIHNlcGVyYXRlIE1URCBtYXAgZHJpdmVyIGZvciBmbGFzaCBzdXBwb3J0CisgKiBNaWNybzktU2xpbSBoYXMgdXAgdG8gNjRNQiBvZiBlaXRoZXIgMzItYml0IG9yIDE2LWJpdCBmbGFzaCBvbiBDUzEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWljcm85X2ZsYXNoX2RhdGE7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtaWNybzlfaW5pdCh2b2lkKQotewotCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJm1pY3JvOV9ldGhfZGF0YSwgMSk7Ci19Ci0KLS8qCi0gKiBNaWNybzktSAotICovCi0jaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85SAotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWljcm85aF9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSA0LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaWNybzloX2ZsYXNoX3Jlc291cmNlID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaWNybzlfZmxhc2hfcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CQk9IEVQOTNYWF9DUzFfUEhZU19CQVNFLAogCS5lbmQJCT0gRVA5M1hYX0NTMV9QSFlTX0JBU0UgKyBTWl82NE0gLSAxLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1pY3JvOWhfZmxhc2ggPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaWNybzlfZmxhc2ggPSB7CiAJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAkJPSAwLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZtaWNybzloX2ZsYXNoX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm1pY3JvOV9mbGFzaF9kYXRhLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZtaWNybzloX2ZsYXNoX3Jlc291cmNlLAorCS5yZXNvdXJjZQk9ICZtaWNybzlfZmxhc2hfcmVzb3VyY2UsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgbWljcm85aF9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgX19taWNybzlfcmVnaXN0ZXJfZmxhc2godW5zaWduZWQgaW50IHdpZHRoKQogewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWljcm85aF9mbGFzaCk7CisJbWljcm85X2ZsYXNoX2RhdGEud2lkdGggPSB3aWR0aDsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWljcm85X2ZsYXNoKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOWhfaW5pdF9tYWNoaW5lKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBtaWNybzlfZGV0ZWN0X2Jvb3R3aWR0aCh2b2lkKQoreworCXUzMiB2OworCisJLyogRGV0ZWN0IHRoZSBidXMgd2lkdGggb2YgdGhlIGV4dGVybmFsIGZsYXNoIG1lbW9yeSAqLworCXYgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX1NZU0NGRyk7CisJaWYgKHYgJiBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NONykKKwkJcmV0dXJuIDQ7IC8qIDMyLWJpdCAqLworCWVsc2UKKwkJcmV0dXJuIDI7IC8qIDE2LWJpdCAqLworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbWljcm85X3JlZ2lzdGVyX2ZsYXNoKHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfbWljcm85KCkpCisJCV9fbWljcm85X3JlZ2lzdGVyX2ZsYXNoKDQpOworCWVsc2UgaWYgKG1hY2hpbmVfaXNfbWljcm85bSgpIHx8IG1hY2hpbmVfaXNfbWljcm85cygpKQorCQlfX21pY3JvOV9yZWdpc3Rlcl9mbGFzaChtaWNybzlfZGV0ZWN0X2Jvb3R3aWR0aCgpKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWljcm85IEV0aGVybmV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhIG1pY3JvOV9ldGhfZGF0YSA9IHsKKwkucGh5X2lkCQk9IDB4MWYsCit9OworCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtaWNybzlfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CiAJZXA5M3h4X2luaXRfZGV2aWNlcygpOwotCW1pY3JvOV9pbml0KCk7Ci0JbWljcm85aF9pbml0KCk7CisJZXA5M3h4X3JlZ2lzdGVyX2V0aCgmbWljcm85X2V0aF9kYXRhLCAxKTsKKwltaWNybzlfcmVnaXN0ZXJfZmxhc2goKTsKIH0KIAotTUFDSElORV9TVEFSVChNSUNSTzksICJDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1IIikKLQkvKiBNYWludGFpbmVyOiBNYW5mcmVkIEdydWJlciA8bWFuZnJlZC5ncnViZXJAY29udGVjLmF0PiAqLworCisjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85SAorTUFDSElORV9TVEFSVChNSUNSTzksICJDb250ZWMgTWljcm85LUhpZ2giKQorCS8qIE1haW50YWluZXI6IEh1YmVydCBGZXVyc3RlaW4gPGh1YmVydC5mZXVyc3RlaW5AY29udGVjLmF0PiAqLwogCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfU1lOQyArIDB4MTAwLAogCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCi0JLmluaXRfbWFjaGluZQk9IG1pY3JvOWhfaW5pdF9tYWNoaW5lLAorCS5pbml0X21hY2hpbmUJPSBtaWNybzlfaW5pdF9tYWNoaW5lLAogTUFDSElORV9FTkQKICNlbmRpZgogCi0vKgotICogTWljcm85LU0KLSAqLwogI2lmZGVmIENPTkZJR19NQUNIX01JQ1JPOU0KLXN0YXRpYyB2b2lkIF9faW5pdCBtaWNybzltX2luaXRfbWFjaGluZSh2b2lkKQotewotCWVwOTN4eF9pbml0X2RldmljZXMoKTsKLQltaWNybzlfaW5pdCgpOwotfQotCi1NQUNISU5FX1NUQVJUKE1JQ1JPOU0sICJDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1NIikKLQkvKiBNYWludGFpbmVyOiBNYW5mcmVkIEdydWJlciA8bWFuZnJlZC5ncnViZXJAY29udGVjLmF0PiAqLworTUFDSElORV9TVEFSVChNSUNSTzlNLCAiQ29udGVjIE1pY3JvOS1NaWQiKQorCS8qIE1haW50YWluZXI6IEh1YmVydCBGZXVyc3RlaW4gPGh1YmVydC5mZXVyc3RlaW5AY29udGVjLmF0PiAqLwogCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfU1lOQyArIDB4MTAwLAorCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfQVNZTkMgKyAweDEwMCwKIAkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBtaWNybzltX2luaXRfbWFjaGluZSwKKwkuaW5pdF9tYWNoaW5lCT0gbWljcm85X2luaXRfbWFjaGluZSwKIE1BQ0hJTkVfRU5ECiAjZW5kaWYKIAotLyoKLSAqIE1pY3JvOS1MCi0gKi8KICNpZmRlZiBDT05GSUdfTUFDSF9NSUNSTzlMCi1zdGF0aWMgdm9pZCBfX2luaXQgbWljcm85bF9pbml0X21hY2hpbmUodm9pZCkKLXsKLQllcDkzeHhfaW5pdF9kZXZpY2VzKCk7Ci0JbWljcm85X2luaXQoKTsKLX0KLQotTUFDSElORV9TVEFSVChNSUNSTzlMLCAiQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTCIpCi0JLyogTWFpbnRhaW5lcjogTWFuZnJlZCBHcnViZXIgPG1hbmZyZWQuZ3J1YmVyQGNvbnRlYy5hdD4gKi8KK01BQ0hJTkVfU1RBUlQoTUlDUk85TCwgIkNvbnRlYyBNaWNybzktTGl0ZSIpCisJLyogTWFpbnRhaW5lcjogSHViZXJ0IEZldXJzdGVpbiA8aHViZXJ0LmZldXJzdGVpbkBjb250ZWMuYXQ+ICovCiAJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UzX1BIWVNfQkFTRV9TWU5DICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKLQkuaW5pdF9tYWNoaW5lCT0gbWljcm85bF9pbml0X21hY2hpbmUsCisJLmluaXRfbWFjaGluZQk9IG1pY3JvOV9pbml0X21hY2hpbmUsCiBNQUNISU5FX0VORAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTUFDSF9NSUNSTzlTCitNQUNISU5FX1NUQVJUKE1JQ1JPOVMsICJDb250ZWMgTWljcm85LVNsaW0iKQorCS8qIE1haW50YWluZXI6IEh1YmVydCBGZXVyc3RlaW4gPGh1YmVydC5mZXVyc3RlaW5AY29udGVjLmF0PiAqLworCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfQVNZTkMgKyAweDEwMCwKKwkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBtaWNybzlfaW5pdF9tYWNoaW5lLAorTUFDSElORV9FTkQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKaW5kZXggNDA4OTk1MS4uZmY1ZTMzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCkBAIC02MzgsOSArNjM4LDkgQEAKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMCIsIE5VTEwsIHNkaGMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMSIsIE5VTEwsIHNkaGMyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMiIsIE5VTEwsIHNkaGMzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkxIiwgY3NwaTFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTIiLCBjc3BpMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMyIsIGNzcGkzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIGNzcGkxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMSIsIE5VTEwsIGNzcGkyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMiIsIE5VTEwsIGNzcGkzX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1mYi4wIiwgTlVMTCwgbGNkY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc2kiLCBjc2lfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYl9jbGspCkBAIC02NjUsNyArNjY1LDcgQEAKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNhaGFyYTIiLCBzYWhhcmEyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc3RpY2siLCBtc3RpY2tfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAid2RvZyIsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncGlvIiwgZ3Bpb19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyYzJfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYwppbmRleCBlZTY1ZGRhLi45MDZkNTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYwpAQCAtMjMsNiArMjMsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTM1LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCkBAIC03OCw4ICs4Myw2IEBACiAJUEM2X1BGX0kyQzJfU0NMLAogCS8qIFNQSTEgKi8KIAlQRDI1X1BGX0NTUEkxX1JEWSwKLQlQRDI3X1BGX0NTUEkxX1NTMSwKLQlQRDI4X1BGX0NTUEkxX1NTMCwKIAlQRDI5X1BGX0NTUEkxX1NDTEssCiAJUEQzMF9QRl9DU1BJMV9NSVNPLAogCVBEMzFfUEZfQ1NQSTFfTU9TSSwKQEAgLTE5Niw2ICsxOTksODYgQEAKIAl9CiB9OwogCitzdGF0aWMgaW50IHBjbTAzOF9zcGlfY3NbXSA9IHtHUElPX1BPUlREICsgMjh9OworCitzdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHBjbTAzOF9zcGlfMF9kYXRhID0geworCS5jaGlwc2VsZWN0ID0gcGNtMDM4X3NwaV9jcywKKwkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHBjbTAzOF9zcGlfY3MpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkaGMxX2NvbnN1bWVyc1tdID0geworCXsKKwkJLmRldgk9ICZteGNfc2RoY19kZXZpY2UxLmRldiwKKwkJLnN1cHBseQk9ICJzZGhjX3ZjYyIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZGhjMV9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDMwMDAwMDAsCisJCS5tYXhfdVYgPSAzNDAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFIHwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwKKwkJCVJFR1VMQVRPUl9NT0RFX0ZBU1QsCisJCS5hbHdheXNfb24gPSAwLAorCQkuYm9vdF9vbiA9IDAsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShzZGhjMV9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHNkaGMxX2NvbnN1bWVycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBjYW1fY29uc3VtZXJzW10gPSB7CisJeworCQkuZGV2CT0gTlVMTCwKKwkJLnN1cHBseQk9ICJpbXhfY2FtX3ZjYyIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBjYW1fZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYgPSAzMDAwMDAwLAorCQkubWF4X3VWID0gMzQwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8CisJCQlSRUdVTEFUT1JfTU9ERV9GQVNULAorCQkuYWx3YXlzX29uID0gMCwKKwkJLmJvb3Rfb24gPSAwLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoY2FtX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gY2FtX2NvbnN1bWVycywKK307CisKK3N0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9pbml0X2RhdGEgcGNtMDM4X3JlZ3VsYXRvcnNbXSA9IHsKKwl7CisJCS5pZCA9IE1DMTM3ODNfUkVHVV9WQ0FNLAorCQkuaW5pdF9kYXRhID0gJmNhbV9kYXRhLAorCX0sIHsKKwkJLmlkID0gTUMxMzc4M19SRUdVX1ZNTUMxLAorCQkuaW5pdF9kYXRhID0gJnNkaGMxX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWMxMzc4M19wbGF0Zm9ybV9kYXRhIHBjbTAzOF9wbWljID0geworCS5yZWd1bGF0b3JzID0gcGNtMDM4X3JlZ3VsYXRvcnMsCisJLm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShwY20wMzhfcmVndWxhdG9ycyksCisJLmZsYWdzID0gTUMxMzc4M19VU0VfQURDIHwgTUMxMzc4M19VU0VfUkVHVUxBVE9SIHwKKwkJIE1DMTM3ODNfVVNFX1RPVUNIU0NSRUVOLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwY20wMzhfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzID0gIm1jMTM3ODMiLAorCQkuaXJxID0gSVJRX0dQSU9CKDIzKSwKKwkJLm1heF9zcGVlZF9oeiA9IDMwMDAwMCwKKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSAwLAorCQkucGxhdGZvcm1fZGF0YSA9ICZwY20wMzhfcG1pYywKKwkJLm1vZGUgPSBTUElfQ1NfSElHSCwKKwl9Cit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM4X2luaXQodm9pZCkKIHsKIAlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHBjbTAzOF9waW5zLCBBUlJBWV9TSVpFKHBjbTAzOF9waW5zKSwKQEAgLTIxOSw2ICszMDIsMTUgQEAKIAkvKiBQRTE4IGZvciB1c2VyLUxFRCBENDAgKi8KIAlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEUgfCAxOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKIAorCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJLyogTUMxMzc4MyBJUlEgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEIgfCAyMyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UwLCAmcGNtMDM4X3NwaV8wX2RhdGEpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBjbTAzOF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHBjbTAzOF9zcGlfYm9hcmRfaW5mbykpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiAKICNpZmRlZiBDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKaW5kZXggYzI2MWY1OS4uM2NiN2Y0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYwpAQCAtMzksNyArMzksNiBAQAogCVBCN19QRl9TRDJfRDMsCiAJUEI4X1BGX1NEMl9DTUQsCiAJUEI5X1BGX1NEMl9DTEssCi0JR1BJT19QT1JUQyB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19JTiwgLyogY2FyZCBkZXRlY3QgKi8KIAkvKiBkaXNwbGF5ICovCiAJUEE1X1BGX0xTQ0xLLAogCVBBNl9QRl9MRDAsCkBAIC0yMjgsNiArMjI3LDcgQEAKIAkJCSJQQ005NzAiKTsKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19mYl9kZXZpY2UsICZwY20wMzhfZmJfZGF0YSk7CisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCAmc2RoY19wZGF0YSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205NzBfc2phMTAwMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwppbmRleCBlYjEyZGUxLi42MzUxMWRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKQEAgLTEsNCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKaW5kZXggOTJhYTRmZC4uZDIzYWU1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIsIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KQEAgLTIzLDE5ICs0MSwxMiBAQAogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCi1zdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9ib2FyZF9pbmZvID0gewotCS53aWR0aCA9IDEsCi0JLmh3X2VjYyA9IDEsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19pbml0KHZvaWQpCiB7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgTlVMTCk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmbmFuZF9ib2FyZF9pbmZvKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka190aW1lcl9pbml0KHZvaWQpCiB7CiAJbXgyNV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwppbmRleCBmZTVjNDIxLi5jNTk1MjYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JvdGdfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2IiLCB1c2JvdGdfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYm90Z19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGNfd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWF4IiwgbWF4X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImFkbXV4IiwgYWRtdXhfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NpIiwgY3NpX2NsaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCmluZGV4IDA2YmQ2MTguLmIyYTNiY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwpAQCAtNTMwLDcgKzUzMCw3IEBACiAJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjIiLCBOVUxMLCBjc3BpM19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQiLCBncHRfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicHdtIiwgcHdtX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIndkb2ciLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0MV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlcGl0IiwgZXBpdDJfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCmluZGV4IDhhNTc3ZjMuLmU2YWJlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogICogU1BJIG1hc3RlciBjb250cm9sbGVyCiAgKiAzIGNoYW5uZWxzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3NwaV8wX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpXzBfcmVzb3VyY2VzW10gPSB7CiAJewogCSAgICAgICAuc3RhcnQgPSBDU1BJMV9CQVNFX0FERFIsCiAJICAgICAgIC5lbmQgPSBDU1BJMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCkBAIC00NzEsNyArNDcxLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3BpXzFfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfMV9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydCA9IENTUEkyX0JBU0VfQUREUiwKIAkJLmVuZCA9IENTUEkyX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zcGlfMl9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV8yX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ID0gQ1NQSTNfQkFTRV9BRERSLAogCQkuZW5kID0gQ1NQSTNfQkFTRV9BRERSICsgU1pfNEsgLSAxLApAQCAtNDk1LDI1ICs0OTUsMjUgQEAKIAl9LAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTAgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMCA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzBfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTEgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMSA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAxLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzFfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTIgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMiA9IHsKIAkubmFtZSA9ICJzcGlfaW14IiwKIAkuaWQgPSAyLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBpbXhfc3BpXzJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpXzJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpXzJfcmVzb3VyY2VzLAogfTsKIAogI2lmZGVmIENPTkZJR19BUkNIX01YMzUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAppbmRleCA3OWYyYmU0Li5hYjg3NDE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCkBAIC0yMCw3ICsyMCw3IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcm5nYV9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTE7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCmluZGV4IGFkNWExMTIuLmJlZGY1YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbW0uYwpAQCAtODEsNiArODEsNyBAQAogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQogdm9pZCBfX2luaXQgbXgzNV9tYXBfaW8odm9pZCkKIHsKIAlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgzNSk7CkBAIC04OSw2ICs5MCw3IEBACiAKIAlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKIH0KKyNlbmRpZgogCiB2b2lkIF9faW5pdCBteDMxX2luaXRfaXJxKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwppbmRleCA0MjkyMGY5Li44YWQ1Y2MzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKQEAgLTIxOSw2ICsyMTksMTAgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGFtc19kZWx0YV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwogCWlvdGFibGVfaW5pdChhbXNfZGVsdGFfaW9fZGVzYywgQVJSQVlfU0laRShhbXNfZGVsdGFfaW9fZGVzYykpOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBhbXNfZGVsdGFfY29uZmlnOwpAQCAtMjMxLDYgKzIzNSw4IEBACiAKIAlvbWFwX3VzYl9pbml0KCZhbXNfZGVsdGFfdXNiX2NvbmZpZyk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoYW1zX2RlbHRhX2RldmljZXMsIEFSUkFZX1NJWkUoYW1zX2RlbHRhX2RldmljZXMpKTsKKworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX1JTVENUMSkgfCAweDAwMDQsIEFSTV9SU1RDVDEpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGFtc19kZWx0YV9tb2RlbV9wb3J0c1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwppbmRleCBmYjQ3MjM5Li42YzhhNDFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwpAQCAtNjQsNiArNjQsMTQgQEAKIHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJCW9tYXBfdXNiX2luaXQoJmdlbmVyaWMxNTEwX3VzYl9jb25maWcpOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKaW5kZXggY2MyYWJiYi4uY2Q2YzM5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC0zNzYsNiArMzc2LDI2IEBACiB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJdW5zaWduZWQgY2hhciByZWc7CisKKwkJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKworCQlyZWcgPSBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXJlZyB8PSBPTUFQMTUxMF9GUEdBX1BDUl9DT00xX0VOOworCQlmcGdhX3dyaXRlKHJlZywgT01BUDE1MTBfRlBHQV9QT1dFUik7CisJCXVkZWxheSgxMCk7CisKKwkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTjsKKwkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQl1ZGVsYXkoMTApOworCiAJCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGlubm92YXRvcjE1MTBfZGV2aWNlcywgQVJSQVlfU0laRShpbm5vdmF0b3IxNTEwX2RldmljZXMpKTsKIAkJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oaW5ub3ZhdG9yMTUxMF9ib2FyZGluZm8sCiAJCQkJQVJSQVlfU0laRShpbm5vdmF0b3IxNTEwX2JvYXJkaW5mbykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKaW5kZXggOTBkZDA0My4uNGRlMjU4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCkBAIC0zNDIsNiArMzQyLDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BhbG10ZV9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCW9tYXBfYm9hcmRfY29uZmlnID0gcGFsbXRlX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShwYWxtdGVfY29uZmlnKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKaW5kZXggODI1NjEzOS4uZDk3MmNmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCkBAIC0yODksNiArMjg5LDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BhbG10dF9pbml0KHZvaWQpCiB7CisJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCW9tYXBfbXB1X3dkdF9tb2RlKDApOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBwYWxtdHRfY29uZmlnOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwppbmRleCA4MWI2YmRlLi45ODZiZDRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwpAQCAtMzA3LDYgKzMwNywxNCBAQAogc3RhdGljIHZvaWQgX19pbml0CiBvbWFwX3BhbG16NzFfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAlwYWxtejcxX2dwaW9fc2V0dXAoMSk7CiAJb21hcF9tcHVfd2R0X21vZGUoMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCmluZGV4IDAyYzg1Y2EuLjA1NmFlNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwpAQCAtMzc3LDYgKzM3NywxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9zeDFfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzeDFfZGV2aWNlcywgQVJSQVlfU0laRShzeDFfZGV2aWNlcykpOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBzeDFfY29uZmlnOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKaW5kZXggYzA2ZTdhNS4uMDdiMDc1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCkBAIC0xNTIsNiArMTUyLDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB2b2ljZWJsdWVfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAkvKiBXYXRjaGRvZyAqLwogCWdwaW9fcmVxdWVzdCgwLCAiV2F0Y2hkb2ciKTsKIAkvKiBzbWM5MXggcmVzZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCmluZGV4IGQ0OTZlNTAuLmQyMzk3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwpAQCAtMTMxLDggKzEzMSw2IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IE9NQVBfTUFYX05SX1BPUlRTOyBpKyspIHsKLQkJdW5zaWduZWQgY2hhciByZWc7Ci0KIAkJc3dpdGNoIChpKSB7CiAJCWNhc2UgMDoKIAkJCXVhcnQxX2NrID0gY2xrX2dldChOVUxMLCAidWFydDFfY2siKTsKQEAgLTE0MywxNiArMTQxLDYgQEAKIAkJCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCiAJCQkJCWNsa19zZXRfcmF0ZSh1YXJ0MV9jaywgMTIwMDAwMDApOwogCQkJfQotCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKLQkJCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKSB7Ci0JCQkJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTFfRU47Ci0JCQkJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQl9Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJdWFydDJfY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9jayIpOwpAQCAtMTY1LDE2ICsxNTMsNiBAQAogCQkJCWVsc2UKIAkJCQkJY2xrX3NldF9yYXRlKHVhcnQyX2NrLCA0ODAwMDAwMCk7CiAJCQl9Ci0JCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOwotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOwotCQkJCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpIHsKLQkJCQkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTjsKLQkJCQkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQl1ZGVsYXkoMTApOwotCQkJCX0KLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQl1YXJ0M19jayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2NrIik7CkBAIC0xODUsMTAgKzE2Myw2IEBACiAJCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQkJCQljbGtfc2V0X3JhdGUodWFydDNfY2ssIDEyMDAwMDAwKTsKIAkJCX0KLQkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKLQkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCW9tYXBfc2VyaWFsX3Jlc2V0KCZzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggNzViMWM3ZS4uYWFkMTk0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtNzMsOSArNzMsMjEgQEAKIAlib29sICJPTUFQIDM0MzAgU0RQIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCiAKK2NvbmZpZyBNQUNIX05PS0lBX044MDAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTBfV0lNQVgKKyAgICAgICBib29sCisKIGNvbmZpZyBNQUNIX05PS0lBX044WDAKIAlib29sICJOb2tpYSBOODAwL044MTAiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyNDIwCisJc2VsZWN0IE1BQ0hfTk9LSUFfTjgwMAorCXNlbGVjdCBNQUNIX05PS0lBX044MTAKKwlzZWxlY3QgTUFDSF9OT0tJQV9OODEwX1dJTUFYCiAKIGNvbmZpZyBNQUNIX05PS0lBX1JYNTEKIAlib29sICJOb2tpYSBSWC01MSBib2FyZCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKaW5kZXggZWZhZjA1My4uMGFjYjU1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy1zbWM5MXguaD4KIAogI2luY2x1ZGUgInNkcmFtLXFpbW9uZGEtaHliMThtNTEyMTYwYWYtNi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwppbmRleCBlYjM3YzQwLi42MDlhNWE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwpAQCAtNTgsNiArNTgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF80NDMwc2RwX2luaXRfaXJxKHZvaWQpCiB7CisJb21hcF9ib2FyZF9jb25maWcgPSBzZHA0NDMwX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHA0NDMwX2NvbmZpZyk7CiAJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCwgTlVMTCk7CiAjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCiAJb21hcDJfZ3BfY2xvY2tldmVudF9zZXRfZ3B0aW1lcigxKTsKQEAgLTcwLDggKzcyLDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfaW5pdCh2b2lkKQogewogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDQ0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHA0NDMwX2RldmljZXMpKTsKLQlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDQ0MzBfY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDQ0MzBfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCmluZGV4IGQxMTBhN2YuLmQ1N2VjMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC00MSw3ICs0Miw2IEBACiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCmluZGV4IGU0ZWMwYzUuLjRjNGQ3ZjhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxtYWNoL3VzYi5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgotI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CiAKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKaW5kZXggN2Y2YmY4Ny4uNTMyNmUwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzksNyArNDAsNiBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKaW5kZXggYzFhZjUzMi4uZTM0ZDk2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CkBAIC0yNyw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgotI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CiAjaW5jbHVkZSA8bWFjaC9vbmVuYW5kLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLXNtYzkxeC5oPgogCkBAIC00NDQsNyArNDQ0LDcgQEAKIAkJcng1MV90d2xkYXRhLnZhdXgzID0gJnJ4NTFfdmF1eDNfY2FtOwogCQlyeDUxX3R3bGRhdGEudm1tYzIgPSAmcng1MV92bW1jMjsKIAl9Ci0Jb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDI2MDAsIHJ4NTFfcGVyaXBoZXJhbHNfaTJjX2JvYXJkX2luZm9fMSwKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMjIwMCwgcng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xLAogCQkJQVJSQVlfU0laRShyeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzEpKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMiwgMTAwLCBOVUxMLCAwKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgNDAwLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKaW5kZXggZjkxOTZjMy4uNzg4NjlhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxtYWNoL211eC5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KICNpbmNsdWRlIDxtYWNoL3VzYi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCmluZGV4IGI3YjMyMjAuLmVhMDA0ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KQEAgLTIyLDkgKzIzLDkgQEAKIAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKyNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKIAogLyogWm9vbTIgaGFzIFF3ZXJ0eSBrZXlib2FyZCovCiBzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewpAQCAtMjEzLDcgKzIxNCw4IEBACiB7CiAJb21hcF9ib2FyZF9jb25maWcgPSB6b29tMl9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoem9vbTJfY29uZmlnKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAorCQkJCSBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCmluZGV4IGJjNWQzYWMuLmUyZGJlZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYwpAQCAtNzY5LDYgKzc2OSw3IEBACiAJCWlmIChjLT5jcHUgJiBjcHVfbWFzaykgewogCQkJY2xrZGV2X2FkZCgmYy0+bGspOwogCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7CisJCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOwogCQl9CiAKIAkvKiBDaGVjayB0aGUgTVBVIHJhdGUgc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwppbmRleCA0ZWY3YjRmLi41OGFmZjg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC0xMzcsNiArMTM3LDM2IEBACiAJfQogfQogCisvKgorICogX29tYXAyX2Nsa2RtX3NldF9od3N1cCAtIHNldCB0aGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9uIGJpdAorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICogQGVuYWJsZTogaW50IDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGUKKyAqCisgKiBJbnRlcm5hbCBoZWxwZXIgZm9yIGFjdHVhbGx5IHN3aXRjaGluZyB0aGUgYml0IHRoYXQgY29udHJvbHMgaHdzdXAKKyAqIGlkbGUgdHJhbnNpdGlvbnMgZm9yIGNsa2RtLgorICovCitzdGF0aWMgdm9pZCBfb21hcDJfY2xrZG1fc2V0X2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIGludCBlbmFibGUpCit7CisJdTMyIHY7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaWYgKGVuYWJsZSkKKwkJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJCWVsc2UKKwkJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJaWYgKGVuYWJsZSkKKwkJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJCWVsc2UKKwkJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCX0gZWxzZSB7CisJCUJVRygpOworCX0KKworCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAorCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKKwkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKl9jbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTQ1Niw4ICs0ODYsNiBAQAogICovCiB2b2lkIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQl1MzIgdjsKLQogCWlmICghY2xrZG0pCiAJCXJldHVybjsKIApAQCAtNDczLDE4ICs1MDEsNyBAQAogCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCiAJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQotCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOwotCWVsc2UKLQkJQlVHKCk7Ci0KLQotCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAotCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKLQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkgICAgQ01fQ0xLU1RDVFJMKTsKKwlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKIAogCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGtkbSk7CiB9CkBAIC01MDAsOCArNTE3LDYgQEAKICAqLwogdm9pZCBvbWFwMl9jbGtkbV9kZW55X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQl1MzIgdjsKLQogCWlmICghY2xrZG0pCiAJCXJldHVybjsKIApAQCAtNTE0LDE2ICs1MjksNyBAQAogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZGlzYWJsaW5nIGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGZvciAlc1xuIiwKIAkJIGNsa2RtLT5uYW1lKTsKIAotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOwotCWVsc2UKLQkJQlVHKCk7Ci0KLQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywKLQkJCSAgICB2IDw8IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayksCi0JCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDApOwogCiAJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKIAkJX2Nsa2RtX2RlbF9hdXRvZGVwcyhjbGtkbSk7CkBAIC01NjksMTAgKzU3NSwxNCBAQAogCXYgPSBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChjbGtkbSk7CiAKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSB8fAotCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKQorCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKSB7CisJCS8qIERpc2FibGUgSFcgdHJhbnNpdGlvbnMgd2hlbiB3ZSBhcmUgY2hhbmdpbmcgZGVwcyAqLworCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAwKTsKIAkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7Ci0JZWxzZQorCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKKwl9IGVsc2UgewogCQlvbWFwMl9jbGtkbV93YWtldXAoY2xrZG0pOworCX0KIAogCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihjbGtkbS0+cHdyZG0ucHRyKTsKIAlwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goY2xrZG0pOwpAQCAtNjIzLDEwICs2MzMsMTQgQEAKIAl2ID0gb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQoY2xrZG0pOwogCiAJaWYgKChjcHVfaXNfb21hcDM0eHgoKSAmJiB2ID09IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykgfHwKLQkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkKKwkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkgeworCQkvKiBEaXNhYmxlIEhXIHRyYW5zaXRpb25zIHdoZW4gd2UgYXJlIGNoYW5naW5nIGRlcHMgKi8KKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMCk7CiAJCV9jbGtkbV9kZWxfYXV0b2RlcHMoY2xrZG0pOwotCWVsc2UKKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CisJfSBlbHNlIHsKIAkJb21hcDJfY2xrZG1fc2xlZXAoY2xrZG0pOworCX0KIAogCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGtkbSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwppbmRleCBlM2EzYmFkLi41NmJlODdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCkBAIC0zMDIsNyArMzAyLDkgQEAKIAlwd3JkbV9pbml0KHBvd2VyZG9tYWluc19vbWFwKTsKIAljbGtkbV9pbml0KGNsb2NrZG9tYWluc19vbWFwLCBjbGtkbV9wd3JkbV9hdXRvZGVwcyk7CiAJb21hcDJfY2xrX2luaXQoKTsKKyNlbmRpZgogCW9tYXBfc2VyaWFsX2Vhcmx5X2luaXQoKTsKKyNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUDQKIAlvbWFwX2h3bW9kX2xhdGVfaW5pdCgpOwogCW9tYXBfcG1faWZfaW5pdCgpOwogCW9tYXAyX3NkcmNfaW5pdChzZHJjX2NzMCwgc2RyY19jczEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggMzc4YzJmNi4uODk0NjMxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCkBAIC02MzksMTQgKzYzOSwxNSBAQAogCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX0lPX0VOIHwgT01BUDM0MzBfV0tVUF9FTiwKIAkJCSAgT0NQX01PRCwgT01BUDNfUFJNX0lSUUVOQUJMRV9NUFVfT0ZGU0VUKTsKIAotCS8qIEVuYWJsZSBHUElPIHdha2V1cHMgaW4gUEVSICovCisJLyogRW5hYmxlIHdha2V1cHMgaW4gUEVSICovCiAJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfRU5fR1BJTzIgfCBPTUFQMzQzMF9FTl9HUElPMyB8CiAJCQkgIE9NQVAzNDMwX0VOX0dQSU80IHwgT01BUDM0MzBfRU5fR1BJTzUgfAotCQkJICBPTUFQMzQzMF9FTl9HUElPNiwgT01BUDM0MzBfUEVSX01PRCwgUE1fV0tFTik7CisJCQkgIE9NQVAzNDMwX0VOX0dQSU82IHwgT01BUDM0MzBfRU5fVUFSVDMsCisJCQkgIE9NQVAzNDMwX1BFUl9NT0QsIFBNX1dLRU4pOwogCS8qIGFuZCBhbGxvdyB0aGVtIHRvIHdha2UgdXAgTVBVICovCiAJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfR1JQU0VMX0dQSU8yIHwgT01BUDM0MzBfRU5fR1BJTzMgfAogCQkJICBPTUFQMzQzMF9HUlBTRUxfR1BJTzQgfCBPTUFQMzQzMF9FTl9HUElPNSB8Ci0JCQkgIE9NQVAzNDMwX0dSUFNFTF9HUElPNiwKKwkJCSAgT01BUDM0MzBfR1JQU0VMX0dQSU82IHwgT01BUDM0MzBfRU5fVUFSVDMsCiAJCQkgIE9NQVAzNDMwX1BFUl9NT0QsIE9NQVAzNDMwX1BNX01QVUdSUFNFTCk7CiAKIAkvKiBEb24ndCBhdHRhY2ggSVZBIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCmluZGV4IGFlMjE4NjguLjU0ZGZlYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtMTA5LDE2ICsxMDksNiBAQAogCQkucmVnc2hpZnQJPSAyLAogCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAogCX0sIHsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAotCQkubWVtYmFzZQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUF9VQVJUNF9CQVNFKSwKLQkJLm1hcGJhc2UJPSBPTUFQX1VBUlQ0X0JBU0UsCi0JCS5pcnEJCT0gNzAsCi0JCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJLnJlZ3NoaWZ0CT0gMiwKLQkJLnVhcnRjbGsJPSBPTUFQMjRYWF9CQVNFX0JBVUQgKiAxNiwKLQl9LCB7Ci0jZW5kaWYKIAkJLmZsYWdzCQk9IDAKIAl9CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCmluZGV4IGFhYzJjZGEuLjEwMjkxNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKQEAgLTQzLDEwICs0MywxMCBAQAogCiAjZGVmaW5lIENNX1gzMDBfRVRIX1BIWVMJMHgwODAwMDAxMAogCi0jZGVmaW5lIEdQSU84Ml9NTUMyX0lSUQkJKDgyKQotI2RlZmluZSBHUElPODVfTU1DMl9XUAkJKDg1KQorI2RlZmluZSBHUElPODJfTU1DX0lSUQkJKDgyKQorI2RlZmluZSBHUElPODVfTU1DX1dQCQkoODUpCiAKLSNkZWZpbmUJQ01fWDMwMF9NTUMyX0lSUQlJUlFfR1BJTyhHUElPODJfTU1DMl9JUlEpCisjZGVmaW5lCUNNX1gzMDBfTU1DX0lSUQkJSVJRX0dQSU8oR1BJTzgyX01NQ19JUlEpCiAKICNkZWZpbmUgR1BJTzk1X1JUQ19DUwkJKDk1KQogI2RlZmluZSBHUElPOTZfUlRDX1dSCQkoOTYpCkBAIC0yOTIsMzQgKzI5MiwzNCBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NTUMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19NT0RVTEUpCi0vKiBUaGUgZmlyc3QgTU1DIHNsb3Qgb2YgQ00tWDMwMCBpcyBoYXJkd2lyZWQgdG8gTGliZXJ0YXMgY2FyZCBhbmQgaGFzCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNtX3gzMDBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLmRldGVjdF9kZWxheQkJPSAyMCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJTzgyX01NQ19JUlEsCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPODVfTU1DX1dQLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAorfTsKKworLyogVGhlIHNlY29uZCBNTUMgc2xvdCBvZiBDTS1YMzAwIGlzIGhhcmR3aXJlZCB0byBMaWJlcnRhcyBjYXJkIGFuZCBoYXMKICAgIG5vIGRldGVjdGlvbi9ybyBwaW5zICovCi1zdGF0aWMgaW50IGNtX3gzMDBfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIGlycV9oYW5kbGVyX3QgY21feDMwMF9kZXRlY3RfaW50LAotCQkJICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgaXJxX2hhbmRsZXJfdCBjbV94MzAwX2RldGVjdF9pbnQsCisJdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY21feDMwMF9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBjbV94MzAwX21jaTJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgY21feDMwMF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CQk9IDIwLAotCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQkJPSBjbV94MzAwX21jaV9pbml0LAotCS5leGl0CQkJPSBjbV94MzAwX21jaV9leGl0LAotCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCi0JLmdwaW9fY2FyZF9ybwkJPSAtMSwKLQkuZ3Bpb19wb3dlcgkJPSAtMSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgY21feDMwMF9tY2kyX3BsYXRmb3JtX2RhdGEgPSB7CiAJLmRldGVjdF9kZWxheQkJPSAyMCwKIAkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJTzgyX01NQzJfSVJRLAotCS5ncGlvX2NhcmRfcm8JCT0gR1BJTzg1X01NQzJfV1AsCisJLmluaXQgCQkJPSBjbV94MzAwX21jaTJfaW5pdCwKKwkuZXhpdAkJCT0gY21feDMwMF9tY2kyX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAogCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKaW5kZXggM2E4ZWUyMi4uOTgzY2M4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAogc3RhdGljIHB4YV9mcmVxc190IHB4YTI3eF9mcmVxc1tdID0gewogCXsxMDQwMDAsIDEwNDAwMCwgUFhBMjd4X0NDQ1IoMSwJIDgsIDIpLCAwLCBDQ0xLQ0ZHMigxLCAwLCAxKSwgIDkwMDAwMCwgMTcwNTAwMCB9LAotCXsxNTYwMDAsIDEwNDAwMCwgUFhBMjd4X0NDQ1IoMSwJIDgsIDYpLCAwLCBDQ0xLQ0ZHMigxLCAxLCAxKSwgMTAwMDAwMCwgMTcwNTAwMCB9LAorCXsxNTYwMDAsIDEwNDAwMCwgUFhBMjd4X0NDQ1IoMSwJIDgsIDMpLCAwLCBDQ0xLQ0ZHMigxLCAwLCAxKSwgMTAwMDAwMCwgMTcwNTAwMCB9LAogCXsyMDgwMDAsIDIwODAwMCwgUFhBMjd4X0NDQ1IoMCwgMTYsIDIpLCAxLCBDQ0xLQ0ZHMigwLCAwLCAxKSwgMTE4MDAwMCwgMTcwNTAwMCB9LAogCXszMTIwMDAsIDIwODAwMCwgUFhBMjd4X0NDQ1IoMSwgMTYsIDMpLCAxLCBDQ0xLQ0ZHMigxLCAwLCAxKSwgMTI1MDAwMCwgMTcwNTAwMCB9LAogCXs0MTYwMDAsIDIwODAwMCwgUFhBMjd4X0NDQ1IoMSwgMTYsIDQpLCAxLCBDQ0xLQ0ZHMigxLCAwLCAxKSwgMTM1MDAwMCwgMTcwNTAwMCB9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jc2I3MjYuYwppbmRleCA3OTE0MWY4Li45NjU0ODBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jc2I3MjYuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jc2I3MjYuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiB9OwogCiBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIGNzYjcyNl9sYW5fY29uZmlnID0gewotCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKIAkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9QVVNIX1BVTEwsCiAJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCwKIAkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCBlZThkNjAzLi44MmZmNTczIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KQEAgLTM3NSw2ICszNzYsNDMgQEAKIH07CiAKIAorc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHNwaXR6X2dwaW9fa2V5c1tdID0geworCXsKKwkJLnR5cGUJPSBFVl9QV1IsCisJCS5jb2RlCT0gS0VZX1NVU1BFTkQsCisJCS5ncGlvCT0gU1BJVFpfR1BJT19PTl9LRVksCisJCS5kZXNjCT0gIk9uL09mZiIsCisJCS53YWtldXAJPSAxLAorCX0sCisJLyogVHdvIGJ1dHRvbnMgZGV0ZWN0aW5nIHRoZSBsaWQgc3RhdGUgKi8KKwl7CisJCS50eXBlCT0gRVZfU1csCisJCS5jb2RlCT0gMCwKKwkJLmdwaW8JPSBTUElUWl9HUElPX1NXQSwKKwkJLmRlc2MJPSAi77u/RGlzcGxheSBEb3duIiwKKwl9LAorCXsKKwkJLnR5cGUJPSBFVl9TVywKKwkJLmNvZGUJPSAxLAorCQkuZ3Bpbwk9IFNQSVRaX0dQSU9fU1dCLAorCQkuZGVzYwk9ICLvu79MaWQgQ2xvc2VkIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBzcGl0el9ncGlvX2tleXNfcGxhdGZvcm1fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHNwaXR6X2dwaW9fa2V5cywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHNwaXR6X2dwaW9fa2V5cyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGl0el9ncGlvX2tleXNfZGV2aWNlID0geworCS5uYW1lCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc3BpdHpfZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKKwogLyoKICAqIFNwaXR6IExFRHMKICAqLwpAQCAtNjg5LDYgKzcyNyw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnNwaXR6c2Nvb3BfZGV2aWNlLAogCSZzcGl0emtiZF9kZXZpY2UsCisJJnNwaXR6X2dwaW9fa2V5c19kZXZpY2UsCiAJJnNwaXR6bGVkX2RldmljZSwKIAkmc2hhcnBzbF9uYW5kX2RldmljZSwKIAkmc2hhcnBzbF9yb21fZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9NYWtlZmlsZQppbmRleCA4YTU1NDZlLi5iYjdiODE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9NYWtlZmlsZQpAQCAtMjUsNiArMjUsNyBAQAogCiBvYmotJChDT05GSUdfU0ExMTAwX0NPTExJRSkJCSs9IGNvbGxpZS5vCiAKK29iai0kKENPTkZJR19TQTExMDBfSDMxMDApCQkrPSBoMzYwMC5vCiBvYmotJChDT05GSUdfU0ExMTAwX0gzNjAwKQkJKz0gaDM2MDAubwogCiBvYmotJChDT05GSUdfU0ExMTAwX0hBQ0tLSVQpCQkrPSBoYWNra2l0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGU5OTMxNDAuLjkyNjRkODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMTIyLDEwICsxMjIsNyBAQAogCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQogCWhlbHAKIAkgIFRoZSBBUk05MjBUIGlzIGxpY2Vuc2VkIHRvIGJlIHByb2R1Y2VkIGJ5IG51bWVyb3VzIHZlbmRvcnMsCi0JICBhbmQgaXMgdXNlZCBpbiB0aGUgTWF2ZXJpY2sgRVA5MzEyIGFuZCB0aGUgU2Ftc3VuZyBTM0MyNDEwLgotCi0JICBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBNYXZlcmljayBFUDkzMTIgYXQKLQkgIDxodHRwOi8vbGludXhkZXZpY2VzLmNvbS9wcm9kdWN0cy9QRDIzODI4NjYwNjguaHRtbD4uCisJICBhbmQgaXMgdXNlZCBpbiB0aGUgQ2lycnVzIEVQOTN4eCBhbmQgdGhlIFNhbXN1bmcgUzNDMjQxMC4KIAogCSAgU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEFSTTkyMFQgcHJvY2Vzc29yLgogCSAgT3RoZXJ3aXNlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCmluZGV4IDhmNWMxM2YuLjI5NWUyNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCiAKQEAgLTEyMSwxMSArMTIyLDEzIEBACiAgKgktIHRoZSBJY2FjaGUgZG9lcyBub3QgcmVhZCBkYXRhIGZyb20gdGhlIHdyaXRlIGJ1ZmZlcgogICovCiBFTlRSWSh2Nl9jb2hlcmVudF91c2VyX3JhbmdlKQotCisgVU5XSU5EKC5mbnN0YXJ0CQkpCiAjaWZkZWYgSEFSVkFSRF9DQUNIRQogCWJpYwlyMCwgcjAsICNDQUNIRV9MSU5FX1NJWkUgLSAxCi0xOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGxpbmUKKzE6CisgVVNFUigJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJKQlAIGNsZWFuIEQgbGluZQogCWFkZAlyMCwgcjAsICNDQUNIRV9MSU5FX1NJWkUKKzI6CiAJY21wCXIwLCByMQogCWJsbwkxYgogI2VuZGlmCkBAIC0xNDMsNiArMTQ2LDE5IEBACiAJbW92CXBjLCBscgogCiAvKgorICogRmF1bHQgaGFuZGxpbmcgZm9yIHRoZSBjYWNoZSBvcGVyYXRpb24gYWJvdmUuIElmIHRoZSB2aXJ0dWFsIGFkZHJlc3MgaW4gcjAKKyAqIGlzbid0IG1hcHBlZCwganVzdCB0cnkgdGhlIG5leHQgcGFnZS4KKyAqLworOTAwMToKKwltb3YJcjAsIHIwLCBsc3IgIzEyCisJbW92CXIwLCByMCwgbHNsICMxMgorCWFkZAlyMCwgcjAsICM0MDk2CisJYgkyYgorIFVOV0lORCguZm5lbmQJCSkKK0VORFBST0ModjZfY29oZXJlbnRfdXNlcl9yYW5nZSkKK0VORFBST0ModjZfY29oZXJlbnRfa2Vybl9yYW5nZSkKKworLyoKICAqCXY2X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uoa2FkZHIpCiAgKgogICoJRW5zdXJlIHRoYXQgdGhlIGRhdGEgaGVsZCBpbiB0aGUgcGFnZSBrYWRkciBpcyB3cml0dGVuIGJhY2sKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCmluZGV4IGJkYTBlYzMuLmUxYmQ5NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCiAKQEAgLTE1MywxMyArMTU0LDE2IEBACiAgKgktIHRoZSBJY2FjaGUgZG9lcyBub3QgcmVhZCBkYXRhIGZyb20gdGhlIHdyaXRlIGJ1ZmZlcgogICovCiBFTlRSWSh2N19jb2hlcmVudF91c2VyX3JhbmdlKQorIFVOV0lORCguZm5zdGFydAkJKQogCWRjYWNoZV9saW5lX3NpemUgcjIsIHIzCiAJc3ViCXIzLCByMiwgIzEKIAliaWMJcjAsIHIwLCByMwotMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTEsIDEJCUAgY2xlYW4gRCBsaW5lIHRvIHRoZSBwb2ludCBvZiB1bmlmaWNhdGlvbgorMToKKyBVU0VSKAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMSwgMQkpCUAgY2xlYW4gRCBsaW5lIHRvIHRoZSBwb2ludCBvZiB1bmlmaWNhdGlvbgogCWRzYgotCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGxpbmUKKyBVU0VSKAltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCSkJQCBpbnZhbGlkYXRlIEkgbGluZQogCWFkZAlyMCwgcjAsIHIyCisyOgogCWNtcAlyMCwgcjEKIAlibG8JMWIKIAltb3YJcjAsICMwCkBAIC0xNjcsNiArMTcxLDE3IEBACiAJZHNiCiAJaXNiCiAJbW92CXBjLCBscgorCisvKgorICogRmF1bHQgaGFuZGxpbmcgZm9yIHRoZSBjYWNoZSBvcGVyYXRpb24gYWJvdmUuIElmIHRoZSB2aXJ0dWFsIGFkZHJlc3MgaW4gcjAKKyAqIGlzbid0IG1hcHBlZCwganVzdCB0cnkgdGhlIG5leHQgcGFnZS4KKyAqLworOTAwMToKKwltb3YJcjAsIHIwLCBsc3IgIzEyCisJbW92CXIwLCByMCwgbHNsICMxMgorCWFkZAlyMCwgcjAsICM0MDk2CisJYgkyYgorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0ModjdfY29oZXJlbnRfa2Vybl9yYW5nZSkKIEVORFBST0ModjdfY29oZXJlbnRfdXNlcl9yYW5nZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jIGIvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCmluZGV4IGJjMDA5OWQuLmQwZDE3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYworKysgYi9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKQEAgLTE1MywxNCArMTUzLDExIEBACiAKIAlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAltYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwotCWlmIChtYXBwaW5nKSB7CiAjaWZuZGVmIENPTkZJR19TTVAKLQkJaW50IGRpcnR5ID0gdGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKTsKLQotCQlpZiAoZGlydHkpCi0JCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKG1hcHBpbmcsIHBhZ2UpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmcGFnZS0+ZmxhZ3MpKQorCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKG1hcHBpbmcsIHBhZ2UpOwogI2VuZGlmCi0KKwlpZiAobWFwcGluZykgewogCQlpZiAoY2FjaGVfaXNfdml2dCgpKQogCQkJbWFrZV9jb2hlcmVudChtYXBwaW5nLCB2bWEsIGFkZHIsIHBmbik7CiAJCWVsc2UgaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKaW5kZXggYWUwZTI1Zi4uMTBlMDY4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuYworKysgYi9hcmNoL2FybS9tbS9mYXVsdC5jCkBAIC0yOTIsNiArMjkyLDExIEBACiAJCSAqIGRvd25fcmVhZCgpCiAJCSAqLwogCQltaWdodF9zbGVlcCgpOworI2lmZGVmIENPTkZJR19ERUJVR19WTQorCQlpZiAoIXVzZXJfbW9kZShyZWdzKSAmJgorCQkgICAgIXNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPkFSTV9wYykpCisJCQlnb3RvIG5vX2NvbnRleHQ7CisjZW5kaWYKIAl9CiAKIAlmYXVsdCA9IF9fZG9fcGFnZV9mYXVsdChtbSwgYWRkciwgZnNyLCB0c2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaGlnaG1lbS5jIGIvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCmluZGV4IDczY2FlNTcuLjMwZjgyZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2hpZ2htZW0uYworKysgYi9hcmNoL2FybS9tbS9oaWdobWVtLmMKQEAgLTQ2LDYgKzQ2LDggQEAKIAlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQogCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCisJZGVidWdfa21hcF9hdG9taWModHlwZSk7CisKIAlrbWFwID0ga21hcF9oaWdoX2dldChwYWdlKTsKIAlpZiAoa21hcCkKIAkJcmV0dXJuIGttYXA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggODc3YzQ5Mi4uNDA5NDBkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJLyoKIAkgKiBDb252ZXJ0IHN0YXJ0X3Bmbi9lbmRfcGZuIHRvIGEgc3RydWN0IHBhZ2UgcG9pbnRlci4KIAkgKi8KLQlzdGFydF9wZyA9IHBmbl90b19wYWdlKHN0YXJ0X3Bmbik7CisJc3RhcnRfcGcgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gLSAxKSArIDE7CiAJZW5kX3BnID0gcGZuX3RvX3BhZ2UoZW5kX3Bmbik7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKaW5kZXggZmU1ODEzOC4uZjdkMmVjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jCkBAIC0zMyw2ICszMyw5IEBACiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKIAkzLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfQkNNUklORworCUlSUV9QTVVJUlEsIC8qIGZvciBCQ01SSU5HLCBBUk0gUE1VIGludGVycnVwdCBpcyA0MyAqLworI2VuZGlmCiB9OwogCiBzdGF0aWMgdm9pZCBhcm12Nl9wbXVfc3RvcCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCmluZGV4IGZkMzE1NGEuLmI1MzEyNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKQEAgLTgyOSwxMCArODI5LDEwIEBACiAgKgogICogQHBhcmFtIGFyYl9yYXRlCiAgKiBAcGFyYW0gbWF4X2ZpZm9fZGVwdGgKLSAqIEBwYXJhbSB0cGFyYW1zIC0gTnVtYmVyIG9mIHRoZXJlYWRzIHRvIHJlc2VydmUgOiBETUFfVEhSRUFEX1JFU0VSVkVfTk9STQotICogCQkJCQkJICAgIERNQV9USFJFQURfUkVTRVJWRV9PTkVUCi0gKiAJCQkJCQkgICAgRE1BX1RIUkVBRF9SRVNFUlZFX1RXT1QKLSAqIAkJCQkJCSAgICBETUFfVEhSRUFEX1JFU0VSVkVfVEhSRUVUCisgKiBAcGFyYW0gdHBhcmFtcyAtIE51bWJlciBvZiB0aHJlYWRzIHRvIHJlc2VydmUgOiBETUFfVEhSRUFEX1JFU0VSVkVfTk9STQorICogCQkJCQkJICAgRE1BX1RIUkVBRF9SRVNFUlZFX09ORVQKKyAqIAkJCQkJCSAgIERNQV9USFJFQURfUkVTRVJWRV9UV09UCisgKiAJCQkJCQkgICBETUFfVEhSRUFEX1JFU0VSVkVfVEhSRUVUCiAgKi8KIHZvaWQKIG9tYXBfZG1hX3NldF9nbG9iYWxfcGFyYW1zKGludCBhcmJfcmF0ZSwgaW50IG1heF9maWZvX2RlcHRoLCBpbnQgdHBhcmFtcykKQEAgLTg0NCwxMSArODQ0LDE0IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAobWF4X2ZpZm9fZGVwdGggPT0gMCkKKwkJbWF4X2ZpZm9fZGVwdGggPSAxOwogCWlmIChhcmJfcmF0ZSA9PSAwKQogCQlhcmJfcmF0ZSA9IDE7CiAKLQlyZWcgPSAoYXJiX3JhdGUgJiAweGZmKSA8PCAxNjsKLQlyZWcgfD0gKDB4ZmYgJiBtYXhfZmlmb19kZXB0aCk7CisJcmVnID0gMHhmZiAmIG1heF9maWZvX2RlcHRoOworCXJlZyB8PSAoMHgzICYgdHBhcmFtcykgPDwgMTI7CisJcmVnIHw9IChhcmJfcmF0ZSAmIDB4ZmYpIDw8IDE2OwogCiAJZG1hX3dyaXRlKHJlZywgR0NSKTsKIH0KQEAgLTk3NSw2ICs5NzgsMTQgQEAKIHsKIAl1MzIgbDsKIAorCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOworCisJbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKKwlsICY9IH5PTUFQX0RNQV9DQ1JfRU47CisJZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKKwogCWlmICghb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYgZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkgewogCQlpbnQgbmV4dF9sY2gsIGN1cl9sY2ggPSBsY2g7CiAJCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbT01BUF9ETUE0X0xPR0lDQUxfRE1BX0NIX0NPVU5UXTsKQEAgLTk5MiwxOCArMTAwMyw4IEBACiAJCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOwogCQkJY3VyX2xjaCA9IG5leHRfbGNoOwogCQl9IHdoaWxlIChuZXh0X2xjaCAhPSAtMSk7Ci0KLQkJcmV0dXJuOwogCX0KIAotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOwotCi0JbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKLQlsICY9IH5PTUFQX0RNQV9DQ1JfRU47Ci0JZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKLQogCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zdG9wX2RtYSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2tleXBhZC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9rZXlwYWQuaAppbmRleCBkOTFiOWJlLi4zYWU1MmNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2tleXBhZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmgKQEAgLTEwLDcgKzEwLDcgQEAKICNpZm5kZWYgQVNNQVJNX0FSQ0hfS0VZUEFEX0gKICNkZWZpbmUgQVNNQVJNX0FSQ0hfS0VZUEFEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKyN3YXJuaW5nOiBQbGVhc2UgdXBkYXRlIHRoZSBib2FyZCB0byB1c2UgbWF0cml4X2tleXBhZC5oIGluc3RlYWQKIAogc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSB7CiAJaW50IHJvd3M7CkBAIC0zNyw2ICszNyw5IEBACiAKICNkZWZpbmUgS0VZX1BFUlNJU1RFTlQJCTB4MDA4MDAwMDAKICNkZWZpbmUgS0VZTlVNX01BU0sJCTB4MDBFRkZGRkYKKyNkZWZpbmUgS0VZKGNvbCwgcm93LCB2YWwpICgoKGNvbCkgPDwgMjgpIHwgKChyb3cpIDw8IDI0KSB8ICh2YWwpKQorI2RlZmluZSBQRVJTSVNURU5UX0tFWShjb2wsIHJvdykgKCgoY29sKSA8PCAyOCkgfCAoKHJvdykgPDwgMjQpIHwgXAorCQkJCQkJS0VZX1BFUlNJU1RFTlQpCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW9tbXUuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCmluZGV4IDRiNjAxMjcuLjk0NTg0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCkBAIC02NjQsNyArNjY0LDcgQEAKIAkJbmVudCA9IDE7IC8qIGZvciB0aGUgbmV4dCBMMSBlbnRyeSAqLwogCX0gZWxzZSB7CiAJCWJ5dGVzID0gSU9QR0RfU0laRTsKLQkJaWYgKCppb3BnZCAmIElPUEdEX1NVUEVSKSB7CisJCWlmICgoKmlvcGdkICYgSU9QR0RfU1VQRVIpID09IElPUEdEX1NVUEVSKSB7CiAJCQluZW50ICo9IDE2OwogCQkJLyogcmV3aW5kIHRvIHRoZSAxc3QgZW50cnkgKi8KIAkJCWlvcGdkID0gKHUzMiAqKSgodTMyKWlvcGdkICYgSU9TVVBFUl9NQVNLKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKaW5kZXggODhhYzk3Ni4uZTY2NGI5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKQEAgLTU5NSw3ICs1OTUsNyBAQAogCXJ4ICY9IDE7CiAJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgUkNDUik7Ci0JCXcgfD0gKHR4ID8gUkRJU0FCTEUgOiAwKTsKKwkJdyB8PSAocnggPyBSRElTQUJMRSA6IDApOwogCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFJDQ1IsIHcpOwogCX0KIAl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYwppbmRleCA2YjBhMmI2Li4wOTc0YzBlIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jCkBAIC01MjcsNyArNTI3LDcgQEAKIAogbm9fc2lnbmFsOgogCS8qIERpZCB3ZSBjb21lIGZyb20gYSBzeXN0ZW0gY2FsbD8gKi8KLQlpZiAoX19mcmFtZS0+c3lzY2FsbG5vID49IDApIHsKKwlpZiAoX19mcmFtZS0+c3lzY2FsbG5vICE9IC0xKSB7CiAJCS8qIFJlc3RhcnQgdGhlIHN5c3RlbSBjYWxsIC0gbm8gaGFuZGxlcnMgcHJlc2VudCAqLwogCQlzd2l0Y2ggKF9fZnJhbWUtPmdyOCkgewogCQljYXNlIC1FUkVTVEFSVE5PSEFORDoKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWcKaW5kZXggMjlkZDg0OC4uZWNkYzE5YSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL0tjb25maWcKKysrIGIvYXJjaC9tNjhrL0tjb25maWcKQEAgLTU2MSw3ICs1NjEsNyBAQAogCiBjb25maWcgTVZNRTE0N19TQ0MKIAlib29sICJTQ0Mgc3VwcG9ydCBmb3IgTVZNRTE0NyBzZXJpYWwgcG9ydHMiCi0JZGVwZW5kcyBvbiBNVk1FMTQ3CisJZGVwZW5kcyBvbiBNVk1FMTQ3ICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBwb3J0cyBvbiB0aGUgTW90b3JvbGEgTVZNRTE0NwogCSAgYm9hcmRzLiAgRXZlcnlvbmUgdXNpbmcgb25lIG9mIHRoZXNlIGJvYXJkcyBzaG91bGQgc2F5IFkgaGVyZS4KQEAgLTU3NiwxNCArNTc2LDE0IEBACiAKIGNvbmZpZyBNVk1FMTYyX1NDQwogCWJvb2wgIlNDQyBzdXBwb3J0IGZvciBNVk1FMTYyIHNlcmlhbCBwb3J0cyIKLQlkZXBlbmRzIG9uIE1WTUUxNngKKwlkZXBlbmRzIG9uIE1WTUUxNnggJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBNb3Rvcm9sYSBNVk1FMTYyIGFuZAogCSAgMTcyIGJvYXJkcy4gIEV2ZXJ5b25lIHVzaW5nIG9uZSBvZiB0aGVzZSBib2FyZHMgc2hvdWxkIHNheSBZIGhlcmUuCiAKIGNvbmZpZyBCVk1FNjAwMF9TQ0MKIAlib29sICJTQ0Mgc3VwcG9ydCBmb3IgQlZNRTYwMDAgc2VyaWFsIHBvcnRzIgotCWRlcGVuZHMgb24gQlZNRTYwMDAKKwlkZXBlbmRzIG9uIEJWTUU2MDAwICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBwb3J0cyBvbiB0aGUgQlZNRTQwMDAgYW5kIEJWTUU2MDAwCiAJICBib2FyZHMgZnJvbSBCVk0gTHRkLiAgRXZlcnlvbmUgdXNpbmcgb25lIG9mIHRoZXNlIGJvYXJkcyBzaG91bGQgc2F5CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCmluZGV4IGNlZTgwODAuLmRkMzg2MDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCkBAIC0yMTAsNyArMjEwLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMKaW5kZXggNGMzNjE4Ni4uOGU5YmU2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMKQEAgLTE5OSw3ICsxOTksNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAogCQkJcnRjQDUwIHsKIAkJCQljb21wYXRpYmxlID0gImF0LDI0YzA4IjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCmluZGV4IGRlMzBiM2Y5Li44MmZmMmIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKQEAgLTI0Nyw3ICsyNDcsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTI1Niw3ICsyNTUsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCQlzcmFtQDgwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1zcmFtIjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKaW5kZXggZDEzY2IxMS4uZTQ1YTYzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKQEAgLTI1MSw3ICsyNTEsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yNjAsNyArMjU5LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZWRpYTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMKaW5kZXggZTI5N2Q4Yi4uMGMzOTAyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMKQEAgLTIyMyw3ICsyMjMsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yMzIsNyArMjMxLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKaW5kZXggN2JlOGNhMC4uNmNhNGZjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKQEAgLTIyMiw3ICsyMjIsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCmluZGV4IGMyYjhkYmYuLmMzNTNkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKQEAgLTIwOSw3ICsyMDksNiBAQAogCQkJcmVnID0gPDB4MTcwMCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8OSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDE3MjAgewpAQCAtMjIwLDcgKzIxOSw2IEBACiAJCQlyZWcgPSA8MHgxNzIwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwxMCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDE3NDAgewpAQCAtMjMxLDcgKzIyOSw2IEBACiAJCQlyZWcgPSA8MHgxNzQwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwxMSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjY29udHJvbEAxNzYwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tdWNtYzUyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tdWNtYzUyLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzJhNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL211Y21jNTIuZHRzCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogTWFucm9sYW5kIG11Y21jNTIgYm9hcmQgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3IFNlY3JldCBMYWIgVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJtYW5yb2xhbmQsbXVjbWM1MiI7CisJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1MiI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDUyMDBAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIGZyb20gYm9vdGxvYWRlcgorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDQwMDAwMDA+OwkvLyA2NE1CCisJfTsKKworCXNvYzUyMDBAZjAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWltbXIiOworCQlyYW5nZXMgPSA8MCAweGYwMDAwMDAwIDB4MDAwMGMwMDA+OworCQlyZWcgPSA8MHhmMDAwMDAwMCAweDAwMDAwMTAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisKKwkJY2RtQDIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1jZG0iLCJmc2wsbXBjNTIwMC1jZG0iOworCQkJcmVnID0gPDB4MjAwIDB4Mzg+OworCQl9OworCisJCW1wYzUyMDBfcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA1MDAgeworCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBpYyIsImZzbCxtcGM1MjAwLXBpYyI7CisJCQlyZWcgPSA8MHg1MDAgMHg4MD47CisJCX07CisKKwkJZ3B0MDogdGltZXJANjAwIHsJLy8gR1BUIDAgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjAwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQxOiB0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjEwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MjogdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYyMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDM6IHRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOworCQkJcmVnID0gPDB4YjAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CisJCQlyZWcgPSA8MHhjMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWRtYS1jb250cm9sbGVyQDEyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYmVzdGNvbW0iLCJmc2wsbXBjNTIwMC1iZXN0Y29tbSI7CisJCQlyZWcgPSA8MHgxMjAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAorCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAorCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCisJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47CisJCX07CisKKwkJeGxiQDFmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGIteGxiIiwiZnNsLG1wYzUyMDAteGxiIjsKKwkJCXJlZyA9IDwweDFmMDAgMHgxMDA+OworCQl9OworCisJCXNlcmlhbEAyMDAwIHsgLyogUFNDMSBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKKwkJfTsKKworCQlzZXJpYWxAMjIwMCB7IC8qIFBTQzIgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDIyMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDIgMD47CisJCX07CisKKwkJc2VyaWFsQDJjMDAgeyAvKiBQU0M2IGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA0IDA+OworCQl9OworCisJCWV0aGVybmV0QDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47IAkvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OyAJLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQljb21wYXRpYmxlID0gImludGVsLGx4dDk3MSI7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlhdGFAM2EwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOworCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKKwkJfTsKKworCQlpMmNAM2Q0MCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OworCQkJaHdtb25AMmMgeworCQkJCWNvbXBhdGlibGUgPSAiYWQsYWRtOTI0MCI7CisJCQkJcmVnID0gPDB4MmM+OworCQkJfTsKKwkJCXJ0Y0A1MSB7CisJCQkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CisJCQkJcmVnID0gPDB4NTE+OworCQkJfTsKKwkJfTsKKworCQlzcmFtQDgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3JhbSIsImZzbCxtcGM1MjAwLXNyYW0iOworCQkJcmVnID0gPDB4ODAwMCAweDQwMDA+OworCQl9OworCX07CisKKwlwY2lAZjAwMDBkMDAgeworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBjaSIsImZzbCxtcGM1MjAwLXBjaSI7CisJCXJlZyA9IDwweGYwMDAwZDAwIDB4MTAwPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkJLyogSURTRUwgMHgxMCAqLworCQkJCTB4ODAwMCAwIDAgMSAmbXBjNTIwMF9waWMgMCAzIDMKKwkJCQkweDgwMDAgMCAwIDIgJm1wYzUyMDBfcGljIDAgMyAzCisJCQkJMHg4MDAwIDAgMCAzICZtcGM1MjAwX3BpYyAwIDIgMworCQkJCTB4ODAwMCAwIDAgNCAmbXBjNTIwMF9waWMgMCAxIDMKKwkJCQk+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKKwkJaW50ZXJydXB0cyA9IDwyIDggMCAyIDkgMCAyIDEwIDA+OworCQlidXMtcmFuZ2UgPSA8MCAwPjsKKwkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMCAweDYwMDAwMDAwIDB4NjAwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDIwMDAwMDAgMCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YTAwMDAwMDAgMCAweDAxMDAwMDAwPjsKKwl9OworCisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1scGIiLCJmc2wsbXBjNTIwMC1scGIiLCJzaW1wbGUtYnVzIjsKKworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJcmFuZ2VzID0gPDAgMCAweGZmODAwMDAwIDB4MDA4MDAwMDAKKwkJCSAgMSAwIDB4ODAwMDAwMDAgMHgwMDgwMDAwMAorCQkJICAzIDAgMHg4MDAwMDAwMCAweDAwODAwMDAwPjsKKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDAwODAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8ND47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gIkRUUyI7CisJCQkJcmVnID0gPDB4MCAweDAwMTAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJLZXJuZWwiOworCQkJCXJlZyA9IDwweDEwMDAwMCAweDAwMjAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMzAwMDAwIHsKKwkJCQlsYWJlbCA9ICJSb290RlMiOworCQkJCXJlZyA9IDwweDAwMzAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA1MDAwMDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDAwNTAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3MDAwMDAgeworCQkJCWxhYmVsID0gIlUtQm9vdCI7CisJCQkJcmVnID0gPDB4MDA3MDAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc0MDAwMCB7CisJCQkJbGFiZWwgPSAiRW52IjsKKwkJCQlyZWcgPSA8MHgwMDc0MDAwMCAweDAwMDIwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzYwMDAwIHsKKwkJCQlsYWJlbCA9ICJyZWQuIEVudiI7CisJCQkJcmVnID0gPDB4MDA3NjAwMDAgMHgwMDAyMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc4MDAwMCB7CisJCQkJbGFiZWwgPSAicmVzZXJ2ZSI7CisJCQkJcmVnID0gPDB4MDA3ODAwMDAgMHgwMDA4MDAwMD47CisJCQl9OworCQl9OworCisJCXNpbXBsZTEwMDogZ3Bpby1jb250cm9sbGVyLTEwMEAzLDYwMDEwMCB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAxMDAgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUxMDQ6IGdwaW8tY29udHJvbGxlci0xMDRAMyw2MDAxMDQgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMTA0IDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjAwOiBncGlvLWNvbnRyb2xsZXItMjAwQDMsNjAwMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwMCAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwMTogZ3Bpby1jb250cm9sbGVyLTIwMUAzLDYwMDIwMSB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMDEgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDI6IGdwaW8tY29udHJvbGxlci0yMDJAMyw2MDAyMDIgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjAyIDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjAzOiBncGlvLWNvbnRyb2xsZXItMjAzQDMsNjAwMjAzIHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwMyAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwNDogZ3Bpby1jb250cm9sbGVyLTIwNEAzLDYwMDIwNCB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMDQgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDY6IGdwaW8tY29udHJvbGxlci0yMDZAMyw2MDAyMDYgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjA2IDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjA3OiBncGlvLWNvbnRyb2xsZXItMjA3QDMsNjAwMjA3IHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwNyAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwZjogZ3Bpby1jb250cm9sbGVyLTIwZkAzLDYwMDIwZiB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMGYgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzCmluZGV4IDMwYmZkYzAuLjhhNGVjMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzCkBAIC0yNDQsNyArMjQ0LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMjUzLDcgKzI1Miw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQkJcnRjQDUxIHsKIAkJCQljb21wYXRpYmxlID0gIm54cCxwY2Y4NTYzIjsKIAkJCQlyZWcgPSA8MHg1MT47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzCmluZGV4IDAzMDA0MjYuLjg1ZDg1N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzCkBAIC0yNDQsNyArMjQ0LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMjUzLDcgKzI1Miw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQkJcnRjQDUxIHsKIAkJCQljb21wYXRpYmxlID0gIm54cCxwY2Y4NTYzIjsKIAkJCQlyZWcgPSA8MHg1MT47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMKaW5kZXggYzk1OTBiNS4uMWRiMDdmNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cwpAQCAtMTYwLDcgKzE2MCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAKIAkJCSBydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMwNyI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdWMxMDEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3VjMTAxLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTkyNjRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3VjMTAxLmR0cwpAQCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIE1hbnJvbGFuZCB1YzEwMSBib2FyZCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIm1hbnJvbGFuZCx1YzEwMSI7CisJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsdWMxMDEiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw1MjAwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA0MDAwMDAwPjsJLy8gNjRNQgorCX07CisKKwlzb2M1MjAwQGYwMDAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pbW1yIjsKKwkJcmFuZ2VzID0gPDAgMHhmMDAwMDAwMCAweDAwMDBjMDAwPjsKKwkJcmVnID0gPDB4ZjAwMDAwMDAgMHgwMDAwMDEwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJc3lzdGVtLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCisJCWNkbUAyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItY2RtIiwiZnNsLG1wYzUyMDAtY2RtIjsKKwkJCXJlZyA9IDwweDIwMCAweDM4PjsKKwkJfTsKKworCQltcGM1MjAwX3BpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJANTAwIHsKKwkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1waWMiLCJmc2wsbXBjNTIwMC1waWMiOworCQkJcmVnID0gPDB4NTAwIDB4ODA+OworCQl9OworCisJCWdwdDA6IHRpbWVyQDYwMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDE6IHRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQyOiB0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjIwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MzogdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYzMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDQ6IHRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ1OiB0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjUwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NjogdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY2MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDc6IHRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOworCQkJcmVnID0gPDB4YjAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CisJCQlyZWcgPSA8MHhjMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWRtYS1jb250cm9sbGVyQDEyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYmVzdGNvbW0iLCJmc2wsbXBjNTIwMC1iZXN0Y29tbSI7CisJCQlyZWcgPSA8MHgxMjAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAorCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAorCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCisJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47CisJCX07CisKKwkJeGxiQDFmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGIteGxiIiwiZnNsLG1wYzUyMDAteGxiIjsKKwkJCXJlZyA9IDwweDFmMDAgMHgxMDA+OworCQl9OworCisJCXNlcmlhbEAyMDAwIHsgLyogUFNDMSBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKKwkJfTsKKworCQlzZXJpYWxAMjIwMCB7IC8qIFBTQzIgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDIyMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDIgMD47CisJCX07CisKKwkJc2VyaWFsQDJjMDAgewkJLyogUFNDNiBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MmMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKKwkJfTsKKworCQlldGhlcm5ldEAzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWZlYyIsImZzbCxtcGM1MjAwLWZlYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJfTsKKworCQltZGlvQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCJmc2wsbXBjNTIwMC1tZGlvIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwkvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OwkvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KKworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWNvbXBhdGlibGUgPSAiaW50ZWwsbHh0OTcxIjsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCQl9OworCisJCWF0YUAzYTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CisJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA3IDA+OworCQl9OworCisJCWkyY0AzZDQwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkNDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47CisJCQlmc2wscHJlc2VydmUtY2xvY2tpbmc7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworCQkJaHdtb25AMmMgeworCQkJCWNvbXBhdGlibGUgPSAiYWQsYWRtOTI0MCI7CisJCQkJcmVnID0gPDB4MmM+OworCQkJfTsKKwkJCXJ0Y0A1MSB7CisJCQkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CisJCQkJcmVnID0gPDB4NTE+OworCQkJfTsKKwkJfTsKKworCQlzcmFtQDgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3JhbSIsImZzbCxtcGM1MjAwLXNyYW0iOworCQkJcmVnID0gPDB4ODAwMCAweDQwMDA+OworCQl9OworCX07CisKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWxwYiIsImZzbCxtcGM1MjAwLWxwYiIsInNpbXBsZS1idXMiOworCisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmY4MDAwMDAgMHgwMDgwMDAwMAorCQkJICAxIDAgMHg4MDAwMDAwMCAweDAwODAwMDAwCisJCQkgIDMgMCAweDgwMDAwMDAwIDB4MDA4MDAwMDA+OworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDB4MDA4MDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJEVFMiOworCQkJCXJlZyA9IDwweDAgMHgwMDEwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJbGFiZWwgPSAiS2VybmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAwMDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDMwMDAwMCB7CisJCQkJbGFiZWwgPSAiUm9vdEZTIjsKKwkJCQlyZWcgPSA8MHgwMDMwMDAwMCAweDAwMjAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHgwMDUwMDAwMCAweDAwMjAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzAwMDAwIHsKKwkJCQlsYWJlbCA9ICJVLUJvb3QiOworCQkJCXJlZyA9IDwweDAwNzAwMDAwIDB4MDAwNDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3NDAwMDAgeworCQkJCWxhYmVsID0gIkVudiI7CisJCQkJcmVnID0gPDB4MDA3NDAwMDAgMHgwMDAxMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc1MDAwMCB7CisJCQkJbGFiZWwgPSAicmVkLiBFbnYiOworCQkJCXJlZyA9IDwweDAwNzUwMDAwIDB4MDAwMTAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3NjAwMDAgeworCQkJCWxhYmVsID0gInJlc2VydmUiOworCQkJCXJlZyA9IDwweDAwNzYwMDAwIDB4MDAwYTAwMDA+OworCQkJfTsKKwkJfTsKKworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCmluZGV4IDM4MzhiNzcuLjAzOTZjZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0Nzo0NCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NiwxMyBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc3LDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTA1LDcgKzExMiw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOCw2ICsxMjQsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI1LDE0ICsxMzgsMTkgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0MCw3ICsxNTgsNyBAQAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIxOSwxMSArMjM3LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yMzksOSArMjU5LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjUyLDYgKzI3Myw3IEBACiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzI4LDYgKzM1MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzQyLDYgKzM2NSw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzY3LDYgKzM5MSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDU3LDYgKzQ4Miw3IEBACiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNDk1LDEwICs1MjEsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTE5LDcgKzU0MSw2IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NTgsMTQgKzU3OSwxNCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjM2LDYgKzY1Nyw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NDYsNiArNjY4LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNjY2LDIzICs2ODksMjMgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03MTMsMjUgKzczNiwxMiBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTc3NSwxMSArNzg1LDEyIEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKICMgQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldApAQCAtODY2LDYgKzg3NywxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC04ODUsMTAgKzkwMCwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTk1OSwxMiArOTc3LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTA2NCw2ICsxMDgyLDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTA3Myw2ICsxMDkyLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwOTAsMTAgKzExMTAsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMTA1LDExICsxMTI5LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTExMTgsMjMgKzExNDMsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xMTU5LDcgKzExODYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyMDAsMTEgKzEyMjYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZwppbmRleCAyOWIwZjM0Li5mNWMwN2ZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDg6MDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjI0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMiArNTYsMTQgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc4LDExICs4NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTA2LDcgKzExMyw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOSw2ICsxMjUsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQpAQCAtMTI3LDE0ICsxNDAsMTkgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0Nyw3ICsxNjUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjI4LDExICsyNDYsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0OCw5ICsyNjgsMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNjQsNiArMjg1LDcgQEAKIENPTkZJR19QTV9TTEVFUD15CiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzQ4LDYgKzM3MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzYyLDYgKzM4NSw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzg3LDYgKzQxMSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzk3LDYgKzQyMiw3IEBACiAjIENPTkZJR19NVEQgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC00MzEsNyArNDU3LDkgQEAKICMKICMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTQ1NCwxMCArNDgyLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNDc1LDYgKzQ5OSw4IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNDgzLDYgKzUwOSw3IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CkBAIC01MDIsNyArNTI5LDYgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKQEAgLTUxNCwxMSArNTQwLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTQwLDYgKzU2OSw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTY4LDYgKzU5OCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTU4NiwxNCArNjE3LDE3IEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTY0MCw5ICs2NzQsMTIgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY2MSw2ICs2OTgsOCBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTY4NiwxMCArNzI1LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzU5LDYgKzc5NSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzg3LDYgKzgyNCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTgxMiwyMyArODUwLDIzIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg0NywzMCArODg1LDE4IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTEzLDYgKzkzOSwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC05MzIsMTAgKzk2MiwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTk5MiwxMiArMTAyNSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTEwNDEsNiArMTA3NCw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEwNTAsNiArMTA4NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDY3LDEwICsxMTAyLDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTA4MiwxMSArMTEyMSwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xMDk1LDIzICsxMTM1LDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTEzNiw3ICsxMTc4LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMTc4LDExICsxMjE5LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcKaW5kZXggMDdiNmIyNi4uNGY3N2ExYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ4OjIyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDEzIEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzcsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDUsNyArMTEyLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE4LDYgKzEyNCwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsMTQgKzEzOCwxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQwLDcgKzE1OCw3IEBACiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjIwLDExICsyMzgsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0MCw5ICsyNjAsMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNTMsNiArMjc0LDcgQEAKIENPTkZJR19FWFRSQV9UQVJHRVRTPSIiCiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zMjksNiArMzUxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNDMsNiArMzY2LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNjgsNiArMzkyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00NTgsNiArNDgzLDcgQEAKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC00ODMsNiArNTA5LDcgQEAKICMKICMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKIENPTkZJR19FRVBST01fTEVHQUNZPXkKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTUwNiwxMCArNTMzLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUzMiw2ICs1NTUsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC01NDAsNyArNTY0LDYgQEAKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU3OSwxNCArNjAyLDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NDcsNiArNjcwLDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY1Nyw2ICs2ODEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC02NzYsMjIgKzcwMSwyOCBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTczOCw2ICs3NjksOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKQEAgLTc0Nyw5ICs3ODAsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03NzUsMjUgKzgwNiwxMiBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC04MTcsNyArODM1LDcgQEAKICMKICMgTEVEIGRyaXZlcnMKICMKLSMgQ09ORklHX0xFRFNfTFA1NTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CiAKQEAgLTg2Niw2ICs4ODQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTg5Myw2ICs5MTIsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtOTEyLDEwICs5MzUsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05ODYsMTIgKzEwMTIsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xMDkxLDYgKzExMTcsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMTAwLDYgKzExMjcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTExNywxMCArMTE0NSwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTExMzIsMTEgKzExNjQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTE0NSwyMyArMTE3OCwyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTExODYsNyArMTIyMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTIyNywxMSArMTI2MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCmluZGV4IGFmYjFhM2QuLmY5MTY4YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0ODo0MiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NiwxMyBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc5LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTA1LDcgKzExMiw2IEBACiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE4LDYgKzEyNCwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTEyNSw3ICsxMzgsNiBAQAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTMzLDcgKzE0NSwxMyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ2LDcgKzE2NCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMjcsMTEgKzI0NSwxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ3LDkgKzI2NywxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMzNiw2ICszNTcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM1MCw2ICszNzIsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM3NSw2ICszOTgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM4Miw5ICs0MDYsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC00NjcsNiArNDkxLDcgQEAKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldApAQCAtNDkyLDEwICs1MTcsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MTUsNiArNTM2LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPW0KICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTUzNiw2ICs1NTgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU2NCw2ICs1ODcsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC01ODIsMTQgKzYwNiwxNyBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02MzYsMTYgKzY2MywxNiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzIyLDYgKzc0OSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzUwLDYgKzc3OCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTc3NiwyMyArODA1LDIzIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgxMSwzMCArODQwLDE4IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC04NzEsMTUgKzg4OCwxNyBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQpAQCAtOTk1LDYgKzEwMTQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEwMjIsNiArMTA0MiwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xMDQxLDEyICsxMDY1LDE2IEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKQEAgLTExMTQsNyArMTE0Miw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEyMDEsNiArMTIyOCw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTEyMTAsNiArMTIzOCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjIzLDIzICsxMjUyLDEyIEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZwppbmRleCA4NTg1YzdjLi43NWM4MzVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0ODo1NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjMgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDExICs1NiwxMyBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc3LDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTA1LDcgKzExMiw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExOCw2ICsxMjQsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI1LDE0ICsxMzgsMTkgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0NSw3ICsxNjMsNyBAQAogQ09ORklHX01PRFZFUlNJT05TPXkKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIyNSwxMSArMjQzLDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDUsOSArMjY1LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjU4LDYgKzI3OSw3IEBACiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzM0LDYgKzM1Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzQ4LDYgKzM3MSw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzczLDYgKzM5Nyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzgyLDkgKzQwNyw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC00NjQsNiArNDg5LDcgQEAKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC01MDIsMTAgKzUyOCw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MjksNiArNTUxLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNTM4LDcgKzU2MSw2IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NzcsMTQgKzU5OSwxNCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjU0LDYgKzY3Niw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NjQsNiArNjg3LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNjg1LDIyICs3MDksMjggQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC03NDcsNiArNzc3LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CkBAIC03NTYsOSArNzg4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzg5LDI1ICs4MTksMTIgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC04NTEsMTEgKzg2OCwxMiBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQz15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CiAjIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTk2OSw2ICs5ODcsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTk5Niw2ICsxMDE1LDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMTUsMTAgKzEwMzgsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMDg5LDEyICsxMTE1LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTE5NCw2ICsxMjIwLDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTIwMyw2ICsxMjMwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMjAsMTAgKzEyNDgsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMjM1LDExICsxMjY3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTEyNDgsMjMgKzEyODEsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xMjg5LDcgKzEzMjQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEzMzEsMTEgKzEzNjUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcKaW5kZXggYWFhNDQxNi4uNTIzZDVmZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgTW9uIEFwciAyMCAxMTowNjoyNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKQEAgLTUzLDEyICs1NywxNCBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzksMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTEwMyw3ICsxMTAsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTYsNiArMTIyLDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKQEAgLTEyNCwxNCArMTM3LDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDQsNyArMTYyLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIwNSw3ICsyMjMsNyBAQAogQ09ORklHX1BQQ19CRVNUQ09NTT15CiBDT05GSUdfUFBDX0JFU1RDT01NX0FUQT15CiBDT05GSUdfUFBDX0JFU1RDT01NX0ZFQz15Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU0lNUExFX0dQSU89eQogCiAjCiAjIEtlcm5lbCBvcHRpb25zCkBAIC0yMjksMTEgKzI0NywxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ5LDkgKzI2OSwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI2NSw2ICsyODYsNyBAQAogQ09ORklHX1BNX1NMRUVQPXkKIENPTkZJR19TVVNQRU5EPXkKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zNDksNiArMzcxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjMsNiArMzg2LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODgsNiArNDEyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zOTcsOSArNDIyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC00NTgsNiArNDgzLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTQ5Myw2ICs1MTksNyBAQAogQ09ORklHX09GX0dQSU89eQogQ09ORklHX09GX0kyQz15CiBDT05GSUdfT0ZfU1BJPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC01MjksNyArNTU2LDkgQEAKIENPTkZJR19FRVBST01fQVQyND15CiAjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01NTIsMTAgKzU4MSw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01NzIsNiArNTk3LDggQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTgwLDYgKzYwNyw3IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CkBAIC01OTksNyArNjI3LDYgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKQEAgLTYxMSwxMSArNjM4LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjM3LDYgKzY2Nyw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjY1LDYgKzY5Niw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY4NCwxNCArNzE2LDE3IEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTczOSwxNiArNzc0LDE3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODU0LDYgKzg5MCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIENPTkZJR19JMkNfQUxHT0JJVD15CkBAIC04ODMsNiArOTIwLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKQEAgLTkxMCwxMCArOTQ4LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTM1LDYgKzk2OSwxMSBAQAogIwogQ09ORklHX1NQSV9TUElERVY9bQogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CkBAIC05NTcsMTYgKzk5NiwyNyBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTEwMTksNiArMTA2OSw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDMxLDkgKzEwODMsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEwNzMsMzEgKzExMjMsMjAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogQ09ORklHX0RSTT15CiAjIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fUjEyOCBpcyBub3Qgc2V0CkBAIC0xMTY3LDYgKzEyMDYsNyBAQAogIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KKyMgQ09ORklHX0xDRF9MTVMyODNHRjA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfVERPMjRNIGlzIG5vdCBzZXQKQEAgLTExOTgsNyArMTIzOCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIxNywxMCArMTI1NiwxMSBAQAogQ09ORklHX0hJRF9DSEVSUlk9eQogIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAogQ09ORklHX0hJRF9DWVBSRVNTPXkKLSMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CkBAIC0xMjMxLDEwICsxMjcxLDExIEBACiAjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTEyNjEsMTUgKzEzMDIsMTcgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0M9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BDST15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQpAQCAtMTQwMCw2ICsxNDQzLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xNDExLDYgKzE0NTUsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTQzNCw2ICsxNDc5LDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTE0NTMsMTAgKzE1MDIsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNTMzLDEyICsxNTg1LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTYyNCw2ICsxNjc2LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTYzMyw2ICsxNjg2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NTAsMTAgKzE3MDQsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xNjY1LDExICsxNzIzLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTE2NzgsMjMgKzE3MzcsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xNzE5LDcgKzE3ODAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3NjEsMTEgKzE4MjEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YWY0NjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCkBAIC0wLDAgKzEsMjE5OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBGcmkgT2N0IDE2IDExOjM3OjE1IDIwMDkKKyMKK0NPTkZJR19QUEM2ND15CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19CT09LM1NfNjQgaXMgbm90IHNldAorQ09ORklHX1BQQ19CT09LM0VfNjQ9eQorQ09ORklHX1BQQ19CT09LM0U9eQorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfNjQ9eQorQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKK0NPTkZJR19QUENfUEVSRl9DVFJTPXkKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MzIKK0NPTkZJR182NEJJVD15CitDT05GSUdfV09SRF9TSVpFPTY0CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CitDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfQ09NUEFUPXkKK0NPTkZJR19TWVNWSVBDX0NPTVBBVD15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CisjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19UQVNLU1RBVFM9eQorQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CisjIENPTkZJR19UQVNLX1hBQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9NjQKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVVNFVFM9eQorQ09ORklHX1BST0NfUElEX0NQVVNFVD15CisjIENPTkZJR19DR1JPVVBfQ1BVQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CitDT05GSUdfUkVMQVk9eQorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0tfQ09NUEFUPXkKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19VM19EQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBkcml2ZXJzCisjCisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX0lPTU1VX1ZNRVJHRT15CitDT05GSUdfSU9NTVVfSEVMUEVSPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfQUxMX0NQVVM9eQorIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTI1NgorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKK0NPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQorQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKKyMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CisjIENPTkZJR19QUENfSEFTX0hBU0hfNjRLIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCisjIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CitDT05GSUdfUENJX01TST15CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0NBUkQ9eQorIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUE9eQorQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CitDT05GSUdfUENNQ0lBX0lPQ1RMPXkKK0NPTkZJR19DQVJEQlVTPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKKyMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CisjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUdfUENJPW0KKyMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwMDAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX05FVD15CitDT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD1tCitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPXkKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKK0NPTkZJR19JTkVUX0xSTz15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CisjIENPTkZJR19ORl9DVF9QUk9UT19EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorIyBDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURSBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9UUFJPWFk9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEw9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUFJPWFk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NPQ0tFVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0YgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0RFRlJBR19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX05GX05BVF9QUk9UT19HUkU9bQorQ09ORklHX05GX05BVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KK0NPTkZJR19ORl9OQVRfVEZUUD1tCitDT05GSUdfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfTkZfTkFUX1BQVFA9bQorQ09ORklHX05GX05BVF9IMzIzPW0KK0NPTkZJR19ORl9OQVRfU0lQPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPXkKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKK0NPTkZJR19CTEtfREVWX0ZEPXkKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfVElNSU5HUz15CitDT05GSUdfSURFX0FUQVBJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworQ09ORklHX0JMS19ERVZfSURFUENJPXkKK0NPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0FNRDc0WFg9eQorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTkVUTElOSz15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CitDT05GSUdfU0NTSV9GQ19BVFRSUz15CitDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1JQX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQorQ09ORklHX1NDU0lfSVBSPXkKK0NPTkZJR19TQ1NJX0lQUl9UUkFDRT15CitDT05GSUdfU0NTSV9JUFJfRFVNUD15CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xQRkM9bQorIyBDT05GSUdfU0NTSV9MUEZDX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0RFQlVHPW0KKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUwyND15CitDT05GSUdfQVRBX1NGRj15CitDT05GSUdfU0FUQV9TVlc9eQorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQorQ09ORklHX01EX0xJTkVBUj15CitDT05GSUdfTURfUkFJRDA9eQorQ09ORklHX01EX1JBSUQxPXkKK0NPTkZJR19NRF9SQUlEMTA9eQorQ09ORklHX01EX1JBSUQ0NTY9eQorIyBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAorQ09ORklHX01EX01VTFRJUEFUSD1tCitDT05GSUdfTURfRkFVTFRZPW0KK0NPTkZJR19CTEtfREVWX0RNPXkKKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCisjIENPTkZJR19ETV9MT0dfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9aRVJPPW0KK0NPTkZJR19ETV9NVUxUSVBBVEg9bQorIyBDT05GSUdfRE1fTVVMVElQQVRIX1FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX01VTFRJUEFUSF9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTEzOTQ9eQorQ09ORklHX0lFRUUxMzk0X09IQ0kxMzk0PXkKKyMgQ09ORklHX0lFRUUxMzk0X1BDSUxZTlggaXMgbm90IHNldAorQ09ORklHX0lFRUUxMzk0X1NCUDI9bQorQ09ORklHX0lFRUUxMzk0X0VUSDEzOTRfUk9NX0VOVFJZPXkKK0NPTkZJR19JRUVFMTM5NF9FVEgxMzk0PW0KK0NPTkZJR19JRUVFMTM5NF9SQVdJTz15CitDT05GSUdfSUVFRTEzOTRfVklERU8xMzk0PW0KK0NPTkZJR19JRUVFMTM5NF9EVjEzOTQ9bQorIyBDT05GSUdfSUVFRTEzOTRfVkVSQk9TRURFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlM9eQorIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKK0NPTkZJR19XSU5ERkFSTT15CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQlJPQURDT01fUEhZPW0KKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1VOR0VNPXkKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorQ09ORklHX05FVF9WRU5ET1JfM0NPTT15CitDT05GSUdfVk9SVEVYPXkKKyMgQ09ORklHX1RZUEhPT04gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CitDT05GSUdfUENORVQzMj15CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CitDT05GSUdfQUNFTklDPXkKK0NPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JPXkKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorQ09ORklHX0UxMDAwPXkKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorQ09ORklHX1RJR09OMz15CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorQ09ORklHX0lYR0I9bQorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAorQ09ORklHX1RSPXkKK0NPTkZJR19JQk1PTD15CisjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRDT05TT0xFPXkKKyMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CitDT05GSUdfTkVUUE9MTF9UUkFQPXkKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9bQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1JBV19EUklWRVI9eQorQ09ORklHX01BWF9SQVdfREVWUz0yNTYKKyMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0FNRDgxMTE9eQorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCitDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorQ09ORklHX0ZCX0REQz15CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CitDT05GSUdfRkJfTUFDTU9ERVM9eQorQ09ORklHX0ZCX0JBQ0tMSUdIVD15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKK0NPTkZJR19GQl9USUxFQkxJVFRJTkc9eQorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT0Y9eQorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorQ09ORklHX0ZCX01BVFJPWD15CitDT05GSUdfRkJfTUFUUk9YX01JTExFTklVTT15CitDT05GSUdfRkJfTUFUUk9YX01ZU1RJUVVFPXkKK0NPTkZJR19GQl9NQVRST1hfRz15CitDT05GSUdfRkJfTUFUUk9YX0kyQz1tCitDT05GSUdfRkJfTUFUUk9YX01BVkVOPW0KK0NPTkZJR19GQl9SQURFT049eQorQ09ORklHX0ZCX1JBREVPTl9JMkM9eQorQ09ORklHX0ZCX1JBREVPTl9CQUNLTElHSFQ9eQorIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9JQk1fR1hUNDUwMD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQorQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KK0NPTkZJR19TTkRfU0VRX0RVTU1ZPW0KK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENJPXkKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JT1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTFg2NDY0RVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BQQz15CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfVVNYMlkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BDTUNJQT15CisjIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQorIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfS1lFPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKK0NPTkZJR19ISURfS0VOU0lOR1RPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworCisjCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FQUExFRElTUExBWT1tCisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EPW0KKyMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TPXkKK0NPTkZJR19JTkZJTklCQU5EX01USENBPW0KK0NPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKKyMgQ09ORklHX0lORklOSUJBTkRfSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQorIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTSBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CisjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9TUlAgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVNFUj1tCitDT05GSUdfRURBQz15CisKKyMKKyMgUmVwb3J0aW5nIHN1YnN5c3RlbXMKKyMKKyMgQ09ORklHX0VEQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0VEQUNfTU1fRURBQz15CisjIENPTkZJR19FREFDX0NQQzkyNSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CitDT05GSUdfRVhUMl9GU19YSVA9eQorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CitDT05GSUdfRVhUNF9GUz15CitDT05GSUdfRVhUNF9GU19YQVRUUj15CitDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDRfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfWElQPXkKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQyPXkKKyMgQ09ORklHX0pCRDJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorQ09ORklHX1JFSVNFUkZTX0ZTPXkKKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGU19GUz15CitDT05GSUdfSkZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19YRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FVVE9GUzRfRlM9bQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CisjIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjJfQUNMPXkKK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEX1YzX0FDTD15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1NVTlJQQ19YUFJUX1JETUE9bQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CitDT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PXkKK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9bQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKK0NPTkZJR19TQ0hFRFNUQVRTPXkKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorQ09ORklHX1RSQUNFX0lSUUZMQUdTPXkKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTEFURU5DWVRPUD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0U9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX0dFTkVSSUNfVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0lSUVNPRkZfVFJBQ0VSPXkKK0NPTkZJR19TQ0hFRF9UUkFDRVI9eQorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKK0NPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKK0NPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1Q9eQorQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVD15CitDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVD15CitDT05GSUdfWE1PTj15CisjIENPTkZJR19YTU9OX0RFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQorQ09ORklHX0RFQlVHR0VSPXkKK0NPTkZJR19JUlFTVEFDS1M9eQorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfWE9SX0JMT0NLUz15CitDT05GSUdfQVNZTkNfQ09SRT15CitDT05GSUdfQVNZTkNfTUVNQ1BZPXkKK0NPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkc9bQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKK0NPTkZJR19DUllQVE9fQ0NNPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fU0VRSVY9bQorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX0NUUj1tCisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19MWk89bQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmlybXdhcmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCmluZGV4IDNhMTc5ODIuLjIwNzc4YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIEZXX0ZFQVRVUkVfVklPCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDA0MDAwKQogI2RlZmluZSBGV19GRUFUVVJFX1JETUEJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDgwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfTExBTgkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAxMDAwMCkKLSNkZWZpbmUgRldfRkVBVFVSRV9CVUxLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDIwMDAwKQorI2RlZmluZSBGV19GRUFUVVJFX0JVTEtfUkVNT1ZFCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMjAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfWERBQlIJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDA0MDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9NVUxUSVRDRQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDgwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX1NQTFBBUglBU01fQ09OU1QoMHgwMDAwMDAwMDAwMTAwMDAwKQpAQCAtNDUsOCArNDUsNyBAQAogI2RlZmluZSBGV19GRUFUVVJFX0xQQVIJCUFTTV9DT05TVCgweDAwMDAwMDAwMDA0MDAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfUFMzX0xWMQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwODAwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX0JFQVQJCUFTTV9DT05TVCgweDAwMDAwMDAwMDEwMDAwMDApCi0jZGVmaW5lIEZXX0ZFQVRVUkVfQlVMS19SRU1PVkUJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMjAwMDAwMCkKLSNkZWZpbmUgRldfRkVBVFVSRV9DTU8JCUFTTV9DT05TVCgweDAwMDAwMDAwMDQwMDAwMDApCisjZGVmaW5lIEZXX0ZFQVRVUkVfQ01PCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAyMDAwMDAwKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC01OCw4ICs1Nyw5IEBACiAJCUZXX0ZFQVRVUkVfUEVSRiB8IEZXX0ZFQVRVUkVfRFVNUCB8IEZXX0ZFQVRVUkVfSU5URVJSVVBUIHwKIAkJRldfRkVBVFVSRV9NSUdSQVRFIHwgRldfRkVBVFVSRV9QRVJGTU9OIHwgRldfRkVBVFVSRV9DUlEgfAogCQlGV19GRUFUVVJFX1ZJTyB8IEZXX0ZFQVRVUkVfUkRNQSB8IEZXX0ZFQVRVUkVfTExBTiB8Ci0JCUZXX0ZFQVRVUkVfQlVMSyB8IEZXX0ZFQVRVUkVfWERBQlIgfCBGV19GRUFUVVJFX01VTFRJVENFIHwKLQkJRldfRkVBVFVSRV9TUExQQVIgfCBGV19GRUFUVVJFX0xQQVIgfCBGV19GRUFUVVJFX0NNTywKKwkJRldfRkVBVFVSRV9CVUxLX1JFTU9WRSB8IEZXX0ZFQVRVUkVfWERBQlIgfAorCQlGV19GRUFUVVJFX01VTFRJVENFIHwgRldfRkVBVFVSRV9TUExQQVIgfCBGV19GRUFUVVJFX0xQQVIgfAorCQlGV19GRUFUVVJFX0NNTywKIAlGV19GRUFUVVJFX1BTRVJJRVNfQUxXQVlTID0gMCwKIAlGV19GRUFUVVJFX0lTRVJJRVNfUE9TU0lCTEUgPSBGV19GRUFUVVJFX0lTRVJJRVMgfCBGV19GRUFUVVJFX0xQQVIsCiAJRldfRkVBVFVSRV9JU0VSSUVTX0FMV0FZUyA9IEZXX0ZFQVRVUkVfSVNFUklFUyB8IEZXX0ZFQVRVUkVfTFBBUiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCAwYjljOTEzLi4wM2M4NjJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC03MTEsNiArNzExLDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NDUvNzU1ICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmZmMDAwLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDkwMGUwZWUuLjk3NjMyNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTY1OCw0MiArNjU4LDQzIEBACiAJY21wZGkJcjAsMAogCWNyYW5kYwllcSxjcjEqNCtlcSxlcQogCWJuZQlyZXN0b3JlCi0JLyogaGVyZSB3ZSBhcmUgcHJlZW1wdGluZyB0aGUgY3VycmVudCB0YXNrICovCi0xOgotI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCWJsCS50cmFjZV9oYXJkaXJxc19vbgotCS8qIE5vdGU6IHdlIGp1c3QgY2xvYmJlcmVkIHIxMCB3aGljaCB1c2VkIHRvIGNvbnRhaW4gdGhlIHByZXZpb3VzCi0JICogTVNSIGJlZm9yZSB0aGUgaGFyZC1kaXNhYmxpbmcgZG9uZSBieSB0aGUgY2FsbGVyIG9mIGRvX3dvcmsuCi0JICogV2UgZG9uJ3QgaGF2ZSB0aGF0IHZhbHVlIGFueW1vcmUsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBhcwotCSAqIHdlIHdpbGwgaGFyZC1lbmFibGUgdW5jb25kaXRpb25hbGx5LCB3ZSBjYW4ganVzdCByZWxvYWQgdGhlCi0JICogY3VycmVudCBNU1IgaW50byByMTAKKworCS8qIEhlcmUgd2UgYXJlIHByZWVtcHRpbmcgdGhlIGN1cnJlbnQgdGFzay4KKwkgKgorCSAqIEVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBzb2Z0LWRpc2FibGVkLiBXZSBhbHNvIHByb3Blcmx5IG1hcmsKKwkgKiB0aGUgUEFDQSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhleSBhcmUgaGFyZC1kaXNhYmxlZAorCSAqIGFuZCB0cmFjZSB0aGUgY2hhbmdlCiAJICovCi0JbWZtc3IJcjEwCi0jZW5kaWYgLyogQ09ORklHX1RSQUNFX0lSUUZMQUdTICovCi0JbGkJcjAsMQorCWxpCXIwLDAKIAlzdGIJcjAsUEFDQVNPRlRJUlFFTihyMTMpCiAJc3RiCXIwLFBBQ0FIQVJESVJRRU4ocjEzKQorCVRSQUNFX0RJU0FCTEVfSU5UUworCisJLyogQ2FsbCB0aGUgc2NoZWR1bGVyIHdpdGggc29mdCBJUlFzIG9mZiAqLworMToJYmwJLnByZWVtcHRfc2NoZWR1bGVfaXJxCisKKwkvKiBIYXJkLWRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbiAoYW5kIHVwZGF0ZSBQQUNBKSAqLwogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCi0Jd3J0ZWVpCTEKLQlibAkucHJlZW1wdF9zY2hlZHVsZQogCXdydGVlaQkwCiAjZWxzZQotCW9yaQlyMTAscjEwLE1TUl9FRQotCW10bXNyZAlyMTAsMQkJLyogcmVlbmFibGUgaW50ZXJydXB0cyAqLwotCWJsCS5wcmVlbXB0X3NjaGVkdWxlCiAJbWZtc3IJcjEwCi0JY2xycmRpCXI5LHIxLFRIUkVBRF9TSElGVAotCXJsZGljbAlyMTAscjEwLDQ4LDEJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluICovCisJcmxkaWNsCXIxMCxyMTAsNDgsMQogCXJvdGxkaQlyMTAscjEwLDE2CiAJbXRtc3JkCXIxMCwxCiAjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KKwlsaQlyMCwwCisJc3RiCXIwLFBBQ0FIQVJESVJRRU4ocjEzKQorCisJLyogUmUtdGVzdCBmbGFncyBhbmQgZXZlbnR1YWxseSBsb29wICovCisJY2xycmRpCXI5LHIxLFRIUkVBRF9TSElGVAogCWxkCXI0LFRJX0ZMQUdTKHI5KQogCWFuZGkuCXIwLHI0LF9USUZfTkVFRF9SRVNDSEVECiAJYm5lCTFiCiAJYglyZXN0b3JlCiAKIHVzZXJfd29yazoKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCisKIAkvKiBFbmFibGUgaW50ZXJydXB0cyAqLwogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCiAJd3J0ZWVpCTEKQEAgLTEwMzgsOCArMTAzOSw3IEBACiAJICogV2UgYXJlIGluIGEgbW9kdWxlIHVzaW5nIHRoZSBtb2R1bGUncyBUT0MuCiAJICogU3dpdGNoIHRvIG91ciBUT0MgdG8gcnVuIGluc2lkZSB0aGUgY29yZSBrZXJuZWwuCiAJICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcikKLQlsZAlyMiwgOChyNCkKKwlsZAlyMiwgUEFDQVRPQyhyMTMpCiAKIAlibAkuZnRyYWNlX3JldHVybl90b19oYW5kbGVyCiAJbm9wCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCmluZGV4IGZlOGY3MWQuLjY0MWM3NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCkBAIC0yODIsMTIgKzI4Miw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyAqcHRyID0gZ2RiX3JlZ3M7CiAJaW50IHJlZzsKLSNpZmRlZiBDT05GSUdfU1BFCi0JdW5pb24gewotCQl1MzIgdjMyWzJdOwotCQl1NjQgdjY0OwotCX0gYWNjOwotI2VuZGlmCiAKIAlmb3IgKHJlZyA9IDA7IHJlZyA8IDMyOyByZWcrKykKIAkJVU5QQUNLNjQocmVncy0+Z3ByW3JlZ10sIHB0cik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IGJiODIwOWUuLmU4ZGZkYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCkBAIC0xMTkwLDcgKzExOTAsNyBAQAogICogUmVwYXJlbnQgcmVzb3VyY2UgY2hpbGRyZW4gb2YgcHIgdGhhdCBjb25mbGljdCB3aXRoIHJlcwogICogdW5kZXIgcmVzLCBhbmQgbWFrZSByZXMgcmVwbGFjZSB0aG9zZSBjaGlsZHJlbi4KICAqLwotc3RhdGljIGludCBfX2luaXQgcmVwYXJlbnRfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LAorc3RhdGljIGludCByZXBhcmVudF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpwYXJlbnQsCiAJCQkJICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnAsICoqcHA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwppbmRleCBiYTk0OWEyLi5jY2Y1NmFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKQEAgLTk3LDcgKzk3LDkgQEAKIAkgKiB0byBkbyBhbiBhcHByb3ByaWF0ZSBUTEIgZmx1c2ggaGVyZSB0b28KIAkgKi8KIAlpZiAoYnVzLT5zZWxmKSB7CisjaWZkZWYgQ09ORklHX1BQQ19TVERfTU1VXzY0CiAJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gYnVzLT5yZXNvdXJjZVswXTsKKyNlbmRpZgogCiAJCXByX2RlYnVnKCJJTyB1bm1hcHBpbmcgZm9yIFBDSS1QQ0kgYnJpZGdlICVzXG4iLAogCQkJIHBjaV9uYW1lKGJ1cy0+c2VsZikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCBiYmNiYWUxLi44N2YxNjYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTE2LDIwICsxMTYsMjMgQEAKIHN0YXRpYyBpbmxpbmUgdTMyIHBlcmZfZ2V0X21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBtbWNyYSA9IHJlZ3MtPmRzaXNyOworCXVuc2lnbmVkIGxvbmcgc2lodiA9IE1NQ1JBX1NJSFY7CisJdW5zaWduZWQgbG9uZyBzaXByID0gTU1DUkFfU0lQUjsKIAogCWlmIChUUkFQKHJlZ3MpICE9IDB4ZjAwKQogCQlyZXR1cm4gMDsJLyogbm90IGEgUE1VIGludGVycnVwdCAqLwogCiAJaWYgKHBwbXUtPmZsYWdzICYgUFBNVV9BTFRfU0lQUikgewotCQlpZiAobW1jcmEgJiBQT1dFUjZfTU1DUkFfU0lIVikKLQkJCXJldHVybiBQRVJGX1JFQ09SRF9NSVNDX0hZUEVSVklTT1I7Ci0JCXJldHVybiAobW1jcmEgJiBQT1dFUjZfTU1DUkFfU0lQUikgPwotCQkJUEVSRl9SRUNPUkRfTUlTQ19VU0VSIDogUEVSRl9SRUNPUkRfTUlTQ19LRVJORUw7CisJCXNpaHYgPSBQT1dFUjZfTU1DUkFfU0lIVjsKKwkJc2lwciA9IFBPV0VSNl9NTUNSQV9TSVBSOwogCX0KLQlpZiAobW1jcmEgJiBNTUNSQV9TSUhWKQorCisJLyogUFIgaGFzIHByaW9yaXR5IG92ZXIgSFYsIHNvIG9yZGVyIGJlbG93IGlzIGltcG9ydGFudCAqLworCWlmIChtbWNyYSAmIHNpcHIpCisJCXJldHVybiBQRVJGX1JFQ09SRF9NSVNDX1VTRVI7CisJaWYgKChtbWNyYSAmIHNpaHYpICYmIChmcmVlemVfZXZlbnRzX2tlcm5lbCAhPSBNTUNSMF9GQ0hWKSkKIAkJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUjsKLQlyZXR1cm4gKG1tY3JhICYgTU1DUkFfU0lQUikgPyBQRVJGX1JFQ09SRF9NSVNDX1VTRVIgOgotCQlQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKKwlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19LRVJORUw7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDExNjhjNWYuLmM5MzBhYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMDE2LDkgKzEwMTYsMTMgQEAKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJaW50IGN1cnJfZnJhbWUgPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKIAlleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylyZXR1cm5fdG9faGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIHJ0aCA9ICh1bnNpZ25lZCBsb25nKXJldHVybl90b19oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgbXJ0aCA9IC0xOwogI2lmZGVmIENPTkZJR19QUEM2NAotCWFkZHIgPSAqKHVuc2lnbmVkIGxvbmcqKWFkZHI7CisJZXh0ZXJuIHZvaWQgbW9kX3JldHVybl90b19oYW5kbGVyKHZvaWQpOworCXJ0aCA9ICoodW5zaWduZWQgbG9uZyAqKXJ0aDsKKwltcnRoID0gKHVuc2lnbmVkIGxvbmcpbW9kX3JldHVybl90b19oYW5kbGVyOworCW1ydGggPSAqKHVuc2lnbmVkIGxvbmcgKiltcnRoOwogI2VuZGlmCiAjZW5kaWYKIApAQCAtMTA0NCw3ICsxMDQ4LDcgQEAKIAkJaWYgKCFmaXJzdGZyYW1lIHx8IGlwICE9IGxyKSB7CiAJCQlwcmludGsoIlsiUkVHIl0gWyJSRUciXSAlcFMiLCBzcCwgaXAsICh2b2lkICopaXApOwogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKLQkJCWlmIChpcCA9PSBhZGRyICYmIGN1cnJfZnJhbWUgPj0gMCkgeworCQkJaWYgKChpcCA9PSBydGggfHwgaXAgPT0gbXJ0aCkgJiYgY3Vycl9mcmFtZSA+PSAwKSB7CiAJCQkJcHJpbnRrKCIgKCVwUykiLAogCQkJCSAgICAgICAodm9pZCAqKWN1cnJlbnQtPnJldF9zdGFja1tjdXJyX2ZyYW1lXS5yZXQpOwogCQkJCWN1cnJfZnJhbWUtLTsKQEAgLTExNjgsNyArMTE3Miw3IEBACiAJdW5zaWduZWQgbG9uZyBiYXNlID0gbW0tPmJyazsKIAl1bnNpZ25lZCBsb25nIHJldDsKIAotI2lmZGVmIENPTkZJR19QUEM2NAorI2lmZGVmIENPTkZJR19QUENfU1REX01NVV82NAogCS8qCiAJICogSWYgd2UgYXJlIHVzaW5nIDFUQiBzZWdtZW50cyBhbmQgd2UgYXJlIGFsbG93ZWQgdG8gcmFuZG9taXNlCiAJICogdGhlIGhlYXAsIHdlIGNhbiBwdXQgaXQgYWJvdmUgMVRCIHNvIGl0IGlzIGJhY2tlZCBieSBhIDFUQgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IDc5N2VhOTUuLjA0ZjYzOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTU3LDcgKzU3LDYgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KLSNpbmNsdWRlIDxhc20vbW11LWhhc2g2NC5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS94bW9uLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKaW5kZXggOTRlMmRmMy4uMTM3ZGMyMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKQEAgLTUwLDYgKzUwLDkgQEAKIC8qIE1heCBzdXBwb3J0ZWQgc2l6ZSBmb3Igc3ltYm9sIG5hbWVzICovCiAjZGVmaW5lIE1BWF9TWU1OQU1FCTY0CiAKKy8qIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHZEU08gKi8KKyNkZWZpbmUgVkRTT19BTElHTk1FTlQJKDEgPDwgMTYpCisKIGV4dGVybiBjaGFyIHZkc28zMl9zdGFydCwgdmRzbzMyX2VuZDsKIHN0YXRpYyB2b2lkICp2ZHNvMzJfa2Jhc2UgPSAmdmRzbzMyX3N0YXJ0Owogc3RhdGljIHVuc2lnbmVkIGludCB2ZHNvMzJfcGFnZXM7CkBAIC0yMzEsMTUgKzIzNCwyMSBAQAogCSAqIHBpY2sgYSBiYXNlIGFkZHJlc3MgZm9yIHRoZSB2RFNPIGluIHByb2Nlc3Mgc3BhY2UuIFdlIHRyeSB0byBwdXQgaXQKIAkgKiBhdCB2ZHNvX2Jhc2Ugd2hpY2ggaXMgdGhlICJuYXR1cmFsIiBiYXNlIGZvciBpdCwgYnV0IHdlIG1pZ2h0IGZhaWwKIAkgKiBhbmQgZW5kIHVwIHB1dHRpbmcgaXQgZWxzZXdoZXJlLgorCSAqIEFkZCBlbm91Z2ggdG8gdGhlIHNpemUgc28gdGhhdCB0aGUgcmVzdWx0IGNhbiBiZSBhbGlnbmVkLgogCSAqLwogCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJdmRzb19iYXNlID0gZ2V0X3VubWFwcGVkX2FyZWEoTlVMTCwgdmRzb19iYXNlLAotCQkJCSAgICAgIHZkc29fcGFnZXMgPDwgUEFHRV9TSElGVCwgMCwgMCk7CisJCQkJICAgICAgKHZkc29fcGFnZXMgPDwgUEFHRV9TSElGVCkgKworCQkJCSAgICAgICgoVkRTT19BTElHTk1FTlQgLSAxKSAmIFBBR0VfTUFTSyksCisJCQkJICAgICAgMCwgMCk7CiAJaWYgKElTX0VSUl9WQUxVRSh2ZHNvX2Jhc2UpKSB7CiAJCXJjID0gdmRzb19iYXNlOwogCQlnb3RvIGZhaWxfbW1hcHNlbTsKIAl9CiAKKwkvKiBBZGQgcmVxdWlyZWQgYWxpZ25tZW50LiAqLworCXZkc29fYmFzZSA9IEFMSUdOKHZkc29fYmFzZSwgVkRTT19BTElHTk1FTlQpOworCiAJLyoKIAkgKiBQdXQgdkRTTyBiYXNlIGludG8gbW0gc3RydWN0LiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGNhbGxpbmcKIAkgKiBpbnN0YWxsX3NwZWNpYWxfbWFwcGluZyBvciB0aGUgcGVyZiBjb3VudGVyIG1tYXAgdHJhY2tpbmcgY29kZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCmluZGV4IDkwNGVmMTMuLjA1NDZiY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKQEAgLTI1LDcgKzI1LDcgQEAKIAkuID0gQUxJR04oMTYpOwogCS50ZXh0CQk6IHsKIAkJKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qIF9fZnRyX2FsdF8qKQotCX0KKwl9CQkgICAgICAJICAgICAgCQkJOnRleHQKIAlQUk9WSURFKF9fZXRleHQgPSAuKTsKIAlQUk9WSURFKF9ldGV4dCA9IC4pOwogCVBST1ZJREUoZXRleHQgPSAuKTsKQEAgLTU2LDcgKzU2LDcgQEAKIAkuZml4dXAJCTogeyAqKC5maXh1cCkgfQogCiAJLmR5bmFtaWMJOiB7ICooLmR5bmFtaWMpIH0JCTp0ZXh0CTpkeW5hbWljCi0JLmdvdAkJOiB7ICooLmdvdCkgfQorCS5nb3QJCTogeyAqKC5nb3QpIH0JCQk6dGV4dAogCS5wbHQJCTogeyAqKC5wbHQpIH0KIAogCV9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGY1NjQyOTMuLjI3NzM1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIzNiw2ICsyMzYsNyBAQAogCQlSRUFEX01PU1RMWV9EQVRBKEwxX0NBQ0hFX0JZVEVTKQogCX0KIAorCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCS5kYXRhX25vc2F2ZSA6IEFUKEFERFIoLmRhdGFfbm9zYXZlKSAtIExPQURfT0ZGU0VUKSB7CiAJCU5PU0FWRV9EQVRBCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUyBiL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMKaW5kZXggYmM0NGRjNC4uOTVjZTM1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCkBAIC03MiwxOSArNzIsMTcgQEAKIDE6CiAjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQICovCiAKLQkvKiB2bWFsbG9jL2lvcmVtYXAgbWFwcGluZyBlbmNvZGluZyBiaXRzLCB0aGUgImxpIiBpbnN0cnVjdGlvbnMgYmVsb3cKLQkgKiB3aWxsIGJlIHBhdGNoZWQgYnkgdGhlIGtlcm5lbCBhdCBib290CisJLyogdm1hbGxvYyBtYXBwaW5nIGdldHMgdGhlIGVuY29kaW5nIGZyb20gdGhlIFBBQ0EgYXMgdGhlIG1hcHBpbmcKKwkgKiBjYW4gYmUgZGVtb3RlZCBmcm9tIDY0SyAtPiA0SyBkeW5hbWljYWxseSBvbiBzb21lIG1hY2hpbmVzCiAJICovCi1CRUdJTl9GVFJfU0VDVElPTgotCS8qIGNoZWNrIHdoZXRoZXIgdGhpcyBpcyBpbiB2bWFsbG9jIG9yIGlvcmVtYXAgc3BhY2UgKi8KIAljbHJsZGkJcjExLHIxMCw0OAogCWNtcGxkaQlyMTEsKFZNQUxMT0NfU0laRSA+PiAyOCkgLSAxCiAJYmd0CTVmCiAJbGh6CXIxMSxQQUNBVk1BTExPQ1NMTFAocjEzKQogCWIJNmYKIDU6Ci1FTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFKQotX0dMT0JBTChzbGJfbWlzc19rZXJuZWxfbG9hZF9pbykKKwkvKiBJTyBtYXBwaW5nICovCisJX0dMT0JBTChzbGJfbWlzc19rZXJuZWxfbG9hZF9pbykKIAlsaQlyMTEsMAogNjoKIEJFR0lOX0ZUUl9TRUNUSU9OCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jCmluZGV4IGMzMWU1YjUuLmQ0NWJlNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jCkBAIC01MSw2ICs1MSw4IEBACiAvKiBsaXN0IG9mIHRoZSBzdXBwb3J0ZWQgYm9hcmRzICovCiBzdGF0aWMgY2hhciAqYm9hcmRbXSBfX2luaXRkYXRhID0gewogCSJpbnRlcmNvbnRyb2wsZGlnc3ktbXRjIiwKKwkibWFucm9sYW5kLG11Y21jNTIiLAorCSJtYW5yb2xhbmQsdWMxMDEiLAogCSJwaHl0ZWMscGNtMDMwIiwKIAkicGh5dGVjLHBjbTAzMiIsCiAJInByb21lc3MsbW90aW9ucHJvIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKaW5kZXggYWNhNTc0MS4uYTg2YzM0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJheG9uX21zaTogY291bGRuJ3QgcGFyc2UgZGNyIHByb3BlcnRpZXMgb24gJXNcbiIsCiAJCQlkbi0+ZnVsbF9uYW1lKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWVfbXNpYzsKIAl9CiAKIAltc2ljLT5kY3JfaG9zdCA9IGRjcl9tYXAoZG4sIGRjcl9iYXNlLCBkY3JfbGVuKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZQppbmRleCBjYzcxNjFmLi5jZTAxNDkyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL01ha2VmaWxlCkBAIC0xLDE4ICsxLDkgQEAKIEVYVFJBX0NGTEFHUwkrPSAtbW5vLW1pbmltYWwtdG9jCiAKLWV4dHJhLXkgKz0gZHQubwotCiBvYmoteSArPSBleGNlcHRpb24ubwotb2JqLXkgKz0gaHZsb2cubyBodmxwY29uZmlnLm8gbHBhcmRhdGEubyBzZXR1cC5vIGR0X21vZC5vIG1mLm8gbHBldmVudHMubyBcCitvYmoteSArPSBodmxvZy5vIGh2bHBjb25maWcubyBscGFyZGF0YS5vIHNldHVwLm8gZHQubyBtZi5vIGxwZXZlbnRzLm8gXAogCWh2Y2FsbC5vIHByb2MubyBodGFiLm8gaW9tbXUubyBtaXNjLm8gaXJxLm8KIG9iai0kKENPTkZJR19QQ0kpICs9IHBjaS5vCiBvYmotJChDT05GSUdfU01QKSArPSBzbXAubwogb2JqLSQoQ09ORklHX1ZJT1BBVEgpICs9IHZpb3BhdGgubyB2aW8ubwogb2JqLSQoQ09ORklHX01PRFVMRVMpICs9IGtzeW1zLm8KLQotcXVpZXRfY21kX2R0X3N0cmluZ3MgPSBEVF9TVFIgICRACi0gICAgICBjbWRfZHRfc3RyaW5ncyA9ICQoT0JKQ09QWSkgLS1yZW5hbWUtc2VjdGlvbiAucm9kYXRhLnN0cjEuOD0uZHRfc3RyaW5ncyBcCi0JCQkJJDwgJEAKLQotJChvYmopL2R0X21vZC5vOgkkKG9iaikvZHQubwotCSQoY2FsbCBpZl9jaGFuZ2VkLGR0X3N0cmluZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9kdC5jCmluZGV4IGM1YTg3YTcuLjdmNDVhNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9kdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9kdC5jCkBAIC01MSwxMSArNTEsMTYgQEAKIAogLyoKICAqIFRoZXNlIGFyZSBjcmVhdGVkIGJ5IHRoZSBsaW5rZXIgc2NyaXB0IGF0IHRoZSBzdGFydCBhbmQgZW5kCi0gKiBvZiB0aGUgc2VjdGlvbiBjb250YWluaW5nIGFsbCB0aGUgc3RyaW5ncyBmcm9tIHRoaXMgZmlsZS4KKyAqIG9mIHRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgYWxsIHRoZSBzdHJpbmdzIG1hcmtlZCB3aXRoIHRoZSBEUyBtYWNyby4KICAqLwogZXh0ZXJuIGNoYXIgX19kdF9zdHJpbmdzX3N0YXJ0W107CiBleHRlcm4gY2hhciBfX2R0X3N0cmluZ3NfZW5kW107CiAKKyNkZWZpbmUgRFMocykJKHsJXAorCXN0YXRpYyBjb25zdCBjaGFyIF9fc1tdIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5kdF9zdHJpbmdzIikpKSA9IHM7IFwKKwlfX3M7CQlcCit9KQorCiBzdHJ1Y3QgaXNlcmllc19mbGF0X2R0IHsKIAlzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgaGVhZGVyOwogCXU2NCByZXNlcnZlX21hcFsyXTsKQEAgLTY0LDkgKzY5LDggQEAKIHN0YXRpYyB2b2lkICogX19pbml0ZGF0YSBkdF9kYXRhOwogCiAvKgotICogUHV0dGluZyB0aGVzZSBzdHJpbmdzIGhlcmUga2VlcHMgdGhlbSBvdXQgb2YgdGhlIHNlY3Rpb24KLSAqIHRoYXQgd2UgcmVuYW1lIHRvIC5kdF9zdHJpbmdzIHVzaW5nIG9iamNvcHkgYW5kIGNhcHR1cmUKLSAqIGZvciB0aGUgc3RyaW5ncyBibG9iIG9mIHRoZSBmbGF0dGVuZWQgZGV2aWNlIHRyZWUuCisgKiBQdXR0aW5nIHRoZXNlIHN0cmluZ3MgaGVyZSBrZWVwcyB0aGVtIG91dCBvZiB0aGUgLmR0X3N0cmluZ3Mgc2VjdGlvbgorICogdGhhdCB3ZSBjYXB0dXJlIGZvciB0aGUgc3RyaW5ncyBibG9iIG9mIHRoZSBmbGF0dGVuZWQgZGV2aWNlIHRyZWUuCiAgKi8KIHN0YXRpYyBjaGFyIF9faW5pdGRhdGEgZGV2aWNlX3R5cGVfY3B1W10gPSAiY3B1IjsKIHN0YXRpYyBjaGFyIF9faW5pdGRhdGEgZGV2aWNlX3R5cGVfbWVtb3J5W10gPSAibWVtb3J5IjsKQEAgLTE3Myw3ICsxNzcsNyBAQAogCiAjZGVmaW5lIGR0X2VuZF9ub2RlKGR0KSBkdF9wdXNoX3UzMihkdCwgT0ZfRFRfRU5EX05PREUpCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkdF9wcm9wKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAorc3RhdGljIHZvaWQgX19pbml0IF9fZHRfcHJvcChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKQEAgLTE5MSw0NCArMTk1LDMyIEBACiAJLyogVGhlIGFjdHVhbCBkYXRhLiAqLwogCWR0X3B1c2hfYnl0ZXMoZHQsIGRhdGEsIGxlbik7CiB9CisjZGVmaW5lIGR0X3Byb3AoZHQsIG5hbWUsIGRhdGEsIGxlbikJX19kdF9wcm9wKChkdCksIERTKG5hbWUpLCAoZGF0YSksIChsZW4pKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcF9zdHIoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCWNvbnN0IGNoYXIgKmRhdGEpCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc3RybGVuKGRhdGEpICsgMSk7IC8qICsgMSBmb3IgTlVMTCAqLwotfQorI2RlZmluZSBkdF9wcm9wX3N0cihkdCwgbmFtZSwgZGF0YSkJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzdHJsZW4oKGRhdGEpKSArIDEpOyAvKiArIDEgZm9yIE5VTEwgKi8KIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTMyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAorc3RhdGljIHZvaWQgX19pbml0IF9fZHRfcHJvcF91MzIoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCXUzMiBkYXRhKQogewotCWR0X3Byb3AoZHQsIG5hbWUsICZkYXRhLCBzaXplb2YodTMyKSk7CisJX19kdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHUzMikpOwogfQorI2RlZmluZSBkdF9wcm9wX3UzMihkdCwgbmFtZSwgZGF0YSkJX19kdF9wcm9wX3UzMigoZHQpLCBEUyhuYW1lKSwgKGRhdGEpKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgX19tYXliZV91bnVzZWQgZHRfcHJvcF91NjQoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCXU2NCBkYXRhKQorc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkIF9fZHRfcHJvcF91NjQoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCisJCWNvbnN0IGNoYXIgKm5hbWUsIHU2NCBkYXRhKQogewotCWR0X3Byb3AoZHQsIG5hbWUsICZkYXRhLCBzaXplb2YodTY0KSk7CisJX19kdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHU2NCkpOwogfQorI2RlZmluZSBkdF9wcm9wX3U2NChkdCwgbmFtZSwgZGF0YSkJX19kdF9wcm9wX3U2NCgoZHQpLCBEUyhuYW1lKSwgKGRhdGEpKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcF91NjRfbGlzdChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwKLQkJY29uc3QgY2hhciAqbmFtZSwgdTY0ICpkYXRhLCBpbnQgbikKLXsKLQlkdF9wcm9wKGR0LCBuYW1lLCBkYXRhLCBzaXplb2YodTY0KSAqIG4pOwotfQorI2RlZmluZSBkdF9wcm9wX3U2NF9saXN0KGR0LCBuYW1lLCBkYXRhLCBuKQlcCisJZHRfcHJvcCgoZHQpLCBuYW1lLCAoZGF0YSksIHNpemVvZih1NjQpICogKG4pKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcF91MzJfbGlzdChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwKLQkJY29uc3QgY2hhciAqbmFtZSwgdTMyICpkYXRhLCBpbnQgbikKLXsKLQlkdF9wcm9wKGR0LCBuYW1lLCBkYXRhLCBzaXplb2YodTMyKSAqIG4pOwotfQorI2RlZmluZSBkdF9wcm9wX3UzMl9saXN0KGR0LCBuYW1lLCBkYXRhLCBuKQlcCisJZHRfcHJvcCgoZHQpLCBuYW1lLCAoZGF0YSksIHNpemVvZih1MzIpICogKG4pKQogCi0jaWZkZWYgbm90eWV0Ci1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcF9lbXB0eShzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlkdF9wcm9wKGR0LCBuYW1lLCBOVUxMLCAwKTsKLX0KLSNlbmRpZgorI2RlZmluZSBkdF9wcm9wX2VtcHR5KGR0LCBuYW1lKQkJZHRfcHJvcCgoZHQpLCBuYW1lLCBOVUxMLCAwKQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZHRfY3B1cyhzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKaW5kZXggMjEyMjZiNy4uNDE0Y2E5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKQEAgLTU0MCw4ICs1NDAsMTEgQEAKIAkvKiBNYWtlIHN1cmUgSVJRIGlzIGRpc2FibGVkICovCiAJa3dfd3JpdGVfcmVnKHJlZ19pZXIsIDApOwogCi0JLyogUmVxdWVzdCBjaGlwIGludGVycnVwdCAqLwotCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGt3X2kyY19pcnEsIDAsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQorCS8qIFJlcXVlc3QgY2hpcCBpbnRlcnJ1cHQuIFdlIHNldCBJUlFGX1RJTUVSIGJlY2F1c2Ugd2UgZG9uJ3QKKwkgKiB3YW50IHRoYXQgaW50ZXJydXB0IGRpc2FibGVkIGJldHdlZW4gdGhlIDIgcGFzc2VzIG9mIGRyaXZlcgorCSAqIHN1c3BlbmQgb3Igd2UnbGwgaGF2ZSBpc3N1ZXMgcnVubmluZyB0aGUgcGZ1bmNzCisJICovCisJaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycSwga3dfaTJjX2lycSwgSVJRRl9USU1FUiwgImtleXdlc3QgaTJjIiwgaG9zdCkpCiAJCWhvc3QtPmlycSA9IE5PX0lSUTsKIAogCXByaW50ayhLRVJOX0lORk8gIktleVdlc3QgaTJjIEAweCUwOHggaXJxICVkICVzXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2Zpcm13YXJlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYwppbmRleCA1YTcwN2RhLi4wYTE0ZDhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYwpAQCAtNTEsMTEgKzUxLDEwIEBACiAJe0ZXX0ZFQVRVUkVfVklPLAkJImhjYWxsLXZpbyJ9LAogCXtGV19GRUFUVVJFX1JETUEsCQkiaGNhbGwtcmRtYSJ9LAogCXtGV19GRUFUVVJFX0xMQU4sCQkiaGNhbGwtbExBTiJ9LAotCXtGV19GRUFUVVJFX0JVTEssCQkiaGNhbGwtYnVsayJ9LAorCXtGV19GRUFUVVJFX0JVTEtfUkVNT1ZFLAkiaGNhbGwtYnVsayJ9LAogCXtGV19GRUFUVVJFX1hEQUJSLAkJImhjYWxsLXhkYWJyIn0sCiAJe0ZXX0ZFQVRVUkVfTVVMVElUQ0UsCQkiaGNhbGwtbXVsdGktdGNlIn0sCiAJe0ZXX0ZFQVRVUkVfU1BMUEFSLAkJImhjYWxsLXNwbHBhciJ9LAotCXtGV19GRUFUVVJFX0JVTEtfUkVNT1ZFLAkiaGNhbGwtYnVsayJ9LAogfTsKIAogLyogQnVpbGQgdXAgdGhlIGZpcm13YXJlIGZlYXR1cmVzIGJpdG1hc2sgdXNpbmcgdGhlIGNvbnRlbnRzIG9mCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKaW5kZXggYzZmMGE3MWIuLmJkYmU5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKQEAgLTUxNyw2ICs1MTcsMTUgQEAKIAlpbl94bW9uID0gMDsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0JPT0tFCisJaWYgKHJlZ3MtPm1zciAmIE1TUl9ERSkgeworCQlicCA9IGF0X2JyZWFrcG9pbnQocmVncy0+bmlwKTsKKwkJaWYgKGJwICE9IE5VTEwpIHsKKwkJCXJlZ3MtPm5pcCA9ICh1bnNpZ25lZCBsb25nKSAmYnAtPmluc3RyWzBdOworCQkJYXRvbWljX2luYygmYnAtPnJlZl9jb3VudCk7CisJCX0KKwl9CisjZWxzZQogCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSX1NGKSkgPT0gKE1TUl9JUnxNU1JfU0YpKSB7CiAJCWJwID0gYXRfYnJlYWtwb2ludChyZWdzLT5uaXApOwogCQlpZiAoYnAgIT0gTlVMTCkgewpAQCAtNTMwLDcgKzUzOSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0KKyNlbmRpZgogCWluc2VydF9jcHVfYnB0cygpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtODk0LDYgKzkwMywxNCBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19CT09LRQorc3RhdGljIGludCBkb19zdGVwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJlZ3MtPm1zciB8PSBNU1JfREU7CisJbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgfCBEQkNSMF9JQyB8IERCQ1IwX0lETSk7CisJcmV0dXJuIDE7Cit9CisjZWxzZQogLyoKICAqIFN0ZXAgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uCiAgKiBTb21lIGluc3RydWN0aW9ucyB3ZSBlbXVsYXRlLCBvdGhlcnMgd2UgZXhlY3V0ZSB3aXRoIE1TUl9TRSBzZXQuCkBAIC05MjQsNiArOTQxLDcgQEAKIAlyZWdzLT5tc3IgfD0gTVNSX1NFOwogCXJldHVybiAxOwogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGJvb3RjbWRzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwppbmRleCA3MDRkZDM5Li43N2RmNzI2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKQEAgLTQzOCw3ICs0MzgsNyBAQAogCQl9CiAJCWlmIChkaWFnMjA0KCh1bnNpZ25lZCBsb25nKVNVQkNfU1RJQjYgfAogCQkJICAgICh1bnNpZ25lZCBsb25nKUlORk9fRVhULCBwYWdlcywgYnVmKSA+PSAwKSB7Ci0JCQlkaWFnMjA0X3N0b3JlX3NjID0gU1VCQ19TVElCNzsKKwkJCWRpYWcyMDRfc3RvcmVfc2MgPSBTVUJDX1NUSUI2OwogCQkJZGlhZzIwNF9pbmZvX3R5cGUgPSBJTkZPX0VYVDsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAppbmRleCAyNGIxMjQ0Li5mMjM5NjFhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKQEAgLTc4LDcgKzc4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBjcHV0aW1lX3RvX21zZWNzKGNvbnN0IGNwdXRpbWVfdCBjcHV0aW1lKQogewotCXJldHVybiBfX2RpdihjcHV0aW1lLCA0MDk2MDAwKTsKKwlyZXR1cm4gY3B1dGltZV9kaXYoY3B1dGltZSwgNDA5NjAwMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZV90CkBAIC0xNjAsNyArMTYwLDcgQEAKIHN0YXRpYyBpbmxpbmUgY2xvY2tfdAogY3B1dGltZV90b19jbG9ja190KGNwdXRpbWVfdCBjcHV0aW1lKQogewotCXJldHVybiBfX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CisJcmV0dXJuIGNwdXRpbWVfZGl2KGNwdXRpbWUsIDQwOTYwMDAwMDBVTEwgLyBVU0VSX0haKTsKIH0KIAogc3RhdGljIGlubGluZSBjcHV0aW1lX3QKQEAgLTE3NSw3ICsxNzUsNyBAQAogc3RhdGljIGlubGluZSBjbG9ja190CiBjcHV0aW1lNjRfdG9fY2xvY2tfdChjcHV0aW1lNjRfdCBjcHV0aW1lKQogewotICAgICAgIHJldHVybiBfX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CisgICAgICAgcmV0dXJuIGNwdXRpbWVfZGl2KGNwdXRpbWUsIDQwOTYwMDAwMDBVTEwgLyBVU0VSX0haKTsKIH0KIAogc3RydWN0IHMzOTBfaWRsZV9kYXRhIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IGVlNTdhNDIuLjQ4OTBhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwpAQCAtMTU5NSwxMCArMTU5NSw5IEBACiB7CiAJaWYgKHN0cmNtcCh0cmlnZ2VyLT5uYW1lLCBPTl9QQU5JQ19TVFIpID09IDApCiAJCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JZWxzZSB7Ci0JCXNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApOwotCQlmb3IgKDs7KTsKLQl9CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwkJY3B1X3JlbGF4KCk7CisJZm9yICg7Oyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uIHN0b3BfYWN0aW9uID0ge1NIVVRET1dOX0FDVElPTl9TVE9QX1NUUiwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCmluZGV4IDgwMmM4YWIuLjA3MjlmMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwpAQCAtMzEsOSArMzEsOSBAQAogCiBzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmh3Y2FwX3N0cls5XSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyWzEwXSA9IHsKIAkJImVzYW4zIiwgInphcmNoIiwgInN0ZmxlIiwgIm1zYSIsICJsZGlzcCIsICJlaW1tIiwgImRmcCIsCi0JCSJlZGF0IiwgImV0ZjNlaCIKKwkJImVkYXQiLCAiZXRmM2VoIiwgImhpZ2hncHJzIgogCX07CiAJc3RydWN0IF9sb3djb3JlICpsYzsKIAl1bnNpZ25lZCBsb25nIG4gPSAodW5zaWduZWQgbG9uZykgdiAtIDE7CkBAIC00OCw3ICs0OCw3IEBACiAJCQkgICBudW1fb25saW5lX2NwdXMoKSwgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAogCQkJICAgKGxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpJTEwMCk7CiAJCXNlcV9wdXRzKG0sICJmZWF0dXJlc1x0OiAiKTsKLQkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCiAJCQlpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKIAkJCQlzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOwogCQlzZXFfcHV0cyhtLCAiXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IGM5MzJjYWEuLjkzZTUyMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtNzYsNyArNzYsNiBAQAogCV9fdTMyIHN0YXR1czsKIAogCXN3aXRjaCAoc2lnbmFsX3Byb2Nlc3Nvcl9wcygmc3RhdHVzLCAwLCBjcHUsIHNpZ3Bfc2Vuc2UpKSB7Ci0JY2FzZSBzaWdwX29yZGVyX2NvZGVfYWNjZXB0ZWQ6CiAJY2FzZSBzaWdwX3N0YXR1c19zdG9yZWQ6CiAJCS8qIENoZWNrIGZvciBzdG9wcGVkIGFuZCBjaGVjayBzdG9wIHN0YXRlICovCiAJCWlmIChzdGF0dXMgJiAweDUwKQpAQCAtNjM4LDYgKzYzNyw4IEBACiAJLyogV2FpdCB1bnRpbCB0YXJnZXQgY3B1IGlzIGRvd24gKi8KIAl3aGlsZSAoIWNwdV9zdG9wcGVkKGNwdSkpCiAJCWNwdV9yZWxheCgpOworCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yX3AoMCwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKKwkJdWRlbGF5KDEwKTsKIAlzbXBfZnJlZV9sb3djb3JlKGNwdSk7CiAJcHJfaW5mbygiUHJvY2Vzc29yICVkIHN0b3BwZWRcbiIsIGNwdSk7CiB9CkBAIC02NDUsOCArNjQ2LDggQEAKIHZvaWQgY3B1X2RpZSh2b2lkKQogewogCWlkbGVfdGFza19leGl0KCk7Ci0Jc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCk7Ci0JQlVHKCk7CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwkJY3B1X3JlbGF4KCk7CiAJZm9yICg7Oyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCmluZGV4IDdjODY1M2UuLjBjMjZjYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwpAQCAtMTk5LDYgKzE5OSw3IEBACiAJYnJjCTIsNGIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KIDU6CiAJc2lncAklcjksJXIyLF9fU0lHUF9TVE9QCS8qIHN0b3AgcmVzdW1lIChjdXJyZW50KSBDUFUgKi8KKwlicmMJMiw1YgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLwogNjoJagk2YgogCiByZXN0YXJ0X3N1c3BlbmQ6CkBAIC0yMDYsNiArMjA3LDcgQEAKIAlsbGdoCSVyMiwwKCVyMSkKIDc6CiAJc2lncAklcjksJXIyLF9fU0lHUF9TRU5TRQkvKiBXYWl0IGZvciByZXN1bWUgQ1BVICovCisJYnJjCTgsN2IJCQkvKiBhY2NlcHRlZCwgc3RhdHVzIDAsIHN0aWxsIHJ1bm5pbmcgKi8KIAlicmMJMiw3YgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLwogCXRtbGwJJXI5LDB4NDAJCS8qIFRlc3QgaWYgcmVzdW1lIENQVSBpcyBzdG9wcGVkICovCiAJanoJN2IKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCBiOTQwNDI0Li44OGNkZWI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0zNyw3ICszNyw2IEBACiAJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCi0Jc2VsZWN0IEhBVkVfRlRSQUNFX1NZU0NBTExTCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEFSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaWYgTU1VCkBAIC0xMjIsNiArMTIxLDkgQEAKIAlib29sCiAJc2VsZWN0IEFSQ0hfU1VTUEVORF9QT1NTSUJMRQogCitjb25maWcgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUworCWJvb2wKKwogY29uZmlnIFNZU19TVVBQT1JUU19TTVAKIAlib29sCiAKQEAgLTE5Niw2ICsxOTgsNyBAQAogCXNlbGVjdCBDUFVfSEFTX1NSX1JCCiAJc2VsZWN0IENQVV9IQVNfRlBVIGlmICFDUFVfU0g0QUxfRFNQCiAJc2VsZWN0IFNZU19TVVBQT1JUU19UTVUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUyBpZiBNTVUKIAogY29uZmlnIENQVV9TSDRBCiAJYm9vbApAQCAtMjEwLDYgKzIxMyw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfSEFTX0ZQVQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfVE1VCisJc2VsZWN0IFNZU19TVVBQT1JUU19IVUdFVExCRlMgaWYgTU1VCiAKIGNvbmZpZyBDUFVfU0hYMgogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IGZjNTFhOTEuLjY2ZTQwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMTk5LDcgKzE5OSw3IEBACiBsaWJzLSQoQ09ORklHX1NVUEVSSDMyKQkJOj0gYXJjaC9zaC9saWIvCSQobGlicy15KQogbGlicy0kKENPTkZJR19TVVBFUkg2NCkJCTo9IGFyY2gvc2gvbGliNjQvICQobGlicy15KQogCi1CT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnNyZWMgXAorQk9PVF9UQVJHRVRTID0gdUltYWdlIHVJbWFnZS5iejIgdUltYWdlLmd6IHVJbWFnZS5sem1hIHVJbWFnZS5zcmVjIHVJbWFnZS5iaW4gXAogCSAgICAgICB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlCiBQSE9OWSArPSBtYWtldG9vbHMgJChCT09UX1RBUkdFVFMpIEZPUkNFCiAKQEAgLTIyNSw2ICsyMjUsNyBAQAogCUBlY2hvICcgIHZtbGludXguc3JlYwkgICAgICAgICAgIC0gQ3JlYXRlIGFuIEVMRiBTLXJlY29yZCcKIAlAZWNobyAnKiB1SW1hZ2UgIAkgICAgICAgICAgIC0gQWxpYXMgdG8gYm9vdGFibGUgVS1Cb290IGltYWdlJwogCUBlY2hvICcgIHVJbWFnZS5zcmVjCSAgICAgICAgICAgLSBDcmVhdGUgYW4gUy1yZWNvcmQgZm9yIFUtQm9vdCcKKwlAZWNobyAnICB1SW1hZ2UuYmluCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiaW4pJwogCUBlY2hvICcqIHVJbWFnZS5negkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoZ3ppcCknCiAJQGVjaG8gJyAgdUltYWdlLmJ6MgkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYnppcDIpJwogCUBlY2hvICcgIHVJbWFnZS5sem1hCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChsem1hKScKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwppbmRleCAyNWNkZjczNS4uNTI4MDEzMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwpAQCAtMTQsNyArMTQsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0zNSw3ICszNCw3IEBACiAJaW50IG1pbm9yOwogCWludCByZXQgPSAtRU5PRU5UOwogCi0JbG9ja19rZXJuZWwoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAltaW5vciA9IE1JTk9SKGlub2RlLT5pX3JkZXYpOwogCWlmIChtaW5vciA8IERFVkNPVU5UKSB7CiAJCWlmIChvcGVuQ250ID4gMCkgewpAQCAtNDUsNyArNDQsNyBAQAogCQkJcmV0ID0gMDsKIAkJfQogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJcHJlZW1wdF9lbmFibGUoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MCw4ICs1OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2lvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGdpb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdW5zaWduZWQgaW50IGRhdGE7CiAJc3RhdGljIHVuc2lnbmVkIGludCBhZGRyID0gMDsKQEAgLTEyOSw3ICsxMjcsNyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gZ2lvX29wZW4sCS8qIG9wZW4gKi8KIAkucmVsZWFzZSA9IGdpb19jbG9zZSwJLyogcmVsZWFzZSAqLwotCS5pb2N0bCA9IGdpb19pb2N0bCwJLyogaW9jdGwgKi8KKwkudW5sb2NrZWRfaW9jdGwgPSBnaW9faW9jdGwsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBnaW9faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYwppbmRleCA0YWYzYTc3Li5jMzc2MTdlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYwpAQCAtMTEsMTAgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9zZXR1cC5jCmluZGV4IGFmNjRkMDMuLmE1YzBkZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYwpAQCAtMTUsMTQgKzE1LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpZmRlZiBDT05GSUdfTVRECiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFyc2VkX3BhcnRpdGlvbnM7Ci0KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiByc2tfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUJCT0gIkJvb3Rsb2FkZXIiLApAQCAtNDEsNiArMzksOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZmxhc2hfZGF0YSA9IHsKKwkucGFydHMJCT0gcnNrX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShyc2tfcGFydGl0aW9ucyksCiAJLndpZHRoCQk9IDIsCiB9OwogCkBAIC02MCw3ICs2MCw4IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoX210ZDsKKyNpZmRlZiBDT05GSUdfTVRECitzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKIAogc3RhdGljIHN0cnVjdCBtYXBfaW5mbyByc2tfZmxhc2hfbWFwID0gewogCS5uYW1lCQk9ICJSU0srIEZsYXNoIiwKQEAgLTY4LDYgKzY5LDEwIEBACiAJLmJhbmt3aWR0aAk9IDIsCiB9OwogCitzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaF9tdGQ7CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFyc2VkX3BhcnRpdGlvbnM7CisKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXRfbXRkX3BhcnRpdGlvbnModm9pZCkKIHsKIAlpbnQgbnJfcGFydHMgPSAwOwpAQCAtNzcsMTQgKzgyLDE0IEBACiAJbnJfcGFydHMgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhmbGFzaF9tdGQsIHByb2JlcywKIAkJCQkJJnBhcnNlZF9wYXJ0aXRpb25zLCAwKTsKIAkvKiBJZiB0aGVyZSBpcyBubyBwYXJ0aXRpb24gdGFibGUsIHVzZWQgdGhlIGhhcmQgY29kZWQgdGFibGUgKi8KLQlpZiAobnJfcGFydHMgPD0gMCkgewotCQlmbGFzaF9kYXRhLnBhcnRzID0gcnNrX3BhcnRpdGlvbnM7Ci0JCWZsYXNoX2RhdGEubnJfcGFydHMgPSBBUlJBWV9TSVpFKHJza19wYXJ0aXRpb25zKTsKLQl9IGVsc2UgeworCWlmIChucl9wYXJ0cyA+IDApIHsKIAkJZmxhc2hfZGF0YS5ucl9wYXJ0cyA9IG5yX3BhcnRzOwogCQlmbGFzaF9kYXRhLnBhcnRzID0gcGFyc2VkX3BhcnRpdGlvbnM7CiAJfQogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbXRkX3BhcnRpdGlvbnModm9pZCkge30KKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcnNrX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZmbGFzaF9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggYTEzMTY4Ny4uY2I4Y2Y1NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMjAsMTEgKzIwLDEyIEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVAk/PSAweDAwMDAxMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUCT89IDB4MDAwMDEwMDAKIAorc3VmZml4LXkgOj0gYmluCiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApICA6PSBnegogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9CWklQMikgOj0gYnoyCiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTUEpICA6PSBsem1hCiAKLXRhcmdldHMgOj0gekltYWdlIHZtbGludXguc3JlYyByb21JbWFnZSB1SW1hZ2UgdUltYWdlLnNyZWMgdUltYWdlLmd6IHVJbWFnZS5iejIgdUltYWdlLmx6bWEKK3RhcmdldHMgOj0gekltYWdlIHZtbGludXguc3JlYyByb21JbWFnZSB1SW1hZ2UgdUltYWdlLnNyZWMgdUltYWdlLmd6IHVJbWFnZS5iejIgdUltYWdlLmx6bWEgdUltYWdlLmJpbgogZXh0cmEteSArPSB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYQogc3ViZGlyLSA6PSBjb21wcmVzc2VkIHJvbWltYWdlCiAKQEAgLTg4LDYgKzg5LDkgQEAKICQob2JqKS91SW1hZ2UubHptYTogJChvYmopL3ZtbGludXguYmluLmx6bWEKIAkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UsbHptYSkKIAorJChvYmopL3VJbWFnZS5iaW46ICQob2JqKS92bWxpbnV4LmJpbgorCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxub25lKQorCiBPQkpDT1BZRkxBR1Nfdm1saW51eC5zcmVjIDo9IC1JIGJpbmFyeSAtTyBzcmVjCiAkKG9iaikvdm1saW51eC5zcmVjOiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4CiAJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMgYi9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCmluZGV4IDAzYjM2MTYuLjJkMDcwODQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vZHdhcmYuaD4KICNpbmNsdWRlIDxhc20vdW53aW5kZXIuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KQEAgLTU1Nyw2ICs1NTgsMjcgQEAKIAlpZiAoIXBjICYmICFwcmV2KQogCQlwYyA9ICh1bnNpZ25lZCBsb25nKWN1cnJlbnRfdGV4dF9hZGRyKCk7CiAKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJLyoKKwkgKiBJZiBvdXIgc3RhY2sgaGFzIGJlZW4gcGF0Y2hlZCBieSB0aGUgZnVuY3Rpb24gZ3JhcGggdHJhY2VyCisJICogdGhlbiB3ZSBtaWdodCBzZWUgdGhlIGFkZHJlc3Mgb2YgcmV0dXJuX3RvX2hhbmRsZXIoKSB3aGVyZSB3ZQorCSAqIGV4cGVjdGVkIHRvIGZpbmQgdGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MuCisJICovCisJaWYgKHBjID09ICh1bnNpZ25lZCBsb25nKSZyZXR1cm5fdG9faGFuZGxlcikgeworCQlpbnQgaW5kZXggPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKKworCQkvKgorCQkgKiBXZSBjdXJyZW50bHkgaGF2ZSBubyB3YXkgb2YgdHJhY2tpbmcgaG93IG1hbnkKKwkJICogcmV0dXJuX3RvX2hhbmRsZXIoKSdzIHdlJ3ZlIHNlZW4uIElmIHRoZXJlIGlzIG1vcmUKKwkJICogdGhhbiBvbmUgcGF0Y2hlZCByZXR1cm4gYWRkcmVzcyBvbiBvdXIgc3RhY2ssCisJCSAqIGNvbXBsYWluIGxvdWRseS4KKwkJICovCisJCVdBUk5fT04oaW5kZXggPiAwKTsKKworCQlwYyA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0OworCX0KKyNlbmRpZgorCiAJZnJhbWUgPSBtZW1wb29sX2FsbG9jKGR3YXJmX2ZyYW1lX3Bvb2wsIEdGUF9BVE9NSUMpOwogCWlmICghZnJhbWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgYSBkd2FyZiBmcmFtZVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IDY4ZDkyMjMuLjNlYjg0OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0xMjEsNyArMTIxLDcgQEAKIEVOVFJZKHJlc3VtZV91c2Vyc3BhY2UpCiAJISByODogY3VycmVudF90aHJlYWRfaW5mbwogCWNsaQotCVRSQUNFX0lSUVNfT2ZGCisJVFJBQ0VfSVJRU19PRkYKIAltb3YubAlAKFRJX0ZMQUdTLHI4KSwgcjAJCSEgY3VycmVudF90aHJlYWRfaW5mby0+ZmxhZ3MKIAl0c3QJIyhfVElGX1dPUktfTUFTSyAmIDB4ZmYpLCByMAogCWJ0L3MJX19yZXN0b3JlX2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYwppbmRleCBhM2RjYzZkLi4yYzQ4ZTI2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYwpAQCAtMjkxLDMxICsyOTEsNDggQEAKIAlyZXR1cm4gc3lzY2FsbHNfbWV0YWRhdGFbbnJdOwogfQogCi12b2lkIGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKK2ludCBzeXNjYWxsX25hbWVfdG9fbnIoY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKworCWlmICghc3lzY2FsbHNfbWV0YWRhdGEpCisJCXJldHVybiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfc3lzY2FsbHM7IGkrKykKKwkJaWYgKHN5c2NhbGxzX21ldGFkYXRhW2ldKQorCQkJaWYgKCFzdHJjbXAoc3lzY2FsbHNfbWV0YWRhdGFbaV0tPm5hbWUsIG5hbWUpKQorCQkJCXJldHVybiBpOworCXJldHVybiAtMTsKK30KKwordm9pZCBzZXRfc3lzY2FsbF9lbnRlcl9pZChpbnQgbnVtLCBpbnQgaWQpCit7CisJc3lzY2FsbHNfbWV0YWRhdGFbbnVtXS0+ZW50ZXJfaWQgPSBpZDsKK30KKwordm9pZCBzZXRfc3lzY2FsbF9leGl0X2lkKGludCBudW0sIGludCBpZCkKK3sKKwlzeXNjYWxsc19tZXRhZGF0YVtudW1dLT5leGl0X2lkID0gaWQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqbWV0YTsKIAl1bnNpZ25lZCBsb25nICoqcHN5c19zeXNjYWxsX3RhYmxlID0gJnN5c19jYWxsX3RhYmxlOwotCXN0YXRpYyBhdG9taWNfdCByZWZzOwotCi0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZyZWZzKSAhPSAxKQotCQlnb3RvIGVuZDsKIAogCXN5c2NhbGxzX21ldGFkYXRhID0ga3phbGxvYyhzaXplb2YoKnN5c2NhbGxzX21ldGFkYXRhKSAqCiAJCQkJCUZUUkFDRV9TWVNDQUxMX01BWCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzeXNjYWxsc19tZXRhZGF0YSkgewogCQlXQVJOX09OKDEpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfU1lTQ0FMTF9NQVg7IGkrKykgewogCQltZXRhID0gZmluZF9zeXNjYWxsX21ldGEocHN5c19zeXNjYWxsX3RhYmxlW2ldKTsKIAkJc3lzY2FsbHNfbWV0YWRhdGFbaV0gPSBtZXRhOwogCX0KLQlyZXR1cm47CiAKLQkvKiBQYXJhbm9pZDogYXZvaWQgb3ZlcmZsb3cgKi8KLWVuZDoKLQlhdG9taWNfZGVjKCZyZWZzKTsKKwlyZXR1cm4gMDsKIH0KK2FyY2hfaW5pdGNhbGwoYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscyk7CiAjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMgYi9hcmNoL3NoL2tlcm5lbC9pcnEuYwppbmRleCA3Y2I5MzNiLi5lYWM3ZGE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pcnEuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTA2LDcgKzEwNyw3IEBACiBzdGF0aWMgdW5pb24gaXJxX2N0eCAqc29mdGlycV9jdHhbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKICNlbmRpZgogCi1hc21saW5rYWdlIGludCBkb19JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIF9faXJxX2VudHJ5IGludCBkb19JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IGY5ZDQ0ZjguLjk5YjRmYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtNTQ5LDYgKzU0OSw4IEBACiAKIAlpZiAoY3B1ID09IDApCiAJCXNlcV9wcmludGYobSwgIm1hY2hpbmVcdFx0OiAlc1xuIiwgZ2V0X3N5c3RlbV90eXBlKCkpOworCWVsc2UKKwkJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAogCXNlcV9wcmludGYobSwgInByb2Nlc3Nvclx0OiAlZFxuIiwgY3B1KTsKIAlzZXFfcHJpbnRmKG0sICJjcHUgZmFtaWx5XHQ6ICVzXG4iLCBpbml0X3V0c25hbWUoKS0+bWFjaGluZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYwppbmRleCA4NmMyNzA0Li40NDRjY2UzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKQEAgLTg1LDYgKzg1LDIwIEBACiBERUNMQVJFX0VYUE9SVChfX21vdnN0cl9pNF9vZGQpOwogREVDTEFSRV9FWFBPUlQoX19tb3ZzdHJTSTEyX2k0KTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92bWVtKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k4KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kxMik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMTYpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTIwKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kyNCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMjgpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTMyKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kzNik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNDApOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTQ0KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k0OCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNTIpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTU2KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k2MCk7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbV9pNF9ldmVuKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92bWVtX2k0X29kZCk7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMTJfaTQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCA2NzI5NzAzLi4zZGIzNzQyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCi0JaWYgKCEoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKKwlpZiAoIShib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQogCQlyZXR1cm4gMDsKIAogCXNldF91c2VkX21hdGgoKTsKQEAgLTE1OCw3ICsxNTgsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCWlmICghKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCisJaWYgKCEoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXVzZWRfbWF0aCgpKSB7CkBAIC0xOTksNyArMTk5LDcgQEAKICN1bmRlZiBDT1BZCiAKICNpZmRlZiBDT05GSUdfU0hfRlBVCi0JaWYgKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgeworCWlmIChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpIHsKIAkJaW50IG93bmVkX2ZwOwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKQEAgLTQ3Miw2ICs0NzIsNyBAQAogCQllcnIgfD0gX19wdXRfdXNlcihPUl9SMF9SMCwgJmZyYW1lLT5yZXRjb2RlWzZdKTsKIAkJZXJyIHw9IF9fcHV0X3VzZXIoKF9fTlJfcnRfc2lncmV0dXJuKSwgJmZyYW1lLT5yZXRjb2RlWzddKTsKIAkJcmVncy0+cHIgPSAodW5zaWduZWQgbG9uZykgZnJhbWUtPnJldGNvZGU7CisJCWZsdXNoX2ljYWNoZV9yYW5nZShyZWdzLT5wciwgcmVncy0+cHIgKyBzaXplb2YoZnJhbWUtPnJldGNvZGUpKTsKIAl9CiAKIAlpZiAoZXJyKQpAQCAtNDk3LDggKzQ5OCw2IEBACiAJcHJfZGVidWcoIlNJRyBkZWxpdmVyICglczolZCk6IHNwPSVwIHBjPSUwOGx4IHByPSUwOGx4XG4iLAogCQkgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIGZyYW1lLCByZWdzLT5wYywgcmVncy0+cHIpOwogCi0JZmx1c2hfaWNhY2hlX3JhbmdlKHJlZ3MtPnByLCByZWdzLT5wciArIHNpemVvZihmcmFtZS0+cmV0Y29kZSkpOwotCiAJcmV0dXJuIDA7CiAKIGdpdmVfc2lnc2VndjoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NtcC5jIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKaW5kZXggNDQyZDhkNC4uMTYwZGIxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKQEAgLTM1LDYgKzM1LDggQEAKIHsKIAlzdHJ1Y3Qgc2hfY3B1aW5mbyAqYyA9IGNwdV9kYXRhICsgY3B1OwogCisJbWVtY3B5KGMsICZib290X2NwdV9kYXRhLCBzaXplb2Yoc3RydWN0IHNoX2NwdWluZm8pKTsKKwogCWMtPmxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKaW5kZXggZTBiNWU0Yi4uN2EyZWUzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CkBAIC0xNTksMTIgKzE2MCwxMiBAQAogCiAJb29wc19lbnRlcigpOwogCi0JY29uc29sZV92ZXJib3NlKCk7CiAJc3Bpbl9sb2NrX2lycSgmZGllX2xvY2spOworCWNvbnNvbGVfdmVyYm9zZSgpOwogCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCiAJcHJpbnRrKCIlczogJTA0bHggWyMlZF1cbiIsIHN0ciwgZXJyICYgMHhmZmZmLCArK2RpZV9jb3VudGVyKTsKLQorCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKIAlwcmludF9tb2R1bGVzKCk7CiAJc2hvd19yZWdzKHJlZ3MpOwogCkBAIC0xODAsNiArMTgxLDcgQEAKIAlidXN0X3NwaW5sb2NrcygwKTsKIAlhZGRfdGFpbnQoVEFJTlRfRElFKTsKIAlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKKwlvb3BzX2V4aXQoKTsKIAogCWlmIChrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkpCiAJCWNyYXNoX2tleGVjKHJlZ3MpOwpAQCAtMTkwLDcgKzE5Miw2IEBACiAJaWYgKHBhbmljX29uX29vcHMpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKIAotCW9vcHNfZXhpdCgpOwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCA2NGRjMWFkLi43ZjdiNTJmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC0yMjcsNyArMjI3LDcgQEAKIAogY2hvaWNlCiAJcHJvbXB0ICJIdWdlVExCIHBhZ2Ugc2l6ZSIKLQlkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRSAmJiAoQ1BVX1NINCB8fCBDUFVfU0g1KSAmJiBNTVUKKwlkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRQogCWRlZmF1bHQgSFVHRVRMQl9QQUdFX1NJWkVfMU1CIGlmIFBBR0VfU0laRV82NEtCCiAJZGVmYXVsdCBIVUdFVExCX1BBR0VfU0laRV82NEsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKaW5kZXggYTk4YzdkOC4uNTE5ZTJkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCkBAIC0yNiw3ICsyNiw3IEBACiAjZGVmaW5lIE1BWF9EQ0FDSEVfUEFHRVMJNjQJLyogWFhYOiBUdW5lIGZvciB3YXlzICovCiAjZGVmaW5lIE1BWF9JQ0FDSEVfUEFHRVMJMzIKIAotc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV80MDk2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAorc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV9vbmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBleGVjX29mZnNldCk7CiAKIC8qCkBAIC04OSw4ICs4OSw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfNDA5Nih1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHBoeXMpCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfb25lKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcGh5cykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBleGVjX29mZnNldCA9IDA7CiAKQEAgLTEwMyw4ICsxMDIsNyBAQAogCQlleGVjX29mZnNldCA9IDB4MjAwMDAwMDA7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19mbHVzaF9jYWNoZV80MDk2KHN0YXJ0IHwgU0hfQ0FDSEVfQVNTT0MsCi0JCQkgICBQMVNFR0FERFIocGh5cyksIGV4ZWNfb2Zmc2V0KTsKKwlfX2ZsdXNoX2NhY2hlX29uZShzdGFydCB8IFNIX0NBQ0hFX0FTU09DLCBQMVNFR0FERFIocGh5cyksIGV4ZWNfb2Zmc2V0KTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTEyOSw4ICsxMjcsOCBAQAogCiAJCS8qIExvb3AgYWxsIHRoZSBELWNhY2hlICovCiAJCW4gPSBib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXM7Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyssIGFkZHIgKz0gNDA5NikKLQkJCWZsdXNoX2NhY2hlXzQwOTYoYWRkciwgcGh5cyk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyssIGFkZHIgKz0gUEFHRV9TSVpFKQorCQkJZmx1c2hfY2FjaGVfb25lKGFkZHIsIHBoeXMpOwogCX0KIAogCXdtYigpOwpAQCAtMzE4LDExICszMTYsMTEgQEAKIAkvKiBXZSBvbmx5IG5lZWQgdG8gZmx1c2ggRC1jYWNoZSB3aGVuIHdlIGhhdmUgYWxpYXMgKi8KIAlpZiAoKGFkZHJlc3NecGh5cykgJiBhbGlhc19tYXNrKSB7CiAJCS8qIExvb3AgNEsgb2YgdGhlIEQtY2FjaGUgKi8KLQkJZmx1c2hfY2FjaGVfNDA5NigKKwkJZmx1c2hfY2FjaGVfb25lKAogCQkJQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IChhZGRyZXNzICYgYWxpYXNfbWFzayksCiAJCQlwaHlzKTsKIAkJLyogTG9vcCBhbm90aGVyIDRLIG9mIHRoZSBELWNhY2hlICovCi0JCWZsdXNoX2NhY2hlXzQwOTYoCisJCWZsdXNoX2NhY2hlX29uZSgKIAkJCUNBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAocGh5cyAmIGFsaWFzX21hc2spLAogCQkJcGh5cyk7CiAJfQpAQCAtMzM3LDcgKzMzNSw3IEBACiAJCSAqIGtlcm5lbCBoYXMgbmV2ZXIgZXhlY3V0ZWQgdGhlIGNvZGUgdGhyb3VnaCBpdHMgaWRlbnRpdHkKIAkJICogdHJhbnNsYXRpb24uCiAJCSAqLwotCQlmbHVzaF9jYWNoZV80MDk2KAorCQlmbHVzaF9jYWNoZV9vbmUoCiAJCQlDQUNIRV9JQ19BRERSRVNTX0FSUkFZIHwgKGFkZHJlc3MgJiBhbGlhc19tYXNrKSwKIAkJCXBoeXMpOwogCX0KQEAgLTM5Myw3ICszOTEsNyBAQAogfQogCiAvKioKLSAqIF9fZmx1c2hfY2FjaGVfNDA5NgorICogX19mbHVzaF9jYWNoZV9vbmUKICAqCiAgKiBAYWRkcjogIGFkZHJlc3MgaW4gbWVtb3J5IG1hcHBlZCBjYWNoZSBhcnJheQogICogQHBoeXM6ICBQMSBhZGRyZXNzIHRvIGZsdXNoIChoYXMgdG8gbWF0Y2ggdGFncyBpZiBhZGRyIGhhcyAnQScgYml0CkBAIC00MDYsNyArNDA0LDcgQEAKICAqIG9wZXJhdGlvbiAocHVyZ2Uvd3JpdGUtYmFjaykgaXMgc2VsZWN0ZWQgYnkgdGhlIGxvd2VyIDIgYml0cyBvZgogICogJ3BoeXMnLgogICovCi1zdGF0aWMgdm9pZCBfX2ZsdXNoX2NhY2hlXzQwOTYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2NhY2hlX29uZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV4ZWNfb2Zmc2V0KQogewogCWludCB3YXlfY291bnQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLmMgYi9hcmNoL3NoL21tL2NhY2hlLmMKaW5kZXggMzVjMzdiNy4uYTJkYzdmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJCXJldHVybjsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCWlmIChwZm5fdmFsaWQocGZuKSAmJiBwYWdlX21hcHBpbmcocGFnZSkpIHsKKwlpZiAocGZuX3ZhbGlkKHBmbikpIHsKIAkJaW50IGRpcnR5ID0gdGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKTsKIAkJaWYgKGRpcnR5KSB7CiAJCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7CkBAIC0yNjUsNiArMjY1LDggQEAKIAogdm9pZCBfX2luaXQgY3B1X2NhY2hlX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgY2FjaGVfZGlzYWJsZWQgPSAhKF9fcmF3X3JlYWRsKENDUikgJiBDQ1JfQ0FDSEVfRU5BQkxFKTsKKwogCWNvbXB1dGVfYWxpYXMoJmJvb3RfY3B1X2RhdGEuaWNhY2hlKTsKIAljb21wdXRlX2FsaWFzKCZib290X2NwdV9kYXRhLmRjYWNoZSk7CiAJY29tcHV0ZV9hbGlhcygmYm9vdF9jcHVfZGF0YS5zY2FjaGUpOwpAQCAtMjczLDYgKzI3NSwxMyBAQAogCV9fZmx1c2hfcHVyZ2VfcmVnaW9uCQk9IG5vb3BfX2ZsdXNoX3JlZ2lvbjsKIAlfX2ZsdXNoX2ludmFsaWRhdGVfcmVnaW9uCT0gbm9vcF9fZmx1c2hfcmVnaW9uOwogCisJLyoKKwkgKiBObyBmbHVzaGluZyBpcyBuZWNlc3NhcnkgaW4gdGhlIGRpc2FibGVkIGNhY2hlIGNhc2Ugc28gd2UgY2FuCisJICoganVzdCBrZWVwIHRoZSBub29wIGZ1bmN0aW9ucyBpbiBsb2NhbF9mbHVzaF8uLigpIGFuZCBfX2ZsdXNoXy4uKCkKKwkgKi8KKwlpZiAodW5saWtlbHkoY2FjaGVfZGlzYWJsZWQpKQorCQlnb3RvIHNraXA7CisKIAlpZiAoYm9vdF9jcHVfZGF0YS5mYW1pbHkgPT0gQ1BVX0ZBTUlMWV9TSDIpIHsKIAkJZXh0ZXJuIHZvaWQgX193ZWFrIHNoMl9jYWNoZV9pbml0KHZvaWQpOwogCkBAIC0zMTIsNSArMzIxLDYgQEAKIAkJc2g1X2NhY2hlX2luaXQoKTsKIAl9CiAKK3NraXA6CiAJZW1pdF9jYWNoZV9wYXJhbXMoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2xkYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGRjLmMKaW5kZXggYWRmNWYyNy4uY2IzYzcyYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbGRjLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGRjLmMKQEAgLTEyNDIsMTMgKzEyNDIsMTMgQEAKIAlzbnByaW50ZihscC0+dHhfaXJxX25hbWUsIExEQ19JUlFfTkFNRV9NQVgsICIlcyBUWCIsIG5hbWUpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEobHAtPmNmZy5yeF9pcnEsIGxkY19yeCwKLQkJCSAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9TSEFSRUQsCisJCQkgIElSUUZfU0FNUExFX1JBTkRPTSB8IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKIAkJCSAgbHAtPnJ4X2lycV9uYW1lLCBscCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWVyciA9IHJlcXVlc3RfaXJxKGxwLT5jZmcudHhfaXJxLCBsZGNfdHgsCi0JCQkgIElSUUZfU0FNUExFX1JBTkRPTSB8IElSUUZfU0hBUkVELAorCQkJICBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCiAJCQkgIGxwLT50eF9pcnFfbmFtZSwgbHApOwogCWlmIChlcnIpIHsKIAkJZnJlZV9pcnEobHAtPmNmZy5yeF9pcnEsIGxwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCAwNGRiOTI3Li5mYTU5MzZlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC00MzcsNyArNDM3LDcgQEAKIAkubG93ZXJfc2hpZnQJPSA2LAogCS5ldmVudF9tYXNrCT0gMHhmZmYsCiAJLmh2X2JpdAkJPSAweDgsCi0JLmlycV9iaXQJPSAweDAzLAorCS5pcnFfYml0CT0gMHgzMCwKIAkudXBwZXJfbm9wCT0gMHgyMjAsCiAJLmxvd2VyX25vcAk9IDB4MjIwLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKaW5kZXggYTcwYTVlMS4uMTg4NmQzNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCiAJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JaWYgKHBhZ2UgJiYgcGFnZV9tYXBwaW5nKHBhZ2UpKSB7CisJaWYgKHBhZ2UpIHsKIAkJdW5zaWduZWQgbG9uZyBwZ19mbGFnczsKIAogCQlwZ19mbGFncyA9IHBhZ2UtPmZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggYzg3NmJhYy4uNzJhY2U5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC00OTEsNyArNDkxLDcgQEAKIHNvdXJjZSAiYXJjaC94ODYveGVuL0tjb25maWciCiAKIGNvbmZpZyBWTUkKLQlib29sICJWTUkgR3Vlc3Qgc3VwcG9ydCIKKwlib29sICJWTUkgR3Vlc3Qgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJc2VsZWN0IFBBUkFWSVJUCiAJZGVwZW5kcyBvbiBYODZfMzIKIAktLS1oZWxwLS0tCkBAIC01MDAsNiArNTAwLDE1IEBACiAJICBhdCB0aGUgbW9tZW50KSwgYnkgbGlua2luZyB0aGUga2VybmVsIHRvIGEgR1BMLWVkIFJPTSBtb2R1bGUKIAkgIHByb3ZpZGVkIGJ5IHRoZSBoeXBlcnZpc29yLgogCisJICBBcyBvZiBTZXB0ZW1iZXIgMjAwOSwgVk13YXJlIGhhcyBzdGFydGVkIGEgcGhhc2VkIHJldGlyZW1lbnQKKwkgIG9mIHRoaXMgZmVhdHVyZSBmcm9tIFZNd2FyZSdzIHByb2R1Y3RzLiBQbGVhc2Ugc2VlCisJICBmZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGZvciBkZXRhaWxzLiAgSWYgeW91IGFyZQorCSAgcGxhbm5pbmcgdG8gZW5hYmxlIHRoaXMgb3B0aW9uLCBwbGVhc2Ugbm90ZSB0aGF0IHlvdSBjYW5ub3QKKwkgIGxpdmUgbWlncmF0ZSBhIFZNSSBlbmFibGVkIFZNIHRvIGEgZnV0dXJlIFZNd2FyZSBwcm9kdWN0LAorCSAgd2hpY2ggZG9lc24ndCBzdXBwb3J0IFZNSS4gU28gaWYgeW91IGV4cGVjdCB5b3VyIGtlcm5lbCB0bworCSAgc2VhbWxlc3NseSBtaWdyYXRlIHRvIG5ld2VyIFZNd2FyZSBwcm9kdWN0cywga2VlcCB0aGlzCisJICBkaXNhYmxlZC4KKwogY29uZmlnIEtWTV9DTE9DSwogCWJvb2wgIktWTSBwYXJhdmlydHVhbGl6ZWQgY2xvY2siCiAJc2VsZWN0IFBBUkFWSVJUCkBAIC0xNDM0LDEyICsxNDQzLDggQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4gT25seSBlbWJlZGRlZCBzaG91bGQgc2F5IE4gaGVyZS4KIAotY29uZmlnIENDX1NUQUNLUFJPVEVDVE9SX0FMTAotCWJvb2wKLQogY29uZmlnIENDX1NUQUNLUFJPVEVDVE9SCiAJYm9vbCAiRW5hYmxlIC1mc3RhY2stcHJvdGVjdG9yIGJ1ZmZlciBvdmVyZmxvdyBkZXRlY3Rpb24gKEVYUEVSSU1FTlRBTCkiCi0Jc2VsZWN0IENDX1NUQUNLUFJPVEVDVE9SX0FMTAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHR1cm5zIG9uIHRoZSAtZnN0YWNrLXByb3RlY3RvciBHQ0MgZmVhdHVyZS4gVGhpcwogCSAgZmVhdHVyZSBwdXRzLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGZ1bmN0aW9ucywgYSBjYW5hcnkgdmFsdWUgb24KZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuY3B1IGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKaW5kZXggZjI4MjRmYi4uMjY0OTg0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKQEAgLTQwMCw3ICs0MDAsNyBAQAogCiBjb25maWcgWDg2X0NNUFhDSEc2NAogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl9QQUUgfHwgWDg2XzY0IHx8IE1DT1JFMiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNQVRPTQorCWRlcGVuZHMgb24gIU0zODYgJiYgIU00ODYKIAogIyB0aGlzIHNob3VsZCBiZSBzZXQgZm9yIGFsbCAtbWFyY2g9Li4gb3B0aW9ucyB3aGVyZSB0aGUgY29tcGlsZXIKICMgZ2VuZXJhdGVzIGNtb3YuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZSBiL2FyY2gveDg2L01ha2VmaWxlCmluZGV4IGEwMTJlZTguLmQyZDI0YzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC03Niw3ICs3Niw2IEBACiAJY2NfaGFzX3NwIDo9ICQoc3JjdHJlZSkvc2NyaXB0cy9nY2MteDg2XyQoQklUUyktaGFzLXN0YWNrLXByb3RlY3Rvci5zaAogICAgICAgICBpZmVxICgkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKGNjX2hhc19zcCkgJChDQykgJChiaWFyY2gpKSx5KQogICAgICAgICAgICAgICAgIHN0YWNrcC15IDo9IC1mc3RhY2stcHJvdGVjdG9yCi0gICAgICAgICAgICAgICAgc3RhY2twLSQoQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SX0FMTCkgKz0gLWZzdGFjay1wcm90ZWN0b3ItYWxsCiAgICAgICAgICAgICAgICAgS0JVSUxEX0NGTEFHUyArPSAkKHN0YWNrcC15KQogICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgJCh3YXJuaW5nIHN0YWNrIHByb3RlY3RvciBlbmFibGVkIGJ1dCBubyBjb21waWxlciBzdXBwb3J0KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9zZXR1cC5sZCBiL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKaW5kZXggMGY2ZWM0NTUuLjAzYzA2ODMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKKysrIGIvYXJjaC94ODYvYm9vdC9zZXR1cC5sZApAQCAtNTMsNiArNTMsOSBAQAogCiAJL0RJU0NBUkQvIDogeyAqKC5ub3RlKikgfQogCisJLyoKKwkgKiBUaGUgQVNTRVJUKCkgc2luayB0byAuIGlzIGludGVudGlvbmFsLCBmb3IgYmludXRpbHMgMi4xNCBjb21wYXRpYmlsaXR5OgorCSAqLwogCS4gPSBBU1NFUlQoX2VuZCA8PSAweDgwMDAsICJTZXR1cCB0b28gYmlnISIpOwogCS4gPSBBU1NFUlQoaGRyID09IDB4MWYxLCAiVGhlIHNldHVwIGhlYWRlciBoYXMgdGhlIHdyb25nIG9mZnNldCEiKTsKIAkvKiBOZWNlc3NhcnkgZm9yIHRoZSB2ZXJ5LW9sZC1sb2FkZXIgY2hlY2sgdG8gd29yay4uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKaW5kZXggNTg1ZWRlYi4uNDljNTUyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCkBAIC04Miw3ICs4Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKQorCWlmICghaXJxX2ZwdV91c2FibGUoKSkKIAkJZXJyID0gY3J5cHRvX2Flc19leHBhbmRfa2V5KGN0eCwgaW5fa2V5LCBrZXlfbGVuKTsKIAllbHNlIHsKIAkJa2VybmVsX2ZwdV9iZWdpbigpOwpAQCAtMTAzLDcgKzEwMyw3IEBACiB7CiAJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOwogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpCisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKQogCQljcnlwdG9fYWVzX2VuY3J5cHRfeDg2KGN0eCwgZHN0LCBzcmMpOwogCWVsc2UgewogCQlrZXJuZWxfZnB1X2JlZ2luKCk7CkBAIC0xMTYsNyArMTE2LDcgQEAKIHsKIAlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX3RmbV9jdHgodGZtKSk7CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpCiAJCWNyeXB0b19hZXNfZGVjcnlwdF94ODYoY3R4LCBkc3QsIHNyYyk7CiAJZWxzZSB7CiAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKQEAgLTM0Miw3ICszNDIsNyBAQAogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7CiAJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOwogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpIHsKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpIHsKIAkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CiAJCQlhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CiAJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CkBAIC0zNjMsNyArMzYzLDcgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwogCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKSB7CisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKSB7CiAJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmNyeXB0ZF9yZXEgPQogCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOwogCQltZW1jcHkoY3J5cHRkX3JlcSwgcmVxLCBzaXplb2YoKnJlcSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggMTczM2Y5Zi4uNTgxYjA1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC0yMDQsNyArMjA0LDcgQEAKIAltb3ZsIFJESS1BUkdPRkZTRVQoJXJzcCksJXI4ZAkvKiByZWxvYWQgNXRoIHN5c2NhbGwgYXJnICovCiAJLmVuZG0KIAotCS5tYWNybyBhdWRpdHN5c19leGl0IGV4aXQsZWJwc2F2ZT1SQlAKKwkubWFjcm8gYXVkaXRzeXNfZXhpdCBleGl0CiAJdGVzdGwgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLFRJX2ZsYWdzKCVyMTApCiAJam56IGlhMzJfcmV0X2Zyb21fc3lzX2NhbGwKIAlUUkFDRV9JUlFTX09OCkBAIC0yMTcsNyArMjE3LDYgQEAKIAljYWxsIGF1ZGl0X3N5c2NhbGxfZXhpdAogCUdFVF9USFJFQURfSU5GTyglcjEwKQogCW1vdmwgUkFYLUFSR09GRlNFVCglcnNwKSwlZWF4CS8qIHJlbG9hZCBzeXNjYWxsIHJldHVybiB2YWx1ZSAqLwotCW1vdmwgXGVicHNhdmUtQVJHT0ZGU0VUKCVyc3ApLCVlYnAgLyogcmVsb2FkIHVzZXIgcmVnaXN0ZXIgdmFsdWUgKi8KIAltb3ZsICQoX1RJRl9BTExXT1JLX01BU0sgJiB+X1RJRl9TWVNDQUxMX0FVRElUKSwlZWRpCiAJY2xpCiAJVFJBQ0VfSVJRU19PRkYKQEAgLTM1MSw3ICszNTAsNyBAQAogCWptcCBjc3Rhcl9kaXNwYXRjaAogCiBzeXNyZXRsX2F1ZGl0OgotCWF1ZGl0c3lzX2V4aXQgc3lzcmV0bF9mcm9tX3N5c19jYWxsLCBSQ1ggLyogdXNlciAlZWJwIGluIFJDWCBzbG90ICovCisJYXVkaXRzeXNfZXhpdCBzeXNyZXRsX2Zyb21fc3lzX2NhbGwKICNlbmRpZgogCiBjc3Rhcl90cmFjZXN5czoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCmluZGV4IDhhZWJjYzQuLmVmYjM4OTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtODQwLDQyICs4NDAsMjIgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3Modm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGY7Ci0KLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCi0JCSAgICAgOiAiPWEiKGYpCi0JCSAgICAgOiBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMuc2F2ZV9mbCksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwotCXJldHVybiBmOworCXJldHVybiBQVk9QX0NBTExFRTAodW5zaWduZWQgbG9uZywgcHZfaXJxX29wcy5zYXZlX2ZsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nIGYpCiB7Ci0JYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQotCQkgICAgIDogIj1hIihmKQotCQkgICAgIDogUFZfRkxBR1NfQVJHKGYpLAotCQkgICAgICAgcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnJlc3RvcmVfZmwpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKKwlQVk9QX1ZDQUxMRUUxKHB2X2lycV9vcHMucmVzdG9yZV9mbCwgZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkKIHsKLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCi0JCSAgICAgOgotCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLmlycV9kaXNhYmxlKSwKLQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCi0JCSAgICAgOiAibWVtb3J5IiwgImVheCIsICJjYyIpOworCVBWT1BfVkNBTExFRTAocHZfaXJxX29wcy5pcnFfZGlzYWJsZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkKLQkJICAgICA6Ci0JCSAgICAgOiBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMuaXJxX2VuYWJsZSksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJlYXgiLCAiY2MiKTsKKwlQVk9QX1ZDQUxMRUUwKHB2X2lycV9vcHMuaXJxX2VuYWJsZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9pcnFfc2F2ZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKaW5kZXggZGQwZjViMy4uOTM1NzQ3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCkBAIC00OTQsMTAgKzQ5NCwxMSBAQAogI2RlZmluZSBFWFRSQV9DTE9CQkVSUwogI2RlZmluZSBWRVhUUkFfQ0xPQkJFUlMKICNlbHNlICAvKiBDT05GSUdfWDg2XzY0ICovCisvKiBbcmVdYXggaXNuJ3QgYW4gYXJnLCBidXQgdGhlIHJldHVybiB2YWwgKi8KICNkZWZpbmUgUFZPUF9WQ0FMTF9BUkdTCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBfX2VkaSA9IF9fZWRpLCBfX2VzaSA9IF9fZXNpLAlcCi0JCV9fZWR4ID0gX19lZHgsIF9fZWN4ID0gX19lY3gKLSNkZWZpbmUgUFZPUF9DQUxMX0FSR1MJCVBWT1BfVkNBTExfQVJHUywgX19lYXgKKwkJX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeCwgX19lYXggPSBfX2VheAorI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJUFZPUF9WQ0FMTF9BUkdTCiAKICNkZWZpbmUgUFZPUF9DQUxMX0FSRzEoeCkJCSJEIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQogI2RlZmluZSBQVk9QX0NBTExfQVJHMih4KQkJIlMiICgodW5zaWduZWQgbG9uZykoeCkpCkBAIC01MDksNiArNTEwLDcgQEAKIAkJCQkiPWMiIChfX2VjeCkKICNkZWZpbmUgUFZPUF9DQUxMX0NMT0JCRVJTCVBWT1BfVkNBTExfQ0xPQkJFUlMsICI9YSIgKF9fZWF4KQogCisvKiB2b2lkIGZ1bmN0aW9ucyBhcmUgc3RpbGwgYWxsb3dlZCBbcmVdYXggZm9yIHNjcmF0Y2ggKi8KICNkZWZpbmUgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCSI9YSIgKF9fZWF4KQogI2RlZmluZSBQVk9QX0NBTExFRV9DTE9CQkVSUwlQVk9QX1ZDQUxMRUVfQ0xPQkJFUlMKIApAQCAtNTgzLDggKzU4NSw4IEBACiAJCSAgICAgICBWRVhUUkFfQ0xPQkJFUlMsCQkJCQlcCiAJCSAgICAgICBwcmUsIHBvc3QsICMjX19WQV9BUkdTX18pCiAKLSNkZWZpbmUgX19QVk9QX1ZDQUxMRUVTQVZFKHJldHR5cGUsIG9wLCBwcmUsIHBvc3QsIC4uLikJCQlcCi0JX19fX1BWT1BfQ0FMTChyZXR0eXBlLCBvcC5mdW5jLCBDTEJSX1JFVF9SRUcsCQkJXAorI2RlZmluZSBfX1BWT1BfVkNBTExFRVNBVkUob3AsIHByZSwgcG9zdCwgLi4uKQkJCQlcCisJX19fX1BWT1BfVkNBTEwob3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCQlcCiAJCSAgICAgIFBWT1BfVkNBTExFRV9DTE9CQkVSUywgLAkJCQlcCiAJCSAgICAgIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggMjVhOTI4NC4uZDgyM2MyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC0xNDMsNiArMTQzLDcgQEAKIAkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAogCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCiAJCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAorCQkJCXwgMSpTRF9QUkVGRVJfTE9DQUwJCQlcCiAJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAogCQkJCXwgMCpTRF9QT1dFUlNBVklOR1NfQkFMQU5DRQkJXAogCQkJCXwgMCpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCmluZGV4IDA0ZWI2YzkuLmQxNDE0YWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS91di91dl9tbXJzLmg+CisjaW5jbHVkZSA8YXNtL2lycV92ZWN0b3JzLmg+CisjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KIAogCiAvKgpAQCAtMTE0LDcgKzExNiw3IEBACiAvKgogICogVGhlIGxhcmdlc3QgcG9zc2libGUgTkFTSUQgb2YgYSBDIG9yIE0gYnJpY2sgKCsgMikKICAqLwotI2RlZmluZSBVVl9NQVhfTkFTSURfVkFMVUUJKFVWX01BWF9OVU1BTElOS19OT0RFUyAqIDIpCisjZGVmaW5lIFVWX01BWF9OQVNJRF9WQUxVRQkoVVZfTUFYX05VTUFMSU5LX0JMQURFUyAqIDIpCiAKIHN0cnVjdCB1dl9zY2lyX3MgewogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwpAQCAtMjMwLDYgKzIzMiwyMCBAQAogCXJldHVybiB1dl9zb2NfcGh5c19yYW1fdG9fZ3BhKF9fcGEodikpOwogfQogCisvKiBnbm9kZSAtPiBwbm9kZSAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X2dwYV90b19nbm9kZSh1bnNpZ25lZCBsb25nIGdwYSkKK3sKKwlyZXR1cm4gZ3BhID4+IHV2X2h1Yl9pbmZvLT5tX3ZhbDsKK30KKworLyogZ3BhIC0+IHBub2RlICovCitzdGF0aWMgaW5saW5lIGludCB1dl9ncGFfdG9fcG5vZGUodW5zaWduZWQgbG9uZyBncGEpCit7CisJdW5zaWduZWQgbG9uZyBuX21hc2sgPSAoMVVMIDw8IHV2X2h1Yl9pbmZvLT5uX3ZhbCkgLSAxOworCisJcmV0dXJuIHV2X2dwYV90b19nbm9kZShncGEpICYgbl9tYXNrOworfQorCiAvKiBwbm9kZSwgb2Zmc2V0IC0tPiBzb2NrZXQgdmlydHVhbCAqLwogc3RhdGljIGlubGluZSB2b2lkICp1dl9wbm9kZV9vZmZzZXRfdG9fdmFkZHIoaW50IHBub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKQEAgLTQyMSw5ICs0MzcsMTQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1dl9odWJfc2VuZF9pcGkoaW50IHBub2RlLCBpbnQgYXBpY2lkLCBpbnQgdmVjdG9yKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgZG1vZGUgPSBkZXN0X0ZpeGVkOworCisJaWYgKHZlY3RvciA9PSBOTUlfVkVDVE9SKQorCQlkbW9kZSA9IGRlc3RfTk1JOwogCiAJdmFsID0gKDFVTCA8PCBVVkhfSVBJX0lOVF9TRU5EX1NIRlQpIHwKIAkJCSgoYXBpY2lkKSA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKKwkJCShkbW9kZSA8PCBVVkhfSVBJX0lOVF9ERUxJVkVSWV9NT0RFX1NIRlQpIHwKIAkJCSh2ZWN0b3IgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpOwogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAubGRzLlMKaW5kZXggN2RhMDBiNy4uMDYwZmZmOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5sZHMuUwpAQCAtNTcsNSArNTcsOCBAQAogCQkqKC5ub3RlKikKIAl9CiAKKwkvKgorCSAqIFRoZSBBU1NFUlQoKSBzaW5rIHRvIC4gaXMgaW50ZW50aW9uYWwsIGZvciBiaW51dGlscyAyLjE0IGNvbXBhdGliaWxpdHk6CisJICovCiAJLiA9IEFTU0VSVChfZW5kIDw9IFdBS0VVUF9TSVpFLCAiV2FrZXVwIHRvbyBiaWchIik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwppbmRleCBmNWY1ODg2Li4zMjZjMjU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKQEAgLTM1MiwxNCArMzUyLDE0IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWRpcl9hZGRycyk7IGkrKykgewogCQlhbGlhcy52ID0gdXZfcmVhZF9sb2NhbF9tbXIocmVkaXJfYWRkcnNbaV0uYWxpYXMpOwotCQlpZiAoYWxpYXMucy5iYXNlID09IDApIHsKKwkJaWYgKGFsaWFzLnMuZW5hYmxlICYmIGFsaWFzLnMuYmFzZSA9PSAwKSB7CiAJCQkqc2l6ZSA9ICgxVUwgPDwgYWxpYXMucy5tX2FsaWFzKTsKIAkJCXJlZGlyZWN0LnYgPSB1dl9yZWFkX2xvY2FsX21tcihyZWRpcl9hZGRyc1tpXS5yZWRpcmVjdCk7CiAJCQkqYmFzZSA9ICh1bnNpZ25lZCBsb25nKXJlZGlyZWN0LnMuZGVzdF9iYXNlIDw8IERFU1RfU0hJRlQ7CiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JQlVHKCk7CisJKmJhc2UgPSAqc2l6ZSA9IDA7CiB9CiAKIGVudW0gbWFwX3R5cGUge21hcF93YiwgbWFwX3VjfTsKQEAgLTYxOSwxMiArNjE5LDEyIEBACiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5sb3dtZW1fcmVtYXBfYmFzZSA9IGxvd21lbV9yZWRpcl9iYXNlOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bG93bWVtX3JlbWFwX3RvcCA9IGxvd21lbV9yZWRpcl9zaXplOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bV92YWwgPSBtX3ZhbDsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm5fdmFsID0gbV92YWw7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5uX3ZhbCA9IG5fdmFsOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bnVtYV9ibGFkZV9pZCA9IGJsYWRlOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+YmxhZGVfcHJvY2Vzc29yX2lkID0gbGNwdTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlID0gcG5vZGU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5wbm9kZV9tYXNrID0gcG5vZGVfbWFzazsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdwYV9tYXNrID0gKDEgPDwgKG1fdmFsICsgbl92YWwpKSAtIDE7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ncGFfbWFzayA9ICgxVUwgPDwgKG1fdmFsICsgbl92YWwpKSAtIDE7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbm9kZV91cHBlciA9IGdub2RlX3VwcGVyOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z25vZGVfZXh0cmEgPSBnbm9kZV9leHRyYTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdsb2JhbF9tbXJfYmFzZSA9IG1tcl9iYXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwppbmRleCBiMTU5OGE5Li43MjFhNzdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwpAQCAtMTIxNCw3ICsxMjE0LDggQEAKIAlyZG1zcmwoTVNSX0lBMzJfTUNHX0NBUCwgY2FwKTsKIAogCWIgPSBjYXAgJiBNQ0dfQkFOS0NOVF9NQVNLOwotCXByaW50ayhLRVJOX0lORk8gIm1jZTogQ1BVIHN1cHBvcnRzICVkIE1DRSBiYW5rc1xuIiwgYik7CisJaWYgKCFiYW5rcykKKwkJcHJpbnRrKEtFUk5fSU5GTyAibWNlOiBDUFUgc3VwcG9ydHMgJWQgTUNFIGJhbmtzXG4iLCBiKTsKIAogCWlmIChiID4gTUFYX05SX0JBTktTKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCmluZGV4IGY3Y2RiM2IuLmNkOTdjZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYwpAQCAtMTYsNiArMTYsMjIgQEAKIC8qIFN0b3JlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGYgaGVhZGVyIG9mIGNyYXNoIGltYWdlLiAqLwogdW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19jcmFzaGVkX3Bmbl92YWxpZCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKyNpZm5kZWYgQ09ORklHX1g4Nl9QQUUKKwkvKgorCSAqIG5vbi1QQUUga2R1bXAga2VybmVsIGV4ZWN1dGVkIGZyb20gYSBQQUUgb25lIHdpbGwgY3JvcCBoaWdoIHB0ZQorCSAqIGJpdHMgYW5kIHBva2UgdW53YW50ZWQgc3BhY2UgY291bnRpbmcgYWdhaW4gZnJvbSBhZGRyZXNzIDAsIHdlCisJICogZG9uJ3Qgd2FudCB0aGF0LiBwdGUgbXVzdCBmaXQgaW50byB1bnNpZ25lZCBsb25nLiBJbiBmYWN0IHRoZQorCSAqIHRlc3QgY2hlY2tzIGhpZ2ggMTIgYml0cyBmb3IgYmVpbmcgemVybyAocGZuIHdpbGwgYmUgc2hpZnRlZCBsZWZ0CisJICogYnkgUEFHRV9TSElGVCkuCisJICovCisJcmV0dXJuIHB0ZV9wZm4ocGZuX3B0ZShwZm4sIF9fcGdwcm90KDApKSkgPT0gcGZuOworI2Vsc2UKKwlyZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCiAvKioKICAqIGNvcHlfb2xkbWVtX3BhZ2UgLSBjb3B5IG9uZSBwYWdlIGZyb20gIm9sZG1lbSIKICAqIEBwZm46IHBhZ2UgZnJhbWUgbnVtYmVyIHRvIGJlIGNvcGllZApAQCAtNDEsNiArNTcsOSBAQAogCWlmICghY3NpemUpCiAJCXJldHVybiAwOwogCisJaWYgKCFpc19jcmFzaGVkX3Bmbl92YWxpZChwZm4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCXZhZGRyID0ga21hcF9hdG9taWNfcGZuKHBmbiwgS01fUFRFMCk7CiAKIAlpZiAoIXVzZXJidWYpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwppbmRleCBhZDViZDk4Li5jZGNmYjEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCkBAIC00NTQsOCArNDU0LDEwIEBACiAJaWYgKGFkZF9lZmlfbWVtbWFwKQogCQlkb19hZGRfZWZpX21lbW1hcCgpOwogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCXg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0gZWZpX2dldF90aW1lOwogCXg4Nl9wbGF0Zm9ybS5zZXRfd2FsbGNsb2NrID0gZWZpX3NldF9ydGNfbW1zczsKKyNlbmRpZgogCiAJLyogU2V0dXAgZm9yIEVGSSBydW50aW1lIHNlcnZpY2UgKi8KIAlyZWJvb3RfdHlwZSA9IEJPT1RfRUZJOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycS5jIGIvYXJjaC94ODYva2VybmVsL2lycS5jCmluZGV4IDM5MTIwNjEuLjA0YmJkNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKQEAgLTYzLDEwICs2MywxMCBAQAogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9zcHVyaW91c19jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKLQlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJDTlQiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJQTUkiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3BlcmZfaXJxcyk7Ci0Jc2VxX3ByaW50ZihwLCAiICBQZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdHNcbiIpOworCXNlcV9wcmludGYocCwgIiAgUGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpbnRlcnJ1cHRzXG4iKTsKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJQTkQiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3BlbmRpbmdfaXJxcyk7CkBAIC0yNDQsNyArMjQ0LDYgQEAKIAkJCQlfX2Z1bmNfXywgc21wX3Byb2Nlc3Nvcl9pZCgpLCB2ZWN0b3IsIGlycSk7CiAJfQogCi0JcnVuX2xvY2FsX3RpbWVycygpOwogCWlycV9leGl0KCk7CiAKIAlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwpAQCAtMjY5LDcgKzI2OCw2IEBACiAJaWYgKGdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbikKIAkJZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKCk7CiAKLQlydW5fbG9jYWxfdGltZXJzKCk7CiAJaXJxX2V4aXQoKTsKIAogCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwppbmRleCBkMjAwMDliLi5iMmE3MWRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCWFtZF9pb21tdV9zaHV0ZG93bigpOwogfQogLyogTXVzdCBleGVjdXRlIGFmdGVyIFBDSSBzdWJzeXN0ZW0gKi8KLWZzX2luaXRjYWxsKHBjaV9pb21tdV9pbml0KTsKK3Jvb3Rmc19pbml0Y2FsbChwY2lfaW9tbXVfaW5pdCk7CiAKICNpZmRlZiBDT05GSUdfUENJCiAvKiBNYW55IFZJQSBicmlkZ2VzIHNlZW0gdG8gY29ycnVwdCBkYXRhIGZvciBEQUMuIERpc2FibGUgaXQgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcC5jIGIvYXJjaC94ODYva2VybmVsL3NtcC5jCmluZGV4IGQ5MTVkOTUuLmVjMWRlOTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wLmMKQEAgLTE5OCw3ICsxOTgsNiBAQAogewogCWFja19BUElDX2lycSgpOwogCWluY19pcnFfc3RhdChpcnFfcmVzY2hlZF9jb3VudCk7Ci0JcnVuX2xvY2FsX3RpbWVycygpOwogCS8qCiAJICogS1ZNIHVzZXMgdGhpcyBpbnRlcnJ1cHQgdG8gZm9yY2UgYSBjcHUgb3V0IG9mIGd1ZXN0IG1vZGUKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCmluZGV4IGRjYjAwZDIuLmJlMjU3MzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RpbWUuYwpAQCAtMzgsNyArMzgsOCBAQAogI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCiAJCXJldHVybiAqKHVuc2lnbmVkIGxvbmcgKikocmVncy0+YnAgKyBzaXplb2YobG9uZykpOwogI2Vsc2UKLQkJdW5zaWduZWQgbG9uZyAqc3AgPSAodW5zaWduZWQgbG9uZyAqKXJlZ3MtPnNwOworCQl1bnNpZ25lZCBsb25nICpzcCA9CisJCQkodW5zaWduZWQgbG9uZyAqKWtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOwogCQkvKgogCQkgKiBSZXR1cm4gYWRkcmVzcyBpcyBlaXRoZXIgZGlyZWN0bHkgYXQgc3RhY2sgcG9pbnRlcgogCQkgKiBvciBhYm92ZSBhIHNhdmVkIGZsYWdzLiBFZmxhZ3MgaGFzIGJpdHMgMjItMzEgemVybywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwppbmRleCA1MDNjMWYyLi4xNzQwYzg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCkBAIC0yMyw4ICsyMyw2IEBACiBzdGF0aWMgc3RydWN0IGJhdV9jb250cm9sCSoqdXZfYmF1X3RhYmxlX2Jhc2VzIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgaW50CQkJdXZfYmF1X3JldHJ5X2xpbWl0IF9fcmVhZF9tb3N0bHk7CiAKLS8qIHBvc2l0aW9uIG9mIHBub2RlICh3aGljaCBpcyBuYXNpZD4+MSk6ICovCi1zdGF0aWMgaW50CQkJdXZfbnNoaWZ0IF9fcmVhZF9tb3N0bHk7CiAvKiBiYXNlIHBub2RlIGluIHRoaXMgcGFydGl0aW9uICovCiBzdGF0aWMgaW50CQkJdXZfcGFydGl0aW9uX2Jhc2VfcG5vZGUgX19yZWFkX21vc3RseTsKIApAQCAtNzIzLDcgKzcyMSw3IEBACiAJQlVHX09OKCFhZHApOwogCiAJcGEgPSB1dl9ncGEoYWRwKTsgLyogbmVlZCB0aGUgcmVhbCBuYXNpZCovCi0JbiA9IHBhID4+IHV2X25zaGlmdDsKKwluID0gdXZfZ3BhX3RvX3Bub2RlKHBhKTsKIAltID0gcGEgJiB1dl9tbWFzazsKIAogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0xCX0JBVV9TQl9ERVNDUklQVE9SX0JBU0UsCkBAIC03NzgsNyArNzc2LDcgQEAKIAkgKiBuZWVkIHRoZSBwbm9kZSBvZiB3aGVyZSB0aGUgbWVtb3J5IHdhcyByZWFsbHkgYWxsb2NhdGVkCiAJICovCiAJcGEgPSB1dl9ncGEocHFwKTsKLQlwbiA9IHBhID4+IHV2X25zaGlmdDsKKwlwbiA9IHV2X2dwYV90b19wbm9kZShwYSk7CiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLAogCQkJICAgICAgVVZIX0xCX0JBVV9JTlREX1BBWUxPQURfUVVFVUVfRklSU1QsCiAJCQkgICAgICAoKHVuc2lnbmVkIGxvbmcpcG4gPDwgVVZfUEFZTE9BRFFfUE5PREVfU0hJRlQpIHwKQEAgLTg0Myw4ICs4NDEsNyBAQAogCQkJCSAgICAgICBHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShjdXJfY3B1KSk7CiAKIAl1dl9iYXVfcmV0cnlfbGltaXQgPSAxOwotCXV2X25zaGlmdCA9IHV2X2h1Yl9pbmZvLT5uX3ZhbDsKLQl1dl9tbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm5fdmFsKSAtIDE7CisJdXZfbW1hc2sgPSAoMVVMIDw8IHV2X2h1Yl9pbmZvLT5tX3ZhbCkgLSAxOwogCW5ibGFkZXMgPSB1dl9udW1fcG9zc2libGVfYmxhZGVzKCk7CiAKIAl1dl9iYXVfdGFibGVfYmFzZXMgPSAoc3RydWN0IGJhdV9jb250cm9sICoqKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMKaW5kZXggNjk5ZjdlZS4uY2QwMjIxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jCkBAIC0zLDggKzMsMTYgQEAKICNpbmNsdWRlIDxhc20vdHJhbXBvbGluZS5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmIGRlZmluZWQoQ09ORklHX0FDUElfU0xFRVApCisjZGVmaW5lIF9fdHJhbXBpbml0CisjZGVmaW5lIF9fdHJhbXBpbml0ZGF0YQorI2Vsc2UKKyNkZWZpbmUgX190cmFtcGluaXQgX19jcHVpbml0CisjZGVmaW5lIF9fdHJhbXBpbml0ZGF0YSBfX2NwdWluaXRkYXRhCisjZW5kaWYKKwogLyogcmVhZHkgZm9yIHg4Nl82NCBhbmQgeDg2ICovCi11bnNpZ25lZCBjaGFyICpfX2NwdWluaXRkYXRhIHRyYW1wb2xpbmVfYmFzZSA9IF9fdmEoVFJBTVBPTElORV9CQVNFKTsKK3Vuc2lnbmVkIGNoYXIgKl9fdHJhbXBpbml0ZGF0YSB0cmFtcG9saW5lX2Jhc2UgPSBfX3ZhKFRSQU1QT0xJTkVfQkFTRSk7CiAKIHZvaWQgX19pbml0IHJlc2VydmVfdHJhbXBvbGluZV9tZW1vcnkodm9pZCkKIHsKQEAgLTI2LDcgKzM0LDcgQEAKICAqIGJvb3RzdHJhcCBpbnRvIHRoZSBwYWdlIGNvbmNlcm5lZC4gVGhlIGNhbGxlcgogICogaGFzIG1hZGUgc3VyZSBpdCdzIHN1aXRhYmx5IGFsaWduZWQuCiAgKi8KLXVuc2lnbmVkIGxvbmcgX19jcHVpbml0IHNldHVwX3RyYW1wb2xpbmUodm9pZCkKK3Vuc2lnbmVkIGxvbmcgX190cmFtcGluaXQgc2V0dXBfdHJhbXBvbGluZSh2b2lkKQogewogCW1lbWNweSh0cmFtcG9saW5lX2Jhc2UsIHRyYW1wb2xpbmVfZGF0YSwgVFJBTVBPTElORV9TSVpFKTsKIAlyZXR1cm4gdmlydF90b19waHlzKHRyYW1wb2xpbmVfYmFzZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUwppbmRleCA1OTZkNTRjLi4zYWYyZGZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKQEAgLTMyLDggKzMyLDEyIEBACiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAKKyNpZmRlZiBDT05GSUdfQUNQSV9TTEVFUAorLnNlY3Rpb24gLnJvZGF0YSwgImEiLCBAcHJvZ2JpdHMKKyNlbHNlCiAvKiBXZSBjYW4gZnJlZSB1cCB0aGUgdHJhbXBvbGluZSBhZnRlciBib290dXAgaWYgY3B1IGhvdHBsdWcgaXMgbm90IHN1cHBvcnRlZC4gKi8KIF9fQ1BVSU5JVFJPREFUQQorI2VuZGlmCiAuY29kZTE2CiAKIEVOVFJZKHRyYW1wb2xpbmVfZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwppbmRleCAzMWU2ZjZjLi5kNDMwZTRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIAogCXB2X2luZm8ucGFyYXZpcnRfZW5hYmxlZCA9IDE7CiAJcHZfaW5mby5rZXJuZWxfcnBsID0ga2VybmVsX2NzICYgU0VHTUVOVF9SUExfTUFTSzsKLQlwdl9pbmZvLm5hbWUgPSAidm1pIjsKKwlwdl9pbmZvLm5hbWUgPSAidm1pIFtkZXByZWNhdGVkXSI7CiAKIAlwdl9pbml0X29wcy5wYXRjaCA9IHZtaV9wYXRjaDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA5MjkyOWZiLi4zYzY4ZmUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMzA1LDYgKzMwNSw5IEBACiAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKKy8qCisgKiBUaGUgQVNTRVJUKCkgc2luayB0byAuIGlzIGludGVudGlvbmFsLCBmb3IgYmludXRpbHMgMi4xNCBjb21wYXRpYmlsaXR5OgorICovCiAuID0gQVNTRVJUKChfZW5kIC0gTE9BRF9PRkZTRVQgPD0gS0VSTkVMX0lNQUdFX1NJWkUpLAogCSAgICJrZXJuZWwgaW1hZ2UgYmlnZ2VyIHRoYW4gS0VSTkVMX0lNQUdFX1NJWkUiKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCmluZGV4IDgyYWQ1MjMuLjE0NGU3ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkgKiBpdHNlbGYgd2l0aCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgY29udGludWVzIGNvdW50aW5nCiAJICogZnJvbSB0aGVyZS4KIAkgKi8KLQlyZW1haW5pbmcgPSBocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZwcy0+cGl0X3RpbWVyLnRpbWVyKTsKKwlyZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJnBzLT5waXRfdGltZXIudGltZXIpOwogCWVsYXBzZWQgPSBwcy0+cGl0X3RpbWVyLnBlcmlvZCAtIGt0aW1lX3RvX25zKHJlbWFpbmluZyk7CiAJZWxhcHNlZCA9IG1vZF82NChlbGFwc2VkLCBwcy0+cGl0X3RpbWVyLnBlcmlvZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggNzAyNDIyNC4uMjNjMjE3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTUyMSw3ICs1MjEsNyBAQAogCWlmIChhcGljX2dldF9yZWcoYXBpYywgQVBJQ19UTUlDVCkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlyZW1haW5pbmcgPSBocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CisJcmVtYWluaW5nID0gaHJ0aW1lcl9nZXRfcmVtYWluaW5nKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CiAJaWYgKGt0aW1lX3RvX25zKHJlbWFpbmluZykgPCAwKQogCQlyZW1haW5pbmcgPSBrdGltZV9zZXQoMCwgMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCA2ODVhNGZmLi44MThiOTJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC03NDgsNyArNzQ4LDggQEAKIAlyZXR1cm4gd3JpdGVfcHJvdGVjdGVkOwogfQogCi1zdGF0aWMgaW50IGt2bV91bm1hcF9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLCB1NjQgZGF0YSkKK3N0YXRpYyBpbnQga3ZtX3VubWFwX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCisJCQkgICB1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJdTY0ICpzcHRlOwogCWludCBuZWVkX3RsYl9mbHVzaCA9IDA7CkBAIC03NjMsNyArNzY0LDggQEAKIAlyZXR1cm4gbmVlZF90bGJfZmx1c2g7CiB9CiAKLXN0YXRpYyBpbnQga3ZtX3NldF9wdGVfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwgdTY0IGRhdGEpCitzdGF0aWMgaW50IGt2bV9zZXRfcHRlX3JtYXBwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlpbnQgbmVlZF9mbHVzaCA9IDA7CiAJdTY0ICpzcHRlLCBuZXdfc3B0ZTsKQEAgLTc5OSw5ICs4MDEsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrdm1faGFuZGxlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhLCB1NjQgZGF0YSwKK3N0YXRpYyBpbnQga3ZtX2hhbmRsZV9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSwKKwkJCSAgdW5zaWduZWQgbG9uZyBkYXRhLAogCQkJICBpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLAotCQkJCQkgdTY0IGRhdGEpKQorCQkJCQkgdW5zaWduZWQgbG9uZyBkYXRhKSkKIHsKIAlpbnQgaSwgajsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTg0NiwxMCArODQ5LDExIEBACiAKIHZvaWQga3ZtX3NldF9zcHRlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhLCBwdGVfdCBwdGUpCiB7Ci0Ja3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsICh1NjQpJnB0ZSwga3ZtX3NldF9wdGVfcm1hcHApOworCWt2bV9oYW5kbGVfaHZhKGt2bSwgaHZhLCAodW5zaWduZWQgbG9uZykmcHRlLCBrdm1fc2V0X3B0ZV9ybWFwcCk7CiB9CiAKLXN0YXRpYyBpbnQga3ZtX2FnZV9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLCB1NjQgZGF0YSkKK3N0YXRpYyBpbnQga3ZtX2FnZV9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwLAorCQkJIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl1NjQgKnNwdGU7CiAJaW50IHlvdW5nID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCAzNDM5NjE2Li4yM2E0ZDgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC0xMDc1LDYgKzEwNzUsOCBAQAogCSAqIFNldCB1cCBzb21lIHBhZ2V0YWJsZSBzdGF0ZSBiZWZvcmUgc3RhcnRpbmcgdG8gc2V0IGFueSBwdGVzLgogCSAqLwogCisJeGVuX2luaXRfbW11X29wcygpOworCiAJLyogUHJldmVudCB1bndhbnRlZCBiaXRzIGZyb20gYmVpbmcgc2V0IGluIFBURXMuICovCiAJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfl9QQUdFX0dMT0JBTDsKIAlpZiAoIXhlbl9pbml0aWFsX2RvbWFpbigpKQpAQCAtMTA5OSw3ICsxMTAxLDYgQEAKIAkgKi8KIAl4ZW5fc2V0dXBfc3RhY2twcm90ZWN0b3IoKTsKIAotCXhlbl9pbml0X21tdV9vcHMoKTsKIAl4ZW5faW5pdF9pcnFfb3BzKCk7CiAJeGVuX2luaXRfY3B1aWRfbWFzaygpOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCA4MWYzNDMxLi43MWRhNTExIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAkJcGFydF9zdGF0X2luYyhjcHUsIHBhcnQsIG1lcmdlc1tyd10pOwogCWVsc2UgewogCQlwYXJ0X3JvdW5kX3N0YXRzKGNwdSwgcGFydCk7Ci0JCXBhcnRfaW5jX2luX2ZsaWdodChwYXJ0KTsKKwkJcGFydF9pbmNfaW5fZmxpZ2h0KHBhcnQsIHJ3KTsKIAl9CiAKIAlwYXJ0X3N0YXRfdW5sb2NrKCk7CkBAIC0xMDMwLDkgKzEwMzAsOSBAQAogCWlmIChub3cgPT0gcGFydC0+c3RhbXApCiAJCXJldHVybjsKIAotCWlmIChwYXJ0LT5pbl9mbGlnaHQpIHsKKwlpZiAocGFydF9pbl9mbGlnaHQocGFydCkpIHsKIAkJX19wYXJ0X3N0YXRfYWRkKGNwdSwgcGFydCwgdGltZV9pbl9xdWV1ZSwKLQkJCQlwYXJ0LT5pbl9mbGlnaHQgKiAobm93IC0gcGFydC0+c3RhbXApKTsKKwkJCQlwYXJ0X2luX2ZsaWdodChwYXJ0KSAqIChub3cgLSBwYXJ0LT5zdGFtcCkpOwogCQlfX3BhcnRfc3RhdF9hZGQoY3B1LCBwYXJ0LCBpb190aWNrcywgKG5vdyAtIHBhcnQtPnN0YW1wKSk7CiAJfQogCXBhcnQtPnN0YW1wID0gbm93OwpAQCAtMTE2MSw3ICsxMTYxLDcgQEAKIAljb25zdCB1bnNpZ25lZCBpbnQgZmYgPSBiaW8tPmJpX3J3ICYgUkVRX0ZBSUxGQVNUX01BU0s7CiAJaW50IHJ3X2ZsYWdzOwogCi0JaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpICYmIGJpb19oYXNfZGF0YShiaW8pICYmCisJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpICYmCiAJICAgIChxLT5uZXh0X29yZGVyZWQgPT0gUVVFVUVfT1JERVJFRF9OT05FKSkgewogCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CiAJCXJldHVybiAwOwpAQCAtMTczOSw3ICsxNzM5LDcgQEAKIAkJcGFydF9zdGF0X2luYyhjcHUsIHBhcnQsIGlvc1tyd10pOwogCQlwYXJ0X3N0YXRfYWRkKGNwdSwgcGFydCwgdGlja3NbcnddLCBkdXJhdGlvbik7CiAJCXBhcnRfcm91bmRfc3RhdHMoY3B1LCBwYXJ0KTsKLQkJcGFydF9kZWNfaW5fZmxpZ2h0KHBhcnQpOworCQlwYXJ0X2RlY19pbl9mbGlnaHQocGFydCwgcncpOwogCiAJCXBhcnRfc3RhdF91bmxvY2soKTsKIAl9CkBAIC0yNDkyLDE0ICsyNDkyLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woa2Jsb2NrZF9zY2hlZHVsZV93b3JrKTsKIAotaW50IGtibG9ja2Rfc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJCSAgc3RydWN0IGRlbGF5ZWRfd29yayAqd29yaywKLQkJCQkgIHVuc2lnbmVkIGxvbmcgZGVsYXkpCi17Ci0JcmV0dXJuIHF1ZXVlX2RlbGF5ZWRfd29yayhrYmxvY2tkX3dvcmtxdWV1ZSwgd29yaywgZGVsYXkpOwotfQotRVhQT1JUX1NZTUJPTChrYmxvY2tkX3NjaGVkdWxlX2RlbGF5ZWRfd29yayk7Ci0KIGludCBfX2luaXQgYmxrX2Rldl9pbml0KHZvaWQpCiB7CiAJQlVJTERfQlVHX09OKF9fUkVRX05SX0JJVFMgPiA4ICoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tZXJnZS5jIGIvYmxvY2svYmxrLW1lcmdlLmMKaW5kZXggYjBkZTg1Ny4uOTljYjVjZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1lcmdlLmMKKysrIGIvYmxvY2svYmxrLW1lcmdlLmMKQEAgLTM1MSw3ICszNTEsNyBAQAogCQlwYXJ0ID0gZGlza19tYXBfc2VjdG9yX3JjdShyZXEtPnJxX2Rpc2ssIGJsa19ycV9wb3MocmVxKSk7CiAKIAkJcGFydF9yb3VuZF9zdGF0cyhjcHUsIHBhcnQpOwotCQlwYXJ0X2RlY19pbl9mbGlnaHQocGFydCk7CisJCXBhcnRfZGVjX2luX2ZsaWdodChwYXJ0LCBycV9kYXRhX2RpcihyZXEpKTsKIAogCQlwYXJ0X3N0YXRfdW5sb2NrKCk7CiAJfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXNldHRpbmdzLmMgYi9ibG9jay9ibGstc2V0dGluZ3MuYwppbmRleCBlMDY5NWJjLi42NmQ0YWE4IDEwMDY0NAotLS0gYS9ibG9jay9ibGstc2V0dGluZ3MuYworKysgYi9ibG9jay9ibGstc2V0dGluZ3MuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAvKioKICAqIGJsa19xdWV1ZV9tYXhfZGlzY2FyZF9zZWN0b3JzIC0gc2V0IG1heCBzZWN0b3JzIGZvciBhIHNpbmdsZSBkaXNjYXJkCiAgKiBAcTogIHRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCi0gKiBAbWF4X2Rpc2NhcmQ6IG1heGltdW0gbnVtYmVyIG9mIHNlY3RvcnMgdG8gZGlzY2FyZAorICogQG1heF9kaXNjYXJkX3NlY3RvcnM6IG1heGltdW0gbnVtYmVyIG9mIHNlY3RvcnMgdG8gZGlzY2FyZAogICoqLwogdm9pZCBibGtfcXVldWVfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAkJdW5zaWduZWQgaW50IG1heF9kaXNjYXJkX3NlY3RvcnMpCmRpZmYgLS1naXQgYS9ibG9jay9ibGstdGFnLmMgYi9ibG9jay9ibGstdGFnLmMKaW5kZXggMmU1Y2ZlYi4uNmIwZjUyYyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRhZy5jCisrKyBiL2Jsb2NrL2Jsay10YWcuYwpAQCAtMzU5LDcgKzM1OSw3IEBACiAJCW1heF9kZXB0aCAtPSAyOwogCQlpZiAoIW1heF9kZXB0aCkKIAkJCW1heF9kZXB0aCA9IDE7Ci0JCWlmIChxLT5pbl9mbGlnaHRbMF0gPiBtYXhfZGVwdGgpCisJCWlmIChxLT5pbl9mbGlnaHRbQkxLX1JXX0FTWU5DXSA+IG1heF9kZXB0aCkKIAkJCXJldHVybiAxOwogCX0KIApkaWZmIC0tZ2l0IGEvYmxvY2svY2ZxLWlvc2NoZWQuYyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKaW5kZXggOWM0YjY3OS4uMDY5YTYxMCAxMDA2NDQKLS0tIGEvYmxvY2svY2ZxLWlvc2NoZWQuYworKysgYi9ibG9jay9jZnEtaW9zY2hlZC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkgKiBpZGxlIHdpbmRvdyBtYW5hZ2VtZW50CiAJICovCiAJc3RydWN0IHRpbWVyX2xpc3QgaWRsZV9zbGljZV90aW1lcjsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHVucGx1Z193b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB1bnBsdWdfd29yazsKIAogCXN0cnVjdCBjZnFfcXVldWUgKmFjdGl2ZV9xdWV1ZTsKIAlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmFjdGl2ZV9jaWM7CkBAIC0yMzAsNyArMjMwLDcgQEAKIAlibGtfYWRkX3RyYWNlX21zZygoY2ZxZCktPnF1ZXVlLCAiY2ZxICIgZm10LCAjI2FyZ3MpCiAKIHN0YXRpYyB2b2lkIGNmcV9kaXNwYXRjaF9pbnNlcnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci1zdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxX2dldF9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKiwgaW50LAorc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcV9nZXRfcXVldWUoc3RydWN0IGNmcV9kYXRhICosIGJvb2wsCiAJCQkJICAgICAgIHN0cnVjdCBpb19jb250ZXh0ICosIGdmcF90KTsKIHN0YXRpYyBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNmcV9jaWNfbG9va3VwKHN0cnVjdCBjZnFfZGF0YSAqLAogCQkJCQkJc3RydWN0IGlvX2NvbnRleHQgKik7CkBAIC0yNDEsNDAgKzI0MSwzNSBAQAogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjZnFfcXVldWUgKmNpY190b19jZnFxKHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljLAotCQkJCQkgICAgaW50IGlzX3N5bmMpCisJCQkJCSAgICBib29sIGlzX3N5bmMpCiB7Ci0JcmV0dXJuIGNpYy0+Y2ZxcVshIWlzX3N5bmNdOworCXJldHVybiBjaWMtPmNmcXFbaXNfc3luY107CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjaWNfc2V0X2NmcXEoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMsCi0JCQkJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwgaW50IGlzX3N5bmMpCisJCQkJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwgYm9vbCBpc19zeW5jKQogewotCWNpYy0+Y2ZxcVshIWlzX3N5bmNdID0gY2ZxcTsKKwljaWMtPmNmcXFbaXNfc3luY10gPSBjZnFxOwogfQogCiAvKgogICogV2UgcmVnYXJkIGEgcmVxdWVzdCBhcyBTWU5DLCBpZiBpdCdzIGVpdGhlciBhIHJlYWQgb3IgaGFzIHRoZSBTWU5DIGJpdAogICogc2V0IChpbiB3aGljaCBjYXNlIGl0IGNvdWxkIGFsc28gYmUgZGlyZWN0IFdSSVRFKS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgY2ZxX2Jpb19zeW5jKHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyBpbmxpbmUgYm9vbCBjZnFfYmlvX3N5bmMoc3RydWN0IGJpbyAqYmlvKQogewotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEIHx8IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTykpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQgfHwgYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfU1lOQ0lPKTsKIH0KIAogLyoKICAqIHNjaGVkdWxlciBydW4gb2YgcXVldWUsIGlmIHRoZXJlIGFyZSByZXF1ZXN0cyBwZW5kaW5nIGFuZCBubyBvbmUgaW4gdGhlCiAgKiBkcml2ZXIgdGhhdCB3aWxsIHJlc3RhcnQgcXVldWVpbmcKICAqLwotc3RhdGljIGlubGluZSB2b2lkIGNmcV9zY2hlZHVsZV9kaXNwYXRjaChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsCi0JCQkJCSB1bnNpZ25lZCBsb25nIGRlbGF5KQorc3RhdGljIGlubGluZSB2b2lkIGNmcV9zY2hlZHVsZV9kaXNwYXRjaChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQpCiB7CiAJaWYgKGNmcWQtPmJ1c3lfcXVldWVzKSB7CiAJCWNmcV9sb2coY2ZxZCwgInNjaGVkdWxlIGRpc3BhdGNoIik7Ci0JCWtibG9ja2Rfc2NoZWR1bGVfZGVsYXllZF93b3JrKGNmcWQtPnF1ZXVlLCAmY2ZxZC0+dW5wbHVnX3dvcmssCi0JCQkJCQlkZWxheSk7CisJCWtibG9ja2Rfc2NoZWR1bGVfd29yayhjZnFkLT5xdWV1ZSwgJmNmcWQtPnVucGx1Z193b3JrKTsKIAl9CiB9CiAKQEAgLTI5MCw3ICsyODUsNyBAQAogICogaWYgYSBxdWV1ZSBpcyBtYXJrZWQgc3luYyBhbmQgaGFzIHN5bmMgaW8gcXVldWVkLiBBIHN5bmMgcXVldWUgd2l0aCBhc3luYwogICogaW8gb25seSwgc2hvdWxkIG5vdCBnZXQgZnVsbCBzeW5jIHNsaWNlIGxlbmd0aC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgY2ZxX3ByaW9fc2xpY2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBpbnQgc3luYywKK3N0YXRpYyBpbmxpbmUgaW50IGNmcV9wcmlvX3NsaWNlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCBzeW5jLAogCQkJCSB1bnNpZ25lZCBzaG9ydCBwcmlvKQogewogCWNvbnN0IGludCBiYXNlX3NsaWNlID0gY2ZxZC0+Y2ZxX3NsaWNlW3N5bmNdOwpAQCAtMzE4LDcgKzMxMyw3IEBACiAgKiBpc24ndCB2YWxpZCB1bnRpbCB0aGUgZmlyc3QgcmVxdWVzdCBmcm9tIHRoZSBkaXNwYXRjaCBpcyBhY3RpdmF0ZWQKICAqIGFuZCB0aGUgc2xpY2UgdGltZSBzZXQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNmcV9zbGljZV91c2VkKHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCitzdGF0aWMgaW5saW5lIGJvb2wgY2ZxX3NsaWNlX3VzZWQoc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKIAlpZiAoY2ZxX2NmcXFfc2xpY2VfbmV3KGNmcXEpKQogCQlyZXR1cm4gMDsKQEAgLTQ5Myw3ICs0ODgsNyBAQAogICogd2Ugd2lsbCBzZXJ2aWNlIHRoZSBxdWV1ZXMuCiAgKi8KIHN0YXRpYyB2b2lkIGNmcV9zZXJ2aWNlX3RyZWVfYWRkKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwKLQkJCQkgaW50IGFkZF9mcm9udCkKKwkJCQkgYm9vbCBhZGRfZnJvbnQpCiB7CiAJc3RydWN0IHJiX25vZGUgKipwLCAqcGFyZW50OwogCXN0cnVjdCBjZnFfcXVldWUgKl9fY2ZxcTsKQEAgLTUwOSwxMSArNTA0LDIwIEBACiAJCX0gZWxzZQogCQkJcmJfa2V5ICs9IGppZmZpZXM7CiAJfSBlbHNlIGlmICghYWRkX2Zyb250KSB7CisJCS8qCisJCSAqIEdldCBvdXIgcmIga2V5IG9mZnNldC4gU3VidHJhY3QgYW55IHJlc2lkdWFsIHNsaWNlCisJCSAqIHZhbHVlIGNhcnJpZWQgZnJvbSBsYXN0IHNlcnZpY2UuIEEgbmVnYXRpdmUgcmVzaWQKKwkJICogY291bnQgaW5kaWNhdGVzIHNsaWNlIG92ZXJydW4sIGFuZCB0aGlzIHNob3VsZCBwb3NpdGlvbgorCQkgKiB0aGUgbmV4dCBzZXJ2aWNlIHRpbWUgZnVydGhlciBhd2F5IGluIHRoZSB0cmVlLgorCQkgKi8KIAkJcmJfa2V5ID0gY2ZxX3NsaWNlX29mZnNldChjZnFkLCBjZnFxKSArIGppZmZpZXM7Ci0JCXJiX2tleSArPSBjZnFxLT5zbGljZV9yZXNpZDsKKwkJcmJfa2V5IC09IGNmcXEtPnNsaWNlX3Jlc2lkOwogCQljZnFxLT5zbGljZV9yZXNpZCA9IDA7Ci0JfSBlbHNlCi0JCXJiX2tleSA9IDA7CisJfSBlbHNlIHsKKwkJcmJfa2V5ID0gLUhaOworCQlfX2NmcXEgPSBjZnFfcmJfZmlyc3QoJmNmcWQtPnNlcnZpY2VfdHJlZSk7CisJCXJiX2tleSArPSBfX2NmcXEgPyBfX2NmcXEtPnJiX2tleSA6IGppZmZpZXM7CisJfQogCiAJaWYgKCFSQl9FTVBUWV9OT0RFKCZjZnFxLT5yYl9ub2RlKSkgewogCQkvKgpAQCAtNTQ3LDcgKzU1MSw3IEBACiAJCQluID0gJigqcCktPnJiX2xlZnQ7CiAJCWVsc2UgaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpID4gY2ZxX2NsYXNzX2lkbGUoX19jZnFxKSkKIAkJCW4gPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JCWVsc2UgaWYgKHJiX2tleSA8IF9fY2ZxcS0+cmJfa2V5KQorCQllbHNlIGlmICh0aW1lX2JlZm9yZShyYl9rZXksIF9fY2ZxcS0+cmJfa2V5KSkKIAkJCW4gPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZQogCQkJbiA9ICYoKnApLT5yYl9yaWdodDsKQEAgLTgyNyw4ICs4MzEsMTAgQEAKIAkgKiByZXBvc2l0aW9uIGluIGZpZm8gaWYgbmV4dCBpcyBvbGRlciB0aGFuIHJxCiAJICovCiAJaWYgKCFsaXN0X2VtcHR5KCZycS0+cXVldWVsaXN0KSAmJiAhbGlzdF9lbXB0eSgmbmV4dC0+cXVldWVsaXN0KSAmJgotCSAgICB0aW1lX2JlZm9yZShuZXh0LT5zdGFydF90aW1lLCBycS0+c3RhcnRfdGltZSkpCisJICAgIHRpbWVfYmVmb3JlKHJxX2ZpZm9fdGltZShuZXh0KSwgcnFfZmlmb190aW1lKHJxKSkpIHsKIAkJbGlzdF9tb3ZlKCZycS0+cXVldWVsaXN0LCAmbmV4dC0+cXVldWVsaXN0KTsKKwkJcnFfc2V0X2ZpZm9fdGltZShycSwgcnFfZmlmb190aW1lKG5leHQpKTsKKwl9CiAKIAljZnFfcmVtb3ZlX3JlcXVlc3QobmV4dCk7CiB9CkBAIC04NDQsNyArODUwLDcgQEAKIAkgKiBEaXNhbGxvdyBtZXJnZSBvZiBhIHN5bmMgYmlvIGludG8gYW4gYXN5bmMgcmVxdWVzdC4KIAkgKi8KIAlpZiAoY2ZxX2Jpb19zeW5jKGJpbykgJiYgIXJxX2lzX3N5bmMocnEpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyoKIAkgKiBMb29rdXAgdGhlIGNmcXEgdGhhdCB0aGlzIGJpbyB3aWxsIGJlIHF1ZXVlZCB3aXRoLiBBbGxvdwpAQCAtODUyLDEzICs4NTgsMTAgQEAKIAkgKi8KIAljaWMgPSBjZnFfY2ljX2xvb2t1cChjZnFkLCBjdXJyZW50LT5pb19jb250ZXh0KTsKIAlpZiAoIWNpYykKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWNmcXEgPSBjaWNfdG9fY2ZxcShjaWMsIGNmcV9iaW9fc3luYyhiaW8pKTsKLQlpZiAoY2ZxcSA9PSBSUV9DRlFRKHJxKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gY2ZxcSA9PSBSUV9DRlFRKHJxKTsKIH0KIAogc3RhdGljIHZvaWQgX19jZnFfc2V0X2FjdGl2ZV9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsCkBAIC04ODYsNyArODg5LDcgQEAKICAqLwogc3RhdGljIHZvaWQKIF9fY2ZxX3NsaWNlX2V4cGlyZWQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAotCQkgICAgaW50IHRpbWVkX291dCkKKwkJICAgIGJvb2wgdGltZWRfb3V0KQogewogCWNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCAic2xpY2UgZXhwaXJlZCB0PSVkIiwgdGltZWRfb3V0KTsKIApAQCAtOTE0LDcgKzkxNyw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2ZxX3NsaWNlX2V4cGlyZWQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBpbnQgdGltZWRfb3V0KQorc3RhdGljIGlubGluZSB2b2lkIGNmcV9zbGljZV9leHBpcmVkKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCB0aW1lZF9vdXQpCiB7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IGNmcWQtPmFjdGl2ZV9xdWV1ZTsKIApAQCAtMTAyNiw3ICsxMDI5LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcV9jbG9zZV9jb29wZXJhdG9yKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwKIAkJCQkJICAgICAgc3RydWN0IGNmcV9xdWV1ZSAqY3VyX2NmcXEsCi0JCQkJCSAgICAgIGludCBwcm9iZSkKKwkJCQkJICAgICAgYm9vbCBwcm9iZSkKIHsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxOwogCkBAIC0xMDkwLDYgKzEwOTMsMTUgQEAKIAlpZiAoIWNpYyB8fCAhYXRvbWljX3JlYWQoJmNpYy0+aW9jLT5ucl90YXNrcykpCiAJCXJldHVybjsKIAorCS8qCisJICogSWYgb3VyIGF2ZXJhZ2UgdGhpbmsgdGltZSBpcyBsYXJnZXIgdGhhbiB0aGUgcmVtYWluaW5nIHRpbWUKKwkgKiBzbGljZSwgdGhlbiBkb24ndCBpZGxlLiBUaGlzIGF2b2lkcyBvdmVycnVubmluZyB0aGUgYWxsb3R0ZWQKKwkgKiB0aW1lIHNsaWNlLgorCSAqLworCWlmIChzYW1wbGVfdmFsaWQoY2ljLT50dGltZV9zYW1wbGVzKSAmJgorCSAgICAoY2ZxcS0+c2xpY2VfZW5kIC0gamlmZmllcyA8IGNpYy0+dHRpbWVfbWVhbikpCisJCXJldHVybjsKKwogCWNmcV9tYXJrX2NmcXFfd2FpdF9yZXF1ZXN0KGNmcXEpOwogCiAJLyoKQEAgLTExMjksOSArMTE0MSw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqY2ZxX2NoZWNrX2ZpZm8oc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKLQlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBjZnFxLT5jZnFkOwotCXN0cnVjdCByZXF1ZXN0ICpycTsKLQlpbnQgZmlmbzsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBOVUxMOwogCiAJaWYgKGNmcV9jZnFxX2ZpZm9fZXhwaXJlKGNmcXEpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTExNDEsMTMgKzExNTEsMTEgQEAKIAlpZiAobGlzdF9lbXB0eSgmY2ZxcS0+ZmlmbykpCiAJCXJldHVybiBOVUxMOwogCi0JZmlmbyA9IGNmcV9jZnFxX3N5bmMoY2ZxcSk7CiAJcnEgPSBycV9lbnRyeV9maWZvKGNmcXEtPmZpZm8ubmV4dCk7Ci0KLQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgcnEtPnN0YXJ0X3RpbWUgKyBjZnFkLT5jZnFfZmlmb19leHBpcmVbZmlmb10pKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBycV9maWZvX3RpbWUocnEpKSkKIAkJcnEgPSBOVUxMOwogCi0JY2ZxX2xvZ19jZnFxKGNmcWQsIGNmcXEsICJmaWZvPSVwIiwgcnEpOworCWNmcV9sb2dfY2ZxcShjZnFxLT5jZnFkLCBjZnFxLCAiZmlmbz0lcCIsIHJxKTsKIAlyZXR1cm4gcnE7CiB9CiAKQEAgLTEyNDgsNjcgKzEyNTYsMjEgQEAKIAlyZXR1cm4gZGlzcGF0Y2hlZDsKIH0KIAotLyoKLSAqIERpc3BhdGNoIGEgcmVxdWVzdCBmcm9tIGNmcXEsIG1vdmluZyB0aGVtIHRvIHRoZSByZXF1ZXN0IHF1ZXVlCi0gKiBkaXNwYXRjaCBsaXN0LgotICovCi1zdGF0aWMgdm9pZCBjZnFfZGlzcGF0Y2hfcmVxdWVzdChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCitzdGF0aWMgYm9vbCBjZnFfbWF5X2Rpc3BhdGNoKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0KLQlCVUdfT04oUkJfRU1QVFlfUk9PVCgmY2ZxcS0+c29ydF9saXN0KSk7Ci0KLQkvKgotCSAqIGZvbGxvdyBleHBpcmVkIHBhdGgsIGVsc2UgZ2V0IGZpcnN0IG5leHQgYXZhaWxhYmxlCi0JICovCi0JcnEgPSBjZnFfY2hlY2tfZmlmbyhjZnFxKTsKLQlpZiAoIXJxKQotCQlycSA9IGNmcXEtPm5leHRfcnE7Ci0KLQkvKgotCSAqIGluc2VydCByZXF1ZXN0IGludG8gZHJpdmVyIGRpc3BhdGNoIGxpc3QKLQkgKi8KLQljZnFfZGlzcGF0Y2hfaW5zZXJ0KGNmcWQtPnF1ZXVlLCBycSk7Ci0KLQlpZiAoIWNmcWQtPmFjdGl2ZV9jaWMpIHsKLQkJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMgPSBSUV9DSUMocnEpOwotCi0JCWF0b21pY19sb25nX2luYygmY2ljLT5pb2MtPnJlZmNvdW50KTsKLQkJY2ZxZC0+YWN0aXZlX2NpYyA9IGNpYzsKLQl9Ci19Ci0KLS8qCi0gKiBGaW5kIHRoZSBjZnFxIHRoYXQgd2UgbmVlZCB0byBzZXJ2aWNlIGFuZCBtb3ZlIGEgcmVxdWVzdCBmcm9tIHRoYXQgdG8gdGhlCi0gKiBkaXNwYXRjaCBsaXN0Ci0gKi8KLXN0YXRpYyBpbnQgY2ZxX2Rpc3BhdGNoX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgZm9yY2UpCi17Ci0Jc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7Ci0Jc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKIAl1bnNpZ25lZCBpbnQgbWF4X2Rpc3BhdGNoOwogCi0JaWYgKCFjZnFkLT5idXN5X3F1ZXVlcykKLQkJcmV0dXJuIDA7Ci0KLQlpZiAodW5saWtlbHkoZm9yY2UpKQotCQlyZXR1cm4gY2ZxX2ZvcmNlZF9kaXNwYXRjaChjZnFkKTsKLQotCWNmcXEgPSBjZnFfc2VsZWN0X3F1ZXVlKGNmcWQpOwotCWlmICghY2ZxcSkKLQkJcmV0dXJuIDA7Ci0KIAkvKgogCSAqIERyYWluIGFzeW5jIHJlcXVlc3RzIGJlZm9yZSB3ZSBzdGFydCBzeW5jIElPCiAJICovCiAJaWYgKGNmcV9jZnFxX2lkbGVfd2luZG93KGNmcXEpICYmIGNmcWQtPnJxX2luX2RyaXZlcltCTEtfUldfQVNZTkNdKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGFuIGFzeW5jIHF1ZXVlIGFuZCB3ZSBoYXZlIHN5bmMgSU8gaW4gZmxpZ2h0LCBsZXQgaXQgd2FpdAogCSAqLwogCWlmIChjZnFkLT5zeW5jX2ZsaWdodCAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCW1heF9kaXNwYXRjaCA9IGNmcWQtPmNmcV9xdWFudHVtOwogCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKQEAgLTEzMjIsMTMgKzEyODQsMTMgQEAKIAkJICogaWRsZSBxdWV1ZSBtdXN0IGFsd2F5cyBvbmx5IGhhdmUgYSBzaW5nbGUgSU8gaW4gZmxpZ2h0CiAJCSAqLwogCQlpZiAoY2ZxX2NsYXNzX2lkbGUoY2ZxcSkpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBmYWxzZTsKIAogCQkvKgogCQkgKiBXZSBoYXZlIG90aGVyIHF1ZXVlcywgZG9uJ3QgYWxsb3cgbW9yZSBJTyBmcm9tIHRoaXMgb25lCiAJCSAqLwogCQlpZiAoY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gZmFsc2U7CiAKIAkJLyoKIAkJICogU29sZSBxdWV1ZSB1c2VyLCBhbGxvdyBiaWdnZXIgc2xpY2UKQEAgLTEzNTIsMTMgKzEzMTQsNzIgQEAKIAkJCW1heF9kaXNwYXRjaCA9IGRlcHRoOwogCX0KIAotCWlmIChjZnFxLT5kaXNwYXRjaGVkID49IG1heF9kaXNwYXRjaCkKKwkvKgorCSAqIElmIHdlJ3JlIGJlbG93IHRoZSBjdXJyZW50IG1heCwgYWxsb3cgYSBkaXNwYXRjaAorCSAqLworCXJldHVybiBjZnFxLT5kaXNwYXRjaGVkIDwgbWF4X2Rpc3BhdGNoOworfQorCisvKgorICogRGlzcGF0Y2ggYSByZXF1ZXN0IGZyb20gY2ZxcSwgbW92aW5nIHRoZW0gdG8gdGhlIHJlcXVlc3QgcXVldWUKKyAqIGRpc3BhdGNoIGxpc3QuCisgKi8KK3N0YXRpYyBib29sIGNmcV9kaXNwYXRjaF9yZXF1ZXN0KHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisKKwlCVUdfT04oUkJfRU1QVFlfUk9PVCgmY2ZxcS0+c29ydF9saXN0KSk7CisKKwlpZiAoIWNmcV9tYXlfZGlzcGF0Y2goY2ZxZCwgY2ZxcSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogZm9sbG93IGV4cGlyZWQgcGF0aCwgZWxzZSBnZXQgZmlyc3QgbmV4dCBhdmFpbGFibGUKKwkgKi8KKwlycSA9IGNmcV9jaGVja19maWZvKGNmcXEpOworCWlmICghcnEpCisJCXJxID0gY2ZxcS0+bmV4dF9ycTsKKworCS8qCisJICogaW5zZXJ0IHJlcXVlc3QgaW50byBkcml2ZXIgZGlzcGF0Y2ggbGlzdAorCSAqLworCWNmcV9kaXNwYXRjaF9pbnNlcnQoY2ZxZC0+cXVldWUsIHJxKTsKKworCWlmICghY2ZxZC0+YWN0aXZlX2NpYykgeworCQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYyA9IFJRX0NJQyhycSk7CisKKwkJYXRvbWljX2xvbmdfaW5jKCZjaWMtPmlvYy0+cmVmY291bnQpOworCQljZnFkLT5hY3RpdmVfY2ljID0gY2ljOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogRmluZCB0aGUgY2ZxcSB0aGF0IHdlIG5lZWQgdG8gc2VydmljZSBhbmQgbW92ZSBhIHJlcXVlc3QgZnJvbSB0aGF0IHRvIHRoZQorICogZGlzcGF0Y2ggbGlzdAorICovCitzdGF0aWMgaW50IGNmcV9kaXNwYXRjaF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IGZvcmNlKQoreworCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOworCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7CisKKwlpZiAoIWNmcWQtPmJ1c3lfcXVldWVzKQorCQlyZXR1cm4gMDsKKworCWlmICh1bmxpa2VseShmb3JjZSkpCisJCXJldHVybiBjZnFfZm9yY2VkX2Rpc3BhdGNoKGNmcWQpOworCisJY2ZxcSA9IGNmcV9zZWxlY3RfcXVldWUoY2ZxZCk7CisJaWYgKCFjZnFxKQogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogRGlzcGF0Y2ggYSByZXF1ZXN0IGZyb20gdGhpcyBjZnFxCisJICogRGlzcGF0Y2ggYSByZXF1ZXN0IGZyb20gdGhpcyBjZnFxLCBpZiBpdCBpcyBhbGxvd2VkCiAJICovCi0JY2ZxX2Rpc3BhdGNoX3JlcXVlc3QoY2ZxZCwgY2ZxcSk7CisJaWYgKCFjZnFfZGlzcGF0Y2hfcmVxdWVzdChjZnFkLCBjZnFxKSkKKwkJcmV0dXJuIDA7CisKIAljZnFxLT5zbGljZV9kaXNwYXRjaCsrOwogCWNmcV9jbGVhcl9jZnFxX211c3RfZGlzcGF0Y2goY2ZxcSk7CiAKQEAgLTEzOTksNyArMTQyMCw3IEBACiAKIAlpZiAodW5saWtlbHkoY2ZxZC0+YWN0aXZlX3F1ZXVlID09IGNmcXEpKSB7CiAJCV9fY2ZxX3NsaWNlX2V4cGlyZWQoY2ZxZCwgY2ZxcSwgMCk7Ci0JCWNmcV9zY2hlZHVsZV9kaXNwYXRjaChjZnFkLCAwKTsKKwkJY2ZxX3NjaGVkdWxlX2Rpc3BhdGNoKGNmcWQpOwogCX0KIAogCWttZW1fY2FjaGVfZnJlZShjZnFfcG9vbCwgY2ZxcSk7CkBAIC0xNDk0LDcgKzE1MTUsNyBAQAogewogCWlmICh1bmxpa2VseShjZnFxID09IGNmcWQtPmFjdGl2ZV9xdWV1ZSkpIHsKIAkJX19jZnFfc2xpY2VfZXhwaXJlZChjZnFkLCBjZnFxLCAwKTsKLQkJY2ZxX3NjaGVkdWxlX2Rpc3BhdGNoKGNmcWQsIDApOworCQljZnFfc2NoZWR1bGVfZGlzcGF0Y2goY2ZxZCk7CiAJfQogCiAJY2ZxX3B1dF9xdWV1ZShjZnFxKTsKQEAgLTE2NTgsNyArMTY3OSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9pbml0X2NmcXEoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAotCQkJICBwaWRfdCBwaWQsIGludCBpc19zeW5jKQorCQkJICBwaWRfdCBwaWQsIGJvb2wgaXNfc3luYykKIHsKIAlSQl9DTEVBUl9OT0RFKCZjZnFxLT5yYl9ub2RlKTsKIAlSQl9DTEVBUl9OT0RFKCZjZnFxLT5wX25vZGUpOwpAQCAtMTY3OCw3ICsxNjk5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKgotY2ZxX2ZpbmRfYWxsb2NfcXVldWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBpbnQgaXNfc3luYywKK2NmcV9maW5kX2FsbG9jX3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCBpc19zeW5jLAogCQkgICAgIHN0cnVjdCBpb19jb250ZXh0ICppb2MsIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEsICpuZXdfY2ZxcSA9IE5VTEw7CkBAIC0xNzQyLDcgKzE3NjMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqCi1jZnFfZ2V0X3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgaW50IGlzX3N5bmMsIHN0cnVjdCBpb19jb250ZXh0ICppb2MsCitjZnFfZ2V0X3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCBpc19zeW5jLCBzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLAogCSAgICAgIGdmcF90IGdmcF9tYXNrKQogewogCWNvbnN0IGludCBpb3ByaW8gPSB0YXNrX2lvcHJpbyhpb2MpOwpAQCAtMTk3Nyw3ICsxOTk4LDEwIEBACiAJICAgICghY2ZxZC0+Y2ZxX2xhdGVuY3kgJiYgY2ZxZC0+aHdfdGFnICYmIENJQ19TRUVLWShjaWMpKSkKIAkJZW5hYmxlX2lkbGUgPSAwOwogCWVsc2UgaWYgKHNhbXBsZV92YWxpZChjaWMtPnR0aW1lX3NhbXBsZXMpKSB7Ci0JCWlmIChjaWMtPnR0aW1lX21lYW4gPiBjZnFkLT5jZnFfc2xpY2VfaWRsZSkKKwkJdW5zaWduZWQgaW50IHNsaWNlX2lkbGUgPSBjZnFkLT5jZnFfc2xpY2VfaWRsZTsKKwkJaWYgKHNhbXBsZV92YWxpZChjaWMtPnNlZWtfc2FtcGxlcykgJiYgQ0lDX1NFRUtZKGNpYykpCisJCQlzbGljZV9pZGxlID0gbXNlY3NfdG9famlmZmllcyhDRlFfTUlOX1RUKTsKKwkJaWYgKGNpYy0+dHRpbWVfbWVhbiA+IHNsaWNlX2lkbGUpCiAJCQllbmFibGVfaWRsZSA9IDA7CiAJCWVsc2UKIAkJCWVuYWJsZV9pZGxlID0gMTsKQEAgLTE5OTYsNyArMjAyMCw3IEBACiAgKiBDaGVjayBpZiBuZXdfY2ZxcSBzaG91bGQgcHJlZW1wdCB0aGUgY3VycmVudGx5IGFjdGl2ZSBxdWV1ZS4gUmV0dXJuIDAgZm9yCiAgKiBubyBvciBpZiB3ZSBhcmVuJ3Qgc3VyZSwgYSAxIHdpbGwgY2F1c2UgYSBwcmVlbXB0LgogICovCi1zdGF0aWMgaW50CitzdGF0aWMgYm9vbAogY2ZxX3Nob3VsZF9wcmVlbXB0KHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqbmV3X2NmcXEsCiAJCSAgIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKQEAgLTIwMDQsNDggKzIwMjgsNDggQEAKIAogCWNmcXEgPSBjZnFkLT5hY3RpdmVfcXVldWU7CiAJaWYgKCFjZnFxKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGNmcV9zbGljZV91c2VkKGNmcXEpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoY2ZxX2NsYXNzX2lkbGUobmV3X2NmcXEpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAkvKgogCSAqIGlmIHRoZSBuZXcgcmVxdWVzdCBpcyBzeW5jLCBidXQgdGhlIGN1cnJlbnRseSBydW5uaW5nIHF1ZXVlIGlzCiAJICogbm90LCBsZXQgdGhlIHN5bmMgcmVxdWVzdCBoYXZlIHByaW9yaXR5LgogCSAqLwogCWlmIChycV9pc19zeW5jKHJxKSAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBTbyBib3RoIHF1ZXVlcyBhcmUgc3luYy4gTGV0IHRoZSBuZXcgcmVxdWVzdCBnZXQgZGlzayB0aW1lIGlmCiAJICogaXQncyBhIG1ldGFkYXRhIHJlcXVlc3QgYW5kIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGRvaW5nIHJlZ3VsYXIgSU8uCiAJICovCiAJaWYgKHJxX2lzX21ldGEocnEpICYmICFjZnFxLT5tZXRhX3BlbmRpbmcpCi0JCXJldHVybiAxOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgogCSAqIEFsbG93IGFuIFJUIHJlcXVlc3QgdG8gcHJlLWVtcHQgYW4gb25nb2luZyBub24tUlQgY2ZxcSB0aW1lc2xpY2UuCiAJICovCiAJaWYgKGNmcV9jbGFzc19ydChuZXdfY2ZxcSkgJiYgIWNmcV9jbGFzc19ydChjZnFxKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCiAJaWYgKCFjZnFkLT5hY3RpdmVfY2ljIHx8ICFjZnFfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgogCSAqIGlmIHRoaXMgcmVxdWVzdCBpcyBhcy1nb29kIGFzIG9uZSB3ZSB3b3VsZCBleHBlY3QgZnJvbSB0aGUKIAkgKiBjdXJyZW50IGNmcXEsIGxldCBpdCBwcmVlbXB0CiAJICovCiAJaWYgKGNmcV9ycV9jbG9zZShjZnFkLCBycSkpCi0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAotCXJldHVybiAwOworCXJldHVybiBmYWxzZTsKIH0KIAogLyoKQEAgLTIxMzAsNiArMjE1NCw3IEBACiAKIAljZnFfYWRkX3JxX3JiKHJxKTsKIAorCXJxX3NldF9maWZvX3RpbWUocnEsIGppZmZpZXMgKyBjZnFkLT5jZnFfZmlmb19leHBpcmVbcnFfaXNfc3luYyhycSldKTsKIAlsaXN0X2FkZF90YWlsKCZycS0+cXVldWVsaXN0LCAmY2ZxcS0+Zmlmbyk7CiAKIAljZnFfcnFfZW5xdWV1ZWQoY2ZxZCwgY2ZxcSwgcnEpOwpAQCAtMjIxMSw3ICsyMjM2LDcgQEAKIAl9CiAKIAlpZiAoIXJxX2luX2RyaXZlcihjZnFkKSkKLQkJY2ZxX3NjaGVkdWxlX2Rpc3BhdGNoKGNmcWQsIDApOworCQljZnFfc2NoZWR1bGVfZGlzcGF0Y2goY2ZxZCk7CiB9CiAKIC8qCkBAIC0yMzA5LDcgKzIzMzQsNyBAQAogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOwogCWNvbnN0IGludCBydyA9IHJxX2RhdGFfZGlyKHJxKTsKLQljb25zdCBpbnQgaXNfc3luYyA9IHJxX2lzX3N5bmMocnEpOworCWNvbnN0IGJvb2wgaXNfc3luYyA9IHJxX2lzX3N5bmMocnEpOwogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjM0MSw3ICsyMzY2LDcgQEAKIAlpZiAoY2ljKQogCQlwdXRfaW9fY29udGV4dChjaWMtPmlvYyk7CiAKLQljZnFfc2NoZWR1bGVfZGlzcGF0Y2goY2ZxZCwgMCk7CisJY2ZxX3NjaGVkdWxlX2Rpc3BhdGNoKGNmcWQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogCWNmcV9sb2coY2ZxZCwgInNldF9yZXF1ZXN0IGZhaWwiKTsKIAlyZXR1cm4gMTsKQEAgLTIzNTAsNyArMjM3NSw3IEBACiBzdGF0aWMgdm9pZCBjZnFfa2lja19xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZnFfZGF0YSwgdW5wbHVnX3dvcmsud29yayk7CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZxX2RhdGEsIHVucGx1Z193b3JrKTsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGNmcWQtPnF1ZXVlOwogCiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKQEAgLTI0MDQsNyArMjQyOSw3IEBACiBleHBpcmU6CiAJY2ZxX3NsaWNlX2V4cGlyZWQoY2ZxZCwgdGltZWRfb3V0KTsKIG91dF9raWNrOgotCWNmcV9zY2hlZHVsZV9kaXNwYXRjaChjZnFkLCAwKTsKKwljZnFfc2NoZWR1bGVfZGlzcGF0Y2goY2ZxZCk7CiBvdXRfY29udDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNmcWQtPnF1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CkBAIC0yNDEyLDcgKzI0MzcsNyBAQAogc3RhdGljIHZvaWQgY2ZxX3NodXRkb3duX3RpbWVyX3dxKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCkKIHsKIAlkZWxfdGltZXJfc3luYygmY2ZxZC0+aWRsZV9zbGljZV90aW1lcik7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZjZnFkLT51bnBsdWdfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmY2ZxZC0+dW5wbHVnX3dvcmspOwogfQogCiBzdGF0aWMgdm9pZCBjZnFfcHV0X2FzeW5jX3F1ZXVlcyhzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQpCkBAIC0yNDk0LDcgKzI1MTksNyBAQAogCWNmcWQtPmlkbGVfc2xpY2VfdGltZXIuZnVuY3Rpb24gPSBjZnFfaWRsZV9zbGljZV90aW1lcjsKIAljZnFkLT5pZGxlX3NsaWNlX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgY2ZxZDsKIAotCUlOSVRfREVMQVlFRF9XT1JLKCZjZnFkLT51bnBsdWdfd29yaywgY2ZxX2tpY2tfcXVldWUpOworCUlOSVRfV09SSygmY2ZxZC0+dW5wbHVnX3dvcmssIGNmcV9raWNrX3F1ZXVlKTsKIAogCWNmcWQtPmNmcV9xdWFudHVtID0gY2ZxX3F1YW50dW07CiAJY2ZxZC0+Y2ZxX2ZpZm9fZXhwaXJlWzBdID0gY2ZxX2ZpZm9fZXhwaXJlWzBdOwpkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggMTk3NWI2MS4uYTg0NzA0NiAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC0xMDU5LDkgKzEwNTksNyBAQAogCQlyZXR1cm4gY291bnQ7CiAKIAlzdHJsY3B5KGVsZXZhdG9yX25hbWUsIG5hbWUsIHNpemVvZihlbGV2YXRvcl9uYW1lKSk7Ci0Jc3Ryc3RyaXAoZWxldmF0b3JfbmFtZSk7Ci0KLQllID0gZWxldmF0b3JfZ2V0KGVsZXZhdG9yX25hbWUpOworCWUgPSBlbGV2YXRvcl9nZXQoc3Ryc3RyaXAoZWxldmF0b3JfbmFtZSkpOwogCWlmICghZSkgewogCQlwcmludGsoS0VSTl9FUlIgImVsZXZhdG9yOiB0eXBlICVzIG5vdCBmb3VuZFxuIiwgZWxldmF0b3JfbmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggNWEwODYxZC4uNTE3ZTQzMyAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYworKysgYi9ibG9jay9nZW5oZC5jCkBAIC04NjksNiArODY5LDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihhbGlnbm1lbnRfb2Zmc2V0LCBTX0lSVUdPLCBkaXNrX2FsaWdubWVudF9vZmZzZXRfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FwYWJpbGl0eSwgU19JUlVHTywgZGlza19jYXBhYmlsaXR5X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIFNfSVJVR08sIHBhcnRfc3RhdF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgU19JUlVHTywgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTsKICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1QKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9mYWlsID0KIAlfX0FUVFIobWFrZS1pdC1mYWlsLCBTX0lSVUdPfFNfSVdVU1IsIHBhcnRfZmFpbF9zaG93LCBwYXJ0X2ZhaWxfc3RvcmUpOwpAQCAtODg4LDYgKzg4OSw3IEBACiAJJmRldl9hdHRyX2FsaWdubWVudF9vZmZzZXQuYXR0ciwKIAkmZGV2X2F0dHJfY2FwYWJpbGl0eS5hdHRyLAogCSZkZXZfYXR0cl9zdGF0LmF0dHIsCisJJmRldl9hdHRyX2luZmxpZ2h0LmF0dHIsCiAjaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUCiAJJmRldl9hdHRyX2ZhaWwuYXR0ciwKICNlbmRpZgpAQCAtMTA1Myw3ICsxMDU1LDcgQEAKIAkJCSAgIHBhcnRfc3RhdF9yZWFkKGhkLCBtZXJnZXNbMV0pLAogCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwYXJ0X3N0YXRfcmVhZChoZCwgc2VjdG9yc1sxXSksCiAJCQkgICBqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKGhkLCB0aWNrc1sxXSkpLAotCQkJICAgaGQtPmluX2ZsaWdodCwKKwkJCSAgIHBhcnRfaW5fZmxpZ2h0KGhkKSwKIAkJCSAgIGppZmZpZXNfdG9fbXNlY3MocGFydF9zdGF0X3JlYWQoaGQsIGlvX3RpY2tzKSksCiAJCQkgICBqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKGhkLCB0aW1lX2luX3F1ZXVlKSkKIAkJCSk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcHEuYyBiL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCmluZGV4IGI4OGRiNmQuLjZiNWNjNGYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCkBAIC0yNiwxNCArMjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9hc3luY190eC5oPgogCiAvKioKLSAqIHNjcmliYmxlIC0gc3BhY2UgdG8gaG9sZCB0aHJvd2F3YXkgUCBidWZmZXIgZm9yIHN5bmNocm9ub3VzIGdlbl9zeW5kcm9tZQorICogcHFfc2NyaWJibGVfcGFnZSAtIHNwYWNlIHRvIGhvbGQgdGhyb3dhd2F5IFAgb3IgUSBidWZmZXIgZm9yCisgKiBzeW5jaHJvbm91cyBnZW5fc3luZHJvbWUKICAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpzY3JpYmJsZTsKLQotc3RhdGljIGJvb2wgaXNfcmFpZDZfemVyb19ibG9jayhzdHJ1Y3QgcGFnZSAqcCkKLXsKLQlyZXR1cm4gcCA9PSAodm9pZCAqKSByYWlkNl9lbXB0eV96ZXJvX3BhZ2U7Ci19CitzdGF0aWMgc3RydWN0IHBhZ2UgKnBxX3NjcmliYmxlX3BhZ2U7CiAKIC8qIHRoZSBzdHJ1Y3QgcGFnZSAqYmxvY2tzW10gcGFyYW1ldGVyIHBhc3NlZCB0byBhc3luY19nZW5fc3luZHJvbWUoKQogICogYW5kIGFzeW5jX3N5bmRyb21lX3ZhbCgpIGNvbnRhaW5zIHRoZSAnUCcgZGVzdGluYXRpb24gYWRkcmVzcyBhdApAQCAtODMsNyArNzksNyBAQAogCSAqIHNvdXJjZXMgYW5kIHVwZGF0ZSB0aGUgY29lZmZpY2llbnRzIGFjY29yZGluZ2x5CiAJICovCiAJZm9yIChpID0gMCwgaWR4ID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgewotCQlpZiAoaXNfcmFpZDZfemVyb19ibG9jayhibG9ja3NbaV0pKQorCQlpZiAoYmxvY2tzW2ldID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJZG1hX3NyY1tpZHhdID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBibG9ja3NbaV0sIG9mZnNldCwgbGVuLAogCQkJCQkgICAgRE1BX1RPX0RFVklDRSk7CkBAIC0xNjAsOSArMTU2LDkgQEAKIAkJc3JjcyA9ICh2b2lkICoqKSBibG9ja3M7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykgewotCQlpZiAoaXNfcmFpZDZfemVyb19ibG9jayhibG9ja3NbaV0pKSB7CisJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkgewogCQkJQlVHX09OKGkgPiBkaXNrcyAtIDMpOyAvKiBQIG9yIFEgY2FuJ3QgYmUgemVybyAqLwotCQkJc3Jjc1tpXSA9IGJsb2Nrc1tpXTsKKwkJCXNyY3NbaV0gPSAodm9pZCopcmFpZDZfZW1wdHlfemVyb19wYWdlOwogCQl9IGVsc2UKIAkJCXNyY3NbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKSArIG9mZnNldDsKIAl9CkBAIC0xODYsMTAgKzE4MiwxNCBAQAogICogYmxvY2tzW2Rpc2tzLTFdIHRvIE5VTEwuICBXaGVuIFAgb3IgUSBpcyBvbWl0dGVkICdsZW4nIG11c3QgYmUgPD0KICAqIFBBR0VfU0laRSBhcyBhIHRlbXBvcmFyeSBidWZmZXIgb2YgdGhpcyBzaXplIGlzIHVzZWQgaW4gdGhlCiAgKiBzeW5jaHJvbm91cyBwYXRoLiAgJ2Rpc2tzJyBhbHdheXMgYWNjb3VudHMgZm9yIGJvdGggZGVzdGluYXRpb24KLSAqIGJ1ZmZlcnMuCisgKiBidWZmZXJzLiAgSWYgYW55IHNvdXJjZSBidWZmZXJzIChibG9ja3NbaV0gd2hlcmUgaSA8IGRpc2tzIC0gMikgYXJlCisgKiBzZXQgdG8gTlVMTCB0aG9zZSBidWZmZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgcmFpZDZfemVyb19wYWdlCisgKiBpbiB0aGUgc3luY2hyb25vdXMgcGF0aCBhbmQgb21pdHRlZCBpbiB0aGUgaGFyZHdhcmUtYXN5bmNocm9ub3VzCisgKiBwYXRoLgogICoKICAqICdibG9ja3MnIG5vdGU6IGlmIHN1Ym1pdC0+c2NyaWJibGUgaXMgTlVMTCB0aGVuIHRoZSBjb250ZW50cyBvZgotICogJ2Jsb2NrcycgbWF5IGJlIG92ZXJyaWRkZW4KKyAqICdibG9ja3MnIG1heSBiZSBvdmVyd3JpdHRlbiB0byBwZXJmb3JtIGFkZHJlc3MgY29udmVyc2lvbnMKKyAqIChkbWFfbWFwX3BhZ2UoKSBvciBwYWdlX2FkZHJlc3MoKSkuCiAgKi8KIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCiBhc3luY19nZW5fc3luZHJvbWUoc3RydWN0IHBhZ2UgKipibG9ja3MsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBkaXNrcywKQEAgLTIyNywxMSArMjI3LDExIEBACiAJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCiAJaWYgKCFQKGJsb2NrcywgZGlza3MpKSB7Ci0JCVAoYmxvY2tzLCBkaXNrcykgPSBzY3JpYmJsZTsKKwkJUChibG9ja3MsIGRpc2tzKSA9IHBxX3NjcmliYmxlX3BhZ2U7CiAJCUJVR19PTihsZW4gKyBvZmZzZXQgPiBQQUdFX1NJWkUpOwogCX0KIAlpZiAoIVEoYmxvY2tzLCBkaXNrcykpIHsKLQkJUShibG9ja3MsIGRpc2tzKSA9IHNjcmliYmxlOworCQlRKGJsb2NrcywgZGlza3MpID0gcHFfc2NyaWJibGVfcGFnZTsKIAkJQlVHX09OKGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSk7CiAJfQogCWRvX3N5bmNfZ2VuX3N5bmRyb21lKGJsb2Nrcywgb2Zmc2V0LCBkaXNrcywgbGVuLCBzdWJtaXQpOwpAQCAtMjY1LDggKzI2NSwxMCBAQAogCQkJCQkJICAgICAgbGVuKTsKIAlzdHJ1Y3QgZG1hX2RldmljZSAqZGV2aWNlID0gY2hhbiA/IGNoYW4tPmRldmljZSA6IE5VTEw7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDsKKwl1bnNpZ25lZCBjaGFyIGNvZWZzW2Rpc2tzLTJdOwogCWVudW0gZG1hX2N0cmxfZmxhZ3MgZG1hX2ZsYWdzID0gc3VibWl0LT5jYl9mbiA/IERNQV9QUkVQX0lOVEVSUlVQVCA6IDA7CiAJZG1hX2FkZHJfdCAqZG1hX3NyYyA9IE5VTEw7CisJaW50IHNyY19jbnQgPSAwOwogCiAJQlVHX09OKGRpc2tzIDwgNCk7CiAKQEAgLTI4NSwyMiArMjg3LDMyIEBACiAJCQkgX19mdW5jX18sIGRpc2tzLCBsZW4pOwogCQlpZiAoIVAoYmxvY2tzLCBkaXNrcykpCiAJCQlkbWFfZmxhZ3MgfD0gRE1BX1BSRVBfUFFfRElTQUJMRV9QOworCQllbHNlCisJCQlwcVswXSA9IGRtYV9tYXBfcGFnZShkZXYsIFAoYmxvY2tzLCBkaXNrcyksCisJCQkJCSAgICAgb2Zmc2V0LCBsZW4sCisJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWlmICghUShibG9ja3MsIGRpc2tzKSkKIAkJCWRtYV9mbGFncyB8PSBETUFfUFJFUF9QUV9ESVNBQkxFX1E7CisJCWVsc2UKKwkJCXBxWzFdID0gZG1hX21hcF9wYWdlKGRldiwgUShibG9ja3MsIGRpc2tzKSwKKwkJCQkJICAgICBvZmZzZXQsIGxlbiwKKwkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwogCQlpZiAoc3VibWl0LT5mbGFncyAmIEFTWU5DX1RYX0ZFTkNFKQogCQkJZG1hX2ZsYWdzIHw9IERNQV9QUkVQX0ZFTkNFOwotCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IGRpc2tzLTI7IGkrKykKIAkJCWlmIChsaWtlbHkoYmxvY2tzW2ldKSkgewotCQkJCUJVR19PTihpc19yYWlkNl96ZXJvX2Jsb2NrKGJsb2Nrc1tpXSkpOwotCQkJCWRtYV9zcmNbaV0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBibG9ja3NbaV0sCi0JCQkJCQkJICBvZmZzZXQsIGxlbiwKLQkJCQkJCQkgIERNQV9UT19ERVZJQ0UpOworCQkJCWRtYV9zcmNbc3JjX2NudF0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBibG9ja3NbaV0sCisJCQkJCQkJCW9mZnNldCwgbGVuLAorCQkJCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJCQljb2Vmc1tzcmNfY250XSA9IHJhaWQ2X2dmZXhwW2ldOworCQkJCXNyY19jbnQrKzsKIAkJCX0KIAogCQlmb3IgKDs7KSB7CiAJCQl0eCA9IGRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX3BxX3ZhbChjaGFuLCBwcSwgZG1hX3NyYywKLQkJCQkJCQkgICAgZGlza3MgLSAyLAotCQkJCQkJCSAgICByYWlkNl9nZmV4cCwKKwkJCQkJCQkgICAgc3JjX2NudCwKKwkJCQkJCQkgICAgY29lZnMsCiAJCQkJCQkJICAgIGxlbiwgcHFyZXMsCiAJCQkJCQkJICAgIGRtYV9mbGFncyk7CiAJCQlpZiAobGlrZWx5KHR4KSkKQEAgLTM3Myw5ICszODUsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhc3luY19wcV9pbml0KHZvaWQpCiB7Ci0Jc2NyaWJibGUgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCXBxX3NjcmliYmxlX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwogCi0JaWYgKHNjcmliYmxlKQorCWlmIChwcV9zY3JpYmJsZV9wYWdlKQogCQlyZXR1cm4gMDsKIAogCXByX2VycigiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBzcGFyZSBwYWdlXG4iLCBfX2Z1bmNfXyk7CkBAIC0zODUsNyArMzk3LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGFzeW5jX3BxX2V4aXQodm9pZCkKIHsKLQlwdXRfcGFnZShzY3JpYmJsZSk7CisJcHV0X3BhZ2UocHFfc2NyaWJibGVfcGFnZSk7CiB9CiAKIG1vZHVsZV9pbml0KGFzeW5jX3BxX2luaXQpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3JhaWQ2X3JlY292LmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYwppbmRleCA2ZDczZGRlLi45NDNmMmFiIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYwpAQCAtMTMxLDggKzEzMSw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgotX18yZGF0YV9yZWNvdl80KHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHN0cnVjdCBwYWdlICoqYmxvY2tzLAotCSAgICAgIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCitfXzJkYXRhX3JlY292XzQoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcCwgKnEsICphLCAqYjsKQEAgLTE0Myw4ICsxNDMsOCBAQAogCXZvaWQgKmNiX3BhcmFtID0gc3VibWl0LT5jYl9wYXJhbTsKIAl2b2lkICpzY3JpYmJsZSA9IHN1Ym1pdC0+c2NyaWJibGU7CiAKLQlwID0gYmxvY2tzWzQtMl07Ci0JcSA9IGJsb2Nrc1s0LTFdOworCXAgPSBibG9ja3NbZGlza3MtMl07CisJcSA9IGJsb2Nrc1tkaXNrcy0xXTsKIAogCWEgPSBibG9ja3NbZmFpbGFdOwogCWIgPSBibG9ja3NbZmFpbGJdOwpAQCAtMTcwLDggKzE3MCw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgotX18yZGF0YV9yZWNvdl81KHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHN0cnVjdCBwYWdlICoqYmxvY2tzLAotCSAgICAgIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCitfXzJkYXRhX3JlY292XzUoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcCwgKnEsICpnLCAqZHAsICpkcTsKQEAgLTE4MSwyMSArMTgxLDIyIEBACiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNiX2ZuID0gc3VibWl0LT5jYl9mbjsKIAl2b2lkICpjYl9wYXJhbSA9IHN1Ym1pdC0+Y2JfcGFyYW07CiAJdm9pZCAqc2NyaWJibGUgPSBzdWJtaXQtPnNjcmliYmxlOwotCWludCB1bmluaXRpYWxpemVkX3Zhcihnb29kKTsKLQlpbnQgaTsKKwlpbnQgZ29vZF9zcmNzLCBnb29kLCBpOwogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCWdvb2Rfc3JjcyA9IDA7CisJZ29vZCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBkaXNrcy0yOyBpKyspIHsKKwkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKQorCQkJY29udGludWU7CiAJCWlmIChpID09IGZhaWxhIHx8IGkgPT0gZmFpbGIpCiAJCQljb250aW51ZTsKLQkJZWxzZSB7Ci0JCQlnb29kID0gaTsKLQkJCWJyZWFrOwotCQl9CisJCWdvb2QgPSBpOworCQlnb29kX3NyY3MrKzsKIAl9Ci0JQlVHX09OKGkgPj0gMyk7CisJQlVHX09OKGdvb2Rfc3JjcyA+IDEpOwogCi0JcCA9IGJsb2Nrc1s1LTJdOwotCXEgPSBibG9ja3NbNS0xXTsKKwlwID0gYmxvY2tzW2Rpc2tzLTJdOworCXEgPSBibG9ja3NbZGlza3MtMV07CiAJZyA9IGJsb2Nrc1tnb29kXTsKIAogCS8qIENvbXB1dGUgc3luZHJvbWUgd2l0aCB6ZXJvIGZvciB0aGUgbWlzc2luZyBkYXRhIHBhZ2VzCkBAIC0yNjMsMTAgKzI2NCwxMCBAQAogCSAqIGRlbHRhIHAgYW5kIGRlbHRhIHEKIAkgKi8KIAlkcCA9IGJsb2Nrc1tmYWlsYV07Ci0JYmxvY2tzW2ZhaWxhXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCWJsb2Nrc1tmYWlsYV0gPSBOVUxMOwogCWJsb2Nrc1tkaXNrcy0yXSA9IGRwOwogCWRxID0gYmxvY2tzW2ZhaWxiXTsKLQlibG9ja3NbZmFpbGJdID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJYmxvY2tzW2ZhaWxiXSA9IE5VTEw7CiAJYmxvY2tzW2Rpc2tzLTFdID0gZHE7CiAKIAlpbml0X2FzeW5jX3N1Ym1pdChzdWJtaXQsIEFTWU5DX1RYX0ZFTkNFLCB0eCwgTlVMTCwgTlVMTCwgc2NyaWJibGUpOwpAQCAtMzIzLDYgKzMyNCw4IEBACiBhc3luY19yYWlkNl8yZGF0YV9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCiAJCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKKwlpbnQgbm9uX3plcm9fc3JjcywgaTsKKwogCUJVR19PTihmYWlsYSA9PSBmYWlsYik7CiAJaWYgKGZhaWxiIDwgZmFpbGEpCiAJCXN3YXAoZmFpbGEsIGZhaWxiKTsKQEAgLTMzNCwxMSArMzM3LDEzIEBACiAJICovCiAJaWYgKCFzdWJtaXQtPnNjcmliYmxlKSB7CiAJCXZvaWQgKipwdHJzID0gKHZvaWQgKiopIGJsb2NrczsKLQkJaW50IGk7CiAKIAkJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKLQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKKwkJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkKKwkJCQlwdHJzW2ldID0gKHZvaWQgKikgcmFpZDZfZW1wdHlfemVyb19wYWdlOworCQkJZWxzZQorCQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKIAogCQlyYWlkNl8yZGF0YV9yZWNvdihkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgcHRycyk7CiAKQEAgLTM0NywxOSArMzUyLDMwIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXN3aXRjaCAoZGlza3MpIHsKLQljYXNlIDQ6CisJbm9uX3plcm9fc3JjcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRpc2tzLTIgJiYgbm9uX3plcm9fc3JjcyA8IDQ7IGkrKykKKwkJaWYgKGJsb2Nrc1tpXSkKKwkJCW5vbl96ZXJvX3NyY3MrKzsKKwlzd2l0Y2ggKG5vbl96ZXJvX3NyY3MpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQkvKiBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDIgc291cmNlcyAtIHRoZSBmYWlsZWQgZGV2aWNlcy4gKi8KKwkJQlVHKCk7CisKKwljYXNlIDI6CiAJCS8qIGRtYSBkZXZpY2VzIGRvIG5vdCB1bmlmb3JtbHkgdW5kZXJzdGFuZCBhIHplcm8gc291cmNlIHBxCiAJCSAqIG9wZXJhdGlvbiAoaW4gY29udHJhc3QgdG8gdGhlIHN5bmNocm9ub3VzIGNhc2UpLCBzbwotCQkgKiBleHBsaWNpdGx5IGhhbmRsZSB0aGUgNCBkaXNrIHNwZWNpYWwgY2FzZQorCQkgKiBleHBsaWNpdGx5IGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgNCBkaXNrIGFycmF5IHdpdGgKKwkJICogYm90aCBkYXRhIGRpc2tzIG1pc3NpbmcuCiAJCSAqLwotCQlyZXR1cm4gX18yZGF0YV9yZWNvdl80KGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKLQljYXNlIDU6CisJCXJldHVybiBfXzJkYXRhX3JlY292XzQoZGlza3MsIGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKKwljYXNlIDM6CiAJCS8qIGRtYSBkZXZpY2VzIGRvIG5vdCB1bmlmb3JtbHkgdW5kZXJzdGFuZCBhIHNpbmdsZQogCQkgKiBzb3VyY2UgcHEgb3BlcmF0aW9uIChpbiBjb250cmFzdCB0byB0aGUgc3luY2hyb25vdXMKLQkJICogY2FzZSksIHNvIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSA1IGRpc2sgc3BlY2lhbCBjYXNlCisJCSAqIGNhc2UpLCBzbyBleHBsaWNpdGx5IGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgNSBkaXNrCisJCSAqIGFycmF5IHdpdGggMiBvZiAzIGRhdGEgZGlza3MgbWlzc2luZy4KIAkJICovCi0JCXJldHVybiBfXzJkYXRhX3JlY292XzUoYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOworCQlyZXR1cm4gX18yZGF0YV9yZWNvdl81KGRpc2tzLCBieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfbihkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOwogCX0KQEAgLTM4NSw2ICs0MDEsNyBAQAogCWRtYV9hc3luY190eF9jYWxsYmFjayBjYl9mbiA9IHN1Ym1pdC0+Y2JfZm47CiAJdm9pZCAqY2JfcGFyYW0gPSBzdWJtaXQtPmNiX3BhcmFtOwogCXZvaWQgKnNjcmliYmxlID0gc3VibWl0LT5zY3JpYmJsZTsKKwlpbnQgZ29vZF9zcmNzLCBnb29kLCBpOwogCXN0cnVjdCBwYWdlICpzcmNzWzJdOwogCiAJcHJfZGVidWcoIiVzOiBkaXNrczogJWQgbGVuOiAlenVcbiIsIF9fZnVuY19fLCBkaXNrcywgYnl0ZXMpOwpAQCAtMzk0LDExICs0MTEsMTMgQEAKIAkgKi8KIAlpZiAoIXNjcmliYmxlKSB7CiAJCXZvaWQgKipwdHJzID0gKHZvaWQgKiopIGJsb2NrczsKLQkJaW50IGk7CiAKIAkJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKLQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKKwkJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkKKwkJCQlwdHJzW2ldID0gKHZvaWQqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwkJCWVsc2UKKwkJCQlwdHJzW2ldID0gcGFnZV9hZGRyZXNzKGJsb2Nrc1tpXSk7CiAKIAkJcmFpZDZfZGF0YXBfcmVjb3YoZGlza3MsIGJ5dGVzLCBmYWlsYSwgcHRycyk7CiAKQEAgLTQwNyw2ICs0MjYsMjAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJZ29vZF9zcmNzID0gMDsKKwlnb29kID0gLTE7CisJZm9yIChpID0gMDsgaSA8IGRpc2tzLTI7IGkrKykgeworCQlpZiAoaSA9PSBmYWlsYSkKKwkJCWNvbnRpbnVlOworCQlpZiAoYmxvY2tzW2ldKSB7CisJCQlnb29kID0gaTsKKwkJCWdvb2Rfc3JjcysrOworCQkJaWYgKGdvb2Rfc3JjcyA+IDEpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJQlVHX09OKGdvb2Rfc3JjcyA9PSAwKTsKKwogCXAgPSBibG9ja3NbZGlza3MtMl07CiAJcSA9IGJsb2Nrc1tkaXNrcy0xXTsKIApAQCAtNDE0LDE0ICs0NDcsMTMgQEAKIAkgKiBVc2UgdGhlIGRlYWQgZGF0YSBwYWdlIGFzIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBkZWx0YSBxCiAJICovCiAJZHEgPSBibG9ja3NbZmFpbGFdOwotCWJsb2Nrc1tmYWlsYV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwlibG9ja3NbZmFpbGFdID0gTlVMTDsKIAlibG9ja3NbZGlza3MtMV0gPSBkcTsKIAotCS8qIGluIHRoZSA0IGRpc2sgY2FzZSB3ZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhIHNpbmdsZSBzb3VyY2UKLQkgKiBtdWx0aXBsaWNhdGlvbgorCS8qIGluIHRoZSA0LWRpc2sgY2FzZSB3ZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhIHNpbmdsZSBzb3VyY2UKKwkgKiBtdWx0aXBsaWNhdGlvbiB3aXRoIHRoZSBvbmUgZ29vZCBkYXRhIGJsb2NrLgogCSAqLwotCWlmIChkaXNrcyA9PSA0KSB7Ci0JCWludCBnb29kID0gZmFpbGEgPT0gMCA/IDEgOiAwOworCWlmIChnb29kX3NyY3MgPT0gMSkgewogCQlzdHJ1Y3QgcGFnZSAqZyA9IGJsb2Nrc1tnb29kXTsKIAogCQlpbml0X2FzeW5jX3N1Ym1pdChzdWJtaXQsIEFTWU5DX1RYX0ZFTkNFLCB0eCwgTlVMTCwgTlVMTCwKZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYyBiL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYwppbmRleCBiNDU5YTkwLi43OTE4MmRjIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCkBAIC00NCwyMCArNDQsMjMgQEAKIAl2b2lkICpjYl9wYXJhbV9vcmlnID0gc3VibWl0LT5jYl9wYXJhbTsKIAllbnVtIGFzeW5jX3R4X2ZsYWdzIGZsYWdzX29yaWcgPSBzdWJtaXQtPmZsYWdzOwogCWVudW0gZG1hX2N0cmxfZmxhZ3MgZG1hX2ZsYWdzOwotCWludCB4b3Jfc3JjX2NudDsKKwlpbnQgeG9yX3NyY19jbnQgPSAwOwogCWRtYV9hZGRyX3QgZG1hX2Rlc3Q7CiAKIAkvKiBtYXAgdGhlIGRlc3QgYmlkcmVjdGlvbmFsIGluIGNhc2UgaXQgaXMgcmUtdXNlZCBhcyBhIHNvdXJjZSAqLwogCWRtYV9kZXN0ID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBkZXN0LCBvZmZzZXQsIGxlbiwgRE1BX0JJRElSRUNUSU9OQUwpOwogCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspIHsKIAkJLyogb25seSBtYXAgdGhlIGRlc3Qgb25jZSAqLworCQlpZiAoIXNyY19saXN0W2ldKQorCQkJY29udGludWU7CiAJCWlmICh1bmxpa2VseShzcmNfbGlzdFtpXSA9PSBkZXN0KSkgewotCQkJZG1hX3NyY1tpXSA9IGRtYV9kZXN0OworCQkJZG1hX3NyY1t4b3Jfc3JjX2NudCsrXSA9IGRtYV9kZXN0OwogCQkJY29udGludWU7CiAJCX0KLQkJZG1hX3NyY1tpXSA9IGRtYV9tYXBfcGFnZShkbWEtPmRldiwgc3JjX2xpc3RbaV0sIG9mZnNldCwKLQkJCQkJICBsZW4sIERNQV9UT19ERVZJQ0UpOworCQlkbWFfc3JjW3hvcl9zcmNfY250KytdID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBzcmNfbGlzdFtpXSwgb2Zmc2V0LAorCQkJCQkJICAgICAgbGVuLCBETUFfVE9fREVWSUNFKTsKIAl9CisJc3JjX2NudCA9IHhvcl9zcmNfY250OwogCiAJd2hpbGUgKHNyY19jbnQpIHsKIAkJc3VibWl0LT5mbGFncyA9IGZsYWdzX29yaWc7CkBAIC0xMjMsNyArMTI2LDcgQEAKIAkgICAgaW50IHNyY19jbnQsIHNpemVfdCBsZW4sIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCiB7CiAJaW50IGk7Ci0JaW50IHhvcl9zcmNfY250OworCWludCB4b3Jfc3JjX2NudCA9IDA7CiAJaW50IHNyY19vZmYgPSAwOwogCXZvaWQgKmRlc3RfYnVmOwogCXZvaWQgKipzcmNzOwpAQCAtMTM1LDggKzEzOCw5IEBACiAKIAkvKiBjb252ZXJ0IHRvIGJ1ZmZlciBwb2ludGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspCi0JCXNyY3NbaV0gPSBwYWdlX2FkZHJlc3Moc3JjX2xpc3RbaV0pICsgb2Zmc2V0OwotCisJCWlmIChzcmNfbGlzdFtpXSkKKwkJCXNyY3NbeG9yX3NyY19jbnQrK10gPSBwYWdlX2FkZHJlc3Moc3JjX2xpc3RbaV0pICsgb2Zmc2V0OworCXNyY19jbnQgPSB4b3Jfc3JjX2NudDsKIAkvKiBzZXQgZGVzdGluYXRpb24gYWRkcmVzcyAqLwogCWRlc3RfYnVmID0gcGFnZV9hZGRyZXNzKGRlc3QpICsgb2Zmc2V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IDBlZDQyZDguLjkzZDJjNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0yMTgsMTAgKzIxOCwxMCBAQAogCWRlcGVuZHMgb24gWDg2CiAJaGVscAogCSAgQUNQSSA0LjAgZGVmaW5lcyBwcm9jZXNzb3IgQWdncmVnYXRvciwgd2hpY2ggZW5hYmxlcyBPUyB0byBwZXJmb3JtCi0JICBzcGVjZmljIHByb2Nlc3NvciBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHRoYXQgYXBwbGllcyB0byBhbGwKKwkgIHNwZWNpZmljIHByb2Nlc3NvciBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHRoYXQgYXBwbGllcyB0byBhbGwKIAkgIHByb2Nlc3NvcnMgaW4gdGhlIHBsYXRmb3JtLiBDdXJyZW50bHkgb25seSBsb2dpY2FsIHByb2Nlc3NvciBpZGxpbmcKIAkgIGlzIGRlZmluZWQsIHdoaWNoIGlzIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi4gVGhpcyBkcml2ZXIKLQkgIHN1cHBvcnQgdGhlIG5ldyBkZXZpY2UuCisJICBzdXBwb3J0cyB0aGUgbmV3IGRldmljZS4KIAogY29uZmlnIEFDUElfVEhFUk1BTAogCXRyaXN0YXRlICJUaGVybWFsIFpvbmUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWMuYyBiL2RyaXZlcnMvYWNwaS9hYy5jCmluZGV4IDk4Yjk2OTAuLmI2ZWQ2MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hYy5jCkBAIC0yNDUsNiArMjQ1LDcgQEAKIAkJYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChkZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCiAJCQkJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmRldiksIGV2ZW50LAogCQkJCQkJICAodTMyKSBhYy0+c3RhdGUpOworCQlhY3BpX25vdGlmaWVyX2NhbGxfY2hhaW4oZGV2aWNlLCBldmVudCwgKHUzMikgYWMtPnN0YXRlKTsKICNpZmRlZiBDT05GSUdfQUNQSV9TWVNGU19QT1dFUgogCQlrb2JqZWN0X3VldmVudCgmYWMtPmNoYXJnZXIuZGV2LT5rb2JqLCBLT0JKX0NIQU5HRSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXR0b24uYyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwppbmRleCA5MzM1Yjg3Li4wYzljNmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCkBAIC0yNTEsNiArMjUxLDkgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBsb25nIHN0YXRlOwogCisJaWYgKCFsaWRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihsaWRfZGV2aWNlLT5oYW5kbGUsICJfTElEIiwgTlVMTCwKIAkJCQkgICAgICAgJnN0YXRlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYyBiL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCmluZGV4IDMxMTIyMjEuLjFhZjgwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCkBAIC0zODksNiArMzg5LDE3IEBACiAKIAkJcGJ1cyA9IHBkZXYtPnN1Ym9yZGluYXRlOwogCQlwY2lfZGV2X3B1dChwZGV2KTsKKworCQkvKgorCQkgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZm9yIGEgbm9uLVBDSSBkZXZpY2UgdGhhdCBoYXMgYQorCQkgKiBQQ0kgcGFyZW50IChlZy4gYSBkaXNrIHVuZGVyIGEgUENJIFNBVEEgY29udHJvbGxlcikuICBJbiB0aGF0CisJCSAqIGNhc2UgcGRldi0+c3Vib3JkaW5hdGUgd2lsbCBiZSBOVUxMIGZvciB0aGUgcGFyZW50LgorCQkgKi8KKwkJaWYgKCFwYnVzKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJOb3QgYSBQQ0ktdG8tUENJIGJyaWRnZVxuIik7CisJCQlwZGV2ID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CiAJfQogb3V0OgogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCB0bXAsICZkZXZpY2VfbGlzdCwgbm9kZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggZjZlNTRiZi4uNjRlM2M1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTExMDksNyArMTEwOSwxMiBAQAogCSAqLwogCiAJLyogRG9lcyB0aGlzIGRldmljZSBzdXBwb3J0IHZpZGVvIHN3aXRjaGluZz8gKi8KLQlpZiAodmlkZW8tPmNhcC5fRE9TKSB7CisJaWYgKHZpZGVvLT5jYXAuX0RPUyB8fCB2aWRlby0+Y2FwLl9ET0QpIHsKKwkJaWYgKCF2aWRlby0+Y2FwLl9ET1MpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgRldfQlVHCisJCQkJIkFDUEkoJXMpIGRlZmluZXMgX0RPRCBidXQgbm90IF9ET1NcbiIsCisJCQkJYWNwaV9kZXZpY2VfYmlkKHZpZGVvLT5kZXZpY2UpKTsKKwkJfQogCQl2aWRlby0+ZmxhZ3MubXVsdGloZWFkID0gMTsKIAkJc3RhdHVzID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMgYi9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKaW5kZXggNzAzMmYyNS4uNTc1NTkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwpAQCAtODQsNyArODQsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIERvZXMgdGhpcyBkZXZpY2UgYWJsZSB0byBzdXBwb3J0IHZpZGVvIHN3aXRjaGluZyA/ICovCi0JaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRE9EIiwgJmhfZHVtbXkpKSAmJgorCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPRCIsICZoX2R1bW15KSkgfHwKIAkgICAgQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ET1MiLCAmaF9kdW1teSkpKQogCQl2aWRlb19jYXBzIHw9IEFDUElfVklERU9fT1VUUFVUX1NXSVRDSElORzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IGIxYTI1NzcuLmEwNmY1ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTU3NSw3ICs1NzUsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzOTUpLCBib2FyZF9haGNpX3NiNzAwIH0sIC8qIEFUSSBTQjcwMC84MDAgKi8KIAogCS8qIEFNRCAqLwotCXsgUENJX1ZERVZJQ0UoQU1ELCAweDc4MDApLCBib2FyZF9haGNpIH0sIC8qIEFNRCBTQjkwMCAqLworCXsgUENJX1ZERVZJQ0UoQU1ELCAweDc4MDApLCBib2FyZF9haGNpIH0sIC8qIEFNRCBIdWRzb24tMiAqLwogCS8qIEFNRCBpcyB1c2luZyBSQUlEIGNsYXNzIG9ubHkgZm9yIGFoY2kgY29udHJvbGxlcnMgKi8KIAl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCSAgUENJX0NMQVNTX1NUT1JBR0VfUkFJRCA8PCA4LCAweGZmZmZmZiwgYm9hcmRfYWhjaSB9LApAQCAtNjA1LDYgKzYwNSw3IEBACiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1OSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1YSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1YiksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDY3ICovCisJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU4MCksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIExpbnV4IElEICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMCksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMSksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDdmMiksIGJvYXJkX2FoY2lfeWVzbmNxIH0sCS8qIE1DUDczICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCBiNTI1YTA5Li5kN2YwZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTUwMjgsMTIgKzUwMjgsMTQgQEAKIAkJCXFjLT5mbGFncyB8PSBBVEFfUUNGTEFHX0ZBSUxFRDsKIAogCQlpZiAodW5saWtlbHkocWMtPmZsYWdzICYgQVRBX1FDRkxBR19GQUlMRUQpKSB7Ci0JCQlpZiAoIWF0YV90YWdfaW50ZXJuYWwocWMtPnRhZykpIHsKLQkJCQkvKiBhbHdheXMgZmlsbCByZXN1bHQgVEYgZm9yIGZhaWxlZCBxYyAqLwotCQkJCWZpbGxfcmVzdWx0X3RmKHFjKTsKKwkJCS8qIGFsd2F5cyBmaWxsIHJlc3VsdCBURiBmb3IgZmFpbGVkIHFjICovCisJCQlmaWxsX3Jlc3VsdF90ZihxYyk7CisKKwkJCWlmICghYXRhX3RhZ19pbnRlcm5hbChxYy0+dGFnKSkKIAkJCQlhdGFfcWNfc2NoZWR1bGVfZWgocWMpOwotCQkJCXJldHVybjsKLQkJCX0KKwkJCWVsc2UKKwkJCQlfX2F0YV9xY19jb21wbGV0ZShxYyk7CisJCQlyZXR1cm47CiAJCX0KIAogCQlXQVJOX09OX09OQ0UoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19GUk9aRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwppbmRleCAwYTk3ODIyLi5iYmEyYWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwpAQCAtMjk4MSwxMiArMjk4MSwxNCBAQAogCSAqIGRldmljZSBkZXRlY3Rpb24gbWVzc2FnZXMgYmFja3dhcmRzLgogCSAqLwogCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpIHsKLQkJaWYgKCEobmV3X21hc2sgJiAoMSA8PCBkZXYtPmRldm5vKSkgfHwKLQkJICAgIGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9QTVApCisJCWlmICghKG5ld19tYXNrICYgKDEgPDwgZGV2LT5kZXZubykpKQogCQkJY29udGludWU7CiAKIAkJZGV2LT5jbGFzcyA9IGVoYy0+Y2xhc3Nlc1tkZXYtPmRldm5vXTsKIAorCQlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX1BNUCkKKwkJCWNvbnRpbnVlOworCiAJCWVoYy0+aS5mbGFncyB8PSBBVEFfRUhJX1BSSU5USU5GTzsKIAkJcmMgPSBhdGFfZGV2X2NvbmZpZ3VyZShkZXYpOwogCQllaGMtPmkuZmxhZ3MgJj0gfkFUQV9FSElfUFJJTlRJTkZPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKaW5kZXggYWE0YjNmNi4uYWU0NDU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX0lERSksIH0sCiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9JREUpLCB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfSURFKSwgfSwKLQl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfSURFKSwgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9JREUpLCB9LAogCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCmluZGV4IGY0OTgxNGQuLjNiYmVkODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYwpAQCAtMjM1LDggKzIzNSw3IEBACiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZzYzEyMDBfcG9ydF9vcHMKIAl9OwotCS8qIENhbid0IGVuYWJsZSBwb3J0IDIgeWV0LCBzZWUgdG9wIGNvbW1lbnRzICovCi0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKIAlyZXR1cm4gYXRhX3BjaV9zZmZfaW5pdF9vbmUoZGV2LCBwcGksICZzYzEyMDBfc2h0LCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IDQ1NjU3Y2EuLjg4OTg0YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJeyAidnQ4MjUxIiwJUENJX0RFVklDRV9JRF9WSUFfODI1MSwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAiY3g3MDAiLAlQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCwgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfU0FUQV9QQVRBIH0sCiAJeyAidnQ2NDEwIiwJUENJX0RFVklDRV9JRF9WSUFfNjQxMCwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVMgfSwKLQl7ICJ2dDY0MTUiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDE1LCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAorCXsgInZ0NjQxNSIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTUsICAgICAweDAwLCAweGZmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTIH0sCiAJeyAidnQ4MjM3YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdBLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzcsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IDE3ZjlmZjkuLjZmNTA5M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTEzODIsNiArMTM4MiwyNSBAQAogCSAqLwogCWlmIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX0RFTEFZRURfRUgpCiAJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKworCS8qIFBJTyBjb21tYW5kcyBuZWVkIGV4Y2x1c2l2ZSBsaW5rOiBubyBvdGhlciBjb21tYW5kcyBbRE1BIG9yIFBJT10KKwkgKiBjYW4gcnVuIGNvbmN1cnJlbnRseS4KKwkgKiBzZXQgZXhjbF9saW5rIHdoZW4gd2Ugd2FudCB0byBzZW5kIGEgUElPIGNvbW1hbmQgaW4gRE1BIG1vZGUKKwkgKiBvciBhIG5vbi1OQ1EgY29tbWFuZCBpbiBOQ1EgbW9kZS4KKwkgKiBXaGVuIHdlIHJlY2VpdmUgYSBjb21tYW5kIGZyb20gdGhhdCBsaW5rLCBhbmQgdGhlcmUgYXJlIG5vCisJICogb3V0c3RhbmRpbmcgY29tbWFuZHMsIG1hcmsgYSBmbGFnIHRvIGNsZWFyIGV4Y2xfbGluayBhbmQgbGV0CisJICogdGhlIGNvbW1hbmQgZ28gdGhyb3VnaC4KKwkgKi8KKwlpZiAodW5saWtlbHkoYXAtPmV4Y2xfbGluaykpIHsKKwkJaWYgKGxpbmsgPT0gYXAtPmV4Y2xfbGluaykgeworCQkJaWYgKGFwLT5ucl9hY3RpdmVfbGlua3MpCisJCQkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCQkJcWMtPmZsYWdzIHw9IEFUQV9RQ0ZMQUdfQ0xFQVJfRVhDTDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UKKwkJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwl9CisKIAkvKgogCSAqIElmIHRoZSBwb3J0IGlzIGNvbXBsZXRlbHkgaWRsZSwgdGhlbiBhbGxvdyB0aGUgbmV3IHFjLgogCSAqLwpAQCAtMTM5NSw4ICsxNDE0LDE0IEBACiAJICogZG9lc24ndCBhbGxvdyBpdC4KIAkgKi8KIAlpZiAoKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfRURNQV9FTikgJiYKLQkgICAgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfTkNRX0VOKSAmJiBhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpCi0JCXJldHVybiAwOworCSAgICAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pKSB7CisJCWlmIChhdGFfaXNfbmNxKHFjLT50Zi5wcm90b2NvbCkpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSB7CisJCQlhcC0+ZXhjbF9saW5rID0gbGluazsKKwkJCXJldHVybiBBVEFfREVGRVJfUE9SVDsKKwkJfQorCX0KIAogCXJldHVybiBBVEFfREVGRVJfUE9SVDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCA4NmE0MDU4Li4xZWI0ZTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC0xNTk0LDkgKzE1OTQsMjEgQEAKIAkgICAgIWF0YV9kZXZfZW5hYmxlZChsaW5rLT5kZXZpY2UpKQogCQlzYXRhX2xpbmtfaGFyZHJlc2V0KGxpbmssIHNhdGFfZGViX3RpbWluZ19ob3RwbHVnLCBkZWFkbGluZSwKIAkJCQkgICAgTlVMTCwgTlVMTCk7Ci0JZWxzZSBpZiAoIShlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX1FVSUVUKSkKLQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fSU5GTywKLQkJCQkibnY6IHNraXBwaW5nIGhhcmRyZXNldCBvbiBvY2N1cGllZCBwb3J0XG4iKTsKKwllbHNlIHsKKwkJY29uc3QgdW5zaWduZWQgbG9uZyAqdGltaW5nID0gc2F0YV9laGNfZGViX3RpbWluZyhlaGMpOworCQlpbnQgcmM7CisKKwkJaWYgKCEoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9RVUlFVCkpCisJCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9JTkZPLCAibnY6IHNraXBwaW5nICIKKwkJCQkJImhhcmRyZXNldCBvbiBvY2N1cGllZCBwb3J0XG4iKTsKKworCQkvKiBtYWtlIHN1cmUgdGhlIGxpbmsgaXMgb25saW5lICovCisJCXJjID0gc2F0YV9saW5rX3Jlc3VtZShsaW5rLCB0aW1pbmcsIGRlYWRsaW5lKTsKKwkJLyogd2hpbmUgYWJvdXQgcGh5IHJlc3VtZSBmYWlsdXJlIGJ1dCBwcm9jZWVkICovCisJCWlmIChyYyAmJiByYyAhPSAtRU9QTk9UU1VQUCkKKwkJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX1dBUk5JTkcsICJmYWlsZWQgdG8gcmVzdW1lICIKKwkJCQkJImxpbmsgKGVycm5vPSVkKVxuIiwgcmMpOworCX0KIAogCS8qIGRldmljZSBzaWduYXR1cmUgYWNxdWlzaXRpb24gaXMgdW5yZWxpYWJsZSAqLwogCXJldHVybiAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2J1cy5jIGIvZHJpdmVycy9iYXNlL2J1cy5jCmluZGV4IDk3M2JmMmEuLjYzYzE0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9idXMuYworKysgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKQEAgLTY4OSwxNSArNjg5LDE5IEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRyaXZlcl9hZGRfYXR0cnMoJXMpIGZhaWxlZFxuIiwKIAkJCV9fZnVuY19fLCBkcnYtPm5hbWUpOwogCX0KLQllcnJvciA9IGFkZF9iaW5kX2ZpbGVzKGRydik7Ci0JaWYgKGVycm9yKSB7Ci0JCS8qIERpdHRvICovCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGFkZF9iaW5kX2ZpbGVzKCVzKSBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXywgZHJ2LT5uYW1lKTsKKworCWlmICghZHJ2LT5zdXBwcmVzc19iaW5kX2F0dHJzKSB7CisJCWVycm9yID0gYWRkX2JpbmRfZmlsZXMoZHJ2KTsKKwkJaWYgKGVycm9yKSB7CisJCQkvKiBEaXR0byAqLworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYWRkX2JpbmRfZmlsZXMoJXMpIGZhaWxlZFxuIiwKKwkJCQlfX2Z1bmNfXywgZHJ2LT5uYW1lKTsKKwkJfQogCX0KIAogCWtvYmplY3RfdWV2ZW50KCZwcml2LT5rb2JqLCBLT0JKX0FERCk7CiAJcmV0dXJuIDA7CisKIG91dF91bnJlZ2lzdGVyOgogCWtmcmVlKGRydi0+cCk7CiAJZHJ2LT5wID0gTlVMTDsKQEAgLTcyMCw3ICs3MjQsOCBAQAogCWlmICghZHJ2LT5idXMpCiAJCXJldHVybjsKIAotCXJlbW92ZV9iaW5kX2ZpbGVzKGRydik7CisJaWYgKCFkcnYtPnN1cHByZXNzX2JpbmRfYXR0cnMpCisJCXJlbW92ZV9iaW5kX2ZpbGVzKGRydik7CiAJZHJpdmVyX3JlbW92ZV9hdHRycyhkcnYtPmJ1cywgZHJ2KTsKIAlkcml2ZXJfcmVtb3ZlX2ZpbGUoZHJ2LCAmZHJpdmVyX2F0dHJfdWV2ZW50KTsKIAlrbGlzdF9yZW1vdmUoJmRydi0+cC0+a25vZGVfYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kcml2ZXIuYyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwppbmRleCBlZDJlYmQzLi5mMzY3ODg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9iYXNlL2RyaXZlci5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJcHV0X2RyaXZlcihvdGhlcik7CiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IERyaXZlciAnJXMnIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCwgIgogCQkJImFib3J0aW5nLi4uXG4iLCBkcnYtPm5hbWUpOwotCQlyZXR1cm4gLUVFWElTVDsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlyZXQgPSBidXNfYWRkX2RyaXZlcihkcnYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCBlZDE1NmExMy4uNGZhOTU0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTUyMSwxMSArNTIxLDE1IEBACiB7CiAJaW50IHJldHZhbCwgY29kZTsKIAorCS8qIG1ha2Ugc3VyZSBkcml2ZXIgd29uJ3QgaGF2ZSBiaW5kL3VuYmluZCBhdHRyaWJ1dGVzICovCisJZHJ2LT5kcml2ZXIuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWU7CisKIAkvKiB0ZW1wb3Jhcnkgc2VjdGlvbiB2aW9sYXRpb24gZHVyaW5nIHByb2JlKCkgKi8KIAlkcnYtPnByb2JlID0gcHJvYmU7CiAJcmV0dmFsID0gY29kZSA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihkcnYpOwogCi0JLyogRml4dXAgdGhhdCBzZWN0aW9uIHZpb2xhdGlvbiwgYmVpbmcgcGFyYW5vaWQgYWJvdXQgY29kZSBzY2FubmluZworCS8qCisJICogRml4dXAgdGhhdCBzZWN0aW9uIHZpb2xhdGlvbiwgYmVpbmcgcGFyYW5vaWQgYWJvdXQgY29kZSBzY2FubmluZwogCSAqIHRoZSBsaXN0IG9mIGRyaXZlcnMgaW4gb3JkZXIgdG8gcHJvYmUgbmV3IGRldmljZXMuICBDaGVjayB0byBzZWUKIAkgKiBpZiB0aGUgcHJvYmUgd2FzIHN1Y2Nlc3NmdWwsIGFuZCBtYWtlIHN1cmUgYW55IGZvcmNlZCBwcm9iZXMgb2YKIAkgKiBuZXcgZGV2aWNlcyBmYWlsLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IGZiNWJlMmQuLjYzOTllNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTY4LDYgKzY4LDEyIEBACiBNT0RVTEVfVkVSU0lPTigiMy42LjIwIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKK3N0YXRpYyBpbnQgY2Npc3NfYWxsb3dfaHBzYTsKK21vZHVsZV9wYXJhbShjY2lzc19hbGxvd19ocHNhLCBpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGNjaXNzX2FsbG93X2hwc2EsCisJIlByZXZlbnQgY2Npc3MgZHJpdmVyIGZyb20gYWNjZXNzaW5nIGhhcmR3YXJlIGtub3duIHRvIGJlICIKKwkiIHN1cHBvcnRlZCBieSB0aGUgaHBzYSBkcml2ZXIiKTsKKwogI2luY2x1ZGUgImNjaXNzX2NtZC5oIgogI2luY2x1ZGUgImNjaXNzLmgiCiAjaW5jbHVkZSA8bGludXgvY2Npc3NfaW9jdGwuaD4KQEAgLTEwMSw4ICsxMDcsNiBAQAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQ5fSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0QX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNEJ9LAotCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0FOWV9JRCwJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKLQkJUENJX0NMQVNTX1NUT1JBR0VfUkFJRCA8PCA4LCAweGZmZmYgPDwgOCwgMH0sCiAJezAsfQogfTsKIApAQCAtMTIzLDggKzEyNyw2IEBACiAJezB4NDA5RDBFMTEsICJTbWFydCBBcnJheSA2NDAwIEVNIiwgJlNBNV9hY2Nlc3N9LAogCXsweDQwOTEwRTExLCAiU21hcnQgQXJyYXkgNmkiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIyNTEwM0MsICJTbWFydCBBcnJheSBQNjAwIiwgJlNBNV9hY2Nlc3N9LAotCXsweDMyMjMxMDNDLCAiU21hcnQgQXJyYXkgUDgwMCIsICZTQTVfYWNjZXNzfSwKLQl7MHgzMjM0MTAzQywgIlNtYXJ0IEFycmF5IFA0MDAiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIzNTEwM0MsICJTbWFydCBBcnJheSBQNDAwaSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjExMTAzQywgIlNtYXJ0IEFycmF5IEUyMDBpIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMTIxMDNDLCAiU21hcnQgQXJyYXkgRTIwMCIsICZTQTVfYWNjZXNzfSwKQEAgLTEzMiw2ICsxMzQsMTAgQEAKIAl7MHgzMjE0MTAzQywgIlNtYXJ0IEFycmF5IEUyMDBpIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMTUxMDNDLCAiU21hcnQgQXJyYXkgRTIwMGkiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIzNzEwM0MsICJTbWFydCBBcnJheSBFNTAwIiwgJlNBNV9hY2Nlc3N9LAorLyogY29udHJvbGxlcnMgYmVsb3cgdGhpcyBsaW5lIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGUgaHBzYSBkcml2ZXIuICovCisjZGVmaW5lIEhQU0FfQk9VTkRBUlkgMHgzMjIzMTAzQworCXsweDMyMjMxMDNDLCAiU21hcnQgQXJyYXkgUDgwMCIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjM0MTAzQywgIlNtYXJ0IEFycmF5IFA0MDAiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIzRDEwM0MsICJTbWFydCBBcnJheSBQNzAwbSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjQxMTAzQywgIlNtYXJ0IEFycmF5IFAyMTIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0MzEwM0MsICJTbWFydCBBcnJheSBQNDEwIiwgJlNBNV9hY2Nlc3N9LApAQCAtMTQwLDcgKzE0Niw2IEBACiAJezB4MzI0OTEwM0MsICJTbWFydCBBcnJheSBQODEyIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNEExMDNDLCAiU21hcnQgQXJyYXkgUDcxMm0iLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0QjEwM0MsICJTbWFydCBBcnJheSBQNzExbSIsICZTQTVfYWNjZXNzfSwKLQl7MHhGRkZGMTAzQywgIlVua25vd24gU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCiB9OwogCiAvKiBIb3cgbG9uZyB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciBib2FyZCB0byBnbyBpbnRvIHNpbXBsZSBtb2RlICovCkBAIC0zNzU0LDcgKzM3NTksMjcgQEAKIAlfX3U2NCBjZmdfb2Zmc2V0OwogCV9fdTMyIGNmZ19iYXNlX2FkZHI7CiAJX191NjQgY2ZnX2Jhc2VfYWRkcl9pbmRleDsKLQlpbnQgaSwgZXJyOworCWludCBpLCBwcm9kX2luZGV4LCBlcnI7CisKKwlzdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwlzdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKKwlib2FyZF9pZCA9ICgoKF9fdTMyKSAoc3Vic3lzdGVtX2RldmljZV9pZCA8PCAxNikgJiAweGZmZmYwMDAwKSB8CisJCSAgICBzdWJzeXN0ZW1fdmVuZG9yX2lkKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2R1Y3RzKTsgaSsrKSB7CisJCS8qIFN0YW5kIGFzaWRlIGZvciBocHNhIGRyaXZlciBvbiByZXF1ZXN0ICovCisJCWlmIChjY2lzc19hbGxvd19ocHNhICYmIHByb2R1Y3RzW2ldLmJvYXJkX2lkID09IEhQU0FfQk9VTkRBUlkpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKGJvYXJkX2lkID09IHByb2R1Y3RzW2ldLmJvYXJkX2lkKQorCQkJYnJlYWs7CisJfQorCXByb2RfaW5kZXggPSBpOworCWlmIChwcm9kX2luZGV4ID09IEFSUkFZX1NJWkUocHJvZHVjdHMpKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkidW5yZWNvZ25pemVkIGJvYXJkIElEOiAweCUwOGx4LCBpZ25vcmluZy5cbiIsCisJCQkodW5zaWduZWQgbG9uZykgYm9hcmRfaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAkvKiBjaGVjayB0byBzZWUgaWYgY29udHJvbGxlciBoYXMgYmVlbiBkaXNhYmxlZCAqLwogCS8qIEJFRk9SRSB0cnlpbmcgdG8gZW5hYmxlIGl0ICovCkBAIC0zNzc4LDExICszODAzLDYgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlzdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKLQlzdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKLQlib2FyZF9pZCA9ICgoKF9fdTMyKSAoc3Vic3lzdGVtX2RldmljZV9pZCA8PCAxNikgJiAweGZmZmYwMDAwKSB8Ci0JCSAgICBzdWJzeXN0ZW1fdmVuZG9yX2lkKTsKLQogI2lmZGVmIENDSVNTX0RFQlVHCiAJcHJpbnRrKCJjb21tYW5kID0gJXhcbiIsIGNvbW1hbmQpOwogCXByaW50aygiaXJxID0gJXhcbiIsIHBkZXYtPmlycSk7CkBAIC0zODY4LDE0ICszODg4LDkgQEAKIAkgKiBsZWF2ZSBhIGxpdHRsZSByb29tIGZvciBpb2N0bCBjYWxscy4KIAkgKi8KIAljLT5tYXhfY29tbWFuZHMgPSByZWFkbCgmKGMtPmNmZ3RhYmxlLT5DbWRzT3V0TWF4KSk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvZHVjdHMpOyBpKyspIHsKLQkJaWYgKGJvYXJkX2lkID09IHByb2R1Y3RzW2ldLmJvYXJkX2lkKSB7Ci0JCQljLT5wcm9kdWN0X25hbWUgPSBwcm9kdWN0c1tpXS5wcm9kdWN0X25hbWU7Ci0JCQljLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW2ldLmFjY2Vzcyk7Ci0JCQljLT5ucl9jbWRzID0gYy0+bWF4X2NvbW1hbmRzIC0gNDsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCWMtPnByb2R1Y3RfbmFtZSA9IHByb2R1Y3RzW3Byb2RfaW5kZXhdLnByb2R1Y3RfbmFtZTsKKwljLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW3Byb2RfaW5kZXhdLmFjY2Vzcyk7CisJYy0+bnJfY21kcyA9IGMtPm1heF9jb21tYW5kcyAtIDQ7CiAJaWYgKChyZWFkYigmYy0+Y2ZndGFibGUtPlNpZ25hdHVyZVswXSkgIT0gJ0MnKSB8fAogCSAgICAocmVhZGIoJmMtPmNmZ3RhYmxlLT5TaWduYXR1cmVbMV0pICE9ICdJJykgfHwKIAkgICAgKHJlYWRiKCZjLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzJdKSAhPSAnUycpIHx8CkBAIC0zODg0LDI3ICszODk5LDYgQEAKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KLQkvKiBXZSBkaWRuJ3QgZmluZCB0aGUgY29udHJvbGxlciBpbiBvdXIgbGlzdC4gV2Uga25vdyB0aGUKLQkgKiBzaWduYXR1cmUgaXMgdmFsaWQuIElmIGl0J3MgYW4gSFAgZGV2aWNlIGxldCdzIHRyeSB0bwotCSAqIGJpbmQgdG8gdGhlIGRldmljZSBhbmQgZmlyZSBpdCB1cC4gT3RoZXJ3aXNlIHdlIGJhaWwuCi0JICovCi0JaWYgKGkgPT0gQVJSQVlfU0laRShwcm9kdWN0cykpIHsKLQkJaWYgKHN1YnN5c3RlbV92ZW5kb3JfaWQgPT0gUENJX1ZFTkRPUl9JRF9IUCkgewotCQkJYy0+cHJvZHVjdF9uYW1lID0gcHJvZHVjdHNbaS0xXS5wcm9kdWN0X25hbWU7Ci0JCQljLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW2ktMV0uYWNjZXNzKTsKLQkJCWMtPm5yX2NtZHMgPSBjLT5tYXhfY29tbWFuZHMgLSA0OwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IFRoaXMgaXMgYW4gdW5rbm93biAiCi0JCQkJIlNtYXJ0IEFycmF5IGNvbnRyb2xsZXIuXG4iCi0JCQkJImNjaXNzOiBQbGVhc2UgdXBkYXRlIHRvIHRoZSBsYXRlc3QgZHJpdmVyICIKLQkJCQkiYXZhaWxhYmxlIGZyb20gd3d3LmhwLmNvbS5cbiIpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IFNvcnJ5LCBJIGRvbid0IGtub3cgaG93IgotCQkJCSIgdG8gYWNjZXNzIHRoZSBTbWFydCBBcnJheSBjb250cm9sbGVyICUwOGx4XG4iCi0JCQkJCSwgKHVuc2lnbmVkIGxvbmcpYm9hcmRfaWQpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKLQkJfQotCX0KICNpZmRlZiBDT05GSUdfWDg2CiAJewogCQkvKiBOZWVkIHRvIGVuYWJsZSBwcmVmZXRjaCBpbiB0aGUgU0NTSSBjb3JlIGZvciA2NDAwIGluIHg4NiAqLwpAQCAtNDI1NCw3ICs0MjQ4LDcgQEAKIAltdXRleF9pbml0KCZoYmFbaV0tPmJ1c3lfc2h1dHRpbmdfZG93bik7CiAKIAlpZiAoY2Npc3NfcGNpX2luaXQoaGJhW2ldLCBwZGV2KSAhPSAwKQotCQlnb3RvIGNsZWFuMDsKKwkJZ290byBjbGVhbl9ub19yZWxlYXNlX3JlZ2lvbnM7CiAKIAlzcHJpbnRmKGhiYVtpXS0+ZGV2bmFtZSwgImNjaXNzJWQiLCBpKTsKIAloYmFbaV0tPmN0bHIgPSBpOwpAQCAtNDM5MSwxMyArNDM4NSwxNCBAQAogY2xlYW4xOgogCWNjaXNzX2Rlc3Ryb3lfaGJhX3N5c2ZzX2VudHJ5KGhiYVtpXSk7CiBjbGVhbjA6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2NsZWFuX25vX3JlbGVhc2VfcmVnaW9uczoKIAloYmFbaV0tPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKIAogCS8qCiAJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCiAJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCiAJICovCi0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZnJlZV9oYmEoaSk7CiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCBlZGRhOWVhLi5iZDExMmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtOTQ5LDcgKzk0OSw3IEBACiAJbG8tPmxvX3N0YXRlID0gTG9fdW5ib3VuZDsKIAkvKiBUaGlzIGlzIHNhZmU6IG9wZW4oKSBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlLiAqLwogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotCWlmIChtYXhfcGFydCA+IDApCisJaWYgKG1heF9wYXJ0ID4gMCAmJiBiZGV2KQogCQlpb2N0bF9ieV9iZGV2KGJkZXYsIEJMS1JSUEFSVCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwppbmRleCA0M2YxOTM4Li41MTA0MmYwYmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwpAQCAtMyw3ICszLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fYmxrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIApAQCAtMTgzLDM0ICsxODIsNiBAQAogCQl2YmxrLT52cS0+dnFfb3BzLT5raWNrKHZibGstPnZxKTsKIH0KIAotLyogcmV0dXJuIEFUQSBpZGVudGlmeSBkYXRhCi0gKi8KLXN0YXRpYyBpbnQgdmlydGJsa19pZGVudGlmeShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdm9pZCAqYXJncCkKLXsKLQlzdHJ1Y3QgdmlydGlvX2JsayAqdmJsayA9IGRpc2stPnByaXZhdGVfZGF0YTsKLQl2b2lkICpvcGFxdWU7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQlvcGFxdWUgPSBrbWFsbG9jKFZJUlRJT19CTEtfSURfQllURVMsIEdGUF9LRVJORUwpOwotCWlmICghb3BhcXVlKQotCQlnb3RvIG91dDsKLQotCWVyciA9IHZpcnRpb19jb25maWdfYnVmKHZibGstPnZkZXYsIFZJUlRJT19CTEtfRl9JREVOVElGWSwKLQkJb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19ibGtfY29uZmlnLCBpZGVudGlmeSksIG9wYXF1ZSwKLQkJVklSVElPX0JMS19JRF9CWVRFUyk7Ci0KLQlpZiAoZXJyKQotCQlnb3RvIG91dF9rZnJlZTsKLQotCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgb3BhcXVlLCBWSVJUSU9fQkxLX0lEX0JZVEVTKSkKLQkJZXJyID0gLUVGQVVMVDsKLQotb3V0X2tmcmVlOgotCWtmcmVlKG9wYXF1ZSk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIHZvaWQgdmlydGJsa19wcmVwYXJlX2ZsdXNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogewogCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9MSU5VWF9CTE9DSzsKQEAgLTIyMiwxMCArMTkzLDYgQEAKIHsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7CiAJc3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSBkaXNrLT5wcml2YXRlX2RhdGE7Ci0Jdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilkYXRhOwotCi0JaWYgKGNtZCA9PSBIRElPX0dFVF9JREVOVElUWSkKLQkJcmV0dXJuIHZpcnRibGtfaWRlbnRpZnkoZGlzaywgYXJncCk7CiAKIAkvKgogCSAqIE9ubHkgYWxsb3cgdGhlIGdlbmVyaWMgU0NTSSBpb2N0bHMgaWYgdGhlIGhvc3QgY2FuIHN1cHBvcnQgaXQuCkBAIC0yMzMsNyArMjAwLDggQEAKIAlpZiAoIXZpcnRpb19oYXNfZmVhdHVyZSh2YmxrLT52ZGV2LCBWSVJUSU9fQkxLX0ZfU0NTSSkpCiAJCXJldHVybiAtRU5PVFRZOwogCi0JcmV0dXJuIHNjc2lfY21kX2lvY3RsKGRpc2stPnF1ZXVlLCBkaXNrLCBtb2RlLCBjbWQsIGFyZ3ApOworCXJldHVybiBzY3NpX2NtZF9pb2N0bChkaXNrLT5xdWV1ZSwgZGlzaywgbW9kZSwgY21kLAorCQkJICAgICAgKHZvaWQgX191c2VyICopZGF0YSk7CiB9CiAKIC8qIFdlIHByb3ZpZGUgZ2V0Z2VvIG9ubHkgdG8gcGxlYXNlIHNvbWUgb2xkIGJvb3Rsb2FkZXIvcGFydGl0aW9uaW5nIHRvb2xzICovCkBAIC0zMzIsNyArMzAwLDYgQEAKIAl9CiAKIAl2YmxrLT5kaXNrLT5xdWV1ZS0+cXVldWVkYXRhID0gdmJsazsKLQlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX1ZJUlQsIHZibGstPmRpc2stPnF1ZXVlKTsKIAogCWlmIChpbmRleCA8IDI2KSB7CiAJCXNwcmludGYodmJsay0+ZGlzay0+ZGlza19uYW1lLCAidmQlYyIsICdhJyArIGluZGV4ICUgMjYpOwpAQCAtNDQ1LDcgKzQxMiw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7CiAJVklSVElPX0JMS19GX0JBUlJJRVIsIFZJUlRJT19CTEtfRl9TRUdfTUFYLCBWSVJUSU9fQkxLX0ZfU0laRV9NQVgsCiAJVklSVElPX0JMS19GX0dFT01FVFJZLCBWSVJUSU9fQkxLX0ZfUk8sIFZJUlRJT19CTEtfRl9CTEtfU0laRSwKLQlWSVJUSU9fQkxLX0ZfU0NTSSwgVklSVElPX0JMS19GX0lERU5USUZZLCBWSVJUSU9fQkxLX0ZfRkxVU0gKKwlWSVJUSU9fQkxLX0ZfU0NTSSwgVklSVElPX0JMS19GX0ZMVVNICiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwppbmRleCAwOGE2ZjUwLi42YWFkOTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtMzIzLDcgKzMyMyw3IEBACiAKIGNvbmZpZyBTWAogCXRyaXN0YXRlICJTcGVjaWFsaXggU1ggKGFuZCBTSSkgY2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIChQQ0kgfHwgRUlTQSB8fCBJU0EpCisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgKFBDSSB8fCBFSVNBIHx8IElTQSkgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFNYIGFuZCBTSSBtdWx0aXBvcnQgc2VyaWFsIGNhcmRzLgogCSAgUGxlYXNlIHJlYWQgdGhlIGZpbGUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zZXJpYWwvc3gudHh0PiBmb3IgZGV0YWlscy4KQEAgLTMzNCw3ICszMzQsNyBAQAogCiBjb25maWcgUklPCiAJdHJpc3RhdGUgIlNwZWNpYWxpeCBSSU8gc3lzdGVtIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQKKwlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRCAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgU3BlY2lhbGl4IFJJTywgYSBzbWFydCBzZXJpYWwgY2FyZCB3aGljaAogCSAgZHJpdmVzIGFuIG91dGJvYXJkIGJveCB0aGF0IGNhbiBzdXBwb3J0IHVwIHRvIDEyOCBwb3J0cy4gIFByb2R1Y3QKQEAgLTM5NSw3ICszOTUsNyBAQAogCiBjb25maWcgQTIyMzIKIAl0cmlzdGF0ZSAiQ29tbW9kb3JlIEEyMjMyIHNlcmlhbCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFpPUlJPICYmIEJST0tFTl9PTl9TTVAKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBaT1JSTyAmJiBCUk9LRU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBzdXBwb3J0cyB0aGUgMjIzMiA3LXBvcnQgc2VyaWFsIGNhcmQgc2hpcHBlZCB3aXRoIHRoZQogCSAgQW1pZ2EgMjAwMCBhbmQgb3RoZXIgWm9ycm8tYnVzIG1hY2hpbmVzLCBkYXRpbmcgZnJvbSAxOTg5LiAgQXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9nZW5ydGMuYyBiL2RyaXZlcnMvY2hhci9nZW5ydGMuYwppbmRleCBhYWMwOTg1Li4zMWU3YzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZ2VucnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lIFJUQ19WRVJTSU9OCSIxLjA3IgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS92aXJ0aW8tcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYwppbmRleCA5NjI5NjhmLi45MTUxNTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX3JuZy5oPgogCiAvKiBUaGUgaG9zdCB3aWxsIGZpbGwgYW55IGJ1ZmZlciB3ZSBnaXZlIGl0IHdpdGggc3dlZXQsIHN3ZWV0IHJhbmRvbW5lc3MuICBXZQpAQCAtMTE3LDcgKzExNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHZpcnRybmdfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0IHZpcnRybmdfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCXZkZXYtPmNvbmZpZy0+cmVzZXQodmRldik7CiAJaHdybmdfdW5yZWdpc3RlcigmdmlydGlvX2h3cm5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ydGMuYyBiL2RyaXZlcnMvY2hhci9ydGMuYwppbmRleCBlMGQwZjhiLi5iYzRhYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL3J0Yy5jCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zb255cGkuYyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwppbmRleCBmZDNkY2VkLi44YzI2MmFhZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTM2LDYgKzM2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfYnVmZmVyLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2J1ZmZlci5jCmluZGV4IDMxMDg5OTEuLjY2ZmE0ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfYnVmZmVyLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYwpAQCAtNDAyLDI4ICs0MDIsMjYgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0dHlfc3RydWN0LCBidWYud29yay53b3JrKTsKIAl1bnNpZ25lZCBsb25nIAlmbGFnczsKIAlzdHJ1Y3QgdHR5X2xkaXNjICpkaXNjOwotCXN0cnVjdCB0dHlfYnVmZmVyICp0YnVmLCAqaGVhZDsKLQljaGFyICpjaGFyX2J1ZjsKLQl1bnNpZ25lZCBjaGFyICpmbGFnX2J1ZjsKIAogCWRpc2MgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CiAJaWYgKGRpc2MgPT0gTlVMTCkJLyogICFUVFlfTERJU0MgKi8KIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQkvKiBTbyB3ZSBrbm93IGEgZmx1c2ggaXMgcnVubmluZyAqLwotCXNldF9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncyk7Ci0JaGVhZCA9IHR0eS0+YnVmLmhlYWQ7Ci0JaWYgKGhlYWQgIT0gTlVMTCkgewotCQl0dHktPmJ1Zi5oZWFkID0gTlVMTDsKLQkJZm9yICg7OykgewotCQkJaW50IGNvdW50ID0gaGVhZC0+Y29tbWl0IC0gaGVhZC0+cmVhZDsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChUVFlfRkxVU0hJTkcsICZ0dHktPmZsYWdzKSkgeworCQlzdHJ1Y3QgdHR5X2J1ZmZlciAqaGVhZDsKKwkJd2hpbGUgKChoZWFkID0gdHR5LT5idWYuaGVhZCkgIT0gTlVMTCkgeworCQkJaW50IGNvdW50OworCQkJY2hhciAqY2hhcl9idWY7CisJCQl1bnNpZ25lZCBjaGFyICpmbGFnX2J1ZjsKKworCQkJY291bnQgPSBoZWFkLT5jb21taXQgLSBoZWFkLT5yZWFkOwogCQkJaWYgKCFjb3VudCkgewogCQkJCWlmIChoZWFkLT5uZXh0ID09IE5VTEwpCiAJCQkJCWJyZWFrOwotCQkJCXRidWYgPSBoZWFkOwotCQkJCWhlYWQgPSBoZWFkLT5uZXh0OwotCQkJCXR0eV9idWZmZXJfZnJlZSh0dHksIHRidWYpOworCQkJCXR0eS0+YnVmLmhlYWQgPSBoZWFkLT5uZXh0OworCQkJCXR0eV9idWZmZXJfZnJlZSh0dHksIGhlYWQpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJLyogTGRpc2Mgb3IgdXNlciBpcyB0cnlpbmcgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKQEAgLTQ0NSw5ICs0NDMsOSBAQAogCQkJCQkJCWZsYWdfYnVmLCBjb3VudCk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwogCQl9Ci0JCS8qIFJlc3RvcmUgdGhlIHF1ZXVlIGhlYWQgKi8KLQkJdHR5LT5idWYuaGVhZCA9IGhlYWQ7CisJCWNsZWFyX2JpdChUVFlfRkxVU0hJTkcsICZ0dHktPmZsYWdzKTsKIAl9CisKIAkvKiBXZSBtYXkgaGF2ZSBhIGRlZmVycmVkIHJlcXVlc3QgdG8gZmx1c2ggdGhlIGlucHV0IGJ1ZmZlciwKIAkgICBpZiBzbyBwdWxsIHRoZSBjaGFpbiB1bmRlciB0aGUgbG9jayBhbmQgZW1wdHkgdGhlIHF1ZXVlICovCiAJaWYgKHRlc3RfYml0KFRUWV9GTFVTSFBFTkRJTkcsICZ0dHktPmZsYWdzKSkgewpAQCAtNDU1LDcgKzQ1Myw2IEBACiAJCWNsZWFyX2JpdChUVFlfRkxVU0hQRU5ESU5HLCAmdHR5LT5mbGFncyk7CiAJCXdha2VfdXAoJnR0eS0+cmVhZF93YWl0KTsKIAl9Ci0JY2xlYXJfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKIAogCXR0eV9sZGlzY19kZXJlZihkaXNjKTsKQEAgLTQ3MSw3ICs0NjgsNyBAQAogICovCiB2b2lkIHR0eV9mbHVzaF90b19sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCWZsdXNoX3RvX2xkaXNjKCZ0dHktPmJ1Zi53b3JrLndvcmspOworCWZsdXNoX2RlbGF5ZWRfd29yaygmdHR5LT5idWYud29yayk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCAwZDMyOGI1Li5hMDM1YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbnNvbGUuaD4KICNpbmNsdWRlICJodmNfY29uc29sZS5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCmluZGV4IDZiMzZlZTUuLmVkODZkM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCkBAIC0xNTMyLDcgKzE1MzIsNyBAQAogCiAJY2FzZSBQSU9fVU5JTUFQOgogCWNhc2UgR0lPX1VOSU1BUDoKLQkJcmV0ID0gZG9fdW5pbWFwX2lvY3RsKGNtZCwgdXAsIHBlcm0sIHZjKTsKKwkJcmV0ID0gY29tcGF0X3VuaW1hcF9pb2N0bChjbWQsIHVwLCBwZXJtLCB2Yyk7CiAJCWJyZWFrOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCmluZGV4IGFkNDFmMTkuLjEyZmRkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYwpAQCAtNzYsOCArNzYsMTEgQEAKICNlbmRpZgogCS8qIGFzayB0aGUgZ292ZXJub3IgZm9yIHRoZSBuZXh0IHN0YXRlICovCiAJbmV4dF9zdGF0ZSA9IGNwdWlkbGVfY3Vycl9nb3Zlcm5vci0+c2VsZWN0KGRldik7Ci0JaWYgKG5lZWRfcmVzY2hlZCgpKQorCWlmIChuZWVkX3Jlc2NoZWQoKSkgeworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCXJldHVybjsKKwl9CisKIAl0YXJnZXRfc3RhdGUgPSAmZGV2LT5zdGF0ZXNbbmV4dF9zdGF0ZV07CiAKIAkvKiBlbnRlciB0aGUgc3RhdGUgYW5kIHVwZGF0ZSBzdGF0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKaW5kZXggNzZjYjZiMy4uMGFmODA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYworKysgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCkBAIC0yNCw2ICsyNCwxMiBAQAogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CiAjaW5jbHVkZSAicGFkbG9jay5oIgogCisjaWZkZWYgQ09ORklHXzY0QklUCisjZGVmaW5lIFNUQUNLX0FMSUdOIDE2CisjZWxzZQorI2RlZmluZSBTVEFDS19BTElHTiA0CisjZW5kaWYKKwogc3RydWN0IHBhZGxvY2tfc2hhX2Rlc2MgewogCXN0cnVjdCBzaGFzaF9kZXNjIGZhbGxiYWNrOwogfTsKQEAgLTY0LDcgKzcwLDkgQEAKIAkvKiBXZSBjYW4ndCBzdG9yZSBkaXJlY3RseSB0byAqb3V0IGFzIGl0IG1heSBiZSB1bmFsaWduZWQuICovCiAJLyogQlRXIERvbid0IHJlZHVjZSB0aGUgYnVmZmVyIHNpemUgYmVsb3cgMTI4IEJ5dGVzIQogCSAqICAgICBQYWRMb2NrIG1pY3JvY29kZSBuZWVkcyBpdCB0aGF0IGJpZy4gKi8KLQljaGFyIHJlc3VsdFsxMjhdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKFBBRExPQ0tfQUxJR05NRU5UKSkpOworCWNoYXIgYnVmWzEyOCArIFBBRExPQ0tfQUxJR05NRU5UIC0gU1RBQ0tfQUxJR05dIF9fYXR0cmlidXRlX18KKwkJKChhbGlnbmVkKFNUQUNLX0FMSUdOKSkpOworCWNoYXIgKnJlc3VsdCA9IFBUUl9BTElHTigmYnVmWzBdLCBQQURMT0NLX0FMSUdOTUVOVCk7CiAJc3RydWN0IHBhZGxvY2tfc2hhX2Rlc2MgKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAlzdHJ1Y3Qgc2hhMV9zdGF0ZSBzdGF0ZTsKIAl1bnNpZ25lZCBpbnQgc3BhY2U7CkBAIC0xMjgsNyArMTM2LDkgQEAKIAkvKiBXZSBjYW4ndCBzdG9yZSBkaXJlY3RseSB0byAqb3V0IGFzIGl0IG1heSBiZSB1bmFsaWduZWQuICovCiAJLyogQlRXIERvbid0IHJlZHVjZSB0aGUgYnVmZmVyIHNpemUgYmVsb3cgMTI4IEJ5dGVzIQogCSAqICAgICBQYWRMb2NrIG1pY3JvY29kZSBuZWVkcyBpdCB0aGF0IGJpZy4gKi8KLQljaGFyIHJlc3VsdFsxMjhdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKFBBRExPQ0tfQUxJR05NRU5UKSkpOworCWNoYXIgYnVmWzEyOCArIFBBRExPQ0tfQUxJR05NRU5UIC0gU1RBQ0tfQUxJR05dIF9fYXR0cmlidXRlX18KKwkJKChhbGlnbmVkKFNUQUNLX0FMSUdOKSkpOworCWNoYXIgKnJlc3VsdCA9IFBUUl9BTElHTigmYnVmWzBdLCBQQURMT0NLX0FMSUdOTUVOVCk7CiAJc3RydWN0IHBhZGxvY2tfc2hhX2Rlc2MgKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAlzdHJ1Y3Qgc2hhMjU2X3N0YXRlIHN0YXRlOwogCXVuc2lnbmVkIGludCBzcGFjZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCmluZGV4IDRmNGFjODIuLmQ0NTYwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwpAQCAtMTEyMiw3ICsxMTIyLDcgQEAKIAkJZGVidWdmMCgiUmVhZGluZyBLOF9EUkFNX0JBU0VfTE9XIGZhaWxlZFxuIik7CiAKIAkvKiBFeHRyYWN0IHBhcnRzIGludG8gc2VwYXJhdGUgZGF0YSBlbnRyaWVzICovCi0JcHZ0LT5kcmFtX2Jhc2VbZHJhbV0gPSAoKHU2NCkgbG93ICYgMHhGRkZGMDAwMCkgPDwgMjQ7CisJcHZ0LT5kcmFtX2Jhc2VbZHJhbV0gPSAoKHU2NCkgbG93ICYgMHhGRkZGMDAwMCkgPDwgODsKIAlwdnQtPmRyYW1fSW50bHZFbltkcmFtXSA9IChsb3cgPj4gOCkgJiAweDc7CiAJcHZ0LT5kcmFtX3J3X2VuW2RyYW1dID0gKGxvdyAmIDB4Myk7CiAKQEAgLTExMzUsNyArMTEzNSw3IEBACiAJICogRXh0cmFjdCBwYXJ0cyBpbnRvIHNlcGFyYXRlIGRhdGEgZW50cmllcy4gTGltaXQgaXMgdGhlIEhJR0hFU1QgbWVtb3J5CiAJICogbG9jYXRpb24gb2YgdGhlIHJlZ2lvbiwgc28gbG93ZXIgMjQgYml0cyBuZWVkIHRvIGJlIGFsbCBvbmVzCiAJICovCi0JcHZ0LT5kcmFtX2xpbWl0W2RyYW1dID0gKCgodTY0KSBsb3cgJiAweEZGRkYwMDAwKSA8PCAyNCkgfCAweDAwRkZGRkZGOworCXB2dC0+ZHJhbV9saW1pdFtkcmFtXSA9ICgoKHU2NCkgbG93ICYgMHhGRkZGMDAwMCkgPDwgOCkgfCAweDAwRkZGRkZGOwogCXB2dC0+ZHJhbV9JbnRsdlNlbFtkcmFtXSA9IChsb3cgPj4gOCkgJiAweDc7CiAJcHZ0LT5kcmFtX0RzdE5vZGVbZHJhbV0gPSAobG93ICYgMHg3KTsKIH0KQEAgLTEzNjksNyArMTM2OSw3IEBACiAJcHZ0LT5kcmFtX0ludGx2RW5bZHJhbV0gPSAobG93X2Jhc2UgPj4gOCkgJiAweDc7CiAKIAlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgoKHU2NCloaWdoX2Jhc2UgJiAweDAwMDAwMEZGKSA8PCA0MCkgfAotCQkJICAgICAgICgoKHU2NClsb3dfYmFzZSAgJiAweEZGRkYwMDAwKSA8PCAyNCk7CisJCQkgICAgICAgKCgodTY0KWxvd19iYXNlICAmIDB4RkZGRjAwMDApIDw8IDgpOwogCiAJbG93X29mZnNldCA9IEs4X0RSQU1fTElNSVRfTE9XICsgKGRyYW0gPDwgMyk7CiAJaGlnaF9vZmZzZXQgPSBGMTBfRFJBTV9MSU1JVF9ISUdIICsgKGRyYW0gPDwgMyk7CkBAIC0xMzkxLDcgKzEzOTEsNyBAQAogCSAqIG1lbW9yeSBsb2NhdGlvbiBvZiB0aGUgcmVnaW9uLCBzbyBsb3cgMjQgYml0cyBuZWVkIHRvIGJlIGFsbCBvbmVzLgogCSAqLwogCXB2dC0+ZHJhbV9saW1pdFtkcmFtXSA9ICgoKHU2NCloaWdoX2xpbWl0ICYgMHgwMDAwMDBGRikgPDwgNDApIHwKLQkJCQkoKCh1NjQpIGxvd19saW1pdCAmIDB4RkZGRjAwMDApIDw8IDI0KSB8CisJCQkJKCgodTY0KSBsb3dfbGltaXQgJiAweEZGRkYwMDAwKSA8PCA4KSB8CiAJCQkJMHgwMEZGRkZGRjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKaW5kZXggZDMzNTA4NmYuLjc3YTk1NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYwpAQCAtMTE3Myw3ICsxMTczLDcgQEAKIAkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHB2dC0+YnJhbmNoXzEsIHdoZXJlLAogCQkJCQkmcHZ0LT5iMV9tdHJbc2xvdF9yb3ddKTsKIAkJCWRlYnVnZjIoIk1UUiVkIHdoZXJlPTB4JXggQjEgdmFsdWU9MHgleFxuIiwgc2xvdF9yb3csCi0JCQkJd2hlcmUsIHB2dC0+YjBfbXRyW3Nsb3Rfcm93XSk7CisJCQkJd2hlcmUsIHB2dC0+YjFfbXRyW3Nsb3Rfcm93XSk7CiAJCX0gZWxzZSB7CiAJCQlwdnQtPmIxX210cltzbG90X3Jvd10gPSAwOwogCQl9CkBAIC0xMjMyLDcgKzEyMzIsNyBAQAogCXN0cnVjdCBjc3Jvd19pbmZvICpwX2Nzcm93OwogCWludCBlbXB0eSwgY2hhbm5lbF9jb3VudDsKIAlpbnQgbWF4X2Nzcm93czsKLQlpbnQgbXRyOworCWludCBtdHIsIG10cjE7CiAJaW50IGNzcm93X21lZ3M7CiAJaW50IGNoYW5uZWw7CiAJaW50IGNzcm93OwpAQCAtMTI1MSw5ICsxMjUxLDEwIEBACiAKIAkJLyogdXNlIGJyYW5jaCAwIGZvciB0aGUgYmFzaXMgKi8KIAkJbXRyID0gcHZ0LT5iMF9tdHJbY3Nyb3cgPj4gMV07CisJCW10cjEgPSBwdnQtPmIxX210cltjc3JvdyA+PiAxXTsKIAogCQkvKiBpZiBubyBESU1NUyBvbiB0aGlzIHJvdywgY29udGludWUgKi8KLQkJaWYgKCFNVFJfRElNTVNfUFJFU0VOVChtdHIpKQorCQlpZiAoIU1UUl9ESU1NU19QUkVTRU5UKG10cikgJiYgIU1UUl9ESU1NU19QUkVTRU5UKG10cjEpKQogCQkJY29udGludWU7CiAKIAkJLyogRkFLRSBPVVQgVkFMVUVTLCBGSVhNRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKaW5kZXggYjA4YjZkOC4uZjk5ZDEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jCkBAIC00Niw5ICs0NiwxMCBAQAogLyogTGltaXRzIGZvciBpNTQwMCAqLwogI2RlZmluZSBOVU1fTVRSU19QRVJfQlJBTkNICTQKICNkZWZpbmUgQ0hBTk5FTFNfUEVSX0JSQU5DSAkyCisjZGVmaW5lIE1BWF9ESU1NU19QRVJfQ0hBTk5FTAlOVU1fTVRSU19QRVJfQlJBTkNICiAjZGVmaW5lCU1BWF9DSEFOTkVMUwkJNAotI2RlZmluZSBNQVhfRElNTVMJCShNQVhfQ0hBTk5FTFMgKiA0KQkvKiBVcCB0byA0IERJTU0ncyBwZXIgY2hhbm5lbCAqLwotI2RlZmluZSBNQVhfQ1NST1dTCQkoTUFYX0RJTU1TICogMikJCS8qIG1heCBwb3NzaWJsZSBjc3Jvd3MgcGVyIGNoYW5uZWwgKi8KKy8qIG1heCBwb3NzaWJsZSBjc3Jvd3MgcGVyIGNoYW5uZWwgKi8KKyNkZWZpbmUgTUFYX0NTUk9XUwkJKE1BWF9ESU1NU19QRVJfQ0hBTk5FTCkKIAogLyogRGV2aWNlIDE2LAogICogRnVuY3Rpb24gMDogU3lzdGVtIEFkZHJlc3MKQEAgLTMzMSw3ICszMzIsNiBAQAogCiBzdHJ1Y3QgaTU0MDBfZGltbV9pbmZvIHsKIAlpbnQgbWVnYWJ5dGVzOwkJLyogc2l6ZSwgMCBtZWFucyBub3QgcHJlc2VudCAgKi8KLQlpbnQgZHVhbF9yYW5rOwogfTsKIAogLyogZHJpdmVyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KQEAgLTg0OSwxMSArODQ5LDkgQEAKIAlpbnQgbjsKIAogCS8qIFRoZXJlIGlzIG9uZSBNVFIgZm9yIGVhY2ggc2xvdCBwYWlyIG9mIEZCLURJTU1zLAotCSAgIEVhY2ggc2xvdCBtYXkgaGF2ZSBvbmUgb3IgdHdvIHJhbmtzICgyIGNzcm93cyksCiAJICAgRWFjaCBzbG90IHBhaXIgbWF5IGJlIGF0IGJyYW5jaCAwIG9yIGJyYW5jaCAxLgotCSAgIFNvLCBjc3JvdyBzaG91bGQgYmUgZGl2aWRlZCBieSBlaWdodAogCSAqLwotCW4gPSBjc3JvdyA+PiAzOworCW4gPSBjc3JvdzsKIAogCWlmIChuID49IE5VTV9NVFJTX1BFUl9CUkFOQ0gpIHsKIAkJZGVidWdmMCgiRVJST1I6IHRyeWluZyB0byBhY2Nlc3MgYW4gaW52YWxpZCBjc3JvdzogJWRcbiIsCkBAIC05MDUsMjUgKzkwMywyMiBAQAogCQlhbWJfcHJlc2VudF9yZWcgPSBkZXRlcm1pbmVfYW1iX3ByZXNlbnRfcmVnKHB2dCwgY2hhbm5lbCk7CiAKIAkJLyogRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgRElNTSBwcmVzZW50IGluIHRoaXMgRElNTSBzbG90ICovCi0JCWlmIChhbWJfcHJlc2VudF9yZWcgJiAoMSA8PCAoY3Nyb3cgPj4gMSkpKSB7Ci0JCQlkaW5mby0+ZHVhbF9yYW5rID0gTVRSX0RJTU1fUkFOSyhtdHIpOworCQlpZiAoYW1iX3ByZXNlbnRfcmVnICYgKDEgPDwgY3Nyb3cpKSB7CisJCQkvKiBTdGFydCB3aXRoIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgYSBCYW5rCisJCQkgKiBvbiB0aGUgRFJBTSAqLworCQkJYWRkckJpdHMgPSBNVFJfRFJBTV9CQU5LU19BRERSX0JJVFMobXRyKTsKKwkJCS8qIEFkZCB0aGVudW1iZXIgb2YgUk9XIGJpdHMgKi8KKwkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX1JPV1NfQUREUl9CSVRTKG10cik7CisJCQkvKiBhZGQgdGhlIG51bWJlciBvZiBDT0xVTU4gYml0cyAqLworCQkJYWRkckJpdHMgKz0gTVRSX0RJTU1fQ09MU19BRERSX0JJVFMobXRyKTsKKwkJCS8qIGFkZCB0aGUgbnVtYmVyIG9mIFJBTksgYml0cyAqLworCQkJYWRkckJpdHMgKz0gTVRSX0RJTU1fUkFOSyhtdHIpOwogCi0JCQlpZiAoISgoZGluZm8tPmR1YWxfcmFuayA9PSAwKSAmJgotCQkJCSgoY3Nyb3cgJiAweDEpID09IDB4MSkpKSB7Ci0JCQkJLyogU3RhcnQgd2l0aCB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIGEgQmFuawotCQkJCSAqIG9uIHRoZSBEUkFNICovCi0JCQkJYWRkckJpdHMgPSBNVFJfRFJBTV9CQU5LU19BRERSX0JJVFMobXRyKTsKLQkJCQkvKiBBZGQgdGhlbnVtYmVyIG9mIFJPVyBiaXRzICovCi0JCQkJYWRkckJpdHMgKz0gTVRSX0RJTU1fUk9XU19BRERSX0JJVFMobXRyKTsKLQkJCQkvKiBhZGQgdGhlIG51bWJlciBvZiBDT0xVTU4gYml0cyAqLwotCQkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX0NPTFNfQUREUl9CSVRTKG10cik7CisJCQlhZGRyQml0cyArPSA2OwkvKiBhZGQgNjQgYml0cyBwZXIgRElNTSAqLworCQkJYWRkckJpdHMgLT0gMjA7CS8qIGRpdmlkZSBieSAyXl4yMCAqLworCQkJYWRkckJpdHMgLT0gMzsJLyogOCBiaXRzIHBlciBieXRlcyAqLwogCi0JCQkJYWRkckJpdHMgKz0gNjsJLyogYWRkIDY0IGJpdHMgcGVyIERJTU0gKi8KLQkJCQlhZGRyQml0cyAtPSAyMDsJLyogZGl2aWRlIGJ5IDJeXjIwICovCi0JCQkJYWRkckJpdHMgLT0gMzsJLyogOCBiaXRzIHBlciBieXRlcyAqLwotCi0JCQkJZGluZm8tPm1lZ2FieXRlcyA9IDEgPDwgYWRkckJpdHM7Ci0JCQl9CisJCQlkaW5mby0+bWVnYWJ5dGVzID0gMSA8PCBhZGRyQml0czsKIAkJfQogCX0KIH0KQEAgLTk1MSwxMiArOTQ2LDEyIEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBTY2FuIGFsbCB0aGUgYWN0dWFsIENTUk9XUyAod2hpY2ggaXMgIyBvZiBESU1NUyAqIDIpCisJLyogU2NhbiBhbGwgdGhlIGFjdHVhbCBDU1JPV1MKIAkgKiBhbmQgY2FsY3VsYXRlIHRoZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBESU1NCiAJICogU3RhcnQgd2l0aCB0aGUgaGlnaGVzdCBjc3JvdyBmaXJzdCwgdG8gZGlzcGxheSBpdCBmaXJzdAogCSAqIGFuZCB3b3JrIHRvd2FyZCB0aGUgMHRoIGNzcm93CiAJICovCi0JbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoICogMjsKKwltYXhfY3Nyb3dzID0gcHZ0LT5tYXhkaW1tcGVyY2g7CiAJZm9yIChjc3JvdyA9IG1heF9jc3Jvd3MgLSAxOyBjc3JvdyA+PSAwOyBjc3Jvdy0tKSB7CiAKIAkJLyogb24gYW4gb2RkIGNzcm93LCBmaXJzdCBvdXRwdXQgYSAnYm91bmRhcnknIG1hcmtlciwKQEAgLTEwNjQsNyArMTA1OSw3IEBACiAKIAkvKiBHZXQgdGhlIHNldCBvZiBNVFJbMC0zXSByZWdzIGJ5IGVhY2ggYnJhbmNoICovCiAJZm9yIChzbG90X3JvdyA9IDA7IHNsb3Rfcm93IDwgTlVNX01UUlNfUEVSX0JSQU5DSDsgc2xvdF9yb3crKykgewotCQlpbnQgd2hlcmUgPSBNVFIwICsgKHNsb3Rfcm93ICogc2l6ZW9mKHUzMikpOworCQlpbnQgd2hlcmUgPSBNVFIwICsgKHNsb3Rfcm93ICogc2l6ZW9mKHUxNikpOwogCiAJCS8qIEJyYW5jaCAwIHNldCBvZiBNVFIgcmVnaXN0ZXJzICovCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHB2dC0+YnJhbmNoXzAsIHdoZXJlLApAQCAtMTE0Niw3ICsxMTQxLDcgQEAKIAlwdnQgPSBtY2ktPnB2dF9pbmZvOwogCiAJY2hhbm5lbF9jb3VudCA9IHB2dC0+bWF4Y2g7Ci0JbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoICogMjsKKwltYXhfY3Nyb3dzID0gcHZ0LT5tYXhkaW1tcGVyY2g7CiAKIAllbXB0eSA9IDE7CQkvKiBBc3N1bWUgTk8gbWVtb3J5ICovCiAKQEAgLTEyMTUsMjggKzEyMTAsNiBAQAogfQogCiAvKgotICogaTU0MDBfZ2V0X2RpbW1fYW5kX2NoYW5uZWxfY291bnRzKHBkZXYsICZudW1fY3Nyb3dzLCAmbnVtX2NoYW5uZWxzKQotICoKLSAqCWFzayB0aGUgZGV2aWNlIGhvdyBtYW55IGNoYW5uZWxzIGFyZSBwcmVzZW50IGFuZCBob3cgbWFueSBDU1JPV1MKLSAqCSBhcyB3ZWxsCi0gKi8KLXN0YXRpYyB2b2lkIGk1NDAwX2dldF9kaW1tX2FuZF9jaGFubmVsX2NvdW50cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJaW50ICpudW1fZGltbXNfcGVyX2NoYW5uZWwsCi0JCQkJCWludCAqbnVtX2NoYW5uZWxzKQotewotCXU4IHZhbHVlOwotCi0JLyogTmVlZCB0byByZXRyaWV2ZSBqdXN0IGhvdyBtYW55IGNoYW5uZWxzIGFuZCBkaW1tcyBwZXIgY2hhbm5lbCBhcmUKLQkgKiBzdXBwb3J0ZWQgb24gdGhpcyBtZW1vcnkgY29udHJvbGxlcgotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIE1BWERJTU1QRVJDSCwgJnZhbHVlKTsKLQkqbnVtX2RpbW1zX3Blcl9jaGFubmVsID0gKGludCl2YWx1ZSAqIDI7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBNQVhDSCwgJnZhbHVlKTsKLQkqbnVtX2NoYW5uZWxzID0gKGludCl2YWx1ZTsKLX0KLQotLyoKICAqCWk1NDAwX3Byb2JlMQlQcm9iZSBmb3IgT05FIGluc3RhbmNlIG9mIGRldmljZSB0byBzZWUgaWYgaXQgaXMKICAqCQkJcHJlc2VudC4KICAqCXJldHVybjoKQEAgLTEyNjMsMjIgKzEyMzYsMTYgQEAKIAlpZiAoUENJX0ZVTkMocGRldi0+ZGV2Zm4pICE9IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogQXNrIHRoZSBkZXZpY2VzIGZvciB0aGUgbnVtYmVyIG9mIENTUk9XUyBhbmQgQ0hBTk5FTFMgc28KLQkgKiB0aGF0IHdlIGNhbiBjYWxjdWxhdGUgdGhlIG1lbW9yeSByZXNvdXJjZXMsIGV0YwotCSAqCi0JICogVGhlIENoaXBzZXQgd2lsbCByZXBvcnQgd2hhdCBpdCBjYW4gaGFuZGxlIHdoaWNoIHdpbGwgYmUgZ3JlYXRlcgotCSAqIG9yIGVxdWFsIHRvIHdoYXQgdGhlIG1vdGhlcmJvYXJkIG1hbnVmYWN0dXJlciB3aWxsIGltcGxlbWVudC4KLQkgKgotCSAqIEFzIHdlIGRvbid0IGhhdmUgYSBtb3RoZXJib2FyZCBpZGVudGlmaWNhdGlvbiByb3V0aW5lIHRvIGRldGVybWluZQorCS8qIEFzIHdlIGRvbid0IGhhdmUgYSBtb3RoZXJib2FyZCBpZGVudGlmaWNhdGlvbiByb3V0aW5lIHRvIGRldGVybWluZQogCSAqIGFjdHVhbCBudW1iZXIgb2Ygc2xvdHMvZGltbXMgcGVyIGNoYW5uZWwsIHdlIHRodXMgdXRpbGl6ZSB0aGUKIAkgKiByZXNvdXJjZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGNoaXBzZXQuIFRodXMsIHdlIG1pZ2h0IGhhdmUKIAkgKiBoYXZlIG1vcmUgRElNTXMgcGVyIGNoYW5uZWwgdGhhbiBhY3R1YWxseSBvbiB0aGUgbW9ibywgYnV0IHRoaXMKIAkgKiBhbGxvd3MgdGhlIGRyaXZlciB0byBzdXBwb3J0IHVwdG8gdGhlIGNoaXBzZXQgbWF4LCB3aXRob3V0CiAJICogc29tZSBmYW5jeSBtb2JvIGRldGVybWluYXRpb24uCiAJICovCi0JaTU0MDBfZ2V0X2RpbW1fYW5kX2NoYW5uZWxfY291bnRzKHBkZXYsICZudW1fZGltbXNfcGVyX2NoYW5uZWwsCi0JCQkJCSZudW1fY2hhbm5lbHMpOwotCW51bV9jc3Jvd3MgPSBudW1fZGltbXNfcGVyX2NoYW5uZWwgKiAyOworCW51bV9kaW1tc19wZXJfY2hhbm5lbCA9IE1BWF9ESU1NU19QRVJfQ0hBTk5FTDsKKwludW1fY2hhbm5lbHMgPSBNQVhfQ0hBTk5FTFM7CisJbnVtX2Nzcm93cyA9IG51bV9kaW1tc19wZXJfY2hhbm5lbDsKIAogCWRlYnVnZjAoIk1DOiAlcygpOiBOdW1iZXIgb2YgLSBDaGFubmVscz0gJWQgIERJTU1TPSAlZCAgQ1NST1dTPSAlZFxuIiwKIAkJX19mdW5jX18sIG51bV9jaGFubmVscywgbnVtX2RpbW1zX3Blcl9jaGFubmVsLCBudW1fY3Nyb3dzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwppbmRleCAxNTdmNjUwLi5jZjI3NDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCkBAIC0yNiw3ICsyNiw5IEBACiAjaW5jbHVkZSAibXBjODV4eF9lZGFjLmgiCiAKIHN0YXRpYyBpbnQgZWRhY19kZXZfaWR4OworI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBpbnQgZWRhY19wY2lfaWR4OworI2VuZGlmCiBzdGF0aWMgaW50IGVkYWNfbWNfaWR4OwogCiBzdGF0aWMgdTMyIG9yaWdfZGRyX2Vycl9kaXNhYmxlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwppbmRleCA1MGYwMTc2Li45OGRiYmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwpAQCAtMTg4LDE0ICsxODgsNyBAQAogLyogSW1wb3NzaWJsZSBsb2dpbl9pZCwgdG8gZGV0ZWN0IGxvZ291dCBhdHRlbXB0IGJlZm9yZSBzdWNjZXNzZnVsIGxvZ2luICovCiAjZGVmaW5lIElOVkFMSURfTE9HSU5fSUQgMHgxMDAwMAogCi0vKgotICogUGVyIHNlY3Rpb24gNy40Ljggb2YgdGhlIFNCUC0yIHNwZWMsIGEgbWd0X09SQl90aW1lb3V0IHZhbHVlIGNhbiBiZQotICogcHJvdmlkZWQgaW4gdGhlIGNvbmZpZyByb20uIE1vc3QgZGV2aWNlcyBkbyBwcm92aWRlIGEgdmFsdWUsIHdoaWNoCi0gKiB3ZSdsbCB1c2UgZm9yIGxvZ2luIG1hbmFnZW1lbnQgb3JicywgYnV0IHdpdGggc29tZSBzYW5lIGxpbWl0cy4KLSAqLwotI2RlZmluZSBTQlAyX01JTl9MT0dJTl9PUkJfVElNRU9VVAk1MDAwVQkvKiBUaW1lb3V0IGluIG1zICovCi0jZGVmaW5lIFNCUDJfTUFYX0xPR0lOX09SQl9USU1FT1VUCTQwMDAwVQkvKiBUaW1lb3V0IGluIG1zICovCi0jZGVmaW5lIFNCUDJfT1JCX1RJTUVPVVQJCTIwMDBVCS8qIFRpbWVvdXQgaW4gbXMgKi8KKyNkZWZpbmUgU0JQMl9PUkJfVElNRU9VVAkJMjAwMFUJCS8qIFRpbWVvdXQgaW4gbXMgKi8KICNkZWZpbmUgU0JQMl9PUkJfTlVMTAkJCTB4ODAwMDAwMDAKICNkZWZpbmUgU0JQMl9SRVRSWV9MSU1JVAkJMHhmCQkvKiAxNSByZXRyaWVzICovCiAjZGVmaW5lIFNCUDJfQ1lDTEVfTElNSVQJCSgweGM4IDw8IDEyKQkvKiAyMDAgMTI1dXMgY3ljbGVzICovCkBAIC0xMDM0LDcgKzEwMjcsNiBAQAogewogCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CiAJaW50IGtleSwgdmFsdWU7Ci0JdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAKIAlmd19jc3JfaXRlcmF0b3JfaW5pdCgmY2ksIGRpcmVjdG9yeSk7CiAJd2hpbGUgKGZ3X2Nzcl9pdGVyYXRvcl9uZXh0KCZjaSwgJmtleSwgJnZhbHVlKSkgewpAQCAtMTA1OSwxNyArMTA1MSw3IEBACiAKIAkJY2FzZSBTQlAyX0NTUl9VTklUX0NIQVJBQ1RFUklTVElDUzoKIAkJCS8qIHRoZSB0aW1lb3V0IHZhbHVlIGlzIHN0b3JlZCBpbiA1MDBtcyB1bml0cyAqLwotCQkJdGltZW91dCA9ICgodW5zaWduZWQgaW50KSB2YWx1ZSA+PiA4ICYgMHhmZikgKiA1MDA7Ci0JCQl0aW1lb3V0ID0gbWF4KHRpbWVvdXQsIFNCUDJfTUlOX0xPR0lOX09SQl9USU1FT1VUKTsKLQkJCXRndC0+bWd0X29yYl90aW1lb3V0ID0KLQkJCQkgIG1pbih0aW1lb3V0LCBTQlAyX01BWF9MT0dJTl9PUkJfVElNRU9VVCk7Ci0KLQkJCWlmICh0aW1lb3V0ID4gdGd0LT5tZ3Rfb3JiX3RpbWVvdXQpCi0JCQkJZndfbm90aWZ5KCIlczogY29uZmlnIHJvbSBjb250YWlucyAlZHMgIgotCQkJCQkgICJtYW5hZ2VtZW50IE9SQiB0aW1lb3V0LCBsaW1pdGluZyAiCi0JCQkJCSAgInRvICVkc1xuIiwgdGd0LT5idXNfaWQsCi0JCQkJCSAgdGltZW91dCAvIDEwMDAsCi0JCQkJCSAgdGd0LT5tZ3Rfb3JiX3RpbWVvdXQgLyAxMDAwKTsKKwkJCXRndC0+bWd0X29yYl90aW1lb3V0ID0gKHZhbHVlID4+IDggJiAweGZmKSAqIDUwMDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0JQMl9DU1JfTE9HSUNBTF9VTklUX05VTUJFUjoKQEAgLTEwODcsNiArMTA2OSwyMiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUGVyIHNlY3Rpb24gNy40Ljggb2YgdGhlIFNCUC0yIHNwZWMsIGEgbWd0X09SQl90aW1lb3V0IHZhbHVlIGNhbiBiZQorICogcHJvdmlkZWQgaW4gdGhlIGNvbmZpZyByb20uIE1vc3QgZGV2aWNlcyBkbyBwcm92aWRlIGEgdmFsdWUsIHdoaWNoCisgKiB3ZSdsbCB1c2UgZm9yIGxvZ2luIG1hbmFnZW1lbnQgb3JicywgYnV0IHdpdGggc29tZSBzYW5lIGxpbWl0cy4KKyAqLworc3RhdGljIHZvaWQgc2JwMl9jbGFtcF9tYW5hZ2VtZW50X29yYl90aW1lb3V0KHN0cnVjdCBzYnAyX3RhcmdldCAqdGd0KQoreworCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gdGd0LT5tZ3Rfb3JiX3RpbWVvdXQ7CisKKwlpZiAodGltZW91dCA+IDQwMDAwKQorCQlmd19ub3RpZnkoIiVzOiAlZHMgbWd0X09SQl90aW1lb3V0IGxpbWl0ZWQgdG8gNDBzXG4iLAorCQkJICB0Z3QtPmJ1c19pZCwgdGltZW91dCAvIDEwMDApOworCisJdGd0LT5tZ3Rfb3JiX3RpbWVvdXQgPSBjbGFtcF92YWwodGltZW91dCwgNTAwMCwgNDAwMDApOworfQorCiBzdGF0aWMgdm9pZCBzYnAyX2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IHNicDJfdGFyZ2V0ICp0Z3QsIHUzMiBtb2RlbCwKIAkJCQkgIHUzMiBmaXJtd2FyZV9yZXZpc2lvbikKIHsKQEAgLTExNzEsNiArMTE2OSw3IEBACiAJCQkgICAgICAgJmZpcm13YXJlX3JldmlzaW9uKSA8IDApCiAJCWdvdG8gZmFpbF90Z3RfcHV0OwogCisJc2JwMl9jbGFtcF9tYW5hZ2VtZW50X29yYl90aW1lb3V0KHRndCk7CiAJc2JwMl9pbml0X3dvcmthcm91bmRzKHRndCwgbW9kZWwsIGZpcm13YXJlX3JldmlzaW9uKTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMKaW5kZXggYWZhZDE0Ny4uNDkzODRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3R3bDQwMzAtZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYwpAQCAtNDYwLDcgKzQ2MCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgZ3Bpb190d2w0MDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorLyogQ2Fubm90IHVzZSBfX2RldmV4aXQgYXMgZ3Bpb190d2w0MDMwX3Byb2JlKCkgY2FsbHMgdXMgKi8KK3N0YXRpYyBpbnQgZ3Bpb190d2w0MDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgc3RhdHVzOwpAQCAtNDkzLDcgKzQ5NCw3IEBACiAJLmRyaXZlci5uYW1lCT0gInR3bDQwMzBfZ3BpbyIsCiAJLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5wcm9iZQkJPSBncGlvX3R3bDQwMzBfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChncGlvX3R3bDQwMzBfcmVtb3ZlKSwKKwkucmVtb3ZlCQk9IGdwaW9fdHdsNDAzMF9yZW1vdmUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBncGlvX3R3bDQwMzBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwppbmRleCAzYzBkMmIzLi5jZWE2NjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwpAQCAtNjI2LDYgKzYyNiwxMiBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwkvKiBpdCBpcyBpbmNvcnJlY3QgaWYgaHN5bmMvdnN5bmMgd2lkdGggaXMgemVybyAqLworCWlmICghaHN5bmNfcHVsc2Vfd2lkdGggfHwgIXZzeW5jX3B1bHNlX3dpZHRoKSB7CisJCURSTV9ERUJVR19LTVMoIkluY29ycmVjdCBEZXRhaWxlZCB0aW1pbmcuICIKKwkJCQkiV3JvbmcgSHN5bmMvVnN5bmMgcHVsc2Ugd2lkdGhcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShkZXYpOwogCWlmICghbW9kZSkKIAkJcmV0dXJuIE5VTEw7CkBAIC02NDcsNiArNjUzLDE1IEBACiAJbW9kZS0+dnN5bmNfZW5kID0gbW9kZS0+dnN5bmNfc3RhcnQgKyB2c3luY19wdWxzZV93aWR0aDsKIAltb2RlLT52dG90YWwgPSBtb2RlLT52ZGlzcGxheSArIHZibGFuazsKIAorCS8qIHBlcmZvcm0gdGhlIGJhc2ljIGNoZWNrIGZvciB0aGUgZGV0YWlsZWQgdGltaW5nICovCisJaWYgKG1vZGUtPmhzeW5jX2VuZCA+IG1vZGUtPmh0b3RhbCB8fAorCQltb2RlLT52c3luY19lbmQgPiBtb2RlLT52dG90YWwpIHsKKwkJZHJtX21vZGVfZGVzdHJveShkZXYsIG1vZGUpOworCQlEUk1fREVCVUdfS01TKCJJbmNvcnJlY3QgZGV0YWlsZWQgdGltaW5nLiAiCisJCQkJIlN5bmMgaXMgYmV5b25kIHRoZSBibGFuay5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKIAlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKIAogCWlmIChwdC0+bWlzYyAmIERSTV9FRElEX1BUX0lOVEVSTEFDRUQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCAyM2RjOWMxLi45YzkyNDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTQ1NCwyMiArNDU0LDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KTsKIAotc3RhdGljIHZvaWQgc2V0Y29scmVnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2IHJlZCwgdTE2IGdyZWVuLAorc3RhdGljIGludCBzZXRjb2xyZWcoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCSAgICAgdTE2IGJsdWUsIHUxNiByZWdubywgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGZiX2hlbHBlci0+ZmI7CiAJaW50IHBpbmRleDsKIAorCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IpIHsKKwkJdTMyICpwYWxldHRlOworCQl1MzIgdmFsdWU7CisJCS8qIHBsYWNlIGNvbG9yIGluIHBzdWVkb3BhbGV0dGUgKi8KKwkJaWYgKHJlZ25vID4gMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcGFsZXR0ZSA9ICh1MzIgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKKwkJcmVkID4+PSAoMTYgLSBpbmZvLT52YXIucmVkLmxlbmd0aCk7CisJCWdyZWVuID4+PSAoMTYgLSBpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoKTsKKwkJYmx1ZSA+Pj0gKDE2IC0gaW5mby0+dmFyLmJsdWUubGVuZ3RoKTsKKwkJdmFsdWUgPSAocmVkIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8CisJCQkoZ3JlZW4gPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAorCQkJKGJsdWUgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKKwkJcGFsZXR0ZVtyZWdub10gPSB2YWx1ZTsKKwkJcmV0dXJuIDA7CisJfQorCiAJcGluZGV4ID0gcmVnbm87CiAKIAlpZiAoZmItPmJpdHNfcGVyX3BpeGVsID09IDE2KSB7CiAJCXBpbmRleCA9IHJlZ25vIDw8IDM7CiAKIAkJaWYgKGZiLT5kZXB0aCA9PSAxNiAmJiByZWdubyA+IDYzKQotCQkJcmV0dXJuOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChmYi0+ZGVwdGggPT0gMTUgJiYgcmVnbm8gPiAzMSkKLQkJCXJldHVybjsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmIChmYi0+ZGVwdGggPT0gMTYpIHsKIAkJCXUxNiByLCBnLCBiOwpAQCAtNDkzLDEzICs1MTAsNyBAQAogCiAJaWYgKGZiLT5kZXB0aCAhPSAxNikKIAkJZmJfaGVscGVyLT5mdW5jcy0+Z2FtbWFfc2V0KGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHBpbmRleCk7Ci0KLQlpZiAocmVnbm8gPCAxNiAmJiBpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUikgewotCQkoKHUzMiAqKSBmYi0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9Ci0JCQkocmVnbm8gPDwgaW5mby0+dmFyLnJlZC5vZmZzZXQpIHwKLQkJCShyZWdubyA8PCBpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8Ci0JCQkocmVnbm8gPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKLQl9CisJcmV0dXJuIDA7CiB9CiAKIGludCBkcm1fZmJfaGVscGVyX3NldGNtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKQpAQCAtNTM2LDcgKzU0Nyw5IEBACiAJCQlpZiAodHJhbnNwKQogCQkJCWh0cmFuc3AgPSAqdHJhbnNwKys7CiAKLQkJCXNldGNvbHJlZyhjcnRjLCBocmVkLCBoZ3JlZW4sIGhibHVlLCBzdGFydCsrLCBpbmZvKTsKKwkJCXJjID0gc2V0Y29scmVnKGNydGMsIGhyZWQsIGhncmVlbiwgaGJsdWUsIHN0YXJ0KyssIGluZm8pOworCQkJaWYgKHJjKQorCQkJCXJldHVybiByYzsKIAkJfQogCQljcnRjX2Z1bmNzLT5sb2FkX2x1dChjcnRjKTsKIAl9CkBAIC01NTUsNiArNTY4LDcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCWludCBpOworCWludCByZXQ7CiAKIAlpZiAocmVnbm8gPiAyNTUpCiAJCXJldHVybiAxOwpAQCAtNTY4LDggKzU4MiwxMCBAQAogCQlpZiAoaSA9PSBmYl9oZWxwZXItPmNydGNfY291bnQpCiAJCQljb250aW51ZTsKIAorCQlyZXQgPSBzZXRjb2xyZWcoY3J0YywgcmVkLCBncmVlbiwgYmx1ZSwgcmVnbm8sIGluZm8pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAotCQlzZXRjb2xyZWcoY3J0YywgcmVkLCBncmVlbiwgYmx1ZSwgcmVnbm8sIGluZm8pOwogCQljcnRjX2Z1bmNzLT5sb2FkX2x1dChjcnRjKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC05MjgsNyArOTQ0LDcgQEAKIHsKIAlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKIAlpbmZvLT5maXgudmlzdWFsID0gZGVwdGggPT0gOCA/IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUiA6Ci0JCUZCX1ZJU1VBTF9ESVJFQ1RDT0xPUjsKKwkJRkJfVklTVUFMX1RSVUVDT0xPUjsKIAlpbmZvLT5maXgudHlwZV9hdXggPSAwOwogCWluZm8tPmZpeC54cGFuc3RlcCA9IDE7IC8qIGRvaW5nIGl0IGluIGh3ICovCiAJaW5mby0+Zml4LnlwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGI5MzgxNGMuLjdmNDM2ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtODksNyArODksOCBAQAogCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QzaG90KTsKIAl9CiAKLQlkZXZfcHJpdi0+c3VzcGVuZGVkID0gMTsKKwkvKiBNb2Rlc2V0IG9uIHJlc3VtZSwgbm90IGxpZCBldmVudHMgKi8KKwlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjQsNyArMTI1LDcgQEAKIAkJZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShkZXYpOwogCX0KIAotCWRldl9wcml2LT5zdXNwZW5kZWQgPSAwOworCWRldl9wcml2LT5tb2Rlc2V0X29uX2xpZCA9IDA7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNjAzNWQzZC4uYzVkZjIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0yNzQsNyArMjc0LDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfZGlzcGxheV9mdW5jcyBkaXNwbGF5OwogCiAJLyogUmVnaXN0ZXIgc3RhdGUgKi8KLQlib29sIHN1c3BlbmRlZDsKKwlib29sIG1vZGVzZXRfb25fbGlkOwogCXU4IHNhdmVMQkI7CiAJdTMyIHNhdmVEU1BBQ05UUjsKIAl1MzIgc2F2ZURTUEJDTlRSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IDk4YWUzZDcuLjgwOGJiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTY1Niw2ICs2NTYsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIExpZCBldmVudHMuIE5vdGUgdGhlIHVzZSBvZiAnbW9kZXNldF9vbl9saWQnOgorICogIC0gd2Ugc2V0IGl0IG9uIGxpZCBjbG9zZSwgYW5kIHJlc2V0IGl0IG9uIG9wZW4KKyAqICAtIHdlIHVzZSBpdCBhcyBhICJvbmx5IG9uY2UiIGJpdCAoaWUgd2UgaWdub3JlCisgKiAgICBkdXBsaWNhdGUgZXZlbnRzIHdoZXJlIGl0IHdhcyBhbHJlYWR5IHByb3Blcmx5CisgKiAgICBzZXQvcmVzZXQpCisgKiAgLSB0aGUgc3VzcGVuZC9yZXN1bWUgcGF0aHMgd2lsbCBhbHNvIHNldCBpdCB0bworICogICAgemVybywgc2luY2UgdGhleSByZXN0b3JlIHRoZSBtb2RlICgibGlkIG9wZW4iKS4KKyAqLwogc3RhdGljIGludCBpbnRlbF9saWRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAogCQkJICAgIHZvaWQgKnVudXNlZCkKIHsKQEAgLTY2MywxMyArNjcyLDE5IEBACiAJCWNvbnRhaW5lcl9vZihuYiwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsIGxpZF9ub3RpZmllcik7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CiAKLQlpZiAoYWNwaV9saWRfb3BlbigpICYmICFkZXZfcHJpdi0+c3VzcGVuZGVkKSB7Ci0JCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCQlkcm1faGVscGVyX3Jlc3VtZV9mb3JjZV9tb2RlKGRldik7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJaWYgKCFhY3BpX2xpZF9vcGVuKCkpIHsKKwkJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMTsKKwkJcmV0dXJuIE5PVElGWV9PSzsKIAl9CiAKLQlkcm1fc3lzZnNfaG90cGx1Z19ldmVudChkZXZfcHJpdi0+ZGV2KTsKKwlpZiAoIWRldl9wcml2LT5tb2Rlc2V0X29uX2xpZCkKKwkJcmV0dXJuIE5PVElGWV9PSzsKKworCWRldl9wcml2LT5tb2Rlc2V0X29uX2xpZCA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlkcm1faGVscGVyX3Jlc3VtZV9mb3JjZV9tb2RlKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAogCXJldHVybiBOT1RJRllfT0s7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCmluZGV4IDNkNjY3MDMuLmRmOTg4MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCkBAIC01ODIsMTAgKzU4Miw5IEBACiAJRFJNX0lORk8oInJlZ2lzdGVyIG1taW8gc2l6ZTogJXVcbiIsICh1bnNpZ25lZClyZGV2LT5ybW1pb19zaXplKTsKIAogCS8qIGlmIHdlIGhhdmUgPiAxIFZHQSBjYXJkcywgdGhlbiBkaXNhYmxlIHRoZSByYWRlb24gVkdBIHJlc291cmNlcyAqLwotCXIgPSB2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIHJkZXYsIE5VTEwsIHJhZGVvbl92Z2Ffc2V0X2RlY29kZSk7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCS8qIHRoaXMgd2lsbCBmYWlsIGZvciBjYXJkcyB0aGF0IGFyZW4ndCBWR0EgY2xhc3MgZGV2aWNlcywganVzdAorCSAqIGlnbm9yZSBpdCAqLworCXZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgcmRldiwgTlVMTCwgcmFkZW9uX3ZnYV9zZXRfZGVjb2RlKTsKIAogCXIgPSByYWRlb25faW5pdChyZGV2KTsKIAlpZiAocikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IGJlMzRkMzIuLjdkMDVjNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMTA2Niw3ICsxMDY2LDcgQEAKICAqIEB0eXBlOiBISUQgcmVwb3J0IHR5cGUgKEhJRF8qX1JFUE9SVCkKICAqIEBkYXRhOiByZXBvcnQgY29udGVudHMKICAqIEBzaXplOiBzaXplIG9mIGRhdGEgcGFyYW1ldGVyCi0gKiBAaW50ZXJydXB0OiBjYWxsZWQgZnJvbSBhdG9taWM/CisgKiBAaW50ZXJydXB0OiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGludGVycnVwdCBhbmQgY29udHJvbCB0cmFuc2ZlcnMKICAqCiAgKiBUaGlzIGlzIGRhdGEgZW50cnkgZm9yIGxvd2VyIGxheWVycy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXR3aW5oYW4uYyBiL2RyaXZlcnMvaGlkL2hpZC10d2luaGFuLmMKaW5kZXggYjA1ZjYwMi4uYzQwYWZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXR3aW5oYW4uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jCkBAIC0xMzIsMTIgKzEzMiwxMiBAQAogCS5pbnB1dF9tYXBwaW5nID0gdHdpbmhhbl9pbnB1dF9tYXBwaW5nLAogfTsKIAotc3RhdGljIGludCB0d2luaGFuX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHR3aW5oYW5faW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZ0d2luaGFuX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHR3aW5oYW5fZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHR3aW5oYW5fZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmdHdpbmhhbl9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkcmF3LmMgYi9kcml2ZXJzL2hpZC9oaWRyYXcuYwppbmRleCBiYTA1Mjc1Li5jZGQxMzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWRyYXcuYworKysgYi9kcml2ZXJzL2hpZC9oaWRyYXcuYwpAQCAtNDgsMTAgKzQ4LDkgQEAKIAljaGFyICpyZXBvcnQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKKwltdXRleF9sb2NrKCZsaXN0LT5yZWFkX211dGV4KTsKKwogCXdoaWxlIChyZXQgPT0gMCkgewotCi0JCW11dGV4X2xvY2soJmxpc3QtPnJlYWRfbXV0ZXgpOwotCiAJCWlmIChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpIHsKIAkJCWFkZF93YWl0X3F1ZXVlKCZsaXN0LT5oaWRyYXctPndhaXQsICZ3YWl0KTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYyBiL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCmluZGV4IDJjMmNiMWUuLjI3ZDYyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCkBAIC01NzIsNyArNTcyLDcgQEAKIAogCS8qIFNhbXBsZSByZWdpc3RlciBjb250ZW50cyBldmVyeSAxIHNlYyAqLwogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlICsgSFopIHx8ICFkYXRhLT52YWxpZCkgewotCQlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CisJCWlmIChkYXRhLT50eXBlID09IGRtZTE3MzcpIHsKIAkJCWRhdGEtPnZpZCA9IGRtZTE3MzdfcmVhZChkYXRhLCBETUUxNzM3X1JFR19WSUQpICYKIAkJCQkweDNmOwogCQl9CkBAIC0xNjIxLDkgKzE2MjEsNiBAQAogCSZzZW5zb3JfZGV2X2F0dHJfem9uZTFfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl96b25lMl9hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3pvbmUzX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0ci5hdHRyLAotCS8qIE1pc2MgKi8KLQkmZGV2X2F0dHJfdnJtLmF0dHIsCi0JJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtMTYzMSw2ICsxNjI4LDE4IEBACiAJLmF0dHJzID0gZG1lMTczN19taXNjX2F0dHIsCiB9OwogCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdCBob2xkcyBWSUQtcmVsYXRlZCBhdHRyaWJ1dGVzLiBUaGVpciBjcmVhdGlvbgorICAgZGVwZW5kcyBvbiB0aGUgY2hpcCB0eXBlIHdoaWNoIGlzIGRldGVybWluZWQgZHVyaW5nIG1vZHVsZSBsb2FkLiAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRtZTE3MzdfdmlkX2F0dHJbXSA9IHsKKwkmZGV2X2F0dHJfdnJtLmF0dHIsCisJJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZG1lMTczN192aWRfZ3JvdXAgPSB7CisJLmF0dHJzID0gZG1lMTczN192aWRfYXR0ciwKK307CisKIC8qIFRoZSBmb2xsb3dpbmcgc3RydWN0cyBob2xkIHRoZSBQV00gYXR0cmlidXRlcywgc29tZSBvZiB3aGljaCBhcmUgb3B0aW9uYWwuCiAgKiBUaGVpciBjcmVhdGlvbiBkZXBlbmRzIG9uIHRoZSBjaGlwIGNvbmZpZ3VyYXRpb24gd2hpY2ggaXMgZGV0ZXJtaW5lZCBkdXJpbmcKICAqIG1vZHVsZSBsb2FkLiAqLwpAQCAtMTkwMiw2ICsxOTExLDkgQEAKIAlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN19taXNjX2dyb3VwKTsKIAl9CisJaWYgKGRhdGEtPnR5cGUgPT0gZG1lMTczNykgeworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfdmlkX2dyb3VwKTsKKwl9CiAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfZ3JvdXApOwogCkBAIC0xOTMzLDYgKzE5NDUsMTMgQEAKIAkJZ290byBleGl0X3JlbW92ZTsKIAl9CiAKKwkvKiBDcmVhdGUgVklELXJlbGF0ZWQgc3lzZnMgYXR0cmlidXRlcyAqLworCWlmICgoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSAmJgorCSAgICAoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgICAgJmRtZTE3MzdfdmlkX2dyb3VwKSkpIHsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKIAkvKiBDcmVhdGUgZmFuIHN5c2ZzIGF0dHJpYnV0ZXMgKi8KIAlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGRtZTE3MzdfZmFuX2dyb3VwKTsgaXgrKykgewogCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IGl4KSkgewpAQCAtMjEyNyw3ICsyMTQ2LDcgQEAKIAlkYXRhLT5wd21fYWN6WzJdID0gNDsJLyogcHdtMyAtPiB6b25lMyAqLwogCiAJLyogU2V0IFZSTSAqLwotCWlmIChkYXRhLT50eXBlICE9IHNjaDUwMjcpIHsKKwlpZiAoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSB7CiAJCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMgYi9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCmluZGV4IDJhN2E4NWEuLmRhMWIxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKKysrIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwpAQCAtODE5LDcgKzgxOSw3IEBACiBzdGF0aWMgc3NpemVfdCB3YXRjaGRvZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAlzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewotCXNpemVfdCByZXQ7CisJaW50IHJldDsKIAlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoY291bnQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYyBiL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYwppbmRleCA2Njc5ODU0Li5iZTQ3NWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMKKysrIGIvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCkBAIC0xOTcsMTEgKzE5NywxMyBAQAogCUFYSVNfRE1JX01BVENIKCJIUDIxMzMiLCAiSFAgMjEzMyIsIHh5X3JvdGF0ZWRfbGVmdCksCiAJQVhJU19ETUlfTUFUQ0goIkhQMjE0MCIsICJIUCAyMTQwIiwgeHlfc3dhcF9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjUzeCIsICJIUCBDb21wYXEgNjUzIiwgeHlfcm90YXRlZF9sZWZ0X3VzZCksCi0JQVhJU19ETUlfTUFUQ0goIk5DNjczeCIsICJIUCBDb21wYXEgNjczIiwgeHlfcm90YXRlZF9sZWZ0X3VzZCksCisJQVhJU19ETUlfTUFUQ0goIk5DNjczMGIiLCAiSFAgQ29tcGFxIDY3MzBiIiwgeHlfcm90YXRlZF9sZWZ0X3VzZCksCisJQVhJU19ETUlfTUFUQ0goIk5DNjczMHMiLCAiSFAgQ29tcGFxIDY3MzBzIiwgeHlfc3dhcCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjUxeHgiLCAiSFAgQ29tcGFxIDY1MSIsIHh5X3JvdGF0ZWRfcmlnaHQpLAogCUFYSVNfRE1JX01BVENIKCJOQzY3MTB4IiwgIkhQIENvbXBhcSA2NzEwIiwgeHlfc3dhcF95el9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjcxNXgiLCAiSFAgQ29tcGFxIDY3MTUiLCB5X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2OTN4eCIsICJIUCBFbGl0ZUJvb2sgNjkzIiwgeHlfcm90YXRlZF9yaWdodCksCisJQVhJU19ETUlfTUFUQ0goIk5DNjkzeHgiLCAiSFAgRWxpdGVCb29rIDg1MyIsIHh5X3N3YXApLAogCS8qIEludGVsLWJhc2VkIEhQIFBhdmlsaW9uIGR2NSAqLwogCUFYSVNfRE1JX01BVENIMigiSFBEVjVfSSIsCiAJCQlQUk9EVUNUX05BTUUsICJIUCBQYXZpbGlvbiBkdjUiLApAQCAtMjE0LDYgKzIxNiw3IEBACiAJCQl5X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiRFY3IiwgIkhQIFBhdmlsaW9uIGR2NyIsIHhfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJIUDg3MTAiLCAiSFAgQ29tcGFxIDg3MTAiLCB5X2ludmVydGVkKSwKKwlBWElTX0RNSV9NQVRDSCgiSERYMTgiLCAiSFAgSERYIDE4IiwgeF9pbnZlcnRlZCksCiAJeyBOVUxMLCB9CiAvKiBMYXB0b3AgbW9kZWxzIHdpdGhvdXQgYXhpcyBpbmZvICh5ZXQpOgogICogIk5DNjkxMCIgIkhQIENvbXBhcSA2OTEwIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pdDg3LmMgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwppbmRleCBmZmViMmExLi5hMzc0OWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2l0ODcuYworKysgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwpAQCAtMTAyOCwxMiArMTAyOCwxMSBAQAogCQljaGlwX3R5cGUsICphZGRyZXNzLCBzaW9fZGF0YS0+cmV2aXNpb24pOwogCiAJLyogUmVhZCBHUElPIGNvbmZpZyBhbmQgVklEIHZhbHVlIGZyb20gTEROIDcgKEdQSU8pICovCi0JaWYgKGNoaXBfdHlwZSAhPSBJVDg3MDVGX0RFVklEKSB7CisJaWYgKHNpb19kYXRhLT50eXBlICE9IGl0ODcpIHsKIAkJaW50IHJlZzsKIAogCQlzdXBlcmlvX3NlbGVjdChHUElPKTsKLQkJaWYgKChjaGlwX3R5cGUgPT0gaXQ4NzE4KSB8fAotCQkgICAgKGNoaXBfdHlwZSA9PSBpdDg3MjApKQorCQlpZiAoc2lvX2RhdGEtPnR5cGUgPT0gaXQ4NzE4IHx8IHNpb19kYXRhLT50eXBlID09IGl0ODcyMCkKIAkJCXNpb19kYXRhLT52aWRfdmFsdWUgPSBzdXBlcmlvX2luYihJVDg3X1NJT19WSURfUkVHKTsKIAogCQlyZWcgPSBzdXBlcmlvX2luYihJVDg3X1NJT19QSU5YMl9SRUcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXRpaXhwLmMgYi9kcml2ZXJzL2lkZS9hdGlpeHAuYwppbmRleCA2Mzk2YzNhLi44MzczMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdGlpeHAuYworKysgYi9kcml2ZXJzL2lkZS9hdGlpeHAuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9JREUpLCAwIH0sCiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9JREUpLCAxIH0sCiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9JREUpLCAwIH0sCi0JeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX0lERSksIDAgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9JREUpLCAwIH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGlpeHBfcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jbWQ2NHguYyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCmluZGV4IDY4MGU1OTcuLmNhMGM0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCkBAIC0zNzksNyArMzc5LDggQEAKIAkJLmVuYWJsZWJpdHMJPSB7ezB4MDAsMHgwMCwweDAwfSwgezB4NTEsMHgwOCwweDA4fX0sCiAJCS5wb3J0X29wcwk9ICZjbWQ2NHhfcG9ydF9vcHMsCiAJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0NMRUFSX1NJTVBMRVggfAotCQkJCSAgSURFX0hGTEFHX0FCVVNFX1BSRUZFVENILAorCQkJCSAgSURFX0hGTEFHX0FCVVNFX1BSRUZFVENIIHwKKwkJCQkgIElERV9IRkxBR19TRVJJQUxJWkUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU81LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSAweDAwLCAvKiBubyB1ZG1hICovCkBAIC0zODksNyArMzkwLDggQEAKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9jbWQ2NHgsCiAJCS5lbmFibGViaXRzCT0ge3sweDUxLDB4MDQsMHgwNH0sIHsweDUxLDB4MDgsMHgwOH19LAogCQkucG9ydF9vcHMJPSAmY21kNjQ4X3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0ggfAorCQkJCSAgSURFX0hGTEFHX1NFUklBTElaRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzUsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCBjNmY4OGViLi5jYzc2M2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC03ODIsMTAgKzc4MiwyOSBAQAogCXJldHVybiAwOwogfQogCit1bmlvbiBpbnB1dF9zZXFfc3RhdGUgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIHNob3J0IHBvczsKKwkJYm9vbCBtdXRleF9hY3F1aXJlZDsKKwl9OworCXZvaWQgKnA7Cit9OworCiBzdGF0aWMgdm9pZCAqaW5wdXRfZGV2aWNlc19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlucHV0X211dGV4KSkKLQkJcmV0dXJuIE5VTEw7CisJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOworCWludCBlcnJvcjsKKworCS8qIFdlIG5lZWQgdG8gZml0IGludG8gc2VxLT5wcml2YXRlIHBvaW50ZXIgKi8KKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSkgIT0gc2l6ZW9mKHNlcS0+cHJpdmF0ZSkpOworCisJZXJyb3IgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlucHV0X211dGV4KTsKKwlpZiAoZXJyb3IpIHsKKwkJc3RhdGUtPm11dGV4X2FjcXVpcmVkID0gZmFsc2U7CisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwl9CisKKwlzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQgPSB0cnVlOwogCiAJcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZpbnB1dF9kZXZfbGlzdCwgKnBvcyk7CiB9CkBAIC03OTUsOSArODE0LDEyIEBACiAJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJmlucHV0X2Rldl9saXN0LCBwb3MpOwogfQogCi1zdGF0aWMgdm9pZCBpbnB1dF9kZXZpY2VzX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorc3RhdGljIHZvaWQgaW5wdXRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0JbXV0ZXhfdW5sb2NrKCZpbnB1dF9tdXRleCk7CisJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOworCisJaWYgKHN0YXRlLT5tdXRleF9hY3F1aXJlZCkKKwkJbXV0ZXhfdW5sb2NrKCZpbnB1dF9tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlucHV0X3NlcV9wcmludF9iaXRtYXAoc3RydWN0IHNlcV9maWxlICpzZXEsIGNvbnN0IGNoYXIgKm5hbWUsCkBAIC04NjEsNyArODgzLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW5wdXRfZGV2aWNlc19zZXFfb3BzID0gewogCS5zdGFydAk9IGlucHV0X2RldmljZXNfc2VxX3N0YXJ0LAogCS5uZXh0CT0gaW5wdXRfZGV2aWNlc19zZXFfbmV4dCwKLQkuc3RvcAk9IGlucHV0X2RldmljZXNfc2VxX3N0b3AsCisJLnN0b3AJPSBpbnB1dF9zZXFfc3RvcCwKIAkuc2hvdwk9IGlucHV0X2RldmljZXNfc2VxX3Nob3csCiB9OwogCkBAIC04ODEsNDAgKzkwMyw0OSBAQAogCiBzdGF0aWMgdm9pZCAqaW5wdXRfaGFuZGxlcnNfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCkpCi0JCXJldHVybiBOVUxMOworCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKKwlpbnQgZXJyb3I7CiAKLQlzZXEtPnByaXZhdGUgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSpwb3M7CisJLyogV2UgbmVlZCB0byBmaXQgaW50byBzZXEtPnByaXZhdGUgcG9pbnRlciAqLworCUJVSUxEX0JVR19PTihzaXplb2YodW5pb24gaW5wdXRfc2VxX3N0YXRlKSAhPSBzaXplb2Yoc2VxLT5wcml2YXRlKSk7CisKKwllcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfbXV0ZXgpOworCWlmIChlcnJvcikgeworCQlzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQgPSBmYWxzZTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworCX0KKworCXN0YXRlLT5tdXRleF9hY3F1aXJlZCA9IHRydWU7CisJc3RhdGUtPnBvcyA9ICpwb3M7CisKIAlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJmlucHV0X2hhbmRsZXJfbGlzdCwgKnBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkICppbnB1dF9oYW5kbGVyc19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc2VxLT5wcml2YXRlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykoKnBvcyArIDEpOwotCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZpbnB1dF9oYW5kbGVyX2xpc3QsIHBvcyk7Ci19CisJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOwogCi1zdGF0aWMgdm9pZCBpbnB1dF9oYW5kbGVyc19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQltdXRleF91bmxvY2soJmlucHV0X211dGV4KTsKKwlzdGF0ZS0+cG9zID0gKnBvcyArIDE7CisJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJmlucHV0X2hhbmRsZXJfbGlzdCwgcG9zKTsKIH0KIAogc3RhdGljIGludCBpbnB1dF9oYW5kbGVyc19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlciA9IGNvbnRhaW5lcl9vZih2LCBzdHJ1Y3QgaW5wdXRfaGFuZGxlciwgbm9kZSk7CisJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOwogCi0Jc2VxX3ByaW50ZihzZXEsICJOOiBOdW1iZXI9JWxkIE5hbWU9JXMiLAotCQkgICAodW5zaWduZWQgbG9uZylzZXEtPnByaXZhdGUsIGhhbmRsZXItPm5hbWUpOworCXNlcV9wcmludGYoc2VxLCAiTjogTnVtYmVyPSV1IE5hbWU9JXMiLCBzdGF0ZS0+cG9zLCBoYW5kbGVyLT5uYW1lKTsKIAlpZiAoaGFuZGxlci0+Zm9wcykKIAkJc2VxX3ByaW50ZihzZXEsICIgTWlub3I9JWQiLCBoYW5kbGVyLT5taW5vcik7CiAJc2VxX3B1dGMoc2VxLCAnXG4nKTsKIAogCXJldHVybiAwOwogfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlucHV0X2hhbmRsZXJzX3NlcV9vcHMgPSB7CiAJLnN0YXJ0CT0gaW5wdXRfaGFuZGxlcnNfc2VxX3N0YXJ0LAogCS5uZXh0CT0gaW5wdXRfaGFuZGxlcnNfc2VxX25leHQsCi0JLnN0b3AJPSBpbnB1dF9oYW5kbGVyc19zZXFfc3RvcCwKKwkuc3RvcAk9IGlucHV0X3NlcV9zdG9wLAogCS5zaG93CT0gaW5wdXRfaGFuZGxlcnNfc2VxX3Nob3csCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggNDcwOWUxNS4uYTY1MTIzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtNTc0LDExICs1NzQsMjIgQEAKIAogCW11dGV4X2xvY2soJmF0a2JkLT5ldmVudF9tdXRleCk7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX0xFRF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCi0JCWF0a2JkX3NldF9sZWRzKGF0a2JkKTsKKwlpZiAoIWF0a2JkLT5lbmFibGVkKSB7CisJCS8qCisJCSAqIFNlcmlvIHBvcnRzIGFyZSByZXN1bWVkIGFzeW5jaHJvbm91c2x5IHNvIHdoaWxlIGRyaXZlciBjb3JlCisJCSAqIHRoaW5rcyB0aGF0IGRldmljZSBpcyBhbHJlYWR5IGZ1bGx5IG9wZXJhdGlvbmFsIGluIHJlYWxpdHkKKwkJICogaXQgbWF5IG5vdCBiZSByZWFkeSB5ZXQuIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGtlZXAKKwkJICogcmVzY2hlZHVsaW5nIHRpbGwgcmVjb25uZWN0IGNvbXBsZXRlcy4KKwkJICovCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYXRrYmQtPmV2ZW50X3dvcmssCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJfSBlbHNlIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9MRURfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQorCQkJYXRrYmRfc2V0X2xlZHMoYXRrYmQpOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9SRVBfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQotCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX1JFUF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCisJCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCX0KIAogCW11dGV4X3VubG9jaygmYXRrYmQtPmV2ZW50X211dGV4KTsKIH0KQEAgLTc3MCw2ICs3ODEsMzAgQEAKIAlyZXR1cm4gMzsKIH0KIAorc3RhdGljIGludCBhdGtiZF9yZXNldF9zdGF0ZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQoreworICAgICAgICBzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmYXRrYmQtPnBzMmRldjsKKwl1bnNpZ25lZCBjaGFyIHBhcmFtWzFdOworCisvKgorICogU2V0IHRoZSBMRURzIHRvIGEgcHJlZGVmaW5lZCBzdGF0ZSAoYWxsIG9mZikuCisgKi8KKworCXBhcmFtWzBdID0gMDsKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgQVRLQkRfQ01EX1NFVExFRFMpKQorCQlyZXR1cm4gLTE7CisKKy8qCisgKiBTZXQgYXV0b3JlcGVhdCB0byBmYXN0ZXN0IHBvc3NpYmxlLgorICovCisKKwlwYXJhbVswXSA9IDA7CisJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIEFUS0JEX0NNRF9TRVRSRVApKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdGtiZF9hY3RpdmF0ZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZhdGtiZC0+cHMyZGV2OwpAQCAtODUyLDI5ICs4ODcsNiBAQAogfTsKIAogLyoKLSAqIEludmVudGVjIHN5c3RlbSB3aXRoIGJyb2tlbiBrZXkgcmVsZWFzZSBvbiB2b2x1bWUga2V5cwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2ludmVudGVjX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGZpeHVwIGZvciBIUCBQYXZpbGlvbiBaVjYxMDAgbGFwdG9wIHRoYXQgZG9lc24ndCBnZW5lcmF0ZSByZWxlYXNlCi0gKiBmb3IgaXRzIHZvbHVtZSBidXR0b25zCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfaHBfenY2MTAwX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGZpeHVwIGZvciBIUCAoQ29tcGFxKSBQcmVzYXJpbyBSNDAwMCBSNDEwMCBSNDIwMCB0aGF0IGRvbid0IGdlbmVyYXRlCi0gKiByZWxlYXNlIGZvciB0aGVpciB2b2x1bWUgYnV0dG9ucwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2hwX3I0MDAwX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCiAgKiBTYW1zdW5nIE5DMTAsTkMyMCB3aXRoIEZuK0Y/IGtleSByZWxlYXNlIG5vdCB3b3JraW5nCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfc2Ftc3VuZ19mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7CkBAIC04ODIsMTQgKzg5NCw2IEBACiB9OwogCiAvKgotICogVGhlIHZvbHVtZSB1cCBhbmQgdm9sdW1lIGRvd24gc3BlY2lhbCBrZXlzIG9uIGEgRnVqaXRzdSBBbWlsbyBQQSAxNTEwIGxhcHRvcAotICogZG8gbm90IGdlbmVyYXRlIHJlbGVhc2UgZXZlbnRzIHNvIHdlIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2FtaWxvX3BhMTUxMF9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7Ci0JMHhiMCwgMHhhZSwgLTFVCi19OwotCi0vKgogICogQW1pbG8gUGkgMzUyNSBrZXkgcmVsZWFzZSBmb3IgRm4rVm9sdW1lIGtleXMgbm90IHdvcmtpbmcKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9hbWlsb19waTM1MjVfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewpAQCAtOTExLDYgKzkxNSwxNCBAQAogfTsKIAogLyoKKyAqIE1hbnkgbm90ZWJvb2tzIGRvbid0IHNlbmQga2V5IHJlbGVhc2UgZXZlbnQgZm9yIHZvbHVtZSB1cC9kb3duCisgKiBrZXlzLCB3aXRoIGtleSBsaXN0IGJlbG93IGNvbW1vbiBhbW9uZyB0aGVtCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKKwkweGFlLCAweGIwLCAtMVUKK307CisKKy8qCiAgKiBhdGtiZF9zZXRfa2V5Y29kZV90YWJsZSgpIGluaXRpYWxpemVzIGtleWJvYXJkJ3Mga2V5Y29kZSB0YWJsZQogICogYWNjb3JkaW5nIHRvIHRoZSBzZWxlY3RlZCBzY2FuY29kZSBzZXQKICAqLwpAQCAtMTA4Nyw2ICsxMDk5LDcgQEAKIAkJfQogCiAJCWF0a2JkLT5zZXQgPSBhdGtiZF9zZWxlY3Rfc2V0KGF0a2JkLCBhdGtiZF9zZXQsIGF0a2JkX2V4dHJhKTsKKwkJYXRrYmRfcmVzZXRfc3RhdGUoYXRrYmQpOwogCQlhdGtiZF9hY3RpdmF0ZShhdGtiZCk7CiAKIAl9IGVsc2UgewpAQCAtMTI2Nyw2ICsxMjgwLDcgQEAKIAogCQlhdGtiZC0+ZGV2ID0gbmV3X2RldjsKIAkJYXRrYmQtPnNldCA9IGF0a2JkX3NlbGVjdF9zZXQoYXRrYmQsIGF0a2JkLT5zZXQsIHZhbHVlKTsKKwkJYXRrYmRfcmVzZXRfc3RhdGUoYXRrYmQpOwogCQlhdGtiZF9hY3RpdmF0ZShhdGtiZCk7CiAJCWF0a2JkX3NldF9rZXljb2RlX3RhYmxlKGF0a2JkKTsKIAkJYXRrYmRfc2V0X2RldmljZV9hdHRycyhhdGtiZCk7CkBAIC0xNTQ4LDcgKzE1NjIsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQYXZpbGlvbiBaVjYxMDAiKSwKIAkJfSwKIAkJLmNhbGxiYWNrID0gYXRrYmRfc2V0dXBfZm9yY2VkX3JlbGVhc2UsCi0JCS5kcml2ZXJfZGF0YSA9IGF0a2JkX2hwX3p2NjEwMF9mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIkhQIFByZXNhcmlvIFI0MDAwIiwKQEAgLTE1NTcsNyArMTU3MSw3IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlByZXNhcmlvIFI0MDAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF9yNDAwMF9mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIkhQIFByZXNhcmlvIFI0MTAwIiwKQEAgLTE1NjYsNyArMTU4MCw3IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlByZXNhcmlvIFI0MTAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF9yNDAwMF9mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIkhQIFByZXNhcmlvIFI0MjAwIiwKQEAgLTE1NzUsNyArMTU4OSw3IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlByZXNhcmlvIFI0MjAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF9yNDAwMF9mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIkludmVudGVjIFN5bXBob255IiwKQEAgLTE1ODQsNyArMTU5OCw3IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlNZTVBIT05ZIDYuMC83LjAiKSwKIAkJfSwKIAkJLmNhbGxiYWNrID0gYXRrYmRfc2V0dXBfZm9yY2VkX3JlbGVhc2UsCi0JCS5kcml2ZXJfZGF0YSA9IGF0a2JkX2ludmVudGVjX2ZvcmNlZF9yZWxlYXNlX2tleXMsCisJCS5kcml2ZXJfZGF0YSA9IGF0a2JkX3ZvbHVtZV9mb3JjZWRfcmVsZWFzZV9rZXlzLAogCX0sCiAJewogCQkuaWRlbnQgPSAiU2Ftc3VuZyBOQzEwIiwKQEAgLTE2MjAsNyArMTYzNCw3IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFNSUxPIFBhIDE1MTAiKSwKIAkJfSwKIAkJLmNhbGxiYWNrID0gYXRrYmRfc2V0dXBfZm9yY2VkX3JlbGVhc2UsCi0JCS5kcml2ZXJfZGF0YSA9IGF0a2JkX2FtaWxvX3BhMTUxMF9mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIkZ1aml0c3UgQW1pbG8gUGkgMzUyNSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYwppbmRleCAyMTZhNTU5Li5lYTgyMWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9ocF9zZGNfcnRjLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCiAvKiBSZWFkIHRoZSBpODA0MiBmYXN0IGhhbmRzaGFrZSB0aW1lciAqLwogc3RhdGljIGlubGluZSBpbnQgaHBfc2RjX3J0Y19yZWFkX2ZocyhzdHJ1Y3QgdGltZXZhbCAqcmVzKSB7Ci0JdWludDY0X3QgcmF3OworCWludDY0X3QgcmF3OwogCXVuc2lnbmVkIGludCB0ZW5tczsKIAogCXJhdyA9IGhwX3NkY19ydGNfcmVhZF9pODA0MnRpbWVyKEhQX1NEQ19DTURfTE9BRF9GSFMsIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKaW5kZXggZGU3NDVkNy4uYWI1ZGM1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCkBAIC0yMTksNyArMjE5LDcgQEAKIAkJCQlQUzJQUF9XSEVFTCB8IFBTMlBQX1NJREVfQlROIHwgUFMyUFBfVEFTS19CVE4gfAogCQkJCVBTMlBQX0VYVFJBX0JUTiB8IFBTMlBQX05BVl9CVE4gfCBQUzJQUF9IV0hFRUwgfSwKIAkJeyA3MiwJUFMyUFBfS0lORF9UUkFDS01BTiwJMCB9LAkJCS8qIFQtQ0gxMTogVHJhY2tNYW4gTWFyYmxlICovCi0JCXsgNzMsCTAsCQkJUFMyUFBfU0lERV9CVE4gfSwKKwkJeyA3MywJUFMyUFBfS0lORF9UUkFDS01BTiwJUFMyUFBfU0lERV9CVE4gfSwJLyogVHJhY2tNYW4gRlggKi8KIAkJeyA3NSwJUFMyUFBfS0lORF9XSEVFTCwJUFMyUFBfV0hFRUwgfSwKIAkJeyA3NiwJUFMyUFBfS0lORF9XSEVFTCwJUFMyUFBfV0hFRUwgfSwKIAkJeyA3OSwJUFMyUFBfS0lORF9UUkFDS01BTiwJUFMyUFBfV0hFRUwgfSwJCS8qIFRyYWNrTWFuIHdpdGggd2hlZWwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCmluZGV4IGI2NmZmMWEuLmY0YTYxMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwpAQCAtNjUyLDYgKzY1MiwxNiBAQAogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiVE9TSElCQSIpLAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQT1JURUdFIE0zMDAiKSwKIAkJfSwKKworCX0sCisJeworCQkuaWRlbnQgPSAiVG9zaGliYSBQb3J0ZWdlIE0zMDAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUG9ydGFibGUgUEMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9WRVJTSU9OLCAiVmVyc2lvbiAxLjAiKSwKKwkJfSwKKwogCX0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggYTM5YmM0ZS4uYTUzNzkyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC0zMjcsNiArMzI3LDE3IEBACiAJCX0sCiAJfSwKIAl7CisJCS8qCisJCSAqIFJlc2V0IGFuZCBHRVQgSUQgY29tbWFuZHMgaXNzdWVkIHZpYSBLQkQgcG9ydCBhcmUKKwkJICogc29tZXRpbWVzIGJlaW5nIGRlbGl2ZXJlZCB0byBBVVgzLgorCQkgKi8KKwkJLmlkZW50ID0gIlNvbnkgVmFpbyBGWi0yNDBFIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTb255IENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZHTi1GWjI0MEUiKSwKKwkJfSwKKwl9LAorCXsKIAkJLmlkZW50ID0gIkFtb2kgTTYzNi9BNzM3IiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBbW9pIEVsZWN0cm9uaWNzIENPLixMVEQuIiksCkBAIC02NjEsNyArNjcyLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGk4MDQyX3BucF9pbml0KHZvaWQpCiB7CiAJY2hhciBrYmRfaXJxX3N0cls0XSA9IHsgMCB9LCBhdXhfaXJxX3N0cls0XSA9IHsgMCB9OwotCWludCBwbnBfZGF0YV9idXN0ZWQgPSBmYWxzZTsKKwlib29sIHBucF9kYXRhX2J1c3RlZCA9IGZhbHNlOwogCWludCBlcnI7CiAKICNpZmRlZiBDT05GSUdfWDg2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmggYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmgKaW5kZXggNzQwMzJkMC4uNzUxMWYwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5oCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuaApAQCAtODMsMTkgKzgzLDE5IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbmQtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAlscCA9IG5kLT5xdWV1ZTsgICAgICAgICAvKiBnZXQgbHAgb24gdG9wIG9mIHF1ZXVlICovCi0Jc3Bpbl9sb2NrKCZuZC0+cXVldWUtPnhtaXRfbG9jayk7CiAJd2hpbGUgKGlzZG5fbmV0X2xwX2J1c3kobmQtPnF1ZXVlKSkgewotCQlzcGluX3VubG9jaygmbmQtPnF1ZXVlLT54bWl0X2xvY2spOwogCQluZC0+cXVldWUgPSBuZC0+cXVldWUtPm5leHQ7CiAJCWlmIChuZC0+cXVldWUgPT0gbHApIHsgLyogbm90IGZvdW5kIC0tIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KIAkJCWxwID0gTlVMTDsKIAkJCWdvdG8gZXJyb3V0OwogCQl9Ci0JCXNwaW5fbG9jaygmbmQtPnF1ZXVlLT54bWl0X2xvY2spOwogCX0KIAlscCA9IG5kLT5xdWV1ZTsKIAluZC0+cXVldWUgPSBuZC0+cXVldWUtPm5leHQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmQtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmxwLT54bWl0X2xvY2spOwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlyZXR1cm4gbHA7CiBlcnJvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmQtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gbHA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggYjQwZmI5Yi4uNmYzMDhhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwpAQCAtNDA1LDcgKzQwNSwxMSBAQAogCQlwcmludGsoS0VSTl9FUlIgInZpYS1wbXU6IGNhbid0IG1hcCBpbnRlcnJ1cHRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgdmlhX3BtdV9pbnRlcnJ1cHQsIDAsICJWSUEtUE1VIiwgKHZvaWQgKikwKSkgeworCS8qIFdlIHNldCBJUlFGX1RJTUVSIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkCisJICogYmV0d2VlbiB0aGUgMiBwYXNzZXMgb2YgZHJpdmVyIHN1c3BlbmQsIHdlIGNvbnRyb2wgb3VyIG93biBkaXNhYmxpbmcKKwkgKiBmb3IgdGhhdCBvbmUKKwkgKi8KKwlpZiAocmVxdWVzdF9pcnEoaXJxLCB2aWFfcG11X2ludGVycnVwdCwgSVJRRl9USU1FUiwgIlZJQS1QTVUiLCAodm9pZCAqKTApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidmlhLXBtdTogY2FuJ3QgcmVxdWVzdCBpcnEgJWRcbiIsIGlycSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTQxOSw3ICs0MjMsNyBAQAogCQkJZ3Bpb19pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChncGlvX25vZGUsIDApOwogCiAJCWlmIChncGlvX2lycSAhPSBOT19JUlEpIHsKLQkJCWlmIChyZXF1ZXN0X2lycShncGlvX2lycSwgZ3BpbzFfaW50ZXJydXB0LCAwLAorCQkJaWYgKHJlcXVlc3RfaXJxKGdwaW9faXJxLCBncGlvMV9pbnRlcnJ1cHQsIElSUUZfVElNRVIsCiAJCQkJCSJHUElPMSBBREIiLCAodm9pZCAqKTApKQogCQkJCXByaW50ayhLRVJOX0VSUiAicG11OiBjYW4ndCBnZXQgaXJxICVkIgogCQkJCSAgICAgICAiIChHUElPMSlcbiIsIGdwaW9faXJxKTsKQEAgLTkyNSw4ICs5MjksNyBAQAogCiAjaWZkZWYgQ09ORklHX0FEQgogLyogU2VuZCBhbiBBREIgY29tbWFuZCAqLwotc3RhdGljIGludAotcG11X3NlbmRfcmVxdWVzdChzdHJ1Y3QgYWRiX3JlcXVlc3QgKnJlcSwgaW50IHN5bmMpCitzdGF0aWMgaW50IHBtdV9zZW5kX3JlcXVlc3Qoc3RydWN0IGFkYl9yZXF1ZXN0ICpyZXEsIGludCBzeW5jKQogewogCWludCBpLCByZXQ7CiAKQEAgLTEwMDUsMTYgKzEwMDgsMTEgQEAKIH0KIAogLyogRW5hYmxlL2Rpc2FibGUgYXV0b3BvbGxpbmcgKi8KLXN0YXRpYyBpbnQKLXBtdV9hZGJfYXV0b3BvbGwoaW50IGRldnMpCitzdGF0aWMgaW50IF9fcG11X2FkYl9hdXRvcG9sbChpbnQgZGV2cykKIHsKIAlzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOwogCi0JaWYgKCh2aWFzID09IE5VTEwpIHx8ICghcG11X2Z1bGx5X2luaXRlZCkgfHwgIXBtdV9oYXNfYWRiKQotCQlyZXR1cm4gLUVOWElPOwotCiAJaWYgKGRldnMpIHsKLQkJYWRiX2Rldl9tYXAgPSBkZXZzOwogCQlwbXVfcmVxdWVzdCgmcmVxLCBOVUxMLCA1LCBQTVVfQURCX0NNRCwgMCwgMHg4NiwKIAkJCSAgICBhZGJfZGV2X21hcCA+PiA4LCBhZGJfZGV2X21hcCk7CiAJCXBtdV9hZGJfZmxhZ3MgPSAyOwpAQCAtMTAyNyw5ICsxMDI1LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcG11X2FkYl9hdXRvcG9sbChpbnQgZGV2cykKK3sKKwlpZiAoKHZpYXMgPT0gTlVMTCkgfHwgKCFwbXVfZnVsbHlfaW5pdGVkKSB8fCAhcG11X2hhc19hZGIpCisJCXJldHVybiAtRU5YSU87CisKKwlhZGJfZGV2X21hcCA9IGRldnM7CisJcmV0dXJuIF9fcG11X2FkYl9hdXRvcG9sbChkZXZzKTsKK30KKwogLyogUmVzZXQgdGhlIEFEQiBidXMgKi8KLXN0YXRpYyBpbnQKLXBtdV9hZGJfcmVzZXRfYnVzKHZvaWQpCitzdGF0aWMgaW50IHBtdV9hZGJfcmVzZXRfYnVzKHZvaWQpCiB7CiAJc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKIAlpbnQgc2F2ZV9hdXRvcG9sbCA9IGFkYl9kZXZfbWFwOwpAQCAtMTAzOCwxMyArMTA0NCwxMyBAQAogCQlyZXR1cm4gLUVOWElPOwogCiAJLyogYW55b25lIGdvdCBhIGJldHRlciBpZGVhPz8gKi8KLQlwbXVfYWRiX2F1dG9wb2xsKDApOworCV9fcG11X2FkYl9hdXRvcG9sbCgwKTsKIAotCXJlcS5uYnl0ZXMgPSA1OworCXJlcS5uYnl0ZXMgPSA0OwogCXJlcS5kb25lID0gTlVMTDsKIAlyZXEuZGF0YVswXSA9IFBNVV9BREJfQ01EOwotCXJlcS5kYXRhWzFdID0gMDsKLQlyZXEuZGF0YVsyXSA9IEFEQl9CVVNSRVNFVDsKKwlyZXEuZGF0YVsxXSA9IEFEQl9CVVNSRVNFVDsKKwlyZXEuZGF0YVsyXSA9IDA7CiAJcmVxLmRhdGFbM10gPSAwOwogCXJlcS5kYXRhWzRdID0gMDsKIAlyZXEucmVwbHlfbGVuID0gMDsKQEAgLTEwNTYsNyArMTA2Miw3IEBACiAJcG11X3dhaXRfY29tcGxldGUoJnJlcSk7CiAKIAlpZiAoc2F2ZV9hdXRvcG9sbCAhPSAwKQotCQlwbXVfYWRiX2F1dG9wb2xsKHNhdmVfYXV0b3BvbGwpOworCQlfX3BtdV9hZGJfYXV0b3BvbGwoc2F2ZV9hdXRvcG9sbCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvTWFrZWZpbGUgYi9kcml2ZXJzL21kL01ha2VmaWxlCmluZGV4IDFkYzQxODUuLmUzNTVlN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9NYWtlZmlsZQpAQCAtNDYsNyArNDYsNyBAQAogb2JqLSQoQ09ORklHX0RNX1pFUk8pCQkrPSBkbS16ZXJvLm8KIAogcXVpZXRfY21kX3Vucm9sbCA9IFVOUk9MTCAgJEAKLSAgICAgIGNtZF91bnJvbGwgPSAkKFBFUkwpICQoc3JjdHJlZSkvJChzcmMpL3Vucm9sbC5wbCAkKFVOUk9MTCkgXAorICAgICAgY21kX3Vucm9sbCA9ICQoQVdLKSAtZiQoc3JjdHJlZSkvJChzcmMpL3Vucm9sbC5hd2sgLXZOPSQoVU5ST0xMKSBcCiAgICAgICAgICAgICAgICAgICAgPCAkPCA+ICRAIHx8ICggcm0gLWYgJEAgJiYgZXhpdCAxICkKIAogaWZlcSAoJChDT05GSUdfQUxUSVZFQykseSkKQEAgLTU5LDU2ICs1OSw1NiBAQAogCiB0YXJnZXRzICs9IHJhaWQ2aW50MS5jCiAkKG9iaikvcmFpZDZpbnQxLmM6ICAgVU5ST0xMIDo9IDEKLSQob2JqKS9yYWlkNmludDEuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MS5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDIuYwogJChvYmopL3JhaWQ2aW50Mi5jOiAgIFVOUk9MTCA6PSAyCi0kKG9iaikvcmFpZDZpbnQyLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDIuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQ0LmMKICQob2JqKS9yYWlkNmludDQuYzogICBVTlJPTEwgOj0gNAotJChvYmopL3JhaWQ2aW50NC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQ0LmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50OC5jCiAkKG9iaikvcmFpZDZpbnQ4LmM6ICAgVU5ST0xMIDo9IDgKLSQob2JqKS9yYWlkNmludDguYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50OC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDE2LmMKICQob2JqKS9yYWlkNmludDE2LmM6ICBVTlJPTEwgOj0gMTYKLSQob2JqKS9yYWlkNmludDE2LmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MTYuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDMyLmMKICQob2JqKS9yYWlkNmludDMyLmM6ICBVTlJPTEwgOj0gMzIKLSQob2JqKS9yYWlkNmludDMyLmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MzIuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzEubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzEuYwogJChvYmopL3JhaWQ2YWx0aXZlYzEuYzogICBVTlJPTEwgOj0gMQotJChvYmopL3JhaWQ2YWx0aXZlYzEuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWMxLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzIubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzIuYwogJChvYmopL3JhaWQ2YWx0aXZlYzIuYzogICBVTlJPTEwgOj0gMgotJChvYmopL3JhaWQ2YWx0aXZlYzIuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzQubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzQuYwogJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICBVTlJPTEwgOj0gNAotJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWM0LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzgubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzguYwogJChvYmopL3JhaWQ2YWx0aXZlYzguYzogICBVTlJPTEwgOj0gOAotJChvYmopL3JhaWQ2YWx0aXZlYzguYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWM4LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogcXVpZXRfY21kX21rdGFibGUgPSBUQUJMRSAgICRACmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCA2OTg2YjAwLi42MGUyYjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTE2MjQsMTAgKzE2MjQsMTEgQEAKIAliaXRtYXAtPm9mZnNldCA9IG1kZGV2LT5iaXRtYXBfb2Zmc2V0OwogCWlmIChmaWxlKSB7CiAJCWdldF9maWxlKGZpbGUpOwotCQlkb19zeW5jX21hcHBpbmdfcmFuZ2UoZmlsZS0+Zl9tYXBwaW5nLCAwLCBMTE9OR19NQVgsCi0JCQkJICAgICAgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFIHwKLQkJCQkgICAgICBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUgfAotCQkJCSAgICAgIFNZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSKTsKKwkJLyogQXMgZnV0dXJlIGFjY2Vzc2VzIHRvIHRoaXMgZmlsZSB3aWxsIHVzZSBibWFwLAorCQkgKiBhbmQgYnlwYXNzIHRoZSBwYWdlIGNhY2hlLCB3ZSBtdXN0IHN5bmMgdGhlIGZpbGUKKwkJICogZmlyc3QuCisJCSAqLworCQl2ZnNfZnN5bmMoZmlsZSwgZmlsZS0+Zl9kZW50cnksIDEpOwogCX0KIAkvKiByZWFkIHN1cGVyYmxvY2sgZnJvbSBiaXRtYXAgZmlsZSAodGhpcyBzZXRzIGJpdG1hcC0+Y2h1bmtzaXplKSAqLwogCWVyciA9IGJpdG1hcF9yZWFkX3NiKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYwppbmRleCA1NTZhY2ZmLi43ZGJlNjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKQEAgLTEzOCwxNiArMTM4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3Rlcik7CiAKLS8qCi0gKiBSb3VuZCBhIG51bWJlciB1cCB0byB0aGUgbmVhcmVzdCAnc2l6ZScgYm91bmRhcnkuICBzaXplIG11c3QKLSAqIGJlIGEgcG93ZXIgb2YgMi4KLSAqLwotc3RhdGljIHVsb25nIHJvdW5kX3VwKHVsb25nIG4sIHVsb25nIHNpemUpCi17Ci0Jc2l6ZS0tOwotCXJldHVybiAobiArIHNpemUpICYgfnNpemU7Ci19Ci0KIHN0YXRpYyBpbnQgc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCiAJCQkgIGNvbnN0IGNoYXIgKmNodW5rX3NpemVfYXJnLCBjaGFyICoqZXJyb3IpCiB7CkBAIC0xNTUsNyArMTQ1LDggQEAKIAljaGFyICp2YWx1ZTsKIAogCWNodW5rX3NpemVfdWxvbmcgPSBzaW1wbGVfc3RydG91bChjaHVua19zaXplX2FyZywgJnZhbHVlLCAxMCk7Ci0JaWYgKCpjaHVua19zaXplX2FyZyA9PSAnXDAnIHx8ICp2YWx1ZSAhPSAnXDAnKSB7CisJaWYgKCpjaHVua19zaXplX2FyZyA9PSAnXDAnIHx8ICp2YWx1ZSAhPSAnXDAnIHx8CisJICAgIGNodW5rX3NpemVfdWxvbmcgPiBVSU5UX01BWCkgewogCQkqZXJyb3IgPSAiSW52YWxpZCBjaHVuayBzaXplIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTY1LDQwICsxNTYsMzUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBDaHVuayBzaXplIG11c3QgYmUgbXVsdGlwbGUgb2YgcGFnZSBzaXplLiAgU2lsZW50bHkKLQkgKiByb3VuZCB1cCBpZiBpdCdzIG5vdC4KLQkgKi8KLQljaHVua19zaXplX3Vsb25nID0gcm91bmRfdXAoY2h1bmtfc2l6ZV91bG9uZywgUEFHRV9TSVpFID4+IDkpOwotCi0JcmV0dXJuIGRtX2V4Y2VwdGlvbl9zdG9yZV9zZXRfY2h1bmtfc2l6ZShzdG9yZSwgY2h1bmtfc2l6ZV91bG9uZywKKwlyZXR1cm4gZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHN0b3JlLAorCQkJCQkJICh1bnNpZ25lZCkgY2h1bmtfc2l6ZV91bG9uZywKIAkJCQkJCSBlcnJvcik7CiB9CiAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBjaHVua19zaXplX3Vsb25nLAorCQkJCSAgICAgIHVuc2lnbmVkIGNodW5rX3NpemUsCiAJCQkJICAgICAgY2hhciAqKmVycm9yKQogewogCS8qIENoZWNrIGNodW5rX3NpemUgaXMgYSBwb3dlciBvZiAyICovCi0JaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemVfdWxvbmcpKSB7CisJaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemUpKSB7CiAJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIDIiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBWYWxpZGF0ZSB0aGUgY2h1bmsgc2l6ZSBhZ2FpbnN0IHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSAqLwotCWlmIChjaHVua19zaXplX3Vsb25nICUgKGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHN0b3JlLT5jb3ctPmJkZXYpID4+IDkpKSB7CisJaWYgKGNodW5rX3NpemUgJSAoYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc3RvcmUtPmNvdy0+YmRldikgPj4gOSkpIHsKIAkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgbXVsdGlwbGUgb2YgZGV2aWNlIGJsb2Nrc2l6ZSI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjaHVua19zaXplX3Vsb25nID4gSU5UX01BWCA+PiBTRUNUT1JfU0hJRlQpIHsKKwlpZiAoY2h1bmtfc2l6ZSA+IElOVF9NQVggPj4gU0VDVE9SX1NISUZUKSB7CiAJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIHRvbyBoaWdoIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3RvcmUtPmNodW5rX3NpemUgPSBjaHVua19zaXplX3Vsb25nOwotCXN0b3JlLT5jaHVua19tYXNrID0gY2h1bmtfc2l6ZV91bG9uZyAtIDE7Ci0Jc3RvcmUtPmNodW5rX3NoaWZ0ID0gZmZzKGNodW5rX3NpemVfdWxvbmcpIC0gMTsKKwlzdG9yZS0+Y2h1bmtfc2l6ZSA9IGNodW5rX3NpemU7CisJc3RvcmUtPmNodW5rX21hc2sgPSBjaHVua19zaXplIC0gMTsKKwlzdG9yZS0+Y2h1bmtfc2hpZnQgPSBmZnMoY2h1bmtfc2l6ZSkgLSAxOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTEsNyArMjM3LDcgQEAKIAogCXIgPSBzZXRfY2h1bmtfc2l6ZSh0bXBfc3RvcmUsIGFyZ3ZbMl0sICZ0aS0+ZXJyb3IpOwogCWlmIChyKQotCQlnb3RvIGJhZF9jb3c7CisJCWdvdG8gYmFkX2N0cjsKIAogCXIgPSB0eXBlLT5jdHIodG1wX3N0b3JlLCAwLCBOVUxMKTsKIAlpZiAocikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaCBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKaW5kZXggODEyYzcxOC4uOGEyMjNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaAorKysgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oCkBAIC0xMDEsOSArMTAxLDkgQEAKIAlzdHJ1Y3QgZG1fZGV2ICpjb3c7CiAKIAkvKiBTaXplIG9mIGRhdGEgYmxvY2tzIHNhdmVkIC0gbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KLQljaHVua190IGNodW5rX3NpemU7Ci0JY2h1bmtfdCBjaHVua19tYXNrOwotCWNodW5rX3QgY2h1bmtfc2hpZnQ7CisJdW5zaWduZWQgY2h1bmtfc2l6ZTsKKwl1bnNpZ25lZCBjaHVua19tYXNrOworCXVuc2lnbmVkIGNodW5rX3NoaWZ0OwogCiAJdm9pZCAqY29udGV4dDsKIH07CkBAIC0xNjksNyArMTY5LDcgQEAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZSk7CiAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBjaHVua19zaXplX3Vsb25nLAorCQkJCSAgICAgIHVuc2lnbmVkIGNodW5rX3NpemUsCiAJCQkJICAgICAgY2hhciAqKmVycm9yKTsKIAogaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9jcmVhdGUoc3RydWN0IGRtX3RhcmdldCAqdGksIGludCBhcmdjLCBjaGFyICoqYXJndiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMgYi9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jCmluZGV4IDY1MmJkMzMuLjdhYzJjMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMKKysrIGIvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJfQogCiAJLyogVGhlIHB0ciB2YWx1ZSBpcyBzdWZmaWNpZW50IGZvciBsb2NhbCB1bmlxdWUgaWQgKi8KLQlsYy0+bHVpZCA9ICh1aW50NjRfdClsYzsKKwlsYy0+bHVpZCA9ICh1bnNpZ25lZCBsb25nKWxjOwogCiAJbGMtPnRpID0gdGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCmluZGV4IGQ1YjJlMDg3Li4wYzc0NjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKQEAgLTI4NCwxMiArMjg0LDEzIEBACiB7CiAJaW50IHI7CiAJc3RydWN0IGRpc2tfaGVhZGVyICpkaDsKLQljaHVua190IGNodW5rX3NpemU7CisJdW5zaWduZWQgY2h1bmtfc2l6ZTsKIAlpbnQgY2h1bmtfc2l6ZV9zdXBwbGllZCA9IDE7CiAJY2hhciAqY2h1bmtfZXJyOwogCiAJLyoKLQkgKiBVc2UgZGVmYXVsdCBjaHVuayBzaXplIChvciBoYXJkc2VjdF9zaXplLCBpZiBsYXJnZXIpIGlmIG5vbmUgc3VwcGxpZWQKKwkgKiBVc2UgZGVmYXVsdCBjaHVuayBzaXplIChvciBsb2dpY2FsX2Jsb2NrX3NpemUsIGlmIGxhcmdlcikKKwkgKiBpZiBub25lIHN1cHBsaWVkCiAJICovCiAJaWYgKCFwcy0+c3RvcmUtPmNodW5rX3NpemUpIHsKIAkJcHMtPnN0b3JlLT5jaHVua19zaXplID0gbWF4KERNX0NIVU5LX1NJWkVfREVGQVVMVF9TRUNUT1JTLApAQCAtMzM0LDEwICszMzUsOSBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChjaHVua19zaXplX3N1cHBsaWVkKQotCQlETVdBUk4oImNodW5rIHNpemUgJWxsdSBpbiBkZXZpY2UgbWV0YWRhdGEgb3ZlcnJpZGVzICIKLQkJICAgICAgICJ0YWJsZSBjaHVuayBzaXplIG9mICVsbHUuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2h1bmtfc2l6ZSwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcHMtPnN0b3JlLT5jaHVua19zaXplKTsKKwkJRE1XQVJOKCJjaHVuayBzaXplICV1IGluIGRldmljZSBtZXRhZGF0YSBvdmVycmlkZXMgIgorCQkgICAgICAgInRhYmxlIGNodW5rIHNpemUgb2YgJXUuIiwKKwkJICAgICAgIGNodW5rX3NpemUsIHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSk7CiAKIAkvKiBXZSBoYWQgYSBib2d1cyBjaHVua19zaXplLiBGaXggc3R1ZmYgdXAuICovCiAJZnJlZV9hcmVhKHBzKTsKQEAgLTM0NSw4ICszNDUsOCBAQAogCXIgPSBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUocHMtPnN0b3JlLCBjaHVua19zaXplLAogCQkJCQkgICAgICAmY2h1bmtfZXJyKTsKIAlpZiAocikgewotCQlETUVSUigiaW52YWxpZCBvbi1kaXNrIGNodW5rIHNpemUgJWxsdTogJXMuIiwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljaHVua19zaXplLCBjaHVua19lcnIpOworCQlETUVSUigiaW52YWxpZCBvbi1kaXNrIGNodW5rIHNpemUgJXU6ICVzLiIsCisJCSAgICAgIGNodW5rX3NpemUsIGNodW5rX2Vycik7CiAJCXJldHVybiByOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLmMgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwppbmRleCA1N2YxYmY3Li4zYTNiYTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwpAQCAtMjk2LDYgKzI5Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcmVnaXN0ZXJfc25hcHNob3Qoc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwKQogeworCXN0cnVjdCBkbV9zbmFwc2hvdCAqbDsKIAlzdHJ1Y3Qgb3JpZ2luICpvLCAqbmV3X287CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IHNuYXAtPm9yaWdpbi0+YmRldjsKIApAQCAtMzE5LDcgKzMyMCwxMSBAQAogCQlfX2luc2VydF9vcmlnaW4obyk7CiAJfQogCi0JbGlzdF9hZGRfdGFpbCgmc25hcC0+bGlzdCwgJm8tPnNuYXBzaG90cyk7CisJLyogU29ydCB0aGUgbGlzdCBhY2NvcmRpbmcgdG8gY2h1bmsgc2l6ZSwgbGFyZ2VzdC1maXJzdCBzbWFsbGVzdC1sYXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShsLCAmby0+c25hcHNob3RzLCBsaXN0KQorCQlpZiAobC0+c3RvcmUtPmNodW5rX3NpemUgPCBzbmFwLT5zdG9yZS0+Y2h1bmtfc2l6ZSkKKwkJCWJyZWFrOworCWxpc3RfYWRkX3RhaWwoJnNuYXAtPmxpc3QsICZsLT5saXN0KTsKIAogCXVwX3dyaXRlKCZfb3JpZ2luc19sb2NrKTsKIAlyZXR1cm4gMDsKQEAgLTY2OCw2ICs2NzMsMTEgQEAKIAliaW9fbGlzdF9pbml0KCZzLT5xdWV1ZWRfYmlvcyk7CiAJSU5JVF9XT1JLKCZzLT5xdWV1ZWRfYmlvc193b3JrLCBmbHVzaF9xdWV1ZWRfYmlvcyk7CiAKKwlpZiAoIXMtPnN0b3JlLT5jaHVua19zaXplKSB7CisJCXRpLT5lcnJvciA9ICJDaHVuayBzaXplIG5vdCBzZXQiOworCQlnb3RvIGJhZF9sb2FkX2FuZF9yZWdpc3RlcjsKKwl9CisKIAkvKiBBZGQgc25hcHNob3QgdG8gdGhlIGxpc3Qgb2Ygc25hcHNob3RzIGZvciB0aGlzIG9yaWdpbiAqLwogCS8qIEV4Y2VwdGlvbnMgYXJlbid0IHRyaWdnZXJlZCB0aWxsIHNuYXBzaG90X3Jlc3VtZSgpIGlzIGNhbGxlZCAqLwogCWlmIChyZWdpc3Rlcl9zbmFwc2hvdChzKSkgewpAQCAtOTUxLDcgKzk2MSw3IEBACiAKIAlzcmMuYmRldiA9IGJkZXY7CiAJc3JjLnNlY3RvciA9IGNodW5rX3RvX3NlY3RvcihzLT5zdG9yZSwgcGUtPmUub2xkX2NodW5rKTsKLQlzcmMuY291bnQgPSBtaW4ocy0+c3RvcmUtPmNodW5rX3NpemUsIGRldl9zaXplIC0gc3JjLnNlY3Rvcik7CisJc3JjLmNvdW50ID0gbWluKChzZWN0b3JfdClzLT5zdG9yZS0+Y2h1bmtfc2l6ZSwgZGV2X3NpemUgLSBzcmMuc2VjdG9yKTsKIAogCWRlc3QuYmRldiA9IHMtPnN0b3JlLT5jb3ctPmJkZXY7CiAJZGVzdC5zZWN0b3IgPSBjaHVua190b19zZWN0b3Iocy0+c3RvcmUsIHBlLT5lLm5ld19jaHVuayk7CkBAIC0xMTQyLDYgKzExNTIsOCBAQAogCXVuc2lnbmVkIHN6ID0gMDsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXAgPSB0aS0+cHJpdmF0ZTsKIAorCWRvd25fd3JpdGUoJnNuYXAtPmxvY2spOworCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTVEFUVVNUWVBFX0lORk86CiAJCWlmICghc25hcC0+dmFsaWQpCkBAIC0xMTczLDYgKzExODUsOCBAQAogCQlicmVhazsKIAl9CiAKKwl1cF93cml0ZSgmc25hcC0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM4OCw3ICsxNDAyLDcgQEAKIAlzdHJ1Y3QgZG1fZGV2ICpkZXYgPSB0aS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXA7CiAJc3RydWN0IG9yaWdpbiAqbzsKLQljaHVua190IGNodW5rX3NpemUgPSAwOworCXVuc2lnbmVkIGNodW5rX3NpemUgPSAwOwogCiAJZG93bl9yZWFkKCZfb3JpZ2luc19sb2NrKTsKIAlvID0gX19sb29rdXBfb3JpZ2luKGRldi0+YmRldik7CkBAIC0xNDY1LDcgKzE0NzksNyBAQAogCXIgPSBkbV9yZWdpc3Rlcl90YXJnZXQoJnNuYXBzaG90X3RhcmdldCk7CiAJaWYgKHIpIHsKIAkJRE1FUlIoInNuYXBzaG90IHRhcmdldCByZWdpc3RlciBmYWlsZWQgJWQiLCByKTsKLQkJcmV0dXJuIHI7CisJCWdvdG8gYmFkX3JlZ2lzdGVyX3NuYXBzaG90X3RhcmdldDsKIAl9CiAKIAlyID0gZG1fcmVnaXN0ZXJfdGFyZ2V0KCZvcmlnaW5fdGFyZ2V0KTsKQEAgLTE1MjIsNiArMTUzNiw5IEBACiAJZG1fdW5yZWdpc3Rlcl90YXJnZXQoJm9yaWdpbl90YXJnZXQpOwogYmFkMToKIAlkbV91bnJlZ2lzdGVyX3RhcmdldCgmc25hcHNob3RfdGFyZ2V0KTsKKworYmFkX3JlZ2lzdGVyX3NuYXBzaG90X3RhcmdldDoKKwlkbV9leGNlcHRpb25fc3RvcmVfZXhpdCgpOwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmMgYi9kcml2ZXJzL21kL2RtLmMKaW5kZXggMjNlNzZmZS4uNzI0ZWZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5jCisrKyBiL2RyaXZlcnMvbWQvZG0uYwpAQCAtNDcsNiArNDcsNyBAQAogCWF0b21pY190IGlvX2NvdW50OwogCXN0cnVjdCBiaW8gKmJpbzsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CisJc3BpbmxvY2tfdCBlbmRpb19sb2NrOwogfTsKIAogLyoKQEAgLTEzMCw3ICsxMzEsNyBAQAogCS8qCiAJICogQSBsaXN0IG9mIGlvcyB0aGF0IGFycml2ZWQgd2hpbGUgd2Ugd2VyZSBzdXNwZW5kZWQuCiAJICovCi0JYXRvbWljX3QgcGVuZGluZzsKKwlhdG9taWNfdCBwZW5kaW5nWzJdOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGJpb19saXN0IGRlZmVycmVkOwpAQCAtNDUzLDEzICs0NTQsMTQgQEAKIHsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBpby0+bWQ7CiAJaW50IGNwdTsKKwlpbnQgcncgPSBiaW9fZGF0YV9kaXIoaW8tPmJpbyk7CiAKIAlpby0+c3RhcnRfdGltZSA9IGppZmZpZXM7CiAKIAljcHUgPSBwYXJ0X3N0YXRfbG9jaygpOwogCXBhcnRfcm91bmRfc3RhdHMoY3B1LCAmZG1fZGlzayhtZCktPnBhcnQwKTsKIAlwYXJ0X3N0YXRfdW5sb2NrKCk7Ci0JZG1fZGlzayhtZCktPnBhcnQwLmluX2ZsaWdodCA9IGF0b21pY19pbmNfcmV0dXJuKCZtZC0+cGVuZGluZyk7CisJZG1fZGlzayhtZCktPnBhcnQwLmluX2ZsaWdodFtyd10gPSBhdG9taWNfaW5jX3JldHVybigmbWQtPnBlbmRpbmdbcnddKTsKIH0KIAogc3RhdGljIHZvaWQgZW5kX2lvX2FjY3Qoc3RydWN0IGRtX2lvICppbykKQEAgLTQ3OSw4ICs0ODEsOSBAQAogCSAqIEFmdGVyIHRoaXMgaXMgZGVjcmVtZW50ZWQgdGhlIGJpbyBtdXN0IG5vdCBiZSB0b3VjaGVkIGlmIGl0IGlzCiAJICogYSBiYXJyaWVyLgogCSAqLwotCWRtX2Rpc2sobWQpLT5wYXJ0MC5pbl9mbGlnaHQgPSBwZW5kaW5nID0KLQkJYXRvbWljX2RlY19yZXR1cm4oJm1kLT5wZW5kaW5nKTsKKwlkbV9kaXNrKG1kKS0+cGFydDAuaW5fZmxpZ2h0W3J3XSA9IHBlbmRpbmcgPQorCQlhdG9taWNfZGVjX3JldHVybigmbWQtPnBlbmRpbmdbcnddKTsKKwlwZW5kaW5nICs9IGF0b21pY19yZWFkKCZtZC0+cGVuZGluZ1tyd14weDFdKTsKIAogCS8qIG51ZGdlIGFueW9uZSB3YWl0aW5nIG9uIHN1c3BlbmQgcXVldWUgKi8KIAlpZiAoIXBlbmRpbmcpCkBAIC01NzYsOCArNTc5LDEyIEBACiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gaW8tPm1kOwogCiAJLyogUHVzaC1iYWNrIHN1cGVyc2VkZXMgYW55IEkvTyBlcnJvcnMgKi8KLQlpZiAoZXJyb3IgJiYgIShpby0+ZXJyb3IgPiAwICYmIF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKSkpCi0JCWlvLT5lcnJvciA9IGVycm9yOworCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvLT5lbmRpb19sb2NrLCBmbGFncyk7CisJCWlmICghKGlvLT5lcnJvciA+IDAgJiYgX19ub2ZsdXNoX3N1c3BlbmRpbmcobWQpKSkKKwkJCWlvLT5lcnJvciA9IGVycm9yOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpby0+ZW5kaW9fbG9jaywgZmxhZ3MpOworCX0KIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpby0+aW9fY291bnQpKSB7CiAJCWlmIChpby0+ZXJyb3IgPT0gRE1fRU5ESU9fUkVRVUVVRSkgewpAQCAtMTIyNCw2ICsxMjMxLDcgQEAKIAlhdG9taWNfc2V0KCZjaS5pby0+aW9fY291bnQsIDEpOwogCWNpLmlvLT5iaW8gPSBiaW87CiAJY2kuaW8tPm1kID0gbWQ7CisJc3Bpbl9sb2NrX2luaXQoJmNpLmlvLT5lbmRpb19sb2NrKTsKIAljaS5zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKIAljaS5zZWN0b3JfY291bnQgPSBiaW9fc2VjdG9ycyhiaW8pOwogCWlmICh1bmxpa2VseShiaW9fZW1wdHlfYmFycmllcihiaW8pKSkKQEAgLTE3ODUsNyArMTc5Myw4IEBACiAJaWYgKCFtZC0+ZGlzaykKIAkJZ290byBiYWRfZGlzazsKIAotCWF0b21pY19zZXQoJm1kLT5wZW5kaW5nLCAwKTsKKwlhdG9taWNfc2V0KCZtZC0+cGVuZGluZ1swXSwgMCk7CisJYXRvbWljX3NldCgmbWQtPnBlbmRpbmdbMV0sIDApOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1kLT53YWl0KTsKIAlJTklUX1dPUksoJm1kLT53b3JrLCBkbV93cV93b3JrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZC0+ZXZlbnRxKTsKQEAgLTE4MTksNiArMTgyOCw3IEBACiBiYWRfYmRldjoKIAlkZXN0cm95X3dvcmtxdWV1ZShtZC0+d3EpOwogYmFkX3RocmVhZDoKKwlkZWxfZ2VuZGlzayhtZC0+ZGlzayk7CiAJcHV0X2Rpc2sobWQtPmRpc2spOwogYmFkX2Rpc2s6CiAJYmxrX2NsZWFudXBfcXVldWUobWQtPnF1ZXVlKTsKQEAgLTIwODgsNyArMjA5OCw4IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJfSBlbHNlIGlmICghYXRvbWljX3JlYWQoJm1kLT5wZW5kaW5nKSkKKwkJfSBlbHNlIGlmICghYXRvbWljX3JlYWQoJm1kLT5wZW5kaW5nWzBdKSAmJgorCQkJCQkhYXRvbWljX3JlYWQoJm1kLT5wZW5kaW5nWzFdKSkKIAkJCWJyZWFrOwogCiAJCWlmIChpbnRlcnJ1cHRpYmxlID09IFRBU0tfSU5URVJSVVBUSUJMRSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDI2YmE0MmEuLjEwZWIxZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTI2MzEsNyArMjYzMSw3IEBACiAJCQlyZGV2LT5kZXNjX25yID0gaSsrOwogCQkJcmRldi0+cmFpZF9kaXNrID0gcmRldi0+ZGVzY19ucjsKIAkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKLQkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gbWRkZXYtPnJhaWRfZGlza3MpIHsKKwkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gKG1kZGV2LT5yYWlkX2Rpc2tzIC0gbWluKDAsIG1kZGV2LT5kZWx0YV9kaXNrcykpKSB7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKIAkJCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMKaW5kZXggZDFiOWJkNS4uYTA1MzQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtNjQsNyArNjQsNyBAQAogCiAJLyogYWxsb2NhdGUgYSByMWJpbyB3aXRoIHJvb20gZm9yIHJhaWRfZGlza3MgZW50cmllcyBpbiB0aGUgYmlvcyBhcnJheSAqLwogCXIxX2JpbyA9IGt6YWxsb2Moc2l6ZSwgZ2ZwX2ZsYWdzKTsKLQlpZiAoIXIxX2JpbykKKwlpZiAoIXIxX2JpbyAmJiBwaS0+bWRkZXYpCiAJCXVucGx1Z19zbGF2ZXMocGktPm1kZGV2KTsKIAogCXJldHVybiByMV9iaW87CkBAIC0xNjgzLDYgKzE2ODMsNyBAQAogCQkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CiAJCQl9CiAJCX0KKwkJY29uZF9yZXNjaGVkKCk7CiAJfQogCWlmICh1bnBsdWcpCiAJCXVucGx1Z19zbGF2ZXMobWRkZXYpOwpAQCAtMTk3OCwxMyArMTk3OSwxNCBAQAogCWNvbmYtPnBvb2xpbmZvID0ga21hbGxvYyhzaXplb2YoKmNvbmYtPnBvb2xpbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjb25mLT5wb29saW5mbykKIAkJZ290byBvdXRfbm9fbWVtOwotCWNvbmYtPnBvb2xpbmZvLT5tZGRldiA9IG1kZGV2OworCWNvbmYtPnBvb2xpbmZvLT5tZGRldiA9IE5VTEw7CiAJY29uZi0+cG9vbGluZm8tPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKIAljb25mLT5yMWJpb19wb29sID0gbWVtcG9vbF9jcmVhdGUoTlJfUkFJRDFfQklPUywgcjFiaW9fcG9vbF9hbGxvYywKIAkJCQkJICByMWJpb19wb29sX2ZyZWUsCiAJCQkJCSAgY29uZi0+cG9vbGluZm8pOwogCWlmICghY29uZi0+cjFiaW9fcG9vbCkKIAkJZ290byBvdXRfbm9fbWVtOworCWNvbmYtPnBvb2xpbmZvLT5tZGRldiA9IG1kZGV2OwogCiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKIAltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA1MWM0YzVjLi5jMmNiN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAogCS8qIGFsbG9jYXRlIGEgcjEwYmlvIHdpdGggcm9vbSBmb3IgcmFpZF9kaXNrcyBlbnRyaWVzIGluIHRoZSBiaW9zIGFycmF5ICovCiAJcjEwX2JpbyA9IGt6YWxsb2Moc2l6ZSwgZ2ZwX2ZsYWdzKTsKLQlpZiAoIXIxMF9iaW8pCisJaWYgKCFyMTBfYmlvICYmIGNvbmYtPm1kZGV2KQogCQl1bnBsdWdfc2xhdmVzKGNvbmYtPm1kZGV2KTsKIAogCXJldHVybiByMTBfYmlvOwpAQCAtMTYzMiw2ICsxNjMyLDcgQEAKIAkJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwogCQkJfQogCQl9CisJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAlpZiAodW5wbHVnKQogCQl1bnBsdWdfc2xhdmVzKG1kZGV2KTsKQEAgLTIwOTUsNyArMjA5Niw2IEBACiAJaWYgKCFjb25mLT50bXBwYWdlKQogCQlnb3RvIG91dF9mcmVlX2NvbmY7CiAKLQljb25mLT5tZGRldiA9IG1kZGV2OwogCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKIAljb25mLT5uZWFyX2NvcGllcyA9IG5jOwogCWNvbmYtPmZhcl9jb3BpZXMgPSBmYzsKQEAgLTIxMzIsNiArMjEzMiw3IEBACiAJCWdvdG8gb3V0X2ZyZWVfY29uZjsKIAl9CiAKKwljb25mLT5tZGRldiA9IG1kZGV2OwogCXNwaW5fbG9ja19pbml0KCZjb25mLT5kZXZpY2VfbG9jayk7CiAJbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJmNvbmYtPmRldmljZV9sb2NrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggOTQ4Mjk4MC4uODFhYmVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMTU2LDEzICsxNTYsMTYgQEAKIHN0YXRpYyBpbnQgcmFpZDZfaWR4X3RvX3Nsb3QoaW50IGlkeCwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCwKIAkJCSAgICAgaW50ICpjb3VudCwgaW50IHN5bmRyb21lX2Rpc2tzKQogewotCWludCBzbG90OworCWludCBzbG90ID0gKmNvdW50OwogCisJaWYgKHNoLT5kZGZfbGF5b3V0KQorCQkoKmNvdW50KSsrOwogCWlmIChpZHggPT0gc2gtPnBkX2lkeCkKIAkJcmV0dXJuIHN5bmRyb21lX2Rpc2tzOwogCWlmIChpZHggPT0gc2gtPnFkX2lkeCkKIAkJcmV0dXJuIHN5bmRyb21lX2Rpc2tzICsgMTsKLQlzbG90ID0gKCpjb3VudCkrKzsKKwlpZiAoIXNoLT5kZGZfbGF5b3V0KQorCQkoKmNvdW50KSsrOwogCXJldHVybiBzbG90OwogfQogCkBAIC03MTcsNyArNzIwLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKQotCQlzcmNzW2ldID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJCXNyY3NbaV0gPSBOVUxMOwogCiAJY291bnQgPSAwOwogCWkgPSBkMF9pZHg7CkBAIC03MjcsOSArNzMwLDggQEAKIAkJc3Jjc1tzbG90XSA9IHNoLT5kZXZbaV0ucGFnZTsKIAkJaSA9IHJhaWQ2X25leHRfZGlzayhpLCBkaXNrcyk7CiAJfSB3aGlsZSAoaSAhPSBkMF9pZHgpOwotCUJVR19PTihjb3VudCAhPSBzeW5kcm9tZV9kaXNrcyk7CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIHN5bmRyb21lX2Rpc2tzOwogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKQEAgLTgxNCw3ICs4MTYsNyBAQAogCSAqIHNsb3QgbnVtYmVyIGNvbnZlcnNpb24gZm9yICdmYWlsYScgYW5kICdmYWlsYicKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGlza3MgOyBpKyspCi0JCWJsb2Nrc1tpXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCQlibG9ja3NbaV0gPSBOVUxMOwogCWNvdW50ID0gMDsKIAlpID0gZDBfaWR4OwogCWRvIHsKQEAgLTgyOCw3ICs4MzAsNiBAQAogCQkJZmFpbGIgPSBzbG90OwogCQlpID0gcmFpZDZfbmV4dF9kaXNrKGksIGRpc2tzKTsKIAl9IHdoaWxlIChpICE9IGQwX2lkeCk7Ci0JQlVHX09OKGNvdW50ICE9IHN5bmRyb21lX2Rpc2tzKTsKIAogCUJVR19PTihmYWlsYSA9PSBmYWlsYik7CiAJaWYgKGZhaWxiIDwgZmFpbGEpCkBAIC04NDUsNyArODQ2LDcgQEAKIAkJCWluaXRfYXN5bmNfc3VibWl0KCZzdWJtaXQsIEFTWU5DX1RYX0ZFTkNFLCBOVUxMLAogCQkJCQkgIG9wc19jb21wbGV0ZV9jb21wdXRlLCBzaCwKIAkJCQkJICB0b19hZGRyX2NvbnYoc2gsIHBlcmNwdSkpOwotCQkJcmV0dXJuIGFzeW5jX2dlbl9zeW5kcm9tZShibG9ja3MsIDAsIGNvdW50KzIsCisJCQlyZXR1cm4gYXN5bmNfZ2VuX3N5bmRyb21lKGJsb2NrcywgMCwgc3luZHJvbWVfZGlza3MrMiwKIAkJCQkJCSAgU1RSSVBFX1NJWkUsICZzdWJtaXQpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IHBhZ2UgKmRlc3Q7CkBAIC0xMTM5LDcgKzExNDAsNyBAQAogCQkJICAgJnNoLT5vcHMuemVyb19zdW1fcmVzdWx0LCBwZXJjcHUtPnNwYXJlX3BhZ2UsICZzdWJtaXQpOwogfQogCi1zdGF0aWMgdm9pZCByYWlkX3J1bl9vcHMoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgdW5zaWduZWQgbG9uZyBvcHNfcmVxdWVzdCkKK3N0YXRpYyB2b2lkIF9fcmFpZF9ydW5fb3BzKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3QpCiB7CiAJaW50IG92ZXJsYXBfY2xlYXIgPSAwLCBpLCBkaXNrcyA9IHNoLT5kaXNrczsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKQEAgLTEyMDQsMjIgKzEyMDUsNTUgQEAKIAlwdXRfY3B1KCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYKK3N0YXRpYyB2b2lkIGFzeW5jX3J1bl9vcHModm9pZCAqcGFyYW0sIGFzeW5jX2Nvb2tpZV90IGNvb2tpZSkKK3sKKwlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoID0gcGFyYW07CisJdW5zaWduZWQgbG9uZyBvcHNfcmVxdWVzdCA9IHNoLT5vcHMucmVxdWVzdDsKKworCWNsZWFyX2JpdF91bmxvY2soU1RSSVBFX09QU19SRVFfUEVORElORywgJnNoLT5zdGF0ZSk7CisJd2FrZV91cCgmc2gtPm9wcy53YWl0X2Zvcl9vcHMpOworCisJX19yYWlkX3J1bl9vcHMoc2gsIG9wc19yZXF1ZXN0KTsKKwlyZWxlYXNlX3N0cmlwZShzaCk7Cit9CisKK3N0YXRpYyB2b2lkIHJhaWRfcnVuX29wcyhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCB1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0KQoreworCS8qIHNpbmNlIGhhbmRsZV9zdHJpcGUgY2FuIGJlIGNhbGxlZCBvdXRzaWRlIG9mIHJhaWQ1ZCBjb250ZXh0CisJICogd2UgbmVlZCB0byBlbnN1cmUgc2gtPm9wcy5yZXF1ZXN0IGlzIGRlLXN0YWdlZCBiZWZvcmUgYW5vdGhlcgorCSAqIHJlcXVlc3QgYXJyaXZlcworCSAqLworCXdhaXRfZXZlbnQoc2gtPm9wcy53YWl0X2Zvcl9vcHMsCisJCSAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soU1RSSVBFX09QU19SRVFfUEVORElORywgJnNoLT5zdGF0ZSkpOworCXNoLT5vcHMucmVxdWVzdCA9IG9wc19yZXF1ZXN0OworCisJYXRvbWljX2luYygmc2gtPmNvdW50KTsKKwlhc3luY19zY2hlZHVsZShhc3luY19ydW5fb3BzLCBzaCk7Cit9CisjZWxzZQorI2RlZmluZSByYWlkX3J1bl9vcHMgX19yYWlkX3J1bl9vcHMKKyNlbmRpZgorCiBzdGF0aWMgaW50IGdyb3dfb25lX3N0cmlwZShyYWlkNV9jb25mX3QgKmNvbmYpCiB7CiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKKwlpbnQgZGlza3MgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAJc2ggPSBrbWVtX2NhY2hlX2FsbG9jKGNvbmYtPnNsYWJfY2FjaGUsIEdGUF9LRVJORUwpOwogCWlmICghc2gpCiAJCXJldHVybiAwOwotCW1lbXNldChzaCwgMCwgc2l6ZW9mKCpzaCkgKyAoY29uZi0+cmFpZF9kaXNrcy0xKSpzaXplb2Yoc3RydWN0IHI1ZGV2KSk7CisJbWVtc2V0KHNoLCAwLCBzaXplb2YoKnNoKSArIChkaXNrcy0xKSpzaXplb2Yoc3RydWN0IHI1ZGV2KSk7CiAJc2gtPnJhaWRfY29uZiA9IGNvbmY7CiAJc3Bpbl9sb2NrX2luaXQoJnNoLT5sb2NrKTsKKwkjaWZkZWYgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2gtPm9wcy53YWl0X2Zvcl9vcHMpOworCSNlbmRpZgogCi0JaWYgKGdyb3dfYnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNrcykpIHsKLQkJc2hyaW5rX2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpOworCWlmIChncm93X2J1ZmZlcnMoc2gsIGRpc2tzKSkgeworCQlzaHJpbmtfYnVmZmVycyhzaCwgZGlza3MpOwogCQlrbWVtX2NhY2hlX2ZyZWUoY29uZi0+c2xhYl9jYWNoZSwgc2gpOwogCQlyZXR1cm4gMDsKIAl9Ci0Jc2gtPmRpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKIAkvKiB3ZSBqdXN0IGNyZWF0ZWQgYW4gYWN0aXZlIHN0cmlwZSBzby4uLiAqLwogCWF0b21pY19zZXQoJnNoLT5jb3VudCwgMSk7CiAJYXRvbWljX2luYygmY29uZi0+YWN0aXZlX3N0cmlwZXMpOwpAQCAtMTIzMSw3ICsxMjY1LDcgQEAKIHN0YXRpYyBpbnQgZ3Jvd19zdHJpcGVzKHJhaWQ1X2NvbmZfdCAqY29uZiwgaW50IG51bSkKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqc2M7Ci0JaW50IGRldnMgPSBjb25mLT5yYWlkX2Rpc2tzOworCWludCBkZXZzID0gbWF4KGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOwogCiAJc3ByaW50Zihjb25mLT5jYWNoZV9uYW1lWzBdLAogCQkicmFpZCVkLSVzIiwgY29uZi0+bGV2ZWwsIG1kbmFtZShjb25mLT5tZGRldikpOwpAQCAtMTMyOSw2ICsxMzYzLDkgQEAKIAogCQluc2gtPnJhaWRfY29uZiA9IGNvbmY7CiAJCXNwaW5fbG9ja19pbml0KCZuc2gtPmxvY2spOworCQkjaWZkZWYgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5zaC0+b3BzLndhaXRfZm9yX29wcyk7CisJCSNlbmRpZgogCiAJCWxpc3RfYWRkKCZuc2gtPmxydSwgJm5ld3N0cmlwZXMpOwogCX0KQEAgLTE4OTksMTAgKzE5MzYsMTUgQEAKIAkJY2FzZSBBTEdPUklUSE1fUEFSSVRZX046CiAJCQlicmVhazsKIAkJY2FzZSBBTEdPUklUSE1fUk9UQVRJTkdfTl9DT05USU5VRToKKwkJCS8qIExpa2UgbGVmdF9zeW1tZXRyaWMsIGJ1dCBQIGlzIGJlZm9yZSBRICovCiAJCQlpZiAoc2gtPnBkX2lkeCA9PSAwKQogCQkJCWktLTsJLyogUCBEIEQgRCBRICovCi0JCQllbHNlIGlmIChpID4gc2gtPnBkX2lkeCkKLQkJCQlpIC09IDI7IC8qIEQgRCBRIFAgRCAqLworCQkJZWxzZSB7CisJCQkJLyogRCBEIFEgUCBEICovCisJCQkJaWYgKGkgPCBzaC0+cGRfaWR4KQorCQkJCQlpICs9IHJhaWRfZGlza3M7CisJCQkJaSAtPSAoc2gtPnBkX2lkeCArIDEpOworCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQ182OgogCQljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDXzY6CkBAIC0yODk2LDcgKzI5MzgsNyBAQAogICoKICAqLwogCi1zdGF0aWMgYm9vbCBoYW5kbGVfc3RyaXBlNShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQorc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZTUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwogCWludCBkaXNrcyA9IHNoLT5kaXNrcywgaTsKQEAgLTMxNjcsMTEgKzMyMDksOSBAQAogCW9wc19ydW5faW8oc2gsICZzKTsKIAogCXJldHVybl9pbyhyZXR1cm5fYmkpOwotCi0JcmV0dXJuIGJsb2NrZWRfcmRldiA9PSBOVUxMOwogfQogCi1zdGF0aWMgYm9vbCBoYW5kbGVfc3RyaXBlNihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQorc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZTYoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwogCWludCBkaXNrcyA9IHNoLT5kaXNrczsKQEAgLTM0NTUsMTcgKzM0OTUsMTQgQEAKIAlvcHNfcnVuX2lvKHNoLCAmcyk7CiAKIAlyZXR1cm5faW8ocmV0dXJuX2JpKTsKLQotCXJldHVybiBibG9ja2VkX3JkZXYgPT0gTlVMTDsKIH0KIAotLyogcmV0dXJucyB0cnVlIGlmIHRoZSBzdHJpcGUgd2FzIGhhbmRsZWQgKi8KLXN0YXRpYyBib29sIGhhbmRsZV9zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKK3N0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKIHsKIAlpZiAoc2gtPnJhaWRfY29uZi0+bGV2ZWwgPT0gNikKLQkJcmV0dXJuIGhhbmRsZV9zdHJpcGU2KHNoKTsKKwkJaGFuZGxlX3N0cmlwZTYoc2gpOwogCWVsc2UKLQkJcmV0dXJuIGhhbmRsZV9zdHJpcGU1KHNoKTsKKwkJaGFuZGxlX3N0cmlwZTUoc2gpOwogfQogCiBzdGF0aWMgdm9pZCByYWlkNV9hY3RpdmF0ZV9kZWxheWVkKHJhaWQ1X2NvbmZfdCAqY29uZikKQEAgLTM1MDMsOSArMzU0MCwxMCBAQAogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOwogCWludCBpOworCWludCBkZXZzID0gbWF4KGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWZvciAoaSA9IDA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2czsgaSsrKSB7CiAJCW1ka19yZGV2X3QgKnJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+ZGlza3NbaV0ucmRldik7CiAJCWlmIChyZGV2ICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykgJiYgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcl9xdWV1ZSA9IGJkZXZfZ2V0X3F1ZXVlKHJkZXYtPmJkZXYpOwpAQCAtNDI3Nyw5ICs0MzE1LDcgQEAKIAljbGVhcl9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSk7CiAJc3Bpbl91bmxvY2soJnNoLT5sb2NrKTsKIAotCS8qIHdhaXQgZm9yIGFueSBibG9ja2VkIGRldmljZSB0byBiZSBoYW5kbGVkICovCi0Jd2hpbGUgKHVubGlrZWx5KCFoYW5kbGVfc3RyaXBlKHNoKSkpCi0JCTsKKwloYW5kbGVfc3RyaXBlKHNoKTsKIAlyZWxlYXNlX3N0cmlwZShzaCk7CiAKIAlyZXR1cm4gU1RSSVBFX1NFQ1RPUlM7CkBAIC00MzQ5LDM3ICs0Mzg1LDYgQEAKIAlyZXR1cm4gaGFuZGxlZDsKIH0KIAotI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1Ngotc3RhdGljIHZvaWQgX19wcm9jZXNzX3N0cmlwZSh2b2lkICpwYXJhbSwgYXN5bmNfY29va2llX3QgY29va2llKQotewotCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBwYXJhbTsKLQotCWhhbmRsZV9zdHJpcGUoc2gpOwotCXJlbGVhc2Vfc3RyaXBlKHNoKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWFzeW5jX3NjaGVkdWxlX2RvbWFpbihfX3Byb2Nlc3Nfc3RyaXBlLCBzaCwgZG9tYWluKTsKLX0KLQotc3RhdGljIHZvaWQgc3luY2hyb25pemVfc3RyaXBlX3Byb2Nlc3Npbmcoc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWFzeW5jX3N5bmNocm9uaXplX2Z1bGxfZG9tYWluKGRvbWFpbik7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgcHJvY2Vzc19zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotCWhhbmRsZV9zdHJpcGUoc2gpOwotCXJlbGVhc2Vfc3RyaXBlKHNoKTsKLQljb25kX3Jlc2NoZWQoKTsKLX0KLQotc3RhdGljIHZvaWQgc3luY2hyb25pemVfc3RyaXBlX3Byb2Nlc3Npbmcoc3RydWN0IGxpc3RfaGVhZCAqZG9tYWluKQotewotfQotI2VuZGlmCi0KIAogLyoKICAqIFRoaXMgaXMgb3VyIHJhaWQ1IGtlcm5lbCB0aHJlYWQuCkBAIC00MzkzLDcgKzQzOTgsNiBAQAogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGhhbmRsZWQ7Ci0JTElTVF9IRUFEKHJhaWRfZG9tYWluKTsKIAogCXByX2RlYnVnKCIrKysgcmFpZDVkIGFjdGl2ZVxuIik7CiAKQEAgLTQ0MzAsNyArNDQzNCw5IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQkKIAkJaGFuZGxlZCsrOwotCQlwcm9jZXNzX3N0cmlwZShzaCwgJnJhaWRfZG9tYWluKTsKKwkJaGFuZGxlX3N0cmlwZShzaCk7CisJCXJlbGVhc2Vfc3RyaXBlKHNoKTsKKwkJY29uZF9yZXNjaGVkKCk7CiAKIAkJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCX0KQEAgLTQ0MzgsNyArNDQ0NCw2IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAotCXN5bmNocm9uaXplX3N0cmlwZV9wcm9jZXNzaW5nKCZyYWlkX2RvbWFpbik7CiAJYXN5bmNfdHhfaXNzdWVfcGVuZGluZ19hbGwoKTsKIAl1bnBsdWdfc2xhdmVzKG1kZGV2KTsKIApAQCAtNDU1OCwxMyArNDU2Myw5IEBACiAKIAlpZiAoIXNlY3RvcnMpCiAJCXNlY3RvcnMgPSBtZGRldi0+ZGV2X3NlY3RvcnM7Ci0JaWYgKCFyYWlkX2Rpc2tzKSB7CisJaWYgKCFyYWlkX2Rpc2tzKQogCQkvKiBzaXplIGlzIGRlZmluZWQgYnkgdGhlIHNtYWxsZXN0IG9mIHByZXZpb3VzIGFuZCBuZXcgc2l6ZSAqLwotCQlpZiAoY29uZi0+cmFpZF9kaXNrcyA8IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCi0JCQlyYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKLQkJZWxzZQotCQkJcmFpZF9kaXNrcyA9IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3M7Ci0JfQorCQlyYWlkX2Rpc2tzID0gbWluKGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOwogCiAJc2VjdG9ycyAmPSB+KChzZWN0b3JfdCltZGRldi0+Y2h1bmtfc2VjdG9ycyAtIDEpOwogCXNlY3RvcnMgJj0gfigoc2VjdG9yX3QpbWRkZXYtPm5ld19jaHVua19zZWN0b3JzIC0gMSk7CkBAIC00NjY1LDcgKzQ2NjYsNyBAQAogCQkJfQogCQkJcGVyX2NwdV9wdHIoY29uZi0+cGVyY3B1LCBjcHUpLT5zcGFyZV9wYWdlID0gc3BhcmVfcGFnZTsKIAkJfQotCQlzY3JpYmJsZSA9IGttYWxsb2Moc2NyaWJibGVfbGVuKGNvbmYtPnJhaWRfZGlza3MpLCBHRlBfS0VSTkVMKTsKKwkJc2NyaWJibGUgPSBrbWFsbG9jKGNvbmYtPnNjcmliYmxlX2xlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2NyaWJibGUpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlicmVhazsKQEAgLTQ2ODYsNyArNDY4Nyw3IEBACiBzdGF0aWMgcmFpZDVfY29uZl90ICpzZXR1cF9jb25mKG1kZGV2X3QgKm1kZGV2KQogewogCXJhaWQ1X2NvbmZfdCAqY29uZjsKLQlpbnQgcmFpZF9kaXNrLCBtZW1vcnk7CisJaW50IHJhaWRfZGlzaywgbWVtb3J5LCBtYXhfZGlza3M7CiAJbWRrX3JkZXZfdCAqcmRldjsKIAlzdHJ1Y3QgZGlza19pbmZvICpkaXNrOwogCkBAIC00NzIyLDI4ICs0NzIzLDYgQEAKIAljb25mID0ga3phbGxvYyhzaXplb2YocmFpZDVfY29uZl90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNvbmYgPT0gTlVMTCkKIAkJZ290byBhYm9ydDsKLQotCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKLQljb25mLT5zY3JpYmJsZV9sZW4gPSBzY3JpYmJsZV9sZW4oY29uZi0+cmFpZF9kaXNrcyk7Ci0JaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvcikKLQkJY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwotCWVsc2UKLQkJY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlbHRhX2Rpc2tzOwotCi0JY29uZi0+ZGlza3MgPSBremFsbG9jKGNvbmYtPnJhaWRfZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2tfaW5mbyksCi0JCQkgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvbmYtPmRpc2tzKQotCQlnb3RvIGFib3J0OwotCi0JY29uZi0+bWRkZXYgPSBtZGRldjsKLQotCWlmICgoY29uZi0+c3RyaXBlX2hhc2h0YmwgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCi0JCWdvdG8gYWJvcnQ7Ci0KLQljb25mLT5sZXZlbCA9IG1kZGV2LT5uZXdfbGV2ZWw7Ci0JaWYgKHJhaWQ1X2FsbG9jX3BlcmNwdShjb25mKSAhPSAwKQotCQlnb3RvIGFib3J0OwotCiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb25mLT53YWl0X2Zvcl9zdHJpcGUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvbmYtPndhaXRfZm9yX292ZXJsYXApOwpAQCAtNDc1NywxMSArNDczNiwzMyBAQAogCWF0b21pY19zZXQoJmNvbmYtPmFjdGl2ZV9hbGlnbmVkX3JlYWRzLCAwKTsKIAljb25mLT5ieXBhc3NfdGhyZXNob2xkID0gQllQQVNTX1RIUkVTSE9MRDsKIAorCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKQorCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CisJZWxzZQorCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7CisJbWF4X2Rpc2tzID0gbWF4KGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOworCWNvbmYtPnNjcmliYmxlX2xlbiA9IHNjcmliYmxlX2xlbihtYXhfZGlza3MpOworCisJY29uZi0+ZGlza3MgPSBremFsbG9jKG1heF9kaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza19pbmZvKSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghY29uZi0+ZGlza3MpCisJCWdvdG8gYWJvcnQ7CisKKwljb25mLT5tZGRldiA9IG1kZGV2OworCisJaWYgKChjb25mLT5zdHJpcGVfaGFzaHRibCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJZ290byBhYm9ydDsKKworCWNvbmYtPmxldmVsID0gbWRkZXYtPm5ld19sZXZlbDsKKwlpZiAocmFpZDVfYWxsb2NfcGVyY3B1KGNvbmYpICE9IDApCisJCWdvdG8gYWJvcnQ7CisKIAlwcl9kZWJ1ZygicmFpZDU6IHJ1biglcykgY2FsbGVkLlxuIiwgbWRuYW1lKG1kZGV2KSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCXJhaWRfZGlzayA9IHJkZXYtPnJhaWRfZGlzazsKLQkJaWYgKHJhaWRfZGlzayA+PSBjb25mLT5yYWlkX2Rpc2tzCisJCWlmIChyYWlkX2Rpc2sgPj0gbWF4X2Rpc2tzCiAJCSAgICB8fCByYWlkX2Rpc2sgPCAwKQogCQkJY29udGludWU7CiAJCWRpc2sgPSBjb25mLT5kaXNrcyArIHJhaWRfZGlzazsKQEAgLTQ3OTMsNyArNDc5NCw3IEBACiAJfQogCiAJbWVtb3J5ID0gY29uZi0+bWF4X25yX3N0cmlwZXMgKiAoc2l6ZW9mKHN0cnVjdCBzdHJpcGVfaGVhZCkgKwotCQkgY29uZi0+cmFpZF9kaXNrcyAqICgoc2l6ZW9mKHN0cnVjdCBiaW8pICsgUEFHRV9TSVpFKSkpIC8gMTAyNDsKKwkJIG1heF9kaXNrcyAqICgoc2l6ZW9mKHN0cnVjdCBiaW8pICsgUEFHRV9TSVpFKSkpIC8gMTAyNDsKIAlpZiAoZ3Jvd19zdHJpcGVzKGNvbmYsIGNvbmYtPm1heF9ucl9zdHJpcGVzKSkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJyYWlkNTogY291bGRuJ3QgYWxsb2NhdGUgJWRrQiBmb3IgYnVmZmVyc1xuIiwgbWVtb3J5KTsKQEAgLTQ5MTgsNyArNDkxOSw4IEBACiAJCSAgICB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQogCQkJd29ya2luZ19kaXNrcysrOwogCi0JbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrcyAtIHdvcmtpbmdfZGlza3M7CisJbWRkZXYtPmRlZ3JhZGVkID0gKG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKQorCQkJICAgLSB3b3JraW5nX2Rpc2tzKTsKIAogCWlmIChtZGRldi0+ZGVncmFkZWQgPiBjb25mLT5tYXhfZGVncmFkZWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogbm90IGVub3VnaCBvcGVyYXRpb25hbCBkZXZpY2VzIGZvciAlcyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuaCBiL2RyaXZlcnMvbWQvcmFpZDUuaAppbmRleCAyMzkwZTBlLi5kZDcwODM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmgKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5oCkBAIC0yMTQsMTIgKzIxNCwyMCBAQAogCWludAkJCWRpc2tzOwkJLyogZGlza3MgaW4gc3RyaXBlICovCiAJZW51bSBjaGVja19zdGF0ZXMJY2hlY2tfc3RhdGU7CiAJZW51bSByZWNvbnN0cnVjdF9zdGF0ZXMgcmVjb25zdHJ1Y3Rfc3RhdGU7Ci0JLyogc3RyaXBlX29wZXJhdGlvbnMKKwkvKioKKwkgKiBzdHJ1Y3Qgc3RyaXBlX29wZXJhdGlvbnMKIAkgKiBAdGFyZ2V0IC0gU1RSSVBFX09QX0NPTVBVVEVfQkxLIHRhcmdldAorCSAqIEB0YXJnZXQyIC0gMm5kIGNvbXB1dGUgdGFyZ2V0IGluIHRoZSByYWlkNiBjYXNlCisJICogQHplcm9fc3VtX3Jlc3VsdCAtIFAgYW5kIFEgdmVyaWZpY2F0aW9uIGZsYWdzCisJICogQHJlcXVlc3QgLSBhc3luYyBzZXJ2aWNlIHJlcXVlc3QgZmxhZ3MgZm9yIHJhaWRfcnVuX29wcwogCSAqLwogCXN0cnVjdCBzdHJpcGVfb3BlcmF0aW9ucyB7CiAJCWludCAJCSAgICAgdGFyZ2V0LCB0YXJnZXQyOwogCQllbnVtIHN1bV9jaGVja19mbGFncyB6ZXJvX3N1bV9yZXN1bHQ7CisJCSNpZmRlZiBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYKKwkJdW5zaWduZWQgbG9uZwkgICAgIHJlcXVlc3Q7CisJCXdhaXRfcXVldWVfaGVhZF90ICAgIHdhaXRfZm9yX29wczsKKwkJI2VuZGlmCiAJfSBvcHM7CiAJc3RydWN0IHI1ZGV2IHsKIAkJc3RydWN0IGJpbwlyZXE7CkBAIC0yOTQsNiArMzAyLDggQEAKICNkZWZpbmUJU1RSSVBFX0ZVTExfV1JJVEUJMTMgLyogYWxsIGJsb2NrcyBhcmUgc2V0IHRvIGJlIG92ZXJ3cml0dGVuICovCiAjZGVmaW5lCVNUUklQRV9CSU9GSUxMX1JVTgkxNAogI2RlZmluZQlTVFJJUEVfQ09NUFVURV9SVU4JMTUKKyNkZWZpbmUJU1RSSVBFX09QU19SRVFfUEVORElORwkxNgorCiAvKgogICogT3BlcmF0aW9uIHJlcXVlc3QgZmxhZ3MKICAqLwpAQCAtNDc4LDcgKzQ4OCw3IEBACiB7CiAJcmV0dXJuIChsYXlvdXQgPj0gMCAmJiBsYXlvdXQgPD0gNSkKIAkJfHwKLQkJKGxheW91dCA9PSA4IHx8IGxheW91dCA9PSAxMCkKKwkJKGxheW91dCA+PSA4ICYmIGxheW91dCA8PSAxMCkKIAkJfHwKIAkJKGxheW91dCA+PSAxNiAmJiBsYXlvdXQgPD0gMjApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMgYi9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YwppbmRleCA2OTlkZmVlLi4yNjU0ZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YworKysgYi9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YwpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqICQjLXdheSB1bnJvbGxlZCBwb3J0YWJsZSBpbnRlZ2VyIG1hdGggUkFJRC02IGluc3RydWN0aW9uIHNldAogICoKLSAqIFRoaXMgZmlsZSBpcyBwb3N0cHJvY2Vzc2VkIHVzaW5nIHVucm9sbC5wbAorICogVGhpcyBmaWxlIGlzIHBvc3Rwcm9jZXNzZWQgdXNpbmcgdW5yb2xsLmF3awogICoKICAqIDxiZW5oPiBocGE6IGluIHByb2Nlc3MsCiAgKiB5b3UgY2FuIGp1c3QgInN0ZWFsIiB0aGUgdmVjIHVuaXQgd2l0aCBlbmFibGVfa2VybmVsX2FsdGl2ZWMoKSAoYnV0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2aW50LnVjIGIvZHJpdmVycy9tZC9yYWlkNmludC51YwppbmRleCBmOWJmOWNiLi5kMWUyNzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2aW50LnVjCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKiAkIy13YXkgdW5yb2xsZWQgcG9ydGFibGUgaW50ZWdlciBtYXRoIFJBSUQtNiBpbnN0cnVjdGlvbiBzZXQKICAqCi0gKiBUaGlzIGZpbGUgaXMgcG9zdHByb2Nlc3NlZCB1c2luZyB1bnJvbGwucGwKKyAqIFRoaXMgZmlsZSBpcyBwb3N0cHJvY2Vzc2VkIHVzaW5nIHVucm9sbC5hd2sKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZQppbmRleCA1OGZmZGY0Li4yODc0Y2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZQpAQCAtNyw3ICs3LDcgQEAKIE9QVEZMQUdTID0gLU8yCQkJIyBBZGp1c3QgYXMgZGVzaXJlZAogQ0ZMQUdTCSA9IC1JLi4gLUkgLi4vLi4vLi4vaW5jbHVkZSAtZyAkKE9QVEZMQUdTKQogTEQJID0gbGQKLVBFUkwJID0gcGVybAorQVdLCSA9IGF3awogQVIJID0gYXIKIFJBTkxJQgkgPSByYW5saWIKIApAQCAtMzUsMzUgKzM1LDM1IEBACiByYWlkNnRlc3Q6IHRlc3QuYyByYWlkNi5hCiAJJChDQykgJChDRkxBR1MpIC1vIHJhaWQ2dGVzdCAkXgogCi1yYWlkNmFsdGl2ZWMxLmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAxIDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKK3JhaWQ2YWx0aXZlYzEuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MSA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACiAKLXJhaWQ2YWx0aXZlYzIuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDIgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorcmFpZDZhbHRpdmVjMi5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0yIDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKIAotcmFpZDZhbHRpdmVjNC5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgNCA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACityYWlkNmFsdGl2ZWM0LmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTQgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAogCi1yYWlkNmFsdGl2ZWM4LmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCA4IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKK3JhaWQ2YWx0aXZlYzguYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49OCA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACiAKLXJhaWQ2aW50MS5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAxIDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQxLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MSA8IHJhaWQ2aW50LnVjID4gJEAKIAotcmFpZDZpbnQyLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDIgPCByYWlkNmludC51YyA+ICRACityYWlkNmludDIuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0yIDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDQuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgNCA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50NC5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTQgPCByYWlkNmludC51YyA+ICRACiAKLXJhaWQ2aW50OC5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCA4IDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQ4LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49OCA8IHJhaWQ2aW50LnVjID4gJEAKIAotcmFpZDZpbnQxNi5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAxNiA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50MTYuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0xNiA8IHJhaWQ2aW50LnVjID4gJEAKIAotcmFpZDZpbnQzMi5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAzMiA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50MzIuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0zMiA8IHJhaWQ2aW50LnVjID4gJEAKIAogcmFpZDZ0YWJsZXMuYzogbWt0YWJsZXMKIAkuL21rdGFibGVzID4gcmFpZDZ0YWJsZXMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC91bnJvbGwuYXdrIGIvZHJpdmVycy9tZC91bnJvbGwuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWEwMzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21kL3Vucm9sbC5hd2sKQEAgLTAsMCArMSwyMCBAQAorCisjIFRoaXMgZmlsdGVyIHJlcXVpcmVzIG9uZSBjb21tYW5kIGxpbmUgb3B0aW9uIG9mIGZvcm0gLXZOPW4KKyMgd2hlcmUgbiBtdXN0IGJlIGEgZGVjaW1hbCBudW1iZXIuCisjCisjIFJlcGVhdCBlYWNoIGlucHV0IGxpbmUgY29udGFpbmluZyAkJCBuIHRpbWVzLCByZXBsYWNpbmcgJCQgd2l0aCAwLi4ubi0xLgorIyBSZXBsYWNlIGVhY2ggJCMgd2l0aCBuLCBhbmQgZWFjaCAkKiB3aXRoIGEgc2luZ2xlICQuCisKK0JFR0lOIHsKKwluID0gTiArIDAKK30KK3sKKwlpZiAoL1wkXCQvKSB7IHJlcCA9IG4gfSBlbHNlIHsgcmVwID0gMSB9CisJZm9yIChpID0gMDsgaSA8IHJlcDsgKytpKSB7CisJCXRtcCA9ICQwCisJCWdzdWIoL1wkXCQvLCBpLCB0bXApCisJCWdzdWIoL1wkXCMvLCBuLCB0bXApCisJCWdzdWIoL1wkXCovLCAiJCIsIHRtcCkKKwkJcHJpbnQgdG1wCisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC91bnJvbGwucGwgYi9kcml2ZXJzL21kL3Vucm9sbC5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FjYzcxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21kL3Vucm9sbC5wbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybAotIwotIyBUYWtlIGEgcGllY2Ugb2YgQyBjb2RlIGFuZCBmb3IgZWFjaCBsaW5lIHdoaWNoIGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSAkJAotIyByZXBlYXQgbiB0aW1lcyB3aXRoICQgcmVwbGFjZWQgYnkgMC4uLm4tMTsgdGhlIHNlcXVlbmNlICQjIGlzIHJlcGxhY2VkCi0jIGJ5IHRoZSB1bnJvbGxpbmcgZmFjdG9yLCBhbmQgJCogd2l0aCBhIHNpbmdsZSAkCi0jCi0KLSgkbikgPSBAQVJHVjsKLSRuICs9IDA7Ci0KLXdoaWxlICggZGVmaW5lZCgkbGluZSA9IDxTVERJTj4pICkgewotICAgIGlmICggJGxpbmUgPX4gL1wkXCQvICkgewotCSRyZXAgPSAkbjsKLSAgICB9IGVsc2UgewotCSRyZXAgPSAxOwotICAgIH0KLSAgICBmb3IgKCAkaSA9IDAgOyAkaSA8ICRyZXAgOyAkaSsrICkgewotCSR0bXAgPSAkbGluZTsKLQkkdG1wID1+IHMvXCRcJC8kaS9nOwotCSR0bXAgPX4gcy9cJFwjLyRuL2c7Ci0JJHRtcCA9fiBzL1wkXCovXCQvZzsKLQlwcmludCAkdG1wOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKaW5kZXggZTQyNGNmNi4uYTFjNDdlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKQEAgLTQ4MCw3ICs0ODAsNiBAQAogYWRkX2NoaWxkcmVuKHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgKnBkYXRhLCB1bnNpZ25lZCBsb25nIGZlYXR1cmVzKQogewogCXN0cnVjdCBkZXZpY2UJKmNoaWxkOwotCXN0cnVjdCBkZXZpY2UJKnVzYl90cmFuc2NlaXZlciA9IE5VTEw7CiAKIAlpZiAodHdsX2hhc19iY2koKSAmJiBwZGF0YS0+YmNpICYmICEoZmVhdHVyZXMgJiBUUFNfU1VCU0VUKSkgewogCQljaGlsZCA9IGFkZF9jaGlsZCgzLCAidHdsNDAzMF9iY2kiLApAQCAtNTMyLDE2ICs1MzEsNjEgQEAKIAl9CiAKIAlpZiAodHdsX2hhc191c2IoKSAmJiBwZGF0YS0+dXNiKSB7CisKKwkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjF2NSA9IHsKKwkJCS5zdXBwbHkgPQkidXNiMXY1IiwKKwkJfTsKKwkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjF2OCA9IHsKKwkJCS5zdXBwbHkgPQkidXNiMXY4IiwKKwkJfTsKKwkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjN2MSA9IHsKKwkJCS5zdXBwbHkgPQkidXNiM3YxIiwKKwkJfTsKKworCS8qIEZpcnN0IGFkZCB0aGUgcmVndWxhdG9ycyBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgYnkgdHJhbnNjZWl2ZXIgKi8KKwkJaWYgKHR3bF9oYXNfcmVndWxhdG9yKCkpIHsKKwkJCS8qIHRoaXMgaXMgYSB0ZW1wbGF0ZSB0aGF0IGdldHMgY29waWVkICovCisJCQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB1c2JfZml4ZWQgPSB7CisJCQkJLmNvbnN0cmFpbnRzLnZhbGlkX21vZGVzX21hc2sgPQorCQkJCQlSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkJCS5jb25zdHJhaW50cy52YWxpZF9vcHNfbWFzayA9CisJCQkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkJfTsKKworCQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCMVY1LAorCQkJCQkJICAgICAgJnVzYl9maXhlZCwgJnVzYjF2NSwgMSk7CisJCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjFWOCwKKwkJCQkJCSAgICAgICZ1c2JfZml4ZWQsICZ1c2IxdjgsIDEpOworCQkJaWYgKElTX0VSUihjaGlsZCkpCisJCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IzVjEsCisJCQkJCQkgICAgICAmdXNiX2ZpeGVkLCAmdXNiM3YxLCAxKTsKKwkJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQl9CisKIAkJY2hpbGQgPSBhZGRfY2hpbGQoMCwgInR3bDQwMzBfdXNiIiwKIAkJCQlwZGF0YS0+dXNiLCBzaXplb2YoKnBkYXRhLT51c2IpLAogCQkJCXRydWUsCiAJCQkJLyogaXJxMCA9IFVTQl9QUkVTLCBpcnExID0gVVNCICovCiAJCQkJcGRhdGEtPmlycV9iYXNlICsgOCArIDIsIHBkYXRhLT5pcnFfYmFzZSArIDQpOworCiAJCWlmIChJU19FUlIoY2hpbGQpKQogCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwogCiAJCS8qIHdlIG5lZWQgdG8gY29ubmVjdCByZWd1bGF0b3JzIHRvIHRoaXMgdHJhbnNjZWl2ZXIgKi8KLQkJdXNiX3RyYW5zY2VpdmVyID0gY2hpbGQ7CisJCWlmICh0d2xfaGFzX3JlZ3VsYXRvcigpICYmIGNoaWxkKSB7CisJCQl1c2IxdjUuZGV2ID0gY2hpbGQ7CisJCQl1c2IxdjguZGV2ID0gY2hpbGQ7CisJCQl1c2IzdjEuZGV2ID0gY2hpbGQ7CisJCX0KIAl9CiAKIAlpZiAodHdsX2hhc193YXRjaGRvZygpKSB7CkBAIC01ODAsNDcgKzYyNCw2IEBACiAJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CiAJfQogCi0JaWYgKHR3bF9oYXNfcmVndWxhdG9yKCkgJiYgdXNiX3RyYW5zY2VpdmVyKSB7Ci0JCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IxdjUgPSB7Ci0JCQkuc3VwcGx5ID0JInVzYjF2NSIsCi0JCX07Ci0JCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IxdjggPSB7Ci0JCQkuc3VwcGx5ID0JInVzYjF2OCIsCi0JCX07Ci0JCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IzdjEgPSB7Ci0JCQkuc3VwcGx5ID0JInVzYjN2MSIsCi0JCX07Ci0KLQkJLyogdGhpcyBpcyBhIHRlbXBsYXRlIHRoYXQgZ2V0cyBjb3BpZWQgKi8KLQkJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdXNiX2ZpeGVkID0gewotCQkJLmNvbnN0cmFpbnRzLnZhbGlkX21vZGVzX21hc2sgPQotCQkJCSAgUkVHVUxBVE9SX01PREVfTk9STUFMCi0JCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAotCQkJLmNvbnN0cmFpbnRzLnZhbGlkX29wc19tYXNrID0KLQkJCQkgIFJFR1VMQVRPUl9DSEFOR0VfTU9ERQotCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JCX07Ci0KLQkJdXNiMXY1LmRldiA9IHVzYl90cmFuc2NlaXZlcjsKLQkJdXNiMXY4LmRldiA9IHVzYl90cmFuc2NlaXZlcjsKLQkJdXNiM3YxLmRldiA9IHVzYl90cmFuc2NlaXZlcjsKLQotCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IxVjUsICZ1c2JfZml4ZWQsCi0JCQkJJnVzYjF2NSwgMSk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCi0JCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjFWOCwgJnVzYl9maXhlZCwKLQkJCQkmdXNiMXY4LCAxKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0KLQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCM1YxLCAmdXNiX2ZpeGVkLAotCQkJCSZ1c2IzdjEsIDEpOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQl9Ci0KIAkvKiBtYXliZSBhZGQgTERPcyB0aGF0IGFyZSBvbWl0dGVkIG9uIGNvc3QtcmVkdWNlZCBwYXJ0cyAqLwogCWlmICh0d2xfaGFzX3JlZ3VsYXRvcigpICYmICEoZmVhdHVyZXMgJiBUUFNfU1VCU0VUKSkgewogCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNDAzMF9SRUdfVlBMTDIsIHBkYXRhLT52cGxsMik7CkBAIC03OTIsNyArNzk1LDcgQEAKIAkJCXR3bC0+Y2xpZW50ID0gaTJjX25ld19kdW1teShjbGllbnQtPmFkYXB0ZXIsCiAJCQkJCXR3bC0+YWRkcmVzcyk7CiAJCQlpZiAoIXR3bC0+Y2xpZW50KSB7Ci0JCQkJZGV2X2VycigmdHdsLT5jbGllbnQtPmRldiwKKwkJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKIAkJCQkJImNhbid0IGF0dGFjaCBjbGllbnQgJWRcbiIsIGkpOwogCQkJCXN0YXR1cyA9IC1FTk9NRU07CiAJCQkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzF4LWlycS5jIGIvZHJpdmVycy9tZmQvd204MzF4LWlycS5jCmluZGV4IGQzMDE1ZGYuLmFjMDU2ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODMxeC1pcnEuYworKysgYi9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMKQEAgLTUwNyw2ICs1MDcsOCBAQAogewogCWludCBpLCByZXQ7CiAKKwltdXRleF9pbml0KCZ3bTgzMXgtPmlycV9sb2NrKTsKKwogCWlmICghaXJxKSB7CiAJCWRldl93YXJuKHdtODMxeC0+ZGV2LAogCQkJICJObyBpbnRlcnJ1cHQgc3BlY2lmaWVkIC0gZnVuY3Rpb25hbGl0eSBsaW1pdGVkXG4iKTsKQEAgLTUyMSw3ICs1MjMsNiBAQAogCX0KIAogCXdtODMxeC0+aXJxID0gaXJxOwotCW11dGV4X2luaXQoJndtODMxeC0+aXJxX2xvY2spOwogCUlOSVRfV09SSygmd204MzF4LT5pcnFfd29yaywgd204MzF4X2lycV93b3JrZXIpOwogCiAJLyogTWFzayB0aGUgaW5kaXZpZHVhbCBpbnRlcnJ1cHQgc291cmNlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jCmluZGV4IGU1NTZkNDIuLjYzOTI0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMKQEAgLTcyLDcgKzcyLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL2NwdS5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9tY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggNDQ4N2NjMC4uMGFlY2FhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTIwMTMsNyArMjAxMyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2hzbW1jX2luaXQodm9pZCkKIHsKIAkvKiBSZWdpc3RlciB0aGUgTU1DIGRyaXZlciAqLwotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfaHNtbWNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZvbWFwX2hzbW1jX2RyaXZlciwgb21hcF9oc21tY19wcm9iZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwX2hzbW1jX2NsZWFudXAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCmluZGV4IDVlMGIxNTIuLmIwMGQ2NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwpAQCAtNjkzLDcgKzY5Myw3IEBACiAJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19ybykpIHsKIAkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fcm8sICJtbWMgY2FyZCByZWFkIG9ubHkiKTsKIAkJaWYgKHJldCkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHJlcXVlc3RpbmcgZ3Bpb19ybyAlZFxuIiwgZ3Bpb19wb3dlcik7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgcmVxdWVzdGluZyBncGlvX3JvICVkXG4iLCBncGlvX3JvKTsKIAkJCWdvdG8gZXJyX2dwaW9fcm87CiAJCX0KIAkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb19ybyk7CkBAIC03MDEsNyArNzAxLDcgQEAKIAlpZiAoZ3Bpb19pc192YWxpZChncGlvX2NkKSkgewogCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3Bpb19jZCwgIm1tYyBjYXJkIGRldGVjdCIpOwogCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgcmVxdWVzdGluZyBncGlvX2NkICVkXG4iLCBncGlvX3Bvd2VyKTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCByZXF1ZXN0aW5nIGdwaW9fY2QgJWRcbiIsIGdwaW9fY2QpOwogCQkJZ290byBlcnJfZ3Bpb19jZDsKIAkJfQogCQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX2NkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKaW5kZXggZTFmN2QwYS4uMTRjZWMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgInViaS5oIgogCiAvKiBNYXhpbXVtIGxlbmd0aCBvZiB0aGUgJ210ZD0nIHBhcmFtZXRlciAqLwpAQCAtMTI1Nyw3ICsxMjU4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlc3VsdDsKIAogCXJlc3VsdCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJmVuZHAsIDApOwotCWlmIChzdHIgPT0gZW5kcCB8fCByZXN1bHQgPCAwKSB7CisJaWYgKHN0ciA9PSBlbmRwIHx8IHJlc3VsdCA+PSBJTlRfTUFYKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVUJJIGVycm9yOiBpbmNvcnJlY3QgYnl0ZXMgY291bnQ6IFwiJXNcIlxuIiwKIAkJICAgICAgIHN0cik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uYyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKaW5kZXggZTcxNjFhZC4uOTBhZjYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uYworKysgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCkBAIC03OTQsMTYgKzc5NCwxNSBAQAogCQkgKiBudW1iZXIuCiAJCSAqLwogCQlpbWFnZV9zZXEgPSBiZTMyX3RvX2NwdShlY2gtPmltYWdlX3NlcSk7Ci0JCWlmICghc2ktPmltYWdlX3NlcV9zZXQpIHsKKwkJaWYgKCF1YmktPmltYWdlX3NlcSAmJiBpbWFnZV9zZXEpCiAJCQl1YmktPmltYWdlX3NlcSA9IGltYWdlX3NlcTsKLQkJCXNpLT5pbWFnZV9zZXFfc2V0ID0gMTsKLQkJfSBlbHNlIGlmICh1YmktPmltYWdlX3NlcSAmJiB1YmktPmltYWdlX3NlcSAhPSBpbWFnZV9zZXEpIHsKKwkJaWYgKHViaS0+aW1hZ2Vfc2VxICYmIGltYWdlX3NlcSAmJgorCQkgICAgdWJpLT5pbWFnZV9zZXEgIT0gaW1hZ2Vfc2VxKSB7CiAJCQl1YmlfZXJyKCJiYWQgaW1hZ2Ugc2VxdWVuY2UgbnVtYmVyICVkIGluIFBFQiAlZCwgIgogCQkJCSJleHBlY3RlZCAlZCIsIGltYWdlX3NlcSwgcG51bSwgdWJpLT5pbWFnZV9zZXEpOwogCQkJdWJpX2RiZ19kdW1wX2VjX2hkcihlY2gpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQogCX0KIAogCS8qIE9LLCB3ZSd2ZSBkb25lIHdpdGggdGhlIEVDIGhlYWRlciwgbGV0J3MgbG9vayBhdCB0aGUgVklEIGhlYWRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uaCBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKaW5kZXggYmFiMzE2OS4uZmYxNzlhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uaAorKysgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCkBAIC0xMDMsNyArMTAzLDYgQEAKICAqIEBlY19zdW06IGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyBAbWVhbl9lYwogICogQGVjX2NvdW50OiBhIHRlbXBvcmFyeSB2YXJpYWJsZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgQG1lYW5fZWMKICAqIEBjb3JyX2NvdW50OiBjb3VudCBvZiBjb3JydXB0ZWQgUEVCcwotICogQGltYWdlX3NlcV9zZXQ6IGluZGljYXRlcyBAdWJpLT5pbWFnZV9zZXEgaXMga25vd24KICAqCiAgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSByZXN1bHQgb2Ygc2Nhbm5pbmcgYW5kIG1heSBiZSB1c2VkIGJ5IG90aGVyCiAgKiBVQkkgc3ViLXN5c3RlbXMgdG8gYnVpbGQgZmluYWwgVUJJIGRhdGEgc3RydWN0dXJlcywgZnVydGhlciBlcnJvci1yZWNvdmVyeQpAQCAtMTI3LDcgKzEyNiw2IEBACiAJdWludDY0X3QgZWNfc3VtOwogCWludCBlY19jb3VudDsKIAlpbnQgY29ycl9jb3VudDsKLQlpbnQgaW1hZ2Vfc2VxX3NldDsKIH07CiAKIHN0cnVjdCB1YmlfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggNzEyNzc2MC4uZTE5Y2E0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC0xNzQxLDYgKzE3NDEsNyBAQAogY29uZmlnIEtTODg1MV9NTEwKIAl0cmlzdGF0ZSAiTWljcmVsIEtTODg1MSBNTEwiCiAJZGVwZW5kcyBvbiBIQVNfSU9NRU0KKwlzZWxlY3QgTUlJCiAJaGVscAogCSAgVGhpcyBwbGF0Zm9ybSBkcml2ZXIgaXMgZm9yIE1pY3JlbCBLUzg4NTEgQWRkcmVzcy9kYXRhIGJ1cwogCSAgbXVsdGlwbGV4ZWQgbmV0d29yayBjaGlwLgpAQCAtMjQ4Miw2ICsyNDgzLDggQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHM2Z21hYy4KIAorc291cmNlICJkcml2ZXJzL25ldC9zdG1tYWMvS2NvbmZpZyIKKwogZW5kaWYgIyBORVRERVZfMTAwMAogCiAjCkBAIC0zMjMwLDQgKzMyMzMsMTIgQEAKIAkgIFRoaXMgaXMgdGhlIHZpcnR1YWwgbmV0d29yayBkcml2ZXIgZm9yIHZpcnRpby4gIEl0IGNhbiBiZSB1c2VkIHdpdGgKICAgICAgICAgICBsZ3Vlc3Qgb3IgUUVNVSBiYXNlZCBWTU1zIChsaWtlIEtWTSBvciBYZW4pLiAgU2F5IFkgb3IgTS4KIAorY29uZmlnIFZNWE5FVDMKKyAgICAgICB0cmlzdGF0ZSAiVk13YXJlIFZNWE5FVDMgZXRoZXJuZXQgZHJpdmVyIgorICAgICAgIGRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBJTkVUCisgICAgICAgaGVscAorICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgVk13YXJlJ3Mgdm14bmV0MyB2aXJ0dWFsIGV0aGVybmV0IE5JQy4KKyAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorICAgICAgICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZteG5ldDMuCisKIGVuZGlmICMgTkVUREVWSUNFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCBkODY2YjhjLi4yNDYzMjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtMiw2ICsyLDEwIEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXggbmV0d29yayAoZXRoZXJjYXJkKSBkZXZpY2UgZHJpdmVycy4KICMKIAorb2JqLSQoQ09ORklHX01JSSkgKz0gbWlpLm8KK29iai0kKENPTkZJR19NRElPKSArPSBtZGlvLm8KK29iai0kKENPTkZJR19QSFlMSUIpICs9IHBoeS8KKwogb2JqLSQoQ09ORklHX1RJX0RBVklOQ0lfRU1BQykgKz0gZGF2aW5jaV9lbWFjLm8KIAogb2JqLSQoQ09ORklHX0UxMDAwKSArPSBlMTAwMC8KQEAgLTI2LDYgKzMwLDcgQEAKIG9iai0kKENPTkZJR19FTklDKSArPSBlbmljLwogb2JqLSQoQ09ORklHX0pNRSkgKz0gam1lLm8KIG9iai0kKENPTkZJR19CRTJORVQpICs9IGJlbmV0Lworb2JqLSQoQ09ORklHX1ZNWE5FVDMpICs9IHZteG5ldDMvCiAKIGdpYW5mYXJfZHJpdmVyLW9ianMgOj0gZ2lhbmZhci5vIFwKIAkJZ2lhbmZhcl9ldGh0b29sLm8gXApAQCAtOTUsMTUgKzEwMCwxMiBAQAogb2JqLSQoQ09ORklHX0FEQVBURUNfU1RBUkZJUkUpICs9IHN0YXJmaXJlLm8KIG9iai0kKENPTkZJR19SSU9ORVQpICs9IHJpb25ldC5vCiBvYmotJChDT05GSUdfU0hfRVRIKSArPSBzaF9ldGgubworb2JqLSQoQ09ORklHX1NUTU1BQ19FVEgpICs9IHN0bW1hYy8KIAogIwogIyBlbmQgbGluayBvcmRlciBzZWN0aW9uCiAjCiAKLW9iai0kKENPTkZJR19NSUkpICs9IG1paS5vCi1vYmotJChDT05GSUdfTURJTykgKz0gbWRpby5vCi1vYmotJChDT05GSUdfUEhZTElCKSArPSBwaHkvCi0KIG9iai0kKENPTkZJR19TVU5EQU5DRSkgKz0gc3VuZGFuY2Uubwogb2JqLSQoQ09ORklHX0hBTUFDSEkpICs9IGhhbWFjaGkubwogb2JqLSQoQ09ORklHX05FVCkgKz0gU3BhY2UubyBsb29wYmFjay5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuYyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCmluZGV4IDVmMGIwNWMuLmQ4MmE5YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCkBAIC0xMjA5LDcgKzEyMDksOCBAQAogCW1lbXNldChhcC0+aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBhY2VfaW5mbykpOwogCW1lbXNldChhcC0+c2tiLCAwLCBzaXplb2Yoc3RydWN0IGFjZV9za2IpKTsKIAotCWlmIChhY2VfbG9hZF9maXJtd2FyZShkZXYpKQorCWVjb2RlID0gYWNlX2xvYWRfZmlybXdhcmUoZGV2KTsKKwlpZiAoZWNvZGUpCiAJCWdvdG8gaW5pdF9lcnJvcjsKIAogCWFwLT5md19ydW5uaW5nID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCAwNGY2M2M3Li5jZTZmMWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC0zNCw2ICszNCw3IEBACiAgKgogICoKICAqLworI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCmluZGV4IDg5ODc2YWQuLjI4YTBlZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKQEAgLTI0MywxNSArMjQzLDI2IEBACiAKIGludCBiZV9jbWRfUE9TVChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1MTYgc3RhZ2UsIGVycm9yOworCXUxNiBzdGFnZTsKKwlpbnQgc3RhdHVzLCB0aW1lb3V0ID0gMDsKIAotCWVycm9yID0gYmVfUE9TVF9zdGFnZV9nZXQoYWRhcHRlciwgJnN0YWdlKTsKLQlpZiAoZXJyb3IgfHwgc3RhZ2UgIT0gUE9TVF9TVEFHRV9BUk1GV19SRFkpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiUE9TVCBmYWlsZWQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KKwlkbyB7CisJCXN0YXR1cyA9IGJlX1BPU1Rfc3RhZ2VfZ2V0KGFkYXB0ZXIsICZzdGFnZSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlBPU1QgZXJyb3I7IHN0YWdlPTB4JXhcbiIsCisJCQkJc3RhZ2UpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgaWYgKHN0YWdlICE9IFBPU1RfU1RBR0VfQVJNRldfUkRZKSB7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJc2NoZWR1bGVfdGltZW91dCgyICogSFopOworCQkJdGltZW91dCArPSAyOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9IHdoaWxlICh0aW1lb3V0IDwgMjApOwogCi0JcmV0dXJuIDA7CisJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiUE9TVCB0aW1lb3V0OyBzdGFnZT0weCV4XG4iLCBzdGFnZSk7CisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmVtYmVkZGVkX3BheWxvYWQoc3RydWN0IGJlX21jY193cmIgKndyYikKQEAgLTcyOSw4ICs3NDAsOCBAQAogLyogQ3JlYXRlIGFuIHJ4IGZpbHRlcmluZyBwb2xpY3kgY29uZmlndXJhdGlvbiBvbiBhbiBpL2YKICAqIFVzZXMgbWJveAogICovCi1pbnQgYmVfY21kX2lmX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGZsYWdzLCB1OCAqbWFjLAotCQlib29sIHBtYWNfaW52YWxpZCwgdTMyICppZl9oYW5kbGUsIHUzMiAqcG1hY19pZCkKK2ludCBiZV9jbWRfaWZfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgY2FwX2ZsYWdzLCB1MzIgZW5fZmxhZ3MsCisJCXU4ICptYWMsIGJvb2wgcG1hY19pbnZhbGlkLCB1MzIgKmlmX2hhbmRsZSwgdTMyICpwbWFjX2lkKQogewogCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CiAJc3RydWN0IGJlX2NtZF9yZXFfaWZfY3JlYXRlICpyZXE7CkBAIC03NDYsOCArNzU3LDggQEAKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKIAkJT1BDT0RFX0NPTU1PTl9OVFdLX0lOVEVSRkFDRV9DUkVBVEUsIHNpemVvZigqcmVxKSk7CiAKLQlyZXEtPmNhcGFiaWxpdHlfZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7Ci0JcmVxLT5lbmFibGVfZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CisJcmVxLT5jYXBhYmlsaXR5X2ZsYWdzID0gY3B1X3RvX2xlMzIoY2FwX2ZsYWdzKTsKKwlyZXEtPmVuYWJsZV9mbGFncyA9IGNwdV90b19sZTMyKGVuX2ZsYWdzKTsKIAlyZXEtPnBtYWNfaW52YWxpZCA9IHBtYWNfaW52YWxpZDsKIAlpZiAoIXBtYWNfaW52YWxpZCkKIAkJbWVtY3B5KHJlcS0+bWFjX2FkZHIsIG1hYywgRVRIX0FMRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCmluZGV4IGE4NmY5MTcuLjQ5OTUzNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKQEAgLTcyMCw4ICs3MjAsOSBAQAogZXh0ZXJuIGludCBiZV9jbWRfcG1hY19hZGQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWNfYWRkciwKIAkJCXUzMiBpZl9pZCwgdTMyICpwbWFjX2lkKTsKIGV4dGVybiBpbnQgYmVfY21kX3BtYWNfZGVsKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaWZfaWQsIHUzMiBwbWFjX2lkKTsKLWV4dGVybiBpbnQgYmVfY21kX2lmX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2ZsYWdzLCB1OCAqbWFjLAotCQkJYm9vbCBwbWFjX2ludmFsaWQsIHUzMiAqaWZfaGFuZGxlLCB1MzIgKnBtYWNfaWQpOworZXh0ZXJuIGludCBiZV9jbWRfaWZfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgY2FwX2ZsYWdzLAorCQkJdTMyIGVuX2ZsYWdzLCB1OCAqbWFjLCBib29sIHBtYWNfaW52YWxpZCwKKwkJCXUzMiAqaWZfaGFuZGxlLCB1MzIgKnBtYWNfaWQpOwogZXh0ZXJuIGludCBiZV9jbWRfaWZfZGVzdHJveShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2hhbmRsZSk7CiBleHRlcm4gaW50IGJlX2NtZF9lcV9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsIGludCBlcV9kZWxheSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKaW5kZXggNmQ1ZTgxZi4uMWY5NDFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwpAQCAtMTYyMCwxOSArMTYyMCwyMiBAQAogc3RhdGljIGludCBiZV9zZXR1cChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCXUzMiBpZl9mbGFnczsKKwl1MzIgY2FwX2ZsYWdzLCBlbl9mbGFnczsKIAlpbnQgc3RhdHVzOwogCi0JaWZfZmxhZ3MgPSBCRV9JRl9GTEFHU19CUk9BRENBU1QgfCBCRV9JRl9GTEFHU19QUk9NSVNDVU9VUyB8Ci0JCUJFX0lGX0ZMQUdTX01DQVNUX1BST01JU0NVT1VTIHwgQkVfSUZfRkxBR1NfVU5UQUdHRUQgfAotCQlCRV9JRl9GTEFHU19QQVNTX0wzTDRfRVJST1JTOwotCXN0YXR1cyA9IGJlX2NtZF9pZl9jcmVhdGUoYWRhcHRlciwgaWZfZmxhZ3MsIG5ldGRldi0+ZGV2X2FkZHIsCi0JCQlmYWxzZS8qIHBtYWNfaW52YWxpZCAqLywgJmFkYXB0ZXItPmlmX2hhbmRsZSwKLQkJCSZhZGFwdGVyLT5wbWFjX2lkKTsKKwljYXBfZmxhZ3MgPSBCRV9JRl9GTEFHU19VTlRBR0dFRCB8IEJFX0lGX0ZMQUdTX0JST0FEQ0FTVCB8CisJCQlCRV9JRl9GTEFHU19NQ0FTVF9QUk9NSVNDVU9VUyB8CisJCQlCRV9JRl9GTEFHU19QUk9NSVNDVU9VUyB8CisJCQlCRV9JRl9GTEFHU19QQVNTX0wzTDRfRVJST1JTOworCWVuX2ZsYWdzID0gQkVfSUZfRkxBR1NfVU5UQUdHRUQgfCBCRV9JRl9GTEFHU19CUk9BRENBU1QgfAorCQkJQkVfSUZfRkxBR1NfUEFTU19MM0w0X0VSUk9SUzsKKworCXN0YXR1cyA9IGJlX2NtZF9pZl9jcmVhdGUoYWRhcHRlciwgY2FwX2ZsYWdzLCBlbl9mbGFncywKKwkJCW5ldGRldi0+ZGV2X2FkZHIsIGZhbHNlLyogcG1hY19pbnZhbGlkICovLAorCQkJJmFkYXB0ZXItPmlmX2hhbmRsZSwgJmFkYXB0ZXItPnBtYWNfaWQpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBkb19ub25lOwogCi0KIAlzdGF0dXMgPSBiZV90eF9xdWV1ZXNfY3JlYXRlKGFkYXB0ZXIpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBpZl9kZXN0cm95OwpAQCAtMjA1NSw2ICsyMDU4LDEwIEBACiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIAorCXN0YXR1cyA9IGJlX2NtZF9yZXNldF9mdW5jdGlvbihhZGFwdGVyKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCiAJc3RhdHVzID0gYmVfY21kX2dldF9md192ZXIoYWRhcHRlciwgYWRhcHRlci0+ZndfdmVyKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwpAQCAtMjEwOCwxMCArMjExNSw2IEBACiAJaWYgKHN0YXR1cykKIAkJZ290byBmcmVlX25ldGRldjsKIAotCXN0YXR1cyA9IGJlX2NtZF9yZXNldF9mdW5jdGlvbihhZGFwdGVyKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGN0cmxfY2xlYW47Ci0KIAlzdGF0dXMgPSBiZV9zdGF0c19pbml0KGFkYXB0ZXIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gY3RybF9jbGVhbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuaCBiL2RyaXZlcnMvbmV0L2JueDIuaAppbmRleCA2YzdmNzk1Li5hNGQ4MzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmgKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5oCkBAIC0zNjEsOSArMzYxLDEyIEBACiAjZGVmaW5lIEJOWDJfTDJDVFhfQ1RYX1RZUEVfQ1RYX0JEX0NITl9UWVBFX1ZBTFVFCSAoMTw8MjgpCiAKICNkZWZpbmUgQk5YMl9MMkNUWF9IT1NUX0JESURYCQkJCTB4MDAwMDAwMDQKLSNkZWZpbmUgQk5YMl9MMkNUWF9TVEFUVVNCX05VTV9TSElGVAkJCSAxNgotI2RlZmluZSBCTlgyX0wyQ1RYX1NUQVRVU0JfTlVNKHNiX2lkKQkJCSBcCi0JKCgoc2JfaWQpID4gMCkgPyAoKChzYl9pZCkgKyA3KSA8PCBCTlgyX0wyQ1RYX1NUQVRVU0JfTlVNX1NISUZUKSA6IDApCisjZGVmaW5lIEJOWDJfTDJDVFhfTDVfU1RBVFVTQl9OVU1fU0hJRlQJCQkgMTYKKyNkZWZpbmUgQk5YMl9MMkNUWF9MMl9TVEFUVVNCX05VTV9TSElGVAkJCSAyNAorI2RlZmluZSBCTlgyX0wyQ1RYX0w1X1NUQVRVU0JfTlVNKHNiX2lkKQkJXAorCSgoKHNiX2lkKSA+IDApID8gKCgoc2JfaWQpICsgNykgPDwgQk5YMl9MMkNUWF9MNV9TVEFUVVNCX05VTV9TSElGVCkgOiAwKQorI2RlZmluZSBCTlgyX0wyQ1RYX0wyX1NUQVRVU0JfTlVNKHNiX2lkKQkJXAorCSgoKHNiX2lkKSA+IDApID8gKCgoc2JfaWQpICsgNykgPDwgQk5YMl9MMkNUWF9MMl9TVEFUVVNCX05VTV9TSElGVCkgOiAwKQogI2RlZmluZSBCTlgyX0wyQ1RYX0hPU1RfQlNFUQkJCQkweDAwMDAwMDA4CiAjZGVmaW5lIEJOWDJfTDJDVFhfTlhfQlNFUQkJCQkweDAwMDAwMDBjCiAjZGVmaW5lIEJOWDJfTDJDVFhfTlhfQkRIQUREUl9ISQkJCTB4MDAwMDAwMTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDY5YzViMTUuLjQwZmI1ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtNjkxLDcgKzY5MSw3IEBACiAJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldiwgaW50IHJlcG9ydGluZykKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKnNsYXZlX29wcyA9IHNsYXZlX2Rldi0+bmV0ZGV2X29wczsKLQlzdGF0aWMgaW50ICgqaW9jdGwpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBpZnJlcSAqLCBpbnQpOworCWludCAoKmlvY3RsKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50KTsKIAlzdHJ1Y3QgaWZyZXEgaWZyOwogCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWlpOwogCkBAIC0zNjY1LDEwICszNjY1LDEwIEBACiAKIAlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKIAkJcmV0dXJuICgobnRvaGwoaXBoLT5zYWRkciBeIGlwaC0+ZGFkZHIpICYgMHhmZmZmKSBeCi0JCQkoZGF0YS0+aF9kZXN0WzVdIF4gYm9uZF9kZXYtPmRldl9hZGRyWzVdKSkgJSBjb3VudDsKKwkJCShkYXRhLT5oX2Rlc3RbNV0gXiBkYXRhLT5oX3NvdXJjZVs1XSkpICUgY291bnQ7CiAJfQogCi0JcmV0dXJuIChkYXRhLT5oX2Rlc3RbNV0gXiBib25kX2Rldi0+ZGV2X2FkZHJbNV0pICUgY291bnQ7CisJcmV0dXJuIChkYXRhLT5oX2Rlc3RbNV0gXiBkYXRhLT5oX3NvdXJjZVs1XSkgJSBjb3VudDsKIH0KIAogLyoKQEAgLTM2OTUsNyArMzY5NSw3IEBACiAKIAl9CiAKLQlyZXR1cm4gKGRhdGEtPmhfZGVzdFs1XSBeIGJvbmRfZGV2LT5kZXZfYWRkcls1XSkgJSBjb3VudDsKKwlyZXR1cm4gKGRhdGEtPmhfZGVzdFs1XSBeIGRhdGEtPmhfc291cmNlWzVdKSAlIGNvdW50OwogfQogCiAvKgpAQCAtMzcwNiw3ICszNzA2LDcgQEAKIHsKIAlzdHJ1Y3QgZXRoaGRyICpkYXRhID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CiAKLQlyZXR1cm4gKGRhdGEtPmhfZGVzdFs1XSBeIGJvbmRfZGV2LT5kZXZfYWRkcls1XSkgJSBjb3VudDsKKwlyZXR1cm4gKGRhdGEtPmhfZGVzdFs1XSBeIGRhdGEtPmhfc291cmNlWzVdKSAlIGNvdW50OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERldmljZSBlbnRyeSBwb2ludHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwX29mX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwX29mX3BsYXRmb3JtLmMKaW5kZXggMzM3MzU2MC4uOWRkMDc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMF9vZl9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDBfb2ZfcGxhdGZvcm0uYwpAQCAtMjEzLDYgKzIxMyw3IEBACiAJey5jb21wYXRpYmxlID0gIm54cCxzamExMDAwIn0sCiAJe30sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc2phMTAwMF9vZnBfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBzamExMDAwX29mcF9kcml2ZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jbmljLmMgYi9kcml2ZXJzL25ldC9jbmljLmMKaW5kZXggNDZjODdlYy4uM2JmMWIwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NuaWMuYwpAQCAtMjI2NCw5ICsyMjY0LDkgQEAKIAljbmljX2N0eF93cihkZXYsIGNpZF9hZGRyLCBCTlgyX0wyQ1RYX0NUWF9UWVBFLCB2YWwpOwogCiAJaWYgKHNiX2lkID09IDApCi0JCXZhbCA9IDIgPDwgQk5YMl9MMkNUWF9TVEFUVVNCX05VTV9TSElGVDsKKwkJdmFsID0gMiA8PCBCTlgyX0wyQ1RYX0wyX1NUQVRVU0JfTlVNX1NISUZUOwogCWVsc2UKLQkJdmFsID0gQk5YMl9MMkNUWF9TVEFUVVNCX05VTShzYl9pZCk7CisJCXZhbCA9IEJOWDJfTDJDVFhfTDJfU1RBVFVTQl9OVU0oc2JfaWQpOwogCWNuaWNfY3R4X3dyKGRldiwgY2lkX2FkZHIsIEJOWDJfTDJDVFhfSE9TVF9CRElEWCwgdmFsKTsKIAogCXJ4YmQgPSAoc3RydWN0IHJ4X2JkICopIChjcC0+bDJfcmluZyArIEJDTV9QQUdFX1NJWkUpOwpAQCAtMjQyMyw3ICsyNDIzLDcgQEAKIAljcC0+aW50X251bSA9IDA7CiAJaWYgKGV0aGRldi0+ZHJ2X3N0YXRlICYgQ05JQ19EUlZfU1RBVEVfVVNJTkdfTVNJWCkgewogCQl1MzIgc2JfaWQgPSBjcC0+c3RhdHVzX2Jsa19udW07Ci0JCXUzMiBzYiA9IEJOWDJfTDJDVFhfU1RBVFVTQl9OVU0oc2JfaWQpOworCQl1MzIgc2IgPSBCTlgyX0wyQ1RYX0w1X1NUQVRVU0JfTlVNKHNiX2lkKTsKIAogCQljcC0+aW50X251bSA9IHNiX2lkIDw8IEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01EX0lOVF9OVU1fU0hJRlQ7CiAJCWNuaWNfY3R4X3dyKGRldiwgY3AtPmt3cV9jaWRfYWRkciwgTDVfS1JOTFFfSE9TVF9RSURYLCBzYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCmluZGV4IDY1YTJkMGIuLmY3MmM1NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCkBAIC0zMzMsNiArMzMzLDkgQEAKICNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDX0VPSV9DMF9SWEVOCSgweDAxKQogI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNfRU9JX0MwX1RYRU4JKDB4MDIpCiAKKy8qIEVNQUMgU3RhdHMgQ2xlYXIgTWFzayAqLworI2RlZmluZSBFTUFDX1NUQVRTX0NMUl9NQVNLICAgICgweEZGRkZGRkZGKQorCiAvKiogbmV0X2J1Zl9vYmo6IEVNQUMgbmV0d29yayBidWZmZXJkYXRhIHN0cnVjdHVyZQogICoKICAqIEVNQUMgbmV0d29yayBidWZmZXIgZGF0YSBzdHJ1Y3R1cmUKQEAgLTI1NDgsNDAgKzI1NTEsNDkgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZW1hY19kZXZfZ2V0bmV0c3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IGVtYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXUzMiBtYWNfY29udHJvbDsKKwl1MzIgc3RhdHNfY2xlYXJfbWFzazsKIAogCS8qIHVwZGF0ZSBlbWFjIGhhcmR3YXJlIHN0YXRzIGFuZCByZXNldCB0aGUgcmVnaXN0ZXJzKi8KIAorCW1hY19jb250cm9sID0gZW1hY19yZWFkKEVNQUNfTUFDQ09OVFJPTCk7CisKKwlpZiAobWFjX2NvbnRyb2wgJiBFTUFDX01BQ0NPTlRST0xfR01JSUVOKQorCQlzdGF0c19jbGVhcl9tYXNrID0gRU1BQ19TVEFUU19DTFJfTUFTSzsKKwllbHNlCisJCXN0YXRzX2NsZWFyX21hc2sgPSAwOworCiAJcHJpdi0+bmV0X2Rldl9zdGF0cy5tdWx0aWNhc3QgKz0gZW1hY19yZWFkKEVNQUNfUlhNQ0FTVEZSQU1FUyk7Ci0JZW1hY193cml0ZShFTUFDX1JYTUNBU1RGUkFNRVMsIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7CisJZW1hY193cml0ZShFTUFDX1JYTUNBU1RGUkFNRVMsIHN0YXRzX2NsZWFyX21hc2spOwogCiAJcHJpdi0+bmV0X2Rldl9zdGF0cy5jb2xsaXNpb25zICs9IChlbWFjX3JlYWQoRU1BQ19UWENPTExJU0lPTikgKwogCQkJCQkgICBlbWFjX3JlYWQoRU1BQ19UWFNJTkdMRUNPTEwpICsKIAkJCQkJICAgZW1hY19yZWFkKEVNQUNfVFhNVUxUSUNPTEwpKTsKLQllbWFjX3dyaXRlKEVNQUNfVFhDT0xMSVNJT04sIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7Ci0JZW1hY193cml0ZShFTUFDX1RYU0lOR0xFQ09MTCwgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKLQllbWFjX3dyaXRlKEVNQUNfVFhNVUxUSUNPTEwsIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7CisJZW1hY193cml0ZShFTUFDX1RYQ09MTElTSU9OLCBzdGF0c19jbGVhcl9tYXNrKTsKKwllbWFjX3dyaXRlKEVNQUNfVFhTSU5HTEVDT0xMLCBzdGF0c19jbGVhcl9tYXNrKTsKKwllbWFjX3dyaXRlKEVNQUNfVFhNVUxUSUNPTEwsIHN0YXRzX2NsZWFyX21hc2spOwogCiAJcHJpdi0+bmV0X2Rldl9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzICs9IChlbWFjX3JlYWQoRU1BQ19SWE9WRVJTSVpFRCkgKwogCQkJCQkJZW1hY19yZWFkKEVNQUNfUlhKQUJCRVIpICsKIAkJCQkJCWVtYWNfcmVhZChFTUFDX1JYVU5ERVJTSVpFRCkpOwotCWVtYWNfd3JpdGUoRU1BQ19SWE9WRVJTSVpFRCwgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKLQllbWFjX3dyaXRlKEVNQUNfUlhKQUJCRVIsIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7Ci0JZW1hY193cml0ZShFTUFDX1JYVU5ERVJTSVpFRCwgRU1BQ19BTExfTVVMVElfUkVHX1ZBTFVFKTsKKwllbWFjX3dyaXRlKEVNQUNfUlhPVkVSU0laRUQsIHN0YXRzX2NsZWFyX21hc2spOworCWVtYWNfd3JpdGUoRU1BQ19SWEpBQkJFUiwgc3RhdHNfY2xlYXJfbWFzayk7CisJZW1hY193cml0ZShFTUFDX1JYVU5ERVJTSVpFRCwgc3RhdHNfY2xlYXJfbWFzayk7CiAKIAlwcml2LT5uZXRfZGV2X3N0YXRzLnJ4X292ZXJfZXJyb3JzICs9IChlbWFjX3JlYWQoRU1BQ19SWFNPRk9WRVJSVU5TKSArCiAJCQkJCSAgICAgICBlbWFjX3JlYWQoRU1BQ19SWE1PRk9WRVJSVU5TKSk7Ci0JZW1hY193cml0ZShFTUFDX1JYU09GT1ZFUlJVTlMsIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7Ci0JZW1hY193cml0ZShFTUFDX1JYTU9GT1ZFUlJVTlMsIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7CisJZW1hY193cml0ZShFTUFDX1JYU09GT1ZFUlJVTlMsIHN0YXRzX2NsZWFyX21hc2spOworCWVtYWNfd3JpdGUoRU1BQ19SWE1PRk9WRVJSVU5TLCBzdGF0c19jbGVhcl9tYXNrKTsKIAogCXByaXYtPm5ldF9kZXZfc3RhdHMucnhfZmlmb19lcnJvcnMgKz0gZW1hY19yZWFkKEVNQUNfUlhETUFPVkVSUlVOUyk7Ci0JZW1hY193cml0ZShFTUFDX1JYRE1BT1ZFUlJVTlMsIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7CisJZW1hY193cml0ZShFTUFDX1JYRE1BT1ZFUlJVTlMsIHN0YXRzX2NsZWFyX21hc2spOwogCiAJcHJpdi0+bmV0X2Rldl9zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPQogCQllbWFjX3JlYWQoRU1BQ19UWENBUlJJRVJTRU5TRSk7Ci0JZW1hY193cml0ZShFTUFDX1RYQ0FSUklFUlNFTlNFLCBFTUFDX0FMTF9NVUxUSV9SRUdfVkFMVUUpOworCWVtYWNfd3JpdGUoRU1BQ19UWENBUlJJRVJTRU5TRSwgc3RhdHNfY2xlYXJfbWFzayk7CiAKIAlwcml2LT5uZXRfZGV2X3N0YXRzLnR4X2ZpZm9fZXJyb3JzID0gZW1hY19yZWFkKEVNQUNfVFhVTkRFUlJVTik7Ci0JZW1hY193cml0ZShFTUFDX1RYVU5ERVJSVU4sIEVNQUNfQUxMX01VTFRJX1JFR19WQUxVRSk7CisJZW1hY193cml0ZShFTUFDX1RYVU5ERVJSVU4sIHN0YXRzX2NsZWFyX21hc2spOwogCiAJcmV0dXJuICZwcml2LT5uZXRfZGV2X3N0YXRzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmggYi9kcml2ZXJzL25ldC9kbTkwMDAuaAppbmRleCA4MDgxN2MyLi5mYjFjOTI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmgKQEAgLTUwLDcgKzUwLDcgQEAKICNkZWZpbmUgRE05MDAwX1JDU1IJICAgICAgIDB4MzIKIAogI2RlZmluZSBDSElQUl9ETTkwMDBBCSAgICAgICAweDE5Ci0jZGVmaW5lIENISVBSX0RNOTAwMEIJICAgICAgIDB4MUIKKyNkZWZpbmUgQ0hJUFJfRE05MDAwQgkgICAgICAgMHgxQQogCiAjZGVmaW5lIERNOTAwMF9NUkNNRFggICAgICAgICAgMHhGMAogI2RlZmluZSBETTkwMDBfTVJDTUQgICAgICAgICAgIDB4RjIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKaW5kZXggOTgxOTM2Yy4uNDA1YTE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKQEAgLTUxOSw5ICs1MTksMTMgQEAKIGV4dGVybiBzMzIgZTEwMDBlX2dldF9jYWJsZV9sZW5ndGhfaWdwXzIoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwZV9nZXRfcGh5X2luZm9faWdwKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMGVfcmVhZF9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpOworZXh0ZXJuIHMzMiBlMTAwMGVfcmVhZF9waHlfcmVnX2lncF9sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSk7CiBleHRlcm4gczMyIGUxMDAwZV9waHlfaHdfcmVzZXRfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBlX3NldF9kM19scGx1X3N0YXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgYWN0aXZlKTsKIGV4dGVybiBzMzIgZTEwMDBlX3dyaXRlX3BoeV9yZWdfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKTsKK2V4dGVybiBzMzIgZTEwMDBlX3dyaXRlX3BoeV9yZWdfaWdwX2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBkYXRhKTsKIGV4dGVybiBzMzIgZTEwMDBlX3BoeV9zd19yZXNldChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBlX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfbTg4KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMGVfZ2V0X2NmZ19kb25lKHN0cnVjdCBlMTAwMF9odyAqaHcpOwpAQCAtNTM4LDcgKzU0MiwxMSBAQAogZXh0ZXJuIHMzMiBlMTAwMGVfd3JpdGVfcGh5X3JlZ19ibTIoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfc2V0dXAoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2ICpwaHlfY3RybCk7CiBleHRlcm4gczMyIGUxMDAwZV93cml0ZV9rbXJuX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSk7CitleHRlcm4gczMyIGUxMDAwZV93cml0ZV9rbXJuX3JlZ19sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgZGF0YSk7CiBleHRlcm4gczMyIGUxMDAwZV9yZWFkX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSk7CitleHRlcm4gczMyIGUxMDAwZV9yZWFkX2ttcm5fcmVnX2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhKTsKIGV4dGVybiBzMzIgZTEwMDBlX3BoeV9oYXNfbGlua19nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBpdGVyYXRpb25zLAogCQkJICAgICAgIHUzMiB1c2VjX2ludGVydmFsLCBib29sICpzdWNjZXNzKTsKIGV4dGVybiBzMzIgZTEwMDBlX3BoeV9yZXNldF9kc3Aoc3RydWN0IGUxMDAwX2h3ICpodyk7CkBAIC01NDYsNyArNTU0LDExIEBACiBleHRlcm4gczMyIGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpOwogZXh0ZXJuIHMzMiBlMTAwMGVfY2hlY2tfZG93bnNoaWZ0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMF9yZWFkX3BoeV9yZWdfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKTsKK2V4dGVybiBzMzIgZTEwMDBfcmVhZF9waHlfcmVnX2h2X2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSk7CiBleHRlcm4gczMyIGUxMDAwX3dyaXRlX3BoeV9yZWdfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpOworZXh0ZXJuIHMzMiBlMTAwMF93cml0ZV9waHlfcmVnX2h2X2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgZGF0YSk7CiBleHRlcm4gczMyIGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIHNsb3cpOwogZXh0ZXJuIHMzMiBlMTAwMF9saW5rX3N0YWxsX3dvcmthcm91bmRfaHYoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwX2NvcHBlcl9saW5rX3NldHVwXzgyNTc3KHN0cnVjdCBlMTAwMF9odyAqaHcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAppbmRleCBmZDQ0ZDlmLi43YjA1Y2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaApAQCAtNzY0LDExICs3NjQsMTMgQEAKIAlzMzIgICgqZ2V0X2NhYmxlX2xlbmd0aCkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpnZXRfcGh5X2luZm8pKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqcmVhZF9waHlfcmVnKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYgKik7CisJczMyICAoKnJlYWRfcGh5X3JlZ19sb2NrZWQpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIsIHUxNiAqKTsKIAl2b2lkICgqcmVsZWFzZV9waHkpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqcmVzZXRfcGh5KShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKnNldF9kMF9scGx1X3N0YXRlKShzdHJ1Y3QgZTEwMDBfaHcgKiwgYm9vbCk7CiAJczMyICAoKnNldF9kM19scGx1X3N0YXRlKShzdHJ1Y3QgZTEwMDBfaHcgKiwgYm9vbCk7CiAJczMyICAoKndyaXRlX3BoeV9yZWcpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIsIHUxNik7CisJczMyICAoKndyaXRlX3BoeV9yZWdfbG9ja2VkKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYpOwogCXMzMiAgKCpjZmdfb25fbGlua191cCkoc3RydWN0IGUxMDAwX2h3ICopOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKaW5kZXggOTlkZjJhYi4uYjYzODhiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCkBAIC0xMjIsNiArMTIyLDEzIEBACiAKICNkZWZpbmUgSFZfTEVEX0NPTkZJRwkJUEhZX1JFRyg3NjgsIDMwKSAvKiBMRUQgQ29uZmlndXJhdGlvbiAqLwogCisjZGVmaW5lIFNXX0ZMQUdfVElNRU9VVCAgICAxMDAwIC8qIFNXIFNlbWFwaG9yZSBmbGFnIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCisKKy8qIE9FTSBCaXRzIFBoeSBSZWdpc3RlciAqLworI2RlZmluZSBIVl9PRU1fQklUUyAgICAgICAgICAgIFBIWV9SRUcoNzY4LCAyNSkKKyNkZWZpbmUgSFZfT0VNX0JJVFNfTFBMVSAgICAgICAweDAwMDQgLyogTG93IFBvd2VyIExpbmsgVXAgKi8KKyNkZWZpbmUgSFZfT0VNX0JJVFNfUkVTVEFSVF9BTiAweDA0MDAgLyogUmVzdGFydCBBdXRvLW5lZ290aWF0aW9uICovCisKIC8qIElDSCBHYkUgRmxhc2ggSGFyZHdhcmUgU2VxdWVuY2luZyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXIgYml0IGJyZWFrZG93biAqLwogLyogT2Zmc2V0IDA0aCBIU0ZTVFMgKi8KIHVuaW9uIGljaDhfaHdzX2ZsYXNoX3N0YXR1cyB7CkBAIC0yMDAsNiArMjA3LDcgQEAKIHN0YXRpYyBzMzIgZTEwMDBfY2xlYW51cF9sZWRfcGNobGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBlMTAwMF9sZWRfb25fcGNobGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBlMTAwMF9sZWRfb2ZmX3BjaGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBzMzIgZTEwMDBfc2V0X2xwbHVfc3RhdGVfcGNobGFuKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgYWN0aXZlKTsKIAogc3RhdGljIGlubGluZSB1MTYgX19lcjE2Zmxhc2goc3RydWN0IGUxMDAwX2h3ICpodywgdW5zaWduZWQgbG9uZyByZWcpCiB7CkBAIC0yNDIsNyArMjUwLDExIEBACiAKIAlwaHktPm9wcy5jaGVja19wb2xhcml0eSAgICAgICA9IGUxMDAwX2NoZWNrX3BvbGFyaXR5X2lmZV9pY2g4bGFuOwogCXBoeS0+b3BzLnJlYWRfcGh5X3JlZyAgICAgICAgID0gZTEwMDBfcmVhZF9waHlfcmVnX2h2OworCXBoeS0+b3BzLnJlYWRfcGh5X3JlZ19sb2NrZWQgID0gZTEwMDBfcmVhZF9waHlfcmVnX2h2X2xvY2tlZDsKKwlwaHktPm9wcy5zZXRfZDBfbHBsdV9zdGF0ZSAgICA9IGUxMDAwX3NldF9scGx1X3N0YXRlX3BjaGxhbjsKKwlwaHktPm9wcy5zZXRfZDNfbHBsdV9zdGF0ZSAgICA9IGUxMDAwX3NldF9scGx1X3N0YXRlX3BjaGxhbjsKIAlwaHktPm9wcy53cml0ZV9waHlfcmVnICAgICAgICA9IGUxMDAwX3dyaXRlX3BoeV9yZWdfaHY7CisJcGh5LT5vcHMud3JpdGVfcGh5X3JlZ19sb2NrZWQgPSBlMTAwMF93cml0ZV9waHlfcmVnX2h2X2xvY2tlZDsKIAlwaHktPmF1dG9uZWdfbWFzayAgICAgICAgICAgICA9IEFVVE9ORUdfQURWRVJUSVNFX1NQRUVEX0RFRkFVTFQ7CiAKIAlwaHktPmlkID0gZTEwMDBfcGh5X3Vua25vd247CkBAIC0zMDMsNiArMzE1LDggQEAKIAljYXNlIElHUDAzRTEwMDBfRV9QSFlfSUQ6CiAJCXBoeS0+dHlwZSA9IGUxMDAwX3BoeV9pZ3BfMzsKIAkJcGh5LT5hdXRvbmVnX21hc2sgPSBBVVRPTkVHX0FEVkVSVElTRV9TUEVFRF9ERUZBVUxUOworCQlwaHktPm9wcy5yZWFkX3BoeV9yZWdfbG9ja2VkID0gZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3BfbG9ja2VkOworCQlwaHktPm9wcy53cml0ZV9waHlfcmVnX2xvY2tlZCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX2lncF9sb2NrZWQ7CiAJCWJyZWFrOwogCWNhc2UgSUZFX0VfUEhZX0lEOgogCWNhc2UgSUZFX1BMVVNfRV9QSFlfSUQ6CkBAIC01NjgsMTIgKzU4MiwzOSBAQAogc3RhdGljIERFRklORV9NVVRFWChudm1fbXV0ZXgpOwogCiAvKioKKyAqICBlMTAwMF9hY3F1aXJlX252bV9pY2g4bGFuIC0gQWNxdWlyZSBOVk0gbXV0ZXgKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBBY3F1aXJlcyB0aGUgbXV0ZXggZm9yIHBlcmZvcm1pbmcgTlZNIG9wZXJhdGlvbnMuCisgKiovCitzdGF0aWMgczMyIGUxMDAwX2FjcXVpcmVfbnZtX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwltdXRleF9sb2NrKCZudm1fbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGUxMDAwX3JlbGVhc2VfbnZtX2ljaDhsYW4gLSBSZWxlYXNlIE5WTSBtdXRleAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFJlbGVhc2VzIHRoZSBtdXRleCB1c2VkIHdoaWxlIHBlcmZvcm1pbmcgTlZNIG9wZXJhdGlvbnMuCisgKiovCitzdGF0aWMgdm9pZCBlMTAwMF9yZWxlYXNlX252bV9pY2g4bGFuKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJbXV0ZXhfdW5sb2NrKCZudm1fbXV0ZXgpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgREVGSU5FX01VVEVYKHN3ZmxhZ19tdXRleCk7CisKKy8qKgogICogIGUxMDAwX2FjcXVpcmVfc3dmbGFnX2ljaDhsYW4gLSBBY3F1aXJlIHNvZnR3YXJlIGNvbnRyb2wgZmxhZwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgotICogIEFjcXVpcmVzIHRoZSBzb2Z0d2FyZSBjb250cm9sIGZsYWcgZm9yIHBlcmZvcm1pbmcgTlZNIGFuZCBQSFkKLSAqICBvcGVyYXRpb25zLiAgVGhpcyBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgZW50cnkgcG9pbnQgb25seSBjYWxsZWQgYnkKLSAqICByZWFkL3dyaXRlIHJvdXRpbmVzIGZvciB0aGUgUEhZIGFuZCBOVk0gcGFydHMuCisgKiAgQWNxdWlyZXMgdGhlIHNvZnR3YXJlIGNvbnRyb2wgZmxhZyBmb3IgcGVyZm9ybWluZyBQSFkgYW5kIHNlbGVjdAorICogIE1BQyBDU1IgYWNjZXNzZXMuCiAgKiovCiBzdGF0aWMgczMyIGUxMDAwX2FjcXVpcmVfc3dmbGFnX2ljaDhsYW4oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKQEAgLTU4Miw3ICs2MjMsNyBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCW11dGV4X2xvY2soJm52bV9tdXRleCk7CisJbXV0ZXhfbG9jaygmc3dmbGFnX211dGV4KTsKIAogCXdoaWxlICh0aW1lb3V0KSB7CiAJCWV4dGNuZl9jdHJsID0gZXIzMihFWFRDTkZfQ1RSTCk7CkBAIC01OTksNyArNjQwLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JdGltZW91dCA9IFBIWV9DRkdfVElNRU9VVCAqIDI7CisJdGltZW91dCA9IFNXX0ZMQUdfVElNRU9VVDsKIAogCWV4dGNuZl9jdHJsIHw9IEUxMDAwX0VYVENORl9DVFJMX1NXRkxBRzsKIAlldzMyKEVYVENORl9DVFJMLCBleHRjbmZfY3RybCk7CkBAIC02MjMsNyArNjY0LDcgQEAKIAogb3V0OgogCWlmIChyZXRfdmFsKQotCQltdXRleF91bmxvY2soJm52bV9tdXRleCk7CisJCW11dGV4X3VubG9jaygmc3dmbGFnX211dGV4KTsKIAogCXJldHVybiByZXRfdmFsOwogfQpAQCAtNjMyLDkgKzY3Myw4IEBACiAgKiAgZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbiAtIFJlbGVhc2Ugc29mdHdhcmUgY29udHJvbCBmbGFnCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCi0gKiAgUmVsZWFzZXMgdGhlIHNvZnR3YXJlIGNvbnRyb2wgZmxhZyBmb3IgcGVyZm9ybWluZyBOVk0gYW5kIFBIWSBvcGVyYXRpb25zLgotICogIFRoaXMgaXMgYSBmdW5jdGlvbiBwb2ludGVyIGVudHJ5IHBvaW50IG9ubHkgY2FsbGVkIGJ5IHJlYWQvd3JpdGUKLSAqICByb3V0aW5lcyBmb3IgdGhlIFBIWSBhbmQgTlZNIHBhcnRzLgorICogIFJlbGVhc2VzIHRoZSBzb2Z0d2FyZSBjb250cm9sIGZsYWcgZm9yIHBlcmZvcm1pbmcgUEhZIGFuZCBzZWxlY3QKKyAqICBNQUMgQ1NSIGFjY2Vzc2VzLgogICoqLwogc3RhdGljIHZvaWQgZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewpAQCAtNjQ0LDcgKzY4NCw5IEBACiAJZXh0Y25mX2N0cmwgJj0gfkUxMDAwX0VYVENORl9DVFJMX1NXRkxBRzsKIAlldzMyKEVYVENORl9DVFJMLCBleHRjbmZfY3RybCk7CiAKLQltdXRleF91bmxvY2soJm52bV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzd2ZsYWdfbXV0ZXgpOworCisJcmV0dXJuOwogfQogCiAvKioKQEAgLTg0NCw3ICs4ODYsNyBAQAogCXUzMiBpOwogCXUzMiBkYXRhLCBjbmZfc2l6ZSwgY25mX2Jhc2VfYWRkciwgc3dfY2ZnX21hc2s7CiAJczMyIHJldF92YWw7Ci0JdTE2IHdvcmRfYWRkciwgcmVnX2RhdGEsIHJlZ19hZGRyLCBwaHlfcGFnZSA9IDA7CisJdTE2IHJlZywgd29yZF9hZGRyLCByZWdfZGF0YSwgcmVnX2FkZHIsIHBoeV9wYWdlID0gMDsKIAogCXJldF92YWwgPSBlMTAwMGVfcGh5X2h3X3Jlc2V0X2dlbmVyaWMoaHcpOwogCWlmIChyZXRfdmFsKQpAQCAtODU5LDYgKzkwMSwxMCBAQAogCQkJcmV0dXJuIHJldF92YWw7CiAJfQogCisJLyogRHVtbXkgcmVhZCB0byBjbGVhciB0aGUgcGh5IHdha2V1cCBiaXQgYWZ0ZXIgbGNkIHJlc2V0ICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pCisJCWUxZV9ycGh5KGh3LCBCTV9XVUMsICZyZWcpOworCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBQSFkgZnJvbSB0aGUgTlZNIG9uIElDSCBwbGF0Zm9ybXMuICBUaGlzCiAJICogaXMgbmVlZGVkIGR1ZSB0byBhbiBpc3N1ZSB3aGVyZSB0aGUgTlZNIGNvbmZpZ3VyYXRpb24gaXMKQEAgLTEwNTQsNiArMTEwMCwzOCBAQAogfQogCiAvKioKKyAqICBlMTAwMF9zZXRfbHBsdV9zdGF0ZV9wY2hsYW4gLSBTZXQgTG93IFBvd2VyIExpbmsgVXAgc3RhdGUKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBhY3RpdmU6IHRydWUgdG8gZW5hYmxlIExQTFUsIGZhbHNlIHRvIGRpc2FibGUKKyAqCisgKiAgU2V0cyB0aGUgTFBMVSBzdGF0ZSBhY2NvcmRpbmcgdG8gdGhlIGFjdGl2ZSBmbGFnLiAgRm9yIFBDSCwgaWYgT0VNIHdyaXRlCisgKiAgYml0IGFyZSBkaXNhYmxlZCBpbiB0aGUgTlZNLCB3cml0aW5nIHRoZSBMUExVIGJpdHMgaW4gdGhlIE1BQyB3aWxsIG5vdCBzZXQKKyAqICB0aGUgcGh5IHNwZWVkLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbWFudWFsbHkgc2V0IHRoZSBMUExVIGJpdCBhbmQgcmVzdGFydAorICogIGF1dG8tbmVnIGFzIGh3IHdvdWxkIGRvLiBEMyBhbmQgRDAgTFBMVSB3aWxsIGNhbGwgdGhlIHNhbWUgZnVuY3Rpb24KKyAqICBzaW5jZSBpdCBjb25maWd1cmVzIHRoZSBzYW1lIGJpdC4KKyAqKi8KK3N0YXRpYyBzMzIgZTEwMDBfc2V0X2xwbHVfc3RhdGVfcGNobGFuKHN0cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgYWN0aXZlKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgb2VtX3JlZzsKKworCXJldF92YWwgPSBlMWVfcnBoeShodywgSFZfT0VNX0JJVFMsICZvZW1fcmVnKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlpZiAoYWN0aXZlKQorCQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX0xQTFU7CisJZWxzZQorCQlvZW1fcmVnICY9IH5IVl9PRU1fQklUU19MUExVOworCisJb2VtX3JlZyB8PSBIVl9PRU1fQklUU19SRVNUQVJUX0FOOworCXJldF92YWwgPSBlMWVfd3BoeShodywgSFZfT0VNX0JJVFMsIG9lbV9yZWcpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGUxMDAwX3NldF9kMF9scGx1X3N0YXRlX2ljaDhsYW4gLSBTZXQgTG93IFBvd2VyIExpbmt1cCBEMCBzdGF0ZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQGFjdGl2ZTogVFJVRSB0byBlbmFibGUgTFBMVSwgRkFMU0UgdG8gZGlzYWJsZQpAQCAtMTMxNCwxMiArMTM5MiwxMSBAQAogCWlmICgob2Zmc2V0ID49IG52bS0+d29yZF9zaXplKSB8fCAod29yZHMgPiBudm0tPndvcmRfc2l6ZSAtIG9mZnNldCkgfHwKIAkgICAgKHdvcmRzID09IDApKSB7CiAJCWh3X2RiZyhodywgIm52bSBwYXJhbWV0ZXIocykgb3V0IG9mIGJvdW5kc1xuIik7Ci0JCXJldHVybiAtRTEwMDBfRVJSX05WTTsKKwkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTlZNOworCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gZTEwMDBfYWNxdWlyZV9zd2ZsYWdfaWNoOGxhbihodyk7Ci0JaWYgKHJldF92YWwpCi0JCWdvdG8gb3V0OworCW52bS0+b3BzLmFjcXVpcmVfbnZtKGh3KTsKIAogCXJldF92YWwgPSBlMTAwMF92YWxpZF9udm1fYmFua19kZXRlY3RfaWNoOGxhbihodywgJmJhbmspOwogCWlmIChyZXRfdmFsKSB7CkBAIC0xMzQ1LDcgKzE0MjIsNyBAQAogCQl9CiAJfQogCi0JZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihodyk7CisJbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwogCiBvdXQ6CiAJaWYgKHJldF92YWwpCkBAIC0xNjAzLDExICsxNjgwLDE1IEBACiAJCXJldHVybiAtRTEwMDBfRVJSX05WTTsKIAl9CiAKKwludm0tPm9wcy5hY3F1aXJlX252bShodyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgewogCQlkZXZfc3BlYy0+c2hhZG93X3JhbVtvZmZzZXQraV0ubW9kaWZpZWQgPSAxOwogCQlkZXZfc3BlYy0+c2hhZG93X3JhbVtvZmZzZXQraV0udmFsdWUgPSBkYXRhW2ldOwogCX0KIAorCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNjM3LDkgKzE3MTgsNyBAQAogCWlmIChudm0tPnR5cGUgIT0gZTEwMDBfbnZtX2ZsYXNoX3N3KQogCQlnb3RvIG91dDsKIAotCXJldF92YWwgPSBlMTAwMF9hY3F1aXJlX3N3ZmxhZ19pY2g4bGFuKGh3KTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7CisJbnZtLT5vcHMuYWNxdWlyZV9udm0oaHcpOwogCiAJLyoKIAkgKiBXZSdyZSB3cml0aW5nIHRvIHRoZSBvcHBvc2l0ZSBiYW5rIHNvIGlmIHdlJ3JlIG9uIGJhbmsgMSwKQEAgLTE2NTcsNyArMTczNiw3IEBACiAJCW9sZF9iYW5rX29mZnNldCA9IDA7CiAJCXJldF92YWwgPSBlMTAwMF9lcmFzZV9mbGFzaF9iYW5rX2ljaDhsYW4oaHcsIDEpOwogCQlpZiAocmV0X3ZhbCkgewotCQkJZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihodyk7CisJCQludm0tPm9wcy5yZWxlYXNlX252bShodyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7CkBAIC0xNjY1LDcgKzE3NDQsNyBAQAogCQluZXdfYmFua19vZmZzZXQgPSAwOwogCQlyZXRfdmFsID0gZTEwMDBfZXJhc2VfZmxhc2hfYmFua19pY2g4bGFuKGh3LCAwKTsKIAkJaWYgKHJldF92YWwpIHsKLQkJCWUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4oaHcpOworCQkJbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC0xNzIzLDcgKzE4MDIsNyBAQAogCWlmIChyZXRfdmFsKSB7CiAJCS8qIFBvc3NpYmx5IHJlYWQtb25seSwgc2VlIGUxMDAwZV93cml0ZV9wcm90ZWN0X252bV9pY2g4bGFuKCkgKi8KIAkJaHdfZGJnKGh3LCAiRmxhc2ggY29tbWl0IGZhaWxlZC5cbiIpOwotCQllMTAwMF9yZWxlYXNlX3N3ZmxhZ19pY2g4bGFuKGh3KTsKKwkJbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE3MzYsNyArMTgxNSw3IEBACiAJYWN0X29mZnNldCA9IG5ld19iYW5rX29mZnNldCArIEUxMDAwX0lDSF9OVk1fU0lHX1dPUkQ7CiAJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfZmxhc2hfd29yZF9pY2g4bGFuKGh3LCBhY3Rfb2Zmc2V0LCAmZGF0YSk7CiAJaWYgKHJldF92YWwpIHsKLQkJZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihodyk7CisJCW52bS0+b3BzLnJlbGVhc2VfbnZtKGh3KTsKIAkJZ290byBvdXQ7CiAJfQogCWRhdGEgJj0gMHhCRkZGOwpAQCAtMTc0NCw3ICsxODIzLDcgQEAKIAkJCQkJCSAgICAgICBhY3Rfb2Zmc2V0ICogMiArIDEsCiAJCQkJCQkgICAgICAgKHU4KShkYXRhID4+IDgpKTsKIAlpZiAocmV0X3ZhbCkgewotCQllMTAwMF9yZWxlYXNlX3N3ZmxhZ19pY2g4bGFuKGh3KTsKKwkJbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE3NTcsNyArMTgzNiw3IEBACiAJYWN0X29mZnNldCA9IChvbGRfYmFua19vZmZzZXQgKyBFMTAwMF9JQ0hfTlZNX1NJR19XT1JEKSAqIDIgKyAxOwogCXJldF92YWwgPSBlMTAwMF9yZXRyeV93cml0ZV9mbGFzaF9ieXRlX2ljaDhsYW4oaHcsIGFjdF9vZmZzZXQsIDApOwogCWlmIChyZXRfdmFsKSB7Ci0JCWUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4oaHcpOworCQludm0tPm9wcy5yZWxlYXNlX252bShodyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTc2Nyw3ICsxODQ2LDcgQEAKIAkJZGV2X3NwZWMtPnNoYWRvd19yYW1baV0udmFsdWUgPSAweEZGRkY7CiAJfQogCi0JZTEwMDBfcmVsZWFzZV9zd2ZsYWdfaWNoOGxhbihodyk7CisJbnZtLT5vcHMucmVsZWFzZV9udm0oaHcpOwogCiAJLyoKIAkgKiBSZWxvYWQgdGhlIEVFUFJPTSwgb3IgZWxzZSBtb2RpZmljYXRpb25zIHdpbGwgbm90IGFwcGVhcgpAQCAtMTgzMSwxNCArMTkxMCwxMiBAQAogICoqLwogdm9pZCBlMTAwMGVfd3JpdGVfcHJvdGVjdF9udm1faWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogeworCXN0cnVjdCBlMTAwMF9udm1faW5mbyAqbnZtID0gJmh3LT5udm07CiAJdW5pb24gaWNoOF9mbGFzaF9wcm90ZWN0ZWRfcmFuZ2UgcHIwOwogCXVuaW9uIGljaDhfaHdzX2ZsYXNoX3N0YXR1cyBoc2ZzdHM7CiAJdTMyIGdmcHJlZzsKLQlzMzIgcmV0X3ZhbDsKIAotCXJldF92YWwgPSBlMTAwMF9hY3F1aXJlX3N3ZmxhZ19pY2g4bGFuKGh3KTsKLQlpZiAocmV0X3ZhbCkKLQkJcmV0dXJuOworCW52bS0+b3BzLmFjcXVpcmVfbnZtKGh3KTsKIAogCWdmcHJlZyA9IGVyMzJmbGFzaChJQ0hfRkxBU0hfR0ZQUkVHKTsKIApAQCAtMTg1OSw3ICsxOTM2LDcgQEAKIAloc2ZzdHMuaHNmX3N0YXR1cy5mbG9ja2RuID0gdHJ1ZTsKIAlldzMyZmxhc2goSUNIX0ZMQVNIX0hTRlNUUywgaHNmc3RzLnJlZ3ZhbCk7CiAKLQllMTAwMF9yZWxlYXNlX3N3ZmxhZ19pY2g4bGFuKGh3KTsKKwludm0tPm9wcy5yZWxlYXNlX252bShodyk7CiB9CiAKIC8qKgpAQCAtMjIyOSw2ICsyMzA2LDcgQEAKICAqKi8KIHN0YXRpYyBzMzIgZTEwMDBfcmVzZXRfaHdfaWNoOGxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogeworCXUxNiByZWc7CiAJdTMyIGN0cmwsIGljciwga2FiOwogCXMzMiByZXRfdmFsOwogCkBAIC0yMzA0LDYgKzIzODIsOSBAQAogCQkJaHdfZGJnKGh3LCAiQXV0byBSZWFkIERvbmUgZGlkIG5vdCBjb21wbGV0ZVxuIik7CiAJCX0KIAl9CisJLyogRHVtbXkgcmVhZCB0byBjbGVhciB0aGUgcGh5IHdha2V1cCBiaXQgYWZ0ZXIgbGNkIHJlc2V0ICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pCisJCWUxZV9ycGh5KGh3LCBCTV9XVUMsICZyZWcpOwogCiAJLyoKIAkgKiBGb3IgUENILCB0aGlzIHdyaXRlIHdpbGwgbWFrZSBzdXJlIHRoYXQgYW55IG5vaXNlCkBAIC0yODQzLDkgKzI5MjQsOCBAQAogCQkgICAgICAgICAgICBFMTAwMF9QSFlfQ1RSTF9HQkVfRElTQUJMRTsKIAkJZXczMihQSFlfQ1RSTCwgcGh5X2N0cmwpOwogCi0JCS8qIFdvcmthcm91bmQgU1dGTEFHIHVuZXhwZWN0ZWRseSBzZXQgZHVyaW5nIFMwLT5TeCAqLwogCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaGxhbikKLQkJCXVkZWxheSg1MDApOworCQkJZTEwMDBfcGh5X2h3X3Jlc2V0X2ljaDhsYW4oaHcpOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTMxMTMsOSArMzE5Myw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGUxMDAwX252bV9vcGVyYXRpb25zIGljaDhfbnZtX29wcyA9IHsKLQkuYWNxdWlyZV9udm0JCT0gZTEwMDBfYWNxdWlyZV9zd2ZsYWdfaWNoOGxhbiwKKwkuYWNxdWlyZV9udm0JCT0gZTEwMDBfYWNxdWlyZV9udm1faWNoOGxhbiwKIAkucmVhZF9udm0JIAk9IGUxMDAwX3JlYWRfbnZtX2ljaDhsYW4sCi0JLnJlbGVhc2VfbnZtCQk9IGUxMDAwX3JlbGVhc2Vfc3dmbGFnX2ljaDhsYW4sCisJLnJlbGVhc2VfbnZtCQk9IGUxMDAwX3JlbGVhc2VfbnZtX2ljaDhsYW4sCiAJLnVwZGF0ZV9udm0JCT0gZTEwMDBfdXBkYXRlX252bV9jaGVja3N1bV9pY2g4bGFuLAogCS52YWxpZF9sZWRfZGVmYXVsdAk9IGUxMDAwX3ZhbGlkX2xlZF9kZWZhdWx0X2ljaDhsYW4sCiAJLnZhbGlkYXRlX252bQkJPSBlMTAwMF92YWxpZGF0ZV9udm1fY2hlY2tzdW1faWNoOGxhbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYwppbmRleCA5OTQ0MDFmLi5mOWQzM2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCkBAIC0xNjQsMTYgKzE2NCwyNSBAQAogCQkgKiBNRElDIG1vZGUuIE5vIGhhcm0gaW4gdHJ5aW5nIGFnYWluIGluIHRoaXMgY2FzZSBzaW5jZQogCQkgKiB0aGUgUEhZIElEIGlzIHVua25vd24gYXQgdGhpcyBwb2ludCBhbnl3YXkKIAkJICovCisJCXJldF92YWwgPSBwaHktPm9wcy5hY3F1aXJlX3BoeShodyk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CiAJCXJldF92YWwgPSBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoaHcsIHRydWUpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OworCQlwaHktPm9wcy5yZWxlYXNlX3BoeShodyk7CiAKIAkJcmV0cnlfY291bnQrKzsKIAl9CiBvdXQ6CiAJLyogUmV2ZXJ0IHRvIE1ESU8gZmFzdCBtb2RlLCBpZiBhcHBsaWNhYmxlICovCi0JaWYgKHJldHJ5X2NvdW50KQorCWlmIChyZXRyeV9jb3VudCkgeworCQlyZXRfdmFsID0gcGh5LT5vcHMuYWNxdWlyZV9waHkoaHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOwogCQlyZXRfdmFsID0gZTEwMDBfc2V0X21kaW9fc2xvd19tb2RlX2h2KGh3LCBmYWxzZSk7CisJCXBoeS0+b3BzLnJlbGVhc2VfcGh5KGh3KTsKKwl9CiAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KQEAgLTM1NCwzOCArMzYzLDExNyBAQAogfQogCiAvKioKLSAqICBlMTAwMGVfcmVhZF9waHlfcmVnX2lncCAtIFJlYWQgaWdwIFBIWSByZWdpc3RlcgorICogIF9fZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3AgLSBSZWFkIGlncCBQSFkgcmVnaXN0ZXIKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byBiZSByZWFkCiAgKiAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIHJlYWQgZGF0YQorICogIEBsb2NrZWQ6IHNlbWFwaG9yZSBoYXMgYWxyZWFkeSBiZWVuIGFjcXVpcmVkIG9yIG5vdAogICoKICAqICBBY3F1aXJlcyBzZW1hcGhvcmUsIGlmIG5lY2Vzc2FyeSwgdGhlbiByZWFkcyB0aGUgUEhZIHJlZ2lzdGVyIGF0IG9mZnNldAotICogIGFuZCBzdG9yaW5nIHRoZSByZXRyaWV2ZWQgaW5mb3JtYXRpb24gaW4gZGF0YS4gIFJlbGVhc2UgYW55IGFjcXVpcmVkCisgKiAgYW5kIHN0b3JlcyB0aGUgcmV0cmlldmVkIGluZm9ybWF0aW9uIGluIGRhdGEuICBSZWxlYXNlIGFueSBhY3F1aXJlZAogICogIHNlbWFwaG9yZXMgYmVmb3JlIGV4aXRpbmcuCiAgKiovCi1zMzIgZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKQorc3RhdGljIHMzMiBfX2UxMDAwZV9yZWFkX3BoeV9yZWdfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbG9ja2VkKQogewotCXMzMiByZXRfdmFsOworCXMzMiByZXRfdmFsID0gMDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOworCWlmICghbG9ja2VkKSB7CisJCWlmICghKGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KSkKKwkJCWdvdG8gb3V0OworCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJfQogCiAJaWYgKG9mZnNldCA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHsKIAkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsCiAJCQkJCQkgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJCQkgICAgKHUxNilvZmZzZXQpOwotCQlpZiAocmV0X3ZhbCkgewotCQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCQkJcmV0dXJuIHJldF92YWw7Ci0JCX0KKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIHJlbGVhc2U7CiAJfQogCiAJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKLQkJCQkJICAgZGF0YSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOwogCi0JaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworcmVsZWFzZToKKwlpZiAoIWxvY2tlZCkKKwkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworb3V0OgorCXJldHVybiByZXRfdmFsOworfQogCisvKioKKyAqICBlMTAwMGVfcmVhZF9waHlfcmVnX2lncCAtIFJlYWQgaWdwIFBIWSByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKKyAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKgorICogIEFjcXVpcmVzIHNlbWFwaG9yZSB0aGVuIHJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0IGFuZCBzdG9yZXMgdGhlCisgKiAgcmV0cmlldmVkIGluZm9ybWF0aW9uIGluIGRhdGEuCisgKiAgUmVsZWFzZSB0aGUgYWNxdWlyZWQgc2VtYXBob3JlIGJlZm9yZSBleGl0aW5nLgorICoqLworczMyIGUxMDAwZV9yZWFkX3BoeV9yZWdfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMGVfcmVhZF9waHlfcmVnX2lncChodywgb2Zmc2V0LCBkYXRhLCBmYWxzZSk7Cit9CisKKy8qKgorICogIGUxMDAwZV9yZWFkX3BoeV9yZWdfaWdwX2xvY2tlZCAtIFJlYWQgaWdwIFBIWSByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKKyAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKgorICogIFJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0IGFuZCBzdG9yZXMgdGhlIHJldHJpZXZlZCBpbmZvcm1hdGlvbgorICogIGluIGRhdGEuICBBc3N1bWVzIHNlbWFwaG9yZSBhbHJlYWR5IGFjcXVpcmVkLgorICoqLworczMyIGUxMDAwZV9yZWFkX3BoeV9yZWdfaWdwX2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCit7CisJcmV0dXJuIF9fZTEwMDBlX3JlYWRfcGh5X3JlZ19pZ3AoaHcsIG9mZnNldCwgZGF0YSwgdHJ1ZSk7Cit9CisKKy8qKgorICogIGUxMDAwZV93cml0ZV9waHlfcmVnX2lncCAtIFdyaXRlIGlncCBQSFkgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byB3cml0ZSB0bworICogIEBkYXRhOiBkYXRhIHRvIHdyaXRlIGF0IHJlZ2lzdGVyIG9mZnNldAorICogIEBsb2NrZWQ6IHNlbWFwaG9yZSBoYXMgYWxyZWFkeSBiZWVuIGFjcXVpcmVkIG9yIG5vdAorICoKKyAqICBBY3F1aXJlcyBzZW1hcGhvcmUsIGlmIG5lY2Vzc2FyeSwgdGhlbiB3cml0ZXMgdGhlIGRhdGEgdG8gUEhZIHJlZ2lzdGVyCisgKiAgYXQgdGhlIG9mZnNldC4gIFJlbGVhc2UgYW55IGFjcXVpcmVkIHNlbWFwaG9yZXMgYmVmb3JlIGV4aXRpbmcuCisgKiovCitzdGF0aWMgczMyIF9fZTEwMDBlX3dyaXRlX3BoeV9yZWdfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbG9ja2VkKQoreworCXMzMiByZXRfdmFsID0gMDsKKworCWlmICghbG9ja2VkKSB7CisJCWlmICghKGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KSkKKwkJCWdvdG8gb3V0OworCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKG9mZnNldCA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHsKKwkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsCisJCQkJCQkgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCisJCQkJCQkgICAgKHUxNilvZmZzZXQpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gcmVsZWFzZTsKKwl9CisKKwlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKKwkJCQkJICAgIGRhdGEpOworCityZWxlYXNlOgorCWlmICghbG9ja2VkKQorCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CisKK291dDoKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtMzk1LDUzICs0ODMsNTMgQEAKICAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gd3JpdGUgdG8KICAqICBAZGF0YTogZGF0YSB0byB3cml0ZSBhdCByZWdpc3RlciBvZmZzZXQKICAqCi0gKiAgQWNxdWlyZXMgc2VtYXBob3JlLCBpZiBuZWNlc3NhcnksIHRoZW4gd3JpdGVzIHRoZSBkYXRhIHRvIFBIWSByZWdpc3RlcgorICogIEFjcXVpcmVzIHNlbWFwaG9yZSB0aGVuIHdyaXRlcyB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIKICAqICBhdCB0aGUgb2Zmc2V0LiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQgc2VtYXBob3JlcyBiZWZvcmUgZXhpdGluZy4KICAqKi8KIHMzMiBlMTAwMGVfd3JpdGVfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpCiB7Ci0JczMyIHJldF92YWw7Ci0KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQotCWlmIChvZmZzZXQgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7Ci0JCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAotCQkJCQkJICAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAotCQkJCQkJICAgICh1MTYpb2Zmc2V0KTsKLQkJaWYgKHJldF92YWwpIHsKLQkJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQkJCXJldHVybiByZXRfdmFsOwotCQl9Ci0JfQotCi0JcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCi0JCQkJCSAgICBkYXRhKTsKLQotCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQotCXJldHVybiByZXRfdmFsOworCXJldHVybiBfX2UxMDAwZV93cml0ZV9waHlfcmVnX2lncChodywgb2Zmc2V0LCBkYXRhLCBmYWxzZSk7CiB9CiAKIC8qKgotICogIGUxMDAwZV9yZWFkX2ttcm5fcmVnIC0gUmVhZCBrdW1lcmFuIHJlZ2lzdGVyCisgKiAgZTEwMDBlX3dyaXRlX3BoeV9yZWdfaWdwX2xvY2tlZCAtIFdyaXRlIGlncCBQSFkgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byB3cml0ZSB0bworICogIEBkYXRhOiBkYXRhIHRvIHdyaXRlIGF0IHJlZ2lzdGVyIG9mZnNldAorICoKKyAqICBXcml0ZXMgdGhlIGRhdGEgdG8gUEhZIHJlZ2lzdGVyIGF0IHRoZSBvZmZzZXQuCisgKiAgQXNzdW1lcyBzZW1hcGhvcmUgYWxyZWFkeSBhY3F1aXJlZC4KKyAqKi8KK3MzMiBlMTAwMGVfd3JpdGVfcGh5X3JlZ19pZ3BfbG9ja2VkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQoreworCXJldHVybiBfX2UxMDAwZV93cml0ZV9waHlfcmVnX2lncChodywgb2Zmc2V0LCBkYXRhLCB0cnVlKTsKK30KKworLyoqCisgKiAgX19lMTAwMF9yZWFkX2ttcm5fcmVnIC0gUmVhZCBrdW1lcmFuIHJlZ2lzdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gYmUgcmVhZAogICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKKyAqICBAbG9ja2VkOiBzZW1hcGhvcmUgaGFzIGFscmVhZHkgYmVlbiBhY3F1aXJlZCBvciBub3QKICAqCiAgKiAgQWNxdWlyZXMgc2VtYXBob3JlLCBpZiBuZWNlc3NhcnkuICBUaGVuIHJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0CiAgKiAgdXNpbmcgdGhlIGt1bWVyYW4gaW50ZXJmYWNlLiAgVGhlIGluZm9ybWF0aW9uIHJldHJpZXZlZCBpcyBzdG9yZWQgaW4gZGF0YS4KICAqICBSZWxlYXNlIGFueSBhY3F1aXJlZCBzZW1hcGhvcmVzIGJlZm9yZSBleGl0aW5nLgogICoqLwotczMyIGUxMDAwZV9yZWFkX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKK3N0YXRpYyBzMzIgX19lMTAwMF9yZWFkX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbG9ja2VkKQogewogCXUzMiBrbXJuY3RybHN0YTsKLQlzMzIgcmV0X3ZhbDsKKwlzMzIgcmV0X3ZhbCA9IDA7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKKwlpZiAoIWxvY2tlZCkgeworCQlpZiAoIShody0+cGh5Lm9wcy5hY3F1aXJlX3BoeSkpCisJCQlnb3RvIG91dDsKKworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCX0KIAogCWttcm5jdHJsc3RhID0gKChvZmZzZXQgPDwgRTEwMDBfS01STkNUUkxTVEFfT0ZGU0VUX1NISUZUKSAmCiAJCSAgICAgICBFMTAwMF9LTVJOQ1RSTFNUQV9PRkZTRVQpIHwgRTEwMDBfS01STkNUUkxTVEFfUkVOOwpAQCAtNDUyLDQxICs1NDAsMTExIEBACiAJa21ybmN0cmxzdGEgPSBlcjMyKEtNUk5DVFJMU1RBKTsKIAkqZGF0YSA9ICh1MTYpa21ybmN0cmxzdGE7CiAKLQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CisJaWYgKCFsb2NrZWQpCisJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKIAorb3V0OgogCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKLSAqICBlMTAwMGVfd3JpdGVfa21ybl9yZWcgLSBXcml0ZSBrdW1lcmFuIHJlZ2lzdGVyCisgKiAgZTEwMDBlX3JlYWRfa21ybl9yZWcgLSAgUmVhZCBrdW1lcmFuIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gYmUgcmVhZAorICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKKyAqCisgKiAgQWNxdWlyZXMgc2VtYXBob3JlIHRoZW4gcmVhZHMgdGhlIFBIWSByZWdpc3RlciBhdCBvZmZzZXQgdXNpbmcgdGhlCisgKiAga3VtZXJhbiBpbnRlcmZhY2UuICBUaGUgaW5mb3JtYXRpb24gcmV0cmlldmVkIGlzIHN0b3JlZCBpbiBkYXRhLgorICogIFJlbGVhc2UgdGhlIGFjcXVpcmVkIHNlbWFwaG9yZSBiZWZvcmUgZXhpdGluZy4KKyAqKi8KK3MzMiBlMTAwMGVfcmVhZF9rbXJuX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCit7CisJcmV0dXJuIF9fZTEwMDBfcmVhZF9rbXJuX3JlZyhodywgb2Zmc2V0LCBkYXRhLCBmYWxzZSk7Cit9CisKKy8qKgorICogIGUxMDAwX3JlYWRfa21ybl9yZWdfbG9ja2VkIC0gIFJlYWQga3VtZXJhbiByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKKyAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKgorICogIFJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0IHVzaW5nIHRoZSBrdW1lcmFuIGludGVyZmFjZS4gIFRoZQorICogIGluZm9ybWF0aW9uIHJldHJpZXZlZCBpcyBzdG9yZWQgaW4gZGF0YS4KKyAqICBBc3N1bWVzIHNlbWFwaG9yZSBhbHJlYWR5IGFjcXVpcmVkLgorICoqLworczMyIGUxMDAwX3JlYWRfa21ybl9yZWdfbG9ja2VkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMF9yZWFkX2ttcm5fcmVnKGh3LCBvZmZzZXQsIGRhdGEsIHRydWUpOworfQorCisvKioKKyAqICBfX2UxMDAwX3dyaXRlX2ttcm5fcmVnIC0gV3JpdGUga3VtZXJhbiByZWdpc3RlcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CisgKiAgQGxvY2tlZDogc2VtYXBob3JlIGhhcyBhbHJlYWR5IGJlZW4gYWNxdWlyZWQgb3Igbm90CiAgKgogICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LiAgVGhlbiB3cml0ZSB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIKICAqICBhdCB0aGUgb2Zmc2V0IHVzaW5nIHRoZSBrdW1lcmFuIGludGVyZmFjZS4gIFJlbGVhc2UgYW55IGFjcXVpcmVkIHNlbWFwaG9yZXMKICAqICBiZWZvcmUgZXhpdGluZy4KICAqKi8KLXMzMiBlMTAwMGVfd3JpdGVfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpCitzdGF0aWMgczMyIF9fZTEwMDBfd3JpdGVfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsb2NrZWQpCiB7CiAJdTMyIGttcm5jdHJsc3RhOwotCXMzMiByZXRfdmFsOworCXMzMiByZXRfdmFsID0gMDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOworCWlmICghbG9ja2VkKSB7CisJCWlmICghKGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KSkKKwkJCWdvdG8gb3V0OworCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJfQogCiAJa21ybmN0cmxzdGEgPSAoKG9mZnNldCA8PCBFMTAwMF9LTVJOQ1RSTFNUQV9PRkZTRVRfU0hJRlQpICYKIAkJICAgICAgIEUxMDAwX0tNUk5DVFJMU1RBX09GRlNFVCkgfCBkYXRhOwogCWV3MzIoS01STkNUUkxTVEEsIGttcm5jdHJsc3RhKTsKIAogCXVkZWxheSgyKTsKLQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CiAKKwlpZiAoIWxvY2tlZCkKKwkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworCitvdXQ6CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qKgorICogIGUxMDAwZV93cml0ZV9rbXJuX3JlZyAtICBXcml0ZSBrdW1lcmFuIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gd3JpdGUgdG8KKyAqICBAZGF0YTogZGF0YSB0byB3cml0ZSBhdCByZWdpc3RlciBvZmZzZXQKKyAqCisgKiAgQWNxdWlyZXMgc2VtYXBob3JlIHRoZW4gd3JpdGVzIHRoZSBkYXRhIHRvIHRoZSBQSFkgcmVnaXN0ZXIgYXQgdGhlIG9mZnNldAorICogIHVzaW5nIHRoZSBrdW1lcmFuIGludGVyZmFjZS4gIFJlbGVhc2UgdGhlIGFjcXVpcmVkIHNlbWFwaG9yZSBiZWZvcmUgZXhpdGluZy4KKyAqKi8KK3MzMiBlMTAwMGVfd3JpdGVfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpCit7CisJcmV0dXJuIF9fZTEwMDBfd3JpdGVfa21ybl9yZWcoaHcsIG9mZnNldCwgZGF0YSwgZmFsc2UpOworfQorCisvKioKKyAqICBlMTAwMF93cml0ZV9rbXJuX3JlZ19sb2NrZWQgLSAgV3JpdGUga3VtZXJhbiByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CisgKgorICogIFdyaXRlIHRoZSBkYXRhIHRvIFBIWSByZWdpc3RlciBhdCB0aGUgb2Zmc2V0IHVzaW5nIHRoZSBrdW1lcmFuIGludGVyZmFjZS4KKyAqICBBc3N1bWVzIHNlbWFwaG9yZSBhbHJlYWR5IGFjcXVpcmVkLgorICoqLworczMyIGUxMDAwX3dyaXRlX2ttcm5fcmVnX2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMF93cml0ZV9rbXJuX3JlZyhodywgb2Zmc2V0LCBkYXRhLCB0cnVlKTsKK30KKworLyoqCiAgKiAgZTEwMDBfY29wcGVyX2xpbmtfc2V0dXBfODI1NzcgLSBTZXR1cCA4MjU3NyBQSFkgZm9yIGNvcHBlciBsaW5rCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCkBAIC0yMTA1LDYgKzIyNjMsMTAgQEAKIAl1MzIgcGFnZSA9IG9mZnNldCA+PiBJR1BfUEFHRV9TSElGVDsKIAl1MzIgcGFnZV9zaGlmdCA9IDA7CiAKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwogCS8qIFBhZ2UgODAwIHdvcmtzIGRpZmZlcmVudGx5IHRoYW4gdGhlIHJlc3Qgc28gaXQgaGFzIGl0cyBvd24gZnVuYyAqLwogCWlmIChwYWdlID09IEJNX1dVQ19QQUdFKSB7CiAJCXJldF92YWwgPSBlMTAwMF9hY2Nlc3NfcGh5X3dha2V1cF9yZWdfYm0oaHcsIG9mZnNldCwgJmRhdGEsCkBAIC0yMTEyLDEwICsyMjc0LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7Ci0KIAlody0+cGh5LmFkZHIgPSBlMTAwMF9nZXRfcGh5X2FkZHJfZm9yX2JtX3BhZ2UocGFnZSwgb2Zmc2V0KTsKIAogCWlmIChvZmZzZXQgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7CkBAIC0yMTM1LDE4ICsyMjkzLDE1IEBACiAJCS8qIFBhZ2UgaXMgc2hpZnRlZCBsZWZ0LCBQSFkgZXhwZWN0cyAocGFnZSB4IDMyKSAqLwogCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgcGFnZV9zZWxlY3QsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlIDw8IHBhZ2Vfc2hpZnQpKTsKLQkJaWYgKHJldF92YWwpIHsKLQkJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKKwkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKLQkJfQogCX0KIAogCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgb2Zmc2V0LAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOwogCi0JaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCiBvdXQ6CisJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwogCXJldHVybiByZXRfdmFsOwogfQogCkBAIC0yMTY3LDYgKzIzMjIsMTAgQEAKIAl1MzIgcGFnZSA9IG9mZnNldCA+PiBJR1BfUEFHRV9TSElGVDsKIAl1MzIgcGFnZV9zaGlmdCA9IDA7CiAKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwogCS8qIFBhZ2UgODAwIHdvcmtzIGRpZmZlcmVudGx5IHRoYW4gdGhlIHJlc3Qgc28gaXQgaGFzIGl0cyBvd24gZnVuYyAqLwogCWlmIChwYWdlID09IEJNX1dVQ19QQUdFKSB7CiAJCXJldF92YWwgPSBlMTAwMF9hY2Nlc3NfcGh5X3dha2V1cF9yZWdfYm0oaHcsIG9mZnNldCwgZGF0YSwKQEAgLTIxNzQsMTAgKzIzMzMsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQogCWh3LT5waHkuYWRkciA9IGUxMDAwX2dldF9waHlfYWRkcl9mb3JfYm1fcGFnZShwYWdlLCBvZmZzZXQpOwogCiAJaWYgKG9mZnNldCA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHsKQEAgLTIxOTcsMTcgKzIzNTIsMTQgQEAKIAkJLyogUGFnZSBpcyBzaGlmdGVkIGxlZnQsIFBIWSBleHBlY3RzIChwYWdlIHggMzIpICovCiAJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBwYWdlX3NlbGVjdCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2UgPDwgcGFnZV9zaGlmdCkpOwotCQlpZiAocmV0X3ZhbCkgewotCQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwotCQl9CiAJfQogCiAJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOwotCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQogb3V0OgorCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtMjIyNiwxNyArMjM3OCwxNyBAQAogCXMzMiByZXRfdmFsOwogCXUxNiBwYWdlID0gKHUxNikob2Zmc2V0ID4+IElHUF9QQUdFX1NISUZUKTsKIAorCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJaWYgKHJldF92YWwpCisJCXJldHVybiByZXRfdmFsOworCiAJLyogUGFnZSA4MDAgd29ya3MgZGlmZmVyZW50bHkgdGhhbiB0aGUgcmVzdCBzbyBpdCBoYXMgaXRzIG93biBmdW5jICovCiAJaWYgKHBhZ2UgPT0gQk1fV1VDX1BBR0UpIHsKIAkJcmV0X3ZhbCA9IGUxMDAwX2FjY2Vzc19waHlfd2FrZXVwX3JlZ19ibShodywgb2Zmc2V0LCBkYXRhLAogCQkJCQkJCSB0cnVlKTsKLQkJcmV0dXJuIHJldF92YWw7CisJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOwotCiAJaHctPnBoeS5hZGRyID0gMTsKIAogCWlmIChvZmZzZXQgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7CkBAIC0yMjQ1LDE2ICsyMzk3LDE0IEBACiAJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBCTV9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJCQkgICAgcGFnZSk7CiAKLQkJaWYgKHJldF92YWwpIHsKLQkJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQkJCXJldHVybiByZXRfdmFsOwotCQl9CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CiAJfQogCiAJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKIAkJCQkJICAgZGF0YSk7CitvdXQ6CiAJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTIyNzIsMTcgKzI0MjIsMTcgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGFnZSA9ICh1MTYpKG9mZnNldCA+PiBJR1BfUEFHRV9TSElGVCk7CiAKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwogCS8qIFBhZ2UgODAwIHdvcmtzIGRpZmZlcmVudGx5IHRoYW4gdGhlIHJlc3Qgc28gaXQgaGFzIGl0cyBvd24gZnVuYyAqLwogCWlmIChwYWdlID09IEJNX1dVQ19QQUdFKSB7CiAJCXJldF92YWwgPSBlMTAwMF9hY2Nlc3NfcGh5X3dha2V1cF9yZWdfYm0oaHcsIG9mZnNldCwgJmRhdGEsCiAJCQkJCQkJIGZhbHNlKTsKLQkJcmV0dXJuIHJldF92YWw7CisJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0JaWYgKHJldF92YWwpCi0JCXJldHVybiByZXRfdmFsOwotCiAJaHctPnBoeS5hZGRyID0gMTsKIAogCWlmIChvZmZzZXQgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7CkBAIC0yMjkwLDE3ICsyNDQwLDE1IEBACiAJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LCBCTV9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJCQkgICAgcGFnZSk7CiAKLQkJaWYgKHJldF92YWwpIHsKLQkJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQkJCXJldHVybiByZXRfdmFsOwotCQl9CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CiAJfQogCiAJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCiAJCQkJCSAgICBkYXRhKTsKIAorb3V0OgogCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQogCXJldHVybiByZXRfdmFsOwogfQogCkBAIC0yMzIwLDYgKzI0NjgsOCBAQAogICogIDMpIFdyaXRlIHRoZSBhZGRyZXNzIHVzaW5nIHRoZSBhZGRyZXNzIG9wY29kZSAoMHgxMSkKICAqICA0KSBSZWFkIG9yIHdyaXRlIHRoZSBkYXRhIHVzaW5nIHRoZSBkYXRhIG9wY29kZSAoMHgxMikKICAqICA1KSBSZXN0b3JlIDc2OV8xNy4yIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZQorICoKKyAqICBBc3N1bWVzIHNlbWFwaG9yZSBhbHJlYWR5IGFjcXVpcmVkLgogICoqLwogc3RhdGljIHMzMiBlMTAwMF9hY2Nlc3NfcGh5X3dha2V1cF9yZWdfYm0oc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwKIAkJCQkJICB1MTYgKmRhdGEsIGJvb2wgcmVhZCkKQEAgLTIzMjcsMjAgKzI0NzcsMTIgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcmVnID0gQk1fUEhZX1JFR19OVU0ob2Zmc2V0KTsKIAl1MTYgcGh5X3JlZyA9IDA7Ci0JdTggIHBoeV9hY3F1aXJlZCA9IDE7Ci0KIAogCS8qIEdpZyBtdXN0IGJlIGRpc2FibGVkIGZvciBNRElPIGFjY2Vzc2VzIHRvIHBhZ2UgODAwICovCiAJaWYgKChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKSAmJgogCSAgICghKGVyMzIoUEhZX0NUUkwpICYgRTEwMDBfUEhZX0NUUkxfR0JFX0RJU0FCTEUpKSkKIAkJaHdfZGJnKGh3LCAiQXR0ZW1wdGluZyB0byBhY2Nlc3MgcGFnZSA4MDAgd2hpbGUgZ2lnIGVuYWJsZWRcbiIpOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkgewotCQlwaHlfYWNxdWlyZWQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KIAkvKiBBbGwgb3BlcmF0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uIGFyZSBwaHkgYWRkcmVzcyAxICovCiAJaHctPnBoeS5hZGRyID0gMTsKIApAQCAtMjM5Nyw4ICsyNTM5LDYgQEAKIAlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgQk1fV1VDX0VOQUJMRV9SRUcsIHBoeV9yZWcpOwogCiBvdXQ6Ci0JaWYgKHBoeV9hY3F1aXJlZCA9PSAxKQotCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTI0MzksNTIgKzI1NzksNjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiAgZTEwMDBfc2V0X21kaW9fc2xvd19tb2RlX2h2IC0gU2V0IHNsb3cgTURJTyBhY2Nlc3MgbW9kZQorICogIEBodzogICBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAc2xvdzogdHJ1ZSBmb3Igc2xvdyBtb2RlLCBmYWxzZSBmb3Igbm9ybWFsIG1vZGUKKyAqCisgKiAgQXNzdW1lcyBzZW1hcGhvcmUgYWxyZWFkeSBhY3F1aXJlZC4KKyAqKi8KIHMzMiBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBzbG93KQogewogCXMzMiByZXRfdmFsID0gMDsKIAl1MTYgZGF0YSA9IDA7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQogCS8qIFNldCBNRElPIG1vZGUgLSBwYWdlIDc2OSwgcmVnaXN0ZXIgMTY6IDB4MjU4MD09c2xvdywgMHgyMTgwPT1mYXN0ICovCiAJaHctPnBoeS5hZGRyID0gMTsKIAlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkJICAgICAgICAgKEJNX1BPUlRfQ1RSTF9QQUdFIDw8IElHUF9QQUdFX1NISUZUKSk7Ci0JaWYgKHJldF92YWwpIHsKLQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCQlyZXR1cm4gcmV0X3ZhbDsKLQl9CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCiAJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIEJNX0NTX0NUUkwxLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MjE4MCB8IChzbG93IDw8IDEwKSkpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKIAogCS8qIGR1bW15IHJlYWQgd2hlbiByZXZlcnRpbmcgdG8gZmFzdCBtb2RlIC0gdGhyb3cgYXdheSByZXN1bHQgKi8KIAlpZiAoIXNsb3cpCi0JCWUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgQk1fQ1NfQ1RSTDEsICZkYXRhKTsKKwkJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgQk1fQ1NfQ1RSTDEsICZkYXRhKTsKIAotCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQorb3V0OgogCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKLSAqICBlMTAwMF9yZWFkX3BoeV9yZWdfaHYgLSAgUmVhZCBIViBQSFkgcmVnaXN0ZXIKKyAqICBfX2UxMDAwX3JlYWRfcGh5X3JlZ19odiAtICBSZWFkIEhWIFBIWSByZWdpc3RlcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKICAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKiAgQGxvY2tlZDogc2VtYXBob3JlIGhhcyBhbHJlYWR5IGJlZW4gYWNxdWlyZWQgb3Igbm90CiAgKgogICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LCB0aGVuIHJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0Ci0gKiAgYW5kIHN0b3JpbmcgdGhlIHJldHJpZXZlZCBpbmZvcm1hdGlvbiBpbiBkYXRhLiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQKKyAqICBhbmQgc3RvcmVzIHRoZSByZXRyaWV2ZWQgaW5mb3JtYXRpb24gaW4gZGF0YS4gIFJlbGVhc2UgYW55IGFjcXVpcmVkCiAgKiAgc2VtYXBob3JlIGJlZm9yZSBleGl0aW5nLgogICoqLwotczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCitzdGF0aWMgczMyIF9fZTEwMDBfcmVhZF9waHlfcmVnX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsb2NrZWQpCiB7CiAJczMyIHJldF92YWw7CiAJdTE2IHBhZ2UgPSBCTV9QSFlfUkVHX1BBR0Uob2Zmc2V0KTsKIAl1MTYgcmVnID0gQk1fUEhZX1JFR19OVU0ob2Zmc2V0KTsKIAlib29sIGluX3Nsb3dfbW9kZSA9IGZhbHNlOwogCisJaWYgKCFsb2NrZWQpIHsKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKKwkJaWYgKHJldF92YWwpCisJCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisKIAkvKiBXb3JrYXJvdW5kIGZhaWx1cmUgaW4gTURJTyBhY2Nlc3Mgd2hpbGUgY2FibGUgaXMgZGlzY29ubmVjdGVkICovCiAJaWYgKChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5XzgyNTc3KSAmJgogCSAgICAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19MVSkpIHsKQEAgLTI1MDgsMTAgKzI2NTksNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQogCWh3LT5waHkuYWRkciA9IGUxMDAwX2dldF9waHlfYWRkcl9mb3JfaHZfcGFnZShwYWdlKTsKIAogCWlmIChwYWdlID09IEhWX0lOVENfRkNfUEFHRV9TVEFSVCkKQEAgLTI1MjksNDIgKzI2NzYsNzYgQEAKIAkJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKLQkJCWlmIChyZXRfdmFsKSB7Ci0JCQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwotCQkJCWdvdG8gb3V0OwotCQkJfQogCQkJaHctPnBoeS5hZGRyID0gcGh5X2FkZHI7CiAJCX0KIAl9CiAKIAlyZXRfdmFsID0gZTEwMDBlX3JlYWRfcGh5X3JlZ19tZGljKGh3LCBNQVhfUEhZX1JFR19BRERSRVNTICYgcmVnLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKLQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7Ci0KIG91dDoKIAkvKiBSZXZlcnQgdG8gTURJTyBmYXN0IG1vZGUsIGlmIGFwcGxpY2FibGUgKi8KIAlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpICYmIGluX3Nsb3dfbW9kZSkKIAkJcmV0X3ZhbCA9IGUxMDAwX3NldF9tZGlvX3Nsb3dfbW9kZV9odihodywgZmFsc2UpOwogCisJaWYgKCFsb2NrZWQpCisJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKKwogCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKLSAqICBlMTAwMF93cml0ZV9waHlfcmVnX2h2IC0gV3JpdGUgSFYgUEhZIHJlZ2lzdGVyCisgKiAgZTEwMDBfcmVhZF9waHlfcmVnX2h2IC0gIFJlYWQgSFYgUEhZIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gYmUgcmVhZAorICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKKyAqCisgKiAgQWNxdWlyZXMgc2VtYXBob3JlIHRoZW4gcmVhZHMgdGhlIFBIWSByZWdpc3RlciBhdCBvZmZzZXQgYW5kIHN0b3JlcworICogIHRoZSByZXRyaWV2ZWQgaW5mb3JtYXRpb24gaW4gZGF0YS4gIFJlbGVhc2UgdGhlIGFjcXVpcmVkIHNlbWFwaG9yZQorICogIGJlZm9yZSBleGl0aW5nLgorICoqLworczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCit7CisJcmV0dXJuIF9fZTEwMDBfcmVhZF9waHlfcmVnX2h2KGh3LCBvZmZzZXQsIGRhdGEsIGZhbHNlKTsKK30KKworLyoqCisgKiAgZTEwMDBfcmVhZF9waHlfcmVnX2h2X2xvY2tlZCAtICBSZWFkIEhWIFBIWSByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIGJlIHJlYWQKKyAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgcmVhZCBkYXRhCisgKgorICogIFJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0IGFuZCBzdG9yZXMgdGhlIHJldHJpZXZlZCBpbmZvcm1hdGlvbgorICogIGluIGRhdGEuICBBc3N1bWVzIHNlbWFwaG9yZSBhbHJlYWR5IGFjcXVpcmVkLgorICoqLworczMyIGUxMDAwX3JlYWRfcGh5X3JlZ19odl9sb2NrZWQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKQoreworCXJldHVybiBfX2UxMDAwX3JlYWRfcGh5X3JlZ19odihodywgb2Zmc2V0LCBkYXRhLCB0cnVlKTsKK30KKworLyoqCisgKiAgX19lMTAwMF93cml0ZV9waHlfcmVnX2h2IC0gV3JpdGUgSFYgUEhZIHJlZ2lzdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gd3JpdGUgdG8KICAqICBAZGF0YTogZGF0YSB0byB3cml0ZSBhdCByZWdpc3RlciBvZmZzZXQKKyAqICBAbG9ja2VkOiBzZW1hcGhvcmUgaGFzIGFscmVhZHkgYmVlbiBhY3F1aXJlZCBvciBub3QKICAqCiAgKiAgQWNxdWlyZXMgc2VtYXBob3JlLCBpZiBuZWNlc3NhcnksIHRoZW4gd3JpdGVzIHRoZSBkYXRhIHRvIFBIWSByZWdpc3RlcgogICogIGF0IHRoZSBvZmZzZXQuICBSZWxlYXNlIGFueSBhY3F1aXJlZCBzZW1hcGhvcmVzIGJlZm9yZSBleGl0aW5nLgogICoqLwotczMyIGUxMDAwX3dyaXRlX3BoeV9yZWdfaHYoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2IGRhdGEpCitzdGF0aWMgczMyIF9fZTEwMDBfd3JpdGVfcGh5X3JlZ19odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbG9ja2VkKQogewogCXMzMiByZXRfdmFsOwogCXUxNiBwYWdlID0gQk1fUEhZX1JFR19QQUdFKG9mZnNldCk7CiAJdTE2IHJlZyA9IEJNX1BIWV9SRUdfTlVNKG9mZnNldCk7CiAJYm9vbCBpbl9zbG93X21vZGUgPSBmYWxzZTsKIAorCWlmICghbG9ja2VkKSB7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7CisJCWlmIChyZXRfdmFsKQorCQkJcmV0dXJuIHJldF92YWw7CisJfQorCiAJLyogV29ya2Fyb3VuZCBmYWlsdXJlIGluIE1ESU8gYWNjZXNzIHdoaWxlIGNhYmxlIGlzIGRpc2Nvbm5lY3RlZCAqLwogCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3NykgJiYKIAkgICAgIShlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpKSB7CkBAIC0yNTg4LDEwICsyNzY5LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7Ci0KIAlody0+cGh5LmFkZHIgPSBlMTAwMF9nZXRfcGh5X2FkZHJfZm9yX2h2X3BhZ2UocGFnZSk7CiAKIAlpZiAocGFnZSA9PSBIVl9JTlRDX0ZDX1BBR0VfU1RBUlQpCkBAIC0yNjA3LDE1ICsyNzg0LDEwIEBACiAJICAgICgoTUFYX1BIWV9SRUdfQUREUkVTUyAmIHJlZykgPT0gMCkgJiYKIAkgICAgKGRhdGEgJiAoMSA8PCAxMSkpKSB7CiAJCXUxNiBkYXRhMiA9IDB4N0VGRjsKLQkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOwogCQlyZXRfdmFsID0gZTEwMDBfYWNjZXNzX3BoeV9kZWJ1Z19yZWdzX2h2KGh3LCAoMSA8PCA2KSB8IDB4MywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YTIsIGZhbHNlKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKLQotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOwotCQlpZiAocmV0X3ZhbCkKLQkJCWdvdG8gb3V0OwogCX0KIAogCWlmIChyZWcgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7CkBAIC0yNjMwLDI3ICsyODAyLDUzIEBACiAJCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlIDw8IElHUF9QQUdFX1NISUZUKSk7Ci0JCQlpZiAocmV0X3ZhbCkgewotCQkJCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KIAkJCWh3LT5waHkuYWRkciA9IHBoeV9hZGRyOwogCQl9CiAJfQogCiAJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiByZWcsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOwotCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKIAogb3V0OgogCS8qIFJldmVydCB0byBNRElPIGZhc3QgbW9kZSwgaWYgYXBwbGljYWJsZSAqLwogCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3NykgJiYgaW5fc2xvd19tb2RlKQogCQlyZXRfdmFsID0gZTEwMDBfc2V0X21kaW9fc2xvd19tb2RlX2h2KGh3LCBmYWxzZSk7CiAKKwlpZiAoIWxvY2tlZCkKKwkJaHctPnBoeS5vcHMucmVsZWFzZV9waHkoaHcpOworCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qKgorICogIGUxMDAwX3dyaXRlX3BoeV9yZWdfaHYgLSBXcml0ZSBIViBQSFkgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IHJlZ2lzdGVyIG9mZnNldCB0byB3cml0ZSB0bworICogIEBkYXRhOiBkYXRhIHRvIHdyaXRlIGF0IHJlZ2lzdGVyIG9mZnNldAorICoKKyAqICBBY3F1aXJlcyBzZW1hcGhvcmUgdGhlbiB3cml0ZXMgdGhlIGRhdGEgdG8gUEhZIHJlZ2lzdGVyIGF0IHRoZSBvZmZzZXQuCisgKiAgUmVsZWFzZSB0aGUgYWNxdWlyZWQgc2VtYXBob3JlcyBiZWZvcmUgZXhpdGluZy4KKyAqKi8KK3MzMiBlMTAwMF93cml0ZV9waHlfcmVnX2h2KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQoreworCXJldHVybiBfX2UxMDAwX3dyaXRlX3BoeV9yZWdfaHYoaHcsIG9mZnNldCwgZGF0YSwgZmFsc2UpOworfQorCisvKioKKyAqICBlMTAwMF93cml0ZV9waHlfcmVnX2h2X2xvY2tlZCAtIFdyaXRlIEhWIFBIWSByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CisgKgorICogIFdyaXRlcyB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIgYXQgdGhlIG9mZnNldC4gIEFzc3VtZXMgc2VtYXBob3JlCisgKiAgYWxyZWFkeSBhY3F1aXJlZC4KKyAqKi8KK3MzMiBlMTAwMF93cml0ZV9waHlfcmVnX2h2X2xvY2tlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKK3sKKwlyZXR1cm4gX19lMTAwMF93cml0ZV9waHlfcmVnX2h2KGh3LCBvZmZzZXQsIGRhdGEsIHRydWUpOworfQorCisvKioKICAqICBlMTAwMF9nZXRfcGh5X2FkZHJfZm9yX2h2X3BhZ2UgLSBHZXQgUEhZIGFkcnJlc3MgYmFzZWQgb24gcGFnZQogICogIEBwYWdlOiBwYWdlIHRvIGJlIGFjY2Vzc2VkCiAgKiovCkBAIC0yNjcxLDEwICsyODY5LDkgQEAKICAqICBAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSByZWFkIG9yIHdyaXR0ZW4KICAqICBAcmVhZDogZGV0ZXJtaW5lcyBpZiBvcGVyYXRpb24gaXMgcmVhZCBvciB3cml0dGVuCiAgKgotICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNzYXJ5LCB0aGVuIHJlYWRzIHRoZSBQSFkgcmVnaXN0ZXIgYXQgb2Zmc2V0Ci0gKiAgYW5kIHN0b3JpbmcgdGhlIHJldHJlaXZlZCBpbmZvcm1hdGlvbiBpbiBkYXRhLiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQKLSAqICBzZW1hcGhvcmVzIGJlZm9yZSBleGl0aW5nLiAgTm90ZSB0aGF0IHRoZSBwcm9jZWR1cmUgdG8gcmVhZCB0aGVzZSByZWdzCi0gKiAgdXNlcyB0aGUgYWRkcmVzcyBwb3J0IGFuZCBkYXRhIHBvcnQgdG8gcmVhZC93cml0ZS4KKyAqICBSZWFkcyB0aGUgUEhZIHJlZ2lzdGVyIGF0IG9mZnNldCBhbmQgc3RvcmVzIHRoZSByZXRyZWl2ZWQgaW5mb3JtYXRpb24KKyAqICBpbiBkYXRhLiAgQXNzdW1lcyBzZW1hcGhvcmUgYWxyZWFkeSBhY3F1aXJlZC4gIE5vdGUgdGhhdCB0aGUgcHJvY2VkdXJlCisgKiAgdG8gcmVhZCB0aGVzZSByZWdzIHVzZXMgdGhlIGFkZHJlc3MgcG9ydCBhbmQgZGF0YSBwb3J0IHRvIHJlYWQvd3JpdGUuCiAgKiovCiBzdGF0aWMgczMyIGUxMDAwX2FjY2Vzc19waHlfZGVidWdfcmVnc19odihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpkYXRhLCBib29sIHJlYWQpCkBAIC0yNjgyLDIwICsyODc5LDEyIEBACiAJczMyIHJldF92YWw7CiAJdTMyIGFkZHJfcmVnID0gMDsKIAl1MzIgZGF0YV9yZWcgPSAwOwotCXU4ICBwaHlfYWNxdWlyZWQgPSAxOwogCiAJLyogVGhpcyB0YWtlcyBjYXJlIG9mIHRoZSBkaWZmZXJlbmNlIHdpdGggZGVza3RvcCB2cyBtb2JpbGUgcGh5ICovCiAJYWRkcl9yZWcgPSAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgPwogCSAgICAgICAgICAgSTgyNTc4X0FERFJfUkVHIDogSTgyNTc3X0FERFJfUkVHOwogCWRhdGFfcmVnID0gYWRkcl9yZWcgKyAxOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KGh3KTsKLQlpZiAocmV0X3ZhbCkgewotCQlod19kYmcoaHcsICJDb3VsZCBub3QgYWNxdWlyZSBQSFlcbiIpOwotCQlwaHlfYWNxdWlyZWQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KIAkvKiBBbGwgb3BlcmF0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uIGFyZSBwaHkgYWRkcmVzcyAyICovCiAJaHctPnBoeS5hZGRyID0gMjsKIApAQCAtMjcxOCw4ICsyOTA3LDYgQEAKIAl9CiAKIG91dDoKLQlpZiAocGh5X2FjcXVpcmVkID09IDEpCi0JCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRob2MuYyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKaW5kZXggOTZmNWIyYS4uZjdkOWFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRob2MuYworKysgYi9kcml2ZXJzL25ldC9ldGhvYy5jCkBAIC0yMjMsMjQgKzIyMywyNSBAQAogCXUzMiBhZGRyOwogfTsKIAotc3RhdGljIHUzMiBldGhvY19yZWFkKHN0cnVjdCBldGhvYyAqZGV2LCBsb2ZmX3Qgb2Zmc2V0KQorc3RhdGljIGlubGluZSB1MzIgZXRob2NfcmVhZChzdHJ1Y3QgZXRob2MgKmRldiwgbG9mZl90IG9mZnNldCkKIHsKIAlyZXR1cm4gaW9yZWFkMzIoZGV2LT5pb2Jhc2UgKyBvZmZzZXQpOwogfQogCi1zdGF0aWMgdm9pZCBldGhvY193cml0ZShzdHJ1Y3QgZXRob2MgKmRldiwgbG9mZl90IG9mZnNldCwgdTMyIGRhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2Nfd3JpdGUoc3RydWN0IGV0aG9jICpkZXYsIGxvZmZfdCBvZmZzZXQsIHUzMiBkYXRhKQogewogCWlvd3JpdGUzMihkYXRhLCBkZXYtPmlvYmFzZSArIG9mZnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX3JlYWRfYmQoc3RydWN0IGV0aG9jICpkZXYsIGludCBpbmRleCwgc3RydWN0IGV0aG9jX2JkICpiZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBldGhvY19yZWFkX2JkKHN0cnVjdCBldGhvYyAqZGV2LCBpbnQgaW5kZXgsCisJCXN0cnVjdCBldGhvY19iZCAqYmQpCiB7CiAJbG9mZl90IG9mZnNldCA9IEVUSE9DX0JEX0JBU0UgKyAoaW5kZXggKiBzaXplb2Yoc3RydWN0IGV0aG9jX2JkKSk7CiAJYmQtPnN0YXQgPSBldGhvY19yZWFkKGRldiwgb2Zmc2V0ICsgMCk7CiAJYmQtPmFkZHIgPSBldGhvY19yZWFkKGRldiwgb2Zmc2V0ICsgNCk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX3dyaXRlX2JkKHN0cnVjdCBldGhvYyAqZGV2LCBpbnQgaW5kZXgsCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2Nfd3JpdGVfYmQoc3RydWN0IGV0aG9jICpkZXYsIGludCBpbmRleCwKIAkJY29uc3Qgc3RydWN0IGV0aG9jX2JkICpiZCkKIHsKIAlsb2ZmX3Qgb2Zmc2V0ID0gRVRIT0NfQkRfQkFTRSArIChpbmRleCAqIHNpemVvZihzdHJ1Y3QgZXRob2NfYmQpKTsKQEAgLTI0OCwzMyArMjQ5LDMzIEBACiAJZXRob2Nfd3JpdGUoZGV2LCBvZmZzZXQgKyA0LCBiZC0+YWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2VuYWJsZV9pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQorc3RhdGljIGlubGluZSB2b2lkIGV0aG9jX2VuYWJsZV9pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQogewogCXUzMiBpbWFzayA9IGV0aG9jX3JlYWQoZGV2LCBJTlRfTUFTSyk7CiAJaW1hc2sgfD0gbWFzazsKIAlldGhvY193cml0ZShkZXYsIElOVF9NQVNLLCBpbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2Rpc2FibGVfaXJxKHN0cnVjdCBldGhvYyAqZGV2LCB1MzIgbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBldGhvY19kaXNhYmxlX2lycShzdHJ1Y3QgZXRob2MgKmRldiwgdTMyIG1hc2spCiB7CiAJdTMyIGltYXNrID0gZXRob2NfcmVhZChkZXYsIElOVF9NQVNLKTsKIAlpbWFzayAmPSB+bWFzazsKIAlldGhvY193cml0ZShkZXYsIElOVF9NQVNLLCBpbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2Fja19pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQorc3RhdGljIGlubGluZSB2b2lkIGV0aG9jX2Fja19pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQogewogCWV0aG9jX3dyaXRlKGRldiwgSU5UX1NPVVJDRSwgbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGV0aG9jX2VuYWJsZV9yeF9hbmRfdHgoc3RydWN0IGV0aG9jICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2NfZW5hYmxlX3J4X2FuZF90eChzdHJ1Y3QgZXRob2MgKmRldikKIHsKIAl1MzIgbW9kZSA9IGV0aG9jX3JlYWQoZGV2LCBNT0RFUik7CiAJbW9kZSB8PSBNT0RFUl9SWEVOIHwgTU9ERVJfVFhFTjsKIAlldGhvY193cml0ZShkZXYsIE1PREVSLCBtb2RlKTsKIH0KIAotc3RhdGljIHZvaWQgZXRob2NfZGlzYWJsZV9yeF9hbmRfdHgoc3RydWN0IGV0aG9jICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZXRob2NfZGlzYWJsZV9yeF9hbmRfdHgoc3RydWN0IGV0aG9jICpkZXYpCiB7CiAJdTMyIG1vZGUgPSBldGhvY19yZWFkKGRldiwgTU9ERVIpOwogCW1vZGUgJj0gfihNT0RFUl9SWEVOIHwgTU9ERVJfVFhFTik7CkBAIC01MDgsNyArNTA5LDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCWV0aG9jX2Fja19pcnEocHJpdiwgSU5UX01BU0tfQUxMKTsKKwlldGhvY19hY2tfaXJxKHByaXYsIHBlbmRpbmcpOwogCiAJaWYgKHBlbmRpbmcgJiBJTlRfTUFTS19CVVNZKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAicGFja2V0IGRyb3BwZWRcbiIpOwpAQCAtNjY0LDcgKzY2NSw4IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBUWC9SWCBidWZmZXJzLCBtYXhpbXVtIDEyOCBzdXBwb3J0ZWQgKi8KLQludW1fYmQgPSBtaW4oMTI4LCAoZGV2LT5tZW1fZW5kIC0gZGV2LT5tZW1fc3RhcnQgKyAxKSAvIEVUSE9DX0JVRlNJWik7CisJbnVtX2JkID0gbWluX3QodW5zaWduZWQgaW50LAorCQkxMjgsIChkZXYtPm1lbV9lbmQgLSBkZXYtPm1lbV9zdGFydCArIDEpIC8gRVRIT0NfQlVGU0laKTsKIAlwcml2LT5udW1fdHggPSBtYXgobWluX3R4LCBudW1fYmQgLyA0KTsKIAlwcml2LT5udW1fcnggPSBudW1fYmQgLSBwcml2LT5udW1fdHg7CiAJZXRob2Nfd3JpdGUocHJpdiwgVFhfQkRfTlVNLCBwcml2LT5udW1fdHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjLmMgYi9kcml2ZXJzL25ldC9mZWMuYwppbmRleCAyOTIzNDM4Li4xNmExZDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWMuYworKysgYi9kcml2ZXJzL25ldC9mZWMuYwpAQCAtMTY1NCw3ICsxNjU0LDcgQEAKICAgKgogICAqIGluZGV4IGlzIG9ubHkgdXNlZCBpbiBsZWdhY3kgY29kZQogICAqLwotaW50IF9faW5pdCBmZWNfZW5ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmRleCkKK3N0YXRpYyBpbnQgZmVjX2VuZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGJ1ZmRlc2MgKmNiZF9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKaW5kZXggYzQwMTEzZi4uNjZkYWNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYworKysgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCkBAIC03NTksMTIgKzc1OSw2IEBACiAKIAltcGM1Mnh4X2ZlY19od19pbml0KGRldik7CiAKLQlpZiAocHJpdi0+cGh5ZGV2KSB7Ci0JCXBoeV9zdG9wKHByaXYtPnBoeWRldik7Ci0JCXBoeV93cml0ZShwcml2LT5waHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKLQkJcGh5X3N0YXJ0KHByaXYtPnBoeWRldik7Ci0JfQotCiAJYmNvbV9mZWNfcnhfcmVzZXQocHJpdi0+cnhfZG1hdHNrKTsKIAliY29tX2ZlY190eF9yZXNldChwcml2LT50eF9kbWF0c2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eF9waHkuYyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4X3BoeS5jCmluZGV4IDMxZTZkNjIuLmVlMGYzYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4X3BoeS5jCkBAIC0xNTUsNiArMTU1LDcgQEAKIAl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDBiLWZlYy1waHkiLCB9LAogCXt9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXBjNTJ4eF9mZWNfbWRpb19tYXRjaCk7CiAKIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgbXBjNTJ4eF9mZWNfbWRpb19kcml2ZXIgPSB7CiAJLm5hbWUgPSAibXBjNTIwMGItZmVjLXBoeSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwppbmRleCAyYmMyZDJiLi5lYzJmNTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKQEAgLTExMTAsNiArMTExMCw3IEBACiAjZW5kaWYKIAl7fQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZzX2VuZXRfbWF0Y2gpOwogCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBmc19lbmV0X2RyaXZlciA9IHsKIAkubmFtZQk9ICJmc19lbmV0IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWJpdGJhbmcuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWJpdGJhbmcuYwppbmRleCA5M2I0ODFiLi4yNGZmOWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1iaXRiYW5nLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktYml0YmFuZy5jCkBAIC0yMjEsNiArMjIxLDcgQEAKIAl9LAogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZzX2VuZXRfbWRpb19iYl9tYXRjaCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGZzX2VuZXRfYmJfbWRpb19kcml2ZXIgPSB7CiAJLm5hbWUgPSAiZnNsLWJiLW1kaW8iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwppbmRleCBhMmQ2OWMxLi45NmViYTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwpAQCAtMjE5LDYgKzIxOSw3IEBACiAjZW5kaWYKIAl7fSwKIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmc19lbmV0X21kaW9fZmVjX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZnNfZW5ldF9mZWNfbWRpb19kcml2ZXIgPSB7CiAJLm5hbWUgPSAiZnNsLWZlYy1tZGlvIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMgYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jCmluZGV4IGQxNjcwOTAuLjZhYzQ2NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYwpAQCAtNDA3LDYgKzQwNyw3IEBACiAJfSwKIAl7fSwKIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmc2xfcHFfbWRpb19tYXRjaCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGZzbF9wcV9tZGlvX2RyaXZlciA9IHsKIAkubmFtZSA9ICJmc2wtcHFfbWRpbyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggMWU1Mjg5Zi4uNWJmMzFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtMjMyNSw5ICsyMzI1LDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLS8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpmc2wtZ2lhbmZhciIpOwotCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBnZmFyX21hdGNoW10gPQogewogCXsKQEAgLTIzMzYsNiArMjMzMyw3IEBACiAJfSwKIAl7fSwKIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBnZmFyX21hdGNoKTsKIAogLyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi8KIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGdmYXJfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCmluZGV4IDg5YzgyYzUuLjNmYWU4NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTQ0Myw3ICs0NDQsNyBAQAogCQlyZXQgfD0gRU1BQ19NUjFfVEZTXzJLOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBSeCBGSUZPIHNpemUgJWRcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIFR4IEZJRk8gc2l6ZSAlZFxuIiwKIAkJICAgICAgIGRldi0+bmRldi0+bmFtZSwgdHhfc2l6ZSk7CiAJfQogCkBAIC00NzAsNiArNDcxLDkgQEAKIAlEQkcyKGRldiwgIl9fZW1hYzRfY2FsY19iYXNlX21yMSIgTkwpOwogCiAJc3dpdGNoKHR4X3NpemUpIHsKKwljYXNlIDE2Mzg0OgorCQlyZXQgfD0gRU1BQzRfTVIxX1RGU18xNks7CisJCWJyZWFrOwogCWNhc2UgNDA5NjoKIAkJcmV0IHw9IEVNQUM0X01SMV9URlNfNEs7CiAJCWJyZWFrOwpAQCAtNDc3LDcgKzQ4MSw3IEBACiAJCXJldCB8PSBFTUFDNF9NUjFfVEZTXzJLOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBSeCBGSUZPIHNpemUgJWRcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIFR4IEZJRk8gc2l6ZSAlZFxuIiwKIAkJICAgICAgIGRldi0+bmRldi0+bmFtZSwgdHhfc2l6ZSk7CiAJfQogCkBAIC0yOTg1LDYgKzI5ODksNyBAQAogCX0sCiAJe30sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZW1hY19tYXRjaCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGVtYWNfZHJpdmVyID0gewogCS5uYW1lID0gImVtYWMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvZW1hYy5oIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvZW1hYy5oCmluZGV4IDBhZmMyY2YuLmQzNGFkZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2VtYWMuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9lbWFjLmgKQEAgLTE1Myw2ICsxNTMsNyBAQAogI2RlZmluZSBFTUFDNF9NUjFfUkZTXzE2SwkJMHgwMDI4MDAwMAogI2RlZmluZSBFTUFDNF9NUjFfVEZTXzJLICAgICAgIAkJMHgwMDAyMDAwMAogI2RlZmluZSBFTUFDNF9NUjFfVEZTXzRLCQkweDAwMDMwMDAwCisjZGVmaW5lIEVNQUM0X01SMV9URlNfMTZLCQkweDAwMDUwMDAwCiAjZGVmaW5lIEVNQUM0X01SMV9UUgkJCTB4MDAwMDgwMDAKICNkZWZpbmUgRU1BQzRfTVIxX01XU1dfMDAxCQkweDAwMDAxMDAwCiAjZGVmaW5lIEVNQUM0X01SMV9KUFNNCQkJMHgwMDAwMDgwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWZiLmMgYi9kcml2ZXJzL25ldC9pZmIuYwppbmRleCA4MDFmMDg4Li4wMzA5MTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZmIuYworKysgYi9kcml2ZXJzL25ldC9pZmIuYwpAQCAtOTgsMTIgKzk4LDEzIEBACiAJCXN0YXRzLT50eF9wYWNrZXRzKys7CiAJCXN0YXRzLT50eF9ieXRlcyArPXNrYi0+bGVuOwogCi0JCXNrYi0+ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2tiLT5paWYpOworCQlza2ItPmRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBza2ItPmlpZik7CiAJCWlmICghc2tiLT5kZXYpIHsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCXN0YXRzLT50eF9kcm9wcGVkKys7CiAJCQlicmVhazsKIAkJfQorCQlkZXZfcHV0KHNrYi0+ZGV2KTsKIAkJc2tiLT5paWYgPSBfZGV2LT5pZmluZGV4OwogCiAJCWlmIChmcm9tICYgQVRfRUdSRVNTKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCmluZGV4IGRlYWVhOGYuLmIyNDNlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCkBAIC03MzIsNyArNzMyLDcgQEAKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpZ2JfcmluZyAqdGVtcF9yaW5nOwotCWludCBpLCBlcnI7CisJaW50IGksIGVyciA9IDA7CiAJdTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2NvdW50OwogCiAJaWYgKChyaW5nLT5yeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLT5yeF9qdW1ib19wZW5kaW5nKSkKQEAgLTc1MiwxOCArNzUyLDMwIEBACiAJCXJldHVybiAwOwogCX0KIAorCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbXNsZWVwKDEpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJCWFkYXB0ZXItPnR4X3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OworCQlhZGFwdGVyLT50eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50OworCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OworCQlnb3RvIGNsZWFyX3Jlc2V0OworCX0KKwogCWlmIChhZGFwdGVyLT5udW1fdHhfcXVldWVzID4gYWRhcHRlci0+bnVtX3J4X3F1ZXVlcykKIAkJdGVtcF9yaW5nID0gdm1hbGxvYyhhZGFwdGVyLT5udW1fdHhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZykpOwogCWVsc2UKIAkJdGVtcF9yaW5nID0gdm1hbGxvYyhhZGFwdGVyLT5udW1fcnhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZykpOwotCWlmICghdGVtcF9yaW5nKQotCQlyZXR1cm4gLUVOT01FTTsKIAotCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKLQkJbXNsZWVwKDEpOworCWlmICghdGVtcF9yaW5nKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gY2xlYXJfcmVzZXQ7CisJfQogCi0JaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKLQkJaWdiX2Rvd24oYWRhcHRlcik7CisJaWdiX2Rvd24oYWRhcHRlcik7CiAKIAkvKgogCSAqIFdlIGNhbid0IGp1c3QgZnJlZSBldmVyeXRoaW5nIGFuZCB0aGVuIHNldHVwIGFnYWluLApAQCAtODIwLDE0ICs4MzIsMTEgQEAKIAogCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OwogCX0KLQotCWVyciA9IDA7CiBlcnJfc2V0dXA6Ci0JaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKLQkJaWdiX3VwKGFkYXB0ZXIpOwotCi0JY2xlYXJfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlpZ2JfdXAoYWRhcHRlcik7CiAJdmZyZWUodGVtcF9yaW5nKTsKK2NsZWFyX3Jlc2V0OgorCWNsZWFyX2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdidmYvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaWdidmYvZXRodG9vbC5jCmluZGV4IGVlMTdhMDkuLmM2ODI2NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYnZmL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi9ldGh0b29sLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogewogCXN0cnVjdCBpZ2J2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaWdidmZfcmluZyAqdGVtcF9yaW5nOwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAJdTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2NvdW50OwogCiAJaWYgKChyaW5nLT5yeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLT5yeF9qdW1ib19wZW5kaW5nKSkKQEAgLTI5OSwxNSArMjk5LDIyIEBACiAJCXJldHVybiAwOwogCX0KIAotCXRlbXBfcmluZyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZ2J2Zl9yaW5nKSk7Ci0JaWYgKCF0ZW1wX3JpbmcpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JR0JWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCW1zbGVlcCgxKTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCWlnYnZmX2Rvd24oYWRhcHRlcik7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJYWRhcHRlci0+dHhfcmluZy0+Y291bnQgPSBuZXdfdHhfY291bnQ7CisJCWFkYXB0ZXItPnJ4X3JpbmctPmNvdW50ID0gbmV3X3J4X2NvdW50OworCQlnb3RvIGNsZWFyX3Jlc2V0OworCX0KKworCXRlbXBfcmluZyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZ2J2Zl9yaW5nKSk7CisJaWYgKCF0ZW1wX3JpbmcpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBjbGVhcl9yZXNldDsKKwl9CisKKwlpZ2J2Zl9kb3duKGFkYXB0ZXIpOwogCiAJLyoKIAkgKiBXZSBjYW4ndCBqdXN0IGZyZWUgZXZlcnl0aGluZyBhbmQgdGhlbiBzZXR1cCBhZ2FpbiwKQEAgLTMzOSwxNCArMzQ2LDExIEBACiAKIAkJbWVtY3B5KGFkYXB0ZXItPnJ4X3JpbmcsIHRlbXBfcmluZyxzaXplb2Yoc3RydWN0IGlnYnZmX3JpbmcpKTsKIAl9Ci0KLQllcnIgPSAwOwogZXJyX3NldHVwOgotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCWlnYnZmX3VwKGFkYXB0ZXIpOwotCi0JY2xlYXJfYml0KF9fSUdCVkZfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCWlnYnZmX3VwKGFkYXB0ZXIpOwogCXZmcmVlKHRlbXBfcmluZyk7CitjbGVhcl9yZXNldDoKKwljbGVhcl9iaXQoX19JR0JWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKaW5kZXggMzhiZjdjZi4uYzQxMmU4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCkBAIC0yMzIsOCArMjMyLDExIEBACiAJLyoKIAkgKiBFbnN1cmUgdGhhdCB0aGUgcG9ydHMgZm9yIHRoaXMgZGV2aWNlIGFyZSBzZXR1cCBjb3JyZWN0bHkuCiAJICovCi0JaWYgKHNpLT5wZGF0YS0+c3RhcnR1cCkKLQkJc2ktPnBkYXRhLT5zdGFydHVwKHNpLT5kZXYpOworCWlmIChzaS0+cGRhdGEtPnN0YXJ0dXApCXsKKwkJcmV0ID0gc2ktPnBkYXRhLT5zdGFydHVwKHNpLT5kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CiAKIAkvKgogCSAqIENvbmZpZ3VyZSBQUEMgZm9yIElSREEgLSB3ZSB3YW50IHRvIGRyaXZlIFRYRDIgbG93LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCmluZGV4IGZhMzE0Y2IuLjg1NmMxOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKQEAgLTc5OCw3ICs3OTgsNyBAQAogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfcmluZyAqdGVtcF90eF9yaW5nLCAqdGVtcF9yeF9yaW5nOwotCWludCBpLCBlcnI7CisJaW50IGksIGVyciA9IDA7CiAJdTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2NvdW50OwogCWJvb2wgbmVlZF91cGRhdGUgPSBmYWxzZTsKIApAQCAtODIyLDYgKzgyMiwxNiBAQAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQogCQltc2xlZXAoMSk7CiAKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgeworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5jb3VudCA9IG5ld190eF9jb3VudDsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0uY291bnQgPSBuZXdfcnhfY291bnQ7CisJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CisJCWFkYXB0ZXItPnJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7CisJCWdvdG8gZXJyX3NldHVwOworCX0KKwogCXRlbXBfdHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKIAkgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOwogCWlmICghdGVtcF90eF9yaW5nKSB7CkBAIC04NzksOCArODg5LDcgQEAKIAogCS8qIGlmIHJpbmdzIG5lZWQgdG8gYmUgdXBkYXRlZCwgaGVyZSdzIHRoZSBwbGFjZSB0byBkbyBpdCBpbiBvbmUgc2hvdCAqLwogCWlmIChuZWVkX3VwZGF0ZSkgewotCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQkJaXhnYmVfZG93bihhZGFwdGVyKTsKKwkJaXhnYmVfZG93bihhZGFwdGVyKTsKIAogCQkvKiB0eCAqLwogCQlpZiAobmV3X3R4X2NvdW50ICE9IGFkYXB0ZXItPnR4X3JpbmdfY291bnQpIHsKQEAgLTg5NywxMyArOTA2LDggQEAKIAkJCXRlbXBfcnhfcmluZyA9IE5VTEw7CiAJCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OwogCQl9Ci0JfQotCi0JLyogc3VjY2VzcyEgKi8KLQllcnIgPSAwOwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWl4Z2JlX3VwKGFkYXB0ZXIpOwotCisJfQogZXJyX3NldHVwOgogCWNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9lbnAyNjExLmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYwppbmRleCBiMDJhOTgxLi4zNGE2Y2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYworKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2VucDI2MTEuYwpAQCAtMTE5LDI0ICsxMTksOSBAQAogCX0KIH07CiAKLXN0cnVjdCBlbnAyNjExX2l4cGRldl9wcml2Ci17Ci0Jc3RydWN0IGl4cGRldl9wcml2CQlpeHBkZXZfcHJpdjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwkJc3RhdHM7Ci19OwotCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5kc1szXTsKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBsaW5rX2NoZWNrX3RpbWVyOwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVucDI2MTFfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGVucDI2MTFfaXhwZGV2X3ByaXYgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXBtMzM4Nl9nZXRfc3RhdHMoaXAtPml4cGRldl9wcml2LmNoYW5uZWwsICYoaXAtPnN0YXRzKSk7Ci0KLQlyZXR1cm4gJihpcC0+c3RhdHMpOwotfQotCiAvKiBAQEAgUG9sbCB0aGUgU0ZQIG1vZGRlZjAgbGluZSB0b28uICAqLwogLyogQEBAIFRyeSB0byB1c2UgdGhlIHBtMzM4NiBET09MIGludGVycnVwdCBhcyB3ZWxsLiAgKi8KIHN0YXRpYyB2b2lkIGVucDI2MTFfY2hlY2tfbGlua19zdGF0dXModW5zaWduZWQgbG9uZyBfX2R1bW15KQpAQCAtMjAzLDE0ICsxODgsMTMgQEAKIAogCXBvcnRzID0gcG0zMzg2X3BvcnRfY291bnQoKTsKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykgewotCQluZHNbaV0gPSBpeHBkZXZfYWxsb2MoaSwgc2l6ZW9mKHN0cnVjdCBlbnAyNjExX2l4cGRldl9wcml2KSk7CisJCW5kc1tpXSA9IGl4cGRldl9hbGxvYyhpLCBzaXplb2Yoc3RydWN0IGl4cGRldl9wcml2KSk7CiAJCWlmIChuZHNbaV0gPT0gTlVMTCkgewogCQkJd2hpbGUgKC0taSA+PSAwKQogCQkJCWZyZWVfbmV0ZGV2KG5kc1tpXSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCW5kc1tpXS0+Z2V0X3N0YXRzID0gZW5wMjYxMV9nZXRfc3RhdHM7CiAJCXBtMzM4Nl9pbml0X3BvcnQoaSk7CiAJCXBtMzM4Nl9nZXRfbWFjKGksIG5kc1tpXS0+ZGV2X2FkZHIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCmluZGV4IDEyNzI0MzQuLjlhZWUwY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIml4cDI0MDBfdHgudWNvZGUiCiAjaW5jbHVkZSAiaXhwZGV2X3ByaXYuaCIKICNpbmNsdWRlICJpeHBkZXYuaCIKKyNpbmNsdWRlICJwbTMzODYuaCIKIAogI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjAuMiIKIApAQCAtMjcxLDYgKzI3MiwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKml4cGRldl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXhwZGV2X3ByaXYgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXBtMzM4Nl9nZXRfc3RhdHMoaXAtPmNoYW5uZWwsICYoZGV2LT5zdGF0cykpOworCisJcmV0dXJuICYoZGV2LT5zdGF0cyk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXhwZGV2X25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IGl4cGRldl9vcGVuLAogCS5uZG9fc3RvcAkJPSBpeHBkZXZfY2xvc2UsCkBAIC0yNzgsNiArMjg4LDcgQEAKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCisJLm5kb19nZXRfc3RhdHMJCT0gaXhwZGV2X2dldF9zdGF0cywKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gaXhwZGV2X3BvbGxfY29udHJvbGxlciwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODUxLmMgYi9kcml2ZXJzL25ldC9rczg4NTEuYwppbmRleCAyMzc4MzU4Li5hMjNmNzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NTEuYworKysgYi9kcml2ZXJzL25ldC9rczg4NTEuYwpAQCAtMTcxLDYgKzE3MSwzNiBAQAogfQogCiAvKioKKyAqIGtzODg1MV93cnJlZzggLSB3cml0ZSA4Yml0IHJlZ2lzdGVyIHZhbHVlIHRvIGNoaXAKKyAqIEBrczogVGhlIGNoaXAgc3RhdGUKKyAqIEByZWc6IFRoZSByZWdpc3RlciBhZGRyZXNzCisgKiBAdmFsOiBUaGUgdmFsdWUgdG8gd3JpdGUKKyAqCisgKiBJc3N1ZSBhIHdyaXRlIHRvIHB1dCB0aGUgdmFsdWUgQHZhbCBpbnRvIHRoZSByZWdpc3RlciBzcGVjaWZpZWQgaW4gQHJlZy4KKyAqLworc3RhdGljIHZvaWQga3M4ODUxX3dycmVnOChzdHJ1Y3Qga3M4ODUxX25ldCAqa3MsIHVuc2lnbmVkIHJlZywgdW5zaWduZWQgdmFsKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIgPSAma3MtPnNwaV94ZmVyMTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9ICZrcy0+c3BpX21zZzE7CisJX19sZTE2IHR4YlsyXTsKKwlpbnQgcmV0OworCWludCBiaXQ7CisKKwliaXQgPSAxIDw8IChyZWcgJiAzKTsKKworCXR4YlswXSA9IGNwdV90b19sZTE2KE1LX09QKGJpdCwgcmVnKSB8IEtTX1NQSU9QX1dSKTsKKwl0eGJbMV0gPSB2YWw7CisKKwl4ZmVyLT50eF9idWYgPSB0eGI7CisJeGZlci0+cnhfYnVmID0gTlVMTDsKKwl4ZmVyLT5sZW4gPSAzOworCisJcmV0ID0gc3BpX3N5bmMoa3MtPnNwaWRldiwgbXNnKTsKKwlpZiAocmV0IDwgMCkKKwkJa3NfZXJyKGtzLCAic3BpX3N5bmMoKSBmYWlsZWRcbiIpOworfQorCisvKioKICAqIGtzODg1MV9yeF8xbXNnIC0gc2VsZWN0IHdoZXRoZXIgdG8gdXNlIG9uZSBvciB0d28gbWVzc2FnZXMgZm9yIHNwaSByZWFkCiAgKiBAa3M6IFRoZSBkZXZpY2Ugc3RydWN0dXJlCiAgKgpAQCAtMzIyLDEzICszNTIsMTIgQEAKIHN0YXRpYyBpbnQga3M4ODUxX3dyaXRlX21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGtzODg1MV9uZXQgKmtzID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MTYgKm1jcCA9ICh1MTYgKilkZXYtPmRldl9hZGRyOworCWludCBpOwogCiAJbXV0ZXhfbG9jaygma3MtPmxvY2spOwogCi0Ja3M4ODUxX3dycmVnMTYoa3MsIEtTX01BUkwsIG1jcFswXSk7Ci0Ja3M4ODUxX3dycmVnMTYoa3MsIEtTX01BUk0sIG1jcFsxXSk7Ci0Ja3M4ODUxX3dycmVnMTYoa3MsIEtTX01BUkgsIG1jcFsyXSk7CisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCWtzODg1MV93cnJlZzgoa3MsIEtTX01BUihpKSwgZGV2LT5kZXZfYWRkcltpXSk7CiAKIAltdXRleF91bmxvY2soJmtzLT5sb2NrKTsKIApAQCAtOTUxLDcgKzk4MCw3IEBACiAJCQltY3B0ciA9IG1jcHRyLT5uZXh0OwogCQl9CiAKLQkJcnhjdHJsLnJ4Y3IxID0gUlhDUjFfUlhNRSB8IFJYQ1IxX1JYQUUgfCBSWENSMV9SWFBBRk1BOworCQlyeGN0cmwucnhjcjEgPSBSWENSMV9SWE1FIHwgUlhDUjFfUlhQQUZNQTsKIAl9IGVsc2UgewogCQkvKiBqdXN0IGFjY2VwdCBicm9hZGNhc3QgLyB1bmljYXN0ICovCiAJCXJ4Y3RybC5yeGNyMSA9IFJYQ1IxX1JYUEFGTUE7CkBAIC0xMjM5LDYgKzEyNjgsOSBAQAogCW5kZXYtPm5ldGRldl9vcHMgPSAma3M4ODUxX25ldGRldl9vcHM7CiAJbmRldi0+aXJxID0gc3BpLT5pcnE7CiAKKwkvKiBpc3N1ZSBhIGdsb2JhbCBzb2Z0IHJlc2V0IHRvIHJlc2V0IHRoZSBkZXZpY2UuICovCisJa3M4ODUxX3NvZnRfcmVzZXQoa3MsIEdSUl9HU1IpOworCiAJLyogc2ltcGxlIGNoZWNrIGZvciBhIHZhbGlkIGNoaXAgYmVpbmcgY29ubmVjdGVkIHRvIHRoZSBidXMgKi8KIAogCWlmICgoa3M4ODUxX3JkcmVnMTYoa3MsIEtTX0NJREVSKSAmIH5DSURFUl9SRVZfTUFTSykgIT0gQ0lERVJfSUQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2tzODg1MS5oIGIvZHJpdmVycy9uZXQva3M4ODUxLmgKaW5kZXggODVhYmUxNC4uZjUyYzMxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva3M4ODUxLmgKKysrIGIvZHJpdmVycy9uZXQva3M4ODUxLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgQ0NSXzMyUElOCQkJCSgxIDw8IDApCiAKIC8qIE1BQyBhZGRyZXNzIHJlZ2lzdGVycyAqLworI2RlZmluZSBLU19NQVIoX20pCQkJCTB4MTUgLSAoX20pCiAjZGVmaW5lIEtTX01BUkwJCQkJCTB4MTAKICNkZWZpbmUgS1NfTUFSTQkJCQkJMHgxMgogI2RlZmluZSBLU19NQVJICQkJCQkweDE0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCmluZGV4IDVkZDcyMjUuLjI5MWE1MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCkBAIC0xMjgyLDYgKzEyODIsNyBAQAogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4NjM3MikgfSwgLyogTVQyNTQ1OCBDb25uZWN0WCBFTiAxMEdCQVNFLVQgMTBHaWdFICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzVhKSB9LCAvKiBNVDI1NDU4IENvbm5lY3RYIEVOIDEwR0JBU0UtVCtHZW4yIDEwR2lnRSAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2NCkgfSwgLyogTVQyNjQ2OCBDb25uZWN0WCBFTiAxMEdpZ0UgUENJZSBnZW4yKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NDYpIH0sIC8qIE1UMjY0MzggQ29ubmVjdFggRU4gNDBHaWdFIFBDSWUgZ2VuMiA1R1QvcyAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2ZSkgfSwgLyogTVQyNjQ3OCBDb25uZWN0WDIgNDBHaWdFIFBDSWUgZ2VuMiAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IDY5MzBjODcuLmYzNjI0NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpAQCAtNzUsNyArNzUsNyBAQAogI2luY2x1ZGUgIm15cmkxMGdlX21jcC5oIgogI2luY2x1ZGUgIm15cmkxMGdlX21jcF9nZW5faGVhZGVyLmgiCiAKLSNkZWZpbmUgTVlSSTEwR0VfVkVSU0lPTl9TVFIgIjEuNS4wLTEuNDMyIgorI2RlZmluZSBNWVJJMTBHRV9WRVJTSU9OX1NUUiAiMS41LjEtMS40NTEiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiTXlyaWNvbSAxMEcgZHJpdmVyICgxMEdiRSkiKTsKIE1PRFVMRV9BVVRIT1IoIk1haW50YWluZXI6IGhlbHBAbXlyaS5jb20iKTsKQEAgLTE2MjQsMTAgKzE2MjQsMjEgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJfQotCWlmICgqcHRyID09ICdSJyB8fCAqcHRyID09ICdRJykgewotCQkvKiBXZSd2ZSBmb3VuZCBlaXRoZXIgYW4gWEZQIG9yIHF1YWQgcmliYm9uIGZpYmVyICovCisJaWYgKCpwdHIgPT0gJzInKQorCQlwdHIrKzsKKwlpZiAoKnB0ciA9PSAnUicgfHwgKnB0ciA9PSAnUScgfHwgKnB0ciA9PSAnUycpIHsKKwkJLyogV2UndmUgZm91bmQgZWl0aGVyIGFuIFhGUCwgcXVhZCByaWJib24gZmliZXIsIG9yIFNGUCsgKi8KIAkJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwkJY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0ZJQlJFOworCQljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfRklCUkU7CisJfSBlbHNlIHsKKwkJY21kLT5wb3J0ID0gUE9SVF9PVEhFUjsKIAl9CisJaWYgKCpwdHIgPT0gJ1InIHx8ICpwdHIgPT0gJ1MnKQorCQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKKwllbHNlCisJCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKaW5kZXggN2E3MTc3NC4uMWM0NmRhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKQEAgLTQxOSw2ICs0MTksNyBAQAogI2RlZmluZSBORVRYRU5fQ1JCX1JPTVVTQglcCiAJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX1JPTVVTQikKICNkZWZpbmUgTkVUWEVOX0NSQl9JMlEJCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9JMlEpCisjZGVmaW5lIE5FVFhFTl9DUkJfSTJDMAkJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX0kyQzApCiAjZGVmaW5lIE5FVFhFTl9DUkJfU01CCQlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfU01CKQogI2RlZmluZSBORVRYRU5fQ1JCX01BWAkJTkVUWEVOX1BDSV9DUkJfV0lORE9XKDY0KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwppbmRleCAzMjMxNDAwLi4zMTg1YTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKQEAgLTE5MDEsMjIgKzE5MDEsMTYgQEAKIAogaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCWludCBvZmZzZXQsIGJvYXJkX3R5cGUsIG1hZ2ljLCBoZWFkZXJfdmVyc2lvbjsKKwlpbnQgb2Zmc2V0LCBib2FyZF90eXBlLCBtYWdpYzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKIAlvZmZzZXQgPSBOWF9GV19NQUdJQ19PRkZTRVQ7CiAJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJm1hZ2ljKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlvZmZzZXQgPSBOWF9IRFJfVkVSU0lPTl9PRkZTRVQ7Ci0JaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJmhlYWRlcl92ZXJzaW9uKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAobWFnaWMgIT0gTkVUWEVOX0JESU5GT19NQUdJQyB8fAotCQkJaGVhZGVyX3ZlcnNpb24gIT0gTkVUWEVOX0JESU5GT19WRVJTSU9OKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJpbnZhbGlkIGJvYXJkIGNvbmZpZywgbWFnaWM9JTA4eCwgdmVyc2lvbj0lMDh4XG4iLAotCQkJbWFnaWMsIGhlYWRlcl92ZXJzaW9uKTsKKwlpZiAobWFnaWMgIT0gTkVUWEVOX0JESU5GT19NQUdJQykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIGJvYXJkIGNvbmZpZywgbWFnaWM9JTA4eFxuIiwKKwkJCW1hZ2ljKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKaW5kZXggOTFjMmJjNi4uZTQwYjkxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwpAQCAtNTMxLDYgKzUzMSw4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQkJaWYgKG9mZiA9PSAoTkVUWEVOX0NSQl9JMkMwICsgMHgxYykpCisJCQkJY29udGludWU7CiAJCQkvKiBkbyBub3QgcmVzZXQgUENJICovCiAJCQlpZiAob2ZmID09IChST01VU0JfR0xCICsgMHhiYykpCiAJCQkJY29udGludWU7CkBAIC01NTMsMTIgKzU1NSw2IEBACiAJCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAob2ZmID09IE5FVFhFTl9BRERSX0VSUk9SKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnI6IFVua25vd24gYWRkcjogMHglMDh4XG4iLAotCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBidWZbaV0uYWRkcik7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCWluaXRfZGVsYXkgPSAxOwogCQkvKiBBZnRlciB3cml0aW5nIHRoaXMgcmVnaXN0ZXIsIEhXIG5lZWRzIHRpbWUgZm9yIENSQiAqLwogCQkvKiB0byBxdWlldCBkb3duIChlbHNlIGNyYl93aW5kb3cgcmV0dXJucyAweGZmZmZmZmZmKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IDliOWVhYjEuLjBiNGE1NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTU5NSw3ICs1OTUsOCBAQAogCXZvaWQgX19pb21lbSAqbWVtX3B0cjIgPSBOVUxMOwogCXZvaWQgX19pb21lbSAqZGJfcHRyID0gTlVMTDsKIAotCXVuc2lnbmVkIGxvbmcgbWVtX2Jhc2UsIG1lbV9sZW4sIGRiX2Jhc2UsIGRiX2xlbiA9IDAsIHBjaV9sZW4wID0gMDsKKwlyZXNvdXJjZV9zaXplX3QgbWVtX2Jhc2UsIGRiX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBtZW1fbGVuLCBkYl9sZW4gPSAwLCBwY2lfbGVuMCA9IDA7CiAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJaW50IHBjaV9mdW5jID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOwpAQCAtMTkxOCw2ICsxOTE5LDcgQEAKIAogcmVxdWVzdF9yZXNldDoKIAlhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0ID0gMTsKKwljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiB9CiAKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR4ZW5fbmljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCBmOTM2NGQwLi5kNmM3YWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtMzU0NSw3ICszNTQ1LDcgQEAKIAlycC0+cmNyX2luZGV4ID0gaW5kZXg7CiAKIAlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0JX19wc2tiX3B1bGxfdGFpbChza2IsIG1pbihsZW4sIE5JVV9SWFBVTExfTUFYKSk7CisJX19wc2tiX3B1bGxfdGFpbChza2IsIG1pbihsZW4sIFZMQU5fRVRIX0hMRU4pKTsKIAogCXJwLT5yeF9wYWNrZXRzKys7CiAJcnAtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwppbmRleCBlZThhZDNlLi5iNTg5NjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwpAQCAtMjUxLDYgKzI1MSw3IEBACiBzdGF0aWMgaW50IGVsM19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwogc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0YXRpYyB2b2lkIHRjNTc0X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCkBAIC0yNjYsNyArMjY3LDcgQEAKIAkubmRvX3R4X3RpbWVvdXQgCT0gZWwzX3R4X3RpbWVvdXQsCiAJLm5kb19nZXRfc3RhdHMJCT0gZWwzX2dldF9zdGF0cywKIAkubmRvX2RvX2lvY3RsCQk9IGVsM19pb2N0bCwKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9yeF9tb2RlLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCkBAIC0xMTYxLDYgKzExNjIsMTYgQEAKIAkJb3V0dyhTZXRSeEZpbHRlciB8IFJ4U3RhdGlvbiB8IFJ4QnJvYWRjYXN0LCBpb2FkZHIgKyBFTDNfQ01EKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwlzZXRfcnhfbW9kZShkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT53aW5kb3dfbG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgaW50IGVsM19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYwppbmRleCAyNTBlMTBmLi44NjU5ZDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tZ3Bpby5jCkBAIC0yMzgsNiArMjM4LDcgQEAKIAl9LAogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1kaW9fb2ZncGlvX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgbWRpb19vZmdwaW9fZHJpdmVyID0gewogCS5uYW1lID0gIm1kaW8tZ3BpbyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwb2UuYwppbmRleCA3Y2JmNmY5Li4yNTU5OTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBvZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKQEAgLTExMSw5ICsxMTEsNiBAQAogCXJ3bG9ja190IGhhc2hfbG9jazsKIH07CiAKLS8qIHRvIGVsaW1pbmF0ZSBhIHJhY2UgYnR3IHBwcG9lX2ZsdXNoX2RldiBhbmQgcHBwb2VfcmVsZWFzZSAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhmbHVzaF9sb2NrKTsKLQogLyoKICAqIFBQUG9FIGNvdWxkIGJlIGluIHRoZSBmb2xsb3dpbmcgc3RhZ2VzOgogICogMSkgRGlzY292ZXJ5IHN0YWdlICh0byBvYnRhaW4gcmVtb3RlIE1BQyBhbmQgU2Vzc2lvbiBJRCkKQEAgLTMwMyw0NSArMzAwLDQ4IEBACiAJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IFBQUE9FX0hBU0hfU0laRTsgaSsrKSB7CiAJCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBuLT5oYXNoX3RhYmxlW2ldOworCQlzdHJ1Y3Qgc29jayAqc2s7CiAKLQkJd2hpbGUgKHBvICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBzb2NrICpzazsKLQkJCWlmIChwby0+cHBwb2VfZGV2ICE9IGRldikgeworCQl3aGlsZSAocG8pIHsKKwkJCXdoaWxlIChwbyAmJiBwby0+cHBwb2VfZGV2ICE9IGRldikgewogCQkJCXBvID0gcG8tPm5leHQ7Ci0JCQkJY29udGludWU7CiAJCQl9CisKKwkJCWlmICghcG8pCisJCQkJYnJlYWs7CisKIAkJCXNrID0gc2tfcHBwb3gocG8pOwotCQkJc3Bpbl9sb2NrKCZmbHVzaF9sb2NrKTsKLQkJCXBvLT5wcHBvZV9kZXYgPSBOVUxMOwotCQkJc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOwotCQkJZGV2X3B1dChkZXYpOwogCiAJCQkvKiBXZSBhbHdheXMgZ3JhYiB0aGUgc29ja2V0IGxvY2ssIGZvbGxvd2VkIGJ5IHRoZQotCQkJICogaGFzaF9sb2NrLCBpbiB0aGF0IG9yZGVyLiAgU2luY2Ugd2Ugc2hvdWxkCi0JCQkgKiBob2xkIHRoZSBzb2NrIGxvY2sgd2hpbGUgZG9pbmcgYW55IHVuYmluZGluZywKLQkJCSAqIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgbG9jayB3ZSdyZSBob2xkaW5nLgotCQkJICogSG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgc29jayBzbyBpdCBkb2Vzbid0IGRpc2FwcGVhcgotCQkJICogYXMgd2UncmUganVtcGluZyBiZXR3ZWVuIGxvY2tzLgorCQkJICogaGFzaF9sb2NrLCBpbiB0aGF0IG9yZGVyLiAgU2luY2Ugd2Ugc2hvdWxkIGhvbGQgdGhlCisJCQkgKiBzb2NrIGxvY2sgd2hpbGUgZG9pbmcgYW55IHVuYmluZGluZywgd2UgbmVlZCB0bworCQkJICogcmVsZWFzZSB0aGUgbG9jayB3ZSdyZSBob2xkaW5nLiAgSG9sZCBhIHJlZmVyZW5jZSB0bworCQkJICogdGhlIHNvY2sgc28gaXQgZG9lc24ndCBkaXNhcHBlYXIgYXMgd2UncmUganVtcGluZworCQkJICogYmV0d2VlbiBsb2Nrcy4KIAkJCSAqLwogCiAJCQlzb2NrX2hvbGQoc2spOwotCiAJCQl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCQkJbG9ja19zb2NrKHNrKTsKIAotCQkJaWYgKHNrLT5za19zdGF0ZSAmIChQUFBPWF9DT05ORUNURUQgfCBQUFBPWF9CT1VORCkpIHsKKwkJCWlmIChwby0+cHBwb2VfZGV2ID09IGRldgorCQkJICAgICYmIHNrLT5za19zdGF0ZSAmIChQUFBPWF9DT05ORUNURUQgfCBQUFBPWF9CT1VORCkpIHsKIAkJCQlwcHBveF91bmJpbmRfc29jayhzayk7CiAJCQkJc2stPnNrX3N0YXRlID0gUFBQT1hfWk9NQklFOwogCQkJCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOworCQkJCXBvLT5wcHBvZV9kZXYgPSBOVUxMOworCQkJCWRldl9wdXQoZGV2KTsKIAkJCX0KIAogCQkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJCXNvY2tfcHV0KHNrKTsKIAotCQkJLyogUmVzdGFydCBzY2FuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBoYXNoIGNoYWluLgotCQkJICogV2hpbGUgdGhlIGxvY2sgd2FzIGRyb3BwZWQgdGhlIGNoYWluIGNvbnRlbnRzIG1heQotCQkJICogaGF2ZSBjaGFuZ2VkLgorCQkJLyogUmVzdGFydCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudAorCQkJICogaGFzaCBjaGFpbi4gV2UgZHJvcHBlZCBsb2NrcyBzbyB0aGUgd29ybGQgbWF5IGhhdmUKKwkJCSAqIGNoYW5nZSBmcm9tIHVuZGVybmVhdGggdXMuCiAJCQkgKi8KKworCQkJQlVHX09OKHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpID09IE5VTEwpOwogCQkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJCQlwbyA9IHBuLT5oYXNoX3RhYmxlW2ldOwogCQl9CkBAIC0zODgsMTEgKzM4OCwxNiBAQAogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcmVsYXlfcG87CiAKKwkvKiBCYWNrbG9nIHJlY2VpdmUuIFNlbWFudGljcyBvZiBiYWNrbG9nIHJjdiBwcmVjbHVkZSBhbnkgY29kZSBmcm9tCisJICogZXhlY3V0aW5nIGluIGxvY2tfc29jaygpL3JlbGVhc2Vfc29jaygpIGJvdW5kczsgbWVhbmluZyBzay0+c2tfc3RhdGUKKwkgKiBjYW4ndCBjaGFuZ2UuCisJICovCisKIAlpZiAoc2stPnNrX3N0YXRlICYgUFBQT1hfQk9VTkQpIHsKIAkJcHBwX2lucHV0KCZwby0+Y2hhbiwgc2tiKTsKIAl9IGVsc2UgaWYgKHNrLT5za19zdGF0ZSAmIFBQUE9YX1JFTEFZKSB7Ci0JCXJlbGF5X3BvID0gZ2V0X2l0ZW1fYnlfYWRkcihkZXZfbmV0KHBvLT5wcHBvZV9kZXYpLAotCQkJCQkJJnBvLT5wcHBvZV9yZWxheSk7CisJCXJlbGF5X3BvID0gZ2V0X2l0ZW1fYnlfYWRkcihzb2NrX25ldChzayksCisJCQkJCSAgICAmcG8tPnBwcG9lX3JlbGF5KTsKIAkJaWYgKHJlbGF5X3BvID09IE5VTEwpCiAJCQlnb3RvIGFib3J0X2tmcmVlOwogCkBAIC00NDcsNiArNDUyLDEwIEBACiAJCWdvdG8gZHJvcDsKIAogCXBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSk7CisKKwkvKiBOb3RlIHRoYXQgZ2V0X2l0ZW0gZG9lcyBhIHNvY2tfaG9sZCgpLCBzbyBza19wcHBveChwbykKKwkgKiBpcyBrbm93biB0byBiZSBzYWZlLgorCSAqLwogCXBvID0gZ2V0X2l0ZW0ocG4sIHBoLT5zaWQsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIGRldi0+aWZpbmRleCk7CiAJaWYgKCFwbykKIAkJZ290byBkcm9wOwpAQCAtNTYxLDYgKzU3MCw3IEBACiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOwogCXN0cnVjdCBwcHBvZV9uZXQgKnBuOworCXN0cnVjdCBuZXQgKm5ldCA9IE5VTEw7CiAKIAlpZiAoIXNrKQogCQlyZXR1cm4gMDsKQEAgLTU3MSw0NCArNTgxLDI4IEBACiAJCXJldHVybiAtRUJBREY7CiAJfQogCisJcG8gPSBwcHBveF9zayhzayk7CisKKwlpZiAoc2stPnNrX3N0YXRlICYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkgeworCQlkZXZfcHV0KHBvLT5wcHBvZV9kZXYpOworCQlwby0+cHBwb2VfZGV2ID0gTlVMTDsKKwl9CisKIAlwcHBveF91bmJpbmRfc29jayhzayk7CiAKIAkvKiBTaWduYWwgdGhlIGRlYXRoIG9mIHRoZSBzb2NrZXQuICovCiAJc2stPnNrX3N0YXRlID0gUFBQT1hfREVBRDsKIAotCS8qCi0JICogcHBwb2VfZmx1c2hfZGV2IGNvdWxkIGxlYWQgdG8gYSByYWNlIHdpdGgKLQkgKiB0aGlzIHJvdXRpbmUgc28gd2UgdXNlIGZsdXNoX2xvY2sgdG8gZWxpbWluYXRlCi0JICogc3VjaCBhIGNhc2UgKHdlIG9ubHkgbmVlZCBwZXItbmV0IHNwZWNpZmljIGRhdGEpCi0JICovCi0Jc3Bpbl9sb2NrKCZmbHVzaF9sb2NrKTsKLQlwbyA9IHBwcG94X3NrKHNrKTsKLQlpZiAoIXBvLT5wcHBvZV9kZXYpIHsKLQkJc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOwotCQlnb3RvIG91dDsKLQl9Ci0JcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChwby0+cHBwb2VfZGV2KSk7Ci0Jc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOworCW5ldCA9IHNvY2tfbmV0KHNrKTsKKwlwbiA9IHBwcG9lX3Blcm5ldChuZXQpOwogCiAJLyoKIAkgKiBwcm90ZWN0ICJwbyIgZnJvbSBjb25jdXJyZW50IHVwZGF0ZXMKIAkgKiBvbiBwcHBvZV9mbHVzaF9kZXYKIAkgKi8KLQl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKKwlkZWxldGVfaXRlbShwbiwgcG8tPnBwcG9lX3BhLnNpZCwgcG8tPnBwcG9lX3BhLnJlbW90ZSwKKwkJICAgIHBvLT5wcHBvZV9pZmluZGV4KTsKIAotCXBvID0gcHBwb3hfc2soc2spOwotCWlmIChzdGFnZV9zZXNzaW9uKHBvLT5wcHBvZV9wYS5zaWQpKQotCQlfX2RlbGV0ZV9pdGVtKHBuLCBwby0+cHBwb2VfcGEuc2lkLCBwby0+cHBwb2VfcGEucmVtb3RlLAotCQkJCXBvLT5wcHBvZV9pZmluZGV4KTsKLQotCWlmIChwby0+cHBwb2VfZGV2KSB7Ci0JCWRldl9wdXQocG8tPnBwcG9lX2Rldik7Ci0JCXBvLT5wcHBvZV9kZXYgPSBOVUxMOwotCX0KLQotCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7Ci0KLW91dDoKIAlzb2NrX29ycGhhbihzayk7CiAJc29jay0+c2sgPSBOVUxMOwogCkBAIC02MjUsOCArNjE5LDkgQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggKnNwID0gKHN0cnVjdCBzb2NrYWRkcl9wcHBveCAqKXVzZXJ2YWRkcjsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBOVUxMOwogCWludCBlcnJvcjsKIAogCWxvY2tfc29jayhzayk7CkBAIC02NTIsMTIgKzY0NywxNCBAQAogCS8qIERlbGV0ZSB0aGUgb2xkIGJpbmRpbmcgKi8KIAlpZiAoc3RhZ2Vfc2Vzc2lvbihwby0+cHBwb2VfcGEuc2lkKSkgewogCQlwcHBveF91bmJpbmRfc29jayhzayk7CisJCXBuID0gcHBwb2VfcGVybmV0KHNvY2tfbmV0KHNrKSk7CisJCWRlbGV0ZV9pdGVtKHBuLCBwby0+cHBwb2VfcGEuc2lkLAorCQkJICAgIHBvLT5wcHBvZV9wYS5yZW1vdGUsIHBvLT5wcHBvZV9pZmluZGV4KTsKIAkJaWYgKHBvLT5wcHBvZV9kZXYpIHsKLQkJCXBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQocG8tPnBwcG9lX2RldikpOwotCQkJZGVsZXRlX2l0ZW0ocG4sIHBvLT5wcHBvZV9wYS5zaWQsCi0JCQkJcG8tPnBwcG9lX3BhLnJlbW90ZSwgcG8tPnBwcG9lX2lmaW5kZXgpOwogCQkJZGV2X3B1dChwby0+cHBwb2VfZGV2KTsKKwkJCXBvLT5wcHBvZV9kZXYgPSBOVUxMOwogCQl9CisKIAkJbWVtc2V0KHNrX3BwcG94KHBvKSArIDEsIDAsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IHBwcG94X3NvY2spIC0gc2l6ZW9mKHN0cnVjdCBzb2NrKSk7CiAJCXNrLT5za19zdGF0ZSA9IFBQUE9YX05PTkU7CkBAIC02NjYsMTYgKzY2MywxNSBAQAogCS8qIFJlLWJpbmQgaW4gc2Vzc2lvbiBzdGFnZSBvbmx5ICovCiAJaWYgKHN0YWdlX3Nlc3Npb24oc3AtPnNhX2FkZHIucHBwb2Uuc2lkKSkgewogCQllcnJvciA9IC1FTk9ERVY7Ci0JCWRldiA9IGRldl9nZXRfYnlfbmFtZShzb2NrX25ldChzayksIHNwLT5zYV9hZGRyLnBwcG9lLmRldik7CisJCW5ldCA9IHNvY2tfbmV0KHNrKTsKKwkJZGV2ID0gZGV2X2dldF9ieV9uYW1lKG5ldCwgc3AtPnNhX2FkZHIucHBwb2UuZGV2KTsKIAkJaWYgKCFkZXYpCi0JCQlnb3RvIGVuZDsKKwkJCWdvdG8gZXJyX3B1dDsKIAogCQlwby0+cHBwb2VfZGV2ID0gZGV2OwogCQlwby0+cHBwb2VfaWZpbmRleCA9IGRldi0+aWZpbmRleDsKLQkJcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChkZXYpKTsKLQkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJCXBuID0gcHBwb2VfcGVybmV0KG5ldCk7CiAJCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7Ci0JCQl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCQkJZ290byBlcnJfcHV0OwogCQl9CiAKQEAgLTY4Myw2ICs2NzksNyBAQAogCQkgICAgICAgJnNwLT5zYV9hZGRyLnBwcG9lLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcHBvZV9hZGRyKSk7CiAKKwkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJCWVycm9yID0gX19zZXRfaXRlbShwbiwgcG8pOwogCQl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCQlpZiAoZXJyb3IgPCAwKQpAQCAtNjk2LDggKzY5MywxMSBAQAogCQlwby0+Y2hhbi5vcHMgPSAmcHBwb2VfY2hhbl9vcHM7CiAKIAkJZXJyb3IgPSBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoZGV2X25ldChkZXYpLCAmcG8tPmNoYW4pOwotCQlpZiAoZXJyb3IpCisJCWlmIChlcnJvcikgeworCQkJZGVsZXRlX2l0ZW0ocG4sIHBvLT5wcHBvZV9wYS5zaWQsCisJCQkJICAgIHBvLT5wcHBvZV9wYS5yZW1vdGUsIHBvLT5wcHBvZV9pZmluZGV4KTsKIAkJCWdvdG8gZXJyX3B1dDsKKwkJfQogCiAJCXNrLT5za19zdGF0ZSA9IFBQUE9YX0NPTk5FQ1RFRDsKIAl9CkBAIC05MTUsNiArOTE1LDE0IEBACiAJc3RydWN0IHBwcG9lX2hkciAqcGg7CiAJaW50IGRhdGFfbGVuID0gc2tiLT5sZW47CiAKKwkvKiBUaGUgaGlnaGVyLWxldmVsIFBQUCBjb2RlIChwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkpIGVuc3VyZXMgdGhlIFBQUAorCSAqIHhtaXQgb3BlcmF0aW9ucyBjb25jbHVkZSBwcmlvciB0byBhbiB1bnJlZ2lzdHJhdGlvbiBjYWxsLiAgVGh1cworCSAqIHNrLT5za19zdGF0ZSBjYW5ub3QgY2hhbmdlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGxvY2tfc29jaygpLgorCSAqIEJ1dCwgd2UgYWxzbyBjYW4ndCBkbyBhIGxvY2tfc29jayBzaW5jZSB0aGF0IGludHJvZHVjZXMgYSBwb3RlbnRpYWwKKwkgKiBkZWFkbG9jayBhcyB3ZSdkIHJldmVyc2UgdGhlIGxvY2sgb3JkZXJpbmcgdXNlZCB3aGVuIGNhbGxpbmcKKwkgKiBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkuCisJICovCisKIAlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8ICEoc2stPnNrX3N0YXRlICYgUFBQT1hfQ09OTkVDVEVEKSkKIAkJZ290byBhYm9ydDsKIApAQCAtOTQ0LDcgKzk1Miw2IEBACiAJCQlwby0+cHBwb2VfcGEucmVtb3RlLCBOVUxMLCBkYXRhX2xlbik7CiAKIAlkZXZfcXVldWVfeG1pdChza2IpOwotCiAJcmV0dXJuIDE7CiAKIGFib3J0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmggYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAppbmRleCAzZWM2ZTg1Li5jMjM4M2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAorKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaApAQCAtOTUsNiArOTUsNyBAQAogCiAJLyogTWlzYy4gc3R1ZmYgKi8KIAlNQUlMQk9YX0NPVU5UID0gMTYsCisJTUFJTEJPWF9USU1FT1VUID0gNSwKIAogCVBST0NfQUREUl9SRFkgPSAoMSA8PCAzMSksCiAJUFJPQ19BRERSX1IgPSAoMSA8PCAzMCksCkBAIC04MDMsNiArODA0LDEyIEBACiAJTUJfQ01EX1NFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjIsCiAJTUJfQ01EX0dFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjMsCiAJTUJfQ01EX0dFVF9MSU5LX1NUUyA9IDB4MDAwMDAxMjQsCisJTUJfQ01EX1NFVF9NR01OVF9URktfQ1RMID0gMHgwMDAwMDE2MCwgLyogU2V0IE1nbW50IFRyYWZmaWMgQ29udHJvbCAqLworCU1CX1NFVF9NUElfVEZLX1NUT1AgPSAoMSA8PCAwKSwKKwlNQl9TRVRfTVBJX1RGS19SRVNVTUUgPSAoMSA8PCAxKSwKKwlNQl9DTURfR0VUX01HTU5UX1RGS19DVEwgPSAweDAwMDAwMTYxLCAvKiBHZXQgTWdtbnQgVHJhZmZpYyBDb250cm9sICovCisJTUJfR0VUX01QSV9URktfU1RPUFBFRCA9ICgxIDw8IDApLAorCU1CX0dFVF9NUElfVEZLX0ZJRk9fRU1QVFkgPSAoMSA8PCAxKSwKIAogCS8qIE1haWxib3ggQ29tbWFuZCBTdGF0dXMuICovCiAJTUJfQ01EX1NUU19HT09EID0gMHgwMDAwNDAwMCwJLyogU3VjY2Vzcy4gKi8KQEAgLTExNjgsNyArMTE3NSw3IEBACiAjZGVmaW5lIFJTU19SSTYgMHg0MAogI2RlZmluZSBSU1NfUlQ2IDB4ODAKIAlfX2xlMTYgbWFzazsKLQlfX2xlMzIgaGFzaF9jcV9pZFsyNTZdOworCXU4IGhhc2hfY3FfaWRbMTAyNF07CiAJX19sZTMyIGlwdjZfaGFzaF9rZXlbMTBdOwogCV9fbGUzMiBpcHY0X2hhc2hfa2V5WzRdOwogfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7CkBAIC0xNjA2LDYgKzE2MTMsOCBAQAogaW50IHFsX21iX2Fib3V0X2Z3KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIHZvaWQgcWxfbGlua19vbihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiB2b2lkIHFsX2xpbmtfb2ZmKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKK2ludCBxbF9tYl9zZXRfbWdtbnRfdHJhZmZpY19jdGwoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiBjb250cm9sKTsKK2ludCBxbF93YWl0X2ZpZm9fZW1wdHkoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOwogCiAjaWYgMQogI2RlZmluZSBRTF9BTExfRFVNUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKaW5kZXggNjE2ODA3MS4uY2VhNzUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCkBAIC0zMjAsNiArMzIwLDM3IEBACiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE1BQ19BRERSX1RZUEVfTVVMVElfTUFDOgorCQl7CisJCQl1MzIgdXBwZXIgPSAoYWRkclswXSA8PCA4KSB8IGFkZHJbMV07CisJCQl1MzIgbG93ZXIgPSAoYWRkclsyXSA8PCAyNCkgfCAoYWRkclszXSA8PCAxNikgfAorCQkJCQkoYWRkcls0XSA8PCA4KSB8IChhZGRyWzVdKTsKKworCQkJc3RhdHVzID0KKwkJCQlxbF93YWl0X3JlZ19yZHkocWRldiwKKwkJCQlNQUNfQUREUl9JRFgsIE1BQ19BRERSX01XLCAwKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJZ290byBleGl0OworCQkJcWxfd3JpdGUzMihxZGV2LCBNQUNfQUREUl9JRFgsIChvZmZzZXQrKykgfAorCQkJCShpbmRleCA8PCBNQUNfQUREUl9JRFhfU0hJRlQpIHwKKwkJCQl0eXBlIHwgTUFDX0FERFJfRSk7CisJCQlxbF93cml0ZTMyKHFkZXYsIE1BQ19BRERSX0RBVEEsIGxvd2VyKTsKKwkJCXN0YXR1cyA9CisJCQkJcWxfd2FpdF9yZWdfcmR5KHFkZXYsCisJCQkJTUFDX0FERFJfSURYLCBNQUNfQUREUl9NVywgMCk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWdvdG8gZXhpdDsKKwkJCXFsX3dyaXRlMzIocWRldiwgTUFDX0FERFJfSURYLCAob2Zmc2V0KyspIHwKKwkJCQkoaW5kZXggPDwgTUFDX0FERFJfSURYX1NISUZUKSB8CisJCQkJdHlwZSB8IE1BQ19BRERSX0UpOworCisJCQlxbF93cml0ZTMyKHFkZXYsIE1BQ19BRERSX0RBVEEsIHVwcGVyKTsKKwkJCXN0YXR1cyA9CisJCQkJcWxfd2FpdF9yZWdfcmR5KHFkZXYsCisJCQkJTUFDX0FERFJfSURYLCBNQUNfQUREUl9NVywgMCk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWdvdG8gZXhpdDsKKwkJCWJyZWFrOworCQl9CiAJY2FzZSBNQUNfQUREUl9UWVBFX0NBTV9NQUM6CiAJCXsKIAkJCXUzMiBjYW1fb3V0cHV0OwpAQCAtMzY1LDE2ICszOTYsMTQgQEAKIAkJCSAgIGFuZCBwb3NzaWJseSB0aGUgZnVuY3Rpb24gaWQuICBSaWdodCBub3cgd2UgaGFyZGNvZGUKIAkJCSAgIHRoZSByb3V0ZSBmaWVsZCB0byBOSUMgY29yZS4KIAkJCSAqLwotCQkJaWYgKHR5cGUgPT0gTUFDX0FERFJfVFlQRV9DQU1fTUFDKSB7Ci0JCQkJY2FtX291dHB1dCA9IChDQU1fT1VUX1JPVVRFX05JQyB8Ci0JCQkJCSAgICAgIChxZGV2LT4KLQkJCQkJICAgICAgIGZ1bmMgPDwgQ0FNX09VVF9GVU5DX1NISUZUKSB8Ci0JCQkJCQkoMCA8PCBDQU1fT1VUX0NRX0lEX1NISUZUKSk7Ci0JCQkJaWYgKHFkZXYtPnZsZ3JwKQotCQkJCQljYW1fb3V0cHV0IHw9IENBTV9PVVRfUlY7Ci0JCQkJLyogcm91dGUgdG8gTklDIGNvcmUgKi8KLQkJCQlxbF93cml0ZTMyKHFkZXYsIE1BQ19BRERSX0RBVEEsIGNhbV9vdXRwdXQpOwotCQkJfQorCQkJY2FtX291dHB1dCA9IChDQU1fT1VUX1JPVVRFX05JQyB8CisJCQkJICAgICAgKHFkZXYtPgorCQkJCSAgICAgICBmdW5jIDw8IENBTV9PVVRfRlVOQ19TSElGVCkgfAorCQkJCQkoMCA8PCBDQU1fT1VUX0NRX0lEX1NISUZUKSk7CisJCQlpZiAocWRldi0+dmxncnApCisJCQkJY2FtX291dHB1dCB8PSBDQU1fT1VUX1JWOworCQkJLyogcm91dGUgdG8gTklDIGNvcmUgKi8KKwkJCXFsX3dyaXRlMzIocWRldiwgTUFDX0FERFJfREFUQSwgY2FtX291dHB1dCk7CiAJCQlicmVhazsKIAkJfQogCWNhc2UgTUFDX0FERFJfVFlQRV9WTEFOOgpAQCAtNTQ2LDE0ICs1NzUsMTQgQEAKIAkJfQogCWNhc2UgUlRfSURYX01DQVNUOgkvKiBQYXNzIHVwIEFsbCBNdWx0aWNhc3QgZnJhbWVzLiAqLwogCQl7Ci0JCQl2YWx1ZSA9IFJUX0lEWF9EU1RfQ0FNX1EgfAkvKiBkZXN0ICovCisJCQl2YWx1ZSA9IFJUX0lEWF9EU1RfREZMVF9RIHwJLyogZGVzdCAqLwogCQkJICAgIFJUX0lEWF9UWVBFX05JQ1EgfAkvKiB0eXBlICovCiAJCQkgICAgKFJUX0lEWF9BTExNVUxUSV9TTE9UIDw8IFJUX0lEWF9JRFhfU0hJRlQpOy8qIGluZGV4ICovCiAJCQlicmVhazsKIAkJfQogCWNhc2UgUlRfSURYX01DQVNUX01BVENIOgkvKiBQYXNzIHVwIG1hdGNoZWQgTXVsdGljYXN0IGZyYW1lcy4gKi8KIAkJewotCQkJdmFsdWUgPSBSVF9JRFhfRFNUX0NBTV9RIHwJLyogZGVzdCAqLworCQkJdmFsdWUgPSBSVF9JRFhfRFNUX0RGTFRfUSB8CS8qIGRlc3QgKi8KIAkJCSAgICBSVF9JRFhfVFlQRV9OSUNRIHwJLyogdHlwZSAqLwogCQkJICAgIChSVF9JRFhfTUNBU1RfTUFUQ0hfU0xPVCA8PCBSVF9JRFhfSURYX1NISUZUKTsvKiBpbmRleCAqLwogCQkJYnJlYWs7CkBAIC0zMDc3LDYgKzMxMDYsMTIgQEAKIAogc3RhdGljIGludCBxbF9zdGFydF9yc3Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CisJdTggaW5pdF9oYXNoX3NlZWRbXSA9IHsweDZkLCAweDVhLCAweDU2LCAweGRhLCAweDI1LCAweDViLCAweDBlLCAweGMyLAorCQkJCTB4NDEsIDB4NjcsIDB4MjUsIDB4M2QsIDB4NDMsIDB4YTMsIDB4OGYsCisJCQkJMHhiMCwgMHhkMCwgMHhjYSwgMHgyYiwgMHhjYiwgMHhhZSwgMHg3YiwKKwkJCQkweDMwLCAweGI0LCAweDc3LCAweGNiLCAweDJkLCAweGEzLCAweDgwLAorCQkJCTB4MzAsIDB4ZjIsIDB4MGMsIDB4NmEsIDB4NDIsIDB4YjcsIDB4M2IsCisJCQkJMHhiZSwgMHhhYywgMHgwMSwgMHhmYX07CiAJc3RydWN0IHJpY2IgKnJpY2IgPSAmcWRldi0+cmljYjsKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgaTsKQEAgLTMwODYsMjEgKzMxMjEsMTcgQEAKIAogCXJpY2ItPmJhc2VfY3EgPSBSU1NfTDRLOwogCXJpY2ItPmZsYWdzID0KLQkgICAgKFJTU19MNksgfCBSU1NfTEkgfCBSU1NfTEIgfCBSU1NfTE0gfCBSU1NfUkk0IHwgUlNTX1JJNiB8IFJTU19SVDQgfAotCSAgICAgUlNTX1JUNik7Ci0JcmljYi0+bWFzayA9IGNwdV90b19sZTE2KHFkZXYtPnJzc19yaW5nX2NvdW50IC0gMSk7CisJCShSU1NfTDZLIHwgUlNTX0xJIHwgUlNTX0xCIHwgUlNTX0xNIHwgUlNTX1JUNCB8IFJTU19SVDYpOworCXJpY2ItPm1hc2sgPSBjcHVfdG9fbGUxNigodTE2KSgweDNmZikpOwogCiAJLyoKIAkgKiBGaWxsIG91dCB0aGUgSW5kaXJlY3Rpb24gVGFibGUuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotCQloYXNoX2lkW2ldID0gaSAmIChxZGV2LT5yc3NfcmluZ19jb3VudCAtIDEpOworCWZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCisJCWhhc2hfaWRbaV0gPSAoaSAmIChxZGV2LT5yc3NfcmluZ19jb3VudCAtIDEpKTsKIAotCS8qCi0JICogUmFuZG9tIHZhbHVlcyBmb3IgdGhlIElQdjYgYW5kIElQdjQgSGFzaCBLZXlzLgotCSAqLwotCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2Nl9oYXNoX2tleVswXSwgNDApOwotCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2NF9oYXNoX2tleVswXSwgMTYpOworCW1lbWNweSgodm9pZCAqKSZyaWNiLT5pcHY2X2hhc2hfa2V5WzBdLCBpbml0X2hhc2hfc2VlZCwgNDApOworCW1lbWNweSgodm9pZCAqKSZyaWNiLT5pcHY0X2hhc2hfa2V5WzBdLCBpbml0X2hhc2hfc2VlZCwgMTYpOwogCiAJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIkluaXRpYWxpemluZyBSU1MuXG4iKTsKIApAQCAtMzIzOSw2ICszMjcwLDEzIEBACiAJcWxfd3JpdGUzMihxZGV2LCBTUExUX0hEUiwgU1BMVF9IRFJfRVAgfAogCQltaW4oU01BTExfQlVGRkVSX1NJWkUsIE1BWF9TUExJVF9TSVpFKSk7CiAKKwkvKiBTZXQgUlggcGFja2V0IHJvdXRpbmcgdG8gdXNlIHBvcnQvcGNpIGZ1bmN0aW9uIG9uIHdoaWNoIHRoZQorCSAqIHBhY2tldCBhcnJpdmVkIG9uIGluIGFkZGl0aW9uIHRvIHVzdWFsIGZyYW1lIHJvdXRpbmcuCisJICogVGhpcyBpcyBoZWxwZnVsIG9uIGJvbmRpbmcgd2hlcmUgYm90aCBpbnRlcmZhY2VzIGNhbiBoYXZlCisJICogdGhlIHNhbWUgTUFDIGFkZHJlc3MuCisJICovCisJcWxfd3JpdGUzMihxZGV2LCBSU1RfRk8sIFJTVF9GT19SUl9NQVNLIHwgUlNUX0ZPX1JSX1JDVl9GVU5DX0NRKTsKKwogCS8qIFN0YXJ0IHVwIHRoZSByeCBxdWV1ZXMuICovCiAJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgewogCQlzdGF0dXMgPSBxbF9zdGFydF9yeF9yaW5nKHFkZXYsICZxZGV2LT5yeF9yaW5nW2ldKTsKQEAgLTMzMTEsNiArMzM0OSwxMyBAQAogCiAJZW5kX2ppZmZpZXMgPSBqaWZmaWVzICsKIAkJbWF4KCh1bnNpZ25lZCBsb25nKTEsIHVzZWNzX3RvX2ppZmZpZXMoMzApKTsKKworCS8qIFN0b3AgbWFuYWdlbWVudCB0cmFmZmljLiAqLworCXFsX21iX3NldF9tZ21udF90cmFmZmljX2N0bChxZGV2LCBNQl9TRVRfTVBJX1RGS19TVE9QKTsKKworCS8qIFdhaXQgZm9yIHRoZSBOSUMgYW5kIE1HTU5UIEZJRk9zIHRvIGVtcHR5LiAqLworCXFsX3dhaXRfZmlmb19lbXB0eShxZGV2KTsKKwogCXFsX3dyaXRlMzIocWRldiwgUlNUX0ZPLCAoUlNUX0ZPX0ZSIDw8IDE2KSB8IFJTVF9GT19GUik7CiAKIAlkbyB7CkBAIC0zMzI2LDYgKzMzNzEsOCBAQAogCQlzdGF0dXMgPSAtRVRJTUVET1VUOwogCX0KIAorCS8qIFJlc3VtZSBtYW5hZ2VtZW50IHRyYWZmaWMuICovCisJcWxfbWJfc2V0X21nbW50X3RyYWZmaWNfY3RsKHFkZXYsIE1CX1NFVF9NUElfVEZLX1JFU1VNRSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzcwNCw2ICszNzUxLDEyIEBACiAJc3RhdHVzID0gcWxfYWRhcHRlcl91cChxZGV2KTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIGVycm9yOworCisJLyogUmVzdG9yZSByeCBtb2RlLiAqLworCWNsZWFyX2JpdChRTF9BTExNVUxUSSwgJnFkZXYtPmZsYWdzKTsKKwljbGVhcl9iaXQoUUxfUFJPTUlTQ1VPVVMsICZxZGV2LT5mbGFncyk7CisJcWxnZV9zZXRfbXVsdGljYXN0X2xpc3QocWRldi0+bmRldik7CisKIAlydG5sX3VubG9jaygpOwogCXJldHVybjsKIGVycm9yOgpAQCAtMzg2Myw2ICszOTE2LDcgQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAorCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXFkZXYtPnJlZ19iYXNlID0KIAkgICAgaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKSwKIAkJCSAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpKTsKQEAgLTQwMTcsNiArNDA3MSwzMyBAQAogCWZyZWVfbmV0ZGV2KG5kZXYpOwogfQogCisvKiBDbGVhbiB1cCByZXNvdXJjZXMgd2l0aG91dCB0b3VjaGluZyBoYXJkd2FyZS4gKi8KK3N0YXRpYyB2b2lkIHFsX2VlaF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOworCisJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmRldikpIHsKKwkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CisJCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisJfQorCisJaWYgKHRlc3RfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncykpCisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+YXNpY19yZXNldF93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9yZXNldF93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9pZGNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnNzX3JpbmdfY291bnQ7IGkrKykKKwkJbmV0aWZfbmFwaV9kZWwoJnFkZXYtPnJ4X3JpbmdbaV0ubmFwaSk7CisKKwljbGVhcl9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKTsKKwlxbF90eF9yaW5nX2NsZWFuKHFkZXYpOworCXFsX2ZyZWVfcnhfYnVmZmVycyhxZGV2KTsKKwlxbF9yZWxlYXNlX2FkYXB0ZXJfcmVzb3VyY2VzKHFkZXYpOworfQorCiAvKgogICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW0gd2hlbmV2ZXIKICAqIGEgUENJIGJ1cyBlcnJvciBpcyBkZXRlY3RlZC4KQEAgLTQwMjUsMTcgKzQxMDYsMjEgQEAKIAkJCQkJICAgICAgIGVudW0gcGNpX2NoYW5uZWxfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAotCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7Ci0KLQlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKQorCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIHBjaV9jaGFubmVsX2lvX25vcm1hbDoKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSOworCWNhc2UgcGNpX2NoYW5uZWxfaW9fZnJvemVuOgorCQluZXRpZl9kZXZpY2VfZGV0YWNoKG5kZXYpOworCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkKKwkJCXFsX2VlaF9jbG9zZShuZGV2KTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKKwljYXNlIHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZToKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIiVzOiBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcobmRldikpCi0JCXFsX2FkYXB0ZXJfZG93bihxZGV2KTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwl9CiAKIAkvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi8KIAlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKQEAgLTQwNTIsMjUgKzQxMzcsMTUgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCisJcGRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CisKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCiAJCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KLQogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCi0JbmV0aWZfY2Fycmllcl9vZmYobmRldik7Ci0JcWxfYWRhcHRlcl9yZXNldChxZGV2KTsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgRUVQUk9NIGlzIGdvb2QgKi8KLQltZW1jcHkobmRldi0+cGVybV9hZGRyLCBuZGV2LT5kZXZfYWRkciwgbmRldi0+YWRkcl9sZW4pOwotCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5kZXYtPnBlcm1fYWRkcikpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJBZnRlciByZXNldCwgaW52YWxpZCBNQUMgYWRkcmVzcy5cbiIpOwotCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKLQl9Ci0KIAlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwogfQogCkBAIC00MDc4LDE3ICs0MTUzLDIxIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpbnQgZXJyID0gMDsKIAotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCisJaWYgKHFsX2FkYXB0ZXJfcmVzZXQocWRldikpCisJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJyZXNldCBGQUlMRUQhXG4iKTsKIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewotCQlpZiAocWxfYWRhcHRlcl91cChxZGV2KSkgeworCQllcnIgPSBxbGdlX29wZW4obmRldik7CisJCWlmIChlcnIpIHsKIAkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAogCQkJCSJEZXZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIGFmdGVyIHJlc2V0LlxuIik7CiAJCQlyZXR1cm47CiAJCX0KKwl9IGVsc2UgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKKwkJCSJEZXZpY2Ugd2FzIG5vdCBydW5uaW5nIHByaW9yIHRvIEVFSC5cbiIpOwogCX0KLQogCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYwppbmRleCBjMmU0MzA3Li5iY2YxM2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCkBAIC00NzAsNyArNDcwLDggQEAKICAqLwogc3RhdGljIGludCBxbF9tYWlsYm94X2NvbW1hbmQoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCkKIHsKLQlpbnQgc3RhdHVzLCBjb3VudDsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAKIAogCS8qIEJlZ2luIHBvbGxlZCBtb2RlIGZvciBNUEkgKi8KQEAgLTQ5MSw5ICs0OTIsOSBAQAogCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlLiBXZSBsb29wCiAJICogaGVyZSBiZWNhdXNlIHNvbWUgQUVOIG1pZ2h0IGFycml2ZSB3aGlsZQogCSAqIHdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBtYWlsYm94IGNvbW1hbmQgdG8KLQkgKiBjb21wbGV0ZS4gSWYgbW9yZSB0aGFuIDUgYXJyaXZlIHRoZW4gd2UgY2FuCisJICogY29tcGxldGUuIElmIG1vcmUgdGhhbiA1IHNlY29uZHMgZXhwaXJlIHdlIGNhbgogCSAqIGFzc3VtZSBzb21ldGhpbmcgaXMgd3JvbmcuICovCi0JY291bnQgPSA1OworCWNvdW50ID0gamlmZmllcyArIEhaICogTUFJTEJPWF9USU1FT1VUOwogCWRvIHsKIAkJLyogV2FpdCBmb3IgdGhlIGludGVycnVwdCB0byBjb21lIGluLiAqLwogCQlzdGF0dXMgPSBxbF93YWl0X21ieF9jbWRfY21wbHQocWRldik7CkBAIC01MTcsMTUgKzUxOCwxNSBAQAogCQkJCQlNQl9DTURfU1RTX0dPT0QpIHx8CiAJCQkoKG1iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwZjAwMCkgPT0KIAkJCQkJTUJfQ01EX1NUU19JTlRSTURUKSkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKC0tY291bnQpOworCQkJZ290byBkb25lOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGNvdW50KSk7CiAKLQlpZiAoIWNvdW50KSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiVGltZWQgb3V0IHdhaXRpbmcgZm9yIG1haWxib3ggY29tcGxldGUuXG4iKTsKLQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKLQkJZ290byBlbmQ7Ci0JfQorCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCisJCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWFpbGJveCBjb21wbGV0ZS5cbiIpOworCXN0YXR1cyA9IC1FVElNRURPVVQ7CisJZ290byBlbmQ7CisKK2RvbmU6CiAKIAkvKiBOb3cgd2UgY2FuIGNsZWFyIHRoZSBpbnRlcnJ1cHQgY29uZGl0aW9uCiAJICogYW5kIGxvb2sgYXQgb3VyIHN0YXR1cy4KQEAgLTc2OCw2ICs3NjksOTUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitpbnQgcWxfbWJfc2V0X21nbW50X3RyYWZmaWNfY3RsKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgY29udHJvbCkKK3sKKwlzdHJ1Y3QgbWJveF9wYXJhbXMgbWJjOworCXN0cnVjdCBtYm94X3BhcmFtcyAqbWJjcCA9ICZtYmM7CisJaW50IHN0YXR1czsKKworCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7CisKKwltYmNwLT5pbl9jb3VudCA9IDE7CisJbWJjcC0+b3V0X2NvdW50ID0gMjsKKworCW1iY3AtPm1ib3hfaW5bMF0gPSBNQl9DTURfU0VUX01HTU5UX1RGS19DVEw7CisJbWJjcC0+bWJveF9pblsxXSA9IGNvbnRyb2w7CisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtYmNwLT5tYm94X291dFswXSA9PSBNQl9DTURfU1RTX0dPT0QpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gTUJfQ01EX1NUU19JTlZMRF9DTUQpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJDb21tYW5kIG5vdCBzdXBwb3J0ZWQgYnkgZmlybXdhcmUuXG4iKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfRVJSKSB7CisJCS8qIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGZpcm13YXJlIGlzCisJCSAqIGFscmVhZHkgaW4gdGhlIHN0YXRlIHdlIGFyZSB0cnlpbmcgdG8KKwkJICogY2hhbmdlIGl0IHRvLgorCQkgKi8KKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJDb21tYW5kIHBhcmFtZXRlcnMgbWFrZSBubyBjaGFuZ2UuXG4iKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgdGhlIG1haWxib3ggY29tbWFuZCBzdGF0dXMuICovCitzdGF0aWMgaW50IHFsX21iX2dldF9tZ21udF90cmFmZmljX2N0bChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyICpjb250cm9sKQoreworCXN0cnVjdCBtYm94X3BhcmFtcyBtYmM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJm1iYzsKKwlpbnQgc3RhdHVzOworCisJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKwkqY29udHJvbCA9IDA7CisKKwltYmNwLT5pbl9jb3VudCA9IDE7CisJbWJjcC0+b3V0X2NvdW50ID0gMTsKKworCW1iY3AtPm1ib3hfaW5bMF0gPSBNQl9DTURfR0VUX01HTU5UX1RGS19DVEw7CisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtYmNwLT5tYm94X291dFswXSA9PSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJKmNvbnRyb2wgPSBtYmNwLT5tYm94X2luWzFdOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWlmIChtYmNwLT5tYm94X291dFswXSA9PSBNQl9DTURfU1RTX0lOVkxEX0NNRCkgeworCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAorCQkJIkNvbW1hbmQgbm90IHN1cHBvcnRlZCBieSBmaXJtd2FyZS5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCX0gZWxzZSBpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gTUJfQ01EX1NUU19FUlIpIHsKKwkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKKwkJCSJGYWlsZWQgdG8gZ2V0IE1QSSB0cmFmZmljIGNvbnRyb2wuXG4iKTsKKwkJc3RhdHVzID0gLUVJTzsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IHFsX3dhaXRfZmlmb19lbXB0eShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgY291bnQgPSA1OworCXUzMiBtZ21udF9maWZvX2VtcHR5OworCXUzMiBuaWNfZmlmb19lbXB0eTsKKworCWRvIHsKKwkJbmljX2ZpZm9fZW1wdHkgPSBxbF9yZWFkMzIocWRldiwgU1RTKSAmIFNUU19ORkU7CisJCXFsX21iX2dldF9tZ21udF90cmFmZmljX2N0bChxZGV2LCAmbWdtbnRfZmlmb19lbXB0eSk7CisJCW1nbW50X2ZpZm9fZW1wdHkgJj0gTUJfR0VUX01QSV9URktfRklGT19FTVBUWTsKKwkJaWYgKG5pY19maWZvX2VtcHR5ICYmIG1nbW50X2ZpZm9fZW1wdHkpCisJCQlyZXR1cm4gMDsKKwkJbXNsZWVwKDEwMCk7CisJfSB3aGlsZSAoY291bnQtLSA+IDApOworCXJldHVybiAtRVRJTUVET1VUOworfQorCiAvKiBBUEkgY2FsbGVkIGluIHdvcmsgdGhyZWFkIGNvbnRleHQgdG8gc2V0IG5ldyBUWC9SWAogICogbWF4aW11bSBmcmFtZSBzaXplIHZhbHVlcyB0byBtYXRjaCBNVFUuCiAgKi8KQEAgLTg3Niw2ICs5NjYsOCBAQAogCWludCBlcnIgPSAwOwogCiAJcnRubF9sb2NrKCk7CisJLyogQmVnaW4gcG9sbGVkIG1vZGUgZm9yIE1QSSAqLworCXFsX3dyaXRlMzIocWRldiwgSU5UUl9NQVNLLCAoSU5UUl9NQVNLX1BJIDw8IDE2KSk7CiAKIAl3aGlsZSAocWxfcmVhZDMyKHFkZXYsIFNUUykgJiBTVFNfUEkpIHsKIAkJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKQEAgLTg4OCw2ICs5ODAsOCBAQAogCQkJYnJlYWs7CiAJfQogCisJLyogRW5kIHBvbGxlZCBtb2RlIGZvciBNUEkgKi8KKwlxbF93cml0ZTMyKHFkZXYsIElOVFJfTUFTSywgKElOVFJfTUFTS19QSSA8PCAxNikgfCBJTlRSX01BU0tfUEkpOwogCXJ0bmxfdW5sb2NrKCk7CiAJcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsIDApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggNTBjNmEzYy4uZjk4ZWY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0xMTUsNyArMTE1LDkgQEAKIAlSVExfR0lHQV9NQUNfVkVSXzIyID0gMHgxNiwgLy8gODE2OEMKIAlSVExfR0lHQV9NQUNfVkVSXzIzID0gMHgxNywgLy8gODE2OENQCiAJUlRMX0dJR0FfTUFDX1ZFUl8yNCA9IDB4MTgsIC8vIDgxNjhDUAotCVJUTF9HSUdBX01BQ19WRVJfMjUgPSAweDE5ICAvLyA4MTY4RAorCVJUTF9HSUdBX01BQ19WRVJfMjUgPSAweDE5LCAvLyA4MTY4RAorCVJUTF9HSUdBX01BQ19WRVJfMjYgPSAweDFhLCAvLyA4MTY4RAorCVJUTF9HSUdBX01BQ19WRVJfMjcgPSAweDFiICAvLyA4MTY4RFAKIH07CiAKICNkZWZpbmUgX1IoTkFNRSxNQUMsTUFTSykgXApAQCAtMTUwLDcgKzE1Miw5IEBACiAJX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX0dJR0FfTUFDX1ZFUl8yMiwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCiAJX1IoIlJUTDgxNjhjcC84MTExY3AiLAlSVExfR0lHQV9NQUNfVkVSXzIzLCAweGZmN2UxODgwKSwgLy8gUENJLUUKIAlfUigiUlRMODE2OGNwLzgxMTFjcCIsCVJUTF9HSUdBX01BQ19WRVJfMjQsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9HSUdBX01BQ19WRVJfMjUsIDB4ZmY3ZTE4ODApICAvLyBQQ0ktRQorCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9HSUdBX01BQ19WRVJfMjUsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQorCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9HSUdBX01BQ19WRVJfMjYsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQorCV9SKCJSVEw4MTY4ZHAvODExMWRwIiwJUlRMX0dJR0FfTUFDX1ZFUl8yNywgMHhmZjdlMTg4MCkgIC8vIFBDSS1FCiB9OwogI3VuZGVmIF9SCiAKQEAgLTI1Myw2ICsyNTcsMTMgQEAKIAlEQkdfUkVHCQkJPSAweGQxLAogI2RlZmluZQlGSVhfTkFLXzEJCQkoMSA8PCA0KQogI2RlZmluZQlGSVhfTkFLXzIJCQkoMSA8PCAzKQorCUVGVVNFQVIJCQk9IDB4ZGMsCisjZGVmaW5lCUVGVVNFQVJfRkxBRwkJCTB4ODAwMDAwMDAKKyNkZWZpbmUJRUZVU0VBUl9XUklURV9DTUQJCTB4ODAwMDAwMDAKKyNkZWZpbmUJRUZVU0VBUl9SRUFEX0NNRAkJMHgwMDAwMDAwMAorI2RlZmluZQlFRlVTRUFSX1JFR19NQVNLCQkweDAzZmYKKyNkZWZpbmUJRUZVU0VBUl9SRUdfU0hJRlQJCTgKKyNkZWZpbmUJRUZVU0VBUl9EQVRBX01BU0sJCTB4ZmYKIH07CiAKIGVudW0gcnRsX3JlZ2lzdGVyX2NvbnRlbnQgewpAQCAtNTY4LDYgKzU3OSwxNCBAQAogCW1kaW9fd3JpdGUoaW9hZGRyLCByZWdfYWRkciwgbWRpb19yZWFkKGlvYWRkciwgcmVnX2FkZHIpIHwgdmFsdWUpOwogfQogCitzdGF0aWMgdm9pZCBtZGlvX3BsdXNfbWludXModm9pZCBfX2lvbWVtICppb2FkZHIsIGludCByZWdfYWRkciwgaW50IHAsIGludCBtKQoreworCWludCB2YWw7CisKKwl2YWwgPSBtZGlvX3JlYWQoaW9hZGRyLCByZWdfYWRkcik7CisJbWRpb193cml0ZShpb2FkZHIsIHJlZ19hZGRyLCAodmFsIHwgcCkgJiB+bSk7Cit9CisKIHN0YXRpYyB2b2lkIHJ0bF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwKIAkJCSAgIGludCB2YWwpCiB7CkBAIC02NTEsNiArNjcwLDI0IEBACiAJcmV0dXJuIHZhbHVlOwogfQogCitzdGF0aWMgdTggcnRsODE2OGRfZWZ1c2VfcmVhZCh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IHJlZ19hZGRyKQoreworCXU4IHZhbHVlID0gMHhmZjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCVJUTF9XMzIoRUZVU0VBUiwgKHJlZ19hZGRyICYgRUZVU0VBUl9SRUdfTUFTSykgPDwgRUZVU0VBUl9SRUdfU0hJRlQpOworCisJZm9yIChpID0gMDsgaSA8IDMwMDsgaSsrKSB7CisJCWlmIChSVExfUjMyKEVGVVNFQVIpICYgRUZVU0VBUl9GTEFHKSB7CisJCQl2YWx1ZSA9IFJUTF9SMzIoRUZVU0VBUikgJiBFRlVTRUFSX0RBVEFfTUFTSzsKKwkJCWJyZWFrOworCQl9CisJCXVkZWxheSgxMDApOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKwogc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHZvaWQgX19pb21lbSAqaW9hZGRyKQogewogCVJUTF9XMTYoSW50ck1hc2ssIDB4MDAwMCk7CkBAIC05OTIsNyArMTAyOSwxMCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CiAJdHAtPnZsZ3JwID0gZ3JwOwotCWlmICh0cC0+dmxncnApCisJLyoKKwkgKiBEbyBub3QgZGlzYWJsZSBSeFZsYW4gb24gODExMFNDZC4KKwkgKi8KKwlpZiAodHAtPnZsZ3JwIHx8ICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wNSkpCiAJCXRwLT5jcF9jbWQgfD0gUnhWbGFuOwogCWVsc2UKIAkJdHAtPmNwX2NtZCAmPSB+UnhWbGFuOwpAQCAtMTI0Myw3ICsxMjgzLDEwIEBACiAJCWludCBtYWNfdmVyc2lvbjsKIAl9IG1hY19pbmZvW10gPSB7CiAJCS8qIDgxNjhEIGZhbWlseS4gKi8KLQkJeyAweDdjODAwMDAwLCAweDI4MDAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI1IH0sCisJCXsgMHg3Y2YwMDAwMCwgMHgyODMwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yNiB9LAorCQl7IDB4N2NmMDAwMDAsIDB4MjgxMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjUgfSwKKwkJeyAweDdjODAwMDAwLCAweDI4ODAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI3IH0sCisJCXsgMHg3YzgwMDAwMCwgMHgyODAwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yNiB9LAogCiAJCS8qIDgxNjhDIGZhbWlseS4gKi8KIAkJeyAweDdjZjAwMDAwLCAweDNjYTAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI0IH0sCkBAIC0xNjQ4LDc0ICsxNjkxLDkwMyBAQAogCXJ0bDgxNjhjXzNfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY4ZF9od19waHlfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyKQorc3RhdGljIHZvaWQgcnRsODE2OGRfMV9od19waHlfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyKQogewotCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8wW10gPSB7CisJc3RhdGljIHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8wW10gPSB7CiAJCXsgMHgxZiwgMHgwMDAxIH0sCi0JCXsgMHgwOSwgMHgyNzcwIH0sCi0JCXsgMHgwOCwgMHgwNGQwIH0sCi0JCXsgMHgwYiwgMHhhZDE1IH0sCi0JCXsgMHgwYywgMHg1YmYwIH0sCi0JCXsgMHgxYywgMHhmMTAxIH0sCisJCXsgMHgwNiwgMHg0MDY0IH0sCisJCXsgMHgwNywgMHgyODYzIH0sCisJCXsgMHgwOCwgMHgwNTljIH0sCisJCXsgMHgwOSwgMHgyNmI0IH0sCisJCXsgMHgwYSwgMHg2YTE5IH0sCisJCXsgMHgwYiwgMHhkY2M4IH0sCisJCXsgMHgxMCwgMHhmMDZkIH0sCisJCXsgMHgxNCwgMHg3ZjY4IH0sCisJCXsgMHgxOCwgMHg3ZmQ5IH0sCisJCXsgMHgxYywgMHhmMGZmIH0sCisJCXsgMHgxZCwgMHgzZDljIH0sCiAJCXsgMHgxZiwgMHgwMDAzIH0sCi0JCXsgMHgxNCwgMHg5NGQ3IH0sCi0JCXsgMHgxMiwgMHhmNGQ2IH0sCi0JCXsgMHgwOSwgMHhjYTBmIH0sCisJCXsgMHgxMiwgMHhmNDlmIH0sCisJCXsgMHgxMywgMHgwNzBiIH0sCisJCXsgMHgxYSwgMHgwNWFkIH0sCisJCXsgMHgxNCwgMHg5NGMwIH0KKwl9OworCXN0YXRpYyBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRfMVtdID0gewogCQl7IDB4MWYsIDB4MDAwMiB9LAotCQl7IDB4MGIsIDB4MGIxMCB9LAotCQl7IDB4MGMsIDB4ZDFmNyB9LAotCQl7IDB4MWYsIDB4MDAwMiB9LAotCQl7IDB4MDYsIDB4NTQ2MSB9LAotCQl7IDB4MWYsIDB4MDAwMiB9LAotCQl7IDB4MDUsIDB4NjY2MiB9LAotCQl7IDB4MWYsIDB4MDAwMCB9LAotCQl7IDB4MTQsIDB4MDA2MCB9LAotCQl7IDB4MWYsIDB4MDAwMCB9LAotCQl7IDB4MGQsIDB4ZjhhMCB9LAorCQl7IDB4MDYsIDB4NTU2MSB9LAogCQl7IDB4MWYsIDB4MDAwNSB9LAotCQl7IDB4MDUsIDB4ZmZjMiB9CisJCXsgMHgwNSwgMHg4MzMyIH0sCisJCXsgMHgwNiwgMHg1NTYxIH0KKwl9OworCXN0YXRpYyBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRfMltdID0geworCQl7IDB4MWYsIDB4MDAwNSB9LAorCQl7IDB4MDUsIDB4ZmZjMiB9LAorCQl7IDB4MWYsIDB4MDAwNSB9LAorCQl7IDB4MDUsIDB4ODAwMCB9LAorCQl7IDB4MDYsIDB4ZjhmOSB9LAorCQl7IDB4MDYsIDB4ZmFlZiB9LAorCQl7IDB4MDYsIDB4NTllZSB9LAorCQl7IDB4MDYsIDB4ZjhlYSB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ZjhlYiB9LAorCQl7IDB4MDYsIDB4MDBlMCB9LAorCQl7IDB4MDYsIDB4Zjg3YyB9LAorCQl7IDB4MDYsIDB4ZTFmOCB9LAorCQl7IDB4MDYsIDB4N2Q1OSB9LAorCQl7IDB4MDYsIDB4MGZlZiB9LAorCQl7IDB4MDYsIDB4MDEzOSB9LAorCQl7IDB4MDYsIDB4MDI5ZSB9LAorCQl7IDB4MDYsIDB4MDZlZiB9LAorCQl7IDB4MDYsIDB4MTAzOSB9LAorCQl7IDB4MDYsIDB4MDg5ZiB9LAorCQl7IDB4MDYsIDB4MmFlZSB9LAorCQl7IDB4MDYsIDB4ZjhlYSB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ZjhlYiB9LAorCQl7IDB4MDYsIDB4MDFlMCB9LAorCQl7IDB4MDYsIDB4Zjg3YyB9LAorCQl7IDB4MDYsIDB4ZTFmOCB9LAorCQl7IDB4MDYsIDB4N2Q1OCB9LAorCQl7IDB4MDYsIDB4NDA5ZSB9LAorCQl7IDB4MDYsIDB4MGYzOSB9LAorCQl7IDB4MDYsIDB4NDZhYSB9LAorCQl7IDB4MDYsIDB4MGJiZiB9LAorCQl7IDB4MDYsIDB4ODI5MCB9LAorCQl7IDB4MDYsIDB4ZDY4MiB9LAorCQl7IDB4MDYsIDB4OTgwMiB9LAorCQl7IDB4MDYsIDB4MDE0ZiB9LAorCQl7IDB4MDYsIDB4YWUwOSB9LAorCQl7IDB4MDYsIDB4YmY4MiB9LAorCQl7IDB4MDYsIDB4OThkNiB9LAorCQl7IDB4MDYsIDB4ODJhMCB9LAorCQl7IDB4MDYsIDB4MDIwMSB9LAorCQl7IDB4MDYsIDB4NGZlZiB9LAorCQl7IDB4MDYsIDB4OTVmZSB9LAorCQl7IDB4MDYsIDB4ZmRmYyB9LAorCQl7IDB4MDYsIDB4MDVmOCB9LAorCQl7IDB4MDYsIDB4ZjlmYSB9LAorCQl7IDB4MDYsIDB4ZWVmOCB9LAorCQl7IDB4MDYsIDB4ZWEwMCB9LAorCQl7IDB4MDYsIDB4ZWVmOCB9LAorCQl7IDB4MDYsIDB4ZWIwMCB9LAorCQl7IDB4MDYsIDB4ZTJmOCB9LAorCQl7IDB4MDYsIDB4N2NlMyB9LAorCQl7IDB4MDYsIDB4Zjg3ZCB9LAorCQl7IDB4MDYsIDB4YTUxMSB9LAorCQl7IDB4MDYsIDB4MTExMiB9LAorCQl7IDB4MDYsIDB4ZDI0MCB9LAorCQl7IDB4MDYsIDB4ZDY0NCB9LAorCQl7IDB4MDYsIDB4NDQwMiB9LAorCQl7IDB4MDYsIDB4ODIxNyB9LAorCQl7IDB4MDYsIDB4ZDJhMCB9LAorCQl7IDB4MDYsIDB4ZDZhYSB9LAorCQl7IDB4MDYsIDB4YWEwMiB9LAorCQl7IDB4MDYsIDB4ODIxNyB9LAorCQl7IDB4MDYsIDB4YWUwZiB9LAorCQl7IDB4MDYsIDB4YTU0NCB9LAorCQl7IDB4MDYsIDB4NDQwMiB9LAorCQl7IDB4MDYsIDB4YWU0ZCB9LAorCQl7IDB4MDYsIDB4YTVhYSB9LAorCQl7IDB4MDYsIDB4YWEwMiB9LAorCQl7IDB4MDYsIDB4YWU0NyB9LAorCQl7IDB4MDYsIDB4YWY4MiB9LAorCQl7IDB4MDYsIDB4MTNlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4MGZlZSB9LAorCQl7IDB4MDYsIDB4ODM0YyB9LAorCQl7IDB4MDYsIDB4MGZlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZiB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ODM1MSB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ODM0YSB9LAorCQl7IDB4MDYsIDB4ZmZlZSB9LAorCQl7IDB4MDYsIDB4ODM0YiB9LAorCQl7IDB4MDYsIDB4ZmZlMCB9LAorCQl7IDB4MDYsIDB4ODMzMCB9LAorCQl7IDB4MDYsIDB4ZTE4MyB9LAorCQl7IDB4MDYsIDB4MzE1OCB9LAorCQl7IDB4MDYsIDB4ZmVlNCB9LAorCQl7IDB4MDYsIDB4Zjg4YSB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4OGJlMCB9LAorCQl7IDB4MDYsIDB4ODMzMiB9LAorCQl7IDB4MDYsIDB4ZTE4MyB9LAorCQl7IDB4MDYsIDB4MzM1OSB9LAorCQl7IDB4MDYsIDB4MGZlMiB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4MGMyNCB9LAorCQl7IDB4MDYsIDB4NWFmMCB9LAorCQl7IDB4MDYsIDB4MWUxMiB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4OGNlNSB9LAorCQl7IDB4MDYsIDB4Zjg4ZCB9LAorCQl7IDB4MDYsIDB4YWY4MiB9LAorCQl7IDB4MDYsIDB4MTNlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZiB9LAorCQl7IDB4MDYsIDB4MTBlNCB9LAorCQl7IDB4MDYsIDB4ODM0ZiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGU3OCB9LAorCQl7IDB4MDYsIDB4MDA5ZiB9LAorCQl7IDB4MDYsIDB4MGFlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZiB9LAorCQl7IDB4MDYsIDB4YTAxMCB9LAorCQl7IDB4MDYsIDB4YTVlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4MDFlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4NzgwNSB9LAorCQl7IDB4MDYsIDB4OWU5YSB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGU3OCB9LAorCQl7IDB4MDYsIDB4MDQ5ZSB9LAorCQl7IDB4MDYsIDB4MTBlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4NzgwMyB9LAorCQl7IDB4MDYsIDB4OWUwZiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGU3OCB9LAorCQl7IDB4MDYsIDB4MDE5ZSB9LAorCQl7IDB4MDYsIDB4MDVhZSB9LAorCQl7IDB4MDYsIDB4MGNhZiB9LAorCQl7IDB4MDYsIDB4ODFmOCB9LAorCQl7IDB4MDYsIDB4YWY4MSB9LAorCQl7IDB4MDYsIDB4YTNhZiB9LAorCQl7IDB4MDYsIDB4ODFkYyB9LAorCQl7IDB4MDYsIDB4YWY4MiB9LAorCQl7IDB4MDYsIDB4MTNlZSB9LAorCQl7IDB4MDYsIDB4ODM0OCB9LAorCQl7IDB4MDYsIDB4MDBlZSB9LAorCQl7IDB4MDYsIDB4ODM0OSB9LAorCQl7IDB4MDYsIDB4MDBlMCB9LAorCQl7IDB4MDYsIDB4ODM1MSB9LAorCQl7IDB4MDYsIDB4MTBlNCB9LAorCQl7IDB4MDYsIDB4ODM1MSB9LAorCQl7IDB4MDYsIDB4NTgwMSB9LAorCQl7IDB4MDYsIDB4OWZlYSB9LAorCQl7IDB4MDYsIDB4ZDAwMCB9LAorCQl7IDB4MDYsIDB4ZDE4MCB9LAorCQl7IDB4MDYsIDB4MWY2NiB9LAorCQl7IDB4MDYsIDB4ZTJmOCB9LAorCQl7IDB4MDYsIDB4ZWFlMyB9LAorCQl7IDB4MDYsIDB4ZjhlYiB9LAorCQl7IDB4MDYsIDB4NWFmOCB9LAorCQl7IDB4MDYsIDB4MWUyMCB9LAorCQl7IDB4MDYsIDB4ZTZmOCB9LAorCQl7IDB4MDYsIDB4ZWFlNSB9LAorCQl7IDB4MDYsIDB4ZjhlYiB9LAorCQl7IDB4MDYsIDB4ZDMwMiB9LAorCQl7IDB4MDYsIDB4YjNmZSB9LAorCQl7IDB4MDYsIDB4ZTJmOCB9LAorCQl7IDB4MDYsIDB4N2NlZiB9LAorCQl7IDB4MDYsIDB4MzI1YiB9LAorCQl7IDB4MDYsIDB4ODBlMyB9LAorCQl7IDB4MDYsIDB4Zjg3ZCB9LAorCQl7IDB4MDYsIDB4OWUwMyB9LAorCQl7IDB4MDYsIDB4N2RmZiB9LAorCQl7IDB4MDYsIDB4ZmYwZCB9LAorCQl7IDB4MDYsIDB4NTgxYyB9LAorCQl7IDB4MDYsIDB4NTUxYSB9LAorCQl7IDB4MDYsIDB4NjUxMSB9LAorCQl7IDB4MDYsIDB4YTE5MCB9LAorCQl7IDB4MDYsIDB4ZDNlMiB9LAorCQl7IDB4MDYsIDB4ODM0OCB9LAorCQl7IDB4MDYsIDB4ZTM4MyB9LAorCQl7IDB4MDYsIDB4NDkxYiB9LAorCQl7IDB4MDYsIDB4NTZhYiB9LAorCQl7IDB4MDYsIDB4MDhlZiB9LAorCQl7IDB4MDYsIDB4NTZlNiB9LAorCQl7IDB4MDYsIDB4ODM0OCB9LAorCQl7IDB4MDYsIDB4ZTc4MyB9LAorCQl7IDB4MDYsIDB4NDkxMCB9LAorCQl7IDB4MDYsIDB4ZDE4MCB9LAorCQl7IDB4MDYsIDB4MWY2NiB9LAorCQl7IDB4MDYsIDB4YTAwNCB9LAorCQl7IDB4MDYsIDB4YjllMiB9LAorCQl7IDB4MDYsIDB4ODM0OCB9LAorCQl7IDB4MDYsIDB4ZTM4MyB9LAorCQl7IDB4MDYsIDB4NDllZiB9LAorCQl7IDB4MDYsIDB4NjVlMiB9LAorCQl7IDB4MDYsIDB4ODM0YSB9LAorCQl7IDB4MDYsIDB4ZTM4MyB9LAorCQl7IDB4MDYsIDB4NGIxYiB9LAorCQl7IDB4MDYsIDB4NTZhYSB9LAorCQl7IDB4MDYsIDB4MGVlZiB9LAorCQl7IDB4MDYsIDB4NTZlNiB9LAorCQl7IDB4MDYsIDB4ODM0YSB9LAorCQl7IDB4MDYsIDB4ZTc4MyB9LAorCQl7IDB4MDYsIDB4NGJlMiB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4ZTY4MyB9LAorCQl7IDB4MDYsIDB4NGNlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4YTAwMCB9LAorCQl7IDB4MDYsIDB4MGNhZiB9LAorCQl7IDB4MDYsIDB4ODFkYyB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGQxMCB9LAorCQl7IDB4MDYsIDB4ZTQ4MyB9LAorCQl7IDB4MDYsIDB4NGRhZSB9LAorCQl7IDB4MDYsIDB4MDQ4MCB9LAorCQl7IDB4MDYsIDB4ZTQ4MyB9LAorCQl7IDB4MDYsIDB4NGRlMCB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4NzgwMyB9LAorCQl7IDB4MDYsIDB4OWUwYiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGU3OCB9LAorCQl7IDB4MDYsIDB4MDQ5ZSB9LAorCQl7IDB4MDYsIDB4MDRlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4MDJlMCB9LAorCQl7IDB4MDYsIDB4ODMzMiB9LAorCQl7IDB4MDYsIDB4ZTE4MyB9LAorCQl7IDB4MDYsIDB4MzM1OSB9LAorCQl7IDB4MDYsIDB4MGZlMiB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4MGMyNCB9LAorCQl7IDB4MDYsIDB4NWFmMCB9LAorCQl7IDB4MDYsIDB4MWUxMiB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4OGNlNSB9LAorCQl7IDB4MDYsIDB4Zjg4ZCB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4MzBlMSB9LAorCQl7IDB4MDYsIDB4ODMzMSB9LAorCQl7IDB4MDYsIDB4NjgwMSB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4OGFlNSB9LAorCQl7IDB4MDYsIDB4Zjg4YiB9LAorCQl7IDB4MDYsIDB4YWUzNyB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGUwMyB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGNlMSB9LAorCQl7IDB4MDYsIDB4ODM0ZCB9LAorCQl7IDB4MDYsIDB4MWIwMSB9LAorCQl7IDB4MDYsIDB4OWUwNCB9LAorCQl7IDB4MDYsIDB4YWFhMSB9LAorCQl7IDB4MDYsIDB4YWVhOCB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGUwNCB9LAorCQl7IDB4MDYsIDB4ZWU4MyB9LAorCQl7IDB4MDYsIDB4NGYwMCB9LAorCQl7IDB4MDYsIDB4YWVhYiB9LAorCQl7IDB4MDYsIDB4ZTA4MyB9LAorCQl7IDB4MDYsIDB4NGY3OCB9LAorCQl7IDB4MDYsIDB4MDM5ZiB9LAorCQl7IDB4MDYsIDB4MTRlZSB9LAorCQl7IDB4MDYsIDB4ODM0ZSB9LAorCQl7IDB4MDYsIDB4MDVkMiB9LAorCQl7IDB4MDYsIDB4NDBkNiB9LAorCQl7IDB4MDYsIDB4NTU1NCB9LAorCQl7IDB4MDYsIDB4MDI4MiB9LAorCQl7IDB4MDYsIDB4MTdkMiB9LAorCQl7IDB4MDYsIDB4YTBkNiB9LAorCQl7IDB4MDYsIDB4YmEwMCB9LAorCQl7IDB4MDYsIDB4MDI4MiB9LAorCQl7IDB4MDYsIDB4MTdmZSB9LAorCQl7IDB4MDYsIDB4ZmRmYyB9LAorCQl7IDB4MDYsIDB4MDVmOCB9LAorCQl7IDB4MDYsIDB4ZTBmOCB9LAorCQl7IDB4MDYsIDB4NjBlMSB9LAorCQl7IDB4MDYsIDB4Zjg2MSB9LAorCQl7IDB4MDYsIDB4NjgwMiB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4NjBlNSB9LAorCQl7IDB4MDYsIDB4Zjg2MSB9LAorCQl7IDB4MDYsIDB4ZTBmOCB9LAorCQl7IDB4MDYsIDB4NDhlMSB9LAorCQl7IDB4MDYsIDB4Zjg0OSB9LAorCQl7IDB4MDYsIDB4NTgwZiB9LAorCQl7IDB4MDYsIDB4MWUwMiB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4NDhlNSB9LAorCQl7IDB4MDYsIDB4Zjg0OSB9LAorCQl7IDB4MDYsIDB4ZDAwMCB9LAorCQl7IDB4MDYsIDB4MDI4MiB9LAorCQl7IDB4MDYsIDB4NWJiZiB9LAorCQl7IDB4MDYsIDB4ODM1MCB9LAorCQl7IDB4MDYsIDB4ZWY0NiB9LAorCQl7IDB4MDYsIDB4ZGMxOSB9LAorCQl7IDB4MDYsIDB4ZGRkMCB9LAorCQl7IDB4MDYsIDB4MDEwMiB9LAorCQl7IDB4MDYsIDB4ODI1YiB9LAorCQl7IDB4MDYsIDB4MDI4MiB9LAorCQl7IDB4MDYsIDB4NzdlMCB9LAorCQl7IDB4MDYsIDB4Zjg2MCB9LAorCQl7IDB4MDYsIDB4ZTFmOCB9LAorCQl7IDB4MDYsIDB4NjE1OCB9LAorCQl7IDB4MDYsIDB4ZmRlNCB9LAorCQl7IDB4MDYsIDB4Zjg2MCB9LAorCQl7IDB4MDYsIDB4ZTVmOCB9LAorCQl7IDB4MDYsIDB4NjFmYyB9LAorCQl7IDB4MDYsIDB4MDRmOSB9LAorCQl7IDB4MDYsIDB4ZmFmYiB9LAorCQl7IDB4MDYsIDB4YzZiZiB9LAorCQl7IDB4MDYsIDB4Zjg0MCB9LAorCQl7IDB4MDYsIDB4YmU4MyB9LAorCQl7IDB4MDYsIDB4NTBhMCB9LAorCQl7IDB4MDYsIDB4MDEwMSB9LAorCQl7IDB4MDYsIDB4MDcxYiB9LAorCQl7IDB4MDYsIDB4ODljZiB9LAorCQl7IDB4MDYsIDB4ZDIwOCB9LAorCQl7IDB4MDYsIDB4ZWJkYiB9LAorCQl7IDB4MDYsIDB4MTliMiB9LAorCQl7IDB4MDYsIDB4ZmJmZiB9LAorCQl7IDB4MDYsIDB4ZmVmZCB9LAorCQl7IDB4MDYsIDB4MDRmOCB9LAorCQl7IDB4MDYsIDB4ZTBmOCB9LAorCQl7IDB4MDYsIDB4NDhlMSB9LAorCQl7IDB4MDYsIDB4Zjg0OSB9LAorCQl7IDB4MDYsIDB4NjgwOCB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4NDhlNSB9LAorCQl7IDB4MDYsIDB4Zjg0OSB9LAorCQl7IDB4MDYsIDB4NThmNyB9LAorCQl7IDB4MDYsIDB4ZTRmOCB9LAorCQl7IDB4MDYsIDB4NDhlNSB9LAorCQl7IDB4MDYsIDB4Zjg0OSB9LAorCQl7IDB4MDYsIDB4ZmMwNCB9LAorCQl7IDB4MDYsIDB4NGQyMCB9LAorCQl7IDB4MDYsIDB4MDAwMiB9LAorCQl7IDB4MDYsIDB4NGUyMiB9LAorCQl7IDB4MDYsIDB4MDAwMiB9LAorCQl7IDB4MDYsIDB4NGRkZiB9LAorCQl7IDB4MDYsIDB4ZmYwMSB9LAorCQl7IDB4MDYsIDB4NGVkZCB9LAorCQl7IDB4MDYsIDB4ZmYwMSB9LAorCQl7IDB4MDUsIDB4ODNkNCB9LAorCQl7IDB4MDYsIDB4ODAwMCB9LAorCQl7IDB4MDUsIDB4ODNkOCB9LAorCQl7IDB4MDYsIDB4ODA1MSB9LAorCQl7IDB4MDIsIDB4NjAxMCB9LAorCQl7IDB4MDMsIDB4ZGMwMCB9LAorCQl7IDB4MDUsIDB4ZmZmNiB9LAorCQl7IDB4MDYsIDB4MDBmYyB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCXsgMHgxZiwgMHgwMDAwIH0sCisJCXsgMHgwZCwgMHhmODgwIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0KIAl9OwogCiAJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdF8wLCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8wKSk7CiAKLQlpZiAobWRpb19yZWFkKGlvYWRkciwgMHgwNikgPT0gMHhjNDAwKSB7Ci0JCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8xW10gPSB7CisJbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7CisJbWRpb19wbHVzX21pbnVzKGlvYWRkciwgMHgwYiwgMHgwMDEwLCAweDAwZWYpOworCW1kaW9fcGx1c19taW51cyhpb2FkZHIsIDB4MGMsIDB4YTIwMCwgMHg1ZDAwKTsKKworCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXRfMSwgQVJSQVlfU0laRShwaHlfcmVnX2luaXRfMSkpOworCisJaWYgKHJ0bDgxNjhkX2VmdXNlX3JlYWQoaW9hZGRyLCAweDAxKSA9PSAweGIxKSB7CisJCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQkJeyAweDFmLCAweDAwMDIgfSwKKwkJCXsgMHgwNSwgMHg2NjlhIH0sCiAJCQl7IDB4MWYsIDB4MDAwNSB9LAotCQkJeyAweDAxLCAweDAzMDAgfSwKLQkJCXsgMHgxZiwgMHgwMDAwIH0sCi0JCQl7IDB4MTEsIDB4NDAxYyB9LAotCQkJeyAweDE2LCAweDQxMDAgfSwKKwkJCXsgMHgwNSwgMHg4MzMwIH0sCisJCQl7IDB4MDYsIDB4NjY5YSB9LAorCQkJeyAweDFmLCAweDAwMDIgfQorCQl9OworCQlpbnQgdmFsOworCisJCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisKKwkJdmFsID0gbWRpb19yZWFkKGlvYWRkciwgMHgwZCk7CisKKwkJaWYgKCh2YWwgJiAweDAwZmYpICE9IDB4MDA2YykgeworCQkJdTMyIHNldFtdID0geworCQkJCTB4MDA2NSwgMHgwMDY2LCAweDAwNjcsIDB4MDA2OCwKKwkJCQkweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMKKwkJCX07CisJCQlpbnQgaTsKKworCQkJbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7CisKKwkJCXZhbCAmPSAweGZmMDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZXQpOyBpKyspCisJCQkJbWRpb193cml0ZShpb2FkZHIsIDB4MGQsIHZhbCB8IHNldFtpXSk7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKKwkJCXsgMHgxZiwgMHgwMDAyIH0sCisJCQl7IDB4MDUsIDB4NjY2MiB9LAogCQkJeyAweDFmLCAweDAwMDUgfSwKLQkJCXsgMHgwNywgMHgwMDEwIH0sCi0JCQl7IDB4MDUsIDB4ODNkYyB9LAotCQkJeyAweDA2LCAweDA4N2QgfSwKLQkJCXsgMHgwNSwgMHg4MzAwIH0sCi0JCQl7IDB4MDYsIDB4MDEwMSB9LAotCQkJeyAweDA2LCAweDA1ZjggfSwKLQkJCXsgMHgwNiwgMHhmOWZhIH0sCi0JCQl7IDB4MDYsIDB4ZmJlZiB9LAotCQkJeyAweDA2LCAweDc5ZTIgfSwKLQkJCXsgMHgwNiwgMHg4MzVmIH0sCi0JCQl7IDB4MDYsIDB4ZTBmOCB9LAotCQkJeyAweDA2LCAweDlhZTEgfSwKLQkJCXsgMHgwNiwgMHhmODliIH0sCi0JCQl7IDB4MDYsIDB4ZWYzMSB9LAotCQkJeyAweDA2LCAweDNiNjUgfSwKLQkJCXsgMHgwNiwgMHhhYTA3IH0sCi0JCQl7IDB4MDYsIDB4ODFlNCB9LAotCQkJeyAweDA2LCAweGY4OWEgfSwKLQkJCXsgMHgwNiwgMHhlNWY4IH0sCi0JCQl7IDB4MDYsIDB4OWJhZiB9LAotCQkJeyAweDA2LCAweDA2YWUgfSwKLQkJCXsgMHgwNSwgMHg4M2RjIH0sCi0JCQl7IDB4MDYsIDB4ODMwMCB9LAorCQkJeyAweDA1LCAweDgzMzAgfSwKKwkJCXsgMHgwNiwgMHg2NjYyIH0KIAkJfTsKIAotCQlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0XzEsCi0JCQkgICAgICBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8xKSk7CisJCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiAJfQogCi0JbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMCk7CisJbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7CisJbWRpb19wYXRjaChpb2FkZHIsIDB4MGQsIDB4MDMwMCk7CisJbWRpb19wYXRjaChpb2FkZHIsIDB4MGYsIDB4MDAxMCk7CisKKwltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAyKTsKKwltZGlvX3BsdXNfbWludXMoaW9hZGRyLCAweDAyLCAweDAxMDAsIDB4MDYwMCk7CisJbWRpb19wbHVzX21pbnVzKGlvYWRkciwgMHgwMywgMHgwMDAwLCAweGUwMDApOworCisJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdF8yLCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8yKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxNjhkXzJfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3sKKwlzdGF0aWMgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0XzBbXSA9IHsKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDA2LCAweDQwNjQgfSwKKwkJeyAweDA3LCAweDI4NjMgfSwKKwkJeyAweDA4LCAweDA1OWMgfSwKKwkJeyAweDA5LCAweDI2YjQgfSwKKwkJeyAweDBhLCAweDZhMTkgfSwKKwkJeyAweDBiLCAweGRjYzggfSwKKwkJeyAweDEwLCAweGYwNmQgfSwKKwkJeyAweDE0LCAweDdmNjggfSwKKwkJeyAweDE4LCAweDdmZDkgfSwKKwkJeyAweDFjLCAweGYwZmYgfSwKKwkJeyAweDFkLCAweDNkOWMgfSwKKwkJeyAweDFmLCAweDAwMDMgfSwKKwkJeyAweDEyLCAweGY0OWYgfSwKKwkJeyAweDEzLCAweDA3MGIgfSwKKwkJeyAweDFhLCAweDA1YWQgfSwKKwkJeyAweDE0LCAweDk0YzAgfSwKKworCQl7IDB4MWYsIDB4MDAwMiB9LAorCQl7IDB4MDYsIDB4NTU2MSB9LAorCQl7IDB4MWYsIDB4MDAwNSB9LAorCQl7IDB4MDUsIDB4ODMzMiB9LAorCQl7IDB4MDYsIDB4NTU2MSB9CisJfTsKKwlzdGF0aWMgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0XzFbXSA9IHsKKwkJeyAweDFmLCAweDAwMDUgfSwKKwkJeyAweDA1LCAweGZmYzIgfSwKKwkJeyAweDFmLCAweDAwMDUgfSwKKwkJeyAweDA1LCAweDgwMDAgfSwKKwkJeyAweDA2LCAweGY4ZjkgfSwKKwkJeyAweDA2LCAweGZhZWUgfSwKKwkJeyAweDA2LCAweGY4ZWEgfSwKKwkJeyAweDA2LCAweDAwZWUgfSwKKwkJeyAweDA2LCAweGY4ZWIgfSwKKwkJeyAweDA2LCAweDAwZTIgfSwKKwkJeyAweDA2LCAweGY4N2MgfSwKKwkJeyAweDA2LCAweGUzZjggfSwKKwkJeyAweDA2LCAweDdkYTUgfSwKKwkJeyAweDA2LCAweDExMTEgfSwKKwkJeyAweDA2LCAweDEyZDIgfSwKKwkJeyAweDA2LCAweDQwZDYgfSwKKwkJeyAweDA2LCAweDQ0NDQgfSwKKwkJeyAweDA2LCAweDAyODEgfSwKKwkJeyAweDA2LCAweGM2ZDIgfSwKKwkJeyAweDA2LCAweGEwZDYgfSwKKwkJeyAweDA2LCAweGFhYWEgfSwKKwkJeyAweDA2LCAweDAyODEgfSwKKwkJeyAweDA2LCAweGM2YWUgfSwKKwkJeyAweDA2LCAweDBmYTUgfSwKKwkJeyAweDA2LCAweDQ0NDQgfSwKKwkJeyAweDA2LCAweDAyYWUgfSwKKwkJeyAweDA2LCAweDRkYTUgfSwKKwkJeyAweDA2LCAweGFhYWEgfSwKKwkJeyAweDA2LCAweDAyYWUgfSwKKwkJeyAweDA2LCAweDQ3YWYgfSwKKwkJeyAweDA2LCAweDgxYzIgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRlMDAgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRkMGYgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRjMGYgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRmMDAgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDUxMDAgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRhZmYgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRiZmYgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDMwZTEgfSwKKwkJeyAweDA2LCAweDgzMzEgfSwKKwkJeyAweDA2LCAweDU4ZmUgfSwKKwkJeyAweDA2LCAweGU0ZjggfSwKKwkJeyAweDA2LCAweDhhZTUgfSwKKwkJeyAweDA2LCAweGY4OGIgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDMyZTEgfSwKKwkJeyAweDA2LCAweDgzMzMgfSwKKwkJeyAweDA2LCAweDU5MGYgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDRkMGMgfSwKKwkJeyAweDA2LCAweDI0NWEgfSwKKwkJeyAweDA2LCAweGYwMWUgfSwKKwkJeyAweDA2LCAweDEyZTQgfSwKKwkJeyAweDA2LCAweGY4OGMgfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDhkYWYgfSwKKwkJeyAweDA2LCAweDgxYzIgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRmMTAgfSwKKwkJeyAweDA2LCAweGU0ODMgfSwKKwkJeyAweDA2LCAweDRmZTAgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDc4MDAgfSwKKwkJeyAweDA2LCAweDlmMGEgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRmYTAgfSwKKwkJeyAweDA2LCAweDEwYTUgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRlMDEgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRlNzggfSwKKwkJeyAweDA2LCAweDA1OWUgfSwKKwkJeyAweDA2LCAweDlhZTAgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDc4MDQgfSwKKwkJeyAweDA2LCAweDllMTAgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRlNzggfSwKKwkJeyAweDA2LCAweDAzOWUgfSwKKwkJeyAweDA2LCAweDBmZTAgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDc4MDEgfSwKKwkJeyAweDA2LCAweDllMDUgfSwKKwkJeyAweDA2LCAweGFlMGMgfSwKKwkJeyAweDA2LCAweGFmODEgfSwKKwkJeyAweDA2LCAweGE3YWYgfSwKKwkJeyAweDA2LCAweDgxNTIgfSwKKwkJeyAweDA2LCAweGFmODEgfSwKKwkJeyAweDA2LCAweDhiYWYgfSwKKwkJeyAweDA2LCAweDgxYzIgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDQ4MDAgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDQ5MDAgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDUxMTAgfSwKKwkJeyAweDA2LCAweGU0ODMgfSwKKwkJeyAweDA2LCAweDUxNTggfSwKKwkJeyAweDA2LCAweDAxOWYgfSwKKwkJeyAweDA2LCAweGVhZDAgfSwKKwkJeyAweDA2LCAweDAwZDEgfSwKKwkJeyAweDA2LCAweDgwMWYgfSwKKwkJeyAweDA2LCAweDY2ZTIgfSwKKwkJeyAweDA2LCAweGY4ZWEgfSwKKwkJeyAweDA2LCAweGUzZjggfSwKKwkJeyAweDA2LCAweGViNWEgfSwKKwkJeyAweDA2LCAweGY4MWUgfSwKKwkJeyAweDA2LCAweDIwZTYgfSwKKwkJeyAweDA2LCAweGY4ZWEgfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweGViZDMgfSwKKwkJeyAweDA2LCAweDAyYjMgfSwKKwkJeyAweDA2LCAweGZlZTIgfSwKKwkJeyAweDA2LCAweGY4N2MgfSwKKwkJeyAweDA2LCAweGVmMzIgfSwKKwkJeyAweDA2LCAweDViODAgfSwKKwkJeyAweDA2LCAweGUzZjggfSwKKwkJeyAweDA2LCAweDdkOWUgfSwKKwkJeyAweDA2LCAweDAzN2QgfSwKKwkJeyAweDA2LCAweGZmZmYgfSwKKwkJeyAweDA2LCAweDBkNTggfSwKKwkJeyAweDA2LCAweDFjNTUgfSwKKwkJeyAweDA2LCAweDFhNjUgfSwKKwkJeyAweDA2LCAweDExYTEgfSwKKwkJeyAweDA2LCAweDkwZDMgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDQ4ZTMgfSwKKwkJeyAweDA2LCAweDgzNDkgfSwKKwkJeyAweDA2LCAweDFiNTYgfSwKKwkJeyAweDA2LCAweGFiMDggfSwKKwkJeyAweDA2LCAweGVmNTYgfSwKKwkJeyAweDA2LCAweGU2ODMgfSwKKwkJeyAweDA2LCAweDQ4ZTcgfSwKKwkJeyAweDA2LCAweDgzNDkgfSwKKwkJeyAweDA2LCAweDEwZDEgfSwKKwkJeyAweDA2LCAweDgwMWYgfSwKKwkJeyAweDA2LCAweDY2YTAgfSwKKwkJeyAweDA2LCAweDA0YjkgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDQ4ZTMgfSwKKwkJeyAweDA2LCAweDgzNDkgfSwKKwkJeyAweDA2LCAweGVmNjUgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDRhZTMgfSwKKwkJeyAweDA2LCAweDgzNGIgfSwKKwkJeyAweDA2LCAweDFiNTYgfSwKKwkJeyAweDA2LCAweGFhMGUgfSwKKwkJeyAweDA2LCAweGVmNTYgfSwKKwkJeyAweDA2LCAweGU2ODMgfSwKKwkJeyAweDA2LCAweDRhZTcgfSwKKwkJeyAweDA2LCAweDgzNGIgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDRkZTYgfSwKKwkJeyAweDA2LCAweDgzNGMgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRkYTAgfSwKKwkJeyAweDA2LCAweDAwMGMgfSwKKwkJeyAweDA2LCAweGFmODEgfSwKKwkJeyAweDA2LCAweDhiZTAgfSwKKwkJeyAweDA2LCAweDgzNGQgfSwKKwkJeyAweDA2LCAweDEwZTQgfSwKKwkJeyAweDA2LCAweDgzNGQgfSwKKwkJeyAweDA2LCAweGFlMDQgfSwKKwkJeyAweDA2LCAweDgwZTQgfSwKKwkJeyAweDA2LCAweDgzNGQgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDRlNzggfSwKKwkJeyAweDA2LCAweDAzOWUgfSwKKwkJeyAweDA2LCAweDBiZTAgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDc4MDQgfSwKKwkJeyAweDA2LCAweDllMDQgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRlMDIgfSwKKwkJeyAweDA2LCAweGUwODMgfSwKKwkJeyAweDA2LCAweDMyZTEgfSwKKwkJeyAweDA2LCAweDgzMzMgfSwKKwkJeyAweDA2LCAweDU5MGYgfSwKKwkJeyAweDA2LCAweGUyODMgfSwKKwkJeyAweDA2LCAweDRkMGMgfSwKKwkJeyAweDA2LCAweDI0NWEgfSwKKwkJeyAweDA2LCAweGYwMWUgfSwKKwkJeyAweDA2LCAweDEyZTQgfSwKKwkJeyAweDA2LCAweGY4OGMgfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDhkZTAgfSwKKwkJeyAweDA2LCAweDgzMzAgfSwKKwkJeyAweDA2LCAweGUxODMgfSwKKwkJeyAweDA2LCAweDMxNjggfSwKKwkJeyAweDA2LCAweDAxZTQgfSwKKwkJeyAweDA2LCAweGY4OGEgfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDhiYWUgfSwKKwkJeyAweDA2LCAweDM3ZWUgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDAzZTAgfSwKKwkJeyAweDA2LCAweDgzNGMgfSwKKwkJeyAweDA2LCAweGUxODMgfSwKKwkJeyAweDA2LCAweDRkMWIgfSwKKwkJeyAweDA2LCAweDAxOWUgfSwKKwkJeyAweDA2LCAweDA0YWEgfSwKKwkJeyAweDA2LCAweGExYWUgfSwKKwkJeyAweDA2LCAweGE4ZWUgfSwKKwkJeyAweDA2LCAweDgzNGUgfSwKKwkJeyAweDA2LCAweDA0ZWUgfSwKKwkJeyAweDA2LCAweDgzNGYgfSwKKwkJeyAweDA2LCAweDAwYWUgfSwKKwkJeyAweDA2LCAweGFiZTAgfSwKKwkJeyAweDA2LCAweDgzNGYgfSwKKwkJeyAweDA2LCAweDc4MDMgfSwKKwkJeyAweDA2LCAweDlmMTQgfSwKKwkJeyAweDA2LCAweGVlODMgfSwKKwkJeyAweDA2LCAweDRlMDUgfSwKKwkJeyAweDA2LCAweGQyNDAgfSwKKwkJeyAweDA2LCAweGQ2NTUgfSwKKwkJeyAweDA2LCAweDU0MDIgfSwKKwkJeyAweDA2LCAweDgxYzYgfSwKKwkJeyAweDA2LCAweGQyYTAgfSwKKwkJeyAweDA2LCAweGQ2YmEgfSwKKwkJeyAweDA2LCAweDAwMDIgfSwKKwkJeyAweDA2LCAweDgxYzYgfSwKKwkJeyAweDA2LCAweGZlZmQgfSwKKwkJeyAweDA2LCAweGZjMDUgfSwKKwkJeyAweDA2LCAweGY4ZTAgfSwKKwkJeyAweDA2LCAweGY4NjAgfSwKKwkJeyAweDA2LCAweGUxZjggfSwKKwkJeyAweDA2LCAweDYxNjggfSwKKwkJeyAweDA2LCAweDAyZTQgfSwKKwkJeyAweDA2LCAweGY4NjAgfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDYxZTAgfSwKKwkJeyAweDA2LCAweGY4NDggfSwKKwkJeyAweDA2LCAweGUxZjggfSwKKwkJeyAweDA2LCAweDQ5NTggfSwKKwkJeyAweDA2LCAweDBmMWUgfSwKKwkJeyAweDA2LCAweDAyZTQgfSwKKwkJeyAweDA2LCAweGY4NDggfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDQ5ZDAgfSwKKwkJeyAweDA2LCAweDAwMDIgfSwKKwkJeyAweDA2LCAweDgyMGEgfSwKKwkJeyAweDA2LCAweGJmODMgfSwKKwkJeyAweDA2LCAweDUwZWYgfSwKKwkJeyAweDA2LCAweDQ2ZGMgfSwKKwkJeyAweDA2LCAweDE5ZGQgfSwKKwkJeyAweDA2LCAweGQwMDEgfSwKKwkJeyAweDA2LCAweDAyODIgfSwKKwkJeyAweDA2LCAweDBhMDIgfSwKKwkJeyAweDA2LCAweDgyMjYgfSwKKwkJeyAweDA2LCAweGUwZjggfSwKKwkJeyAweDA2LCAweDYwZTEgfSwKKwkJeyAweDA2LCAweGY4NjEgfSwKKwkJeyAweDA2LCAweDU4ZmQgfSwKKwkJeyAweDA2LCAweGU0ZjggfSwKKwkJeyAweDA2LCAweDYwZTUgfSwKKwkJeyAweDA2LCAweGY4NjEgfSwKKwkJeyAweDA2LCAweGZjMDQgfSwKKwkJeyAweDA2LCAweGY5ZmEgfSwKKwkJeyAweDA2LCAweGZiYzYgfSwKKwkJeyAweDA2LCAweGJmZjggfSwKKwkJeyAweDA2LCAweDQwYmUgfSwKKwkJeyAweDA2LCAweDgzNTAgfSwKKwkJeyAweDA2LCAweGEwMDEgfSwKKwkJeyAweDA2LCAweDAxMDcgfSwKKwkJeyAweDA2LCAweDFiODkgfSwKKwkJeyAweDA2LCAweGNmZDIgfSwKKwkJeyAweDA2LCAweDA4ZWIgfSwKKwkJeyAweDA2LCAweGRiMTkgfSwKKwkJeyAweDA2LCAweGIyZmIgfSwKKwkJeyAweDA2LCAweGZmZmUgfSwKKwkJeyAweDA2LCAweGZkMDQgfSwKKwkJeyAweDA2LCAweGY4ZTAgfSwKKwkJeyAweDA2LCAweGY4NDggfSwKKwkJeyAweDA2LCAweGUxZjggfSwKKwkJeyAweDA2LCAweDQ5NjggfSwKKwkJeyAweDA2LCAweDA4ZTQgfSwKKwkJeyAweDA2LCAweGY4NDggfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDQ5NTggfSwKKwkJeyAweDA2LCAweGY3ZTQgfSwKKwkJeyAweDA2LCAweGY4NDggfSwKKwkJeyAweDA2LCAweGU1ZjggfSwKKwkJeyAweDA2LCAweDQ5ZmMgfSwKKwkJeyAweDA2LCAweDA0NGQgfSwKKwkJeyAweDA2LCAweDIwMDAgfSwKKwkJeyAweDA2LCAweDAyNGUgfSwKKwkJeyAweDA2LCAweDIyMDAgfSwKKwkJeyAweDA2LCAweDAyNGQgfSwKKwkJeyAweDA2LCAweGRmZmYgfSwKKwkJeyAweDA2LCAweDAxNGUgfSwKKwkJeyAweDA2LCAweGRkZmYgfSwKKwkJeyAweDA2LCAweDAxMDAgfSwKKwkJeyAweDA1LCAweDgzZDggfSwKKwkJeyAweDA2LCAweDgwMDAgfSwKKwkJeyAweDAzLCAweGRjMDAgfSwKKwkJeyAweDA1LCAweGZmZjYgfSwKKwkJeyAweDA2LCAweDAwZmMgfSwKKwkJeyAweDFmLCAweDAwMDAgfSwKKworCQl7IDB4MWYsIDB4MDAwMCB9LAorCQl7IDB4MGQsIDB4Zjg4MCB9LAorCQl7IDB4MWYsIDB4MDAwMCB9CisJfTsKKworCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXRfMCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXRfMCkpOworCisJaWYgKHJ0bDgxNjhkX2VmdXNlX3JlYWQoaW9hZGRyLCAweDAxKSA9PSAweGIxKSB7CisJCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQkJeyAweDFmLCAweDAwMDIgfSwKKwkJCXsgMHgwNSwgMHg2NjlhIH0sCisJCQl7IDB4MWYsIDB4MDAwNSB9LAorCQkJeyAweDA1LCAweDgzMzAgfSwKKwkJCXsgMHgwNiwgMHg2NjlhIH0sCisKKwkJCXsgMHgxZiwgMHgwMDAyIH0KKwkJfTsKKwkJaW50IHZhbDsKKworCQlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOworCisJCXZhbCA9IG1kaW9fcmVhZChpb2FkZHIsIDB4MGQpOworCQlpZiAoKHZhbCAmIDB4MDBmZikgIT0gMHgwMDZjKSB7CisJCQl1MzIgc2V0W10gPSB7CisJCQkJMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LAorCQkJCTB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YworCQkJfTsKKwkJCWludCBpOworCisJCQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAyKTsKKworCQkJdmFsICY9IDB4ZmYwMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNldCk7IGkrKykKKwkJCQltZGlvX3dyaXRlKGlvYWRkciwgMHgwZCwgdmFsIHwgc2V0W2ldKTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQkJeyAweDFmLCAweDAwMDIgfSwKKwkJCXsgMHgwNSwgMHgyNjQyIH0sCisJCQl7IDB4MWYsIDB4MDAwNSB9LAorCQkJeyAweDA1LCAweDgzMzAgfSwKKwkJCXsgMHgwNiwgMHgyNjQyIH0KKwkJfTsKKworCQlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOworCX0KKworCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDIpOworCW1kaW9fcGx1c19taW51cyhpb2FkZHIsIDB4MDIsIDB4MDEwMCwgMHgwNjAwKTsKKwltZGlvX3BsdXNfbWludXMoaW9hZGRyLCAweDAzLCAweDAwMDAsIDB4ZTAwMCk7CisKKwltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAxKTsKKwltZGlvX3dyaXRlKGlvYWRkciwgMHgxNywgMHgwY2MwKTsKKworCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDIpOworCW1kaW9fcGF0Y2goaW9hZGRyLCAweDBmLCAweDAwMTcpOworCisJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdF8xLCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8xKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxNjhkXzNfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3sKKwlzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKKwkJeyAweDFmLCAweDAwMDIgfSwKKwkJeyAweDEwLCAweDAwMDggfSwKKwkJeyAweDBkLCAweDAwNmMgfSwKKworCQl7IDB4MWYsIDB4MDAwMCB9LAorCQl7IDB4MGQsIDB4Zjg4MCB9LAorCisJCXsgMHgxZiwgMHgwMDAxIH0sCisJCXsgMHgxNywgMHgwY2MwIH0sCisKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDBiLCAweGE0ZDggfSwKKwkJeyAweDA5LCAweDI4MWMgfSwKKwkJeyAweDA3LCAweDI4ODMgfSwKKwkJeyAweDBhLCAweDZiMzUgfSwKKwkJeyAweDFkLCAweDNkYTQgfSwKKwkJeyAweDFjLCAweGVmZmQgfSwKKwkJeyAweDE0LCAweDdmNTIgfSwKKwkJeyAweDE4LCAweDdmYzYgfSwKKwkJeyAweDA4LCAweDA2MDEgfSwKKwkJeyAweDA2LCAweDQwNjMgfSwKKwkJeyAweDEwLCAweGYwNzQgfSwKKwkJeyAweDFmLCAweDAwMDMgfSwKKwkJeyAweDEzLCAweDA3ODkgfSwKKwkJeyAweDEyLCAweGY0YmQgfSwKKwkJeyAweDFhLCAweDA0ZmQgfSwKKwkJeyAweDE0LCAweDg0YjAgfSwKKwkJeyAweDFmLCAweDAwMDAgfSwKKwkJeyAweDAwLCAweDkyMDAgfSwKKworCQl7IDB4MWYsIDB4MDAwNSB9LAorCQl7IDB4MDEsIDB4MDM0MCB9LAorCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MDQsIDB4NDAwMCB9LAorCQl7IDB4MDMsIDB4MWQyMSB9LAorCQl7IDB4MDIsIDB4MGMzMiB9LAorCQl7IDB4MDEsIDB4MDIwMCB9LAorCQl7IDB4MDAsIDB4NTU1NCB9LAorCQl7IDB4MDQsIDB4NDgwMCB9LAorCQl7IDB4MDQsIDB4NDAwMCB9LAorCQl7IDB4MDQsIDB4ZjAwMCB9LAorCQl7IDB4MDMsIDB4ZGYwMSB9LAorCQl7IDB4MDIsIDB4ZGYyMCB9LAorCQl7IDB4MDEsIDB4MTAxYSB9LAorCQl7IDB4MDAsIDB4YTBmZiB9LAorCQl7IDB4MDQsIDB4ZjgwMCB9LAorCQl7IDB4MDQsIDB4ZjAwMCB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCXsgMHgxZiwgMHgwMDA3IH0sCisJCXsgMHgxZSwgMHgwMDIzIH0sCisJCXsgMHgxNiwgMHgwMDAwIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0KKwl9OworCisJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsODEwMmVfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKQEAgLTE3OTIsNyArMjY2NCwxMyBAQAogCQlydGw4MTY4Y3BfMl9od19waHlfY29uZmlnKGlvYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKLQkJcnRsODE2OGRfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlydGw4MTY4ZF8xX2h3X3BoeV9jb25maWcoaW9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgorCQlydGw4MTY4ZF8yX2h3X3BoeV9jb25maWcoaW9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCQlydGw4MTY4ZF8zX2h3X3BoeV9jb25maWcoaW9hZGRyKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMjMyMiw2ICszMjAwLDE0IEBACiAJfQogCiAJcnRsODE2OV9pbml0X3BoeShkZXYsIHRwKTsKKworCS8qCisJICogUHJldGVuZCB3ZSBhcmUgdXNpbmcgVkxBTnM7IFRoaXMgYnlwYXNzZXMgYSBuYXN0eSBidWcgd2hlcmUKKwkgKiBJbnRlcnJ1cHRzIHN0b3AgZmxvd2luZyBvbiBoaWdoIGxvYWQgb24gODExMFNDZCBjb250cm9sbGVycy4KKwkgKi8KKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDUpCisJCVJUTF9XMTYoQ1BsdXNDbWQsIFJUTF9SMTYoQ1BsdXNDbWQpIHwgUnhWbGFuKTsKKwogCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmcGRldi0+ZGV2LCB0cC0+ZmVhdHVyZXMgJiBSVExfRkVBVFVSRV9XT0wpOwogCiBvdXQ6CkBAIC0yODYzLDYgKzM3NDksOCBAQAogCWJyZWFrOwogCiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI1OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CiAJCXJ0bF9od19zdGFydF84MTY4ZChpb2FkZHIsIHBkZXYpOwogCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcnguYyBiL2RyaXZlcnMvbmV0L3NmYy9yeC5jCmluZGV4IDAxZjk0MzIuLjk4YmZmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9yeC5jCkBAIC00NDQsNyArNDQ0LDggQEAKICAqIHRoZSBhcHByb3ByaWF0ZSBMUk8gbWV0aG9kCiAgKi8KIHN0YXRpYyB2b2lkIGVmeF9yeF9wYWNrZXRfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwKLQkJCSAgICAgIHN0cnVjdCBlZnhfcnhfYnVmZmVyICpyeF9idWYpCisJCQkgICAgICBzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmLAorCQkJICAgICAgYm9vbCBjaGVja3N1bW1lZCkKIHsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSAmY2hhbm5lbC0+bmFwaV9zdHI7CiAKQEAgLTQ2Niw3ICs0NjcsOCBAQAogCQlza2ItPmxlbiA9IHJ4X2J1Zi0+bGVuOwogCQlza2ItPmRhdGFfbGVuID0gcnhfYnVmLT5sZW47CiAJCXNrYi0+dHJ1ZXNpemUgKz0gcnhfYnVmLT5sZW47Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCXNrYi0+aXBfc3VtbWVkID0KKwkJCWNoZWNrc3VtbWVkID8gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgOiBDSEVDS1NVTV9OT05FOwogCiAJCW5hcGlfZ3JvX2ZyYWdzKG5hcGkpOwogCkBAIC00NzUsNiArNDc3LDcgQEAKIAkJcnhfYnVmLT5wYWdlID0gTlVMTDsKIAl9IGVsc2UgewogCQlFRlhfQlVHX09OX1BBUkFOT0lEKCFyeF9idWYtPnNrYik7CisJCUVGWF9CVUdfT05fUEFSQU5PSUQoIWNoZWNrc3VtbWVkKTsKIAogCQluYXBpX2dyb19yZWNlaXZlKG5hcGksIHJ4X2J1Zi0+c2tiKTsKIAkJcnhfYnVmLT5za2IgPSBOVUxMOwpAQCAtNTcwLDcgKzU3Myw3IEBACiAJfQogCiAJaWYgKGxpa2VseShjaGVja3N1bW1lZCB8fCByeF9idWYtPnBhZ2UpKSB7Ci0JCWVmeF9yeF9wYWNrZXRfbHJvKGNoYW5uZWwsIHJ4X2J1Zik7CisJCWVmeF9yeF9wYWNrZXRfbHJvKGNoYW5uZWwsIHJ4X2J1ZiwgY2hlY2tzdW1tZWQpOwogCQlnb3RvIGRvbmU7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaF9ldGguYyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5jCmluZGV4IGY0OWQwODAwLi41MjhiOTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguYworKysgYi9kcml2ZXJzL25ldC9zaF9ldGguYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSAic2hfZXRoLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvc3RtbWFjL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlYWE1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9LY29uZmlnCkBAIC0wLDAgKzEsNTMgQEAKK2NvbmZpZyBTVE1NQUNfRVRICisJdHJpc3RhdGUgIlNUTWljcm9lbGVjdHJvbmljcyAxMC8xMDAvMTAwMCBFdGhlcm5ldCBkcml2ZXIiCisJc2VsZWN0IE1JSQorCXNlbGVjdCBQSFlMSUIKKwlkZXBlbmRzIG9uIE5FVERFVklDRVMgJiYgQ1BVX1NVQlRZUEVfU1Q0MAorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFNUIE1BQyAxMC8xMDAvMTAwMCBvbi1jaGlwIEV0aGVybmV0CisJICBjb250cm9sbGVycy4gU1QgRXRoZXJuZXQgSVBzIGFyZSBidWlsdCBhcm91bmQgYSBTeW5vcHN5cyBJUCBDb3JlLgorCitpZiBTVE1NQUNfRVRICisKK2NvbmZpZyBTVE1NQUNfREEKKwlib29sICJTVE1NQUMgRE1BIGFyYml0cmF0aW9uIHNjaGVtZSIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTZWxlY3RpbmcgdGhpcyBvcHRpb24sIHJ4IGhhcyBwcmlvcml0eSBvdmVyIFR4IChvbmx5IGZvciBHaWdhCisJICBFdGhlcm5ldCBkZXZpY2UpLgorCSAgQnkgZGVmYXVsdCwgdGhlIERNQSBhcmJpdHJhdGlvbiBzY2hlbWUgaXMgYmFzZWQgb24gUm91bmQtcm9iaW4KKwkgIChyeDp0eCBwcmlvcml0eSBpcyAxOjEpLgorCitjb25maWcgU1RNTUFDX0RVQUxfTUFDCisJYm9vbCAiU1RNTUFDOiBkdWFsIG1hYyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlZmF1bHQgbgorICAgICAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBTVE1NQUNfRVRIICYmICFTVE1NQUNfVElNRVIKKwloZWxwCisJICBTb21lIFNUIFNvQ3MgKGZvciBleGFtcGxlIHRoZSBzdHg3MTQxIGFuZCBzdHg3MjAwYzIpIGhhdmUgdHdvCisJICBFdGhlcm5ldCBDb250cm9sbGVycy4gVGhpcyBvcHRpb24gdHVybnMgb24gdGhlIHNlY29uZCBFdGhlcm5ldAorCSAgZGV2aWNlIG9uIHRoaXMga2luZCBvZiBwbGF0Zm9ybXMuCisKK2NvbmZpZyBTVE1NQUNfVElNRVIKKwlib29sICJTVE1NQUMgVGltZXIgb3B0aW1pc2F0aW9uIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFVzZSBhbiBleHRlcm5hbCB0aW1lciBmb3IgbWl0aWdhdGluZyB0aGUgbnVtYmVyIG9mIG5ldHdvcmsKKwkgIGludGVycnVwdHMuCisKK2Nob2ljZQorICAgICAgICBwcm9tcHQgIlNlbGVjdCBUaW1lciBkZXZpY2UiCisgICAgICAgIGRlcGVuZHMgb24gU1RNTUFDX1RJTUVSCisKK2NvbmZpZyBTVE1NQUNfVE1VX1RJTUVSCisgICAgICAgIGJvb2wgIlRNVSBjaGFubmVsIDIiCisgICAgICAgIGRlcGVuZHMgb24gQ1BVX1NINAorCWhlbHAKKworY29uZmlnIFNUTU1BQ19SVENfVElNRVIKKyAgICAgICAgYm9vbCAiUmVhbCB0aW1lIGNsb2NrIgorICAgICAgICBkZXBlbmRzIG9uIFJUQ19DTEFTUworCWhlbHAKKworZW5kY2hvaWNlCisKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9zdG1tYWMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkN2E1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9NYWtlZmlsZQpAQCAtMCwwICsxLDQgQEAKK29iai0kKENPTkZJR19TVE1NQUNfRVRIKSArPSBzdG1tYWMubworc3RtbWFjLSQoQ09ORklHX1NUTU1BQ19USU1FUikgKz0gc3RtbWFjX3RpbWVyLm8KK3N0bW1hYy1vYmpzOj0gc3RtbWFjX21haW4ubyBzdG1tYWNfZXRodG9vbC5vIHN0bW1hY19tZGlvLm8gXAorCQltYWMxMDAubyAgZ21hYy5vICQoc3RtbWFjLXkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvY29tbW9uLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5ZTUxOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9jb21tb24uaApAQCAtMCwwICsxLDMzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgU1RNTUFDIENvbW1vbiBIZWFkZXIgRmlsZQorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZGVzY3MuaCIKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgIERNQSBDUlMgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIE1hcHBpbmcKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFCQkweDAwMDAxMDAwCS8qIEJ1cyBNb2RlICovCisjZGVmaW5lIERNQV9YTVRfUE9MTF9ERU1BTkQJMHgwMDAwMTAwNAkvKiBUcmFuc21pdCBQb2xsIERlbWFuZCAqLworI2RlZmluZSBETUFfUkNWX1BPTExfREVNQU5ECTB4MDAwMDEwMDgJLyogUmVjZWl2ZWQgUG9sbCBEZW1hbmQgKi8KKyNkZWZpbmUgRE1BX1JDVl9CQVNFX0FERFIJMHgwMDAwMTAwYwkvKiBSZWNlaXZlIExpc3QgQmFzZSAqLworI2RlZmluZSBETUFfVFhfQkFTRV9BRERSCTB4MDAwMDEwMTAJLyogVHJhbnNtaXQgTGlzdCBCYXNlICovCisjZGVmaW5lIERNQV9TVEFUVVMJCTB4MDAwMDEwMTQJLyogU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9DT05UUk9MCQkweDAwMDAxMDE4CS8qIEN0cmwgKE9wZXJhdGlvbmFsIE1vZGUpICovCisjZGVmaW5lIERNQV9JTlRSX0VOQQkJMHgwMDAwMTAxYwkvKiBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIERNQV9NSVNTRURfRlJBTUVfQ1RSCTB4MDAwMDEwMjAJLyogTWlzc2VkIEZyYW1lIENvdW50ZXIgKi8KKyNkZWZpbmUgRE1BX0NVUl9UWF9CVUZfQUREUgkweDAwMDAxMDUwCS8qIEN1cnJlbnQgSG9zdCBUeCBCdWZmZXIgKi8KKyNkZWZpbmUgRE1BX0NVUl9SWF9CVUZfQUREUgkweDAwMDAxMDU0CS8qIEN1cnJlbnQgSG9zdCBSeCBCdWZmZXIgKi8KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgIERNQSBDb250cm9sIHJlZ2lzdGVyIGRlZmluZXMKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBETUFfQ09OVFJPTF9TVAkJMHgwMDAwMjAwMAkvKiBTdGFydC9TdG9wIFRyYW5zbWlzc2lvbiAqLworI2RlZmluZSBETUFfQ09OVFJPTF9TUgkJMHgwMDAwMDAwMgkvKiBTdGFydC9TdG9wIFJlY2VpdmUgKi8KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgIERNQSBJbnRlcnJ1cHQgRW5hYmxlIHJlZ2lzdGVyIGRlZmluZXMKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKiogTk9STUFMIElOVEVSUlVQVCAqKioqLworI2RlZmluZSBETUFfSU5UUl9FTkFfTklFIDB4MDAwMTAwMDAJLyogTm9ybWFsIFN1bW1hcnkgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1RJRSAweDAwMDAwMDAxCS8qIFRyYW5zbWl0IEludGVycnVwdCAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfVFVFIDB4MDAwMDAwMDQJLyogVHJhbnNtaXQgQnVmZmVyIFVuYXZhaWxhYmxlICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9SSUUgMHgwMDAwMDA0MAkvKiBSZWNlaXZlIEludGVycnVwdCAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfRVJFIDB4MDAwMDQwMDAJLyogRWFybHkgUmVjZWl2ZSAqLworCisjZGVmaW5lIERNQV9JTlRSX05PUk1BTAkoRE1BX0lOVFJfRU5BX05JRSB8IERNQV9JTlRSX0VOQV9SSUUgfCBcCisJCQlETUFfSU5UUl9FTkFfVElFKQorCisvKioqKiBBQk5PUk1BTCBJTlRFUlJVUFQgKioqKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX0FJRSAweDAwMDA4MDAwCS8qIEFibm9ybWFsIFN1bW1hcnkgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX0ZCRSAweDAwMDAyMDAwCS8qIEZhdGFsIEJ1cyBFcnJvciAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfRVRFIDB4MDAwMDA0MDAJLyogRWFybHkgVHJhbnNtaXQgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JXRSAweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JTRSAweDAwMDAwMTAwCS8qIFJlY2VpdmUgU3RvcHBlZCAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfUlVFIDB4MDAwMDAwODAJLyogUmVjZWl2ZSBCdWZmZXIgVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1VORSAweDAwMDAwMDIwCS8qIFR4IFVuZGVyZmxvdyAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfT1ZFIDB4MDAwMDAwMTAJLyogUmVjZWl2ZSBPdmVyZmxvdyAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfVEpFIDB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9UU0UgMHgwMDAwMDAwMgkvKiBUcmFuc21pdCBTdG9wcGVkICovCisKKyNkZWZpbmUgRE1BX0lOVFJfQUJOT1JNQUwJKERNQV9JTlRSX0VOQV9BSUUgfCBETUFfSU5UUl9FTkFfRkJFIHwgXAorCQkJCURNQV9JTlRSX0VOQV9VTkUpCisKKy8qIERNQSBkZWZhdWx0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIERNQV9JTlRSX0RFRkFVTFRfTUFTSwkoRE1BX0lOVFJfTk9STUFMIHwgRE1BX0lOVFJfQUJOT1JNQUwpCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBETUEgU3RhdHVzIHJlZ2lzdGVyIGRlZmluZXMKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIERNQV9TVEFUVVNfR1BJCQkweDEwMDAwMDAwCS8qIFBNVCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19HTUkJCTB4MDgwMDAwMDAJLyogTU1DIGludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX0dMSQkJMHgwNDAwMDAwMAkvKiBHTUFDIExpbmUgaW50ZXJmYWNlIGludC4gKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19HTUkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgRE1BX1NUQVRVU19HTEkJCTB4MDQwMDAwMDAKKyNkZWZpbmUgRE1BX1NUQVRVU19FQl9NQVNLCTB4MDAzODAwMDAJLyogRXJyb3IgQml0cyBNYXNrICovCisjZGVmaW5lIERNQV9TVEFUVVNfRUJfVFhfQUJPUlQJMHgwMDA4MDAwMAkvKiBFcnJvciBCaXRzIC0gVFggQWJvcnQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19FQl9SWF9BQk9SVAkweDAwMTAwMDAwCS8qIEVycm9yIEJpdHMgLSBSWCBBYm9ydCAqLworI2RlZmluZSBETUFfU1RBVFVTX1RTX01BU0sJMHgwMDcwMDAwMAkvKiBUcmFuc21pdCBQcm9jZXNzIFN0YXRlICovCisjZGVmaW5lIERNQV9TVEFUVVNfVFNfU0hJRlQJMjAKKyNkZWZpbmUgRE1BX1NUQVRVU19SU19NQVNLCTB4MDAwZTAwMDAJLyogUmVjZWl2ZSBQcm9jZXNzIFN0YXRlICovCisjZGVmaW5lIERNQV9TVEFUVVNfUlNfU0hJRlQJMTcKKyNkZWZpbmUgRE1BX1NUQVRVU19OSVMJMHgwMDAxMDAwMAkvKiBOb3JtYWwgSW50ZXJydXB0IFN1bW1hcnkgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19BSVMJMHgwMDAwODAwMAkvKiBBYm5vcm1hbCBJbnRlcnJ1cHQgU3VtbWFyeSAqLworI2RlZmluZSBETUFfU1RBVFVTX0VSSQkweDAwMDA0MDAwCS8qIEVhcmx5IFJlY2VpdmUgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfRkJJCTB4MDAwMDIwMDAJLyogRmF0YWwgQnVzIEVycm9yIEludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX0VUSQkweDAwMDAwNDAwCS8qIEVhcmx5IFRyYW5zbWl0IEludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX1JXVAkweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgVGltZW91dCAqLworI2RlZmluZSBETUFfU1RBVFVTX1JQUwkweDAwMDAwMTAwCS8qIFJlY2VpdmUgUHJvY2VzcyBTdG9wcGVkICovCisjZGVmaW5lIERNQV9TVEFUVVNfUlUJMHgwMDAwMDA4MAkvKiBSZWNlaXZlIEJ1ZmZlciBVbmF2YWlsYWJsZSAqLworI2RlZmluZSBETUFfU1RBVFVTX1JJCTB4MDAwMDAwNDAJLyogUmVjZWl2ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19VTkYJMHgwMDAwMDAyMAkvKiBUcmFuc21pdCBVbmRlcmZsb3cgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19PVkYJMHgwMDAwMDAxMAkvKiBSZWNlaXZlIE92ZXJmbG93ICovCisjZGVmaW5lIERNQV9TVEFUVVNfVEpUCTB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyIFRpbWVvdXQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19UVQkweDAwMDAwMDA0CS8qIFRyYW5zbWl0IEJ1ZmZlciBVbmF2YWlsYWJsZSAqLworI2RlZmluZSBETUFfU1RBVFVTX1RQUwkweDAwMDAwMDAyCS8qIFRyYW5zbWl0IFByb2Nlc3MgU3RvcHBlZCAqLworI2RlZmluZSBETUFfU1RBVFVTX1RJCTB4MDAwMDAwMDEJLyogVHJhbnNtaXQgSW50ZXJydXB0ICovCisKKy8qIE90aGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgSEFTSF9UQUJMRV9TSVpFIDY0CisjZGVmaW5lIFBBVVNFX1RJTUUgMHgyMDAKKworLyogRmxvdyBDb250cm9sIGRlZmluZXMgKi8KKyNkZWZpbmUgRkxPV19PRkYJMAorI2RlZmluZSBGTE9XX1JYCQkxCisjZGVmaW5lIEZMT1dfVFgJCTIKKyNkZWZpbmUgRkxPV19BVVRPCShGTE9XX1RYIHwgRkxPV19SWCkKKworLyogRE1BIFNUT1JFLUFORC1GT1JXQVJEIE9wZXJhdGlvbiBNb2RlICovCisjZGVmaW5lIFNGX0RNQV9NT0RFIDEKKworI2RlZmluZSBIV19DU1VNIDEKKyNkZWZpbmUgTk9fSFdfQ1NVTSAwCisKKy8qIEdNQUMgVFggRklGTyBpcyA4SywgUnggRklGTyBpcyAxNksgKi8KKyNkZWZpbmUgQlVGX1NJWkVfMTZLaUIgMTYzODQKKyNkZWZpbmUgQlVGX1NJWkVfOEtpQiA4MTkyCisjZGVmaW5lIEJVRl9TSVpFXzRLaUIgNDA5NgorI2RlZmluZSBCVUZfU0laRV8yS2lCIDIwNDgKKworLyogUG93ZXIgRG93biBhbmQgV09MICovCisjZGVmaW5lIFBNVF9OT1RfU1VQUE9SVEVEIDAKKyNkZWZpbmUgUE1UX1NVUFBPUlRFRCAxCisKKy8qIENvbW1vbiBNQUMgZGVmaW5lcyAqLworI2RlZmluZSBNQUNfQ1RSTF9SRUcJCTB4MDAwMDAwMDAJLyogTUFDIENvbnRyb2wgKi8KKyNkZWZpbmUgTUFDX0VOQUJMRV9UWAkJMHgwMDAwMDAwOAkvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KKyNkZWZpbmUgTUFDX1JOQUJMRV9SWAkJMHgwMDAwMDAwNAkvKiBSZWNlaXZlciBFbmFibGUgKi8KKworLyogTUFDIE1hbmFnZW1lbnQgQ291bnRlcnMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTU1DX0NPTlRST0wJCTB4MDAwMDAxMDAJLyogTU1DIENvbnRyb2wgKi8KKyNkZWZpbmUgTU1DX0hJR0hfSU5UUgkJMHgwMDAwMDEwNAkvKiBNTUMgSGlnaCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTU1DX0xPV19JTlRSCQkweDAwMDAwMTA4CS8qIE1NQyBMb3cgSW50ZXJydXB0ICovCisjZGVmaW5lIE1NQ19ISUdIX0lOVFJfTUFTSwkweDAwMDAwMTBjCS8qIE1NQyBIaWdoIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lIE1NQ19MT1dfSU5UUl9NQVNLCTB4MDAwMDAxMTAJLyogTU1DIExvdyBJbnRlcnJ1cHQgTWFzayAqLworCisjZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUk1fTUFTSwkweDAwMDNmZjgJLyogTWF4aW11bSBGcmFtZSBTaXplICovCisjZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUk1fU0hJRlQJMworI2RlZmluZSBNTUNfQ09OVFJPTF9NQVhfRlJBTUUJCTB4N0ZGCisKK3N0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgeworCS8qIFRyYW5zbWl0IGVycm9ycyAqLworCXVuc2lnbmVkIGxvbmcgdHhfdW5kZXJmbG93IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwl1bnNpZ25lZCBsb25nIHR4X2NhcnJpZXI7CisJdW5zaWduZWQgbG9uZyB0eF9sb3NzY2FycmllcjsKKwl1bnNpZ25lZCBsb25nIHR4X2hlYXJ0YmVhdDsKKwl1bnNpZ25lZCBsb25nIHR4X2RlZmVycmVkOworCXVuc2lnbmVkIGxvbmcgdHhfdmxhbjsKKwl1bnNpZ25lZCBsb25nIHR4X2phYmJlcjsKKwl1bnNpZ25lZCBsb25nIHR4X2ZyYW1lX2ZsdXNoZWQ7CisJdW5zaWduZWQgbG9uZyB0eF9wYXlsb2FkX2Vycm9yOworCXVuc2lnbmVkIGxvbmcgdHhfaXBfaGVhZGVyX2Vycm9yOworCS8qIFJlY2VpdmUgZXJyb3JzICovCisJdW5zaWduZWQgbG9uZyByeF9kZXNjOworCXVuc2lnbmVkIGxvbmcgcnhfcGFydGlhbDsKKwl1bnNpZ25lZCBsb25nIHJ4X3J1bnQ7CisJdW5zaWduZWQgbG9uZyByeF90b29sb25nOworCXVuc2lnbmVkIGxvbmcgcnhfY29sbGlzaW9uOworCXVuc2lnbmVkIGxvbmcgcnhfY3JjOworCXVuc2lnbmVkIGxvbmcgcnhfbGVuZ2h0OworCXVuc2lnbmVkIGxvbmcgcnhfbWlpOworCXVuc2lnbmVkIGxvbmcgcnhfbXVsdGljYXN0OworCXVuc2lnbmVkIGxvbmcgcnhfZ21hY19vdmVyZmxvdzsKKwl1bnNpZ25lZCBsb25nIHJ4X3dhdGNoZG9nOworCXVuc2lnbmVkIGxvbmcgZGFfcnhfZmlsdGVyX2ZhaWw7CisJdW5zaWduZWQgbG9uZyBzYV9yeF9maWx0ZXJfZmFpbDsKKwl1bnNpZ25lZCBsb25nIHJ4X21pc3NlZF9jbnRyOworCXVuc2lnbmVkIGxvbmcgcnhfb3ZlcmZsb3dfY250cjsKKwl1bnNpZ25lZCBsb25nIHJ4X3ZsYW47CisJLyogVHgvUnggSVJRIGVycm9ycyAqLworCXVuc2lnbmVkIGxvbmcgdHhfdW5kZWZsb3dfaXJxOworCXVuc2lnbmVkIGxvbmcgdHhfcHJvY2Vzc19zdG9wcGVkX2lycTsKKwl1bnNpZ25lZCBsb25nIHR4X2phYmJlcl9pcnE7CisJdW5zaWduZWQgbG9uZyByeF9vdmVyZmxvd19pcnE7CisJdW5zaWduZWQgbG9uZyByeF9idWZfdW5hdl9pcnE7CisJdW5zaWduZWQgbG9uZyByeF9wcm9jZXNzX3N0b3BwZWRfaXJxOworCXVuc2lnbmVkIGxvbmcgcnhfd2F0Y2hkb2dfaXJxOworCXVuc2lnbmVkIGxvbmcgdHhfZWFybHlfaXJxOworCXVuc2lnbmVkIGxvbmcgZmF0YWxfYnVzX2Vycm9yX2lycTsKKwkvKiBFeHRyYSBpbmZvICovCisJdW5zaWduZWQgbG9uZyB0aHJlc2hvbGQ7CisJdW5zaWduZWQgbG9uZyB0eF9wa3RfbjsKKwl1bnNpZ25lZCBsb25nIHJ4X3BrdF9uOworCXVuc2lnbmVkIGxvbmcgcG9sbF9uOworCXVuc2lnbmVkIGxvbmcgc2NoZWRfdGltZXJfbjsKKwl1bnNpZ25lZCBsb25nIG5vcm1hbF9pcnFfbjsKK307CisKKy8qIEdNQUMgY29yZSBjYW4gY29tcHV0ZSB0aGUgY2hlY2tzdW1zIGluIEhXLiAqLworZW51bSByeF9mcmFtZV9zdGF0dXMgeworCWdvb2RfZnJhbWUgPSAwLAorCWRpc2NhcmRfZnJhbWUgPSAxLAorCWNzdW1fbm9uZSA9IDIsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX3NldF9tYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdTggYWRkcls2XSwKKwkJCSB1bnNpZ25lZCBpbnQgaGlnaCwgdW5zaWduZWQgaW50IGxvdykKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisKKwlkYXRhID0gKGFkZHJbNV0gPDwgOCkgfCBhZGRyWzRdOworCXdyaXRlbChkYXRhLCBpb2FkZHIgKyBoaWdoKTsKKwlkYXRhID0gKGFkZHJbM10gPDwgMjQpIHwgKGFkZHJbMl0gPDwgMTYpIHwgKGFkZHJbMV0gPDwgOCkgfCBhZGRyWzBdOworCXdyaXRlbChkYXRhLCBpb2FkZHIgKyBsb3cpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX2dldF9tYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwKKwkJCQl1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBpbnQgaGlnaCwKKwkJCQl1bnNpZ25lZCBpbnQgbG93KQoreworCXVuc2lnbmVkIGludCBoaV9hZGRyLCBsb19hZGRyOworCisJLyogUmVhZCB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgaGFyZHdhcmUgKi8KKwloaV9hZGRyID0gcmVhZGwoaW9hZGRyICsgaGlnaCk7CisJbG9fYWRkciA9IHJlYWRsKGlvYWRkciArIGxvdyk7CisKKwkvKiBFeHRyYWN0IHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBoaWdoIGFuZCBsb3cgd29yZHMgKi8KKwlhZGRyWzBdID0gbG9fYWRkciAmIDB4ZmY7CisJYWRkclsxXSA9IChsb19hZGRyID4+IDgpICYgMHhmZjsKKwlhZGRyWzJdID0gKGxvX2FkZHIgPj4gMTYpICYgMHhmZjsKKwlhZGRyWzNdID0gKGxvX2FkZHIgPj4gMjQpICYgMHhmZjsKKwlhZGRyWzRdID0gaGlfYWRkciAmIDB4ZmY7CisJYWRkcls1XSA9IChoaV9hZGRyID4+IDgpICYgMHhmZjsKKworCXJldHVybjsKK30KKworc3RydWN0IHN0bW1hY19vcHMgeworCS8qIE1BQyBjb3JlIGluaXRpYWxpemF0aW9uICovCisJdm9pZCAoKmNvcmVfaW5pdCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJLyogRE1BIGNvcmUgaW5pdGlhbGl6YXRpb24gKi8KKwlpbnQgKCpkbWFfaW5pdCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgcGJsLCB1MzIgZG1hX3R4LCB1MzIgZG1hX3J4KTsKKwkvKiBEdW1wIE1BQyByZWdpc3RlcnMgKi8KKwl2b2lkICgqZHVtcF9tYWNfcmVncykgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwkvKiBEdW1wIERNQSByZWdpc3RlcnMgKi8KKwl2b2lkICgqZHVtcF9kbWFfcmVncykgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwkvKiBTZXQgdHgvcnggdGhyZXNob2xkIGluIHRoZSBjc3I2IHJlZ2lzdGVyCisJICogQW4gaW52YWxpZCB2YWx1ZSBlbmFibGVzIHRoZSBzdG9yZS1hbmQtZm9yd2FyZCBtb2RlICovCisJdm9pZCAoKmRtYV9tb2RlKSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCB0eG1vZGUsIGludCByeG1vZGUpOworCS8qIFRvIHRyYWNrIGV4dHJhIHN0YXRpc3RpYyAoaWYgc3VwcG9ydGVkKSAqLworCXZvaWQgKCpkbWFfZGlhZ25vc3RpY19mcikgKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpOworCS8qIFJYIGRlc2NyaXB0b3IgcmluZyBpbml0aWFsaXphdGlvbiAqLworCXZvaWQgKCppbml0X3J4X2Rlc2MpIChzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUsCisJCQkJaW50IGRpc2FibGVfcnhfaWMpOworCS8qIFRYIGRlc2NyaXB0b3IgcmluZyBpbml0aWFsaXphdGlvbiAqLworCXZvaWQgKCppbml0X3R4X2Rlc2MpIChzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpOworCisJLyogSW52b2tlZCBieSB0aGUgeG1pdCBmdW5jdGlvbiB0byBwcmVwYXJlIHRoZSB0eCBkZXNjcmlwdG9yICovCisJdm9pZCAoKnByZXBhcmVfdHhfZGVzYykgKHN0cnVjdCBkbWFfZGVzYyAqcCwgaW50IGlzX2ZzLCBpbnQgbGVuLAorCQkJCSBpbnQgY3N1bV9mbGFnKTsKKwkvKiBTZXQvZ2V0IHRoZSBvd25lciBvZiB0aGUgZGVzY3JpcHRvciAqLworCXZvaWQgKCpzZXRfdHhfb3duZXIpIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOworCWludCAoKmdldF90eF9vd25lcikgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CisJLyogSW52b2tlZCBieSB0aGUgeG1pdCBmdW5jdGlvbiB0byBjbG9zZSB0aGUgdHggZGVzY3JpcHRvciAqLworCXZvaWQgKCpjbG9zZV90eF9kZXNjKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKKwkvKiBDbGVhbiB0aGUgdHggZGVzY3JpcHRvciBhcyBzb29uIGFzIHRoZSB0eCBpcnEgaXMgcmVjZWl2ZWQgKi8KKwl2b2lkICgqcmVsZWFzZV90eF9kZXNjKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKKwkvKiBDbGVhciBpbnRlcnJ1cHQgb24gdHggZnJhbWUgY29tcGxldGlvbi4gV2hlbiB0aGlzIGJpdCBpcworCSAqIHNldCBhbiBpbnRlcnJ1cHQgaGFwcGVucyBhcyBzb29uIGFzIHRoZSBmcmFtZSBpcyB0cmFuc21pdHRlZCAqLworCXZvaWQgKCpjbGVhcl90eF9pYykgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CisJLyogTGFzdCB0eCBzZWdtZW50IHJlcG9ydHMgdGhlIHRyYW5zbWl0IHN0YXR1cyAqLworCWludCAoKmdldF90eF9scykgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CisJLyogUmV0dXJuIHRoZSB0cmFuc21pdCBzdGF0dXMgbG9va2luZyBhdCB0aGUgVERFUzEgKi8KKwlpbnQgKCp0eF9zdGF0dXMpICh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJICBzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwkvKiBHZXQgdGhlIGJ1ZmZlciBzaXplIGZyb20gdGhlIGRlc2NyaXB0b3IgKi8KKwlpbnQgKCpnZXRfdHhfbGVuKSAoc3RydWN0IGRtYV9kZXNjICpwKTsKKwkvKiBIYW5kbGUgZXh0cmEgZXZlbnRzIG9uIHNwZWNpZmljIGludGVycnVwdHMgaHcgZGVwZW5kZW50ICovCisJdm9pZCAoKmhvc3RfaXJxX3N0YXR1cykgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwlpbnQgKCpnZXRfcnhfb3duZXIpIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOworCXZvaWQgKCpzZXRfcnhfb3duZXIpIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOworCS8qIEdldCB0aGUgcmVjZWl2ZSBmcmFtZSBzaXplICovCisJaW50ICgqZ2V0X3J4X2ZyYW1lX2xlbikgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CisJLyogUmV0dXJuIHRoZSByZWNlcHRpb24gc3RhdHVzIGxvb2tpbmcgYXQgdGhlIFJERVMxICovCisJaW50ICgqcnhfc3RhdHVzKSAodm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCSAgc3RydWN0IGRtYV9kZXNjICpwKTsKKwkvKiBNdWx0aWNhc3QgZmlsdGVyIHNldHRpbmcgKi8KKwl2b2lkICgqc2V0X2ZpbHRlcikgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCS8qIEZsb3cgY29udHJvbCBzZXR0aW5nICovCisJdm9pZCAoKmZsb3dfY3RybCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBpbnQgZHVwbGV4LAorCQkJICAgdW5zaWduZWQgaW50IGZjLCB1bnNpZ25lZCBpbnQgcGF1c2VfdGltZSk7CisJLyogU2V0IHBvd2VyIG1hbmFnZW1lbnQgbW9kZSAoZS5nLiBtYWdpYyBmcmFtZSkgKi8KKwl2b2lkICgqcG10KSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGxvbmcgbW9kZSk7CisJLyogU2V0L0dldCBVbmljYXN0IE1BQyBhZGRyZXNzZXMgKi8KKwl2b2lkICgqc2V0X3VtYWNfYWRkcikgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnX24pOworCXZvaWQgKCpnZXRfdW1hY19hZGRyKSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkgICAgIHVuc2lnbmVkIGludCByZWdfbik7Cit9OworCitzdHJ1Y3QgbWFjX2xpbmsgeworCWludCBwb3J0OworCWludCBkdXBsZXg7CisJaW50IHNwZWVkOworfTsKKworc3RydWN0IG1paV9yZWdzIHsKKwl1bnNpZ25lZCBpbnQgYWRkcjsJLyogTUlJIEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgZGF0YTsJLyogTUlJIERhdGEgKi8KK307CisKK3N0cnVjdCBod19jYXAgeworCXVuc2lnbmVkIGludCB2ZXJzaW9uOwkvKiBDb3JlIFZlcnNpb24gcmVnaXN0ZXIgKEdNQUMpICovCisJdW5zaWduZWQgaW50IHBtdDsJLyogUG93ZXItRG93biBtb2RlIChHTUFDKSAqLworCXN0cnVjdCBtYWNfbGluayBsaW5rOworCXN0cnVjdCBtaWlfcmVncyBtaWk7Cit9OworCitzdHJ1Y3QgbWFjX2RldmljZV9pbmZvIHsKKwlzdHJ1Y3QgaHdfY2FwIGh3OworCXN0cnVjdCBzdG1tYWNfb3BzICpvcHM7Cit9OworCitzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpnbWFjX3NldHVwKHVuc2lnbmVkIGxvbmcgYWRkcik7CitzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMxMDBfc2V0dXAodW5zaWduZWQgbG9uZyBhZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kZXNjcy5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL2Rlc2NzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQyYTBiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kZXNjcy5oCkBAIC0wLDAgKzEsMTYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBIZWFkZXIgRmlsZSB0byBkZXNjcmliZSB0aGUgRE1BIGRlc2NyaXB0b3JzCisgIFVzZSBlbmhhbmNlZCBkZXNjcmlwdG9ycyBpbiBjYXNlIG9mIEdNQUMgQ29yZXMuCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGRtYV9kZXNjIHsKKwkvKiBSZWNlaXZlIGRlc2NyaXB0b3IgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQkvKiBSREVTMCAqLworCQkJdTMyIHJlc2VydmVkMToxOworCQkJdTMyIGNyY19lcnJvcjoxOworCQkJdTMyIGRyaWJibGluZzoxOworCQkJdTMyIG1paV9lcnJvcjoxOworCQkJdTMyIHJlY2VpdmVfd2F0Y2hkb2c6MTsKKwkJCXUzMiBmcmFtZV90eXBlOjE7CisJCQl1MzIgY29sbGlzaW9uOjE7CisJCQl1MzIgZnJhbWVfdG9vX2xvbmc6MTsKKwkJCXUzMiBsYXN0X2Rlc2NyaXB0b3I6MTsKKwkJCXUzMiBmaXJzdF9kZXNjcmlwdG9yOjE7CisJCQl1MzIgbXVsdGljYXN0X2ZyYW1lOjE7CisJCQl1MzIgcnVuX2ZyYW1lOjE7CisJCQl1MzIgbGVuZ3RoX2Vycm9yOjE7CisJCQl1MzIgcGFydGlhbF9mcmFtZV9lcnJvcjoxOworCQkJdTMyIGRlc2NyaXB0b3JfZXJyb3I6MTsKKwkJCXUzMiBlcnJvcl9zdW1tYXJ5OjE7CisJCQl1MzIgZnJhbWVfbGVuZ3RoOjE0OworCQkJdTMyIGZpbHRlcmluZ19mYWlsOjE7CisJCQl1MzIgb3duOjE7CisJCQkvKiBSREVTMSAqLworCQkJdTMyIGJ1ZmZlcjFfc2l6ZToxMTsKKwkJCXUzMiBidWZmZXIyX3NpemU6MTE7CisJCQl1MzIgcmVzZXJ2ZWQyOjI7CisJCQl1MzIgc2Vjb25kX2FkZHJlc3NfY2hhaW5lZDoxOworCQkJdTMyIGVuZF9yaW5nOjE7CisJCQl1MzIgcmVzZXJ2ZWQzOjU7CisJCQl1MzIgZGlzYWJsZV9pYzoxOworCQl9IHJ4OworCQlzdHJ1Y3QgeworCQkJLyogUkRFUzAgKi8KKwkJCXUzMiBwYXlsb2FkX2NzdW1fZXJyb3I6MTsKKwkJCXUzMiBjcmNfZXJyb3I6MTsKKwkJCXUzMiBkcmliYmxpbmc6MTsKKwkJCXUzMiBlcnJvcl9nbWlpOjE7CisJCQl1MzIgcmVjZWl2ZV93YXRjaGRvZzoxOworCQkJdTMyIGZyYW1lX3R5cGU6MTsKKwkJCXUzMiBsYXRlX2NvbGxpc2lvbjoxOworCQkJdTMyIGlwY19jc3VtX2Vycm9yOjE7CisJCQl1MzIgbGFzdF9kZXNjcmlwdG9yOjE7CisJCQl1MzIgZmlyc3RfZGVzY3JpcHRvcjoxOworCQkJdTMyIHZsYW5fdGFnOjE7CisJCQl1MzIgb3ZlcmZsb3dfZXJyb3I6MTsKKwkJCXUzMiBsZW5ndGhfZXJyb3I6MTsKKwkJCXUzMiBzYV9maWx0ZXJfZmFpbDoxOworCQkJdTMyIGRlc2NyaXB0b3JfZXJyb3I6MTsKKwkJCXUzMiBlcnJvcl9zdW1tYXJ5OjE7CisJCQl1MzIgZnJhbWVfbGVuZ3RoOjE0OworCQkJdTMyIGRhX2ZpbHRlcl9mYWlsOjE7CisJCQl1MzIgb3duOjE7CisJCQkvKiBSREVTMSAqLworCQkJdTMyIGJ1ZmZlcjFfc2l6ZToxMzsKKwkJCXUzMiByZXNlcnZlZDE6MTsKKwkJCXUzMiBzZWNvbmRfYWRkcmVzc19jaGFpbmVkOjE7CisJCQl1MzIgZW5kX3Jpbmc6MTsKKwkJCXUzMiBidWZmZXIyX3NpemU6MTM7CisJCQl1MzIgcmVzZXJ2ZWQyOjI7CisJCQl1MzIgZGlzYWJsZV9pYzoxOworCQl9IGVyeDsJCS8qIC0tIGVuaGFuY2VkIC0tICovCisKKwkJLyogVHJhbnNtaXQgZGVzY3JpcHRvciAqLworCQlzdHJ1Y3QgeworCQkJLyogVERFUzAgKi8KKwkJCXUzMiBkZWZlcnJlZDoxOworCQkJdTMyIHVuZGVyZmxvd19lcnJvcjoxOworCQkJdTMyIGV4Y2Vzc2l2ZV9kZWZlcnJhbDoxOworCQkJdTMyIGNvbGxpc2lvbl9jb3VudDo0OworCQkJdTMyIGhlYXJ0YmVhdF9mYWlsOjE7CisJCQl1MzIgZXhjZXNzaXZlX2NvbGxpc2lvbnM6MTsKKwkJCXUzMiBsYXRlX2NvbGxpc2lvbjoxOworCQkJdTMyIG5vX2NhcnJpZXI6MTsKKwkJCXUzMiBsb3NzX2NhcnJpZXI6MTsKKwkJCXUzMiByZXNlcnZlZDE6MzsKKwkJCXUzMiBlcnJvcl9zdW1tYXJ5OjE7CisJCQl1MzIgcmVzZXJ2ZWQyOjE1OworCQkJdTMyIG93bjoxOworCQkJLyogVERFUzEgKi8KKwkJCXUzMiBidWZmZXIxX3NpemU6MTE7CisJCQl1MzIgYnVmZmVyMl9zaXplOjExOworCQkJdTMyIHJlc2VydmVkMzoxOworCQkJdTMyIGRpc2FibGVfcGFkZGluZzoxOworCQkJdTMyIHNlY29uZF9hZGRyZXNzX2NoYWluZWQ6MTsKKwkJCXUzMiBlbmRfcmluZzoxOworCQkJdTMyIGNyY19kaXNhYmxlOjE7CisJCQl1MzIgcmVzZXJ2ZWQ0OjI7CisJCQl1MzIgZmlyc3Rfc2VnbWVudDoxOworCQkJdTMyIGxhc3Rfc2VnbWVudDoxOworCQkJdTMyIGludGVycnVwdDoxOworCQl9IHR4OworCQlzdHJ1Y3QgeworCQkJLyogVERFUzAgKi8KKwkJCXUzMiBkZWZlcnJlZDoxOworCQkJdTMyIHVuZGVyZmxvd19lcnJvcjoxOworCQkJdTMyIGV4Y2Vzc2l2ZV9kZWZlcnJhbDoxOworCQkJdTMyIGNvbGxpc2lvbl9jb3VudDo0OworCQkJdTMyIHZsYW5fZnJhbWU6MTsKKwkJCXUzMiBleGNlc3NpdmVfY29sbGlzaW9uczoxOworCQkJdTMyIGxhdGVfY29sbGlzaW9uOjE7CisJCQl1MzIgbm9fY2FycmllcjoxOworCQkJdTMyIGxvc3NfY2FycmllcjoxOworCQkJdTMyIHBheWxvYWRfZXJyb3I6MTsKKwkJCXUzMiBmcmFtZV9mbHVzaGVkOjE7CisJCQl1MzIgamFiYmVyX3RpbWVvdXQ6MTsKKwkJCXUzMiBlcnJvcl9zdW1tYXJ5OjE7CisJCQl1MzIgaXBfaGVhZGVyX2Vycm9yOjE7CisJCQl1MzIgdGltZV9zdGFtcF9zdGF0dXM6MTsKKwkJCXUzMiByZXNlcnZlZDE6MjsKKwkJCXUzMiBzZWNvbmRfYWRkcmVzc19jaGFpbmVkOjE7CisJCQl1MzIgZW5kX3Jpbmc6MTsKKwkJCXUzMiBjaGVja3N1bV9pbnNlcnRpb246MjsKKwkJCXUzMiByZXNlcnZlZDI6MTsKKwkJCXUzMiB0aW1lX3N0YW1wX2VuYWJsZToxOworCQkJdTMyIGRpc2FibGVfcGFkZGluZzoxOworCQkJdTMyIGNyY19kaXNhYmxlOjE7CisJCQl1MzIgZmlyc3Rfc2VnbWVudDoxOworCQkJdTMyIGxhc3Rfc2VnbWVudDoxOworCQkJdTMyIGludGVycnVwdDoxOworCQkJdTMyIG93bjoxOworCQkJLyogVERFUzEgKi8KKwkJCXUzMiBidWZmZXIxX3NpemU6MTM7CisJCQl1MzIgcmVzZXJ2ZWQzOjM7CisJCQl1MzIgYnVmZmVyMl9zaXplOjEzOworCQkJdTMyIHJlc2VydmVkNDozOworCQl9IGV0eDsJCS8qIC0tIGVuaGFuY2VkIC0tICovCisJfSBkZXMwMTsKKwl1bnNpZ25lZCBpbnQgZGVzMjsKKwl1bnNpZ25lZCBpbnQgZGVzMzsKK307CisKKy8qIFRyYW5zbWl0IGNoZWNrc3VtIGluc2VydGlvbiBjb250cm9sICovCitlbnVtIHRkZXNfY3N1bV9pbnNlcnRpb24geworCWNpY19kaXNhYmxlZCA9IDAsCS8qIENoZWNrc3VtIEluc2VydGlvbiBDb250cm9sICovCisJY2ljX29ubHlfaXAgPSAxLAkvKiBPbmx5IElQIGhlYWRlciAqLworCWNpY19ub19wc2V1ZG9oZWFkZXIgPSAyLAkvKiBJUCBoZWFkZXIgYnV0IHBzZXVkb2hlYWRlcgorCQkJCQkgKiBpcyBub3QgY2FsY3VsYXRlZCAqLworCWNpY19mdWxsID0gMywJCS8qIElQIGhlYWRlciBhbmQgcHNldWRvaGVhZGVyICovCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyNGJiNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmMKQEAgLTAsMCArMSw2OTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEdNQUMgb24tY2hpcCBFdGhlcm5ldCBjb250cm9sbGVyIGZvciBTVCBTb0NzLgorICBEV0MgRXRoZXIgTUFDIDEwLzEwMC8xMDAwIFVuaXZlcnNhbCB2ZXJzaW9uIDMuNDFhICBoYXMgYmVlbiB1c2VkIGZvcgorICBkZXZlbG9waW5nIHRoaXMgY29kZS4KKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKKyNpbmNsdWRlICJzdG1tYWMuaCIKKyNpbmNsdWRlICJnbWFjLmgiCisKKyN1bmRlZiBHTUFDX0RFQlVHCisvKiNkZWZpbmUgR01BQ19ERUJVRyovCisjdW5kZWYgRlJBTUVfRklMVEVSX0RFQlVHCisvKiNkZWZpbmUgRlJBTUVfRklMVEVSX0RFQlVHKi8KKyNpZmRlZiBHTUFDX0RFQlVHCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBwcmludGsoZm10LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBnbWFjX2R1bXBfcmVncyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgaTsKKwlwcl9pbmZvKCJcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKwkgICAgICAgIlx0ICBHTUFDIHJlZ2lzdGVycyAoYmFzZSBhZGRyID0gMHglOHgpXG4iCisJICAgICAgICJcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCisJICAgICAgICh1bnNpZ25lZCBpbnQpaW9hZGRyKTsKKworCWZvciAoaSA9IDA7IGkgPCA1NTsgaSsrKSB7CisJCWludCBvZmZzZXQgPSBpICogNDsKKwkJcHJfaW5mbygiXHRSZWcgTm8uICVkIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgaSwKKwkJICAgICAgIG9mZnNldCwgcmVhZGwoaW9hZGRyICsgb2Zmc2V0KSk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBnbWFjX2RtYV9pbml0KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgcGJsLCB1MzIgZG1hX3R4LCB1MzIgZG1hX3J4KQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJLyogRE1BIFNXIHJlc2V0ICovCisJdmFsdWUgfD0gRE1BX0JVU19NT0RFX1NGVF9SRVNFVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJZG8ge30gd2hpbGUgKChyZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpICYgRE1BX0JVU19NT0RFX1NGVF9SRVNFVCkpOworCisJdmFsdWUgPSAvKiBETUFfQlVTX01PREVfRkIgfCAqLyBETUFfQlVTX01PREVfNFBCTCB8CisJICAgICgocGJsIDw8IERNQV9CVVNfTU9ERV9QQkxfU0hJRlQpIHwKKwkgICAgIChwYmwgPDwgRE1BX0JVU19NT0RFX1JQQkxfU0hJRlQpKTsKKworI2lmZGVmIENPTkZJR19TVE1NQUNfREEKKwl2YWx1ZSB8PSBETUFfQlVTX01PREVfREE7CS8qIFJ4IGhhcyBwcmlvcml0eSBvdmVyIHR4ICovCisjZW5kaWYKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisKKwkvKiBNYXNrIGludGVycnVwdHMgYnkgd3JpdGluZyB0byBDU1I3ICovCisJd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgaW9hZGRyICsgRE1BX0lOVFJfRU5BKTsKKworCS8qIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFJYL1RYIGRlc2NyaXB0b3IgbGlzdHMgbXVzdCBiZSB3cml0dGVuIGludG8KKwkgKiBETUEgQ1NSMyBhbmQgQ1NSNCwgcmVzcGVjdGl2ZWx5LiAqLworCXdyaXRlbChkbWFfdHgsIGlvYWRkciArIERNQV9UWF9CQVNFX0FERFIpOworCXdyaXRlbChkbWFfcngsIGlvYWRkciArIERNQV9SQ1ZfQkFTRV9BRERSKTsKKworCXJldHVybiAwOworfQorCisvKiBUcmFuc21pdCBGSUZPIGZsdXNoIG9wZXJhdGlvbiAqLworc3RhdGljIHZvaWQgZ21hY19mbHVzaF90eF9maWZvKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiBjc3I2ID0gcmVhZGwoaW9hZGRyICsgRE1BX0NPTlRST0wpOworCXdyaXRlbCgoY3NyNiB8IERNQV9DT05UUk9MX0ZURiksIGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCWRvIHt9IHdoaWxlICgocmVhZGwoaW9hZGRyICsgRE1BX0NPTlRST0wpICYgRE1BX0NPTlRST0xfRlRGKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfZG1hX29wZXJhdGlvbl9tb2RlKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgdHhtb2RlLAorCQkJCSAgICBpbnQgcnhtb2RlKQoreworCXUzMiBjc3I2ID0gcmVhZGwoaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJaWYgKHR4bW9kZSA9PSBTRl9ETUFfTU9ERSkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZW5hYmxpbmcgVFggc3RvcmUgYW5kIGZvcndhcmQgbW9kZVxuIik7CisJCS8qIFRyYW5zbWl0IENPRSB0eXBlIDIgY2Fubm90IGJlIGRvbmUgaW4gY3V0LXRocm91Z2ggbW9kZS4gKi8KKwkJY3NyNiB8PSBETUFfQ09OVFJPTF9UU0Y7CisJCS8qIE9wZXJhdGluZyBvbiBzZWNvbmQgZnJhbWUgaW5jcmVhc2UgdGhlIHBlcmZvcm1hbmNlCisJCSAqIGVzcGVjaWFsbHkgd2hlbiB0cmFuc21pdCBzdG9yZS1hbmQtZm9yd2FyZCBpcyB1c2VkLiovCisJCWNzcjYgfD0gRE1BX0NPTlRST0xfT1NGOworCX0gZWxzZSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBkaXNhYmxpbmcgVFggc3RvcmUgYW5kIGZvcndhcmQgbW9kZSIKKwkJCSAgICAgICIgKHRocmVzaG9sZCA9ICVkKVxuIiwgdHhtb2RlKTsKKwkJY3NyNiAmPSB+RE1BX0NPTlRST0xfVFNGOworCQljc3I2ICY9IERNQV9DT05UUk9MX1RDX1RYX01BU0s7CisJCS8qIFNldCB0aGUgdHJhbnNtaXQgdGhyZWFzaG9sZCAqLworCQlpZiAodHhtb2RlIDw9IDMyKQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMzI7CisJCWVsc2UgaWYgKHR4bW9kZSA8PSA2NCkKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OworCQllbHNlIGlmICh0eG1vZGUgPD0gMTI4KQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OworCQllbHNlIGlmICh0eG1vZGUgPD0gMTkyKQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTkyOworCQllbHNlCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18yNTY7CisJfQorCisJaWYgKHJ4bW9kZSA9PSBTRl9ETUFfTU9ERSkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZW5hYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZVxuIik7CisJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlNGOworCX0gZWxzZSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBkaXNhYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZSIKKwkJCSAgICAgICIgKHRocmVzaG9sZCA9ICVkKVxuIiwgcnhtb2RlKTsKKwkJY3NyNiAmPSB+RE1BX0NPTlRST0xfUlNGOworCQljc3I2ICY9IERNQV9DT05UUk9MX1RDX1JYX01BU0s7CisJCWlmIChyeG1vZGUgPD0gMzIpCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18zMjsKKwkJZWxzZSBpZiAocnhtb2RlIDw9IDY0KQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9SVENfNjQ7CisJCWVsc2UgaWYgKHJ4bW9kZSA8PSA5NikKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlRDXzk2OworCQllbHNlCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18xMjg7CisJfQorCisJd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKKy8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgLS0tIG5vIFJNT04gbW9kdWxlICovCitzdGF0aWMgdm9pZCBnbWFjX2RtYV9kaWFnbm9zdGljX2ZyKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBnbWFjX2R1bXBfZG1hX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJaW50IGk7CisJcHJfaW5mbygiIERNQSByZWdpc3RlcnNcbiIpOworCWZvciAoaSA9IDA7IGkgPCAyMjsgaSsrKSB7CisJCWlmICgoaSA8IDkpIHx8IChpID4gMTcpKSB7CisJCQlpbnQgb2Zmc2V0ID0gaSAqIDQ7CisJCQlwcl9lcnIoIlx0IFJlZyBOby4gJWQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBpLAorCQkJICAgICAgIChETUFfQlVTX01PREUgKyBvZmZzZXQpLAorCQkJICAgICAgIHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSArIG9mZnNldCkpOworCQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBnbWFjX2dldF90eF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICAgc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOworCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5lcnJvcl9zdW1tYXJ5KSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgVFggZXJyb3IuLi4gMHglMDh4XG4iLCBwLT5kZXMwMS5ldHgpOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmphYmJlcl90aW1lb3V0KSkgeworCQkJREJHKEtFUk5fRVJSICJcdGphYmJlcl90aW1lb3V0IGVycm9yXG4iKTsKKwkJCXgtPnR4X2phYmJlcisrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5mcmFtZV9mbHVzaGVkKSkgeworCQkJREJHKEtFUk5fRVJSICJcdGZyYW1lX2ZsdXNoZWQgZXJyb3JcbiIpOworCQkJeC0+dHhfZnJhbWVfZmx1c2hlZCsrOworCQkJZ21hY19mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCX0KKworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4Lmxvc3NfY2FycmllcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRsb3NzX2NhcnJpZXIgZXJyb3JcbiIpOworCQkJeC0+dHhfbG9zc2NhcnJpZXIrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubm9fY2FycmllcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRub19jYXJyaWVyIGVycm9yXG4iKTsKKwkJCXgtPnR4X2NhcnJpZXIrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubGF0ZV9jb2xsaXNpb24pKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0bGF0ZV9jb2xsaXNpb24gZXJyb3JcbiIpOworCQkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcC0+ZGVzMDEuZXR4LmNvbGxpc2lvbl9jb3VudDsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSkgeworCQkJREJHKEtFUk5fRVJSICJcdGV4Y2Vzc2l2ZV9jb2xsaXNpb25zXG4iKTsKKwkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLmV0eC5jb2xsaXNpb25fY291bnQ7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5leGNlc3NpdmVfZGVmZXJyYWwpKSB7CisJCQlEQkcoS0VSTl9JTkZPICJcdGV4Y2Vzc2l2ZSB0eF9kZWZlcnJhbFxuIik7CisJCQl4LT50eF9kZWZlcnJlZCsrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC51bmRlcmZsb3dfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0dW5kZXJmbG93IGVycm9yXG4iKTsKKwkJCWdtYWNfZmx1c2hfdHhfZmlmbyhpb2FkZHIpOworCQkJeC0+dHhfdW5kZXJmbG93Kys7CisJCX0KKworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmlwX2hlYWRlcl9lcnJvcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRUWCBJUCBoZWFkZXIgY3N1bSBlcnJvclxuIik7CisJCQl4LT50eF9pcF9oZWFkZXJfZXJyb3IrKzsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgucGF5bG9hZF9lcnJvcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRBZGRyL1BheWxvYWQgY3N1bSBlcnJvclxuIik7CisJCQl4LT50eF9wYXlsb2FkX2Vycm9yKys7CisJCQlnbWFjX2ZsdXNoX3R4X2ZpZm8oaW9hZGRyKTsKKwkJfQorCisJCXJldCA9IC0xOworCX0KKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZGVmZXJyZWQpKSB7CisJCURCRyhLRVJOX0lORk8gIkdNQUMgVFggc3RhdHVzOiB0eCBkZWZlcnJlZFxuIik7CisJCXgtPnR4X2RlZmVycmVkKys7CisJfQorI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECisJaWYgKHAtPmRlczAxLmV0eC52bGFuX2ZyYW1lKSB7CisJCURCRyhLRVJOX0lORk8gIkdNQUMgVFggc3RhdHVzOiBWTEFOIGZyYW1lXG4iKTsKKwkJeC0+dHhfdmxhbisrOworCX0KKyNlbmRpZgorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnbWFjX2dldF90eF9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplOworfQorCitzdGF0aWMgaW50IGdtYWNfY29lX3JkZXMwKGludCBpcGNfZXJyLCBpbnQgdHlwZSwgaW50IHBheWxvYWRfZXJyKQoreworCWludCByZXQgPSBnb29kX2ZyYW1lOworCXUzMiBzdGF0dXMgPSAodHlwZSA8PCAyIHwgaXBjX2VyciA8PCAxIHwgcGF5bG9hZF9lcnIpICYgMHg3OworCisJLyogYml0cyA1IDcgMCB8IEZyYW1lIHN0YXR1cworCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgICAgIDAgMCAwIHwgSUVFRSA4MDIuMyBUeXBlIGZyYW1lIChsZW5naHQgPCAxNTM2IG9jdGVjdHMpCisJICogICAgICAxIDAgMCB8IElQdjQvNiBObyBDU1VNIGVycm9yUy4KKwkgKiAgICAgIDEgMCAxIHwgSVB2NC82IENTVU0gUEFZTE9BRCBlcnJvcgorCSAqICAgICAgMSAxIDAgfCBJUHY0LzYgQ1NVTSBJUCBIUiBlcnJvcgorCSAqICAgICAgMSAxIDEgfCBJUHY0LzYgSVAgUEFZTE9BRCBBTkQgSEVBREVSIGVycm9yUworCSAqICAgICAgMCAwIDEgfCBJUHY0LzYgdW5zdXBwb3J0ZWQgSVAgUEFZTE9BRAorCSAqICAgICAgMCAxIDEgfCBDT0UgYnlwYXNzZWQuLiBubyBJUHY0LzYgZnJhbWUKKwkgKiAgICAgIDAgMSAwIHwgUmVzZXJ2ZWQuCisJICovCisJaWYgKHN0YXR1cyA9PSAweDApIHsKKwkJREJHKEtFUk5fSU5GTyAiUlggRGVzMCBzdGF0dXM6IElFRUUgODAyLjMgVHlwZSBmcmFtZS5cbiIpOworCQlyZXQgPSBnb29kX2ZyYW1lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4NCkgeworCQlEQkcoS0VSTl9JTkZPICJSWCBEZXMwIHN0YXR1czogSVB2NC82IE5vIENTVU0gZXJyb3JTLlxuIik7CisJCXJldCA9IGdvb2RfZnJhbWU7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg1KSB7CisJCURCRyhLRVJOX0VSUiAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiBQYXlsb2FkIEVycm9yLlxuIik7CisJCXJldCA9IGNzdW1fbm9uZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDYpIHsKKwkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogSVB2NC82IEhlYWRlciBFcnJvci5cbiIpOworCQlyZXQgPSBjc3VtX25vbmU7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg3KSB7CisJCURCRyhLRVJOX0VSUgorCQkgICAgIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgSGVhZGVyIGFuZCBQYXlsb2FkIEVycm9yLlxuIik7CisJCXJldCA9IGNzdW1fbm9uZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDEpIHsKKwkJREJHKEtFUk5fRVJSCisJCSAgICAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiB1bnN1cHBvcnRlZCBJUCBQQVlMT0FELlxuIik7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gMHgzKSB7CisJCURCRyhLRVJOX0VSUiAiUlggRGVzMCBzdGF0dXM6IE5vIElQdjQsIElQdjYgZnJhbWUuXG4iKTsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnbWFjX2dldF9yeF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICAgc3RydWN0IGRtYV9kZXNjICpwKQoreworCWludCByZXQgPSBnb29kX2ZyYW1lOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRhdGE7CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmVycm9yX3N1bW1hcnkpKSB7CisJCURCRyhLRVJOX0VSUiAiR01BQyBSWCBFcnJvciBTdW1tYXJ5Li4uIDB4JTA4eFxuIiwgcC0+ZGVzMDEuZXJ4KTsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kZXNjcmlwdG9yX2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdGRlc2NyaXB0b3IgZXJyb3JcbiIpOworCQkJeC0+cnhfZGVzYysrOworCQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4Lm92ZXJmbG93X2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdG92ZXJmbG93IGVycm9yXG4iKTsKKwkJCXgtPnJ4X2dtYWNfb3ZlcmZsb3crKzsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguaXBjX2NzdW1fZXJyb3IpKQorCQkJREJHKEtFUk5fRVJSICJcdElQQyBDc3VtIEVycm9yL0dpYW50IGZyYW1lXG4iKTsKKworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmxhdGVfY29sbGlzaW9uKSkgeworCQkJREJHKEtFUk5fRVJSICJcdGxhdGVfY29sbGlzaW9uIGVycm9yXG4iKTsKKwkJCXN0YXRzLT5jb2xsaXNpb25zKys7CisJCQlzdGF0cy0+Y29sbGlzaW9ucysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngucmVjZWl2ZV93YXRjaGRvZykpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRyZWNlaXZlX3dhdGNoZG9nIGVycm9yXG4iKTsKKwkJCXgtPnJ4X3dhdGNoZG9nKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5lcnJvcl9nbWlpKSkgeworCQkJREJHKEtFUk5fRVJSICJcdFJlY2VpdmUgRXJyb3JcbiIpOworCQkJeC0+cnhfbWlpKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5jcmNfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0Q1JDIGVycm9yXG4iKTsKKwkJCXgtPnJ4X2NyYysrOworCQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKKwkJfQorCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKworCS8qIEFmdGVyIGEgcGF5bG9hZCBjc3VtIGVycm9yLCB0aGUgRVMgYml0IGlzIHNldC4KKwkgKiBJdCBkb2Vzbid0IG1hdGNoIHdpdGggdGhlIGluZm9ybWF0aW9uIHJlcG9ydGVkIGludG8gdGhlIGRhdGFib29rLgorCSAqIEF0IGFueSByYXRlLCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIENTVU0gaHcgY29tcHV0YXRpb24gaXMgb2sKKwkgKiBhbmQgcmVwb3J0IHRoaXMgaW5mbyB0byB0aGUgdXBwZXIgbGF5ZXJzLiAqLworCXJldCA9IGdtYWNfY29lX3JkZXMwKHAtPmRlczAxLmVyeC5pcGNfY3N1bV9lcnJvciwKKwkJcC0+ZGVzMDEuZXJ4LmZyYW1lX3R5cGUsIHAtPmRlczAxLmVyeC5wYXlsb2FkX2NzdW1fZXJyb3IpOworCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kcmliYmxpbmcpKSB7CisJCURCRyhLRVJOX0VSUiAiR01BQyBSWDogZHJpYmJsaW5nIGVycm9yXG4iKTsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5zYV9maWx0ZXJfZmFpbCkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFJYIDogU291cmNlIEFkZHJlc3MgZmlsdGVyIGZhaWxcbiIpOworCQl4LT5zYV9yeF9maWx0ZXJfZmFpbCsrOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmRhX2ZpbHRlcl9mYWlsKSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlggOiBEZXN0aW5hdGlvbiBBZGRyZXNzIGZpbHRlciBmYWlsXG4iKTsKKwkJeC0+ZGFfcnhfZmlsdGVyX2ZhaWwrKzsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5sZW5ndGhfZXJyb3IpKSB7CisJCURCRyhLRVJOX0VSUiAiR01BQyBSWDogbGVuZ3RoX2Vycm9yIGVycm9yXG4iKTsKKwkJeC0+cnhfbGVuZ2h0Kys7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECisJaWYgKHAtPmRlczAxLmVyeC52bGFuX3RhZykgeworCQlEQkcoS0VSTl9JTkZPICJHTUFDIFJYOiBWTEFOIGZyYW1lIHRhZ2dlZFxuIik7CisJCXgtPnJ4X3ZsYW4rKzsKKwl9CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBnbWFjX2lycV9zdGF0dXModW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgR01BQ19JTlRfU1RBVFVTKTsKKworCS8qIE5vdCB1c2VkIGV2ZW50cyAoZS5nLiBNTUMgaW50ZXJydXB0cykgYXJlIG5vdCBoYW5kbGVkLiAqLworCWlmICgoaW50cl9zdGF0dXMgJiBtbWNfdHhfaXJxKSkKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyB0eCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKKwkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1RYX0lOVFIpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfaXJxKSkKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyByeCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKKwkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1JYX0lOVFIpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfY3N1bV9vZmZsb2FkX2lycSkpCisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBNTUMgcnggY3N1bSBvZmZsb2FkOiAweCUwOHhcbiIsCisJCSAgICByZWFkbChpb2FkZHIgKyBHTUFDX01NQ19SWF9DU1VNX09GRkxPQUQpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBwbXRfaXJxKSkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogcmVjZWl2ZWQgTWFnaWMgZnJhbWVcbiIpOworCQkvKiBjbGVhciB0aGUgUE1UIGJpdHMgNSBhbmQgNiBieSByZWFkaW5nIHRoZSBQTVQKKwkJICogc3RhdHVzIHJlZ2lzdGVyLiAqLworCQlyZWFkbChpb2FkZHIgKyBHTUFDX1BNVCk7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBnbWFjX2NvcmVfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBHTUFDX0NPTlRST0wpOworCXZhbHVlIHw9IEdNQUNfQ09SRV9JTklUOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgR01BQ19DT05UUk9MKTsKKworCS8qIFNUQnVzIEJyaWRnZSBDb25maWd1cmF0aW9uICovCisJLyp3cml0ZWwoMHhjNTYwOCwgaW9hZGRyICsgMHgwMDAwNzAwMCk7Ki8KKworCS8qIEZyZWV6ZSBNTUMgY291bnRlcnMgKi8KKwl3cml0ZWwoMHg4LCBpb2FkZHIgKyBHTUFDX01NQ19DVFJMKTsKKwkvKiBNYXNrIEdNQUMgaW50ZXJydXB0cyAqLworCXdyaXRlbCgweDIwNywgaW9hZGRyICsgR01BQ19JTlRfTUFTSyk7CisKKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCS8qIFRhZyBkZXRlY3Rpb24gd2l0aG91dCBmaWx0ZXJpbmcgKi8KKwl3cml0ZWwoMHgwLCBpb2FkZHIgKyBHTUFDX1ZMQU5fVEFHKTsKKyNlbmRpZgorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZ21hY19zZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJCXVuc2lnbmVkIGludCByZWdfbikKK3sKKwlzdG1tYWNfc2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgR01BQ19BRERSX0hJR0gocmVnX24pLAorCQkJCUdNQUNfQUREUl9MT1cocmVnX24pKTsKK30KKworc3RhdGljIHZvaWQgZ21hY19nZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJCXVuc2lnbmVkIGludCByZWdfbikKK3sKKwlzdG1tYWNfZ2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgR01BQ19BRERSX0hJR0gocmVnX24pLAorCQkJCUdNQUNfQUREUl9MT1cocmVnX24pKTsKK30KKworc3RhdGljIHZvaWQgZ21hY19zZXRfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOworCisJREJHKEtFUk5fSU5GTyAiJXM6ICMgbWNhc3RzICVkLCAjIHVuaWNhc3QgJWRcbiIsCisJICAgIF9fZnVuY19fLCBkZXYtPm1jX2NvdW50LCBkZXYtPnVjX2NvdW50KTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCXZhbHVlID0gR01BQ19GUkFNRV9GSUxURVJfUFI7CisJZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBIQVNIX1RBQkxFX1NJWkUpCisJCSAgIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX1BNOwkvKiBwYXNzIGFsbCBtdWx0aSAqLworCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgR01BQ19IQVNIX0hJR0gpOworCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgR01BQ19IQVNIX0xPVyk7CisJfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgeworCQlpbnQgaTsKKwkJdTMyIG1jX2ZpbHRlclsyXTsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisKKwkJLyogSGFzaCBmaWx0ZXIgZm9yIG11bHRpY2FzdCAqLworCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX0hNQzsKKworCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7CisJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKKwkJICAgICBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCQkvKiBUaGUgdXBwZXIgNiBiaXRzIG9mIHRoZSBjYWxjdWxhdGVkIENSQyBhcmUgdXNlZCB0bworCQkJICAgaW5kZXggdGhlIGNvbnRlbnMgb2YgdGhlIGhhc2ggdGFibGUgKi8KKwkJCWludCBiaXRfbnIgPQorCQkJICAgIGJpdHJldjMyKH5jcmMzMl9sZSh+MCwgbWNsaXN0LT5kbWlfYWRkciwgNikpID4+IDI2OworCQkJLyogVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGRldGVybWluZXMgdGhlIHJlZ2lzdGVyIHRvCisJCQkgKiB1c2UgKEgvTCkgd2hpbGUgdGhlIG90aGVyIDUgYml0cyBkZXRlcm1pbmUgdGhlIGJpdAorCQkJICogd2l0aGluIHRoZSByZWdpc3Rlci4gKi8KKwkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gNV0gfD0gMSA8PCAoYml0X25yICYgMzEpOworCQl9CisJCXdyaXRlbChtY19maWx0ZXJbMF0sIGlvYWRkciArIEdNQUNfSEFTSF9MT1cpOworCQl3cml0ZWwobWNfZmlsdGVyWzFdLCBpb2FkZHIgKyBHTUFDX0hBU0hfSElHSCk7CisJfQorCisJLyogSGFuZGxlIG11bHRpcGxlIHVuaWNhc3QgYWRkcmVzc2VzIChwZXJmZWN0IGZpbHRlcmluZykqLworCWlmIChkZXYtPnVjX2NvdW50ID4gR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMpCisJCS8qIFN3aXRjaCB0byBwcm9taXNjdW91cyBtb2RlIGlzIG1vcmUgdGhhbiAxNiBhZGRycworCQkgICBhcmUgcmVxdWlyZWQgKi8KKwkJdmFsdWUgfD0gR01BQ19GUkFNRV9GSUxURVJfUFI7CisJZWxzZSB7CisJCWludCBpOworCQlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqdWNfcHRyID0gZGV2LT51Y19saXN0OworCisJCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT51Y19jb3VudDsgaSsrKSB7CisJCQkJZ21hY19zZXRfdW1hY19hZGRyKGlvYWRkciwgdWNfcHRyLT5kYV9hZGRyLAorCQkJCQkJaSArIDEpOworCisJCQkJREJHKEtFUk5fSU5GTyAiXHQlZCAiCisJCQkJIi0gVW5pY2FzdCBhZGRyICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDoiCisJCQkJIiUwMnhcbiIsIGkgKyAxLAorCQkJCXVjX3B0ci0+ZGFfYWRkclswXSwgdWNfcHRyLT5kYV9hZGRyWzFdLAorCQkJCXVjX3B0ci0+ZGFfYWRkclsyXSwgdWNfcHRyLT5kYV9hZGRyWzNdLAorCQkJCXVjX3B0ci0+ZGFfYWRkcls0XSwgdWNfcHRyLT5kYV9hZGRyWzVdKTsKKwkJCQl1Y19wdHIgPSB1Y19wdHItPm5leHQ7CisJCX0KKwl9CisKKyNpZmRlZiBGUkFNRV9GSUxURVJfREVCVUcKKwkvKiBFbmFibGUgUmVjZWl2ZSBhbGwgbW9kZSAodG8gZGVidWcgZmlsdGVyaW5nX2ZhaWwgZXJyb3JzKSAqLworCXZhbHVlIHw9IEdNQUNfRlJBTUVfRklMVEVSX1JBOworI2VuZGlmCisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBHTUFDX0ZSQU1FX0ZJTFRFUik7CisKKwlEQkcoS0VSTl9JTkZPICJcdEZyYW1lIEZpbHRlciByZWc6IDB4JTA4eFxuXHRIYXNoIHJlZ3M6ICIKKwkgICAgIkhJIDB4JTA4eCwgTE8gMHglMDh4XG4iLCByZWFkbChpb2FkZHIgKyBHTUFDX0ZSQU1FX0ZJTFRFUiksCisJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfSEFTSF9ISUdIKSwgcmVhZGwoaW9hZGRyICsgR01BQ19IQVNIX0xPVykpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBnbWFjX2Zsb3dfY3RybCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgaW50IGR1cGxleCwKKwkJCSAgIHVuc2lnbmVkIGludCBmYywgdW5zaWduZWQgaW50IHBhdXNlX3RpbWUpCit7CisJdW5zaWduZWQgaW50IGZsb3cgPSAwOworCisJREJHKEtFUk5fREVCVUcgIkdNQUMgRmxvdy1Db250cm9sOlxuIik7CisJaWYgKGZjICYgRkxPV19SWCkgeworCQlEQkcoS0VSTl9ERUJVRyAiXHRSZWNlaXZlIEZsb3ctQ29udHJvbCBPTlxuIik7CisJCWZsb3cgfD0gR01BQ19GTE9XX0NUUkxfUkZFOworCX0KKwlpZiAoZmMgJiBGTE9XX1RYKSB7CisJCURCRyhLRVJOX0RFQlVHICJcdFRyYW5zbWl0IEZsb3ctQ29udHJvbCBPTlxuIik7CisJCWZsb3cgfD0gR01BQ19GTE9XX0NUUkxfVEZFOworCX0KKworCWlmIChkdXBsZXgpIHsKKwkJREJHKEtFUk5fREVCVUcgIlx0ZHVwbGV4IG1vZGU6IHBhdXNlIHRpbWU6ICVkXG4iLCBwYXVzZV90aW1lKTsKKwkJZmxvdyB8PSAocGF1c2VfdGltZSA8PCBHTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVCk7CisJfQorCisJd3JpdGVsKGZsb3csIGlvYWRkciArIEdNQUNfRkxPV19DVFJMKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfcG10KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJdW5zaWduZWQgaW50IHBtdCA9IDA7CisKKwlpZiAobW9kZSA9PSBXQUtFX01BR0lDKSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBXT0wgTWFnaWMgZnJhbWVcbiIpOworCQlwbXQgfD0gcG93ZXJfZG93biB8IG1hZ2ljX3BrdF9lbjsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gV0FLRV9VQ0FTVCkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogV09MIG9uIGdsb2JhbCB1bmljYXN0XG4iKTsKKwkJcG10IHw9IGdsb2JhbF91bmljYXN0OworCX0KKworCXdyaXRlbChwbXQsIGlvYWRkciArIEdNQUNfUE1UKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfaW5pdF9yeF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSwKKwkJCQlpbnQgZGlzYWJsZV9yeF9pYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKKwkJcC0+ZGVzMDEuZXJ4Lm93biA9IDE7CisJCXAtPmRlczAxLmVyeC5idWZmZXIxX3NpemUgPSBCVUZfU0laRV84S2lCIC0gMTsKKwkJLyogVG8gc3VwcG9ydCBqdW1ibyBmcmFtZXMgKi8KKwkJcC0+ZGVzMDEuZXJ4LmJ1ZmZlcjJfc2l6ZSA9IEJVRl9TSVpFXzhLaUIgLSAxOworCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQorCQkJcC0+ZGVzMDEuZXJ4LmVuZF9yaW5nID0gMTsKKwkJaWYgKGRpc2FibGVfcnhfaWMpCisJCQlwLT5kZXMwMS5lcnguZGlzYWJsZV9pYyA9IDE7CisJCXArKzsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBnbWFjX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKKwkJcC0+ZGVzMDEuZXR4Lm93biA9IDA7CisJCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCisJCQlwLT5kZXMwMS5ldHguZW5kX3JpbmcgPSAxOworCQlwKys7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGdtYWNfZ2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEuZXR4Lm93bjsKK30KKworc3RhdGljIGludCBnbWFjX2dldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLmVyeC5vd247Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfc2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5ldHgub3duID0gMTsKK30KKworc3RhdGljIHZvaWQgZ21hY19zZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLmVyeC5vd24gPSAxOworfQorCitzdGF0aWMgaW50IGdtYWNfZ2V0X3R4X2xzKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEuZXR4Lmxhc3Rfc2VnbWVudDsKK30KKworc3RhdGljIHZvaWQgZ21hY19yZWxlYXNlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQoreworCWludCB0ZXIgPSBwLT5kZXMwMS5ldHguZW5kX3Jpbmc7CisKKwltZW1zZXQocCwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykpOworCXAtPmRlczAxLmV0eC5lbmRfcmluZyA9IHRlcjsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZ21hY19wcmVwYXJlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCBpbnQgaXNfZnMsIGludCBsZW4sCisJCQkJIGludCBjc3VtX2ZsYWcpCit7CisJcC0+ZGVzMDEuZXR4LmZpcnN0X3NlZ21lbnQgPSBpc19mczsKKwlpZiAodW5saWtlbHkobGVuID4gQlVGX1NJWkVfNEtpQikpIHsKKwkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjFfc2l6ZSA9IEJVRl9TSVpFXzRLaUI7CisJCXAtPmRlczAxLmV0eC5idWZmZXIyX3NpemUgPSBsZW4gLSBCVUZfU0laRV80S2lCOworCX0gZWxzZSB7CisJCXAtPmRlczAxLmV0eC5idWZmZXIxX3NpemUgPSBsZW47CisJfQorCWlmIChsaWtlbHkoY3N1bV9mbGFnKSkKKwkJcC0+ZGVzMDEuZXR4LmNoZWNrc3VtX2luc2VydGlvbiA9IGNpY19mdWxsOworfQorCitzdGF0aWMgdm9pZCBnbWFjX2NsZWFyX3R4X2ljKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5ldHguaW50ZXJydXB0ID0gMDsKK30KKworc3RhdGljIHZvaWQgZ21hY19jbG9zZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5ldHgubGFzdF9zZWdtZW50ID0gMTsKKwlwLT5kZXMwMS5ldHguaW50ZXJydXB0ID0gMTsKK30KKworc3RhdGljIGludCBnbWFjX2dldF9yeF9mcmFtZV9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5lcnguZnJhbWVfbGVuZ3RoOworfQorCitzdHJ1Y3Qgc3RtbWFjX29wcyBnbWFjX2RyaXZlciA9IHsKKwkuY29yZV9pbml0ID0gZ21hY19jb3JlX2luaXQsCisJLmR1bXBfbWFjX3JlZ3MgPSBnbWFjX2R1bXBfcmVncywKKwkuZG1hX2luaXQgPSBnbWFjX2RtYV9pbml0LAorCS5kdW1wX2RtYV9yZWdzID0gZ21hY19kdW1wX2RtYV9yZWdzLAorCS5kbWFfbW9kZSA9IGdtYWNfZG1hX29wZXJhdGlvbl9tb2RlLAorCS5kbWFfZGlhZ25vc3RpY19mciA9IGdtYWNfZG1hX2RpYWdub3N0aWNfZnIsCisJLnR4X3N0YXR1cyA9IGdtYWNfZ2V0X3R4X2ZyYW1lX3N0YXR1cywKKwkucnhfc3RhdHVzID0gZ21hY19nZXRfcnhfZnJhbWVfc3RhdHVzLAorCS5nZXRfdHhfbGVuID0gZ21hY19nZXRfdHhfbGVuLAorCS5zZXRfZmlsdGVyID0gZ21hY19zZXRfZmlsdGVyLAorCS5mbG93X2N0cmwgPSBnbWFjX2Zsb3dfY3RybCwKKwkucG10ID0gZ21hY19wbXQsCisJLmluaXRfcnhfZGVzYyA9IGdtYWNfaW5pdF9yeF9kZXNjLAorCS5pbml0X3R4X2Rlc2MgPSBnbWFjX2luaXRfdHhfZGVzYywKKwkuZ2V0X3R4X293bmVyID0gZ21hY19nZXRfdHhfb3duZXIsCisJLmdldF9yeF9vd25lciA9IGdtYWNfZ2V0X3J4X293bmVyLAorCS5yZWxlYXNlX3R4X2Rlc2MgPSBnbWFjX3JlbGVhc2VfdHhfZGVzYywKKwkucHJlcGFyZV90eF9kZXNjID0gZ21hY19wcmVwYXJlX3R4X2Rlc2MsCisJLmNsZWFyX3R4X2ljID0gZ21hY19jbGVhcl90eF9pYywKKwkuY2xvc2VfdHhfZGVzYyA9IGdtYWNfY2xvc2VfdHhfZGVzYywKKwkuZ2V0X3R4X2xzID0gZ21hY19nZXRfdHhfbHMsCisJLnNldF90eF9vd25lciA9IGdtYWNfc2V0X3R4X293bmVyLAorCS5zZXRfcnhfb3duZXIgPSBnbWFjX3NldF9yeF9vd25lciwKKwkuZ2V0X3J4X2ZyYW1lX2xlbiA9IGdtYWNfZ2V0X3J4X2ZyYW1lX2xlbiwKKwkuaG9zdF9pcnFfc3RhdHVzID0gZ21hY19pcnFfc3RhdHVzLAorCS5zZXRfdW1hY19hZGRyID0gZ21hY19zZXRfdW1hY19hZGRyLAorCS5nZXRfdW1hY19hZGRyID0gZ21hY19nZXRfdW1hY19hZGRyLAorfTsKKworc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqZ21hY19zZXR1cCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7CisJdTMyIHVpZCA9IHJlYWRsKGlvYWRkciArIEdNQUNfVkVSU0lPTik7CisKKwlwcl9pbmZvKCJcdEdNQUMgLSB1c2VyIElEOiAweCV4LCBTeW5vcHN5cyBJRDogMHgleFxuIiwKKwkgICAgICAgKCh1aWQgJiAweDAwMDBmZjAwKSA+PiA4KSwgKHVpZCAmIDB4MDAwMDAwZmYpKTsKKworCW1hYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbnN0IHN0cnVjdCBtYWNfZGV2aWNlX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCW1hYy0+b3BzID0gJmdtYWNfZHJpdmVyOworCW1hYy0+aHcucG10ID0gUE1UX1NVUFBPUlRFRDsKKwltYWMtPmh3LmxpbmsucG9ydCA9IEdNQUNfQ09OVFJPTF9QUzsKKwltYWMtPmh3LmxpbmsuZHVwbGV4ID0gR01BQ19DT05UUk9MX0RNOworCW1hYy0+aHcubGluay5zcGVlZCA9IEdNQUNfQ09OVFJPTF9GRVM7CisJbWFjLT5ody5taWkuYWRkciA9IEdNQUNfTUlJX0FERFI7CisJbWFjLT5ody5taWkuZGF0YSA9IEdNQUNfTUlJX0RBVEE7CisKKwlyZXR1cm4gbWFjOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0YTM2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEdNQUNfQ09OVFJPTAkJMHgwMDAwMDAwMAkvKiBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSCTB4MDAwMDAwMDQJLyogRnJhbWUgRmlsdGVyICovCisjZGVmaW5lIEdNQUNfSEFTSF9ISUdICQkweDAwMDAwMDA4CS8qIE11bHRpY2FzdCBIYXNoIFRhYmxlIEhpZ2ggKi8KKyNkZWZpbmUgR01BQ19IQVNIX0xPVwkJMHgwMDAwMDAwYwkvKiBNdWx0aWNhc3QgSGFzaCBUYWJsZSBMb3cgKi8KKyNkZWZpbmUgR01BQ19NSUlfQUREUgkJMHgwMDAwMDAxMAkvKiBNSUkgQWRkcmVzcyAqLworI2RlZmluZSBHTUFDX01JSV9EQVRBCQkweDAwMDAwMDE0CS8qIE1JSSBEYXRhICovCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMCQkweDAwMDAwMDE4CS8qIEZsb3cgQ29udHJvbCAqLworI2RlZmluZSBHTUFDX1ZMQU5fVEFHCQkweDAwMDAwMDFjCS8qIFZMQU4gVGFnICovCisjZGVmaW5lIEdNQUNfVkVSU0lPTgkJMHgwMDAwMDAyMAkvKiBHTUFDIENPUkUgVmVyc2lvbiAqLworI2RlZmluZSBHTUFDX1dBS0VVUF9GSUxURVIJMHgwMDAwMDAyOAkvKiBXYWtlLXVwIEZyYW1lIEZpbHRlciAqLworCisjZGVmaW5lIEdNQUNfSU5UX1NUQVRVUwkJMHgwMDAwMDAzOAkvKiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCitlbnVtIGdtYWNfaXJxX3N0YXR1cyB7CisJdGltZV9zdGFtcF9pcnEgPSAweDAyMDAsCisJbW1jX3J4X2NzdW1fb2ZmbG9hZF9pcnEgPSAweDAwODAsCisJbW1jX3R4X2lycSA9IDB4MDA0MCwKKwltbWNfcnhfaXJxID0gMHgwMDIwLAorCW1tY19pcnEgPSAweDAwMTAsCisJcG10X2lycSA9IDB4MDAwOCwKKwlwY3NfYW5lX2lycSA9IDB4MDAwNCwKKwlwY3NfbGlua19pcnEgPSAweDAwMDIsCisJcmdtaWlfaXJxID0gMHgwMDAxLAorfTsKKyNkZWZpbmUgR01BQ19JTlRfTUFTSwkJMHgwMDAwMDAzYwkvKiBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLworCisvKiBQTVQgQ29udHJvbCBhbmQgU3RhdHVzICovCisjZGVmaW5lIEdNQUNfUE1UCQkweDAwMDAwMDJjCitlbnVtIHBvd2VyX2V2ZW50IHsKKwlwb2ludGVyX3Jlc2V0ID0gMHg4MDAwMDAwMCwKKwlnbG9iYWxfdW5pY2FzdCA9IDB4MDAwMDAyMDAsCisJd2FrZV91cF9yeF9mcmFtZSA9IDB4MDAwMDAwNDAsCisJbWFnaWNfZnJhbWUgPSAweDAwMDAwMDIwLAorCXdha2VfdXBfZnJhbWVfZW4gPSAweDAwMDAwMDA0LAorCW1hZ2ljX3BrdF9lbiA9IDB4MDAwMDAwMDIsCisJcG93ZXJfZG93biA9IDB4MDAwMDAwMDEsCit9OworCisvKiBHTUFDIEhXIEFERFIgcmVncyAqLworI2RlZmluZSBHTUFDX0FERFJfSElHSChyZWcpCQkoMHgwMDAwMDA0MCsocmVnICogOCkpCisjZGVmaW5lIEdNQUNfQUREUl9MT1cocmVnKQkJKDB4MDAwMDAwNDQrKHJlZyAqIDgpKQorI2RlZmluZSBHTUFDX01BWF9VTklDQVNUX0FERFJFU1NFUwkxNgorCisjZGVmaW5lIEdNQUNfQU5fQ1RSTAkweDAwMDAwMGMwCS8qIEFOIGNvbnRyb2wgKi8KKyNkZWZpbmUgR01BQ19BTl9TVEFUVVMJMHgwMDAwMDBjNAkvKiBBTiBzdGF0dXMgKi8KKyNkZWZpbmUgR01BQ19BTkVfQURWCTB4MDAwMDAwYzgJLyogQXV0by1OZWcuIEFkdmVydGlzZW1lbnQgKi8KKyNkZWZpbmUgR01BQ19BTkVfTElOSwkweDAwMDAwMGNjCS8qIEF1dG8tTmVnLiBsaW5rIHBhcnRlbmVyIGFiaWxpdHkgKi8KKyNkZWZpbmUgR01BQ19BTkVfRVhQCTB4MDAwMDAwZDAJLyogQU5FIGV4cGFuc2lvbiAqLworI2RlZmluZSBHTUFDX1RCSQkweDAwMDAwMGQ0CS8qIFRCSSBleHRlbmQgc3RhdHVzICovCisjZGVmaW5lIEdNQUNfR01JSV9TVEFUVVMgMHgwMDAwMDBkOAkvKiBTL1ItR01JSSBzdGF0dXMgKi8KKworLyogR01BQyBDb25maWd1cmF0aW9uIGRlZmluZXMgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX1RDCTB4MDEwMDAwMDAJLyogVHJhbnNtaXQgQ29uZi4gaW4gUkdNSUkvU0dNSUkgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX1dECTB4MDA4MDAwMDAJLyogRGlzYWJsZSBXYXRjaGRvZyBvbiByZWNlaXZlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9KRAkweDAwNDAwMDAwCS8qIEphYmJlciBkaXNhYmxlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9CRQkweDAwMjAwMDAwCS8qIEZyYW1lIEJ1cnN0IEVuYWJsZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfSkUJMHgwMDEwMDAwMAkvKiBKdW1ibyBmcmFtZSAqLworZW51bSBpbnRlcl9mcmFtZV9nYXAgeworCUdNQUNfQ09OVFJPTF9JRkdfODggPSAweDAwMDQwMDAwLAorCUdNQUNfQ09OVFJPTF9JRkdfODAgPSAweDAwMDIwMDAwLAorCUdNQUNfQ09OVFJPTF9JRkdfNDAgPSAweDAwMGUwMDAwLAorfTsKKyNkZWZpbmUgR01BQ19DT05UUk9MX0RDUlMJMHgwMDAxMDAwMCAvKiBEaXNhYmxlIGNhcnJpZXIgc2Vuc2UgZHVyaW5nIHR4ICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9QUwkJMHgwMDAwODAwMCAvKiBQb3J0IFNlbGVjdCAwOkdNSSAxOk1JSSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfRkVTCTB4MDAwMDQwMDAgLyogU3BlZWQgMDoxMCAxOjEwMCAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfRE8JCTB4MDAwMDIwMDAgLyogRGlzYWJsZSBSeCBPd24gKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0xNCQkweDAwMDAxMDAwIC8qIExvb3AtYmFjayBtb2RlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9ETQkJMHgwMDAwMDgwMCAvKiBEdXBsZXggTW9kZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfSVBDCTB4MDAwMDA0MDAgLyogQ2hlY2tzdW0gT2ZmbG9hZCAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfRFIJCTB4MDAwMDAyMDAgLyogRGlzYWJsZSBSZXRyeSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfTFVECTB4MDAwMDAxMDAgLyogTGluayB1cC9kb3duICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9BQ1MJMHgwMDAwMDA4MCAvKiBBdXRvbWF0aWMgUGFkIFN0cmlwcGluZyAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfREMJCTB4MDAwMDAwMTAgLyogRGVmZXJyYWwgQ2hlY2sgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX1RFCQkweDAwMDAwMDA4IC8qIFRyYW5zbWl0dGVyIEVuYWJsZSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfUkUJCTB4MDAwMDAwMDQgLyogUmVjZWl2ZXIgRW5hYmxlICovCisKKyNkZWZpbmUgR01BQ19DT1JFX0lOSVQgKEdNQUNfQ09OVFJPTF9KRCB8IEdNQUNfQ09OVFJPTF9QUyB8IEdNQUNfQ09OVFJPTF9BQ1MgfCBcCisJCQlHTUFDX0NPTlRST0xfSVBDIHwgR01BQ19DT05UUk9MX0pFIHwgR01BQ19DT05UUk9MX0JFKQorCisvKiBHTUFDIEZyYW1lIEZpbHRlciBkZWZpbmVzICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1BSCTB4MDAwMDAwMDEJLyogUHJvbWlzY3VvdXMgTW9kZSAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9IVUMJMHgwMDAwMDAwMgkvKiBIYXNoIFVuaWNhc3QgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfSE1DCTB4MDAwMDAwMDQJLyogSGFzaCBNdWx0aWNhc3QgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfREFJRgkweDAwMDAwMDA4CS8qIERBIEludmVyc2UgRmlsdGVyaW5nICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1BNCTB4MDAwMDAwMTAJLyogUGFzcyBhbGwgbXVsdGljYXN0ICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0RCRgkweDAwMDAwMDIwCS8qIERpc2FibGUgQnJvYWRjYXN0IGZyYW1lcyAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9TQUlGCTB4MDAwMDAxMDAJLyogSW52ZXJzZSBGaWx0ZXJpbmcgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfU0FGCTB4MDAwMDAyMDAJLyogU291cmNlIEFkZHJlc3MgRmlsdGVyICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0hQRgkweDAwMDAwNDAwCS8qIEhhc2ggb3IgcGVyZmVjdCBGaWx0ZXIgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfUkEJMHg4MDAwMDAwMAkvKiBSZWNlaXZlIGFsbCBtb2RlICovCisvKiBHTUlJIEFERFIgIGRlZmluZXMgKi8KKyNkZWZpbmUgR01BQ19NSUlfQUREUl9XUklURQkweDAwMDAwMDAyCS8qIE1JSSBXcml0ZSAqLworI2RlZmluZSBHTUFDX01JSV9BRERSX0JVU1kJMHgwMDAwMDAwMQkvKiBNSUkgQnVzeSAqLworLyogR01BQyBGTE9XIENUUkwgZGVmaW5lcyAqLworI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9QVF9NQVNLCTB4ZmZmZjAwMDAJLyogUGF1c2UgVGltZSBNYXNrICovCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMX1BUX1NISUZUCTE2CisjZGVmaW5lIEdNQUNfRkxPV19DVFJMX1JGRQkweDAwMDAwMDA0CS8qIFJ4IEZsb3cgQ29udHJvbCBFbmFibGUgKi8KKyNkZWZpbmUgR01BQ19GTE9XX0NUUkxfVEZFCTB4MDAwMDAwMDIJLyogVHggRmxvdyBDb250cm9sIEVuYWJsZSAqLworI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9GQ0JfQlBBCTB4MDAwMDAwMDEJLyogRmxvdyBDb250cm9sIEJ1c3kgLi4uICovCisKKy8qLS0tIERNQSBCTE9DSyBkZWZpbmVzIC0tLSovCisvKiBETUEgQnVzIE1vZGUgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBETUFfQlVTX01PREVfU0ZUX1JFU0VUCTB4MDAwMDAwMDEJLyogU29mdHdhcmUgUmVzZXQgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX0RBCQkweDAwMDAwMDAyCS8qIEFyYml0cmF0aW9uIHNjaGVtZSAqLworI2RlZmluZSBETUFfQlVTX01PREVfRFNMX01BU0sJMHgwMDAwMDA3YwkvKiBEZXNjcmlwdG9yIFNraXAgTGVuZ3RoICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9EU0xfU0hJRlQJMgkvKiAgIChpbiBEV09SRFMpICAgICAgKi8KKy8qIFByb2dyYW1tYWJsZSBidXJzdCBsZW5ndGggKHBhc3NlZCB0aG9ydWdoIHBsYXRmb3JtKSovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9QQkxfTUFTSwkweDAwMDAzZjAwCS8qIFByb2dyYW1tYWJsZSBCdXJzdCBMZW4gKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1BCTF9TSElGVAk4CisKK2VudW0gcnhfdHhfcHJpb3JpdHlfcmF0aW8geworCWRvdWJsZV9yYXRpbyA9IDB4MDAwMDQwMDAsCS8qMjoxICovCisJdHJpcGxlX3JhdGlvID0gMHgwMDAwODAwMCwJLyozOjEgKi8KKwlxdWFkcnVwbGVfcmF0aW8gPSAweDAwMDBjMDAwLAkvKjQ6MSAqLworfTsKKworI2RlZmluZSBETUFfQlVTX01PREVfRkIJCTB4MDAwMTAwMDAJLyogRml4ZWQgYnVyc3QgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1JQQkxfTUFTSwkweDAwM2UwMDAwCS8qIFJ4LVByb2dyYW1tYWJsZSBCdXJzdCBMZW4gKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1JQQkxfU0hJRlQJMTcKKyNkZWZpbmUgRE1BX0JVU19NT0RFX1VTUAkweDAwODAwMDAwCisjZGVmaW5lIERNQV9CVVNfTU9ERV80UEJMCTB4MDEwMDAwMDAKKyNkZWZpbmUgRE1BX0JVU19NT0RFX0FBTAkweDAyMDAwMDAwCisKKy8qIERNQSBDUlMgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIE1hcHBpbmcgKi8KKyNkZWZpbmUgRE1BX0hPU1RfVFhfREVTQwkgIDB4MDAwMDEwNDgJLyogQ3VycmVudCBIb3N0IFR4IGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgRE1BX0hPU1RfUlhfREVTQwkgIDB4MDAwMDEwNGMJLyogQ3VycmVudCBIb3N0IFJ4IGRlc2NyaXB0b3IgKi8KKy8qICBETUEgQnVzIE1vZGUgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBETUFfQlVTX1BSX1JBVElPX01BU0sJICAweDAwMDBjMDAwCS8qIFJ4L1R4IHByaW9yaXR5IHJhdGlvICovCisjZGVmaW5lIERNQV9CVVNfUFJfUkFUSU9fU0hJRlQJICAxNAorI2RlZmluZSBETUFfQlVTX0ZCCSAgCSAgMHgwMDAxMDAwMAkvKiBGaXhlZCBCdXJzdCAqLworCisvKiBETUEgb3BlcmF0aW9uIG1vZGUgZGVmaW5lcyAoc3RhcnQvc3RvcCB0eC9yeCBhcmUgcGxhY2VkIGluIGNvbW1vbiBoZWFkZXIpKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfRFQJCTB4MDQwMDAwMDAgLyogRGlzYWJsZSBEcm9wIFRDUC9JUCBjc3VtIGVycm9yICovCisjZGVmaW5lIERNQV9DT05UUk9MX1JTRgkJMHgwMjAwMDAwMCAvKiBSZWNlaXZlIFN0b3JlIGFuZCBGb3J3YXJkICovCisjZGVmaW5lIERNQV9DT05UUk9MX0RGRgkJMHgwMTAwMDAwMCAvKiBEaXNhYWJsZSBmbHVzaGluZyAqLworLyogVGhlc2hvbGQgZm9yIEFjdGl2YXRpbmcgdGhlIEZDICovCitlbnVtIHJmYSB7CisJYWN0X2Z1bGxfbWludXNfMSA9IDB4MDA4MDAwMDAsCisJYWN0X2Z1bGxfbWludXNfMiA9IDB4MDA4MDAyMDAsCisJYWN0X2Z1bGxfbWludXNfMyA9IDB4MDA4MDA0MDAsCisJYWN0X2Z1bGxfbWludXNfNCA9IDB4MDA4MDA2MDAsCit9OworLyogVGhlc2hvbGQgZm9yIERlYWN0aXZhdGluZyB0aGUgRkMgKi8KK2VudW0gcmZkIHsKKwlkZWFjX2Z1bGxfbWludXNfMSA9IDB4MDA0MDAwMDAsCisJZGVhY19mdWxsX21pbnVzXzIgPSAweDAwNDAwODAwLAorCWRlYWNfZnVsbF9taW51c18zID0gMHgwMDQwMTAwMCwKKwlkZWFjX2Z1bGxfbWludXNfNCA9IDB4MDA0MDE4MDAsCit9OworI2RlZmluZSBETUFfQ09OVFJPTF9UU0YJCTB4MDAyMDAwMDAgLyogVHJhbnNtaXQgIFN0b3JlIGFuZCBGb3J3YXJkICovCisjZGVmaW5lIERNQV9DT05UUk9MX0ZURgkJMHgwMDEwMDAwMCAvKiBGbHVzaCB0cmFuc21pdCBGSUZPICovCisKK2VudW0gdHRjX2NvbnRyb2wgeworCURNQV9DT05UUk9MX1RUQ182NCA9IDB4MDAwMDAwMDAsCisJRE1BX0NPTlRST0xfVFRDXzEyOCA9IDB4MDAwMDQwMDAsCisJRE1BX0NPTlRST0xfVFRDXzE5MiA9IDB4MDAwMDgwMDAsCisJRE1BX0NPTlRST0xfVFRDXzI1NiA9IDB4MDAwMGMwMDAsCisJRE1BX0NPTlRST0xfVFRDXzQwID0gMHgwMDAxMDAwMCwKKwlETUFfQ09OVFJPTF9UVENfMzIgPSAweDAwMDE0MDAwLAorCURNQV9DT05UUk9MX1RUQ18yNCA9IDB4MDAwMTgwMDAsCisJRE1BX0NPTlRST0xfVFRDXzE2ID0gMHgwMDAxYzAwMCwKK307CisjZGVmaW5lIERNQV9DT05UUk9MX1RDX1RYX01BU0sJMHhmZmZlM2ZmZgorCisjZGVmaW5lIERNQV9DT05UUk9MX0VGQwkJMHgwMDAwMDEwMAorI2RlZmluZSBETUFfQ09OVFJPTF9GRUYJCTB4MDAwMDAwODAKKyNkZWZpbmUgRE1BX0NPTlRST0xfRlVGCQkweDAwMDAwMDQwCisKK2VudW0gcnRjX2NvbnRyb2wgeworCURNQV9DT05UUk9MX1JUQ182NCA9IDB4MDAwMDAwMDAsCisJRE1BX0NPTlRST0xfUlRDXzMyID0gMHgwMDAwMDAwOCwKKwlETUFfQ09OVFJPTF9SVENfOTYgPSAweDAwMDAwMDEwLAorCURNQV9DT05UUk9MX1JUQ18xMjggPSAweDAwMDAwMDE4LAorfTsKKyNkZWZpbmUgRE1BX0NPTlRST0xfVENfUlhfTUFTSwkweGZmZmZmZmU3CisKKyNkZWZpbmUgRE1BX0NPTlRST0xfT1NGCTB4MDAwMDAwMDQJLyogT3BlcmF0ZSBvbiBzZWNvbmQgZnJhbWUgKi8KKworLyogTU1DIHJlZ2lzdGVycyBvZmZzZXQgKi8KKyNkZWZpbmUgR01BQ19NTUNfQ1RSTCAgICAgIDB4MTAwCisjZGVmaW5lIEdNQUNfTU1DX1JYX0lOVFIgICAweDEwNAorI2RlZmluZSBHTUFDX01NQ19UWF9JTlRSICAgMHgxMDgKKyNkZWZpbmUgR01BQ19NTUNfUlhfQ1NVTV9PRkZMT0FEICAgMHgyMDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjUxNzFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL21hYzEwMC5jCkBAIC0wLDAgKzEsNTE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBNQUMgMTAvMTAwIG9uLWNoaXAgRXRoZXJuZXQgY29udHJvbGxlcgorICBjdXJyZW50bHkgdGVzdGVkIG9uIGFsbCB0aGUgU1QgYm9hcmRzIGJhc2VkIG9uIFNUYjcxMDkgYW5kIHN0eDcyMDAgU29Dcy4KKworICBEV0MgRXRoZXIgTUFDIDEwLzEwMCBVbml2ZXJzYWwgdmVyc2lvbiA0LjAgaGFzIGJlZW4gdXNlZCBmb3IgZGV2ZWxvcGluZworICB0aGlzIGNvZGUuCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibWFjMTAwLmgiCisKKyN1bmRlZiBNQUMxMDBfREVCVUcKKy8qI2RlZmluZSBNQUMxMDBfREVCVUcqLworI2lmZGVmIE1BQzEwMF9ERUJVRworI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQgbWFjMTAwX2NvcmVfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBNQUNfQ09OVFJPTCk7CisKKwl3cml0ZWwoKHZhbHVlIHwgTUFDX0NPUkVfSU5JVCksIGlvYWRkciArIE1BQ19DT05UUk9MKTsKKworI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECisJd3JpdGVsKEVUSF9QXzgwMjFRLCBpb2FkZHIgKyBNQUNfVkxBTjEpOworI2VuZGlmCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfZHVtcF9tYWNfcmVncyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlwcl9pbmZvKCJcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKwkgICAgICAgIlx0ICBNQUMxMDAgQ1NSIChiYXNlIGFkZHIgPSAweCU4eClcbiIKKwkgICAgICAgIlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludClpb2FkZHIpOworCXByX2luZm8oIlx0Y29udHJvbCByZWcgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfQ09OVFJPTCwKKwkgICAgICAgcmVhZGwoaW9hZGRyICsgTUFDX0NPTlRST0wpKTsKKwlwcl9pbmZvKCJcdGFkZHIgSEkgKG9mZnNldCAweCV4KTogMHglMDh4XG4gIiwgTUFDX0FERFJfSElHSCwKKwkgICAgICAgcmVhZGwoaW9hZGRyICsgTUFDX0FERFJfSElHSCkpOworCXByX2luZm8oIlx0YWRkciBMTyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIE1BQ19BRERSX0xPVywKKwkgICAgICAgcmVhZGwoaW9hZGRyICsgTUFDX0FERFJfTE9XKSk7CisJcHJfaW5mbygiXHRtdWx0aWNhc3QgaGFzaCBISSAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCQlNQUNfSEFTSF9ISUdILCByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKSk7CisJcHJfaW5mbygiXHRtdWx0aWNhc3QgaGFzaCBMTyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCQlNQUNfSEFTSF9MT1csIHJlYWRsKGlvYWRkciArIE1BQ19IQVNIX0xPVykpOworCXByX2luZm8oIlx0ZmxvdyBjb250cm9sIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkJTUFDX0ZMT1dfQ1RSTCwgcmVhZGwoaW9hZGRyICsgTUFDX0ZMT1dfQ1RSTCkpOworCXByX2luZm8oIlx0VkxBTjEgdGFnIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX1ZMQU4xLAorCSAgICAgICByZWFkbChpb2FkZHIgKyBNQUNfVkxBTjEpKTsKKwlwcl9pbmZvKCJcdFZMQU4yIHRhZyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIE1BQ19WTEFOMiwKKwkgICAgICAgcmVhZGwoaW9hZGRyICsgTUFDX1ZMQU4yKSk7CisJcHJfaW5mbygiXG5cdE1BQyBtYW5hZ2VtZW50IGNvdW50ZXIgcmVnaXN0ZXJzXG4iKTsKKwlwcl9pbmZvKCJcdCBNTUMgY3J0bCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJICAgICAgIE1NQ19DT05UUk9MLCByZWFkbChpb2FkZHIgKyBNTUNfQ09OVFJPTCkpOworCXByX2luZm8oIlx0IE1NQyBIaWdoIEludGVycnVwdCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJICAgICAgIE1NQ19ISUdIX0lOVFIsIHJlYWRsKGlvYWRkciArIE1NQ19ISUdIX0lOVFIpKTsKKwlwcl9pbmZvKCJcdCBNTUMgTG93IEludGVycnVwdCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJICAgICAgIE1NQ19MT1dfSU5UUiwgcmVhZGwoaW9hZGRyICsgTU1DX0xPV19JTlRSKSk7CisJcHJfaW5mbygiXHQgTU1DIEhpZ2ggSW50ZXJydXB0IE1hc2sgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCSAgICAgICBNTUNfSElHSF9JTlRSX01BU0ssIHJlYWRsKGlvYWRkciArIE1NQ19ISUdIX0lOVFJfTUFTSykpOworCXByX2luZm8oIlx0IE1NQyBMb3cgSW50ZXJydXB0IE1hc2sgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCSAgICAgICBNTUNfTE9XX0lOVFJfTUFTSywgcmVhZGwoaW9hZGRyICsgTU1DX0xPV19JTlRSX01BU0spKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgbWFjMTAwX2RtYV9pbml0KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgcGJsLCB1MzIgZG1hX3R4LAorCQkJICAgdTMyIGRtYV9yeCkKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpOworCS8qIERNQSBTVyByZXNldCAqLworCXZhbHVlIHw9IERNQV9CVVNfTU9ERV9TRlRfUkVTRVQ7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQlVTX01PREUpOworCWRvIHt9IHdoaWxlICgocmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFKSAmIERNQV9CVVNfTU9ERV9TRlRfUkVTRVQpKTsKKworCS8qIEVuYWJsZSBBcHBsaWNhdGlvbiBBY2Nlc3MgYnkgd3JpdGluZyB0byBETUEgQ1NSMCAqLworCXdyaXRlbChETUFfQlVTX01PREVfREVGQVVMVCB8IChwYmwgPDwgRE1BX0JVU19NT0RFX1BCTF9TSElGVCksCisJICAgICAgIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisKKwkvKiBNYXNrIGludGVycnVwdHMgYnkgd3JpdGluZyB0byBDU1I3ICovCisJd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgaW9hZGRyICsgRE1BX0lOVFJfRU5BKTsKKworCS8qIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFJYL1RYIGRlc2NyaXB0b3IgbGlzdHMgbXVzdCBiZSB3cml0dGVuIGludG8KKwkgKiBETUEgQ1NSMyBhbmQgQ1NSNCwgcmVzcGVjdGl2ZWx5LiAqLworCXdyaXRlbChkbWFfdHgsIGlvYWRkciArIERNQV9UWF9CQVNFX0FERFIpOworCXdyaXRlbChkbWFfcngsIGlvYWRkciArIERNQV9SQ1ZfQkFTRV9BRERSKTsKKworCXJldHVybiAwOworfQorCisvKiBTdG9yZSBhbmQgRm9yd2FyZCBjYXBhYmlsaXR5IGlzIG5vdCB1c2VkIGF0IGFsbC4uCisgKiBUaGUgdHJhbnNtaXQgdGhyZXNob2xkIGNhbiBiZSBwcm9ncmFtbWVkIGJ5CisgKiBzZXR0aW5nIHRoZSBUVEMgYml0cyBpbiB0aGUgRE1BIGNvbnRyb2wgcmVnaXN0ZXIuKi8KK3N0YXRpYyB2b2lkIG1hYzEwMF9kbWFfb3BlcmF0aW9uX21vZGUodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCB0eG1vZGUsCisJCQkJICAgICAgaW50IHJ4bW9kZSkKK3sKKwl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCWlmICh0eG1vZGUgPD0gMzIpCisJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzMyOworCWVsc2UgaWYgKHR4bW9kZSA8PSA2NCkKKwkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfNjQ7CisJZWxzZQorCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18xMjg7CisKKwl3cml0ZWwoY3NyNiwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfZHVtcF9kbWFfcmVncyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgaTsKKworCURCRyhLRVJOX0RFQlVHICJNQUMxMDAgRE1BIENTUiBcbiIpOworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCXByX2RlYnVnKCJcdCBDU1IlZCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIGksCisJCSAgICAgICAoRE1BX0JVU19NT0RFICsgaSAqIDQpLAorCQkgICAgICAgcmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFICsgaSAqIDQpKTsKKwlEQkcoS0VSTl9ERUJVRyAiXHQgQ1NSMjAgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCSAgICBETUFfQ1VSX1RYX0JVRl9BRERSLCByZWFkbChpb2FkZHIgKyBETUFfQ1VSX1RYX0JVRl9BRERSKSk7CisJREJHKEtFUk5fREVCVUcgIlx0IENTUjIxIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkgICAgRE1BX0NVUl9SWF9CVUZfQUREUiwgcmVhZGwoaW9hZGRyICsgRE1BX0NVUl9SWF9CVUZfQUREUikpOworCXJldHVybjsKK30KKworLyogRE1BIGNvbnRyb2xsZXIgaGFzIHR3byBjb3VudGVycyB0byB0cmFjayB0aGUgbnVtYmVyIG9mCisgICB0aGUgcmVjZWl2ZSBtaXNzZWQgZnJhbWVzLiAqLworc3RhdGljIHZvaWQgbWFjMTAwX2RtYV9kaWFnbm9zdGljX2ZyKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOworCXUzMiBjc3I4ID0gcmVhZGwoaW9hZGRyICsgRE1BX01JU1NFRF9GUkFNRV9DVFIpOworCisJaWYgKHVubGlrZWx5KGNzcjgpKSB7CisJCWlmIChjc3I4ICYgRE1BX01JU1NFRF9GUkFNRV9PVkUpIHsKKwkJCXN0YXRzLT5yeF9vdmVyX2Vycm9ycyArPSAweDgwMDsKKwkJCXgtPnJ4X292ZXJmbG93X2NudHIgKz0gMHg4MDA7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgb3ZlX2NudHI7CisJCQlvdmVfY250ciA9ICgoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfT1ZFX0NOVFIpID4+IDE3KTsKKwkJCXN0YXRzLT5yeF9vdmVyX2Vycm9ycyArPSBvdmVfY250cjsKKwkJCXgtPnJ4X292ZXJmbG93X2NudHIgKz0gb3ZlX2NudHI7CisJCX0KKworCQlpZiAoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfT1ZFX00pIHsKKwkJCXN0YXRzLT5yeF9taXNzZWRfZXJyb3JzICs9IDB4ZmZmZjsKKwkJCXgtPnJ4X21pc3NlZF9jbnRyICs9IDB4ZmZmZjsKKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGludCBtaXNzX2YgPSAoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfTV9DTlRSKTsKKwkJCXN0YXRzLT5yeF9taXNzZWRfZXJyb3JzICs9IG1pc3NfZjsKKwkJCXgtPnJ4X21pc3NlZF9jbnRyICs9IG1pc3NfZjsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgbWFjMTAwX2dldF90eF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICAgICBzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRhdGE7CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEudHguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4LnVuZGVyZmxvd19lcnJvcikpIHsKKwkJCXgtPnR4X3VuZGVyZmxvdysrOworCQkJc3RhdHMtPnR4X2ZpZm9fZXJyb3JzKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4Lm5vX2NhcnJpZXIpKSB7CisJCQl4LT50eF9jYXJyaWVyKys7CisJCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEudHgubG9zc19jYXJyaWVyKSkgeworCQkJeC0+dHhfbG9zc2NhcnJpZXIrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseSgocC0+ZGVzMDEudHguZXhjZXNzaXZlX2RlZmVycmFsKSB8fAorCQkJICAgICAocC0+ZGVzMDEudHguZXhjZXNzaXZlX2NvbGxpc2lvbnMpIHx8CisJCQkgICAgIChwLT5kZXMwMS50eC5sYXRlX2NvbGxpc2lvbikpKQorCQkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcC0+ZGVzMDEudHguY29sbGlzaW9uX2NvdW50OworCQlyZXQgPSAtMTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4LmhlYXJ0YmVhdF9mYWlsKSkgeworCQl4LT50eF9oZWFydGJlYXQrKzsKKwkJc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKKwkJcmV0ID0gLTE7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5kZWZlcnJlZCkpCisJCXgtPnR4X2RlZmVycmVkKys7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1hYzEwMF9nZXRfdHhfbGVuKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEudHguYnVmZmVyMV9zaXplOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIGlmIGVhY2ggaW5jb21pbmcgZnJhbWUgaGFzIHNvbWUgZXJyb3JzCisgKiBhbmQsIGlmIHJlcXVpcmVkLCB1cGRhdGVzIHRoZSBtdWx0aWNhc3Qgc3RhdGlzdGljcy4KKyAqIEluIGNhc2Ugb2Ygc3VjY2VzcywgaXQgcmV0dXJucyBjc3VtX25vbmUgYmVjYXN1ZSB0aGUgZGV2aWNlCisgKiBpcyBub3QgYWJsZSB0byBjb21wdXRlIHRoZSBjc3VtIGluIEhXLiAqLworc3RhdGljIGludCBtYWMxMDBfZ2V0X3J4X2ZyYW1lX3N0YXR1cyh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJCSAgICAgIHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlpbnQgcmV0ID0gY3N1bV9ub25lOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRhdGE7CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucngubGFzdF9kZXNjcmlwdG9yID09IDApKSB7CisJCXByX3dhcm5pbmcoIm1hYzEwMCBFcnJvcjogT3ZlcnNpemVkIEV0aGVybmV0ICIKKwkJCSAgICJmcmFtZSBzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnNcbiIpOworCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQlyZXR1cm4gZGlzY2FyZF9mcmFtZTsKKwl9CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmRlc2NyaXB0b3JfZXJyb3IpKQorCQkJeC0+cnhfZGVzYysrOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucngucGFydGlhbF9mcmFtZV9lcnJvcikpCisJCQl4LT5yeF9wYXJ0aWFsKys7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5ydW5fZnJhbWUpKQorCQkJeC0+cnhfcnVudCsrOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguZnJhbWVfdG9vX2xvbmcpKQorCQkJeC0+cnhfdG9vbG9uZysrOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguY29sbGlzaW9uKSkgeworCQkJeC0+cnhfY29sbGlzaW9uKys7CisJCQlzdGF0cy0+Y29sbGlzaW9ucysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5jcmNfZXJyb3IpKSB7CisJCQl4LT5yeF9jcmMrKzsKKwkJCXN0YXRzLT5yeF9jcmNfZXJyb3JzKys7CisJCX0KKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmRyaWJibGluZykpCisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucngubGVuZ3RoX2Vycm9yKSkgeworCQl4LT5yeF9sZW5naHQrKzsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lm1paV9lcnJvcikpIHsKKwkJeC0+cnhfbWlpKys7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmIChwLT5kZXMwMS5yeC5tdWx0aWNhc3RfZnJhbWUpIHsKKwkJeC0+cnhfbXVsdGljYXN0Kys7CisJCXN0YXRzLT5tdWx0aWNhc3QrKzsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbWFjMTAwX2lycV9zdGF0dXModW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfc2V0X3VtYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCSAgdW5zaWduZWQgaW50IHJlZ19uKQoreworCXN0bW1hY19zZXRfbWFjX2FkZHIoaW9hZGRyLCBhZGRyLCBNQUNfQUREUl9ISUdILCBNQUNfQUREUl9MT1cpOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfZ2V0X3VtYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCSAgdW5zaWduZWQgaW50IHJlZ19uKQoreworCXN0bW1hY19nZXRfbWFjX2FkZHIoaW9hZGRyLCBhZGRyLCBNQUNfQUREUl9ISUdILCBNQUNfQUREUl9MT1cpOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfc2V0X2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgTUFDX0NPTlRST0wpOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQl2YWx1ZSB8PSBNQUNfQ09OVFJPTF9QUjsKKwkJdmFsdWUgJj0gfihNQUNfQ09OVFJPTF9QTSB8IE1BQ19DT05UUk9MX0lGIHwgTUFDX0NPTlRST0xfSE8gfAorCQkJICAgTUFDX0NPTlRST0xfSFApOworCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBIQVNIX1RBQkxFX1NJWkUpCisJCSAgIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQl2YWx1ZSB8PSBNQUNfQ09OVFJPTF9QTTsKKwkJdmFsdWUgJj0gfihNQUNfQ09OVFJPTF9QUiB8IE1BQ19DT05UUk9MX0lGIHwgTUFDX0NPTlRST0xfSE8pOworCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgTUFDX0hBU0hfSElHSCk7CisJCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBNQUNfSEFTSF9MT1cpOworCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCA9PSAwKSB7CS8qIG5vIG11bHRpY2FzdCAqLworCQl2YWx1ZSAmPSB+KE1BQ19DT05UUk9MX1BNIHwgTUFDX0NPTlRST0xfUFIgfCBNQUNfQ09OVFJPTF9JRiB8CisJCQkgICBNQUNfQ09OVFJPTF9ITyB8IE1BQ19DT05UUk9MX0hQKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJdTMyIG1jX2ZpbHRlclsyXTsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisKKwkJLyogUGVyZmVjdCBmaWx0ZXIgbW9kZSBmb3IgcGh5c2ljYWwgYWRkcmVzcyBhbmQgSGFzaAorCQkgICBmaWx0ZXIgZm9yIG11bHRpY2FzdCAqLworCQl2YWx1ZSB8PSBNQUNfQ09OVFJPTF9IUDsKKwkJdmFsdWUgJj0gfihNQUNfQ09OVFJPTF9QTSB8IE1BQ19DT05UUk9MX1BSIHwgTUFDX0NPTlRST0xfSUYKKwkJCSAgIHwgTUFDX0NPTlRST0xfSE8pOworCisJCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKKwkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OworCQkgICAgIG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJCS8qIFRoZSB1cHBlciA2IGJpdHMgb2YgdGhlIGNhbGN1bGF0ZWQgQ1JDIGFyZSB1c2VkIHRvCisJCQkgKiBpbmRleCB0aGUgY29udGVucyBvZiB0aGUgaGFzaCB0YWJsZSAqLworCQkJaW50IGJpdF9uciA9CisJCQkgICAgZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKKwkJCS8qIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBkZXRlcm1pbmVzIHRoZSByZWdpc3RlciB0bworCQkJICogdXNlIChIL0wpIHdoaWxlIHRoZSBvdGhlciA1IGJpdHMgZGV0ZXJtaW5lIHRoZSBiaXQKKwkJCSAqIHdpdGhpbiB0aGUgcmVnaXN0ZXIuICovCisJCQltY19maWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKKwkJfQorCQl3cml0ZWwobWNfZmlsdGVyWzBdLCBpb2FkZHIgKyBNQUNfSEFTSF9MT1cpOworCQl3cml0ZWwobWNfZmlsdGVyWzFdLCBpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKTsKKwl9CisKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIE1BQ19DT05UUk9MKTsKKworCURCRyhLRVJOX0lORk8gIiVzOiBDVFJMIHJlZzogMHglMDh4IEhhc2ggcmVnczogIgorCSAgICAiSEkgMHglMDh4LCBMTyAweCUwOHhcbiIsCisJICAgIF9fZnVuY19fLCByZWFkbChpb2FkZHIgKyBNQUNfQ09OVFJPTCksCisJICAgIHJlYWRsKGlvYWRkciArIE1BQ19IQVNIX0hJR0gpLCByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9MT1cpKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9mbG93X2N0cmwodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGludCBkdXBsZXgsCisJCQkgICAgIHVuc2lnbmVkIGludCBmYywgdW5zaWduZWQgaW50IHBhdXNlX3RpbWUpCit7CisJdW5zaWduZWQgaW50IGZsb3cgPSBNQUNfRkxPV19DVFJMX0VOQUJMRTsKKworCWlmIChkdXBsZXgpCisJCWZsb3cgfD0gKHBhdXNlX3RpbWUgPDwgTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVCk7CisJd3JpdGVsKGZsb3csIGlvYWRkciArIE1BQ19GTE9XX0NUUkwpOworCisJcmV0dXJuOworfQorCisvKiBObyBQTVQgbW9kdWxlIHN1cHBvcnRlZCBpbiBvdXIgU29DICBmb3IgdGhlIEV0aGVybmV0IENvbnRyb2xsZXIuICovCitzdGF0aWMgdm9pZCBtYWMxMDBfcG10KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfaW5pdF9yeF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSwKKwkJCQlpbnQgZGlzYWJsZV9yeF9pYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKKwkJcC0+ZGVzMDEucngub3duID0gMTsKKwkJcC0+ZGVzMDEucnguYnVmZmVyMV9zaXplID0gQlVGX1NJWkVfMktpQiAtIDE7CisJCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCisJCQlwLT5kZXMwMS5yeC5lbmRfcmluZyA9IDE7CisJCWlmIChkaXNhYmxlX3J4X2ljKQorCQkJcC0+ZGVzMDEucnguZGlzYWJsZV9pYyA9IDE7CisJCXArKzsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfaW5pdF90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKKwkJcC0+ZGVzMDEudHgub3duID0gMDsKKwkJaWYgKGkgPT0gcmluZ19zaXplIC0gMSkKKwkJCXAtPmRlczAxLnR4LmVuZF9yaW5nID0gMTsKKwkJcCsrOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgbWFjMTAwX2dldF90eF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLnR4Lm93bjsKK30KKworc3RhdGljIGludCBtYWMxMDBfZ2V0X3J4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEucngub3duOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfc2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS50eC5vd24gPSAxOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfc2V0X3J4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5yeC5vd24gPSAxOworfQorCitzdGF0aWMgaW50IG1hYzEwMF9nZXRfdHhfbHMoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS50eC5sYXN0X3NlZ21lbnQ7Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9yZWxlYXNlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQoreworCWludCB0ZXIgPSBwLT5kZXMwMS50eC5lbmRfcmluZzsKKworCS8qIGNsZWFuIGZpZWxkIHVzZWQgd2l0aGluIHRoZSB4bWl0ICovCisJcC0+ZGVzMDEudHguZmlyc3Rfc2VnbWVudCA9IDA7CisJcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50ID0gMDsKKwlwLT5kZXMwMS50eC5idWZmZXIxX3NpemUgPSAwOworCisJLyogY2xlYW4gc3RhdHVzIHJlcG9ydGVkICovCisJcC0+ZGVzMDEudHguZXJyb3Jfc3VtbWFyeSA9IDA7CisJcC0+ZGVzMDEudHgudW5kZXJmbG93X2Vycm9yID0gMDsKKwlwLT5kZXMwMS50eC5ub19jYXJyaWVyID0gMDsKKwlwLT5kZXMwMS50eC5sb3NzX2NhcnJpZXIgPSAwOworCXAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9kZWZlcnJhbCA9IDA7CisJcC0+ZGVzMDEudHguZXhjZXNzaXZlX2NvbGxpc2lvbnMgPSAwOworCXAtPmRlczAxLnR4LmxhdGVfY29sbGlzaW9uID0gMDsKKwlwLT5kZXMwMS50eC5oZWFydGJlYXRfZmFpbCA9IDA7CisJcC0+ZGVzMDEudHguZGVmZXJyZWQgPSAwOworCisJLyogc2V0IHRlcm1pbmF0aW9uIGZpZWxkICovCisJcC0+ZGVzMDEudHguZW5kX3JpbmcgPSB0ZXI7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9wcmVwYXJlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCBpbnQgaXNfZnMsIGludCBsZW4sCisJCQkJICAgaW50IGNzdW1fZmxhZykKK3sKKwlwLT5kZXMwMS50eC5maXJzdF9zZWdtZW50ID0gaXNfZnM7CisJcC0+ZGVzMDEudHguYnVmZmVyMV9zaXplID0gbGVuOworfQorCitzdGF0aWMgdm9pZCBtYWMxMDBfY2xlYXJfdHhfaWMoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLnR4LmludGVycnVwdCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hYzEwMF9jbG9zZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS50eC5sYXN0X3NlZ21lbnQgPSAxOworCXAtPmRlczAxLnR4LmludGVycnVwdCA9IDE7Cit9CisKK3N0YXRpYyBpbnQgbWFjMTAwX2dldF9yeF9mcmFtZV9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5yeC5mcmFtZV9sZW5ndGg7Cit9CisKK3N0cnVjdCBzdG1tYWNfb3BzIG1hYzEwMF9kcml2ZXIgPSB7CisJLmNvcmVfaW5pdCA9IG1hYzEwMF9jb3JlX2luaXQsCisJLmR1bXBfbWFjX3JlZ3MgPSBtYWMxMDBfZHVtcF9tYWNfcmVncywKKwkuZG1hX2luaXQgPSBtYWMxMDBfZG1hX2luaXQsCisJLmR1bXBfZG1hX3JlZ3MgPSBtYWMxMDBfZHVtcF9kbWFfcmVncywKKwkuZG1hX21vZGUgPSBtYWMxMDBfZG1hX29wZXJhdGlvbl9tb2RlLAorCS5kbWFfZGlhZ25vc3RpY19mciA9IG1hYzEwMF9kbWFfZGlhZ25vc3RpY19mciwKKwkudHhfc3RhdHVzID0gbWFjMTAwX2dldF90eF9mcmFtZV9zdGF0dXMsCisJLnJ4X3N0YXR1cyA9IG1hYzEwMF9nZXRfcnhfZnJhbWVfc3RhdHVzLAorCS5nZXRfdHhfbGVuID0gbWFjMTAwX2dldF90eF9sZW4sCisJLnNldF9maWx0ZXIgPSBtYWMxMDBfc2V0X2ZpbHRlciwKKwkuZmxvd19jdHJsID0gbWFjMTAwX2Zsb3dfY3RybCwKKwkucG10ID0gbWFjMTAwX3BtdCwKKwkuaW5pdF9yeF9kZXNjID0gbWFjMTAwX2luaXRfcnhfZGVzYywKKwkuaW5pdF90eF9kZXNjID0gbWFjMTAwX2luaXRfdHhfZGVzYywKKwkuZ2V0X3R4X293bmVyID0gbWFjMTAwX2dldF90eF9vd25lciwKKwkuZ2V0X3J4X293bmVyID0gbWFjMTAwX2dldF9yeF9vd25lciwKKwkucmVsZWFzZV90eF9kZXNjID0gbWFjMTAwX3JlbGVhc2VfdHhfZGVzYywKKwkucHJlcGFyZV90eF9kZXNjID0gbWFjMTAwX3ByZXBhcmVfdHhfZGVzYywKKwkuY2xlYXJfdHhfaWMgPSBtYWMxMDBfY2xlYXJfdHhfaWMsCisJLmNsb3NlX3R4X2Rlc2MgPSBtYWMxMDBfY2xvc2VfdHhfZGVzYywKKwkuZ2V0X3R4X2xzID0gbWFjMTAwX2dldF90eF9scywKKwkuc2V0X3R4X293bmVyID0gbWFjMTAwX3NldF90eF9vd25lciwKKwkuc2V0X3J4X293bmVyID0gbWFjMTAwX3NldF9yeF9vd25lciwKKwkuZ2V0X3J4X2ZyYW1lX2xlbiA9IG1hYzEwMF9nZXRfcnhfZnJhbWVfbGVuLAorCS5ob3N0X2lycV9zdGF0dXMgPSBtYWMxMDBfaXJxX3N0YXR1cywKKwkuc2V0X3VtYWNfYWRkciA9IG1hYzEwMF9zZXRfdW1hY19hZGRyLAorCS5nZXRfdW1hY19hZGRyID0gbWFjMTAwX2dldF91bWFjX2FkZHIsCit9OworCitzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMxMDBfc2V0dXAodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjOworCisJbWFjID0ga3phbGxvYyhzaXplb2YoY29uc3Qgc3RydWN0IG1hY19kZXZpY2VfaW5mbyksIEdGUF9LRVJORUwpOworCisJcHJfaW5mbygiXHRNQUMgMTAvMTAwXG4iKTsKKworCW1hYy0+b3BzID0gJm1hYzEwMF9kcml2ZXI7CisJbWFjLT5ody5wbXQgPSBQTVRfTk9UX1NVUFBPUlRFRDsKKwltYWMtPmh3LmxpbmsucG9ydCA9IE1BQ19DT05UUk9MX1BTOworCW1hYy0+aHcubGluay5kdXBsZXggPSBNQUNfQ09OVFJPTF9GOworCW1hYy0+aHcubGluay5zcGVlZCA9IDA7CisJbWFjLT5ody5taWkuYWRkciA9IE1BQ19NSUlfQUREUjsKKwltYWMtPmh3Lm1paS5kYXRhID0gTUFDX01JSV9EQVRBOworCisJcmV0dXJuIG1hYzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjhmMTEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL21hYzEwMC5oCkBAIC0wLDAgKzEsMTE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBNQUMgMTAvMTAwIEhlYWRlciBGaWxlCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJIAkJCU1BQyBCTE9DSyBkZWZpbmVzCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNQUMgQ1NSIG9mZnNldCAqLworI2RlZmluZSBNQUNfQ09OVFJPTAkweDAwMDAwMDAwCS8qIE1BQyBDb250cm9sICovCisjZGVmaW5lIE1BQ19BRERSX0hJR0gJMHgwMDAwMDAwNAkvKiBNQUMgQWRkcmVzcyBIaWdoICovCisjZGVmaW5lIE1BQ19BRERSX0xPVwkweDAwMDAwMDA4CS8qIE1BQyBBZGRyZXNzIExvdyAqLworI2RlZmluZSBNQUNfSEFTSF9ISUdICTB4MDAwMDAwMGMJLyogTXVsdGljYXN0IEhhc2ggVGFibGUgSGlnaCAqLworI2RlZmluZSBNQUNfSEFTSF9MT1cJMHgwMDAwMDAxMAkvKiBNdWx0aWNhc3QgSGFzaCBUYWJsZSBMb3cgKi8KKyNkZWZpbmUgTUFDX01JSV9BRERSCTB4MDAwMDAwMTQJLyogTUlJIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUFDX01JSV9EQVRBCTB4MDAwMDAwMTgJLyogTUlJIERhdGEgKi8KKyNkZWZpbmUgTUFDX0ZMT1dfQ1RSTAkweDAwMDAwMDFjCS8qIEZsb3cgQ29udHJvbCAqLworI2RlZmluZSBNQUNfVkxBTjEJMHgwMDAwMDAyMAkvKiBWTEFOMSBUYWcgKi8KKyNkZWZpbmUgTUFDX1ZMQU4yCTB4MDAwMDAwMjQJLyogVkxBTjIgVGFnICovCisKKy8qIE1BQyBDVFJMIGRlZmluZXMgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfUkEJMHg4MDAwMDAwMAkvKiBSZWNlaXZlIEFsbCBNb2RlICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0JMRQkweDQwMDAwMDAwCS8qIEVuZGlhbiBNb2RlICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0hCRAkweDEwMDAwMDAwCS8qIEhlYXJ0YmVhdCBEaXNhYmxlICovCisjZGVmaW5lIE1BQ19DT05UUk9MX1BTCTB4MDgwMDAwMDAJLyogUG9ydCBTZWxlY3QgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfRFJPCTB4MDA4MDAwMDAJLyogRGlzYWJsZSBSZWNlaXZlIE93biAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9FWFRfTE9PUEJBQ0sgMHgwMDQwMDAwMAkvKiBSZXNlcnZlZCAoZXh0IGxvb3BiYWNrPykgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfT00JMHgwMDIwMDAwMAkvKiBMb29wYmFjayBPcGVyYXRpbmcgTW9kZSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9GCTB4MDAxMDAwMDAJLyogRnVsbCBEdXBsZXggTW9kZSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9QTQkweDAwMDgwMDAwCS8qIFBhc3MgQWxsIE11bHRpY2FzdCAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9QUgkweDAwMDQwMDAwCS8qIFByb21pc2N1b3VzIE1vZGUgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfSUYJMHgwMDAyMDAwMAkvKiBJbnZlcnNlIEZpbHRlcmluZyAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9QQgkweDAwMDEwMDAwCS8qIFBhc3MgQmFkIEZyYW1lcyAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9ITwkweDAwMDA4MDAwCS8qIEhhc2ggT25seSBGaWx0ZXJpbmcgTW9kZSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9IUAkweDAwMDAyMDAwCS8qIEhhc2gvUGVyZmVjdCBGaWx0ZXJpbmcgTW9kZSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9MQ0MJMHgwMDAwMTAwMAkvKiBMYXRlIENvbGxpc2lvbiBDb250cm9sICovCisjZGVmaW5lIE1BQ19DT05UUk9MX0RCRgkweDAwMDAwODAwCS8qIERpc2FibGUgQnJvYWRjYXN0IEZyYW1lcyAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9EUlRZCTB4MDAwMDA0MDAJLyogRGlzYWJsZSBSZXRyeSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9BU1RQCTB4MDAwMDAxMDAJLyogQXV0b21hdGljIFBhZCBTdHJpcHBpbmcgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfQk9MTVRfMTAJMHgwMDAwMDAwMAkvKiBCYWNrIE9mZiBMaW1pdCAxMCAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9CT0xNVF84CTB4MDAwMDAwNDAJLyogQmFjayBPZmYgTGltaXQgOCAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9CT0xNVF80CTB4MDAwMDAwODAJLyogQmFjayBPZmYgTGltaXQgNCAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9CT0xNVF8xCTB4MDAwMDAwYzAJLyogQmFjayBPZmYgTGltaXQgMSAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9EQwkJMHgwMDAwMDAyMAkvKiBEZWZlcnJhbCBDaGVjayAqLworI2RlZmluZSBNQUNfQ09OVFJPTF9URQkJMHgwMDAwMDAwOAkvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KKyNkZWZpbmUgTUFDX0NPTlRST0xfUkUJCTB4MDAwMDAwMDQJLyogUmVjZWl2ZXIgRW5hYmxlICovCisKKyNkZWZpbmUgTUFDX0NPUkVfSU5JVCAoTUFDX0NPTlRST0xfSEJEIHwgTUFDX0NPTlRST0xfQVNUUCkKKworLyogTUFDIEZMT1cgQ1RSTCBkZWZpbmVzICovCisjZGVmaW5lIE1BQ19GTE9XX0NUUkxfUFRfTUFTSwkweGZmZmYwMDAwCS8qIFBhdXNlIFRpbWUgTWFzayAqLworI2RlZmluZSBNQUNfRkxPV19DVFJMX1BUX1NISUZUCTE2CisjZGVmaW5lIE1BQ19GTE9XX0NUUkxfUEFTUwkweDAwMDAwMDA0CS8qIFBhc3MgQ29udHJvbCBGcmFtZXMgKi8KKyNkZWZpbmUgTUFDX0ZMT1dfQ1RSTF9FTkFCTEUJMHgwMDAwMDAwMgkvKiBGbG93IENvbnRyb2wgRW5hYmxlICovCisjZGVmaW5lIE1BQ19GTE9XX0NUUkxfUEFVU0UJMHgwMDAwMDAwMQkvKiBGbG93IENvbnRyb2wgQnVzeSAuLi4gKi8KKworLyogTUlJIEFERFIgIGRlZmluZXMgKi8KKyNkZWZpbmUgTUFDX01JSV9BRERSX1dSSVRFCTB4MDAwMDAwMDIJLyogTUlJIFdyaXRlICovCisjZGVmaW5lIE1BQ19NSUlfQUREUl9CVVNZCTB4MDAwMDAwMDEJLyogTUlJIEJ1c3kgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAJCQkJRE1BIEJMT0NLIGRlZmluZXMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRE1BIEJ1cyBNb2RlIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX0RCTwkweDAwMTAwMDAwCS8qIERlc2NyaXB0b3IgQnl0ZSBPcmRlcmluZyAqLworI2RlZmluZSBETUFfQlVTX01PREVfQkxFCTB4MDAwMDAwODAJLyogQmlnIEVuZGlhbi9MaXR0bGUgRW5kaWFuICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9QQkxfTUFTSwkweDAwMDAzZjAwCS8qIFByb2dyYW1tYWJsZSBCdXJzdCBMZW4gKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1BCTF9TSElGVAk4CisjZGVmaW5lIERNQV9CVVNfTU9ERV9EU0xfTUFTSwkweDAwMDAwMDdjCS8qIERlc2NyaXB0b3IgU2tpcCBMZW5ndGggKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX0RTTF9TSElGVAkyCS8qICAgKGluIERXT1JEUykgICAgICAqLworI2RlZmluZSBETUFfQlVTX01PREVfQkFSX0JVUwkweDAwMDAwMDAyCS8qIEJhci1CdXMgQXJiaXRyYXRpb24gKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1NGVF9SRVNFVAkweDAwMDAwMDAxCS8qIFNvZnR3YXJlIFJlc2V0ICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9ERUZBVUxUCTB4MDAwMDAwMDAKKworLyogRE1BIENvbnRyb2wgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBETUFfQ09OVFJPTF9TRgkJMHgwMDIwMDAwMAkvKiBTdG9yZSBBbmQgRm9yd2FyZCAqLworCisvKiBUcmFuc21pdCBUaHJlc2hvbGQgQ29udHJvbCAqLworZW51bSB0dGNfY29udHJvbCB7CisJRE1BX0NPTlRST0xfVFRDX0RFRkFVTFQgPSAweDAwMDAwMDAwLAkvKiBUaHJlc2hvbGQgaXMgMzIgRFdPUkRTICovCisJRE1BX0NPTlRST0xfVFRDXzY0ID0gMHgwMDAwNDAwMCwJLyogVGhyZXNob2xkIGlzIDY0IERXT1JEUyAqLworCURNQV9DT05UUk9MX1RUQ18xMjggPSAweDAwMDA4MDAwLAkvKiBUaHJlc2hvbGQgaXMgMTI4IERXT1JEUyAqLworCURNQV9DT05UUk9MX1RUQ18yNTYgPSAweDAwMDBjMDAwLAkvKiBUaHJlc2hvbGQgaXMgMjU2IERXT1JEUyAqLworCURNQV9DT05UUk9MX1RUQ18xOCA9IDB4MDA0MDAwMDAsCS8qIFRocmVzaG9sZCBpcyAxOCBEV09SRFMgKi8KKwlETUFfQ09OVFJPTF9UVENfMjQgPSAweDAwNDA0MDAwLAkvKiBUaHJlc2hvbGQgaXMgMjQgRFdPUkRTICovCisJRE1BX0NPTlRST0xfVFRDXzMyID0gMHgwMDQwODAwMCwJLyogVGhyZXNob2xkIGlzIDMyIERXT1JEUyAqLworCURNQV9DT05UUk9MX1RUQ180MCA9IDB4MDA0MGMwMDAsCS8qIFRocmVzaG9sZCBpcyA0MCBEV09SRFMgKi8KKwlETUFfQ09OVFJPTF9TRSA9IDB4MDAwMDAwMDgsCS8qIFN0b3AgT24gRW1wdHkgKi8KKwlETUFfQ09OVFJPTF9PU0YgPSAweDAwMDAwMDA0LAkvKiBPcGVyYXRlIE9uIDJuZCBGcmFtZSAqLworfTsKKworLyogU1RNQUMxMTAgRE1BIE1pc3NlZCBGcmFtZSBDb3VudGVyIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRE1BX01JU1NFRF9GUkFNRV9PVkUJMHgxMDAwMDAwMAkvKiBGSUZPIE92ZXJmbG93IE92ZXJmbG93ICovCisjZGVmaW5lIERNQV9NSVNTRURfRlJBTUVfT1ZFX0NOVFIgMHgwZmZlMDAwMAkvKiBPdmVyZmxvdyBGcmFtZSBDb3VudGVyICovCisjZGVmaW5lIERNQV9NSVNTRURfRlJBTUVfT1ZFX00JMHgwMDAxMDAwMAkvKiBNaXNzZWQgRnJhbWUgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgRE1BX01JU1NFRF9GUkFNRV9NX0NOVFIJMHgwMDAwZmZmZgkvKiBNaXNzZWQgRnJhbWUgQ291aW50ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWMuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDJlYWUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hYy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiT2N0XzA5IgorCisjaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCisjZGVmaW5lIFNUTU1BQ19WTEFOX1RBR19VU0VECisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisjaW5jbHVkZSAic3RtbWFjX3RpbWVyLmgiCisjZW5kaWYKKworc3RydWN0IHN0bW1hY19wcml2IHsKKwkvKiBGcmVxdWVudGx5IHVzZWQgdmFsdWVzIGFyZSBrZXB0IGFkamFjZW50IGZvciBjYWNoZSBlZmZlY3QgKi8KKwlzdHJ1Y3QgZG1hX2Rlc2MgKmRtYV90eCBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJZG1hX2FkZHJfdCBkbWFfdHhfcGh5OworCXN0cnVjdCBza19idWZmICoqdHhfc2tidWZmOworCXVuc2lnbmVkIGludCBjdXJfdHg7CisJdW5zaWduZWQgaW50IGRpcnR5X3R4OworCXVuc2lnbmVkIGludCBkbWFfdHhfc2l6ZTsKKwlpbnQgdHhfY29lOworCWludCB0eF9jb2FsZXNjZTsKKworCXN0cnVjdCBkbWFfZGVzYyAqZG1hX3J4IDsKKwl1bnNpZ25lZCBpbnQgY3VyX3J4OworCXVuc2lnbmVkIGludCBkaXJ0eV9yeDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYnVmZjsKKwlkbWFfYWRkcl90ICpyeF9za2J1ZmZfZG1hOworCXN0cnVjdCBza19idWZmX2hlYWQgcnhfcmVjeWNsZTsKKworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGlzX2dtYWM7CisJZG1hX2FkZHJfdCBkbWFfcnhfcGh5OworCXVuc2lnbmVkIGludCBkbWFfcnhfc2l6ZTsKKwlpbnQgcnhfY3N1bTsKKwl1bnNpZ25lZCBpbnQgZG1hX2J1Zl9zejsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjX3R5cGU7CisKKwlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzIHhzdGF0czsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKworCXBoeV9pbnRlcmZhY2VfdCBwaHlfaW50ZXJmYWNlOworCWludCBwYmw7CisJaW50IGJ1c19pZDsKKwlpbnQgcGh5X2FkZHI7CisJaW50IHBoeV9tYXNrOworCWludCAoKnBoeV9yZXNldCkgKHZvaWQgKnByaXYpOworCXZvaWQgKCpmaXhfbWFjX3NwZWVkKSAodm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IHNwZWVkKTsKKwl2b2lkICpic3BfcHJpdjsKKworCWludCBwaHlfaXJxOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CisJaW50IG9sZGxpbms7CisJaW50IHNwZWVkOworCWludCBvbGRkdXBsZXg7CisJdW5zaWduZWQgaW50IGZsb3dfY3RybDsKKwl1bnNpZ25lZCBpbnQgcGF1c2U7CisJc3RydWN0IG1paV9idXMgKm1paTsKKworCXUzMiBtc2dfZW5hYmxlOworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgd29sb3B0czsKKwlpbnQgd29sZW5hYmxlZDsKKwlpbnQgc2h1dGRvd247CisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCXN0cnVjdCBzdG1tYWNfdGltZXIgKnRtOworI2VuZGlmCisjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnA7CisjZW5kaWYKK307CisKK2V4dGVybiBpbnQgc3RtbWFjX21kaW9fdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CitleHRlcm4gaW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKK2V4dGVybiB2b2lkIHN0bW1hY19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NGViZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYwpAQCAtMCwwICsxLDM5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgU1RNTUFDIEV0aHRvb2wgc3VwcG9ydAorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKKyNpbmNsdWRlICJzdG1tYWMuaCIKKworI2RlZmluZSBSRUdfU1BBQ0VfU0laRQkweDEwNTQKKyNkZWZpbmUgTUFDMTAwX0VUSFRPT0xfTkFNRQkic3RfbWFjMTAwIgorI2RlZmluZSBHTUFDX0VUSFRPT0xfTkFNRQkic3RfZ21hYyIKKworc3RydWN0IHN0bW1hY19zdGF0cyB7CisJY2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dOworCWludCBzaXplb2Zfc3RhdDsKKwlpbnQgc3RhdF9vZmZzZXQ7Cit9OworCisjZGVmaW5lIFNUTU1BQ19TVEFUKG0pCVwKKwl7ICNtLCBGSUVMRF9TSVpFT0Yoc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cywgbSksCVwKKwlvZmZzZXRvZihzdHJ1Y3Qgc3RtbWFjX3ByaXYsIHhzdGF0cy5tKX0KKworc3RhdGljIGNvbnN0IHN0cnVjdCAgc3RtbWFjX3N0YXRzIHN0bW1hY19nc3RyaW5nc19zdGF0c1tdID0geworCVNUTU1BQ19TVEFUKHR4X3VuZGVyZmxvdyksCisJU1RNTUFDX1NUQVQodHhfY2FycmllciksCisJU1RNTUFDX1NUQVQodHhfbG9zc2NhcnJpZXIpLAorCVNUTU1BQ19TVEFUKHR4X2hlYXJ0YmVhdCksCisJU1RNTUFDX1NUQVQodHhfZGVmZXJyZWQpLAorCVNUTU1BQ19TVEFUKHR4X3ZsYW4pLAorCVNUTU1BQ19TVEFUKHJ4X3ZsYW4pLAorCVNUTU1BQ19TVEFUKHR4X2phYmJlciksCisJU1RNTUFDX1NUQVQodHhfZnJhbWVfZmx1c2hlZCksCisJU1RNTUFDX1NUQVQodHhfcGF5bG9hZF9lcnJvciksCisJU1RNTUFDX1NUQVQodHhfaXBfaGVhZGVyX2Vycm9yKSwKKwlTVE1NQUNfU1RBVChyeF9kZXNjKSwKKwlTVE1NQUNfU1RBVChyeF9wYXJ0aWFsKSwKKwlTVE1NQUNfU1RBVChyeF9ydW50KSwKKwlTVE1NQUNfU1RBVChyeF90b29sb25nKSwKKwlTVE1NQUNfU1RBVChyeF9jb2xsaXNpb24pLAorCVNUTU1BQ19TVEFUKHJ4X2NyYyksCisJU1RNTUFDX1NUQVQocnhfbGVuZ2h0KSwKKwlTVE1NQUNfU1RBVChyeF9taWkpLAorCVNUTU1BQ19TVEFUKHJ4X211bHRpY2FzdCksCisJU1RNTUFDX1NUQVQocnhfZ21hY19vdmVyZmxvdyksCisJU1RNTUFDX1NUQVQocnhfd2F0Y2hkb2cpLAorCVNUTU1BQ19TVEFUKGRhX3J4X2ZpbHRlcl9mYWlsKSwKKwlTVE1NQUNfU1RBVChzYV9yeF9maWx0ZXJfZmFpbCksCisJU1RNTUFDX1NUQVQocnhfbWlzc2VkX2NudHIpLAorCVNUTU1BQ19TVEFUKHJ4X292ZXJmbG93X2NudHIpLAorCVNUTU1BQ19TVEFUKHR4X3VuZGVmbG93X2lycSksCisJU1RNTUFDX1NUQVQodHhfcHJvY2Vzc19zdG9wcGVkX2lycSksCisJU1RNTUFDX1NUQVQodHhfamFiYmVyX2lycSksCisJU1RNTUFDX1NUQVQocnhfb3ZlcmZsb3dfaXJxKSwKKwlTVE1NQUNfU1RBVChyeF9idWZfdW5hdl9pcnEpLAorCVNUTU1BQ19TVEFUKHJ4X3Byb2Nlc3Nfc3RvcHBlZF9pcnEpLAorCVNUTU1BQ19TVEFUKHJ4X3dhdGNoZG9nX2lycSksCisJU1RNTUFDX1NUQVQodHhfZWFybHlfaXJxKSwKKwlTVE1NQUNfU1RBVChmYXRhbF9idXNfZXJyb3JfaXJxKSwKKwlTVE1NQUNfU1RBVCh0aHJlc2hvbGQpLAorCVNUTU1BQ19TVEFUKHR4X3BrdF9uKSwKKwlTVE1NQUNfU1RBVChyeF9wa3RfbiksCisJU1RNTUFDX1NUQVQocG9sbF9uKSwKKwlTVE1NQUNfU1RBVChzY2hlZF90aW1lcl9uKSwKKwlTVE1NQUNfU1RBVChub3JtYWxfaXJxX24pLAorfTsKKyNkZWZpbmUgU1RNTUFDX1NUQVRTX0xFTiBBUlJBWV9TSVpFKHN0bW1hY19nc3RyaW5nc19zdGF0cykKKwordm9pZCBzdG1tYWNfZXRodG9vbF9nZXRkcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFwcml2LT5pc19nbWFjKQorCQlzdHJjcHkoaW5mby0+ZHJpdmVyLCBNQUMxMDBfRVRIVE9PTF9OQU1FKTsKKwllbHNlCisJCXN0cmNweShpbmZvLT5kcml2ZXIsIEdNQUNfRVRIVE9PTF9OQU1FKTsKKworCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfTU9EVUxFX1ZFUlNJT04pOworCWluZm8tPmZ3X3ZlcnNpb25bMF0gPSAnXDAnOworCWluZm8tPm5fc3RhdHMgPSBTVE1NQUNfU1RBVFNfTEVOOworCXJldHVybjsKK30KKworaW50IHN0bW1hY19ldGh0b29sX2dldHNldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSA9IHByaXYtPnBoeWRldjsKKwlpbnQgcmM7CisJaWYgKHBoeSA9PSBOVUxMKSB7CisJCXByX2VycigiJXM6ICVzOiBQSFkgaXMgbm90IHJlZ2lzdGVyZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXByX2VycigiJXM6IGludGVyZmFjZSBpcyBkaXNhYmxlZDogd2UgY2Fubm90IHRyYWNrICIKKwkJImxpbmsgc3BlZWQgLyBkdXBsZXggc2V0dGluZ1xuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJcmMgPSBwaHlfZXRodG9vbF9nc2V0KHBoeSwgY21kKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCXJldHVybiByYzsKK30KKworaW50IHN0bW1hY19ldGh0b29sX3NldHNldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSA9IHByaXYtPnBoeWRldjsKKwlpbnQgcmM7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCXJjID0gcGh5X2V0aHRvb2xfc3NldChwaHksIGNtZCk7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCisJcmV0dXJuIHJjOworfQorCit1MzIgc3RtbWFjX2V0aHRvb2xfZ2V0bXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiBwcml2LT5tc2dfZW5hYmxlOworfQorCit2b2lkIHN0bW1hY19ldGh0b29sX3NldG1zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXByaXYtPm1zZ19lbmFibGUgPSBsZXZlbDsKKworfQorCitpbnQgc3RtbWFjX2NoZWNrX2lmX3J1bm5pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FQlVTWTsKKwlyZXR1cm4gMDsKK30KKworaW50IHN0bW1hY19ldGh0b29sX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBSRUdfU1BBQ0VfU0laRTsKK30KKwordm9pZCBzdG1tYWNfZXRodG9vbF9ncmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpzcGFjZSkKK3sKKwlpbnQgaTsKKwl1MzIgKnJlZ19zcGFjZSA9ICh1MzIgKikgc3BhY2U7CisKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbWVtc2V0KHJlZ19zcGFjZSwgMHgwLCBSRUdfU1BBQ0VfU0laRSk7CisKKwlpZiAoIXByaXYtPmlzX2dtYWMpIHsKKwkJLyogTUFDIHJlZ2lzdGVycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykKKwkJCXJlZ19zcGFjZVtpXSA9IHJlYWRsKGRldi0+YmFzZV9hZGRyICsgKGkgKiA0KSk7CisJCS8qIERNQSByZWdpc3RlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJCXJlZ19zcGFjZVtpICsgMTJdID0KKwkJCSAgICByZWFkbChkZXYtPmJhc2VfYWRkciArIChETUFfQlVTX01PREUgKyAoaSAqIDQpKSk7CisJCXJlZ19zcGFjZVsyMl0gPSByZWFkbChkZXYtPmJhc2VfYWRkciArIERNQV9DVVJfVFhfQlVGX0FERFIpOworCQlyZWdfc3BhY2VbMjNdID0gcmVhZGwoZGV2LT5iYXNlX2FkZHIgKyBETUFfQ1VSX1JYX0JVRl9BRERSKTsKKwl9IGVsc2UgeworCQkvKiBNQUMgcmVnaXN0ZXJzICovCisJCWZvciAoaSA9IDA7IGkgPCA1NTsgaSsrKQorCQkJcmVnX3NwYWNlW2ldID0gcmVhZGwoZGV2LT5iYXNlX2FkZHIgKyAoaSAqIDQpKTsKKwkJLyogRE1BIHJlZ2lzdGVycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgMjI7IGkrKykKKwkJCXJlZ19zcGFjZVtpICsgNTVdID0KKwkJCSAgICByZWFkbChkZXYtPmJhc2VfYWRkciArIChETUFfQlVTX01PREUgKyAoaSAqIDQpKSk7CisJfQorCisJcmV0dXJuOworfQorCitpbnQgc3RtbWFjX2V0aHRvb2xfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCit7CisJaWYgKGRhdGEpCisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCWVsc2UKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9IV19DU1VNOworCisJcmV0dXJuIDA7Cit9CisKK3UzMiBzdG1tYWNfZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gcHJpdi0+cnhfY3N1bTsKK30KKworc3RhdGljIHZvaWQKK3N0bW1hY19nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCXBhdXNlLT5yeF9wYXVzZSA9IDA7CisJcGF1c2UtPnR4X3BhdXNlID0gMDsKKwlwYXVzZS0+YXV0b25lZyA9IHByaXYtPnBoeWRldi0+YXV0b25lZzsKKworCWlmIChwcml2LT5mbG93X2N0cmwgJiBGTE9XX1JYKQorCQlwYXVzZS0+cnhfcGF1c2UgPSAxOworCWlmIChwcml2LT5mbG93X2N0cmwgJiBGTE9XX1RYKQorCQlwYXVzZS0+dHhfcGF1c2UgPSAxOworCisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXJldHVybjsKK30KKworc3RhdGljIGludAorc3RtbWFjX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCSAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSA9IHByaXYtPnBoeWRldjsKKwlpbnQgbmV3X3BhdXNlID0gRkxPV19PRkY7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJaWYgKHBhdXNlLT5yeF9wYXVzZSkKKwkJbmV3X3BhdXNlIHw9IEZMT1dfUlg7CisJaWYgKHBhdXNlLT50eF9wYXVzZSkKKwkJbmV3X3BhdXNlIHw9IEZMT1dfVFg7CisKKwlwcml2LT5mbG93X2N0cmwgPSBuZXdfcGF1c2U7CisKKwlpZiAocGh5LT5hdXRvbmVnKSB7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJCXN0cnVjdCBldGh0b29sX2NtZCBjbWQ7CisJCQkvKiBhdXRvLW5lZ290aWF0aW9uIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkICovCisJCQljbWQuY21kID0gRVRIVE9PTF9OV0FZX1JTVDsKKwkJCWNtZC5zdXBwb3J0ZWQgPSBwaHktPnN1cHBvcnRlZDsKKwkJCWNtZC5hZHZlcnRpc2luZyA9IHBoeS0+YWR2ZXJ0aXNpbmc7CisJCQljbWQuYXV0b25lZyA9IHBoeS0+YXV0b25lZzsKKwkJCWNtZC5zcGVlZCA9IHBoeS0+c3BlZWQ7CisJCQljbWQuZHVwbGV4ID0gcGh5LT5kdXBsZXg7CisJCQljbWQucGh5X2FkZHJlc3MgPSBwaHktPmFkZHI7CisJCQlyZXQgPSBwaHlfZXRodG9vbF9zc2V0KHBoeSwgJmNtZCk7CisJCX0KKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IG5ldGRldi0+YmFzZV9hZGRyOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5mbG93X2N0cmwoaW9hZGRyLCBwaHktPmR1cGxleCwKKwkJCQkJICAgICAgIHByaXYtPmZsb3dfY3RybCwgcHJpdi0+cGF1c2UpOworCX0KKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3RtbWFjX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBldGh0b29sX3N0YXRzICpkdW1teSwgdTY0ICpkYXRhKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlpbnQgaTsKKworCS8qIFVwZGF0ZSBIVyBzdGF0cyBpZiBzdXBwb3J0ZWQgKi8KKwlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfZGlhZ25vc3RpY19mcigmZGV2LT5zdGF0cywgJnByaXYtPnhzdGF0cywKKwkJCQkJICAgICAgIGlvYWRkcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgU1RNTUFDX1NUQVRTX0xFTjsgaSsrKSB7CisJCWNoYXIgKnAgPSAoY2hhciAqKXByaXYgKyBzdG1tYWNfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9vZmZzZXQ7CisJCWRhdGFbaV0gPSAoc3RtbWFjX2dzdHJpbmdzX3N0YXRzW2ldLnNpemVvZl9zdGF0ID09CisJCXNpemVvZih1NjQpKSA/ICgqKHU2NCAqKXApIDogKCoodTMyICopcCk7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IHN0bW1hY19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgc3NldCkKK3sKKwlzd2l0Y2ggKHNzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJcmV0dXJuIFNUTU1BQ19TVEFUU19MRU47CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KKworc3RhdGljIHZvaWQgc3RtbWFjX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKQoreworCWludCBpOworCXU4ICpwID0gZGF0YTsKKworCXN3aXRjaCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCWZvciAoaSA9IDA7IGkgPCBTVE1NQUNfU1RBVFNfTEVOOyBpKyspIHsKKwkJCW1lbWNweShwLCBzdG1tYWNfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9zdHJpbmcsCisJCQkJRVRIX0dTVFJJTkdfTEVOKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisKKy8qIEN1cnJlbnRseSBvbmx5IHN1cHBvcnQgV09MIHRocm91Z2ggTWFnaWMgcGFja2V0LiAqLworc3RhdGljIHZvaWQgc3RtbWFjX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKSB7CisJCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9NQUdJQzsKKwkJd29sLT53b2xvcHRzID0gcHJpdi0+d29sb3B0czsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKK30KKworc3RhdGljIGludCBzdG1tYWNfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgc3VwcG9ydCA9IFdBS0VfTUFHSUM7CisKKwlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfTk9UX1NVUFBPUlRFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod29sLT53b2xvcHRzICYgfnN1cHBvcnQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdvbC0+d29sb3B0cyA9PSAwKQorCQlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUocHJpdi0+ZGV2aWNlLCAwKTsKKwllbHNlCisJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShwcml2LT5kZXZpY2UsIDEpOworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJcHJpdi0+d29sb3B0cyA9IHdvbC0+d29sb3B0czsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgc3RtbWFjX2V0aHRvb2xfb3BzID0geworCS5iZWdpbiA9IHN0bW1hY19jaGVja19pZl9ydW5uaW5nLAorCS5nZXRfZHJ2aW5mbyA9IHN0bW1hY19ldGh0b29sX2dldGRydmluZm8sCisJLmdldF9zZXR0aW5ncyA9IHN0bW1hY19ldGh0b29sX2dldHNldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MgPSBzdG1tYWNfZXRodG9vbF9zZXRzZXR0aW5ncywKKwkuZ2V0X21zZ2xldmVsID0gc3RtbWFjX2V0aHRvb2xfZ2V0bXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbCA9IHN0bW1hY19ldGh0b29sX3NldG1zZ2xldmVsLAorCS5nZXRfcmVncyA9IHN0bW1hY19ldGh0b29sX2dyZWdzLAorCS5nZXRfcmVnc19sZW4gPSBzdG1tYWNfZXRodG9vbF9nZXRfcmVnc19sZW4sCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X3J4X2NzdW0gPSBzdG1tYWNfZXRodG9vbF9nZXRfcnhfY3N1bSwKKwkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bSA9IHN0bW1hY19ldGh0b29sX3NldF90eF9jc3VtLAorCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCisJLmdldF9wYXVzZXBhcmFtID0gc3RtbWFjX2dldF9wYXVzZXBhcmFtLAorCS5zZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19zZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBzdG1tYWNfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9zdHJpbmdzID0gc3RtbWFjX2dldF9zdHJpbmdzLAorCS5nZXRfd29sID0gc3RtbWFjX2dldF93b2wsCisJLnNldF93b2wgPSBzdG1tYWNfc2V0X3dvbCwKKwkuZ2V0X3NzZXRfY291bnQJPSBzdG1tYWNfZ2V0X3NzZXRfY291bnQsCisjaWZkZWYgTkVUSUZfRl9UU08KKwkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKKyNlbmRpZgorfTsKKwordm9pZCBzdG1tYWNfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJnN0bW1hY19ldGh0b29sX29wcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZjE0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtMCwwICsxLDIyMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFNUIE1BQyAxMC8xMDAvMTAwMCBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXJzLgorICBTVCBFdGhlcm5ldCBJUHMgYXJlIGJ1aWx0IGFyb3VuZCBhIFN5bm9wc3lzIElQIENvcmUuCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKworICBEb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBhdDoKKwlodHRwOi8vd3d3LnN0bGludXguY29tCisgIFN1cHBvcnQgYXZhaWxhYmxlIGF0OgorCWh0dHBzOi8vYnVnemlsbGEuc3RsaW51eC5jb20vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0bS9zb2MuaD4KKyNpbmNsdWRlICJzdG1tYWMuaCIKKworI2RlZmluZSBTVE1NQUNfUkVTT1VSQ0VfTkFNRQkic3RtbWFjZXRoIgorI2RlZmluZSBQSFlfUkVTT1VSQ0VfTkFNRQkic3RtbWFjcGh5IgorCisjdW5kZWYgU1RNTUFDX0RFQlVHCisvKiNkZWZpbmUgU1RNTUFDX0RFQlVHKi8KKyNpZmRlZiBTVE1NQUNfREVCVUcKKyNkZWZpbmUgREJHKG5sZXZlbCwga2xldmVsLCBmbXQsIGFyZ3MuLi4pIFwKKwkJKCh2b2lkKShuZXRpZl9tc2dfIyNubGV2ZWwocHJpdikgJiYgXAorCQlwcmludGsoS0VSTl8jI2tsZXZlbCBmbXQsICMjIGFyZ3MpKSkKKyNlbHNlCisjZGVmaW5lIERCRyhubGV2ZWwsIGtsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI3VuZGVmIFNUTU1BQ19SWF9ERUJVRworLyojZGVmaW5lIFNUTU1BQ19SWF9ERUJVRyovCisjaWZkZWYgU1RNTUFDX1JYX0RFQlVHCisjZGVmaW5lIFJYX0RCRyhmbXQsIGFyZ3MuLi4pICBwcmludGsoZm10LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgUlhfREJHKGZtdCwgYXJncy4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjdW5kZWYgU1RNTUFDX1hNSVRfREVCVUcKKy8qI2RlZmluZSBTVE1NQUNfWE1JVF9ERUJVRyovCisjaWZkZWYgU1RNTUFDX1RYX0RFQlVHCisjZGVmaW5lIFRYX0RCRyhmbXQsIGFyZ3MuLi4pICBwcmludGsoZm10LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgVFhfREJHKGZtdCwgYXJncy4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIFNUTU1BQ19BTElHTih4KQlMMV9DQUNIRV9BTElHTih4KQorI2RlZmluZSBKVU1CT19MRU4JOTAwMAorCisvKiBNb2R1bGUgcGFyYW1ldGVycyAqLworI2RlZmluZSBUWF9USU1FTyA1MDAwIC8qIGRlZmF1bHQgNSBzZWNvbmRzICovCitzdGF0aWMgaW50IHdhdGNoZG9nID0gVFhfVElNRU87Cittb2R1bGVfcGFyYW0od2F0Y2hkb2csIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyh3YXRjaGRvZywgIlRyYW5zbWl0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIik7CisKK3N0YXRpYyBpbnQgZGVidWcgPSAtMTsJCS8qIC0xOiBkZWZhdWx0LCAwOiBubyBvdXRwdXQsIDE2OiAgYWxsICovCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIk1lc3NhZ2UgTGV2ZWwgKDA6IG5vIG91dHB1dCwgMTY6IGFsbCkiKTsKKworc3RhdGljIGludCBwaHlhZGRyID0gLTE7Cittb2R1bGVfcGFyYW0ocGh5YWRkciwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocGh5YWRkciwgIlBoeXNpY2FsIGRldmljZSBhZGRyZXNzIik7CisKKyNkZWZpbmUgRE1BX1RYX1NJWkUgMjU2CitzdGF0aWMgaW50IGRtYV90eHNpemUgPSBETUFfVFhfU0laRTsKK21vZHVsZV9wYXJhbShkbWFfdHhzaXplLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hX3R4c2l6ZSwgIk51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiB0aGUgVFggbGlzdCIpOworCisjZGVmaW5lIERNQV9SWF9TSVpFIDI1Ngorc3RhdGljIGludCBkbWFfcnhzaXplID0gRE1BX1JYX1NJWkU7Cittb2R1bGVfcGFyYW0oZG1hX3J4c2l6ZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRtYV9yeHNpemUsICJOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIFJYIGxpc3QiKTsKKworc3RhdGljIGludCBmbG93X2N0cmwgPSBGTE9XX09GRjsKK21vZHVsZV9wYXJhbShmbG93X2N0cmwsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhmbG93X2N0cmwsICJGbG93IGNvbnRyb2wgYWJpbGl0eSBbb24vb2ZmXSIpOworCitzdGF0aWMgaW50IHBhdXNlID0gUEFVU0VfVElNRTsKK21vZHVsZV9wYXJhbShwYXVzZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHBhdXNlLCAiRmxvdyBDb250cm9sIFBhdXNlIFRpbWUiKTsKKworI2RlZmluZSBUQ19ERUZBVUxUIDY0CitzdGF0aWMgaW50IHRjID0gVENfREVGQVVMVDsKK21vZHVsZV9wYXJhbSh0YywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHRjLCAiRE1BIHRocmVzaG9sZCBjb250cm9sIHZhbHVlIik7CisKKyNkZWZpbmUgUlhfTk9fQ09BTEVTQ0UJMQkvKiBBbHdheXMgaW50ZXJydXB0IG9uIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgVFhfTk9fQ09BTEVTQ0UJLTEJLyogTm8gbW9kZXJhdGlvbiBieSBkZWZhdWx0ICovCisKKy8qIFBheSBhdHRlbnRpb24gdG8gdHVuZSB0aGlzIHBhcmFtZXRlcjsgdGFrZSBjYXJlIG9mIGJvdGgKKyAqIGhhcmR3YXJlIGNhcGFiaWxpdHkgYW5kIG5ldHdvcmsgc3RhYml0aWx5L3BlcmZvcm1hbmNlIGltcGFjdC4KKyAqIE1hbnkgdGVzdHMgc2hvd2VkIHRoYXQgfjRtcyBsYXRlbmN5IHNlZW1zIHRvIGJlIGdvb2QgZW5vdWdoLiAqLworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKyNkZWZpbmUgREVGQVVMVF9QRVJJT0RJQ19SQVRFCTI1Ngorc3RhdGljIGludCB0bXJhdGUgPSBERUZBVUxUX1BFUklPRElDX1JBVEU7Cittb2R1bGVfcGFyYW0odG1yYXRlLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0ModG1yYXRlLCAiRXh0ZXJuYWwgdGltZXIgZnJlcS4gKGRlZmF1bHQ6IDI1Nkh6KSIpOworI2VuZGlmCisKKyNkZWZpbmUgRE1BX0JVRkZFUl9TSVpFCUJVRl9TSVpFXzJLaUIKK3N0YXRpYyBpbnQgYnVmX3N6ID0gRE1BX0JVRkZFUl9TSVpFOworbW9kdWxlX3BhcmFtKGJ1Zl9zeiwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGJ1Zl9zeiwgIkRNQSBidWZmZXIgc2l6ZSIpOworCisvKiBJbiBjYXNlIG9mIEdpZ2EgRVRILCB3ZSBjYW4gZW5hYmxlL2Rpc2FibGUgdGhlIENPRSBmb3IgdGhlCisgKiB0cmFuc21pdCBIVyBjaGVja3N1bSBjb21wdXRhdGlvbi4KKyAqIE5vdGUgdGhhdCwgaWYgdHggY3N1bSBpcyBvZmYgaW4gSFcsIFNHIHdpbGwgYmUgc3RpbGwgc3VwcG9ydGVkLiAqLworc3RhdGljIGludCB0eF9jb2UgPSBIV19DU1VNOworbW9kdWxlX3BhcmFtKHR4X2NvZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHR4X2NvZSwgIkdNQUMgQ09FIHR5cGUgMiBbb24vb2ZmXSIpOworCitzdGF0aWMgY29uc3QgdTMyIGRlZmF1bHRfbXNnX2xldmVsID0gKE5FVElGX01TR19EUlYgfCBORVRJRl9NU0dfUFJPQkUgfAorCQkJCSAgICAgIE5FVElGX01TR19MSU5LIHwgTkVUSUZfTVNHX0lGVVAgfAorCQkJCSAgICAgIE5FVElGX01TR19JRkRPV04gfCBORVRJRl9NU0dfVElNRVIpOworCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3RtbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworc3RhdGljIG5ldGRldl90eF90IHN0bW1hY194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisvKioKKyAqIHN0bW1hY192ZXJpZnlfYXJncyAtIHZlcmlmeSB0aGUgZHJpdmVyIHBhcmFtZXRlcnMuCisgKiBEZXNjcmlwdGlvbjogaXQgdmVyaWZpZXMgaWYgc29tZSB3cm9uZyBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIHRoZSBkcml2ZXIuCisgKiBOb3RlIHRoYXQgd3JvbmcgcGFyYW1ldGVycyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMuCisgKi8KK3N0YXRpYyB2b2lkIHN0bW1hY192ZXJpZnlfYXJncyh2b2lkKQoreworCWlmICh1bmxpa2VseSh3YXRjaGRvZyA8IDApKQorCQl3YXRjaGRvZyA9IFRYX1RJTUVPOworCWlmICh1bmxpa2VseShkbWFfcnhzaXplIDwgMCkpCisJCWRtYV9yeHNpemUgPSBETUFfUlhfU0laRTsKKwlpZiAodW5saWtlbHkoZG1hX3R4c2l6ZSA8IDApKQorCQlkbWFfdHhzaXplID0gRE1BX1RYX1NJWkU7CisJaWYgKHVubGlrZWx5KChidWZfc3ogPCBETUFfQlVGRkVSX1NJWkUpIHx8IChidWZfc3ogPiBCVUZfU0laRV8xNktpQikpKQorCQlidWZfc3ogPSBETUFfQlVGRkVSX1NJWkU7CisJaWYgKHVubGlrZWx5KGZsb3dfY3RybCA+IDEpKQorCQlmbG93X2N0cmwgPSBGTE9XX0FVVE87CisJZWxzZSBpZiAobGlrZWx5KGZsb3dfY3RybCA8IDApKQorCQlmbG93X2N0cmwgPSBGTE9XX09GRjsKKwlpZiAodW5saWtlbHkoKHBhdXNlIDwgMCkgfHwgKHBhdXNlID4gMHhmZmZmKSkpCisJCXBhdXNlID0gUEFVU0VfVElNRTsKKworCXJldHVybjsKK30KKworI2lmIGRlZmluZWQoU1RNTUFDX1hNSVRfREVCVUcpIHx8IGRlZmluZWQoU1RNTUFDX1JYX0RFQlVHKQorc3RhdGljIHZvaWQgcHJpbnRfcGt0KHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgajsKKwlwcl9pbmZvKCJsZW4gPSAlZCBieXRlLCBidWYgYWRkcjogMHglcCIsIGxlbiwgYnVmKTsKKwlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKKwkJaWYgKChqICUgMTYpID09IDApCisJCQlwcl9pbmZvKCJcbiAlMDN4OiIsIGopOworCQlwcl9pbmZvKCIgJTAyeCIsIGJ1ZltqXSk7CisJfQorCXByX2luZm8oIlxuIik7CisJcmV0dXJuOworfQorI2VuZGlmCisKKy8qIG1pbmltdW0gbnVtYmVyIG9mIGZyZWUgVFggZGVzY3JpcHRvcnMgcmVxdWlyZWQgdG8gd2FrZSB1cCBUWCBwcm9jZXNzICovCisjZGVmaW5lIFNUTU1BQ19UWF9USFJFU0goeCkJKHgtPmRtYV90eF9zaXplLzQpCisKK3N0YXRpYyBpbmxpbmUgdTMyIHN0bW1hY190eF9hdmFpbChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIHByaXYtPmRpcnR5X3R4ICsgcHJpdi0+ZG1hX3R4X3NpemUgLSBwcml2LT5jdXJfdHggLSAxOworfQorCisvKioKKyAqIHN0bW1hY19hZGp1c3RfbGluaworICogQGRldjogbmV0IGRldmljZSBzdHJ1Y3R1cmUKKyAqIERlc2NyaXB0aW9uOiBpdCBhZGp1c3RzIHRoZSBsaW5rIHBhcmFtZXRlcnMuCisgKi8KK3N0YXRpYyB2b2lkIHN0bW1hY19hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtPnBoeWRldjsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG5ld19zdGF0ZSA9IDA7CisJdW5zaWduZWQgaW50IGZjID0gcHJpdi0+Zmxvd19jdHJsLCBwYXVzZV90aW1lID0gcHJpdi0+cGF1c2U7CisKKwlpZiAocGh5ZGV2ID09IE5VTEwpCisJCXJldHVybjsKKworCURCRyhwcm9iZSwgREVCVUcsICJzdG1tYWNfYWRqdXN0X2xpbms6IGNhbGxlZC4gIGFkZHJlc3MgJWQgbGluayAlZFxuIiwKKwkgICAgcGh5ZGV2LT5hZGRyLCBwaHlkZXYtPmxpbmspOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocGh5ZGV2LT5saW5rKSB7CisJCXUzMiBjdHJsID0gcmVhZGwoaW9hZGRyICsgTUFDX0NUUkxfUkVHKTsKKworCQkvKiBOb3cgd2UgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGJlIGluIGZ1bGwgZHVwbGV4IG1vZGUuCisJCSAqIElmIG5vdCwgd2Ugb3BlcmF0ZSBpbiBoYWxmLWR1cGxleCBtb2RlLiAqLworCQlpZiAocGh5ZGV2LT5kdXBsZXggIT0gcHJpdi0+b2xkZHVwbGV4KSB7CisJCQluZXdfc3RhdGUgPSAxOworCQkJaWYgKCEocGh5ZGV2LT5kdXBsZXgpKQorCQkJCWN0cmwgJj0gfnByaXYtPm1hY190eXBlLT5ody5saW5rLmR1cGxleDsKKwkJCWVsc2UKKwkJCQljdHJsIHw9IHByaXYtPm1hY190eXBlLT5ody5saW5rLmR1cGxleDsKKwkJCXByaXYtPm9sZGR1cGxleCA9IHBoeWRldi0+ZHVwbGV4OworCQl9CisJCS8qIEZsb3cgQ29udHJvbCBvcGVyYXRpb24gKi8KKwkJaWYgKHBoeWRldi0+cGF1c2UpCisJCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5mbG93X2N0cmwoaW9hZGRyLCBwaHlkZXYtPmR1cGxleCwKKwkJCQkJCSAgICAgICBmYywgcGF1c2VfdGltZSk7CisKKwkJaWYgKHBoeWRldi0+c3BlZWQgIT0gcHJpdi0+c3BlZWQpIHsKKwkJCW5ld19zdGF0ZSA9IDE7CisJCQlzd2l0Y2ggKHBoeWRldi0+c3BlZWQpIHsKKwkJCWNhc2UgMTAwMDoKKwkJCQlpZiAobGlrZWx5KHByaXYtPmlzX2dtYWMpKQorCQkJCQljdHJsICY9IH5wcml2LT5tYWNfdHlwZS0+aHcubGluay5wb3J0OworCQkJCWJyZWFrOworCQkJY2FzZSAxMDA6CisJCQljYXNlIDEwOgorCQkJCWlmIChwcml2LT5pc19nbWFjKSB7CisJCQkJCWN0cmwgfD0gcHJpdi0+bWFjX3R5cGUtPmh3LmxpbmsucG9ydDsKKwkJCQkJaWYgKHBoeWRldi0+c3BlZWQgPT0gU1BFRURfMTAwKSB7CisJCQkJCQljdHJsIHw9CisJCQkJCQkgICAgcHJpdi0+bWFjX3R5cGUtPmh3LmxpbmsuCisJCQkJCQkgICAgc3BlZWQ7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljdHJsICY9CisJCQkJCQkgICAgfihwcml2LT5tYWNfdHlwZS0+aHcuCisJCQkJCQkgICAgICBsaW5rLnNwZWVkKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWN0cmwgJj0gfnByaXYtPm1hY190eXBlLT5ody5saW5rLnBvcnQ7CisJCQkJfQorCQkJCXByaXYtPmZpeF9tYWNfc3BlZWQocHJpdi0+YnNwX3ByaXYsCisJCQkJCQkgICAgcGh5ZGV2LT5zcGVlZCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmIChuZXRpZl9tc2dfbGluayhwcml2KSkKKwkJCQkJcHJfd2FybmluZygiJXM6IFNwZWVkICglZCkgaXMgbm90IDEwIgorCQkJCSAgICAgICAiIG9yIDEwMCFcbiIsIGRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXByaXYtPnNwZWVkID0gcGh5ZGV2LT5zcGVlZDsKKwkJfQorCisJCXdyaXRlbChjdHJsLCBpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpOworCisJCWlmICghcHJpdi0+b2xkbGluaykgeworCQkJbmV3X3N0YXRlID0gMTsKKwkJCXByaXYtPm9sZGxpbmsgPSAxOworCQl9CisJfSBlbHNlIGlmIChwcml2LT5vbGRsaW5rKSB7CisJCW5ld19zdGF0ZSA9IDE7CisJCXByaXYtPm9sZGxpbmsgPSAwOworCQlwcml2LT5zcGVlZCA9IDA7CisJCXByaXYtPm9sZGR1cGxleCA9IC0xOworCX0KKworCWlmIChuZXdfc3RhdGUgJiYgbmV0aWZfbXNnX2xpbmsocHJpdikpCisJCXBoeV9wcmludF9zdGF0dXMocGh5ZGV2KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCURCRyhwcm9iZSwgREVCVUcsICJzdG1tYWNfYWRqdXN0X2xpbms6IGV4aXRpbmdcbiIpOworfQorCisvKioKKyAqIHN0bW1hY19pbml0X3BoeSAtIFBIWSBpbml0aWFsaXphdGlvbgorICogQGRldjogbmV0IGRldmljZSBzdHJ1Y3R1cmUKKyAqIERlc2NyaXB0aW9uOiBpdCBpbml0aWFsaXplcyB0aGUgZHJpdmVyJ3MgUEhZIHN0YXRlLCBhbmQgYXR0YWNoZXMgdGhlIFBIWQorICogdG8gdGhlIG1hYyBkcml2ZXIuCisgKiAgUmV0dXJuIHZhbHVlOgorICogIDAgb24gc3VjY2VzcworICovCitzdGF0aWMgaW50IHN0bW1hY19pbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKwljaGFyIHBoeV9pZFtCVVNfSURfU0laRV07CS8qIFBIWSB0byBjb25uZWN0ICovCisJY2hhciBidXNfaWRbQlVTX0lEX1NJWkVdOworCisJcHJpdi0+b2xkbGluayA9IDA7CisJcHJpdi0+c3BlZWQgPSAwOworCXByaXYtPm9sZGR1cGxleCA9IC0xOworCisJaWYgKHByaXYtPnBoeV9hZGRyID09IC0xKSB7CisJCS8qIFdlIGRvbid0IGhhdmUgYSBQSFksIHNvIGRvIG5vdGhpbmcgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJc25wcmludGYoYnVzX2lkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIHByaXYtPmJ1c19pZCk7CisJc25wcmludGYocGh5X2lkLCBCVVNfSURfU0laRSwgUEhZX0lEX0ZNVCwgYnVzX2lkLCBwcml2LT5waHlfYWRkcik7CisJcHJfZGVidWcoInN0bW1hY19pbml0X3BoeTogIHRyeWluZyB0byBhdHRhY2ggdG8gJXNcbiIsIHBoeV9pZCk7CisKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeV9pZCwgJnN0bW1hY19hZGp1c3RfbGluaywgMCwKKwkJCXByaXYtPnBoeV9pbnRlcmZhY2UpOworCisJaWYgKElTX0VSUihwaHlkZXYpKSB7CisJCXByX2VycigiJXM6IENvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gUFRSX0VSUihwaHlkZXYpOworCX0KKworCS8qCisJICogQnJva2VuIEhXIGlzIHNvbWV0aW1lcyBtaXNzaW5nIHRoZSBwdWxsLXVwIHJlc2lzdG9yIG9uIHRoZQorCSAqIE1ESU8gbGluZSwgd2hpY2ggcmVzdWx0cyBpbiByZWFkcyB0byBub24tZXhpc3RlbnQgZGV2aWNlcyByZXR1cm5pbmcKKwkgKiAwIHJhdGhlciB0aGFuIDB4ZmZmZi4gQ2F0Y2ggdGhpcyBoZXJlIGFuZCB0cmVhdCAwIGFzIGEgbm9uLWV4aXN0ZW50CisJICogZGV2aWNlIGFzIHdlbGwuCisJICogTm90ZTogcGh5ZGV2LT5waHlfaWQgaXMgdGhlIHJlc3VsdCBvZiByZWFkaW5nIHRoZSBVSUQgUEhZIHJlZ2lzdGVycy4KKwkgKi8KKwlpZiAocGh5ZGV2LT5waHlfaWQgPT0gMCkgeworCQlwaHlfZGlzY29ubmVjdChwaHlkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcHJfZGVidWcoInN0bW1hY19pbml0X3BoeTogICVzOiBhdHRhY2hlZCB0byBQSFkgKFVJRCAweCV4KSIKKwkgICAgICAgIiBMaW5rID0gJWRcbiIsIGRldi0+bmFtZSwgcGh5ZGV2LT5waHlfaWQsIHBoeWRldi0+bGluayk7CisKKwlwcml2LT5waHlkZXYgPSBwaHlkZXY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19tYWNfZW5hYmxlX3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIE1BQ19DVFJMX1JFRyk7CisJdmFsdWUgfD0gTUFDX1JOQUJMRV9SWDsKKwkvKiBTZXQgdGhlIFJFIChyZWNlaXZlIGVuYWJsZSBiaXQgaW50byB0aGUgTUFDIENUUkwgcmVnaXN0ZXIpLiAgKi8KKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIE1BQ19DVFJMX1JFRyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfbWFjX2VuYWJsZV90eCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpOworCXZhbHVlIHw9IE1BQ19FTkFCTEVfVFg7CisJLyogU2V0IHRoZSBURSAodHJhbnNtaXQgZW5hYmxlIGJpdCBpbnRvIHRoZSBNQUMgQ1RSTCByZWdpc3RlcikuICAqLworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgTUFDX0NUUkxfUkVHKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19tYWNfZGlzYWJsZV9yeCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpOworCXZhbHVlICY9IH5NQUNfUk5BQkxFX1JYOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgTUFDX0NUUkxfUkVHKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19tYWNfZGlzYWJsZV90eCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpOworCXZhbHVlICY9IH5NQUNfRU5BQkxFX1RYOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgTUFDX0NUUkxfUkVHKTsKK30KKworLyoqCisgKiBkaXNwbGF5X3JpbmcKKyAqIEBwOiBwb2ludGVyIHRvIHRoZSByaW5nLgorICogQHNpemU6IHNpemUgb2YgdGhlIHJpbmcuCisgKiBEZXNjcmlwdGlvbjogZGlzcGxheSBhbGwgdGhlIGRlc2NyaXB0b3JzIHdpdGhpbiB0aGUgcmluZy4KKyAqLworc3RhdGljIHZvaWQgZGlzcGxheV9yaW5nKHN0cnVjdCBkbWFfZGVzYyAqcCwgaW50IHNpemUpCit7CisJc3RydWN0IHRtcF9zIHsKKwkJdTY0IGE7CisJCXVuc2lnbmVkIGludCBiOworCQl1bnNpZ25lZCBpbnQgYzsKKwl9OworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJc3RydWN0IHRtcF9zICp4ID0gKHN0cnVjdCB0bXBfcyAqKShwICsgaSk7CisJCXByX2luZm8oIlx0JWQgWzB4JXhdOiBERVMwPTB4JXggREVTMT0weCV4IEJVRjE9MHgleCBCVUYyPTB4JXgiLAorCQkgICAgICAgaSwgKHVuc2lnbmVkIGludCl2aXJ0X3RvX3BoeXMoJnBbaV0pLAorCQkgICAgICAgKHVuc2lnbmVkIGludCkoeC0+YSksICh1bnNpZ25lZCBpbnQpKCh4LT5hKSA+PiAzMiksCisJCSAgICAgICB4LT5iLCB4LT5jKTsKKwkJcHJfaW5mbygiXG4iKTsKKwl9Cit9CisKKy8qKgorICogaW5pdF9kbWFfZGVzY19yaW5ncyAtIGluaXQgdGhlIFJYL1RYIGRlc2NyaXB0b3IgcmluZ3MKKyAqIEBkZXY6IG5ldCBkZXZpY2Ugc3RydWN0dXJlCisgKiBEZXNjcmlwdGlvbjogIHRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIERNQSBSWC9UWCBkZXNjcmlwdG9ycworICogYW5kIGFsbG9jYXRlcyB0aGUgc29ja2V0IGJ1ZmZlcnMuCisgKi8KK3N0YXRpYyB2b2lkIGluaXRfZG1hX2Rlc2NfcmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IHR4c2l6ZSA9IHByaXYtPmRtYV90eF9zaXplOworCXVuc2lnbmVkIGludCByeHNpemUgPSBwcml2LT5kbWFfcnhfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgYmZzaXplID0gcHJpdi0+ZG1hX2J1Zl9zejsKKwlpbnQgYnVmZjJfbmVlZGVkID0gMDsKKwlpbnQgZGlzX2ljID0gMDsKKworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwkvKiBVc2luZyBUaW1lcnMgZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIGNvbXBsZXRpb24gZm9yIHRoZSByZWNlcHRpb24gKi8KKwlkaXNfaWMgPSAxOworI2VuZGlmCisJLyogU2V0IHRoZSBCdWZmZXIgc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIE1UVTsKKwkgKiBpbmRlZWQsIGluIGNhc2Ugb2YganVtYm8gd2UgbmVlZCB0byBidW1wLXVwIHRoZSBidWZmZXIgc2l6ZXMuCisJICovCisJaWYgKHVubGlrZWx5KGRldi0+bXR1ID49IEJVRl9TSVpFXzhLaUIpKQorCQliZnNpemUgPSBCVUZfU0laRV8xNktpQjsKKwllbHNlIGlmICh1bmxpa2VseShkZXYtPm10dSA+PSBCVUZfU0laRV80S2lCKSkKKwkJYmZzaXplID0gQlVGX1NJWkVfOEtpQjsKKwllbHNlIGlmICh1bmxpa2VseShkZXYtPm10dSA+PSBCVUZfU0laRV8yS2lCKSkKKwkJYmZzaXplID0gQlVGX1NJWkVfNEtpQjsKKwllbHNlIGlmICh1bmxpa2VseShkZXYtPm10dSA+PSBETUFfQlVGRkVSX1NJWkUpKQorCQliZnNpemUgPSBCVUZfU0laRV8yS2lCOworCWVsc2UKKwkJYmZzaXplID0gRE1BX0JVRkZFUl9TSVpFOworCisJLyogSWYgdGhlIE1UVSBleGNlZWRzIDhrIHNvIHVzZSB0aGUgc2Vjb25kIGJ1ZmZlciBpbiB0aGUgY2hhaW4gKi8KKwlpZiAoYmZzaXplID49IEJVRl9TSVpFXzhLaUIpCisJCWJ1ZmYyX25lZWRlZCA9IDE7CisKKwlEQkcocHJvYmUsIElORk8sICJzdG1tYWM6IHR4c2l6ZSAlZCwgcnhzaXplICVkLCBiZnNpemUgJWRcbiIsCisJICAgIHR4c2l6ZSwgcnhzaXplLCBiZnNpemUpOworCisJcHJpdi0+cnhfc2tidWZmX2RtYSA9IGttYWxsb2MocnhzaXplICogc2l6ZW9mKGRtYV9hZGRyX3QpLCBHRlBfS0VSTkVMKTsKKwlwcml2LT5yeF9za2J1ZmYgPQorCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSAqIHJ4c2l6ZSwgR0ZQX0tFUk5FTCk7CisJcHJpdi0+ZG1hX3J4ID0KKwkgICAgKHN0cnVjdCBkbWFfZGVzYyAqKWRtYV9hbGxvY19jb2hlcmVudChwcml2LT5kZXZpY2UsCisJCQkJCQkgIHJ4c2l6ZSAqCisJCQkJCQkgIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpLAorCQkJCQkJICAmcHJpdi0+ZG1hX3J4X3BoeSwKKwkJCQkJCSAgR0ZQX0tFUk5FTCk7CisJcHJpdi0+dHhfc2tidWZmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikgKiB0eHNpemUsCisJCQkJICAgICAgIEdGUF9LRVJORUwpOworCXByaXYtPmRtYV90eCA9CisJICAgIChzdHJ1Y3QgZG1hX2Rlc2MgKilkbWFfYWxsb2NfY29oZXJlbnQocHJpdi0+ZGV2aWNlLAorCQkJCQkJICB0eHNpemUgKgorCQkJCQkJICBzaXplb2Yoc3RydWN0IGRtYV9kZXNjKSwKKwkJCQkJCSAgJnByaXYtPmRtYV90eF9waHksCisJCQkJCQkgIEdGUF9LRVJORUwpOworCisJaWYgKChwcml2LT5kbWFfcnggPT0gTlVMTCkgfHwgKHByaXYtPmRtYV90eCA9PSBOVUxMKSkgeworCQlwcl9lcnIoIiVzOkVSUk9SIGFsbG9jYXRpbmcgdGhlIERNQSBUeC9SeCBkZXNjXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlEQkcocHJvYmUsIElORk8sICJzdG1tYWMgKCVzKSBETUEgZGVzYyByaW5nczogdmlydCBhZGRyIChSeCAlcCwgIgorCSAgICAiVHggJXApXG5cdERNQSBwaHkgYWRkciAoUnggMHglMDh4LCBUeCAweCUwOHgpXG4iLAorCSAgICBkZXYtPm5hbWUsIHByaXYtPmRtYV9yeCwgcHJpdi0+ZG1hX3R4LAorCSAgICAodW5zaWduZWQgaW50KXByaXYtPmRtYV9yeF9waHksICh1bnNpZ25lZCBpbnQpcHJpdi0+ZG1hX3R4X3BoeSk7CisKKwkvKiBSWCBJTklUSUFMSVpBVElPTiAqLworCURCRyhwcm9iZSwgSU5GTywgInN0bW1hYzogU0tCIGFkZHJlc3NlczpcbiIKKwkJCSAic2tiXHRcdHNrYiBkYXRhXHRkbWEgZGF0YVxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnhzaXplOyBpKyspIHsKKwkJc3RydWN0IGRtYV9kZXNjICpwID0gcHJpdi0+ZG1hX3J4ICsgaTsKKworCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKGRldiwgYmZzaXplKTsKKwkJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgeworCQkJcHJfZXJyKCIlczogUnggaW5pdCBmYWlsczsgc2tiIGlzIE5VTExcbiIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQl9CisJCXByaXYtPnJ4X3NrYnVmZltpXSA9IHNrYjsKKwkJcHJpdi0+cnhfc2tidWZmX2RtYVtpXSA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAorCQkJCQkJYmZzaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCisJCXAtPmRlczIgPSBwcml2LT5yeF9za2J1ZmZfZG1hW2ldOworCQlpZiAodW5saWtlbHkoYnVmZjJfbmVlZGVkKSkKKwkJCXAtPmRlczMgPSBwLT5kZXMyICsgQlVGX1NJWkVfOEtpQjsKKwkJREJHKHByb2JlLCBJTkZPLCAiWyVwXVx0WyVwXVx0WyV4XVxuIiwgcHJpdi0+cnhfc2tidWZmW2ldLAorCQkJcHJpdi0+cnhfc2tidWZmW2ldLT5kYXRhLCBwcml2LT5yeF9za2J1ZmZfZG1hW2ldKTsKKwl9CisJcHJpdi0+Y3VyX3J4ID0gMDsKKwlwcml2LT5kaXJ0eV9yeCA9ICh1bnNpZ25lZCBpbnQpKGkgLSByeHNpemUpOworCXByaXYtPmRtYV9idWZfc3ogPSBiZnNpemU7CisJYnVmX3N6ID0gYmZzaXplOworCisJLyogVFggSU5JVElBTElaQVRJT04gKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHhzaXplOyBpKyspIHsKKwkJcHJpdi0+dHhfc2tidWZmW2ldID0gTlVMTDsKKwkJcHJpdi0+ZG1hX3R4W2ldLmRlczIgPSAwOworCX0KKwlwcml2LT5kaXJ0eV90eCA9IDA7CisJcHJpdi0+Y3VyX3R4ID0gMDsKKworCS8qIENsZWFyIHRoZSBSeC9UeCBkZXNjcmlwdG9ycyAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfcnhfZGVzYyhwcml2LT5kbWFfcngsIHJ4c2l6ZSwgZGlzX2ljKTsKKwlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LCB0eHNpemUpOworCisJaWYgKG5ldGlmX21zZ19odyhwcml2KSkgeworCQlwcl9pbmZvKCJSWCBkZXNjcmlwdG9yIHJpbmc6XG4iKTsKKwkJZGlzcGxheV9yaW5nKHByaXYtPmRtYV9yeCwgcnhzaXplKTsKKwkJcHJfaW5mbygiVFggZGVzY3JpcHRvciByaW5nOlxuIik7CisJCWRpc3BsYXlfcmluZyhwcml2LT5kbWFfdHgsIHR4c2l6ZSk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZG1hX2ZyZWVfcnhfc2tidWZzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5kbWFfcnhfc2l6ZTsgaSsrKSB7CisJCWlmIChwcml2LT5yeF9za2J1ZmZbaV0pIHsKKwkJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLCBwcml2LT5yeF9za2J1ZmZfZG1hW2ldLAorCQkJCQkgcHJpdi0+ZG1hX2J1Zl9zeiwgRE1BX0ZST01fREVWSUNFKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHByaXYtPnJ4X3NrYnVmZltpXSk7CisJCX0KKwkJcHJpdi0+cnhfc2tidWZmW2ldID0gTlVMTDsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkbWFfZnJlZV90eF9za2J1ZnMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPmRtYV90eF9zaXplOyBpKyspIHsKKwkJaWYgKHByaXYtPnR4X3NrYnVmZltpXSAhPSBOVUxMKSB7CisJCQlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfdHggKyBpOworCQkJaWYgKHAtPmRlczIpCisJCQkJZG1hX3VubWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHAtPmRlczIsCisJCQkJIHByaXYtPm1hY190eXBlLT5vcHMtPmdldF90eF9sZW4ocCksCisJCQkJIERNQV9UT19ERVZJQ0UpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkocHJpdi0+dHhfc2tidWZmW2ldKTsKKwkJCXByaXYtPnR4X3NrYnVmZltpXSA9IE5VTEw7CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2RtYV9kZXNjX3Jlc291cmNlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisJLyogUmVsZWFzZSB0aGUgRE1BIFRYL1JYIHNvY2tldCBidWZmZXJzICovCisJZG1hX2ZyZWVfcnhfc2tidWZzKHByaXYpOworCWRtYV9mcmVlX3R4X3NrYnVmcyhwcml2KTsKKworCS8qIEZyZWUgdGhlIHJlZ2lvbiBvZiBjb25zaXN0ZW50IG1lbW9yeSBwcmV2aW91c2x5IGFsbG9jYXRlZCBmb3IKKwkgKiB0aGUgRE1BICovCisJZG1hX2ZyZWVfY29oZXJlbnQocHJpdi0+ZGV2aWNlLAorCQkJICBwcml2LT5kbWFfdHhfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpLAorCQkJICBwcml2LT5kbWFfdHgsIHByaXYtPmRtYV90eF9waHkpOworCWRtYV9mcmVlX2NvaGVyZW50KHByaXYtPmRldmljZSwKKwkJCSAgcHJpdi0+ZG1hX3J4X3NpemUgKiBzaXplb2Yoc3RydWN0IGRtYV9kZXNjKSwKKwkJCSAgcHJpdi0+ZG1hX3J4LCBwcml2LT5kbWFfcnhfcGh5KTsKKwlrZnJlZShwcml2LT5yeF9za2J1ZmZfZG1hKTsKKwlrZnJlZShwcml2LT5yeF9za2J1ZmYpOworCWtmcmVlKHByaXYtPnR4X3NrYnVmZik7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogc3RtbWFjX2RtYV9zdGFydF90eAorICogQGlvYWRkcjogZGV2aWNlIEkvTyBhZGRyZXNzCisgKiBEZXNjcmlwdGlvbjogIHRoaXMgZnVuY3Rpb24gc3RhcnRzIHRoZSBETUEgdHggcHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX2RtYV9zdGFydF90eCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJdmFsdWUgfD0gRE1BX0NPTlRST0xfU1Q7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzdG1tYWNfZG1hX3N0b3BfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgRE1BX0NPTlRST0wpOworCXZhbHVlICY9IH5ETUFfQ09OVFJPTF9TVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogc3RtbWFjX2RtYV9zdGFydF9yeAorICogQGlvYWRkcjogZGV2aWNlIEkvTyBhZGRyZXNzCisgKiBEZXNjcmlwdGlvbjogIHRoaXMgZnVuY3Rpb24gc3RhcnRzIHRoZSBETUEgcnggcHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX2RtYV9zdGFydF9yeCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJdmFsdWUgfD0gRE1BX0NPTlRST0xfU1I7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHN0bW1hY19kbWFfc3RvcF9yeCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJdmFsdWUgJj0gfkRNQV9DT05UUk9MX1NSOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJcmV0dXJuOworfQorCisvKioKKyAqICBzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlIC0gSFcgRE1BIG9wZXJhdGlvbiBtb2RlCisgKiAgQHByaXYgOiBwb2ludGVyIHRvIHRoZSBwcml2YXRlIGRldmljZSBzdHJ1Y3R1cmUuCisgKiAgRGVzY3JpcHRpb246IGl0IHNldHMgdGhlIERNQSBvcGVyYXRpb24gbW9kZTogdHgvcnggRE1BIHRocmVzaG9sZHMKKyAqICBvciBTdG9yZS1BbmQtRm9yd2FyZCBjYXBhYmlsaXR5LiBJdCBhbHNvIHZlcmlmaWVzIHRoZSBDT0UgZm9yIHRoZQorICogIHRyYW5zbWlzc2lvbiBpbiBjYXNlIG9mIEdpZ2EgRVRILgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfZG1hX29wZXJhdGlvbl9tb2RlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKK3sKKwlpZiAoIXByaXYtPmlzX2dtYWMpIHsKKwkJLyogTUFDIDEwLzEwMCAqLworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsIDApOworCQlwcml2LT50eF9jb2UgPSBOT19IV19DU1VNOworCX0gZWxzZSB7CisJCWlmICgocHJpdi0+ZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKSAmJiAodHhfY29lKSkgeworCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX21vZGUocHJpdi0+ZGV2LT5iYXNlX2FkZHIsCisJCQkJCQkgICAgICBTRl9ETUFfTU9ERSwgU0ZfRE1BX01PREUpOworCQkJdGMgPSBTRl9ETUFfTU9ERTsKKwkJCXByaXYtPnR4X2NvZSA9IEhXX0NTVU07CisJCX0gZWxzZSB7CisJCQkvKiBDaGVja3N1bSBjb21wdXRhdGlvbiBpcyBwZXJmb3JtZWQgaW4gc29mdHdhcmUuICovCisJCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsCisJCQkJCQkgICAgICBTRl9ETUFfTU9ERSk7CisJCQlwcml2LT50eF9jb2UgPSBOT19IV19DU1VNOworCQl9CisJfQorCXR4X2NvZSA9IHByaXYtPnR4X2NvZTsKKworCXJldHVybjsKK30KKworI2lmZGVmIFNUTU1BQ19ERUJVRworLyoqCisgKiBzaG93X3R4X3Byb2Nlc3Nfc3RhdGUKKyAqIEBzdGF0dXM6IHR4IGRlc2NyaXB0b3Igc3RhdHVzIGZpZWxkCisgKiBEZXNjcmlwdGlvbjogaXQgc2hvd3MgdGhlIFRyYW5zbWl0IFByb2Nlc3MgU3RhdGUgZm9yIENTUjVbMjI6MjBdCisgKi8KK3N0YXRpYyB2b2lkIHNob3dfdHhfcHJvY2Vzc19zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdHVzKQoreworCXVuc2lnbmVkIGludCBzdGF0ZTsKKwlzdGF0ZSA9IChzdGF0dXMgJiBETUFfU1RBVFVTX1RTX01BU0spID4+IERNQV9TVEFUVVNfVFNfU0hJRlQ7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSAwOgorCQlwcl9pbmZvKCItIFRYIChTdG9wcGVkKTogUmVzZXQgb3IgU3RvcCBjb21tYW5kXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwcl9pbmZvKCItIFRYIChSdW5uaW5nKTpGZXRjaGluZyB0aGUgVHggZGVzY1xuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6IFdhaXRpbmcgZm9yIGVuZCBvZiB0eFxuIik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6IFJlYWRpbmcgdGhlIGRhdGEgIgorCQkgICAgICAgImFuZCBxdWV1aW5nIHRoZSBkYXRhIGludG8gdGhlIFR4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJcHJfaW5mbygiLSBUWCAoU3VzcGVuZGVkKTogVHggQnVmZiBVbmRlcmZsb3cgIgorCQkgICAgICAgIm9yIGFuIHVuYXZhaWxhYmxlIFRyYW5zbWl0IGRlc2NyaXB0b3JcbiIpOworCQlicmVhazsKKwljYXNlIDc6CisJCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOiBDbG9zaW5nIFR4IGRlc2NyaXB0b3JcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuOworfQorCisvKioKKyAqIHNob3dfcnhfcHJvY2Vzc19zdGF0ZQorICogQHN0YXR1czogcnggZGVzY3JpcHRvciBzdGF0dXMgZmllbGQKKyAqIERlc2NyaXB0aW9uOiBpdCBzaG93cyB0aGUgIFJlY2VpdmUgUHJvY2VzcyBTdGF0ZSBmb3IgQ1NSNVsxOToxN10KKyAqLworc3RhdGljIHZvaWQgc2hvd19yeF9wcm9jZXNzX3N0YXRlKHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXN0YXRlID0gKHN0YXR1cyAmIERNQV9TVEFUVVNfUlNfTUFTSykgPj4gRE1BX1NUQVRVU19SU19TSElGVDsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIDA6CisJCXByX2luZm8oIi0gUlggKFN0b3BwZWQpOiBSZXNldCBvciBTdG9wIGNvbW1hbmRcbiIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBGZXRjaGluZyB0aGUgUnggZGVzY1xuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6Q2hlY2tpbmcgZm9yIGVuZCBvZiBwa3RcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBXYWl0aW5nIGZvciBSeCBwa3RcbiIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXByX2luZm8oIi0gUlggKFN1c3BlbmRlZCk6IFVuYXZhaWxhYmxlIFJ4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNToKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IENsb3NpbmcgUnggZGVzY3JpcHRvclxuIik7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJcHJfaW5mbygiLSBSWChSdW5uaW5nKTogRmx1c2hpbmcgdGhlIGN1cnJlbnQgZnJhbWUiCisJCSAgICAgICAiIGZyb20gdGhlIFJ4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IFF1ZXVpbmcgdGhlIFJ4IGZyYW1lIgorCQkgICAgICAgIiBmcm9tIHRoZSBSeCBidWYgaW50byBtZW1vcnlcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuOworfQorI2VuZGlmCisKKy8qKgorICogc3RtbWFjX3R4OgorICogQHByaXY6IHByaXZhdGUgZHJpdmVyIHN0cnVjdHVyZQorICogRGVzY3JpcHRpb246IGl0IHJlY2xhaW1zIHJlc291cmNlcyBhZnRlciB0cmFuc21pc3Npb24gY29tcGxldGVzLgorICovCitzdGF0aWMgdm9pZCBzdG1tYWNfdHgoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGludCB0eHNpemUgPSBwcml2LT5kbWFfdHhfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IHByaXYtPmRldi0+YmFzZV9hZGRyOworCisJd2hpbGUgKHByaXYtPmRpcnR5X3R4ICE9IHByaXYtPmN1cl90eCkgeworCQlpbnQgbGFzdDsKKwkJdW5zaWduZWQgaW50IGVudHJ5ID0gcHJpdi0+ZGlydHlfdHggJSB0eHNpemU7CisJCXN0cnVjdCBza19idWZmICpza2IgPSBwcml2LT50eF9za2J1ZmZbZW50cnldOworCQlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfdHggKyBlbnRyeTsKKworCQkvKiBDaGVjayBpZiB0aGUgZGVzY3JpcHRvciBpcyBvd25lZCBieSB0aGUgRE1BLiAqLworCQlpZiAocHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3R4X293bmVyKHApKQorCQkJYnJlYWs7CisKKwkJLyogVmVyaWZ5IHR4IGVycm9yIGJ5IGxvb2tpbmcgYXQgdGhlIGxhc3Qgc2VnbWVudCAqLworCQlsYXN0ID0gcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3R4X2xzKHApOworCQlpZiAobGlrZWx5KGxhc3QpKSB7CisJCQlpbnQgdHhfZXJyb3IgPQorCQkJICAgIHByaXYtPm1hY190eXBlLT5vcHMtPnR4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKKwkJCQkJCQkgICAmcHJpdi0+eHN0YXRzLAorCQkJCQkJCSAgIHAsIGlvYWRkcik7CisJCQlpZiAobGlrZWx5KHR4X2Vycm9yID09IDApKSB7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQkJcHJpdi0+eHN0YXRzLnR4X3BrdF9uKys7CisJCQl9IGVsc2UKKwkJCQlwcml2LT5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQl9CisJCVRYX0RCRygiJXM6IGN1cnIgJWQsIGRpcnR5ICVkXG4iLCBfX2Z1bmNfXywKKwkJCXByaXYtPmN1cl90eCwgcHJpdi0+ZGlydHlfdHgpOworCisJCWlmIChsaWtlbHkocC0+ZGVzMikpCisJCQlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgcC0+ZGVzMiwKKwkJCQkJIHByaXYtPm1hY190eXBlLT5vcHMtPmdldF90eF9sZW4ocCksCisJCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczMpKQorCQkJcC0+ZGVzMyA9IDA7CisKKwkJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSdzIHJvb20gaW4gdGhlIHF1ZXVlIChsaW1pdCBpdCB0byBzaXplKQorCQkJICogd2UgYWRkIHRoaXMgc2tiIGJhY2sgaW50byB0aGUgcG9vbCwKKwkJCSAqIGlmIGl0J3MgdGhlIHJpZ2h0IHNpemUuCisJCQkgKi8KKwkJCWlmICgoc2tiX3F1ZXVlX2xlbigmcHJpdi0+cnhfcmVjeWNsZSkgPAorCQkJCXByaXYtPmRtYV9yeF9zaXplKSAmJgorCQkJCXNrYl9yZWN5Y2xlX2NoZWNrKHNrYiwgcHJpdi0+ZG1hX2J1Zl9zeikpCisJCQkJX19za2JfcXVldWVfaGVhZCgmcHJpdi0+cnhfcmVjeWNsZSwgc2tiKTsKKwkJCWVsc2UKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwkJCXByaXYtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOworCQl9CisKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cmVsZWFzZV90eF9kZXNjKHApOworCisJCWVudHJ5ID0gKCsrcHJpdi0+ZGlydHlfdHgpICUgdHhzaXplOworCX0KKwlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5kZXYpICYmCisJCSAgICAgc3RtbWFjX3R4X2F2YWlsKHByaXYpID4gU1RNTUFDX1RYX1RIUkVTSChwcml2KSkpIHsKKwkJbmV0aWZfdHhfbG9jayhwcml2LT5kZXYpOworCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5kZXYpICYmCisJCSAgICAgc3RtbWFjX3R4X2F2YWlsKHByaXYpID4gU1RNTUFDX1RYX1RIUkVTSChwcml2KSkgeworCQkJVFhfREJHKCIlczogcmVzdGFydCB0cmFuc21pdFxuIiwgX19mdW5jX18pOworCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOworCQl9CisJCW5ldGlmX3R4X3VubG9jayhwcml2LT5kZXYpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfZW5hYmxlX2lycShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisjaWZuZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwl3cml0ZWwoRE1BX0lOVFJfREVGQVVMVF9NQVNLLCBwcml2LT5kZXYtPmJhc2VfYWRkciArIERNQV9JTlRSX0VOQSk7CisjZWxzZQorCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfZGlzYWJsZV9pcnEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworI2lmbmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJd3JpdGVsKDAsIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKKyNlbHNlCisJcHJpdi0+dG0tPnRpbWVyX3N0b3AoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHN0bW1hY19oYXNfd29yayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgaW50IGhhc193b3JrID0gMDsKKwlpbnQgcnhyZXQsIHR4X3dvcmsgPSAwOworCisJcnhyZXQgPSBwcml2LT5tYWNfdHlwZS0+b3BzLT5nZXRfcnhfb3duZXIocHJpdi0+ZG1hX3J4ICsKKwkJKHByaXYtPmN1cl9yeCAlIHByaXYtPmRtYV9yeF9zaXplKSk7CisKKwlpZiAocHJpdi0+ZGlydHlfdHggIT0gcHJpdi0+Y3VyX3R4KQorCQl0eF93b3JrID0gMTsKKworCWlmIChsaWtlbHkoIXJ4cmV0IHx8IHR4X3dvcmspKQorCQloYXNfd29yayA9IDE7CisKKwlyZXR1cm4gaGFzX3dvcms7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfc3RtbWFjX3NjaGVkdWxlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKK3sKKwlpZiAobGlrZWx5KHN0bW1hY19oYXNfd29yayhwcml2KSkpIHsKKwkJc3RtbWFjX2Rpc2FibGVfaXJxKHByaXYpOworCQluYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCit2b2lkIHN0bW1hY19zY2hlZHVsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlwcml2LT54c3RhdHMuc2NoZWRfdGltZXJfbisrOworCisJX3N0bW1hY19zY2hlZHVsZShwcml2KTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc3RtbWFjX25vX3RpbWVyX3N0YXJ0ZWQodW5zaWduZWQgaW50IHgpCit7OworfTsKKworc3RhdGljIHZvaWQgc3RtbWFjX25vX3RpbWVyX3N0b3BwZWQodm9pZCkKK3s7Cit9OworI2VuZGlmCisKKy8qKgorICogc3RtbWFjX3R4X2VycjoKKyAqIEBwcml2OiBwb2ludGVyIHRvIHRoZSBwcml2YXRlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIERlc2NyaXB0aW9uOiBpdCBjbGVhbnMgdGhlIGRlc2NyaXB0b3JzIGFuZCByZXN0YXJ0cyB0aGUgdHJhbnNtaXNzaW9uCisgKiBpbiBjYXNlIG9mIGVycm9ycy4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX3R4X2VycihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCit7CisJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5kZXYpOworCisJc3RtbWFjX2RtYV9zdG9wX3R4KHByaXYtPmRldi0+YmFzZV9hZGRyKTsKKwlkbWFfZnJlZV90eF9za2J1ZnMocHJpdik7CisJcHJpdi0+bWFjX3R5cGUtPm9wcy0+aW5pdF90eF9kZXNjKHByaXYtPmRtYV90eCwgcHJpdi0+ZG1hX3R4X3NpemUpOworCXByaXYtPmRpcnR5X3R4ID0gMDsKKwlwcml2LT5jdXJfdHggPSAwOworCXN0bW1hY19kbWFfc3RhcnRfdHgocHJpdi0+ZGV2LT5iYXNlX2FkZHIpOworCisJcHJpdi0+ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwluZXRpZl93YWtlX3F1ZXVlKHByaXYtPmRldik7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogc3RtbWFjX2RtYV9pbnRlcnJ1cHQgLSBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIGRyaXZlcgorICogQGRldjogbmV0IGRldmljZSBzdHJ1Y3R1cmUKKyAqIERlc2NyaXB0aW9uOiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIGRyaXZlciAoRE1BKS4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX2RtYV9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJLyogcmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyIChDU1I1KSAqLworCXUzMiBpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIERNQV9TVEFUVVMpOworCisJREJHKGludHIsIElORk8sICIlczogW0NTUjU6IDB4JTA4eF1cbiIsIF9fZnVuY19fLCBpbnRyX3N0YXR1cyk7CisKKyNpZmRlZiBTVE1NQUNfREVCVUcKKwkvKiBJdCBkaXNwbGF5cyB0aGUgRE1BIHRyYW5zbWl0IHByb2Nlc3Mgc3RhdGUgKENTUjUgcmVnaXN0ZXIpICovCisJaWYgKG5ldGlmX21zZ190eF9kb25lKHByaXYpKQorCQlzaG93X3R4X3Byb2Nlc3Nfc3RhdGUoaW50cl9zdGF0dXMpOworCWlmIChuZXRpZl9tc2dfcnhfc3RhdHVzKHByaXYpKQorCQlzaG93X3J4X3Byb2Nlc3Nfc3RhdGUoaW50cl9zdGF0dXMpOworI2VuZGlmCisJLyogQUJOT1JNQUwgaW50ZXJydXB0cyAqLworCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfQUlTKSkgeworCQlEQkcoaW50ciwgSU5GTywgIkNTUjVbMTVdIERNQSBBQk5PUk1BTCBJUlE6ICIpOworCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1VORikpIHsKKwkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgdW5kZXJmbG93XG4iKTsKKwkJCWlmICh1bmxpa2VseSh0YyAhPSBTRl9ETUFfTU9ERSkKKwkJCSAgICAmJiAodGMgPD0gMjU2KSkgeworCQkJCS8qIFRyeSB0byBidW1wIHVwIHRoZSB0aHJlc2hvbGQgKi8KKwkJCQl0YyArPSA2NDsKKwkJCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShpb2FkZHIsIHRjLAorCQkJCQkgICAgICBTRl9ETUFfTU9ERSk7CisJCQkJcHJpdi0+eHN0YXRzLnRocmVzaG9sZCA9IHRjOworCQkJfQorCQkJc3RtbWFjX3R4X2Vycihwcml2KTsKKwkJCXByaXYtPnhzdGF0cy50eF91bmRlZmxvd19pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1RKVCkpIHsKKwkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgamFiYmVyXG4iKTsKKwkJCXByaXYtPnhzdGF0cy50eF9qYWJiZXJfaXJxKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19PVkYpKSB7CisJCQlEQkcoaW50ciwgSU5GTywgInJlY3Ygb3ZlcmZsb3dcbiIpOworCQkJcHJpdi0+eHN0YXRzLnJ4X292ZXJmbG93X2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUlUpKSB7CisJCQlEQkcoaW50ciwgSU5GTywgInJlY2VpdmUgYnVmZmVyIHVuYXZhaWxhYmxlXG4iKTsKKwkJCXByaXYtPnhzdGF0cy5yeF9idWZfdW5hdl9pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JQUykpIHsKKwkJCURCRyhpbnRyLCBJTkZPLCAicmVjZWl2ZSBwcm9jZXNzIHN0b3BwZWRcbiIpOworCQkJcHJpdi0+eHN0YXRzLnJ4X3Byb2Nlc3Nfc3RvcHBlZF9pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JXVCkpIHsKKwkJCURCRyhpbnRyLCBJTkZPLCAicmVjZWl2ZSB3YXRjaGRvZ1xuIik7CisJCQlwcml2LT54c3RhdHMucnhfd2F0Y2hkb2dfaXJxKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19FVEkpKSB7CisJCQlEQkcoaW50ciwgSU5GTywgInRyYW5zbWl0IGVhcmx5IGludGVycnVwdFxuIik7CisJCQlwcml2LT54c3RhdHMudHhfZWFybHlfaXJxKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19UUFMpKSB7CisJCQlEQkcoaW50ciwgSU5GTywgInRyYW5zbWl0IHByb2Nlc3Mgc3RvcHBlZFxuIik7CisJCQlwcml2LT54c3RhdHMudHhfcHJvY2Vzc19zdG9wcGVkX2lycSsrOworCQkJc3RtbWFjX3R4X2Vycihwcml2KTsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0ZCSSkpIHsKKwkJCURCRyhpbnRyLCBJTkZPLCAiZmF0YWwgYnVzIGVycm9yXG4iKTsKKwkJCXByaXYtPnhzdGF0cy5mYXRhbF9idXNfZXJyb3JfaXJxKys7CisJCQlzdG1tYWNfdHhfZXJyKHByaXYpOworCQl9CisJfQorCisJLyogVFgvUlggTk9STUFMIGludGVycnVwdHMgKi8KKwlpZiAoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX05JUykgeworCQlwcml2LT54c3RhdHMubm9ybWFsX2lycV9uKys7CisJCWlmIChsaWtlbHkoKGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19SSSkgfHwKKwkJCSAoaW50cl9zdGF0dXMgJiAoRE1BX1NUQVRVU19USSkpKSkKKwkJCQlfc3RtbWFjX3NjaGVkdWxlKHByaXYpOworCX0KKworCS8qIE9wdGlvbmFsIGhhcmR3YXJlIGJsb2NrcywgaW50ZXJydXB0cyBzaG91bGQgYmUgZGlzYWJsZWQgKi8KKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJgorCQkgICAgIChETUFfU1RBVFVTX0dQSSB8IERNQV9TVEFUVVNfR01JIHwgRE1BX1NUQVRVU19HTEkpKSkKKwkJcHJfaW5mbygiJXM6IHVuZXhwZWN0ZWQgc3RhdHVzICUwOHhcbiIsIF9fZnVuY19fLCBpbnRyX3N0YXR1cyk7CisKKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGJ5IHdyaXRpbmcgYSBsb2dpYyAxIHRvIHRoZSBDU1I1WzE1LTBdICovCisJd3JpdGVsKChpbnRyX3N0YXR1cyAmIDB4MWZmZmYpLCBpb2FkZHIgKyBETUFfU1RBVFVTKTsKKworCURCRyhpbnRyLCBJTkZPLCAiXG5cbiIpOworCisJcmV0dXJuOworfQorCisvKioKKyAqICBzdG1tYWNfb3BlbiAtIG9wZW4gZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlcgorICogIEBkZXYgOiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgorICogIERlc2NyaXB0aW9uOgorICogIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG9wZW4gZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlci4KKyAqICBSZXR1cm4gdmFsdWU6CisgKiAgMCBvbiBzdWNjZXNzIGFuZCBhbiBhcHByb3ByaWF0ZSAoLSl2ZSBpbnRlZ2VyIGFzIGRlZmluZWQgaW4gZXJybm8uaAorICogIGZpbGUgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBzdG1tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlpbnQgcmV0OworCisJLyogQ2hlY2sgdGhhdCB0aGUgTUFDIGFkZHJlc3MgaXMgdmFsaWQuICBJZiBpdHMgbm90LCByZWZ1c2UKKwkgKiB0byBicmluZyB0aGUgZGV2aWNlIHVwLiBUaGUgdXNlciBtdXN0IHNwZWNpZnkgYW4KKwkgKiBhZGRyZXNzIHVzaW5nIHRoZSBmb2xsb3dpbmcgbGludXggY29tbWFuZDoKKwkgKiAgICAgIGlmY29uZmlnIGV0aDAgaHcgZXRoZXIgeHg6eHg6eHg6eHg6eHg6eHggICovCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7CisJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOworCQlwcl93YXJuaW5nKCIlczogZ2VuZXJhdGVkIHJhbmRvbSBNQUMgYWRkcmVzcyAlcE1cbiIsIGRldi0+bmFtZSwKKwkJCWRldi0+ZGV2X2FkZHIpOworCX0KKworCXN0bW1hY192ZXJpZnlfYXJncygpOworCisJcmV0ID0gc3RtbWFjX2luaXRfcGh5KGRldik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJcHJfZXJyKCIlczogQ2Fubm90IGF0dGFjaCB0byBQSFkgKGVycm9yOiAlZClcbiIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFJlcXVlc3QgdGhlIElSUSBsaW5lcyAqLworCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmc3RtbWFjX2ludGVycnVwdCwKKwkJCSAgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJcHJfZXJyKCIlczogRVJST1I6IGFsbG9jYXRpbmcgdGhlIElSUSAlZCAoZXJyb3I6ICVkKVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPmlycSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJcHJpdi0+dG0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RtbWFjX3RpbWVyICopLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkocHJpdi0+dG0gPT0gTlVMTCkpIHsKKwkJcHJfZXJyKCIlczogRVJST1I6IHRpbWVyIG1lbW9yeSBhbGxvYyBmYWlsZWQgXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlwcml2LT50bS0+ZnJlcSA9IHRtcmF0ZTsKKworCS8qIFRlc3QgaWYgdGhlIEhXIHRpbWVyIGNhbiBiZSBhY3R1YWxseSB1c2VkLgorCSAqIEluIGNhc2Ugb2YgZmFpbHVyZSBjb250aW51ZSB3aXRoIG5vIHRpbWVyLiAqLworCWlmICh1bmxpa2VseSgoc3RtbWFjX29wZW5fZXh0X3RpbWVyKGRldiwgcHJpdi0+dG0pKSA8IDApKSB7CisJCXByX3dhcm5pbmcoInN0bW1hY2V0aDogY2Fubm90IGF0dGFjaCB0aGUgSFcgdGltZXJcbiIpOworCQl0bXJhdGUgPSAwOworCQlwcml2LT50bS0+ZnJlcSA9IDA7CisJCXByaXYtPnRtLT50aW1lcl9zdGFydCA9IHN0bW1hY19ub190aW1lcl9zdGFydGVkOworCQlwcml2LT50bS0+dGltZXJfc3RvcCA9IHN0bW1hY19ub190aW1lcl9zdG9wcGVkOworCX0KKyNlbmRpZgorCisJLyogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBUWC9SWCBkZXNjcmlwdG9ycyBjaGFpbnMuICovCisJcHJpdi0+ZG1hX3R4X3NpemUgPSBTVE1NQUNfQUxJR04oZG1hX3R4c2l6ZSk7CisJcHJpdi0+ZG1hX3J4X3NpemUgPSBTVE1NQUNfQUxJR04oZG1hX3J4c2l6ZSk7CisJcHJpdi0+ZG1hX2J1Zl9zeiA9IFNUTU1BQ19BTElHTihidWZfc3opOworCWluaXRfZG1hX2Rlc2NfcmluZ3MoZGV2KTsKKworCS8qIERNQSBpbml0aWFsaXphdGlvbiBhbmQgU1cgcmVzZXQgKi8KKwlpZiAodW5saWtlbHkocHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX2luaXQoaW9hZGRyLAorCQlwcml2LT5wYmwsIHByaXYtPmRtYV90eF9waHksIHByaXYtPmRtYV9yeF9waHkpIDwgMCkpIHsKKworCQlwcl9lcnIoIiVzOiBETUEgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBDb3B5IHRoZSBNQUMgYWRkciBpbnRvIHRoZSBIVyAgKi8KKwlwcml2LT5tYWNfdHlwZS0+b3BzLT5zZXRfdW1hY19hZGRyKGlvYWRkciwgZGV2LT5kZXZfYWRkciwgMCk7CisJLyogSW5pdGlhbGl6ZSB0aGUgTUFDIENvcmUgKi8KKwlwcml2LT5tYWNfdHlwZS0+b3BzLT5jb3JlX2luaXQoaW9hZGRyKTsKKworCXByaXYtPnNodXRkb3duID0gMDsKKworCS8qIEluaXRpYWxpc2UgdGhlIE1NQyAoaWYgcHJlc2VudCkgdG8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi8KKwl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgTU1DX0hJR0hfSU5UUl9NQVNLKTsKKwl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgTU1DX0xPV19JTlRSX01BU0spOworCisJLyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi8KKwlzdG1tYWNfbWFjX2VuYWJsZV9yeChpb2FkZHIpOworCXN0bW1hY19tYWNfZW5hYmxlX3R4KGlvYWRkcik7CisKKwkvKiBTZXQgdGhlIEhXIERNQSBtb2RlIGFuZCB0aGUgQ09FICovCisJc3RtbWFjX2RtYV9vcGVyYXRpb25fbW9kZShwcml2KTsKKworCS8qIEV4dHJhIHN0YXRpc3RpY3MgKi8KKwltZW1zZXQoJnByaXYtPnhzdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMpKTsKKwlwcml2LT54c3RhdHMudGhyZXNob2xkID0gdGM7CisKKwkvKiBTdGFydCB0aGUgYmFsbCByb2xsaW5nLi4uICovCisJREJHKHByb2JlLCBERUJVRywgIiVzOiBETUEgUlgvVFggcHJvY2Vzc2VzIHN0YXJ0ZWQuLi5cbiIsIGRldi0+bmFtZSk7CisJc3RtbWFjX2RtYV9zdGFydF90eChpb2FkZHIpOworCXN0bW1hY19kbWFfc3RhcnRfcngoaW9hZGRyKTsKKworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwlwcml2LT50bS0+dGltZXJfc3RhcnQodG1yYXRlKTsKKyNlbmRpZgorCS8qIER1bXAgRE1BL01BQyByZWdpc3RlcnMgKi8KKwlpZiAobmV0aWZfbXNnX2h3KHByaXYpKSB7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPmR1bXBfbWFjX3JlZ3MoaW9hZGRyKTsKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZHVtcF9kbWFfcmVncyhpb2FkZHIpOworCX0KKworCWlmIChwcml2LT5waHlkZXYpCisJCXBoeV9zdGFydChwcml2LT5waHlkZXYpOworCisJbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnJ4X3JlY3ljbGUpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIHN0bW1hY19yZWxlYXNlIC0gY2xvc2UgZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlcgorICogIEBkZXYgOiBkZXZpY2UgcG9pbnRlci4KKyAqICBEZXNjcmlwdGlvbjoKKyAqICBUaGlzIGlzIHRoZSBzdG9wIGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogU3RvcCBhbmQgZGlzY29ubmVjdCB0aGUgUEhZICovCisJaWYgKHByaXYtPnBoeWRldikgeworCQlwaHlfc3RvcChwcml2LT5waHlkZXYpOworCQlwaHlfZGlzY29ubmVjdChwcml2LT5waHlkZXYpOworCQlwcml2LT5waHlkZXYgPSBOVUxMOworCX0KKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwkvKiBTdG9wIGFuZCByZWxlYXNlIHRoZSB0aW1lciAqLworCXN0bW1hY19jbG9zZV9leHRfdGltZXIoKTsKKwlpZiAocHJpdi0+dG0gIT0gTlVMTCkKKwkJa2ZyZWUocHJpdi0+dG0pOworI2VuZGlmCisJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKKwlza2JfcXVldWVfcHVyZ2UoJnByaXYtPnJ4X3JlY3ljbGUpOworCisJLyogRnJlZSB0aGUgSVJRIGxpbmVzICovCisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwkvKiBTdG9wIFRYL1JYIERNQSBhbmQgY2xlYXIgdGhlIGRlc2NyaXB0b3JzICovCisJc3RtbWFjX2RtYV9zdG9wX3R4KGRldi0+YmFzZV9hZGRyKTsKKwlzdG1tYWNfZG1hX3N0b3BfcngoZGV2LT5iYXNlX2FkZHIpOworCisJLyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgUngvVHggcmVzb3VyY2VzICovCisJZnJlZV9kbWFfZGVzY19yZXNvdXJjZXMocHJpdik7CisKKwkvKiBEaXNhYmxlIHRoZSBNQUMgY29yZSAqLworCXN0bW1hY19tYWNfZGlzYWJsZV90eChkZXYtPmJhc2VfYWRkcik7CisJc3RtbWFjX21hY19kaXNhYmxlX3J4KGRldi0+YmFzZV9hZGRyKTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRvIHBlcmZvcm0gZW11bGF0ZWQgaGFyZHdhcmUgc2VnbWVudGF0aW9uIG9uIHNrYi4KKyAqLworc3RhdGljIGludCBzdG1tYWNfc3dfdHNvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKmN1cnJfc2tiOworCWludCBnc29fc2VncyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3M7CisKKwkvKiBFc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyBpbiB0aGUgd29yc3QgY2FzZSAqLworCWlmICh1bmxpa2VseShzdG1tYWNfdHhfYXZhaWwocHJpdikgPCBnc29fc2VncykpIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5kZXYpOworCQlUWF9EQkcoS0VSTl9FUlIgIiVzOiBUU08gQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZVxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJaWYgKHN0bW1hY190eF9hdmFpbChwcml2KSA8IGdzb19zZWdzKQorCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCisJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKKwl9CisJVFhfREJHKCJcdHN0bW1hY19zd190c286IHNlZ21lbnRpbmc6IHNrYiAlcCAobGVuICVkKVxuIiwKKwkgICAgICAgc2tiLCBza2ItPmxlbik7CisKKwlzZWdzID0gc2tiX2dzb19zZWdtZW50KHNrYiwgcHJpdi0+ZGV2LT5mZWF0dXJlcyAmIH5ORVRJRl9GX1RTTyk7CisJaWYgKHVubGlrZWx5KElTX0VSUihzZWdzKSkpCisJCWdvdG8gc3dfdHNvX2VuZDsKKworCWRvIHsKKwkJY3Vycl9za2IgPSBzZWdzOworCQlzZWdzID0gc2Vncy0+bmV4dDsKKwkJVFhfREJHKCJcdFx0Y3VycmVudCBza2ItPmxlbjogJWQsICpjdXJyICVwLCIKKwkJICAgICAgICIqbmV4dCAlcFxuIiwgY3Vycl9za2ItPmxlbiwgY3Vycl9za2IsIHNlZ3MpOworCQljdXJyX3NrYi0+bmV4dCA9IE5VTEw7CisJCXN0bW1hY194bWl0KGN1cnJfc2tiLCBwcml2LT5kZXYpOworCX0gd2hpbGUgKHNlZ3MpOworCitzd190c29fZW5kOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RtbWFjX2hhbmRsZV9qdW1ib19mcmFtZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBpbnQgY3N1bV9pbnNlcnRpb24pCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBpbnQgbm9wYWdlZF9sZW4gPSBza2JfaGVhZGxlbihza2IpOworCXVuc2lnbmVkIGludCB0eHNpemUgPSBwcml2LT5kbWFfdHhfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZW50cnkgPSBwcml2LT5jdXJfdHggJSB0eHNpemU7CisJc3RydWN0IGRtYV9kZXNjICpkZXNjID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7CisKKwlpZiAobm9wYWdlZF9sZW4gPiBCVUZfU0laRV84S2lCKSB7CisKKwkJaW50IGJ1ZjJfc2l6ZSA9IG5vcGFnZWRfbGVuIC0gQlVGX1NJWkVfOEtpQjsKKworCQlkZXNjLT5kZXMyID0gZG1hX21hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLCBza2ItPmRhdGEsCisJCQkJCSAgICBCVUZfU0laRV84S2lCLCBETUFfVE9fREVWSUNFKTsKKwkJZGVzYy0+ZGVzMyA9IGRlc2MtPmRlczIgKyBCVUZfU0laRV80S2lCOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMSwgQlVGX1NJWkVfOEtpQiwKKwkJCQkJCSAgICAgY3N1bV9pbnNlcnRpb24pOworCisJCWVudHJ5ID0gKCsrcHJpdi0+Y3VyX3R4KSAlIHR4c2l6ZTsKKwkJZGVzYyA9IHByaXYtPmRtYV90eCArIGVudHJ5OworCisJCWRlc2MtPmRlczIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5kZXZpY2UsCisJCQkJCXNrYi0+ZGF0YSArIEJVRl9TSVpFXzhLaUIsCisJCQkJCWJ1ZjJfc2l6ZSwgRE1BX1RPX0RFVklDRSk7CisJCWRlc2MtPmRlczMgPSBkZXNjLT5kZXMyICsgQlVGX1NJWkVfNEtpQjsKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDAsCisJCQkJCQkgICAgIGJ1ZjJfc2l6ZSwgY3N1bV9pbnNlcnRpb24pOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5zZXRfdHhfb3duZXIoZGVzYyk7CisJCXByaXYtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOworCX0gZWxzZSB7CisJCWRlc2MtPmRlczIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHNrYi0+ZGF0YSwKKwkJCQkJbm9wYWdlZF9sZW4sIERNQV9UT19ERVZJQ0UpOworCQlkZXNjLT5kZXMzID0gZGVzYy0+ZGVzMiArIEJVRl9TSVpFXzRLaUI7CisJCXByaXYtPm1hY190eXBlLT5vcHMtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAxLCBub3BhZ2VkX2xlbiwKKwkJCQkJCSAgICAgY3N1bV9pbnNlcnRpb24pOworCX0KKwlyZXR1cm4gZW50cnk7Cit9CisKKy8qKgorICogIHN0bW1hY194bWl0OgorICogIEBza2IgOiB0aGUgc29ja2V0IGJ1ZmZlcgorICogIEBkZXYgOiBkZXZpY2UgcG9pbnRlcgorICogIERlc2NyaXB0aW9uIDogVHggZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlci4KKyAqLworc3RhdGljIG5ldGRldl90eF90IHN0bW1hY194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBpbnQgdHhzaXplID0gcHJpdi0+ZG1hX3R4X3NpemU7CisJdW5zaWduZWQgaW50IGVudHJ5OworCWludCBpLCBjc3VtX2luc2VydGlvbiA9IDA7CisJaW50IG5mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJc3RydWN0IGRtYV9kZXNjICpkZXNjLCAqZmlyc3Q7CisKKwlpZiAodW5saWtlbHkoc3RtbWFjX3R4X2F2YWlsKHByaXYpIDwgbmZyYWdzICsgMSkpIHsKKwkJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yLCBsb2cgaXQuICovCisJCQlwcl9lcnIoIiVzOiBCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJfQorCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJZW50cnkgPSBwcml2LT5jdXJfdHggJSB0eHNpemU7CisKKyNpZmRlZiBTVE1NQUNfWE1JVF9ERUJVRworCWlmICgoc2tiLT5sZW4gPiBFVEhfRlJBTUVfTEVOKSB8fCBuZnJhZ3MpCisJCXByX2luZm8oInN0bW1hYyB4bWl0OlxuIgorCQkgICAgICAgIlx0c2tiIGFkZHIgJXAgLSBsZW46ICVkIC0gbm9wYWdlZF9sZW46ICVkXG4iCisJCSAgICAgICAiXHRuX2ZyYWdzOiAlZCAtIGlwX3N1bW1lZDogJWQgLSAlcyBnc29cbiIsCisJCSAgICAgICBza2IsIHNrYi0+bGVuLCBza2JfaGVhZGxlbihza2IpLCBuZnJhZ3MsIHNrYi0+aXBfc3VtbWVkLAorCQkgICAgICAgIXNrYl9pc19nc28oc2tiKSA/ICJpc24ndCIgOiAiaXMiKTsKKyNlbmRpZgorCisJaWYgKHVubGlrZWx5KHNrYl9pc19nc28oc2tiKSkpCisJCXJldHVybiBzdG1tYWNfc3dfdHNvKHByaXYsIHNrYik7CisKKwlpZiAobGlrZWx5KChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkpIHsKKwkJaWYgKGxpa2VseShwcml2LT50eF9jb2UgPT0gTk9fSFdfQ1NVTSkpCisJCQlza2JfY2hlY2tzdW1faGVscChza2IpOworCQllbHNlCisJCQljc3VtX2luc2VydGlvbiA9IDE7CisJfQorCisJZGVzYyA9IHByaXYtPmRtYV90eCArIGVudHJ5OworCWZpcnN0ID0gZGVzYzsKKworI2lmZGVmIFNUTU1BQ19YTUlUX0RFQlVHCisJaWYgKChuZnJhZ3MgPiAwKSB8fCAoc2tiLT5sZW4gPiBFVEhfRlJBTUVfTEVOKSkKKwkJcHJfZGVidWcoInN0bW1hYyB4bWl0OiBza2IgbGVuOiAlZCwgbm9wYWdlZF9sZW46ICVkLFxuIgorCQkgICAgICAgIlx0XHRuX2ZyYWdzOiAlZCwgaXBfc3VtbWVkOiAlZFxuIiwKKwkJICAgICAgIHNrYi0+bGVuLCBza2JfaGVhZGxlbihza2IpLCBuZnJhZ3MsIHNrYi0+aXBfc3VtbWVkKTsKKyNlbmRpZgorCXByaXYtPnR4X3NrYnVmZltlbnRyeV0gPSBza2I7CisJaWYgKHVubGlrZWx5KHNrYi0+bGVuID49IEJVRl9TSVpFXzRLaUIpKSB7CisJCWVudHJ5ID0gc3RtbWFjX2hhbmRsZV9qdW1ib19mcmFtZXMoc2tiLCBkZXYsIGNzdW1faW5zZXJ0aW9uKTsKKwkJZGVzYyA9IHByaXYtPmRtYV90eCArIGVudHJ5OworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBub3BhZ2VkX2xlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJCWRlc2MtPmRlczIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHNrYi0+ZGF0YSwKKwkJCQkJbm9wYWdlZF9sZW4sIERNQV9UT19ERVZJQ0UpOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMSwgbm9wYWdlZF9sZW4sCisJCQkJCQkgICAgIGNzdW1faW5zZXJ0aW9uKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbmZyYWdzOyBpKyspIHsKKwkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQlpbnQgbGVuID0gZnJhZy0+c2l6ZTsKKworCQllbnRyeSA9ICgrK3ByaXYtPmN1cl90eCkgJSB0eHNpemU7CisJCWRlc2MgPSBwcml2LT5kbWFfdHggKyBlbnRyeTsKKworCQlUWF9EQkcoIlx0W2VudHJ5ICVkXSBzZWdtZW50IGxlbjogJWRcbiIsIGVudHJ5LCBsZW4pOworCQlkZXNjLT5kZXMyID0gZG1hX21hcF9wYWdlKHByaXYtPmRldmljZSwgZnJhZy0+cGFnZSwKKwkJCQkJICBmcmFnLT5wYWdlX29mZnNldCwKKwkJCQkJICBsZW4sIERNQV9UT19ERVZJQ0UpOworCQlwcml2LT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKKwkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDAsIGxlbiwKKwkJCQkJCSAgICAgY3N1bV9pbnNlcnRpb24pOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5zZXRfdHhfb3duZXIoZGVzYyk7CisJfQorCisJLyogSW50ZXJydXB0IG9uIGNvbXBsZXRpdGlvbiBvbmx5IGZvciB0aGUgbGF0ZXN0IHNlZ21lbnQgKi8KKwlwcml2LT5tYWNfdHlwZS0+b3BzLT5jbG9zZV90eF9kZXNjKGRlc2MpOworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwkvKiBDbGVhbiBJQyB3aGlsZSB1c2luZyB0aW1lcnMgKi8KKwlwcml2LT5tYWNfdHlwZS0+b3BzLT5jbGVhcl90eF9pYyhkZXNjKTsKKyNlbmRpZgorCS8qIFRvIGF2b2lkIHJhaXNlIGNvbmRpdGlvbiAqLworCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF90eF9vd25lcihmaXJzdCk7CisKKwlwcml2LT5jdXJfdHgrKzsKKworI2lmZGVmIFNUTU1BQ19YTUlUX0RFQlVHCisJaWYgKG5ldGlmX21zZ19wa3RkYXRhKHByaXYpKSB7CisJCXByX2luZm8oInN0bW1hYyB4bWl0OiBjdXJyZW50PSVkLCBkaXJ0eT0lZCwgZW50cnk9JWQsICIKKwkJICAgICAgICJmaXJzdD0lcCwgbmZyYWdzPSVkXG4iLAorCQkgICAgICAgKHByaXYtPmN1cl90eCAlIHR4c2l6ZSksIChwcml2LT5kaXJ0eV90eCAlIHR4c2l6ZSksCisJCSAgICAgICBlbnRyeSwgZmlyc3QsIG5mcmFncyk7CisJCWRpc3BsYXlfcmluZyhwcml2LT5kbWFfdHgsIHR4c2l6ZSk7CisJCXByX2luZm8oIj4+PiBmcmFtZSB0byBiZSB0cmFuc21pdHRlZDogIik7CisJCXByaW50X3BrdChza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwl9CisjZW5kaWYKKwlpZiAodW5saWtlbHkoc3RtbWFjX3R4X2F2YWlsKHByaXYpIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpKSB7CisJCVRYX0RCRygiJXM6IHN0b3AgdHJhbnNtaXR0ZWQgcGFja2V0c1xuIiwgX19mdW5jX18pOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJfQorCisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKworCS8qIENTUjEgZW5hYmxlcyB0aGUgdHJhbnNtaXQgRE1BIHRvIGNoZWNrIGZvciBuZXcgZGVzY3JpcHRvciAqLworCXdyaXRlbCgxLCBkZXYtPmJhc2VfYWRkciArIERNQV9YTVRfUE9MTF9ERU1BTkQpOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19yeF9yZWZpbGwoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGludCByeHNpemUgPSBwcml2LT5kbWFfcnhfc2l6ZTsKKwlpbnQgYmZzaXplID0gcHJpdi0+ZG1hX2J1Zl9zejsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfcng7CisKKwlmb3IgKDsgcHJpdi0+Y3VyX3J4IC0gcHJpdi0+ZGlydHlfcnggPiAwOyBwcml2LT5kaXJ0eV9yeCsrKSB7CisJCXVuc2lnbmVkIGludCBlbnRyeSA9IHByaXYtPmRpcnR5X3J4ICUgcnhzaXplOworCQlpZiAobGlrZWx5KHByaXYtPnJ4X3NrYnVmZltlbnRyeV0gPT0gTlVMTCkpIHsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CisKKwkJCXNrYiA9IF9fc2tiX2RlcXVldWUoJnByaXYtPnJ4X3JlY3ljbGUpOworCQkJaWYgKHNrYiA9PSBOVUxMKQorCQkJCXNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24ocHJpdi0+ZGV2LAorCQkJCQkJCQliZnNpemUpOworCisJCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKQorCQkJCWJyZWFrOworCisJCQlwcml2LT5yeF9za2J1ZmZbZW50cnldID0gc2tiOworCQkJcHJpdi0+cnhfc2tidWZmX2RtYVtlbnRyeV0gPQorCQkJICAgIGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLCBiZnNpemUsCisJCQkJCSAgIERNQV9GUk9NX0RFVklDRSk7CisKKwkJCShwICsgZW50cnkpLT5kZXMyID0gcHJpdi0+cnhfc2tidWZmX2RtYVtlbnRyeV07CisJCQlpZiAodW5saWtlbHkocHJpdi0+aXNfZ21hYykpIHsKKwkJCQlpZiAoYmZzaXplID49IEJVRl9TSVpFXzhLaUIpCisJCQkJCShwICsgZW50cnkpLT5kZXMzID0KKwkJCQkJICAgIChwICsgZW50cnkpLT5kZXMyICsgQlVGX1NJWkVfOEtpQjsKKwkJCX0KKwkJCVJYX0RCRyhLRVJOX0lORk8gIlx0cmVmaWxsIGVudHJ5ICMlZFxuIiwgZW50cnkpOworCQl9CisJCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF9yeF9vd25lcihwICsgZW50cnkpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgc3RtbWFjX3J4KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgaW50IGxpbWl0KQoreworCXVuc2lnbmVkIGludCByeHNpemUgPSBwcml2LT5kbWFfcnhfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZW50cnkgPSBwcml2LT5jdXJfcnggJSByeHNpemU7CisJdW5zaWduZWQgaW50IG5leHRfZW50cnk7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfcnggKyBlbnRyeTsKKwlzdHJ1Y3QgZG1hX2Rlc2MgKnBfbmV4dDsKKworI2lmZGVmIFNUTU1BQ19SWF9ERUJVRworCWlmIChuZXRpZl9tc2dfaHcocHJpdikpIHsKKwkJcHJfZGVidWcoIj4+PiBzdG1tYWNfcng6IGRlc2NyaXB0b3IgcmluZzpcbiIpOworCQlkaXNwbGF5X3JpbmcocHJpdi0+ZG1hX3J4LCByeHNpemUpOworCX0KKyNlbmRpZgorCWNvdW50ID0gMDsKKwl3aGlsZSAoIXByaXYtPm1hY190eXBlLT5vcHMtPmdldF9yeF9vd25lcihwKSkgeworCQlpbnQgc3RhdHVzOworCisJCWlmIChjb3VudCA+PSBsaW1pdCkKKwkJCWJyZWFrOworCisJCWNvdW50Kys7CisKKwkJbmV4dF9lbnRyeSA9ICgrK3ByaXYtPmN1cl9yeCkgJSByeHNpemU7CisJCXBfbmV4dCA9IHByaXYtPmRtYV9yeCArIG5leHRfZW50cnk7CisJCXByZWZldGNoKHBfbmV4dCk7CisKKwkJLyogcmVhZCB0aGUgc3RhdHVzIG9mIHRoZSBpbmNvbWluZyBmcmFtZSAqLworCQlzdGF0dXMgPSAocHJpdi0+bWFjX3R5cGUtPm9wcy0+cnhfc3RhdHVzKCZwcml2LT5kZXYtPnN0YXRzLAorCQkJCQkJCSAmcHJpdi0+eHN0YXRzLCBwKSk7CisJCWlmICh1bmxpa2VseShzdGF0dXMgPT0gZGlzY2FyZF9mcmFtZSkpCisJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQllbHNlIHsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQkvKiBMZW5ndGggc2hvdWxkIG9taXQgdGhlIENSQyAqLworCQkJaW50IGZyYW1lX2xlbiA9CisJCQkgICAgcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3J4X2ZyYW1lX2xlbihwKSAtIDQ7CisKKyNpZmRlZiBTVE1NQUNfUlhfREVCVUcKKwkJCWlmIChmcmFtZV9sZW4gPiBFVEhfRlJBTUVfTEVOKQorCQkJCXByX2RlYnVnKCJcdFJYIGZyYW1lIHNpemUgJWQsIENPRSBzdGF0dXM6ICVkXG4iLAorCQkJCQlmcmFtZV9sZW4sIHN0YXR1cyk7CisKKwkJCWlmIChuZXRpZl9tc2dfaHcocHJpdikpCisJCQkJcHJfZGVidWcoIlx0ZGVzYzogJXAgW2VudHJ5ICVkXSBidWZmPTB4JXhcbiIsCisJCQkJCXAsIGVudHJ5LCBwLT5kZXMyKTsKKyNlbmRpZgorCQkJc2tiID0gcHJpdi0+cnhfc2tidWZmW2VudHJ5XTsKKwkJCWlmICh1bmxpa2VseSghc2tiKSkgeworCQkJCXByX2VycigiJXM6IEluY29uc2lzdGVudCBSeCBkZXNjcmlwdG9yIGNoYWluXG4iLAorCQkJCQlwcml2LT5kZXYtPm5hbWUpOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWJyZWFrOworCQkJfQorCQkJcHJlZmV0Y2goc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOKTsKKwkJCXByaXYtPnJ4X3NrYnVmZltlbnRyeV0gPSBOVUxMOworCisJCQlza2JfcHV0KHNrYiwgZnJhbWVfbGVuKTsKKwkJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLAorCQkJCQkgcHJpdi0+cnhfc2tidWZmX2RtYVtlbnRyeV0sCisJCQkJCSBwcml2LT5kbWFfYnVmX3N6LCBETUFfRlJPTV9ERVZJQ0UpOworI2lmZGVmIFNUTU1BQ19SWF9ERUJVRworCQkJaWYgKG5ldGlmX21zZ19wa3RkYXRhKHByaXYpKSB7CisJCQkJcHJfaW5mbygiIGZyYW1lIHJlY2VpdmVkICglZGJ5dGVzKSIsIGZyYW1lX2xlbik7CisJCQkJcHJpbnRfcGt0KHNrYi0+ZGF0YSwgZnJhbWVfbGVuKTsKKwkJCX0KKyNlbmRpZgorCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcHJpdi0+ZGV2KTsKKworCQkJaWYgKHVubGlrZWx5KHN0YXR1cyA9PSBjc3VtX25vbmUpKSB7CisJCQkJLyogYWx3YXlzIGZvciB0aGUgb2xkIG1hYyAxMC8xMDAgKi8KKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJCX0gZWxzZSB7CisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCQluYXBpX2dyb19yZWNlaXZlKCZwcml2LT5uYXBpLCBza2IpOworCQkJfQorCisJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gZnJhbWVfbGVuOworCQkJcHJpdi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJfQorCQllbnRyeSA9IG5leHRfZW50cnk7CisJCXAgPSBwX25leHQ7CS8qIHVzZSBwcmVmZXRjaGVkIHZhbHVlcyAqLworCX0KKworCXN0bW1hY19yeF9yZWZpbGwocHJpdik7CisKKwlwcml2LT54c3RhdHMucnhfcGt0X24gKz0gY291bnQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qKgorICogIHN0bW1hY19wb2xsIC0gc3RtbWFjIHBvbGwgbWV0aG9kIChOQVBJKQorICogIEBuYXBpIDogcG9pbnRlciB0byB0aGUgbmFwaSBzdHJ1Y3R1cmUuCisgKiAgQGJ1ZGdldCA6IG1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdGhhdCB0aGUgY3VycmVudCBDUFUgY2FuIHJlY2VpdmUgZnJvbQorICoJICAgICAgYWxsIGludGVyZmFjZXMuCisgKiAgRGVzY3JpcHRpb24gOgorICogICBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHRoZSByZWNlcHRpb24gcHJvY2Vzcy4KKyAqICAgQWxzbyBpdCBydW5zIHRoZSBUWCBjb21wbGV0aW9uIHRocmVhZAorICovCitzdGF0aWMgaW50IHN0bW1hY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IHN0bW1hY19wcml2LCBuYXBpKTsKKwlpbnQgd29ya19kb25lID0gMDsKKworCXByaXYtPnhzdGF0cy5wb2xsX24rKzsKKwlzdG1tYWNfdHgocHJpdik7CisJd29ya19kb25lID0gc3RtbWFjX3J4KHByaXYsIGJ1ZGdldCk7CisKKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCXN0bW1hY19lbmFibGVfaXJxKHByaXYpOworCX0KKwlyZXR1cm4gd29ya19kb25lOworfQorCisvKioKKyAqICBzdG1tYWNfdHhfdGltZW91dAorICogIEBkZXYgOiBQb2ludGVyIHRvIG5ldCBkZXZpY2Ugc3RydWN0dXJlCisgKiAgRGVzY3JpcHRpb246IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBwYWNrZXQgdHJhbnNtaXNzaW9uIGZhaWxzIHRvCisgKiAgIGNvbXBsZXRlIHdpdGhpbiBhIHJlYXNvbmFibGUgdG1yYXRlLiBUaGUgZHJpdmVyIHdpbGwgbWFyayB0aGUgZXJyb3IgaW4gdGhlCisgKiAgIG5ldGRldiBzdHJ1Y3R1cmUgYW5kIGFycmFuZ2UgZm9yIHRoZSBkZXZpY2UgdG8gYmUgcmVzZXQgdG8gYSBzYW5lIHN0YXRlCisgKiAgIGluIG9yZGVyIHRvIHRyYW5zbWl0IGEgbmV3IHBhY2tldC4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogQ2xlYXIgVHggcmVzb3VyY2VzIGFuZCByZXN0YXJ0IHRyYW5zbWl0dGluZyBhZ2FpbiAqLworCXN0bW1hY190eF9lcnIocHJpdik7CisJcmV0dXJuOworfQorCisvKiBDb25maWd1cmF0aW9uIGNoYW5nZXMgKHBhc3NlZCBvbiBieSBpZmNvbmZpZykgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCkKK3sKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkJLyogY2FuJ3QgYWN0IG9uIGEgcnVubmluZyBpbnRlcmZhY2UgKi8KKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIERvbid0IGFsbG93IGNoYW5naW5nIHRoZSBJL08gYWRkcmVzcyAqLworCWlmIChtYXAtPmJhc2VfYWRkciAhPSBkZXYtPmJhc2VfYWRkcikgeworCQlwcl93YXJuaW5nKCIlczogY2FuJ3QgY2hhbmdlIEkvTyBhZGRyZXNzXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogRG9uJ3QgYWxsb3cgY2hhbmdpbmcgdGhlIElSUSAqLworCWlmIChtYXAtPmlycSAhPSBkZXYtPmlycSkgeworCQlwcl93YXJuaW5nKCIlczogY2FuJ3QgY2hhbmdlIElSUSBudW1iZXIgJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qIGlnbm9yZSBvdGhlciBmaWVsZHMgKi8KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgc3RtbWFjX211bHRpY2FzdF9saXN0IC0gZW50cnkgcG9pbnQgZm9yIG11bHRpY2FzdCBhZGRyZXNzaW5nCisgKiAgQGRldiA6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqICBEZXNjcmlwdGlvbjoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGEgZHJpdmVyIGVudHJ5IHBvaW50IHdoaWNoIGdldHMgY2FsbGVkIGJ5IHRoZSBrZXJuZWwKKyAqICB3aGVuZXZlciBtdWx0aWNhc3QgYWRkcmVzc2VzIG11c3QgYmUgZW5hYmxlZC9kaXNhYmxlZC4KKyAqICBSZXR1cm4gdmFsdWU6CisgKiAgdm9pZC4KKyAqLworc3RhdGljIHZvaWQgc3RtbWFjX211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisJcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X2ZpbHRlcihkZXYpOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogIHN0bW1hY19jaGFuZ2VfbXR1IC0gZW50cnkgcG9pbnQgdG8gY2hhbmdlIE1UVSBzaXplIGZvciB0aGUgZGV2aWNlLgorICogIEBkZXYgOiBkZXZpY2UgcG9pbnRlci4KKyAqICBAbmV3X210dSA6IHRoZSBuZXcgTVRVIHNpemUgZm9yIHRoZSBkZXZpY2UuCisgKiAgRGVzY3JpcHRpb246IHRoZSBNYXhpbXVtIFRyYW5zZmVyIFVuaXQgKE1UVSkgaXMgdXNlZCBieSB0aGUgbmV0d29yayBsYXllcgorICogIHRvIGRyaXZlIHBhY2tldCB0cmFuc21pc3Npb24uIEV0aGVybmV0IGhhcyBhbiBNVFUgb2YgMTUwMCBvY3RldHMKKyAqICAoRVRIX0RBVEFfTEVOKS4gVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCB3aXRoIGlmY29uZmlnLgorICogIFJldHVybiB2YWx1ZToKKyAqICAwIG9uIHN1Y2Nlc3MgYW5kIGFuIGFwcHJvcHJpYXRlICgtKXZlIGludGVnZXIgYXMgZGVmaW5lZCBpbiBlcnJuby5oCisgKiAgZmlsZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHN0bW1hY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IG1heF9tdHU7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXByX2VycigiJXM6IG11c3QgYmUgc3RvcHBlZCB0byBjaGFuZ2UgaXRzIE1UVVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAocHJpdi0+aXNfZ21hYykKKwkJbWF4X210dSA9IEpVTUJPX0xFTjsKKwllbHNlCisJCW1heF9tdHUgPSBFVEhfREFUQV9MRU47CisKKwlpZiAoKG5ld19tdHUgPCA0NikgfHwgKG5ld19tdHUgPiBtYXhfbXR1KSkgeworCQlwcl9lcnIoIiVzOiBpbnZhbGlkIE1UVSwgbWF4IE1UVSBpczogJWRcbiIsIGRldi0+bmFtZSwgbWF4X210dSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldi0+bXR1ID0gbmV3X210dTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3RtbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHVubGlrZWx5KCFkZXYpKSB7CisJCXByX2VycigiJXM6IGludmFsaWQgZGV2IHBvaW50ZXJcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChwcml2LT5pc19nbWFjKSB7CisJCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJCS8qIFRvIGhhbmRsZSBHTUFDIG93biBpbnRlcnJ1cHRzICovCisJCXByaXYtPm1hY190eXBlLT5vcHMtPmhvc3RfaXJxX3N0YXR1cyhpb2FkZHIpOworCX0KKwlzdG1tYWNfZG1hX2ludGVycnVwdChkZXYpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKy8qIFBvbGxpbmcgcmVjZWl2ZSAtIHVzZWQgYnkgTkVUQ09OU09MRSBhbmQgb3RoZXIgZGlhZ25vc3RpYyB0b29scworICogdG8gYWxsb3cgbmV0d29yayBJL08gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAqLworc3RhdGljIHZvaWQgc3RtbWFjX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwlzdG1tYWNfaW50ZXJydXB0KGRldi0+aXJxLCBkZXYpOworCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworfQorI2VuZGlmCisKKy8qKgorICogIHN0bW1hY19pb2N0bCAtIEVudHJ5IHBvaW50IGZvciB0aGUgSW9jdGwKKyAqICBAZGV2OiBEZXZpY2UgcG9pbnRlci4KKyAqICBAcnE6IEFuIElPQ1RMIHNwZWNlZmljIHN0cnVjdHVyZSwgdGhhdCBjYW4gY29udGFpbiBhIHBvaW50ZXIgdG8KKyAqICBhIHByb3ByaWV0YXJ5IHN0cnVjdHVyZSB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdG8gdGhlIGRyaXZlci4KKyAqICBAY21kOiBJT0NUTCBjb21tYW5kCisgKiAgRGVzY3JpcHRpb246CisgKiAgQ3VycmVudGx5IHRoZXJlIGFyZSBubyBzcGVjaWFsIGZ1bmN0aW9uYWxpdHkgc3VwcG9ydGVkIGluIElPQ1RMLCBqdXN0IHRoZQorICogIHBoeV9taWlfaW9jdGwoLi4uKSBjYW4gYmUgaW52b2tlZC4KKyAqLworc3RhdGljIGludCBzdG1tYWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DR01JSVBIWToKKwljYXNlIFNJT0NHTUlJUkVHOgorCWNhc2UgU0lPQ1NNSUlSRUc6CisJCWlmICghcHJpdi0+cGh5ZGV2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwkJcmV0ID0gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIGlmX21paShycSksIGNtZCk7CisJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECitzdGF0aWMgdm9pZCBzdG1tYWNfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQoreworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlEQkcocHJvYmUsIElORk8sICIlczogU2V0dGluZyB2bGdycCB0byAlcFxuIiwgZGV2LT5uYW1lLCBncnApOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwlwcml2LT52bGdycCA9IGdycDsKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisKKwlyZXR1cm47Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzdG1tYWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBzdG1tYWNfb3BlbiwKKwkubmRvX3N0YXJ0X3htaXQgPSBzdG1tYWNfeG1pdCwKKwkubmRvX3N0b3AgPSBzdG1tYWNfcmVsZWFzZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBzdG1tYWNfY2hhbmdlX210dSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHN0bW1hY19tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQgPSBzdG1tYWNfdHhfdGltZW91dCwKKwkubmRvX2RvX2lvY3RsID0gc3RtbWFjX2lvY3RsLAorCS5uZG9fc2V0X2NvbmZpZyA9IHN0bW1hY19jb25maWcsCisjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgPSBzdG1tYWNfdmxhbl9yeF9yZWdpc3RlciwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSBzdG1tYWNfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCit9OworCisvKioKKyAqIHN0bW1hY19wcm9iZSAtIEluaXRpYWxpemF0aW9uIG9mIHRoZSBhZGFwdGVyIC4KKyAqIEBkZXYgOiBkZXZpY2UgcG9pbnRlcgorICogRGVzY3JpcHRpb246IFRoZSBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlIGZvcgorICogdGhlIFNUTU1BQyBkcml2ZXIuIEl0IGFsc28gY2FsbHMgdGhlIGxvdyBsZXZlbCByb3V0aW5lcworICogaW4gb3JkZXIgdG8gaW5pdCB0aGUgSFcgKGkuZS4gdGhlIERNQSBlbmdpbmUpCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWV0aGVyX3NldHVwKGRldik7CisKKwlkZXYtPm5ldGRldl9vcHMgPSAmc3RtbWFjX25ldGRldl9vcHM7CisJc3RtbWFjX3NldF9ldGh0b29sX29wcyhkZXYpOworCisJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfSElHSERNQSk7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpOworI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECisJLyogQm90aCBtYWMxMDAgYW5kIGdtYWMgc3VwcG9ydCByZWNlaXZlIFZMQU4gdGFnIGRldGVjdGlvbiAqLworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1JYOworI2VuZGlmCisJcHJpdi0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KGRlYnVnLCBkZWZhdWx0X21zZ19sZXZlbCk7CisKKwlpZiAocHJpdi0+aXNfZ21hYykKKwkJcHJpdi0+cnhfY3N1bSA9IDE7CisKKwlpZiAoZmxvd19jdHJsKQorCQlwcml2LT5mbG93X2N0cmwgPSBGTE9XX0FVVE87CS8qIFJYL1RYIHBhdXNlIG9uICovCisKKwlwcml2LT5wYXVzZSA9IHBhdXNlOworCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPm5hcGksIHN0bW1hY19wb2xsLCA2NCk7CisKKwkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCisJcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3VtYWNfYWRkcihkZXYtPmJhc2VfYWRkciwgZGV2LT5kZXZfYWRkciwgMCk7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpCisJCXByX3dhcm5pbmcoIlx0bm8gdmFsaWQgTUFDIGFkZHJlc3M7IgorCQkJInBsZWFzZSwgdXNlIGlmY29uZmlnIG9yIG53aHdjb25maWchXG4iKTsKKworCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCIlczogRVJST1IgJWkgcmVnaXN0ZXJpbmcgdGhlIGRldmljZVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlEQkcocHJvYmUsIERFQlVHLCAiJXM6IFNjYXR0ZXIvR2F0aGVyOiAlcyAtIEhXIGNoZWNrc3VtczogJXNcbiIsCisJICAgIGRldi0+bmFtZSwgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKSA/ICJvbiIgOiAib2ZmIiwKKwkgICAgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pID8gIm9uIiA6ICJvZmYiKTsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogc3RtbWFjX21hY19kZXZpY2Vfc2V0dXAKKyAqIEBkZXYgOiBkZXZpY2UgcG9pbnRlcgorICogRGVzY3JpcHRpb246IHNlbGVjdCBhbmQgaW5pdGlhbGlzZSB0aGUgbWFjIGRldmljZSAobWFjMTAwIG9yIEdtYWMpLgorICovCitzdGF0aWMgaW50IHN0bW1hY19tYWNfZGV2aWNlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCisJc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqZGV2aWNlOworCisJaWYgKHByaXYtPmlzX2dtYWMpCisJCWRldmljZSA9IGdtYWNfc2V0dXAoaW9hZGRyKTsKKwllbHNlCisJCWRldmljZSA9IG1hYzEwMF9zZXR1cChpb2FkZHIpOworCisJaWYgKCFkZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+bWFjX3R5cGUgPSBkZXZpY2U7CisKKwlwcml2LT53b2xlbmFibGVkID0gcHJpdi0+bWFjX3R5cGUtPmh3LnBtdDsJLyogUE1UIHN1cHBvcnRlZCAqLworCWlmIChwcml2LT53b2xlbmFibGVkID09IFBNVF9TVVBQT1JURUQpCisJCXByaXYtPndvbG9wdHMgPSBXQUtFX01BR0lDOwkJLyogTWFnaWMgRnJhbWUgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0bW1hY3BoeV9kdnJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqcGxhdF9kYXQ7CisJcGxhdF9kYXQgPSAoc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKikoKHBkZXYtPmRldikucGxhdGZvcm1fZGF0YSk7CisKKwlwcl9kZWJ1Zygic3RtbWFjcGh5X2R2cl9wcm9iZTogYWRkZWQgcGh5IGZvciBidXMgJWRcbiIsCisJICAgICAgIHBsYXRfZGF0LT5idXNfaWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RtbWFjcGh5X2R2cl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3RtbWFjcGh5X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IFBIWV9SRVNPVVJDRV9OQU1FLAorCQkgICB9LAorCS5wcm9iZSA9IHN0bW1hY3BoeV9kdnJfcHJvYmUsCisJLnJlbW92ZSA9IHN0bW1hY3BoeV9kdnJfcmVtb3ZlLAorfTsKKworLyoqCisgKiBzdG1tYWNfYXNzb2NpYXRlX3BoeQorICogQGRldjogcG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZGF0YTogcG9pbnRzIHRvIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqIERlc2NyaXB0aW9uOiBTY2FucyB0aHJvdWdoIGFsbCB0aGUgUEhZcyB3ZSBoYXZlIHJlZ2lzdGVyZWQgYW5kIGNoZWNrcyBpZgorICogYW55IGFyZSBhc3NvY2lhdGVkIHdpdGggb3VyIE1BQy4gIElmIHNvLCB0aGVuIGp1c3QgZmlsbCBpbgorICogdGhlIGJsYW5rcyBpbiBvdXIgbG9jYWwgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCBzdG1tYWNfYXNzb2NpYXRlX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gKHN0cnVjdCBzdG1tYWNfcHJpdiAqKWRhdGE7CisJc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKnBsYXRfZGF0OworCisJcGxhdF9kYXQgPSAoc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKikoZGV2LT5wbGF0Zm9ybV9kYXRhKTsKKworCURCRyhwcm9iZSwgREVCVUcsICIlczogY2hlY2tpbmcgcGh5IGZvciBidXMgJWRcbiIsIF9fZnVuY19fLAorCQlwbGF0X2RhdC0+YnVzX2lkKTsKKworCS8qIENoZWNrIHRoYXQgdGhpcyBwaHkgaXMgZm9yIHRoZSBNQUMgYmVpbmcgaW5pdGlhbGlzZWQgKi8KKwlpZiAocHJpdi0+YnVzX2lkICE9IHBsYXRfZGF0LT5idXNfaWQpCisJCXJldHVybiAwOworCisJLyogT0ssIHRoaXMgUEhZIGlzIGNvbm5lY3RlZCB0byB0aGUgTUFDLgorCSAgIEdvIGFoZWFkIGFuZCBnZXQgdGhlIHBhcmFtZXRlcnMgKi8KKwlEQkcocHJvYmUsIERFQlVHLCAiJXM6IE9LLiBGb3VuZCBQSFkgY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcHJpdi0+cGh5X2lycSA9CisJICAgIHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHRvX3BsYXRmb3JtX2RldmljZShkZXYpLCAicGh5aXJxIik7CisJREJHKHByb2JlLCBERUJVRywgIiVzOiBQSFkgaXJxIG9uIGJ1cyAlZCBpcyAlZFxuIiwgX19mdW5jX18sCisJICAgIHBsYXRfZGF0LT5idXNfaWQsIHByaXYtPnBoeV9pcnEpOworCisJLyogT3ZlcnJpZGUgd2l0aCBrZXJuZWwgcGFyYW1ldGVycyBpZiBzdXBwbGllZCBYWFggQ1JTIFhYWAorCSAqIHRoaXMgbmVlZHMgdG8gaGF2ZSBtdWx0aXBsZSBpbnN0YW5jZXMgKi8KKwlpZiAoKHBoeWFkZHIgPj0gMCkgJiYgKHBoeWFkZHIgPD0gMzEpKQorCQlwbGF0X2RhdC0+cGh5X2FkZHIgPSBwaHlhZGRyOworCisJcHJpdi0+cGh5X2FkZHIgPSBwbGF0X2RhdC0+cGh5X2FkZHI7CisJcHJpdi0+cGh5X21hc2sgPSBwbGF0X2RhdC0+cGh5X21hc2s7CisJcHJpdi0+cGh5X2ludGVyZmFjZSA9IHBsYXRfZGF0LT5pbnRlcmZhY2U7CisJcHJpdi0+cGh5X3Jlc2V0ID0gcGxhdF9kYXQtPnBoeV9yZXNldDsKKworCURCRyhwcm9iZSwgREVCVUcsICIlczogZXhpdGluZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAxOwkvKiBmb3JjZXMgZXhpdCBvZiBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKCkgKi8KK30KKworLyoqCisgKiBzdG1tYWNfZHZyX3Byb2JlCisgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXIKKyAqIERlc2NyaXB0aW9uOiB0aGUgZHJpdmVyIGlzIGluaXRpYWxpemVkIHRocm91Z2ggcGxhdGZvcm1fZGV2aWNlLgorICovCitzdGF0aWMgaW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1bnNpZ25lZCBpbnQgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXY7CisJc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdDsKKworCXByX2luZm8oIlNUTU1BQyBkcml2ZXI6XG5cdHBsYXRmb3JtIHJlZ2lzdHJhdGlvbi4uLiAiKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwlwcl9pbmZvKCJkb25lIVxuIik7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSwKKwkJCQlwZGV2LT5uYW1lKSkgeworCQlwcl9lcnIoIiVzOiBFUlJPUjogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorCQkgICAgICAgImNhbm5vdCBnZXQgdGhlIEkvTyBhZGRyIDB4JXhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGludClyZXMtPnN0YXJ0KTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlhZGRyID0gaW9yZW1hcChyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSk7CisJaWYgKCFhZGRyKSB7CisJCXByX2VycigiJXM6IEVSUk9SOiBtZW1vcnkgbWFwcGluZyBmYWlsZWQgXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHN0bW1hY19wcml2KSk7CisJaWYgKCFuZGV2KSB7CisJCXByX2VycigiJXM6IEVSUk9SOiBhbGxvY2F0aW5nIHRoZSBkZXZpY2VcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CisKKwkvKiBHZXQgdGhlIE1BQyBpbmZvcm1hdGlvbiAqLworCW5kZXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJtYWNpcnEiKTsKKwlpZiAobmRldi0+aXJxID09IC1FTlhJTykgeworCQlwcl9lcnIoIiVzOiBFUlJPUjogTUFDIElSUSBjb25maWd1cmF0aW9uICIKKwkJICAgICAgICJpbmZvcm1hdGlvbiBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXByaXYtPmRldmljZSA9ICYocGRldi0+ZGV2KTsKKwlwcml2LT5kZXYgPSBuZGV2OworCXBsYXRfZGF0ID0gKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqKSgocGRldi0+ZGV2KS5wbGF0Zm9ybV9kYXRhKTsKKwlwcml2LT5idXNfaWQgPSBwbGF0X2RhdC0+YnVzX2lkOworCXByaXYtPnBibCA9IHBsYXRfZGF0LT5wYmw7CS8qIFRMSSAqLworCXByaXYtPmlzX2dtYWMgPSBwbGF0X2RhdC0+aGFzX2dtYWM7CS8qIEdNQUMgaXMgb24gYm9hcmQgKi8KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOworCisJLyogU2V0IHRoZSBJL08gYmFzZSBhZGRyICovCisJbmRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKworCS8qIE1BQyBIVyByZXZpY2UgZGV0ZWN0aW9uICovCisJcmV0ID0gc3RtbWFjX21hY19kZXZpY2Vfc2V0dXAobmRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogTmV0d29yayBEZXZpY2UgUmVnaXN0cmF0aW9uICovCisJcmV0ID0gc3RtbWFjX3Byb2JlKG5kZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIGFzc29jaWF0ZSBhIFBIWSAtIGl0IGlzIHByb3ZpZGVkIGJ5IGFub3RoZXIgcGxhdGZvcm0gYnVzICovCisJaWYgKCFkcml2ZXJfZm9yX2VhY2hfZGV2aWNlCisJICAgICgmKHN0bW1hY3BoeV9kcml2ZXIuZHJpdmVyKSwgTlVMTCwgKHZvaWQgKilwcml2LAorCSAgICAgc3RtbWFjX2Fzc29jaWF0ZV9waHkpKSB7CisJCXByX2VycigiTm8gUEhZIGRldmljZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBNQUMhXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpdi0+Zml4X21hY19zcGVlZCA9IHBsYXRfZGF0LT5maXhfbWFjX3NwZWVkOworCXByaXYtPmJzcF9wcml2ID0gcGxhdF9kYXQtPmJzcF9wcml2OworCisJcHJfaW5mbygiXHQlcyAtIChkZXYuIG5hbWU6ICVzIC0gaWQ6ICVkLCBJUlEgIyVkXG4iCisJICAgICAgICJcdElPIGJhc2UgYWRkcjogMHglMDh4KVxuIiwgbmRldi0+bmFtZSwgcGRldi0+bmFtZSwKKwkgICAgICAgcGRldi0+aWQsIG5kZXYtPmlycSwgKHVuc2lnbmVkIGludClhZGRyKTsKKworCS8qIE1ESU8gYnVzIFJlZ2lzdHJhdGlvbiAqLworCXByX2RlYnVnKCJcdE1ESU8gYnVzIChpZDogJWQpLi4uIiwgcHJpdi0+YnVzX2lkKTsKKwlyZXQgPSBzdG1tYWNfbWRpb19yZWdpc3RlcihuZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcHJfZGVidWcoInJlZ2lzdGVyZWQhXG4iKTsKKworb3V0OgorCWlmIChyZXQgPCAwKSB7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkpOworCQlpZiAoYWRkciAhPSBOVUxMKQorCQkJaW91bm1hcChhZGRyKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHN0bW1hY19kdnJfcmVtb3ZlCisgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXIKKyAqIERlc2NyaXB0aW9uOiB0aGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgVFgvUlggcHJvY2Vzc2VzLCBkaXNhYmxlcyB0aGUgTUFDIFJYL1RYCisgKiBjaGFuZ2VzIHRoZSBsaW5rIHN0YXR1cywgcmVsZWFzZXMgdGhlIERNQSBkZXNjcmlwdG9yIHJpbmdzLAorICogdW5yZWdpc3RlcnMgdGhlIE1ESU8gYnVzIGFuZCB1bm1hcHMgdGhlIGFsbG9jYXRlZCBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQgc3RtbWFjX2R2cl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcHJfaW5mbygiJXM6XG5cdHJlbW92aW5nIGRyaXZlciIsIF9fZnVuY19fKTsKKworCXN0bW1hY19kbWFfc3RvcF9yeChuZGV2LT5iYXNlX2FkZHIpOworCXN0bW1hY19kbWFfc3RvcF90eChuZGV2LT5iYXNlX2FkZHIpOworCisJc3RtbWFjX21hY19kaXNhYmxlX3J4KG5kZXYtPmJhc2VfYWRkcik7CisJc3RtbWFjX21hY19kaXNhYmxlX3R4KG5kZXYtPmJhc2VfYWRkcik7CisKKwluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKKworCXN0bW1hY19tZGlvX3VucmVnaXN0ZXIobmRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKKworCWlvdW5tYXAoKHZvaWQgKiluZGV2LT5iYXNlX2FkZHIpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKTsKKworCWZyZWVfbmV0ZGV2KG5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgc3RtbWFjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBkaXNfaWMgPSAwOworCisJaWYgKCFkZXYgfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWlmIChwcml2LT5waHlkZXYpCisJCQlwaHlfc3RvcChwcml2LT5waHlkZXYpOworCisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCQlwcml2LT50bS0+dGltZXJfc3RvcCgpOworCQlkaXNfaWMgPSAxOworI2VuZGlmCisJCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CisKKwkJLyogU3RvcCBUWC9SWCBETUEgKi8KKwkJc3RtbWFjX2RtYV9zdG9wX3R4KGRldi0+YmFzZV9hZGRyKTsKKwkJc3RtbWFjX2RtYV9zdG9wX3J4KGRldi0+YmFzZV9hZGRyKTsKKwkJLyogQ2xlYXIgdGhlIFJ4L1R4IGRlc2NyaXB0b3JzICovCisJCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfcnhfZGVzYyhwcml2LT5kbWFfcngsCisJCQkJCQkgIHByaXYtPmRtYV9yeF9zaXplLCBkaXNfaWMpOworCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LAorCQkJCQkJICBwcml2LT5kbWFfdHhfc2l6ZSk7CisKKwkJc3RtbWFjX21hY19kaXNhYmxlX3R4KGRldi0+YmFzZV9hZGRyKTsKKworCQlpZiAoZGV2aWNlX21heV93YWtldXAoJihwZGV2LT5kZXYpKSkgeworCQkJLyogRW5hYmxlIFBvd2VyIGRvd24gbW9kZSBieSBwcm9ncmFtbWluZyB0aGUgUE1UIHJlZ3MgKi8KKwkJCWlmIChwcml2LT53b2xlbmFibGVkID09IFBNVF9TVVBQT1JURUQpCisJCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cG10KGRldi0+YmFzZV9hZGRyLAorCQkJCQkJCSBwcml2LT53b2xvcHRzKTsKKwkJfSBlbHNlIHsKKwkJCXN0bW1hY19tYWNfZGlzYWJsZV9yeChkZXYtPmJhc2VfYWRkcik7CisJCX0KKwl9IGVsc2UgeworCQlwcml2LT5zaHV0ZG93biA9IDE7CisJCS8qIEFsdGhvdWdoIHRoaXMgY2FuIGFwcGVhciBzbGlnaHRseSByZWR1bmRhbnQgaXQgYWN0dWFsbHkKKwkJICogbWFrZXMgZmFzdCB0aGUgc3RhbmRieSBvcGVyYXRpb24gYW5kIGd1YXJhbnRlZXMgdGhlIGRyaXZlcgorCQkgKiB3b3JraW5nIGlmIGhpYmVybmF0aW9uIGlzIG9uIG1lZGlhLiAqLworCQlzdG1tYWNfcmVsZWFzZShkZXYpOworCX0KKworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdG1tYWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwlpZiAocHJpdi0+c2h1dGRvd24pIHsKKwkJLyogUmUtb3BlbiB0aGUgaW50ZXJmYWNlIGFuZCByZS1pbml0IHRoZSBNQUMvRE1BCisJCSAgIGFuZCB0aGUgcmluZ3MuICovCisJCXN0bW1hY19vcGVuKGRldik7CisJCWdvdG8gb3V0X3Jlc3VtZTsKKwl9CisKKwkvKiBQb3dlciBEb3duIGJpdCwgaW50byB0aGUgUE0gcmVnaXN0ZXIsIGlzIGNsZWFyZWQKKwkgKiBhdXRvbWF0aWNhbGx5IGFzIHNvb24gYXMgYSBtYWdpYyBwYWNrZXQgb3IgYSBXYWtlLXVwIGZyYW1lCisJICogaXMgcmVjZWl2ZWQuIEFueXdheSwgaXQncyBiZXR0ZXIgdG8gbWFudWFsbHkgY2xlYXIKKwkgKiB0aGlzIGJpdCBiZWNhdXNlIGl0IGNhbiBnZW5lcmF0ZSBwcm9ibGVtcyB3aGlsZSByZXN1bWluZworCSAqIGZyb20gYW5vdGhlciBkZXZpY2VzIChlLmcuIHNlcmlhbCBjb25zb2xlKS4gKi8KKwlpZiAoZGV2aWNlX21heV93YWtldXAoJihwZGV2LT5kZXYpKSkKKwkJaWYgKHByaXYtPndvbGVuYWJsZWQgPT0gUE1UX1NVUFBPUlRFRCkKKwkJCXByaXYtPm1hY190eXBlLT5vcHMtPnBtdChkZXYtPmJhc2VfYWRkciwgMCk7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisKKwkvKiBFbmFibGUgdGhlIE1BQyBhbmQgRE1BICovCisJc3RtbWFjX21hY19lbmFibGVfcngoaW9hZGRyKTsKKwlzdG1tYWNfbWFjX2VuYWJsZV90eChpb2FkZHIpOworCXN0bW1hY19kbWFfc3RhcnRfdHgoaW9hZGRyKTsKKwlzdG1tYWNfZG1hX3N0YXJ0X3J4KGlvYWRkcik7CisKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJcHJpdi0+dG0tPnRpbWVyX3N0YXJ0KHRtcmF0ZSk7CisjZW5kaWYKKwluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CisKKwlpZiAocHJpdi0+cGh5ZGV2KQorCQlwaHlfc3RhcnQocHJpdi0+cGh5ZGV2KTsKKworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKK291dF9yZXN1bWU6CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN0bW1hY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSBTVE1NQUNfUkVTT1VSQ0VfTkFNRSwKKwkJICAgfSwKKwkucHJvYmUgPSBzdG1tYWNfZHZyX3Byb2JlLAorCS5yZW1vdmUgPSBzdG1tYWNfZHZyX3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IHN0bW1hY19zdXNwZW5kLAorCS5yZXN1bWUgPSBzdG1tYWNfcmVzdW1lLAorI2VuZGlmCisKK307CisKKy8qKgorICogc3RtbWFjX2luaXRfbW9kdWxlIC0gRW50cnkgcG9pbnQgZm9yIHRoZSBkcml2ZXIKKyAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGRyaXZlci4KKyAqLworc3RhdGljIGludCBfX2luaXQgc3RtbWFjX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldDsKKworCWlmIChwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnN0bW1hY3BoeV9kcml2ZXIpKSB7CisJCXByX2VycigiTm8gUEhZIGRldmljZXMgcmVnaXN0ZXJlZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnN0bW1hY19kcml2ZXIpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogc3RtbWFjX2NsZWFudXBfbW9kdWxlIC0gQ2xlYW51cCByb3V0aW5lIGZvciB0aGUgZHJpdmVyCisgKiBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBpcyB0aGUgY2xlYW51cCByb3V0aW5lIGZvciB0aGUgZHJpdmVyLgorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgc3RtbWFjX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnN0bW1hY3BoeV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzdG1tYWNfZHJpdmVyKTsKK30KKworI2lmbmRlZiBNT0RVTEUKK3N0YXRpYyBpbnQgX19pbml0IHN0bW1hY19jbWRsaW5lX29wdChjaGFyICpzdHIpCit7CisJY2hhciAqb3B0OworCisJaWYgKCFzdHIgfHwgISpzdHIpCisJCXJldHVybiAtRUlOVkFMOworCXdoaWxlICgob3B0ID0gc3Ryc2VwKCZzdHIsICIsIikpICE9IE5VTEwpIHsKKwkJaWYgKCFzdHJuY21wKG9wdCwgImRlYnVnOiIsIDYpKQorCQkJc3RyaWN0X3N0cnRvdWwob3B0ICsgNiwgMCwgKHVuc2lnbmVkIGxvbmcgKikmZGVidWcpOworCQllbHNlIGlmICghc3RybmNtcChvcHQsICJwaHlhZGRyOiIsIDgpKQorCQkJc3RyaWN0X3N0cnRvdWwob3B0ICsgOCwgMCwgKHVuc2lnbmVkIGxvbmcgKikmcGh5YWRkcik7CisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgImRtYV90eHNpemU6IiwgMTEpKQorCQkJc3RyaWN0X3N0cnRvdWwob3B0ICsgMTEsIDAsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nICopJmRtYV90eHNpemUpOworCQllbHNlIGlmICghc3RybmNtcChvcHQsICJkbWFfcnhzaXplOiIsIDExKSkKKwkJCXN0cmljdF9zdHJ0b3VsKG9wdCArIDExLCAwLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyAqKSZkbWFfcnhzaXplKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAiYnVmX3N6OiIsIDcpKQorCQkJc3RyaWN0X3N0cnRvdWwob3B0ICsgNywgMCwgKHVuc2lnbmVkIGxvbmcgKikmYnVmX3N6KTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAidGM6IiwgMykpCisJCQlzdHJpY3Rfc3RydG91bChvcHQgKyAzLCAwLCAodW5zaWduZWQgbG9uZyAqKSZ0Yyk7CisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgInR4X2NvZToiLCA3KSkKKwkJCXN0cmljdF9zdHJ0b3VsKG9wdCArIDcsIDAsICh1bnNpZ25lZCBsb25nICopJnR4X2NvZSk7CisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgIndhdGNoZG9nOiIsIDkpKQorCQkJc3RyaWN0X3N0cnRvdWwob3B0ICsgOSwgMCwgKHVuc2lnbmVkIGxvbmcgKikmd2F0Y2hkb2cpOworCQllbHNlIGlmICghc3RybmNtcChvcHQsICJmbG93X2N0cmw6IiwgMTApKQorCQkJc3RyaWN0X3N0cnRvdWwob3B0ICsgMTAsIDAsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nICopJmZsb3dfY3RybCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgInBhdXNlOiIsIDYpKQorCQkJc3RyaWN0X3N0cnRvdWwob3B0ICsgNiwgMCwgKHVuc2lnbmVkIGxvbmcgKikmcGF1c2UpOworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAidG1yYXRlOiIsIDcpKQorCQkJc3RyaWN0X3N0cnRvdWwob3B0ICsgNywgMCwgKHVuc2lnbmVkIGxvbmcgKikmdG1yYXRlKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KKworX19zZXR1cCgic3RtbWFjZXRoPSIsIHN0bW1hY19jbWRsaW5lX29wdCk7CisjZW5kaWYKKworbW9kdWxlX2luaXQoc3RtbWFjX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KHN0bW1hY19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU1RNTUFDIDEwLzEwMC8xMDAwIEV0aGVybmV0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDk4NTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tZGlvLmMKQEAgLTAsMCArMSwyMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFNUTU1BQyBFdGhlcm5ldCBEcml2ZXIgLS0gTURJTyBidXMgaW1wbGVtZW50YXRpb24KKyAgUHJvdmlkZXMgQnVzIGludGVyZmFjZSBmb3IgTUlJIHJlZ2lzdGVycworCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBDYXJsIFNoYXcgPGNhcmwuc2hhd0BzdC5jb20+CisgIE1haW50YWluZXI6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworI2luY2x1ZGUgInN0bW1hYy5oIgorCisjZGVmaW5lIE1JSV9CVVNZIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUlJX1dSSVRFIDB4MDAwMDAwMDIKKworLyoqCisgKiBzdG1tYWNfbWRpb19yZWFkCisgKiBAYnVzOiBwb2ludHMgdG8gdGhlIG1paV9idXMgc3RydWN0dXJlCisgKiBAcGh5YWRkcjogTUlJIGFkZHIgcmVnIGJpdHMgMTUtMTEKKyAqIEBwaHlyZWc6IE1JSSBhZGRyIHJlZyBiaXRzIDEwLTYKKyAqIERlc2NyaXB0aW9uOiBpdCByZWFkcyBkYXRhIGZyb20gdGhlIE1JSSByZWdpc3RlciBmcm9tIHdpdGhpbiB0aGUgcGh5IGRldmljZS4KKyAqIEZvciB0aGUgNzExMSBHTUFDLCB3ZSBtdXN0IHNldCB0aGUgYml0IDAgaW4gdGhlIE1JSSBhZGRyZXNzIHJlZ2lzdGVyIHdoaWxlCisgKiBhY2Nlc3NpbmcgdGhlIFBIWSByZWdpc3RlcnMuCisgKiBGb3J0dW5hdGVseSwgaXQgc2VlbXMgdGhpcyBoYXMgbm8gZHJhd2JhY2sgZm9yIHRoZSA3MTA5IE1BQy4KKyAqLworc3RhdGljIGludCBzdG1tYWNfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlhZGRyLCBpbnQgcGh5cmVnKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYnVzLT5wcml2OworCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPm1hY190eXBlLT5ody5taWkuYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWlpX2RhdGEgPSBwcml2LT5tYWNfdHlwZS0+aHcubWlpLmRhdGE7CisKKwlpbnQgZGF0YTsKKwl1MTYgcmVnVmFsdWUgPSAoKChwaHlhZGRyIDw8IDExKSAmICgweDAwMDBGODAwKSkgfAorCQkJKChwaHlyZWcgPDwgNikgJiAoMHgwMDAwMDdDMCkpKTsKKwlyZWdWYWx1ZSB8PSBNSUlfQlVTWTsJLyogaW4gY2FzZSBvZiBHTUFDICovCisKKwlkbyB7fSB3aGlsZSAoKChyZWFkbChpb2FkZHIgKyBtaWlfYWRkcmVzcykpICYgTUlJX0JVU1kpID09IDEpOworCXdyaXRlbChyZWdWYWx1ZSwgaW9hZGRyICsgbWlpX2FkZHJlc3MpOworCWRvIHt9IHdoaWxlICgoKHJlYWRsKGlvYWRkciArIG1paV9hZGRyZXNzKSkgJiBNSUlfQlVTWSkgPT0gMSk7CisKKwkvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIE1JSSBkYXRhIHJlZ2lzdGVyICovCisJZGF0YSA9IChpbnQpcmVhZGwoaW9hZGRyICsgbWlpX2RhdGEpOworCisJcmV0dXJuIGRhdGE7Cit9CisKKy8qKgorICogc3RtbWFjX21kaW9fd3JpdGUKKyAqIEBidXM6IHBvaW50cyB0byB0aGUgbWlpX2J1cyBzdHJ1Y3R1cmUKKyAqIEBwaHlhZGRyOiBNSUkgYWRkciByZWcgYml0cyAxNS0xMQorICogQHBoeXJlZzogTUlJIGFkZHIgcmVnIGJpdHMgMTAtNgorICogQHBoeWRhdGE6IHBoeSBkYXRhCisgKiBEZXNjcmlwdGlvbjogaXQgd3JpdGVzIHRoZSBkYXRhIGludG8gdGhlIE1JSSByZWdpc3RlciBmcm9tIHdpdGhpbiB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHN0bW1hY19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlhZGRyLCBpbnQgcGh5cmVnLAorCQkJICAgICB1MTYgcGh5ZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGJ1cy0+cHJpdjsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWlpX2FkZHJlc3MgPSBwcml2LT5tYWNfdHlwZS0+aHcubWlpLmFkZHI7CisJdW5zaWduZWQgaW50IG1paV9kYXRhID0gcHJpdi0+bWFjX3R5cGUtPmh3Lm1paS5kYXRhOworCisJdTE2IHZhbHVlID0KKwkgICAgKCgocGh5YWRkciA8PCAxMSkgJiAoMHgwMDAwRjgwMCkpIHwgKChwaHlyZWcgPDwgNikgJiAoMHgwMDAwMDdDMCkpKQorCSAgICB8IE1JSV9XUklURTsKKworCXZhbHVlIHw9IE1JSV9CVVNZOworCisJLyogV2FpdCB1bnRpbCBhbnkgZXhpc3RpbmcgTUlJIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSAqLworCWRvIHt9IHdoaWxlICgoKHJlYWRsKGlvYWRkciArIG1paV9hZGRyZXNzKSkgJiBNSUlfQlVTWSkgPT0gMSk7CisKKwkvKiBTZXQgdGhlIE1JSSBhZGRyZXNzIHJlZ2lzdGVyIHRvIHdyaXRlICovCisJd3JpdGVsKHBoeWRhdGEsIGlvYWRkciArIG1paV9kYXRhKTsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIG1paV9hZGRyZXNzKTsKKworCS8qIFdhaXQgdW50aWwgYW55IGV4aXN0aW5nIE1JSSBvcGVyYXRpb24gaXMgY29tcGxldGUgKi8KKwlkbyB7fSB3aGlsZSAoKChyZWFkbChpb2FkZHIgKyBtaWlfYWRkcmVzcykpICYgTUlJX0JVU1kpID09IDEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc3RtbWFjX21kaW9fcmVzZXQKKyAqIEBidXM6IHBvaW50cyB0byB0aGUgbWlpX2J1cyBzdHJ1Y3R1cmUKKyAqIERlc2NyaXB0aW9uOiByZXNldCB0aGUgTUlJIGJ1cworICovCitzdGF0aWMgaW50IHN0bW1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBidXMtPnByaXY7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBuZGV2LT5iYXNlX2FkZHI7CisJdW5zaWduZWQgaW50IG1paV9hZGRyZXNzID0gcHJpdi0+bWFjX3R5cGUtPmh3Lm1paS5hZGRyOworCisJaWYgKHByaXYtPnBoeV9yZXNldCkgeworCQlwcl9kZWJ1Zygic3RtbWFjX21kaW9fcmVzZXQ6IGNhbGxpbmcgcGh5X3Jlc2V0XG4iKTsKKwkJcHJpdi0+cGh5X3Jlc2V0KHByaXYtPmJzcF9wcml2KTsKKwl9CisKKwkvKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgcHJvYmxlbXMgd2l0aCB0aGUgU1RFMTAxUCBQSFkuCisJICogSXQgZG9lc24ndCBjb21wbGV0ZSBpdHMgcmVzZXQgdW50aWwgYXQgbGVhc3Qgb25lIGNsb2NrIGN5Y2xlCisJICogb24gTURDLCBzbyBwZXJmb3JtIGEgZHVtbXkgbWRpbyByZWFkLgorCSAqLworCXdyaXRlbCgwLCBpb2FkZHIgKyBtaWlfYWRkcmVzcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzdG1tYWNfbWRpb19yZWdpc3RlcgorICogQG5kZXY6IG5ldCBkZXZpY2Ugc3RydWN0dXJlCisgKiBEZXNjcmlwdGlvbjogaXQgcmVnaXN0ZXJzIHRoZSBNSUkgYnVzCisgKi8KK2ludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKKwlpbnQgKmlycWxpc3Q7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJaW50IGFkZHIsIGZvdW5kOworCisJbmV3X2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKKwlpZiAobmV3X2J1cyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlycWxpc3QgPSBremFsbG9jKHNpemVvZihpbnQpICogUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKKwlpZiAoaXJxbGlzdCA9PSBOVUxMKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gaXJxbGlzdF9hbGxvY19mYWlsOworCX0KKworCS8qIEFzc2lnbiBJUlEgdG8gcGh5IGF0IGFkZHJlc3MgcGh5X2FkZHIgKi8KKwlpZiAocHJpdi0+cGh5X2FkZHIgIT0gLTEpCisJCWlycWxpc3RbcHJpdi0+cGh5X2FkZHJdID0gcHJpdi0+cGh5X2lycTsKKworCW5ld19idXMtPm5hbWUgPSAiU1RNTUFDIE1JSSBCdXMiOworCW5ld19idXMtPnJlYWQgPSAmc3RtbWFjX21kaW9fcmVhZDsKKwluZXdfYnVzLT53cml0ZSA9ICZzdG1tYWNfbWRpb193cml0ZTsKKwluZXdfYnVzLT5yZXNldCA9ICZzdG1tYWNfbWRpb19yZXNldDsKKwlzbnByaW50ZihuZXdfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCBwcml2LT5idXNfaWQpOworCW5ld19idXMtPnByaXYgPSBuZGV2OworCW5ld19idXMtPmlycSA9IGlycWxpc3Q7CisJbmV3X2J1cy0+cGh5X21hc2sgPSBwcml2LT5waHlfbWFzazsKKwluZXdfYnVzLT5wYXJlbnQgPSBwcml2LT5kZXZpY2U7CisJZXJyID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKKwlpZiAoZXJyICE9IDApIHsKKwkJcHJfZXJyKCIlczogQ2Fubm90IHJlZ2lzdGVyIGFzIE1ESU8gYnVzXG4iLCBuZXdfYnVzLT5uYW1lKTsKKwkJZ290byBidXNfcmVnaXN0ZXJfZmFpbDsKKwl9CisKKwlwcml2LT5taWkgPSBuZXdfYnVzOworCisJZm91bmQgPSAwOworCWZvciAoYWRkciA9IDA7IGFkZHIgPCAzMjsgYWRkcisrKSB7CisJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBuZXdfYnVzLT5waHlfbWFwW2FkZHJdOworCQlpZiAocGh5ZGV2KSB7CisJCQlpZiAocHJpdi0+cGh5X2FkZHIgPT0gLTEpIHsKKwkJCQlwcml2LT5waHlfYWRkciA9IGFkZHI7CisJCQkJcGh5ZGV2LT5pcnEgPSBwcml2LT5waHlfaXJxOworCQkJCWlycWxpc3RbYWRkcl0gPSBwcml2LT5waHlfaXJxOworCQkJfQorCQkJcHJfaW5mbygiJXM6IFBIWSBJRCAlMDh4IGF0ICVkIElSUSAlZCAoJXMpJXNcbiIsCisJCQkgICAgICAgbmRldi0+bmFtZSwgcGh5ZGV2LT5waHlfaWQsIGFkZHIsCisJCQkgICAgICAgcGh5ZGV2LT5pcnEsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCisJCQkgICAgICAgKGFkZHIgPT0gcHJpdi0+cGh5X2FkZHIpID8gIiBhY3RpdmUiIDogIiIpOworCQkJZm91bmQgPSAxOworCQl9CisJfQorCisJaWYgKCFmb3VuZCkKKwkJcHJfd2FybmluZygiJXM6IE5vIFBIWSBmb3VuZFxuIiwgbmRldi0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK2J1c19yZWdpc3Rlcl9mYWlsOgorCWtmcmVlKGlycWxpc3QpOworaXJxbGlzdF9hbGxvY19mYWlsOgorCWtmcmVlKG5ld19idXMpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogc3RtbWFjX21kaW9fdW5yZWdpc3RlcgorICogQG5kZXY6IG5ldCBkZXZpY2Ugc3RydWN0dXJlCisgKiBEZXNjcmlwdGlvbjogaXQgdW5yZWdpc3RlcnMgdGhlIE1JSSBidXMKKyAqLworaW50IHN0bW1hY19tZGlvX3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwltZGlvYnVzX3VucmVnaXN0ZXIocHJpdi0+bWlpKTsKKwlwcml2LT5taWktPnByaXYgPSBOVUxMOworCWtmcmVlKHByaXYtPm1paSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODM4YzY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5jCkBAIC0wLDAgKzEsMTQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBTVE1NQUMgZXh0ZXJuYWwgdGltZXIgc3VwcG9ydC4KKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSAic3RtbWFjX3RpbWVyLmgiCisKK3N0YXRpYyB2b2lkIHN0bW1hY190aW1lcl9oYW5kbGVyKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CisKKwlzdG1tYWNfc2NoZWR1bGUoZGV2KTsKKworCXJldHVybjsKK30KKworI2RlZmluZSBTVE1NQUNfVElNRVJfTVNHKHRpbWVyLCBmcmVxKSBcCitwcmludGsoS0VSTl9JTkZPICJzdG1tYWNfdGltZXI6ICVzIFRpbWVyIE9OIChmcmVxICVkSHopXG4iLCB0aW1lciwgZnJlcSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TVE1NQUNfUlRDX1RJTUVSKQorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorc3RhdGljIHN0cnVjdCBydGNfZGV2aWNlICpzdG1tYWNfcnRjOworc3RhdGljIHJ0Y190YXNrX3Qgc3RtbWFjX3Rhc2s7CisKK3N0YXRpYyB2b2lkIHN0bW1hY19ydGNfc3RhcnQodW5zaWduZWQgaW50IG5ld19mcmVxKQoreworCXJ0Y19pcnFfc2V0X2ZyZXEoc3RtbWFjX3J0YywgJnN0bW1hY190YXNrLCBuZXdfZnJlcSk7CisJcnRjX2lycV9zZXRfc3RhdGUoc3RtbWFjX3J0YywgJnN0bW1hY190YXNrLCAxKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHN0bW1hY19ydGNfc3RvcCh2b2lkKQoreworCXJ0Y19pcnFfc2V0X3N0YXRlKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzaywgMCk7CisJcmV0dXJuOworfQorCitpbnQgc3RtbWFjX29wZW5fZXh0X3RpbWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBzdG1tYWNfdGltZXIgKnRtKQoreworCXN0bW1hY190YXNrLnByaXZhdGVfZGF0YSA9IGRldjsKKwlzdG1tYWNfdGFzay5mdW5jID0gc3RtbWFjX3RpbWVyX2hhbmRsZXI7CisKKwlzdG1tYWNfcnRjID0gcnRjX2NsYXNzX29wZW4oQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRSk7CisJaWYgKHN0bW1hY19ydGMgPT0gTlVMTCkgeworCQlwcl9lcnJvcigib3BlbiBydGMgZGV2aWNlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJ0Y19pcnFfcmVnaXN0ZXIoc3RtbWFjX3J0YywgJnN0bW1hY190YXNrKTsKKworCS8qIFBlcmlvZGljIG1vZGUgaXMgbm90IHN1cHBvcnRlZCAqLworCWlmICgocnRjX2lycV9zZXRfZnJlcShzdG1tYWNfcnRjLCAmc3RtbWFjX3Rhc2ssIHRtLT5mcmVxKSA8IDApKSB7CisJCXByX2Vycm9yKCJzZXQgcGVyaW9kaWMgZmFpbGVkXG4iKTsKKwkJcnRjX2lycV91bnJlZ2lzdGVyKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzayk7CisJCXJ0Y19jbGFzc19jbG9zZShzdG1tYWNfcnRjKTsKKwkJcmV0dXJuIC0xOworCX0KKworCVNUTU1BQ19USU1FUl9NU0coQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRSwgdG0tPmZyZXEpOworCisJdG0tPnRpbWVyX3N0YXJ0ID0gc3RtbWFjX3J0Y19zdGFydDsKKwl0bS0+dGltZXJfc3RvcCA9IHN0bW1hY19ydGNfc3RvcDsKKworCXJldHVybiAwOworfQorCitpbnQgc3RtbWFjX2Nsb3NlX2V4dF90aW1lcih2b2lkKQoreworCXJ0Y19pcnFfc2V0X3N0YXRlKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzaywgMCk7CisJcnRjX2lycV91bnJlZ2lzdGVyKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzayk7CisJcnRjX2NsYXNzX2Nsb3NlKHN0bW1hY19ydGMpOworCXJldHVybiAwOworfQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19TVE1NQUNfVE1VX1RJTUVSKQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2RlZmluZSBUTVVfQ0hBTk5FTCAidG11Ml9jbGsiCitzdGF0aWMgc3RydWN0IGNsayAqdGltZXJfY2xvY2s7CisKK3N0YXRpYyB2b2lkIHN0bW1hY190bXVfc3RhcnQodW5zaWduZWQgaW50IG5ld19mcmVxKQoreworCWNsa19zZXRfcmF0ZSh0aW1lcl9jbG9jaywgbmV3X2ZyZXEpOworCWNsa19lbmFibGUodGltZXJfY2xvY2spOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc3RtbWFjX3RtdV9zdG9wKHZvaWQpCit7CisJY2xrX2Rpc2FibGUodGltZXJfY2xvY2spOworCXJldHVybjsKK30KKworaW50IHN0bW1hY19vcGVuX2V4dF90aW1lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc3RtbWFjX3RpbWVyICp0bSkKK3sKKwl0aW1lcl9jbG9jayA9IGNsa19nZXQoTlVMTCwgVE1VX0NIQU5ORUwpOworCisJaWYgKHRpbWVyX2Nsb2NrID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmICh0bXUyX3JlZ2lzdGVyX3VzZXIoc3RtbWFjX3RpbWVyX2hhbmRsZXIsICh2b2lkICopZGV2KSA8IDApIHsKKwkJdGltZXJfY2xvY2sgPSBOVUxMOworCQlyZXR1cm4gLTE7CisJfQorCisJU1RNTUFDX1RJTUVSX01TRygiVE1VMiIsIHRtLT5mcmVxKTsKKwl0bS0+dGltZXJfc3RhcnQgPSBzdG1tYWNfdG11X3N0YXJ0OworCXRtLT50aW1lcl9zdG9wID0gc3RtbWFjX3RtdV9zdG9wOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzdG1tYWNfY2xvc2VfZXh0X3RpbWVyKHZvaWQpCit7CisJY2xrX2Rpc2FibGUodGltZXJfY2xvY2spOworCXRtdTJfdW5yZWdpc3Rlcl91c2VyKCk7CisJY2xrX3B1dCh0aW1lcl9jbG9jayk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzk1Y2FlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFNUTU1BQyBleHRlcm5hbCB0aW1lciBIZWFkZXIgRmlsZS4KKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHN0bW1hY190aW1lciB7CisJdm9pZCAoKnRpbWVyX3N0YXJ0KSAodW5zaWduZWQgaW50IG5ld19mcmVxKTsKKwl2b2lkICgqdGltZXJfc3RvcCkgKHZvaWQpOworCXVuc2lnbmVkIGludCBmcmVxOworfTsKKworLyogT3BlbiB0aGUgSFcgdGltZXIgZGV2aWNlIGFuZCByZXR1cm4gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MgKi8KK2ludCBzdG1tYWNfb3Blbl9leHRfdGltZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHN0bW1hY190aW1lciAqdG0pOworLyogU3RvcCB0aGUgdGltZXIgYW5kIHJlbGVhc2UgaXQgKi8KK2ludCBzdG1tYWNfY2xvc2VfZXh0X3RpbWVyKHZvaWQpOworLyogRnVuY3Rpb24gdXNlZCBmb3Igc2NoZWR1bGluZyB0YXNrIHdpdGhpbiB0aGUgc3RtbWFjICovCit2b2lkIHN0bW1hY19zY2hlZHVsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NUTU1BQ19UTVVfVElNRVIpCitleHRlcm4gaW50IHRtdTJfcmVnaXN0ZXJfdXNlcih2b2lkICpmbnQsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgdG11Ml91bnJlZ2lzdGVyX3VzZXIodm9pZCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwppbmRleCA3MjQ3MGY3Li5hMmIzMGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCkBAIC02NDksNiArNjQ5LDEwIEBACiAJVVNCX0RFVklDRSgweDBmZTYsIDB4ODEwMSksCS8qIERNOTYwMSBVU0IgdG8gRmFzdCBFdGhlcm5ldCBBZGFwdGVyICovCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmRtOTYwMV9pbmZvLAogCSB9LAorCXsKKwkgVVNCX0RFVklDRSgweDBhNDYsIDB4OTAwMCksCS8qIERNOTAwMEUgKi8KKwkgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmRtOTYwMV9pbmZvLAorCSB9LAogCXt9LAkJCS8vIEVORAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKaW5kZXggNmZkYWJhOC4uZWQ0YTUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYworKysgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCkBAIC02Miw4ICs2MiwxMSBAQAogc3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiB1c2JfZGV2X2lkW10gPSB7CiAjZGVmaW5lCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpCVwKIAl7Lm5hbWUgPSBwbiwgLnZlbmRvciA9IHZpZCwgLmRldmljZSA9IHBpZCwgLnByaXZhdGUgPSBmbGFnc30sCisjZGVmaW5lIFBFR0FTVVNfREVWX0NMQVNTKHBuLCB2aWQsIHBpZCwgZGNsYXNzLCBmbGFncykgXAorCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpCiAjaW5jbHVkZSAicGVnYXN1cy5oIgogI3VuZGVmCVBFR0FTVVNfREVWCisjdW5kZWYJUEVHQVNVU19ERVZfQ0xBU1MKIAl7TlVMTCwgMCwgMCwgMH0sCiAJe05VTEwsIDAsIDAsIDB9CiB9OwpAQCAtNzEsOCArNzQsMTggQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwZWdhc3VzX2lkc1tdID0gewogI2RlZmluZQlQRUdBU1VTX0RFVihwbiwgdmlkLCBwaWQsIGZsYWdzKSBcCiAJey5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLCAuaWRWZW5kb3IgPSB2aWQsIC5pZFByb2R1Y3QgPSBwaWR9LAorLyoKKyAqIFRoZSBCZWxraW4gRjhUMDEyeHgxIGJsdWV0b290aCBhZGFwdG9yIGhhcyB0aGUgc2FtZSB2ZW5kb3IgYW5kIHByb2R1Y3QKKyAqIElEcyBhcyB0aGUgQmVsa2luIEY1RDUwNTAsIHNvIHdlIG5lZWQgdG8gdGVhY2ggdGhlIHBlZ2FzdXMgZHJpdmVyIHRvCisgKiBpZ25vcmUgYWRhcHRvcnMgYmVsb25naW5nIHRvIHRoZSAiV2lyZWxlc3MiIGNsYXNzIDB4RTAuIEZvciB0aGlzIG9uZQorICogY2FzZSBhbnl3YXksIHNlZWluZyBhcyB0aGUgcGVnYXN1cyBpcyBmb3IgIldpcmVkIiBhZGFwdG9ycy4KKyAqLworI2RlZmluZSBQRUdBU1VTX0RFVl9DTEFTUyhwbiwgdmlkLCBwaWQsIGRjbGFzcywgZmxhZ3MpIFwKKwl7Lm1hdGNoX2ZsYWdzID0gKFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MpLCBcCisJLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkLCAuYkRldmljZUNsYXNzID0gZGNsYXNzfSwKICNpbmNsdWRlICJwZWdhc3VzLmgiCiAjdW5kZWYJUEVHQVNVU19ERVYKKyN1bmRlZglQRUdBU1VTX0RFVl9DTEFTUwogCXt9LAogCXt9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaCBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmgKaW5kZXggZjk2OGM4My4uNWQwMmYwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaAorKysgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oCkBAIC0yMDIsNyArMjAyLDExIEBACiAJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQogUEVHQVNVU19ERVYoICJBbGxpZWQgVGVsZXN5biBJbnQuIEFULVVTQjEwMCIsIFZFTkRPUl9BTExJRURURUwsIDB4YjEwMCwKIAkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCi1QRUdBU1VTX0RFViggIkJlbGtpbiBGNUQ1MDUwIFVTQiBFdGhlcm5ldCIsIFZFTkRPUl9CRUxLSU4sIDB4MDEyMSwKKy8qCisgKiBEaXN0aW5ndWlzaCBiZXR3ZWVuIHRoaXMgQmVsa2luIGFkYXB0b3IgYW5kIHRoZSBCZWxraW4gYmx1ZXRvb3RoIGFkYXB0b3JzCisgKiB3aXRoIHRoZSBzYW1lIHByb2R1Y3QgSURzIGJ5IGNoZWNraW5nIHRoZSBkZXZpY2UgY2xhc3MgdG9vLgorICovCitQRUdBU1VTX0RFVl9DTEFTUyggIkJlbGtpbiBGNUQ1MDUwIFVTQiBFdGhlcm5ldCIsIFZFTkRPUl9CRUxLSU4sIDB4MDEyMSwgMHgwMCwKIAkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCiBQRUdBU1VTX0RFViggIkJpbGxpb250b24gVVNCLTEwMCIsIFZFTkRPUl9CSUxMSU9OVE9OLCAweDA5ODYsCiAJCURFRkFVTFRfR1BJT19SRVNFVCApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwppbmRleCAwY2FhODAwLi5mNTZkZWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKQEAgLTM2MiwxMiArMzYyLDEyIEBACiAJCQlyZXR2YWwgPSAtRUlOVkFMOwogCQkJZ290byBoYWx0X2ZhaWxfYW5kX3JlbGVhc2U7CiAJCX0KLQkJZGV2LT5oYXJkX210dSA9IHRtcDsKLQkJbmV0LT5tdHUgPSBkZXYtPmhhcmRfbXR1IC0gbmV0LT5oYXJkX2hlYWRlcl9sZW47CiAJCWRldl93YXJuKCZpbnRmLT5kZXYsCiAJCQkgImRldiBjYW4ndCB0YWtlICV1IGJ5dGUgcGFja2V0cyAobWF4ICV1KSwgIgogCQkJICJhZGp1c3RpbmcgTVRVIHRvICV1XG4iLAotCQkJIGRldi0+aGFyZF9tdHUsIHRtcCwgbmV0LT5tdHUpOworCQkJIGRldi0+aGFyZF9tdHUsIHRtcCwgdG1wIC0gbmV0LT5oYXJkX2hlYWRlcl9sZW4pOworCQlkZXYtPmhhcmRfbXR1ID0gdG1wOworCQluZXQtPm10dSA9IGRldi0+aGFyZF9tdHUgLSBuZXQtPmhhcmRfaGVhZGVyX2xlbjsKIAl9CiAKIAkvKiBSRVZJU0lUOiAgcGVyaXBoZXJhbCAiYWxpZ25tZW50IiByZXF1ZXN0IGlzIGlnbm9yZWQgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggOGQwMDk3Ni4uMDU2MzBmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgpAQCAtNDU0LDcgKzQ1Myw3IEBACiAJCXZpLT5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQl2aS0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCXRvdF9zZ3MgKz0gc2tiX3ZuZXRfaGRyKHNrYiktPm51bV9zZzsKLQkJa2ZyZWVfc2tiKHNrYik7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJfQogCXJldHVybiB0b3Rfc2dzOwogfQpAQCAtNTE3LDggKzUxNiw3IEBACiAJLyogRnJlZSB1cCBhbnkgcGVuZGluZyBvbGQgYnVmZmVycyBiZWZvcmUgcXVldWVpbmcgbmV3IG9uZXMuICovCiAJZnJlZV9vbGRfeG1pdF9za2JzKHZpKTsKIAotCS8qIFB1dCBuZXcgb25lIGluIHNlbmQgcXVldWUgYW5kIGRvIHRyYW5zbWl0ICovCi0JX19za2JfcXVldWVfaGVhZCgmdmktPnNlbmQsIHNrYik7CisJLyogVHJ5IHRvIHRyYW5zbWl0ICovCiAJY2FwYWNpdHkgPSB4bWl0X3NrYih2aSwgc2tiKTsKIAogCS8qIFRoaXMgY2FuIGhhcHBlbiB3aXRoIE9PTSBhbmQgaW5kaXJlY3QgYnVmZmVycy4gKi8KQEAgLTUzMiw4ICs1MzAsMTcgQEAKIAkJfQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQotCiAJdmktPnN2cS0+dnFfb3BzLT5raWNrKHZpLT5zdnEpOworCisJLyoKKwkgKiBQdXQgbmV3IG9uZSBpbiBzZW5kIHF1ZXVlLiAgWW91J2QgZXhwZWN0IHdlJ2QgbmVlZCB0aGlzIGJlZm9yZQorCSAqIHhtaXRfc2tiIGNhbGxzIGFkZF9idWYoKSwgc2luY2UgdGhlIGNhbGxiYWNrIGNhbiBiZSB0cmlnZ2VyZWQKKwkgKiBpbW1lZGlhdGVseSBhZnRlciB0aGF0LiAgQnV0IHNpbmNlIHRoZSBjYWxsYmFjayBqdXN0IHRyaWdnZXJzCisJICogYW5vdGhlciBjYWxsIGJhY2sgaGVyZSwgbm9ybWFsIG5ldHdvcmsgeG1pdCBsb2NraW5nIHByZXZlbnRzIHRoZQorCSAqIHJhY2UuCisJICovCisJX19za2JfcXVldWVfaGVhZCgmdmktPnNlbmQsIHNrYik7CisKIAkvKiBEb24ndCB3YWl0IHVwIGZvciB0cmFuc21pdHRlZCBza2JzIHRvIGJlIGZyZWVkLiAqLwogCXNrYl9vcnBoYW4oc2tiKTsKIAluZl9yZXNldChza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwZjUwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvTWFrZWZpbGUKQEAgLTAsMCArMSwzNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgTGludXggZHJpdmVyIGZvciBWTXdhcmUncyB2bXhuZXQzIGV0aGVybmV0IE5JQy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDksIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UgYW5kIG5vIGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyMgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyMgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorIyB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorIworIyBNYWludGFpbmVkIGJ5OiBTaHJleWFzIEJoYXRld2FyYSA8cHYtZHJpdmVyc0B2bXdhcmUuY29tPgorIworIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBNYWtlZmlsZSBmb3IgdGhlIFZNd2FyZSB2bXhuZXQzIGV0aGVybmV0IE5JQyBkcml2ZXIKKyMKKworb2JqLSQoQ09ORklHX1ZNWE5FVDMpICs9IHZteG5ldDMubworCit2bXhuZXQzLW9ianMgOj0gdm14bmV0M19kcnYubyB2bXhuZXQzX2V0aHRvb2wubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My91cHQxX2RlZnMuaCBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdXB0MV9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxMDhmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdXB0MV9kZWZzLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgVk13YXJlJ3Mgdm14bmV0MyBldGhlcm5ldCBOSUMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlIGFuZCBubyBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAqIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICogTWFpbnRhaW5lZCBieTogU2hyZXlhcyBCaGF0ZXdhcmEgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfVVBUMV9ERUZTX0gKKyNkZWZpbmUgX1VQVDFfREVGU19ICisKK3N0cnVjdCBVUFQxX1R4U3RhdHMgeworCXU2NAkJCVRTT1BrdHNUeE9LOyAgLyogVFNPIHBrdHMgcG9zdC1zZWdtZW50YXRpb24gKi8KKwl1NjQJCQlUU09CeXRlc1R4T0s7CisJdTY0CQkJdWNhc3RQa3RzVHhPSzsKKwl1NjQJCQl1Y2FzdEJ5dGVzVHhPSzsKKwl1NjQJCQltY2FzdFBrdHNUeE9LOworCXU2NAkJCW1jYXN0Qnl0ZXNUeE9LOworCXU2NAkJCWJjYXN0UGt0c1R4T0s7CisJdTY0CQkJYmNhc3RCeXRlc1R4T0s7CisJdTY0CQkJcGt0c1R4RXJyb3I7CisJdTY0CQkJcGt0c1R4RGlzY2FyZDsKK307CisKK3N0cnVjdCBVUFQxX1J4U3RhdHMgeworCXU2NAkJCUxST1BrdHNSeE9LOyAgICAvKiBMUk8gcGt0cyAqLworCXU2NAkJCUxST0J5dGVzUnhPSzsgICAvKiBieXRlcyBmcm9tIExSTyBwa3RzICovCisJLyogdGhlIGZvbGxvd2luZyBjb3VudGVycyBhcmUgZm9yIHBrdHMgZnJvbSB0aGUgd2lyZSwgaS5lLiwgcHJlLUxSTyAqLworCXU2NAkJCXVjYXN0UGt0c1J4T0s7CisJdTY0CQkJdWNhc3RCeXRlc1J4T0s7CisJdTY0CQkJbWNhc3RQa3RzUnhPSzsKKwl1NjQJCQltY2FzdEJ5dGVzUnhPSzsKKwl1NjQJCQliY2FzdFBrdHNSeE9LOworCXU2NAkJCWJjYXN0Qnl0ZXNSeE9LOworCXU2NAkJCXBrdHNSeE91dE9mQnVmOworCXU2NAkJCXBrdHNSeEVycm9yOworfTsKKworLyogaW50ZXJydXB0IG1vZGVyYXRpb24gbGV2ZWwgKi8KK2VudW0geworCVVQVDFfSU1MX05PTkUJCT0gMCwgLyogbm8gaW50ZXJydXB0IG1vZGVyYXRpb24gKi8KKwlVUFQxX0lNTF9ISUdIRVNUCT0gNywgLyogbGVhc3QgaW50ciBnZW5lcmF0ZWQgKi8KKwlVUFQxX0lNTF9BREFQVElWRQk9IDgsIC8qIGFkcGF0aXZlIGludHIgbW9kZXJhdGlvbiAqLworfTsKKy8qIHZhbHVlcyBmb3IgVVBUMV9SU1NDb25mLmhhc2hGdW5jICovCitlbnVtIHsKKwlVUFQxX1JTU19IQVNIX1RZUEVfTk9ORSAgICAgID0gMHgwLAorCVVQVDFfUlNTX0hBU0hfVFlQRV9JUFY0ICAgICAgPSAweDAxLAorCVVQVDFfUlNTX0hBU0hfVFlQRV9UQ1BfSVBWNCAgPSAweDAyLAorCVVQVDFfUlNTX0hBU0hfVFlQRV9JUFY2ICAgICAgPSAweDA0LAorCVVQVDFfUlNTX0hBU0hfVFlQRV9UQ1BfSVBWNiAgPSAweDA4LAorfTsKKworZW51bSB7CisJVVBUMV9SU1NfSEFTSF9GVU5DX05PTkUgICAgICA9IDB4MCwKKwlVUFQxX1JTU19IQVNIX0ZVTkNfVE9FUExJVFogID0gMHgwMSwKK307CisKKyNkZWZpbmUgVVBUMV9SU1NfTUFYX0tFWV9TSVpFICAgICAgICA0MAorI2RlZmluZSBVUFQxX1JTU19NQVhfSU5EX1RBQkxFX1NJWkUgIDEyOAorCitzdHJ1Y3QgVVBUMV9SU1NDb25mIHsKKwl1MTYJCQloYXNoVHlwZTsKKwl1MTYJCQloYXNoRnVuYzsKKwl1MTYJCQloYXNoS2V5U2l6ZTsKKwl1MTYJCQlpbmRUYWJsZVNpemU7CisJdTgJCQloYXNoS2V5W1VQVDFfUlNTX01BWF9LRVlfU0laRV07CisJdTgJCQlpbmRUYWJsZVtVUFQxX1JTU19NQVhfSU5EX1RBQkxFX1NJWkVdOworfTsKKworLyogZmVhdHVyZXMgKi8KK2VudW0geworCVVQVDFfRl9SWENTVU0JCT0gMHgwMDAxLCAgIC8qIHJ4IGNzdW0gdmVyaWZpY2F0aW9uICovCisJVVBUMV9GX1JTUwkJPSAweDAwMDIsCisJVVBUMV9GX1JYVkxBTgkJPSAweDAwMDQsICAgLyogVkxBTiB0YWcgc3RyaXBwaW5nICovCisJVVBUMV9GX0xSTwkJPSAweDAwMDgsCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZGVmcy5oIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzhlZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2RlZnMuaApAQCAtMCwwICsxLDUzNSBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgVk13YXJlJ3Mgdm14bmV0MyBldGhlcm5ldCBOSUMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlIGFuZCBubyBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAqIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICogTWFpbnRhaW5lZCBieTogU2hyZXlhcyBCaGF0ZXdhcmEgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfVk1YTkVUM19ERUZTX0hfCisjZGVmaW5lIF9WTVhORVQzX0RFRlNfSF8KKworI2luY2x1ZGUgInVwdDFfZGVmcy5oIgorCisvKiBhbGwgcmVnaXN0ZXJzIGFyZSAzMiBiaXQgd2lkZSAqLworLyogQkFSIDEgKi8KK2VudW0geworCVZNWE5FVDNfUkVHX1ZSUlMJPSAweDAsCS8qIFZteG5ldDMgUmV2aXNpb24gUmVwb3J0IFNlbGVjdGlvbiAqLworCVZNWE5FVDNfUkVHX1VWUlMJPSAweDgsCS8qIFVQVCBWZXJzaW9uIFJlcG9ydCBTZWxlY3Rpb24gKi8KKwlWTVhORVQzX1JFR19EU0FMCT0gMHgxMCwJLyogRHJpdmVyIFNoYXJlZCBBZGRyZXNzIExvdyAqLworCVZNWE5FVDNfUkVHX0RTQUgJPSAweDE4LAkvKiBEcml2ZXIgU2hhcmVkIEFkZHJlc3MgSGlnaCAqLworCVZNWE5FVDNfUkVHX0NNRAkJPSAweDIwLAkvKiBDb21tYW5kICovCisJVk1YTkVUM19SRUdfTUFDTAk9IDB4MjgsCS8qIE1BQyBBZGRyZXNzIExvdyAqLworCVZNWE5FVDNfUkVHX01BQ0gJPSAweDMwLAkvKiBNQUMgQWRkcmVzcyBIaWdoICovCisJVk1YTkVUM19SRUdfSUNSCQk9IDB4MzgsCS8qIEludGVycnVwdCBDYXVzZSBSZWdpc3RlciAqLworCVZNWE5FVDNfUkVHX0VDUgkJPSAweDQwCS8qIEV2ZW50IENhdXNlIFJlZ2lzdGVyICovCit9OworCisvKiBCQVIgMCAqLworZW51bSB7CisJVk1YTkVUM19SRUdfSU1SCQk9IDB4MCwJIC8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisJVk1YTkVUM19SRUdfVFhQUk9ECT0gMHg2MDAsIC8qIFR4IFByb2R1Y2VyIEluZGV4ICovCisJVk1YTkVUM19SRUdfUlhQUk9ECT0gMHg4MDAsIC8qIFJ4IFByb2R1Y2VyIEluZGV4IGZvciByaW5nIDEgKi8KKwlWTVhORVQzX1JFR19SWFBST0QyCT0gMHhBMDAJIC8qIFJ4IFByb2R1Y2VyIEluZGV4IGZvciByaW5nIDIgKi8KK307CisKKyNkZWZpbmUgVk1YTkVUM19QVF9SRUdfU0laRSAgICAgNDA5NgkvKiBCQVIgMCAqLworI2RlZmluZSBWTVhORVQzX1ZEX1JFR19TSVpFICAgICA0MDk2CS8qIEJBUiAxICovCisKKyNkZWZpbmUgVk1YTkVUM19SRUdfQUxJR04gICAgICAgOAkvKiBBbGwgcmVnaXN0ZXJzIGFyZSA4LWJ5dGUgYWxpZ25lZC4gKi8KKyNkZWZpbmUgVk1YTkVUM19SRUdfQUxJR05fTUFTSyAgMHg3CisKKy8qIEkvTyBNYXBwZWQgYWNjZXNzIHRvIHJlZ2lzdGVycyAqLworI2RlZmluZSBWTVhORVQzX0lPX1RZUEVfUFQgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVk1YTkVUM19JT19UWVBFX1ZEICAgICAgICAgICAgICAxCisjZGVmaW5lIFZNWE5FVDNfSU9fQUREUih0eXBlLCByZWcpICAgICAgKCgodHlwZSkgPDwgMjQpIHwgKChyZWcpICYgMHhGRkZGRkYpKQorI2RlZmluZSBWTVhORVQzX0lPX1RZUEUoYWRkcikgICAgICAgICAgICgoYWRkcikgPj4gMjQpCisjZGVmaW5lIFZNWE5FVDNfSU9fUkVHKGFkZHIpICAgICAgICAgICAgKChhZGRyKSAmIDB4RkZGRkZGKQorCitlbnVtIHsKKwlWTVhORVQzX0NNRF9GSVJTVF9TRVQgPSAweENBRkUwMDAwLAorCVZNWE5FVDNfQ01EX0FDVElWQVRFX0RFViA9IFZNWE5FVDNfQ01EX0ZJUlNUX1NFVCwKKwlWTVhORVQzX0NNRF9RVUlFU0NFX0RFViwKKwlWTVhORVQzX0NNRF9SRVNFVF9ERVYsCisJVk1YTkVUM19DTURfVVBEQVRFX1JYX01PREUsCisJVk1YTkVUM19DTURfVVBEQVRFX01BQ19GSUxURVJTLAorCVZNWE5FVDNfQ01EX1VQREFURV9WTEFOX0ZJTFRFUlMsCisJVk1YTkVUM19DTURfVVBEQVRFX1JTU0lEVCwKKwlWTVhORVQzX0NNRF9VUERBVEVfSU1MLAorCVZNWE5FVDNfQ01EX1VQREFURV9QTUNGRywKKwlWTVhORVQzX0NNRF9VUERBVEVfRkVBVFVSRSwKKwlWTVhORVQzX0NNRF9MT0FEX1BMVUdJTiwKKworCVZNWE5FVDNfQ01EX0ZJUlNUX0dFVCA9IDB4RjAwRDAwMDAsCisJVk1YTkVUM19DTURfR0VUX1FVRVVFX1NUQVRVUyA9IFZNWE5FVDNfQ01EX0ZJUlNUX0dFVCwKKwlWTVhORVQzX0NNRF9HRVRfU1RBVFMsCisJVk1YTkVUM19DTURfR0VUX0xJTkssCisJVk1YTkVUM19DTURfR0VUX1BFUk1fTUFDX0xPLAorCVZNWE5FVDNfQ01EX0dFVF9QRVJNX01BQ19ISSwKKwlWTVhORVQzX0NNRF9HRVRfRElEX0xPLAorCVZNWE5FVDNfQ01EX0dFVF9ESURfSEksCisJVk1YTkVUM19DTURfR0VUX0RFVl9FWFRSQV9JTkZPLAorCVZNWE5FVDNfQ01EX0dFVF9DT05GX0lOVFIKK307CisKK3N0cnVjdCBWbXhuZXQzX1R4RGVzYyB7CisJdTY0CQlhZGRyOworCisJdTMyCQlsZW46MTQ7CisJdTMyCQlnZW46MTsgICAgICAvKiBnZW5lcmF0aW9uIGJpdCAqLworCXUzMgkJcnN2ZDoxOworCXUzMgkJZHR5cGU6MTsgICAgLyogZGVzY3JpcHRvciB0eXBlICovCisJdTMyCQlleHQxOjE7CisJdTMyCQltc3Njb2Y6MTQ7ICAvKiBNU1MsIGNoZWNrc3VtIG9mZnNldCwgZmxhZ3MgKi8KKworCXUzMgkJaGxlbjoxMDsgICAgLyogaGVhZGVyIGxlbiAqLworCXUzMgkJb206MjsgICAgICAgLyogb2ZmbG9hZCBtb2RlICovCisJdTMyCQllb3A6MTsgICAgICAvKiBFbmQgT2YgUGFja2V0ICovCisJdTMyCQljcToxOyAgICAgICAvKiBjb21wbGV0aW9uIHJlcXVlc3QgKi8KKwl1MzIJCWV4dDI6MTsKKwl1MzIJCXRpOjE7ICAgICAgIC8qIFZMQU4gVGFnIEluc2VydGlvbiAqLworCXUzMgkJdGNpOjE2OyAgICAgLyogVGFnIHRvIEluc2VydCAqLworfTsKKworLyogVHhEZXNjLk9NIHZhbHVlcyAqLworI2RlZmluZSBWTVhORVQzX09NX05PTkUJCTAKKyNkZWZpbmUgVk1YTkVUM19PTV9DU1VNCQkyCisjZGVmaW5lIFZNWE5FVDNfT01fVFNPCQkzCisKKy8qIGZpZWxkcyBpbiBUeERlc2Mgd2UgYWNjZXNzIHcvbyB1c2luZyBiaXQgZmllbGRzICovCisjZGVmaW5lIFZNWE5FVDNfVFhEX0VPUF9TSElGVAkxMgorI2RlZmluZSBWTVhORVQzX1RYRF9DUV9TSElGVAkxMworI2RlZmluZSBWTVhORVQzX1RYRF9HRU5fU0hJRlQJMTQKKworI2RlZmluZSBWTVhORVQzX1RYRF9DUQkJKDEgPDwgVk1YTkVUM19UWERfQ1FfU0hJRlQpCisjZGVmaW5lIFZNWE5FVDNfVFhEX0VPUAkJKDEgPDwgVk1YTkVUM19UWERfRU9QX1NISUZUKQorI2RlZmluZSBWTVhORVQzX1RYRF9HRU4JCSgxIDw8IFZNWE5FVDNfVFhEX0dFTl9TSElGVCkKKworI2RlZmluZSBWTVhORVQzX0hEUl9DT1BZX1NJWkUgICAxMjgKKworCitzdHJ1Y3QgVm14bmV0M19UeERhdGFEZXNjIHsKKwl1OAkJZGF0YVtWTVhORVQzX0hEUl9DT1BZX1NJWkVdOworfTsKKworCitzdHJ1Y3QgVm14bmV0M19UeENvbXBEZXNjIHsKKwl1MzIJCXR4ZElkeDoxMjsgICAgLyogSW5kZXggb2YgdGhlIEVPUCBUeERlc2MgKi8KKwl1MzIJCWV4dDE6MjA7CisKKwl1MzIJCWV4dDI7CisJdTMyCQlleHQzOworCisJdTMyCQlyc3ZkOjI0OworCXUzMgkJdHlwZTo3OyAgICAgICAvKiBjb21wbGV0aW9uIHR5cGUgKi8KKwl1MzIJCWdlbjoxOyAgICAgICAgLyogZ2VuZXJhdGlvbiBiaXQgKi8KK307CisKKworc3RydWN0IFZteG5ldDNfUnhEZXNjIHsKKwl1NjQJCWFkZHI7CisKKwl1MzIJCWxlbjoxNDsKKwl1MzIJCWJ0eXBlOjE7ICAgICAgLyogQnVmZmVyIFR5cGUgKi8KKwl1MzIJCWR0eXBlOjE7ICAgICAgLyogRGVzY3JpcHRvciB0eXBlICovCisJdTMyCQlyc3ZkOjE1OworCXUzMgkJZ2VuOjE7ICAgICAgICAvKiBHZW5lcmF0aW9uIGJpdCAqLworCisJdTMyCQlleHQxOworfTsKKworLyogdmFsdWVzIG9mIFJYRC5CVFlQRSAqLworI2RlZmluZSBWTVhORVQzX1JYRF9CVFlQRV9IRUFEICAgMCAgICAvKiBoZWFkIG9ubHkgKi8KKyNkZWZpbmUgVk1YTkVUM19SWERfQlRZUEVfQk9EWSAgIDEgICAgLyogYm9keSBvbmx5ICovCisKKy8qIGZpZWxkcyBpbiBSeERlc2Mgd2UgYWNjZXNzIHcvbyB1c2luZyBiaXQgZmllbGRzICovCisjZGVmaW5lIFZNWE5FVDNfUlhEX0JUWVBFX1NISUZUICAxNAorI2RlZmluZSBWTVhORVQzX1JYRF9HRU5fU0hJRlQgICAgMzEKKworCitzdHJ1Y3QgVm14bmV0M19SeENvbXBEZXNjIHsKKwl1MzIJCXJ4ZElkeDoxMjsgICAgLyogSW5kZXggb2YgdGhlIFJ4RGVzYyAqLworCXUzMgkJZXh0MToyOworCXUzMgkJZW9wOjE7ICAgICAgICAvKiBFbmQgb2YgUGFja2V0ICovCisJdTMyCQlzb3A6MTsgICAgICAgIC8qIFN0YXJ0IG9mIFBhY2tldCAqLworCXUzMgkJcnFJRDoxMDsgICAgICAvKiByeCBxdWV1ZS9yaW5nIElEICovCisJdTMyCQlyc3NUeXBlOjQ7ICAgIC8qIFJTUyBoYXNoIHR5cGUgdXNlZCAqLworCXUzMgkJY25jOjE7ICAgICAgICAvKiBDaGVja3N1bSBOb3QgQ2FsY3VsYXRlZCAqLworCXUzMgkJZXh0MjoxOworCisJdTMyCQlyc3NIYXNoOyAgICAgIC8qIFJTUyBoYXNoIHZhbHVlICovCisKKwl1MzIJCWxlbjoxNDsgICAgICAgLyogZGF0YSBsZW5ndGggKi8KKwl1MzIJCWVycjoxOyAgICAgICAgLyogRXJyb3IgKi8KKwl1MzIJCXRzOjE7ICAgICAgICAgLyogVGFnIGlzIHN0cmlwcGVkICovCisJdTMyCQl0Y2k6MTY7ICAgICAgIC8qIFRhZyBzdHJpcHBlZCAqLworCisJdTMyCQljc3VtOjE2OworCXUzMgkJdHVjOjE7ICAgICAgICAvKiBUQ1AvVURQIENoZWNrc3VtIENvcnJlY3QgKi8KKwl1MzIJCXVkcDoxOyAgICAgICAgLyogVURQIHBhY2tldCAqLworCXUzMgkJdGNwOjE7ICAgICAgICAvKiBUQ1AgcGFja2V0ICovCisJdTMyCQlpcGM6MTsgICAgICAgIC8qIElQIENoZWNrc3VtIENvcnJlY3QgKi8KKwl1MzIJCXY2OjE7ICAgICAgICAgLyogSVB2NiAqLworCXUzMgkJdjQ6MTsgICAgICAgICAvKiBJUHY0ICovCisJdTMyCQlmcmc6MTsgICAgICAgIC8qIElQIEZyYWdtZW50ICovCisJdTMyCQlmY3M6MTsgICAgICAgIC8qIEZyYW1lIENSQyBjb3JyZWN0ICovCisJdTMyCQl0eXBlOjc7ICAgICAgIC8qIGNvbXBsZXRpb24gdHlwZSAqLworCXUzMgkJZ2VuOjE7ICAgICAgICAvKiBnZW5lcmF0aW9uIGJpdCAqLworfTsKKworLyogZmllbGRzIGluIFJ4Q29tcERlc2Mgd2UgYWNjZXNzIHZpYSBWbXhuZXQzX0dlbmVyaWNEZXNjLmR3b3JkWzNdICovCisjZGVmaW5lIFZNWE5FVDNfUkNEX1RVQ19TSElGVAkxNgorI2RlZmluZSBWTVhORVQzX1JDRF9JUENfU0hJRlQJMTkKKworLyogZmllbGRzIGluIFJ4Q29tcERlc2Mgd2UgYWNjZXNzIHZpYSBWbXhuZXQzX0dlbmVyaWNEZXNjLnF3b3JkWzFdICovCisjZGVmaW5lIFZNWE5FVDNfUkNEX1RZUEVfU0hJRlQJNTYKKyNkZWZpbmUgVk1YTkVUM19SQ0RfR0VOX1NISUZUCTYzCisKKy8qIGNzdW0gT0sgZm9yIFRDUC9VRFAgcGt0cyBvdmVyIElQICovCisjZGVmaW5lIFZNWE5FVDNfUkNEX0NTVU1fT0sgKDEgPDwgVk1YTkVUM19SQ0RfVFVDX1NISUZUIHwgXAorCQkJICAgICAxIDw8IFZNWE5FVDNfUkNEX0lQQ19TSElGVCkKKworLyogdmFsdWUgb2YgUnhDb21wRGVzYy5yc3NUeXBlICovCitlbnVtIHsKKwlWTVhORVQzX1JDRF9SU1NfVFlQRV9OT05FICAgICA9IDAsCisJVk1YTkVUM19SQ0RfUlNTX1RZUEVfSVBWNCAgICAgPSAxLAorCVZNWE5FVDNfUkNEX1JTU19UWVBFX1RDUElQVjQgID0gMiwKKwlWTVhORVQzX1JDRF9SU1NfVFlQRV9JUFY2ICAgICA9IDMsCisJVk1YTkVUM19SQ0RfUlNTX1RZUEVfVENQSVBWNiAgPSA0LAorfTsKKworCisvKiBhIHVuaW9uIGZvciBhY2Nlc3NpbmcgYWxsIGNtZC9jb21wbGV0aW9uIGRlc2NyaXB0b3JzICovCit1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjIHsKKwl1NjQJCQkJcXdvcmRbMl07CisJdTMyCQkJCWR3b3JkWzRdOworCXUxNgkJCQl3b3JkWzhdOworCXN0cnVjdCBWbXhuZXQzX1R4RGVzYwkJdHhkOworCXN0cnVjdCBWbXhuZXQzX1J4RGVzYwkJcnhkOworCXN0cnVjdCBWbXhuZXQzX1R4Q29tcERlc2MJdGNkOworCXN0cnVjdCBWbXhuZXQzX1J4Q29tcERlc2MJcmNkOworfTsKKworI2RlZmluZSBWTVhORVQzX0lOSVRfR0VOICAgICAgIDEKKworLyogTWF4IHNpemUgb2YgYSBzaW5nbGUgdHggYnVmZmVyICovCisjZGVmaW5lIFZNWE5FVDNfTUFYX1RYX0JVRl9TSVpFICAoMSA8PCAxNCkKKworLyogIyBvZiB0eCBkZXNjIG5lZWRlZCBmb3IgYSB0eCBidWZmZXIgc2l6ZSAqLworI2RlZmluZSBWTVhORVQzX1RYRF9ORUVERUQoc2l6ZSkgKCgoc2l6ZSkgKyBWTVhORVQzX01BWF9UWF9CVUZfU0laRSAtIDEpIC8gXAorCQkJCSAgVk1YTkVUM19NQVhfVFhfQlVGX1NJWkUpCisKKy8qIG1heCAjIG9mIHR4IGRlc2NzIGZvciBhIG5vbi10c28gcGt0ICovCisjZGVmaW5lIFZNWE5FVDNfTUFYX1RYRF9QRVJfUEtUIDE2CisKKy8qIE1heCBzaXplIG9mIGEgc2luZ2xlIHJ4IGJ1ZmZlciAqLworI2RlZmluZSBWTVhORVQzX01BWF9SWF9CVUZfU0laRSAgKCgxIDw8IDE0KSAtIDEpCisvKiBNaW5pbXVtIHNpemUgb2YgYSB0eXBlIDAgYnVmZmVyICovCisjZGVmaW5lIFZNWE5FVDNfTUlOX1QwX0JVRl9TSVpFICAxMjgKKyNkZWZpbmUgVk1YTkVUM19NQVhfQ1NVTV9PRkZTRVQgIDEwMjQKKworLyogUmluZyBiYXNlIGFkZHJlc3MgYWxpZ25tZW50ICovCisjZGVmaW5lIFZNWE5FVDNfUklOR19CQV9BTElHTiAgIDUxMgorI2RlZmluZSBWTVhORVQzX1JJTkdfQkFfTUFTSyAgICAoVk1YTkVUM19SSU5HX0JBX0FMSUdOIC0gMSkKKworLyogUmluZyBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMiAqLworI2RlZmluZSBWTVhORVQzX1JJTkdfU0laRV9BTElHTiAzMgorI2RlZmluZSBWTVhORVQzX1JJTkdfU0laRV9NQVNLICAoVk1YTkVUM19SSU5HX1NJWkVfQUxJR04gLSAxKQorCisvKiBNYXggcmluZyBzaXplICovCisjZGVmaW5lIFZNWE5FVDNfVFhfUklOR19NQVhfU0laRSAgIDQwOTYKKyNkZWZpbmUgVk1YTkVUM19UQ19SSU5HX01BWF9TSVpFICAgNDA5NgorI2RlZmluZSBWTVhORVQzX1JYX1JJTkdfTUFYX1NJWkUgICA0MDk2CisjZGVmaW5lIFZNWE5FVDNfUkNfUklOR19NQVhfU0laRSAgIDgxOTIKKworLyogYSBsaXN0IG9mIHJlYXNvbnMgZm9yIHF1ZXVlIHN0b3AgKi8KKworZW51bSB7CisgVk1YTkVUM19FUlJfTk9FT1AgICAgICAgID0gMHg4MDAwMDAwMCwgIC8qIGNhbm5vdCBmaW5kIHRoZSBFT1AgZGVzYyBvZiBhIHBrdCAqLworIFZNWE5FVDNfRVJSX1RYRF9SRVVTRSAgICA9IDB4ODAwMDAwMDEsICAvKiByZXVzZSBUeERlc2MgYmVmb3JlIHR4IGNvbXBsZXRpb24gKi8KKyBWTVhORVQzX0VSUl9CSUdfUEtUICAgICAgPSAweDgwMDAwMDAyLCAgLyogdG9vIG1hbnkgVHhEZXNjIGZvciBhIHBrdCAqLworIFZNWE5FVDNfRVJSX0RFU0NfTk9UX1NQVCA9IDB4ODAwMDAwMDMsICAvKiBkZXNjcmlwdG9yIHR5cGUgbm90IHN1cHBvcnRlZCAqLworIFZNWE5FVDNfRVJSX1NNQUxMX0JVRiAgICA9IDB4ODAwMDAwMDQsICAvKiB0eXBlIDAgYnVmZmVyIHRvbyBzbWFsbCAqLworIFZNWE5FVDNfRVJSX1NUUkVTUyAgICAgICA9IDB4ODAwMDAwMDUsICAvKiBzdHJlc3Mgb3B0aW9uIGZpcmluZyBpbiB2bWtlcm5lbCAqLworIFZNWE5FVDNfRVJSX1NXSVRDSCAgICAgICA9IDB4ODAwMDAwMDYsICAvKiBtb2RlIHN3aXRjaCBmYWlsdXJlICovCisgVk1YTkVUM19FUlJfVFhEX0lOVkFMSUQgID0gMHg4MDAwMDAwNywgIC8qIGludmFsaWQgVHhEZXNjICovCit9OworCisvKiBjb21wbGV0aW9uIGRlc2NyaXB0b3IgdHlwZXMgKi8KKyNkZWZpbmUgVk1YTkVUM19DRFRZUEVfVFhDT01QICAgICAgMCAgICAvKiBUeCBDb21wbGV0aW9uIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUgVk1YTkVUM19DRFRZUEVfUlhDT01QICAgICAgMyAgICAvKiBSeCBDb21wbGV0aW9uIERlc2NyaXB0b3IgKi8KKworZW51bSB7CisJVk1YTkVUM19HT1NfQklUU19VTksgICAgPSAwLCAgIC8qIHVua25vd24gKi8KKwlWTVhORVQzX0dPU19CSVRTXzMyICAgICA9IDEsCisJVk1YTkVUM19HT1NfQklUU182NCAgICAgPSAyLAorfTsKKworI2RlZmluZSBWTVhORVQzX0dPU19UWVBFX0xJTlVYCTEKKworCitzdHJ1Y3QgVm14bmV0M19HT1NJbmZvIHsKKwl1MzIJCQkJZ29zQml0czoyOwkvKiAzMi1iaXQgb3IgNjQtYml0PyAqLworCXUzMgkJCQlnb3NUeXBlOjQ7ICAgLyogd2hpY2ggZ3Vlc3QgKi8KKwl1MzIJCQkJZ29zVmVyOjE2OyAgIC8qIGdvcyB2ZXJzaW9uICovCisJdTMyCQkJCWdvc01pc2M6MTA7ICAvKiBvdGhlciBpbmZvIGFib3V0IGdvcyAqLworfTsKKworCitzdHJ1Y3QgVm14bmV0M19Ecml2ZXJJbmZvIHsKKwl1MzIJCQkJdmVyc2lvbjsKKwlzdHJ1Y3QgVm14bmV0M19HT1NJbmZvCQlnb3M7CisJdTMyCQkJCXZteG5ldDNSZXZTcHQ7CisJdTMyCQkJCXVwdFZlclNwdDsKK307CisKKworI2RlZmluZSBWTVhORVQzX1JFVjFfTUFHSUMgIDB4YmFiZWZlZTEKKworLyoKKyAqIFF1ZXVlRGVzY1BBIG11c3QgYmUgMTI4IGJ5dGVzIGFsaWduZWQuIEl0IHBvaW50cyB0byBhbiBhcnJheSBvZgorICogVm14bmV0M19UeFF1ZXVlRGVzYyBmb2xsb3dlZCBieSBhbiBhcnJheSBvZiBWbXhuZXQzX1J4UXVldWVEZXNjLgorICogVGhlIG51bWJlciBvZiBWbXhuZXQzX1R4UXVldWVEZXNjL1ZteG5ldDNfUnhRdWV1ZURlc2MgYXJlIHNwZWNpZmllZCBieQorICogVm14bmV0M19NaXNjQ29uZi5udW1UeFF1ZXVlcy9udW1SeFF1ZXVlcywgcmVzcGVjdGl2ZWx5LgorICovCisjZGVmaW5lIFZNWE5FVDNfUVVFVUVfREVTQ19BTElHTiAgMTI4CisKKworc3RydWN0IFZteG5ldDNfTWlzY0NvbmYgeworCXN0cnVjdCBWbXhuZXQzX0RyaXZlckluZm8gZHJpdmVySW5mbzsKKwl1NjQJCXVwdEZlYXR1cmVzOworCXU2NAkJZGRQQTsgICAgICAgICAvKiBkcml2ZXIgZGF0YSBQQSAqLworCXU2NAkJcXVldWVEZXNjUEE7ICAvKiBxdWV1ZSBkZXNjcmlwdG9yIHRhYmxlIFBBICovCisJdTMyCQlkZExlbjsgICAgICAgIC8qIGRyaXZlciBkYXRhIGxlbiAqLworCXUzMgkJcXVldWVEZXNjTGVuOyAvKiBxdWV1ZSBkZXNjLiB0YWJsZSBsZW4gaW4gYnl0ZXMgKi8KKwl1MzIJCW10dTsKKwl1MTYJCW1heE51bVJ4U0c7CisJdTgJCW51bVR4UXVldWVzOworCXU4CQludW1SeFF1ZXVlczsKKwl1MzIJCXJlc2VydmVkWzRdOworfTsKKworCitzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlQ29uZiB7CisJdTY0CQl0eFJpbmdCYXNlUEE7CisJdTY0CQlkYXRhUmluZ0Jhc2VQQTsKKwl1NjQJCWNvbXBSaW5nQmFzZVBBOworCXU2NAkJZGRQQTsgICAgICAgICAvKiBkcml2ZXIgZGF0YSAqLworCXU2NAkJcmVzZXJ2ZWQ7CisJdTMyCQl0eFJpbmdTaXplOyAgIC8qICMgb2YgdHggZGVzYyAqLworCXUzMgkJZGF0YVJpbmdTaXplOyAvKiAjIG9mIGRhdGEgZGVzYyAqLworCXUzMgkJY29tcFJpbmdTaXplOyAvKiAjIG9mIGNvbXAgZGVzYyAqLworCXUzMgkJZGRMZW47ICAgICAgICAvKiBzaXplIG9mIGRyaXZlciBkYXRhICovCisJdTgJCWludHJJZHg7CisJdTgJCV9wYWRbN107Cit9OworCisKK3N0cnVjdCBWbXhuZXQzX1J4UXVldWVDb25mIHsKKwl1NjQJCXJ4UmluZ0Jhc2VQQVsyXTsKKwl1NjQJCWNvbXBSaW5nQmFzZVBBOworCXU2NAkJZGRQQTsgICAgICAgICAgICAvKiBkcml2ZXIgZGF0YSAqLworCXU2NAkJcmVzZXJ2ZWQ7CisJdTMyCQlyeFJpbmdTaXplWzJdOyAgIC8qICMgb2YgcnggZGVzYyAqLworCXUzMgkJY29tcFJpbmdTaXplOyAgICAvKiAjIG9mIHJ4IGNvbXAgZGVzYyAqLworCXUzMgkJZGRMZW47ICAgICAgICAgICAvKiBzaXplIG9mIGRyaXZlciBkYXRhICovCisJdTgJCWludHJJZHg7CisJdTgJCV9wYWRbN107Cit9OworCisKK2VudW0gdm14bmV0M19pbnRyX21hc2tfbW9kZSB7CisJVk1YTkVUM19JTU1fQVVUTyAgID0gMCwKKwlWTVhORVQzX0lNTV9BQ1RJVkUgPSAxLAorCVZNWE5FVDNfSU1NX0xBWlkgICA9IDIKK307CisKK2VudW0gdm14bmV0M19pbnRyX3R5cGUgeworCVZNWE5FVDNfSVRfQVVUTyA9IDAsCisJVk1YTkVUM19JVF9JTlRYID0gMSwKKwlWTVhORVQzX0lUX01TSSAgPSAyLAorCVZNWE5FVDNfSVRfTVNJWCA9IDMKK307CisKKyNkZWZpbmUgVk1YTkVUM19NQVhfVFhfUVVFVUVTICA4CisjZGVmaW5lIFZNWE5FVDNfTUFYX1JYX1FVRVVFUyAgMTYKKy8qIGFkZGl0aW9uIDEgZm9yIGV2ZW50cyAqLworI2RlZmluZSBWTVhORVQzX01BWF9JTlRSUyAgICAgIDI1CisKKworc3RydWN0IFZteG5ldDNfSW50ckNvbmYgeworCWJvb2wJCWF1dG9NYXNrOworCXU4CQludW1JbnRyczsgICAgICAvKiAjIG9mIGludGVycnVwdHMgKi8KKwl1OAkJZXZlbnRJbnRySWR4OworCXU4CQltb2RMZXZlbHNbVk1YTkVUM19NQVhfSU5UUlNdOwkvKiBtb2RlcmF0aW9uIGxldmVsIGZvcgorCQkJCQkJCSAqIGVhY2ggaW50ciAqLworCXUzMgkJcmVzZXJ2ZWRbM107Cit9OworCisvKiBvbmUgYml0IHBlciBWTEFOIElELCB0aGUgc2l6ZSBpcyBpbiB0aGUgdW5pdHMgb2YgdTMyCSovCisjZGVmaW5lIFZNWE5FVDNfVkZUX1NJWkUgICg0MDk2IC8gKHNpemVvZih1MzIpICogOCkpCisKKworc3RydWN0IFZteG5ldDNfUXVldWVTdGF0dXMgeworCWJvb2wJCXN0b3BwZWQ7CisJdTgJCV9wYWRbM107CisJdTMyCQllcnJvcjsKK307CisKKworc3RydWN0IFZteG5ldDNfVHhRdWV1ZUN0cmwgeworCXUzMgkJdHhOdW1EZWZlcnJlZDsKKwl1MzIJCXR4VGhyZXNob2xkOworCXU2NAkJcmVzZXJ2ZWQ7Cit9OworCisKK3N0cnVjdCBWbXhuZXQzX1J4UXVldWVDdHJsIHsKKwlib29sCQl1cGRhdGVSeFByb2Q7CisJdTgJCV9wYWRbN107CisJdTY0CQlyZXNlcnZlZDsKK307CisKK2VudW0geworCVZNWE5FVDNfUlhNX1VDQVNUICAgICA9IDB4MDEsICAvKiB1bmljYXN0IG9ubHkgKi8KKwlWTVhORVQzX1JYTV9NQ0FTVCAgICAgPSAweDAyLCAgLyogbXVsdGljYXN0IHBhc3NpbmcgdGhlIGZpbHRlcnMgKi8KKwlWTVhORVQzX1JYTV9CQ0FTVCAgICAgPSAweDA0LCAgLyogYnJvYWRjYXN0IG9ubHkgKi8KKwlWTVhORVQzX1JYTV9BTExfTVVMVEkgPSAweDA4LCAgLyogYWxsIG11bHRpY2FzdCAqLworCVZNWE5FVDNfUlhNX1BST01JU0MgICA9IDB4MTAgIC8qIHByb21pc2N1b3VzICovCit9OworCitzdHJ1Y3QgVm14bmV0M19SeEZpbHRlckNvbmYgeworCXUzMgkJcnhNb2RlOyAgICAgICAvKiBWTVhORVQzX1JYTV94eHggKi8KKwl1MTYJCW1mVGFibGVMZW47ICAgLyogc2l6ZSBvZiB0aGUgbXVsdGljYXN0IGZpbHRlciB0YWJsZSAqLworCXUxNgkJX3BhZDE7CisJdTY0CQltZlRhYmxlUEE7ICAgIC8qIFBBIG9mIHRoZSBtdWx0aWNhc3QgZmlsdGVycyB0YWJsZSAqLworCXUzMgkJdmZUYWJsZVtWTVhORVQzX1ZGVF9TSVpFXTsgLyogdmxhbiBmaWx0ZXIgKi8KK307CisKKworI2RlZmluZSBWTVhORVQzX1BNX01BWF9GSUxURVJTICAgICAgICA2CisjZGVmaW5lIFZNWE5FVDNfUE1fTUFYX1BBVFRFUk5fU0laRSAgIDEyOAorI2RlZmluZSBWTVhORVQzX1BNX01BWF9NQVNLX1NJWkUgICAgICAoVk1YTkVUM19QTV9NQVhfUEFUVEVSTl9TSVpFIC8gOCkKKworI2RlZmluZSBWTVhORVQzX1BNX1dBS0VVUF9NQUdJQyAgICAgICAweDAxICAvKiB3YWtlIHVwIG9uIG1hZ2ljIHBrdHMgKi8KKyNkZWZpbmUgVk1YTkVUM19QTV9XQUtFVVBfRklMVEVSICAgICAgMHgwMiAgLyogd2FrZSB1cCBvbiBwa3RzIG1hdGNoaW5nCisJCQkJCSAgICAgKiBmaWx0ZXJzICovCisKKworc3RydWN0IFZteG5ldDNfUE1fUGt0RmlsdGVyIHsKKwl1OAkJbWFza1NpemU7CisJdTgJCXBhdHRlcm5TaXplOworCXU4CQltYXNrW1ZNWE5FVDNfUE1fTUFYX01BU0tfU0laRV07CisJdTgJCXBhdHRlcm5bVk1YTkVUM19QTV9NQVhfUEFUVEVSTl9TSVpFXTsKKwl1OAkJcGFkWzZdOworfTsKKworCitzdHJ1Y3QgVm14bmV0M19QTUNvbmYgeworCXUxNgkJd2FrZVVwRXZlbnRzOyAgLyogVk1YTkVUM19QTV9XQUtFVVBfeHh4ICovCisJdTgJCW51bUZpbHRlcnM7CisJdTgJCXBhZFs1XTsKKwlzdHJ1Y3QgVm14bmV0M19QTV9Qa3RGaWx0ZXIgZmlsdGVyc1tWTVhORVQzX1BNX01BWF9GSUxURVJTXTsKK307CisKKworc3RydWN0IFZteG5ldDNfVmFyaWFibGVMZW5Db25mRGVzYyB7CisJdTMyCQljb25mVmVyOworCXUzMgkJY29uZkxlbjsKKwl1NjQJCWNvbmZQQTsKK307CisKKworc3RydWN0IFZteG5ldDNfVHhRdWV1ZURlc2MgeworCXN0cnVjdCBWbXhuZXQzX1R4UXVldWVDdHJsCQljdHJsOworCXN0cnVjdCBWbXhuZXQzX1R4UXVldWVDb25mCQljb25mOworCisJLyogRHJpdmVyIHJlYWQgYWZ0ZXIgYSBHRVQgY29tbWFuZCAqLworCXN0cnVjdCBWbXhuZXQzX1F1ZXVlU3RhdHVzCQlzdGF0dXM7CisJc3RydWN0IFVQVDFfVHhTdGF0cwkJCXN0YXRzOworCXU4CQkJCQlfcGFkWzg4XTsgLyogMTI4IGFsaWduZWQgKi8KK307CisKKworc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MgeworCXN0cnVjdCBWbXhuZXQzX1J4UXVldWVDdHJsCQljdHJsOworCXN0cnVjdCBWbXhuZXQzX1J4UXVldWVDb25mCQljb25mOworCS8qIERyaXZlciByZWFkIGFmdGVyIGEgR0VUIGNvbW1hZCAqLworCXN0cnVjdCBWbXhuZXQzX1F1ZXVlU3RhdHVzCQlzdGF0dXM7CisJc3RydWN0IFVQVDFfUnhTdGF0cwkJCXN0YXRzOworCXU4CQkJCSAgICAgIF9fcGFkWzg4XTsgLyogMTI4IGFsaWduZWQgKi8KK307CisKKworc3RydWN0IFZteG5ldDNfRFNEZXZSZWFkIHsKKwkvKiByZWFkLW9ubHkgcmVnaW9uIGZvciBkZXZpY2UsIHJlYWQgYnkgZGV2IGluIHJlc3BvbnNlIHRvIGEgU0VUIGNtZCAqLworCXN0cnVjdCBWbXhuZXQzX01pc2NDb25mCQkJbWlzYzsKKwlzdHJ1Y3QgVm14bmV0M19JbnRyQ29uZgkJCWludHJDb25mOworCXN0cnVjdCBWbXhuZXQzX1J4RmlsdGVyQ29uZgkJcnhGaWx0ZXJDb25mOworCXN0cnVjdCBWbXhuZXQzX1ZhcmlhYmxlTGVuQ29uZkRlc2MJcnNzQ29uZkRlc2M7CisJc3RydWN0IFZteG5ldDNfVmFyaWFibGVMZW5Db25mRGVzYwlwbUNvbmZEZXNjOworCXN0cnVjdCBWbXhuZXQzX1ZhcmlhYmxlTGVuQ29uZkRlc2MJcGx1Z2luQ29uZkRlc2M7Cit9OworCisvKiBBbGwgc3RydWN0dXJlcyBpbiBEcml2ZXJTaGFyZWQgYXJlIHBhZGRlZCB0byBtdWx0aXBsZXMgb2YgOCBieXRlcyAqLworc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkIHsKKwl1MzIJCQkJbWFnaWM7CisJLyogbWFrZSBkZXZSZWFkIHN0YXJ0IGF0IDY0Yml0IGJvdW5kYXJpZXMgKi8KKwl1MzIJCQkJCXBhZDsKKwlzdHJ1Y3QgVm14bmV0M19EU0RldlJlYWQJCWRldlJlYWQ7CisJdTMyCQkJCQllY3I7CisJdTMyCQkJCQlyZXNlcnZlZFs1XTsKK307CisKKworI2RlZmluZSBWTVhORVQzX0VDUl9SUUVSUiAgICAgICAoMSA8PCAwKQorI2RlZmluZSBWTVhORVQzX0VDUl9UUUVSUiAgICAgICAoMSA8PCAxKQorI2RlZmluZSBWTVhORVQzX0VDUl9MSU5LICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBWTVhORVQzX0VDUl9ESUMgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBWTVhORVQzX0VDUl9ERUJVRyAgICAgICAoMSA8PCA0KQorCisvKiBmbGlwIHRoZSBnZW4gYml0IG9mIGEgcmluZyAqLworI2RlZmluZSBWTVhORVQzX0ZMSVBfUklOR19HRU4oZ2VuKSAoKGdlbikgPSAoZ2VuKSBeIDB4MSkKKworLyogb25seSB1c2UgdGhpcyBpZiBtb3ZpbmcgdGhlIGlkeCB3b24ndCBhZmZlY3QgdGhlIGdlbiBiaXQgKi8KKyNkZWZpbmUgVk1YTkVUM19JTkNfUklOR19JRFhfT05MWShpZHgsIHJpbmdfc2l6ZSkgXAorCWRvIHtcCisJCShpZHgpKys7XAorCQlpZiAodW5saWtlbHkoKGlkeCkgPT0gKHJpbmdfc2l6ZSkpKSB7XAorCQkJKGlkeCkgPSAwO1wKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBWTVhORVQzX1NFVF9WRlRBQkxFX0VOVFJZKHZmVGFibGUsIHZpZCkgXAorCSh2ZlRhYmxlW3ZpZCA+PiA1XSB8PSAoMSA8PCAodmlkICYgMzEpKSkKKyNkZWZpbmUgVk1YTkVUM19DTEVBUl9WRlRBQkxFX0VOVFJZKHZmVGFibGUsIHZpZCkgXAorCSh2ZlRhYmxlW3ZpZCA+PiA1XSAmPSB+KDEgPDwgKHZpZCAmIDMxKSkpCisKKyNkZWZpbmUgVk1YTkVUM19WRlRBQkxFX0VOVFJZX0lTX1NFVCh2ZlRhYmxlLCB2aWQpIFwKKwkoKHZmVGFibGVbdmlkID4+IDVdICYgKDEgPDwgKHZpZCAmIDMxKSkpICE9IDApCisKKyNkZWZpbmUgVk1YTkVUM19NQVhfTVRVICAgICA5MDAwCisjZGVmaW5lIFZNWE5FVDNfTUlOX01UVSAgICAgNjAKKworI2RlZmluZSBWTVhORVQzX0xJTktfVVAgICAgICAgICAoMTAwMDAgPDwgMTYgfCAxKSAgICAvKiAxMCBHYnBzLCB1cCAqLworI2RlZmluZSBWTVhORVQzX0xJTktfRE9XTiAgICAgICAwCisKKyNlbmRpZiAvKiBfVk1YTkVUM19ERUZTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0MzUzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwpAQCAtMCwwICsxLDI1NzQgQEAKKy8qCisgKiBMaW51eCBkcml2ZXIgZm9yIFZNd2FyZSdzIHZteG5ldDMgZXRoZXJuZXQgTklDLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBWTXdhcmUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSBhbmQgbm8gbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqIE5PTiBJTkZSSU5HRU1FTlQuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAqIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICogTWFpbnRhaW5lZCBieTogU2hyZXlhcyBCaGF0ZXdhcmEgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgInZteG5ldDNfaW50LmgiCisKK2NoYXIgdm14bmV0M19kcml2ZXJfbmFtZVtdID0gInZteG5ldDMiOworI2RlZmluZSBWTVhORVQzX0RSSVZFUl9ERVNDICJWTXdhcmUgdm14bmV0MyB2aXJ0dWFsIE5JQyBkcml2ZXIiCisKKworLyoKKyAqIFBDSSBEZXZpY2UgSUQgVGFibGUKKyAqIExhc3QgZW50cnkgbXVzdCBiZSBhbGwgMHMKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZteG5ldDNfcGNpaWRfdGFibGVbXSA9IHsKKwl7UENJX1ZERVZJQ0UoVk1XQVJFLCBQQ0lfREVWSUNFX0lEX1ZNV0FSRV9WTVhORVQzKX0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdm14bmV0M19wY2lpZF90YWJsZSk7CisKK3N0YXRpYyBhdG9taWNfdCBkZXZpY2VzX2ZvdW5kOworCisKKy8qCisgKiAgICBFbmFibGUvRGlzYWJsZSB0aGUgZ2l2ZW4gaW50cgorICovCitzdGF0aWMgdm9pZAordm14bmV0M19lbmFibGVfaW50cihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnRyX2lkeCkKK3sKKwlWTVhORVQzX1dSSVRFX0JBUjBfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0lNUiArIGludHJfaWR4ICogOCwgMCk7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZGlzYWJsZV9pbnRyKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludHJfaWR4KQoreworCVZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfSU1SICsgaW50cl9pZHggKiA4LCAxKTsKK30KKworCisvKgorICogICAgRW5hYmxlL0Rpc2FibGUgYWxsIGludHJzIHVzZWQgYnkgdGhlIGRldmljZQorICovCitzdGF0aWMgdm9pZAordm14bmV0M19lbmFibGVfYWxsX2ludHJzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+aW50ci5udW1faW50cnM7IGkrKykKKwkJdm14bmV0M19lbmFibGVfaW50cihhZGFwdGVyLCBpKTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19kaXNhYmxlX2FsbF9pbnRycyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPmludHIubnVtX2ludHJzOyBpKyspCisJCXZteG5ldDNfZGlzYWJsZV9pbnRyKGFkYXB0ZXIsIGkpOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX2Fja19ldmVudHMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciwgdTMyIGV2ZW50cykKK3sKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0VDUiwgZXZlbnRzKTsKK30KKworCitzdGF0aWMgYm9vbAordm14bmV0M190cV9zdG9wcGVkKHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gbmV0aWZfcXVldWVfc3RvcHBlZChhZGFwdGVyLT5uZXRkZXYpOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3RxX3N0YXJ0KHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl0cS0+c3RvcHBlZCA9IGZhbHNlOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfdHFfd2FrZShzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdHEtPnN0b3BwZWQgPSBmYWxzZTsKKwluZXRpZl93YWtlX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfdHFfc3RvcChzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdHEtPnN0b3BwZWQgPSB0cnVlOworCXRxLT5udW1fc3RvcCsrOworCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworCisvKgorICogQ2hlY2sgdGhlIGxpbmsgc3RhdGUuIFRoaXMgbWF5IHN0YXJ0IG9yIHN0b3AgdGhlIHR4IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAordm14bmV0M19jaGVja19saW5rKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHJldDsKKworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELCBWTVhORVQzX0NNRF9HRVRfTElOSyk7CisJcmV0ID0gVk1YTkVUM19SRUFEX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCk7CisJYWRhcHRlci0+bGlua19zcGVlZCA9IHJldCA+PiAxNjsKKwlpZiAocmV0ICYgMSkgeyAvKiBMaW5rIGlzIHVwLiAqLworCQlwcmludGsoS0VSTl9JTkZPICIlczogTklDIExpbmsgaXMgVXAgJWQgTWJwc1xuIiwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bGlua19zcGVlZCk7CisJCWlmICghbmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKQorCQkJbmV0aWZfY2Fycmllcl9vbihhZGFwdGVyLT5uZXRkZXYpOworCisJCXZteG5ldDNfdHFfc3RhcnQoJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogTklDIExpbmsgaXMgRG93blxuIiwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWlmIChuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpCisJCQluZXRpZl9jYXJyaWVyX29mZihhZGFwdGVyLT5uZXRkZXYpOworCisJCXZteG5ldDNfdHFfc3RvcCgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCX0KK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBldmVudHMgPSBhZGFwdGVyLT5zaGFyZWQtPmVjcjsKKwlpZiAoIWV2ZW50cykKKwkJcmV0dXJuOworCisJdm14bmV0M19hY2tfZXZlbnRzKGFkYXB0ZXIsIGV2ZW50cyk7CisKKwkvKiBDaGVjayBpZiBsaW5rIHN0YXRlIGhhcyBjaGFuZ2VkICovCisJaWYgKGV2ZW50cyAmIFZNWE5FVDNfRUNSX0xJTkspCisJCXZteG5ldDNfY2hlY2tfbGluayhhZGFwdGVyKTsKKworCS8qIENoZWNrIGlmIHRoZXJlIGlzIGFuIGVycm9yIG9uIHhtaXQvcmVjdiBxdWV1ZXMgKi8KKwlpZiAoZXZlbnRzICYgKFZNWE5FVDNfRUNSX1RRRVJSIHwgVk1YTkVUM19FQ1JfUlFFUlIpKSB7CisJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCSAgICAgICBWTVhORVQzX0NNRF9HRVRfUVVFVUVfU1RBVFVTKTsKKworCQlpZiAoYWRhcHRlci0+dHFkX3N0YXJ0LT5zdGF0dXMuc3RvcHBlZCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdHEgZXJyb3IgMHgleFxuIiwKKwkJCSAgICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkgICAgICAgYWRhcHRlci0+dHFkX3N0YXJ0LT5zdGF0dXMuZXJyb3IpOworCQl9CisJCWlmIChhZGFwdGVyLT5ycWRfc3RhcnQtPnN0YXR1cy5zdG9wcGVkKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBycSBlcnJvciAweCV4XG4iLAorCQkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCSAgICAgICBhZGFwdGVyLT5ycWRfc3RhcnQtPnN0YXR1cy5lcnJvcik7CisJCX0KKworCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT53b3JrKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfdW5tYXBfdHhfYnVmKHN0cnVjdCB2bXhuZXQzX3R4X2J1Zl9pbmZvICp0YmksCisJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaWYgKHRiaS0+bWFwX3R5cGUgPT0gVk1YTkVUM19NQVBfU0lOR0xFKQorCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHRiaS0+ZG1hX2FkZHIsIHRiaS0+bGVuLAorCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwllbHNlIGlmICh0YmktPm1hcF90eXBlID09IFZNWE5FVDNfTUFQX1BBR0UpCisJCXBjaV91bm1hcF9wYWdlKHBkZXYsIHRiaS0+ZG1hX2FkZHIsIHRiaS0+bGVuLAorCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCWVsc2UKKwkJQlVHX09OKHRiaS0+bWFwX3R5cGUgIT0gVk1YTkVUM19NQVBfTk9ORSk7CisKKwl0YmktPm1hcF90eXBlID0gVk1YTkVUM19NQVBfTk9ORTsgLyogdG8gaGVscCBkZWJ1Z2dpbmcgKi8KK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3VubWFwX3BrdCh1MzIgZW9wX2lkeCwgc3RydWN0IHZteG5ldDNfdHhfcXVldWUgKnRxLAorCQkgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGVudHJpZXMgPSAwOworCisJLyogbm8gb3V0IG9mIG9yZGVyIGNvbXBsZXRpb24gKi8KKwlCVUdfT04odHEtPmJ1Zl9pbmZvW2VvcF9pZHhdLnNvcF9pZHggIT0gdHEtPnR4X3JpbmcubmV4dDJjb21wKTsKKwlCVUdfT04odHEtPnR4X3JpbmcuYmFzZVtlb3BfaWR4XS50eGQuZW9wICE9IDEpOworCisJc2tiID0gdHEtPmJ1Zl9pbmZvW2VvcF9pZHhdLnNrYjsKKwlCVUdfT04oc2tiID09IE5VTEwpOworCXRxLT5idWZfaW5mb1tlb3BfaWR4XS5za2IgPSBOVUxMOworCisJVk1YTkVUM19JTkNfUklOR19JRFhfT05MWShlb3BfaWR4LCB0cS0+dHhfcmluZy5zaXplKTsKKworCXdoaWxlICh0cS0+dHhfcmluZy5uZXh0MmNvbXAgIT0gZW9wX2lkeCkgeworCQl2bXhuZXQzX3VubWFwX3R4X2J1Zih0cS0+YnVmX2luZm8gKyB0cS0+dHhfcmluZy5uZXh0MmNvbXAsCisJCQkJICAgICBwZGV2KTsKKworCQkvKiB1cGRhdGUgbmV4dDJjb21wIHcvbyB0eF9sb2NrLiBTaW5jZSB3ZSBhcmUgbWFya2luZyBtb3JlLAorCQkgKiBpbnN0ZWFkIG9mIGxlc3MsIHR4IHJpbmcgZW50cmllcyBhdmFpbCwgdGhlIHdvcnN0IGNhc2UgaXMKKwkJICogdGhhdCB0aGUgdHggcm91dGluZSBpbmNvcnJlY3RseSByZS1xdWV1ZXMgYSBwa3QgZHVlIHRvCisJCSAqIGluc3VmZmljaWVudCB0eCByaW5nIGVudHJpZXMuCisJCSAqLworCQl2bXhuZXQzX2NtZF9yaW5nX2Fkdl9uZXh0MmNvbXAoJnRxLT50eF9yaW5nKTsKKwkJZW50cmllcysrOworCX0KKworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIGVudHJpZXM7Cit9CisKKworc3RhdGljIGludAordm14bmV0M190cV90eF9jb21wbGV0ZShzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCisJCQlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBjb21wbGV0ZWQgPSAwOworCXVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKmdkZXNjOworCisJZ2Rlc2MgPSB0cS0+Y29tcF9yaW5nLmJhc2UgKyB0cS0+Y29tcF9yaW5nLm5leHQycHJvYzsKKwl3aGlsZSAoZ2Rlc2MtPnRjZC5nZW4gPT0gdHEtPmNvbXBfcmluZy5nZW4pIHsKKwkJY29tcGxldGVkICs9IHZteG5ldDNfdW5tYXBfcGt0KGdkZXNjLT50Y2QudHhkSWR4LCB0cSwKKwkJCQkJICAgICAgIGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXIpOworCisJCXZteG5ldDNfY29tcF9yaW5nX2Fkdl9uZXh0MnByb2MoJnRxLT5jb21wX3JpbmcpOworCQlnZGVzYyA9IHRxLT5jb21wX3JpbmcuYmFzZSArIHRxLT5jb21wX3JpbmcubmV4dDJwcm9jOworCX0KKworCWlmIChjb21wbGV0ZWQpIHsKKwkJc3Bpbl9sb2NrKCZ0cS0+dHhfbG9jayk7CisJCWlmICh1bmxpa2VseSh2bXhuZXQzX3RxX3N0b3BwZWQodHEsIGFkYXB0ZXIpICYmCisJCQkgICAgIHZteG5ldDNfY21kX3JpbmdfZGVzY19hdmFpbCgmdHEtPnR4X3JpbmcpID4KKwkJCSAgICAgVk1YTkVUM19XQUtFX1FVRVVFX1RIUkVTSE9MRCh0cSkgJiYKKwkJCSAgICAgbmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKSkgeworCQkJdm14bmV0M190cV93YWtlKHRxLCBhZGFwdGVyKTsKKwkJfQorCQlzcGluX3VubG9jaygmdHEtPnR4X2xvY2spOworCX0KKwlyZXR1cm4gY29tcGxldGVkOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3RxX2NsZWFudXAoc3RydWN0IHZteG5ldDNfdHhfcXVldWUgKnRxLAorCQkgICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJd2hpbGUgKHRxLT50eF9yaW5nLm5leHQyY29tcCAhPSB0cS0+dHhfcmluZy5uZXh0MmZpbGwpIHsKKwkJc3RydWN0IHZteG5ldDNfdHhfYnVmX2luZm8gKnRiaTsKKwkJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqZ2Rlc2M7CisKKwkJdGJpID0gdHEtPmJ1Zl9pbmZvICsgdHEtPnR4X3JpbmcubmV4dDJjb21wOworCQlnZGVzYyA9IHRxLT50eF9yaW5nLmJhc2UgKyB0cS0+dHhfcmluZy5uZXh0MmNvbXA7CisKKwkJdm14bmV0M191bm1hcF90eF9idWYodGJpLCBhZGFwdGVyLT5wZGV2KTsKKwkJaWYgKHRiaS0+c2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueSh0YmktPnNrYik7CisJCQl0YmktPnNrYiA9IE5VTEw7CisJCX0KKwkJdm14bmV0M19jbWRfcmluZ19hZHZfbmV4dDJjb21wKCZ0cS0+dHhfcmluZyk7CisJfQorCisJLyogc2FuaXR5IGNoZWNrLCB2ZXJpZnkgYWxsIGJ1ZmZlcnMgYXJlIGluZGVlZCB1bm1hcHBlZCBhbmQgZnJlZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdHEtPnR4X3Jpbmcuc2l6ZTsgaSsrKSB7CisJCUJVR19PTih0cS0+YnVmX2luZm9baV0uc2tiICE9IE5VTEwgfHwKKwkJICAgICAgIHRxLT5idWZfaW5mb1tpXS5tYXBfdHlwZSAhPSBWTVhORVQzX01BUF9OT05FKTsKKwl9CisKKwl0cS0+dHhfcmluZy5nZW4gPSBWTVhORVQzX0lOSVRfR0VOOworCXRxLT50eF9yaW5nLm5leHQyZmlsbCA9IHRxLT50eF9yaW5nLm5leHQyY29tcCA9IDA7CisKKwl0cS0+Y29tcF9yaW5nLmdlbiA9IFZNWE5FVDNfSU5JVF9HRU47CisJdHEtPmNvbXBfcmluZy5uZXh0MnByb2MgPSAwOworfQorCisKK3ZvaWQKK3ZteG5ldDNfdHFfZGVzdHJveShzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCisJCSAgIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKHRxLT50eF9yaW5nLmJhc2UpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCB0cS0+dHhfcmluZy5zaXplICoKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4RGVzYyksCisJCQkJICAgIHRxLT50eF9yaW5nLmJhc2UsIHRxLT50eF9yaW5nLmJhc2VQQSk7CisJCXRxLT50eF9yaW5nLmJhc2UgPSBOVUxMOworCX0KKwlpZiAodHEtPmRhdGFfcmluZy5iYXNlKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgdHEtPmRhdGFfcmluZy5zaXplICoKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4RGF0YURlc2MpLAorCQkJCSAgICB0cS0+ZGF0YV9yaW5nLmJhc2UsIHRxLT5kYXRhX3JpbmcuYmFzZVBBKTsKKwkJdHEtPmRhdGFfcmluZy5iYXNlID0gTlVMTDsKKwl9CisJaWYgKHRxLT5jb21wX3JpbmcuYmFzZSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHRxLT5jb21wX3Jpbmcuc2l6ZSAqCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeENvbXBEZXNjKSwKKwkJCQkgICAgdHEtPmNvbXBfcmluZy5iYXNlLCB0cS0+Y29tcF9yaW5nLmJhc2VQQSk7CisJCXRxLT5jb21wX3JpbmcuYmFzZSA9IE5VTEw7CisJfQorCWtmcmVlKHRxLT5idWZfaW5mbyk7CisJdHEtPmJ1Zl9pbmZvID0gTlVMTDsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M190cV9pbml0KHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwKKwkJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCS8qIHJlc2V0IHRoZSB0eCByaW5nIGNvbnRlbnRzIHRvIDAgYW5kIHJlc2V0IHRoZSB0eCByaW5nIHN0YXRlcyAqLworCW1lbXNldCh0cS0+dHhfcmluZy5iYXNlLCAwLCB0cS0+dHhfcmluZy5zaXplICoKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4RGVzYykpOworCXRxLT50eF9yaW5nLm5leHQyZmlsbCA9IHRxLT50eF9yaW5nLm5leHQyY29tcCA9IDA7CisJdHEtPnR4X3JpbmcuZ2VuID0gVk1YTkVUM19JTklUX0dFTjsKKworCW1lbXNldCh0cS0+ZGF0YV9yaW5nLmJhc2UsIDAsIHRxLT5kYXRhX3Jpbmcuc2l6ZSAqCisJICAgICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeERhdGFEZXNjKSk7CisKKwkvKiByZXNldCB0aGUgdHggY29tcCByaW5nIGNvbnRlbnRzIHRvIDAgYW5kIHJlc2V0IGNvbXAgcmluZyBzdGF0ZXMgKi8KKwltZW1zZXQodHEtPmNvbXBfcmluZy5iYXNlLCAwLCB0cS0+Y29tcF9yaW5nLnNpemUgKgorCSAgICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhDb21wRGVzYykpOworCXRxLT5jb21wX3JpbmcubmV4dDJwcm9jID0gMDsKKwl0cS0+Y29tcF9yaW5nLmdlbiA9IFZNWE5FVDNfSU5JVF9HRU47CisKKwkvKiByZXNldCB0aGUgYm9va2tlZXBpbmcgZGF0YSAqLworCW1lbXNldCh0cS0+YnVmX2luZm8sIDAsIHNpemVvZih0cS0+YnVmX2luZm9bMF0pICogdHEtPnR4X3Jpbmcuc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHRxLT50eF9yaW5nLnNpemU7IGkrKykKKwkJdHEtPmJ1Zl9pbmZvW2ldLm1hcF90eXBlID0gVk1YTkVUM19NQVBfTk9ORTsKKworCS8qIHN0YXRzIGFyZSBub3QgcmVzZXQgKi8KK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3RxX2NyZWF0ZShzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCisJCSAgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlCVUdfT04odHEtPnR4X3JpbmcuYmFzZSB8fCB0cS0+ZGF0YV9yaW5nLmJhc2UgfHwKKwkgICAgICAgdHEtPmNvbXBfcmluZy5iYXNlIHx8IHRxLT5idWZfaW5mbyk7CisKKwl0cS0+dHhfcmluZy5iYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgdHEtPnR4X3Jpbmcuc2l6ZQorCQkJICAgKiBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhEZXNjKSwKKwkJCSAgICZ0cS0+dHhfcmluZy5iYXNlUEEpOworCWlmICghdHEtPnR4X3JpbmcuYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgdHggcmluZ1xuIiwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWdvdG8gZXJyOworCX0KKworCXRxLT5kYXRhX3JpbmcuYmFzZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkgICAgIHRxLT5kYXRhX3Jpbmcuc2l6ZSAqCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeERhdGFEZXNjKSwKKwkJCSAgICAgJnRxLT5kYXRhX3JpbmcuYmFzZVBBKTsKKwlpZiAoIXRxLT5kYXRhX3JpbmcuYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgZGF0YSByaW5nXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCisJdHEtPmNvbXBfcmluZy5iYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCSAgICAgdHEtPmNvbXBfcmluZy5zaXplICoKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4Q29tcERlc2MpLAorCQkJICAgICAmdHEtPmNvbXBfcmluZy5iYXNlUEEpOworCWlmICghdHEtPmNvbXBfcmluZy5iYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSB0eCBjb21wIHJpbmdcbiIsCisJCSAgICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlnb3RvIGVycjsKKwl9CisKKwl0cS0+YnVmX2luZm8gPSBrY2FsbG9jKHRxLT50eF9yaW5nLnNpemUsIHNpemVvZih0cS0+YnVmX2luZm9bMF0pLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghdHEtPmJ1Zl9pbmZvKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSB0eCBidWZpbmZvXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwl2bXhuZXQzX3RxX2Rlc3Ryb3kodHEsIGFkYXB0ZXIpOworCXJldHVybiAtRU5PTUVNOworfQorCisKKy8qCisgKiAgICBzdGFydGluZyBmcm9tIHJpbmctPm5leHQyZmlsbCwgYWxsb2NhdGUgcnggYnVmZmVycyBmb3IgdGhlIGdpdmVuIHJpbmcKKyAqICAgIG9mIHRoZSByeCBxdWV1ZSBhbmQgdXBkYXRlIHRoZSByeCBkZXNjLiBzdG9wIGFmdGVyIEBudW1fdG9fYWxsb2MgYnVmZmVycworICogICAgYXJlIGFsbG9jYXRlZCBvciBhbGxvY2F0aW9uIGZhaWxzCisgKi8KKworc3RhdGljIGludAordm14bmV0M19ycV9hbGxvY19yeF9idWYoc3RydWN0IHZteG5ldDNfcnhfcXVldWUgKnJxLCB1MzIgcmluZ19pZHgsCisJCQlpbnQgbnVtX3RvX2FsbG9jLCBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBudW1fYWxsb2NhdGVkID0gMDsKKwlzdHJ1Y3Qgdm14bmV0M19yeF9idWZfaW5mbyAqcmJpX2Jhc2UgPSBycS0+YnVmX2luZm9bcmluZ19pZHhdOworCXN0cnVjdCB2bXhuZXQzX2NtZF9yaW5nICpyaW5nID0gJnJxLT5yeF9yaW5nW3JpbmdfaWR4XTsKKwl1MzIgdmFsOworCisJd2hpbGUgKG51bV9hbGxvY2F0ZWQgPCBudW1fdG9fYWxsb2MpIHsKKwkJc3RydWN0IHZteG5ldDNfcnhfYnVmX2luZm8gKnJiaTsKKwkJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqZ2Q7CisKKwkJcmJpID0gcmJpX2Jhc2UgKyByaW5nLT5uZXh0MmZpbGw7CisJCWdkID0gcmluZy0+YmFzZSArIHJpbmctPm5leHQyZmlsbDsKKworCQlpZiAocmJpLT5idWZfdHlwZSA9PSBWTVhORVQzX1JYX0JVRl9TS0IpIHsKKwkJCWlmIChyYmktPnNrYiA9PSBOVUxMKSB7CisJCQkJcmJpLT5za2IgPSBkZXZfYWxsb2Nfc2tiKHJiaS0+bGVuICsKKwkJCQkJCQkgTkVUX0lQX0FMSUdOKTsKKwkJCQlpZiAodW5saWtlbHkocmJpLT5za2IgPT0gTlVMTCkpIHsKKwkJCQkJcnEtPnN0YXRzLnJ4X2J1Zl9hbGxvY19mYWlsdXJlKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlyYmktPnNrYi0+ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJCQkJc2tiX3Jlc2VydmUocmJpLT5za2IsIE5FVF9JUF9BTElHTik7CisJCQkJcmJpLT5kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCisJCQkJCQlyYmktPnNrYi0+ZGF0YSwgcmJpLT5sZW4sCisJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJfSBlbHNlIHsKKwkJCQkvKiByeCBidWZmZXIgc2tpcHBlZCBieSB0aGUgZGV2aWNlICovCisJCQl9CisJCQl2YWwgPSBWTVhORVQzX1JYRF9CVFlQRV9IRUFEIDw8IFZNWE5FVDNfUlhEX0JUWVBFX1NISUZUOworCQl9IGVsc2UgeworCQkJQlVHX09OKHJiaS0+YnVmX3R5cGUgIT0gVk1YTkVUM19SWF9CVUZfUEFHRSB8fAorCQkJICAgICAgIHJiaS0+bGVuICAhPSBQQUdFX1NJWkUpOworCisJCQlpZiAocmJpLT5wYWdlID09IE5VTEwpIHsKKwkJCQlyYmktPnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9BVE9NSUMpOworCQkJCWlmICh1bmxpa2VseShyYmktPnBhZ2UgPT0gTlVMTCkpIHsKKwkJCQkJcnEtPnN0YXRzLnJ4X2J1Zl9hbGxvY19mYWlsdXJlKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlyYmktPmRtYV9hZGRyID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCisJCQkJCQlyYmktPnBhZ2UsIDAsIFBBR0VfU0laRSwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQl9IGVsc2UgeworCQkJCS8qIHJ4IGJ1ZmZlcnMgc2tpcHBlZCBieSB0aGUgZGV2aWNlICovCisJCQl9CisJCQl2YWwgPSBWTVhORVQzX1JYRF9CVFlQRV9CT0RZIDw8IFZNWE5FVDNfUlhEX0JUWVBFX1NISUZUOworCQl9CisKKwkJQlVHX09OKHJiaS0+ZG1hX2FkZHIgPT0gMCk7CisJCWdkLT5yeGQuYWRkciA9IHJiaS0+ZG1hX2FkZHI7CisJCWdkLT5kd29yZFsyXSA9IChyaW5nLT5nZW4gPDwgVk1YTkVUM19SWERfR0VOX1NISUZUKSB8IHZhbCB8CisJCQkJcmJpLT5sZW47CisKKwkJbnVtX2FsbG9jYXRlZCsrOworCQl2bXhuZXQzX2NtZF9yaW5nX2Fkdl9uZXh0MmZpbGwocmluZyk7CisJfQorCXJxLT51bmNvbW1pdHRlZFtyaW5nX2lkeF0gKz0gbnVtX2FsbG9jYXRlZDsKKworCWRldl9kYmcoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkiYWxsb2NfcnhfYnVmOiAlZCBhbGxvY2F0ZWQsIG5leHQyZmlsbCAldSwgbmV4dDJjb21wICIKKwkJIiV1LCB1bmNvbW1pdGVkICV1XG4iLCBudW1fYWxsb2NhdGVkLCByaW5nLT5uZXh0MmZpbGwsCisJCXJpbmctPm5leHQyY29tcCwgcnEtPnVuY29tbWl0dGVkW3JpbmdfaWR4XSk7CisKKwkvKiBzbyB0aGF0IHRoZSBkZXZpY2UgY2FuIGRpc3Rpbmd1aXNoIGEgZnVsbCByaW5nIGFuZCBhbiBlbXB0eSByaW5nICovCisJQlVHX09OKG51bV9hbGxvY2F0ZWQgIT0gMCAmJiByaW5nLT5uZXh0MmZpbGwgPT0gcmluZy0+bmV4dDJjb21wKTsKKworCXJldHVybiBudW1fYWxsb2NhdGVkOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX2FwcGVuZF9mcmFnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBWbXhuZXQzX1J4Q29tcERlc2MgKnJjZCwKKwkJICAgIHN0cnVjdCB2bXhuZXQzX3J4X2J1Zl9pbmZvICpyYmkpCit7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZyA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MgKworCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCisJQlVHX09OKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPj0gTUFYX1NLQl9GUkFHUyk7CisKKwlmcmFnLT5wYWdlID0gcmJpLT5wYWdlOworCWZyYWctPnBhZ2Vfb2Zmc2V0ID0gMDsKKwlmcmFnLT5zaXplID0gcmNkLT5sZW47CisJc2tiLT5kYXRhX2xlbiArPSBmcmFnLT5zaXplOworCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MrKzsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19tYXBfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2bXhuZXQzX3R4X2N0eCAqY3R4LAorCQlzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBkdzIsIGxlbjsKKwl1bnNpZ25lZCBsb25nIGJ1Zl9vZmZzZXQ7CisJaW50IGk7CisJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqZ2Rlc2M7CisJc3RydWN0IHZteG5ldDNfdHhfYnVmX2luZm8gKnRiaSA9IE5VTEw7CisKKwlCVUdfT04oY3R4LT5jb3B5X3NpemUgPiBza2JfaGVhZGxlbihza2IpKTsKKworCS8qIHVzZSB0aGUgcHJldmlvdXMgZ2VuIGJpdCBmb3IgdGhlIFNPUCBkZXNjICovCisJZHcyID0gKHRxLT50eF9yaW5nLmdlbiBeIDB4MSkgPDwgVk1YTkVUM19UWERfR0VOX1NISUZUOworCisJY3R4LT5zb3BfdHhkID0gdHEtPnR4X3JpbmcuYmFzZSArIHRxLT50eF9yaW5nLm5leHQyZmlsbDsKKwlnZGVzYyA9IGN0eC0+c29wX3R4ZDsgLyogYm90aCBsb29wcyBiZWxvdyBjYW4gYmUgc2tpcHBlZCAqLworCisJLyogbm8gbmVlZCB0byBtYXAgdGhlIGJ1ZmZlciBpZiBoZWFkZXJzIGFyZSBjb3BpZWQgKi8KKwlpZiAoY3R4LT5jb3B5X3NpemUpIHsKKwkJY3R4LT5zb3BfdHhkLT50eGQuYWRkciA9IHRxLT5kYXRhX3JpbmcuYmFzZVBBICsKKwkJCQkJdHEtPnR4X3JpbmcubmV4dDJmaWxsICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4RGF0YURlc2MpOworCQljdHgtPnNvcF90eGQtPmR3b3JkWzJdID0gZHcyIHwgY3R4LT5jb3B5X3NpemU7CisJCWN0eC0+c29wX3R4ZC0+ZHdvcmRbM10gPSAwOworCisJCXRiaSA9IHRxLT5idWZfaW5mbyArIHRxLT50eF9yaW5nLm5leHQyZmlsbDsKKwkJdGJpLT5tYXBfdHlwZSA9IFZNWE5FVDNfTUFQX05PTkU7CisKKwkJZGV2X2RiZygmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkidHhkWyV1XTogMHglTHggMHgleCAweCV4XG4iLAorCQkJdHEtPnR4X3JpbmcubmV4dDJmaWxsLCBjdHgtPnNvcF90eGQtPnR4ZC5hZGRyLAorCQkJY3R4LT5zb3BfdHhkLT5kd29yZFsyXSwgY3R4LT5zb3BfdHhkLT5kd29yZFszXSk7CisJCXZteG5ldDNfY21kX3JpbmdfYWR2X25leHQyZmlsbCgmdHEtPnR4X3JpbmcpOworCisJCS8qIHVzZSB0aGUgcmlnaHQgZ2VuIGZvciBub24tU09QIGRlc2MgKi8KKwkJZHcyID0gdHEtPnR4X3JpbmcuZ2VuIDw8IFZNWE5FVDNfVFhEX0dFTl9TSElGVDsKKwl9CisKKwkvKiBsaW5lYXIgcGFydCBjYW4gdXNlIG11bHRpcGxlIHR4IGRlc2MgaWYgaXQncyBiaWcgKi8KKwlsZW4gPSBza2JfaGVhZGxlbihza2IpIC0gY3R4LT5jb3B5X3NpemU7CisJYnVmX29mZnNldCA9IGN0eC0+Y29weV9zaXplOworCXdoaWxlIChsZW4pIHsKKwkJdTMyIGJ1Zl9zaXplOworCisJCWJ1Zl9zaXplID0gbGVuID4gVk1YTkVUM19NQVhfVFhfQlVGX1NJWkUgPworCQkJICAgVk1YTkVUM19NQVhfVFhfQlVGX1NJWkUgOiBsZW47CisKKwkJdGJpID0gdHEtPmJ1Zl9pbmZvICsgdHEtPnR4X3JpbmcubmV4dDJmaWxsOworCQl0YmktPm1hcF90eXBlID0gVk1YTkVUM19NQVBfU0lOR0xFOworCQl0YmktPmRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKKwkJCQlza2ItPmRhdGEgKyBidWZfb2Zmc2V0LCBidWZfc2l6ZSwKKwkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKworCQl0YmktPmxlbiA9IGJ1Zl9zaXplOyAvKiB0aGlzIGF1dG9tYXRpY2FsbHkgY29udmVydCAyXjE0IHRvIDAgKi8KKworCQlnZGVzYyA9IHRxLT50eF9yaW5nLmJhc2UgKyB0cS0+dHhfcmluZy5uZXh0MmZpbGw7CisJCUJVR19PTihnZGVzYy0+dHhkLmdlbiA9PSB0cS0+dHhfcmluZy5nZW4pOworCisJCWdkZXNjLT50eGQuYWRkciA9IHRiaS0+ZG1hX2FkZHI7CisJCWdkZXNjLT5kd29yZFsyXSA9IGR3MiB8IGJ1Zl9zaXplOworCQlnZGVzYy0+ZHdvcmRbM10gPSAwOworCisJCWRldl9kYmcoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJInR4ZFsldV06IDB4JUx4IDB4JXggMHgleFxuIiwKKwkJCXRxLT50eF9yaW5nLm5leHQyZmlsbCwgZ2Rlc2MtPnR4ZC5hZGRyLAorCQkJZ2Rlc2MtPmR3b3JkWzJdLCBnZGVzYy0+ZHdvcmRbM10pOworCQl2bXhuZXQzX2NtZF9yaW5nX2Fkdl9uZXh0MmZpbGwoJnRxLT50eF9yaW5nKTsKKwkJZHcyID0gdHEtPnR4X3JpbmcuZ2VuIDw8IFZNWE5FVDNfVFhEX0dFTl9TSElGVDsKKworCQlsZW4gLT0gYnVmX3NpemU7CisJCWJ1Zl9vZmZzZXQgKz0gYnVmX3NpemU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgeworCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisKKwkJdGJpID0gdHEtPmJ1Zl9pbmZvICsgdHEtPnR4X3JpbmcubmV4dDJmaWxsOworCQl0YmktPm1hcF90eXBlID0gVk1YTkVUM19NQVBfUEFHRTsKKwkJdGJpLT5kbWFfYWRkciA9IHBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCBmcmFnLT5wYWdlLAorCQkJCQkgICAgIGZyYWctPnBhZ2Vfb2Zmc2V0LCBmcmFnLT5zaXplLAorCQkJCQkgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCXRiaS0+bGVuID0gZnJhZy0+c2l6ZTsKKworCQlnZGVzYyA9IHRxLT50eF9yaW5nLmJhc2UgKyB0cS0+dHhfcmluZy5uZXh0MmZpbGw7CisJCUJVR19PTihnZGVzYy0+dHhkLmdlbiA9PSB0cS0+dHhfcmluZy5nZW4pOworCisJCWdkZXNjLT50eGQuYWRkciA9IHRiaS0+ZG1hX2FkZHI7CisJCWdkZXNjLT5kd29yZFsyXSA9IGR3MiB8IGZyYWctPnNpemU7CisJCWdkZXNjLT5kd29yZFszXSA9IDA7CisKKwkJZGV2X2RiZygmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkidHhkWyV1XTogMHglbGx1ICV1ICV1XG4iLAorCQkJdHEtPnR4X3JpbmcubmV4dDJmaWxsLCBnZGVzYy0+dHhkLmFkZHIsCisJCQlnZGVzYy0+ZHdvcmRbMl0sIGdkZXNjLT5kd29yZFszXSk7CisJCXZteG5ldDNfY21kX3JpbmdfYWR2X25leHQyZmlsbCgmdHEtPnR4X3JpbmcpOworCQlkdzIgPSB0cS0+dHhfcmluZy5nZW4gPDwgVk1YTkVUM19UWERfR0VOX1NISUZUOworCX0KKworCWN0eC0+ZW9wX3R4ZCA9IGdkZXNjOworCisJLyogc2V0IHRoZSBsYXN0IGJ1Zl9pbmZvIGZvciB0aGUgcGt0ICovCisJdGJpLT5za2IgPSBza2I7CisJdGJpLT5zb3BfaWR4ID0gY3R4LT5zb3BfdHhkIC0gdHEtPnR4X3JpbmcuYmFzZTsKK30KKworCisvKgorICogICAgcGFyc2UgYW5kIGNvcHkgcmVsZXZhbnQgcHJvdG9jb2wgaGVhZGVyczoKKyAqICAgICAgRm9yIGEgdHNvIHBrdCwgcmVsZXZhbnQgaGVhZGVycyBhcmUgTDIvMy80IGluY2x1ZGluZyBvcHRpb25zCisgKiAgICAgIEZvciBhIHBrdCByZXF1ZXN0aW5nIGNzdW0gb2ZmbG9hZGluZywgdGhleSBhcmUgTDIvMyBhbmQgbWF5IGluY2x1ZGUgTDQKKyAqICAgICAgaWYgaXQncyBhIFRDUC9VRFAgcGt0CisgKgorICogUmV0dXJuczoKKyAqICAgIC0xOiAgZXJyb3IgaGFwcGVucyBkdXJpbmcgcGFyc2luZworICogICAgIDA6ICBwcm90b2NvbCBoZWFkZXJzIHBhcnNlZCwgYnV0IHRvbyBiaWcgdG8gYmUgY29waWVkCisgKiAgICAgMTogIHByb3RvY29sIGhlYWRlcnMgcGFyc2VkIGFuZCBjb3BpZWQKKyAqCisgKiBPdGhlciBlZmZlY3RzOgorICogICAgMS4gcmVsYXRlZCAqY3R4IGZpZWxkcyBhcmUgdXBkYXRlZC4KKyAqICAgIDIuIGN0eC0+Y29weV9zaXplIGlzICMgb2YgYnl0ZXMgY29waWVkCisgKiAgICAzLiB0aGUgcG9ydGlvbiBjb3BpZWQgaXMgZ3VhcmFudGVlZCB0byBiZSBpbiB0aGUgbGluZWFyIHBhcnQKKyAqCisgKi8KK3N0YXRpYyBpbnQKK3ZteG5ldDNfcGFyc2VfYW5kX2NvcHlfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwKKwkJCSAgIHN0cnVjdCB2bXhuZXQzX3R4X2N0eCAqY3R4LAorCQkJICAgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgVm14bmV0M19UeERhdGFEZXNjICp0ZGQ7CisKKwlpZiAoY3R4LT5tc3MpIHsKKwkJY3R4LT5ldGhfaXBfaGRyX3NpemUgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCQljdHgtPmw0X2hkcl9zaXplID0gKChzdHJ1Y3QgdGNwaGRyICopCisJCQkJICAgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSktPmRvZmYgKiA0OworCQljdHgtPmNvcHlfc2l6ZSA9IGN0eC0+ZXRoX2lwX2hkcl9zaXplICsgY3R4LT5sNF9oZHJfc2l6ZTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgcHVsbF9zaXplOworCisJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCQljdHgtPmV0aF9pcF9oZHJfc2l6ZSA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CisKKwkJCWlmIChjdHgtPmlwdjQpIHsKKwkJCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikKKwkJCQkJCSAgICBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKKwkJCQlpZiAoaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgeworCQkJCQlwdWxsX3NpemUgPSBjdHgtPmV0aF9pcF9oZHJfc2l6ZSArCisJCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOworCisJCQkJCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsCisJCQkJCQkJCXB1bGxfc2l6ZSkpKSB7CisJCQkJCQlnb3RvIGVycjsKKwkJCQkJfQorCQkJCQljdHgtPmw0X2hkcl9zaXplID0gKChzdHJ1Y3QgdGNwaGRyICopCisJCQkJCSAgIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikpLT5kb2ZmICogNDsKKwkJCQl9IGVsc2UgaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKKwkJCQkJY3R4LT5sNF9oZHJfc2l6ZSA9CisJCQkJCQkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQkJCX0gZWxzZSB7CisJCQkJCWN0eC0+bDRfaGRyX3NpemUgPSAwOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogZm9yIHNpbXBsaWNpdHksIGRvbid0IGNvcHkgTDQgaGVhZGVycyAqLworCQkJCWN0eC0+bDRfaGRyX3NpemUgPSAwOworCQkJfQorCQkJY3R4LT5jb3B5X3NpemUgPSBjdHgtPmV0aF9pcF9oZHJfc2l6ZSArCisJCQkJCSBjdHgtPmw0X2hkcl9zaXplOworCQl9IGVsc2UgeworCQkJY3R4LT5ldGhfaXBfaGRyX3NpemUgPSAwOworCQkJY3R4LT5sNF9oZHJfc2l6ZSA9IDA7CisJCQkvKiBjb3B5IGFzIG11Y2ggYXMgYWxsb3dlZCAqLworCQkJY3R4LT5jb3B5X3NpemUgPSBtaW4oKHVuc2lnbmVkIGludClWTVhORVQzX0hEUl9DT1BZX1NJWkUKKwkJCQkJICAgICAsIHNrYl9oZWFkbGVuKHNrYikpOworCQl9CisKKwkJLyogbWFrZSBzdXJlIGhlYWRlcnMgYXJlIGFjY2Vzc2libGUgZGlyZWN0bHkgKi8KKwkJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgY3R4LT5jb3B5X3NpemUpKSkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmICh1bmxpa2VseShjdHgtPmNvcHlfc2l6ZSA+IFZNWE5FVDNfSERSX0NPUFlfU0laRSkpIHsKKwkJdHEtPnN0YXRzLm92ZXJzaXplZF9oZHIrKzsKKwkJY3R4LT5jb3B5X3NpemUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwl0ZGQgPSB0cS0+ZGF0YV9yaW5nLmJhc2UgKyB0cS0+dHhfcmluZy5uZXh0MmZpbGw7CisKKwltZW1jcHkodGRkLT5kYXRhLCBza2ItPmRhdGEsIGN0eC0+Y29weV9zaXplKTsKKwlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJImNvcHkgJXUgYnl0ZXMgdG8gZGF0YVJpbmdbJXVdXG4iLAorCQljdHgtPmNvcHlfc2l6ZSwgdHEtPnR4X3JpbmcubmV4dDJmaWxsKTsKKwlyZXR1cm4gMTsKKworZXJyOgorCXJldHVybiAtMTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19wcmVwYXJlX3RzbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgc3RydWN0IHZteG5ldDNfdHhfY3R4ICpjdHgpCit7CisJc3RydWN0IHRjcGhkciAqdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwlpZiAoY3R4LT5pcHY0KSB7CisJCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpOworCQlpcGgtPmNoZWNrID0gMDsKKwkJdGNwaC0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwgMCwKKwkJCQkJCSBJUFBST1RPX1RDUCwgMCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGlwdjZoZHIgKmlwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpOworCQl0Y3BoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLCAwLAorCQkJCQkgICAgICAgSVBQUk9UT19UQ1AsIDApOworCX0KK30KKworCisvKgorICogVHJhbnNtaXRzIGEgcGt0IHRocnUgYSBnaXZlbiB0cQorICogUmV0dXJuczoKKyAqICAgIE5FVERFVl9UWF9PSzogICAgICBkZXNjcmlwdG9ycyBhcmUgc2V0dXAgc3VjY2Vzc2Z1bGx5CisgKiAgICBORVRERVZfVFhfT0s6ICAgICAgZXJyb3Igb2NjdXJlZCwgdGhlIHBrdCBpcyBkcm9wcGVkCisgKiAgICBORVRERVZfVFhfQlVTWTogICAgdHggcmluZyBpcyBmdWxsLCBxdWV1ZSBpcyBzdG9wcGVkCisgKgorICogU2lkZS1lZmZlY3RzOgorICogICAgMS4gdHggcmluZyBtYXkgYmUgY2hhbmdlZAorICogICAgMi4gdHEgc3RhdHMgbWF5IGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkKKyAqICAgIDMuIHNoYXJlZC0+dHhOdW1EZWZlcnJlZCBtYXkgYmUgdXBkYXRlZAorICovCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfdHFfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCisJCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJldDsKKwl1MzIgY291bnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgdm14bmV0M190eF9jdHggY3R4OworCXVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKmdkZXNjOworCisJLyogY29uc2VydmF0aXZlbHkgZXN0aW1hdGUgIyBvZiBkZXNjcmlwdG9ycyB0byB1c2UgKi8KKwljb3VudCA9IFZNWE5FVDNfVFhEX05FRURFRChza2JfaGVhZGxlbihza2IpKSArCisJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCisJY3R4LmlwdjQgPSAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X250b2hzKEVUSF9QX0lQKSk7CisKKwljdHgubXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKKwlpZiAoY3R4Lm1zcykgeworCQlpZiAoc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSkgeworCQkJaWYgKHVubGlrZWx5KHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLAorCQkJCQkJICAgICAgR0ZQX0FUT01JQykgIT0gMCkpIHsKKwkJCQl0cS0+c3RhdHMuZHJvcF90c28rKzsKKwkJCQlnb3RvIGRyb3BfcGt0OworCQkJfQorCQkJdHEtPnN0YXRzLmNvcHlfc2tiX2hlYWRlcisrOworCQl9CisJCXZteG5ldDNfcHJlcGFyZV90c28oc2tiLCAmY3R4KTsKKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoY291bnQgPiBWTVhORVQzX01BWF9UWERfUEVSX1BLVCkpIHsKKworCQkJLyogbm9uLXRzbyBwa3RzIG11c3Qgbm90IHVzZSBtb3JlIHRoYW4KKwkJCSAqIFZNWE5FVDNfTUFYX1RYRF9QRVJfUEtUIGVudHJpZXMKKwkJCSAqLworCQkJaWYgKHNrYl9saW5lYXJpemUoc2tiKSAhPSAwKSB7CisJCQkJdHEtPnN0YXRzLmRyb3BfdG9vX21hbnlfZnJhZ3MrKzsKKwkJCQlnb3RvIGRyb3BfcGt0OworCQkJfQorCQkJdHEtPnN0YXRzLmxpbmVhcml6ZWQrKzsKKworCQkJLyogcmVjYWxjdWxhdGUgdGhlICMgb2YgZGVzY3JpcHRvcnMgdG8gdXNlICovCisJCQljb3VudCA9IFZNWE5FVDNfVFhEX05FRURFRChza2JfaGVhZGxlbihza2IpKSArIDE7CisJCX0KKwl9CisKKwlyZXQgPSB2bXhuZXQzX3BhcnNlX2FuZF9jb3B5X2hkcihza2IsIHRxLCAmY3R4LCBhZGFwdGVyKTsKKwlpZiAocmV0ID49IDApIHsKKwkJQlVHX09OKHJldCA8PSAwICYmIGN0eC5jb3B5X3NpemUgIT0gMCk7CisJCS8qIGhkcnMgcGFyc2VkLCBjaGVjayBhZ2FpbnN0IG90aGVyIGxpbWl0cyAqLworCQlpZiAoY3R4Lm1zcykgeworCQkJaWYgKHVubGlrZWx5KGN0eC5ldGhfaXBfaGRyX3NpemUgKyBjdHgubDRfaGRyX3NpemUgPgorCQkJCSAgICAgVk1YTkVUM19NQVhfVFhfQlVGX1NJWkUpKSB7CisJCQkJZ290byBoZHJfdG9vX2JpZzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCQkJaWYgKHVubGlrZWx5KGN0eC5ldGhfaXBfaGRyX3NpemUgKworCQkJCQkgICAgIHNrYi0+Y3N1bV9vZmZzZXQgPgorCQkJCQkgICAgIFZNWE5FVDNfTUFYX0NTVU1fT0ZGU0VUKSkgeworCQkJCQlnb3RvIGhkcl90b29fYmlnOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXRxLT5zdGF0cy5kcm9wX2hkcl9pbnNwZWN0X2VycisrOworCQlnb3RvIGRyb3BfcGt0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cS0+dHhfbG9jaywgZmxhZ3MpOworCisJaWYgKGNvdW50ID4gdm14bmV0M19jbWRfcmluZ19kZXNjX2F2YWlsKCZ0cS0+dHhfcmluZykpIHsKKwkJdHEtPnN0YXRzLnR4X3JpbmdfZnVsbCsrOworCQlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCSJ0eCBxdWV1ZSBzdG9wcGVkIG9uICVzLCBuZXh0MmNvbXAgJXUiCisJCQkiIG5leHQyZmlsbCAldVxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJdHEtPnR4X3JpbmcubmV4dDJjb21wLCB0cS0+dHhfcmluZy5uZXh0MmZpbGwpOworCisJCXZteG5ldDNfdHFfc3RvcCh0cSwgYWRhcHRlcik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRxLT50eF9sb2NrLCBmbGFncyk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwkvKiBmaWxsIHR4IGRlc2NzIHJlbGF0ZWQgdG8gYWRkciAmIGxlbiAqLworCXZteG5ldDNfbWFwX3BrdChza2IsICZjdHgsIHRxLCBhZGFwdGVyLT5wZGV2LCBhZGFwdGVyKTsKKworCS8qIHNldHVwIHRoZSBFT1AgZGVzYyAqLworCWN0eC5lb3BfdHhkLT5kd29yZFszXSA9IFZNWE5FVDNfVFhEX0NRIHwgVk1YTkVUM19UWERfRU9QOworCisJLyogc2V0dXAgdGhlIFNPUCBkZXNjICovCisJZ2Rlc2MgPSBjdHguc29wX3R4ZDsKKwlpZiAoY3R4Lm1zcykgeworCQlnZGVzYy0+dHhkLmhsZW4gPSBjdHguZXRoX2lwX2hkcl9zaXplICsgY3R4Lmw0X2hkcl9zaXplOworCQlnZGVzYy0+dHhkLm9tID0gVk1YTkVUM19PTV9UU087CisJCWdkZXNjLT50eGQubXNzY29mID0gY3R4Lm1zczsKKwkJdHEtPnNoYXJlZC0+dHhOdW1EZWZlcnJlZCArPSAoc2tiLT5sZW4gLSBnZGVzYy0+dHhkLmhsZW4gKworCQkJCQkgICAgIGN0eC5tc3MgLSAxKSAvIGN0eC5tc3M7CisJfSBlbHNlIHsKKwkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJCWdkZXNjLT50eGQuaGxlbiA9IGN0eC5ldGhfaXBfaGRyX3NpemU7CisJCQlnZGVzYy0+dHhkLm9tID0gVk1YTkVUM19PTV9DU1VNOworCQkJZ2Rlc2MtPnR4ZC5tc3Njb2YgPSBjdHguZXRoX2lwX2hkcl9zaXplICsKKwkJCQkJICAgIHNrYi0+Y3N1bV9vZmZzZXQ7CisJCX0gZWxzZSB7CisJCQlnZGVzYy0+dHhkLm9tID0gMDsKKwkJCWdkZXNjLT50eGQubXNzY29mID0gMDsKKwkJfQorCQl0cS0+c2hhcmVkLT50eE51bURlZmVycmVkKys7CisJfQorCisJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCQlnZGVzYy0+dHhkLnRpID0gMTsKKwkJZ2Rlc2MtPnR4ZC50Y2kgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwl9CisKKwl3bWIoKTsKKworCS8qIGZpbmFsbHkgZmxpcHMgdGhlIEdFTiBiaXQgb2YgdGhlIFNPUCBkZXNjICovCisJZ2Rlc2MtPmR3b3JkWzJdIF49IFZNWE5FVDNfVFhEX0dFTjsKKwlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJInR4ZFsldV06IFNPUCAweCVMeCAweCV4IDB4JXhcbiIsCisJCSh1MzIpKCh1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICopY3R4LnNvcF90eGQgLQorCQl0cS0+dHhfcmluZy5iYXNlKSwgZ2Rlc2MtPnR4ZC5hZGRyLCBnZGVzYy0+ZHdvcmRbMl0sCisJCWdkZXNjLT5kd29yZFszXSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cS0+dHhfbG9jaywgZmxhZ3MpOworCisJaWYgKHRxLT5zaGFyZWQtPnR4TnVtRGVmZXJyZWQgPj0gdHEtPnNoYXJlZC0+dHhUaHJlc2hvbGQpIHsKKwkJdHEtPnNoYXJlZC0+dHhOdW1EZWZlcnJlZCA9IDA7CisJCVZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfVFhQUk9ELAorCQkJCSAgICAgICB0cS0+dHhfcmluZy5uZXh0MmZpbGwpOworCX0KKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCXJldHVybiBORVRERVZfVFhfT0s7CisKK2hkcl90b29fYmlnOgorCXRxLT5zdGF0cy5kcm9wX292ZXJzaXplZF9oZHIrKzsKK2Ryb3BfcGt0OgorCXRxLT5zdGF0cy5kcm9wX3RvdGFsKys7CisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKKworc3RhdGljIG5ldGRldl90eF90Cit2bXhuZXQzX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEgPSAmYWRhcHRlci0+dHhfcXVldWU7CisKKwlyZXR1cm4gdm14bmV0M190cV94bWl0KHNrYiwgdHEsIGFkYXB0ZXIsIG5ldGRldik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfcnhfY3N1bShzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQl1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICpnZGVzYykKK3sKKwlpZiAoIWdkZXNjLT5yY2QuY25jICYmIGFkYXB0ZXItPnJ4Y3N1bSkgeworCQkvKiB0eXBpY2FsIGNhc2U6IFRDUC9VRFAgb3ZlciBJUCBhbmQgYm90aCBjc3VtcyBhcmUgY29ycmVjdCAqLworCQlpZiAoKGdkZXNjLT5kd29yZFszXSAmIFZNWE5FVDNfUkNEX0NTVU1fT0spID09CisJCQkJCQkJVk1YTkVUM19SQ0RfQ1NVTV9PSykgeworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCUJVR19PTighKGdkZXNjLT5yY2QudGNwIHx8IGdkZXNjLT5yY2QudWRwKSk7CisJCQlCVUdfT04oIShnZGVzYy0+cmNkLnY0ICB8fCBnZGVzYy0+cmNkLnY2KSk7CisJCQlCVUdfT04oZ2Rlc2MtPnJjZC5mcmcpOworCQl9IGVsc2UgeworCQkJaWYgKGdkZXNjLT5yY2QuY3N1bSkgeworCQkJCXNrYi0+Y3N1bSA9IGh0b25zKGdkZXNjLT5yY2QuY3N1bSk7CisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOworCQkJfSBlbHNlIHsKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3J4X2Vycm9yKHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwgc3RydWN0IFZteG5ldDNfUnhDb21wRGVzYyAqcmNkLAorCQkgc3RydWN0IHZteG5ldDNfcnhfY3R4ICpjdHgsICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXJxLT5zdGF0cy5kcm9wX2VycisrOworCWlmICghcmNkLT5mY3MpCisJCXJxLT5zdGF0cy5kcm9wX2ZjcysrOworCisJcnEtPnN0YXRzLmRyb3BfdG90YWwrKzsKKworCS8qCisJICogV2UgZG8gbm90IHVubWFwIGFuZCBjaGFpbiB0aGUgcnggYnVmZmVyIHRvIHRoZSBza2IuCisJICogV2UgYmFzaWNhbGx5IHByZXRlbmQgdGhpcyBidWZmZXIgaXMgbm90IHVzZWQgYW5kIHdpbGwgYmUgcmVjeWNsZWQKKwkgKiBieSB2bXhuZXQzX3JxX2FsbG9jX3J4X2J1ZigpCisJICovCisKKwkvKgorCSAqIGN0eC0+c2tiIG1heSBiZSBOVUxMIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGFuZCB0aGUgb25seSBvbmUKKwkgKiBkZXNjIGZvciB0aGUgcGt0CisJICovCisJaWYgKGN0eC0+c2tiKQorCQlkZXZfa2ZyZWVfc2tiX2lycShjdHgtPnNrYik7CisKKwljdHgtPnNrYiA9IE5VTEw7Cit9CisKKworc3RhdGljIGludAordm14bmV0M19ycV9yeF9jb21wbGV0ZShzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAqcnEsCisJCSAgICAgICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCBpbnQgcXVvdGEpCit7CisJc3RhdGljIHUzMiByeHByb2RfcmVnWzJdID0ge1ZNWE5FVDNfUkVHX1JYUFJPRCwgVk1YTkVUM19SRUdfUlhQUk9EMn07CisJdTMyIG51bV9yeGQgPSAwOworCXN0cnVjdCBWbXhuZXQzX1J4Q29tcERlc2MgKnJjZDsKKwlzdHJ1Y3Qgdm14bmV0M19yeF9jdHggKmN0eCA9ICZycS0+cnhfY3R4OworCisJcmNkID0gJnJxLT5jb21wX3JpbmcuYmFzZVtycS0+Y29tcF9yaW5nLm5leHQycHJvY10ucmNkOworCXdoaWxlIChyY2QtPmdlbiA9PSBycS0+Y29tcF9yaW5nLmdlbikgeworCQlzdHJ1Y3Qgdm14bmV0M19yeF9idWZfaW5mbyAqcmJpOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlpbnQgbnVtX3RvX2FsbG9jOworCQlzdHJ1Y3QgVm14bmV0M19SeERlc2MgKnJ4ZDsKKwkJdTMyIGlkeCwgcmluZ19pZHg7CisKKwkJaWYgKG51bV9yeGQgPj0gcXVvdGEpIHsKKwkJCS8qIHdlIG1heSBzdG9wIGV2ZW4gYmVmb3JlIHdlIHNlZSB0aGUgRU9QIGRlc2Mgb2YKKwkJCSAqIHRoZSBjdXJyZW50IHBrdAorCQkJICovCisJCQlicmVhazsKKwkJfQorCQludW1fcnhkKys7CisKKwkJaWR4ID0gcmNkLT5yeGRJZHg7CisJCXJpbmdfaWR4ID0gcmNkLT5ycUlEID09IHJxLT5xaWQgPyAwIDogMTsKKworCQlyeGQgPSAmcnEtPnJ4X3JpbmdbcmluZ19pZHhdLmJhc2VbaWR4XS5yeGQ7CisJCXJiaSA9IHJxLT5idWZfaW5mb1tyaW5nX2lkeF0gKyBpZHg7CisKKwkJQlVHX09OKHJ4ZC0+YWRkciAhPSByYmktPmRtYV9hZGRyIHx8IHJ4ZC0+bGVuICE9IHJiaS0+bGVuKTsKKworCQlpZiAodW5saWtlbHkocmNkLT5lb3AgJiYgcmNkLT5lcnIpKSB7CisJCQl2bXhuZXQzX3J4X2Vycm9yKHJxLCByY2QsIGN0eCwgYWRhcHRlcik7CisJCQlnb3RvIHJjZF9kb25lOworCQl9CisKKwkJaWYgKHJjZC0+c29wKSB7IC8qIGZpcnN0IGJ1ZiBvZiB0aGUgcGt0ICovCisJCQlCVUdfT04ocnhkLT5idHlwZSAhPSBWTVhORVQzX1JYRF9CVFlQRV9IRUFEIHx8CisJCQkgICAgICAgcmNkLT5ycUlEICE9IHJxLT5xaWQpOworCisJCQlCVUdfT04ocmJpLT5idWZfdHlwZSAhPSBWTVhORVQzX1JYX0JVRl9TS0IpOworCQkJQlVHX09OKGN0eC0+c2tiICE9IE5VTEwgfHwgcmJpLT5za2IgPT0gTlVMTCk7CisKKwkJCWlmICh1bmxpa2VseShyY2QtPmxlbiA9PSAwKSkgeworCQkJCS8qIFByZXRlbmQgdGhlIHJ4IGJ1ZmZlciBpcyBza2lwcGVkLiAqLworCQkJCUJVR19PTighKHJjZC0+c29wICYmIHJjZC0+ZW9wKSk7CisJCQkJZGV2X2RiZygmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJCSJyeFJpbmdbJXVdWyV1XSAwIGxlbmd0aFxuIiwKKwkJCQkJcmluZ19pZHgsIGlkeCk7CisJCQkJZ290byByY2RfZG9uZTsKKwkJCX0KKworCQkJY3R4LT5za2IgPSByYmktPnNrYjsKKwkJCXJiaS0+c2tiID0gTlVMTDsKKworCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCByYmktPmRtYV9hZGRyLCByYmktPmxlbiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJCXNrYl9wdXQoY3R4LT5za2IsIHJjZC0+bGVuKTsKKwkJfSBlbHNlIHsKKwkJCUJVR19PTihjdHgtPnNrYiA9PSBOVUxMKTsKKwkJCS8qIG5vbiBTT1AgYnVmZmVyIG11c3QgYmUgdHlwZSAxIGluIG1vc3QgY2FzZXMgKi8KKwkJCWlmIChyYmktPmJ1Zl90eXBlID09IFZNWE5FVDNfUlhfQlVGX1BBR0UpIHsKKwkJCQlCVUdfT04ocnhkLT5idHlwZSAhPSBWTVhORVQzX1JYRF9CVFlQRV9CT0RZKTsKKworCQkJCWlmIChyY2QtPmxlbikgeworCQkJCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgICAgIHJiaS0+ZG1hX2FkZHIsIHJiaS0+bGVuLAorCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJCQkJdm14bmV0M19hcHBlbmRfZnJhZyhjdHgtPnNrYiwgcmNkLCByYmkpOworCQkJCQlyYmktPnBhZ2UgPSBOVUxMOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBUaGUgb25seSB0aW1lIGEgbm9uLVNPUCBidWZmZXIgaXMgdHlwZSAwIGlzCisJCQkJICogd2hlbiBpdCdzIEVPUCBhbmQgZXJyb3IgZmxhZyBpcyByYWlzZWQsIHdoaWNoCisJCQkJICogaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLgorCQkJCSAqLworCQkJCUJVR19PTih0cnVlKTsKKwkJCX0KKwkJfQorCisJCXNrYiA9IGN0eC0+c2tiOworCQlpZiAocmNkLT5lb3ApIHsKKwkJCXNrYi0+bGVuICs9IHNrYi0+ZGF0YV9sZW47CisJCQlza2ItPnRydWVzaXplICs9IHNrYi0+ZGF0YV9sZW47CisKKwkJCXZteG5ldDNfcnhfY3N1bShhZGFwdGVyLCBza2IsCisJCQkJCSh1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICopcmNkKTsKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGFkYXB0ZXItPm5ldGRldik7CisKKwkJCWlmICh1bmxpa2VseShhZGFwdGVyLT52bGFuX2dycCAmJiByY2QtPnRzKSkgeworCQkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsCisJCQkJCQlhZGFwdGVyLT52bGFuX2dycCwgcmNkLT50Y2kpOworCQkJfSBlbHNlIHsKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJfQorCisJCQlhZGFwdGVyLT5uZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQkJY3R4LT5za2IgPSBOVUxMOworCQl9CisKK3JjZF9kb25lOgorCQkvKiBkZXZpY2UgbWF5IHNraXAgc29tZSByeCBkZXNjcyAqLworCQlycS0+cnhfcmluZ1tyaW5nX2lkeF0ubmV4dDJjb21wID0gaWR4OworCQlWTVhORVQzX0lOQ19SSU5HX0lEWF9PTkxZKHJxLT5yeF9yaW5nW3JpbmdfaWR4XS5uZXh0MmNvbXAsCisJCQkJCSAgcnEtPnJ4X3JpbmdbcmluZ19pZHhdLnNpemUpOworCisJCS8qIHJlZmlsbCByeCBidWZmZXJzIGZyZXF1ZW50bHkgdG8gYXZvaWQgc3RhcnZpbmcgdGhlIGgvdyAqLworCQludW1fdG9fYWxsb2MgPSB2bXhuZXQzX2NtZF9yaW5nX2Rlc2NfYXZhaWwocnEtPnJ4X3JpbmcgKworCQkJCQkJCSAgIHJpbmdfaWR4KTsKKwkJaWYgKHVubGlrZWx5KG51bV90b19hbGxvYyA+IFZNWE5FVDNfUlhfQUxMT0NfVEhSRVNIT0xEKHJxLAorCQkJCQkJCXJpbmdfaWR4LCBhZGFwdGVyKSkpIHsKKwkJCXZteG5ldDNfcnFfYWxsb2NfcnhfYnVmKHJxLCByaW5nX2lkeCwgbnVtX3RvX2FsbG9jLAorCQkJCQkJYWRhcHRlcik7CisKKwkJCS8qIGlmIG5lZWRlZCwgdXBkYXRlIHRoZSByZWdpc3RlciAqLworCQkJaWYgKHVubGlrZWx5KHJxLT5zaGFyZWQtPnVwZGF0ZVJ4UHJvZCkpIHsKKwkJCQlWTVhORVQzX1dSSVRFX0JBUjBfUkVHKGFkYXB0ZXIsCisJCQkJCXJ4cHJvZF9yZWdbcmluZ19pZHhdICsgcnEtPnFpZCAqIDgsCisJCQkJCXJxLT5yeF9yaW5nW3JpbmdfaWR4XS5uZXh0MmZpbGwpOworCQkJCXJxLT51bmNvbW1pdHRlZFtyaW5nX2lkeF0gPSAwOworCQkJfQorCQl9CisKKwkJdm14bmV0M19jb21wX3JpbmdfYWR2X25leHQycHJvYygmcnEtPmNvbXBfcmluZyk7CisJCXJjZCA9ICZycS0+Y29tcF9yaW5nLmJhc2VbcnEtPmNvbXBfcmluZy5uZXh0MnByb2NdLnJjZDsKKwl9CisKKwlyZXR1cm4gbnVtX3J4ZDsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19ycV9jbGVhbnVwKHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwKKwkJICAgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgaSwgcmluZ19pZHg7CisJc3RydWN0IFZteG5ldDNfUnhEZXNjICpyeGQ7CisKKwlmb3IgKHJpbmdfaWR4ID0gMDsgcmluZ19pZHggPCAyOyByaW5nX2lkeCsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBycS0+cnhfcmluZ1tyaW5nX2lkeF0uc2l6ZTsgaSsrKSB7CisJCQlyeGQgPSAmcnEtPnJ4X3JpbmdbcmluZ19pZHhdLmJhc2VbaV0ucnhkOworCisJCQlpZiAocnhkLT5idHlwZSA9PSBWTVhORVQzX1JYRF9CVFlQRV9IRUFEICYmCisJCQkJCXJxLT5idWZfaW5mb1tyaW5nX2lkeF1baV0uc2tiKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCByeGQtPmFkZHIsCisJCQkJCQkgcnhkLT5sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJZGV2X2tmcmVlX3NrYihycS0+YnVmX2luZm9bcmluZ19pZHhdW2ldLnNrYik7CisJCQkJcnEtPmJ1Zl9pbmZvW3JpbmdfaWR4XVtpXS5za2IgPSBOVUxMOworCQkJfSBlbHNlIGlmIChyeGQtPmJ0eXBlID09IFZNWE5FVDNfUlhEX0JUWVBFX0JPRFkgJiYKKwkJCQkJcnEtPmJ1Zl9pbmZvW3JpbmdfaWR4XVtpXS5wYWdlKSB7CisJCQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgcnhkLT5hZGRyLAorCQkJCQkgICAgICAgcnhkLT5sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJcHV0X3BhZ2UocnEtPmJ1Zl9pbmZvW3JpbmdfaWR4XVtpXS5wYWdlKTsKKwkJCQlycS0+YnVmX2luZm9bcmluZ19pZHhdW2ldLnBhZ2UgPSBOVUxMOworCQkJfQorCQl9CisKKwkJcnEtPnJ4X3JpbmdbcmluZ19pZHhdLmdlbiA9IFZNWE5FVDNfSU5JVF9HRU47CisJCXJxLT5yeF9yaW5nW3JpbmdfaWR4XS5uZXh0MmZpbGwgPQorCQkJCQlycS0+cnhfcmluZ1tyaW5nX2lkeF0ubmV4dDJjb21wID0gMDsKKwkJcnEtPnVuY29tbWl0dGVkW3JpbmdfaWR4XSA9IDA7CisJfQorCisJcnEtPmNvbXBfcmluZy5nZW4gPSBWTVhORVQzX0lOSVRfR0VOOworCXJxLT5jb21wX3JpbmcubmV4dDJwcm9jID0gMDsKK30KKworCit2b2lkIHZteG5ldDNfcnFfZGVzdHJveShzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAqcnEsCisJCQlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCWludCBqOworCisJLyogYWxsIHJ4IGJ1ZmZlcnMgbXVzdCBoYXZlIGFscmVhZHkgYmVlbiBmcmVlZCAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKHJxLT5idWZfaW5mb1tpXSkgeworCQkJZm9yIChqID0gMDsgaiA8IHJxLT5yeF9yaW5nW2ldLnNpemU7IGorKykKKwkJCQlCVUdfT04ocnEtPmJ1Zl9pbmZvW2ldW2pdLnBhZ2UgIT0gTlVMTCk7CisJCX0KKwl9CisKKworCWtmcmVlKHJxLT5idWZfaW5mb1swXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmIChycS0+cnhfcmluZ1tpXS5iYXNlKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJxLT5yeF9yaW5nW2ldLnNpemUKKwkJCQkJICAgICogc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4RGVzYyksCisJCQkJCSAgICBycS0+cnhfcmluZ1tpXS5iYXNlLAorCQkJCQkgICAgcnEtPnJ4X3JpbmdbaV0uYmFzZVBBKTsKKwkJCXJxLT5yeF9yaW5nW2ldLmJhc2UgPSBOVUxMOworCQl9CisJCXJxLT5idWZfaW5mb1tpXSA9IE5VTEw7CisJfQorCisJaWYgKHJxLT5jb21wX3JpbmcuYmFzZSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJxLT5jb21wX3Jpbmcuc2l6ZSAqCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19SeENvbXBEZXNjKSwKKwkJCQkgICAgcnEtPmNvbXBfcmluZy5iYXNlLCBycS0+Y29tcF9yaW5nLmJhc2VQQSk7CisJCXJxLT5jb21wX3JpbmcuYmFzZSA9IE5VTEw7CisJfQorfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfcnFfaW5pdChzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAqcnEsCisJCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgICphZGFwdGVyKQoreworCWludCBpOworCisJLyogaW5pdGlhbGl6ZSBidWZfaW5mbyAqLworCWZvciAoaSA9IDA7IGkgPCBycS0+cnhfcmluZ1swXS5zaXplOyBpKyspIHsKKworCQkvKiAxc3QgYnVmIGZvciBhIHBrdCBpcyBza2J1ZmYgKi8KKwkJaWYgKGkgJSBhZGFwdGVyLT5yeF9idWZfcGVyX3BrdCA9PSAwKSB7CisJCQlycS0+YnVmX2luZm9bMF1baV0uYnVmX3R5cGUgPSBWTVhORVQzX1JYX0JVRl9TS0I7CisJCQlycS0+YnVmX2luZm9bMF1baV0ubGVuID0gYWRhcHRlci0+c2tiX2J1Zl9zaXplOworCQl9IGVsc2UgeyAvKiBzdWJzZXF1ZW50IGJ1ZnMgZm9yIGEgcGt0IGlzIGZyYWcgKi8KKwkJCXJxLT5idWZfaW5mb1swXVtpXS5idWZfdHlwZSA9IFZNWE5FVDNfUlhfQlVGX1BBR0U7CisJCQlycS0+YnVmX2luZm9bMF1baV0ubGVuID0gUEFHRV9TSVpFOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBycS0+cnhfcmluZ1sxXS5zaXplOyBpKyspIHsKKwkJcnEtPmJ1Zl9pbmZvWzFdW2ldLmJ1Zl90eXBlID0gVk1YTkVUM19SWF9CVUZfUEFHRTsKKwkJcnEtPmJ1Zl9pbmZvWzFdW2ldLmxlbiA9IFBBR0VfU0laRTsKKwl9CisKKwkvKiByZXNldCBpbnRlcm5hbCBzdGF0ZSBhbmQgYWxsb2NhdGUgYnVmZmVycyBmb3IgYm90aCByaW5ncyAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJcnEtPnJ4X3JpbmdbaV0ubmV4dDJmaWxsID0gcnEtPnJ4X3JpbmdbaV0ubmV4dDJjb21wID0gMDsKKwkJcnEtPnVuY29tbWl0dGVkW2ldID0gMDsKKworCQltZW1zZXQocnEtPnJ4X3JpbmdbaV0uYmFzZSwgMCwgcnEtPnJ4X3JpbmdbaV0uc2l6ZSAqCisJCSAgICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfUnhEZXNjKSk7CisJCXJxLT5yeF9yaW5nW2ldLmdlbiA9IFZNWE5FVDNfSU5JVF9HRU47CisJfQorCWlmICh2bXhuZXQzX3JxX2FsbG9jX3J4X2J1ZihycSwgMCwgcnEtPnJ4X3JpbmdbMF0uc2l6ZSAtIDEsCisJCQkJICAgIGFkYXB0ZXIpID09IDApIHsKKwkJLyogYXQgbGVhc3QgaGFzIDEgcnggYnVmZmVyIGZvciB0aGUgMXN0IHJpbmcgKi8KKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXZteG5ldDNfcnFfYWxsb2NfcnhfYnVmKHJxLCAxLCBycS0+cnhfcmluZ1sxXS5zaXplIC0gMSwgYWRhcHRlcik7CisKKwkvKiByZXNldCB0aGUgY29tcCByaW5nICovCisJcnEtPmNvbXBfcmluZy5uZXh0MnByb2MgPSAwOworCW1lbXNldChycS0+Y29tcF9yaW5nLmJhc2UsIDAsIHJxLT5jb21wX3Jpbmcuc2l6ZSAqCisJICAgICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19SeENvbXBEZXNjKSk7CisJcnEtPmNvbXBfcmluZy5nZW4gPSBWTVhORVQzX0lOSVRfR0VOOworCisJLyogcmVzZXQgcnhjdHggKi8KKwlycS0+cnhfY3R4LnNrYiA9IE5VTEw7CisKKwkvKiBzdGF0cyBhcmUgbm90IHJlc2V0ICovCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAordm14bmV0M19ycV9jcmVhdGUoc3RydWN0IHZteG5ldDNfcnhfcXVldWUgKnJxLCBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCXNpemVfdCBzejsKKwlzdHJ1Y3Qgdm14bmV0M19yeF9idWZfaW5mbyAqYmk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisKKwkJc3ogPSBycS0+cnhfcmluZ1tpXS5zaXplICogc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4RGVzYyk7CisJCXJxLT5yeF9yaW5nW2ldLmJhc2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzeiwKKwkJCQkJCQkmcnEtPnJ4X3JpbmdbaV0uYmFzZVBBKTsKKwkJaWYgKCFycS0+cnhfcmluZ1tpXS5iYXNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgcnggcmluZyAlZFxuIiwKKwkJCSAgICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGkpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlzeiA9IHJxLT5jb21wX3Jpbmcuc2l6ZSAqIHNpemVvZihzdHJ1Y3QgVm14bmV0M19SeENvbXBEZXNjKTsKKwlycS0+Y29tcF9yaW5nLmJhc2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzeiwKKwkJCQkJCSAgJnJxLT5jb21wX3JpbmcuYmFzZVBBKTsKKwlpZiAoIXJxLT5jb21wX3JpbmcuYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgcnggY29tcCByaW5nXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCisJc3ogPSBzaXplb2Yoc3RydWN0IHZteG5ldDNfcnhfYnVmX2luZm8pICogKHJxLT5yeF9yaW5nWzBdLnNpemUgKworCQkJCQkJICAgcnEtPnJ4X3JpbmdbMV0uc2l6ZSk7CisJYmkgPSBrbWFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSByeCBidWZpbmZvXG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCW1lbXNldChiaSwgMCwgc3opOworCXJxLT5idWZfaW5mb1swXSA9IGJpOworCXJxLT5idWZfaW5mb1sxXSA9IGJpICsgcnEtPnJ4X3JpbmdbMF0uc2l6ZTsKKworCXJldHVybiAwOworCitlcnI6CisJdm14bmV0M19ycV9kZXN0cm95KHJxLCBhZGFwdGVyKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX2RvX3BvbGwoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciwgaW50IGJ1ZGdldCkKK3sKKwlpZiAodW5saWtlbHkoYWRhcHRlci0+c2hhcmVkLT5lY3IpKQorCQl2bXhuZXQzX3Byb2Nlc3NfZXZlbnRzKGFkYXB0ZXIpOworCisJdm14bmV0M190cV90eF9jb21wbGV0ZSgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCXJldHVybiB2bXhuZXQzX3JxX3J4X2NvbXBsZXRlKCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlciwgYnVkZ2V0KTsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2YobmFwaSwKKwkJCQkJICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyLCBuYXBpKTsKKwlpbnQgcnhkX2RvbmU7CisKKwlyeGRfZG9uZSA9IHZteG5ldDNfZG9fcG9sbChhZGFwdGVyLCBidWRnZXQpOworCisJaWYgKHJ4ZF9kb25lIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCXZteG5ldDNfZW5hYmxlX2ludHIoYWRhcHRlciwgMCk7CisJfQorCXJldHVybiByeGRfZG9uZTsKK30KKworCisvKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3Igdm14bmV0MyAgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdAordm14bmV0M19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHVubGlrZWx5KGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX0lOVFgpKSB7CisJCXUzMiBpY3IgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfSUNSKTsKKwkJaWYgKHVubGlrZWx5KGljciA9PSAwKSkKKwkJCS8qIG5vdCBvdXJzICovCisJCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisKKwkvKiBkaXNhYmxlIGludHIgaWYgbmVlZGVkICovCisJaWYgKGFkYXB0ZXItPmludHIubWFza19tb2RlID09IFZNWE5FVDNfSU1NX0FDVElWRSkKKwkJdm14bmV0M19kaXNhYmxlX2ludHIoYWRhcHRlciwgMCk7CisKKwluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisKKworLyogbmV0cG9sbCBjYWxsYmFjay4gKi8KK3N0YXRpYyB2b2lkCit2bXhuZXQzX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgaXJxOworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlpZiAoYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfTVNJWCkKKwkJaXJxID0gYWRhcHRlci0+aW50ci5tc2l4X2VudHJpZXNbMF0udmVjdG9yOworCWVsc2UKKyNlbmRpZgorCQlpcnEgPSBhZGFwdGVyLT5wZGV2LT5pcnE7CisKKwlkaXNhYmxlX2lycShpcnEpOworCXZteG5ldDNfaW50cihpcnEsIG5ldGRldik7CisJZW5hYmxlX2lycShpcnEpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfcmVxdWVzdF9pcnFzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVycjsKKworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX01TSVgpIHsKKwkJLyogd2Ugb25seSB1c2UgMSBNU0ktWCB2ZWN0b3IgKi8KKwkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+aW50ci5tc2l4X2VudHJpZXNbMF0udmVjdG9yLAorCQkJCSAgdm14bmV0M19pbnRyLCAwLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkJICBhZGFwdGVyLT5uZXRkZXYpOworCX0gZWxzZQorI2VuZGlmCisJaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX01TSSkgeworCQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIHZteG5ldDNfaW50ciwgMCwKKwkJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bmV0ZGV2KTsKKwl9IGVsc2UgeworCQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIHZteG5ldDNfaW50ciwKKwkJCQkgIElSUUZfU0hBUkVELCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkJICBhZGFwdGVyLT5uZXRkZXYpOworCX0KKworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVzIChpbnRyIHR5cGU6JWQpLCBlcnJvciIKKwkJICAgICAgICI6JWRcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+aW50ci50eXBlLCBlcnIpOworCisKKwlpZiAoIWVycikgeworCQlpbnQgaTsKKwkJLyogaW5pdCBvdXIgaW50ciBzZXR0aW5ncyAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+aW50ci5udW1faW50cnM7IGkrKykKKwkJCWFkYXB0ZXItPmludHIubW9kX2xldmVsc1tpXSA9IFVQVDFfSU1MX0FEQVBUSVZFOworCisJCS8qIG5leHQgc2V0dXAgaW50ciBpbmRleCBmb3IgYWxsIGludHIgc291cmNlcyAqLworCQlhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3JpbmcuaW50cl9pZHggPSAwOworCQlhZGFwdGVyLT5yeF9xdWV1ZS5jb21wX3JpbmcuaW50cl9pZHggPSAwOworCQlhZGFwdGVyLT5pbnRyLmV2ZW50X2ludHJfaWR4ID0gMDsKKworCQlwcmludGsoS0VSTl9JTkZPICIlczogaW50ciB0eXBlICV1LCBtb2RlICV1LCAldSB2ZWN0b3JzICIKKwkJICAgICAgICJhbGxvY2F0ZWRcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+aW50ci50eXBlLAorCQkgICAgICAgYWRhcHRlci0+aW50ci5tYXNrX21vZGUsIGFkYXB0ZXItPmludHIubnVtX2ludHJzKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX2ZyZWVfaXJxcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCUJVR19PTihhZGFwdGVyLT5pbnRyLnR5cGUgPT0gVk1YTkVUM19JVF9BVVRPIHx8CisJICAgICAgIGFkYXB0ZXItPmludHIubnVtX2ludHJzIDw9IDApOworCisJc3dpdGNoIChhZGFwdGVyLT5pbnRyLnR5cGUpIHsKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWNhc2UgVk1YTkVUM19JVF9NU0lYOgorCXsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPmludHIubnVtX2ludHJzOyBpKyspCisJCQlmcmVlX2lycShhZGFwdGVyLT5pbnRyLm1zaXhfZW50cmllc1tpXS52ZWN0b3IsCisJCQkJIGFkYXB0ZXItPm5ldGRldik7CisJCWJyZWFrOworCX0KKyNlbmRpZgorCWNhc2UgVk1YTkVUM19JVF9NU0k6CisJCWZyZWVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgYWRhcHRlci0+bmV0ZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBWTVhORVQzX0lUX0lOVFg6CisJCWZyZWVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgYWRhcHRlci0+bmV0ZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKHRydWUpOworCX0KK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M192bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkICpzaGFyZWQgPSBhZGFwdGVyLT5zaGFyZWQ7CisJdTMyICp2ZlRhYmxlID0gYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnJ4RmlsdGVyQ29uZi52ZlRhYmxlOworCisJaWYgKGdycCkgeworCQkvKiBhZGQgdmxhbiByeCBzdHJpcHBpbmcuICovCisJCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1JYKSB7CisJCQlpbnQgaTsKKwkJCXN0cnVjdCBWbXhuZXQzX0RTRGV2UmVhZCAqZGV2UmVhZCA9ICZzaGFyZWQtPmRldlJlYWQ7CisJCQlhZGFwdGVyLT52bGFuX2dycCA9IGdycDsKKworCQkJLyogdXBkYXRlIEZFQVRVUkVTIHRvIGRldmljZSAqLworCQkJZGV2UmVhZC0+bWlzYy51cHRGZWF0dXJlcyB8PSBVUFQxX0ZfUlhWTEFOOworCQkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfRkVBVFVSRSk7CisJCQkvKgorCQkJICogIENsZWFyIGVudGlyZSB2ZlRhYmxlOyB0aGVuIGVuYWJsZSB1bnRhZ2dlZCBwa3RzLgorCQkJICogIE5vdGU6IHNldHRpbmcgb25lIGVudHJ5IGluIHZmVGFibGUgdG8gbm9uLXplcm8gdHVybnMKKwkJCSAqICBvbiBWTEFOIHJ4IGZpbHRlcmluZy4KKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IFZNWE5FVDNfVkZUX1NJWkU7IGkrKykKKwkJCQl2ZlRhYmxlW2ldID0gMDsKKworCQkJVk1YTkVUM19TRVRfVkZUQUJMRV9FTlRSWSh2ZlRhYmxlLCAwKTsKKwkJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB2bGFuX3J4X3JlZ2lzdGVyIHdoZW4gZGV2aWNlIGhhcyAiCisJCQkgICAgICAgIm5vIE5FVElGX0ZfSFdfVkxBTl9SWFxuIiwgbmV0ZGV2LT5uYW1lKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHJlbW92ZSB2bGFuIHJ4IHN0cmlwcGluZy4gKi8KKwkJc3RydWN0IFZteG5ldDNfRFNEZXZSZWFkICpkZXZSZWFkID0gJnNoYXJlZC0+ZGV2UmVhZDsKKwkJYWRhcHRlci0+dmxhbl9ncnAgPSBOVUxMOworCisJCWlmIChkZXZSZWFkLT5taXNjLnVwdEZlYXR1cmVzICYgVVBUMV9GX1JYVkxBTikgeworCQkJaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBWTVhORVQzX1ZGVF9TSVpFOyBpKyspIHsKKwkJCQkvKiBjbGVhciBlbnRpcmUgdmZUYWJsZTsgdGhpcyBhbHNvIGRpc2FibGVzCisJCQkJICogVkxBTiByeCBmaWx0ZXJpbmcKKwkJCQkgKi8KKwkJCQl2ZlRhYmxlW2ldID0gMDsKKwkJCX0KKwkJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUyk7CisKKwkJCS8qIHVwZGF0ZSBGRUFUVVJFUyB0byBkZXZpY2UgKi8KKwkJCWRldlJlYWQtPm1pc2MudXB0RmVhdHVyZXMgJj0gflVQVDFfRl9SWFZMQU47CisJCQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9GRUFUVVJFKTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19yZXN0b3JlX3ZsYW4oc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+dmxhbl9ncnApIHsKKwkJdTE2IHZpZDsKKwkJdTMyICp2ZlRhYmxlID0gYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnJ4RmlsdGVyQ29uZi52ZlRhYmxlOworCQlib29sIGFjdGl2ZVZsYW4gPSBmYWxzZTsKKworCQlmb3IgKHZpZCA9IDA7IHZpZCA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyB2aWQrKykgeworCQkJaWYgKHZsYW5fZ3JvdXBfZ2V0X2RldmljZShhZGFwdGVyLT52bGFuX2dycCwgdmlkKSkgeworCQkJCVZNWE5FVDNfU0VUX1ZGVEFCTEVfRU5UUlkodmZUYWJsZSwgdmlkKTsKKwkJCQlhY3RpdmVWbGFuID0gdHJ1ZTsKKwkJCX0KKwkJfQorCQlpZiAoYWN0aXZlVmxhbikgeworCQkJLyogY29udGludWUgdG8gYWxsb3cgdW50YWdnZWQgcGt0cyAqLworCQkJVk1YTkVUM19TRVRfVkZUQUJMRV9FTlRSWSh2ZlRhYmxlLCAwKTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M192bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgKnZmVGFibGUgPSBhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucnhGaWx0ZXJDb25mLnZmVGFibGU7CisKKwlWTVhORVQzX1NFVF9WRlRBQkxFX0VOVFJZKHZmVGFibGUsIHZpZCk7CisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUyk7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUzMiAqdmZUYWJsZSA9IGFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5yeEZpbHRlckNvbmYudmZUYWJsZTsKKworCVZNWE5FVDNfQ0xFQVJfVkZUQUJMRV9FTlRSWSh2ZlRhYmxlLCB2aWQpOworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9WTEFOX0ZJTFRFUlMpOworfQorCisKK3N0YXRpYyB1OCAqCit2bXhuZXQzX2NvcHlfbWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwl1OCAqYnVmID0gTlVMTDsKKwl1MzIgc3ogPSBuZXRkZXYtPm1jX2NvdW50ICogRVRIX0FMRU47CisKKwkvKiBzdHJ1Y3QgVm14bmV0M19SeEZpbHRlckNvbmYubWZUYWJsZUxlbiBpcyB1MTYuICovCisJaWYgKHN6IDw9IDB4ZmZmZikgeworCQkvKiBXZSBtYXkgYmUgY2FsbGVkIHdpdGggQkggZGlzYWJsZWQgKi8KKwkJYnVmID0ga21hbGxvYyhzeiwgR0ZQX0FUT01JQyk7CisJCWlmIChidWYpIHsKKwkJCWludCBpOworCQkJc3RydWN0IGRldl9tY19saXN0ICptYyA9IG5ldGRldi0+bWNfbGlzdDsKKworCQkJZm9yIChpID0gMDsgaSA8IG5ldGRldi0+bWNfY291bnQ7IGkrKykgeworCQkJCUJVR19PTighbWMpOworCQkJCW1lbWNweShidWYgKyBpICogRVRIX0FMRU4sIG1jLT5kbWlfYWRkciwKKwkJCQkgICAgICAgRVRIX0FMRU4pOworCQkJCW1jID0gbWMtPm5leHQ7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGJ1ZjsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19zZXRfbWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgVm14bmV0M19SeEZpbHRlckNvbmYgKnJ4Q29uZiA9CisJCQkJCSZhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucnhGaWx0ZXJDb25mOworCXU4ICpuZXdfdGFibGUgPSBOVUxMOworCXUzMiBuZXdfbW9kZSA9IFZNWE5FVDNfUlhNX1VDQVNUOworCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJbmV3X21vZGUgfD0gVk1YTkVUM19SWE1fUFJPTUlTQzsKKworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkKKwkJbmV3X21vZGUgfD0gVk1YTkVUM19SWE1fQkNBU1Q7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKKwkJbmV3X21vZGUgfD0gVk1YTkVUM19SWE1fQUxMX01VTFRJOworCWVsc2UKKwkJaWYgKG5ldGRldi0+bWNfY291bnQgPiAwKSB7CisJCQluZXdfdGFibGUgPSB2bXhuZXQzX2NvcHlfbWMobmV0ZGV2KTsKKwkJCWlmIChuZXdfdGFibGUpIHsKKwkJCQluZXdfbW9kZSB8PSBWTVhORVQzX1JYTV9NQ0FTVDsKKwkJCQlyeENvbmYtPm1mVGFibGVMZW4gPSBuZXRkZXYtPm1jX2NvdW50ICoKKwkJCQkJCSAgICAgRVRIX0FMRU47CisJCQkJcnhDb25mLT5tZlRhYmxlUEEgPSB2aXJ0X3RvX3BoeXMobmV3X3RhYmxlKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZhaWxlZCB0byBjb3B5IG1jYXN0IGxpc3QiCisJCQkJICAgICAgICIsIHNldHRpbmcgQUxMX01VTFRJXG4iLCBuZXRkZXYtPm5hbWUpOworCQkJCW5ld19tb2RlIHw9IFZNWE5FVDNfUlhNX0FMTF9NVUxUSTsKKwkJCX0KKwkJfQorCisKKwlpZiAoIShuZXdfbW9kZSAmIFZNWE5FVDNfUlhNX01DQVNUKSkgeworCQlyeENvbmYtPm1mVGFibGVMZW4gPSAwOworCQlyeENvbmYtPm1mVGFibGVQQSA9IDA7CisJfQorCisJaWYgKG5ld19tb2RlICE9IHJ4Q29uZi0+cnhNb2RlKSB7CisJCXJ4Q29uZi0+cnhNb2RlID0gbmV3X21vZGU7CisJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfUlhfTU9ERSk7CisJfQorCisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX01BQ19GSUxURVJTKTsKKworCWtmcmVlKG5ld190YWJsZSk7Cit9CisKKworLyoKKyAqICAgU2V0IHVwIGRyaXZlcl9zaGFyZWQgYmFzZWQgb24gc2V0dGluZ3MgaW4gYWRhcHRlci4KKyAqLworCitzdGF0aWMgdm9pZAordm14bmV0M19zZXR1cF9kcml2ZXJfc2hhcmVkKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkICpzaGFyZWQgPSBhZGFwdGVyLT5zaGFyZWQ7CisJc3RydWN0IFZteG5ldDNfRFNEZXZSZWFkICpkZXZSZWFkID0gJnNoYXJlZC0+ZGV2UmVhZDsKKwlzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlQ29uZiAqdHFjOworCXN0cnVjdCBWbXhuZXQzX1J4UXVldWVDb25mICpycWM7CisJaW50IGk7CisKKwltZW1zZXQoc2hhcmVkLCAwLCBzaXplb2YoKnNoYXJlZCkpOworCisJLyogZHJpdmVyIHNldHRpbmdzICovCisJc2hhcmVkLT5tYWdpYyA9IFZNWE5FVDNfUkVWMV9NQUdJQzsKKwlkZXZSZWFkLT5taXNjLmRyaXZlckluZm8udmVyc2lvbiA9IFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fTlVNOworCWRldlJlYWQtPm1pc2MuZHJpdmVySW5mby5nb3MuZ29zQml0cyA9IChzaXplb2Yodm9pZCAqKSA9PSA0ID8KKwkJCQlWTVhORVQzX0dPU19CSVRTXzMyIDogVk1YTkVUM19HT1NfQklUU182NCk7CisJZGV2UmVhZC0+bWlzYy5kcml2ZXJJbmZvLmdvcy5nb3NUeXBlID0gVk1YTkVUM19HT1NfVFlQRV9MSU5VWDsKKwlkZXZSZWFkLT5taXNjLmRyaXZlckluZm8udm14bmV0M1JldlNwdCA9IDE7CisJZGV2UmVhZC0+bWlzYy5kcml2ZXJJbmZvLnVwdFZlclNwdCA9IDE7CisKKwlkZXZSZWFkLT5taXNjLmRkUEEgPSB2aXJ0X3RvX3BoeXMoYWRhcHRlcik7CisJZGV2UmVhZC0+bWlzYy5kZExlbiA9IHNpemVvZihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyKTsKKworCS8qIHNldCB1cCBmZWF0dXJlIGZsYWdzICovCisJaWYgKGFkYXB0ZXItPnJ4Y3N1bSkKKwkJZGV2UmVhZC0+bWlzYy51cHRGZWF0dXJlcyB8PSBVUFQxX0ZfUlhDU1VNOworCisJaWYgKGFkYXB0ZXItPmxybykgeworCQlkZXZSZWFkLT5taXNjLnVwdEZlYXR1cmVzIHw9IFVQVDFfRl9MUk87CisJCWRldlJlYWQtPm1pc2MubWF4TnVtUnhTRyA9IDEgKyBNQVhfU0tCX0ZSQUdTOworCX0KKwlpZiAoKGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpCisJCQkmJiBhZGFwdGVyLT52bGFuX2dycCkgeworCQlkZXZSZWFkLT5taXNjLnVwdEZlYXR1cmVzIHw9IFVQVDFfRl9SWFZMQU47CisJfQorCisJZGV2UmVhZC0+bWlzYy5tdHUgPSBhZGFwdGVyLT5uZXRkZXYtPm10dTsKKwlkZXZSZWFkLT5taXNjLnF1ZXVlRGVzY1BBID0gYWRhcHRlci0+cXVldWVfZGVzY19wYTsKKwlkZXZSZWFkLT5taXNjLnF1ZXVlRGVzY0xlbiA9IHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlRGVzYykgKworCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKTsKKworCS8qIHR4IHF1ZXVlIHNldHRpbmdzICovCisJQlVHX09OKGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcuYmFzZSA9PSBOVUxMKTsKKworCWRldlJlYWQtPm1pc2MubnVtVHhRdWV1ZXMgPSAxOworCXRxYyA9ICZhZGFwdGVyLT50cWRfc3RhcnQtPmNvbmY7CisJdHFjLT50eFJpbmdCYXNlUEEgICA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcuYmFzZVBBOworCXRxYy0+ZGF0YVJpbmdCYXNlUEEgPSBhZGFwdGVyLT50eF9xdWV1ZS5kYXRhX3JpbmcuYmFzZVBBOworCXRxYy0+Y29tcFJpbmdCYXNlUEEgPSBhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3JpbmcuYmFzZVBBOworCXRxYy0+ZGRQQSAgICAgICAgICAgPSB2aXJ0X3RvX3BoeXMoYWRhcHRlci0+dHhfcXVldWUuYnVmX2luZm8pOworCXRxYy0+dHhSaW5nU2l6ZSAgICAgPSBhZGFwdGVyLT50eF9xdWV1ZS50eF9yaW5nLnNpemU7CisJdHFjLT5kYXRhUmluZ1NpemUgICA9IGFkYXB0ZXItPnR4X3F1ZXVlLmRhdGFfcmluZy5zaXplOworCXRxYy0+Y29tcFJpbmdTaXplICAgPSBhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3Jpbmcuc2l6ZTsKKwl0cWMtPmRkTGVuICAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCB2bXhuZXQzX3R4X2J1Zl9pbmZvKSAqCisJCQkgICAgICB0cWMtPnR4UmluZ1NpemU7CisJdHFjLT5pbnRySWR4ICAgICAgICA9IGFkYXB0ZXItPnR4X3F1ZXVlLmNvbXBfcmluZy5pbnRyX2lkeDsKKworCS8qIHJ4IHF1ZXVlIHNldHRpbmdzICovCisJZGV2UmVhZC0+bWlzYy5udW1SeFF1ZXVlcyA9IDE7CisJcnFjID0gJmFkYXB0ZXItPnJxZF9zdGFydC0+Y29uZjsKKwlycWMtPnJ4UmluZ0Jhc2VQQVswXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uYmFzZVBBOworCXJxYy0+cnhSaW5nQmFzZVBBWzFdID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5iYXNlUEE7CisJcnFjLT5jb21wUmluZ0Jhc2VQQSAgPSBhZGFwdGVyLT5yeF9xdWV1ZS5jb21wX3JpbmcuYmFzZVBBOworCXJxYy0+ZGRQQSAgICAgICAgICAgID0gdmlydF90b19waHlzKGFkYXB0ZXItPnJ4X3F1ZXVlLmJ1Zl9pbmZvKTsKKwlycWMtPnJ4UmluZ1NpemVbMF0gICA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uc2l6ZTsKKwlycWMtPnJ4UmluZ1NpemVbMV0gICA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0uc2l6ZTsKKwlycWMtPmNvbXBSaW5nU2l6ZSAgICA9IGFkYXB0ZXItPnJ4X3F1ZXVlLmNvbXBfcmluZy5zaXplOworCXJxYy0+ZGRMZW4gICAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCB2bXhuZXQzX3J4X2J1Zl9pbmZvKSAqCisJCQkgICAgICAgKHJxYy0+cnhSaW5nU2l6ZVswXSArIHJxYy0+cnhSaW5nU2l6ZVsxXSk7CisJcnFjLT5pbnRySWR4ICAgICAgICAgPSBhZGFwdGVyLT5yeF9xdWV1ZS5jb21wX3JpbmcuaW50cl9pZHg7CisKKwkvKiBpbnRyIHNldHRpbmdzICovCisJZGV2UmVhZC0+aW50ckNvbmYuYXV0b01hc2sgPSBhZGFwdGVyLT5pbnRyLm1hc2tfbW9kZSA9PQorCQkJCSAgICAgVk1YTkVUM19JTU1fQVVUTzsKKwlkZXZSZWFkLT5pbnRyQ29uZi5udW1JbnRycyA9IGFkYXB0ZXItPmludHIubnVtX2ludHJzOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5pbnRyLm51bV9pbnRyczsgaSsrKQorCQlkZXZSZWFkLT5pbnRyQ29uZi5tb2RMZXZlbHNbaV0gPSBhZGFwdGVyLT5pbnRyLm1vZF9sZXZlbHNbaV07CisKKwlkZXZSZWFkLT5pbnRyQ29uZi5ldmVudEludHJJZHggPSBhZGFwdGVyLT5pbnRyLmV2ZW50X2ludHJfaWR4OworCisJLyogcnggZmlsdGVyIHNldHRpbmdzICovCisJZGV2UmVhZC0+cnhGaWx0ZXJDb25mLnJ4TW9kZSA9IDA7CisJdm14bmV0M19yZXN0b3JlX3ZsYW4oYWRhcHRlcik7CisJLyogdGhlIHJlc3QgYXJlIGFscmVhZHkgemVyb2VkICovCit9CisKKworaW50Cit2bXhuZXQzX2FjdGl2YXRlX2RldihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBlcnI7CisJdTMyIHJldDsKKworCWRldl9kYmcoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkiJXM6IHNrYl9idWZfc2l6ZSAlZCwgcnhfYnVmX3Blcl9wa3QgJWQsIHJpbmcgc2l6ZXMiCisJCSIgJXUgJXUgJXVcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+c2tiX2J1Zl9zaXplLAorCQlhZGFwdGVyLT5yeF9idWZfcGVyX3BrdCwgYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5zaXplLAorCQlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUsCisJCWFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0uc2l6ZSk7CisKKwl2bXhuZXQzX3RxX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKwllcnIgPSB2bXhuZXQzX3JxX2luaXQoJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGluaXQgcnggcXVldWUgZm9yICVzOiBlcnJvciAlZFxuIiwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBycV9lcnI7CisJfQorCisJZXJyID0gdm14bmV0M19yZXF1ZXN0X2lycXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXR1cCBpcnEgZm9yICVzOiBlcnJvciAlZFxuIiwKKwkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBpcnFfZXJyOworCX0KKworCXZteG5ldDNfc2V0dXBfZHJpdmVyX3NoYXJlZChhZGFwdGVyKTsKKworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfRFNBTCwKKwkJCSAgICAgICBWTVhORVQzX0dFVF9BRERSX0xPKGFkYXB0ZXItPnNoYXJlZF9wYSkpOworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfRFNBSCwKKwkJCSAgICAgICBWTVhORVQzX0dFVF9BRERSX0hJKGFkYXB0ZXItPnNoYXJlZF9wYSkpOworCisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCisJCQkgICAgICAgVk1YTkVUM19DTURfQUNUSVZBVEVfREVWKTsKKwlyZXQgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01EKTsKKworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhY3RpdmF0ZSBkZXYgJXM6IGVycm9yICV1XG4iLAorCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGFjdGl2YXRlX2VycjsKKwl9CisJVk1YTkVUM19XUklURV9CQVIwX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19SWFBST0QsCisJCQkgICAgICAgYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5uZXh0MmZpbGwpOworCVZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfUlhQUk9EMiwKKwkJCSAgICAgICBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzFdLm5leHQyZmlsbCk7CisKKwkvKiBBcHBseSB0aGUgcnggZmlsdGVyIHNldHRpbnMgbGFzdC4gKi8KKwl2bXhuZXQzX3NldF9tYyhhZGFwdGVyLT5uZXRkZXYpOworCisJLyoKKwkgKiBDaGVjayBsaW5rIHN0YXRlIHdoZW4gZmlyc3QgYWN0aXZhdGluZyBkZXZpY2UuIEl0IHdpbGwgc3RhcnQgdGhlCisJICogdHggcXVldWUgaWYgdGhlIGxpbmsgaXMgdXAuCisJICovCisJdm14bmV0M19jaGVja19saW5rKGFkYXB0ZXIpOworCisJbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOworCXZteG5ldDNfZW5hYmxlX2FsbF9pbnRycyhhZGFwdGVyKTsKKwljbGVhcl9iaXQoVk1YTkVUM19TVEFURV9CSVRfUVVJRVNDRUQsICZhZGFwdGVyLT5zdGF0ZSk7CisJcmV0dXJuIDA7CisKK2FjdGl2YXRlX2VycjoKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0RTQUwsIDApOworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfRFNBSCwgMCk7CisJdm14bmV0M19mcmVlX2lycXMoYWRhcHRlcik7CitpcnFfZXJyOgorcnFfZXJyOgorCS8qIGZyZWUgdXAgYnVmZmVycyB3ZSBhbGxvY2F0ZWQgKi8KKwl2bXhuZXQzX3JxX2NsZWFudXAoJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwlyZXR1cm4gZXJyOworfQorCisKK3ZvaWQKK3ZteG5ldDNfcmVzZXRfZGV2KHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsIFZNWE5FVDNfQ01EX1JFU0VUX0RFVik7Cit9CisKKworaW50Cit2bXhuZXQzX3F1aWVzY2VfZGV2KHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoVk1YTkVUM19TVEFURV9CSVRfUVVJRVNDRUQsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybiAwOworCisKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCSAgICAgICBWTVhORVQzX0NNRF9RVUlFU0NFX0RFVik7CisJdm14bmV0M19kaXNhYmxlX2FsbF9pbnRycyhhZGFwdGVyKTsKKworCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7CisJbmV0aWZfdHhfZGlzYWJsZShhZGFwdGVyLT5uZXRkZXYpOworCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAwOworCW5ldGlmX2NhcnJpZXJfb2ZmKGFkYXB0ZXItPm5ldGRldik7CisKKwl2bXhuZXQzX3RxX2NsZWFudXAoJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKwl2bXhuZXQzX3JxX2NsZWFudXAoJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwl2bXhuZXQzX2ZyZWVfaXJxcyhhZGFwdGVyKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M193cml0ZV9tYWNfYWRkcihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjKQoreworCXUzMiB0bXA7CisKKwl0bXAgPSAqKHUzMiAqKW1hYzsKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX01BQ0wsIHRtcCk7CisKKwl0bXAgPSAobWFjWzVdIDw8IDgpIHwgbWFjWzRdOworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfTUFDSCwgdG1wKTsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisJdm14bmV0M193cml0ZV9tYWNfYWRkcihhZGFwdGVyLCBhZGRyLT5zYV9kYXRhKTsKKworCXJldHVybiAwOworfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09IGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwIHJvdXRpbmVzID09PT09PT09PT09PSAqLworCitzdGF0aWMgaW50Cit2bXhuZXQzX2FsbG9jX3BjaV9yZXNvdXJjZXMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciwgYm9vbCAqZG1hNjQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIG1taW9fc3RhcnQsIG1taW9fbGVuOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZW5hYmxlIGFkYXB0ZXIgJXM6IGVycm9yICVkXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldiksIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgPT0gMCkgeworCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrIGZhaWxlZCAiCisJCQkgICAgICAgImZvciBhZGFwdGVyICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBlcnJfc2V0X21hc2s7CisJCX0KKwkJKmRtYTY0ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInBjaV9zZXRfZG1hX21hc2sgZmFpbGVkIGZvciBhZGFwdGVyICIKKwkJCSAgICAgICAiJXNcbiIsCXBjaV9uYW1lKHBkZXYpKTsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGVycl9zZXRfbWFzazsKKwkJfQorCQkqZG1hNjQgPSBmYWxzZTsKKwl9CisKKwllcnIgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHBkZXYsICgxIDw8IDIpIC0gMSwKKwkJCQkJICAgdm14bmV0M19kcml2ZXJfbmFtZSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IHJlZ2lvbiBmb3IgYWRhcHRlciAlczogIgorCQkgICAgICAgImVycm9yICVkXG4iLCBwY2lfbmFtZShwZGV2KSwgZXJyKTsKKwkJZ290byBlcnJfc2V0X21hc2s7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlhZGFwdGVyLT5od19hZGRyMCA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCWlmICghYWRhcHRlci0+aHdfYWRkcjApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gbWFwIGJhcjAgZm9yIGFkYXB0ZXIgJXNcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7CisJYWRhcHRlci0+aHdfYWRkcjEgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKwlpZiAoIWFkYXB0ZXItPmh3X2FkZHIxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBiYXIxIGZvciBhZGFwdGVyICVzXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9iYXIxOworCX0KKwlyZXR1cm4gMDsKKworZXJyX2JhcjE6CisJaW91bm1hcChhZGFwdGVyLT5od19hZGRyMCk7CitlcnJfaW9yZW1hcDoKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsICgxIDw8IDIpIC0gMSk7CitlcnJfc2V0X21hc2s6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZnJlZV9wY2lfcmVzb3VyY2VzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJQlVHX09OKCFhZGFwdGVyLT5wZGV2KTsKKworCWlvdW5tYXAoYWRhcHRlci0+aHdfYWRkcjApOworCWlvdW5tYXAoYWRhcHRlci0+aHdfYWRkcjEpOworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoYWRhcHRlci0+cGRldiwgKDEgPDwgMikgLSAxKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoYWRhcHRlci0+cGRldik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfYWRqdXN0X3J4X3Jpbmdfc2l6ZShzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCXNpemVfdCBzejsKKworCWlmIChhZGFwdGVyLT5uZXRkZXYtPm10dSA8PSBWTVhORVQzX01BWF9TS0JfQlVGX1NJWkUgLQorCQkJCSAgICBWTVhORVQzX01BWF9FVEhfSERSX1NJWkUpIHsKKwkJYWRhcHRlci0+c2tiX2J1Zl9zaXplID0gYWRhcHRlci0+bmV0ZGV2LT5tdHUgKworCQkJCQlWTVhORVQzX01BWF9FVEhfSERSX1NJWkU7CisJCWlmIChhZGFwdGVyLT5za2JfYnVmX3NpemUgPCBWTVhORVQzX01JTl9UMF9CVUZfU0laRSkKKwkJCWFkYXB0ZXItPnNrYl9idWZfc2l6ZSA9IFZNWE5FVDNfTUlOX1QwX0JVRl9TSVpFOworCisJCWFkYXB0ZXItPnJ4X2J1Zl9wZXJfcGt0ID0gMTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5za2JfYnVmX3NpemUgPSBWTVhORVQzX01BWF9TS0JfQlVGX1NJWkU7CisJCXN6ID0gYWRhcHRlci0+bmV0ZGV2LT5tdHUgLSBWTVhORVQzX01BWF9TS0JfQlVGX1NJWkUgKworCQkJCQkgICAgVk1YTkVUM19NQVhfRVRIX0hEUl9TSVpFOworCQlhZGFwdGVyLT5yeF9idWZfcGVyX3BrdCA9IDEgKyAoc3ogKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKKwl9CisKKwkvKgorCSAqIGZvciBzaW1wbGljaXR5LCBmb3JjZSB0aGUgcmluZzAgc2l6ZSB0byBiZSBhIG11bHRpcGxlIG9mCisJICogcnhfYnVmX3Blcl9wa3QgKiBWTVhORVQzX1JJTkdfU0laRV9BTElHTgorCSAqLworCXN6ID0gYWRhcHRlci0+cnhfYnVmX3Blcl9wa3QgKiBWTVhORVQzX1JJTkdfU0laRV9BTElHTjsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgPSAoYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplICsKKwkJCQkJICAgICBzeiAtIDEpIC8gc3ogKiBzejsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgPSBtaW5fdCh1MzIsCisJCQkJCSAgICBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUsCisJCQkJCSAgICBWTVhORVQzX1JYX1JJTkdfTUFYX1NJWkUgLyBzeiAqIHN6KTsKK30KKworCitpbnQKK3ZteG5ldDNfY3JlYXRlX3F1ZXVlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCB1MzIgdHhfcmluZ19zaXplLAorCQkgICAgICB1MzIgcnhfcmluZ19zaXplLCB1MzIgcnhfcmluZzJfc2l6ZSkKK3sKKwlpbnQgZXJyOworCisJYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5zaXplICAgPSB0eF9yaW5nX3NpemU7CisJYWRhcHRlci0+dHhfcXVldWUuZGF0YV9yaW5nLnNpemUgPSB0eF9yaW5nX3NpemU7CisJYWRhcHRlci0+dHhfcXVldWUuY29tcF9yaW5nLnNpemUgPSB0eF9yaW5nX3NpemU7CisJYWRhcHRlci0+dHhfcXVldWUuc2hhcmVkID0gJmFkYXB0ZXItPnRxZF9zdGFydC0+Y3RybDsKKwlhZGFwdGVyLT50eF9xdWV1ZS5zdG9wcGVkID0gdHJ1ZTsKKwllcnIgPSB2bXhuZXQzX3RxX2NyZWF0ZSgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgPSByeF9yaW5nX3NpemU7CisJYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5zaXplID0gcnhfcmluZzJfc2l6ZTsKKwl2bXhuZXQzX2FkanVzdF9yeF9yaW5nX3NpemUoYWRhcHRlcik7CisJYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLnNpemUgID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplICsKKwkJCQkJICAgIGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0uc2l6ZTsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5xaWQgID0gMDsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5xaWQyID0gMTsKKwlhZGFwdGVyLT5yeF9xdWV1ZS5zaGFyZWQgPSAmYWRhcHRlci0+cnFkX3N0YXJ0LT5jdHJsOworCWVyciA9IHZteG5ldDNfcnFfY3JlYXRlKCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlcik7CisJaWYgKGVycikKKwkJdm14bmV0M190cV9kZXN0cm95KCZhZGFwdGVyLT50eF9xdWV1ZSwgYWRhcHRlcik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50Cit2bXhuZXQzX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyOworCWludCBlcnI7CisKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9xdWV1ZS50eF9sb2NrKTsKKworCWVyciA9IHZteG5ldDNfY3JlYXRlX3F1ZXVlcyhhZGFwdGVyLCBWTVhORVQzX0RFRl9UWF9SSU5HX1NJWkUsCisJCQkJICAgIFZNWE5FVDNfREVGX1JYX1JJTkdfU0laRSwKKwkJCQkgICAgVk1YTkVUM19ERUZfUlhfUklOR19TSVpFKTsKKwlpZiAoZXJyKQorCQlnb3RvIHF1ZXVlX2VycjsKKworCWVyciA9IHZteG5ldDNfYWN0aXZhdGVfZGV2KGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gYWN0aXZhdGVfZXJyOworCisJcmV0dXJuIDA7CisKK2FjdGl2YXRlX2VycjoKKwl2bXhuZXQzX3JxX2Rlc3Ryb3koJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwl2bXhuZXQzX3RxX2Rlc3Ryb3koJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKK3F1ZXVlX2VycjoKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qCisJICogUmVzZXRfd29yayBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiByZXNldHRpbmcgdGhlIGRldmljZSwgd2FpdCBmb3IgaXRzCisJICogY29tcGxldGlvbi4KKwkgKi8KKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCW1zbGVlcCgxKTsKKworCXZteG5ldDNfcXVpZXNjZV9kZXYoYWRhcHRlcik7CisKKwl2bXhuZXQzX3JxX2Rlc3Ryb3koJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwl2bXhuZXQzX3RxX2Rlc3Ryb3koJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKworCWNsZWFyX2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisKKworCXJldHVybiAwOworfQorCisKK3ZvaWQKK3ZteG5ldDNfZm9yY2VfY2xvc2Uoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwkvKgorCSAqIHdlIG11c3QgY2xlYXIgVk1YTkVUM19TVEFURV9CSVRfUkVTRVRUSU5HLCBvdGhlcndpc2UKKwkgKiB2bXhuZXQzX2Nsb3NlKCkgd2lsbCBkZWFkbG9jay4KKwkgKi8KKwlCVUdfT04odGVzdF9iaXQoVk1YTkVUM19TVEFURV9CSVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKTsKKworCS8qIHdlIG5lZWQgdG8gZW5hYmxlIE5BUEksIG90aGVyd2lzZSBkZXZfY2xvc2Ugd2lsbCBkZWFkbG9jayAqLworCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKKwlkZXZfY2xvc2UoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGVyciA9IDA7CisKKwlpZiAobmV3X210dSA8IFZNWE5FVDNfTUlOX01UVSB8fCBuZXdfbXR1ID4gVk1YTkVUM19NQVhfTVRVKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChuZXdfbXR1ID4gMTUwMCAmJiAhYWRhcHRlci0+anVtYm9fZnJhbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OworCisJLyoKKwkgKiBSZXNldF93b3JrIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9mIHJlc2V0dGluZyB0aGUgZGV2aWNlLCB3YWl0IGZvciBpdHMKKwkgKiBjb21wbGV0aW9uLgorCSAqLworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbXNsZWVwKDEpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQl2bXhuZXQzX3F1aWVzY2VfZGV2KGFkYXB0ZXIpOworCQl2bXhuZXQzX3Jlc2V0X2RldihhZGFwdGVyKTsKKworCQkvKiB3ZSBuZWVkIHRvIHJlLWNyZWF0ZSB0aGUgcnggcXVldWUgYmFzZWQgb24gdGhlIG5ldyBtdHUgKi8KKwkJdm14bmV0M19ycV9kZXN0cm95KCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlcik7CisJCXZteG5ldDNfYWRqdXN0X3J4X3Jpbmdfc2l6ZShhZGFwdGVyKTsKKwkJYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLnNpemUgID0KKwkJCQkJYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplICsKKwkJCQkJYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5zaXplOworCQllcnIgPSB2bXhuZXQzX3JxX2NyZWF0ZSgmYWRhcHRlci0+cnhfcXVldWUsIGFkYXB0ZXIpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmUtY3JlYXRlIHJ4IHF1ZXVlLCIKKwkJCQkiIGVycm9yICVkLiBDbG9zaW5nIGl0LlxuIiwgbmV0ZGV2LT5uYW1lLCBlcnIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQllcnIgPSB2bXhuZXQzX2FjdGl2YXRlX2RldihhZGFwdGVyKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlLWFjdGl2YXRlLCBlcnJvciAlZC4gIgorCQkJCSJDbG9zaW5nIGl0XG4iLCBuZXRkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCWNsZWFyX2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJaWYgKGVycikKKwkJdm14bmV0M19mb3JjZV9jbG9zZShhZGFwdGVyKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZGVjbGFyZV9mZWF0dXJlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCBib29sIGRtYTY0KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8CisJCU5FVElGX0ZfSFdfQ1NVTSB8CisJCU5FVElGX0ZfSFdfVkxBTl9UWCB8CisJCU5FVElGX0ZfSFdfVkxBTl9SWCB8CisJCU5FVElGX0ZfSFdfVkxBTl9GSUxURVIgfAorCQlORVRJRl9GX1RTTyB8CisJCU5FVElGX0ZfVFNPNiB8CisJCU5FVElGX0ZfTFJPOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZmVhdHVyZXM6IHNnIGNzdW0gdmxhbiBqZiB0c28gdHNvSVB2NiBscm8iKTsKKworCWFkYXB0ZXItPnJ4Y3N1bSA9IHRydWU7CisJYWRhcHRlci0+anVtYm9fZnJhbWUgPSB0cnVlOworCWFkYXB0ZXItPmxybyA9IHRydWU7CisKKwlpZiAoZG1hNjQpIHsKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJCXByaW50aygiIGhpZ2hETUEiKTsKKwl9CisKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgPSBuZXRkZXYtPmZlYXR1cmVzOworCXByaW50aygiXG4iKTsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19yZWFkX21hY19hZGRyKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWMpCit7CisJdTMyIHRtcDsKKworCXRtcCA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19NQUNMKTsKKwkqKHUzMiAqKW1hYyA9IHRtcDsKKworCXRtcCA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19NQUNIKTsKKwltYWNbNF0gPSB0bXAgJiAweGZmOworCW1hY1s1XSA9ICh0bXAgPj4gOCkgJiAweGZmOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX2FsbG9jX2ludHJfcmVzb3VyY2VzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGNmZzsKKworCS8qIGludHIgc2V0dGluZ3MgKi8KKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCSAgICAgICBWTVhORVQzX0NNRF9HRVRfQ09ORl9JTlRSKTsKKwljZmcgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01EKTsKKwlhZGFwdGVyLT5pbnRyLnR5cGUgPSBjZmcgJiAweDM7CisJYWRhcHRlci0+aW50ci5tYXNrX21vZGUgPSAoY2ZnID4+IDIpICYgMHgzOworCisJaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX0FVVE8pIHsKKwkJaW50IGVycjsKKworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJCWFkYXB0ZXItPmludHIubXNpeF9lbnRyaWVzWzBdLmVudHJ5ID0gMDsKKwkJZXJyID0gcGNpX2VuYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXItPmludHIubXNpeF9lbnRyaWVzLAorCQkJCSAgICAgIFZNWE5FVDNfTElOVVhfTUFYX01TSVhfVkVDVCk7CisJCWlmICghZXJyKSB7CisJCQlhZGFwdGVyLT5pbnRyLm51bV9pbnRycyA9IDE7CisJCQlhZGFwdGVyLT5pbnRyLnR5cGUgPSBWTVhORVQzX0lUX01TSVg7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCisJCWVyciA9IHBjaV9lbmFibGVfbXNpKGFkYXB0ZXItPnBkZXYpOworCQlpZiAoIWVycikgeworCQkJYWRhcHRlci0+aW50ci5udW1faW50cnMgPSAxOworCQkJYWRhcHRlci0+aW50ci50eXBlID0gVk1YTkVUM19JVF9NU0k7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlhZGFwdGVyLT5pbnRyLnR5cGUgPSBWTVhORVQzX0lUX0lOVFg7CisKKwkvKiBJTlQtWCByZWxhdGVkIHNldHRpbmcgKi8KKwlhZGFwdGVyLT5pbnRyLm51bV9pbnRycyA9IDE7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZnJlZV9pbnRyX3Jlc291cmNlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5pbnRyLnR5cGUgPT0gVk1YTkVUM19JVF9NU0lYKQorCQlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOworCWVsc2UgaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX01TSSkKKwkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOworCWVsc2UKKwkJQlVHX09OKGFkYXB0ZXItPmludHIudHlwZSAhPSBWTVhORVQzX0lUX0lOVFgpOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzOiB0eCBoYW5nXG4iLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPndvcmspOworfQorCisKK3N0YXRpYyB2b2lkCit2bXhuZXQzX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXI7CisKKwlhZGFwdGVyID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIsIHdvcmspOworCisJLyogaWYgYW5vdGhlciB0aHJlYWQgaXMgcmVzZXR0aW5nIHRoZSBkZXZpY2UsIG5vIG5lZWQgdG8gcHJvY2VlZCAqLworCWlmICh0ZXN0X2FuZF9zZXRfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOworCisJLyogaWYgdGhlIGRldmljZSBpcyBjbG9zZWQsIHdlIG11c3QgbGVhdmUgaXQgYWxvbmUgKi8KKwlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXNldHRpbmdcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCXZteG5ldDNfcXVpZXNjZV9kZXYoYWRhcHRlcik7CisJCXZteG5ldDNfcmVzZXRfZGV2KGFkYXB0ZXIpOworCQl2bXhuZXQzX2FjdGl2YXRlX2RldihhZGFwdGVyKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogYWxyZWFkeSBjbG9zZWRcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJfQorCisJY2xlYXJfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKK30KKworCitzdGF0aWMgaW50IF9fZGV2aW5pdAordm14bmV0M19wcm9iZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdm14bmV0M19uZXRkZXZfb3BzID0geworCQkubmRvX29wZW4gPSB2bXhuZXQzX29wZW4sCisJCS5uZG9fc3RvcCA9IHZteG5ldDNfY2xvc2UsCisJCS5uZG9fc3RhcnRfeG1pdCA9IHZteG5ldDNfeG1pdF9mcmFtZSwKKwkJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSB2bXhuZXQzX3NldF9tYWNfYWRkciwKKwkJLm5kb19jaGFuZ2VfbXR1ID0gdm14bmV0M19jaGFuZ2VfbXR1LAorCQkubmRvX2dldF9zdGF0cyA9IHZteG5ldDNfZ2V0X3N0YXRzLAorCQkubmRvX3R4X3RpbWVvdXQgPSB2bXhuZXQzX3R4X3RpbWVvdXQsCisJCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gdm14bmV0M19zZXRfbWMsCisJCS5uZG9fdmxhbl9yeF9yZWdpc3RlciA9IHZteG5ldDNfdmxhbl9yeF9yZWdpc3RlciwKKwkJLm5kb192bGFuX3J4X2FkZF92aWQgPSB2bXhuZXQzX3ZsYW5fcnhfYWRkX3ZpZCwKKwkJLm5kb192bGFuX3J4X2tpbGxfdmlkID0gdm14bmV0M192bGFuX3J4X2tpbGxfdmlkLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJCS5uZG9fcG9sbF9jb250cm9sbGVyID0gdm14bmV0M19uZXRwb2xsLAorI2VuZGlmCisJfTsKKwlpbnQgZXJyOworCWJvb2wgZG1hNjQgPSBmYWxzZTsgLyogc3R1cGlkIGdjYyAqLworCXUzMiB2ZXI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyOworCXU4IG1hY1tFVEhfQUxFTl07CisKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHZteG5ldDNfYWRhcHRlcikpOworCWlmICghbmV0ZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jIGV0aGVybmV0IGRldmljZSBmb3IgYWRhcHRlciAiCisJCQkiJXNcbiIsCXBjaV9uYW1lKHBkZXYpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBkZXYgPSBwZGV2OworCisJYWRhcHRlci0+c2hhcmVkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCSAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX0RyaXZlclNoYXJlZCksCisJCQkgICZhZGFwdGVyLT5zaGFyZWRfcGEpOworCWlmICghYWRhcHRlci0+c2hhcmVkKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgJXNcbiIsCisJCQlwY2lfbmFtZShwZGV2KSk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX3NoYXJlZDsKKwl9CisKKwlhZGFwdGVyLT50cWRfc3RhcnQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhRdWV1ZURlc2MpICsKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKSwKKwkJCSAgICAgJmFkYXB0ZXItPnF1ZXVlX2Rlc2NfcGEpOworCisJaWYgKCFhZGFwdGVyLT50cWRfc3RhcnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAlc1xuIiwKKwkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NfcXVldWVfZGVzYzsKKwl9CisJYWRhcHRlci0+cnFkX3N0YXJ0ID0gKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjICopKGFkYXB0ZXItPnRxZF9zdGFydAorCQkJCQkJCSAgICArIDEpOworCisJYWRhcHRlci0+cG1fY29uZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1BNQ29uZiksIEdGUF9LRVJORUwpOworCWlmIChhZGFwdGVyLT5wbV9jb25mID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAlc1xuIiwKKwkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NfcG07CisJfQorCisJZXJyID0gdm14bmV0M19hbGxvY19wY2lfcmVzb3VyY2VzKGFkYXB0ZXIsICZkbWE2NCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX2FsbG9jX3BjaTsKKworCXZlciA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19WUlJTKTsKKwlpZiAodmVyICYgMSkgeworCQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX1ZSUlMsIDEpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW5jb21wYXRpYmxlIGgvdyB2ZXJzaW9uICgweCV4KSBmb3IgYWRhcHRlciIKKwkJICAgICAgICIgJXNcbiIsCXZlciwgcGNpX25hbWUocGRldikpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3ZlcjsKKwl9CisKKwl2ZXIgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfVVZSUyk7CisJaWYgKHZlciAmIDEpIHsKKwkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19VVlJTLCAxKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkluY29tcGF0aWJsZSB1cHQgdmVyc2lvbiAoMHgleCkgZm9yICIKKwkJICAgICAgICJhZGFwdGVyICVzXG4iLCB2ZXIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVycl92ZXI7CisJfQorCisJdm14bmV0M19kZWNsYXJlX2ZlYXR1cmVzKGFkYXB0ZXIsIGRtYTY0KTsKKworCWFkYXB0ZXItPmRldl9udW1iZXIgPSBhdG9taWNfcmVhZCgmZGV2aWNlc19mb3VuZCk7CisJdm14bmV0M19hbGxvY19pbnRyX3Jlc291cmNlcyhhZGFwdGVyKTsKKworCXZteG5ldDNfcmVhZF9tYWNfYWRkcihhZGFwdGVyLCBtYWMpOworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCAgbWFjLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZ2bXhuZXQzX25ldGRldl9vcHM7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKKwl2bXhuZXQzX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOworCisJSU5JVF9XT1JLKCZhZGFwdGVyLT53b3JrLCB2bXhuZXQzX3Jlc2V0X3dvcmspOworCisJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwgdm14bmV0M19wb2xsLCA2NCk7CisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmcGRldi0+ZGV2KTsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgYWRhcHRlciAlc1xuIiwKKwkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJZ290byBlcnJfcmVnaXN0ZXI7CisJfQorCisJc2V0X2JpdChWTVhORVQzX1NUQVRFX0JJVF9RVUlFU0NFRCwgJmFkYXB0ZXItPnN0YXRlKTsKKwlhdG9taWNfaW5jKCZkZXZpY2VzX2ZvdW5kKTsKKwlyZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyOgorCXZteG5ldDNfZnJlZV9pbnRyX3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl92ZXI6CisJdm14bmV0M19mcmVlX3BjaV9yZXNvdXJjZXMoYWRhcHRlcik7CitlcnJfYWxsb2NfcGNpOgorCWtmcmVlKGFkYXB0ZXItPnBtX2NvbmYpOworZXJyX2FsbG9jX3BtOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4UXVldWVEZXNjKSArCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKSwKKwkJCSAgICBhZGFwdGVyLT50cWRfc3RhcnQsIGFkYXB0ZXItPnF1ZXVlX2Rlc2NfcGEpOworZXJyX2FsbG9jX3F1ZXVlX2Rlc2M6CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzaXplb2Yoc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkKSwKKwkJCSAgICBhZGFwdGVyLT5zaGFyZWQsIGFkYXB0ZXItPnNoYXJlZF9wYSk7CitlcnJfYWxsb2Nfc2hhcmVkOgorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlmcmVlX25ldGRldihuZXRkZXYpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQgX19kZXZleGl0Cit2bXhuZXQzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCisJdm14bmV0M19mcmVlX2ludHJfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXZteG5ldDNfZnJlZV9wY2lfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWtmcmVlKGFkYXB0ZXItPnBtX2NvbmYpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4UXVldWVEZXNjKSArCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKSwKKwkJCSAgICBhZGFwdGVyLT50cWRfc3RhcnQsIGFkYXB0ZXItPnF1ZXVlX2Rlc2NfcGEpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX0RyaXZlclNoYXJlZCksCisJCQkgICAgYWRhcHRlci0+c2hhcmVkLCBhZGFwdGVyLT5zaGFyZWRfcGEpOworCWZyZWVfbmV0ZGV2KG5ldGRldik7Cit9CisKKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50Cit2bXhuZXQzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXZpY2UpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IFZteG5ldDNfUE1Db25mICpwbUNvbmY7CisJc3RydWN0IGV0aGhkciAqZWhkcjsKKwlzdHJ1Y3QgYXJwaGRyICphaGRyOworCXU4ICphcnByZXE7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OworCXN0cnVjdCBpbl9pZmFkZHIgKmlmYTsKKwlpbnQgaSA9IDA7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJcmV0dXJuIDA7CisKKwl2bXhuZXQzX2Rpc2FibGVfYWxsX2ludHJzKGFkYXB0ZXIpOworCXZteG5ldDNfZnJlZV9pcnFzKGFkYXB0ZXIpOworCXZteG5ldDNfZnJlZV9pbnRyX3Jlc291cmNlcyhhZGFwdGVyKTsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBDcmVhdGUgd2FrZS11cCBmaWx0ZXJzLiAqLworCXBtQ29uZiA9IGFkYXB0ZXItPnBtX2NvbmY7CisJbWVtc2V0KHBtQ29uZiwgMCwgc2l6ZW9mKCpwbUNvbmYpKTsKKworCWlmIChhZGFwdGVyLT53b2wgJiBXQUtFX1VDQVNUKSB7CisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5wYXR0ZXJuU2l6ZSA9IEVUSF9BTEVOOworCQlwbUNvbmYtPmZpbHRlcnNbaV0ubWFza1NpemUgPSAxOworCQltZW1jcHkocG1Db25mLT5maWx0ZXJzW2ldLnBhdHRlcm4sIG5ldGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJcG1Db25mLT5maWx0ZXJzW2ldLm1hc2tbMF0gPSAweDNGOyAvKiBMU0IgRVRIX0FMRU4gYml0cyAqLworCisJCXBtQ29uZi0+d2FrZVVwRXZlbnRzIHw9IFZNWE5FVDNfUE1fV0FLRVVQX0ZJTFRFUjsKKwkJaSsrOworCX0KKworCWlmIChhZGFwdGVyLT53b2wgJiBXQUtFX0FSUCkgeworCQlpbl9kZXYgPSBpbl9kZXZfZ2V0KG5ldGRldik7CisJCWlmICghaW5fZGV2KQorCQkJZ290byBza2lwX2FycDsKKworCQlpZmEgPSAoc3RydWN0IGluX2lmYWRkciAqKWluX2Rldi0+aWZhX2xpc3Q7CisJCWlmICghaWZhKQorCQkJZ290byBza2lwX2FycDsKKworCQlwbUNvbmYtPmZpbHRlcnNbaV0ucGF0dGVyblNpemUgPSBFVEhfSExFTiArIC8qIEV0aGVybmV0IGhlYWRlciovCisJCQlzaXplb2Yoc3RydWN0IGFycGhkcikgKwkJLyogQVJQIGhlYWRlciAqLworCQkJMiAqIEVUSF9BTEVOICsJCS8qIDIgRXRoZXJuZXQgYWRkcmVzc2VzKi8KKwkJCTIgKiBzaXplb2YodTMyKTsJLyoyIElQdjQgYWRkcmVzc2VzICovCisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5tYXNrU2l6ZSA9CisJCQkocG1Db25mLT5maWx0ZXJzW2ldLnBhdHRlcm5TaXplIC0gMSkgLyA4ICsgMTsKKworCQkvKiBFVEhfUF9BUlAgaW4gRXRoZXJuZXQgaGVhZGVyLiAqLworCQllaGRyID0gKHN0cnVjdCBldGhoZHIgKilwbUNvbmYtPmZpbHRlcnNbaV0ucGF0dGVybjsKKwkJZWhkci0+aF9wcm90byA9IGh0b25zKEVUSF9QX0FSUCk7CisKKwkJLyogQVJQT1BfUkVRVUVTVCBpbiBBUlAgaGVhZGVyLiAqLworCQlhaGRyID0gKHN0cnVjdCBhcnBoZHIgKikmcG1Db25mLT5maWx0ZXJzW2ldLnBhdHRlcm5bRVRIX0hMRU5dOworCQlhaGRyLT5hcl9vcCA9IGh0b25zKEFSUE9QX1JFUVVFU1QpOworCQlhcnByZXEgPSAodTggKikoYWhkciArIDEpOworCisJCS8qIFRoZSBVbmljYXN0IElQdjQgYWRkcmVzcyBpbiAndGlwJyBmaWVsZC4gKi8KKwkJYXJwcmVxICs9IDIgKiBFVEhfQUxFTiArIHNpemVvZih1MzIpOworCQkqKHUzMiAqKWFycHJlcSA9IGlmYS0+aWZhX2FkZHJlc3M7CisKKwkJLyogVGhlIG1hc2sgZm9yIHRoZSByZWxldmFudCBiaXRzLiAqLworCQlwbUNvbmYtPmZpbHRlcnNbaV0ubWFza1swXSA9IDB4MDA7CisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5tYXNrWzFdID0gMHgzMDsgLyogRVRIX1BfQVJQICovCisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5tYXNrWzJdID0gMHgzMDsgLyogQVJQT1BfUkVRVUVTVCAqLworCQlwbUNvbmYtPmZpbHRlcnNbaV0ubWFza1szXSA9IDB4MDA7CisJCXBtQ29uZi0+ZmlsdGVyc1tpXS5tYXNrWzRdID0gMHhDMDsgLyogSVB2NCBUSVAgKi8KKwkJcG1Db25mLT5maWx0ZXJzW2ldLm1hc2tbNV0gPSAweDAzOyAvKiBJUHY0IFRJUCAqLworCQlpbl9kZXZfcHV0KGluX2Rldik7CisKKwkJcG1Db25mLT53YWtlVXBFdmVudHMgfD0gVk1YTkVUM19QTV9XQUtFVVBfRklMVEVSOworCQlpKys7CisJfQorCitza2lwX2FycDoKKwlpZiAoYWRhcHRlci0+d29sICYgV0FLRV9NQUdJQykKKwkJcG1Db25mLT53YWtlVXBFdmVudHMgfD0gVk1YTkVUM19QTV9XQUtFVVBfTUFHSUM7CisKKwlwbUNvbmYtPm51bUZpbHRlcnMgPSBpOworCisJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnBtQ29uZkRlc2MuY29uZlZlciA9IDE7CisJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnBtQ29uZkRlc2MuY29uZkxlbiA9IHNpemVvZigqcG1Db25mKTsKKwlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucG1Db25mRGVzYy5jb25mUEEgPSB2aXJ0X3RvX3BoeXMocG1Db25mKTsKKworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9QTUNGRyk7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBQTVNHX1NVU1BFTkQpLAorCQkJYWRhcHRlci0+d29sKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIFBNU0dfU1VTUEVORCkpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAordm14bmV0M19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCWludCBlcnI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldmljZSk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgVm14bmV0M19QTUNvbmYgKnBtQ29uZjsKKworCWlmICghbmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlyZXR1cm4gMDsKKworCS8qIERlc3Ryb3kgd2FrZS11cCBmaWx0ZXJzLiAqLworCXBtQ29uZiA9IGFkYXB0ZXItPnBtX2NvbmY7CisJbWVtc2V0KHBtQ29uZiwgMCwgc2l6ZW9mKCpwbUNvbmYpKTsKKworCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5wbUNvbmZEZXNjLmNvbmZWZXIgPSAxOworCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5wbUNvbmZEZXNjLmNvbmZMZW4gPSBzaXplb2YoKnBtQ29uZik7CisJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnBtQ29uZkRlc2MuY29uZlBBID0gdmlydF90b19waHlzKHBtQ29uZik7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVybiBlcnI7CisKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKKworCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9QTUNGRyk7CisJdm14bmV0M19hbGxvY19pbnRyX3Jlc291cmNlcyhhZGFwdGVyKTsKKwl2bXhuZXQzX3JlcXVlc3RfaXJxcyhhZGFwdGVyKTsKKwl2bXhuZXQzX2VuYWJsZV9hbGxfaW50cnMoYWRhcHRlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHZteG5ldDNfcG1fb3BzID0geworCS5zdXNwZW5kID0gdm14bmV0M19zdXNwZW5kLAorCS5yZXN1bWUgPSB2bXhuZXQzX3Jlc3VtZSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHZteG5ldDNfZHJpdmVyID0geworCS5uYW1lCQk9IHZteG5ldDNfZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlCT0gdm14bmV0M19wY2lpZF90YWJsZSwKKwkucHJvYmUJCT0gdm14bmV0M19wcm9iZV9kZXZpY2UsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh2bXhuZXQzX3JlbW92ZV9kZXZpY2UpLAorI2lmZGVmIENPTkZJR19QTQorCS5kcml2ZXIucG0JPSAmdm14bmV0M19wbV9vcHMsCisjZW5kaWYKK307CisKKworc3RhdGljIGludCBfX2luaXQKK3ZteG5ldDNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlcyAtIHZlcnNpb24gJXNcbiIsIFZNWE5FVDNfRFJJVkVSX0RFU0MsCisJCVZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fUkVQT1JUKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdm14bmV0M19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh2bXhuZXQzX2luaXRfbW9kdWxlKTsKKworCitzdGF0aWMgdm9pZAordm14bmV0M19leGl0X21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdm14bmV0M19kcml2ZXIpOworfQorCittb2R1bGVfZXhpdCh2bXhuZXQzX2V4aXRfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiVk13YXJlLCBJbmMuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oVk1YTkVUM19EUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfVkVSU0lPTihWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1NUUklORyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmMxNWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYwpAQCAtMCwwICsxLDU2NiBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgVk13YXJlJ3Mgdm14bmV0MyBldGhlcm5ldCBOSUMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlIGFuZCBubyBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAqIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICogTWFpbnRhaW5lZCBieTogU2hyZXlhcyBCaGF0ZXdhcmEgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KKyAqCisgKi8KKworCisjaW5jbHVkZSAidm14bmV0M19pbnQuaCIKKworc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjIHsKKwljaGFyIGRlc2NbRVRIX0dTVFJJTkdfTEVOXTsKKwlpbnQgIG9mZnNldDsKK307CisKKworc3RhdGljIHUzMgordm14bmV0M19nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiBhZGFwdGVyLT5yeGNzdW07Cit9CisKKworc3RhdGljIGludAordm14bmV0M19zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgdmFsKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKGFkYXB0ZXItPnJ4Y3N1bSAhPSB2YWwpIHsKKwkJYWRhcHRlci0+cnhjc3VtID0gdmFsOworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCQlpZiAodmFsKQorCQkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzIHw9CisJCQkJCQkJCVVQVDFfRl9SWENTVU07CisJCQllbHNlCisJCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0KKwkJCQkJCQkJflVQVDFfRl9SWENTVU07CisKKwkJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX0ZFQVRVUkUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCisKKy8qIHBlciB0cSBzdGF0cyBtYWludGFpbmVkIGJ5IHRoZSBkZXZpY2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm14bmV0M19zdGF0X2Rlc2MKK3ZteG5ldDNfdHFfZGV2X3N0YXRzW10gPSB7CisJLyogZGVzY3JpcHRpb24sICAgICAgICAgb2Zmc2V0ICovCisJeyAiVFNPIHBrdHMgdHgiLCAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgVFNPUGt0c1R4T0spIH0sCisJeyAiVFNPIGJ5dGVzIHR4IiwgICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgVFNPQnl0ZXNUeE9LKSB9LAorCXsgInVjYXN0IHBrdHMgdHgiLCAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIHVjYXN0UGt0c1R4T0spIH0sCisJeyAidWNhc3QgYnl0ZXMgdHgiLCAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgdWNhc3RCeXRlc1R4T0spIH0sCisJeyAibWNhc3QgcGt0cyB0eCIsICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfVHhTdGF0cywgbWNhc3RQa3RzVHhPSykgfSwKKwl7ICJtY2FzdCBieXRlcyB0eCIsICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCBtY2FzdEJ5dGVzVHhPSykgfSwKKwl7ICJiY2FzdCBwa3RzIHR4IiwgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9UeFN0YXRzLCBiY2FzdFBrdHNUeE9LKSB9LAorCXsgImJjYXN0IGJ5dGVzIHR4IiwgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIGJjYXN0Qnl0ZXNUeE9LKSB9LAorCXsgInBrdHMgdHggZXJyIiwgICAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIHBrdHNUeEVycm9yKSB9LAorCXsgInBrdHMgdHggZGlzY2FyZCIsICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1R4U3RhdHMsIHBrdHNUeERpc2NhcmQpIH0sCit9OworCisvKiBwZXIgdHEgc3RhdHMgbWFpbnRhaW5lZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjCit2bXhuZXQzX3RxX2RyaXZlcl9zdGF0c1tdID0geworCS8qIGRlc2NyaXB0aW9uLCAgICAgICAgIG9mZnNldCAqLworCXsiZHJ2IGRyb3BwZWQgdHggdG90YWwiLCBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCWRyb3BfdG90YWwpIH0sCisJeyAiICAgdG9vIG1hbnkgZnJhZ3MiLCAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQlkcm9wX3Rvb19tYW55X2ZyYWdzKSB9LAorCXsgIiAgIGdpYW50IGhkciIsICAgICAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKKwkJCQkJZHJvcF9vdmVyc2l6ZWRfaGRyKSB9LAorCXsgIiAgIGhkciBlcnIiLCAgICAgICAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cywKKwkJCQkJZHJvcF9oZHJfaW5zcGVjdF9lcnIpIH0sCisJeyAiICAgdHNvIiwgICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQlkcm9wX3RzbykgfSwKKwl7ICJyaW5nIGZ1bGwiLCAgICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCXR4X3JpbmdfZnVsbCkgfSwKKwl7ICJwa3RzIGxpbmVhcml6ZWQiLCAgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMsCisJCQkJCWxpbmVhcml6ZWQpIH0sCisJeyAiaGRyIGNsb25lZCIsICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQljb3B5X3NrYl9oZWFkZXIpIH0sCisJeyAiZ2lhbnQgaGRyIiwgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzLAorCQkJCQlvdmVyc2l6ZWRfaGRyKSB9LAorfTsKKworLyogcGVyIHJxIHN0YXRzIG1haW50YWluZWQgYnkgdGhlIGRldmljZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2bXhuZXQzX3N0YXRfZGVzYwordm14bmV0M19ycV9kZXZfc3RhdHNbXSA9IHsKKwl7ICJMUk8gcGt0cyByeCIsICAgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBMUk9Qa3RzUnhPSykgfSwKKwl7ICJMUk8gYnl0ZSByeCIsICAgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBMUk9CeXRlc1J4T0spIH0sCisJeyAidWNhc3QgcGt0cyByeCIsICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgdWNhc3RQa3RzUnhPSykgfSwKKwl7ICJ1Y2FzdCBieXRlcyByeCIsICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCB1Y2FzdEJ5dGVzUnhPSykgfSwKKwl7ICJtY2FzdCBwa3RzIHJ4IiwgICAgICBvZmZzZXRvZihzdHJ1Y3QgVVBUMV9SeFN0YXRzLCBtY2FzdFBrdHNSeE9LKSB9LAorCXsgIm1jYXN0IGJ5dGVzIHJ4IiwgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIG1jYXN0Qnl0ZXNSeE9LKSB9LAorCXsgImJjYXN0IHBrdHMgcngiLCAgICAgIG9mZnNldG9mKHN0cnVjdCBVUFQxX1J4U3RhdHMsIGJjYXN0UGt0c1J4T0spIH0sCisJeyAiYmNhc3QgYnl0ZXMgcngiLCAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgYmNhc3RCeXRlc1J4T0spIH0sCisJeyAicGt0cyByeCBvdXQgb2YgYnVmIiwgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgcGt0c1J4T3V0T2ZCdWYpIH0sCisJeyAicGt0cyByeCBlcnIiLCAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IFVQVDFfUnhTdGF0cywgcGt0c1J4RXJyb3IpIH0sCit9OworCisvKiBwZXIgcnEgc3RhdHMgbWFpbnRhaW5lZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjCit2bXhuZXQzX3JxX2RyaXZlcl9zdGF0c1tdID0geworCS8qIGRlc2NyaXB0aW9uLCAgICAgICAgIG9mZnNldCAqLworCXsgImRydiBkcm9wcGVkIHJ4IHRvdGFsIiwgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzLAorCQkJCQkgICBkcm9wX3RvdGFsKSB9LAorCXsgIiAgIGVyciIsICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzLAorCQkJCQlkcm9wX2VycikgfSwKKwl7ICIgICBmY3MiLCAgICAgICAgICAgIG9mZnNldG9mKHN0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cywKKwkJCQkJZHJvcF9mY3MpIH0sCisJeyAicnggYnVmIGFsbG9jIGZhaWwiLCBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M19ycV9kcml2ZXJfc3RhdHMsCisJCQkJCXJ4X2J1Zl9hbGxvY19mYWlsdXJlKSB9LAorfTsKKworLyogZ2xvYWJsIHN0YXRzIG1haW50YWluZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2bXhuZXQzX3N0YXRfZGVzYwordm14bmV0M19nbG9iYWxfc3RhdHNbXSA9IHsKKwkvKiBkZXNjcmlwdGlvbiwgICAgICAgICBvZmZzZXQgKi8KKwl7ICJ0eCB0aW1lb3V0IGNvdW50IiwgICBvZmZzZXRvZihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyLAorCQkJCQkgdHhfdGltZW91dF9jb3VudCkgfQorfTsKKworCitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCit2bXhuZXQzX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzICpkcnZUeFN0YXRzOworCXN0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyAqZHJ2UnhTdGF0czsKKwlzdHJ1Y3QgVVBUMV9UeFN0YXRzICpkZXZUeFN0YXRzOworCXN0cnVjdCBVUFQxX1J4U3RhdHMgKmRldlJ4U3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldF9zdGF0cyA9ICZuZXRkZXYtPnN0YXRzOworCisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkvKiBDb2xsZWN0IHRoZSBkZXYgc3RhdHMgaW50byB0aGUgc2hhcmVkIGFyZWEgKi8KKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwgVk1YTkVUM19DTURfR0VUX1NUQVRTKTsKKworCS8qIEFzc3VtaW5nIHRoYXQgd2UgaGF2ZSBhIHNpbmdsZSBxdWV1ZSBkZXZpY2UgKi8KKwlkZXZUeFN0YXRzID0gJmFkYXB0ZXItPnRxZF9zdGFydC0+c3RhdHM7CisJZGV2UnhTdGF0cyA9ICZhZGFwdGVyLT5ycWRfc3RhcnQtPnN0YXRzOworCisJLyogR2V0IGFjY2VzcyB0byB0aGUgZHJpdmVyIHN0YXRzIHBlciBxdWV1ZSAqLworCWRydlR4U3RhdHMgPSAmYWRhcHRlci0+dHhfcXVldWUuc3RhdHM7CisJZHJ2UnhTdGF0cyA9ICZhZGFwdGVyLT5yeF9xdWV1ZS5zdGF0czsKKworCW1lbXNldChuZXRfc3RhdHMsIDAsIHNpemVvZigqbmV0X3N0YXRzKSk7CisKKwluZXRfc3RhdHMtPnJ4X3BhY2tldHMgPSBkZXZSeFN0YXRzLT51Y2FzdFBrdHNSeE9LICsKKwkJCQlkZXZSeFN0YXRzLT5tY2FzdFBrdHNSeE9LICsKKwkJCQlkZXZSeFN0YXRzLT5iY2FzdFBrdHNSeE9LOworCisJbmV0X3N0YXRzLT50eF9wYWNrZXRzID0gZGV2VHhTdGF0cy0+dWNhc3RQa3RzVHhPSyArCisJCQkJZGV2VHhTdGF0cy0+bWNhc3RQa3RzVHhPSyArCisJCQkJZGV2VHhTdGF0cy0+YmNhc3RQa3RzVHhPSzsKKworCW5ldF9zdGF0cy0+cnhfYnl0ZXMgPSBkZXZSeFN0YXRzLT51Y2FzdEJ5dGVzUnhPSyArCisJCQkgICAgICBkZXZSeFN0YXRzLT5tY2FzdEJ5dGVzUnhPSyArCisJCQkgICAgICBkZXZSeFN0YXRzLT5iY2FzdEJ5dGVzUnhPSzsKKworCW5ldF9zdGF0cy0+dHhfYnl0ZXMgPSBkZXZUeFN0YXRzLT51Y2FzdEJ5dGVzVHhPSyArCisJCQkgICAgICBkZXZUeFN0YXRzLT5tY2FzdEJ5dGVzVHhPSyArCisJCQkgICAgICBkZXZUeFN0YXRzLT5iY2FzdEJ5dGVzVHhPSzsKKworCW5ldF9zdGF0cy0+cnhfZXJyb3JzID0gZGV2UnhTdGF0cy0+cGt0c1J4RXJyb3I7CisJbmV0X3N0YXRzLT50eF9lcnJvcnMgPSBkZXZUeFN0YXRzLT5wa3RzVHhFcnJvcjsKKwluZXRfc3RhdHMtPnJ4X2Ryb3BwZWQgPSBkcnZSeFN0YXRzLT5kcm9wX3RvdGFsOworCW5ldF9zdGF0cy0+dHhfZHJvcHBlZCA9IGRydlR4U3RhdHMtPmRyb3BfdG90YWw7CisJbmV0X3N0YXRzLT5tdWx0aWNhc3QgPSAgZGV2UnhTdGF0cy0+bWNhc3RQa3RzUnhPSzsKKworCXJldHVybiBuZXRfc3RhdHM7Cit9CisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpCit7CisJc3dpdGNoIChzc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXJldHVybiBBUlJBWV9TSVpFKHZteG5ldDNfdHFfZGV2X3N0YXRzKSArCisJCQlBUlJBWV9TSVpFKHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzKSArCisJCQlBUlJBWV9TSVpFKHZteG5ldDNfcnFfZGV2X3N0YXRzKSArCisJCQlBUlJBWV9TSVpFKHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzKSArCisJCQlBUlJBWV9TSVpFKHZteG5ldDNfZ2xvYmFsX3N0YXRzKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcmV0dXJuIDIwICogc2l6ZW9mKHUzMik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXN0cmxjcHkoZHJ2aW5mby0+ZHJpdmVyLCB2bXhuZXQzX2RyaXZlcl9uYW1lLCBzaXplb2YoZHJ2aW5mby0+ZHJpdmVyKSk7CisJZHJ2aW5mby0+ZHJpdmVyW3NpemVvZihkcnZpbmZvLT5kcml2ZXIpIC0gMV0gPSAnXDAnOworCisJc3RybGNweShkcnZpbmZvLT52ZXJzaW9uLCBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1JFUE9SVCwKKwkJc2l6ZW9mKGRydmluZm8tPnZlcnNpb24pKTsKKwlkcnZpbmZvLT5kcml2ZXJbc2l6ZW9mKGRydmluZm8tPnZlcnNpb24pIC0gMV0gPSAnXDAnOworCisJc3RybGNweShkcnZpbmZvLT5md192ZXJzaW9uLCAiTi9BIiwgc2l6ZW9mKGRydmluZm8tPmZ3X3ZlcnNpb24pKTsKKwlkcnZpbmZvLT5md192ZXJzaW9uW3NpemVvZihkcnZpbmZvLT5md192ZXJzaW9uKSAtIDFdID0gJ1wwJzsKKworCXN0cmxjcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGFkYXB0ZXItPnBkZXYpLAorCQlFVEhUT09MX0JVU0lORk9fTEVOKTsKKwlkcnZpbmZvLT5uX3N0YXRzID0gdm14bmV0M19nZXRfc3NldF9jb3VudChuZXRkZXYsIEVUSF9TU19TVEFUUyk7CisJZHJ2aW5mby0+dGVzdGluZm9fbGVuID0gMDsKKwlkcnZpbmZvLT5lZWR1bXBfbGVuICAgPSAwOworCWRydmluZm8tPnJlZ2R1bXBfbGVuICA9IHZteG5ldDNfZ2V0X3JlZ3NfbGVuKG5ldGRldik7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCwgdTggKmJ1ZikKK3sKKwlpZiAoc3RyaW5nc2V0ID09IEVUSF9TU19TVEFUUykgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3RxX2Rldl9zdGF0cyk7IGkrKykgeworCQkJbWVtY3B5KGJ1Ziwgdm14bmV0M190cV9kZXZfc3RhdHNbaV0uZGVzYywKKwkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cyk7IGkrKykgeworCQkJbWVtY3B5KGJ1Ziwgdm14bmV0M190cV9kcml2ZXJfc3RhdHNbaV0uZGVzYywKKwkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3JxX2Rldl9zdGF0cyk7IGkrKykgeworCQkJbWVtY3B5KGJ1Ziwgdm14bmV0M19ycV9kZXZfc3RhdHNbaV0uZGVzYywKKwkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyk7IGkrKykgeworCQkJbWVtY3B5KGJ1Ziwgdm14bmV0M19ycV9kcml2ZXJfc3RhdHNbaV0uZGVzYywKKwkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX2dsb2JhbF9zdGF0cyk7IGkrKykgeworCQkJbWVtY3B5KGJ1Ziwgdm14bmV0M19nbG9iYWxfc3RhdHNbaV0uZGVzYywKKwkJCQlFVEhfR1NUUklOR19MRU4pOworCQkJYnVmICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCX0KK30KKworc3RhdGljIHUzMgordm14bmV0M19nZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikgeworCXJldHVybiBuZXRkZXYtPmZlYXR1cmVzOworfQorCitzdGF0aWMgaW50Cit2bXhuZXQzX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkgeworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXU4IGxyb19yZXF1ZXN0ZWQgPSAoZGF0YSAmIEVUSF9GTEFHX0xSTykgPT0gMCA/IDAgOiAxOworCXU4IGxyb19wcmVzZW50ID0gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgPT0gMCA/IDAgOiAxOworCisJaWYgKGxyb19yZXF1ZXN0ZWQgXiBscm9fcHJlc2VudCkgeworCQkvKiB0b2dnbGUgdGhlIExSTyBmZWF0dXJlKi8KKwkJbmV0ZGV2LT5mZWF0dXJlcyBePSBORVRJRl9GX0xSTzsKKworCQkvKiB1cGRhdGUgaGFyd2FyZSBMUk8gY2FwYWJpbGl0eSBhY2NvcmRpbmdseSAqLworCQlpZiAobHJvX3JlcXVlc3RlZCkKKwkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzICY9IFVQVDFfRl9MUk87CisJCWVsc2UKKwkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzICY9CisJCQkJCQkJCX5VUFQxX0ZfTFJPOworCQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX0ZFQVRVUkUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgICpidWYpCit7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTggKmJhc2U7CisJaW50IGk7CisKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwgVk1YTkVUM19DTURfR0VUX1NUQVRTKTsKKworCS8qIHRoaXMgZG9lcyBhc3N1bWUgZWFjaCBjb3VudGVyIGlzIDY0LWJpdCB3aWRlICovCisKKwliYXNlID0gKHU4ICopJmFkYXB0ZXItPnRxZF9zdGFydC0+c3RhdHM7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodm14bmV0M190cV9kZXZfc3RhdHMpOyBpKyspCisJCSpidWYrKyA9ICoodTY0ICopKGJhc2UgKyB2bXhuZXQzX3RxX2Rldl9zdGF0c1tpXS5vZmZzZXQpOworCisJYmFzZSA9ICh1OCAqKSZhZGFwdGVyLT50eF9xdWV1ZS5zdGF0czsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cyk7IGkrKykKKwkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArIHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzW2ldLm9mZnNldCk7CisKKwliYXNlID0gKHU4ICopJmFkYXB0ZXItPnJxZF9zdGFydC0+c3RhdHM7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodm14bmV0M19ycV9kZXZfc3RhdHMpOyBpKyspCisJCSpidWYrKyA9ICoodTY0ICopKGJhc2UgKyB2bXhuZXQzX3JxX2Rldl9zdGF0c1tpXS5vZmZzZXQpOworCisJYmFzZSA9ICh1OCAqKSZhZGFwdGVyLT5yeF9xdWV1ZS5zdGF0czsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyk7IGkrKykKKwkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArIHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzW2ldLm9mZnNldCk7CisKKwliYXNlID0gKHU4ICopYWRhcHRlcjsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX2dsb2JhbF9zdGF0cyk7IGkrKykKKwkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArIHZteG5ldDNfZ2xvYmFsX3N0YXRzW2ldLm9mZnNldCk7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgKmJ1ZiA9IHA7CisKKwltZW1zZXQocCwgMCwgdm14bmV0M19nZXRfcmVnc19sZW4obmV0ZGV2KSk7CisKKwlyZWdzLT52ZXJzaW9uID0gMTsKKworCS8qIFVwZGF0ZSB2bXhuZXQzX2dldF9yZWdzX2xlbiBpZiB3ZSB3YW50IHRvIGR1bXAgbW9yZSByZWdpc3RlcnMgKi8KKworCS8qIG1ha2UgZWFjaCByaW5nIHVzZSBtdWx0aXBsZSBvZiAxNiBieXRlcyAqLworCWJ1ZlswXSA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcubmV4dDJmaWxsOworCWJ1ZlsxXSA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcubmV4dDJjb21wOworCWJ1ZlsyXSA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcuZ2VuOworCWJ1ZlszXSA9IDA7CisKKwlidWZbNF0gPSBhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3JpbmcubmV4dDJwcm9jOworCWJ1Zls1XSA9IGFkYXB0ZXItPnR4X3F1ZXVlLmNvbXBfcmluZy5nZW47CisJYnVmWzZdID0gYWRhcHRlci0+dHhfcXVldWUuc3RvcHBlZDsKKwlidWZbN10gPSAwOworCisJYnVmWzhdID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5uZXh0MmZpbGw7CisJYnVmWzldID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5uZXh0MmNvbXA7CisJYnVmWzEwXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uZ2VuOworCWJ1ZlsxMV0gPSAwOworCisJYnVmWzEyXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0ubmV4dDJmaWxsOworCWJ1ZlsxM10gPSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzFdLm5leHQyY29tcDsKKwlidWZbMTRdID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5nZW47CisJYnVmWzE1XSA9IDA7CisKKwlidWZbMTZdID0gYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLm5leHQycHJvYzsKKwlidWZbMTddID0gYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLmdlbjsKKwlidWZbMThdID0gMDsKKwlidWZbMTldID0gMDsKK30KKworCitzdGF0aWMgdm9pZAordm14bmV0M19nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9VQ0FTVCB8IFdBS0VfQVJQIHwgV0FLRV9NQUdJQzsKKwl3b2wtPndvbG9wdHMgPSBhZGFwdGVyLT53b2w7Cit9CisKKworc3RhdGljIGludAordm14bmV0M19zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9QSFkgfCBXQUtFX01DQVNUIHwgV0FLRV9CQ0FTVCB8CisJCQkgICAgV0FLRV9NQUdJQ1NFQ1VSRSkpIHsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWFkYXB0ZXItPndvbCA9IHdvbC0+d29sb3B0czsKKworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLT53b2wpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAordm14bmV0M19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJZWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkgIFNVUFBPUlRFRF9UUDsKKwllY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfVFA7CisJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCisJaWYgKGFkYXB0ZXItPmxpbmtfc3BlZWQpIHsKKwkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwl9IGVsc2UgeworCQllY21kLT5zcGVlZCA9IC0xOworCQllY21kLT5kdXBsZXggPSAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQKK3ZteG5ldDNfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnBhcmFtKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJcGFyYW0tPnJ4X21heF9wZW5kaW5nID0gVk1YTkVUM19SWF9SSU5HX01BWF9TSVpFOworCXBhcmFtLT50eF9tYXhfcGVuZGluZyA9IFZNWE5FVDNfVFhfUklOR19NQVhfU0laRTsKKwlwYXJhbS0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7CisJcGFyYW0tPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKKworCXBhcmFtLT5yeF9wZW5kaW5nID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplOworCXBhcmFtLT50eF9wZW5kaW5nID0gYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5zaXplOworCXBhcmFtLT5yeF9taW5pX3BlbmRpbmcgPSAwOworCXBhcmFtLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKK30KKworCitzdGF0aWMgaW50Cit2bXhuZXQzX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpwYXJhbSkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgbmV3X3R4X3Jpbmdfc2l6ZSwgbmV3X3J4X3Jpbmdfc2l6ZTsKKwl1MzIgc3o7CisJaW50IGVyciA9IDA7CisKKwlpZiAocGFyYW0tPnR4X3BlbmRpbmcgPT0gMCB8fCBwYXJhbS0+dHhfcGVuZGluZyA+CisJCQkJCQlWTVhORVQzX1RYX1JJTkdfTUFYX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBhcmFtLT5yeF9wZW5kaW5nID09IDAgfHwgcGFyYW0tPnJ4X3BlbmRpbmcgPgorCQkJCQkJVk1YTkVUM19SWF9SSU5HX01BWF9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCisJLyogcm91bmQgaXQgdXAgdG8gYSBtdWx0aXBsZSBvZiBWTVhORVQzX1JJTkdfU0laRV9BTElHTiAqLworCW5ld190eF9yaW5nX3NpemUgPSAocGFyYW0tPnR4X3BlbmRpbmcgKyBWTVhORVQzX1JJTkdfU0laRV9NQVNLKSAmCisJCQkJCQkJflZNWE5FVDNfUklOR19TSVpFX01BU0s7CisJbmV3X3R4X3Jpbmdfc2l6ZSA9IG1pbl90KHUzMiwgbmV3X3R4X3Jpbmdfc2l6ZSwKKwkJCQkgVk1YTkVUM19UWF9SSU5HX01BWF9TSVpFKTsKKwlpZiAobmV3X3R4X3Jpbmdfc2l6ZSA+IFZNWE5FVDNfVFhfUklOR19NQVhfU0laRSB8fCAobmV3X3R4X3Jpbmdfc2l6ZSAlCisJCQkJCQlWTVhORVQzX1JJTkdfU0laRV9BTElHTikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiByaW5nMCBoYXMgdG8gYmUgYSBtdWx0aXBsZSBvZgorCSAqIHJ4X2J1Zl9wZXJfcGt0ICogVk1YTkVUM19SSU5HX1NJWkVfQUxJR04KKwkgKi8KKwlzeiA9IGFkYXB0ZXItPnJ4X2J1Zl9wZXJfcGt0ICogVk1YTkVUM19SSU5HX1NJWkVfQUxJR047CisJbmV3X3J4X3Jpbmdfc2l6ZSA9IChwYXJhbS0+cnhfcGVuZGluZyArIHN6IC0gMSkgLyBzeiAqIHN6OworCW5ld19yeF9yaW5nX3NpemUgPSBtaW5fdCh1MzIsIG5ld19yeF9yaW5nX3NpemUsCisJCQkJIFZNWE5FVDNfUlhfUklOR19NQVhfU0laRSAvIHN6ICogc3opOworCWlmIChuZXdfcnhfcmluZ19zaXplID4gVk1YTkVUM19SWF9SSU5HX01BWF9TSVpFIHx8IChuZXdfcnhfcmluZ19zaXplICUKKwkJCQkJCQkgICBzeikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobmV3X3R4X3Jpbmdfc2l6ZSA9PSBhZGFwdGVyLT50eF9xdWV1ZS50eF9yaW5nLnNpemUgJiYKKwkJCW5ld19yeF9yaW5nX3NpemUgPT0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplKSB7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogUmVzZXRfd29yayBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiByZXNldHRpbmcgdGhlIGRldmljZSwgd2FpdCBmb3IgaXRzCisJICogY29tcGxldGlvbi4KKwkgKi8KKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCW1zbGVlcCgxKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJdm14bmV0M19xdWllc2NlX2RldihhZGFwdGVyKTsKKwkJdm14bmV0M19yZXNldF9kZXYoYWRhcHRlcik7CisKKwkJLyogcmVjcmVhdGUgdGhlIHJ4IHF1ZXVlIGFuZCB0aGUgdHggcXVldWUgYmFzZWQgb24gdGhlCisJCSAqIG5ldyBzaXplcyAqLworCQl2bXhuZXQzX3RxX2Rlc3Ryb3koJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKwkJdm14bmV0M19ycV9kZXN0cm95KCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlcik7CisKKwkJZXJyID0gdm14bmV0M19jcmVhdGVfcXVldWVzKGFkYXB0ZXIsIG5ld190eF9yaW5nX3NpemUsCisJCQluZXdfcnhfcmluZ19zaXplLCBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUpOworCQlpZiAoZXJyKSB7CisJCQkvKiBmYWlsZWQsIG1vc3QgbGlrZWx5IGJlY2F1c2Ugb2YgT09NLCB0cnkgZGVmYXVsdAorCQkJICogc2l6ZSAqLworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFwcGx5IG5ldyBzaXplcywgdHJ5IHRoZSIKKwkJCQkiIGRlZmF1bHQgb25lc1xuIiwgbmV0ZGV2LT5uYW1lKTsKKwkJCWVyciA9IHZteG5ldDNfY3JlYXRlX3F1ZXVlcyhhZGFwdGVyLAorCQkJCQkJICAgIFZNWE5FVDNfREVGX1RYX1JJTkdfU0laRSwKKwkJCQkJCSAgICBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUsCisJCQkJCQkgICAgVk1YTkVUM19ERUZfUlhfUklOR19TSVpFKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIHF1ZXVlcyAiCisJCQkJCSJ3aXRoIGRlZmF1bHQgc2l6ZXMuIENsb3NpbmcgaXRcbiIsCisJCQkJCW5ldGRldi0+bmFtZSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQllcnIgPSB2bXhuZXQzX2FjdGl2YXRlX2RldihhZGFwdGVyKTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZS1hY3RpdmF0ZSwgZXJyb3IgJWQuIgorCQkJCSIgQ2xvc2luZyBpdFxuIiwgbmV0ZGV2LT5uYW1lLCBlcnIpOworCX0KKworb3V0OgorCWNsZWFyX2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJaWYgKGVycikKKwkJdm14bmV0M19mb3JjZV9jbG9zZShhZGFwdGVyKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB2bXhuZXQzX2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MgICAgICA9IHZteG5ldDNfZ2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyAgICAgICA9IHZteG5ldDNfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbiAgICAgID0gdm14bmV0M19nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzICAgICAgICAgID0gdm14bmV0M19nZXRfcmVncywKKwkuZ2V0X3dvbCAgICAgICAgICAgPSB2bXhuZXQzX2dldF93b2wsCisJLnNldF93b2wgICAgICAgICAgID0gdm14bmV0M19zZXRfd29sLAorCS5nZXRfbGluayAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9yeF9jc3VtICAgICAgID0gdm14bmV0M19nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0gICAgICAgPSB2bXhuZXQzX3NldF9yeF9jc3VtLAorCS5nZXRfdHhfY3N1bSAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLnNldF90eF9jc3VtICAgICAgID0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKKwkuZ2V0X3NnICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X3RzbyAgICAgICAgICAgPSBldGh0b29sX29wX2dldF90c28sCisJLnNldF90c28gICAgICAgICAgID0gZXRodG9vbF9vcF9zZXRfdHNvLAorCS5nZXRfc3RyaW5ncyAgICAgICA9IHZteG5ldDNfZ2V0X3N0cmluZ3MsCisJLmdldF9mbGFncwkgICA9IHZteG5ldDNfZ2V0X2ZsYWdzLAorCS5zZXRfZmxhZ3MJICAgPSB2bXhuZXQzX3NldF9mbGFncywKKwkuZ2V0X3NzZXRfY291bnQJICAgPSB2bXhuZXQzX2dldF9zc2V0X2NvdW50LAorCS5nZXRfZXRodG9vbF9zdGF0cyA9IHZteG5ldDNfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9yaW5ncGFyYW0gICAgID0gdm14bmV0M19nZXRfcmluZ3BhcmFtLAorCS5zZXRfcmluZ3BhcmFtICAgICA9IHZteG5ldDNfc2V0X3JpbmdwYXJhbSwKK307CisKK3ZvaWQgdm14bmV0M19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmdm14bmV0M19ldGh0b29sX29wcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmggYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwZDcwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaApAQCAtMCwwICsxLDM4OSBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgVk13YXJlJ3Mgdm14bmV0MyBldGhlcm5ldCBOSUMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlIGFuZCBubyBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAqIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICogTWFpbnRhaW5lZCBieTogU2hyZXlhcyBCaGF0ZXdhcmEgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfVk1YTkVUM19JTlRfSAorI2RlZmluZSBfVk1YTkVUM19JTlRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKworI2luY2x1ZGUgInZteG5ldDNfZGVmcy5oIgorCisjaWZkZWYgREVCVUcKKyMgZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fUkVQT1JUIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HIi1OQVBJKGRlYnVnKSIKKyNlbHNlCisjIGRlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1JFUE9SVCBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1NUUklORyItTkFQSSIKKyNlbmRpZgorCisKKy8qCisgKiBWZXJzaW9uIG51bWJlcnMKKyAqLworI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1NUUklORyAgICIxLjAuNS4wLWsiCisKKy8qIGEgMzItYml0IGludCwgZWFjaCBieXRlIGVuY29kZSBhIHZlcmlvbiBudW1iZXIgaW4gVk1YTkVUM19EUklWRVJfVkVSU0lPTiAqLworI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX05VTSAgICAgIDB4MDEwMDA1MDAKKworCisvKgorICogQ2FwYWJpbGl0aWVzCisgKi8KKworZW51bSB7CisJVk1ORVRfQ0FQX1NHCSAgICAgICAgPSAweDAwMDEsIC8qIENhbiBkbyBzY2F0dGVyLWdhdGhlciB0cmFuc21pdHMuICovCisJVk1ORVRfQ0FQX0lQNF9DU1VNICAgICAgPSAweDAwMDIsIC8qIENhbiBjaGVja3N1bSBvbmx5IFRDUC9VRFAgb3ZlcgorCQkJCQkgICAqIElQdjQgKi8KKwlWTU5FVF9DQVBfSFdfQ1NVTSAgICAgICA9IDB4MDAwNCwgLyogQ2FuIGNoZWNrc3VtIGFsbCBwYWNrZXRzLiAqLworCVZNTkVUX0NBUF9ISUdIX0RNQSAgICAgID0gMHgwMDA4LCAvKiBDYW4gRE1BIHRvIGhpZ2ggbWVtb3J5LiAqLworCVZNTkVUX0NBUF9UT0UJICAgICAgICA9IDB4MDAxMCwgLyogU3VwcG9ydHMgVENQL0lQIG9mZmxvYWQuICovCisJVk1ORVRfQ0FQX1RTTwkgICAgICAgID0gMHgwMDIwLCAvKiBTdXBwb3J0cyBUQ1AgU2VnbWVudGF0aW9uCisJCQkJCSAgICogb2ZmbG9hZCAqLworCVZNTkVUX0NBUF9TV19UU08gICAgICAgID0gMHgwMDQwLCAvKiBTdXBwb3J0cyBTVyBUQ1AgU2VnbWVudGF0aW9uICovCisJVk1ORVRfQ0FQX1ZNWE5FVF9BUFJPTSAgPSAweDAwODAsIC8qIFZteG5ldCBBUFJPTSBzdXBwb3J0ICovCisJVk1ORVRfQ0FQX0hXX1RYX1ZMQU4gICAgPSAweDAxMDAsIC8qIENhbiB3ZSBkbyBWTEFOIHRhZ2dpbmcgaW4gSFcgKi8KKwlWTU5FVF9DQVBfSFdfUlhfVkxBTiAgICA9IDB4MDIwMCwgLyogQ2FuIHdlIGRvIFZMQU4gdW50YWdnaW5nIGluIEhXICovCisJVk1ORVRfQ0FQX1NXX1ZMQU4gICAgICAgPSAweDA0MDAsIC8qIFZMQU4gdGFnZ2luZy91bnRhZ2dpbmcgaW4gU1cgKi8KKwlWTU5FVF9DQVBfV0FLRV9QQ0tUX1JDViA9IDB4MDgwMCwgLyogQ2FuIHdha2Ugb24gbmV0d29yayBwYWNrZXQgcmVjdj8gKi8KKwlWTU5FVF9DQVBfRU5BQkxFX0lOVF9JTkxJTkUgPSAweDEwMDAsICAvKiBFbmFibGUgSW50ZXJydXB0IElubGluZSAqLworCVZNTkVUX0NBUF9FTkFCTEVfSEVBREVSX0NPUFkgPSAweDIwMDAsICAvKiBjb3B5IGhlYWRlciBmb3Igdm1rZXJuZWwgKi8KKwlWTU5FVF9DQVBfVFhfQ0hBSU4gICAgICA9IDB4NDAwMCwgLyogR3Vlc3QgY2FuIHVzZSBtdWx0aXBsZSB0eCBlbnRyaWVzCisJCQkJCSAgKiBmb3IgYSBwa3QgKi8KKwlWTU5FVF9DQVBfUlhfQ0hBSU4gICAgICA9IDB4ODAwMCwgLyogcGt0IGNhbiBzcGFuIG11bHRpcGxlIHJ4IGVudHJpZXMgKi8KKwlWTU5FVF9DQVBfTFBEICAgICAgICAgICA9IDB4MTAwMDAsIC8qIGxhcmdlIHBrdCBkZWxpdmVyeSAqLworCVZNTkVUX0NBUF9CUEYgICAgICAgICAgID0gMHgyMDAwMCwgLyogQlBGIFN1cHBvcnQgaW4gVk1YTkVUIFZpcnR1YWwgSFcqLworCVZNTkVUX0NBUF9TR19TUEFOX1BBR0VTID0gMHg0MDAwMCwgLyogU2NhdHRlci1nYXRoZXIgY2FuIHNwYW4gbXVsdGlwbGUqLworCQkJCQkgICAvKiBwYWdlcyB0cmFuc21pdHMgKi8KKwlWTU5FVF9DQVBfSVA2X0NTVU0gICAgICA9IDB4ODAwMDAsIC8qIENhbiBkbyBJUHY2IGNzdW0gb2ZmbG9hZC4gKi8KKwlWTU5FVF9DQVBfVFNPNiAgICAgICAgID0gMHgxMDAwMDAsIC8qIFRTTyBzZWcuIG9mZmxvYWQgZm9yIElQdjYgcGt0cy4gKi8KKwlWTU5FVF9DQVBfVFNPMjU2ayAgICAgID0gMHgyMDAwMDAsIC8qIENhbiBkbyBUU08gc2VnIG9mZmxvYWQgZm9yICovCisJCQkJCSAgIC8qIHBrdHMgdXAgdG8gMjU2a0IuICovCisJVk1ORVRfQ0FQX1VQVCAgICAgICAgICA9IDB4NDAwMDAwICAvKiBTdXBwb3J0IFVQVCAqLworfTsKKworLyoKKyAqIFBDSSB2ZW5kb3IgYW5kIGRldmljZSBJRHMuCisgKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WTVdBUkUgICAgICAgICAgICAweDE1QUQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTVdBUkVfVk1YTkVUMyAgICAweDA3QjAKKyNkZWZpbmUgTUFYX0VUSEVSTkVUX0NBUkRTCQkxMAorI2RlZmluZSBNQVhfUENJX1BBU1NUSFJVX0RFVklDRQkJNgorCitzdHJ1Y3Qgdm14bmV0M19jbWRfcmluZyB7CisJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqYmFzZTsKKwl1MzIJCXNpemU7CisJdTMyCQluZXh0MmZpbGw7CisJdTMyCQluZXh0MmNvbXA7CisJdTgJCWdlbjsKKwlkbWFfYWRkcl90CWJhc2VQQTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordm14bmV0M19jbWRfcmluZ19hZHZfbmV4dDJmaWxsKHN0cnVjdCB2bXhuZXQzX2NtZF9yaW5nICpyaW5nKQoreworCXJpbmctPm5leHQyZmlsbCsrOworCWlmICh1bmxpa2VseShyaW5nLT5uZXh0MmZpbGwgPT0gcmluZy0+c2l6ZSkpIHsKKwkJcmluZy0+bmV4dDJmaWxsID0gMDsKKwkJVk1YTkVUM19GTElQX1JJTkdfR0VOKHJpbmctPmdlbik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3ZteG5ldDNfY21kX3JpbmdfYWR2X25leHQyY29tcChzdHJ1Y3Qgdm14bmV0M19jbWRfcmluZyAqcmluZykKK3sKKwlWTVhORVQzX0lOQ19SSU5HX0lEWF9PTkxZKHJpbmctPm5leHQyY29tcCwgcmluZy0+c2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit2bXhuZXQzX2NtZF9yaW5nX2Rlc2NfYXZhaWwoc3RydWN0IHZteG5ldDNfY21kX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIChyaW5nLT5uZXh0MmNvbXAgPiByaW5nLT5uZXh0MmZpbGwgPyAwIDogcmluZy0+c2l6ZSkgKworCQlyaW5nLT5uZXh0MmNvbXAgLSByaW5nLT5uZXh0MmZpbGwgLSAxOworfQorCitzdHJ1Y3Qgdm14bmV0M19jb21wX3JpbmcgeworCXVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKmJhc2U7CisJdTMyICAgICAgICAgICAgICAgc2l6ZTsKKwl1MzIgICAgICAgICAgICAgICBuZXh0MnByb2M7CisJdTggICAgICAgICAgICAgICAgZ2VuOworCXU4ICAgICAgICAgICAgICAgIGludHJfaWR4OworCWRtYV9hZGRyX3QgICAgICAgICAgIGJhc2VQQTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordm14bmV0M19jb21wX3JpbmdfYWR2X25leHQycHJvYyhzdHJ1Y3Qgdm14bmV0M19jb21wX3JpbmcgKnJpbmcpCit7CisJcmluZy0+bmV4dDJwcm9jKys7CisJaWYgKHVubGlrZWx5KHJpbmctPm5leHQycHJvYyA9PSByaW5nLT5zaXplKSkgeworCQlyaW5nLT5uZXh0MnByb2MgPSAwOworCQlWTVhORVQzX0ZMSVBfUklOR19HRU4ocmluZy0+Z2VuKTsKKwl9Cit9CisKK3N0cnVjdCB2bXhuZXQzX3R4X2RhdGFfcmluZyB7CisJc3RydWN0IFZteG5ldDNfVHhEYXRhRGVzYyAqYmFzZTsKKwl1MzIgICAgICAgICAgICAgIHNpemU7CisJZG1hX2FkZHJfdCAgICAgICAgICBiYXNlUEE7Cit9OworCitlbnVtIHZteG5ldDNfYnVmX21hcF90eXBlIHsKKwlWTVhORVQzX01BUF9JTlZBTElEID0gMCwKKwlWTVhORVQzX01BUF9OT05FLAorCVZNWE5FVDNfTUFQX1NJTkdMRSwKKwlWTVhORVQzX01BUF9QQUdFLAorfTsKKworc3RydWN0IHZteG5ldDNfdHhfYnVmX2luZm8geworCXUzMiAgICAgIG1hcF90eXBlOworCXUxNiAgICAgIGxlbjsKKwl1MTYgICAgICBzb3BfaWR4OworCWRtYV9hZGRyX3QgIGRtYV9hZGRyOworCXN0cnVjdCBza19idWZmICpza2I7Cit9OworCitzdHJ1Y3Qgdm14bmV0M190cV9kcml2ZXJfc3RhdHMgeworCXU2NCBkcm9wX3RvdGFsOyAgICAgLyogIyBvZiBwa3RzIGRyb3BwZWQgYnkgdGhlIGRyaXZlciwgdGhlCisJCQkJKiBjb3VudGVycyBiZWxvdyB0cmFjayBkcm9wcGluZ3MgZHVlIHRvCisJCQkJKiBkaWZmZXJlbnQgcmVhc29ucworCQkJCSovCisJdTY0IGRyb3BfdG9vX21hbnlfZnJhZ3M7CisJdTY0IGRyb3Bfb3ZlcnNpemVkX2hkcjsKKwl1NjQgZHJvcF9oZHJfaW5zcGVjdF9lcnI7CisJdTY0IGRyb3BfdHNvOworCisJdTY0IHR4X3JpbmdfZnVsbDsKKwl1NjQgbGluZWFyaXplZDsgICAgICAgICAvKiAjIG9mIHBrdHMgbGluZWFyaXplZCAqLworCXU2NCBjb3B5X3NrYl9oZWFkZXI7ICAgIC8qICMgb2YgdGltZXMgd2UgaGF2ZSB0byBjb3B5IHNrYiBoZWFkZXIgKi8KKwl1NjQgb3ZlcnNpemVkX2hkcjsKK307CisKK3N0cnVjdCB2bXhuZXQzX3R4X2N0eCB7CisJYm9vbCAgIGlwdjQ7CisJdTE2IG1zczsKKwl1MzIgZXRoX2lwX2hkcl9zaXplOyAvKiBvbmx5IHZhbGlkIGZvciBwa3RzIHJlcXVlc3RpbmcgdHNvIG9yIGNzdW0KKwkJCQkgKiBvZmZsb2FkaW5nCisJCQkJICovCisJdTMyIGw0X2hkcl9zaXplOyAgICAgLyogb25seSB2YWxpZCBpZiBtc3MgIT0gMCAqLworCXUzMiBjb3B5X3NpemU7ICAgICAgIC8qICMgb2YgYnl0ZXMgY29waWVkIGludG8gdGhlIGRhdGEgcmluZyAqLworCXVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKnNvcF90eGQ7CisJdW5pb24gVm14bmV0M19HZW5lcmljRGVzYyAqZW9wX3R4ZDsKK307CisKK3N0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlIHsKKwlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgICAgIHR4X2xvY2s7CisJc3RydWN0IHZteG5ldDNfY21kX3JpbmcgICAgICAgICB0eF9yaW5nOworCXN0cnVjdCB2bXhuZXQzX3R4X2J1Zl9pbmZvICAgICAqYnVmX2luZm87CisJc3RydWN0IHZteG5ldDNfdHhfZGF0YV9yaW5nICAgICBkYXRhX3Jpbmc7CisJc3RydWN0IHZteG5ldDNfY29tcF9yaW5nICAgICAgICBjb21wX3Jpbmc7CisJc3RydWN0IFZteG5ldDNfVHhRdWV1ZUN0cmwgICAgICAgICAgICAqc2hhcmVkOworCXN0cnVjdCB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0cyAgc3RhdHM7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGVkOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3N0b3A7ICAvKiAjIG9mIHRpbWVzIHRoZSBxdWV1ZSBpcworCQkJCQkJICAgICogc3RvcHBlZCAqLworfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhTTVBfQ0FDSEVfQllURVMpKSk7CisKK2VudW0gdm14bmV0M19yeF9idWZfdHlwZSB7CisJVk1YTkVUM19SWF9CVUZfTk9ORSA9IDAsCisJVk1YTkVUM19SWF9CVUZfU0tCID0gMSwKKwlWTVhORVQzX1JYX0JVRl9QQUdFID0gMgorfTsKKworc3RydWN0IHZteG5ldDNfcnhfYnVmX2luZm8geworCWVudW0gdm14bmV0M19yeF9idWZfdHlwZSBidWZfdHlwZTsKKwl1MTYgICAgIGxlbjsKKwl1bmlvbiB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCXN0cnVjdCBwYWdlICAgICpwYWdlOworCX07CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKK307CisKK3N0cnVjdCB2bXhuZXQzX3J4X2N0eCB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgc29wX2lkeDsKK307CisKK3N0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyB7CisJdTY0IGRyb3BfdG90YWw7CisJdTY0IGRyb3BfZXJyOworCXU2NCBkcm9wX2ZjczsKKwl1NjQgcnhfYnVmX2FsbG9jX2ZhaWx1cmU7Cit9OworCitzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSB7CisJc3RydWN0IHZteG5ldDNfY21kX3JpbmcgICByeF9yaW5nWzJdOworCXN0cnVjdCB2bXhuZXQzX2NvbXBfcmluZyAgY29tcF9yaW5nOworCXN0cnVjdCB2bXhuZXQzX3J4X2N0eCAgICAgcnhfY3R4OworCXUzMiBxaWQ7ICAgICAgICAgICAgLyogcnFJRCBpbiBSQ0QgZm9yIGJ1ZmZlciBmcm9tIDFzdCByaW5nICovCisJdTMyIHFpZDI7ICAgICAgICAgICAvKiBycUlEIGluIFJDRCBmb3IgYnVmZmVyIGZyb20gMm5kIHJpbmcgKi8KKwl1MzIgdW5jb21taXR0ZWRbMl07IC8qICMgb2YgYnVmZmVycyBhbGxvY2F0ZWQgc2luY2UgbGFzdCBSWFBST0QKKwkJCQkqIHVwZGF0ZSAqLworCXN0cnVjdCB2bXhuZXQzX3J4X2J1Zl9pbmZvICAgICAqYnVmX2luZm9bMl07CisJc3RydWN0IFZteG5ldDNfUnhRdWV1ZUN0cmwgICAgICAgICAgICAqc2hhcmVkOworCXN0cnVjdCB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0cyAgc3RhdHM7Cit9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUykpKTsKKworI2RlZmluZSBWTVhORVQzX0xJTlVYX01BWF9NU0lYX1ZFQ1QgICAgIDEKKworc3RydWN0IHZteG5ldDNfaW50ciB7CisJZW51bSB2bXhuZXQzX2ludHJfbWFza19tb2RlICBtYXNrX21vZGU7CisJZW51bSB2bXhuZXQzX2ludHJfdHlwZSAgICAgICB0eXBlOwkvKiBNU0ktWCwgTVNJLCBvciBJTlR4PyAqLworCXU4ICBudW1faW50cnM7CQkJLyogIyBvZiBpbnRyIHZlY3RvcnMgKi8KKwl1OCAgZXZlbnRfaW50cl9pZHg7CQkvKiBpZHggb2YgdGhlIGludHIgdmVjdG9yIGZvciBldmVudCAqLworCXU4ICBtb2RfbGV2ZWxzW1ZNWE5FVDNfTElOVVhfTUFYX01TSVhfVkVDVF07IC8qIG1vZGVyYXRpb24gbGV2ZWwgKi8KKyNpZmRlZiBDT05GSUdfUENJX01TSQorCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tWTVhORVQzX0xJTlVYX01BWF9NU0lYX1ZFQ1RdOworI2VuZGlmCit9OworCisjZGVmaW5lIFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORyAgIDAKKyNkZWZpbmUgVk1YTkVUM19TVEFURV9CSVRfUVVJRVNDRUQgICAgMQorc3RydWN0IHZteG5ldDNfYWRhcHRlciB7CisJc3RydWN0IHZteG5ldDNfdHhfcXVldWUgICAgICAgICB0eF9xdWV1ZTsKKwlzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAgICAgICAgIHJ4X3F1ZXVlOworCXN0cnVjdCBuYXBpX3N0cnVjdCAgICAgICAgICAgICAgbmFwaTsKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAgICAgICAgICAgICAgKnZsYW5fZ3JwOworCisJc3RydWN0IHZteG5ldDNfaW50ciAgICAgICAgICAgICBpbnRyOworCisJc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkICAgICpzaGFyZWQ7CisJc3RydWN0IFZteG5ldDNfUE1Db25mICAgICAgICAgICpwbV9jb25mOworCXN0cnVjdCBWbXhuZXQzX1R4UXVldWVEZXNjICAgICAqdHFkX3N0YXJ0OyAgICAgLyogZmlyc3QgdHggcXVldWUgZGVzYyAqLworCXN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjICAgICAqcnFkX3N0YXJ0OyAgICAgLyogZmlyc3QgcnggcXVldWUgZGVzYyAqLworCXN0cnVjdCBuZXRfZGV2aWNlICAgICAgICAgICAgICAqbmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICAgICAqcGRldjsKKworCXU4CQkJCSpod19hZGRyMDsgLyogZm9yIEJBUiAwICovCisJdTgJCQkJKmh3X2FkZHIxOyAvKiBmb3IgQkFSIDEgKi8KKworCS8qIGZlYXR1cmUgY29udHJvbCAqLworCWJvb2wJCQkJcnhjc3VtOworCWJvb2wJCQkJbHJvOworCWJvb2wJCQkJanVtYm9fZnJhbWU7CisKKwkvKiByeCBidWZmZXIgcmVsYXRlZCAqLworCXVuc2lnbmVkCQkJc2tiX2J1Zl9zaXplOworCWludAkJcnhfYnVmX3Blcl9wa3Q7ICAvKiBvbmx5IGFwcGx5IHRvIHRoZSAxc3QgcmluZyAqLworCWRtYV9hZGRyX3QJCQlzaGFyZWRfcGE7CisJZG1hX2FkZHJfdCBxdWV1ZV9kZXNjX3BhOworCisJLyogV2FrZS1vbi1MQU4gKi8KKwl1MzIgICAgIHdvbDsKKworCS8qIExpbmsgc3BlZWQgKi8KKwl1MzIgICAgIGxpbmtfc3BlZWQ7IC8qIGluIG1icHMgKi8KKworCXU2NCAgICAgdHhfdGltZW91dF9jb3VudDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCXVuc2lnbmVkIGxvbmcgIHN0YXRlOyAgICAvKiBWTVhORVQzX1NUQVRFX0JJVF94eHggKi8KKworCWludCBkZXZfbnVtYmVyOworfTsKKworI2RlZmluZSBWTVhORVQzX1dSSVRFX0JBUjBfUkVHKGFkYXB0ZXIsIHJlZywgdmFsKSAgXAorCXdyaXRlbCgodmFsKSwgKGFkYXB0ZXIpLT5od19hZGRyMCArIChyZWcpKQorI2RlZmluZSBWTVhORVQzX1JFQURfQkFSMF9SRUcoYWRhcHRlciwgcmVnKSAgICAgICAgXAorCXJlYWRsKChhZGFwdGVyKS0+aHdfYWRkcjAgKyAocmVnKSkKKworI2RlZmluZSBWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIHJlZywgdmFsKSAgXAorCXdyaXRlbCgodmFsKSwgKGFkYXB0ZXIpLT5od19hZGRyMSArIChyZWcpKQorI2RlZmluZSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgcmVnKSAgICAgICAgXAorCXJlYWRsKChhZGFwdGVyKS0+aHdfYWRkcjEgKyAocmVnKSkKKworI2RlZmluZSBWTVhORVQzX1dBS0VfUVVFVUVfVEhSRVNIT0xEKHRxKSAgKDUpCisjZGVmaW5lIFZNWE5FVDNfUlhfQUxMT0NfVEhSRVNIT0xEKHJxLCByaW5nX2lkeCwgYWRhcHRlcikgXAorCSgocnEpLT5yeF9yaW5nW3JpbmdfaWR4XS5zaXplID4+IDMpCisKKyNkZWZpbmUgVk1YTkVUM19HRVRfQUREUl9MTyhkbWEpICAgKCh1MzIpKGRtYSkpCisjZGVmaW5lIFZNWE5FVDNfR0VUX0FERFJfSEkoZG1hKSAgICgodTMyKSgoKHU2NCkoZG1hKSkgPj4gMzIpKQorCisvKiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgVk1YTkVUM19SSU5HX1NJWkVfQUxJR04gKi8KKyNkZWZpbmUgVk1YTkVUM19ERUZfVFhfUklOR19TSVpFICAgIDUxMgorI2RlZmluZSBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUgICAgMjU2CisKKyNkZWZpbmUgVk1YTkVUM19NQVhfRVRIX0hEUl9TSVpFICAgIDIyCisjZGVmaW5lIFZNWE5FVDNfTUFYX1NLQl9CVUZfU0laRSAgICAoMyoxMDI0KQorCitpbnQKK3ZteG5ldDNfcXVpZXNjZV9kZXYoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcik7CisKK2ludAordm14bmV0M19hY3RpdmF0ZV9kZXYoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQKK3ZteG5ldDNfZm9yY2VfY2xvc2Uoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQKK3ZteG5ldDNfcmVzZXRfZGV2KHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpOworCit2b2lkCit2bXhuZXQzX3RxX2Rlc3Ryb3koc3RydWN0IHZteG5ldDNfdHhfcXVldWUgKnRxLAorCQkgICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZAordm14bmV0M19ycV9kZXN0cm95KHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwKKwkJICAgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcik7CisKK2ludAordm14bmV0M19jcmVhdGVfcXVldWVzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICAgIHUzMiB0eF9yaW5nX3NpemUsIHUzMiByeF9yaW5nX3NpemUsIHUzMiByeF9yaW5nMl9zaXplKTsKKworZXh0ZXJuIHZvaWQgdm14bmV0M19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnZteG5ldDNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCitleHRlcm4gY2hhciB2bXhuZXQzX2RyaXZlcl9uYW1lW107CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMgYi9kcml2ZXJzL25ldC93YW4vYzEwMS5jCmluZGV4IDk2OTNiMGYuLjBiZDg5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2MxMDEuYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKaW5kZXggY2Y1ZmQxNy4uZjFiZmY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCkBAIC01OCw4ICs1OCw3IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9wb2xsOwogCWludCB1cDsKLQlpbnQgcmVxdWVzdF9zZW50OwotCXUzMiB0eHNlcTsgLyogVFggc2VxdWVuY2UgbnVtYmVyICovCisJdTMyIHR4c2VxOyAvKiBUWCBzZXF1ZW5jZSBudW1iZXIsIDAgPSBub25lICovCiAJdTMyIHJ4c2VxOyAvKiBSWCBzZXF1ZW5jZSBudW1iZXIgKi8KIH07CiAKQEAgLTE2Myw2ICsxNjIsNyBAQAogCXN0cnVjdCBjaXNjb19wYWNrZXQgKmNpc2NvX2RhdGE7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCV9fYmUzMiBhZGRyLCBtYXNrOworCXUzMiBhY2s7CiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSkKIAkJZ290byByeF9lcnJvcjsKQEAgLTIyMyw4ICsyMjMsMTAgQEAKIAkJY2FzZSBDSVNDT19LRUVQQUxJVkVfUkVROgogCQkJc3Bpbl9sb2NrKCZzdC0+bG9jayk7CiAJCQlzdC0+cnhzZXEgPSBudG9obChjaXNjb19kYXRhLT5wYXIxKTsKLQkJCWlmIChzdC0+cmVxdWVzdF9zZW50ICYmCi0JCQkgICAgbnRvaGwoY2lzY29fZGF0YS0+cGFyMikgPT0gc3QtPnR4c2VxKSB7CisJCQlhY2sgPSBudG9obChjaXNjb19kYXRhLT5wYXIyKTsKKwkJCWlmIChhY2sgJiYgKGFjayA9PSBzdC0+dHhzZXEgfHwKKwkJCQkgICAgLyogb3VyIGN1cnJlbnQgUkVRIG1heSBiZSBpbiB0cmFuc2l0ICovCisJCQkJICAgIGFjayA9PSBzdC0+dHhzZXEgLSAxKSkgewogCQkJCXN0LT5sYXN0X3BvbGwgPSBqaWZmaWVzOwogCQkJCWlmICghc3QtPnVwKSB7CiAJCQkJCXUzMiBzZWMsIG1pbiwgaHJzLCBkYXlzOwpAQCAtMjc1LDcgKzI3Nyw2IEBACiAKIAljaXNjb19rZWVwYWxpdmVfc2VuZChkZXYsIENJU0NPX0tFRVBBTElWRV9SRVEsIGh0b25sKCsrc3QtPnR4c2VxKSwKIAkJCSAgICAgaHRvbmwoc3QtPnJ4c2VxKSk7Ci0Jc3QtPnJlcXVlc3Rfc2VudCA9IDE7CiAJc3Bpbl91bmxvY2soJnN0LT5sb2NrKTsKIAogCXN0LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHN0LT5zZXR0aW5ncy5pbnRlcnZhbCAqIEhaOwpAQCAtMjkzLDkgKzI5NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdC0+bG9jaywgZmxhZ3MpOwotCXN0LT51cCA9IDA7Ci0Jc3QtPnJlcXVlc3Rfc2VudCA9IDA7Ci0Jc3QtPnR4c2VxID0gc3QtPnJ4c2VxID0gMDsKKwlzdC0+dXAgPSBzdC0+dHhzZXEgPSBzdC0+cnhzZXEgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5sb2NrLCBmbGFncyk7CiAKIAlpbml0X3RpbWVyKCZzdC0+dGltZXIpOwpAQCAtMzE3LDggKzMxNiw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPmxvY2ssIGZsYWdzKTsKIAluZXRpZl9kb3JtYW50X29uKGRldik7Ci0Jc3QtPnVwID0gMDsKLQlzdC0+cmVxdWVzdF9zZW50ID0gMDsKKwlzdC0+dXAgPSBzdC0+dHhzZXEgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5sb2NrLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9uMi5jIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKaW5kZXggODNkYTU5Ni4uNThjNjY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL24yLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCmluZGV4IGE1MmYyOWMuLmYxMzQwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5oCmluZGV4IDRmNmFiMTMuLmIwN2U0ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmgKQEAgLTI2Niw3ICsyNjYsNyBAQAogI2RlZmluZSBBRE04MjExX1NZTkNUTF9DUzEJKDEgPDwgMjgpCiAjZGVmaW5lIEFETTgyMTFfU1lOQ1RMX0NBTAkoMSA8PCAyNykKICNkZWZpbmUgQURNODIxMV9TWU5DVExfU0VMQ0FMCSgxIDw8IDI2KQotI2RlZmluZSBBRE04MjExX1NZTkNUTF9SRnR5cGUJKCgxIDw8IDI0KSB8fCAoMSA8PCAyMykgfHwgKDEgPDwgMjIpKQorI2RlZmluZSBBRE04MjExX1NZTkNUTF9SRnR5cGUJKCgxIDw8IDI0KSB8ICgxIDw8IDIzKSB8ICgxIDw8IDIyKSkKICNkZWZpbmUgQURNODIxMV9TWU5DVExfUkZNRAkoMSA8PCAyMikKICNkZWZpbmUgQURNODIxMV9TWU5DVExfR0VORVJBTAkoMHg3IDw8IDIyKQogLyogU1lOQ1RMIDIxOjAgRGF0YSAoU2k0MTI2OiAxOC1iaXQgZGF0YSwgNC1iaXQgYWRkcmVzcykgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCA3MTE2YTFhLi5hYmY4OTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC00NzkwLDkgKzQ3OTAsOCBAQAogc3RhdGljIGludCBnZXRfZGVjX3UxNiggY2hhciAqYnVmZmVyLCBpbnQgKnN0YXJ0LCBpbnQgbGltaXQgKSB7CiAJdTE2IHZhbHVlOwogCWludCB2YWxpZCA9IDA7Ci0JZm9yKCB2YWx1ZSA9IDA7IGJ1ZmZlclsqc3RhcnRdID49ICcwJyAmJgotCQkgICAgIGJ1ZmZlclsqc3RhcnRdIDw9ICc5JyAmJgotCQkgICAgICpzdGFydCA8IGxpbWl0OyAoKnN0YXJ0KSsrICkgeworCWZvciAodmFsdWUgPSAwOyAqc3RhcnQgPCBsaW1pdCAmJiBidWZmZXJbKnN0YXJ0XSA+PSAnMCcgJiYKKwkJCWJ1ZmZlclsqc3RhcnRdIDw9ICc5JzsgKCpzdGFydCkrKykgewogCQl2YWxpZCA9IDE7CiAJCXZhbHVlICo9IDEwOwogCQl2YWx1ZSArPSBidWZmZXJbKnN0YXJ0XSAtICcwJzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAppbmRleCBmYTE1NDlhLi42NjA3MTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCkBAIC02MDcsODIgKzYwNyw3IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgcDsKIH07CiAKLXN0cnVjdCBiNDNfd2xkZXY7Ci0KLS8qIERhdGEgc3RydWN0dXJlIGZvciB0aGUgV0xBTiBwYXJ0cyAoODAyLjExIGNvcmVzKSBvZiB0aGUgYjQzIGNoaXAuICovCi1zdHJ1Y3QgYjQzX3dsIHsKLQkvKiBQb2ludGVyIHRvIHRoZSBhY3RpdmUgd2lyZWxlc3MgZGV2aWNlIG9uIHRoaXMgY2hpcCAqLwotCXN0cnVjdCBiNDNfd2xkZXYgKmN1cnJlbnRfZGV2OwotCS8qIFBvaW50ZXIgdG8gdGhlIGllZWU4MDIxMSBoYXJkd2FyZSBkYXRhIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCi0JLyogR2xvYmFsIGRyaXZlciBtdXRleC4gRXZlcnkgb3BlcmF0aW9uIG11c3QgcnVuIHdpdGggdGhpcyBtdXRleCBsb2NrZWQuICovCi0Jc3RydWN0IG11dGV4IG11dGV4OwotCS8qIEhhcmQtSVJRIHNwaW5sb2NrLiBUaGlzIGxvY2sgcHJvdGVjdHMgdGhpbmdzIHVzZWQgaW4gdGhlIGhhcmQtSVJRCi0JICogaGFuZGxlciwgb25seS4gVGhpcyBiYXNpY2FsbHkgaXMganVzdCB0aGUgSVJRIG1hc2sgcmVnaXN0ZXIuICovCi0Jc3BpbmxvY2tfdCBoYXJkaXJxX2xvY2s7Ci0KLQkvKiBUaGUgbnVtYmVyIG9mIHF1ZXVlcyB0aGF0IHdlcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0KLQkgKiBpbml0aWFsbHkuIFRoaXMgaXMgYSBiYWNrdXAgY29weSBvZiBody0+cXVldWVzIGluIGNhc2UgaHctPnF1ZXVlcyBoYXMKLQkgKiB0byBiZSBkeW5hbWljYWxseSBsb3dlcmVkIGF0IHJ1bnRpbWUgKEZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgUW9TKS4KLQkgKiBody0+cXVldWVzIGhhcyB0byBiZSByZXN0b3JlZCB0byB0aGUgb3JpZ2luYWwgdmFsdWUgYmVmb3JlIHVucmVnaXN0ZXJpbmcKLQkgKiBmcm9tIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uICovCi0JdTE2IG1hYzgwMjExX2luaXRpYWxseV9yZWdpc3RlcmVkX3F1ZXVlczsKLQotCS8qIFdlIGNhbiBvbmx5IGhhdmUgb25lIG9wZXJhdGluZyBpbnRlcmZhY2UgKDgwMi4xMSBjb3JlKQotCSAqIGF0IGEgdGltZS4gR2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGludGVyZmFjZSBmb2xsb3dzLgotCSAqLwotCi0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQkvKiBUaGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG9wZXJhdGluZyBpbnRlcmZhY2UuICovCi0JdTggbWFjX2FkZHJbRVRIX0FMRU5dOwotCS8qIEN1cnJlbnQgQlNTSUQgKi8KLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JLyogSW50ZXJmYWNlIHR5cGUuIChOTDgwMjExX0lGVFlQRV9YWFgpICovCi0JaW50IGlmX3R5cGU7Ci0JLyogSXMgdGhlIGNhcmQgb3BlcmF0aW5nIGluIEFQLCBTVEEgb3IgSUJTUyBtb2RlPyAqLwotCWJvb2wgb3BlcmF0aW5nOwotCS8qIGZpbHRlciBmbGFncyAqLwotCXVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3M7Ci0JLyogU3RhdHMgYWJvdXQgdGhlIHdpcmVsZXNzIGludGVyZmFjZSAqLwotCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzIGllZWVfc3RhdHM7Ci0KLSNpZmRlZiBDT05GSUdfQjQzX0hXUk5HCi0Jc3RydWN0IGh3cm5nIHJuZzsKLQlib29sIHJuZ19pbml0aWFsaXplZDsKLQljaGFyIHJuZ19uYW1lWzMwICsgMV07Ci0jZW5kaWYgLyogQ09ORklHX0I0M19IV1JORyAqLwotCi0JLyogTGlzdCBvZiBhbGwgd2lyZWxlc3MgZGV2aWNlcyBvbiB0aGlzIGNoaXAgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGRldmxpc3Q7Ci0JdTggbnJfZGV2czsKLQotCWJvb2wgcmFkaW90YXBfZW5hYmxlZDsKLQlib29sIHJhZGlvX2VuYWJsZWQ7Ci0KLQkvKiBUaGUgYmVhY29uIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgKEFQIG9yIElCU1MgbW9kZSkuICovCi0Jc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfYmVhY29uOwotCWJvb2wgYmVhY29uMF91cGxvYWRlZDsKLQlib29sIGJlYWNvbjFfdXBsb2FkZWQ7Ci0JYm9vbCBiZWFjb25fdGVtcGxhdGVzX3ZpcmdpbjsgLyogTmV2ZXIgd3JvdGUgdGhlIHRlbXBsYXRlcz8gKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3VwZGF0ZV90cmlnZ2VyOwotCi0JLyogVGhlIGN1cnJlbnQgUU9TIHBhcmFtZXRlcnMgZm9yIHRoZSA0IHF1ZXVlcy4gKi8KLQlzdHJ1Y3QgYjQzX3Fvc19wYXJhbXMgcW9zX3BhcmFtc1s0XTsKLQotCS8qIFdvcmsgZm9yIGFkanVzdG1lbnQgb2YgdGhlIHRyYW5zbWlzc2lvbiBwb3dlci4KLQkgKiBUaGlzIGlzIHNjaGVkdWxlZCB3aGVuIHdlIGRldGVybWluZSB0aGF0IHRoZSBhY3R1YWwgVFggb3V0cHV0Ci0JICogcG93ZXIgZG9lc24ndCBtYXRjaCB3aGF0IHdlIHdhbnQuICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHR4cG93ZXJfYWRqdXN0X3dvcms7Ci0KLQkvKiBQYWNrZXQgdHJhbnNtaXQgd29yayAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF93b3JrOwotCS8qIFF1ZXVlIG9mIHBhY2tldHMgdG8gYmUgdHJhbnNtaXR0ZWQuICovCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZTsKLQotCS8qIFRoZSBkZXZpY2UgTEVEcy4gKi8KLQlzdHJ1Y3QgYjQzX2xlZHMgbGVkczsKLX07CitzdHJ1Y3QgYjQzX3dsOwogCiAvKiBUaGUgdHlwZSBvZiB0aGUgZmlybXdhcmUgZmlsZS4gKi8KIGVudW0gYjQzX2Zpcm13YXJlX2ZpbGVfdHlwZSB7CkBAIC04MjQsNiArNzQ5LDk3IEBACiAjZW5kaWYKIH07CiAKKy8qCisgKiBJbmNsdWRlIGdvZXMgaGVyZSB0byBhdm9pZCBhIGRlcGVuZGVuY3kgcHJvYmxlbS4KKyAqIEEgYmV0dGVyIGZpeCB3b3VsZCBiZSB0byBpbnRlZ3JhdGUgeG1pdC5oIGludG8gYjQzLmguCisgKi8KKyNpbmNsdWRlICJ4bWl0LmgiCisKKy8qIERhdGEgc3RydWN0dXJlIGZvciB0aGUgV0xBTiBwYXJ0cyAoODAyLjExIGNvcmVzKSBvZiB0aGUgYjQzIGNoaXAuICovCitzdHJ1Y3QgYjQzX3dsIHsKKwkvKiBQb2ludGVyIHRvIHRoZSBhY3RpdmUgd2lyZWxlc3MgZGV2aWNlIG9uIHRoaXMgY2hpcCAqLworCXN0cnVjdCBiNDNfd2xkZXYgKmN1cnJlbnRfZGV2OworCS8qIFBvaW50ZXIgdG8gdGhlIGllZWU4MDIxMSBoYXJkd2FyZSBkYXRhIHN0cnVjdHVyZSAqLworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCisJLyogR2xvYmFsIGRyaXZlciBtdXRleC4gRXZlcnkgb3BlcmF0aW9uIG11c3QgcnVuIHdpdGggdGhpcyBtdXRleCBsb2NrZWQuICovCisJc3RydWN0IG11dGV4IG11dGV4OworCS8qIEhhcmQtSVJRIHNwaW5sb2NrLiBUaGlzIGxvY2sgcHJvdGVjdHMgdGhpbmdzIHVzZWQgaW4gdGhlIGhhcmQtSVJRCisJICogaGFuZGxlciwgb25seS4gVGhpcyBiYXNpY2FsbHkgaXMganVzdCB0aGUgSVJRIG1hc2sgcmVnaXN0ZXIuICovCisJc3BpbmxvY2tfdCBoYXJkaXJxX2xvY2s7CisKKwkvKiBUaGUgbnVtYmVyIG9mIHF1ZXVlcyB0aGF0IHdlcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0KKwkgKiBpbml0aWFsbHkuIFRoaXMgaXMgYSBiYWNrdXAgY29weSBvZiBody0+cXVldWVzIGluIGNhc2UgaHctPnF1ZXVlcyBoYXMKKwkgKiB0byBiZSBkeW5hbWljYWxseSBsb3dlcmVkIGF0IHJ1bnRpbWUgKEZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgUW9TKS4KKwkgKiBody0+cXVldWVzIGhhcyB0byBiZSByZXN0b3JlZCB0byB0aGUgb3JpZ2luYWwgdmFsdWUgYmVmb3JlIHVucmVnaXN0ZXJpbmcKKwkgKiBmcm9tIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uICovCisJdTE2IG1hYzgwMjExX2luaXRpYWxseV9yZWdpc3RlcmVkX3F1ZXVlczsKKworCS8qIFdlIGNhbiBvbmx5IGhhdmUgb25lIG9wZXJhdGluZyBpbnRlcmZhY2UgKDgwMi4xMSBjb3JlKQorCSAqIGF0IGEgdGltZS4gR2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGludGVyZmFjZSBmb2xsb3dzLgorCSAqLworCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwkvKiBUaGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG9wZXJhdGluZyBpbnRlcmZhY2UuICovCisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCS8qIEN1cnJlbnQgQlNTSUQgKi8KKwl1OCBic3NpZFtFVEhfQUxFTl07CisJLyogSW50ZXJmYWNlIHR5cGUuIChOTDgwMjExX0lGVFlQRV9YWFgpICovCisJaW50IGlmX3R5cGU7CisJLyogSXMgdGhlIGNhcmQgb3BlcmF0aW5nIGluIEFQLCBTVEEgb3IgSUJTUyBtb2RlPyAqLworCWJvb2wgb3BlcmF0aW5nOworCS8qIGZpbHRlciBmbGFncyAqLworCXVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3M7CisJLyogU3RhdHMgYWJvdXQgdGhlIHdpcmVsZXNzIGludGVyZmFjZSAqLworCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzIGllZWVfc3RhdHM7CisKKyNpZmRlZiBDT05GSUdfQjQzX0hXUk5HCisJc3RydWN0IGh3cm5nIHJuZzsKKwlib29sIHJuZ19pbml0aWFsaXplZDsKKwljaGFyIHJuZ19uYW1lWzMwICsgMV07CisjZW5kaWYgLyogQ09ORklHX0I0M19IV1JORyAqLworCisJLyogTGlzdCBvZiBhbGwgd2lyZWxlc3MgZGV2aWNlcyBvbiB0aGlzIGNoaXAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldmxpc3Q7CisJdTggbnJfZGV2czsKKworCWJvb2wgcmFkaW90YXBfZW5hYmxlZDsKKwlib29sIHJhZGlvX2VuYWJsZWQ7CisKKwkvKiBUaGUgYmVhY29uIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgKEFQIG9yIElCU1MgbW9kZSkuICovCisJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfYmVhY29uOworCWJvb2wgYmVhY29uMF91cGxvYWRlZDsKKwlib29sIGJlYWNvbjFfdXBsb2FkZWQ7CisJYm9vbCBiZWFjb25fdGVtcGxhdGVzX3ZpcmdpbjsgLyogTmV2ZXIgd3JvdGUgdGhlIHRlbXBsYXRlcz8gKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3VwZGF0ZV90cmlnZ2VyOworCisJLyogVGhlIGN1cnJlbnQgUU9TIHBhcmFtZXRlcnMgZm9yIHRoZSA0IHF1ZXVlcy4gKi8KKwlzdHJ1Y3QgYjQzX3Fvc19wYXJhbXMgcW9zX3BhcmFtc1s0XTsKKworCS8qIFdvcmsgZm9yIGFkanVzdG1lbnQgb2YgdGhlIHRyYW5zbWlzc2lvbiBwb3dlci4KKwkgKiBUaGlzIGlzIHNjaGVkdWxlZCB3aGVuIHdlIGRldGVybWluZSB0aGF0IHRoZSBhY3R1YWwgVFggb3V0cHV0CisJICogcG93ZXIgZG9lc24ndCBtYXRjaCB3aGF0IHdlIHdhbnQuICovCisJc3RydWN0IHdvcmtfc3RydWN0IHR4cG93ZXJfYWRqdXN0X3dvcms7CisKKwkvKiBQYWNrZXQgdHJhbnNtaXQgd29yayAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF93b3JrOworCS8qIFF1ZXVlIG9mIHBhY2tldHMgdG8gYmUgdHJhbnNtaXR0ZWQuICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZTsKKworCS8qIFRoZSBkZXZpY2UgTEVEcy4gKi8KKwlzdHJ1Y3QgYjQzX2xlZHMgbGVkczsKKworI2lmZGVmIENPTkZJR19CNDNfUElPCisJLyoKKwkgKiBSWC9UWCBoZWFkZXIvdGFpbCBidWZmZXJzIHVzZWQgYnkgdGhlIGZyYW1lIHRyYW5zbWl0IGZ1bmN0aW9ucy4KKwkgKi8KKwlzdHJ1Y3QgYjQzX3J4aGRyX2Z3NCByeGhkcjsKKwlzdHJ1Y3QgYjQzX3R4aGRyIHR4aGRyOworCXU4IHJ4X3RhaWxbNF07CisJdTggdHhfdGFpbFs0XTsKKyNlbmRpZiAvKiBDT05GSUdfQjQzX1BJTyAqLworfTsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYjQzX3dsICpod190b19iNDNfd2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJcmV0dXJuIGh3LT5wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xlZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sZWRzLmMKaW5kZXggZmJlM2Q0Zi4uMWU4ZGJhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xlZHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbGVkcy5jCkBAIC0zNDgsOSArMzQ4LDkgQEAKIAl9CiB9CiAKLXZvaWQgYjQzX2xlZHNfdW5yZWdpc3RlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit2b2lkIGI0M19sZWRzX3VucmVnaXN0ZXIoc3RydWN0IGI0M193bCAqd2wpCiB7Ci0Jc3RydWN0IGI0M19sZWRzICpsZWRzID0gJmRldi0+d2wtPmxlZHM7CisJc3RydWN0IGI0M19sZWRzICpsZWRzID0gJndsLT5sZWRzOwogCiAJYjQzX3VucmVnaXN0ZXJfbGVkKCZsZWRzLT5sZWRfdHgpOwogCWI0M191bnJlZ2lzdGVyX2xlZCgmbGVkcy0+bGVkX3J4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sZWRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbGVkcy5oCmluZGV4IDk1OTJlNGMuLjMyYjY2ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sZWRzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xlZHMuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgQjQzX0xFRFNfSF8KICNkZWZpbmUgQjQzX0xFRFNfSF8KIAorc3RydWN0IGI0M193bDsKIHN0cnVjdCBiNDNfd2xkZXY7CiAKICNpZmRlZiBDT05GSUdfQjQzX0xFRFMKQEAgLTYwLDcgKzYxLDcgQEAKIH07CiAKIHZvaWQgYjQzX2xlZHNfcmVnaXN0ZXIoc3RydWN0IGI0M193bGRldiAqZGV2KTsKLXZvaWQgYjQzX2xlZHNfdW5yZWdpc3RlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwordm9pZCBiNDNfbGVkc191bnJlZ2lzdGVyKHN0cnVjdCBiNDNfd2wgKndsKTsKIHZvaWQgYjQzX2xlZHNfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogdm9pZCBiNDNfbGVkc19leGl0KHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiB2b2lkIGI0M19sZWRzX3N0b3Aoc3RydWN0IGI0M193bGRldiAqZGV2KTsKQEAgLTc2LDcgKzc3LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfbGVkc19yZWdpc3RlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgYjQzX2xlZHNfdW5yZWdpc3RlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgYjQzX2xlZHNfdW5yZWdpc3RlcihzdHJ1Y3QgYjQzX3dsICp3bCkKIHsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfbGVkc19pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCmluZGV4IDliOTA3YTMuLjg2ZjM1ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwpAQCAtMzg3NCw2ICszODc0LDcgQEAKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7CiAJc3RydWN0IGI0M193bGRldiAqb3JpZ19kZXY7CisJdTMyIG1hc2s7CiAKIHJlZG86CiAJaWYgKCFkZXYgfHwgYjQzX3N0YXR1cyhkZXYpIDwgQjQzX1NUQVRfU1RBUlRFRCkKQEAgLTM5MjAsNyArMzkyMSw4IEBACiAJCQlnb3RvIHJlZG87CiAJCXJldHVybiBkZXY7CiAJfQotCUI0M19XQVJOX09OKGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0spKTsKKwltYXNrID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfTUFTSyk7CisJQjQzX1dBUk5fT04obWFzayAhPSAweEZGRkZGRkZGICYmIG1hc2spOwogCiAJLyogRHJhaW4gdGhlIFRYIHF1ZXVlICovCiAJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJndsLT50eF9xdWV1ZSkpCkBAIC00OTk3LDcgKzQ5OTksNyBAQAogCiAJaWYgKGxpc3RfZW1wdHkoJndsLT5kZXZsaXN0KSkgewogCQliNDNfcm5nX2V4aXQod2wpOwotCQliNDNfbGVkc191bnJlZ2lzdGVyKHdsZGV2KTsKKwkJYjQzX2xlZHNfdW5yZWdpc3Rlcih3bCk7CiAJCS8qIExhc3QgY29yZSBvbiB0aGUgY2hpcCB1bnJlZ2lzdGVyZWQuCiAJCSAqIFdlIGNhbiBkZXN0cm95IGNvbW1vbiBzdHJ1Y3QgYjQzX3dsLgogCQkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYwppbmRleCA1ZTg3NjUwLi45YjkwNDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCkBAIC0zMzIsNiArMzMyLDcgQEAKIAkJCQl1bnNpZ25lZCBpbnQgZGF0YV9sZW4pCiB7CiAJc3RydWN0IGI0M193bGRldiAqZGV2ID0gcS0+ZGV2OworCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKIAljb25zdCB1OCAqZGF0YSA9IF9kYXRhOwogCiAJY3RsIHw9IEI0M19QSU9fVFhDVExfV1JJVEVMTyB8IEI0M19QSU9fVFhDVExfV1JJVEVISTsKQEAgLTM0MSwxMyArMzQyLDEyIEBACiAJCQlxLT5tbWlvX2Jhc2UgKyBCNDNfUElPX1RYREFUQSwKIAkJCXNpemVvZih1MTYpKTsKIAlpZiAoZGF0YV9sZW4gJiAxKSB7Ci0JCXU4IHRhaWxbMl0gPSB7IDAsIH07Ci0KIAkJLyogV3JpdGUgdGhlIGxhc3QgYnl0ZS4gKi8KIAkJY3RsICY9IH5CNDNfUElPX1RYQ1RMX1dSSVRFSEk7CiAJCWI0M19waW90eF93cml0ZTE2KHEsIEI0M19QSU9fVFhDVEwsIGN0bCk7Ci0JCXRhaWxbMF0gPSBkYXRhW2RhdGFfbGVuIC0gMV07Ci0JCXNzYl9ibG9ja193cml0ZShkZXYtPmRldiwgdGFpbCwgMiwKKwkJd2wtPnR4X3RhaWxbMF0gPSBkYXRhW2RhdGFfbGVuIC0gMV07CisJCXdsLT50eF90YWlsWzFdID0gMDsKKwkJc3NiX2Jsb2NrX3dyaXRlKGRldi0+ZGV2LCB3bC0+dHhfdGFpbCwgMiwKIAkJCQlxLT5tbWlvX2Jhc2UgKyBCNDNfUElPX1RYREFUQSwKIAkJCQlzaXplb2YodTE2KSk7CiAJfQpAQCAtMzgyLDYgKzM4Miw3IEBACiAJCQkJdW5zaWduZWQgaW50IGRhdGFfbGVuKQogewogCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHEtPmRldjsKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7CiAJY29uc3QgdTggKmRhdGEgPSBfZGF0YTsKIAogCWN0bCB8PSBCNDNfUElPOF9UWENUTF8wXzcgfCBCNDNfUElPOF9UWENUTF84XzE1IHwKQEAgLTM5MiwyOSArMzkzLDMxIEBACiAJCQlxLT5tbWlvX2Jhc2UgKyBCNDNfUElPOF9UWERBVEEsCiAJCQlzaXplb2YodTMyKSk7CiAJaWYgKGRhdGFfbGVuICYgMykgewotCQl1OCB0YWlsWzRdID0geyAwLCB9OwotCisJCXdsLT50eF90YWlsWzNdID0gMDsKIAkJLyogV3JpdGUgdGhlIGxhc3QgZmV3IGJ5dGVzLiAqLwogCQljdGwgJj0gfihCNDNfUElPOF9UWENUTF84XzE1IHwgQjQzX1BJTzhfVFhDVExfMTZfMjMgfAogCQkJIEI0M19QSU84X1RYQ1RMXzI0XzMxKTsKIAkJc3dpdGNoIChkYXRhX2xlbiAmIDMpIHsKIAkJY2FzZSAzOgogCQkJY3RsIHw9IEI0M19QSU84X1RYQ1RMXzE2XzIzIHwgQjQzX1BJTzhfVFhDVExfOF8xNTsKLQkJCXRhaWxbMF0gPSBkYXRhW2RhdGFfbGVuIC0gM107Ci0JCQl0YWlsWzFdID0gZGF0YVtkYXRhX2xlbiAtIDJdOwotCQkJdGFpbFsyXSA9IGRhdGFbZGF0YV9sZW4gLSAxXTsKKwkJCXdsLT50eF90YWlsWzBdID0gZGF0YVtkYXRhX2xlbiAtIDNdOworCQkJd2wtPnR4X3RhaWxbMV0gPSBkYXRhW2RhdGFfbGVuIC0gMl07CisJCQl3bC0+dHhfdGFpbFsyXSA9IGRhdGFbZGF0YV9sZW4gLSAxXTsKIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQljdGwgfD0gQjQzX1BJTzhfVFhDVExfOF8xNTsKLQkJCXRhaWxbMF0gPSBkYXRhW2RhdGFfbGVuIC0gMl07Ci0JCQl0YWlsWzFdID0gZGF0YVtkYXRhX2xlbiAtIDFdOworCQkJd2wtPnR4X3RhaWxbMF0gPSBkYXRhW2RhdGFfbGVuIC0gMl07CisJCQl3bC0+dHhfdGFpbFsxXSA9IGRhdGFbZGF0YV9sZW4gLSAxXTsKKwkJCXdsLT50eF90YWlsWzJdID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQl0YWlsWzBdID0gZGF0YVtkYXRhX2xlbiAtIDFdOworCQkJd2wtPnR4X3RhaWxbMF0gPSBkYXRhW2RhdGFfbGVuIC0gMV07CisJCQl3bC0+dHhfdGFpbFsxXSA9IDA7CisJCQl3bC0+dHhfdGFpbFsyXSA9IDA7CiAJCQlicmVhazsKIAkJfQogCQliNDNfcGlvdHhfd3JpdGUzMihxLCBCNDNfUElPOF9UWENUTCwgY3RsKTsKLQkJc3NiX2Jsb2NrX3dyaXRlKGRldi0+ZGV2LCB0YWlsLCA0LAorCQlzc2JfYmxvY2tfd3JpdGUoZGV2LT5kZXYsIHdsLT50eF90YWlsLCA0LAogCQkJCXEtPm1taW9fYmFzZSArIEI0M19QSU84X1RYREFUQSwKIAkJCQlzaXplb2YodTMyKSk7CiAJfQpAQCAtNDQ2LDggKzQ0OSw5IEBACiBzdGF0aWMgaW50IHBpb190eF9mcmFtZShzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxLAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSBxLT5kZXY7CisJc3RydWN0IGI0M193bCAqd2wgPSBkZXYtPndsOwogCXN0cnVjdCBiNDNfcGlvX3R4cGFja2V0ICpwYWNrOwotCXN0cnVjdCBiNDNfdHhoZHIgdHhoZHI7CiAJdTE2IGNvb2tpZTsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBoZHJsZW47CkBAIC00NTgsOCArNDYyLDggQEAKIAkJCSAgc3RydWN0IGI0M19waW9fdHhwYWNrZXQsIGxpc3QpOwogCiAJY29va2llID0gZ2VuZXJhdGVfY29va2llKHEsIHBhY2spOwotCWhkcmxlbiA9IGI0M190eGhkcl9zaXplKHEtPmRldik7Ci0JZXJyID0gYjQzX2dlbmVyYXRlX3R4aGRyKHEtPmRldiwgKHU4ICopJnR4aGRyLCBza2IsCisJaGRybGVuID0gYjQzX3R4aGRyX3NpemUoZGV2KTsKKwllcnIgPSBiNDNfZ2VuZXJhdGVfdHhoZHIoZGV2LCAodTggKikmd2wtPnR4aGRyLCBza2IsCiAJCQkJIGluZm8sIGNvb2tpZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTQ2NywxNSArNDcxLDE1IEBACiAJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pIHsKIAkJLyogVGVsbCB0aGUgZmlybXdhcmUgYWJvdXQgdGhlIGNvb2tpZSBvZiB0aGUgbGFzdAogCQkgKiBtY2FzdCBmcmFtZSwgc28gaXQgY2FuIGNsZWFyIHRoZSBtb3JlLWRhdGEgYml0IGluIGl0LiAqLwotCQliNDNfc2htX3dyaXRlMTYocS0+ZGV2LCBCNDNfU0hNX1NIQVJFRCwKKwkJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsCiAJCQkJQjQzX1NITV9TSF9NQ0FTVENPT0tJRSwgY29va2llKTsKIAl9CiAKIAlwYWNrLT5za2IgPSBza2I7CiAJaWYgKHEtPnJldiA+PSA4KQotCQlwaW9fdHhfZnJhbWVfNGJ5dGVfcXVldWUocGFjaywgKGNvbnN0IHU4ICopJnR4aGRyLCBoZHJsZW4pOworCQlwaW9fdHhfZnJhbWVfNGJ5dGVfcXVldWUocGFjaywgKGNvbnN0IHU4ICopJndsLT50eGhkciwgaGRybGVuKTsKIAllbHNlCi0JCXBpb190eF9mcmFtZV8yYnl0ZV9xdWV1ZShwYWNrLCAoY29uc3QgdTggKikmdHhoZHIsIGhkcmxlbik7CisJCXBpb190eF9mcmFtZV8yYnl0ZV9xdWV1ZShwYWNrLCAoY29uc3QgdTggKikmd2wtPnR4aGRyLCBoZHJsZW4pOwogCiAJLyogUmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHBhY2tldCBzbG90cy4KIAkgKiBJdCB3aWxsIGJlIHB1dCBiYWNrIHdoZW4gd2UgcmVjZWl2ZSB0aGUgc3RhdHVzIHJlcG9ydC4gKi8KQEAgLTYxNSwxNCArNjE5LDE0IEBACiBzdGF0aWMgYm9vbCBwaW9fcnhfZnJhbWUoc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcSkKIHsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSBxLT5kZXY7Ci0Jc3RydWN0IGI0M19yeGhkcl9mdzQgcnhoZHI7CisJc3RydWN0IGI0M193bCAqd2wgPSBkZXYtPndsOwogCXUxNiBsZW47CiAJdTMyIG1hY3N0YXQ7CiAJdW5zaWduZWQgaW50IGksIHBhZGRpbmc7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAljb25zdCBjaGFyICplcnJfbXNnID0gTlVMTDsKIAotCW1lbXNldCgmcnhoZHIsIDAsIHNpemVvZihyeGhkcikpOworCW1lbXNldCgmd2wtPnJ4aGRyLCAwLCBzaXplb2Yod2wtPnJ4aGRyKSk7CiAKIAkvKiBDaGVjayBpZiB3ZSBoYXZlIGRhdGEgYW5kIHdhaXQgZm9yIGl0IHRvIGdldCByZWFkeS4gKi8KIAlpZiAocS0+cmV2ID49IDgpIHsKQEAgLTY2MCwxNiArNjY0LDE2IEBACiAKIAkvKiBHZXQgdGhlIHByZWFtYmxlIChSWCBoZWFkZXIpICovCiAJaWYgKHEtPnJldiA+PSA4KSB7Ci0JCXNzYl9ibG9ja19yZWFkKGRldi0+ZGV2LCAmcnhoZHIsIHNpemVvZihyeGhkciksCisJCXNzYl9ibG9ja19yZWFkKGRldi0+ZGV2LCAmd2wtPnJ4aGRyLCBzaXplb2Yod2wtPnJ4aGRyKSwKIAkJCSAgICAgICBxLT5tbWlvX2Jhc2UgKyBCNDNfUElPOF9SWERBVEEsCiAJCQkgICAgICAgc2l6ZW9mKHUzMikpOwogCX0gZWxzZSB7Ci0JCXNzYl9ibG9ja19yZWFkKGRldi0+ZGV2LCAmcnhoZHIsIHNpemVvZihyeGhkciksCisJCXNzYl9ibG9ja19yZWFkKGRldi0+ZGV2LCAmd2wtPnJ4aGRyLCBzaXplb2Yod2wtPnJ4aGRyKSwKIAkJCSAgICAgICBxLT5tbWlvX2Jhc2UgKyBCNDNfUElPX1JYREFUQSwKIAkJCSAgICAgICBzaXplb2YodTE2KSk7CiAJfQogCS8qIFNhbml0eSBjaGVja3MuICovCi0JbGVuID0gbGUxNl90b19jcHUocnhoZHIuZnJhbWVfbGVuKTsKKwlsZW4gPSBsZTE2X3RvX2NwdSh3bC0+cnhoZHIuZnJhbWVfbGVuKTsKIAlpZiAodW5saWtlbHkobGVuID4gMHg3MDApKSB7CiAJCWVycl9tc2cgPSAibGVuID4gMHg3MDAiOwogCQlnb3RvIHJ4X2Vycm9yOwpAQCAtNjc5LDcgKzY4Myw3IEBACiAJCWdvdG8gcnhfZXJyb3I7CiAJfQogCi0JbWFjc3RhdCA9IGxlMzJfdG9fY3B1KHJ4aGRyLm1hY19zdGF0dXMpOworCW1hY3N0YXQgPSBsZTMyX3RvX2NwdSh3bC0+cnhoZHIubWFjX3N0YXR1cyk7CiAJaWYgKG1hY3N0YXQgJiBCNDNfUlhfTUFDX0ZDU0VSUikgewogCQlpZiAoIShxLT5kZXYtPndsLT5maWx0ZXJfZmxhZ3MgJiBGSUZfRkNTRkFJTCkpIHsKIAkJCS8qIERyb3AgZnJhbWVzIHdpdGggZmFpbGVkIEZDUy4gKi8KQEAgLTcwNCwyNCArNzA4LDIyIEBACiAJCQkgICAgICAgcS0+bW1pb19iYXNlICsgQjQzX1BJTzhfUlhEQVRBLAogCQkJICAgICAgIHNpemVvZih1MzIpKTsKIAkJaWYgKGxlbiAmIDMpIHsKLQkJCXU4IHRhaWxbNF0gPSB7IDAsIH07Ci0KIAkJCS8qIFJlYWQgdGhlIGxhc3QgZmV3IGJ5dGVzLiAqLwotCQkJc3NiX2Jsb2NrX3JlYWQoZGV2LT5kZXYsIHRhaWwsIDQsCisJCQlzc2JfYmxvY2tfcmVhZChkZXYtPmRldiwgd2wtPnJ4X3RhaWwsIDQsCiAJCQkJICAgICAgIHEtPm1taW9fYmFzZSArIEI0M19QSU84X1JYREFUQSwKIAkJCQkgICAgICAgc2l6ZW9mKHUzMikpOwogCQkJc3dpdGNoIChsZW4gJiAzKSB7CiAJCQljYXNlIDM6Ci0JCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAzXSA9IHRhaWxbMF07Ci0JCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAyXSA9IHRhaWxbMV07Ci0JCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAxXSA9IHRhaWxbMl07CisJCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAzXSA9IHdsLT5yeF90YWlsWzBdOworCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMl0gPSB3bC0+cnhfdGFpbFsxXTsKKwkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDFdID0gd2wtPnJ4X3RhaWxbMl07CiAJCQkJYnJlYWs7CiAJCQljYXNlIDI6Ci0JCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAyXSA9IHRhaWxbMF07Ci0JCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAxXSA9IHRhaWxbMV07CisJCQkJc2tiLT5kYXRhW2xlbiArIHBhZGRpbmcgLSAyXSA9IHdsLT5yeF90YWlsWzBdOworCQkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMV0gPSB3bC0+cnhfdGFpbFsxXTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMToKLQkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDFdID0gdGFpbFswXTsKKwkJCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDFdID0gd2wtPnJ4X3RhaWxbMF07CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTczMCwxNyArNzMyLDE1IEBACiAJCQkgICAgICAgcS0+bW1pb19iYXNlICsgQjQzX1BJT19SWERBVEEsCiAJCQkgICAgICAgc2l6ZW9mKHUxNikpOwogCQlpZiAobGVuICYgMSkgewotCQkJdTggdGFpbFsyXSA9IHsgMCwgfTsKLQogCQkJLyogUmVhZCB0aGUgbGFzdCBieXRlLiAqLwotCQkJc3NiX2Jsb2NrX3JlYWQoZGV2LT5kZXYsIHRhaWwsIDIsCisJCQlzc2JfYmxvY2tfcmVhZChkZXYtPmRldiwgd2wtPnJ4X3RhaWwsIDIsCiAJCQkJICAgICAgIHEtPm1taW9fYmFzZSArIEI0M19QSU9fUlhEQVRBLAogCQkJCSAgICAgICBzaXplb2YodTE2KSk7Ci0JCQlza2ItPmRhdGFbbGVuICsgcGFkZGluZyAtIDFdID0gdGFpbFswXTsKKwkJCXNrYi0+ZGF0YVtsZW4gKyBwYWRkaW5nIC0gMV0gPSB3bC0+cnhfdGFpbFswXTsKIAkJfQogCX0KIAotCWI0M19yeChxLT5kZXYsIHNrYiwgJnJ4aGRyKTsKKwliNDNfcngocS0+ZGV2LCBza2IsICZ3bC0+cnhoZHIpOwogCiAJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYwppbmRleCA3YTMyMThjLi5mZmRjZTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jCkBAIC0zMyw3ICszMyw4IEBACiAJCSAgICAgICYgQjQzX01NSU9fUkFESU9fSFdFTkFCTEVEX0hJX01BU0spKQogCQkJcmV0dXJuIDE7CiAJfSBlbHNlIHsKLQkJaWYgKGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19SQURJT19IV0VOQUJMRURfTE8pCisJCWlmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfU1RBUlRFRCAmJgorCQkgICAgYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1JBRElPX0hXRU5BQkxFRF9MTykKIAkJICAgICYgQjQzX01NSU9fUkFESU9fSFdFTkFCTEVEX0xPX01BU0spCiAJCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwppbmRleCBhYzlmNjAwLi5mNGU5Njk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKQEAgLTI3LDcgKzI3LDcgQEAKIAogKi8KIAotI2luY2x1ZGUgInhtaXQuaCIKKyNpbmNsdWRlICJiNDMuaCIKICNpbmNsdWRlICJwaHlfY29tbW9uLmgiCiAjaW5jbHVkZSAiZG1hLmgiCiAjaW5jbHVkZSAicGlvLmgiCkBAIC02OTAsNyArNjkwLDEwIEBACiAJfQogCiAJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJaWVlZTgwMjExX3J4KGRldi0+d2wtPmh3LCBza2IpOworCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAjaWYgQjQzX0RFQlVHCiAJZGV2LT5yeF9jb3VudCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCmluZGV4IGExNmJkNDEuLmNiYjA1ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKQEAgLTcwMiw3ICs3MDIsNyBAQAogCQl1OCBzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwogCiAJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcG1cbiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEFERCBzdGF0aW9uICVwTVxuIiwKIAkJCQkgICAgICAgaGRyLT5hZGRyMSk7CiAJCQlzdGFfaWQgPSBpd2xfYWRkX3N0YXRpb24ocHJpdiwgaGRyLT5hZGRyMSwgZmFsc2UsCiAJCQkJQ01EX0FTWU5DLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwppbmRleCA2ODEzNjE3Li5mMDU5YjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC02MTEsNyArNjExLDcgQEAKIAlpZiAocnhfc3RhdHVzLmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJcnhfc3RhdHVzLnJhdGVfaWR4IC09IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKLQlyeF9zdGF0dXMuYW50ZW5uYSA9IGxlMTZfdG9fY3B1KHJ4X2hkci0+cGh5X2ZsYWdzICYKKwlyeF9zdGF0dXMuYW50ZW5uYSA9IChsZTE2X3RvX2NwdShyeF9oZHItPnBoeV9mbGFncykgJgogCQkJCQlSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfTVNLKSA+PiA0OwogCiAJLyogc2V0IHRoZSBwcmVhbWJsZSBmbGFnIGlmIGFwcHJvcHJpYXRlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggZDZiYzBlMC4uNmU2ZjUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCQkoczMyKWF2ZXJhZ2Vfbm9pc2VbaV0pKSAvIDE1MDA7CiAJCS8qIGJvdW5kIGdhaW4gYnkgMiBiaXRzIHZhbHVlIG1heCwgM3JkIGJpdCBpcyBzaWduICovCiAJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSA9Ci0JCQltaW4oYWJzKGRlbHRhX2cpLCBDSEFJTl9OT0lTRV9NQVhfREVMVEFfR0FJTl9DT0RFKTsKKwkJCW1pbihhYnMoZGVsdGFfZyksIChsb25nKSBDSEFJTl9OT0lTRV9NQVhfREVMVEFfR0FJTl9DT0RFKTsKIAogCQlpZiAoZGVsdGFfZyA8IDApCiAJCQkvKiBzZXQgbmVnYXRpdmUgc2lnbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCAzMTNkM2U1Li5lYWFmYWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMzEwNiw4ICszMTA2LDggQEAKICBvdXRfcGNpX2Rpc2FibGVfZGV2aWNlOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKICBvdXRfaWVlZTgwMjExX2ZyZWVfaHc6Ci0JaWVlZTgwMjExX2ZyZWVfaHcocHJpdi0+aHcpOwogCWl3bF9mcmVlX3RyYWZmaWNfbWVtKHByaXYpOworCWllZWU4MDIxMV9mcmVlX2h3KHByaXYtPmh3KTsKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCmluZGV4IDJjNWM4OGYuLjRhZmFmNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaApAQCAtMTE1NCw3ICsxMTU0LDcgQEAKICNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19NT0RfQ0NLX01TSwkJY3B1X3RvX2xlMTYoMSA8PCAxKQogI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX1NIT1JUX1BSRUFNQkxFX01TSwljcHVfdG9fbGUxNigxIDw8IDIpCiAjZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfTkFSUk9XX0JBTkRfTVNLCWNwdV90b19sZTE2KDEgPDwgMykKLSNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSwkJY3B1X3RvX2xlMTYoMHhmMCkKKyNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSwkJMHhmMAogI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfUE9TCQk0CiAKICNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0sJKDB4NyA8PCA4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYwppbmRleCAzZDJiOTNhLi5lMTRjOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYwpAQCAtNDEwLDcgKzQxMCw2IEBACiAJCQkJCXUxNiAqdmFsaWRibG9ja2FkZHIpCiB7CiAJdTE2IG5leHRfbGlua19hZGRyID0gMCwgbGlua192YWx1ZSA9IDAsIHZhbGlkX2FkZHI7Ci0JaW50IHJldCA9IDA7CiAJaW50IHVzZWRibG9ja3MgPSAwOwogCiAJLyogc2V0IGFkZHJlc3NpbmcgbW9kZSB0byBhYnNvbHV0ZSB0byB0cmF2ZXJzZSB0aGUgbGluayBsaXN0ICovCkBAIC00MzAsMjkgKzQyOSwyOSBAQAogCQkgKiBjaGVjayBmb3IgbW9yZSBibG9jayBvbiB0aGUgbGluayBsaXN0CiAJCSAqLwogCQl2YWxpZF9hZGRyID0gbmV4dF9saW5rX2FkZHI7Ci0JCW5leHRfbGlua19hZGRyID0gbGlua192YWx1ZTsKKwkJbmV4dF9saW5rX2FkZHIgPSBsaW5rX3ZhbHVlICogc2l6ZW9mKHUxNik7CiAJCUlXTF9ERUJVR19JTkZPKHByaXYsICJPVFAgYmxvY2tzICVkIGFkZHIgMHgleFxuIiwKIAkJCSAgICAgICB1c2VkYmxvY2tzLCBuZXh0X2xpbmtfYWRkcik7CiAJCWlmIChpd2xfcmVhZF9vdHBfd29yZChwcml2LCBuZXh0X2xpbmtfYWRkciwgJmxpbmtfdmFsdWUpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghbGlua192YWx1ZSkgewogCQkJLyoKLQkJCSAqIHJlYWNoIHRoZSBlbmQgb2YgbGluayBsaXN0LAorCQkJICogcmVhY2ggdGhlIGVuZCBvZiBsaW5rIGxpc3QsIHJldHVybiBzdWNjZXNzIGFuZAogCQkJICogc2V0IGFkZHJlc3MgcG9pbnQgdG8gdGhlIHN0YXJ0aW5nIGFkZHJlc3MKIAkJCSAqIG9mIHRoZSBpbWFnZQogCQkJICovCi0JCQlnb3RvIGRvbmU7CisJCQkqdmFsaWRibG9ja2FkZHIgPSB2YWxpZF9hZGRyOworCQkJLyogc2tpcCBmaXJzdCAyIGJ5dGVzIChsaW5rIGxpc3QgcG9pbnRlcikgKi8KKwkJCSp2YWxpZGJsb2NrYWRkciArPSAyOworCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyogbW9yZSBpbiB0aGUgbGluayBsaXN0LCBjb250aW51ZSAqLwogCQl1c2VkYmxvY2tzKys7Ci0JfSB3aGlsZSAodXNlZGJsb2NrcyA8IHByaXYtPmNmZy0+bWF4X2xsX2l0ZW1zKTsKLQkvKiBPVFAgZnVsbCwgdXNlIGxhc3QgYmxvY2sgKi8KLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiT1RQIGlzIGZ1bGwsIHVzZSBsYXN0IGJsb2NrXG4iKTsKLWRvbmU6Ci0JKnZhbGlkYmxvY2thZGRyID0gdmFsaWRfYWRkcjsKLQkvKiBza2lwIGZpcnN0IDIgYnl0ZXMgKGxpbmsgbGlzdCBwb2ludGVyKSAqLwotCSp2YWxpZGJsb2NrYWRkciArPSAyOwotCXJldHVybiByZXQ7CisJfSB3aGlsZSAodXNlZGJsb2NrcyA8PSBwcml2LT5jZmctPm1heF9sbF9pdGVtcyk7CisKKwkvKiBPVFAgaGFzIG5vIHZhbGlkIGJsb2NrcyAqLworCUlXTF9ERUJVR19JTkZPKHByaXYsICJPVFAgaGFzIG5vIHZhbGlkIGJsb2Nrc1xuIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAppbmRleCA2YjY4ZGI3Li44MGI5ZTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaApAQCAtMjIwLDM1ICsyMjAsMzUgQEAKICAqIFNlY3Rpb24gMTA6IDIuNCBHSHogNDBNSHogY2hhbm5lbHM6IDEzMiwgNDQgKF9hYm92ZV8pCiAgKi8KIC8qIDIuNCBHSHogYmFuZDogQ0NLICovCi0jZGVmaW5lIEVFUFJPTV9MQl9DQ0tfMjBfQ09NTU9OICAgICAgICgoMHhBQSlcCisjZGVmaW5lIEVFUFJPTV9MQl9DQ0tfMjBfQ09NTU9OICAgICAgICgoMHhBOClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogOCBieXRlcyAqLwogLyogMi40IEdIeiBiYW5kOiAyME1Iei1MZWdhY3ksIDIwTUh6LUhULCA0ME1Iei1IVCAqLwotI2RlZmluZSBFRVBST01fTEJfT0ZETV9DT01NT04gICAgICAgKCgweEIyKVwKKyNkZWZpbmUgRUVQUk9NX0xCX09GRE1fQ09NTU9OICAgICAgICgoMHhCMClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMjQgYnl0ZXMgKi8KIC8qIDUuMiBHSHogYmFuZDogMjBNSHotTGVnYWN5LCAyME1Iei1IVCwgNDBNSHotSFQgKi8KLSNkZWZpbmUgRUVQUk9NX0hCX09GRE1fQ09NTU9OICAgICAgICgoMHhDQSlcCisjZGVmaW5lIEVFUFJPTV9IQl9PRkRNX0NPTU1PTiAgICAgICAoKDB4QzgpXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDI0IGJ5dGVzICovCiAvKiAyLjRHSHogYmFuZCBjaGFubmVsczoKICAqCTFMZWdhY3ksIDFIVCwgMkxlZ2FjeSwgMkhULCAxMExlZ2FjeSwgMTBIVCwgMTFMZWdhY3ksIDExSFQgKi8KLSNkZWZpbmUgRUVQUk9NX0xCX09GRE1fMjBfQkFORCAgICAgICAoKDB4RTIpXAorI2RlZmluZSBFRVBST01fTEJfT0ZETV8yMF9CQU5EICAgICAgICgoMHhFMClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogNjQgYnl0ZXMgKi8KIC8qIDIuNCBHSHogYmFuZCBIVDQwIGNoYW5uZWxzOiAoMSwrMSkgKDIsKzEpICg2LCsxKSAoNywrMSkgKDksKzEpICovCi0jZGVmaW5lIEVFUFJPTV9MQl9PRkRNX0hUNDBfQkFORCAgICAgICAoKDB4MTIyKVwKKyNkZWZpbmUgRUVQUk9NX0xCX09GRE1fSFQ0MF9CQU5EICAgICAgICgoMHgxMjApXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDQwIGJ5dGVzICovCiAvKiA1LjJHSHogYmFuZCBjaGFubmVsczogMzZMZWdhY3ksIDM2SFQsIDY0TGVnYWN5LCA2NEhULCAxMDBMZWdhY3ksIDEwMEhUICovCi0jZGVmaW5lIEVFUFJPTV9IQl9PRkRNXzIwX0JBTkQgICAgICAgKCgweDE0QSlcCisjZGVmaW5lIEVFUFJPTV9IQl9PRkRNXzIwX0JBTkQgICAgICAgKCgweDE0OClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogNDggYnl0ZXMgKi8KIC8qIDUuMiBHSHogYmFuZCBIVDQwIGNoYW5uZWxzOiAoMzYsKzEpICg2MCwrMSkgKDEwMCwrMSkgKi8KLSNkZWZpbmUgRUVQUk9NX0hCX09GRE1fSFQ0MF9CQU5EICAgICAgICgoMHgxN0EpXAorI2RlZmluZSBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkQgICAgICAgKCgweDE3OClcCiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMjQgYnl0ZXMgKi8KIC8qIDIuNCBHSHogYmFuZCwgY2hhbm5uZWwgMTM6IExlZ2FjeSwgSFQgKi8KLSNkZWZpbmUgRUVQUk9NX0xCX09GRE1fMjBfQ0hBTk5FTF8xMyAgICAgICAoKDB4MTkyKVwKKyNkZWZpbmUgRUVQUk9NX0xCX09GRE1fMjBfQ0hBTk5FTF8xMyAgICAgICAoKDB4MTkwKVwKIAkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAxNiBieXRlcyAqLwogLyogNS4yIEdIeiBiYW5kLCBjaGFubm5lbCAxNDA6IExlZ2FjeSwgSFQgKi8KLSNkZWZpbmUgRUVQUk9NX0hCX09GRE1fMjBfQ0hBTk5FTF8xNDAgICAgICAgKCgweDFBMilcCisjZGVmaW5lIEVFUFJPTV9IQl9PRkRNXzIwX0NIQU5ORUxfMTQwICAgICAgICgoMHgxQTApXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDE2IGJ5dGVzICovCiAvKiA1LjIgR0h6IGJhbmQsIEhUNDAgY2hhbm5uZWxzICgxMzIsKzEpICg0NCwrMSkgKi8KLSNkZWZpbmUgRUVQUk9NX0hCX09GRE1fSFQ0MF9CQU5EXzEgICAgICAgKCgweDFCMilcCisjZGVmaW5lIEVFUFJPTV9IQl9PRkRNX0hUNDBfQkFORF8xICAgICAgICgoMHgxQjApXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDE2IGJ5dGVzICovCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKaW5kZXggOGUxYmI1My4uNDkzNjI2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCkBAIC0xMDQ0LDcgKzEwNDQsNyBAQAogCSAqIGFzIGEgYml0bWFzay4KIAkgKi8KIAlyeF9zdGF0dXMuYW50ZW5uYSA9Ci0JCWxlMTZfdG9fY3B1KHBoeV9yZXMtPnBoeV9mbGFncyAmIFJYX1JFU19QSFlfRkxBR1NfQU5URU5OQV9NU0spCisJCShsZTE2X3RvX2NwdShwaHlfcmVzLT5waHlfZmxhZ3MpICYgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSykKIAkJPj4gUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX1BPUzsKIAogCS8qIHNldCB0aGUgcHJlYW1ibGUgZmxhZyBpZiBhcHByb3ByaWF0ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKaW5kZXggYWE0OTIzMC4uZDAwYTgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCkBAIC00MDk3LDggKzQwOTcsOCBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAgb3V0X2llZWU4MDIxMV9mcmVlX2h3OgotCWllZWU4MDIxMV9mcmVlX2h3KHByaXYtPmh3KTsKIAlpd2xfZnJlZV90cmFmZmljX21lbShwcml2KTsKKwlpZWVlODAyMTFfZnJlZV9odyhwcml2LT5odyk7CiAgb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKaW5kZXggYzQyZDNmYS4uMjNmNjg0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYwpAQCAtMyw2ICszLDcgQEAKICAgKiByZXNwb25zZXMgYXMgd2VsbCBhcyBldmVudHMgZ2VuZXJhdGVkIGJ5IGZpcm13YXJlLgogICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCmluZGV4IGNiOGJlOGQuLjViMzY3MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIHN0YXRpYyBpbnQgc3B1X3dyaXRlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgY29uc3QgdTggKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgZXJyID0gMDsKLQl1MTYgcmVnX291dCA9IGNwdV90b19sZTE2KHJlZyB8IElGX1NQSV9XUklURV9PUEVSQVRJT05fTUFTSyk7CisJX19sZTE2IHJlZ19vdXQgPSBjcHVfdG9fbGUxNihyZWcgfCBJRl9TUElfV1JJVEVfT1BFUkFUSU9OX01BU0spOwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgcmVnX3RyYW5zOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgZGF0YV90cmFuczsKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBzcHVfd3JpdGVfdTE2KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTE2IHZhbCkKIHsKLQl1MTYgYnVmZjsKKwlfX2xlMTYgYnVmZjsKIAogCWJ1ZmYgPSBjcHVfdG9fbGUxNih2YWwpOwogCXJldHVybiBzcHVfd3JpdGUoY2FyZCwgcmVnLCAodTggKikmYnVmZiwgc2l6ZW9mKHUxNikpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiB7CiAJdW5zaWduZWQgaW50IGRlbGF5OwogCWludCBlcnIgPSAwOwotCXUxNiByZWdfb3V0ID0gY3B1X3RvX2xlMTYocmVnIHwgSUZfU1BJX1JFQURfT1BFUkFUSU9OX01BU0spOworCV9fbGUxNiByZWdfb3V0ID0gY3B1X3RvX2xlMTYocmVnIHwgSUZfU1BJX1JFQURfT1BFUkFUSU9OX01BU0spOwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgcmVnX3RyYW5zOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgZHVtbXlfdHJhbnM7CkBAIC0yMzUsNyArMjM1LDcgQEAKIC8qIFJlYWQgMTYgYml0cyBmcm9tIGFuIFNQSSByZWdpc3RlciAqLwogc3RhdGljIGlubGluZSBpbnQgc3B1X3JlYWRfdTE2KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTE2ICp2YWwpCiB7Ci0JdTE2IGJ1ZjsKKwlfX2xlMTYgYnVmOwogCWludCByZXQ7CiAKIAlyZXQgPSBzcHVfcmVhZChjYXJkLCByZWcsICh1OCAqKSZidWYsIHNpemVvZihidWYpKTsKQEAgLTI0OCw3ICsyNDgsNyBAQAogICogVGhlIGxvdyAxNiBiaXRzIGFyZSByZWFkIGZpcnN0LiAqLwogc3RhdGljIGludCBzcHVfcmVhZF91MzIoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MzIgKnZhbCkKIHsKLQl1MzIgYnVmOworCV9fbGUzMiBidWY7CiAJaW50IGVycjsKIAogCWVyciA9IHNwdV9yZWFkKGNhcmQsIHJlZywgKHU4ICopJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA4OGNkNThlLi4xYzg4YzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtMjg3OSw3ICsyODc5LDcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGNoYXIgcHJvY19lc3NpZFszM107Ci0JaW50IGxlbiA9IGNvdW50OworCXVuc2lnbmVkIGludCBsZW4gPSBjb3VudDsKIAogCWlmIChsZW4gPiAzMikKIAkJbGVuID0gMzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKaW5kZXggYTA4NDA3Ny4uOWZlNzcwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwpAQCAtMTk5NCw3ICsxOTk0LDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYV0lfVzFfQldfV0lOX1NJWkUsIHR4ZGVzYy0+YmFfc2l6ZSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWFdJX1cxX1dJUkVMRVNTX0NMSV9JRCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBULCAmdHhkZXNjLT5mbGFncykgPwotCQkJICAgICAgIChza2JkZXNjLT5lbnRyeS0+ZW50cnlfaWR4ICsgMSkgOiAweGZmKTsKKwkJCSAgIHR4ZGVzYy0+a2V5X2lkeCA6IDB4ZmYpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhXSV9XMV9NUERVX1RPVEFMX0JZVEVfQ09VTlQsCiAJCQkgICBza2ItPmxlbiAtIHR4ZGVzYy0+bDJwYWQpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhXSV9XMV9QQUNLRVRJRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3puZXQuYyBiL2RyaXZlcnMvbmV0L3puZXQuYwppbmRleCBhMDM4NGI2Li5iNDIzNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC96bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvem5ldC5jCkBAIC0xNjksNyArMTY5LDYgQEAKIHN0YXRpYyBpbnQgem5ldF9yZXF1ZXN0X3Jlc291cmNlcyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgem5ldF9wcml2YXRlICp6bmV0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHJlcXVlc3RfaXJxIChkZXYtPmlycSwgJnpuZXRfaW50ZXJydXB0LCAwLCAiWk5ldCIsIGRldikpCiAJCWdvdG8gZmFpbGVkOwpAQCAtMTg3LDEzICsxODYsOSBAQAogIGZyZWVfc2lhOgogCXJlbGVhc2VfcmVnaW9uICh6bmV0LT5zaWFfYmFzZSwgem5ldC0+c2lhX3NpemUpOwogIGZyZWVfdHhfZG1hOgotCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKIAlmcmVlX2RtYSAoem5ldC0+dHhfZG1hKTsKLQlyZWxlYXNlX2RtYV9sb2NrIChmbGFncyk7CiAgZnJlZV9yeF9kbWE6Ci0JZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOwogCWZyZWVfZG1hICh6bmV0LT5yeF9kbWEpOwotCXJlbGVhc2VfZG1hX2xvY2sgKGZsYWdzKTsKICBmcmVlX2lycToKIAlmcmVlX2lycSAoZGV2LT5pcnEsIGRldik7CiAgZmFpbGVkOgpAQCAtMjAzLDE0ICsxOTgsMTEgQEAKIHN0YXRpYyB2b2lkIHpuZXRfcmVsZWFzZV9yZXNvdXJjZXMgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHpuZXRfcHJpdmF0ZSAqem5ldCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJlbGVhc2VfcmVnaW9uICh6bmV0LT5zaWFfYmFzZSwgem5ldC0+c2lhX3NpemUpOwogCXJlbGVhc2VfcmVnaW9uIChkZXYtPmJhc2VfYWRkciwgem5ldC0+aW9fc2l6ZSk7Ci0JZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOwogCWZyZWVfZG1hICh6bmV0LT50eF9kbWEpOwogCWZyZWVfZG1hICh6bmV0LT5yeF9kbWEpOwotCXJlbGVhc2VfZG1hX2xvY2sgKGZsYWdzKTsKIAlmcmVlX2lycSAoZGV2LT5pcnEsIGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2ZfbWRpby5jIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKaW5kZXggYmFjYWE1My4uNGIyMmJhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9tZGlvLmMKKysrIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKQEAgLTk3LDYgKzk3LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKG9mX21kaW9idXNfcmVnaXN0ZXIpOwogCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIG9mX3BoeV9maW5kX2RldmljZSAqLworc3RhdGljIGludCBvZl9waHlfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwaHlfbnApCit7CisJcmV0dXJuIGRldl9hcmNoZGF0YV9nZXRfbm9kZSgmZGV2LT5hcmNoZGF0YSkgPT0gcGh5X25wOworfQorCiAvKioKICAqIG9mX3BoeV9maW5kX2RldmljZSAtIEdpdmUgYSBQSFkgbm9kZSwgZmluZCB0aGUgcGh5X2RldmljZQogICogQHBoeV9ucDogUG9pbnRlciB0byB0aGUgcGh5J3MgZGV2aWNlIHRyZWUgbm9kZQpAQCAtMTA2LDE1ICsxMTIsMTAgQEAKIHN0cnVjdCBwaHlfZGV2aWNlICpvZl9waHlfZmluZF9kZXZpY2Uoc3RydWN0IGRldmljZV9ub2RlICpwaHlfbnApCiB7CiAJc3RydWN0IGRldmljZSAqZDsKLQlpbnQgbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwaHlfbnApCi0JewotCQlyZXR1cm4gZGV2X2FyY2hkYXRhX2dldF9ub2RlKCZkZXYtPmFyY2hkYXRhKSA9PSBwaHlfbnA7Ci0JfQotCiAJaWYgKCFwaHlfbnApCiAJCXJldHVybiBOVUxMOwogCi0JZCA9IGJ1c19maW5kX2RldmljZSgmbWRpb19idXNfdHlwZSwgTlVMTCwgcGh5X25wLCBtYXRjaCk7CisJZCA9IGJ1c19maW5kX2RldmljZSgmbWRpb19idXNfdHlwZSwgTlVMTCwgcGh5X25wLCBvZl9waHlfbWF0Y2gpOwogCXJldHVybiBkID8gdG9fcGh5X2RldmljZShkKSA6IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKG9mX3BoeV9maW5kX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jIGIvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYwppbmRleCAyYjdhZTM2Li41ZGY2MGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMKQEAgLTM1LDEyICszNSwyMyBAQAogLyogYXRvbWljX3QgYmVjYXVzZSB3YWl0X2V2ZW50IGNoZWNrcyBpdCBvdXRzaWRlIG9mIGJ1ZmZlcl9tdXRleCAqLwogc3RhdGljIGF0b21pY190IGJ1ZmZlcl9yZWFkeSA9IEFUT01JQ19JTklUKDApOwogCi0vKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV2ZW50IGJ1ZmZlci4gV2hlbiB3ZQotICogZ2V0IG5lYXIgdG8gdGhlIGVuZCB3ZSB3YWtlIHVwIHRoZSBwcm9jZXNzCi0gKiBzbGVlcGluZyBvbiB0aGUgcmVhZCgpIG9mIHRoZSBmaWxlLgorLyoKKyAqIEFkZCBhbiBlbnRyeSB0byB0aGUgZXZlbnQgYnVmZmVyLiBXaGVuIHdlIGdldCBuZWFyIHRvIHRoZSBlbmQgd2UKKyAqIHdha2UgdXAgdGhlIHByb2Nlc3Mgc2xlZXBpbmcgb24gdGhlIHJlYWQoKSBvZiB0aGUgZmlsZS4gVG8gcHJvdGVjdAorICogdGhlIGV2ZW50X2J1ZmZlciB0aGlzIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aGVuIGJ1ZmZlcl9tdXRleAorICogaXMgc2V0LgogICovCiB2b2lkIGFkZF9ldmVudF9lbnRyeSh1bnNpZ25lZCBsb25nIHZhbHVlKQogeworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIGFsbCB3b3JrcXVldWVzIG9yIGhhbmRsZXJzIGFyZQorCSAqIGNhbmNlbGVkIG9yIGZsdXNoZWQgYmVmb3JlIHRoZSBldmVudCBidWZmZXIgaXMgZnJlZWQuCisJICovCisJaWYgKCFldmVudF9idWZmZXIpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm47CisJfQorCiAJaWYgKGJ1ZmZlcl9wb3MgPT0gYnVmZmVyX3NpemUpIHsKIAkJYXRvbWljX2luYygmb3Byb2ZpbGVfc3RhdHMuZXZlbnRfbG9zdF9vdmVyZmxvdyk7CiAJCXJldHVybjsKQEAgLTY5LDcgKzgwLDYgQEAKIAogaW50IGFsbG9jX2V2ZW50X2J1ZmZlcih2b2lkKQogewotCWludCBlcnIgPSAtRU5PTUVNOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb3Byb2ZpbGVmc19sb2NrLCBmbGFncyk7CkBAIC04MCwyMSArOTAsMjIgQEAKIAlpZiAoYnVmZmVyX3dhdGVyc2hlZCA+PSBidWZmZXJfc2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlidWZmZXJfcG9zID0gMDsKIAlldmVudF9idWZmZXIgPSB2bWFsbG9jKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIGJ1ZmZlcl9zaXplKTsKIAlpZiAoIWV2ZW50X2J1ZmZlcikKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRU5PTUVNOwogCi0JZXJyID0gMDsKLW91dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCiAKIHZvaWQgZnJlZV9ldmVudF9idWZmZXIodm9pZCkKIHsKKwltdXRleF9sb2NrKCZidWZmZXJfbXV0ZXgpOwogCXZmcmVlKGV2ZW50X2J1ZmZlcik7Ci0KKwlidWZmZXJfcG9zID0gMDsKIAlldmVudF9idWZmZXIgPSBOVUxMOworCW11dGV4X3VubG9jaygmYnVmZmVyX211dGV4KTsKIH0KIAogCkBAIC0xNjcsNiArMTc4LDEyIEBACiAKIAltdXRleF9sb2NrKCZidWZmZXJfbXV0ZXgpOwogCisJLyogTWF5IGhhcHBlbiBpZiB0aGUgYnVmZmVyIGlzIGZyZWVkIGR1cmluZyBwZW5kaW5nIHJlYWRzLiAqLworCWlmICghZXZlbnRfYnVmZmVyKSB7CisJCXJldHZhbCA9IC1FSU5UUjsKKwkJZ290byBvdXQ7CisJfQorCiAJYXRvbWljX3NldCgmYnVmZmVyX3JlYWR5LCAwKTsKIAogCXJldHZhbCA9IC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9kbWFyLmMgYi9kcml2ZXJzL3BjaS9kbWFyLmMKaW5kZXggMTRiYmFhMS4uMjJiMDJjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvZG1hci5jCisrKyBiL2RyaXZlcnMvcGNpL2RtYXIuYwpAQCAtMzU0LDYgKzM1NCw3IEBACiAJc3RydWN0IGFjcGlfZG1hcl9oYXJkd2FyZV91bml0ICpkcmhkOwogCXN0cnVjdCBhY3BpX2RtYXJfcmVzZXJ2ZWRfbWVtb3J5ICpybXJyOwogCXN0cnVjdCBhY3BpX2RtYXJfYXRzciAqYXRzcjsKKwlzdHJ1Y3QgYWNwaV9kbWFyX3Joc2EgKnJoc2E7CiAKIAlzd2l0Y2ggKGhlYWRlci0+dHlwZSkgewogCWNhc2UgQUNQSV9ETUFSX1RZUEVfSEFSRFdBUkVfVU5JVDoKQEAgLTM3NSw2ICszNzYsMTIgQEAKIAkJYXRzciA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCBhY3BpX2RtYXJfYXRzciwgaGVhZGVyKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkFUU1IgZmxhZ3M6ICUjeFxuIiwgYXRzci0+ZmxhZ3MpOwogCQlicmVhazsKKwljYXNlIEFDUElfRE1BUl9IQVJEV0FSRV9BRkZJTklUWToKKwkJcmhzYSA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCBhY3BpX2RtYXJfcmhzYSwgaGVhZGVyKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIlJIU0EgYmFzZTogJSMwMTZMeCBwcm94aW1pdHkgZG9tYWluOiAlI3hcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJoc2EtPmJhc2VfYWRkcmVzcywKKwkJICAgICAgIHJoc2EtPnByb3hpbWl0eV9kb21haW4pOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTQ1OSw5ICs0NjYsMTMgQEAKIAkJCXJldCA9IGRtYXJfcGFyc2Vfb25lX2F0c3IoZW50cnlfaGVhZGVyKTsKICNlbmRpZgogCQkJYnJlYWs7CisJCWNhc2UgQUNQSV9ETUFSX0hBUkRXQVJFX0FGRklOSVRZOgorCQkJLyogV2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBSSFNBICh5ZXQ/KSAqLworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAotCQkJCSJVbmtub3duIERNQVIgc3RydWN0dXJlIHR5cGVcbiIpOworCQkJCSJVbmtub3duIERNQVIgc3RydWN0dXJlIHR5cGUgJWRcbiIsCisJCQkJZW50cnlfaGVhZGVyLT50eXBlKTsKIAkJCXJldCA9IDA7IC8qIGZvciBmb3J3YXJkIGNvbXBhdGliaWxpdHkgKi8KIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaAppbmRleCA1MzgzNjAwLi45YzZhOWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIGZvciByZWFkPyBhbmQgd3JpdGU/IGZ1bmN0aW9ucyAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIGZvciBkZWxheXMgKi8KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIGZvciBzaWduYWxfcGVuZGluZygpICovCiAKICNkZWZpbmUgTVlfTkFNRQkiY3BxcGhwIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCA4NTVkZDdjLi5iMWU5N2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTQ4LDYgKzQ4LDcgQEAKIAogI2RlZmluZSBJU19HRlhfREVWSUNFKHBkZXYpICgocGRldi0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpCiAjZGVmaW5lIElTX0lTQV9ERVZJQ0UocGRldikgKChwZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX0lTQSkKKyNkZWZpbmUgSVNfQVpBTElBKHBkZXYpICgocGRldiktPnZlbmRvciA9PSAweDgwODYgJiYgKHBkZXYpLT5kZXZpY2UgPT0gMHgzYTNlKQogCiAjZGVmaW5lIElPQVBJQ19SQU5HRV9TVEFSVAkoMHhmZWUwMDAwMCkKICNkZWZpbmUgSU9BUElDX1JBTkdFX0VORAkoMHhmZWVmZmZmZikKQEAgLTk0LDYgKzk1LDcgQEAKIC8qIGdsb2JhbCBpb21tdSBsaXN0LCBzZXQgTlVMTCBmb3IgaWdub3JlZCBETUFSIHVuaXRzICovCiBzdGF0aWMgc3RydWN0IGludGVsX2lvbW11ICoqZ19pb21tdXM7CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBjaGVja190eWxlcnNidXJnX2lzb2NoKHZvaWQpOwogc3RhdGljIGludCByd2JmX3F1aXJrOwogCiAvKgpAQCAtMTkzNCw2ICsxOTM2LDkgQEAKIH0KIAogc3RhdGljIGludCBpb21tdV9pZGVudGl0eV9tYXBwaW5nOworI2RlZmluZSBJREVOVE1BUF9BTEwJCTEKKyNkZWZpbmUgSURFTlRNQVBfR0ZYCQkyCisjZGVmaW5lIElERU5UTUFQX0FaQUxJQQkJNAogCiBzdGF0aWMgaW50IGlvbW11X2RvbWFpbl9pZGVudGl0eV9tYXAoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnQsCkBAIC0yMTUxLDggKzIxNTYsMTQgQEAKIAogc3RhdGljIGludCBpb21tdV9zaG91bGRfaWRlbnRpdHlfbWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgc3RhcnR1cCkKIHsKLQlpZiAoaW9tbXVfaWRlbnRpdHlfbWFwcGluZyA9PSAyKQotCQlyZXR1cm4gSVNfR0ZYX0RFVklDRShwZGV2KTsKKwlpZiAoKGlvbW11X2lkZW50aXR5X21hcHBpbmcgJiBJREVOVE1BUF9BWkFMSUEpICYmIElTX0FaQUxJQShwZGV2KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKGlvbW11X2lkZW50aXR5X21hcHBpbmcgJiBJREVOVE1BUF9HRlgpICYmIElTX0dGWF9ERVZJQ0UocGRldikpCisJCXJldHVybiAxOworCisJaWYgKCEoaW9tbXVfaWRlbnRpdHlfbWFwcGluZyAmIElERU5UTUFQX0FMTCkpCisJCXJldHVybiAwOwogCiAJLyoKIAkgKiBXZSB3YW50IHRvIHN0YXJ0IG9mZiB3aXRoIGFsbCBkZXZpY2VzIGluIHRoZSAxOjEgZG9tYWluLCBhbmQKQEAgLTIzMzIsMTEgKzIzNDMsMTQgQEAKIAl9CiAKIAlpZiAoaW9tbXVfcGFzc190aHJvdWdoKQotCQlpb21tdV9pZGVudGl0eV9tYXBwaW5nID0gMTsKKwkJaW9tbXVfaWRlbnRpdHlfbWFwcGluZyB8PSBJREVOVE1BUF9BTEw7CisKICNpZmRlZiBDT05GSUdfRE1BUl9CUk9LRU5fR0ZYX1dBCi0JZWxzZQotCQlpb21tdV9pZGVudGl0eV9tYXBwaW5nID0gMjsKKwlpb21tdV9pZGVudGl0eV9tYXBwaW5nIHw9IElERU5UTUFQX0dGWDsKICNlbmRpZgorCisJY2hlY2tfdHlsZXJzYnVyZ19pc29jaCgpOworCiAJLyoKIAkgKiBJZiBwYXNzIHRocm91Z2ggaXMgbm90IHNldCBvciBub3QgZW5hYmxlZCwgc2V0dXAgY29udGV4dCBlbnRyaWVzIGZvcgogCSAqIGlkZW50aXR5IG1hcHBpbmdzIGZvciBybXJyLCBnZngsIGFuZCBpc2EgYW5kIG1heSBmYWxsIGJhY2sgdG8gc3RhdGljCkBAIC0zNjcwLDMgKzM2ODQsNjEgQEAKIH0KIAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MmE0MCwgcXVpcmtfaW9tbXVfcndiZik7CisKKy8qIE9uIFR5bGVyc2J1cmcgY2hpcHNldHMsIHNvbWUgQklPU2VzIGhhdmUgYmVlbiBrbm93biB0byBlbmFibGUgdGhlCisgICBJU09DSCBETUFSIHVuaXQgZm9yIHRoZSBBemFsaWEgc291bmQgZGV2aWNlLCBidXQgbm90IGdpdmUgaXQgYW55CisgICBUTEIgZW50cmllcywgd2hpY2ggY2F1c2VzIGl0IHRvIGRlYWRsb2NrLiBDaGVjayBmb3IgdGhhdC4gIFdlIGRvCisgICB0aGlzIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gaW5pdF9kbWFycygpLCBpbnN0ZWFkIG9mIGluIGEgUENJCisgICBxdWlyaywgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHByaW50IHRoZSBvYm5veGlvdXMgIkJJT1MgYnJva2VuIgorICAgbWVzc2FnZSBpZiBWVC1kIGlzIGFjdHVhbGx5IGRpc2FibGVkLgorKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBjaGVja190eWxlcnNidXJnX2lzb2NoKHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJdWludDMyX3QgdnRpc29jaGN0cmw7CisKKwkvKiBJZiB0aGVyZSdzIG5vIEF6YWxpYSBpbiB0aGUgc3lzdGVtIGFueXdheSwgZm9yZ2V0IGl0LiAqLworCXBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDNhM2UsIE5VTEwpOworCWlmICghcGRldikKKwkJcmV0dXJuOworCXBjaV9kZXZfcHV0KHBkZXYpOworCisJLyogU3lzdGVtIE1hbmFnZW1lbnQgUmVnaXN0ZXJzLiBNaWdodCBiZSBoaWRkZW4sIGluIHdoaWNoIGNhc2UKKwkgICB3ZSBjYW4ndCBkbyB0aGUgc2FuaXR5IGNoZWNrLiBCdXQgdGhhdCdzIE9LLCBiZWNhdXNlIHRoZQorCSAgIGtub3duLWJyb2tlbiBCSU9TZXMgX2Rvbid0XyBhY3R1YWxseSBoaWRlIGl0LCBzbyBmYXIuICovCisJcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MzQyZSwgTlVMTCk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm47CisKKwlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4MTg4LCAmdnRpc29jaGN0cmwpKSB7CisJCXBjaV9kZXZfcHV0KHBkZXYpOworCQlyZXR1cm47CisJfQorCisJcGNpX2Rldl9wdXQocGRldik7CisKKwkvKiBJZiBBemFsaWEgRE1BIGlzIHJvdXRlZCB0byB0aGUgbm9uLWlzb2NoIERNQVIgdW5pdCwgZmluZS4gKi8KKwlpZiAodnRpc29jaGN0cmwgJiAxKQorCQlyZXR1cm47CisKKwkvKiBEcm9wIGFsbCBiaXRzIG90aGVyIHRoYW4gdGhlIG51bWJlciBvZiBUTEIgZW50cmllcyAqLworCXZ0aXNvY2hjdHJsICY9IDB4MWM7CisKKwkvKiBJZiB3ZSBoYXZlIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2YgVExCIGVudHJpZXMgKDE2KSwgZmluZS4gKi8KKwlpZiAodnRpc29jaGN0cmwgPT0gMHgxMCkKKwkJcmV0dXJuOworCisJLyogWmVybyBUTEIgZW50cmllcz8gWW91IGdldCB0byByaWRlIHRoZSBzaG9ydCBidXMgdG8gc2Nob29sLiAqLworCWlmICghdnRpc29jaGN0cmwpIHsKKwkJV0FSTigxLCAiWW91ciBCSU9TIGlzIGJyb2tlbjsgRE1BIHJvdXRlZCB0byBJU09DSCBETUFSIHVuaXQgYnV0IG5vIFRMQiBzcGFjZS5cbiIKKwkJICAgICAiQklPUyB2ZW5kb3I6ICVzOyBWZXI6ICVzOyBQcm9kdWN0IFZlcnNpb246ICVzXG4iLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKKwkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOworCQlpb21tdV9pZGVudGl0eV9tYXBwaW5nIHw9IElERU5UTUFQX0FaQUxJQTsKKwkJcmV0dXJuOworCX0KKwkKKwlwcmludGsoS0VSTl9XQVJOSU5HICJETUFSOiBSZWNvbW1lbmRlZCBUTEIgZW50cmllcyBmb3IgSVNPQ0ggdW5pdCBpcyAxNjsgeW91ciBCSU9TIHNldCAlZFxuIiwKKwkgICAgICAgdnRpc29jaGN0cmwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA2ZWRlY2ZmLi40ZTRjMjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtNTEzLDcgKzUxMywxMSBAQAogCWVsc2UgaWYgKHN0YXRlID09IFBDSV9EMiB8fCBkZXYtPmN1cnJlbnRfc3RhdGUgPT0gUENJX0QyKQogCQl1ZGVsYXkoUENJX1BNX0QyX0RFTEFZKTsKIAotCWRldi0+Y3VycmVudF9zdGF0ZSA9IHN0YXRlOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZGV2LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgJnBtY3NyKTsKKwlkZXYtPmN1cnJlbnRfc3RhdGUgPSAocG1jc3IgJiBQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKTsKKwlpZiAoZGV2LT5jdXJyZW50X3N0YXRlICE9IHN0YXRlICYmIHByaW50a19yYXRlbGltaXQoKSkKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiUmVmdXNlZCB0byBjaGFuZ2UgcG93ZXIgc3RhdGUsICIKKwkJCSJjdXJyZW50bHkgaW4gRCVkXG4iLCBkZXYtPmN1cnJlbnRfc3RhdGUpOwogCiAJLyogQWNjb3JkaW5nIHRvIHNlY3Rpb24gNS40LjEgb2YgdGhlICJQQ0kgQlVTIFBPV0VSIE1BTkFHRU1FTlQKIAkgKiBJTlRFUkZBQ0UgU1BFQ0lGSUNBVElPTiwgUkVWLiAxLjIiLCBhIGRldmljZSB0cmFuc2l0aW9uaW5nCkBAIC0yNTQyLDEwICsyNTQ2LDEwIEBACiAKIC8qKgogICogcGNpX3NldF92Z2Ffc3RhdGUgLSBzZXQgVkdBIGRlY29kZSBzdGF0ZSBvbiBkZXZpY2UgYW5kIHBhcmVudHMgaWYgcmVxdWVzdGVkCi0gKiBAZGV2IHRoZSBQQ0kgZGV2aWNlCi0gKiBAZGVjb2RlIC0gdHJ1ZSA9IGVuYWJsZSBkZWNvZGluZywgZmFsc2UgPSBkaXNhYmxlIGRlY29kaW5nCi0gKiBAY29tbWFuZF9iaXRzIFBDSV9DT01NQU5EX0lPIGFuZC9vciBQQ0lfQ09NTUFORF9NRU1PUlkKLSAqIEBjaGFuZ2VfYnJpZGdlIC0gdHJhdmVyc2UgYW5jZXN0b3JzIGFuZCBjaGFuZ2UgYnJpZGdlcworICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqIEBkZWNvZGU6IHRydWUgPSBlbmFibGUgZGVjb2RpbmcsIGZhbHNlID0gZGlzYWJsZSBkZWNvZGluZworICogQGNvbW1hbmRfYml0czogUENJX0NPTU1BTkRfSU8gYW5kL29yIFBDSV9DT01NQU5EX01FTU9SWQorICogQGNoYW5nZV9icmlkZ2U6IHRyYXZlcnNlIGFuY2VzdG9ycyBhbmQgY2hhbmdlIGJyaWRnZXMKICAqLwogaW50IHBjaV9zZXRfdmdhX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZGVjb2RlLAogCQkgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZF9iaXRzLCBib29sIGNoYW5nZV9icmlkZ2UpCkBAIC0yNzE5LDE3ICsyNzIzLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgcGNpX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKLQotCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgewotCQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9maW5hbCwgZGV2KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfX2luaXQgcGNpX3NldHVwKGNoYXIgKnN0cikKIHsKIAl3aGlsZSAoc3RyKSB7CkBAIC0yNzY3LDggKzI3NjAsNiBAQAogfQogZWFybHlfcGFyYW0oInBjaSIsIHBjaV9zZXR1cCk7CiAKLWRldmljZV9pbml0Y2FsbChwY2lfaW5pdCk7Ci0KIEVYUE9SVF9TWU1CT0wocGNpX3JlZW5hYmxlX2RldmljZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9lbmFibGVfZGV2aWNlX2lvKTsKIEVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV9kZXZpY2VfbWVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMKaW5kZXggZDQ5ZWNjOS4uNDBjM2NjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMKQEAgLTUzLDcgKzUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgYWVyZHJpdmVyID0gewogCS5uYW1lCQk9ICJhZXIiLAotCS5wb3J0X3R5cGUJPSBQQ0lFX0FOWV9QT1JULAorCS5wb3J0X3R5cGUJPSBQQ0lFX1JDX1BPUlQsCiAJLnNlcnZpY2UJPSBQQ0lFX1BPUlRfU0VSVklDRV9BRVIsCiAKIAkucHJvYmUJCT0gYWVyX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCmluZGV4IDZkZjVjOTguLmY2MzVlNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKQEAgLTMwLDcgKzMwLDYgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyogZ2xvYmFsIGRhdGEgKi8KLXN0YXRpYyBjb25zdCBjaGFyIGRldmljZV9uYW1lW10gPSAicGNpZXBvcnQtZHJpdmVyIjsKIAogc3RhdGljIGludCBwY2llX3BvcnRkcnZfcmVzdG9yZV9jb25maWcoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTI2Miw3ICsyNjEsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBjaWVfcG9ydGRyaXZlciA9IHsKLQkubmFtZQkJPSAoY2hhciAqKWRldmljZV9uYW1lLAorCS5uYW1lCQk9ICJwY2llcG9ydCIsCiAJLmlkX3RhYmxlCT0gJnBvcnRfcGNpX2lkc1swXSwKIAogCS5wcm9iZQkJPSBwY2llX3BvcnRkcnZfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDYwOTlmYWMuLjI0NWQyY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC02NzAsNiArNjcwLDI1IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsCXF1aXJrX3Z0ODIzNV9hY3BpKTsKIAorLyoKKyAqIFRJIFhJTzIwMDBhIFBDSWUtUENJIEJyaWRnZSBlcnJvbmVvdXNseSByZXBvcnRzIGl0IHN1cHBvcnRzIGZhc3QgYmFjay10by1iYWNrOgorICoJRGlzYWJsZSBmYXN0IGJhY2stdG8tYmFjayBvbiB0aGUgc2Vjb25kYXJ5IGJ1cyBzZWdtZW50CisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya194aW8yMDAwYShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXUxNiBjb21tYW5kOworCisJZGV2X3dhcm4oJmRldi0+ZGV2LCAiVEkgWElPMjAwMGEgcXVpcmsgZGV0ZWN0ZWQ7ICIKKwkJInNlY29uZGFyeSBidXMgZmFzdCBiYWNrLXRvLWJhY2sgdHJhbnNmZXJzIGRpc2FibGVkXG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZXYsICZkZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOworCQlpZiAoY29tbWFuZCAmIFBDSV9DT01NQU5EX0ZBU1RfQkFDSykKKwkJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgY29tbWFuZCAmIH5QQ0lfQ09NTUFORF9GQVNUX0JBQ0spOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfVEksIFBDSV9ERVZJQ0VfSURfVElfWElPMjAwMEEsCisJCQlxdWlya194aW8yMDAwYSk7CiAKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMgCiAKQEAgLTk5MCw3ICsxMDA5LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2FtZF9pZGVfbW9kZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQkvKiBzZXQgU0JYMDAgU0FUQSBpbiBJREUgbW9kZSB0byBBSENJIG1vZGUgKi8KKwkvKiBzZXQgU0JYMDAvSHVkc29uLTIgU0FUQSBpbiBJREUgbW9kZSB0byBBSENJIG1vZGUgKi8KIAl1OCB0bXA7CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0xBU1NfREVWSUNFLCAmdG1wKTsKQEAgLTEwMDksOCArMTAyOCw4IEBACiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9TQVRBLCBxdWlya19hbWRfaWRlX21vZGUpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfU0FUQSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKIERFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX1NBVEEsIHF1aXJrX2FtZF9pZGVfbW9kZSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NBVEFfSURFLCBxdWlya19hbWRfaWRlX21vZGUpOwotREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TQVRBX0lERSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9TQVRBX0lERSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9TQVRBX0lERSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKIAogLyoKICAqCVNlcnZlcndvcmtzIENTQjUgSURFIGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgbmF0aXZlIG1vZGUKQEAgLTI1NzIsNiArMjU5MSwxOSBAQAogCX0KIAlwY2lfZG9fZml4dXBzKGRldiwgc3RhcnQsIGVuZCk7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHBjaV9hcHBseV9maW5hbF9xdWlya3Modm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKworCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgeworCQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9maW5hbCwgZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGxfc3luYyhwY2lfYXBwbHlfZmluYWxfcXVpcmtzKTsKICNlbHNlCiB2b2lkIHBjaV9maXh1cF9kZXZpY2UoZW51bSBwY2lfZml4dXBfcGFzcyBwYXNzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCmluZGV4IDcwNmY4MmQuLmM1NDUyNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCkBAIC0yMDUsNDMgKzIwNSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmIDAKLWludCBwY2lfYXNzaWduX3Jlc291cmNlX2ZpeGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubykKLXsKLQlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gZGV2LT5idXM7Ci0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBkZXYtPnJlc291cmNlICsgcmVzbm87Ci0JdW5zaWduZWQgaW50IHR5cGVfbWFzazsKLQlpbnQgaSwgcmV0ID0gLUVCVVNZOwotCi0JdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSDsKLQotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBidXMtPnJlc291cmNlW2ldOwotCQlpZiAoIXIpCi0JCQljb250aW51ZTsKLQotCQkvKiB0eXBlX21hc2sgbXVzdCBtYXRjaCAqLwotCQlpZiAoKHJlcy0+ZmxhZ3MgXiByLT5mbGFncykgJiB0eXBlX21hc2spCi0JCQljb250aW51ZTsKLQotCQlyZXQgPSByZXF1ZXN0X3Jlc291cmNlKHIsIHJlcyk7Ci0KLQkJaWYgKHJldCA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJBUiAlZDogY2FuJ3QgYWxsb2NhdGUgJXMgcmVzb3VyY2UgJXBSXG4iLAotCQkJcmVzbm8sIHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPID8gIkkvTyIgOiAibWVtIiwgcmVzKTsKLQl9IGVsc2UgaWYgKHJlc25vIDwgUENJX0JSSURHRV9SRVNPVVJDRVMpIHsKLQkJcGNpX3VwZGF0ZV9yZXNvdXJjZShkZXYsIHJlc25vKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwocGNpX2Fzc2lnbl9yZXNvdXJjZV9maXhlZCk7Ci0jZW5kaWYKLQogLyogU29ydCByZXNvdXJjZXMgYnkgYWxpZ25tZW50ICovCiB2b2lkIHBkZXZfc29ydF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlX2xpc3QgKmhlYWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCmluZGV4IDRhMTEwYjcuLjZjNGE0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCkBAIC0xNDYzLDcgKzE0NjMsOSBAQAogCSAgICByZXR1cm4gLUVOT01FTTsKICAgICB9CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gY29kZTsKLSAgICB0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKKyAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKyAgICBpZiAoZnVuY3Rpb24gPT0gQklORF9GTl9BTEwpCisJICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwogICAgIHJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgZnVuY3Rpb24sICZ0dXBsZSk7CiAgICAgaWYgKHJldCAhPSAwKQogCSAgICBnb3RvIGRvbmU7CkBAIC0xNDkwLDcgKzE0OTIsNyBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLWludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIHVuc2lnbmVkIGludCAqaW5mbykKK2ludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmluZm8pCiB7CiAgICAgdHVwbGVfdCAqdHVwbGU7CiAgICAgY2lzcGFyc2VfdCAqcDsKQEAgLTE1MTUsMzAgKzE1MTcsMzAgQEAKICAgICBjb3VudCA9IHJlc2VydmVkID0gMDsKICAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOwogICAgIHR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLSAgICByZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSk7CisgICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwogICAgIGlmIChyZXQgIT0gMCkKIAlnb3RvIGRvbmU7CiAKICAgICAvKiBGaXJzdCB0dXBsZSBzaG91bGQgYmUgREVWSUNFOyB3ZSBzaG91bGQgcmVhbGx5IGhhdmUgZWl0aGVyIHRoYXQKICAgICAgICBvciBhIENGVEFCTEVfRU5UUlkgb2Ygc29tZSBzb3J0ICovCiAgICAgaWYgKCh0dXBsZS0+VHVwbGVDb2RlID09IENJU1RQTF9ERVZJQ0UpIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWSwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9DRlRBQkxFX0VOVFJZX0NCLCBwKSA9PSAwKSkKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZLCBwKSA9PSAwKSB8fAorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0IsIHApID09IDApKQogCWRldl9vaysrOwogCiAgICAgLyogQWxsIGNhcmRzIHNob3VsZCBoYXZlIGEgTUFORklEIHR1cGxlLCBhbmQvb3IgYSBWRVJTXzEgb3IgVkVSU18yCiAgICAgICAgdHVwbGUsIGZvciBjYXJkIGlkZW50aWZpY2F0aW9uLiAgQ2VydGFpbiBvbGQgRC1MaW5rIGFuZCBMaW5rc3lzCiAgICAgICAgY2FyZHMgaGF2ZSBvbmx5IGEgYnJva2VuIFZFUlNfMiB0dXBsZTsgaGVuY2UgdGhlIGJvZ3VzIHRlc3QuICovCi0gICAgaWYgKChwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX01BTkZJRCwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9WRVJTXzEsIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfVkVSU18yLCBwKSAhPSAtRU5PU1BDKSkKKyAgICBpZiAoKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfTUFORklELCBwKSA9PSAwKSB8fAorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX1ZFUlNfMSwgcCkgPT0gMCkgfHwKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzIsIHApICE9IC1FTk9TUEMpKQogCWlkZW50X29rKys7CiAKICAgICBpZiAoIWRldl9vayAmJiAhaWRlbnRfb2spCiAJZ290byBkb25lOwogCiAgICAgZm9yIChjb3VudCA9IDE7IGNvdW50IDwgTUFYX1RVUExFUzsgY291bnQrKykgewotCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpOworCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwogCWlmIChyZXQgIT0gMCkKIAkJYnJlYWs7CiAJaWYgKCgodHVwbGUtPlR1cGxlQ29kZSA+IDB4MjMpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg0MCkpIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaAppbmRleCA3OTYxNWU2Li4xZjQwOThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKQEAgLTE5Nyw4ICsxOTcsNyBAQAogCQkgICAgICBjaXNkYXRhX3QgY29kZSwgdm9pZCAqcGFyc2UpOwogaW50IHBjbWNpYV9yZXBsYWNlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKIAkJICAgICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKTsKLWludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sCi0JCQl1bnNpZ25lZCBpbnQgKmNvdW50KTsKK2ludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmNvdW50KTsKIAogLyogcnNyY19tZ3IuYyAqLwogaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHMuYyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKaW5kZXggOWYzMDBkMy4uZjViNzA3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZHMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCkBAIC01NDcsNyArNTQ3LDcgQEAKIAlpZiAoIXZlcnMxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsCisJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBCSU5EX0ZOX0FMTCwKIAkJCSAgICAgICBDSVNUUExfTUFORklELCAmbWFuZl9pZCkpIHsKIAkJcF9kZXYtPm1hbmZfaWQgPSBtYW5mX2lkLm1hbmY7CiAJCXBfZGV2LT5jYXJkX2lkID0gbWFuZl9pZC5jYXJkOwpAQCAtNTgxLDkgKzU4MSw5IEBACiAJCWtmcmVlKGRldmdlbyk7CiAJfQogCi0JaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgQ0lTVFBMX1ZFUlNfMSwKKwlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18xLAogCQkJICAgICAgIHZlcnMxKSkgewotCQlmb3IgKGk9MDsgaSA8IHZlcnMxLT5uczsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBtaW5fdCh1bnNpZ25lZCBpbnQsIDQsIHZlcnMxLT5ucyk7IGkrKykgewogCQkJY2hhciAqdG1wOwogCQkJdW5zaWduZWQgaW50IGxlbmd0aDsKIApAQCAtNzMzLDcgKzczMyw3IEBACiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4sIGJ1dCBsYXRlci4uLiAqLwogCX0KIAotCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsICZub19jaGFpbnMpOworCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJm5vX2NoYWlucyk7CiAJaWYgKHJldCB8fCAhbm9fY2hhaW5zKSB7CiAJCWRzX2Rldl9kYmcoMCwgJnMtPmRldiwgImludmFsaWQgQ0lTIG9yIGludmFsaWQgcmVzb3VyY2VzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IGI5MDZhYmUuLmE0YWFjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0xMDUzLDggKzEwNTMsOCBAQAogICAgIHVfY2hhciBtYXAsIGlvY3RsOwogICAgIAogICAgIGRlYnVnKDEsICJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkgICIlI3gtJSN4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwkgICIlI2xseC0lI2xseClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywgaW8tPnNwZWVkLAorCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogICAgIG1hcCA9IGlvLT5tYXA7CiAgICAgaWYgKChtYXAgPiAxKSB8fCAoaW8tPnN0YXJ0ID4gMHhmZmZmKSB8fCAoaW8tPnN0b3AgPiAweGZmZmYpIHx8CiAJKGlvLT5zdG9wIDwgaW8tPnN0YXJ0KSkgcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCBkMWQ4OWM0Li43ZGZiZWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTUzNyw4ICs1MzcsOSBAQAogCXVfY2hhciBtYXA7CiAKIAlkZWJ1ZygzLCAibTMycl9jZmM6IFNldElPTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgICIlI2x4LSUjbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwkJICAiJSNsbHgtJSNsbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCisJCSAgaW8tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdGFydCwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKIAltYXAgPSBpby0+bWFwOwogCiAJcmV0dXJuIDA7CkBAIC01NTQsOCArNTU1LDkgQEAKIAlwY2Nfc29ja2V0X3QgKnQgPSAmc29ja2V0W3NvY2tdOwogCiAJZGVidWcoMywgIm0zMnJfY2ZjOiBTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSAiJSNseCwgJSN4KVxuIiwgc29jaywgbWFwLCBtZW0tPmZsYWdzLAotCQkgbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJCSAiJSNsbHgsICUjeClcbiIsIHNvY2ssIG1hcCwgbWVtLT5mbGFncywKKwkJIG1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCSBtZW0tPmNhcmRfc3RhcnQpOwogCiAJLyoKIAkgKiBzYW5pdHkgY2hlY2sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCmluZGV4IGEwNjU1ODMuLmM2NTI0ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwpAQCAtNDkyLDggKzQ5Miw5IEBACiAJdV9jaGFyIG1hcDsKIAogCWRlYnVnKDMsICJtMzJyLXBjYzogU2V0SU9NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSAgIiUjeC0lI3gpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JCSAgaW8tPnNwZWVkLCBpby0+c3RhcnQsIGlvLT5zdG9wKTsKKwkJICAiJSNsbHgtJSNsbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCisJCSAgaW8tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdGFydCwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKIAltYXAgPSBpby0+bWFwOwogCiAJcmV0dXJuIDA7CkBAIC01MTUsOCArNTE2LDkgQEAKICNlbmRpZgogCiAJZGVidWcoMywgIm0zMnItcGNjOiBTZXRNZW1NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JCSAiJSNseCwgICUjeClcbiIsIHNvY2ssIG1hcCwgbWVtLT5mbGFncywKLQkJIG1lbS0+c3BlZWQsIG1lbS0+c3RhdGljX3N0YXJ0LCBtZW0tPmNhcmRfc3RhcnQpOworCQkgIiUjbGx4LCAgJSN4KVxuIiwgc29jaywgbWFwLCBtZW0tPmZsYWdzLAorCQkgbWVtLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZW0tPnN0YXRpY19zdGFydCwKKwkJIG1lbS0+Y2FyZF9zdGFydCk7CiAKIAkvKgogCSAqIHNhbml0eSBjaGVjawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKaW5kZXggYzY5ZjJjNC4uNDAzNTU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCkBAIC05NzUsOCArOTc1LDkgQEAKICNkZWZpbmUgTThYWF9CQVNFIChQQ01DSUFfSU9fV0lOX0JBU0UgKyBpby0+c3RhcnQpCiAKIAlkcHJpbnRrKCJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJIiUjNC40eC0lIzQuNHgpXG4iLCBsc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCQlpby0+c3BlZWQsIGlvLT5zdGFydCwgaW8tPnN0b3ApOworCQkiJSM0LjRsbHgtJSM0LjRsbHgpXG4iLCBsc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAorCQlpby0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKIAogCWlmICgoaW8tPm1hcCA+PSBQQ01DSUFfSU9fV0lOX05PKSB8fCAoaW8tPnN0YXJ0ID4gMHhmZmZmKQogCSAgICB8fCAoaW8tPnN0b3AgPiAweGZmZmYpIHx8IChpby0+c3RvcCA8IGlvLT5zdGFydCkpCkBAIC0xMDU1LDggKzEwNTYsOSBAQAogCXBjbWNvbmY4eHhfdCAqcGNtY2lhID0gcy0+cGNtY2lhOwogCiAJZHByaW50aygiU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkiJSM1LjVseCwgJSM1LjV4KVxuIiwgbHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAotCQltZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkJIiUjNS41bGx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCisJCW1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCW1lbS0+Y2FyZF9zdGFydCk7CiAKIAlpZiAoKG1lbS0+bWFwID49IFBDTUNJQV9NRU1fV0lOX05PKQogLy8gICAgICAgICAgfHwgKChtZW0tPnMpID49IFBDTUNJQV9NRU1fV0lOX1NJWkUpCkBAIC0xMTA3LDggKzExMDksOSBAQAogCX0KIAogCWRwcmludGsoIlNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJIiUjNS41bHgsICUjNS41eClcbiIsIGxzb2NrLCBtZW0tPm1hcCwgbWVtLT5mbGFncywKLQkJbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJCSIlIzUuNWxseCwgJSM1LjV4KVxuIiwgbHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAorCQltZW0tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+c3RhdGljX3N0YXJ0LAorCQltZW0tPmNhcmRfc3RhcnQpOwogCiAJLyogY29weSB0aGUgc3RydWN0IGFuZCBtb2RpZnkgdGhlIGNvcHkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwppbmRleCAzMmM0NDA0Li4zMGNmNzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwpAQCAtODgxLDcgKzg4MSw3IEBACiAJbXV0ZXhfbG9jaygmcy0+c2t0X211dGV4KTsKIAlwY21jaWFfdmFsaWRhdGVfbWVtKHMpOwogCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKLQlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCAmYnVmLT5jaXNpbmZvLkNoYWlucyk7CisJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmYnVmLT5jaXNpbmZvLkNoYWlucyk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19TVVNQRU5EX0NBUkQ6CiAJcmV0ID0gcGNtY2lhX3N1c3BlbmRfY2FyZChzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKaW5kZXggMWMzOWQzNC4uNzBhMzM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKQEAgLTY0MSw2ICs2NDEsMTIgQEAKIAlpZiAoKHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldikpKQogCQlnb3RvIGVycl9vdXRfZnJlZV9tZW07CiAKKwlpZiAoIXBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApKSB7CisJCXByaW50ayhLRVJOX0lORk8gInBkNjcyOTogcmVmdXNpbmcgdG8gbG9hZCB0aGUgZHJpdmVyICIKKwkJCQkgImFzIHRoZSBpb19iYXNlIGlzIDAuXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbWVtOworCX0KKwogCXByaW50ayhLRVJOX0lORk8gInBkNjcyOTogQ2lycnVzIFBENjcyOSBQQ0kgdG8gUENNQ0lBIEJyaWRnZSAiCiAJCSJhdCAweCVsbHggb24gaXJxICVkXG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApLCBkZXYtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwppbmRleCA5Y2EyMmM3Li43MDM5ZjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKQEAgLTIwNiw2ICsyMDYsNyBAQAogICAgIC8qIEZpcnN0LCB3aGF0IGRvZXMgYSBmbG9hdGluZyBwb3J0IGxvb2sgbGlrZT8gKi8KICAgICBiID0ga3phbGxvYygyNTYsIEdGUF9LRVJORUwpOwogICAgIGlmICghYikgeworCSAgICBwcmludGsoIlxuIik7CiAJICAgIGRldl9wcmludGsoS0VSTl9FUlIsICZzLT5kZXYsCiAJCSAgICJkb19pb19wcm9iZTogdW5hYmxlIHRvIGttYWxsb2MgMjU2IGJ5dGVzIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzUsNyArMjc2LDcgQEAKIAlzLT5jaXNfbWVtLnJlcyA9IHJlczsKIAlzLT5jaXNfdmlydCA9IGlvcmVtYXAocmVzLT5zdGFydCwgcy0+bWFwX3NpemUpOwogCWlmIChzLT5jaXNfdmlydCkgewotCQlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCBjb3VudCk7CisJCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgY291bnQpOwogCQkvKiBpbnZhbGlkYXRlIG1hcHBpbmcgYW5kIENJUyBjYWNoZSAqLwogCQlpb3VubWFwKHMtPmNpc192aXJ0KTsKIAkJcy0+Y2lzX3ZpcnQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCmluZGV4IDE2M2NmOTguLmVmN2U5ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKQEAgLTMzNiw4ICszMzYsOSBAQAogCXN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0ID0gdG9fc29jX3BjbWNpYV9zb2NrZXQoc29jayk7CiAJdW5zaWduZWQgc2hvcnQgc3BlZWQgPSBtYXAtPnNwZWVkOwogCi0JZGVidWcoc2t0LCAyLCAibWFwICV1ICBzcGVlZCAldSBzdGFydCAweCUwOHggc3RvcCAweCUwOHhcbiIsCi0JCW1hcC0+bWFwLCBtYXAtPnNwZWVkLCBtYXAtPnN0YXJ0LCBtYXAtPnN0b3ApOworCWRlYnVnKHNrdCwgMiwgIm1hcCAldSAgc3BlZWQgJXUgc3RhcnQgMHglMDhsbHggc3RvcCAweCUwOGxseFxuIiwKKwkJbWFwLT5tYXAsIG1hcC0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWFwLT5zdGFydCwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPnN0b3ApOwogCWRlYnVnKHNrdCwgMiwgImZsYWdzOiAlcyVzJXMlcyVzJXMlcyVzXG4iLAogCQkobWFwLT5mbGFncz09MCk/IjxOT05FPiI6IiIsCiAJCShtYXAtPmZsYWdzJk1BUF9BQ1RJVkUpPyJBQ1RJVkUgIjoiIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKaW5kZXggZmY5YTNiYi4uNzhkNWFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKQEAgLTMwMCw3ICszMDAsNyBAQAogCiAJCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWlmIChwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCAmY2hhaW5zKSkKKwkJaWYgKHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmNoYWlucykpCiAJCQlyZXR1cm4gLUVJTzsKIAkJaWYgKCFjaGFpbnMpCiAJCQlyZXR1cm4gLUVOT0RBVEE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKaW5kZXggNTgyNDEzZi4uNjkxODg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdGNpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwpAQCAtNzMyLDggKzczMiw4IEBACiAgICAgdV9zaG9ydCBiYXNlLCBsZW4sIGlvY3RsOwogICAgIAogICAgIGRlYnVnKDEsICJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkgICIlI3gtJSN4KVxuIiwgcHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJICAiJSNsbHgtJSNsbHgpXG4iLCBwc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLCBpby0+c3BlZWQsCisJICAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAgICAgaWYgKChpby0+bWFwID4gMSkgfHwgKGlvLT5zdGFydCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wID4gMHhmZmZmKSB8fAogCShpby0+c3RvcCA8IGlvLT5zdGFydCkpIHJldHVybiAtRUlOVkFMOwogICAgIHRjaWNfc2V0dyhUQ0lDX0FERFIrMiwgVENJQ19BRFIyX0lORFJFRyB8IChwc29jayA8PCBUQ0lDX1NTX1NIRlQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKaW5kZXggNzQ5ZTIxMC4uZDM3OWU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKQEAgLTE1MCw2ICsxNTAsOCBAQAogLyogVGhlIGFjdHVhbCBkZXZpY2UgdGhlIGRyaXZlciBiaW5kcyB0byAqLwogc3RhdGljIHN0cnVjdCBlZWVwY19ob3RrICplaG90azsKIAorc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2hvdHBsdWcoYm9vbCByZWFsKTsKKwogLyogUGxhdGZvcm0gZGV2aWNlL2RyaXZlciAqLwogc3RhdGljIGludCBlZWVwY19ob3RrX3RoYXcoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKIHN0YXRpYyBpbnQgZWVlcGNfaG90a19yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSk7CkBAIC0zNDMsMTQgKzM0NSwyMyBAQAogc3RhdGljIGludCBlZWVwY19yZmtpbGxfc2V0KHZvaWQgKmRhdGEsIGJvb2wgYmxvY2tlZCkKIHsKIAl1bnNpZ25lZCBsb25nIGFzbCA9ICh1bnNpZ25lZCBsb25nKWRhdGE7Ci0JcmV0dXJuIHNldF9hY3BpKGFzbCwgIWJsb2NrZWQpOworCWludCByZXQ7CisKKwlpZiAoYXNsICE9IENNX0FTTF9XTEFOKQorCQlyZXR1cm4gc2V0X2FjcGkoYXNsLCAhYmxvY2tlZCk7CisKKwkvKiBoYWNrIHRvIGF2b2lkIHBhbmljIHdpdGggcnQyODYwc3RhICovCisJaWYgKGJsb2NrZWQpCisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGZhbHNlKTsKKwlyZXQgPSBzZXRfYWNwaShhc2wsICFibG9ja2VkKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJma2lsbF9vcHMgZWVlcGNfcmZraWxsX29wcyA9IHsKIAkuc2V0X2Jsb2NrID0gZWVlcGNfcmZraWxsX3NldCwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlZWVwY19lbmFibGVfY2FtZXJhKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZWVlcGNfZW5hYmxlX2NhbWVyYSh2b2lkKQogewogCS8qCiAJICogSWYgdGhlIGZvbGxvd2luZyBjYWxsIHRvIHNldF9hY3BpKCkgZmFpbHMsIGl0J3MgYmVjYXVzZSB0aGVyZSdzIG5vCkBAIC02NDMsMTMgKzY1NCwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBlZWVwY19yZmtpbGxfaG90cGx1Zyh2b2lkKQorc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2hvdHBsdWcoYm9vbCByZWFsKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IHBjaV9idXMgKmJ1czsKLQlib29sIGJsb2NrZWQgPSBlZWVwY193bGFuX3Jma2lsbF9ibG9ja2VkKCk7CisJYm9vbCBibG9ja2VkID0gcmVhbCA/IGVlZXBjX3dsYW5fcmZraWxsX2Jsb2NrZWQoKSA6IHRydWU7CiAKLQlpZiAoZWhvdGstPndsYW5fcmZraWxsKQorCWlmIChyZWFsICYmIGVob3RrLT53bGFuX3Jma2lsbCkKIAkJcmZraWxsX3NldF9zd19zdGF0ZShlaG90ay0+d2xhbl9yZmtpbGwsIGJsb2NrZWQpOwogCiAJbXV0ZXhfbG9jaygmZWhvdGstPmhvdHBsdWdfbG9jayk7CkBAIC02OTIsNyArNzAzLDcgQEAKIAlpZiAoZXZlbnQgIT0gQUNQSV9OT1RJRllfQlVTX0NIRUNLKQogCQlyZXR1cm47CiAKLQllZWVwY19yZmtpbGxfaG90cGx1ZygpOworCWVlZXBjX3Jma2lsbF9ob3RwbHVnKHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBlZWVwY19ob3RrX25vdGlmeShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTMyIGV2ZW50KQpAQCAtODUwLDcgKzg2MSw3IEBACiB7CiAJLyogUmVmcmVzaCBib3RoIHdsYW4gcmZraWxsIHN0YXRlIGFuZCBwY2kgaG90cGx1ZyAqLwogCWlmIChlaG90ay0+d2xhbl9yZmtpbGwpCi0JCWVlZXBjX3Jma2lsbF9ob3RwbHVnKCk7CisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnKHRydWUpOwogCiAJaWYgKGVob3RrLT5ibHVldG9vdGhfcmZraWxsKQogCQlyZmtpbGxfc2V0X3N3X3N0YXRlKGVob3RrLT5ibHVldG9vdGhfcmZraWxsLApAQCAtOTkzLDcgKzEwMDQsNyBAQAogCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsIHN0YXRlIHdhcyBjaGFuZ2VkIGFmdGVyCiAJICogZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoKQogCSAqLwotCWVlZXBjX3Jma2lsbF9ob3RwbHVnKCk7CisJZWVlcGNfcmZraWxsX2hvdHBsdWcodHJ1ZSk7CiAJaWYgKGVob3RrLT5ob3RwbHVnX3Nsb3QpCiAJCXBjaV9ocF9kZXJlZ2lzdGVyKGVob3RrLT5ob3RwbHVnX3Nsb3QpOwogCkBAIC0xMTA5LDcgKzExMjAsNyBAQAogCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsIHN0YXRlIHdhcyBjaGFuZ2VkIGR1cmluZwogCSAqIHNldHVwLgogCSAqLwotCWVlZXBjX3Jma2lsbF9ob3RwbHVnKCk7CisJZWVlcGNfcmZraWxsX2hvdHBsdWcodHJ1ZSk7CiAKIGV4aXQ6CiAJaWYgKHJlc3VsdCAmJiByZXN1bHQgIT0gLUVOT0RFVikKQEAgLTExODksNyArMTIwMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZWVlcGNfaG90a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJaW50IHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCmluZGV4IGYzNWFlZTUuLmJjZDRiYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwpAQCAtOTQ0LDcgKzk0NCw3IEBACiAJc3RydWN0IGZ1aml0c3VfaG90a2V5X3QgKmZ1aml0c3VfaG90a2V5ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZnVqaXRzdV9ob3RrZXktPmlucHV0OwogCi0jaWZkZWYgQ09ORklHX0xFRFNfQ0xBU1MKKyNpZiBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTKSB8fCBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTX01PRFVMRSkKIAlpZiAoZnVqaXRzdV9ob3RrZXktPmxvZ29sYW1wX3JlZ2lzdGVyZWQpCiAJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsb2dvbGFtcF9sZWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCA1M2I4YzI1Li5hYWNjYzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTI1MzMsNiArMjUzMyw3IEBACiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCXN0cnVjdCBjY3cxICpjY3c7CisJdW5zaWduZWQgbG9uZyAqaWRhdzsKIAogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KG1hZ2ljLCAxIC8qIFJEQyAqLywgcmRjX2J1ZmZlcl9zaXplLCBkZXZpY2UpOwogCkBAIC0yNTQ2LDkgKzI1NDcsMTcgQEAKIAogCWNjdyA9IGNxci0+Y3BhZGRyOwogCWNjdy0+Y21kX2NvZGUgPSBDQ1dfQ01EX1JEQzsKLQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KXJkY19idWZmZXI7Ci0JY2N3LT5jb3VudCA9IHJkY19idWZmZXJfc2l6ZTsKKwlpZiAoaWRhbF9pc19uZWVkZWQocmRjX2J1ZmZlciwgcmRjX2J1ZmZlcl9zaXplKSkgeworCQlpZGF3ID0gKHVuc2lnbmVkIGxvbmcgKikgKGNxci0+ZGF0YSk7CisJCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIGlkYXc7CisJCWNjdy0+ZmxhZ3MgPSBDQ1dfRkxBR19JREE7CisJCWlkYXcgPSBpZGFsX2NyZWF0ZV93b3JkcyhpZGF3LCByZGNfYnVmZmVyLCByZGNfYnVmZmVyX3NpemUpOworCX0gZWxzZSB7CisJCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpIHJkY19idWZmZXI7CisJCWNjdy0+ZmxhZ3MgPSAwOworCX0KIAorCWNjdy0+Y291bnQgPSByZGNfYnVmZmVyX3NpemU7CiAJY3FyLT5zdGFydGRldiA9IGRldmljZTsKIAljcXItPm1lbWRldiA9IGRldmljZTsKIAljcXItPmV4cGlyZXMgPSAxMCpIWjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwppbmRleCAwYmU3YzE1Li40MTdiOTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC0zMjE2LDYgKzMyMTYsNyBAQAogCXN0cnVjdCBkYXNkX2Vja2RfY2hhcmFjdGVyaXN0aWNzIHRlbXBfcmRjX2RhdGE7CiAJaW50IGlzX2tub3duLCByYzsKIAlzdHJ1Y3QgZGFzZF91aWQgdGVtcF91aWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKIApAQCAtMzIyOCw3ICszMjI5LDggQEAKIAlyYyA9IGRhc2RfZWNrZF9nZW5lcmF0ZV91aWQoZGV2aWNlLCAmcHJpdmF0ZS0+dWlkKTsKIAlkYXNkX2dldF91aWQoZGV2aWNlLT5jZGV2LCAmdGVtcF91aWQpOwogCWlmIChtZW1jbXAoJnByaXZhdGUtPnVpZCwgJnRlbXBfdWlkLCBzaXplb2Yoc3RydWN0IGRhc2RfdWlkKSkgIT0gMCkKLQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgVUlEIG9mIHRoZSBEQVNEIGhhcyBjaGFuZ2VkXG4iKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgVUlEIG9mIHRoZSBEQVNEIGhhcyAiCisJCQkiY2hhbmdlZFxuIik7CiAJaWYgKHJjKQogCQlnb3RvIG91dF9lcnI7CiAJZGFzZF9zZXRfdWlkKGRldmljZS0+Y2RldiwgJnByaXZhdGUtPnVpZCk7CkBAIC0zMjU2LDkgKzMyNTgsOSBAQAogCQkJICAiZGV2aWNlOiAlcyIsIHJjLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJZ290byBvdXRfZXJyOwogCX0KLQlzcGluX2xvY2soZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOworCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CiAJbWVtY3B5KCZwcml2YXRlLT5yZGNfZGF0YSwgJnRlbXBfcmRjX2RhdGEsIHNpemVvZih0ZW1wX3JkY19kYXRhKSk7Ci0Jc3Bpbl91bmxvY2soZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldiksIGZsYWdzKTsKIAogCS8qIGFkZCBkZXZpY2UgdG8gYWxpYXMgbWFuYWdlbWVudCAqLwogCWRhc2RfYWxpYXNfYWRkX2RldmljZShkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jCmluZGV4IGRhYWVjMTguLmI0NDQ2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMKQEAgLTI2LDcgKzI2LDYgQEAKIHN0YXRpYyBpbnQgc2NscF9hc3luY19zZW5kX3dhaXQoY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmNhbGxob21lX3N5c2N0bF9oZWFkZXI7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNjbHBfYXN5bmNfbG9jayk7Ci1zdGF0aWMgY2hhciBub2RlbmFtZVs2NF07CiAjZGVmaW5lIFNDTFBfTk9STUFMX1dSSVRFCTB4MDAKIAogc3RydWN0IGFzeW5jX2V2YnVmIHsKQEAgLTUyLDkgKzUxLDEwIEBACiBzdGF0aWMgaW50IGNhbGxfaG9tZV9vbl9wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQogewotCQlzdHJuY2F0KGRhdGEsIG5vZGVuYW1lLCBzdHJsZW4obm9kZW5hbWUpKTsKLQkJc2NscF9hc3luY19zZW5kX3dhaXQoZGF0YSk7Ci0JCXJldHVybiBOT1RJRllfRE9ORTsKKwlzdHJuY2F0KGRhdGEsIGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSwKKwkJc2l6ZW9mKGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSkpOworCXNjbHBfYXN5bmNfc2VuZF93YWl0KGRhdGEpOworCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjYWxsX2hvbWVfcGFuaWNfbmIgPSB7CkBAIC02MiwyMSArNjIsMjAgQEAKIAkucHJpb3JpdHkgPSBJTlRfTUFYLAogfTsKIAotc3RhdGljIGludCBwcm9jX2hhbmRsZXJfY2FsbGhvbWUoY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCitzdGF0aWMgaW50IHByb2NfaGFuZGxlcl9jYWxsaG9tZShzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKIAkJCQkgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpjb3VudCwKIAkJCQkgbG9mZl90ICpwcG9zKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBsZW4sIHJjOwotCWNoYXIgYnVmWzJdOworCWNoYXIgYnVmWzNdOwogCi0JaWYgKCEqY291bnQgfCAoKnBwb3MgJiYgIXdyaXRlKSkgeworCWlmICghKmNvdW50IHx8ICgqcHBvcyAmJiAhd3JpdGUpKSB7CiAJCSpjb3VudCA9IDA7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIXdyaXRlKSB7Ci0JCWxlbiA9ICBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjYWxsaG9tZV9lbmFibGVkKTsKLQkJYnVmW2xlbl0gPSAnXDAnOworCQlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRcbiIsIGNhbGxob21lX2VuYWJsZWQpOwogCQlyYyA9IGNvcHlfdG9fdXNlcihidWZmZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCQlpZiAocmMgIT0gMCkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTAwLDcgKzk5LDcgQEAKIAl7CiAJCS5wcm9jbmFtZQk9ICJjYWxsaG9tZSIsCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19oYW5kbGVyX2NhbGxob21lLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19oYW5kbGVyX2NhbGxob21lLAogCX0sCiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CkBAIC0xNzEsMzkgKzE3MCwyOSBAQAogCXJjID0gc2NscF9yZWdpc3Rlcigmc2NscF9hc3luY19yZWdpc3Rlcik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JY2FsbGhvbWVfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShrZXJuX2Rpcl90YWJsZSk7Ci0JaWYgKCFjYWxsaG9tZV9zeXNjdGxfaGVhZGVyKSB7Ci0JCXJjID0gLUVOT01FTTsKKwlyYyA9IC1FT1BOT1RTVVBQOworCWlmICghKHNjbHBfYXN5bmNfcmVnaXN0ZXIuc2NscF9yZWNlaXZlX21hc2sgJiBFVlRZUF9BU1lOQ19NQVNLKSkKIAkJZ290byBvdXRfc2NscDsKLQl9Ci0JaWYgKCEoc2NscF9hc3luY19yZWdpc3Rlci5zY2xwX3JlY2VpdmVfbWFzayAmIEVWVFlQX0FTWU5DX01BU0spKSB7Ci0JCXJjID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0X3NjbHA7Ci0JfQogCXJjID0gLUVOT01FTTsKKwljYWxsaG9tZV9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGtlcm5fZGlyX3RhYmxlKTsKKwlpZiAoIWNhbGxob21lX3N5c2N0bF9oZWFkZXIpCisJCWdvdG8gb3V0X3NjbHA7CiAJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzY2xwX3JlcSksIEdGUF9LRVJORUwpOwotCWlmICghcmVxdWVzdCkKLQkJZ290byBvdXRfc3lzOwogCXNjY2IgPSAoc3RydWN0IHNjbHBfYXN5bmNfc2NjYiAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwotCWlmICghc2NjYikKKwlpZiAoIXJlcXVlc3QgfHwgIXNjY2IpCiAJCWdvdG8gb3V0X21lbTsKLQlyYyA9ICBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCi0JCQkJCSAgICAgJmNhbGxfaG9tZV9wYW5pY19uYik7Ci0JaWYgKHJjKQotCQlnb3RvIG91dF9tZW07Ci0KLQlzdHJuY3B5KG5vZGVuYW1lLCBpbml0X3V0c25hbWUoKS0+bm9kZW5hbWUsIDY0KTsKLQlyZXR1cm4gMDsKLQorCXJjID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCQkgICAgJmNhbGxfaG9tZV9wYW5pY19uYik7CisJaWYgKCFyYykKKwkJZ290byBvdXQ7CiBvdXRfbWVtOgogCWtmcmVlKHJlcXVlc3QpOwogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgc2NjYik7Ci1vdXRfc3lzOgogCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGNhbGxob21lX3N5c2N0bF9oZWFkZXIpOwogb3V0X3NjbHA6CiAJc2NscF91bnJlZ2lzdGVyKCZzY2xwX2FzeW5jX3JlZ2lzdGVyKTsKK291dDoKIAlyZXR1cm4gcmM7Ci0KIH0KIG1vZHVsZV9pbml0KHNjbHBfYXN5bmNfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYwppbmRleCAxNzg3MjRmLi5iOWQyYTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jCkBAIC03MDUsMjEgKzcwNSw2IEBACiB9CiBfX2luaXRjYWxsKHNjbHBfdnQyMjBfdHR5X2luaXQpOwogCi0jaWZkZWYgQ09ORklHX1NDTFBfVlQyMjBfQ09OU09MRQotCi1zdGF0aWMgdm9pZAotc2NscF92dDIyMF9jb25fd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JX19zY2xwX3Z0MjIwX3dyaXRlKChjb25zdCB1bnNpZ25lZCBjaGFyICopIGJ1ZiwgY291bnQsIDEsIDEsIDApOwotfQotCi1zdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKgotc2NscF92dDIyMF9jb25fZGV2aWNlKHN0cnVjdCBjb25zb2xlICpjLCBpbnQgKmluZGV4KQotewotCSppbmRleCA9IDA7Ci0JcmV0dXJuIHNjbHBfdnQyMjBfZHJpdmVyOwotfQotCiBzdGF0aWMgdm9pZCBfX3NjbHBfdnQyMjBfZmx1c2hfYnVmZmVyKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTc3Niw2ICs3NjEsMjEgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfU0NMUF9WVDIyMF9DT05TT0xFCisKK3N0YXRpYyB2b2lkCitzY2xwX3Z0MjIwX2Nvbl93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlfX3NjbHBfdnQyMjBfd3JpdGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYnVmLCBjb3VudCwgMSwgMSwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqCitzY2xwX3Z0MjIwX2Nvbl9kZXZpY2Uoc3RydWN0IGNvbnNvbGUgKmMsIGludCAqaW5kZXgpCit7CisJKmluZGV4ID0gMDsKKwlyZXR1cm4gc2NscF92dDIyMF9kcml2ZXI7Cit9CisKIHN0YXRpYyBpbnQKIHNjbHBfdnQyMjBfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCSAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwppbmRleCA2NGY1N2VmLi4wYzA3MDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0xNjIsOSArMTYyLDEwIEBACiAJc3Bpbl9sb2NrX2lycSgmZGV2aWNlLT5ibGtfZGF0YS5yZXF1ZXN0X3F1ZXVlX2xvY2spOwogCXdoaWxlICgKIAkJIWJsa19xdWV1ZV9wbHVnZ2VkKHF1ZXVlKSAmJgotCQkocmVxID0gYmxrX2ZldGNoX3JlcXVlc3QocXVldWUpKSAmJgorCQlibGtfcGVla19yZXF1ZXN0KHF1ZXVlKSAmJgogCQlucl9xdWV1ZWQgPCBUQVBFQkxPQ0tfTUlOX1JFUVVFVUUKIAkpIHsKKwkJcmVxID0gYmxrX2ZldGNoX3JlcXVlc3QocXVldWUpOwogCQlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgewogCQkJREJGX0VWRU5UKDEsICJUQkxPQ0s6IFJlamVjdGluZyB3cml0ZSByZXF1ZXN0XG4iKTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlLT5ibGtfZGF0YS5yZXF1ZXN0X3F1ZXVlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggMmVlMDkzZS4uMjQ5MGI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0xMjUwLDggKzEyNTAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOwogCi0JY2RldiA9IHNjaF9nZXRfY2RldihzY2gpOwotCWlmIChjZGV2KSB7CisJaWYgKGNpb19pc19jb25zb2xlKHNjaC0+c2NoaWQpKSB7CiAJCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzY2gtPmRldi5rb2JqLAogCQkJCQkmaW9fc3ViY2hhbm5lbF9hdHRyX2dyb3VwKTsKIAkJaWYgKHJjKQpAQCAtMTI2MCwxMyArMTI1OSwxMyBAQAogCQkJCSAgICAgICIwLiV4LiUwNHggKHJjPSVkKVxuIiwKIAkJCQkgICAgICBzY2gtPnNjaGlkLnNzaWQsIHNjaC0+c2NoaWQuc2NoX25vLCByYyk7CiAJCS8qCi0JCSAqIFRoaXMgc3ViY2hhbm5lbCBhbHJlYWR5IGhhcyBhbiBhc3NvY2lhdGVkIGNjd19kZXZpY2UuCisJCSAqIFRoZSBjb25zb2xlIHN1YmNoYW5uZWwgYWxyZWFkeSBoYXMgYW4gYXNzb2NpYXRlZCBjY3dfZGV2aWNlLgogCQkgKiBUaHJvdyB0aGUgZGVsYXllZCB1ZXZlbnQgZm9yIHRoZSBzdWJjaGFubmVsLCByZWdpc3RlcgotCQkgKiB0aGUgY2N3X2RldmljZSBhbmQgZXhpdC4gVGhpcyBoYXBwZW5zIGZvciBhbGwgZWFybHkKLQkJICogZGV2aWNlcywgZS5nLiB0aGUgY29uc29sZS4KKwkJICogdGhlIGNjd19kZXZpY2UgYW5kIGV4aXQuCiAJCSAqLwogCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOworCQljZGV2ID0gc2NoX2dldF9jZGV2KHNjaCk7CiAJCWNkZXYtPmRldi5ncm91cHMgPSBjY3dkZXZfYXR0cl9ncm91cHM7CiAJCWRldmljZV9pbml0aWFsaXplKCZjZGV2LT5kZXYpOwogCQljY3dfZGV2aWNlX3JlZ2lzdGVyKGNkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCmluZGV4IDEwMjAwMGQuLjMwMTIzNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKQEAgLTE1OCw3ICsxNTgsMTIgQEAKIAkJc21zZ19wYXRoLT5mbGFncyA9IDA7CiAJCXJjID0gaXVjdl9wYXRoX2Nvbm5lY3Qoc21zZ19wYXRoLCAmc21zZ19oYW5kbGVyLCAiKk1TRyAgICAiLAogCQkJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJpdWN2X3BhdGhfY29ubmVjdCByZXR1cm5lZCB3aXRoIHJjICVpXG4iLCByYyk7CisjaWZkZWYgQ09ORklHX1BNX0RFQlVHCisJCWlmIChyYykKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJpdWN2X3BhdGhfY29ubmVjdCByZXR1cm5lZCB3aXRoIHJjICVpXG4iLCByYyk7CisjZW5kaWYKKwkJY3BjbWQoIlNFVCBTTVNHIElVQ1YiLCBOVUxMLCAwLCBOVUxMKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwppbmRleCAwZjc5ZjNhLi4yODg5ZTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKQEAgLTEyOCwxMiArMTI4LDEzIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgemZjcF9pbml0X2RldmljZV9zZXR1cChjaGFyICpkZXZzdHIpCiB7CiAJY2hhciAqdG9rZW47Ci0JY2hhciAqc3RyOworCWNoYXIgKnN0ciwgKnN0cl9zYXZlZDsKIAljaGFyIGJ1c2lkW1pGQ1BfQlVTX0lEX1NJWkVdOwogCXU2NCB3d3BuLCBsdW47CiAKIAkvKiBkdXBsaWNhdGUgZGV2c3RyIGFuZCBrZWVwIHRoZSBvcmlnaW5hbCBmb3Igc3lzZnMgcHJlc2VudGF0aW9uKi8KLQlzdHIgPSBrbWFsbG9jKHN0cmxlbihkZXZzdHIpICsgMSwgR0ZQX0tFUk5FTCk7CisJc3RyX3NhdmVkID0ga21hbGxvYyhzdHJsZW4oZGV2c3RyKSArIDEsIEdGUF9LRVJORUwpOworCXN0ciA9IHN0cl9zYXZlZDsKIAlpZiAoIXN0cikKIAkJcmV0dXJuOwogCkBAIC0xNTIsMTIgKzE1MywxMiBAQAogCWlmICghdG9rZW4gfHwgc3RyaWN0X3N0cnRvdWxsKHRva2VuLCAwLCAodW5zaWduZWQgbG9uZyBsb25nICopICZsdW4pKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlrZnJlZShzdHIpOworCWtmcmVlKHN0cl9zYXZlZCk7CiAJemZjcF9pbml0X2RldmljZV9jb25maWd1cmUoYnVzaWQsIHd3cG4sIGx1bik7CiAJcmV0dXJuOwogCi0gZXJyX291dDoKLQlrZnJlZShzdHIpOworZXJyX291dDoKKwlrZnJlZShzdHJfc2F2ZWQpOwogCXByX2VycigiJXMgaXMgbm90IGEgdmFsaWQgU0NTSSBkZXZpY2VcbiIsIGRldnN0cik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCmluZGV4IDczZDM2NmIuLmY3M2UyMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwpAQCAtODU4LDEwICs4NTgsNyBAQAogCQlpZiAoZmNfaG9zdF9wb3J0X3R5cGUoYWRhcHRlci0+c2NzaV9ob3N0KSA9PSBGQ19QT1JUVFlQRV9QVFApCiAJCQlyZXR1cm4gemZjcF9lcnBfb3Blbl9wdHBfcG9ydChhY3QpOwogCQlpZiAoIXBvcnQtPmRfaWQpIHsKLQkJCXpmY3BfcG9ydF9nZXQocG9ydCk7Ci0JCQlpZiAoIXF1ZXVlX3dvcmsoYWRhcHRlci0+d29ya19xdWV1ZSwKLQkJCQkJJnBvcnQtPmdpZF9wbl93b3JrKSkKLQkJCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOworCQkJemZjcF9mY190cmlnZ2VyX2RpZF9sb29rdXAocG9ydCk7CiAJCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKIAkJfQogCQlyZXR1cm4gemZjcF9lcnBfcG9ydF9zdHJhdGVneV9vcGVuX3BvcnQoYWN0KTsKQEAgLTg2OSwxMiArODY2LDExIEBACiAJY2FzZSBaRkNQX0VSUF9TVEVQX1BPUlRfT1BFTklORzoKIAkJLyogRF9JRCBtaWdodCBoYXZlIGNoYW5nZWQgZHVyaW5nIG9wZW4gKi8KIAkJaWYgKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pIHsKLQkJCWlmIChwb3J0LT5kX2lkKQotCQkJCXJldHVybiBaRkNQX0VSUF9TVUNDRUVERUQ7Ci0JCQllbHNlIHsKLQkJCQlhY3QtPnN0ZXAgPSBaRkNQX0VSUF9TVEVQX1BPUlRfQ0xPU0lORzsKLQkJCQlyZXR1cm4gWkZDUF9FUlBfQ09OVElOVUVTOworCQkJaWYgKCFwb3J0LT5kX2lkKSB7CisJCQkJemZjcF9mY190cmlnZ2VyX2RpZF9sb29rdXAocG9ydCk7CisJCQkJcmV0dXJuIFpGQ1BfRVJQX0VYSVQ7CiAJCQl9CisJCQlyZXR1cm4gWkZDUF9FUlBfU1VDQ0VFREVEOwogCQl9CiAJCWlmIChwb3J0LT5kX2lkICYmICEocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fTk9FU0MpKSB7CiAJCQlwb3J0LT5kX2lkID0gMDsKQEAgLTg4OSwxOSArODg1LDIxIEBACiBzdGF0aWMgaW50IHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3koc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKIHsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gZXJwX2FjdGlvbi0+cG9ydDsKKwlpbnQgcF9zdGF0dXMgPSBhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKTsKIAotCWlmIChhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9OT0VTQykKKwlpZiAoKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX05PRVNDKSAmJgorCSAgICAhKHBfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pKQogCQlnb3RvIGNsb3NlX2luaXRfZG9uZTsKIAogCXN3aXRjaCAoZXJwX2FjdGlvbi0+c3RlcCkgewogCWNhc2UgWkZDUF9FUlBfU1RFUF9VTklOSVRJQUxJWkVEOgogCQl6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X2NsZWFyc3RhdGkocG9ydCk7Ci0JCWlmIChhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQorCQlpZiAocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikKIAkJCXJldHVybiB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X2Nsb3NlKGVycF9hY3Rpb24pOwogCQlicmVhazsKIAogCWNhc2UgWkZDUF9FUlBfU1RFUF9QT1JUX0NMT1NJTkc6Ci0JCWlmIChhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQorCQlpZiAocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikKIAkJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCmluZGV4IDYyOWVkZWMuLmIzZjI4ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaApAQCAtOTYsNiArOTYsNyBAQAogZXh0ZXJuIHZvaWQgX3pmY3BfZmNfc2Nhbl9wb3J0c19sYXRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX2luY29taW5nX2VscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19wb3J0X2RpZF9sb29rdXAoc3RydWN0IHdvcmtfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgemZjcF9mY190cmlnZ2VyX2RpZF9sb29rdXAoc3RydWN0IHpmY3BfcG9ydCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfcGxvZ2lfZXZhbHVhdGUoc3RydWN0IHpmY3BfcG9ydCAqLCBzdHJ1Y3QgZnNmX3Bsb2dpICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY190ZXN0X2xpbmsoc3RydWN0IHpmY3BfcG9ydCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfbGlua190ZXN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCmluZGV4IDcyMmYyMmQuLmRmMjNiY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKQEAgLTM2MSw2ICszNjEsMTcgQEAKIH0KIAogLyoqCisgKiB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cCAtIHRyaWdnZXIgdGhlIGRfaWQgbG9va3VwIHVzaW5nIGEgR0lEX1BOIHJlcXVlc3QKKyAqIEBwb3J0OiBUaGUgemZjcF9wb3J0IHRvIGxvb2t1cCB0aGUgZF9pZCBmb3IuCisgKi8KK3ZvaWQgemZjcF9mY190cmlnZ2VyX2RpZF9sb29rdXAoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKK3sKKwl6ZmNwX3BvcnRfZ2V0KHBvcnQpOworCWlmICghcXVldWVfd29yayhwb3J0LT5hZGFwdGVyLT53b3JrX3F1ZXVlLCAmcG9ydC0+Z2lkX3BuX3dvcmspKQorCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOworfQorCisvKioKICAqIHpmY3BfZmNfcGxvZ2lfZXZhbHVhdGUgLSBldmFsdWF0ZSBQTE9HSSBwbGF5bG9hZAogICogQHBvcnQ6IHpmY3BfcG9ydCBzdHJ1Y3R1cmUKICAqIEBwbG9naTogcGxvZ2kgcGF5bG9hZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggMzhhN2U0YS4uNGU0MWJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCS8qIGNvbW1vbiBzZXR0aW5ncyBmb3IgY3QvZ3MgYW5kIGVscyByZXF1ZXN0cyAqLwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuc2VydmljZV9jbGFzcyA9IEZTRl9DTEFTU18zOwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQudGltZW91dCA9IDIgKiBSX0FfVE9WOwotCXpmY3BfZnNmX3N0YXJ0X3RpbWVyKHJlcSwgMiAqIFJfQV9UT1YgKyAxMCk7CisJemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCAoMiAqIFJfQV9UT1YgKyAxMCkgKiBIWik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NzUsOSArMTQ3NSwxNiBAQAogCQlwbG9naSA9IChzdHJ1Y3QgZnNmX3Bsb2dpICopIHJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuZWxzOwogCQlpZiAocmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5lbHMxX2xlbmd0aCA+PQogCQkgICAgRlNGX1BMT0dJX01JTl9MRU4pIHsKLQkJCWlmIChwbG9naS0+c2Vydl9wYXJhbS53d3BuICE9IHBvcnQtPnd3cG4pCisJCQlpZiAocGxvZ2ktPnNlcnZfcGFyYW0ud3dwbiAhPSBwb3J0LT53d3BuKSB7CiAJCQkJcG9ydC0+ZF9pZCA9IDA7Ci0JCQllbHNlIHsKKwkJCQlkZXZfd2FybigmcG9ydC0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAorCQkJCQkgIkEgcG9ydCBvcGVuZWQgd2l0aCBXV1BOIDB4JTAxNkx4ICIKKwkJCQkJICJyZXR1cm5lZCBkYXRhIHRoYXQgaWRlbnRpZmllcyBpdCBhcyAiCisJCQkJCSAiV1dQTiAweCUwMTZMeFxuIiwKKwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIHBvcnQtPnd3cG4sCisJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQkgIHBsb2dpLT5zZXJ2X3BhcmFtLnd3cG4pOworCQkJfSBlbHNlIHsKIAkJCQlwb3J0LT53d25uID0gcGxvZ2ktPnNlcnZfcGFyYW0ud3dubjsKIAkJCQl6ZmNwX2ZjX3Bsb2dpX2V2YWx1YXRlKHBvcnQsIHBsb2dpKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwppbmRleCAwNzlhOGNmLi5kMzEwMDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCkBAIC0yMjQsNiArMjI0LDcgQEAKIAogCXpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIDAsICJzeXVhc18xIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdCh1bml0LT5wb3J0LT5hZGFwdGVyKTsKKwlmbHVzaF93b3JrKCZ1bml0LT5zY3NpX3dvcmspOwogCXpmY3BfdW5pdF9wdXQodW5pdCk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCmluZGV4IGI2YWY2M2MuLjQ5Njc2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKKysrIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwpAQCAtMTkxOCw2ICsxOTE4LDEwIEBACiAJCX0KIAkJc2l6ZSA9IHNpemU+PjE2OwogCQlzaXplICo9IDQ7CisJCWlmIChzaXplID4gTUFYX01FU1NBR0VfU0laRSkgeworCQkJcmNvZGUgPSAtRUlOVkFMOworCQkJZ290byBjbGVhbnVwOworCQl9CiAJCS8qIENvcHkgaW4gdGhlIHVzZXIncyBJMk8gY29tbWFuZCAqLwogCQlpZiAoY29weV9mcm9tX3VzZXIgKG1zZywgdXNlcl9tc2csIHNpemUpKSB7CiAJCQlyY29kZSA9IC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggYzQ0NzgzOC4uMDU0N2E3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtMzE3LDYgKzMxNyw3IEBACiBvdXRfZGV2aWNlX2Rlc3Ryb3k6CiAJc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfREVMKTsKIAl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2Rldik7CiAJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogb3V0OgogCWlmIChkaXNwbGF5X2ZhaWx1cmVfbXNnKQpAQCAtOTU3LDYgKzk1OCw3IEBACiAJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KQogCQlzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveShzZGV2KTsKIAl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2Rldik7CiAJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCBmZGU1NDUzLi41YzdlYjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTg2NCwxMCArODY0LDYgQEAKIAkJZ290byBjbGVhbl9kZXZpY2U7CiAJfQogCi0JLyogdGFrZSBhIHJlZmVyZW5jZSBmb3IgdGhlIHNkZXZfZGV2OyB0aGlzIGlzCi0JICogcmVsZWFzZWQgYnkgdGhlIHNkZXZfY2xhc3MgLnJlbGVhc2UgKi8KLQlnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7Ci0KIAkvKiBjcmVhdGUgcXVldWUgZmlsZXMsIHdoaWNoIG1heSBiZSB3cml0YWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBob3N0ICovCiAJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5jaGFuZ2VfcXVldWVfZGVwdGgpCiAJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwgJnNkZXZfYXR0cl9xdWV1ZV9kZXB0aF9ydyk7CkBAIC05MTcsNiArOTEzLDcgQEAKIAogCWRldmljZV9kZWwoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2Rldik7CiAJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCiAJcmV0dXJuIGVycm9yOwpAQCAtMTA2NSw3ICsxMDYyLDcgQEAKIAkJICAgICBzZGV2LT5ob3N0LT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwgc2Rldi0+bHVuKTsKIAogCWRldmljZV9pbml0aWFsaXplKCZzZGV2LT5zZGV2X2Rldik7Ci0Jc2Rldi0+c2Rldl9kZXYucGFyZW50ID0gJnNkZXYtPnNkZXZfZ2VuZGV2OworCXNkZXYtPnNkZXZfZGV2LnBhcmVudCA9IGdldF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAlzZGV2LT5zZGV2X2Rldi5jbGFzcyA9ICZzZGV2X2NsYXNzOwogCWRldl9zZXRfbmFtZSgmc2Rldi0+c2Rldl9kZXYsICIlZDolZDolZDolZCIsCiAJCSAgICAgc2Rldi0+aG9zdC0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1bik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwppbmRleCBlNzEwOGU3Li40MmU4NTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKQEAgLTE1NjEsMTEgKzE1NjEsMTYgQEAKIAlwYm5fZXhhcl9YUjE3QzE1MiwKIAlwYm5fZXhhcl9YUjE3QzE1NCwKIAlwYm5fZXhhcl9YUjE3QzE1OCwKKwlwYm5fZXhhcl9pYm1fc2F0dXJuLAogCXBibl9wYXNlbWlfMTY4Mk0sCiAJcGJuX25pODQzMF8yLAogCXBibl9uaTg0MzBfNCwKIAlwYm5fbmk4NDMwXzgsCiAJcGJuX25pODQzMF8xNiwKKwlwYm5fQURESURBVEFfUENJZV8xXzM5MDYyNTAsCisJcGJuX0FERElEQVRBX1BDSWVfMl8zOTA2MjUwLAorCXBibl9BRERJREFUQV9QQ0llXzRfMzkwNjI1MCwKKwlwYm5fQURESURBVEFfUENJZV84XzM5MDYyNTAsCiB9OwogCiAvKgpAQCAtMjE0Niw2ICsyMTUxLDEzIEBACiAJCS5iYXNlX2JhdWQJPSA5MjE2MDAsCiAJCS51YXJ0X29mZnNldAk9IDB4MjAwLAogCX0sCisJW3Bibl9leGFyX2libV9zYXR1cm5dID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSAxLAorCQkuYmFzZV9iYXVkCT0gOTIxNjAwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwl9LAorCiAJLyoKIAkgKiBQQSBTZW1pIFBXUmZpY2llbnQgUEE2VC0xNjgyTSBvbi1jaGlwIFVBUlQKIAkgKi8KQEAgLTIxODUsNiArMjE5NywzNyBAQAogCQkudWFydF9vZmZzZXQJPSAweDEwLAogCQkuZmlyc3Rfb2Zmc2V0CT0gMHg4MDAsCiAJfSwKKwkvKgorCSAqIEFEREktREFUQSBHbWJIIFBDSS1FeHByZXNzIGNvbW11bmljYXRpb24gY2FyZHMgPGluZm9AYWRkaS1kYXRhLmNvbT4KKwkgKi8KKwlbcGJuX0FERElEQVRBX1BDSWVfMV8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gMSwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisJW3Bibl9BRERJREFUQV9QQ0llXzJfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDIsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAorCVtwYm5fQURESURBVEFfUENJZV80XzM5MDYyNTBdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSA0LAorCQkuYmFzZV9iYXVkCT0gMzkwNjI1MCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJCS5maXJzdF9vZmZzZXQJPSAweDEwMDAsCisJfSwKKwlbcGJuX0FERElEQVRBX1BDSWVfOF8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gOCwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc29mdG1vZGVtX2JsYWNrbGlzdFtdID0gewpAQCAtMjY0OSw2ICsyNjkyLDkgQEAKIAkJUENJX1NVQlZFTkRPUl9JRF9DT05ORUNUX1RFQ0gsCiAJCVBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzhfNDg1LCAwLCAwLAogCQlwYm5fYjBfOF8xODQzMjAwXzIwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9FWEFSLCBQQ0lfREVWSUNFX0lEX0VYQVJfWFIxN0MxNTIsCisJCVBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfU1VCREVWSUNFX0lEX0lCTV9TQVRVUk5fU0VSSUFMX09ORV9QT1JULAorCQkwLCAwLCBwYm5fZXhhcl9pYm1fc2F0dXJuIH0sCiAKIAl7CVBDSV9WRU5ET1JfSURfU0VBTEVWRUwsIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfVTUzMCwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKQEAgLTM1NTYsNiArMzYwMiwzOCBAQAogCQkwLAogCQlwYm5fYjBfOF8xMTUyMDAgfSwKIAorCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc1MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzRfMzkwNjI1MCB9LAorCisJewlQQ0lfVkVORE9SX0lEX0FERElEQVRBLAorCQlQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzQyMCwKKwkJUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwKKwkJMCwKKwkJMCwKKwkJcGJuX0FERElEQVRBX1BDSWVfMl8zOTA2MjUwIH0sCisKKwl7CVBDSV9WRU5ET1JfSURfQURESURBVEEsCisJCVBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3MzAwLAorCQlQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELAorCQkwLAorCQkwLAorCQlwYm5fQURESURBVEFfUENJZV8xXzM5MDYyNTAgfSwKKworCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc4MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzhfMzkwNjI1MCB9LAorCiAJewlQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSwKIAkJUENJX1ZFTkRPUl9JRF9JQk0sIDB4MDI5OSwKIAkJMCwgMCwgcGJuX2IwX2J0XzJfMTE1MjAwIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCmluZGV4IDM1NTFjNWMuLjlkOTQ4YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCkBAIC0xNTMxLDcgKzE1MzEsNyBAQAogCXZvaWQgKmRhdGE7CiAJaW50IHJldDsKIAotCUJVSUxEX0JVR19PTighaXNfcG93ZXJfb2ZfMihBVE1FTF9TRVJJQUxfUklOR1NJWkUpKTsKKwlCVUlMRF9CVUdfT04oQVRNRUxfU0VSSUFMX1JJTkdTSVpFICYgKEFUTUVMX1NFUklBTF9SSU5HU0laRSAtIDEpKTsKIAogCXBvcnQgPSAmYXRtZWxfcG9ydHNbcGRldi0+aWRdOwogCXBvcnQtPmJhY2t1cF9pbXIgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCBkN2JjZDA3Li43Y2U5ZTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtNzA1LDcgKzcwNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKChzZXItPmlycSAhPSBwb3J0LT5pcnEpIHx8Ci0JICAgIChzZXItPmlvX3R5cGUgIT0gU0VSSUFMX0lPX01FTSkgfHwKKwkgICAgKHNlci0+aW9fdHlwZSAhPSBVUElPX01FTSkgfHwKIAkgICAgKHNlci0+YmF1ZF9iYXNlICE9IHBvcnQtPnVhcnRjbGspICB8fAogCSAgICAoc2VyLT5pb21lbV9iYXNlICE9ICh2b2lkICopcG9ydC0+bWFwYmFzZSkgfHwKIAkgICAgKHNlci0+aHViNiAhPSAwKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IDE2ODliZGEuLmRjYzcyNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtMTI3MCw2ICsxMjcwLDkgQEAKIAogCUJVR19PTigha2VybmVsX2xvY2tlZCgpKTsKIAorCWlmICghc3RhdGUpCisJCXJldHVybjsKKwogCXVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAlwb3J0ID0gJnN0YXRlLT5wb3J0OwogCkBAIC0xMzE2LDkgKzEzMTksOSBAQAogCSAqLwogCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ1cG9ydC0+bG9jaywgZmxhZ3MpOwogCQl1cG9ydC0+b3BzLT5zdG9wX3J4KHVwb3J0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cG9ydC0+bG9jaywgZmxhZ3MpOwogCQkvKgogCQkgKiBCZWZvcmUgd2UgZHJvcCBEVFIsIG1ha2Ugc3VyZSB0aGUgVUFSVCB0cmFuc21pdHRlcgogCQkgKiBoYXMgY29tcGxldGVseSBkcmFpbmVkOyB0aGlzIGlzIGVzcGVjaWFsbHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwppbmRleCA5NThhM2ZmLi5mZjViYmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKKysrIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCkBAIC0xODI2LDcgKzE4MjYsNyBAQAogCQkgKiBTVCBNaWNybyBkZXJpdmF0aXZlLCB0aGlzIGhhcyAzMmJpdCB3aWRlCiAJCSAqIGFuZCAzMiBsb2NhdGlvbnMgZGVlcCBUWC9SWCBGSUZPCiAJCSAqLwotCQkuaWQJPSAweDAwMTA4MDIyLAorCQkuaWQJPSAweDAxMDgwMDIyLAogCQkubWFzawk9IDB4ZmZmZmZmZmYsCiAJCS5kYXRhCT0gJnZlbmRvcl9zdCwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCA3ZGYzYmE0Li5kMjFiMzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtOTMsOCArOTMsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9iM2RmZy9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9waGlzb24vS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCA3NDc1NzExLi44Y2JmMWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC0yOSw3ICsyOSw2IEBACiBvYmotJChDT05GSUdfQU5EUk9JRCkJCSs9IGRyZWFtLwogb2JqLSQoQ09ORklHX0RTVCkJCSs9IGRzdC8KIG9iai0kKENPTkZJR19QT0hNRUxGUykJCSs9IHBvaG1lbGZzLwotb2JqLSQoQ09ORklHX1NUTEM0NVhYKQkJKz0gc3RsYzQ1eHgvCiBvYmotJChDT05GSUdfQjNERkcpCQkrPSBiM2RmZy8KIG9iai0kKENPTkZJR19JREVfUEhJU09OKQkrPSBwaGlzb24vCiBvYmotJChDT05GSUdfUExBTjlBVVRIKQkJKz0gcDlhdXRoLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcKaW5kZXggMjQ3MTk0OS4uZWI2NzU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCiBjb25maWcgQU5EUk9JRAogCWJvb2wgIkFuZHJvaWQgRHJpdmVycyIKKwlkZXBlbmRzIG9uIEJST0tFTgogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB2YXJpb3VzIGRyaXZlcnMgbmVlZGVkIG9uIHRoZSBBbmRyb2lkIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCmluZGV4IDk0YzVkMjcuLmNkYTI2YmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGIzZGZnX25idWYgPSAyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKaW5kZXggMmNkYTdhZC4uODBlMTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYwpAQCAtNTEsNiArNTEsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAKICNpbmNsdWRlICJjb21lZGlfcGNpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwppbmRleCBlM2ZmYjA2Li43NTNlZTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKQEAgLTYyLDYgKzYyLDcgQEAKIC8qICNkZWZpbmUgREVCVUdfU1RBVFVTX0IgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiODI1NS5oIgogI2luY2x1ZGUgIm1pdGUuaCIKICNpbmNsdWRlICJjb21lZGlfZmMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwppbmRleCA1MmIyZWNhLi5kNTQ0Njk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCkBAIC03MCw2ICs3MCw3IEBACiAvKiAjZGVmaW5lIERFQlVHX0ZMQUdTICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgogCiAjaW5jbHVkZSAibWl0ZS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKaW5kZXggNjI5NGQzOC4uMmMzZDY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogZXh0ZXJuIGlubGluZSB2b2lkIGFkZF8xMGJpdCh1MzIgKnYsIGludCBuKQogewotCSp2ID0gSU5ERVgxMCgqdiArIG4pOworCSp2ID0gSU5ERVgxMCgqdiArIG4pIHwgKCp2ICYgRVRfRE1BMTBfV1JBUCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwppbmRleCA4ZjJlOTFmLi4xMGUyMWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKQEAgLTExNzcsMTIgKzExNzcsMjAgQEAKIAogc3RhdGljIGlubGluZSB1MzIgYnVtcF9mYnIodTMyICpmYnIsIHUzMiBsaW1pdCkKIHsKLQl1MzIgdiA9ICpmYnI7Ci0JYWRkXzEwYml0KCZ2LCAxKTsKLQlpZiAodiA+IGxpbWl0KQotCQl2ID0gKCpmYnIgJiB+RVRfRE1BMTBfTUFTSykgXiBFVF9ETUExMF9XUkFQOwotCSpmYnIgPSB2OwotCXJldHVybiB2OworICAgICAgICB1MzIgdiA9ICpmYnI7CisgICAgICAgIHYrKzsKKyAgICAgICAgLyogVGhpcyB3b3JrcyBmb3IgYWxsIGNhc2VzIHdoZXJlIGxpbWl0IDwgMTAyNC4gVGhlIDEwMjMgY2FzZQorICAgICAgICAgICB3b3JrcyBiZWNhdXNlIDEwMjMrKyBpcyAxMDI0IHdoaWNoIG1lYW5zIHRoZSBpZiBjb25kaXRpb24gaXMgbm90CisgICAgICAgICAgIHRha2VuIGJ1dCB0aGUgY2Fycnkgb2YgdGhlIGJpdCBpbnRvIHRoZSB3cmFwIGJpdCB0b2dnbGVzIHRoZSB3cmFwCisgICAgICAgICAgIHZhbHVlIGNvcnJlY3RseSAqLworICAgICAgICBpZiAoKHYgJiBFVF9ETUExMF9NQVNLKSA+IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgdiAmPSB+RVRfRE1BMTBfTUFTSzsKKyAgICAgICAgICAgICAgICB2IF49IEVUX0RNQTEwX1dSQVA7CisgICAgICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSAxMDIzIGNhc2UgKi8KKyAgICAgICAgdiAmPSAoRVRfRE1BMTBfTUFTS3xFVF9ETUExMF9XUkFQKTsKKyAgICAgICAgKmZiciA9IHY7CisgICAgICAgIHJldHVybiB2OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9DaGFubmVsTWdtdC5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKaW5kZXggYTgzOWQ4Zi4uZmE5NzNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgX0NIQU5ORUxfTUdNVF9IXwogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSAiUmluZ0J1ZmZlci5oIgogI2luY2x1ZGUgIlZtYnVzQ2hhbm5lbEludGVyZmFjZS5oIgogI2luY2x1ZGUgIlZtYnVzUGFja2V0Rm9ybWF0LmgiCkBAIC01NCw3ICs1NSw3IEBACiAJQ2hhbm5lbE1lc3NhZ2VWaWV3UmFuZ2VSZW1vdmUJCT0gMTgsCiAjZW5kaWYKIAlDaGFubmVsTWVzc2FnZUNvdW50Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgewogCWVudW0gdm1idXNfY2hhbm5lbF9tZXNzYWdlX3R5cGUgTWVzc2FnZVR5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMKaW5kZXggMTYxMGI4NC4uZDM4NGMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L05ldFZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssIGZsYWdzKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJm5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QpKSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0LCAmbGlzdEhlYWQpOworCQlsaXN0X21vdmVfdGFpbChuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0Lm5leHQsICZsaXN0SGVhZCk7CiAJCWlmICgrK2NvdW50ID09IHZteGZlcnBhZ2VQYWNrZXQtPlJhbmdlQ291bnQgKyAxKQogCQkJYnJlYWs7CiAJfQpAQCAtMTA3MSw3ICsxMDcxLDcgQEAKIAkJLyogUmV0dXJuIGl0IHRvIHRoZSBmcmVlbGlzdCAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssIGZsYWdzKTsKIAkJZm9yIChpID0gY291bnQ7IGkgIT0gMDsgaS0tKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCgmbGlzdEhlYWQsCisJCQlsaXN0X21vdmVfdGFpbChsaXN0SGVhZC5uZXh0LAogCQkJCSAgICAgICAmbmV0RGV2aWNlLT5SZWNlaXZlUGFja2V0TGlzdCk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssCkBAIC0xMDg1LDggKzEwODUsNyBAQAogCX0KIAogCS8qIFJlbW92ZSB0aGUgMXN0IHBhY2tldCB0byByZXByZXNlbnQgdGhlIHhmZXIgcGFnZSBwYWNrZXQgaXRzZWxmICovCi0JeGZlcnBhZ2VQYWNrZXQgPSBsaXN0X2VudHJ5KCZsaXN0SGVhZCwgc3RydWN0IHhmZXJwYWdlX3BhY2tldCwKLQkJCQkgICAgTGlzdEVudHJ5KTsKKwl4ZmVycGFnZVBhY2tldCA9IChzdHJ1Y3QgeGZlcnBhZ2VfcGFja2V0KilsaXN0SGVhZC5uZXh0OwogCWxpc3RfZGVsKCZ4ZmVycGFnZVBhY2tldC0+TGlzdEVudHJ5KTsKIAogCS8qIFRoaXMgaXMgaG93IG11Y2ggd2UgY2FuIHNhdGlzZnkgKi8KQEAgLTExMDIsOCArMTEwMSw3IEBACiAKIAkvKiBFYWNoIHJhbmdlIHJlcHJlc2VudHMgMSBSTkRJUyBwa3QgdGhhdCBjb250YWlucyAxIGV0aGVybmV0IGZyYW1lICovCiAJZm9yIChpID0gMDsgaSA8IChjb3VudCAtIDEpOyBpKyspIHsKLQkJbmV0dnNjUGFja2V0ID0gbGlzdF9lbnRyeSgmbGlzdEhlYWQsIHN0cnVjdCBodl9uZXR2c2NfcGFja2V0LAotCQkJCQkgIExpc3RFbnRyeSk7CisJCW5ldHZzY1BhY2tldCA9IChzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCopbGlzdEhlYWQubmV4dDsKIAkJbGlzdF9kZWwoJm5ldHZzY1BhY2tldC0+TGlzdEVudHJ5KTsKIAogCQkvKiBJbml0aWFsaXplIHRoZSBuZXR2c2MgcGFja2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCmluZGV4IDRkMzkwYjIuLmRiZmJkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCkBAIC0xLDExICsxLDE3IEBACiBUT0RPOgogCS0gZml4IHJlbWFpbmluZyBjaGVja3BhdGNoIHdhcm5pbmdzIGFuZCBlcnJvcnMKKwktIHVzZSBvZiAvKiogd2hlbiBpdCBpcyBub3QgYSBrZXJuZWxkb2MgaGVhZGVyCiAJLSByZW1vdmUgUmluZ0J1ZmZlci5jIHRvIHVzIGluLWtlcm5lbCByaW5nYnVmZmVyIGZ1bmN0aW9ucyBpbnN0ZWFkLgogCS0gYXVkaXQgdGhlIHZtYnVzIHRvIHZlcmlmeSBpdCBpcyB3b3JraW5nIHByb3Blcmx5IHdpdGggdGhlCiAJICBkcml2ZXIgbW9kZWwKKwktIGNvbnZlcnQgdm1idXMgZHJpdmVyIGludGVyZmFjZSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcworICAgICAgICAgIHRvIGNvbnN0YW50LCBhLmsuYSB2bWJ1c19vcHMKIAktIHNlZSBpZiB0aGUgdm1idXMgY2FuIGJlIG1lcmdlZCB3aXRoIHRoZSBvdGhlciB2aXJ0dWFsIGJ1c3NlcwogCSAgaW4gdGhlIGtlcm5lbAogCS0gYXVkaXQgdGhlIG5ldHdvcmsgZHJpdmVyCisJICAtIHVzZSBleGlzdGluZyBuZXRfZGV2aWNlX3N0YXRzIHN0cnVjdCBpbiBuZXR3b3JrIGRldmljZQorCSAgLSBjaGVja2luZyBmb3IgY2FycmllciBpbnNpZGUgb3BlbiBpcyB3cm9uZywgbmV0d29yayBkZXZpY2UgQVBJCisgICAgICAgICAgICBjb25mdXNpb24/PwogCS0gYXVkaXQgdGhlIGJsb2NrIGRyaXZlcgogCS0gYXVkaXQgdGhlIHNjc2kgZHJpdmVyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYwppbmRleCA4ZmU1NDNiLi4zYTQ3OTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaAppbmRleCA5NTA0NjA0Li5jZTA2NGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIF9PU0RfSF8KICNkZWZpbmUgX09TRF9IXwogCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIC8qIERlZmluZXMgKi8KICNkZWZpbmUgQUxJR05fVVAodmFsdWUsIGFsaWduKQkoKCh2YWx1ZSkgJiAoYWxpZ24tMSkpID8JCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYwppbmRleCA1ODIzMThmLi44OTRlZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCkBAIC01MDcsMTIgKzUwNywxMiBAQAogCiAJY2hpbGRfZGV2aWNlX29iaiA9ICZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCWNoaWxkX2RldmljZV9vYmotPmNvbnRleHQgPSBjb250ZXh0OwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlVHlwZSwgJnR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlSW5zdGFuY2UsICZpbnN0YW5jZSwKKwltZW1jcHkoJmNoaWxkX2RldmljZV9vYmotPmRldmljZVR5cGUsIHR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlSW5zdGFuY2UsIGluc3RhbmNlLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKIAotCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+Y2xhc3NfaWQsICZ0eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKLQltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9pZCwgJmluc3RhbmNlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKKwltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmNsYXNzX2lkLCB0eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKKwltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9pZCwgaW5zdGFuY2UsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwogCiAJRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIApAQCAtNTM3LDE4ICs1MzcsNyBAQAogCURQUklOVF9EQkcoVk1CVVNfRFJWLCAiY2hpbGQgZGV2aWNlICglcCkgcmVnaXN0ZXJpbmciLAogCQkgICBjaGlsZF9kZXZpY2VfY3R4KTsKIAotCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlZ2lzdGVyZWQgYWxyZWFkeSAqLwotCWlmIChzdHJsZW4oZGV2X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSkpICE9IDApIHsKLQkJRFBSSU5UX0VSUihWTUJVU19EUlYsCi0JCQkgICAiY2hpbGQgZGV2aWNlICglcCkgYWxyZWFkeSByZWdpc3RlcmVkIC0gYnVzaWQgJXMiLAotCQkJICAgY2hpbGRfZGV2aWNlX2N0eCwKLQkJCSAgIGRldl9uYW1lKCZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2UpKTsKLQotCQlyZXQgPSAtMTsKLQkJZ290byBDbGVhbnVwOwotCX0KLQotCS8qIFNldCB0aGUgZGV2aWNlIGJ1cyBpZC4gT3RoZXJ3aXNlLCBkZXZpY2VfcmVnaXN0ZXIoKXdpbGwgZmFpbC4gKi8KKwkvKiBTZXQgdGhlIGRldmljZSBuYW1lLiBPdGhlcndpc2UsIGRldmljZV9yZWdpc3RlcigpIHdpbGwgZmFpbC4gKi8KIAlkZXZfc2V0X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSwgInZtYnVzXzBfJWQiLAogCQkgICAgIGF0b21pY19pbmNfcmV0dXJuKCZkZXZpY2VfbnVtKSk7CiAKQEAgLTU3Myw3ICs1NjIsNiBAQAogCQlEUFJJTlRfSU5GTyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSByZWdpc3RlcmVkIiwKIAkJCSAgICAmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlKTsKIAotQ2xlYW51cDoKIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCiAJcmV0dXJuIHJldDsKQEAgLTYyMyw4ICs2MTEsNiBAQAogc3RhdGljIGludCB2bWJ1c191ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CiAJc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KGRldmljZSk7Ci0JaW50IGkgPSAwOwotCWludCBsZW4gPSAwOwogCWludCByZXQ7CiAKIAlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKQEAgLTY0NCw4ICs2MzAsNiBAQAogCQkgICAgZGV2aWNlX2N0eC0+Y2xhc3NfaWQuZGF0YVsxNF0sCiAJCSAgICBkZXZpY2VfY3R4LT5jbGFzc19pZC5kYXRhWzE1XSk7CiAKLQllbnYtPmVudnBfaWR4ID0gaTsKLQllbnYtPmJ1ZmxlbiA9IGxlbjsKIAlyZXQgPSBhZGRfdWV2ZW50X3ZhcihlbnYsICJWTUJVU19ERVZJQ0VfQ0xBU1NfR1VJRD17IgogCQkJICAgICAiJTAyeCUwMnglMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0iCiAJCQkgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeH0iLApAQCAtNjkxLDggKzY3NSw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWVudi0+ZW52cFtlbnYtPmVudnBfaWR4XSA9IE5VTEw7Ci0KIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKaW5kZXggMWZhMThmMi4uNzY4ZjQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlICJpaW8uaCIKICNpbmNsdWRlICJ0cmlnZ2VyX2NvbnN1bWVyLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZwppbmRleCBkNTQ5ZDA4Li5mNmNjMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgT1RVUwogCXRyaXN0YXRlICJBdGhlcm9zIE9UVVMgODAyLjExbiBVU0Igd2lyZWxlc3Mgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBXTEFOXzgwMjExICYmIE1BQzgwMjExCisJZGVwZW5kcyBvbiBVU0IgJiYgV0xBTiAmJiBNQUM4MDIxMQogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBBdGhlcm9zIDgwMi4xMW4gVVNCIGhhcmR3YXJlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYwppbmRleCBkZDdkM2ZkLi40Y2UzOTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYwpAQCAtMjA3MSwxMSArMjA3MSwxNSBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGtleXBhZF9lbmFibGVkICYmIGtleXBhZF9pbml0aWFsaXplZCkKKwlpZiAoa2V5cGFkX2VuYWJsZWQgJiYga2V5cGFkX2luaXRpYWxpemVkKSB7CiAJCW1pc2NfZGVyZWdpc3Rlcigma2V5cGFkX2Rldik7CisJCWtleXBhZF9pbml0aWFsaXplZCA9IDA7CisJfQogCi0JaWYgKGxjZF9lbmFibGVkICYmIGxjZF9pbml0aWFsaXplZCkKKwlpZiAobGNkX2VuYWJsZWQgJiYgbGNkX2luaXRpYWxpemVkKSB7CiAJCW1pc2NfZGVyZWdpc3RlcigmbGNkX2Rldik7CisJCWxjZF9pbml0aWFsaXplZCA9IDA7CisJfQogCiAJcGFycG9ydF9yZWxlYXNlKHBwcnQpOwogCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UocHBydCk7CkBAIC0yMjExLDEzICsyMjE1LDE2IEBACiAJCWRlbF90aW1lcigmc2Nhbl90aW1lcik7CiAKIAlpZiAocHBydCAhPSBOVUxMKSB7Ci0JCWlmIChrZXlwYWRfZW5hYmxlZCkKKwkJaWYgKGtleXBhZF9lbmFibGVkKSB7CiAJCQltaXNjX2RlcmVnaXN0ZXIoJmtleXBhZF9kZXYpOworCQkJa2V5cGFkX2luaXRpYWxpemVkID0gMDsKKwkJfQogCiAJCWlmIChsY2RfZW5hYmxlZCkgewogCQkJcGFuZWxfbGNkX3ByaW50KCJceDBjTENEIGRyaXZlciAiIFBBTkVMX1ZFUlNJT04KIAkJCQkJIlxudW5sb2FkZWQuXHgxYltMY1x4MWJbTGJceDFiW0wtIik7CiAJCQltaXNjX2RlcmVnaXN0ZXIoJmxjZF9kZXYpOworCQkJbGNkX2luaXRpYWxpemVkID0gMDsKIAkJfQogCiAJCS8qIFRPRE86IGZyZWUgYWxsIGlucHV0IHNpZ25hbHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guYwppbmRleCAwZDExMWRkLi4yZWI4ZTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcG9jaC9wb2NoLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAicG9jaC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcKaW5kZXggN2Y0NGU1ZS4uZWZlMzhlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBSVDI4NjAKIAl0cmlzdGF0ZSAiUmFsaW5rIDI4NjAgd2lyZWxlc3Mgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBYODYgJiYgV0xBTl84MDIxMQorCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBXTEFOCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIDI4NjAgd2lyZWxlc3MgY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYwppbmRleCBmYjE3MzU1Li44NTdmZjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jCkBAIC0zNjMsNiArMzYzLDggQEAKIAlVTE9ORwkJCVN3SWR4ID0gcEFkLT5NZ210UmluZy5UeENwdUlkeDsKIAogCXBUeEQgID0gKFBUWERfU1RSVUMpIHBBZC0+TWdtdFJpbmcuQ2VsbFtTd0lkeF0uQWxsb2NWYTsKKwlpZiAoIXBUeEQpCisJCXJldHVybiAwOwogCiAJcEFkLT5NZ210UmluZy5DZWxsW1N3SWR4XS5wTmRpc1BhY2tldCA9IHBQYWNrZXQ7CiAJcEFkLT5NZ210UmluZy5DZWxsW1N3SWR4XS5wTmV4dE5kaXNQYWNrZXQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMKaW5kZXggOWQ1ODljMi4uMDE5Y2M0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCiAKIElOVAlTaG93X1NTSURfUHJvYygKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYwppbmRleCBiMzk2YTliLi5lZDI3Yjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgogCiBVTE9ORwlSVERlYnVnTGV2ZWwgPSBSVF9ERUJVR19FUlJPUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZwppbmRleCA3Njg0MWY2Li5hZWE1YzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIFJUMjg3MAogCXRyaXN0YXRlICJSYWxpbmsgMjg3MC8zMDcwIHdpcmVsZXNzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgWDg2ICYmIFdMQU5fODAyMTEKKwlkZXBlbmRzIG9uIFVTQiAmJiBYODYgJiYgV0xBTgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgdGhlIFJhbGluayB4eDcwIHdpcmVsZXNzIGNoaXBzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9LY29uZmlnCmluZGV4IDI1NWU4ZWEuLjJiM2Y3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUlQzMDkwCiAJdHJpc3RhdGUgIlJhbGluayAzMDkwIHdpcmVsZXNzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU5fODAyMTEKKwlkZXBlbmRzIG9uIFBDSSAmJiBYODYgJiYgV0xBTgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgdGhlIFJhbGluayAzMDkwIHdpcmVsZXNzIGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL2NvbW1vbi9jbW1faW5mby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9jb21tb24vY21tX2luZm8uYwppbmRleCA1YmUwNzE0Li4zZTUxZTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL2NvbW1vbi9jbW1faW5mby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvY29tbW9uL2NtbV9pbmZvLmMKQEAgLTM0LDYgKzM0LDcgQEAKICAgICAtLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9ydF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9ydF9saW51eC5jCmluZGV4IGQyMjQxZWMuLjliOTRhYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvcnRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL3J0X2xpbnV4LmMKQEAgLTI1LDYgKzI1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAicnRfY29uZmlnLmgiCiAKIFVMT05HCVJURGVidWdMZXZlbCA9IFJUX0RFQlVHX0VSUk9SOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCmluZGV4IDIzNmU0MjcuLjIwM2M3OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUlRMODE4N1NFCiAJdHJpc3RhdGUgIlJlYWxUZWsgUlRMODE4N1NFIFdpcmVsZXNzIExBTiBOSUMgZHJpdmVyIgotCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgogCWRlcGVuZHMgb24gV0lSRUxFU1NfRVhUCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwppbmRleCAwMTNjM2UxLi40YzVkNjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwpAQCAtNTMsMTAgKzUzLDggQEAKIAogCQlsaXN0X2RlbChwdHIpOwogCi0JCWlmIChlbnRyeS0+b3BzKSB7CisJCWlmIChlbnRyeS0+b3BzKQogCQkJZW50cnktPm9wcy0+ZGVpbml0KGVudHJ5LT5wcml2KTsKLQkJCW1vZHVsZV9wdXQoZW50cnktPm9wcy0+b3duZXIpOwotCQl9CiAJCWtmcmVlKGVudHJ5KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggNmZiZTQ4OS4uMTgzOTJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwpAQCAtMTg5LDEwICsxODksOCBAQAogCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZUzsgaSsrKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQgPSBpZWVlLT5jcnlwdFtpXTsKIAkJaWYgKGNyeXB0KSB7Ci0JCQlpZiAoY3J5cHQtPm9wcykgeworCQkJaWYgKGNyeXB0LT5vcHMpCiAJCQkJY3J5cHQtPm9wcy0+ZGVpbml0KGNyeXB0LT5wcml2KTsKLQkJCQltb2R1bGVfcHV0KGNyeXB0LT5vcHMtPm93bmVyKTsKLQkJCX0KIAkJCWtmcmVlKGNyeXB0KTsKIAkJCWllZWUtPmNyeXB0W2ldID0gTlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggNTliMmFiNC4uMzM0ZTRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC0yODM5LDE2ICsyODM5LDEyIEBACiAJCWdvdG8gc2tpcF9ob3N0X2NyeXB0OwogCiAJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3RraXAiKTsKKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfY2NtcCIpOworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfQogCWlmIChvcHMgPT0gTlVMTCkgewogCQlwcmludGsoInVua25vd24gY3J5cHRvIGFsZyAnJXMnXG4iLCBwYXJhbS0+dS5jcnlwdC5hbGcpOwogCQlwYXJhbS0+dS5jcnlwdC5lcnIgPSBJRUVFX0NSWVBUX0VSUl9VTktOT1dOX0FMRzsKQEAgLTI4NjksNyArMjg2NSw3IEBACiAJCX0KIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IG9wczsKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9CiAJCQkJbmV3X2NyeXB0LT5vcHMtPmluaXQocGFyYW0tPnUuY3J5cHQuaWR4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCA4ZDhiZGQwLi5hMDhiOTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtMzMxLDEyICszMzEsMTAgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJaWYgKCFuZXdfY3J5cHQtPm9wcykgewotCQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwkJaWYgKCFuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJfQogCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPSBuZXdfY3J5cHQtPm9wcy0+aW5pdChrZXkpOwogCiAJCWlmICghbmV3X2NyeXB0LT5vcHMgfHwgIW5ld19jcnlwdC0+cHJpdikgewpAQCAtNDgzLDcgKzQ4MSw3IEBACiAgICAgICAgIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKICAgICAgICAgaW50IGksIGlkeCwgcmV0ID0gMDsKICAgICAgICAgaW50IGdyb3VwX2tleSA9IDA7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmFsZywgKm1vZHVsZTsKKyAgICAgICAgY29uc3QgY2hhciAqYWxnOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0b19vcHMgKm9wczsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQ7CiAKQEAgLTUzOSwxNSArNTM3LDEyIEBACiAgICAgICAgIHN3aXRjaCAoZXh0LT5hbGcpIHsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiV0VQIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X3dlcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgogICAgICAgICAgICAgICAgIGFsZyA9ICJUS0lQIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X3RraXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfQ0NNUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiQ0NNUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF9jY21wIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCkBAIC01NTgsMTAgKzU1Myw4IEBACiAvLwlwcmludGsoIjgtMDktMDgtOT09PT09PiVzLCBhbGcgbmFtZTolc1xuIixfX2Z1bmNfXywgYWxnKTsKIAogCSBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdF9tb2R1bGUobW9kdWxlKTsKKyAgICAgICAgaWYgKG9wcyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICB9CiAgICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBleHQtPmFsZyk7CkBAIC01ODEsNyArNTc0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoaWR4KTsKICAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5wcml2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKG5ld19jcnlwdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnCmluZGV4IDMxMDBhYTUuLjM3ZTRmZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFJUTDgxOTJFCiAJdHJpc3RhdGUgIlJlYWxUZWsgUlRMODE5MkUgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCi0JZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCiAJZGVwZW5kcyBvbiBXSVJFTEVTU19FWFQKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwppbmRleCAxYThlYThhLi5iMWM1NDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTUzLDE0ICs1Myw4IEBACiAKIAkJbGlzdF9kZWwocHRyKTsKIAotCQlpZiAoZW50cnktPm9wcykgeworCQlpZiAoZW50cnktPm9wcykKIAkJCWVudHJ5LT5vcHMtPmRlaW5pdChlbnRyeS0+cHJpdik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCQkJbW9kdWxlX3B1dChlbnRyeS0+b3BzLT5vd25lcik7Ci0jZWxzZQotCQkJX19NT0RfREVDX1VTRV9DT1VOVChlbnRyeS0+b3BzLT5vd25lcik7Ci0jZW5kaWYKLQkJfQogCQlrZnJlZShlbnRyeSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwppbmRleCAxNjI1NmEzLi4xMmMyYTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwpAQCAtMjQyLDE0ICsyNDIsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZUzsgaSsrKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQgPSBpZWVlLT5jcnlwdFtpXTsKIAkJaWYgKGNyeXB0KSB7Ci0JCQlpZiAoY3J5cHQtPm9wcykgeworCQkJaWYgKGNyeXB0LT5vcHMpCiAJCQkJY3J5cHQtPm9wcy0+ZGVpbml0KGNyeXB0LT5wcml2KTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JCQkJbW9kdWxlX3B1dChjcnlwdC0+b3BzLT5vd25lcik7Ci0jZWxzZQotCQkJCV9fTU9EX0RFQ19VU0VfQ09VTlQoY3J5cHQtPm9wcy0+b3duZXIpOwotI2VuZGlmCi0JCQl9CiAJCQlrZnJlZShjcnlwdCk7CiAJCQlpZWVlLT5jcnlwdFtpXSA9IE5VTEw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCAyZmMwNGRmLi5lYWU3YzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC0zMjg0LDE3ICszMjg0LDE0IEBACiAJCWdvdG8gc2tpcF9ob3N0X2NyeXB0OwogCiAJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJXRVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQkJLy9zZXQgV0VQNDAgZmlyc3QsIGl0IHdpbGwgYmUgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIFdFUDEwNCBvciBXRVA0MCBhdCBvdGhlciBwbGFjZQotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfdGtpcCIpOworCQkvKiBzZXQgV0VQNDAgZmlyc3QsIGl0IHdpbGwgYmUgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIFdFUDEwNCBvcgorCQkgKiBXRVA0MCBhdCBvdGhlciBwbGFjZSAqLworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF9jY21wIik7CisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9CiAJaWYgKG9wcyA9PSBOVUxMKSB7CiAJCXByaW50aygidW5rbm93biBjcnlwdG8gYWxnICclcydcbiIsIHBhcmFtLT51LmNyeXB0LmFsZyk7CiAJCXBhcmFtLT51LmNyeXB0LmVyciA9IElFRUVfQ1JZUFRfRVJSX1VOS05PV05fQUxHOwpAQCAtMzMxNSwxMSArMzMxMiw3IEBACiAJCX0KIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IG9wczsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQotI2Vsc2UKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9pbmNfbW9kX2NvdW50KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCi0jZW5kaWYKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0KIAkJCQluZXdfY3J5cHQtPm9wcy0+aW5pdChwYXJhbS0+dS5jcnlwdC5pZHgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCAyMjM0ODMxLi40ZTM0YTFmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC00ODIsMTUgKzQ4Miw5IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCWlmICghbmV3X2NyeXB0LT5vcHMpIHsKLQkJCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJCWlmICghbmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCX0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQotI2Vsc2UKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9pbmNfbW9kX2NvdW50KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCi0jZW5kaWYKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoa2V5KTsKIAogCQlpZiAoIW5ld19jcnlwdC0+b3BzIHx8ICFuZXdfY3J5cHQtPnByaXYpIHsKQEAgLTY0NCw3ICs2MzgsNyBAQAogICAgICAgICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAgICAgICAgIGludCBpLCBpZHg7CiAgICAgICAgIGludCBncm91cF9rZXkgPSAwOwotICAgICAgICBjb25zdCBjaGFyICphbGcsICptb2R1bGU7CisgICAgICAgIGNvbnN0IGNoYXIgKmFsZzsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fb3BzICpvcHM7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0OwogCkBAIC03MTEsMTUgKzcwNSwxMiBAQAogICAgICAgICBzd2l0Y2ggKGV4dC0+YWxnKSB7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIldFUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF93ZXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiVEtJUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF90a2lwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIkNDTVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfY2NtcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLApAQCAtNzMwLDEwICs3MjEsOCBAQAogCXByaW50aygiYWxnIG5hbWU6JXNcbiIsYWxnKTsKIAogCSBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdF9tb2R1bGUobW9kdWxlKTsKKyAgICAgICAgaWYgKG9wcyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICB9CiAgICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBleHQtPmFsZyk7CkBAIC03NTgsNyArNzQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoaWR4KTsKICAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5wcml2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKG5ld19jcnlwdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKaW5kZXggNzcwZjQxMi4uYjhjOTVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBSVEw4MTkyU1UKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTkyU1UgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCi0JZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCiAJZGVwZW5kcyBvbiBXSVJFTEVTU19FWFQKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCmluZGV4IGQ3NmE1NGQuLjUyMWU3YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCkBAIC01MywxMCArNTMsOCBAQAogCiAJCWxpc3RfZGVsKHB0cik7CiAKLQkJaWYgKGVudHJ5LT5vcHMpIHsKKwkJaWYgKGVudHJ5LT5vcHMpCiAJCQllbnRyeS0+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+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYwppbmRleCA3Zjk2YmNhLi4wNTE4NjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCkBAIC0xMzMyLDcgKzEzMzIsNiBAQAogICAgICAgICBmcmVlX25ldGRldihwRGV2aWNlLT5kZXYpOwogICAgIH0KIAotCWtmcmVlKHBEZXZpY2UpOwogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRldmljZV9kaXNjb25uZWN0My4uIFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCmluZGV4IDk0MDQ2MGMuLjEzMjY3MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBXMzVVTkQKIAl0cmlzdGF0ZSAiSVM4OUMzNSBXTEFOIFVTQiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIFVTQiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU4gJiYgVVNCICYmIEVYUEVSSU1FTlRBTAogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgaGlnaGx5IGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIFdpbmJvbmQgV0lGSSBjYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKaW5kZXggOTk1OWI2NS4uZjQ0Mjk0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBSSVNNMl9VU0IKIAl0cmlzdGF0ZSAiUHJpc20yLjUvMyBVU0IgZHJpdmVyIgotCWRlcGVuZHMgb24gV0xBTl84MDIxMSAmJiBVU0IgJiYgV0lSRUxFU1NfRVhUCisJZGVwZW5kcyBvbiBXTEFOICYmIFVTQiAmJiBXSVJFTEVTU19FWFQKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHRoZSB3bGFuLW5nIHByaXNtIDIuNS8zIFVTQiBkcml2ZXIgZm9yIGEgd2lkZSByYW5nZSBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCAzMzM1MTMxLi5hMThlM2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMjIzLDYgKzIyMyw3IEBACiBjb25maWcgVVNCX0dBREdFVF9QWEEyNVgKIAlib29sZWFuICJQWEEgMjV4IG9yIElYUCA0eHgiCiAJZGVwZW5kcyBvbiAoQVJDSF9QWEEgJiYgUFhBMjV4KSB8fCBBUkNIX0lYUDRYWAorCXNlbGVjdCBVU0JfT1RHX1VUSUxTCiAJaGVscAogCSAgIEludGVsJ3MgUFhBIDI1eCBzZXJpZXMgWFNjYWxlIEFSTS01VEUgcHJvY2Vzc29ycyBpbmNsdWRlCiAJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuICBUaGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggZjM3ZGUyOC4uMTY3Y2IyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTYxLDExICs2MSw2IEBACiAgKiBzaW1wbGVyLCBNaWNyb3NvZnQgcHVzaGVzIHRoZWlyIG93biBhcHByb2FjaDogUk5ESVMuICBUaGUgcHVibGlzaGVkCiAgKiBSTkRJUyBzcGVjcyBhcmUgYW1iaWd1b3VzIGFuZCBhcHBlYXIgdG8gYmUgaW5jb21wbGV0ZSwgYW5kIGFyZSBhbHNvCiAgKiBuZWVkbGVzc2x5IGNvbXBsZXguICBUaGV5IGJvcnJvdyBtb3JlIGZyb20gQ0RDIEFDTSB0aGFuIENEQyBFQ00uCi0gKgotICogV2hpbGUgQ0RDIEVDTSwgQ0RDIFN1YnNldCwgYW5kIFJORElTIGFyZSBkZXNpZ25lZCB0byBleHRlbmQgdGhlIGV0aGVybmV0Ci0gKiBpbnRlcmZhY2UgdG8gdGhlIHRhcmdldCwgQ0RDIEVFTSB3YXMgZGVzaWduZWQgdG8gdXNlIGV0aGVybmV0IG92ZXIgdGhlIFVTQgotICogbGluayBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0YXJnZXQuICBDREMgRUVNIGlzIGltcGxlbWVudGVkIGFzIGFuIGFsdGVybmF0aXZlCi0gKiB0byB0aG9zZSBvdGhlciBwcm90b2NvbHMgd2hlbiB0aGF0IGNvbW11bmljYXRpb24gbW9kZWwgaXMgbW9yZSBhcHByb3ByaWF0ZQogICovCiAKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJFdGhlcm5ldCBHYWRnZXQiCkBAIC0xNTcsOCArMTUyLDggQEAKICNkZWZpbmUgUk5ESVNfUFJPRFVDVF9OVU0JMHhhNGEyCS8qIEV0aGVybmV0L1JORElTIEdhZGdldCAqLwogCiAvKiBGb3IgRUVNIGdhZGdldHMgKi8KLSNkZWZpbmUgRUVNX1ZFTkRPUl9OVU0JMHgwNTI1CS8qIElOVkFMSUQgLSBORUVEUyBUTyBCRSBBTExPQ0FURUQgKi8KLSNkZWZpbmUgRUVNX1BST0RVQ1RfTlVNCTB4YTRhMQkvKiBJTlZBTElEIC0gTkVFRFMgVE8gQkUgQUxMT0NBVEVEICovCisjZGVmaW5lIEVFTV9WRU5ET1JfTlVNCQkweDFkNmIJLyogTGludXggRm91bmRhdGlvbiAqLworI2RlZmluZSBFRU1fUFJPRFVDVF9OVU0JCTB4MDEwMgkvKiBFRU0gR2FkZ2V0ICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYwppbmRleCA0MmE3NGI4Li5mYTNkMTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCkBAIC0yMTM5LDcgKzIxMzksNyBAQAogc3RhdGljIHZvaWQgZnNsX3VkY19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAljb21wbGV0ZSh1ZGNfY29udHJvbGxlci0+ZG9uZSk7Ci0JZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCB1ZGNfY29udHJvbGxlci0+ZXBfcWhfc2l6ZSwKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYtPnBhcmVudCwgdWRjX2NvbnRyb2xsZXItPmVwX3FoX3NpemUsCiAJCQl1ZGNfY29udHJvbGxlci0+ZXBfcWgsIHVkY19jb250cm9sbGVyLT5lcF9xaF9kbWEpOwogCWtmcmVlKHVkY19jb250cm9sbGVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKaW5kZXggM2VmYTU5Yi4uYjI1Y2RlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKQEAgLTE0MDAsNiArMTQwMCwxMCBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJcGVyaW9kID0gdXJiLT5pbnRlcnZhbDsKKwlpZiAoIXN0cmVhbS0+aGlnaHNwZWVkKQorCQlwZXJpb2QgPDw9IDM7CisKIAlub3cgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCkgJSBtb2Q7CiAKIAkvKiB3aGVuJ3MgdGhlIGxhc3QgdWZyYW1lIHRoaXMgdXJiIGNvdWxkIHN0YXJ0PyAqLwpAQCAtMTQxNyw4ICsxNDIxLDggQEAKIAogCQkvKiBGZWxsIGJlaGluZCAoYnkgdXAgdG8gdHdpY2UgdGhlIHNsb3AgYW1vdW50KT8gKi8KIAkJaWYgKHN0YXJ0ID49IG1heCAtIDIgKiA4ICogU0NIRURVTEVfU0xPUCkKLQkJCXN0YXJ0ICs9IHN0cmVhbS0+aW50ZXJ2YWwgKiBESVZfUk9VTkRfVVAoCi0JCQkJCW1heCAtIHN0YXJ0LCBzdHJlYW0tPmludGVydmFsKSAtIG1vZDsKKwkJCXN0YXJ0ICs9IHBlcmlvZCAqIERJVl9ST1VORF9VUCgKKwkJCQkJbWF4IC0gc3RhcnQsIHBlcmlvZCkgLSBtb2Q7CiAKIAkJLyogVHJpZWQgdG8gc2NoZWR1bGUgdG9vIGZhciBpbnRvIHRoZSBmdXR1cmU/ICovCiAJCWlmICh1bmxpa2VseSgoc3RhcnQgKyBzY2hlZC0+c3BhbikgPj0gbWF4KSkgewpAQCAtMTQ0MSwxMCArMTQ0NSw2IEBACiAKIAkvKiBOT1RFOiAgYXNzdW1lcyBVUkJfSVNPX0FTQVAsIHRvIGxpbWl0IGNvbXBsZXhpdHkvYnVncyAqLwogCi0JcGVyaW9kID0gdXJiLT5pbnRlcnZhbDsKLQlpZiAoIXN0cmVhbS0+aGlnaHNwZWVkKQotCQlwZXJpb2QgPDw9IDM7Ci0KIAkvKiBmaW5kIGEgdWZyYW1lIHNsb3Qgd2l0aCBlbm91Z2ggYmFuZHdpZHRoICovCiAJZm9yICg7IHN0YXJ0IDwgKHN0cmVhbS0+bmV4dF91ZnJhbWUgKyBwZXJpb2QpOyBzdGFydCsrKSB7CiAJCWludAkJZW5vdWdoX3NwYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKaW5kZXggNzQ5YjUzNy4uZTMzZDM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCkBAIC0xMDAzLDE5ICsxMDAzLDIwIEBACiAJaWYgKHN5c3N0cyA9PSBTRTApIHsKIAkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5BVFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOwogCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBBVFRDSEUsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKLQkJcmV0dXJuOworCX0gZWxzZSB7CisJCWlmIChzeXNzdHMgPT0gRlNfSlNUUykKKwkJCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOworCQllbHNlIGlmIChzeXNzdHMgPT0gTFNfSlNUUykKKwkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOworCisJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+RFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOworCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBEVENIRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOworCisJCWlmIChyOGE2NjU5Ny0+YnVzX3N1c3BlbmRlZCkKKwkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOwogCX0KIAotCWlmIChzeXNzdHMgPT0gRlNfSlNUUykKLQkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgSFNFLCBnZXRfc3lzY2ZnX3JlZyhwb3J0KSk7Ci0JZWxzZSBpZiAoc3lzc3RzID09IExTX0pTVFMpCi0JCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOwotCi0JcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5EVENILCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7Ci0JcjhhNjY1OTdfYnNldChyOGE2NjU5NywgRFRDSEUsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKLQotCWlmIChyOGE2NjU5Ny0+YnVzX3N1c3BlbmRlZCkKLQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CisJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyhyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZCAqLwpAQCAtMTAyNCw2ICsxMDI1LDggQEAKIAl1MTYgc3BlZWQgPSBnZXRfcmhfdXNiX3NwZWVkKHI4YTY2NTk3LCBwb3J0KTsKIAlzdHJ1Y3QgcjhhNjY1OTdfcm9vdF9odWIgKnJoID0gJnI4YTY2NTk3LT5yb290X2h1Yltwb3J0XTsKIAorCXJoLT5wb3J0ICY9IH4oKDEgPDwgVVNCX1BPUlRfRkVBVF9ISUdIU1BFRUQpIHwKKwkJICAgICAgKDEgPDwgVVNCX1BPUlRfRkVBVF9MT1dTUEVFRCkpOwogCWlmIChzcGVlZCA9PSBIU01PREUpCiAJCXJoLT5wb3J0IHw9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKTsKIAllbHNlIGlmIChzcGVlZCA9PSBMU01PREUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKaW5kZXggYzYzMjQzNy4uNTYyZWJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYwpAQCAtMTE1LDYgKzExNSwxMCBAQAogCQlpZiAoc3RhdHVzICYgUVREX1NUU19IQUxURUQpIHsKIAkJCS8qIFVnLCBhbiBlcnJvci4gKi8KIAkJCXByb2Nlc3NfaGFsdGVkX3F0ZCh3aGMsIHFzZXQsIHRkKTsKKwkJCS8qIEEgaGFsdGVkIHFURCBhbHdheXMgdHJpZ2dlcnMgYW4gdXBkYXRlCisJCQkgICBiZWNhdXNlIHRoZSBxc2V0IHdhcyBlaXRoZXIgcmVtb3ZlZCBvcgorCQkJICAgcmVhY3RpdmF0ZWQuICovCisJCQl1cGRhdGUgfD0gV0hDX1VQREFURV9VUERBVEVEOwogCQkJZ290byBkb25lOwogCQl9CiAKQEAgLTMwNSw2ICszMDksNyBAQAogCXN0cnVjdCB3aGNfdXJiICp3dXJiID0gdXJiLT5oY3ByaXY7CiAJc3RydWN0IHdoY19xc2V0ICpxc2V0ID0gd3VyYi0+cXNldDsKIAlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkLCAqdDsKKwlib29sIGhhc19xdGQgPSBmYWxzZTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTMxNSwxNyArMzIwLDIxIEBACiAJCWdvdG8gb3V0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0ZCwgdCwgJnFzZXQtPnN0ZHMsIGxpc3Rfbm9kZSkgewotCQlpZiAoc3RkLT51cmIgPT0gdXJiKQorCQlpZiAoc3RkLT51cmIgPT0gdXJiKSB7CisJCQlpZiAoc3RkLT5xdGQpCisJCQkJaGFzX3F0ZCA9IHRydWU7CiAJCQlxc2V0X2ZyZWVfc3RkKHdoYywgc3RkKTsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCXN0ZC0+cXRkID0gTlVMTDsgLyogc28gdGhpcyBzdGQgaXMgcmUtYWRkZWQgd2hlbiB0aGUgcXNldCBpcyAqLwogCX0KIAotCWFzbF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOwotCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKLQl3dXJiLT5pc19hc3luYyA9IHRydWU7Ci0JcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7Ci0KKwlpZiAoaGFzX3F0ZCkgeworCQlhc2xfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKKwkJd3VyYi0+c3RhdHVzID0gc3RhdHVzOworCQl3dXJiLT5pc19hc3luYyA9IHRydWU7CisJCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3dXJiLT5kZXF1ZXVlX3dvcmspOworCX0gZWxzZQorCQlxc2V0X3JlbW92ZV91cmIod2hjLCBxc2V0LCB1cmIsIHN0YXR1cyk7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2hjLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYwppbmRleCBhOWUwNWJhLi4wZGIzZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jCkBAIC0xMjEsNiArMTIxLDEwIEBACiAJCWlmIChzdGF0dXMgJiBRVERfU1RTX0hBTFRFRCkgewogCQkJLyogVWcsIGFuIGVycm9yLiAqLwogCQkJcHJvY2Vzc19oYWx0ZWRfcXRkKHdoYywgcXNldCwgdGQpOworCQkJLyogQSBoYWx0ZWQgcVREIGFsd2F5cyB0cmlnZ2VycyBhbiB1cGRhdGUKKwkJCSAgIGJlY2F1c2UgdGhlIHFzZXQgd2FzIGVpdGhlciByZW1vdmVkIG9yCisJCQkgICByZWFjdGl2YXRlZC4gKi8KKwkJCXVwZGF0ZSB8PSBXSENfVVBEQVRFX1VQREFURUQ7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIApAQCAtMzMzLDYgKzMzNyw3IEBACiAJc3RydWN0IHdoY191cmIgKnd1cmIgPSB1cmItPmhjcHJpdjsKIAlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQgPSB3dXJiLT5xc2V0OwogCXN0cnVjdCB3aGNfc3RkICpzdGQsICp0OworCWJvb2wgaGFzX3F0ZCA9IGZhbHNlOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMzQzLDE3ICszNDgsMjIgQEAKIAkJZ290byBvdXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RkLCB0LCAmcXNldC0+c3RkcywgbGlzdF9ub2RlKSB7Ci0JCWlmIChzdGQtPnVyYiA9PSB1cmIpCisJCWlmIChzdGQtPnVyYiA9PSB1cmIpIHsKKwkJCWlmIChzdGQtPnF0ZCkKKwkJCQloYXNfcXRkID0gdHJ1ZTsKIAkJCXFzZXRfZnJlZV9zdGQod2hjLCBzdGQpOwotCQllbHNlCisJCX0gZWxzZQogCQkJc3RkLT5xdGQgPSBOVUxMOyAvKiBzbyB0aGlzIHN0ZCBpcyByZS1hZGRlZCB3aGVuIHRoZSBxc2V0IGlzICovCiAJfQogCi0JcHpsX3FzZXRfcmVtb3ZlKHdoYywgcXNldCk7Ci0Jd3VyYi0+c3RhdHVzID0gc3RhdHVzOwotCXd1cmItPmlzX2FzeW5jID0gZmFsc2U7Ci0JcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7Ci0KKwlpZiAoaGFzX3F0ZCkgeworCQlwemxfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKKwkJdXBkYXRlX3B6bF9od192aWV3KHdoYyk7CisJCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKKwkJd3VyYi0+aXNfYXN5bmMgPSBmYWxzZTsKKwkJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7CisJfSBlbHNlCisJCXFzZXRfcmVtb3ZlX3VyYih3aGMsIHFzZXQsIHVyYiwgc3RhdHVzKTsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3aGMtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCmluZGV4IDc2MGU3MjcuLmI4NGFiZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKQEAgLTksNyArOSw3IEBACiAjIChNKUhEUkMgPSAoTXVsdGlwb2ludCkgSGlnaHNwZWVkIER1YWwtUm9sZSBDb250cm9sbGVyCiBjb25maWcgVVNCX01VU0JfSERSQwogCWRlcGVuZHMgb24gKFVTQiB8fCBVU0JfR0FER0VUKQotCWRlcGVuZHMgb24gIVNVUEVSSAorCWRlcGVuZHMgb24gKEFSTSB8fCBCTEFDS0ZJTikKIAlzZWxlY3QgTk9QX1VTQl9YQ0VJViBpZiBBUkNIX0RBVklOQ0kKIAlzZWxlY3QgVFdMNDAzMF9VU0IgaWYgTUFDSF9PTUFQXzM0MzBTRFAKIAlzZWxlY3QgTk9QX1VTQl9YQ0VJViBpZiBNQUNIX09NQVAzRVZNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggNDNjMjI3MC4uY2Q0NGM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMzE1LDYgKzMxNSw5IEBACiAjZGVmaW5lIFFJU0RBX1BST0RVQ1RfSDIwXzQ1MTUJCQkweDQ1MTUKICNkZWZpbmUgUUlTREFfUFJPRFVDVF9IMjBfNDUxOQkJCTB4NDUxOQogCisvKiBUTEFZVEVDSCBQUk9EVUNUUyAqLworI2RlZmluZSBUTEFZVEVDSF9WRU5ET1JfSUQJCQkweDIwQjkKKyNkZWZpbmUgVExBWVRFQ0hfUFJPRFVDVF9URVU4MDAJCQkweDE2ODIKIAogLyogVE9TSElCQSBQUk9EVUNUUyAqLwogI2RlZmluZSBUT1NISUJBX1ZFTkRPUl9JRAkJCTB4MDkzMApAQCAtMzI4LDYgKzMzMSw5IEBACiAjZGVmaW5lIEFMQ0FURUxfVkVORE9SX0lECQkJMHgxYmJiCiAjZGVmaW5lIEFMQ0FURUxfUFJPRFVDVF9YMDYwUwkJCTB4MDAwMAogCisvKiBBaXJwbHVzIHByb2R1Y3RzICovCisjZGVmaW5lIEFJUlBMVVNfVkVORE9SX0lECQkJMHgxMDExCisjZGVmaW5lIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTAJCQkweDMxOTgKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG9wdGlvbl9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09MVCkgfSwKQEAgLTU4OSw2ICs1OTUsOCBAQAogCXsgVVNCX0RFVklDRShBTElOS19WRU5ET1JfSUQsIDB4OTAwMCkgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEFMSU5LX1ZFTkRPUl9JRCwgQUxJTktfUFJPRFVDVF8zR1UsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFKEFMQ0FURUxfVkVORE9SX0lELCBBTENBVEVMX1BST0RVQ1RfWDA2MFMpIH0sCisJeyBVU0JfREVWSUNFKEFJUlBMVVNfVkVORE9SX0lELCBBSVJQTFVTX1BST0RVQ1RfTUNENjUwKSB9LAorCXsgVVNCX0RFVklDRShUTEFZVEVDSF9WRU5ET1JfSUQsIFRMQVlURUNIX1BST0RVQ1RfVEVVODAwKSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBvcHRpb25faWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwppbmRleCA0NTg4Mzk4Li41MDE5MzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCkBAIC0yOTYsNyArMjk2LDYgQEAKIAlpbnQgZHNyX3N0YXRlOwogCWludCBkY2Rfc3RhdGU7CiAJaW50IHJpX3N0YXRlOwotCiAJdW5zaWduZWQgaW50IG9wZW5lZDoxOwogfTsKIApAQCAtMzA2LDYgKzMwNSw4IEBACiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCV9fdTE2IGludGVyZmFjZSA9IDA7CiAJaW50IHZhbCA9IDA7CisJaW50IGRvX3NlbmQgPSAwOworCWludCByZXR2YWw7CiAKIAlkZXZfZGJnKCZwb3J0LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCkBAIC0zMjQsMTAgKzMyNSw3IEBACiAJCSAqLwogCQlpZiAocG9ydC0+aW50ZXJydXB0X2luX3VyYikgewogCQkJLyogc2VuZCBjb250cm9sIG1lc3NhZ2UgKi8KLQkJCXJldHVybiB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCi0JCQkJdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCQkweDIyLCAweDIxLCB2YWwsIGludGVyZmFjZSwKLQkJCQlOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJCQlkb19zZW5kID0gMTsKIAkJfQogCX0KIApAQCAtMzM5LDEyICszMzcsMTggQEAKIAkJCWludGVyZmFjZSA9IDE7CiAJCWVsc2UgaWYgKHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyA9PSA1KQogCQkJaW50ZXJmYWNlID0gMjsKLQkJcmV0dXJuIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKLQkJCXVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQkweDIyLCAweDIxLCB2YWwsIGludGVyZmFjZSwKLQkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKworCQlkb19zZW5kID0gMTsKIAl9Ci0JcmV0dXJuIDA7CisJaWYgKCFkb19zZW5kKQorCQlyZXR1cm4gMDsKKworCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkweDIyLCAweDIxLCB2YWwsIGludGVyZmFjZSwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CisKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgdm9pZCBzaWVycmFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTc3Myw4ICs3NzcsMTEgQEAKIAogCWlmIChzZXJpYWwtPmRldikgewogCQltdXRleF9sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwotCQlpZiAoIXNlcmlhbC0+ZGlzY29ubmVjdGVkKQorCQlpZiAoIXNlcmlhbC0+ZGlzY29ubmVjdGVkKSB7CisJCQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CisJCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwogCQkJc2llcnJhX3NlbmRfc2V0dXAocG9ydCk7CisJCX0KIAkJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPmRpc2NfbXV0ZXgpOwogCQlzcGluX2xvY2tfaXJxKCZpbnRmZGF0YS0+c3VzcF9sb2NrKTsKIAkJcG9ydGRhdGEtPm9wZW5lZCA9IDA7CkBAIC03ODgsOCArNzk1LDYgQEAKIAkJCXNpZXJyYV9yZWxlYXNlX3VyYihwb3J0ZGF0YS0+aW5fdXJic1tpXSk7CiAJCQlwb3J0ZGF0YS0+aW5fdXJic1tpXSA9IE5VTEw7CiAJCX0KLQkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKLQkJc2VyaWFsLT5pbnRlcmZhY2UtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOwogCX0KIH0KIApAQCAtODI3LDYgKzgzMiw4IEBACiAJaWYgKGVycikgewogCQkvKiBnZXQgcmlkIG9mIGV2ZXJ5dGhpbmcgYXMgaW4gY2xvc2UgKi8KIAkJc2llcnJhX2Nsb3NlKHBvcnQpOworCQkvKiByZXN0b3JlIGJhbGFuY2UgZm9yIGF1dG9wbSAqLworCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlzaWVycmFfc2VuZF9zZXR1cChwb3J0KTsKQEAgLTkxNSw3ICs5MjIsNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHZvaWQgc3RvcF9yZWFkX3dyaXRlX3VyYnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIApAQCAtOTIzLDggKzkzMCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JCWZvciAoaiA9IDA7IGogPCBOX0lOX1VSQjsgaisrKQotCQkJdXNiX2tpbGxfdXJiKHBvcnRkYXRhLT5pbl91cmJzW2pdKTsKKwkJc2llcnJhX3N0b3BfcnhfdXJicyhwb3J0KTsKIAkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmcG9ydGRhdGEtPmFjdGl2ZSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggM2E0ZmIwMi4uNTg5ZjZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC02OTYsNyArNjk2LDcgQEAKIAkJLyogZGV2aWNlIHN1cHBvcnRzIGFuZCBuZWVkcyBiaWdnZXIgc2Vuc2UgYnVmZmVyICovCiAJCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0FORV9TRU5TRSkKIAkJCXNlbnNlX3NpemUgPSB+MDsKLQorUmV0cnlfU2Vuc2U6CiAJCVVTX0RFQlVHUCgiSXNzdWluZyBhdXRvLVJFUVVFU1RfU0VOU0VcbiIpOwogCiAJCXNjc2lfZWhfcHJlcF9jbW5kKHNyYiwgJnNlcywgTlVMTCwgMCwgc2Vuc2Vfc2l6ZSk7CkBAIC03MjAsNiArNzIwLDIxIEBACiAJCQlzcmItPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKIAkJCWdvdG8gSGFuZGxlX0Vycm9yczsKIAkJfQorCisJCS8qIFNvbWUgZGV2aWNlcyBjbGFpbSB0byBzdXBwb3J0IGxhcmdlciBzZW5zZSBidXQgZmFpbCB3aGVuCisJCSAqIHRyeWluZyB0byByZXF1ZXN0IGl0LiBXaGVuIGEgdHJhbnNwb3J0IGZhaWx1cmUgaGFwcGVucworCQkgKiB1c2luZyBVU19GU19TQU5FX1NFTlNFLCB3ZSBhbHdheXMgcmV0cnkgd2l0aCBhIHN0YW5kYXJkCisJCSAqIChzbWFsbCkgc2Vuc2UgcmVxdWVzdC4gVGhpcyBmaXhlcyBzb21lIFVTQiBHU00gbW9kZW1zCisJCSAqLworCQlpZiAodGVtcF9yZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRCAmJgorCQkgICAgKHVzLT5mZmxhZ3MgJiBVU19GTF9TQU5FX1NFTlNFKSAmJgorCQkgICAgc2Vuc2Vfc2l6ZSAhPSBVU19TRU5TRV9TSVpFKSB7CisJCQlVU19ERUJVR1AoIi0tIGF1dG8tc2Vuc2UgZmFpbHVyZSwgcmV0cnkgc21hbGwgc2Vuc2VcbiIpOworCQkJc2Vuc2Vfc2l6ZSA9IFVTX1NFTlNFX1NJWkU7CisJCQlnb3RvIFJldHJ5X1NlbnNlOworCQl9CisKKwkJLyogT3RoZXIgZmFpbHVyZXMgKi8KIAkJaWYgKHRlbXBfcmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CiAJCQlVU19ERUJVR1AoIi0tIGF1dG8tc2Vuc2UgZmFpbHVyZVxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCmluZGV4IGIyZjE0OWYuLjQ1MTZjMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYwpAQCAtMjAwLDM1ICsyMDAsNDAgQEAKIHsKIAlpbnQgcmVzdWx0LCBieXRlcywgc2VjZF9zaXplOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JfZGV2LT5kZXY7Ci0Jc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yIHNlY2Q7CisJc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yICpzZWNkOwogCWNvbnN0IHN0cnVjdCB1c2JfZW5jcnlwdGlvbl9kZXNjcmlwdG9yICpldGQsICpjY20xX2V0ZCA9IE5VTEw7Ci0Jdm9pZCAqc2VjZF9idWY7CiAJY29uc3Qgdm9pZCAqaXRyLCAqdG9wOwogCWNoYXIgYnVmWzY0XTsKIAorCXNlY2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2VjZCA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwogCXJlc3VsdCA9IHVzYl9nZXRfZGVzY3JpcHRvcih1c2JfZGV2LCBVU0JfRFRfU0VDVVJJVFksCi0JCQkJICAgIDAsICZzZWNkLCBzaXplb2Yoc2VjZCkpOworCQkJCSAgICAwLCBzZWNkLCBzaXplb2Yoc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yKSk7CiAJaWYgKHJlc3VsdCA8IHNpemVvZihzZWNkKSkgewogCQlkZXZfZXJyKGRldiwgIkNhbid0IHJlYWQgc2VjdXJpdHkgZGVzY3JpcHRvciBvciAiCiAJCQkibm90IGVub3VnaCBkYXRhOiAlZFxuIiwgcmVzdWx0KTsKLQkJZ290byBlcnJvcl9zZWNkOworCQlnb3RvIG91dDsKIAl9Ci0Jc2VjZF9zaXplID0gbGUxNl90b19jcHUoc2VjZC53VG90YWxMZW5ndGgpOwotCXNlY2RfYnVmID0ga21hbGxvYyhzZWNkX3NpemUsIEdGUF9LRVJORUwpOwotCWlmIChzZWNkX2J1ZiA9PSBOVUxMKSB7CisJc2VjZF9zaXplID0gbGUxNl90b19jcHUoc2VjZC0+d1RvdGFsTGVuZ3RoKTsKKwlzZWNkID0ga3JlYWxsb2Moc2VjZCwgc2VjZF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2VjZCA9PSBOVUxMKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgc3BhY2UgZm9yIHNlY3VyaXR5IGRlc2NyaXB0b3JzXG4iKTsKLQkJZ290byBlcnJvcl9zZWNkX2FsbG9jOworCQlnb3RvIG91dDsKIAl9CiAJcmVzdWx0ID0gdXNiX2dldF9kZXNjcmlwdG9yKHVzYl9kZXYsIFVTQl9EVF9TRUNVUklUWSwKLQkJCQkgICAgMCwgc2VjZF9idWYsIHNlY2Rfc2l6ZSk7CisJCQkJICAgIDAsIHNlY2QsIHNlY2Rfc2l6ZSk7CiAJaWYgKHJlc3VsdCA8IHNlY2Rfc2l6ZSkgewogCQlkZXZfZXJyKGRldiwgIkNhbid0IHJlYWQgc2VjdXJpdHkgZGVzY3JpcHRvciBvciAiCiAJCQkibm90IGVub3VnaCBkYXRhOiAlZFxuIiwgcmVzdWx0KTsKLQkJZ290byBlcnJvcl9zZWNkX2FsbDsKKwkJZ290byBvdXQ7CiAJfQogCWJ5dGVzID0gMDsKLQlpdHIgPSBzZWNkX2J1ZiArIHNpemVvZihzZWNkKTsKLQl0b3AgPSBzZWNkX2J1ZiArIHJlc3VsdDsKKwlpdHIgPSAmc2VjZFsxXTsKKwl0b3AgPSAodm9pZCAqKXNlY2QgKyByZXN1bHQ7CiAJd2hpbGUgKGl0ciA8IHRvcCkgewogCQlldGQgPSBpdHI7CiAJCWlmICh0b3AgLSBpdHIgPCBzaXplb2YoKmV0ZCkpIHsKQEAgLTI1OSwyNCArMjY0LDE2IEBACiAJCWRldl9lcnIoZGV2LCAiV1VTQiBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IENDTTEgZW5jcnlwdGlvbiwgIgogCQkJImNhbid0IHVzZSFcbiIpOwogCQlyZXN1bHQgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yX25vX2NjbTE7CisJCWdvdG8gb3V0OwogCX0KIAl3dXNiX2Rldi0+Y2NtMV9ldGQgPSAqY2NtMV9ldGQ7CiAJZGV2X2RiZyhkZXYsICJzdXBwb3J0ZWQgZW5jcnlwdGlvbjogJXM7IHVzaW5nICVzICgweCUwMngvJTAyeClcbiIsCiAJCWJ1Ziwgd3VzYl9ldF9uYW1lKGNjbTFfZXRkLT5iRW5jcnlwdGlvblR5cGUpLAogCQljY20xX2V0ZC0+YkVuY3J5cHRpb25WYWx1ZSwgY2NtMV9ldGQtPmJBdXRoS2V5SW5kZXgpOwogCXJlc3VsdCA9IDA7Ci0Ja2ZyZWUoc2VjZF9idWYpOwogb3V0OgorCWtmcmVlKHNlY2QpOwogCXJldHVybiByZXN1bHQ7Ci0KLQotZXJyb3Jfbm9fY2NtMToKLWVycm9yX3NlY2RfYWxsOgotCWtmcmVlKHNlY2RfYnVmKTsKLWVycm9yX3NlY2RfYWxsb2M6Ci1lcnJvcl9zZWNkOgotCWdvdG8gb3V0OwogfQogCiB2b2lkIHd1c2JfZGV2X3NlY19ybShzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKaW5kZXggMjAwYzIyZi4uOWRkNTg4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKi8KIC8vI2RlZmluZSBERUJVRwogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fYmFsbG9vbi5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CkBAIC0yNDgsNyArMjQ3LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCB2aXJ0YmFsbG9vbl9yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdmlydGJhbGxvb25fcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmIgPSB2ZGV2LT5wcml2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKaW5kZXggNGExZjFlYi4uMjhkOWNmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwpAQCAtNTMwLDE5ICs1MzAsMjIgQEAKIAkJCWVyciA9IFBUUl9FUlIodnFzW2ldKTsKIAkJCWdvdG8gZXJyb3JfZmluZDsKIAkJfQorCisJCWlmICghdnBfZGV2LT5wZXJfdnFfdmVjdG9ycyB8fCBtc2l4X3ZlYyA9PSBWSVJUSU9fTVNJX05PX1ZFQ1RPUikKKwkJCWNvbnRpbnVlOworCiAJCS8qIGFsbG9jYXRlIHBlci12cSBpcnEgaWYgYXZhaWxhYmxlIGFuZCBuZWNlc3NhcnkgKi8KLQkJaWYgKHZwX2Rldi0+cGVyX3ZxX3ZlY3RvcnMpIHsKLQkJCXNucHJpbnRmKHZwX2Rldi0+bXNpeF9uYW1lc1ttc2l4X3ZlY10sCi0JCQkJIHNpemVvZiAqdnBfZGV2LT5tc2l4X25hbWVzLAotCQkJCSAiJXMtJXMiLAotCQkJCSBkZXZfbmFtZSgmdnBfZGV2LT52ZGV2LmRldiksIG5hbWVzW2ldKTsKLQkJCWVyciA9IHJlcXVlc3RfaXJxKG1zaXhfdmVjLCB2cmluZ19pbnRlcnJ1cHQsIDAsCi0JCQkJCSAgdnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKLQkJCQkJICB2cXNbaV0pOwotCQkJaWYgKGVycikgewotCQkJCXZwX2RlbF92cSh2cXNbaV0pOwotCQkJCWdvdG8gZXJyb3JfZmluZDsKLQkJCX0KKwkJc25wcmludGYodnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKKwkJCSBzaXplb2YgKnZwX2Rldi0+bXNpeF9uYW1lcywKKwkJCSAiJXMtJXMiLAorCQkJIGRldl9uYW1lKCZ2cF9kZXYtPnZkZXYuZGV2KSwgbmFtZXNbaV0pOworCQllcnIgPSByZXF1ZXN0X2lycSh2cF9kZXYtPm1zaXhfZW50cmllc1ttc2l4X3ZlY10udmVjdG9yLAorCQkJCSAgdnJpbmdfaW50ZXJydXB0LCAwLAorCQkJCSAgdnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKKwkJCQkgIHZxc1tpXSk7CisJCWlmIChlcnIpIHsKKwkJCXZwX2RlbF92cSh2cXNbaV0pOworCQkJZ290byBlcnJvcl9maW5kOwogCQl9CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKaW5kZXggZjUzNjAwNS4uZmJkMmVjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCkBAIC0yODUsNiArMjg1LDkgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJLyogT25seSBnZXQgdXNlZCBhcnJheSBlbnRyaWVzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGV4cG9zZWQgYnkgaG9zdC4gKi8KKwlybWIoKTsKKwogCWkgPSB2cS0+dnJpbmcudXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCV2cS0+dnJpbmcubnVtXS5pZDsKIAkqbGVuID0gdnEtPnZyaW5nLnVzZWQtPnJpbmdbdnEtPmxhc3RfdXNlZF9pZHgldnEtPnZyaW5nLm51bV0ubGVuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKaW5kZXggMWU4ZjAyZi4uZDNjODI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAKIAlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIHApOwogCXJpb3dkX2RldmljZSA9IHA7Ci0JZXJyID0gMDsKKwlyZXR1cm4gMDsKIAogb3V0X2lvdW5tYXA6CiAJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLCBwLT5yZWdzLCAyKTsKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGQ0YmY4Y2EuLjIxMjYwNzggMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtMTM1LDggKzEzNSw4IEBACiAKIGNvbmZpZyBIVUdFVExCRlMKIAlib29sICJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBYODYgfHwgSUE2NCB8fCBQUEM2NCB8fCBTUEFSQzY0IHx8IChTVVBFUkggJiYgTU1VKSB8fCBcCi0JCSAgIChTMzkwICYmIDY0QklUKSB8fCBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTIHx8IEJST0tFTgorCWRlcGVuZHMgb24gWDg2IHx8IElBNjQgfHwgUFBDX0JPT0szU182NCB8fCBTUEFSQzY0IHx8IChTMzkwICYmIDY0QklUKSB8fCBcCisJCSAgIFNZU19TVVBQT1JUU19IVUdFVExCRlMgfHwgQlJPS0VOCiAJaGVscAogCSAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvbgogCSAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZApkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCA5Y2Y0YjkyLi44YmVkMDU1IDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMTI0OCw4ICsxMjQ4LDggQEAKIAkJCWJkX3NldF9zaXplKGJkZXYsIChsb2ZmX3QpYmRldi0+YmRfcGFydC0+bnJfc2VjdHMgPDwgOSk7CiAJCX0KIAl9IGVsc2UgewotCQlwdXRfZGlzayhkaXNrKTsKIAkJbW9kdWxlX3B1dChkaXNrLT5mb3BzLT5vd25lcik7CisJCXB1dF9kaXNrKGRpc2spOwogCQlkaXNrID0gTlVMTDsKIAkJaWYgKGJkZXYtPmJkX2NvbnRhaW5zID09IGJkZXYpIHsKIAkJCWlmIChiZGV2LT5iZF9kaXNrLT5mb3BzLT5vcGVuKSB7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9hY2wuYyBiL2ZzL2J0cmZzL2FjbC5jCmluZGV4IDY5YjM1NWEuLjM2MTYwNDIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FjbC5jCisrKyBiL2ZzL2J0cmZzL2FjbC5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiYnRyZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgogCi0jaWZkZWYgQ09ORklHX0JUUkZTX1BPU0lYX0FDTAorI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIAogc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKmJ0cmZzX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCiB7CkBAIC0zMTMsNyArMzEzLDcgQEAKIAkuc2V0CT0gYnRyZnNfeGF0dHJfYWNsX2FjY2Vzc19zZXQsCiB9OwogCi0jZWxzZSAvKiBDT05GSUdfQlRSRlNfUE9TSVhfQUNMICovCisjZWxzZSAvKiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMICovCiAKIGludCBidHJmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTMyNSw0ICszMjUsNCBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYgLyogQ09ORklHX0JUUkZTX1BPU0lYX0FDTCAqLworI2VuZGlmIC8qIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wgKi8KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmggYi9mcy9idHJmcy9idHJmc19pbm9kZS5oCmluZGV4IGM3MWFiZWMuLmY2NzgzYTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKKysrIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaApAQCAtODYsNiArODYsMTIgQEAKIAkgKiB0cmFuc2lkIG9mIHRoZSB0cmFuc19oYW5kbGUgdGhhdCBsYXN0IG1vZGlmaWVkIHRoaXMgaW5vZGUKIAkgKi8KIAl1NjQgbGFzdF90cmFuczsKKworCS8qCisJICogbG9nIHRyYW5zaWQgd2hlbiB0aGlzIGlub2RlIHdhcyBsYXN0IG1vZGlmaWVkCisJICovCisJdTY0IGxhc3Rfc3ViX3RyYW5zOworCiAJLyoKIAkgKiB0cmFuc2lkIHRoYXQgbGFzdCBsb2dnZWQgdGhpcyBpbm9kZQogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuaCBiL2ZzL2J0cmZzL2N0cmVlLmgKaW5kZXggMWJiODk3ZS4uNDQ0YjNlOSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY3RyZWUuaAorKysgYi9mcy9idHJmcy9jdHJlZS5oCkBAIC0xMDA5LDYgKzEwMDksNyBAQAogCWF0b21pY190IGxvZ193cml0ZXJzOwogCWF0b21pY190IGxvZ19jb21taXRbMl07CiAJdW5zaWduZWQgbG9uZyBsb2dfdHJhbnNpZDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfbG9nX2NvbW1pdDsKIAl1bnNpZ25lZCBsb25nIGxvZ19iYXRjaDsKIAlwaWRfdCBsb2dfc3RhcnRfcGlkOwogCWJvb2wgbG9nX211bHRpcGxlX3BpZHM7CkBAIC0xMTUyLDYgKzExNTMsNyBAQAogI2RlZmluZSBCVFJGU19NT1VOVF9GTFVTSE9OQ09NTUlUICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIEJUUkZTX01PVU5UX1NTRF9TUFJFQUQJCSgxIDw8IDgpCiAjZGVmaW5lIEJUUkZTX01PVU5UX05PU1NECQkoMSA8PCA5KQorI2RlZmluZSBCVFJGU19NT1VOVF9ESVNDQVJECQkoMSA8PCAxMCkKIAogI2RlZmluZSBidHJmc19jbGVhcl9vcHQobywgb3B0KQkJKChvKSAmPSB+QlRSRlNfTU9VTlRfIyNvcHQpCiAjZGVmaW5lIGJ0cmZzX3NldF9vcHQobywgb3B0KQkJKChvKSB8PSBCVFJGU19NT1VOVF8jI29wdCkKQEAgLTIzNzMsNyArMjM3NSw3IEBACiBpbnQgYnRyZnNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCk7CiAKIC8qIGFjbC5jICovCi0jaWZkZWYgQ09ORklHX0JUUkZTX1BPU0lYX0FDTAorI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIGludCBidHJmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOwogI2Vsc2UKICNkZWZpbmUgYnRyZnNfY2hlY2tfYWNsIE5VTEwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpc2staW8uYyBiL2ZzL2J0cmZzL2Rpc2staW8uYwppbmRleCAxMDA1NTFhLi4wMmI2YWZiIDEwMDY0NAotLS0gYS9mcy9idHJmcy9kaXNrLWlvLmMKKysrIGIvZnMvYnRyZnMvZGlzay1pby5jCkBAIC05MTcsNiArOTE3LDcgQEAKIAlhdG9taWNfc2V0KCZyb290LT5sb2dfd3JpdGVycywgMCk7CiAJcm9vdC0+bG9nX2JhdGNoID0gMDsKIAlyb290LT5sb2dfdHJhbnNpZCA9IDA7CisJcm9vdC0+bGFzdF9sb2dfY29tbWl0ID0gMDsKIAlleHRlbnRfaW9fdHJlZV9pbml0KCZyb290LT5kaXJ0eV9sb2dfcGFnZXMsCiAJCQkgICAgIGZzX2luZm8tPmJ0cmVlX2lub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKIApAQCAtMTA4Nyw2ICsxMDg4LDcgQEAKIAlXQVJOX09OKHJvb3QtPmxvZ19yb290KTsKIAlyb290LT5sb2dfcm9vdCA9IGxvZ19yb290OwogCXJvb3QtPmxvZ190cmFuc2lkID0gMDsKKwlyb290LT5sYXN0X2xvZ19jb21taXQgPSAwOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCBkMGM0ZDU4Li5lMjM4YTBjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTE1NjgsMjMgKzE1NjgsMjMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jaWZkZWYgQklPX1JXX0RJU0NBUkQKIHN0YXRpYyB2b2lkIGJ0cmZzX2lzc3VlX2Rpc2NhcmQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKIAkJCQl1NjQgc3RhcnQsIHU2NCBsZW4pCiB7CiAJYmxrZGV2X2lzc3VlX2Rpc2NhcmQoYmRldiwgc3RhcnQgPj4gOSwgbGVuID4+IDksIEdGUF9LRVJORUwsCiAJCQkgICAgIERJU0NBUkRfRkxfQkFSUklFUik7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludCBidHJmc19kaXNjYXJkX2V4dGVudChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGJ5dGVuciwKIAkJCQl1NjQgbnVtX2J5dGVzKQogewotI2lmZGVmIEJJT19SV19ESVNDQVJECiAJaW50IHJldDsKIAl1NjQgbWFwX2xlbmd0aCA9IG51bV9ieXRlczsKIAlzdHJ1Y3QgYnRyZnNfbXVsdGlfYmlvICptdWx0aSA9IE5VTEw7CiAKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIERJU0NBUkQpKQorCQlyZXR1cm4gMDsKKwogCS8qIFRlbGwgdGhlIGJsb2NrIGRldmljZShzKSB0aGF0IHRoZSBzZWN0b3JzIGNhbiBiZSBkaXNjYXJkZWQgKi8KIAlyZXQgPSBidHJmc19tYXBfYmxvY2soJnJvb3QtPmZzX2luZm8tPm1hcHBpbmdfdHJlZSwgUkVBRCwKIAkJCSAgICAgIGJ5dGVuciwgJm1hcF9sZW5ndGgsICZtdWx0aSwgMCk7CkBAIC0xNjA0LDkgKzE2MDQsNiBAQAogCX0KIAogCXJldHVybiByZXQ7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCiB9CiAKIGludCBidHJmc19pbmNfZXh0ZW50X3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKQEAgLTM2OTAsNiArMzY4NywxNCBAQAogCWlmIChpc19kYXRhKQogCQlnb3RvIHBpbml0OwogCisJLyoKKwkgKiBkaXNjYXJkIGlzIHNsb29vb3csIGFuZCBzbyB0cmlnZ2VyaW5nIGRpc2NhcmRzIG9uCisJICogaW5kaXZpZHVhbCBidHJlZSBibG9ja3MgaXNuJ3QgYSBnb29kIHBsYW4uICBKdXN0CisJICogcGluIGV2ZXJ5dGhpbmcgaW4gZGlzY2FyZCBtb2RlLgorCSAqLworCWlmIChidHJmc190ZXN0X29wdChyb290LCBESVNDQVJEKSkKKwkJZ290byBwaW5pdDsKKwogCWJ1ZiA9IGJ0cmZzX2ZpbmRfdHJlZV9ibG9jayhyb290LCBieXRlbnIsIG51bV9ieXRlcyk7CiAJaWYgKCFidWYpCiAJCWdvdG8gcGluaXQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9maWxlLmMgYi9mcy9idHJmcy9maWxlLmMKaW5kZXggMmQ2MjNhYS4uMDY1NTBhZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZmlsZS5jCisrKyBiL2ZzL2J0cmZzL2ZpbGUuYwpAQCAtMTA4Niw4ICsxMDg2LDEwIEBACiAJCQkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJCQkJZWxzZQogCQkJCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCQkJfSBlbHNlIHsKKwkJCX0gZWxzZSBpZiAocmV0ICE9IEJUUkZTX05PX0xPR19TWU5DKSB7CiAJCQkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJCX0gZWxzZSB7CisJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCX0KIAkJfQogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSB7CkBAIC0xMTM3LDYgKzExMzksMTMgQEAKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKIAorCisJLyogd2Ugd2FpdCBmaXJzdCwgc2luY2UgdGhlIHdyaXRlYmFjayBtYXkgY2hhbmdlIHRoZSBpbm9kZSAqLworCXJvb3QtPmxvZ19iYXRjaCsrOworCS8qIHRoZSBWRlMgY2FsbGVkIGZpbGVtYXBfZmRhdGF3cml0ZSBmb3IgdXMgKi8KKwlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIDAsICh1NjQpLTEpOworCXJvb3QtPmxvZ19iYXRjaCsrOworCiAJLyoKIAkgKiBjaGVjayB0aGUgdHJhbnNhY3Rpb24gdGhhdCBsYXN0IG1vZGlmaWVkIHRoaXMgaW5vZGUKIAkgKiBhbmQgc2VlIGlmIGl0cyBhbHJlYWR5IGJlZW4gY29tbWl0dGVkCkBAIC0xMTQ0LDYgKzExNTMsMTEgQEAKIAlpZiAoIUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zKQogCQlnb3RvIG91dDsKIAorCS8qCisJICogaWYgdGhlIGxhc3QgdHJhbnNhY3Rpb24gdGhhdCBjaGFuZ2VkIHRoaXMgZmlsZSB3YXMgYmVmb3JlCisJICogdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHdlIGNhbiBiYWlsIG91dCBub3cgd2l0aG91dCBhbnkKKwkgKiBzeW5jaW5nCisJICovCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCWlmIChCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA8PQogCSAgICByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZCkgewpAQCAtMTE1MywxMyArMTE2Nyw2IEBACiAJfQogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCi0Jcm9vdC0+bG9nX2JhdGNoKys7Ci0JZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOwotCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7Ci0Jcm9vdC0+bG9nX2JhdGNoKys7Ci0KLQlpZiAoZGF0YXN5bmMgJiYgIShpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFlfUEFHRVMpKQotCQlnb3RvIG91dDsKIAkvKgogCSAqIG9rIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHRoZSB0cmFuc2FjdGlvbiB5ZXQsIGxldHMgZG8gYSBjb21taXQKIAkgKi8KQEAgLTExODgsMTQgKzExOTUsMTggQEAKIAkgKi8KIAltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKLQlpZiAocmV0ID4gMCkgewotCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCX0gZWxzZSB7Ci0JCXJldCA9IGJ0cmZzX3N5bmNfbG9nKHRyYW5zLCByb290KTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKLQkJZWxzZQorCWlmIChyZXQgIT0gQlRSRlNfTk9fTE9HX1NZTkMpIHsKKwkJaWYgKHJldCA+IDApIHsKIAkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBidHJmc19zeW5jX2xvZyh0cmFucywgcm9vdCk7CisJCQlpZiAocmV0ID09IDApCisJCQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAl9CiAJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jCmluZGV4IDllMTM4YjcuLmRhZTEyZGMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lub2RlLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUuYwpAQCAtMzAzMiwxMiArMzAzMiwyMiBAQAogCiAJaWYgKChvZmZzZXQgJiAoYmxvY2tzaXplIC0gMSkpID09IDApCiAJCWdvdG8gb3V0OworCXJldCA9IGJ0cmZzX2NoZWNrX2RhdGFfZnJlZV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAogCXJldCA9IC1FTk9NRU07CiBhZ2FpbjoKIAlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKG1hcHBpbmcsIGluZGV4KTsKLQlpZiAoIXBhZ2UpCisJaWYgKCFwYWdlKSB7CisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CiAJCWdvdG8gb3V0OworCX0KIAogCXBhZ2Vfc3RhcnQgPSBwYWdlX29mZnNldChwYWdlKTsKIAlwYWdlX2VuZCA9IHBhZ2Vfc3RhcnQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxOwpAQCAtMzA3MCw2ICszMDgwLDEwIEBACiAJCWdvdG8gYWdhaW47CiAJfQogCisJY2xlYXJfZXh0ZW50X2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwKKwkJCSAgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwgRVhURU5UX0RPX0FDQ09VTlRJTkcsCisJCQkgIEdGUF9OT0ZTKTsKKwogCXJldCA9IGJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKTsKIAlpZiAocmV0KSB7CiAJCXVubG9ja19leHRlbnQoaW9fdHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsIEdGUF9OT0ZTKTsKQEAgLTMwODgsNiArMzEwMiw5IEBACiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCiBvdXRfdW5sb2NrOgorCWlmIChyZXQpCisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiBvdXQ6CkBAIC0zMTExLDcgKzMxMjgsOSBAQAogCWlmIChzaXplIDw9IGhvbGVfc3RhcnQpCiAJCXJldHVybiAwOwogCi0JYnRyZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKKwllcnIgPSBidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKm9yZGVyZWQ7CkBAIC0zNDgwLDYgKzM0OTksNyBAQAogCWJpLT5nZW5lcmF0aW9uID0gMDsKIAliaS0+c2VxdWVuY2UgPSAwOwogCWJpLT5sYXN0X3RyYW5zID0gMDsKKwliaS0+bGFzdF9zdWJfdHJhbnMgPSAwOwogCWJpLT5sb2dnZWRfdHJhbnMgPSAwOwogCWJpLT5kZWxhbGxvY19ieXRlcyA9IDA7CiAJYmktPnJlc2VydmVkX2J5dGVzID0gMDsKQEAgLTQ5ODAsNyArNTAwMCw5IEBACiAJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCi0JQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uICsgMTsKKwlCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb247CisJQlRSRlNfSShpbm9kZSktPmxhc3Rfc3ViX3RyYW5zID0gQlRSRlNfSShpbm9kZSktPnJvb3QtPmxvZ190cmFuc2lkOworCiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCiBvdXRfdW5sb2NrOgpAQCAtNTAwNSw3ICs1MDI3LDkgQEAKIAlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUoaW5vZGUpKQogCQlyZXR1cm47CiAKLQlidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOworCXJldCA9IGJ0cmZzX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuOwogCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSAmICh+bWFzayksICh1NjQpLTEpOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKQEAgLTUxMDAsNiArNTEyNCw3IEBACiAJaWYgKCFlaSkKIAkJcmV0dXJuIE5VTEw7CiAJZWktPmxhc3RfdHJhbnMgPSAwOworCWVpLT5sYXN0X3N1Yl90cmFucyA9IDA7CiAJZWktPmxvZ2dlZF90cmFucyA9IDA7CiAJZWktPm91dHN0YW5kaW5nX2V4dGVudHMgPSAwOwogCWVpLT5yZXNlcnZlZF9leHRlbnRzID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDlkZTliMjIuLjc1MmE1NDYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtNjYsNyArNjYsOCBAQAogCU9wdF9kZWdyYWRlZCwgT3B0X3N1YnZvbCwgT3B0X2RldmljZSwgT3B0X25vZGF0YXN1bSwgT3B0X25vZGF0YWNvdywKIAlPcHRfbWF4X2V4dGVudCwgT3B0X21heF9pbmxpbmUsIE9wdF9hbGxvY19zdGFydCwgT3B0X25vYmFycmllciwKIAlPcHRfc3NkLCBPcHRfbm9zc2QsIE9wdF9zc2Rfc3ByZWFkLCBPcHRfdGhyZWFkX3Bvb2wsIE9wdF9ub2FjbCwKLQlPcHRfY29tcHJlc3MsIE9wdF9ub3RyZWVsb2csIE9wdF9yYXRpbywgT3B0X2ZsdXNob25jb21taXQsIE9wdF9lcnIsCisJT3B0X2NvbXByZXNzLCBPcHRfbm90cmVlbG9nLCBPcHRfcmF0aW8sIE9wdF9mbHVzaG9uY29tbWl0LAorCU9wdF9kaXNjYXJkLCBPcHRfZXJyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtODgsNiArODksNyBAQAogCXtPcHRfbm90cmVlbG9nLCAibm90cmVlbG9nIn0sCiAJe09wdF9mbHVzaG9uY29tbWl0LCAiZmx1c2hvbmNvbW1pdCJ9LAogCXtPcHRfcmF0aW8sICJtZXRhZGF0YV9yYXRpbz0lZCJ9LAorCXtPcHRfZGlzY2FyZCwgImRpc2NhcmQifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCkBAIC0yNTcsNiArMjU5LDkgQEAKIAkJCQkgICAgICAgaW5mby0+bWV0YWRhdGFfcmF0aW8pOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Rpc2NhcmQ6CisJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgRElTQ0FSRCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC0zNDQsNyArMzQ5LDcgQEAKIAlzYi0+c19leHBvcnRfb3AgPSAmYnRyZnNfZXhwb3J0X29wczsKIAlzYi0+c194YXR0ciA9IGJ0cmZzX3hhdHRyX2hhbmRsZXJzOwogCXNiLT5zX3RpbWVfZ3JhbiA9IDE7Ci0jaWZkZWYgQ09ORklHX0JUUkZTX1BPU0lYX0FDTAorI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIAlzYi0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCAwYjhmMzZkLi5iY2E4MmE0IDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTM0NCwxMCArMzQ0LDEwIEBACiAvKgogICogd2hlbiBidHJlZSBibG9ja3MgYXJlIGFsbG9jYXRlZCwgdGhleSBoYXZlIHNvbWUgY29ycmVzcG9uZGluZyBiaXRzIHNldCBmb3IKICAqIHRoZW0gaW4gb25lIG9mIHR3byBleHRlbnRfaW8gdHJlZXMuICBUaGlzIGlzIHVzZWQgdG8gbWFrZSBzdXJlIGFsbCBvZgotICogdGhvc2UgZXh0ZW50cyBhcmUgb24gZGlzayBmb3IgdHJhbnNhY3Rpb24gb3IgbG9nIGNvbW1pdAorICogdGhvc2UgZXh0ZW50cyBhcmUgc2VudCB0byBkaXNrIGJ1dCBkb2VzIG5vdCB3YWl0IG9uIHRoZW0KICAqLwotaW50IGJ0cmZzX3dyaXRlX2FuZF93YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzKQoraW50IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgIHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCiB7CiAJaW50IHJldDsKIAlpbnQgZXJyID0gMDsKQEAgLTM5NCw2ICszOTQsMjkgQEAKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJfQogCX0KKwlpZiAoZXJyKQorCQl3ZXJyID0gZXJyOworCXJldHVybiB3ZXJyOworfQorCisvKgorICogd2hlbiBidHJlZSBibG9ja3MgYXJlIGFsbG9jYXRlZCwgdGhleSBoYXZlIHNvbWUgY29ycmVzcG9uZGluZyBiaXRzIHNldCBmb3IKKyAqIHRoZW0gaW4gb25lIG9mIHR3byBleHRlbnRfaW8gdHJlZXMuICBUaGlzIGlzIHVzZWQgdG8gbWFrZSBzdXJlIGFsbCBvZgorICogdGhvc2UgZXh0ZW50cyBhcmUgb24gZGlzayBmb3IgdHJhbnNhY3Rpb24gb3IgbG9nIGNvbW1pdC4gIFdlIHdhaXQKKyAqIG9uIGFsbCB0aGUgcGFnZXMgYW5kIGNsZWFyIHRoZW0gZnJvbSB0aGUgZGlydHkgcGFnZXMgc3RhdGUgdHJlZQorICovCitpbnQgYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgICAgIHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCit7CisJaW50IHJldDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgd2VyciA9IDA7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGlub2RlICpidHJlZV9pbm9kZSA9IHJvb3QtPmZzX2luZm8tPmJ0cmVlX2lub2RlOworCXU2NCBzdGFydCA9IDA7CisJdTY0IGVuZDsKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KGRpcnR5X3BhZ2VzLCAwLCAmc3RhcnQsICZlbmQsCiAJCQkJCSAgICBFWFRFTlRfRElSVFkpOwpAQCAtNDI0LDYgKzQ0NywyMiBAQAogCXJldHVybiB3ZXJyOwogfQogCisvKgorICogd2hlbiBidHJlZSBibG9ja3MgYXJlIGFsbG9jYXRlZCwgdGhleSBoYXZlIHNvbWUgY29ycmVzcG9uZGluZyBiaXRzIHNldCBmb3IKKyAqIHRoZW0gaW4gb25lIG9mIHR3byBleHRlbnRfaW8gdHJlZXMuICBUaGlzIGlzIHVzZWQgdG8gbWFrZSBzdXJlIGFsbCBvZgorICogdGhvc2UgZXh0ZW50cyBhcmUgb24gZGlzayBmb3IgdHJhbnNhY3Rpb24gb3IgbG9nIGNvbW1pdAorICovCitpbnQgYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCit7CisJaW50IHJldDsKKwlpbnQgcmV0MjsKKworCXJldCA9IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKHJvb3QsIGRpcnR5X3BhZ2VzKTsKKwlyZXQyID0gYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhyb290LCBkaXJ0eV9wYWdlcyk7CisJcmV0dXJuIHJldCB8fCByZXQyOworfQorCiBpbnQgYnRyZnNfd3JpdGVfYW5kX3dhaXRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmggYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCmluZGV4IDY2M2M2NzQuLmQ0ZTNlN2EgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaApAQCAtNzksNiArNzksNyBAQAogCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gdHJhbnMtPnRyYW5zYWN0aW9uLT50cmFuc2lkOworCUJUUkZTX0koaW5vZGUpLT5sYXN0X3N1Yl90cmFucyA9IEJUUkZTX0koaW5vZGUpLT5yb290LT5sb2dfdHJhbnNpZDsKIH0KIAogaW50IGJ0cmZzX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKQEAgLTEwNyw1ICsxMDgsOSBAQAogCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CitpbnQgYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpOworaW50IGJ0cmZzX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpOwogaW50IGJ0cmZzX3RyYW5zYWN0aW9uX2luX2NvbW1pdChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IDRlZGZkYzIuLjc0MTY2NmEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtMTk4MCw2ICsxOTgwLDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBidHJmc19yb290ICpsb2cgPSByb290LT5sb2dfcm9vdDsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqbG9nX3Jvb3RfdHJlZSA9IHJvb3QtPmZzX2luZm8tPmxvZ19yb290X3RyZWU7CisJdTY0IGxvZ190cmFuc2lkID0gMDsKIAogCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CiAJaW5kZXgxID0gcm9vdC0+bG9nX3RyYW5zaWQgJSAyOwpAQCAtMTk5NCwxMiArMTk5NSwxMyBAQAogCWlmIChhdG9taWNfcmVhZCgmcm9vdC0+bG9nX2NvbW1pdFsoaW5kZXgxICsgMSkgJSAyXSkpCiAJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgcm9vdCwgcm9vdC0+bG9nX3RyYW5zaWQgLSAxKTsKIAotCXdoaWxlIChyb290LT5sb2dfbXVsdGlwbGVfcGlkcykgeworCXdoaWxlICgxKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmF0Y2ggPSByb290LT5sb2dfYmF0Y2g7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7Ci0JCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7Ci0KKwkJaWYgKHJvb3QtPmxvZ19tdWx0aXBsZV9waWRzKSB7CisJCQltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwkJCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJCX0KIAkJd2FpdF9mb3Jfd3JpdGVyKHRyYW5zLCByb290KTsKIAkJaWYgKGJhdGNoID09IHJvb3QtPmxvZ19iYXRjaCkKIAkJCWJyZWFrOwpAQCAtMjAxMiwxMiArMjAxNCwxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcyk7CisJLyogd2Ugc3RhcnQgSU8gb24gIGFsbCB0aGUgbWFya2VkIGV4dGVudHMgaGVyZSwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CisJICogd2FpdCBmb3IgdGhlbSB1bnRpbCBsYXRlci4KKwkgKi8KKwlyZXQgPSBidHJmc193cml0ZV9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcyk7CiAJQlVHX09OKHJldCk7CiAKIAlidHJmc19zZXRfcm9vdF9ub2RlKCZsb2ctPnJvb3RfaXRlbSwgbG9nLT5ub2RlKTsKIAogCXJvb3QtPmxvZ19iYXRjaCA9IDA7CisJbG9nX3RyYW5zaWQgPSByb290LT5sb2dfdHJhbnNpZDsKIAlyb290LT5sb2dfdHJhbnNpZCsrOwogCWxvZy0+bG9nX3RyYW5zaWQgPSByb290LT5sb2dfdHJhbnNpZDsKIAlyb290LT5sb2dfc3RhcnRfcGlkID0gMDsKQEAgLTIwNDYsNiArMjA1Miw3IEBACiAKIAlpbmRleDIgPSBsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCAlIDI7CiAJaWYgKGF0b21pY19yZWFkKCZsb2dfcm9vdF90cmVlLT5sb2dfY29tbWl0W2luZGV4Ml0pKSB7CisJCWJ0cmZzX3dhaXRfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOwogCQl3YWl0X2xvZ19jb21taXQodHJhbnMsIGxvZ19yb290X3RyZWUsCiAJCQkJbG9nX3Jvb3RfdHJlZS0+bG9nX3RyYW5zaWQpOwogCQltdXRleF91bmxvY2soJmxvZ19yb290X3RyZWUtPmxvZ19tdXRleCk7CkBAIC0yMDY1LDYgKzIwNzIsNyBAQAogCSAqIGNoZWNrIHRoZSBmdWxsIGNvbW1pdCBmbGFnIGFnYWluCiAJICovCiAJaWYgKHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfbG9nX2Z1bGxfY29tbWl0ID09IHRyYW5zLT50cmFuc2lkKSB7CisJCWJ0cmZzX3dhaXRfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOwogCQltdXRleF91bmxvY2soJmxvZ19yb290X3RyZWUtPmxvZ19tdXRleCk7CiAJCXJldCA9IC1FQUdBSU47CiAJCWdvdG8gb3V0X3dha2VfbG9nX3Jvb3Q7CkBAIC0yMDczLDYgKzIwODEsNyBAQAogCXJldCA9IGJ0cmZzX3dyaXRlX2FuZF93YWl0X21hcmtlZF9leHRlbnRzKGxvZ19yb290X3RyZWUsCiAJCQkJJmxvZ19yb290X3RyZWUtPmRpcnR5X2xvZ19wYWdlcyk7CiAJQlVHX09OKHJldCk7CisJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcyk7CiAKIAlidHJmc19zZXRfc3VwZXJfbG9nX3Jvb3QoJnJvb3QtPmZzX2luZm8tPnN1cGVyX2Zvcl9jb21taXQsCiAJCQkJbG9nX3Jvb3RfdHJlZS0+bm9kZS0+c3RhcnQpOwpAQCAtMjA5Miw5ICsyMTAxLDE0IEBACiAJICogdGhlIHJ1bm5pbmcgdHJhbnNhY3Rpb24gb3Blbiwgc28gYSBmdWxsIGNvbW1pdCBjYW4ndCBob3AKIAkgKiBpbiBhbmQgY2F1c2UgcHJvYmxlbXMgZWl0aGVyLgogCSAqLwotCXdyaXRlX2N0cmVlX3N1cGVyKHRyYW5zLCByb290LT5mc19pbmZvLT50cmVlX3Jvb3QsIDIpOworCXdyaXRlX2N0cmVlX3N1cGVyKHRyYW5zLCByb290LT5mc19pbmZvLT50cmVlX3Jvb3QsIDEpOwogCXJldCA9IDA7CiAKKwltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOworCWlmIChyb290LT5sYXN0X2xvZ19jb21taXQgPCBsb2dfdHJhbnNpZCkKKwkJcm9vdC0+bGFzdF9sb2dfY29tbWl0ID0gbG9nX3RyYW5zaWQ7CisJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOworCiBvdXRfd2FrZV9sb2dfcm9vdDoKIAlhdG9taWNfc2V0KCZsb2dfcm9vdF90cmVlLT5sb2dfY29tbWl0W2luZGV4Ml0sIDApOwogCXNtcF9tYigpOwpAQCAtMjg2Miw2ICsyODc2LDIxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBpbm9kZV9pbl9sb2coc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOworCWlmIChCVFJGU19JKGlub2RlKS0+bG9nZ2VkX3RyYW5zID09IHRyYW5zLT50cmFuc2lkICYmCisJICAgIEJUUkZTX0koaW5vZGUpLT5sYXN0X3N1Yl90cmFucyA8PSByb290LT5sYXN0X2xvZ19jb21taXQpCisJCXJldCA9IDE7CisJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKwogLyoKICAqIGhlbHBlciBmdW5jdGlvbiBhcm91bmQgYnRyZnNfbG9nX2lub2RlIHRvIG1ha2Ugc3VyZSBuZXdseSBjcmVhdGVkCiAgKiBwYXJlbnQgZGlyZWN0b3JpZXMgYWxzbyBlbmQgdXAgaW4gdGhlIGxvZy4gIEEgbWluaW1hbCBpbm9kZSBhbmQgYmFja3JlZgpAQCAtMjkwMSw2ICsyOTMwLDExIEBACiAJaWYgKHJldCkKIAkJZ290byBlbmRfbm9fdHJhbnM7CiAKKwlpZiAoaW5vZGVfaW5fbG9nKHRyYW5zLCBpbm9kZSkpIHsKKwkJcmV0ID0gQlRSRlNfTk9fTE9HX1NZTkM7CisJCWdvdG8gZW5kX25vX3RyYW5zOworCX0KKwogCXN0YXJ0X2xvZ190cmFucyh0cmFucywgcm9vdCk7CiAKIAlyZXQgPSBidHJmc19sb2dfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlLCBpbm9kZV9vbmx5KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmggYi9mcy9idHJmcy90cmVlLWxvZy5oCmluZGV4IGQwOWM3NjAuLjA3NzZlYWMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmgKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuaApAQCAtMTksNiArMTksOSBAQAogI2lmbmRlZiBfX1RSRUVfTE9HXwogI2RlZmluZSBfX1RSRUVfTE9HXwogCisvKiByZXR1cm4gdmFsdWUgZm9yIGJ0cmZzX2xvZ19kZW50cnlfc2FmZSB0aGF0IG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gbG9nIGl0IGF0IGFsbCAqLworI2RlZmluZSBCVFJGU19OT19MT0dfU1lOQyAyNTYKKwogaW50IGJ0cmZzX3N5bmNfbG9nKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CiBpbnQgYnRyZnNfZnJlZV9sb2coc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3hhdHRyLmMgYi9mcy9idHJmcy94YXR0ci5jCmluZGV4IGIwZmM5M2YuLmI2ZGQ1OTYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3hhdHRyLmMKKysrIGIvZnMvYnRyZnMveGF0dHIuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAgKiBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIGRpcmVjdGx5LgogICovCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqYnRyZnNfeGF0dHJfaGFuZGxlcnNbXSA9IHsKLSNpZmRlZiBDT05GSUdfQlRSRlNfUE9TSVhfQUNMCisjaWZkZWYgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTAogCSZidHJmc194YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXIsCiAJJmJ0cmZzX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggNDMwMDNlMC4uYjA5MDk4MCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTE1NzcsNyArMTU3Nyw4IEBACiAKIG91dF9lcnI6CiAJaWYgKHRjcF9zZXMpIHsKLQkJa2ZyZWUodGNwX3Nlcy0+aG9zdG5hbWUpOworCQlpZiAoIUlTX0VSUih0Y3Bfc2VzLT5ob3N0bmFtZSkpCisJCQlrZnJlZSh0Y3Bfc2VzLT5ob3N0bmFtZSk7CiAJCWlmICh0Y3Bfc2VzLT5zc29ja2V0KQogCQkJc29ja19yZWxlYXNlKHRjcF9zZXMtPnNzb2NrZXQpOwogCQlrZnJlZSh0Y3Bfc2VzKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggMjQwY2VmMS4uNzA3MzZlYiAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTMxNiw2ICszMTYsMTAgQEAKIHsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwogCisJLyogd2l0aCBzY3RwIHRoZXJlJ3Mgbm8gY29ubmVjdGluZyB3aXRob3V0IHNlbmRpbmcgKi8KKwlpZiAoZGxtX2NvbmZpZy5jaV9wcm90b2NvbCAhPSAwKQorCQlyZXR1cm4gMDsKKwogCWlmIChub2RlaWQgPT0gZGxtX291cl9ub2RlaWQoKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQ1NSw5ICs0NTksOSBAQAogCQkJaW50IHByaW1fbGVuLCByZXQ7CiAJCQlpbnQgYWRkcl9sZW47CiAJCQlzdHJ1Y3QgY29ubmVjdGlvbiAqbmV3X2NvbjsKLQkJCXN0cnVjdCBmaWxlICpmaWxlOwogCQkJc2N0cF9wZWVsb2ZmX2FyZ190IHBhcmc7CiAJCQlpbnQgcGFyZ2xlbiA9IHNpemVvZihwYXJnKTsKKwkJCWludCBlcnI7CiAKIAkJCS8qCiAJCQkgKiBXZSBnZXQgdGhpcyBiZWZvcmUgYW55IGRhdGEgZm9yIGFuIGFzc29jaWF0aW9uLgpAQCAtNTEyLDE5ICs1MTYsMjIgQEAKIAkJCXJldCA9IGtlcm5lbF9nZXRzb2Nrb3B0KGNvbi0+c29jaywgSVBQUk9UT19TQ1RQLAogCQkJCQkJU0NUUF9TT0NLT1BUX1BFRUxPRkYsCiAJCQkJCQkodm9pZCAqKSZwYXJnLCAmcGFyZ2xlbik7Ci0JCQlpZiAocmV0KSB7CisJCQlpZiAocmV0IDwgMCkgewogCQkJCWxvZ19wcmludCgiQ2FuJ3QgcGVlbCBvZmYgYSBzb2NrZXQgZm9yICIKLQkJCQkJICAiY29ubmVjdGlvbiAlZCB0byBub2RlICVkOiBlcnI9JWRcbiIsCisJCQkJCSAgImNvbm5lY3Rpb24gJWQgdG8gbm9kZSAlZDogZXJyPSVkIiwKIAkJCQkJICBwYXJnLmFzc29jaWQsIG5vZGVpZCwgcmV0KTsKKwkJCQlyZXR1cm47CiAJCQl9Ci0JCQlmaWxlID0gZmdldChwYXJnLnNkKTsKLQkJCW5ld19jb24tPnNvY2sgPSBTT0NLRVRfSShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCQluZXdfY29uLT5zb2NrID0gc29ja2ZkX2xvb2t1cChwYXJnLnNkLCAmZXJyKTsKKwkJCWlmICghbmV3X2Nvbi0+c29jaykgeworCQkJCWxvZ19wcmludCgic29ja2ZkX2xvb2t1cCBlcnJvciAlZCIsIGVycik7CisJCQkJcmV0dXJuOworCQkJfQogCQkJYWRkX3NvY2sobmV3X2Nvbi0+c29jaywgbmV3X2Nvbik7Ci0JCQlmcHV0KGZpbGUpOwotCQkJcHV0X3VudXNlZF9mZChwYXJnLnNkKTsKKwkJCXNvY2tmZF9wdXQobmV3X2Nvbi0+c29jayk7CiAKLQkJCWxvZ19wcmludCgiZ290IG5ldy9yZXN0YXJ0ZWQgYXNzb2NpYXRpb24gJWQgbm9kZWlkICVkIiwKLQkJCQkgKGludClzbi0+c25fYXNzb2NfY2hhbmdlLnNhY19hc3NvY19pZCwgbm9kZWlkKTsKKwkJCWxvZ19wcmludCgiY29ubmVjdGluZyB0byAlZCBzY3RwIGFzc29jaWF0aW9uICVkIiwKKwkJCQkgbm9kZWlkLCAoaW50KXNuLT5zbl9hc3NvY19jaGFuZ2Uuc2FjX2Fzc29jX2lkKTsKIAogCQkJLyogU2VuZCBhbnkgcGVuZGluZyB3cml0ZXMgKi8KIAkJCWNsZWFyX2JpdChDRl9DT05ORUNUX1BFTkRJTkcsICZuZXdfY29uLT5mbGFncyk7CkBAIC04MzcsOCArODQ0LDYgQEAKIAlpZiAoY29uLT5yZXRyaWVzKysgPiBNQVhfQ09OTkVDVF9SRVRSSUVTKQogCQlyZXR1cm47CiAKLQlsb2dfcHJpbnQoIkluaXRpYXRpbmcgYXNzb2NpYXRpb24gd2l0aCBub2RlICVkIiwgY29uLT5ub2RlaWQpOwotCiAJaWYgKG5vZGVpZF90b19hZGRyKGNvbi0+bm9kZWlkLCAoc3RydWN0IHNvY2thZGRyICopJnJlbV9hZGRyKSkgewogCQlsb2dfcHJpbnQoIm5vIGFkZHJlc3MgZm9yIG5vZGVpZCAlZCIsIGNvbi0+bm9kZWlkKTsKIAkJcmV0dXJuOwpAQCAtODU1LDExICs4NjAsMTQgQEAKIAlvdXRtZXNzYWdlLm1zZ19mbGFncyA9IE1TR19FT1I7CiAKIAlzcGluX2xvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKLQllID0gbGlzdF9lbnRyeShjb24tPndyaXRlcXVldWUubmV4dCwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksCi0JCSAgICAgICBsaXN0KTsKIAotCUJVR19PTigoc3RydWN0IGxpc3RfaGVhZCAqKSBlID09ICZjb24tPndyaXRlcXVldWUpOworCWlmIChsaXN0X2VtcHR5KCZjb24tPndyaXRlcXVldWUpKSB7CisJCXNwaW5fdW5sb2NrKCZjb24tPndyaXRlcXVldWVfbG9jayk7CisJCWxvZ19wcmludCgid3JpdGVxdWV1ZSBlbXB0eSBmb3Igbm9kZWlkICVkIiwgY29uLT5ub2RlaWQpOworCQlyZXR1cm47CisJfQogCisJZSA9IGxpc3RfZmlyc3RfZW50cnkoJmNvbi0+d3JpdGVxdWV1ZSwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksIGxpc3QpOwogCWxlbiA9IGUtPmxlbjsKIAlvZmZzZXQgPSBlLT5vZmZzZXQ7CiAJc3Bpbl91bmxvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCA3Mjc0M2QzLi43YTUyMGE4IDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC0yMzIxLDcgKzIzMjEsMTggQEAKIAogCWlmICghc2JoKQogCQlyZXR1cm4gZXJyb3I7Ci0JZXMtPnNfd3RpbWUgPSBjcHVfdG9fbGUzMihnZXRfc2Vjb25kcygpKTsKKwkvKgorCSAqIElmIHRoZSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIHJlYWQtb25seSwgZG9uJ3QgdXBkYXRlIHRoZQorCSAqIHN1cGVyYmxvY2sgd3JpdGUgdGltZS4gIFRoaXMgYXZvaWRzIHVwZGF0aW5nIHRoZSBzdXBlcmJsb2NrCisJICogd3JpdGUgdGltZSB3aGVuIHdlIGFyZSBtb3VudGluZyB0aGUgcm9vdCBmaWxlIHN5c3RlbQorCSAqIHJlYWQvb25seSBidXQgd2UgbmVlZCB0byByZXBsYXkgdGhlIGpvdXJuYWw7IGF0IHRoYXQgcG9pbnQsCisJICogZm9yIHBlb3BsZSB3aG8gYXJlIGVhc3Qgb2YgR01UIGFuZCB3aG8gbWFrZSB0aGVpciBjbG9jaworCSAqIHRpY2sgaW4gbG9jYWx0aW1lIGZvciBXaW5kb3dzIGJ1Zy1mb3ItYnVnIGNvbXBhdGliaWxpdHksCisJICogdGhlIGNsb2NrIGlzIHNldCBpbiB0aGUgZnV0dXJlLCBhbmQgdGhpcyB3aWxsIGNhdXNlIGUyZnNjaworCSAqIHRvIGNvbXBsYWluIGFuZCBmb3JjZSBhIGZ1bGwgZmlsZSBzeXN0ZW0gY2hlY2suCisJICovCisJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQorCQllcy0+c193dGltZSA9IGNwdV90b19sZTMyKGdldF9zZWNvbmRzKCkpOwogCWVzLT5zX2ZyZWVfYmxvY2tzX2NvdW50ID0gY3B1X3RvX2xlMzIoZXh0M19jb3VudF9mcmVlX2Jsb2NrcyhzYikpOwogCWVzLT5zX2ZyZWVfaW5vZGVzX2NvdW50ID0gY3B1X3RvX2xlMzIoZXh0M19jb3VudF9mcmVlX2lub2RlcyhzYikpOwogCUJVRkZFUl9UUkFDRShzYmgsICJtYXJraW5nIGRpcnR5Iik7CmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jCmluZGV4IDliOWQ2MzkuLjA1MmYyMTQgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9idHJlZS5jCisrKyBiL2ZzL2hmcy9idHJlZS5jCkBAIC01OCw2ICs1OCwxMSBAQAogCX0KIAl1bmxvY2tfbmV3X2lub2RlKHRyZWUtPmlub2RlKTsKIAorCWlmICghSEZTX0kodHJlZS0+aW5vZGUpLT5maXJzdF9ibG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGludmFsaWQgYnRyZWUgZXh0ZW50IHJlY29yZHMgKDAgc2l6ZSkuXG4iKTsKKwkJZ290byBmcmVlX2lub2RlOworCX0KKwogCW1hcHBpbmcgPSB0cmVlLT5pbm9kZS0+aV9tYXBwaW5nOwogCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCAwLCBOVUxMKTsKIAlpZiAoSVNfRVJSKHBhZ2UpKQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy93cmFwcGVyLmMgYi9mcy9oZnNwbHVzL3dyYXBwZXIuYwppbmRleCAxNzVkMDhlLi5iZWQ3OGFjOCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy93cmFwcGVyLmMKKysrIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKQEAgLTk5LDYgKzk5LDEwIEBACiAKIAlpZiAoaGZzcGx1c19nZXRfbGFzdF9zZXNzaW9uKHNiLCAmcGFydF9zdGFydCwgJnBhcnRfc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOworCWlmICgodTY0KXBhcnRfc3RhcnQgKyBwYXJ0X3NpemUgPiAweDEwMDAwMDAwMFVMTCkgeworCQlwcl9lcnIoImhmczogdm9sdW1lcyBsYXJnZXIgdGhhbiAyVEIgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXdoaWxlICgxKSB7CiAJCWJoID0gc2JfYnJlYWQ1MTIoc2IsIHBhcnRfc3RhcnQgKyBIRlNQTFVTX1ZPTEhFQURfU0VDVE9SLCB2aGRyKTsKIAkJaWYgKCFiaCkKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCAzMjA2MmMzLi43Y2IyOTg1IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0xNTM2LDYgKzE1MzYsOCBAQAogCQlvbGRfZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAogCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKKwluZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUpOworCiAJZF9kcm9wKGRlbnRyeSk7CiAJZXJyb3IgPSBORlNfUFJPVE8oZGlyKS0+bGluayhpbm9kZSwgZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCWlmIChlcnJvciA9PSAwKSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyZWN0LmMgYi9mcy9uZnMvZGlyZWN0LmMKaW5kZXggNmMzMjEwMC4uZTFkNDE1ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtNDU3LDYgKzQ1Nyw3IEBACiAJfTsKIAlzdHJ1Y3QgcnBjX3Rhc2tfc2V0dXAgdGFza19zZXR1cF9kYXRhID0gewogCQkucnBjX2NsaWVudCA9IE5GU19DTElFTlQoaW5vZGUpLAorCQkucnBjX21lc3NhZ2UgPSAmbXNnLAogCQkuY2FsbGJhY2tfb3BzID0gJm5mc193cml0ZV9kaXJlY3Rfb3BzLAogCQkud29ya3F1ZXVlID0gbmZzaW9kX3dvcmtxdWV1ZSwKIAkJLmZsYWdzID0gUlBDX1RBU0tfQVNZTkMsCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IGVkN2MyNjkuLmZmMzc0NTQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC03MiwxMiArNzIsMTcgQEAKIC8qIFByZXZlbnQgbGVha3Mgb2YgTkZTdjQgZXJyb3JzIGludG8gdXNlcmxhbmQgKi8KIHN0YXRpYyBpbnQgbmZzNF9tYXBfZXJyb3JzKGludCBlcnIpCiB7Ci0JaWYgKGVyciA8IC0xMDAwKSB7CisJaWYgKGVyciA+PSAtMTAwMCkKKwkJcmV0dXJuIGVycjsKKwlzd2l0Y2ggKGVycikgeworCWNhc2UgLU5GUzRFUlJfUkVTT1VSQ0U6CisJCXJldHVybiAtRVJFTU9URUlPOworCWRlZmF1bHQ6CiAJCWRwcmludGsoIiVzIGNvdWxkIG5vdCBoYW5kbGUgTkZTdjQgZXJyb3IgJWRcbiIsCiAJCQkJX19mdW5jX18sIC1lcnIpOwotCQlyZXR1cm4gLUVJTzsKKwkJYnJlYWs7CiAJfQotCXJldHVybiBlcnI7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qCkBAIC0zMDYwLDkgKzMwNjUsNiBAQAogCWlmICh0aW1lX2JlZm9yZShjbHAtPmNsX2xhc3RfcmVuZXdhbCx0aW1lc3RhbXApKQogCQljbHAtPmNsX2xhc3RfcmVuZXdhbCA9IHRpbWVzdGFtcDsKIAlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKLQlkcHJpbnRrKCIlcyBjYWxsaW5nIHB1dF9ycGNjcmVkIG9uIHJwY19jcmVkICVwXG4iLCBfX2Z1bmNfXywKLQkJCQl0YXNrLT50a19tc2cucnBjX2NyZWQpOwotCXB1dF9ycGNjcmVkKHRhc2stPnRrX21zZy5ycGNfY3JlZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIG5mczRfcmVuZXdfb3BzID0gewpAQCAtNDg3Nyw3ICs0ODc5LDYgQEAKIAluZnM0MV9zZXF1ZW5jZV9mcmVlX3Nsb3QoY2xwLCB0YXNrLT50a19tc2cucnBjX3Jlc3ApOwogCWRwcmludGsoIiVzIHJwY19jcmVkICVwXG4iLCBfX2Z1bmNfXywgdGFzay0+dGtfbXNnLnJwY19jcmVkKTsKIAotCXB1dF9ycGNjcmVkKHRhc2stPnRrX21zZy5ycGNfY3JlZCk7CiAJa2ZyZWUodGFzay0+dGtfbXNnLnJwY19hcmdwKTsKIAlrZnJlZSh0YXNrLT50a19tc2cucnBjX3Jlc3ApOwogCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCA4M2FkNDdjLi4yMGI0ZTMwIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTU2ODEsNyArNTY4MSw2IEBACiAJeyBORlM0RVJSX1NFUlZFUkZBVUxULAktRVNFUlZFUkZBVUxUCX0sCiAJeyBORlM0RVJSX0JBRFRZUEUsCS1FQkFEVFlQRQl9LAogCXsgTkZTNEVSUl9MT0NLRUQsCS1FQUdBSU4JCX0sCi0JeyBORlM0RVJSX1JFU09VUkNFLAktRVJFTU9URUlPCX0sCiAJeyBORlM0RVJSX1NZTUxJTkssCS1FTE9PUAkJfSwKIAl7IE5GUzRFUlJfT1BfSUxMRUdBTCwJLUVPUE5PVFNVUFAJfSwKIAl7IE5GUzRFUlJfREVBRExPQ0ssCS1FREVBRExLCX0sCmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IDZkYWJmNmYuLjkwYmU1NTEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC0xMjUzLDYgKzEyNTMsNyBAQAogCQkJZGVmYXVsdDoKIAkJCQlkZnByaW50ayhNT1VOVCwgIk5GUzogICB1bnJlY29nbml6ZWQgIgogCQkJCQkJInRyYW5zcG9ydCBwcm90b2NvbFxuIik7CisJCQkJa2ZyZWUoc3RyaW5nKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTg0OCw4ICsxODQ5LDggQEAKIAkgICAgZGF0YS0+dGltZW8gIT0gKDEwVSAqIG5mc3MtPmNsaWVudC0+Y2xfdGltZW91dC0+dG9faW5pdHZhbCAvIEhaKSB8fAogCSAgICBkYXRhLT5uZnNfc2VydmVyLnBvcnQgIT0gbmZzcy0+cG9ydCB8fAogCSAgICBkYXRhLT5uZnNfc2VydmVyLmFkZHJsZW4gIT0gbmZzcy0+bmZzX2NsaWVudC0+Y2xfYWRkcmxlbiB8fAotCSAgICAhcnBjX2NtcF9hZGRyKCZkYXRhLT5uZnNfc2VydmVyLmFkZHJlc3MsCi0JCSAgICAmbmZzcy0+bmZzX2NsaWVudC0+Y2xfYWRkcikpCisJICAgICFycGNfY21wX2FkZHIoKHN0cnVjdCBzb2NrYWRkciAqKSZkYXRhLT5uZnNfc2VydmVyLmFkZHJlc3MsCisJCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmZzcy0+bmZzX2NsaWVudC0+Y2xfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMgYi9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMKaW5kZXggODI4YTg4OS4uN2U1NGU1MiAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2Rub3RpZnkvZG5vdGlmeS5jCisrKyBiL2ZzL25vdGlmeS9kbm90aWZ5L2Rub3RpZnkuYwpAQCAtOTEsNiArOTEsNyBAQAogCXN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqZG47CiAJc3RydWN0IGRub3RpZnlfc3RydWN0ICoqcHJldjsKIAlzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd247CisJX191MzIgdGVzdF9tYXNrID0gZXZlbnQtPm1hc2sgJiB+RlNfRVZFTlRfT05fQ0hJTEQ7CiAKIAl0b190ZWxsID0gZXZlbnQtPnRvX3RlbGw7CiAKQEAgLTEwNiw3ICsxMDcsNyBAQAogCXNwaW5fbG9jaygmZW50cnktPmxvY2spOwogCXByZXYgPSAmZG5lbnRyeS0+ZG47CiAJd2hpbGUgKChkbiA9ICpwcmV2KSAhPSBOVUxMKSB7Ci0JCWlmICgoZG4tPmRuX21hc2sgJiBldmVudC0+bWFzaykgPT0gMCkgeworCQlpZiAoKGRuLT5kbl9tYXNrICYgdGVzdF9tYXNrKSA9PSAwKSB7CiAJCQlwcmV2ID0gJmRuLT5kbl9uZXh0OwogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMgYi9mcy9ub3RpZnkvaW5vZGVfbWFyay5jCmluZGV4IGM4YTA3YzYuLjMxNjVkODUgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMKKysrIGIvZnMvbm90aWZ5L2lub2RlX21hcmsuYwpAQCAtMzI0LDExICszMjQsMTEgQEAKIAlzcGluX2xvY2soJmdyb3VwLT5tYXJrX2xvY2spOwogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAKLQllbnRyeS0+Z3JvdXAgPSBncm91cDsKLQllbnRyeS0+aW5vZGUgPSBpbm9kZTsKLQogCWxlbnRyeSA9IGZzbm90aWZ5X2ZpbmRfbWFya19lbnRyeShncm91cCwgaW5vZGUpOwogCWlmICghbGVudHJ5KSB7CisJCWVudHJ5LT5ncm91cCA9IGdyb3VwOworCQllbnRyeS0+aW5vZGUgPSBpbm9kZTsKKwogCQlobGlzdF9hZGRfaGVhZCgmZW50cnktPmlfbGlzdCwgJmlub2RlLT5pX2Zzbm90aWZ5X21hcmtfZW50cmllcyk7CiAJCWxpc3RfYWRkKCZlbnRyeS0+Z19saXN0LCAmZ3JvdXAtPm1hcmtfZW50cmllcyk7CiAKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYyBiL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYwppbmRleCAzODE2ZDU3Li5iOGJmNTNiIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvbm90aWZpY2F0aW9uLmMKKysrIGIvZnMvbm90aWZ5L25vdGlmaWNhdGlvbi5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJCS8qIHJlbWVtYmVyLCBhZnRlciBvbGQgd2FzIHB1dCBvbiB0aGUgd2FpdF9xIHdlIGFyZW4ndAogCQkJICogYWxsb3dlZCB0byBsb29rIGF0IHRoZSBpbm9kZSBhbnkgbW9yZSwgb25seSB0aGluZwogCQkJICogbGVmdCB0byBjaGVjayB3YXMgaWYgdGhlIGZpbGVfbmFtZSBpcyB0aGUgc2FtZSAqLwotCQkJaWYgKG9sZC0+bmFtZV9sZW4gJiYKKwkJCWlmICghb2xkLT5uYW1lX2xlbiB8fAogCQkJICAgICFzdHJjbXAob2xkLT5maWxlX25hbWUsIG5ldy0+ZmlsZV9uYW1lKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IGYzOGZlZTAuLjdiNjg1ZTEgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTI0OCwxMSArMjQ4LDE5IEBACiAJCXBhcnRfc3RhdF9yZWFkKHAsIG1lcmdlc1tXUklURV0pLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXBhcnRfc3RhdF9yZWFkKHAsIHNlY3RvcnNbV1JJVEVdKSwKIAkJamlmZmllc190b19tc2VjcyhwYXJ0X3N0YXRfcmVhZChwLCB0aWNrc1tXUklURV0pKSwKLQkJcC0+aW5fZmxpZ2h0LAorCQlwYXJ0X2luX2ZsaWdodChwKSwKIAkJamlmZmllc190b19tc2VjcyhwYXJ0X3N0YXRfcmVhZChwLCBpb190aWNrcykpLAogCQlqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKHAsIHRpbWVfaW5fcXVldWUpKSk7CiB9CiAKK3NzaXplX3QgcGFydF9pbmZsaWdodF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGhkX3N0cnVjdCAqcCA9IGRldl90b19wYXJ0KGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlOHUgJTh1XG4iLCBwLT5pbl9mbGlnaHRbMF0sIHAtPmluX2ZsaWdodFsxXSk7Cit9CisKICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1QKIHNzaXplX3QgcGFydF9mYWlsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTI4MSw2ICsyODksNyBAQAogc3RhdGljIERFVklDRV9BVFRSKHNpemUsIFNfSVJVR08sIHBhcnRfc2l6ZV9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihhbGlnbm1lbnRfb2Zmc2V0LCBTX0lSVUdPLCBwYXJ0X2FsaWdubWVudF9vZmZzZXRfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhdCwgU19JUlVHTywgcGFydF9zdGF0X3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGluZmxpZ2h0LCBTX0lSVUdPLCBwYXJ0X2luZmxpZ2h0X3Nob3csIE5VTEwpOwogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2ZhaWwgPQogCV9fQVRUUihtYWtlLWl0LWZhaWwsIFNfSVJVR098U19JV1VTUiwgcGFydF9mYWlsX3Nob3csIHBhcnRfZmFpbF9zdG9yZSk7CkBAIC0yOTIsNiArMzAxLDcgQEAKIAkmZGV2X2F0dHJfc2l6ZS5hdHRyLAogCSZkZXZfYXR0cl9hbGlnbm1lbnRfb2Zmc2V0LmF0dHIsCiAJJmRldl9hdHRyX3N0YXQuYXR0ciwKKwkmZGV2X2F0dHJfaW5mbGlnaHQuYXR0ciwKICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1QKIAkmZGV2X2F0dHJfZmFpbC5hdHRyLAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmMKaW5kZXggNTJjNDE1MS4uYWUxN2QwMiAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCisrKyBiL2ZzL3BpcGUuYwpAQCAtNzc3LDM2ICs3NzcsNTUgQEAKIHN0YXRpYyBpbnQKIHBpcGVfcmVhZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCS8qIFdlIGNvdWxkIGhhdmUgcGVyaGFwcyB1c2VkIGF0b21pY190LCBidXQgdGhpcyBhbmQgZnJpZW5kcwotCSAgIGJlbG93IGFyZSB0aGUgb25seSBwbGFjZXMuICBTbyBpdCBkb2Vzbid0IHNlZW0gd29ydGh3aGlsZS4gICovCisJaW50IHJldCA9IC1FTk9FTlQ7CisKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOworCisJaWYgKGlub2RlLT5pX3BpcGUpIHsKKwkJcmV0ID0gMDsKKwkJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOworCX0KKwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAogcGlwZV93cml0ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogeworCWludCByZXQgPSAtRU5PRU5UOworCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKworCWlmIChpbm9kZS0+aV9waXBlKSB7CisJCXJldCA9IDA7CisJCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKwl9CisKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKIHBpcGVfcmR3cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogeworCWludCByZXQgPSAtRU5PRU5UOworCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7Ci0JaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQotCQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisKKwlpZiAoaW5vZGUtPmlfcGlwZSkgeworCQlyZXQgPSAwOworCQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkKKwkJCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKKwkJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQorCQkJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCX0KKwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvbWVtaW5mby5jIGIvZnMvcHJvYy9tZW1pbmZvLmMKaW5kZXggYzdiZmY0Zi4uYTY1MjM5YyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9tZW1pbmZvLmMKKysrIGIvZnMvcHJvYy9tZW1pbmZvLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJIlZtYWxsb2NVc2VkOiAgICAlOGx1IGtCXG4iCiAJCSJWbWFsbG9jQ2h1bms6ICAgJThsdSBrQlxuIgogI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRQotCQkiSGFyZHdhcmVDb3JydXB0ZWQ6ICU4bHUga0JcbiIKKwkJIkhhcmR3YXJlQ29ycnVwdGVkOiAlNWx1IGtCXG4iCiAjZW5kaWYKIAkJLAogCQlLKGkudG90YWxyYW0pLApkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZGlyLmMgYi9mcy9zeXNmcy9kaXIuYwppbmRleCAwMDUwZmM0Li41ZmFkNDg5IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9kaXIuYworKysgYi9mcy9zeXNmcy9kaXIuYwpAQCAtODk0LDcgKzg5NCw4IEBACiAKIAltdXRleF9sb2NrKCZzeXNmc19yZW5hbWVfbXV0ZXgpOwogCUJVR19PTighc2QtPnNfcGFyZW50KTsKLQluZXdfcGFyZW50X3NkID0gbmV3X3BhcmVudF9rb2JqLT5zZCA/IG5ld19wYXJlbnRfa29iai0+c2QgOiAmc3lzZnNfcm9vdDsKKwluZXdfcGFyZW50X3NkID0gKG5ld19wYXJlbnRfa29iaiAmJiBuZXdfcGFyZW50X2tvYmotPnNkKSA/CisJCW5ld19wYXJlbnRfa29iai0+c2QgOiAmc3lzZnNfcm9vdDsKIAogCWVycm9yID0gMDsKIAlpZiAoc2QtPnNfcGFyZW50ID09IG5ld19wYXJlbnRfc2QpCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9maWxlLmMgYi9mcy9zeXNmcy9maWxlLmMKaW5kZXggNTYxYTljMC4uZjVlYTQ2OCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZmlsZS5jCisrKyBiL2ZzL3N5c2ZzL2ZpbGUuYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50ICpvZCwgKm5ld19vZCA9IE5VTEw7CiAKICByZXRyeToKLQlzcGluX2xvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fbG9ja19pcnEoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOwogCiAJaWYgKCFzZC0+c19hdHRyLm9wZW4gJiYgbmV3X29kKSB7CiAJCXNkLT5zX2F0dHIub3BlbiA9IG5ld19vZDsKQEAgLTI4MSw3ICsyODEsNyBAQAogCQlsaXN0X2FkZF90YWlsKCZidWZmZXItPmxpc3QsICZvZC0+YnVmZmVycyk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CiAKIAlpZiAob2QpIHsKIAkJa2ZyZWUobmV3X29kKTsKQEAgLTMxNSw4ICszMTUsOSBAQAogCQkJCSAgc3RydWN0IHN5c2ZzX2J1ZmZlciAqYnVmZmVyKQogewogCXN0cnVjdCBzeXNmc19vcGVuX2RpcmVudCAqb2QgPSBzZC0+c19hdHRyLm9wZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2ssIGZsYWdzKTsKIAogCWxpc3RfZGVsKCZidWZmZXItPmxpc3QpOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZvZC0+cmVmY250KSkKQEAgLTMyNCw3ICszMjUsNyBAQAogCWVsc2UKIAkJb2QgPSBOVUxMOwogCi0Jc3Bpbl91bmxvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2ssIGZsYWdzKTsKIAogCWtmcmVlKG9kKTsKIH0KQEAgLTQ1Niw4ICs0NTcsOSBAQAogdm9pZCBzeXNmc19ub3RpZnlfZGlyZW50KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQogewogCXN0cnVjdCBzeXNmc19vcGVuX2RpcmVudCAqb2Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2ssIGZsYWdzKTsKIAogCW9kID0gc2QtPnNfYXR0ci5vcGVuOwogCWlmIChvZCkgewpAQCAtNDY1LDcgKzQ2Nyw3IEBACiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmb2QtPnBvbGwpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeXNmc19ub3RpZnlfZGlyZW50KTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKaW5kZXggOWU0MWY5MS4uM2Q0YTBjOCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCkBAIC04MCw3ICs4MCw3IEBACiAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiAtRVJPRlM7Ci0JaWYgKCFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCisJaWYgKG9wICE9IFFfWFFVT1RBUk0gJiYgIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCmluZGV4IDRlNDI3NmI5Li41ZDFhM2I5IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCkBAIC04NzYsNyArODc2LDYgQEAKIAkJaXAtPmlfZ2RxdW90ID0gTlVMTDsKIAl9CiAJeGZzX2lwdXQoaXAsIFhGU19JTE9DS19FWENMKTsKLQlJUkVMRShpcCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMgYi9mcy94ZnMveGZzX2lhbGxvYy5jCmluZGV4IGFiNjRmM2UuLjA3ODU3OTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMKKysrIGIvZnMveGZzL3hmc19pYWxsb2MuYwpAQCAtODgwLDYgKzg4MCw3IEBACiAJCQkJICogTm90IGluIHJhbmdlIC0gc2F2ZSBsYXN0IHNlYXJjaAogCQkJCSAqIGxvY2F0aW9uIGFuZCBhbGxvY2F0ZSBhIG5ldyBpbm9kZQogCQkJCSAqLworCQkJCXhmc19idHJlZV9kZWxfY3Vyc29yKHRjdXIsIFhGU19CVFJFRV9OT0VSUk9SKTsKIAkJCQlwYWctPnBhZ2xfbGVmdHJlYyA9IHRyZWMuaXJfc3RhcnRpbm87CiAJCQkJcGFnLT5wYWdsX3JpZ2h0cmVjID0gcmVjLmlyX3N0YXJ0aW5vOwogCQkJCXBhZy0+cGFnbF9wYWdpbm8gPSBwYWdpbm87CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDNmMzg0ZDQuLjFmZWVkNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0zNjQsNiArMzY0LDcgQEAKIHVuaWZkZWYteSArPSB2aWRlb2RldjIuaAogdW5pZmRlZi15ICs9IHZpZGVvZGV2LmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fY29uZmlnLmgKK3VuaWZkZWYteSArPSB2aXJ0aW9faWRzLmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fYmxrLmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fbmV0LmgKIHVuaWZkZWYteSArPSB2aXJ0aW9fOXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggMjUxMTkwNC4uMjIxY2VjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xMTcyLDExICsxMTcyLDcgQEAKIH0KIAogc3RydWN0IHdvcmtfc3RydWN0Owotc3RydWN0IGRlbGF5ZWRfd29yazsKIGludCBrYmxvY2tkX3NjaGVkdWxlX3dvcmsoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1pbnQga2Jsb2NrZF9zY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkJCXN0cnVjdCBkZWxheWVkX3dvcmsgKndvcmssCi0JCQkJIAl1bnNpZ25lZCBsb25nIGRlbGF5KTsKIAogI2RlZmluZSBNT0RVTEVfQUxJQVNfQkxPQ0tERVYobWFqb3IsbWlub3IpIFwKIAlNT0RVTEVfQUxJQVMoImJsb2NrLW1ham9yLSIgX19zdHJpbmdpZnkobWFqb3IpICItIiBfX3N0cmluZ2lmeShtaW5vcikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaCBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCmluZGV4IDQ0NzE3ZWIuLjc5YTIzNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCkBAIC0yOTEsOCArMjkxLDE1IEBACiBpbnQgY3B1ZnJlcV9nZXRfcG9saWN5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgY3B1KTsKIGludCBjcHVmcmVxX3VwZGF0ZV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSk7CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIC8qIHF1ZXJ5IHRoZSBjdXJyZW50IENQVSBmcmVxdWVuY3kgKGluIGtIeikuIElmIHplcm8sIGNwdWZyZXEgY291bGRuJ3QgZGV0ZWN0IGl0ICovCiB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSk7CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAvKiBxdWVyeSB0aGUgbGFzdCBrbm93biBDUFUgZnJlcSAoaW4ga0h6KS4gSWYgemVybywgY3B1ZnJlcSBjb3VsZG4ndCBkZXRlY3QgaXQgKi8KICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IGFjYTMxYmYuLjJlYTNlNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMTI0LDcgKzEyNCw5IEBACiAJc3RydWN0IGJ1c190eXBlCQkqYnVzOwogCiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwotCWNvbnN0IGNoYXIgCQkqbW9kX25hbWU7CS8qIHVzZWQgZm9yIGJ1aWx0LWluIG1vZHVsZXMgKi8KKwljb25zdCBjaGFyCQkqbW9kX25hbWU7CS8qIHVzZWQgZm9yIGJ1aWx0LWluIG1vZHVsZXMgKi8KKworCWJvb2wgc3VwcHJlc3NfYmluZF9hdHRyczsJLyogZGlzYWJsZXMgYmluZC91bmJpbmQgdmlhIHN5c2ZzICovCiAKIAlpbnQgKCpwcm9iZSkgKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJaW50ICgqcmVtb3ZlKSAoc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaCBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaAppbmRleCA3YmVhYTIxLi4yOTdkZjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCkBAIC05OCw3ICs5OCw3IEBACiAJaW50IG1ha2VfaXRfZmFpbDsKICNlbmRpZgogCXVuc2lnbmVkIGxvbmcgc3RhbXA7Ci0JaW50IGluX2ZsaWdodDsKKwlpbnQgaW5fZmxpZ2h0WzJdOwogI2lmZGVmCUNPTkZJR19TTVAKIAlzdHJ1Y3QgZGlza19zdGF0cyAqZGtzdGF0czsKICNlbHNlCkBAIC0zMjIsMTggKzMyMiwyMyBAQAogI2RlZmluZSBwYXJ0X3N0YXRfc3ViKGNwdSwgZ2VuZGlza3AsIGZpZWxkLCBzdWJuZCkJCQlcCiAJcGFydF9zdGF0X2FkZChjcHUsIGdlbmRpc2twLCBmaWVsZCwgLXN1Ym5kKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFydF9pbmNfaW5fZmxpZ2h0KHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgcGFydF9pbmNfaW5fZmxpZ2h0KHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQsIGludCBydykKIHsKLQlwYXJ0LT5pbl9mbGlnaHQrKzsKKwlwYXJ0LT5pbl9mbGlnaHRbcnddKys7CiAJaWYgKHBhcnQtPnBhcnRubykKLQkJcGFydF90b19kaXNrKHBhcnQpLT5wYXJ0MC5pbl9mbGlnaHQrKzsKKwkJcGFydF90b19kaXNrKHBhcnQpLT5wYXJ0MC5pbl9mbGlnaHRbcnddKys7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwYXJ0X2RlY19pbl9mbGlnaHQoc3RydWN0IGhkX3N0cnVjdCAqcGFydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYXJ0X2RlY19pbl9mbGlnaHQoc3RydWN0IGhkX3N0cnVjdCAqcGFydCwgaW50IHJ3KQogewotCXBhcnQtPmluX2ZsaWdodC0tOworCXBhcnQtPmluX2ZsaWdodFtyd10tLTsKIAlpZiAocGFydC0+cGFydG5vKQotCQlwYXJ0X3RvX2Rpc2socGFydCktPnBhcnQwLmluX2ZsaWdodC0tOworCQlwYXJ0X3RvX2Rpc2socGFydCktPnBhcnQwLmluX2ZsaWdodFtyd10tLTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFydF9pbl9mbGlnaHQoc3RydWN0IGhkX3N0cnVjdCAqcGFydCkKK3sKKwlyZXR1cm4gcGFydC0+aW5fZmxpZ2h0WzBdICsgcGFydC0+aW5fZmxpZ2h0WzFdOwogfQogCiAvKiBibG9jay9ibGstY29yZS5jICovCkBAIC01NDYsNiArNTUxLDggQEAKIAkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogZXh0ZXJuIHNzaXplX3QgcGFydF9zdGF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitleHRlcm4gc3NpemVfdCBwYXJ0X2luZmxpZ2h0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiAjaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUCiBleHRlcm4gc3NpemVfdCBwYXJ0X2ZhaWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IGQzY2QyM2YuLmY0ZTMxODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtNjU5LDYgKzY1OSwxMiBAQAogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCisjaWZuZGVmIF9fRVhQT1JURURfSEVBREVSU19fCisjaWZuZGVmIF9fS0VSTkVMX18KKyN3YXJuaW5nIEF0dGVtcHQgdG8gdXNlIGtlcm5lbCBoZWFkZXJzIGZyb20gdXNlciBzcGFjZSwgc2VlIGh0dHA6Ly9rZXJuZWxuZXdiaWVzLm9yZy9LZXJuZWxIZWFkZXJzCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fRVhQT1JURURfSEVBREVSU19fICovCisKICNkZWZpbmUgU0lfTE9BRF9TSElGVAkxNgogc3RydWN0IHN5c2luZm8gewogCWxvbmcgdXB0aW1lOwkJCS8qIFNlY29uZHMgc2luY2UgYm9vdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCmluZGV4IDY1NDdjM2MuLjgyYTkxMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKQEAgLTM3LDcgKzM3LDYgQEAKIHR5cGVkZWYgaW50ICgqcGFyYW1fZ2V0X2ZuKShjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKIAogLyogRmxhZyBiaXRzIGZvciBrZXJuZWxfcGFyYW0uZmxhZ3MgKi8KLSNkZWZpbmUgS1BBUkFNX0tNQUxMT0NFRAkxCiAjZGVmaW5lIEtQQVJBTV9JU0JPT0wJCTIKIAogc3RydWN0IGtlcm5lbF9wYXJhbSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA5NDk1OGMxLi44MTJhNWYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTU1Nyw3ICs1NTcsNyBAQAogICoJQ2FsbGJhY2sgdXNlcyB3aGVuIHRoZSB0cmFuc21pdHRlciBoYXMgbm90IG1hZGUgYW55IHByb2dyZXNzCiAgKglmb3IgZGV2LT53YXRjaGRvZyB0aWNrcy4KICAqCi0gKiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogKCpnZXRfc3RhdHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworICogc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqICgqbmRvX2dldF9zdGF0cykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAgKglDYWxsZWQgd2hlbiBhIHVzZXIgd2FudHMgdG8gZ2V0IHRoZSBuZXR3b3JrIGRldmljZSB1c2FnZQogICoJc3RhdGlzdGljcy4gSWYgbm90IGRlZmluZWQsIHRoZSBjb3VudGVycyBpbiBkZXYtPnN0YXRzIHdpbGwKICAqCWJlIHVzZWQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGRhMWZkYTguLmIwZjBmMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0zNzksOSArMzc5LDYgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERQkweDQzOGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX1NBVEEJMHg0MzkwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9JREUJMHg0MzljCi0vKiBBTUQgU0IgQ2hpcHNldCAqLwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9JREUJIDB4NzgwYwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TQVRBX0lERSAweDc4MDAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZMU0kJCTB4MTAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZMU0lfODJDNTkyCTB4MDAwNQpAQCAtNDg1LDYgKzQ4Miw5IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fVjJfT05FX1BPUlRfUlZYX09ORV9QT1JUX01ETV9QQ0lFIDB4MDM2MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0ZPVVJfUE9SVF9NT0RFTAkweDI1MgogCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfSUJNCQkweDEwMTQKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9JQk1fU0FUVVJOX1NFUklBTF9PTkVfUE9SVAkweDAzZDQKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1VOSVNZUwkJMHgxMDE4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU5JU1lTX0RNQV9ESVJFQ1RPUiAweDAwMUMKIApAQCAtNTUzLDkgKzU1MywxMCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfVURDICAgIDB4MjA5NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfVU9DICAgIDB4MjA5NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSURFICAgIDB4MjA5QQotCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xYX1ZJREVPICAweDIwODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTFhfQUVTICAgIDB4MjA4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX0lERQkJMHg3ODBjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUJMHg3ODAwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UUklERU5UCQkweDEwMjMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9EWAkweDIwMDAKQEAgLTc3Niw2ICs3NzcsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1g1MTUJCTB4ODAzNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMTIJCTB4ODAzOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMTJfRk0JMHg4MDNiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWElPMjAwMEEJMHg4MjMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTEzMAkJMHhhYzEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTAzMQkJMHhhYzEzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTEzMQkJMHhhYzE1CkBAIC0yMTYxLDYgKzIxNjMsMTAgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJNzQyMF8zICAgICAgMHg3MDBECiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSTczMDBfMyAgICAgIDB4NzAwRQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0k3ODAwXzMgICAgICAweDcwMEYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTczMDAgICAgICAgMHg3MDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3NDIwICAgICAgIDB4NzAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzUwMCAgICAgICAweDcwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc4MDAgICAgICAgMHg3MDEzCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QREMJCTB4MTVlOQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKaW5kZXggOTMxMTUwNS4uYTNiYWViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcmN0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJjdGwuaApAQCAtODgsNiArODgsMTggQEAKICNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFCQkzMQogI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRQkJMzIKIAorLyoKKyAqIFNldCBlYXJseS9sYXRlIGtpbGwgbW9kZSBmb3IgaHdwb2lzb24gbWVtb3J5IGNvcnJ1cHRpb24uCisgKiBUaGlzIGluZmx1ZW5jZXMgd2hlbiB0aGUgcHJvY2VzcyBnZXRzIGtpbGxlZCBvbiBhIG1lbW9yeSBjb3JydXB0aW9uLgorICovCiAjZGVmaW5lIFBSX01DRV9LSUxMCTMzCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9DTEVBUiAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX1NFVCAgICAgMQorCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9MQVRFICAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX0VBUkxZICAgMQorIyBkZWZpbmUgUFJfTUNFX0tJTExfREVGQVVMVCAyCisKKyNkZWZpbmUgUFJfTUNFX0tJTExfR0VUIDM0CiAKICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAppbmRleCA0NmU5YWIzLi45NjQyYzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaApAQCAtNzYsMTEgKzc2LDcgQEAKIAogZXh0ZXJuIHZvaWQgY2FsbF9yY3Vfc2NoZWQoc3RydWN0IHJjdV9oZWFkICpoZWFkLAogCQkJICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpCi17Ci0Jc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKCk7Ci19CitleHRlcm4gdm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfcmN1X2JoX2V4cGVkaXRlZCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggNDg5MDE5ZS4uYjg1MDg4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC02Miw3ICs2Miw3IEBACiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlJDSFIKIGV4dGVybiBjaGFyICogc3RycmNocihjb25zdCBjaGFyICosaW50KTsKICNlbmRpZgotZXh0ZXJuIGNoYXIgKiBzdHJzdHJpcChjaGFyICopOworZXh0ZXJuIGNoYXIgKiBfX211c3RfY2hlY2sgc3Ryc3RyaXAoY2hhciAqKTsKICNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSU1RSCiBleHRlcm4gY2hhciAqIHN0cnN0cihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCmluZGV4IGZjMGJmM2UuLjU3ZTYzNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKQEAgLTEyOSw3ICsxMjksNyBAQAogCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCiAJCQkJfCAwKlNEX0JBTEFOQ0VfV0FLRQkJCVwKIAkJCQl8IDEqU0RfV0FLRV9BRkZJTkUJCQlcCi0JCQkJfCAxKlNEX1BSRUZFUl9MT0NBTAkJCVwKKwkJCQl8IDAqU0RfUFJFRkVSX0xPQ0FMCQkJXAogCQkJCXwgMCpTRF9TSEFSRV9DUFVQT1dFUgkJCVwKIAkJCQl8IDEqU0RfU0hBUkVfUEtHX1JFU09VUkNFUwkJXAogCQkJCXwgMCpTRF9TRVJJQUxJWkUJCQlcCkBAIC0xNjIsNyArMTYyLDcgQEAKIAkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAogCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCiAJCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAotCQkJCXwgMSpTRF9QUkVGRVJfTE9DQUwJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9MT0NBTAkJCVwKIAkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCiAJCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKIAkJCQl8IDAqU0RfU0VSSUFMSVpFCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmgKaW5kZXggYzEzNGRkMS4uMDkwNzdmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oCkBAIC03LDcgKzcsNyBAQAogCiAvKgogICogVHJhY2Ugc2VxdWVuY2VzIGFyZSB1c2VkIHRvIGFsbG93IGEgZnVuY3Rpb24gdG8gY2FsbCBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucwotICogdG8gY3JlYXRlIGEgc3RyaW5nIG9mIGRhdGEgdG8gdXNlICh1cCB0byBhIG1heCBvZiBQQUdFX1NJWkUuCisgKiB0byBjcmVhdGUgYSBzdHJpbmcgb2YgZGF0YSB0byB1c2UgKHVwIHRvIGEgbWF4IG9mIFBBR0VfU0laRSkuCiAgKi8KIAogc3RydWN0IHRyYWNlX3NlcSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaAppbmRleCBlYTcyMjZhLi4wOTVlMTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fOVBfSAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIHZpcnRpbyBjaGFubmVscyBwZXIgcGFydGl0aW9uICgxIGZvciBub3cpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKaW5kZXggMDlkNzMwMC4uMTQxOGYwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT19CQUxMT09OX0gKIC8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAvKiBUaGUgZmVhdHVyZSBiaXRtYXAgZm9yIHZpcnRpbyBiYWxsb29uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCmluZGV4IDE1Y2I2NjYuLmZkMjk0YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCkBAIC0zLDYgKzMsNyBAQAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogLyogRmVhdHVyZSBiaXRzICovCkBAIC0xMywxMSArMTQsOCBAQAogI2RlZmluZSBWSVJUSU9fQkxLX0ZfUk8JCTUJLyogRGlzayBpcyByZWFkLW9ubHkgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0JMS19TSVpFCTYJLyogQmxvY2sgc2l6ZSBvZiBkaXNrIGlzIGF2YWlsYWJsZSovCiAjZGVmaW5lIFZJUlRJT19CTEtfRl9TQ1NJCTcJLyogU3VwcG9ydHMgc2NzaSBjb21tYW5kIHBhc3N0aHJ1ICovCi0jZGVmaW5lIFZJUlRJT19CTEtfRl9JREVOVElGWQk4CS8qIEFUQSBJREVOVElGWSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0ZMVVNICTkJLyogQ2FjaGUgZmx1c2ggY29tbWFuZCBzdXBwb3J0ICovCiAKLSNkZWZpbmUgVklSVElPX0JMS19JRF9CWVRFUwkoc2l6ZW9mKF9fdTE2WzI1Nl0pKQkvKiBJREVOVElGWSBEQVRBICovCi0KIHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZyB7CiAJLyogVGhlIGNhcGFjaXR5IChpbiA1MTItYnl0ZSBzZWN0b3JzKS4gKi8KIAlfX3U2NCBjYXBhY2l0eTsKQEAgLTMzLDcgKzMxLDYgQEAKIAl9IGdlb21ldHJ5OwogCS8qIGJsb2NrIHNpemUgb2YgZGV2aWNlIChpZiBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUpICovCiAJX191MzIgYmxrX3NpemU7Ci0JX191OCBpZGVudGlmeVtWSVJUSU9fQkxLX0lEX0JZVEVTXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKaW5kZXggYjVmNTE5OC4uZmU4ODUxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX0xJTlVYX1ZJUlRJT19DT05TT0xFX0gKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT19DT05TT0xFX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAvKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KICAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCmluZGV4IDFmNDE3MzQuLjA4NWU0MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCkBAIC0zLDYgKzMsNyBAQAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ybmcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCmluZGV4IDQ4MTIxYzMuLmM0ZDVkZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfVklSVElPX1JOR19ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fUk5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDdlZjBjN2IuLmNmMjRjMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjA3LDYgKzIwNyw3IEBACiAKIGV4dGVybiB2b2lkIGZsdXNoX3dvcmtxdWV1ZShzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOwogZXh0ZXJuIHZvaWQgZmx1c2hfc2NoZWR1bGVkX3dvcmsodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqd29yayk7CiAKIGV4dGVybiBpbnQgc2NoZWR1bGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogZXh0ZXJuIGludCBzY2hlZHVsZV93b3JrX29uKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaCBiL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCmluZGV4IGI2M2I4MGYuLmY5M2FkOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCkBAIC0xMzAsMTEgKzEzMCwxMSBAQAogCV9fdTE2CQkJdHdfbnVtOwogCWttZW1jaGVja19iaXRmaWVsZF9iZWdpbihmbGFncyk7CiAJLyogQW5kIHRoZXNlIGFyZSBvdXJzLiAqLwotCV9fdTgJCQl0d19pcHY2b25seToxLAotCQkJCXR3X3RyYW5zcGFyZW50OjE7Ci0JLyogMTQgYml0cyBob2xlLCB0cnkgdG8gcGFjayAqLworCXVuc2lnbmVkIGludAkJdHdfaXB2Nm9ubHkgICAgIDogMSwKKwkJCQl0d190cmFuc3BhcmVudCAgOiAxLAorCQkJCXR3X3BhZAkJOiAxNCwJLyogMTQgYml0cyBob2xlICovCisJCQkJdHdfaXB2Nl9vZmZzZXQgIDogMTY7CiAJa21lbWNoZWNrX2JpdGZpZWxkX2VuZChmbGFncyk7Ci0JX191MTYJCQl0d19pcHY2X29mZnNldDsKIAl1bnNpZ25lZCBsb25nCQl0d190dGQ7CiAJc3RydWN0IGluZXRfYmluZF9idWNrZXQJKnR3X3RiOwogCXN0cnVjdCBobGlzdF9ub2RlCXR3X2RlYXRoX25vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA0NjY4NTliLi5jNzViOTYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTE2NjksNiArMTY2OSw4IEBACiAgKiB0byB0aGlzIGZ1bmN0aW9uIGFuZCBpZWVlODAyMTFfcnhfaXJxc2FmZSgpIG1heSBub3QgYmUgbWl4ZWQgZm9yIGEKICAqIHNpbmdsZSBoYXJkd2FyZS4KICAqCisgKiBOb3RlIHRoYXQgcmlnaHQgbm93LCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggc29mdGlycXMgZGlzYWJsZWQuCisgKgogICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uCiAgKiBAc2tiOiB0aGUgYnVmZmVyIHRvIHJlY2VpdmUsIG93bmVkIGJ5IG1hYzgwMjExIGFmdGVyIHRoaXMgY2FsbAogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggMTYyMTkzNS4uOWY5NjM5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtMjI2LDEyICsyMjYsMTIgQEAKICNkZWZpbmUgc2tfcHJvdAkJCV9fc2tfY29tbW9uLnNrY19wcm90CiAjZGVmaW5lIHNrX25ldAkJCV9fc2tfY29tbW9uLnNrY19uZXQKIAlrbWVtY2hlY2tfYml0ZmllbGRfYmVnaW4oZmxhZ3MpOwotCXVuc2lnbmVkIGNoYXIJCXNrX3NodXRkb3duIDogMiwKLQkJCQlza19ub19jaGVjayA6IDIsCi0JCQkJc2tfdXNlcmxvY2tzIDogNDsKKwl1bnNpZ25lZCBpbnQJCXNrX3NodXRkb3duICA6IDIsCisJCQkJc2tfbm9fY2hlY2sgIDogMiwKKwkJCQlza191c2VybG9ja3MgOiA0LAorCQkJCXNrX3Byb3RvY29sICA6IDgsCisJCQkJc2tfdHlwZSAgICAgIDogMTY7CiAJa21lbWNoZWNrX2JpdGZpZWxkX2VuZChmbGFncyk7Ci0JdW5zaWduZWQgY2hhcgkJc2tfcHJvdG9jb2w7Ci0JdW5zaWduZWQgc2hvcnQJCXNrX3R5cGU7CiAJaW50CQkJc2tfcmN2YnVmOwogCXNvY2tldF9sb2NrX3QJCXNrX2xvY2s7CiAJLyoKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCAwOWM1YzY0Li5mNTE1ODY0IDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0yOTcsNyArMjk3LDcgQEAKIAogY29uZmlnIEFVRElUU1lTQ0FMTAogCWJvb2wgIkVuYWJsZSBzeXN0ZW0tY2FsbCBhdWRpdGluZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVVESVQgJiYgKFg4NiB8fCBQUEMgfHwgUFBDNjQgfHwgUzM5MCB8fCBJQTY0IHx8IFVNTCB8fCBTUEFSQzY0fHwgU1VQRVJIKQorCWRlcGVuZHMgb24gQVVESVQgJiYgKFg4NiB8fCBQUEMgfHwgUzM5MCB8fCBJQTY0IHx8IFVNTCB8fCBTUEFSQzY0IHx8IFNVUEVSSCkKIAlkZWZhdWx0IHkgaWYgU0VDVVJJVFlfU0VMSU5VWAogCWhlbHAKIAkgIEVuYWJsZSBsb3ctb3ZlcmhlYWQgc3lzdGVtLWNhbGwgYXVkaXRpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdApkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IGNhODNiNzMuLjAyNDlmNGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTE3MTAsMTQgKzE3MTAsMTMgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlidWZmZXJbbmJ5dGVzXSA9IDA7ICAgICAvKiBudWwtdGVybWluYXRlICovCi0Jc3Ryc3RyaXAoYnVmZmVyKTsKIAlpZiAoY2Z0LT53cml0ZV91NjQpIHsKLQkJdTY0IHZhbCA9IHNpbXBsZV9zdHJ0b3VsbChidWZmZXIsICZlbmQsIDApOworCQl1NjQgdmFsID0gc2ltcGxlX3N0cnRvdWxsKHN0cnN0cmlwKGJ1ZmZlciksICZlbmQsIDApOwogCQlpZiAoKmVuZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR2YWwgPSBjZnQtPndyaXRlX3U2NChjZ3JwLCBjZnQsIHZhbCk7CiAJfSBlbHNlIHsKLQkJczY0IHZhbCA9IHNpbXBsZV9zdHJ0b2xsKGJ1ZmZlciwgJmVuZCwgMCk7CisJCXM2NCB2YWwgPSBzaW1wbGVfc3RydG9sbChzdHJzdHJpcChidWZmZXIpLCAmZW5kLCAwKTsKIAkJaWYgKCplbmQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dmFsID0gY2Z0LT53cml0ZV9zNjQoY2dycCwgY2Z0LCB2YWwpOwpAQCAtMTc1Myw4ICsxNzUyLDcgQEAKIAl9CiAKIAlidWZmZXJbbmJ5dGVzXSA9IDA7ICAgICAvKiBudWwtdGVybWluYXRlICovCi0Jc3Ryc3RyaXAoYnVmZmVyKTsKLQlyZXR2YWwgPSBjZnQtPndyaXRlX3N0cmluZyhjZ3JwLCBjZnQsIGJ1ZmZlcik7CisJcmV0dmFsID0gY2Z0LT53cml0ZV9zdHJpbmcoY2dycCwgY2Z0LCBzdHJzdHJpcChidWZmZXIpKTsKIAlpZiAoIXJldHZhbCkKIAkJcmV0dmFsID0gbmJ5dGVzOwogb3V0OgpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggZTYxODkxZi4uZjc4NjRhYyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC0zNTksMTAgKzM1OSw4IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyOwogCi0JaWYgKHRhc2tfc2Vzc2lvbihjdXJyKSAhPSBwaWQpIHsKKwlpZiAodGFza19zZXNzaW9uKGN1cnIpICE9IHBpZCkKIAkJY2hhbmdlX3BpZChjdXJyLCBQSURUWVBFX1NJRCwgcGlkKTsKLQkJcHJvY19zaWRfY29ubmVjdG9yKGN1cnIpOwotCX0KIAogCWlmICh0YXNrX3BncnAoY3VycikgIT0gcGlkKQogCQljaGFuZ2VfcGlkKGN1cnIsIFBJRFRZUEVfUEdJRCwgcGlkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC5jIGIva2VybmVsL2Z1dGV4LmMKaW5kZXggNDk0OWQzMy4uNjQyZjNiYiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTE1MCw3ICsxNTAsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBtYXRjaF9mdXRleCh1bmlvbiBmdXRleF9rZXkgKmtleTEsIHVuaW9uIGZ1dGV4X2tleSAqa2V5MikKIHsKLQlyZXR1cm4gKGtleTEtPmJvdGgud29yZCA9PSBrZXkyLT5ib3RoLndvcmQKKwlyZXR1cm4gKGtleTEgJiYga2V5MgorCQkmJiBrZXkxLT5ib3RoLndvcmQgPT0ga2V5Mi0+Ym90aC53b3JkCiAJCSYmIGtleTEtPmJvdGgucHRyID09IGtleTItPmJvdGgucHRyCiAJCSYmIGtleTEtPmJvdGgub2Zmc2V0ID09IGtleTItPmJvdGgub2Zmc2V0KTsKIH0KQEAgLTEwMjgsNyArMTAyOSw2IEBACiB2b2lkIHJlcXVldWVfcGlfd2FrZV9mdXRleChzdHJ1Y3QgZnV0ZXhfcSAqcSwgdW5pb24gZnV0ZXhfa2V5ICprZXksCiAJCQkgICBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKQogewotCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7CiAJZ2V0X2Z1dGV4X2tleV9yZWZzKGtleSk7CiAJcS0+a2V5ID0gKmtleTsKIApAQCAtMTIyNiw2ICsxMjI2LDcgQEAKIAkJICovCiAJCWlmIChyZXQgPT0gMSkgewogCQkJV0FSTl9PTihwaV9zdGF0ZSk7CisJCQlkcm9wX2NvdW50Kys7CiAJCQl0YXNrX2NvdW50Kys7CiAJCQlyZXQgPSBnZXRfZnV0ZXhfdmFsdWVfbG9ja2VkKCZjdXJ2YWwyLCB1YWRkcjIpOwogCQkJaWYgKCFyZXQpCkBAIC0xMzA0LDYgKzEzMDUsNyBAQAogCQkJaWYgKHJldCA9PSAxKSB7CiAJCQkJLyogV2UgZ290IHRoZSBsb2NrLiAqLwogCQkJCXJlcXVldWVfcGlfd2FrZV9mdXRleCh0aGlzLCAma2V5MiwgaGIyKTsKKwkJCQlkcm9wX2NvdW50Kys7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgaWYgKHJldCkgewogCQkJCS8qIC1FREVBRExLICovCkBAIC0xNzkxLDYgKzE3OTMsNyBAQAogCQkJCQkgICAgIGN1cnJlbnQtPnRpbWVyX3NsYWNrX25zKTsKIAl9CiAKK3JldHJ5OgogCS8qIFByZXBhcmUgdG8gd2FpdCBvbiB1YWRkci4gKi8KIAlyZXQgPSBmdXRleF93YWl0X3NldHVwKHVhZGRyLCB2YWwsIGZzaGFyZWQsICZxLCAmaGIpOwogCWlmIChyZXQpCkBAIC0xODA4LDkgKzE4MTEsMTQgQEAKIAkJZ290byBvdXRfcHV0X2tleTsKIAogCS8qCi0JICogV2UgZXhwZWN0IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpLCBidXQgYW5vdGhlciB0aHJlYWQgbWF5Ci0JICogaGF2ZSBoYW5kbGVkIGl0IGZvciB1cyBhbHJlYWR5LgorCSAqIFdlIGV4cGVjdCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSwgYnV0IHdlIG1pZ2h0IGJlIHRoZQorCSAqIHZpY3RpbSBvZiBhIHNwdXJpb3VzIHdha2V1cCBhcyB3ZWxsLgogCSAqLworCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOworCQlnb3RvIHJldHJ5OworCX0KKwogCXJldCA9IC1FUkVTVEFSVFNZUzsKIAlpZiAoIWFic190aW1lKQogCQlnb3RvIG91dF9wdXRfa2V5OwpAQCAtMjExOCw5ICsyMTI2LDExIEBACiAJCSAqLwogCQlwbGlzdF9kZWwoJnEtPmxpc3QsICZxLT5saXN0LnBsaXN0KTsKIAorCQkvKiBIYW5kbGUgc3B1cmlvdXMgd2FrZXVwcyBncmFjZWZ1bGx5ICovCisJCXJldCA9IC1FQUdBSU47CiAJCWlmICh0aW1lb3V0ICYmICF0aW1lb3V0LT50YXNrKQogCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJZWxzZQorCQllbHNlIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldCA9IC1FUkVTVEFSVE5PSU5UUjsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTIxOTgsNiArMjIwOCw3IEBACiAJZGVidWdfcnRfbXV0ZXhfaW5pdF93YWl0ZXIoJnJ0X3dhaXRlcik7CiAJcnRfd2FpdGVyLnRhc2sgPSBOVUxMOwogCityZXRyeToKIAlrZXkyID0gRlVURVhfS0VZX0lOSVQ7CiAJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjIsIGZzaGFyZWQsICZrZXkyLCBWRVJJRllfV1JJVEUpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCkBAIC0yMjkyLDYgKzIzMDMsOSBAQAogb3V0X2tleTI6CiAJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5Mik7CiAKKwkvKiBTcHVyaW91cyB3YWtldXAgPyAqLworCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJZ290byByZXRyeTsKIG91dDoKIAlpZiAodG8pIHsKIAkJaHJ0aW1lcl9jYW5jZWwoJnRvLT50aW1lcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCAzODE1YWMxZC4uOWFmNTY3MiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC0xNDIsNiArMTQyLDExIEBACiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsb2NrX2NsYXNzX3N0YXRzW01BWF9MT0NLREVQX0tFWVNdLCBsb2NrX3N0YXRzKTsKIAorc3RhdGljIGlubGluZSB1NjQgbG9ja3N0YXRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gY3B1X2Nsb2NrKHNtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKIHN0YXRpYyBpbnQgbG9ja19wb2ludCh1bnNpZ25lZCBsb25nIHBvaW50c1tdLCB1bnNpZ25lZCBsb25nIGlwKQogewogCWludCBpOwpAQCAtMTU4LDcgKzE2Myw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvY2tfdGltZV9pbmMoc3RydWN0IGxvY2tfdGltZSAqbHQsIHM2NCB0aW1lKQorc3RhdGljIHZvaWQgbG9ja190aW1lX2luYyhzdHJ1Y3QgbG9ja190aW1lICpsdCwgdTY0IHRpbWUpCiB7CiAJaWYgKHRpbWUgPiBsdC0+bWF4KQogCQlsdC0+bWF4ID0gdGltZTsKQEAgLTIzNCwxMiArMjM5LDEyIEBACiBzdGF0aWMgdm9pZCBsb2NrX3JlbGVhc2VfaG9sZHRpbWUoc3RydWN0IGhlbGRfbG9jayAqaGxvY2spCiB7CiAJc3RydWN0IGxvY2tfY2xhc3Nfc3RhdHMgKnN0YXRzOwotCXM2NCBob2xkdGltZTsKKwl1NjQgaG9sZHRpbWU7CiAKIAlpZiAoIWxvY2tfc3RhdCkKIAkJcmV0dXJuOwogCi0JaG9sZHRpbWUgPSBzY2hlZF9jbG9jaygpIC0gaGxvY2stPmhvbGR0aW1lX3N0YW1wOworCWhvbGR0aW1lID0gbG9ja3N0YXRfY2xvY2soKSAtIGhsb2NrLT5ob2xkdGltZV9zdGFtcDsKIAogCXN0YXRzID0gZ2V0X2xvY2tfc3RhdHMoaGxvY2tfY2xhc3MoaGxvY2spKTsKIAlpZiAoaGxvY2stPnJlYWQpCkBAIC0yNzkyLDcgKzI3OTcsNyBAQAogCWhsb2NrLT5yZWZlcmVuY2VzID0gcmVmZXJlbmNlczsKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiAJaGxvY2stPndhaXR0aW1lX3N0YW1wID0gMDsKLQlobG9jay0+aG9sZHRpbWVfc3RhbXAgPSBzY2hlZF9jbG9jaygpOworCWhsb2NrLT5ob2xkdGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7CiAjZW5kaWYKIAogCWlmIChjaGVjayA9PSAyICYmICFtYXJrX2lycWZsYWdzKGN1cnIsIGhsb2NrKSkKQEAgLTMzMjIsNyArMzMyNyw3IEBACiAJaWYgKGhsb2NrLT5pbnN0YW5jZSAhPSBsb2NrKQogCQlyZXR1cm47CiAKLQlobG9jay0+d2FpdHRpbWVfc3RhbXAgPSBzY2hlZF9jbG9jaygpOworCWhsb2NrLT53YWl0dGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7CiAKIAljb250ZW50aW9uX3BvaW50ID0gbG9ja19wb2ludChobG9ja19jbGFzcyhobG9jayktPmNvbnRlbnRpb25fcG9pbnQsIGlwKTsKIAljb250ZW5kaW5nX3BvaW50ID0gbG9ja19wb2ludChobG9ja19jbGFzcyhobG9jayktPmNvbnRlbmRpbmdfcG9pbnQsCkBAIC0zMzQ1LDggKzMzNTAsNyBAQAogCXN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrLCAqcHJldl9obG9jazsKIAlzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cyAqc3RhdHM7CiAJdW5zaWduZWQgaW50IGRlcHRoOwotCXU2NCBub3c7Ci0JczY0IHdhaXR0aW1lID0gMDsKKwl1NjQgbm93LCB3YWl0dGltZSA9IDA7CiAJaW50IGksIGNwdTsKIAogCWRlcHRoID0gY3Vyci0+bG9ja2RlcF9kZXB0aDsKQEAgLTMzNzQsNyArMzM3OCw3IEBACiAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaWYgKGhsb2NrLT53YWl0dGltZV9zdGFtcCkgewotCQlub3cgPSBzY2hlZF9jbG9jaygpOworCQlub3cgPSBsb2Nrc3RhdF9jbG9jaygpOwogCQl3YWl0dGltZSA9IG5vdyAtIGhsb2NrLT53YWl0dGltZV9zdGFtcDsKIAkJaGxvY2stPmhvbGR0aW1lX3N0YW1wID0gbm93OwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCA5ZGE1OGVhLi5kNjU2YzI3IDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC0yMTgsMTUgKzIxOCwxMSBAQAogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQlpZiAoa3AtPmZsYWdzICYgS1BBUkFNX0tNQUxMT0NFRCkKLQkJa2ZyZWUoKihjaGFyICoqKWtwLT5hcmcpOwotCiAJLyogVGhpcyBpcyBhIGhhY2suICBXZSBjYW4ndCBuZWVkIHRvIHN0cmR1cCBpbiBlYXJseSBib290LCBhbmQgd2UKIAkgKiBkb24ndCBuZWVkIHRvOyB0aGlzIG1hbmdsZWQgY29tbWFuZGxpbmUgaXMgcHJlc2VydmVkLiAqLwogCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKSB7Ci0JCWtwLT5mbGFncyB8PSBLUEFSQU1fS01BTExPQ0VEOwogCQkqKGNoYXIgKiopa3AtPmFyZyA9IGtzdHJkdXAodmFsLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFrcC0+YXJnKQorCQlpZiAoISooY2hhciAqKilrcC0+YXJnKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlCiAJCSooY29uc3QgY2hhciAqKilrcC0+YXJnID0gdmFsOwpAQCAtMzA0LDYgKzMwMCw3IEBACiAJCSAgICAgICB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4LAogCQkgICAgICAgdm9pZCAqZWxlbSwgaW50IGVsZW1zaXplLAogCQkgICAgICAgaW50ICgqc2V0KShjb25zdCBjaGFyICosIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKSwKKwkJICAgICAgIHUxNiBmbGFncywKIAkJICAgICAgIHVuc2lnbmVkIGludCAqbnVtKQogewogCWludCByZXQ7CkBAIC0zMTMsNiArMzEwLDcgQEAKIAkvKiBHZXQgdGhlIG5hbWUgcmlnaHQgZm9yIGVycm9ycy4gKi8KIAlrcC5uYW1lID0gbmFtZTsKIAlrcC5hcmcgPSBlbGVtOworCWtwLmZsYWdzID0gZmxhZ3M7CiAKIAkvKiBObyBlcXVhbHMgc2lnbj8gKi8KIAlpZiAoIXZhbCkgewpAQCAtMzU4LDcgKzM1Niw4IEBACiAJdW5zaWduZWQgaW50IHRlbXBfbnVtOwogCiAJcmV0dXJuIHBhcmFtX2FycmF5KGtwLT5uYW1lLCB2YWwsIDEsIGFyci0+bWF4LCBhcnItPmVsZW0sCi0JCQkgICBhcnItPmVsZW1zaXplLCBhcnItPnNldCwgYXJyLT5udW0gPzogJnRlbXBfbnVtKTsKKwkJCSAgIGFyci0+ZWxlbXNpemUsIGFyci0+c2V0LCBrcC0+ZmxhZ3MsCisJCQkgICBhcnItPm51bSA/OiAmdGVtcF9udW0pOwogfQogCiBpbnQgcGFyYW1fYXJyYXlfZ2V0KGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCkBAIC02MDUsMTEgKzYwNCw3IEBACiAKIHZvaWQgZGVzdHJveV9wYXJhbXMoY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqcGFyYW1zLCB1bnNpZ25lZCBudW0pCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCi0JCWlmIChwYXJhbXNbaV0uZmxhZ3MgJiBLUEFSQU1fS01BTExPQ0VEKQotCQkJa2ZyZWUoKihjaGFyICoqKXBhcmFtc1tpXS5hcmcpOworCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBmcmVlIGttYWxsb2NlZCBjaGFycCBwYXJhbWV0ZXJzLiAgSXQgZG9lc24ndC4gKi8KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGtlcm5lbF9hZGRfc3lzZnNfcGFyYW0oY29uc3QgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYwppbmRleCAxN2Q4YmIxYS4uMjU1OTZlNCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N1c3BlbmRfdGVzdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYwpAQCAtMTksNyArMTksNyBAQAogICogVGhlIHRpbWUgaXQgdGFrZXMgaXMgc3lzdGVtLXNwZWNpZmljIHRob3VnaCwgc28gd2hlbiB3ZSB0ZXN0IHRoaXMKICAqIGR1cmluZyBzeXN0ZW0gYm9vdHVwIHdlIGFsbG93IGEgTE9UIG9mIHRpbWUuCiAgKi8KLSNkZWZpbmUgVEVTVF9TVVNQRU5EX1NFQ09ORFMJNQorI2RlZmluZSBURVNUX1NVU1BFTkRfU0VDT05EUwkxMAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXNwZW5kX3Rlc3Rfc3RhcnRfdGltZTsKIApAQCAtNDksNyArNDksOCBAQAogCSAqIGhhcyBzb21lIHBlcmZvcm1hbmNlIGlzc3Vlcy4gIFRoZSBzdGFjayBkdW1wIG9mIGEgV0FSTl9PTgogCSAqIGlzIG1vcmUgbGlrZWx5IHRvIGdldCB0aGUgcmlnaHQgYXR0ZW50aW9uIHRoYW4gYSBwcmludGsuLi4KIAkgKi8KLQlXQVJOKG1zZWMgPiAoVEVTVF9TVVNQRU5EX1NFQ09ORFMgKiAxMDAwKSwgIkNvbXBvbmVudDogJXNcbiIsIGxhYmVsKTsKKwlXQVJOKG1zZWMgPiAoVEVTVF9TVVNQRU5EX1NFQ09ORFMgKiAxMDAwKSwKKwkgICAgICJDb21wb25lbnQ6ICVzLCB0aW1lOiAldVxuIiwgbGFiZWwsIG1zZWMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuYyBiL2tlcm5lbC9yY3V0cmVlLmMKaW5kZXggNzA1ZjAyYS4uMDUzNjEyNSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuYworKysgYi9rZXJuZWwvcmN1dHJlZS5jCkBAIC05MTMsNyArOTEzLDIwIEBACiAJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCQlicmVhazsKIAkJfQotCQlyY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHJzcCwgcm5wLCByZHApOworCisJCS8qCisJCSAqIElmIHRoZXJlIHdhcyBhIHRhc2sgYmxvY2tpbmcgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLAorCQkgKiBhbmQgaWYgYWxsIENQVXMgaGF2ZSBjaGVja2VkIGluLCB3ZSBuZWVkIHRvIHByb3BhZ2F0ZQorCQkgKiB0aGUgcXVpZXNjZW50IHN0YXRlIHVwIHRoZSByY3Vfbm9kZSBoaWVyYXJjaHkuICBCdXQgdGhhdAorCQkgKiBpcyBpbmNvbnZlbmllbnQgYXQgdGhlIG1vbWVudCBkdWUgdG8gZGVhZGxvY2sgaXNzdWVzIGlmCisJCSAqIHRoaXMgc2hvdWxkIGVuZCB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QuICBTbyBzZXQgdGhlCisJCSAqIG9mZmxpbmVkIENQVSdzIGJpdCBpbiAtPnFzbWFzayBpbiBvcmRlciB0byBmb3JjZSB0aGUKKwkJICogbmV4dCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSBpbnZvY2F0aW9uIHRvIGNsZWFuIHVwIHRoaXMKKwkJICogbWVzcyBpbiBhIGRlYWRsb2NrLWZyZWUgbWFubmVyLgorCQkgKi8KKwkJaWYgKHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3MocnNwLCBybnAsIHJkcCkgJiYgIXJucC0+cXNtYXNrKQorCQkJcm5wLT5xc21hc2sgfD0gbWFzazsKKwogCQltYXNrID0gcm5wLT5ncnBtYXNrOwogCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCXJucCA9IHJucC0+cGFyZW50OwpAQCAtOTU4LDcgKzk3MSw3IEBACiAgKiBJbnZva2UgYW55IFJDVSBjYWxsYmFja3MgdGhhdCBoYXZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiB0aGVpciBncmFjZQogICogcGVyaW9kLiAgVGhvdHRsZSBhcyBzcGVjaWZpZWQgYnkgcmRwLT5ibGltaXQuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3N0YXRpYyB2b2lkIHJjdV9kb19iYXRjaChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJjdV9oZWFkICpuZXh0LCAqbGlzdCwgKip0YWlsOwpAQCAtMTAxMSw2ICsxMDI0LDEzIEBACiAJaWYgKHJkcC0+YmxpbWl0ID09IExPTkdfTUFYICYmIHJkcC0+cWxlbiA8PSBxbG93bWFyaykKIAkJcmRwLT5ibGltaXQgPSBibGltaXQ7CiAKKwkvKiBSZXNldCAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgdHJpZ2dlciBpZiBlbm91Z2ggQ0JzIGhhdmUgZHJhaW5lZC4gKi8KKwlpZiAocmRwLT5xbGVuID09IDAgJiYgcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrICE9IDApIHsKKwkJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gMDsKKwkJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CisJfSBlbHNlIGlmIChyZHAtPnFsZW4gPCByZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgLSBxaGltYXJrKQorCQlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSByZHAtPnFsZW47CisKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAkvKiBSZS1yYWlzZSB0aGUgUkNVIHNvZnRpcnEgaWYgdGhlcmUgYXJlIGNhbGxiYWNrcyByZW1haW5pbmcuICovCkBAIC0xMjI0LDcgKzEyNDQsNyBAQAogCX0KIAogCS8qIElmIHRoZXJlIGFyZSBjYWxsYmFja3MgcmVhZHksIGludm9rZSB0aGVtLiAqLwotCXJjdV9kb19iYXRjaChyZHApOworCXJjdV9kb19iYXRjaChyc3AsIHJkcCk7CiB9CiAKIC8qCkBAIC0xMjg4LDEwICsxMzA4LDIwIEBACiAJCXJjdV9zdGFydF9ncChyc3AsIG5lc3RmbGFnKTsgIC8qIHJlbGVhc2VzIHJucF9yb290LT5sb2NrLiAqLwogCX0KIAotCS8qIEZvcmNlIHRoZSBncmFjZSBwZXJpb2QgaWYgdG9vIG1hbnkgY2FsbGJhY2tzIG9yIHRvbyBsb25nIHdhaXRpbmcuICovCi0JaWYgKHVubGlrZWx5KCsrcmRwLT5xbGVuID4gcWhpbWFyaykpIHsKKwkvKgorCSAqIEZvcmNlIHRoZSBncmFjZSBwZXJpb2QgaWYgdG9vIG1hbnkgY2FsbGJhY2tzIG9yIHRvbyBsb25nIHdhaXRpbmcuCisJICogRW5mb3JjZSBoeXN0ZXJlc2lzLCBhbmQgZG9uJ3QgaW52b2tlIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpCisJICogaWYgc29tZSBvdGhlciBDUFUgaGFzIHJlY2VudGx5IGRvbmUgc28uICBBbHNvLCBkb24ndCBib3RoZXIKKwkgKiBpbnZva2luZyBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSBpZiB0aGUgbmV3bHkgZW5xdWV1ZWQgY2FsbGJhY2sKKwkgKiBpcyB0aGUgb25seSBvbmUgd2FpdGluZyBmb3IgYSBncmFjZSBwZXJpb2QgdG8gY29tcGxldGUuCisJICovCisJaWYgKHVubGlrZWx5KCsrcmRwLT5xbGVuID4gcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrICsgcWhpbWFyaykpIHsKIAkJcmRwLT5ibGltaXQgPSBMT05HX01BWDsKLQkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMCk7CisJCWlmIChyc3AtPm5fZm9yY2VfcXMgPT0gcmRwLT5uX2ZvcmNlX3FzX3NuYXAgJiYKKwkJICAgICpyZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF0gIT0gaGVhZCkKKwkJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOworCQlyZHAtPm5fZm9yY2VfcXNfc25hcCA9IHJzcC0+bl9mb3JjZV9xczsKKwkJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gcmRwLT5xbGVuOwogCX0gZWxzZSBpZiAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDApCiAJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDEpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTE1MjMsNiArMTU1Myw4IEBACiAJcmRwLT5iZWVub25saW5lID0gMTsJIC8qIFdlIGhhdmUgbm93IGJlZW4gb25saW5lLiAqLwogCXJkcC0+cHJlZW1wdGFibGUgPSBwcmVlbXB0YWJsZTsKIAlyZHAtPnBhc3NlZF9xdWllc2NfY29tcGxldGVkID0gbGFzdGNvbXAgLSAxOworCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IDA7CisJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CiAJcmRwLT5ibGltaXQgPSBibGltaXQ7CiAJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuaCBiL2tlcm5lbC9yY3V0cmVlLmgKaW5kZXggYjQwYWM1Ny4uMTgyM2M2ZSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuaAorKysgYi9rZXJuZWwvcmN1dHJlZS5oCkBAIC0xNjcsNiArMTY3LDEwIEBACiAJc3RydWN0IHJjdV9oZWFkICpueHRsaXN0OwogCXN0cnVjdCByY3VfaGVhZCAqKm54dHRhaWxbUkNVX05FWFRfU0laRV07CiAJbG9uZwkJcWxlbjsJCS8qICMgb2YgcXVldWVkIGNhbGxiYWNrcyAqLworCWxvbmcJCXFsZW5fbGFzdF9mcXNfY2hlY2s7CisJCQkJCS8qIHFsZW4gYXQgbGFzdCBjaGVjayBmb3IgUVMgZm9yY2luZyAqLworCXVuc2lnbmVkIGxvbmcJbl9mb3JjZV9xc19zbmFwOworCQkJCQkvKiBkaWQgb3RoZXIgQ1BVIGZvcmNlIFFTIHJlY2VudGx5PyAqLwogCWxvbmcJCWJsaW1pdDsJCS8qIFVwcGVyIGxpbWl0IG9uIGEgcHJvY2Vzc2VkIGJhdGNoICovCiAKICNpZmRlZiBDT05GSUdfTk9fSFoKQEAgLTMwMiw5ICszMDYsOSBAQAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJCSAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCisJCQkJICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX2NwdShpbnQgY3B1KTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19jYWxsYmFja3MoaW50IGNwdSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaCBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCmluZGV4IGMwY2I3ODMuLmVmMmE1OGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCkBAIC0zMDQsMjEgKzMwNCwyNSBAQAogICogcGFyZW50IGlzIHRvIHJlbW92ZSB0aGUgbmVlZCBmb3IgcmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwoKSB0bwogICogbWFrZSBtb3JlIHRoYW4gdHdvIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIHRhcmdldCByY3Vfbm9kZSdzIGxvY2suCiAgKgorICogUmV0dXJucyAxIGlmIHRoZXJlIHdhcyBwcmV2aW91c2x5IGEgdGFzayBibG9ja2luZyB0aGUgY3VycmVudCBncmFjZQorICogcGVyaW9kIG9uIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlLgorICoKICAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHJucC0+bG9jayB3aXRoIGlycXMgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAotCQkJCSAgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQorc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CiAJaW50IGk7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHA7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHBfcm9vdDsKKwlpbnQgcmV0dmFsID0gcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCk7CiAJc3RydWN0IHJjdV9ub2RlICpybnBfcm9vdCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHA7CiAKIAlpZiAocm5wID09IHJucF9yb290KSB7CiAJCVdBUk5fT05DRSgxLCAiTGFzdCBDUFUgdGhvdWdodCB0byBiZSBvZmZsaW5lZD8iKTsKLQkJcmV0dXJuOyAgLyogU2hvdWxkbid0IGhhcHBlbjogYXQgbGVhc3Qgb25lIENQVSBvbmxpbmUuICovCisJCXJldHVybiAwOyAgLyogU2hvdWxkbid0IGhhcHBlbjogYXQgbGVhc3Qgb25lIENQVSBvbmxpbmUuICovCiAJfQogCVdBUk5fT05fT05DRShybnAgIT0gcmRwLT5teW5vZGUgJiYKIAkJICAgICAoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1swXSkgfHwKQEAgLTM0Miw2ICszNDYsOCBAQAogCQkJc3Bpbl91bmxvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KIAkJfQogCX0KKworCXJldHVybiByZXR2YWw7CiB9CiAKIC8qCkBAIC0zOTMsNiArMzk5LDE3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CiAKIC8qCisgKiBXYWl0IGZvciBhbiByY3UtcHJlZW1wdCBncmFjZSBwZXJpb2QuICBXZSBhcmUgc3VwcG9zZWQgdG8gZXhwZWRpdGUgdGhlCisgKiBncmFjZSBwZXJpb2QsIGJ1dCB0aGlzIGlzIHRoZSBjcnVkZSBzbG93IGNvbXBhdGFiaWxpdHkgaGFjaywgc28ganVzdAorICogaW52b2tlIHN5bmNocm9uaXplX3JjdSgpLgorICovCit2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9yY3UoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQpOworCisvKgogICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBpbW1lZGlhdGUgcHJlZW1wdGFibGUtUkNVLXJlbGF0ZWQgd29yawogICogdG8gYmUgZG9uZS4KICAqLwpAQCAtNTIxLDEyICs1MzgsMTUgQEAKIAogLyoKICAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBuZWVkcyB0byBtaWdyYXRlCi0gKiB0YXNrcyB0aGF0IHdlcmUgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4KKyAqIHRhc2tzIHRoYXQgd2VyZSBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLCBhbmQKKyAqIHN1Y2ggbm9uLWV4aXN0ZW50IHRhc2tzIGNhbm5vdCBwb3NzaWJseSBoYXZlIGJlZW4gYmxvY2tpbmcgdGhlIGN1cnJlbnQKKyAqIGdyYWNlIHBlcmlvZC4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkJICAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCi0JCQkJICAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJCSAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCisJCQkJICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTU2NSw2ICs1ODUsMTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKIAogLyoKKyAqIFdhaXQgZm9yIGFuIHJjdS1wcmVlbXB0IGdyYWNlIHBlcmlvZCwgYnV0IG1ha2UgaXQgaGFwcGVuIHF1aWNrbHkuCisgKiBCdXQgYmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIG1hcCB0byByY3Utc2NoZWQuCisgKi8KK3ZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKQoreworCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCk7CisKKy8qCiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgaGFzIGFueSB3b3JrIHRvIGRvLgogICovCiBzdGF0aWMgaW50IHJjdV9wcmVlbXB0X3BlbmRpbmcoaW50IGNwdSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggNzZjMGU5Ni4uYTQ1NWRjYSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTY3Niw2ICs2NzYsNyBAQAogCiAvKioKICAqIHJ1bnF1ZXVlX2lzX2xvY2tlZAorICogQGNwdTogdGhlIHByb2Nlc3NvciBpbiBxdWVzdGlvbi4KICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgY3B1IHJ1bnF1ZXVlIGlzIGxvY2tlZC4KICAqIFRoaXMgaW50ZXJmYWNlIGFsbG93cyBwcmludGsgdG8gYmUgY2FsbGVkIHdpdGggdGhlIHJ1bnF1ZXVlIGxvY2sKQEAgLTE1NjMsMTEgKzE1NjQsNyBAQAogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIAotc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSB7Ci0JdW5zaWduZWQgbG9uZyBycV93ZWlnaHRbTlJfQ1BVU107Ci19OwotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSwgdXBkYXRlX3NoYXJlc19kYXRhKTsKK3N0YXRpYyBfX3JlYWRfbW9zdGx5IHVuc2lnbmVkIGxvbmcgKnVwZGF0ZV9zaGFyZXNfZGF0YTsKIAogc3RhdGljIHZvaWQgX19zZXRfc2Vfc2hhcmVzKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCB1bnNpZ25lZCBsb25nIHNoYXJlcyk7CiAKQEAgLTE1NzcsMTIgKzE1NzQsMTIgQEAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzZF9zaGFyZXMsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2RfcnFfd2VpZ2h0LAotCQkJCSAgICBzdHJ1Y3QgdXBkYXRlX3NoYXJlc19kYXRhICp1c2QpCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnVzZF9ycV93ZWlnaHQpCiB7CiAJdW5zaWduZWQgbG9uZyBzaGFyZXMsIHJxX3dlaWdodDsKIAlpbnQgYm9vc3QgPSAwOwogCi0JcnFfd2VpZ2h0ID0gdXNkLT5ycV93ZWlnaHRbY3B1XTsKKwlycV93ZWlnaHQgPSB1c2RfcnFfd2VpZ2h0W2NwdV07CiAJaWYgKCFycV93ZWlnaHQpIHsKIAkJYm9vc3QgPSAxOwogCQlycV93ZWlnaHQgPSBOSUNFXzBfTE9BRDsKQEAgLTE2MTcsNyArMTYxNCw3IEBACiBzdGF0aWMgaW50IHRnX3NoYXJlc191cChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyB3ZWlnaHQsIHJxX3dlaWdodCA9IDAsIHNoYXJlcyA9IDA7Ci0Jc3RydWN0IHVwZGF0ZV9zaGFyZXNfZGF0YSAqdXNkOworCXVuc2lnbmVkIGxvbmcgKnVzZF9ycV93ZWlnaHQ7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CkBAIC0xNjI2LDExICsxNjIzLDExIEBACiAJCXJldHVybiAwOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXVzZCA9ICZfX2dldF9jcHVfdmFyKHVwZGF0ZV9zaGFyZXNfZGF0YSk7CisJdXNkX3JxX3dlaWdodCA9IHBlcl9jcHVfcHRyKHVwZGF0ZV9zaGFyZXNfZGF0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpIHsKIAkJd2VpZ2h0ID0gdGctPmNmc19ycVtpXS0+bG9hZC53ZWlnaHQ7Ci0JCXVzZC0+cnFfd2VpZ2h0W2ldID0gd2VpZ2h0OworCQl1c2RfcnFfd2VpZ2h0W2ldID0gd2VpZ2h0OwogCiAJCS8qCiAJCSAqIElmIHRoZXJlIGFyZSBjdXJyZW50bHkgbm8gdGFza3Mgb24gdGhlIGNwdSBwcmV0ZW5kIHRoZXJlCkBAIC0xNjUxLDcgKzE2NDgsNyBAQAogCQlzaGFyZXMgPSB0Zy0+c2hhcmVzOwogCiAJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkKLQkJdXBkYXRlX2dyb3VwX3NoYXJlc19jcHUodGcsIGksIHNoYXJlcywgcnFfd2VpZ2h0LCB1c2QpOworCQl1cGRhdGVfZ3JvdXBfc2hhcmVzX2NwdSh0ZywgaSwgc2hhcmVzLCBycV93ZWlnaHQsIHVzZF9ycV93ZWlnaHQpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCkBAIC0yMzExLDcgKzIzMDgsNyBAQAogewogCWludCBjcHUsIG9yaWdfY3B1LCB0aGlzX2NwdSwgc3VjY2VzcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcnEgKnJxOworCXN0cnVjdCBycSAqcnEsICpvcmlnX3JxOwogCiAJaWYgKCFzY2hlZF9mZWF0KFNZTkNfV0FLRVVQUykpCiAJCXdha2VfZmxhZ3MgJj0gfldGX1NZTkM7CkBAIC0yMzE5LDcgKzIzMTYsNyBAQAogCXRoaXNfY3B1ID0gZ2V0X2NwdSgpOwogCiAJc21wX3dtYigpOwotCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisJcnEgPSBvcmlnX3JxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAlpZiAoIShwLT5zdGF0ZSAmIHN0YXRlKSkKIAkJZ290byBvdXQ7CkBAIC0yMzUwLDYgKzIzNDcsMTAgQEAKIAkJc2V0X3Rhc2tfY3B1KHAsIGNwdSk7CiAKIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworCisJaWYgKHJxICE9IG9yaWdfcnEpCisJCXVwZGF0ZV9ycV9jbG9jayhycSk7CisKIAlXQVJOX09OKHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HKTsKIAljcHUgPSB0YXNrX2NwdShwKTsKIApAQCAtMzY1Niw2ICszNjU3LDcgQEAKIAogLyoqCiAgKiB1cGRhdGVfc2dfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgogICogQGdyb3VwOiBzY2hlZF9ncm91cCB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgogICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgogICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1CkBAIC02NzE4LDkgKzY3MjAsNiBAQAogLyoKICAqIFRoaXMgdGFzayBpcyBhYm91dCB0byBnbyB0byBzbGVlcCBvbiBJTy4gSW5jcmVtZW50IHJxLT5ucl9pb3dhaXQgc28KICAqIHRoYXQgcHJvY2VzcyBhY2NvdW50aW5nIGtub3dzIHRoYXQgdGhpcyBpcyBhIHRhc2sgaW4gSU8gd2FpdCBzdGF0ZS4KLSAqCi0gKiBCdXQgZG9uJ3QgZG8gdGhhdCBpZiBpdCBpcyBhIGRlbGliZXJhdGUsIHRocm90dGxpbmcgSU8gd2FpdCAodGhpcyB0YXNrCi0gKiBoYXMgc2V0IGl0cyBiYWNraW5nX2Rldl9pbmZvOiB0aGUgcXVldWUgYWdhaW5zdCB3aGljaCBpdCBzaG91bGQgdGhyb3R0bGUpCiAgKi8KIHZvaWQgX19zY2hlZCBpb19zY2hlZHVsZSh2b2lkKQogewpAQCAtOTQwNCw2ICs5NDAzLDEwIEBACiAjZW5kaWYgLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KICNlbmRpZiAvKiBDT05GSUdfR1JPVVBfU0NIRUQgKi8KIAorI2lmIGRlZmluZWQgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgJiYgZGVmaW5lZCBDT05GSUdfU01QCisJdXBkYXRlX3NoYXJlc19kYXRhID0gX19hbGxvY19wZXJjcHUobnJfY3B1X2lkcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJCQkJICAgIF9fYWxpZ25vZl9fKHVuc2lnbmVkIGxvbmcpKTsKKyNlbmRpZgogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBycSAqcnE7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDRlNzc3YjQuLmMzMmMzZTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtODYxLDEyICs4NjEsMjEgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpwaWNrX25leHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9IF9fcGlja19uZXh0X2VudGl0eShjZnNfcnEpOworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKmJ1ZGR5OwogCi0JaWYgKGNmc19ycS0+bmV4dCAmJiB3YWtldXBfcHJlZW1wdF9lbnRpdHkoY2ZzX3JxLT5uZXh0LCBzZSkgPCAxKQotCQlyZXR1cm4gY2ZzX3JxLT5uZXh0OworCWlmIChjZnNfcnEtPm5leHQpIHsKKwkJYnVkZHkgPSBjZnNfcnEtPm5leHQ7CisJCWNmc19ycS0+bmV4dCA9IE5VTEw7CisJCWlmICh3YWtldXBfcHJlZW1wdF9lbnRpdHkoYnVkZHksIHNlKSA8IDEpCisJCQlyZXR1cm4gYnVkZHk7CisJfQogCi0JaWYgKGNmc19ycS0+bGFzdCAmJiB3YWtldXBfcHJlZW1wdF9lbnRpdHkoY2ZzX3JxLT5sYXN0LCBzZSkgPCAxKQotCQlyZXR1cm4gY2ZzX3JxLT5sYXN0OworCWlmIChjZnNfcnEtPmxhc3QpIHsKKwkJYnVkZHkgPSBjZnNfcnEtPmxhc3Q7CisJCWNmc19ycS0+bGFzdCA9IE5VTEw7CisJCWlmICh3YWtldXBfcHJlZW1wdF9lbnRpdHkoYnVkZHksIHNlKSA8IDEpCisJCQlyZXR1cm4gYnVkZHk7CisJfQogCiAJcmV0dXJuIHNlOwogfQpAQCAtMTY1NCwxNiArMTY2Myw2IEBACiAKIAlkbyB7CiAJCXNlID0gcGlja19uZXh0X2VudGl0eShjZnNfcnEpOwotCQkvKgotCQkgKiBJZiBzZSB3YXMgYSBidWRkeSwgY2xlYXIgaXQgc28gdGhhdCBpdCB3aWxsIGhhdmUgdG8gZWFybgotCQkgKiB0aGUgZmF2b3VyIGFnYWluLgotCQkgKgotCQkgKiBJZiBzZSB3YXMgbm90IGEgYnVkZHksIGNsZWFyIHRoZSBidWRkaWVzIGJlY2F1c2UgbmVpdGhlcgotCQkgKiB3YXMgZWxlZ2libGUgdG8gcnVuLCBsZXQgdGhlbSBlYXJuIGl0IGFnYWluLgotCQkgKgotCQkgKiBJT1cuIHVuY29uZGl0aW9uYWxseSBjbGVhciBidWRkaWVzLgotCQkgKi8KLQkJX19jbGVhcl9idWRkaWVzKGNmc19ycSwgTlVMTCk7CiAJCXNldF9uZXh0X2VudGl0eShjZnNfcnEsIHNlKTsKIAkJY2ZzX3JxID0gZ3JvdXBfY2ZzX3JxKHNlKTsKIAl9IHdoaWxlIChjZnNfcnEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDI1NTQ3NWQuLmNlMTc3NjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTExMTAsNiArMTExMCw4IEBACiAJZXJyID0gc2Vzc2lvbjsKIG91dDoKIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKKwlpZiAoZXJyID4gMCkKKwkJcHJvY19zaWRfY29ubmVjdG9yKGdyb3VwX2xlYWRlcik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTU0NiwyNCArMTU0OCwzNyBAQAogCQkJaWYgKGFyZzQgfCBhcmc1KQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJc3dpdGNoIChhcmcyKSB7Ci0JCQljYXNlIDA6CisJCQljYXNlIFBSX01DRV9LSUxMX0NMRUFSOgogCQkJCWlmIChhcmczICE9IDApCiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9NQ0VfUFJPQ0VTUzsKIAkJCQlicmVhazsKLQkJCWNhc2UgMToKKwkJCWNhc2UgUFJfTUNFX0tJTExfU0VUOgogCQkJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01DRV9QUk9DRVNTOwotCQkJCWlmIChhcmczICE9IDApCisJCQkJaWYgKGFyZzMgPT0gUFJfTUNFX0tJTExfRUFSTFkpCiAJCQkJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01DRV9FQVJMWTsKLQkJCQllbHNlCisJCQkJZWxzZSBpZiAoYXJnMyA9PSBQUl9NQ0VfS0lMTF9MQVRFKQogCQkJCQljdXJyZW50LT5mbGFncyAmPSB+UEZfTUNFX0VBUkxZOworCQkJCWVsc2UgaWYgKGFyZzMgPT0gUFJfTUNFX0tJTExfREVGQVVMVCkKKwkJCQkJY3VycmVudC0+ZmxhZ3MgJj0KKwkJCQkJCX4oUEZfTUNFX0VBUkxZfFBGX01DRV9QUk9DRVNTKTsKKwkJCQllbHNlCisJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWVycm9yID0gMDsKIAkJCWJyZWFrOwotCisJCWNhc2UgUFJfTUNFX0tJTExfR0VUOgorCQkJaWYgKGFyZzIgfCBhcmczIHwgYXJnNCB8IGFyZzUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9NQ0VfUFJPQ0VTUykKKwkJCQllcnJvciA9IChjdXJyZW50LT5mbGFncyAmIFBGX01DRV9FQVJMWSkgPworCQkJCQlQUl9NQ0VfS0lMTF9FQVJMWSA6IFBSX01DRV9LSUxMX0xBVEU7CisJCQllbHNlCisJCQkJZXJyb3IgPSBQUl9NQ0VfS0lMTF9ERUZBVUxUOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllcnJvciA9IC1FSU5WQUw7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGxfY2hlY2suYyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwppbmRleCBiMzg0MjNjLi5iNmU3YWFlYSAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bF9jaGVjay5jCisrKyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwpAQCAtMTUyMSw3ICsxNTIxLDcgQEAKIAkJCWlmICghdGFibGUtPmN0bF9uYW1lICYmIHRhYmxlLT5zdHJhdGVneSkKIAkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJTdHJhdGVneSB3aXRob3V0IGN0bF9uYW1lIik7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19QUk9DX1NZU0NUTAogCQkJaWYgKHRhYmxlLT5wcm9jbmFtZSAmJiAhdGFibGUtPnByb2NfaGFuZGxlcikKIAkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJObyBwcm9jX2hhbmRsZXIiKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCmluZGV4IDM3YmE2N2UuLjljNDUxYTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTc0MCw3ICs3NDAsNyBAQAogIG91dDoKIAltdXRleF91bmxvY2soJmZ0cmFjZV9wcm9maWxlX2xvY2spOwogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IGQ0ZmYwMTkuLjNmZmE1MDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC00ODMsNyArNDgzLDcgQEAKIC8qIFVwIHRoaXMgaWYgeW91IHdhbnQgdG8gdGVzdCB0aGUgVElNRV9FWFRFTlRTIGFuZCBub3JtYWxpemF0aW9uICovCiAjZGVmaW5lIERFQlVHX1NISUZUIDAKIAotc3RhdGljIGlubGluZSB1NjQgcmJfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgdTY0IHJiX3RpbWVfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCiB7CiAJLyogc2hpZnQgdG8gZGVidWcvdGVzdCBub3JtYWxpemF0aW9uIGFuZCBUSU1FX0VYVEVOVFMgKi8KIAlyZXR1cm4gYnVmZmVyLT5jbG9jaygpIDw8IERFQlVHX1NISUZUOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJdTY0IHRpbWU7CiAKIAlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwotCXRpbWUgPSByYl90aW1lX3N0YW1wKGJ1ZmZlciwgY3B1KTsKKwl0aW1lID0gcmJfdGltZV9zdGFtcChidWZmZXIpOwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOwogCiAJcmV0dXJuIHRpbWU7CkBAIC01OTksNyArNTk5LDcgQEAKIH0KIAogLyoKLSAqIHJiX2lzX2hlYWRfcGFnZSAtIHRlc3QgaWYgdGhlIGdpdmUgcGFnZSBpcyB0aGUgaGVhZCBwYWdlCisgKiByYl9pc19oZWFkX3BhZ2UgLSB0ZXN0IGlmIHRoZSBnaXZlbiBwYWdlIGlzIHRoZSBoZWFkIHBhZ2UKICAqCiAgKiBCZWNhdXNlIHRoZSByZWFkZXIgbWF5IG1vdmUgdGhlIGhlYWRfcGFnZSBwb2ludGVyLCB3ZSBjYW4KICAqIG5vdCB0cnVzdCB3aGF0IHRoZSBoZWFkIHBhZ2UgaXMgKGl0IG1heSBiZSBwb2ludGluZyB0bwpAQCAtMTg2OCw3ICsxODY4LDcgQEAKIAkJICogTmVzdGVkIGNvbW1pdHMgYWx3YXlzIGhhdmUgemVybyBkZWx0YXMsIHNvCiAJCSAqIGp1c3QgcmVyZWFkIHRoZSB0aW1lIHN0YW1wCiAJCSAqLwotCQkqdHMgPSByYl90aW1lX3N0YW1wKGJ1ZmZlciwgY3B1X2J1ZmZlci0+Y3B1KTsKKwkJKnRzID0gcmJfdGltZV9zdGFtcChidWZmZXIpOwogCQluZXh0X3BhZ2UtPnBhZ2UtPnRpbWVfc3RhbXAgPSAqdHM7CiAJfQogCkBAIC0yMTExLDcgKzIxMTEsNyBAQAogCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsICsrbnJfbG9vcHMgPiAxMDAwKSkKIAkJZ290byBvdXRfZmFpbDsKIAotCXRzID0gcmJfdGltZV9zdGFtcChjcHVfYnVmZmVyLT5idWZmZXIsIGNwdV9idWZmZXItPmNwdSk7CisJdHMgPSByYl90aW1lX3N0YW1wKGNwdV9idWZmZXItPmJ1ZmZlcik7CiAKIAkvKgogCSAqIE9ubHkgdGhlIGZpcnN0IGNvbW1pdCBjYW4gdXBkYXRlIHRoZSB0aW1lc3RhbXAuCkBAIC0yNjgxLDcgKzI2ODEsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllcyk7CiAKIC8qKgotICogcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBpbiBidWZmZXIKKyAqIHJpbmdfYnVmZmVyX292ZXJydW5zIC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYnVmZmVyCiAgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIKICAqCiAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gdGhlIHJpbmcgYnVmZmVyCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IDQ1MDY4MjYuLmIyMGQzZWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC0xMzkzLDcgKzEzOTMsNyBAQAogCiBpbnQgdHJhY2VfdnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKLQlyZXR1cm4gdHJhY2VfYXJyYXlfcHJpbnRrKCZnbG9iYWxfdHJhY2UsIGlwLCBmbXQsIGFyZ3MpOworCXJldHVybiB0cmFjZV9hcnJheV92cHJpbnRrKCZnbG9iYWxfdHJhY2UsIGlwLCBmbXQsIGFyZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfdnByaW50ayk7CiAKQEAgLTI0NDAsNyArMjQ0MCw3IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMjU4Miw3ICsyNTgyLDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMjc2NCw3ICsyNzY0LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZmlscC0+Zl9wb3MgKz0gcmV0OworCSpwcG9zICs9IHJldDsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zMjk5LDcgKzMyOTksNyBAQAogCQl9CiAJfQogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCS8qIElmIGNoZWNrIHBhZ2VzIGZhaWxlZCwgcmV0dXJuIEVOT01FTSAqLwogCWlmICh0cmFjaW5nX2Rpc2FibGVkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKaW5kZXggMjMyNDU3OC4uOThhNmNjNSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCkBAIC05MzMsOCArOTMzLDkgQEAKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmcHMtPnBvc3RmaXgpKSB7CiAJCWVsdCA9IGxpc3RfZmlyc3RfZW50cnkoJnBzLT5wb3N0Zml4LCBzdHJ1Y3QgcG9zdGZpeF9lbHQsIGxpc3QpOwotCQlrZnJlZShlbHQtPm9wZXJhbmQpOwogCQlsaXN0X2RlbCgmZWx0LT5saXN0KTsKKwkJa2ZyZWUoZWx0LT5vcGVyYW5kKTsKKwkJa2ZyZWUoZWx0KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwppbmRleCBlZDE3NTY1Li5iNmMxMmM2IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCkBAIC02OSw2ICs2OSw5IEBACiAgKiBAczogdHJhY2Ugc2VxdWVuY2UgZGVzY3JpcHRvcgogICogQGZtdDogcHJpbnRmIGZvcm1hdCBzdHJpbmcKICAqCisgKiBJdCByZXR1cm5zIDAgaWYgdGhlIHRyYWNlIG92ZXJzaXplcyB0aGUgYnVmZmVyJ3MgZnJlZQorICogc3BhY2UsIDEgb3RoZXJ3aXNlLgorICoKICAqIFRoZSB0cmFjZXIgbWF5IHVzZSBlaXRoZXIgc2VxdWVuY2Ugb3BlcmF0aW9ucyBvciBpdHMgb3duCiAgKiBjb3B5IHRvIHVzZXIgcm91dGluZXMuIFRvIHNpbXBsaWZ5IGZvcm1hdGluZyBvZiBhIHRyYWNlCiAgKiB0cmFjZV9zZXFfcHJpbnRmIGlzIHVzZWQgdG8gc3RvcmUgc3RyaW5ncyBpbnRvIGEgc3BlY2lhbApAQCAtOTUsNyArOTgsNyBAQAogCiAJcy0+bGVuICs9IHJldDsKIAotCXJldHVybiBsZW47CisJcmV0dXJuIDE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9zZXFfcHJpbnRmKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IGFkZGZlMmQuLjEyMzI4MTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTY0MCw2ICs2NDAsMjQgQEAKIEVYUE9SVF9TWU1CT0woc2NoZWR1bGVfZGVsYXllZF93b3JrKTsKIAogLyoqCisgKiBmbHVzaF9kZWxheWVkX3dvcmsgLSBibG9jayB1bnRpbCBhIGR3b3JrX3N0cnVjdCdzIGNhbGxiYWNrIGhhcyB0ZXJtaW5hdGVkCisgKiBAZHdvcms6IHRoZSBkZWxheWVkIHdvcmsgd2hpY2ggaXMgdG8gYmUgZmx1c2hlZAorICoKKyAqIEFueSB0aW1lb3V0IGlzIGNhbmNlbGxlZCwgYW5kIGFueSBwZW5kaW5nIHdvcmsgaXMgcnVuIGltbWVkaWF0ZWx5LgorICovCit2b2lkIGZsdXNoX2RlbGF5ZWRfd29yayhzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaykKK3sKKwlpZiAoZGVsX3RpbWVyX3N5bmMoJmR3b3JrLT50aW1lcikpIHsKKwkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3E7CisJCWN3cSA9IHdxX3Blcl9jcHUoa2V2ZW50ZF93cSwgZ2V0X2NwdSgpKTsKKwkJX19xdWV1ZV93b3JrKGN3cSwgJmR3b3JrLT53b3JrKTsKKwkJcHV0X2NwdSgpOworCX0KKwlmbHVzaF93b3JrKCZkd29yay0+d29yayk7Cit9CitFWFBPUlRfU1lNQk9MKGZsdXNoX2RlbGF5ZWRfd29yayk7CisKKy8qKgogICogc2NoZWR1bGVfZGVsYXllZF93b3JrX29uIC0gcXVldWUgd29yayBpbiBnbG9iYWwgd29ya3F1ZXVlIG9uIENQVSBhZnRlciBkZWxheQogICogQGNwdTogY3B1IHRvIHVzZQogICogQGR3b3JrOiBqb2IgdG8gYmUgZG9uZQpAQCAtNjY3LDIxICs2ODUsMzggQEAKIGludCBzY2hlZHVsZV9vbl9lYWNoX2NwdSh3b3JrX2Z1bmNfdCBmdW5jKQogewogCWludCBjcHU7CisJaW50IG9yaWcgPSAtMTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtzOwogCiAJd29ya3MgPSBhbGxvY19wZXJjcHUoc3RydWN0IHdvcmtfc3RydWN0KTsKIAlpZiAoIXdvcmtzKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCS8qCisJICogd2hlbiBydW5uaW5nIGluIGtldmVudGQgZG9uJ3Qgc2NoZWR1bGUgYSB3b3JrIGl0ZW0gb24gaXRzZWxmLgorCSAqIENhbiBqdXN0IGNhbGwgZGlyZWN0bHkgYmVjYXVzZSB0aGUgd29yayBxdWV1ZSBpcyBhbHJlYWR5IGJvdW5kLgorCSAqIFRoaXMgYWxzbyBpcyBmYXN0ZXIuCisJICogTWFrZSB0aGlzIGEgZ2VuZXJpYyBwYXJhbWV0ZXIgZm9yIG90aGVyIHdvcmtxdWV1ZXM/CisJICovCisJaWYgKGN1cnJlbnRfaXNfa2V2ZW50ZCgpKSB7CisJCW9yaWcgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCQlJTklUX1dPUksocGVyX2NwdV9wdHIod29ya3MsIG9yaWcpLCBmdW5jKTsKKwkJZnVuYyhwZXJfY3B1X3B0cih3b3Jrcywgb3JpZykpOworCX0KKwogCWdldF9vbmxpbmVfY3B1cygpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9IHBlcl9jcHVfcHRyKHdvcmtzLCBjcHUpOwogCisJCWlmIChjcHUgPT0gb3JpZykKKwkJCWNvbnRpbnVlOwogCQlJTklUX1dPUksod29yaywgZnVuYyk7CiAJCXNjaGVkdWxlX3dvcmtfb24oY3B1LCB3b3JrKTsKIAl9Ci0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCWZsdXNoX3dvcmsocGVyX2NwdV9wdHIod29ya3MsIGNwdSkpOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWlmIChjcHUgIT0gb3JpZykKKwkJCWZsdXNoX3dvcmsocGVyX2NwdV9wdHIod29ya3MsIGNwdSkpOworCX0KIAlwdXRfb25saW5lX2NwdXMoKTsKIAlmcmVlX3BlcmNwdSh3b3Jrcyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDMwZGY1ODYuLjIzNGNlYjEgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0zOTIsNyArMzkyLDcgQEAKIAogY29uZmlnIERFQlVHX1BSRUVNUFQKIAlib29sICJEZWJ1ZyBwcmVlbXB0aWJsZSBrZXJuZWwiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgUFJFRU1QVCAmJiAoVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCB8fCBQUEM2NCkKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBQUkVFTVBUICYmIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGVuIHRoZSBrZXJuZWwgd2lsbCB1c2UgYSBkZWJ1ZyB2YXJpYW50IG9mIHRoZQpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggNTc5NjNjNi4uZmQzMzg2MiAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC02Nyw3ICs2Nyw3IEBACiAKIGNvbmZpZyBTUEFSU0VNRU0KIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBTUEFSU0VNRU1fTUFOVUFMCisJZGVwZW5kcyBvbiAoIVNFTEVDVF9NRU1PUllfTU9ERUwgJiYgQVJDSF9TUEFSU0VNRU1fRU5BQkxFKSB8fCBTUEFSU0VNRU1fTUFOVUFMCiAKIGNvbmZpZyBGTEFUTUVNCiAJZGVmX2Jvb2wgeQpAQCAtMTI5LDcgKzEyOSw3IEBACiAJYm9vbCAiQWxsb3cgZm9yIG1lbW9yeSBob3QtYWRkIgogCWRlcGVuZHMgb24gU1BBUlNFTUVNIHx8IFg4Nl82NF9BQ1BJX05VTUEKIAlkZXBlbmRzIG9uIEhPVFBMVUcgJiYgIShISUJFUk5BVElPTiAmJiAhUzM5MCkgJiYgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKLQlkZXBlbmRzIG9uIChJQTY0IHx8IFg4NiB8fCBQUEM2NCB8fCBTVVBFUkggfHwgUzM5MCkKKwlkZXBlbmRzIG9uIChJQTY0IHx8IFg4NiB8fCBQUENfQk9PSzNTXzY0IHx8IFNVUEVSSCB8fCBTMzkwKQogCiBjb21tZW50ICJNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZCIKIAlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBIT1RQTFVHICYmIEhJQkVSTkFUSU9OICYmICFTMzkwCmRpZmYgLS1naXQgYS9tbS9iYWNraW5nLWRldi5jIGIvbW0vYmFja2luZy1kZXYuYwppbmRleCAzZDNhY2NiLi4xMDY1YjcxIDEwMDY0NAotLS0gYS9tbS9iYWNraW5nLWRldi5jCisrKyBiL21tL2JhY2tpbmctZGV2LmMKQEAgLTkyLDcgKzkyLDcgQEAKIAkJICAgIkJkaURpcnR5VGhyZXNoOiAgICU4bHUga0JcbiIKIAkJICAgIkRpcnR5VGhyZXNoOiAgICAgICU4bHUga0JcbiIKIAkJICAgIkJhY2tncm91bmRUaHJlc2g6ICU4bHUga0JcbiIKLQkJICAgIldyaXRlQmFjayB0aHJlYWRzOiU4bHVcbiIKKwkJICAgIldyaXRlYmFja1RocmVhZHM6ICU4bHVcbiIKIAkJICAgImJfZGlydHk6ICAgICAgICAgICU4bHVcbiIKIAkJICAgImJfaW86ICAgICAgICAgICAgICU4bHVcbiIKIAkJICAgImJfbW9yZV9pbzogICAgICAgICU4bHVcbiIKQEAgLTYxMCw2ICs2MTAsMjEgQEAKIAkJa3RocmVhZF9zdG9wKHdiLT50YXNrKTsKIH0KIAorLyoKKyAqIFRoaXMgYmRpIGlzIGdvaW5nIGF3YXkgbm93LCBtYWtlIHN1cmUgdGhhdCBubyBzdXBlcl9ibG9ja3MgcG9pbnQgdG8gaXQKKyAqLworc3RhdGljIHZvaWQgYmRpX3BydW5lX3NiKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKworCXNwaW5fbG9jaygmc2JfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7CisJCWlmIChzYi0+c19iZGkgPT0gYmRpKQorCQkJc2ItPnNfYmRpID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2soJnNiX2xvY2spOworfQorCiB2b2lkIGJkaV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCiB7CiAJaWYgKGJkaS0+ZGV2KSB7CkBAIC02ODIsNiArNjk3LDcgQEAKIAkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCX0KIAorCWJkaV9wcnVuZV9zYihiZGkpOwogCWJkaV91bnJlZ2lzdGVyKGJkaSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfQkRJX1NUQVRfSVRFTVM7IGkrKykKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDcyOWQ0YjEuLmRhY2M2NDEgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva3NtLmg+CiAjaW5jbHVkZSA8bGludXgvcm1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CkBAIC0zNzAsOSArMzcxLDYgQEAKIAlpbnQgcmV0ID0gRkFJTEVEOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCi0JaWYgKCFpc29sYXRlX2xydV9wYWdlKHApKQotCQlwYWdlX2NhY2hlX3JlbGVhc2UocCk7Ci0KIAkvKgogCSAqIEZvciBhbm9ueW1vdXMgcGFnZXMgd2UncmUgZG9uZSB0aGUgb25seSByZWZlcmVuY2UgbGVmdAogCSAqIHNob3VsZCBiZSB0aGUgb25lIG1fZigpIGhvbGRzLgpAQCAtNDk4LDMwICs0OTYsMTggQEAKICAqLwogc3RhdGljIGludCBtZV9zd2FwY2FjaGVfZGlydHkoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgcGZuKQogewotCWludCByZXQgPSBGQUlMRUQ7Ci0KIAlDbGVhclBhZ2VEaXJ0eShwKTsKIAkvKiBUcmlnZ2VyIEVJTyBpbiBzaG1lbTogKi8KIAlDbGVhclBhZ2VVcHRvZGF0ZShwKTsKIAotCWlmICghaXNvbGF0ZV9scnVfcGFnZShwKSkgewotCQlwYWdlX2NhY2hlX3JlbGVhc2UocCk7Ci0JCXJldCA9IERFTEFZRUQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gREVMQVlFRDsKIH0KIAogc3RhdGljIGludCBtZV9zd2FwY2FjaGVfY2xlYW4oc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgcGZuKQogewotCWludCByZXQgPSBGQUlMRUQ7Ci0KLQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocCkpIHsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHApOwotCQlyZXQgPSBSRUNPVkVSRUQ7Ci0JfQogCWRlbGV0ZV9mcm9tX3N3YXBfY2FjaGUocCk7Ci0JcmV0dXJuIHJldDsKKworCXJldHVybiBSRUNPVkVSRUQ7CiB9CiAKIC8qCkBAIC02MTEsOCArNTk3LDYgQEAKIAl7IDAsCQkwLAkJInVua25vd24gcGFnZSBzdGF0ZSIsCW1lX3Vua25vd24gfSwKIH07CiAKLSN1bmRlZiBscnUKLQogc3RhdGljIHZvaWQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgY2hhciAqbXNnLCBpbnQgcmVzdWx0KQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKQEAgLTYyOSwxMyArNjEzLDE2IEBACiAJCQl1bnNpZ25lZCBsb25nIHBmbiwgaW50IHJlZikKIHsKIAlpbnQgcmVzdWx0OworCWludCBjb3VudDsKIAogCXJlc3VsdCA9IHBzLT5hY3Rpb24ocCwgcGZuKTsKIAlhY3Rpb25fcmVzdWx0KHBmbiwgcHMtPm1zZywgcmVzdWx0KTsKLQlpZiAocGFnZV9jb3VudChwKSAhPSAxICsgcmVmKQorCisJY291bnQgPSBwYWdlX2NvdW50KHApIC0gMSAtIHJlZjsKKwlpZiAoY291bnQgIT0gMCkKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiTUNFICUjbHg6ICVzIHBhZ2Ugc3RpbGwgcmVmZXJlbmNlZCBieSAlZCB1c2Vyc1xuIiwKLQkJICAgICAgIHBmbiwgcHMtPm1zZywgcGFnZV9jb3VudChwKSAtIDEpOworCQkgICAgICAgcGZuLCBwcy0+bXNnLCBjb3VudCk7CiAKIAkvKiBDb3VsZCBkbyBtb3JlIGNoZWNrcyBoZXJlIGlmIHBhZ2UgbG9va3Mgb2sgKi8KIAkvKgpAQCAtNjYxLDEyICs2NDgsOSBAQAogCWludCBpOwogCWludCBraWxsID0gMTsKIAotCWlmIChQYWdlUmVzZXJ2ZWQocCkgfHwgUGFnZUNvbXBvdW5kKHApIHx8IFBhZ2VTbGFiKHApKQorCWlmIChQYWdlUmVzZXJ2ZWQocCkgfHwgUGFnZUNvbXBvdW5kKHApIHx8IFBhZ2VTbGFiKHApIHx8IFBhZ2VLc20ocCkpCiAJCXJldHVybjsKIAotCWlmICghUGFnZUxSVShwKSkKLQkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKLQogCS8qCiAJICogVGhpcyBjaGVjayBpbXBsaWVzIHdlIGRvbid0IGtpbGwgcHJvY2Vzc2VzIGlmIHRoZWlyIHBhZ2VzCiAJICogYXJlIGluIHRoZSBzd2FwIGNhY2hlIGVhcmx5LiBUaG9zZSBhcmUgYWx3YXlzIGxhdGUga2lsbHMuCkBAIC03MzgsNiArNzIyLDcgQEAKIAogaW50IF9fbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCB0cmFwbm8sIGludCByZWYpCiB7CisJdW5zaWduZWQgbG9uZyBscnVfZmxhZzsKIAlzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHM7CiAJc3RydWN0IHBhZ2UgKnA7CiAJaW50IHJlczsKQEAgLTc3NSw2ICs3NjAsMjQgQEAKIAl9CiAKIAkvKgorCSAqIFdlIGlnbm9yZSBub24tTFJVIHBhZ2VzIGZvciBnb29kIHJlYXNvbnMuCisJICogLSBQR19sb2NrZWQgaXMgb25seSB3ZWxsIGRlZmluZWQgZm9yIExSVSBwYWdlcyBhbmQgYSBmZXcgb3RoZXJzCisJICogLSB0byBhdm9pZCByYWNlcyB3aXRoIF9fc2V0X3BhZ2VfbG9ja2VkKCkKKwkgKiAtIHRvIGF2b2lkIHJhY2VzIHdpdGggX19TZXRQYWdlU2xhYiooKSAoYW5kIG1vcmUgbm9uLWF0b21pYyBvcHMpCisJICogVGhlIGNoZWNrICh1bm5lY2Vzc2FyaWx5KSBpZ25vcmVzIExSVSBwYWdlcyBiZWluZyBpc29sYXRlZCBhbmQKKwkgKiB3YWxrZWQgYnkgdGhlIHBhZ2UgcmVjbGFpbSBjb2RlLCBob3dldmVyIHRoYXQncyBub3QgYSBiaWcgbG9zcy4KKwkgKi8KKwlpZiAoIVBhZ2VMUlUocCkpCisJCWxydV9hZGRfZHJhaW5fYWxsKCk7CisJbHJ1X2ZsYWcgPSBwLT5mbGFncyAmIGxydTsKKwlpZiAoaXNvbGF0ZV9scnVfcGFnZShwKSkgeworCQlhY3Rpb25fcmVzdWx0KHBmbiwgIm5vbiBMUlUiLCBJR05PUkVEKTsKKwkJcHV0X3BhZ2UocCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXBhZ2VfY2FjaGVfcmVsZWFzZShwKTsKKworCS8qCiAJICogTG9jayB0aGUgcGFnZSBhbmQgd2FpdCBmb3Igd3JpdGViYWNrIHRvIGZpbmlzaC4KIAkgKiBJdCdzIHZlcnkgZGlmZmljdWx0IHRvIG1lc3Mgd2l0aCBwYWdlcyBjdXJyZW50bHkgdW5kZXIgSU8KIAkgKiBhbmQgaW4gbWFueSBjYXNlcyBpbXBvc3NpYmxlLCBzbyB3ZSBqdXN0IGF2b2lkIGl0IGhlcmUuCkBAIC03OTAsNyArNzkzLDcgQEAKIAkvKgogCSAqIFRvcm4gZG93biBieSBzb21lb25lIGVsc2U/CiAJICovCi0JaWYgKFBhZ2VMUlUocCkgJiYgIVBhZ2VTd2FwQ2FjaGUocCkgJiYgcC0+bWFwcGluZyA9PSBOVUxMKSB7CisJaWYgKChscnVfZmxhZyAmIGxydSkgJiYgIVBhZ2VTd2FwQ2FjaGUocCkgJiYgcC0+bWFwcGluZyA9PSBOVUxMKSB7CiAJCWFjdGlvbl9yZXN1bHQocGZuLCAiYWxyZWFkeSB0cnVuY2F0ZWQgTFJVIiwgSUdOT1JFRCk7CiAJCXJlcyA9IDA7CiAJCWdvdG8gb3V0OwpAQCAtNzk4LDcgKzgwMSw3IEBACiAKIAlyZXMgPSAtRUJVU1k7CiAJZm9yIChwcyA9IGVycm9yX3N0YXRlczs7IHBzKyspIHsKLQkJaWYgKChwLT5mbGFncyAmIHBzLT5tYXNrKSA9PSBwcy0+cmVzKSB7CisJCWlmICgoKHAtPmZsYWdzIHwgbHJ1X2ZsYWcpJiBwcy0+bWFzaykgPT0gcHMtPnJlcykgewogCQkJcmVzID0gcGFnZV9hY3Rpb24ocHMsIHAsIHBmbiwgcmVmKTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDdlOTFiNWYuLjZhYjE5ZGQgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC02NDEsNiArNjQxLDcgQEAKIAkJcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKKwlwdGVfdCAqb3JpZ19zcmNfcHRlLCAqb3JpZ19kc3RfcHRlOwogCXB0ZV90ICpzcmNfcHRlLCAqZHN0X3B0ZTsKIAlzcGlubG9ja190ICpzcmNfcHRsLCAqZHN0X3B0bDsKIAlpbnQgcHJvZ3Jlc3MgPSAwOwpAQCAtNjU0LDYgKzY1NSw4IEBACiAJc3JjX3B0ZSA9IHB0ZV9vZmZzZXRfbWFwX25lc3RlZChzcmNfcG1kLCBhZGRyKTsKIAlzcmNfcHRsID0gcHRlX2xvY2twdHIoc3JjX21tLCBzcmNfcG1kKTsKIAlzcGluX2xvY2tfbmVzdGVkKHNyY19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwlvcmlnX3NyY19wdGUgPSBzcmNfcHRlOworCW9yaWdfZHN0X3B0ZSA9IGRzdF9wdGU7CiAJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiAKIAlkbyB7CkBAIC02NzcsOSArNjgwLDkgQEAKIAogCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCXNwaW5fdW5sb2NrKHNyY19wdGwpOwotCXB0ZV91bm1hcF9uZXN0ZWQoc3JjX3B0ZSAtIDEpOworCXB0ZV91bm1hcF9uZXN0ZWQob3JpZ19zcmNfcHRlKTsKIAlhZGRfbW1fcnNzKGRzdF9tbSwgcnNzWzBdLCByc3NbMV0pOwotCXB0ZV91bm1hcF91bmxvY2soZHN0X3B0ZSAtIDEsIGRzdF9wdGwpOworCXB0ZV91bm1hcF91bmxvY2sob3JpZ19kc3RfcHRlLCBkc3RfcHRsKTsKIAljb25kX3Jlc2NoZWQoKTsKIAlpZiAoYWRkciAhPSBlbmQpCiAJCWdvdG8gYWdhaW47CkBAIC0xODIwLDEwICsxODIzLDEwIEBACiAJdG9rZW4gPSBwbWRfcGd0YWJsZSgqcG1kKTsKIAogCWRvIHsKLQkJZXJyID0gZm4ocHRlLCB0b2tlbiwgYWRkciwgZGF0YSk7CisJCWVyciA9IGZuKHB0ZSsrLCB0b2tlbiwgYWRkciwgZGF0YSk7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKLQl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKKwl9IHdoaWxlIChhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogCiAJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CiAKQEAgLTI1MzksNyArMjU0Miw3IEBACiAJfSBlbHNlIGlmIChQYWdlSFdQb2lzb24ocGFnZSkpIHsKIAkJcmV0ID0gVk1fRkFVTFRfSFdQT0lTT047CiAJCWRlbGF5YWNjdF9jbGVhcl9mbGFnKERFTEFZQUNDVF9QRl9TV0FQSU4pOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfcmVsZWFzZTsKIAl9CiAKIAlsb2NrX3BhZ2UocGFnZSk7CkBAIC0yNjExLDYgKzI2MTQsNyBAQAogCXB0ZV91bm1hcF91bmxvY2socGFnZV90YWJsZSwgcHRsKTsKIG91dF9wYWdlOgogCXVubG9ja19wYWdlKHBhZ2UpOworb3V0X3JlbGVhc2U6CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDdkZDlkOWYuLjQ1NDVkNTkgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC0xMDI0LDcgKzEwMjQsNyBAQAogCiAJCWVyciA9IG1pZ3JhdGVfcHJlcCgpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gbXBvbF9vdXQ7CiAJfQogCXsKIAkJTk9ERU1BU0tfU0NSQVRDSChzY3JhdGNoKTsKQEAgLTEwMzksMTAgKzEwMzksOSBAQAogCQkJZXJyID0gLUVOT01FTTsKIAkJTk9ERU1BU0tfU0NSQVRDSF9GUkVFKHNjcmF0Y2gpOwogCX0KLQlpZiAoZXJyKSB7Ci0JCW1wb2xfcHV0KG5ldyk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmIChlcnIpCisJCWdvdG8gbXBvbF9vdXQ7CisKIAl2bWEgPSBjaGVja19yYW5nZShtbSwgc3RhcnQsIGVuZCwgbm1hc2ssCiAJCQkgIGZsYWdzIHwgTVBPTF9NRl9JTlZFUlQsICZwYWdlbGlzdCk7CiAKQEAgLTEwNTgsOSArMTA1NywxMSBAQAogCiAJCWlmICghZXJyICYmIG5yX2ZhaWxlZCAmJiAoZmxhZ3MgJiBNUE9MX01GX1NUUklDVCkpCiAJCQllcnIgPSAtRUlPOwotCX0KKwl9IGVsc2UKKwkJcHV0YmFja19scnVfcGFnZXMoJnBhZ2VsaXN0KTsKIAogCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworIG1wb2xfb3V0OgogCW1wb2xfcHV0KG5ldyk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDUxODliNWEuLjk4NzZmYTAgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMTM2Miw5ICsxMzYyLDExIEBACiBlcnJvcl9qdXN0X2ZyZWU6CiAJdXBfd3JpdGUoJm5vbW11X3JlZ2lvbl9zZW0pOwogZXJyb3I6Ci0JZnB1dChyZWdpb24tPnZtX2ZpbGUpOworCWlmIChyZWdpb24tPnZtX2ZpbGUpCisJCWZwdXQocmVnaW9uLT52bV9maWxlKTsKIAlrbWVtX2NhY2hlX2ZyZWUodm1fcmVnaW9uX2phciwgcmVnaW9uKTsKLQlmcHV0KHZtYS0+dm1fZmlsZSk7CisJaWYgKHZtYS0+dm1fZmlsZSkKKwkJZnB1dCh2bWEtPnZtX2ZpbGUpOwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkKIAkJcmVtb3ZlZF9leGVfZmlsZV92bWEodm1hLT52bV9tbSk7CiAJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB2bWEpOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggYTNiMTQwOS4uMmM1ZDc5MiAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC01NjYsNyArNTY2LDggQEAKIAkJaWYgKHBhZ2VzX3dyaXR0ZW4gPj0gd3JpdGVfY2h1bmspCiAJCQlicmVhazsJCS8qIFdlJ3ZlIGRvbmUgb3VyIGR1dHkgKi8KIAotCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUocGF1c2UpOworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlvX3NjaGVkdWxlX3RpbWVvdXQocGF1c2UpOwogCiAJCS8qCiAJCSAqIEluY3JlYXNlIHRoZSBkZWxheSBmb3IgZWFjaCBsb29wLCB1cCB0byBvdXIgcHJldmlvdXMKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBiZjcyMDU1Li5jZGNlZGY2IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0yMTgzLDcgKzIxODMsNyBAQAogCXByaW50aygiYWN0aXZlX2Fub246JWx1IGluYWN0aXZlX2Fub246JWx1IGlzb2xhdGVkX2Fub246JWx1XG4iCiAJCSIgYWN0aXZlX2ZpbGU6JWx1IGluYWN0aXZlX2ZpbGU6JWx1IGlzb2xhdGVkX2ZpbGU6JWx1XG4iCiAJCSIgdW5ldmljdGFibGU6JWx1IgotCQkiIGRpcnR5OiVsdSB3cml0ZWJhY2s6JWx1IHVuc3RhYmxlOiVsdSBidWZmZXI6JWx1XG4iCisJCSIgZGlydHk6JWx1IHdyaXRlYmFjazolbHUgdW5zdGFibGU6JWx1XG4iCiAJCSIgZnJlZTolbHUgc2xhYl9yZWNsYWltYWJsZTolbHUgc2xhYl91bnJlY2xhaW1hYmxlOiVsdVxuIgogCQkiIG1hcHBlZDolbHUgc2htZW06JWx1IHBhZ2V0YWJsZXM6JWx1IGJvdW5jZTolbHVcbiIsCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRV9BTk9OKSwKQEAgLTIxOTYsNyArMjE5Niw2IEBACiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0spLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpLAotCQlucl9ibG9ja2Rldl9wYWdlcygpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9SRUNMQUlNQUJMRSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfVU5SRUNMQUlNQUJMRSksCmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jCmluZGV4IDRhMDQ4YWIuLmQ5MDc5NzEgMTAwNjQ0Ci0tLSBhL21tL3BlcmNwdS5jCisrKyBiL21tL3BlcmNwdS5jCkBAIC0xNTMsNyArMTUzLDEwIEBACiAgKgogICogRHVyaW5nIGFsbG9jYXRpb24sIHBjcHVfYWxsb2NfbXV0ZXggaXMga2VwdCBsb2NrZWQgYWxsIHRoZSB0aW1lIGFuZAogICogcGNwdV9sb2NrIGlzIGdyYWJiZWQgYW5kIHJlbGVhc2VkIGFzIG5lY2Vzc2FyeS4gIEFsbCBhY3R1YWwgbWVtb3J5Ci0gKiBhbGxvY2F0aW9ucyBhcmUgZG9uZSB1c2luZyBHRlBfS0VSTkVMIHdpdGggcGNwdV9sb2NrIHJlbGVhc2VkLgorICogYWxsb2NhdGlvbnMgYXJlIGRvbmUgdXNpbmcgR0ZQX0tFUk5FTCB3aXRoIHBjcHVfbG9jayByZWxlYXNlZC4gIEluCisgKiBnZW5lcmFsLCBwZXJjcHUgbWVtb3J5IGNhbid0IGJlIGFsbG9jYXRlZCB3aXRoIGlycSBvZmYgYnV0CisgKiBpcnFzYXZlL3Jlc3RvcmUgYXJlIHN0aWxsIHVzZWQgaW4gYWxsb2MgcGF0aCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkCisgKiBmcm9tIGVhcmx5IGluaXQgcGF0aCAtIHNjaGVkX2luaXQoKSBzcGVjaWZpY2FsbHkuCiAgKgogICogRnJlZSBwYXRoIGFjY2Vzc2VzIGFuZCBhbHRlcnMgb25seSB0aGUgaW5kZXggZGF0YSBzdHJ1Y3R1cmVzLCBzbyBpdAogICogY2FuIGJlIHNhZmVseSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dC4gIFdoZW4gbWVtb3J5IG5lZWRzIHRvIGJlCkBAIC0zNjYsNyArMzY5LDcgQEAKICAqIFJFVFVSTlM6CiAgKiAwIGlmIG5vb3AsIDEgaWYgc3VjY2Vzc2Z1bGx5IGV4dGVuZGVkLCAtZXJybm8gb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBwY3B1X2V4dGVuZF9hcmVhX21hcChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspCitzdGF0aWMgaW50IHBjcHVfZXh0ZW5kX2FyZWFfbWFwKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJaW50IG5ld19hbGxvYzsKIAlpbnQgKm5ldzsKQEAgLTM3Niw3ICszNzksNyBAQAogCWlmIChjaHVuay0+bWFwX2FsbG9jID49IGNodW5rLT5tYXBfdXNlZCArIDIpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgKmZsYWdzKTsKIAogCW5ld19hbGxvYyA9IFBDUFVfREZMX01BUF9BTExPQzsKIAl3aGlsZSAobmV3X2FsbG9jIDwgY2h1bmstPm1hcF91c2VkICsgMikKQEAgLTM4NCw3ICszODcsNyBAQAogCiAJbmV3ID0gcGNwdV9tZW1fYWxsb2MobmV3X2FsbG9jICogc2l6ZW9mKG5ld1swXSkpOwogCWlmICghbmV3KSB7Ci0JCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssICpmbGFncyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzkzLDcgKzM5Niw3IEBACiAJICogY291bGQgaGF2ZSBoYXBwZW5lZCBpbmJldHdlZW4sIHNvIG1hcF91c2VkIGNvdWxkbid0IGhhdmUKIAkgKiBncm93bi4KIAkgKi8KLQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssICpmbGFncyk7CiAJQlVHX09OKG5ld19hbGxvYyA8IGNodW5rLT5tYXBfdXNlZCArIDIpOwogCiAJc2l6ZSA9IGNodW5rLT5tYXBfYWxsb2MgKiBzaXplb2YoY2h1bmstPm1hcFswXSk7CkBAIC0xMDQ3LDYgKzEwNTAsNyBAQAogCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKIAljb25zdCBjaGFyICplcnI7CiAJaW50IHNsb3QsIG9mZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHVubGlrZWx5KCFzaXplIHx8IHNpemUgPiBQQ1BVX01JTl9VTklUX1NJWkUgfHwgYWxpZ24gPiBQQUdFX1NJWkUpKSB7CiAJCVdBUk4odHJ1ZSwgImlsbGVnYWwgc2l6ZSAoJXp1KSBvciBhbGlnbiAoJXp1KSBmb3IgIgpAQCAtMTA1NSwxMyArMTA1OSwxMyBAQAogCX0KIAogCW11dGV4X2xvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOwotCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJLyogc2VydmUgcmVzZXJ2ZWQgYWxsb2NhdGlvbnMgZnJvbSB0aGUgcmVzZXJ2ZWQgY2h1bmsgaWYgYXZhaWxhYmxlICovCiAJaWYgKHJlc2VydmVkICYmIHBjcHVfcmVzZXJ2ZWRfY2h1bmspIHsKIAkJY2h1bmsgPSBwY3B1X3Jlc2VydmVkX2NodW5rOwogCQlpZiAoc2l6ZSA+IGNodW5rLT5jb250aWdfaGludCB8fAotCQkgICAgcGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmspIDwgMCkgeworCQkgICAgcGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmssICZmbGFncykgPCAwKSB7CiAJCQllcnIgPSAiZmFpbGVkIHRvIGV4dGVuZCBhcmVhIG1hcCBvZiByZXNlcnZlZCBjaHVuayI7CiAJCQlnb3RvIGZhaWxfdW5sb2NrOwogCQl9CkBAIC0xMDc5LDcgKzEwODMsNyBAQAogCQkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQpCiAJCQkJY29udGludWU7CiAKLQkJCXN3aXRjaCAocGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmspKSB7CisJCQlzd2l0Y2ggKHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rLCAmZmxhZ3MpKSB7CiAJCQljYXNlIDA6CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6CkBAIC0xMDk2LDcgKzExMDAsNyBAQAogCX0KIAogCS8qIGhtbW0uLi4gbm8gc3BhY2UgbGVmdCwgY3JlYXRlIGEgbmV3IGNodW5rICovCi0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJY2h1bmsgPSBhbGxvY19wY3B1X2NodW5rKCk7CiAJaWYgKCFjaHVuaykgewpAQCAtMTEwNCwxNiArMTEwOCwxNiBAQAogCQlnb3RvIGZhaWxfdW5sb2NrX211dGV4OwogCX0KIAotCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCXBjcHVfY2h1bmtfcmVsb2NhdGUoY2h1bmssIC0xKTsKIAlnb3RvIHJlc3RhcnQ7CiAKIGFyZWFfZm91bmQ6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJLyogcG9wdWxhdGUsIG1hcCBhbmQgY2xlYXIgdGhlIGFyZWEgKi8KIAlpZiAocGNwdV9wb3B1bGF0ZV9jaHVuayhjaHVuaywgb2ZmLCBzaXplKSkgewotCQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAJCXBjcHVfZnJlZV9hcmVhKGNodW5rLCBvZmYpOwogCQllcnIgPSAiZmFpbGVkIHRvIHBvcHVsYXRlIjsKIAkJZ290byBmYWlsX3VubG9jazsKQEAgLTExMjUsNyArMTEyOSw3IEBACiAJcmV0dXJuIF9fYWRkcl90b19wY3B1X3B0cihjaHVuay0+YmFzZV9hZGRyICsgb2ZmKTsKIAogZmFpbF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogZmFpbF91bmxvY2tfbXV0ZXg6CiAJbXV0ZXhfdW5sb2NrKCZwY3B1X2FsbG9jX211dGV4KTsKIAlpZiAod2Fybl9saW1pdCkgewpAQCAtMTg3MCwxMyArMTg3NCwxNCBAQAogCW1heF9kaXN0YW5jZSA9IDA7CiAJZm9yIChncm91cCA9IDA7IGdyb3VwIDwgYWktPm5yX2dyb3VwczsgZ3JvdXArKykgewogCQlhaS0+Z3JvdXBzW2dyb3VwXS5iYXNlX29mZnNldCA9IGFyZWFzW2dyb3VwXSAtIGJhc2U7Ci0JCW1heF9kaXN0YW5jZSA9IG1heChtYXhfZGlzdGFuY2UsIGFpLT5ncm91cHNbZ3JvdXBdLmJhc2Vfb2Zmc2V0KTsKKwkJbWF4X2Rpc3RhbmNlID0gbWF4X3Qoc2l6ZV90LCBtYXhfZGlzdGFuY2UsCisJCQkJICAgICBhaS0+Z3JvdXBzW2dyb3VwXS5iYXNlX29mZnNldCk7CiAJfQogCW1heF9kaXN0YW5jZSArPSBhaS0+dW5pdF9zaXplOwogCiAJLyogd2FybiBpZiBtYXhpbXVtIGRpc3RhbmNlIGlzIGZ1cnRoZXIgdGhhbiA3NSUgb2Ygdm1hbGxvYyBzcGFjZSAqLwogCWlmIChtYXhfZGlzdGFuY2UgPiAoVk1BTExPQ19FTkQgLSBWTUFMTE9DX1NUQVJUKSAqIDMgLyA0KSB7Ci0JCXByX3dhcm5pbmcoIlBFUkNQVTogbWF4X2Rpc3RhbmNlPTB4JWx4IHRvbyBsYXJnZSBmb3Igdm1hbGxvYyAiCisJCXByX3dhcm5pbmcoIlBFUkNQVTogbWF4X2Rpc3RhbmNlPTB4JXp4IHRvbyBsYXJnZSBmb3Igdm1hbGxvYyAiCiAJCQkgICAic3BhY2UgMHglbHhcbiIsCiAJCQkgICBtYXhfZGlzdGFuY2UsIFZNQUxMT0NfRU5EIC0gVk1BTExPQ19TVEFSVCk7CiAjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCBhMWJjNmI5Li45YzU5MGVlIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTExNTEsOCArMTE1MSw3IEBACiAJCQkJfSBlbHNlCiAJCQkJCXJldHZhbCA9IHVudXNlX21tKG1tLCBlbnRyeSwgcGFnZSk7CiAKLQkJCQlpZiAoc2V0X3N0YXJ0X21tICYmCi0JCQkJICAgIHN3YXBfY291bnQoKnN3YXBfbWFwKSA8IHN3Y291bnQpIHsKKwkJCQlpZiAoc2V0X3N0YXJ0X21tICYmICpzd2FwX21hcCA8IHN3Y291bnQpIHsKIAkJCQkJbW1wdXQobmV3X3N0YXJ0X21tKTsKIAkJCQkJYXRvbWljX2luYygmbW0tPm1tX3VzZXJzKTsKIAkJCQkJbmV3X3N0YXJ0X21tID0gbW07CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDY0ZTQzODg5Li43NzdhZjU3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtNTQ0LDYgKzU0NCwxNiBAQAogCQkgKi8KIAkJbHJ1ID0gTFJVX1VORVZJQ1RBQkxFOwogCQlhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0KHBhZ2UpOworCQkvKgorCQkgKiBXaGVuIHJhY2luZyB3aXRoIGFuIG1sb2NrIGNsZWFyaW5nIChwYWdlIGlzCisJCSAqIHVubG9ja2VkKSwgbWFrZSBzdXJlIHRoYXQgaWYgdGhlIG90aGVyIHRocmVhZCBkb2VzCisJCSAqIG5vdCBvYnNlcnZlIG91ciBzZXR0aW5nIG9mIFBHX2xydSBhbmQgZmFpbHMKKwkJICogaXNvbGF0aW9uLCB3ZSBzZWUgUEdfbWxvY2tlZCBjbGVhcmVkIGJlbG93IGFuZCBtb3ZlCisJCSAqIHRoZSBwYWdlIGJhY2sgdG8gdGhlIGV2aWN0YWJsZSBsaXN0LgorCQkgKgorCQkgKiBUaGUgb3RoZXIgc2lkZSBpcyBUZXN0Q2xlYXJQYWdlTWxvY2tlZCgpLgorCQkgKi8KKwkJc21wX21iKCk7CiAJfQogCiAJLyoKQEAgLTEwODgsNyArMTA5OCw3IEBACiAJaW50IGx1bXB5X3JlY2xhaW0gPSAwOwogCiAJd2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHpvbmUsIGZpbGUsIHNjKSkpIHsKLQkJY29uZ2VzdGlvbl93YWl0KFdSSVRFLCBIWi8xMCk7CisJCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaLzEwKTsKIAogCQkvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovCiAJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKQEAgLTEzNTYsNyArMTM2Niw3IEBACiAJCQkgKiBJTywgcGx1cyBKVk0gY2FuIGNyZWF0ZSBsb3RzIG9mIGFub24gVk1fRVhFQyBwYWdlcywKIAkJCSAqIHNvIHdlIGlnbm9yZSB0aGVtIGhlcmUuCiAJCQkgKi8KLQkJCWlmICgodm1fZmxhZ3MgJiBWTV9FWEVDKSAmJiAhUGFnZUFub24ocGFnZSkpIHsKKwkJCWlmICgodm1fZmxhZ3MgJiBWTV9FWEVDKSAmJiBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpIHsKIAkJCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmbF9hY3RpdmUpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCmluZGV4IGIyZTA3ZjAuLmVhMWUzZGEgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc192aXJ0aW8uYworKysgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvXzlwLmg+CiAKICNkZWZpbmUgVklSVFFVRVVFX05VTQkxMjgKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCmluZGV4IDdmOTM5Y2UuLjJiYzZmNmEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwpAQCAtOTIsNiArOTIsOCBAQAogCiAJZGV2X3NldF9uYW1lKCZjb25uLT5kZXYsICIlczolZCIsIGhkZXYtPm5hbWUsIGNvbm4tPmhhbmRsZSk7CiAKKwlkZXZfc2V0X2RydmRhdGEoJmNvbm4tPmRldiwgY29ubik7CisKIAlpZiAoZGV2aWNlX2FkZCgmY29ubi0+ZGV2KSA8IDApIHsKIAkJQlRfRVJSKCJGYWlsZWQgdG8gcmVnaXN0ZXIgY29ubmVjdGlvbiBkZXZpY2UiKTsKIAkJcmV0dXJuOwpAQCAtMTQ0LDggKzE0Niw2IEBACiAJY29ubi0+ZGV2LmNsYXNzID0gYnRfY2xhc3M7CiAJY29ubi0+ZGV2LnBhcmVudCA9ICZoZGV2LT5kZXY7CiAKLQlkZXZfc2V0X2RydmRhdGEoJmNvbm4tPmRldiwgY29ubik7Ci0KIAlkZXZpY2VfaW5pdGlhbGl6ZSgmY29ubi0+ZGV2KTsKIAogCUlOSVRfV09SSygmY29ubi0+d29ya19hZGQsIGFkZF9jb25uKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCA1NTVkOWRhLi43N2U5ZmIxIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC01NTUsMTIgKzU1NSwxMiBAQAogCiAJY29ubi0+ZmVhdF9tYXNrID0gMDsKIAotCXNldHVwX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyLCBsMmNhcF9pbmZvX3RpbWVvdXQsCi0JCQkJCQkodW5zaWduZWQgbG9uZykgY29ubik7Ci0KIAlzcGluX2xvY2tfaW5pdCgmY29ubi0+bG9jayk7CiAJcndsb2NrX2luaXQoJmNvbm4tPmNoYW5fbGlzdC5sb2NrKTsKIAorCXNldHVwX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyLCBsMmNhcF9pbmZvX3RpbWVvdXQsCisJCQkJCQkodW5zaWduZWQgbG9uZykgY29ubik7CisKIAljb25uLT5kaXNjX3JlYXNvbiA9IDB4MTM7CiAKIAlyZXR1cm4gY29ubjsKQEAgLTc4Myw2ICs3ODMsOSBAQAogCS8qIERlZmF1bHQgY29uZmlnIG9wdGlvbnMgKi8KIAlwaS0+Y29uZl9sZW4gPSAwOwogCXBpLT5mbHVzaF90byA9IEwyQ0FQX0RFRkFVTFRfRkxVU0hfVE87CisJc2tiX3F1ZXVlX2hlYWRfaW5pdChUWF9RVUVVRShzaykpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoU1JFSl9RVUVVRShzaykpOworCUlOSVRfTElTVF9IRUFEKFNSRUpfTElTVChzaykpOwogfQogCiBzdGF0aWMgc3RydWN0IHByb3RvIGwyY2FwX3Byb3RvID0gewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCA4NmFjZGJhLi42ZWI4ZDQ3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMzM1LDYgKzMzNSw3IEBACiAJX191MzIgY3VyX3NyY19tYWNfb2Zmc2V0OwogCV9fYmUzMiBjdXJfc2FkZHI7CiAJX19iZTMyIGN1cl9kYWRkcjsKKwlfX3UxNiBpcF9pZDsKIAlfX3UxNiBjdXJfdWRwX2RzdDsKIAlfX3UxNiBjdXJfdWRwX3NyYzsKIAlfX3UxNiBjdXJfcXVldWVfbWFwOwpAQCAtMjYzMCw2ICsyNjMxLDggQEAKIAlpcGgtPnByb3RvY29sID0gSVBQUk9UT19VRFA7CS8qIFVEUCAqLwogCWlwaC0+c2FkZHIgPSBwa3RfZGV2LT5jdXJfc2FkZHI7CiAJaXBoLT5kYWRkciA9IHBrdF9kZXYtPmN1cl9kYWRkcjsKKwlpcGgtPmlkID0gaHRvbnMocGt0X2Rldi0+aXBfaWQpOworCXBrdF9kZXYtPmlwX2lkKys7CiAJaXBoLT5mcmFnX29mZiA9IDA7CiAJaXBsZW4gPSAyMCArIDggKyBkYXRhbGVuOwogCWlwaC0+dG90X2xlbiA9IGh0b25zKGlwbGVuKTsKQEAgLTI2NDEsMjQgKzI2NDQsMjYgQEAKIAlza2ItPmRldiA9IG9kZXY7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCi0JaWYgKHBrdF9kZXYtPm5mcmFncyA8PSAwKQorCWlmIChwa3RfZGV2LT5uZnJhZ3MgPD0gMCkgewogCQlwZ2ggPSAoc3RydWN0IHBrdGdlbl9oZHIgKilza2JfcHV0KHNrYiwgZGF0YWxlbik7Ci0JZWxzZSB7CisJCW1lbXNldChwZ2ggKyAxLCAwLCBkYXRhbGVuIC0gc2l6ZW9mKHN0cnVjdCBwa3RnZW5faGRyKSk7CisJfSBlbHNlIHsKIAkJaW50IGZyYWdzID0gcGt0X2Rldi0+bmZyYWdzOwotCQlpbnQgaTsKKwkJaW50IGksIGxlbjsKIAogCQlwZ2ggPSAoc3RydWN0IHBrdGdlbl9oZHIgKikoKChjaGFyICopKHVkcGgpKSArIDgpOwogCiAJCWlmIChmcmFncyA+IE1BWF9TS0JfRlJBR1MpCiAJCQlmcmFncyA9IE1BWF9TS0JfRlJBR1M7CiAJCWlmIChkYXRhbGVuID4gZnJhZ3MgKiBQQUdFX1NJWkUpIHsKLQkJCXNrYl9wdXQoc2tiLCBkYXRhbGVuIC0gZnJhZ3MgKiBQQUdFX1NJWkUpOworCQkJbGVuID0gZGF0YWxlbiAtIGZyYWdzICogUEFHRV9TSVpFOworCQkJbWVtc2V0KHNrYl9wdXQoc2tiLCBsZW4pLCAwLCBsZW4pOwogCQkJZGF0YWxlbiA9IGZyYWdzICogUEFHRV9TSVpFOwogCQl9CiAKIAkJaSA9IDA7CiAJCXdoaWxlIChkYXRhbGVuID4gMCkgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLCAwKTsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApOwogCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlID0gcGFnZTsKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZV9vZmZzZXQgPSAwOwogCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplID0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IDQzNTFjYTIuLjUzNzczMWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwpAQCAtNDQ2LDYgKzQ0NiwyOCBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2Nza19yZXFza19xdWV1ZV9oYXNoX2FkZCk7CiAKKy8qIERlY2lkZSB3aGVuIHRvIGV4cGlyZSB0aGUgcmVxdWVzdCBhbmQgd2hlbiB0byByZXNlbmQgU1lOLUFDSyAqLworc3RhdGljIGlubGluZSB2b2lkIHN5bl9hY2tfcmVjYWxjKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgY29uc3QgaW50IHRocmVzaCwKKwkJCQkgIGNvbnN0IGludCBtYXhfcmV0cmllcywKKwkJCQkgIGNvbnN0IHU4IHJza3FfZGVmZXJfYWNjZXB0LAorCQkJCSAgaW50ICpleHBpcmUsIGludCAqcmVzZW5kKQoreworCWlmICghcnNrcV9kZWZlcl9hY2NlcHQpIHsKKwkJKmV4cGlyZSA9IHJlcS0+cmV0cmFucyA+PSB0aHJlc2g7CisJCSpyZXNlbmQgPSAxOworCQlyZXR1cm47CisJfQorCSpleHBpcmUgPSByZXEtPnJldHJhbnMgPj0gdGhyZXNoICYmCisJCSAgKCFpbmV0X3JzayhyZXEpLT5hY2tlZCB8fCByZXEtPnJldHJhbnMgPj0gbWF4X3JldHJpZXMpOworCS8qCisJICogRG8gbm90IHJlc2VuZCB3aGlsZSB3YWl0aW5nIGZvciBkYXRhIGFmdGVyIEFDSywKKwkgKiBzdGFydCB0byByZXNlbmQgb24gZW5kIG9mIGRlZmVycmluZyBwZXJpb2QgdG8gZ2l2ZQorCSAqIGxhc3QgY2hhbmNlIGZvciBkYXRhIG9yIEFDSyB0byBjcmVhdGUgZXN0YWJsaXNoZWQgc29ja2V0LgorCSAqLworCSpyZXNlbmQgPSAhaW5ldF9yc2socmVxKS0+YWNrZWQgfHwKKwkJICByZXEtPnJldHJhbnMgPj0gcnNrcV9kZWZlcl9hY2NlcHQgLSAxOworfQorCiB2b2lkIGluZXRfY3NrX3JlcXNrX3F1ZXVlX3BydW5lKHN0cnVjdCBzb2NrICpwYXJlbnQsCiAJCQkJY29uc3QgdW5zaWduZWQgbG9uZyBpbnRlcnZhbCwKIAkJCQljb25zdCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsCkBAIC01MDEsOSArNTIzLDE1IEBACiAJCXJlcXA9JmxvcHQtPnN5bl90YWJsZVtpXTsKIAkJd2hpbGUgKChyZXEgPSAqcmVxcCkgIT0gTlVMTCkgewogCQkJaWYgKHRpbWVfYWZ0ZXJfZXEobm93LCByZXEtPmV4cGlyZXMpKSB7Ci0JCQkJaWYgKChyZXEtPnJldHJhbnMgPCB0aHJlc2ggfHwKLQkJCQkgICAgIChpbmV0X3JzayhyZXEpLT5hY2tlZCAmJiByZXEtPnJldHJhbnMgPCBtYXhfcmV0cmllcykpCi0JCQkJICAgICYmICFyZXEtPnJza19vcHMtPnJ0eF9zeW5fYWNrKHBhcmVudCwgcmVxKSkgeworCQkJCWludCBleHBpcmUgPSAwLCByZXNlbmQgPSAwOworCisJCQkJc3luX2Fja19yZWNhbGMocmVxLCB0aHJlc2gsIG1heF9yZXRyaWVzLAorCQkJCQkgICAgICAgcXVldWUtPnJza3FfZGVmZXJfYWNjZXB0LAorCQkJCQkgICAgICAgJmV4cGlyZSwgJnJlc2VuZCk7CisJCQkJaWYgKCFleHBpcmUgJiYKKwkJCQkgICAgKCFyZXNlbmQgfHwKKwkJCQkgICAgICFyZXEtPnJza19vcHMtPnJ0eF9zeW5fYWNrKHBhcmVudCwgcmVxKSB8fAorCQkJCSAgICAgaW5ldF9yc2socmVxKS0+YWNrZWQpKSB7CiAJCQkJCXVuc2lnbmVkIGxvbmcgdGltZW87CiAKIAkJCQkJaWYgKHJlcS0+cmV0cmFucysrID09IDApCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCAwYzBiNmUzLi5lOTgyYjVjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTYzNCwxNyArNjM0LDE2IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlkZXYgPSBpcF9kZXZfZmluZChzb2NrX25ldChzayksIG1yZXEuaW1yX2FkZHJlc3Muc19hZGRyKTsKLQkJCWlmIChkZXYpIHsKKwkJCWlmIChkZXYpCiAJCQkJbXJlcS5pbXJfaWZpbmRleCA9IGRldi0+aWZpbmRleDsKLQkJCQlkZXZfcHV0KGRldik7Ci0JCQl9CiAJCX0gZWxzZQotCQkJZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgbXJlcS5pbXJfaWZpbmRleCk7CisJCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgbXJlcS5pbXJfaWZpbmRleCk7CiAKIAogCQllcnIgPSAtRUFERFJOT1RBVkFJTDsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKKwkJZGV2X3B1dChkZXYpOwogCiAJCWVyciA9IC1FSU5WQUw7CiAJCWlmIChzay0+c2tfYm91bmRfZGV2X2lmICYmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IDc1N2M5MTcuLmFiOTk2ZjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC0zNTIsMTMgKzM1MiwyNCBAQAogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAogCXNrYi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0+bmV0d29ya19oZWFkZXI7Ci0JZXJyID0gbWVtY3B5X2Zyb21pb3ZlY2VuZCgodm9pZCAqKWlwaCwgZnJvbSwgMCwgbGVuZ3RoKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycm9yX2ZhdWx0OworCWVyciA9IC1FRkFVTFQ7CisJaWYgKG1lbWNweV9mcm9taW92ZWNlbmQoKHZvaWQgKilpcGgsIGZyb20sIDAsIGxlbmd0aCkpCisJCWdvdG8gZXJyb3JfZnJlZTsKIAotCS8qIFdlIGRvbid0IG1vZGlmeSBpbnZhbGlkIGhlYWRlciAqLwogCWlwaGxlbiA9IGlwaC0+aWhsICogNDsKLQlpZiAoaXBobGVuID49IHNpemVvZigqaXBoKSAmJiBpcGhsZW4gPD0gbGVuZ3RoKSB7CisKKwkvKgorCSAqIFdlIGRvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBpcCBoZWFkZXIsIGJ1dCB3ZSBkbyBuZWVkIHRvCisJICogYmUgc3VyZSB0aGF0IGl0IHdvbid0IGNhdXNlIHByb2JsZW1zIGxhdGVyIGFsb25nIHRoZSBuZXR3b3JrCisJICogc3RhY2suICBTcGVjaWZpY2FsbHkgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBpcGgtPmlobCBpcyBhCisJICogc2FuZSB2YWx1ZS4gIElmIGlobCBwb2ludHMgYmV5b25kIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciBwYXNzZWQKKwkgKiBpbiwgcmVqZWN0IHRoZSBmcmFtZSBhcyBpbnZhbGlkCisJICovCisJZXJyID0gLUVJTlZBTDsKKwlpZiAoaXBobGVuID4gbGVuZ3RoKQorCQlnb3RvIGVycm9yX2ZyZWU7CisKKwlpZiAoaXBobGVuID49IHNpemVvZigqaXBoKSkgewogCQlpZiAoIWlwaC0+c2FkZHIpCiAJCQlpcGgtPnNhZGRyID0gcnQtPnJ0X3NyYzsKIAkJaXBoLT5jaGVjayAgID0gMDsKQEAgLTM4MSw4ICszOTIsNyBAQAogb3V0OgogCXJldHVybiAwOwogCi1lcnJvcl9mYXVsdDoKLQllcnIgPSAtRUZBVUxUOworZXJyb3JfZnJlZToKIAlrZnJlZV9za2Ioc2tiKTsKIGVycm9yOgogCUlQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNjRkMGFmNi4uOTg0NDBhZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTMyNiw2ICszMjYsNDMgQEAKIAogRVhQT1JUX1NZTUJPTCh0Y3BfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKTsKIAorLyogQ29udmVydCBzZWNvbmRzIHRvIHJldHJhbnNtaXRzIGJhc2VkIG9uIGluaXRpYWwgYW5kIG1heCB0aW1lb3V0ICovCitzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpCit7CisJdTggcmVzID0gMDsKKworCWlmIChzZWNvbmRzID4gMCkgeworCQlpbnQgcGVyaW9kID0gdGltZW91dDsKKworCQlyZXMgPSAxOworCQl3aGlsZSAoc2Vjb25kcyA+IHBlcmlvZCAmJiByZXMgPCAyNTUpIHsKKwkJCXJlcysrOworCQkJdGltZW91dCA8PD0gMTsKKwkJCWlmICh0aW1lb3V0ID4gcnRvX21heCkKKwkJCQl0aW1lb3V0ID0gcnRvX21heDsKKwkJCXBlcmlvZCArPSB0aW1lb3V0OworCQl9CisJfQorCXJldHVybiByZXM7Cit9CisKKy8qIENvbnZlcnQgcmV0cmFuc21pdHMgdG8gc2Vjb25kcyBiYXNlZCBvbiBpbml0aWFsIGFuZCBtYXggdGltZW91dCAqLworc3RhdGljIGludCByZXRyYW5zX3RvX3NlY3ModTggcmV0cmFucywgaW50IHRpbWVvdXQsIGludCBydG9fbWF4KQoreworCWludCBwZXJpb2QgPSAwOworCisJaWYgKHJldHJhbnMgPiAwKSB7CisJCXBlcmlvZCA9IHRpbWVvdXQ7CisJCXdoaWxlICgtLXJldHJhbnMpIHsKKwkJCXRpbWVvdXQgPDw9IDE7CisJCQlpZiAodGltZW91dCA+IHJ0b19tYXgpCisJCQkJdGltZW91dCA9IHJ0b19tYXg7CisJCQlwZXJpb2QgKz0gdGltZW91dDsKKwkJfQorCX0KKwlyZXR1cm4gcGVyaW9kOworfQorCiAvKgogICoJV2FpdCBmb3IgYSBUQ1AgZXZlbnQuCiAgKgpAQCAtMTQwNSw3ICsxNDQyLDkgQEAKIAkJCQlnb3RvIGZvdW5kX29rX3NrYjsKIAkJCWlmICh0Y3BfaGRyKHNrYiktPmZpbikKIAkJCQlnb3RvIGZvdW5kX2Zpbl9vazsKLQkJCVdBUk5fT04oIShmbGFncyAmIE1TR19QRUVLKSk7CisJCQlXQVJOKCEoZmxhZ3MgJiBNU0dfUEVFSyksIEtFUk5fSU5GTyAicmVjdm1zZyBidWcgMjogIgorCQkJCQkiY29waWVkICVYIHNlcSAlWFxuIiwgKnNlcSwKKwkJCQkJVENQX1NLQl9DQihza2IpLT5zZXEpOwogCQl9CiAKIAkJLyogV2VsbCwgaWYgd2UgaGF2ZSBiYWNrbG9nLCB0cnkgdG8gcHJvY2VzcyBpdCBub3cgeWV0LiAqLwpAQCAtMjE2MywxNiArMjIwMiwxMCBAQAogCQlicmVhazsKIAogCWNhc2UgVENQX0RFRkVSX0FDQ0VQVDoKLQkJaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQgPSAwOwotCQlpZiAodmFsID4gMCkgewotCQkJLyogVHJhbnNsYXRlIHZhbHVlIGluIHNlY29uZHMgdG8gbnVtYmVyIG9mCi0JCQkgKiByZXRyYW5zbWl0cyAqLwotCQkJd2hpbGUgKGljc2stPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0IDwgMzIgJiYKLQkJCSAgICAgICB2YWwgPiAoKFRDUF9USU1FT1VUX0lOSVQgLyBIWikgPDwKLQkJCQkgICAgICAgaWNzay0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQpKQotCQkJCWljc2stPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0Kys7Ci0JCQlpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCsrOwotCQl9CisJCS8qIFRyYW5zbGF0ZSB2YWx1ZSBpbiBzZWNvbmRzIHRvIG51bWJlciBvZiByZXRyYW5zbWl0cyAqLworCQlpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCA9CisJCQlzZWNzX3RvX3JldHJhbnModmFsLCBUQ1BfVElNRU9VVF9JTklUIC8gSFosCisJCQkJCVRDUF9SVE9fTUFYIC8gSFopOwogCQlicmVhazsKIAogCWNhc2UgVENQX1dJTkRPV19DTEFNUDoKQEAgLTIzNTMsOCArMjM4Niw4IEBACiAJCQl2YWwgPSAodmFsID8gOiBzeXNjdGxfdGNwX2Zpbl90aW1lb3V0KSAvIEhaOwogCQlicmVhazsKIAljYXNlIFRDUF9ERUZFUl9BQ0NFUFQ6Ci0JCXZhbCA9ICFpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCA/IDAgOgotCQkJKChUQ1BfVElNRU9VVF9JTklUIC8gSFopIDw8IChpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCAtIDEpKTsKKwkJdmFsID0gcmV0cmFuc190b19zZWNzKGljc2stPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0LAorCQkJCSAgICAgIFRDUF9USU1FT1VUX0lOSVQgLyBIWiwgVENQX1JUT19NQVggLyBIWik7CiAJCWJyZWFrOwogCWNhc2UgVENQX1dJTkRPV19DTEFNUDoKIAkJdmFsID0gdHAtPndpbmRvd19jbGFtcDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwppbmRleCA2MjRjM2M5Li40YzAzNTk4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKKysrIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCkBAIC02NDEsOCArNjQxLDggQEAKIAlpZiAoIShmbGcgJiBUQ1BfRkxBR19BQ0spKQogCQlyZXR1cm4gTlVMTDsKIAotCS8qIElmIFRDUF9ERUZFUl9BQ0NFUFQgaXMgc2V0LCBkcm9wIGJhcmUgQUNLLiAqLwotCWlmIChpbmV0X2NzayhzayktPmljc2tfYWNjZXB0X3F1ZXVlLnJza3FfZGVmZXJfYWNjZXB0ICYmCisJLyogV2hpbGUgVENQX0RFRkVSX0FDQ0VQVCBpcyBhY3RpdmUsIGRyb3AgYmFyZSBBQ0suICovCisJaWYgKHJlcS0+cmV0cmFucyA8IGluZXRfY3NrKHNrKS0+aWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQgJiYKIAkgICAgVENQX1NLQl9DQihza2IpLT5lbmRfc2VxID09IHRjcF9yc2socmVxKS0+cmN2X2lzbiArIDEpIHsKIAkJaW5ldF9yc2socmVxKS0+YWNrZWQgPSAxOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggNmVjNmE4YS4uZDBkNDM2ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTg0MSw2ICs4NDEsNDIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisKKy8qKgorICoJZmlyc3RfcGFja2V0X2xlbmd0aAktIHJldHVybiBsZW5ndGggb2YgZmlyc3QgcGFja2V0IGluIHJlY2VpdmUgcXVldWUKKyAqCUBzazogc29ja2V0CisgKgorICoJRHJvcHMgYWxsIGJhZCBjaGVja3N1bSBmcmFtZXMsIHVudGlsIGEgdmFsaWQgb25lIGlzIGZvdW5kLgorICoJUmV0dXJucyB0aGUgbGVuZ3RoIG9mIGZvdW5kIHNrYiwgb3IgMCBpZiBub25lIGlzIGZvdW5kLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGZpcnN0X3BhY2tldF9sZW5ndGgoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBza19idWZmX2hlYWQgbGlzdF9raWxsLCAqcmN2cSA9ICZzay0+c2tfcmVjZWl2ZV9xdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCByZXM7CisKKwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmxpc3Rfa2lsbCk7CisKKwlzcGluX2xvY2tfYmgoJnJjdnEtPmxvY2spOworCXdoaWxlICgoc2tiID0gc2tiX3BlZWsocmN2cSkpICE9IE5VTEwgJiYKKwkJdWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CisJCVVEUF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBVRFBfTUlCX0lORVJST1JTLAorCQkJCSBJU19VRFBMSVRFKHNrKSk7CisJCV9fc2tiX3VubGluayhza2IsIHJjdnEpOworCQlfX3NrYl9xdWV1ZV90YWlsKCZsaXN0X2tpbGwsIHNrYik7CisJfQorCXJlcyA9IHNrYiA/IHNrYi0+bGVuIDogMDsKKwlzcGluX3VubG9ja19iaCgmcmN2cS0+bG9jayk7CisKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmbGlzdF9raWxsKSkgeworCQlsb2NrX3NvY2soc2spOworCQlfX3NrYl9xdWV1ZV9wdXJnZSgmbGlzdF9raWxsKTsKKwkJc2tfbWVtX3JlY2xhaW1fcGFydGlhbChzayk7CisJCXJlbGVhc2Vfc29jayhzayk7CisJfQorCXJldHVybiByZXM7Cit9CisKIC8qCiAgKglJT0NUTCByZXF1ZXN0cyBhcHBsaWNhYmxlIHRvIHRoZSBVRFAgcHJvdG9jb2wKICAqLwpAQCAtODU3LDIxICs4OTMsMTYgQEAKIAogCWNhc2UgU0lPQ0lOUToKIAl7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCXVuc2lnbmVkIGxvbmcgYW1vdW50OworCQl1bnNpZ25lZCBpbnQgYW1vdW50ID0gZmlyc3RfcGFja2V0X2xlbmd0aChzayk7CiAKLQkJYW1vdW50ID0gMDsKLQkJc3Bpbl9sb2NrX2JoKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKLQkJc2tiID0gc2tiX3BlZWsoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKLQkJaWYgKHNrYiAhPSBOVUxMKSB7CisJCWlmIChhbW91bnQpCiAJCQkvKgogCQkJICogV2Ugd2lsbCBvbmx5IHJldHVybiB0aGUgYW1vdW50CiAJCQkgKiBvZiB0aGlzIHBhY2tldCBzaW5jZSB0aGF0IGlzIGFsbAogCQkJICogdGhhdCB3aWxsIGJlIHJlYWQuCiAJCQkgKi8KLQkJCWFtb3VudCA9IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKKwkJCWFtb3VudCAtPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisKIAkJcmV0dXJuIHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmcpOwogCX0KIApAQCAtMTU0MCwyOSArMTU3MSwxMSBAQAogewogCXVuc2lnbmVkIGludCBtYXNrID0gZGF0YWdyYW1fcG9sbChmaWxlLCBzb2NrLCB3YWl0KTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlpbnQgCWlzX2xpdGUgPSBJU19VRFBMSVRFKHNrKTsKIAogCS8qIENoZWNrIGZvciBmYWxzZSBwb3NpdGl2ZXMgZHVlIHRvIGNoZWNrc3VtIGVycm9ycyAqLwotCWlmICgobWFzayAmIFBPTExSRE5PUk0pICYmCi0JICAgICEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmCi0JICAgICEoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKSkgewotCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpyY3ZxID0gJnNrLT5za19yZWNlaXZlX3F1ZXVlOwotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JCXNwaW5fbG9ja19iaCgmcmN2cS0+bG9jayk7Ci0JCXdoaWxlICgoc2tiID0gc2tiX3BlZWsocmN2cSkpICE9IE5VTEwgJiYKLQkJICAgICAgIHVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgewotCQkJVURQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksCi0JCQkJCVVEUF9NSUJfSU5FUlJPUlMsIGlzX2xpdGUpOwotCQkJX19za2JfdW5saW5rKHNrYiwgcmN2cSk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJfQotCQlzcGluX3VubG9ja19iaCgmcmN2cS0+bG9jayk7Ci0KLQkJLyogbm90aGluZyB0byBzZWUsIG1vdmUgYWxvbmcgKi8KLQkJaWYgKHNrYiA9PSBOVUxMKQotCQkJbWFzayAmPSB+KFBPTExJTiB8IFBPTExSRE5PUk0pOwotCX0KKwlpZiAoKG1hc2sgJiBQT0xMUkROT1JNKSAmJiAhKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJgorCSAgICAhKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikgJiYgIWZpcnN0X3BhY2tldF9sZW5ndGgoc2spKQorCQltYXNrICY9IH4oUE9MTElOIHwgUE9MTFJETk9STSk7CiAKIAlyZXR1cm4gbWFzazsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IDE0ZjU0ZWIuLjRmN2FhZjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYworKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTQ5NiwxMyArNDk2LDE3IEBACiAJCQlnb3RvIGVfaW52YWw7CiAKIAkJaWYgKHZhbCkgeworCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwogCQkJaWYgKHNrLT5za19ib3VuZF9kZXZfaWYgJiYgc2stPnNrX2JvdW5kX2Rldl9pZiAhPSB2YWwpCiAJCQkJZ290byBlX2ludmFsOwogCi0JCQlpZiAoX19kZXZfZ2V0X2J5X2luZGV4KG5ldCwgdmFsKSA9PSBOVUxMKSB7CisJCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgdmFsKTsKKwkJCWlmICghZGV2KSB7CiAJCQkJcmV0diA9IC1FTk9ERVY7CiAJCQkJYnJlYWs7CiAJCQl9CisJCQlkZXZfcHV0KGRldik7CiAJCX0KIAkJbnAtPm1jYXN0X29pZiA9IHZhbDsKIAkJcmV0diA9IDA7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuYwppbmRleCA5MjBlYzg3Li5jYThlY2NlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWJzcy5jCisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKQEAgLTUzOCwxMyArNTM4LDEyIEBACiAJCQkJICAgICAgIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZLAogCQkJCSAgICAgICBjYXBhYmlsaXR5KTsKIAorCWlmIChic3MpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCWlmIChic3MpCiAJCXByaW50ayhLRVJOX0RFQlVHICIgICBzdGFfZmluZF9pYnNzOiBzZWxlY3RlZCAlcE0gY3VycmVudCAiCiAJCSAgICAgICAiJXBNXG4iLCBic3MtPmNic3MuYnNzaWQsIGlmaWJzcy0+YnNzaWQpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCiAKLQlpZiAoYnNzICYmIG1lbWNtcChpZmlic3MtPmJzc2lkLCBic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbGVjdGVkIElCU1MgQlNTSUQgJXBNIgogCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3MtPmNic3MuYnNzaWQpOwpAQCAtNTUyLDggKzU1MSw3IEBACiAJCWllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBic3MpOwogCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIAkJcmV0dXJuOwotCX0gZWxzZSBpZiAoYnNzKQotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKwl9CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICIgICBkaWQgbm90IHRyeSB0byBqb2luIGlic3NcbiIpOwpAQCAtODI5LDcgKzgyNyw3IEBACiAJCWlmICghc2RhdGEtPnUuaWJzcy5zc2lkX2xlbikKIAkJCWNvbnRpbnVlOwogCQlzZGF0YS0+dS5pYnNzLmxhc3Rfc2Nhbl9jb21wbGV0ZWQgPSBqaWZmaWVzOwotCQlpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzZGF0YSk7CisJCW1vZF90aW1lcigmc2RhdGEtPnUuaWJzcy50aW1lciwgMCk7CiAJfQogCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCmluZGV4IGUxMmE3ODYuLjI5YjgyZTkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKQEAgLTI1OSw3ICsyNTksNyBAQAogICogQGh3bXBfaWU6IGh3bXAgaW5mb3JtYXRpb24gZWxlbWVudCAoUFJFUCBvciBQUkVRKQogICoKICAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgcGF0aCByb3V0aW5nIGluZm9ybWF0aW9uIHRvIHRoZSBvcmlnaW5hdG9yIGFuZCB0aGUKLSAqIHRyYW5zbWl0dGVyIG9mIGEgSFdNUCBQUkVRIG9yIFBSRVAgZnJhbS4KKyAqIHRyYW5zbWl0dGVyIG9mIGEgSFdNUCBQUkVRIG9yIFBSRVAgZnJhbWUuCiAgKgogICogUmV0dXJuczogbWV0cmljIHRvIGZyYW1lIG9yaWdpbmF0b3Igb3IgMCBpZiB0aGUgZnJhbWUgc2hvdWxkIG5vdCBiZSBmdXJ0aGVyCiAgKiBwcm9jZXNzZWQKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDhkMjZlOWIuLmRjNTA0OWQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMTQ1Nyw4ICsxNDU3LDcgQEAKIAlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFQIGRlbmllZCBhc3NvY2lhdGlvbiAoY29kZT0lZClcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGF0dXNfY29kZSk7Ci0JCWxpc3RfZGVsKCZ3ay0+bGlzdCk7Ci0JCWtmcmVlKHdrKTsKKwkJd2stPnN0YXRlID0gSUVFRTgwMjExX01HRF9TVEFURV9JRExFOwogCQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BU1NPQzsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yeC5jIGIvbmV0L21hYzgwMjExL3J4LmMKaW5kZXggYzAxNTg4Zi4uNzE3MGJmNCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3J4LmMKKysrIGIvbmV0L21hYzgwMjExL3J4LmMKQEAgLTIxNjQsMTEgKzIxNjQsMTcgQEAKIAogCXNrYiA9IHJ4LnNrYjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwlpZiAocnguc2RhdGEgJiYgaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfUlhfUkFfTUFUQ0g7CisJCXByZXBhcmVzID0gcHJlcGFyZV9mb3JfaGFuZGxlcnMocnguc2RhdGEsICZyeCwgaGRyKTsKKwkJaWYgKHByZXBhcmVzKQorCQkJcHJldiA9IHJ4LnNkYXRhOworCX0gZWxzZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKIAkJCWNvbnRpbnVlOwogCiAJCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9SQV9NQVRDSDsKQEAgLTI0NDcsNiArMjQ1Myw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCisJV0FSTl9PTl9PTkNFKHNvZnRpcnFfY291bnQoKSA9PSAwKTsKKwogCWlmIChXQVJOX09OKHN0YXR1cy0+YmFuZCA8IDAgfHwKIAkJICAgIHN0YXR1cy0+YmFuZCA+PSBJRUVFODAyMTFfTlVNX0JBTkRTKSkKIAkJZ290byBkcm9wOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCBlZWMwMDE0Li41OTRmMjMxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYworKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtMzYxLDYgKzM2MSw3IEBACiAJCQkJCSAgICAgdS5hcCk7CiAKIAkJZHJ2X3N0YV9ub3RpZnkobG9jYWwsICZzZGF0YS0+dmlmLCBTVEFfTk9USUZZX0FERCwgJnN0YS0+c3RhKTsKKwkJc2RhdGEgPSBzdGEtPnNkYXRhOwogCX0KIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCkBAIC00OTYsNiArNDk3LDcgQEAKIAogCQlkcnZfc3RhX25vdGlmeShsb2NhbCwgJnNkYXRhLT52aWYsIFNUQV9OT1RJRllfUkVNT1ZFLAogCQkJICAgICAgICYoKnN0YSktPnN0YSk7CisJCXNkYXRhID0gKCpzdGEpLT5zZGF0YTsKIAl9CiAKIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCBmZDQwMjgyLi5lYWE0MTE4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMTQ0NSw3ICsxNDQ1LDcgQEAKIAkJCQlpZiAodG1wX3NkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKIAkJCQkJY29udGludWU7CiAJCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcih0bXBfc2RhdGEtPmRldi0+ZGV2X2FkZHIsCi0JCQkJCQkgICAgICAgaGRyLT5hZGRyMikpIHsKKwkJCQkJCSAgICAgICBoZHItPmFkZHIyKSA9PSAwKSB7CiAJCQkJCWRldl9ob2xkKHRtcF9zZGF0YS0+ZGV2KTsKIAkJCQkJZGV2X3B1dChzZGF0YS0+ZGV2KTsKIAkJCQkJc2RhdGEgPSB0bXBfc2RhdGE7CkBAIC0xNzA0LDcgKzE3MDQsOCBAQAogCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLmFkZHIxKSkgewogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLmFkZHIxKTsKLQkJaWYgKHN0YSkKKwkJLyogWFhYOiBpbiB0aGUgZnV0dXJlLCB1c2Ugc2RhdGEgdG8gbG9vayB1cCB0aGUgc3RhICovCisJCWlmIChzdGEgJiYgc3RhLT5zZGF0YSA9PSBzZGF0YSkKIAkJCXN0YV9mbGFncyA9IGdldF9zdGFfZmxhZ3Moc3RhKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggZGQ2NTY0My4uYWViNjViMyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC0zMzksNyArMzM5LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKIAlpZiAoV0FSTl9PTighaW5mby0+Y29udHJvbC52aWYpKSB7Ci0JCWtmcmVlKHNrYik7CisJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNjcsNyArMzY3LDcgQEAKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCiAJCWlmIChXQVJOX09OKCFpbmZvLT5jb250cm9sLnZpZikpIHsKLQkJCWtmcmVlKHNrYik7CisJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGQ3ZWNjYTAuLmYyZDExNmEgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtOTgyLDEwICs5ODIsNyBAQAogCQlnb3RvIG91dF9wdXQ7CiAKIAlzaXplX21heCA9IHBvLT50eF9yaW5nLmZyYW1lX3NpemUKLQkJLSBzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykKLQkJLSBwby0+dHBfaGRybGVuCi0JCS0gTExfQUxMT0NBVEVEX1NQQUNFKGRldikKLQkJLSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKTsKKwkJLSAocG8tPnRwX2hkcmxlbiAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKTsKIAogCWlmIChzaXplX21heCA+IGRldi0+bXR1ICsgcmVzZXJ2ZSkKIAkJc2l6ZV9tYXggPSBkZXYtPm10dSArIHJlc2VydmU7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3BlZGl0LmMgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKaW5kZXggOTZjMGVkMS4uNmIwMzU5YSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfcGVkaXQuYwpAQCAtMzQsNyArMzQsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHBlZGl0X3BvbGljeVtUQ0FfUEVESVRfTUFYICsgMV0gPSB7Ci0JW1RDQV9QRURJVF9QQVJNU10JPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IHRjZl9wZWRpdCkgfSwKKwlbVENBX1BFRElUX1BBUk1TXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgdGNfcGVkaXQpIH0sCiB9OwogCiBzdGF0aWMgaW50IHRjZl9wZWRpdF9pbml0KHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sYXR0ciAqZXN0LApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKaW5kZXggNmE1MzY5NC4uN2NmNmMwZiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuYworKysgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCkBAIC0zNTAsNyArMzUwLDcgQEAKIAl0Y20gPSBOTE1TR19EQVRBKG5saCk7CiAJdGNtLT50Y21fZmFtaWx5ID0gQUZfVU5TUEVDOwogCXRjbS0+dGNtX19wYWQxID0gMDsKLQl0Y20tPnRjbV9fcGFkMSA9IDA7CisJdGNtLT50Y21fX3BhZDIgPSAwOwogCXRjbS0+dGNtX2lmaW5kZXggPSBxZGlzY19kZXYodHAtPnEpLT5pZmluZGV4OwogCXRjbS0+dGNtX3BhcmVudCA9IHRwLT5jbGFzc2lkOwogCXRjbS0+dGNtX2luZm8gPSBUQ19IX01BS0UodHAtPnByaW8sIHRwLT5wcm90b2NvbCk7CmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggNTFhYjQ5Ny4uZmM4MjBjZCAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMTA3NCw2ICsxMDc0LDggQEAKIAllcnIgPSAtRUNPTk5SRUZVU0VEOwogCWlmIChvdGhlci0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTikKIAkJZ290byBvdXRfdW5sb2NrOworCWlmIChvdGhlci0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pCisJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmICh1bml4X3JlY3ZxX2Z1bGwob3RoZXIpKSB7CiAJCWVyciA9IC1FQUdBSU47CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaAppbmRleCAyYTMzZDhiLi42OGIzMjE5IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmgKQEAgLTM1OCw2ICszNTgsNyBAQAogCQkJICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7CiAKIHZvaWQgY2ZnODAyMTFfY29ubl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIGNmZzgwMjExX3NtZV9mYWlsZWRfYXNzb2Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7CiBib29sIGNmZzgwMjExX3NtZV9mYWlsZWRfcmVhc3NvYyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTsKIAogLyogaW50ZXJuYWwgaGVscGVycyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL21sbWUuYyBiL25ldC93aXJlbGVzcy9tbG1lLmMKaW5kZXggNzlkMmVlYy4uMGE2YjdhMCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL21sbWUuYworKysgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCkBAIC02Miw2ICs2Miw3IEBACiAJdTggKmllID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOwogCWludCBpLCBpZW9mZnMgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYXNzb2NfcmVzcC52YXJpYWJsZSk7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzID0gTlVMTDsKKwlib29sIG5lZWRfY29ubmVjdF9yZXN1bHQgPSB0cnVlOwogCiAJd2Rldl9sb2NrKHdkZXYpOwogCkBAIC05NCw2ICs5NSwxNCBAQAogCQl9CiAKIAkJV0FSTl9PTighYnNzKTsKKwl9IGVsc2UgaWYgKHdkZXYtPmNvbm4pIHsKKwkJY2ZnODAyMTFfc21lX2ZhaWxlZF9hc3NvYyh3ZGV2KTsKKwkJbmVlZF9jb25uZWN0X3Jlc3VsdCA9IGZhbHNlOworCQkvKgorCQkgKiBkbyBub3QgY2FsbCBjb25uZWN0X3Jlc3VsdCgpIG5vdyBiZWNhdXNlIHRoZQorCQkgKiBzbWUgd2lsbCBzY2hlZHVsZSB3b3JrIHRoYXQgZG9lcyBpdCBsYXRlci4KKwkJICovCisJCWdvdG8gb3V0OwogCX0KIAogCWlmICghd2Rldi0+Y29ubiAmJiB3ZGV2LT5zbWVfc3RhdGUgPT0gQ0ZHODAyMTFfU01FX0lETEUpIHsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IGVkZGFiMDkuLmNhM2M5MmEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtNDAyOSw3ICs0MDI5LDcgQEAKIAlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oaW5mbyk7CiAJaWYgKElTX0VSUihyZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKHJkZXYpOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfcnRubDsKIAl9CiAKIAluZXQgPSBnZXRfbmV0X25zX2J5X3BpZChwaWQpOwpAQCAtNDA0OSw2ICs0MDQ5LDcgQEAKIAlwdXRfbmV0KG5ldCk7CiAgb3V0OgogCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworIG91dF9ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zbWUuYyBiL25ldC93aXJlbGVzcy9zbWUuYwppbmRleCA5M2MzZWQzLi5lY2UzNzhkIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc21lLmMKKysrIGIvbmV0L3dpcmVsZXNzL3NtZS5jCkBAIC0yNiw2ICsyNiw3IEBACiAJCUNGRzgwMjExX0NPTk5fQVVUSEVOVElDQVRJTkcsCiAJCUNGRzgwMjExX0NPTk5fQVNTT0NJQVRFX05FWFQsCiAJCUNGRzgwMjExX0NPTk5fQVNTT0NJQVRJTkcsCisJCUNGRzgwMjExX0NPTk5fREVBVVRIX0FTU09DX0ZBSUwsCiAJfSBzdGF0ZTsKIAl1OCBic3NpZFtFVEhfQUxFTl0sIHByZXZfYnNzaWRbRVRIX0FMRU5dOwogCXU4ICppZTsKQEAgLTE0OCw2ICsxNDksMTIgQEAKIAkJCQkJICAgICAgIE5VTEwsIDAsCiAJCQkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7CiAJCXJldHVybiBlcnI7CisJY2FzZSBDRkc4MDIxMV9DT05OX0RFQVVUSF9BU1NPQ19GQUlMOgorCQlfX2NmZzgwMjExX21sbWVfZGVhdXRoKHJkZXYsIHdkZXYtPm5ldGRldiwgcGFyYW1zLT5ic3NpZCwKKwkJCQkgICAgICAgTlVMTCwgMCwKKwkJCQkgICAgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOworCQkvKiByZXR1cm4gYW4gZXJyb3Igc28gdGhhdCB3ZSBjYWxsIF9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoKSAqLworCQlyZXR1cm4gLUVJTlZBTDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNTgsNiArMTY1LDcgQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlLCBjb25uX3dvcmspOwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisJdTggYnNzaWRbRVRIX0FMRU5dOwogCiAJcnRubF9sb2NrKCk7CiAJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOwpAQCAtMTczLDEwICsxODEsMTAgQEAKIAkJCXdkZXZfdW5sb2NrKHdkZXYpOwogCQkJY29udGludWU7CiAJCX0KKwkJbWVtY3B5KGJzc2lkLCB3ZGV2LT5jb25uLT5wYXJhbXMuYnNzaWQsIEVUSF9BTEVOKTsKIAkJaWYgKGNmZzgwMjExX2Nvbm5fZG9fd29yayh3ZGV2KSkKIAkJCV9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoCi0JCQkJCXdkZXYtPm5ldGRldiwKLQkJCQkJd2Rldi0+Y29ubi0+cGFyYW1zLmJzc2lkLAorCQkJCQl3ZGV2LT5uZXRkZXYsIGJzc2lkLAogCQkJCQlOVUxMLCAwLCBOVUxMLCAwLAogCQkJCQlXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9GQUlMVVJFLAogCQkJCQlmYWxzZSwgTlVMTCk7CkBAIC0zMzcsNiArMzQ1LDE1IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgY2ZnODAyMTFfc21lX2ZhaWxlZF9hc3NvYyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJd2Rldi0+Y29ubi0+c3RhdGUgPSBDRkc4MDIxMV9DT05OX0RFQVVUSF9BU1NPQ19GQUlMOworCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmNvbm5fd29yayk7Cit9CisKIHZvaWQgX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCiAJCQkgICAgICAgY29uc3QgdTggKnJlcV9pZSwgc2l6ZV90IHJlcV9pZV9sZW4sCiAJCQkgICAgICAgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbiwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCmluZGV4IDRmOWMxOTAuLmM2N2U3M2UgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKKysrIGIvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQpAQCAtMTAwLDcgKzEwMCw3IEBACiAjIFVzYWdlOiBjZmxhZ3MteSArPSAkKGNhbGwgYXMtaW5zdHIsaW5zdHIsb3B0aW9uMSxvcHRpb24yKQogCiBhcy1pbnN0ciA9ICQoY2FsbCB0cnktcnVuLFwKLQllY2hvIC1lICIkKDEpIiB8ICQoQ0MpICQoS0JVSUxEX0FGTEFHUykgLWMgLXhhc3NlbWJsZXIgLW8gIiQkVE1QIiAtLCQoMiksJCgzKSkKKwkvYmluL2VjaG8gLWUgIiQoMSkiIHwgJChDQykgJChLQlVJTERfQUZMQUdTKSAtYyAteGFzc2VtYmxlciAtbyAiJCRUTVAiIC0sJCgyKSwkKDMpKQogCiAjIGNjLW9wdGlvbgogIyBVc2FnZTogY2ZsYWdzLXkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9d2luY2hpcC1jNiwtbWFyY2g9aTU4NikKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggN2E3Nzc4Ny4uZmZkYWZiMiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKQEAgLTIwOCw3ICsyMDgsNyBAQAogCiAjIEJ6aXAyIGFuZCBMWk1BIGRvIG5vdCBpbmNsdWRlIHNpemUgaW4gZmlsZS4uLiBzbyB3ZSBoYXZlIHRvIGZha2UgdGhhdDsKICMgYXBwZW5kIHRoZSBzaXplIGFzIGEgMzItYml0IGxpdHRsZWVuZGlhbiBudW1iZXIgYXMgZ3ppcCBkb2VzLgotc2l6ZV9hcHBlbmQgPSBlY2hvIC1uZSAkKHNoZWxsCQkJCQkJXAorc2l6ZV9hcHBlbmQgPSAvYmluL2VjaG8gLW5lICQoc2hlbGwJCQkJCVwKIGRlY19zaXplPTA7CQkJCQkJCQlcCiBmb3IgRiBpbiAkMTsgZG8JCQkJCQkJCVwKIAlmc2l6ZT0kJChzdGF0IC1jICIlcyIgJCRGKTsJCQkJCVwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2trY29uZmlnc3ltYm9scy5zaCBiL3NjcmlwdHMvY2hlY2trY29uZmlnc3ltYm9scy5zaAppbmRleCAzOTY3N2M4Li40NmJlM2M1IDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNra2NvbmZpZ3N5bWJvbHMuc2gKKysrIGIvc2NyaXB0cy9jaGVja2tjb25maWdzeW1ib2xzLnNoCkBAIC05LDcgKzksNyBAQAogIyBEb2luZyB0aGlzIG9uY2UgYXQgdGhlIGJlZ2lubmluZyBzYXZlcyBhIGxvdCBvZiB0aW1lLCBvbiBhIGNhY2hlLWhvdCB0cmVlLgogS2NvbmZpZ3M9ImBmaW5kIC4gLW5hbWUgJ0tjb25maWcnIC1vIC1uYW1lICdLY29uZmlnKltefl0nYCIKIAotZWNobyAtZSAiRmlsZSBsaXN0IFx0dW5kZWZpbmVkIHN5bWJvbCB1c2VkIgorL2Jpbi9lY2hvIC1lICJGaWxlIGxpc3QgXHR1bmRlZmluZWQgc3ltYm9sIHVzZWQiCiBmaW5kICRwYXRocyAtbmFtZSAnKi5bY2hTXScgLW8gLW5hbWUgJ01ha2VmaWxlJyAtbyAtbmFtZSAnTWFrZWZpbGUqW15+XSd8IHdoaWxlIHJlYWQgaQogZG8KIAkjIE91dHB1dCB0aGUgYmFyZSBLY29uZmlnIHZhcmlhYmxlIGFuZCB0aGUgZmlsZW5hbWU7IHRoZSBfTU9EVUxFIHBhcnQgYXQKQEAgLTU0LDYgKzU0LDYgQEAKIAkjIGJleW9uZCB0aGUgcHVycG9zZSBvZiB0aGlzIHNjcmlwdC4KIAlzeW1iX2JhcmU9YGVjaG8gJHN5bWIgfCBzZWQgLWUgJ3MvX01PRFVMRS8vJ2AKIAlpZiAhIGdyZXAgLXEgIlw8JHN5bWJfYmFyZVw+IiAkS2NvbmZpZ3M7IHRoZW4KLQkJZWNobyAtZSAiJGZpbGVzOiBcdCRzeW1iIgorCQkvYmluL2VjaG8gLWUgIiRmaWxlczogXHQkc3ltYiIKIAlmaQogZG9uZXxzb3J0CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKaW5kZXggODdiYmI4Yi4uYmM0MTE0ZiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsCisrKyBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApAQCAtMiw3ICsyLDcgQEAKICMgKGMpIDIwMDEsIERhdmUgSm9uZXMuIDxkYXZlakByZWRoYXQuY29tPiAodGhlIGZpbGUgaGFuZGxpbmcgYml0KQogIyAoYykgMjAwNSwgSm9lbCBTY2hvcHAgPGpzY2hvcHBAYXVzdGluLmlibS5jb20+ICh0aGUgdWdseSBiaXQpCiAjIChjKSAyMDA3LDIwMDgsIEFuZHkgV2hpdGNyb2Z0IDxhcHdAdWsuaWJtLmNvbT4gKG5ldyBjb25kaXRpb25zLCB0ZXN0IHN1aXRlKQotIyAoYykgMjAwOCwgQW5keSBXaGl0Y3JvZnQgPGFwd0BjYW5vbmljYWwuY29tPgorIyAoYykgMjAwOCwyMDA5LCBBbmR5IFdoaXRjcm9mdCA8YXB3QGNhbm9uaWNhbC5jb20+CiAjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgogCiB1c2Ugc3RyaWN0OwpAQCAtMTAsNyArMTAsNyBAQAogbXkgJFAgPSAkMDsKICRQID1+IHNALiovQEBnOwogCi1teSAkViA9ICcwLjI5JzsKK215ICRWID0gJzAuMzAnOwogCiB1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9fYXV0b19hYmJyZXYpOwogCkBAIC0xMzAsNyArMTMwLDEwIEBACiAKIG15ICRlbWl0dGVkX2NvcnJ1cHQgPSAwOwogCi1vdXIgJElkZW50ICAgICAgID0gcXJ7W0EtWmEtel9dW0EtWmEtelxkX10qfTsKK291ciAkSWRlbnQJPSBxcnsKKwkJCVtBLVphLXpfXVtBLVphLXpcZF9dKgorCQkJKD86XHMqXCNcI1xzKltBLVphLXpfXVtBLVphLXpcZF9dKikqCisJCX14Owogb3VyICRTdG9yYWdlCT0gcXJ7ZXh0ZXJufHN0YXRpY3xhc21saW5rYWdlfTsKIG91ciAkU3BhcnNlCT0gcXJ7CiAJCQlfX3VzZXJ8CkBAIC05OTcsMjMgKzEwMDAsMjUgQEAKIAogc3ViIHBvc3NpYmxlIHsKIAlteSAoJHBvc3NpYmxlLCAkbGluZSkgPSBAXzsKLQotCXByaW50ICJDSEVDSzwkcG9zc2libGU+ICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUgPiAyKTsKLQlpZiAoJHBvc3NpYmxlICF+IC8oPzoKKwlteSAkbm90UGVybWl0dGVkID0gcXJ7KD86CiAJCV4oPzoKIAkJCSRNb2RpZmllcnwKIAkJCSRTdG9yYWdlfAogCQkJJFR5cGV8Ci0JCQlERUZJTkVfXFMrfAorCQkJREVGSU5FX1xTKworCQkpJHwKKwkJXig/OgogCQkJZ290b3wKIAkJCXJldHVybnwKIAkJCWNhc2V8CiAJCQllbHNlfAogCQkJYXNtfF9fYXNtX198CiAJCQlkbwotCQkpJHwKKwkJKSg/OlxzfCQpfAogCQleKD86dHlwZWRlZnxzdHJ1Y3R8ZW51bSlcYgotCSAgICApL3gpIHsKKwkgICAgKX14OworCXdhcm4gIkNIRUNLPCRwb3NzaWJsZT4gKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSA+IDIpOworCWlmICgkcG9zc2libGUgIX4gJG5vdFBlcm1pdHRlZCkgewogCQkjIENoZWNrIGZvciBtb2RpZmllcnMuCiAJCSRwb3NzaWJsZSA9fiBzL1xzKiRTdG9yYWdlXHMqLy9nOwogCQkkcG9zc2libGUgPX4gcy9ccyokU3BhcnNlXHMqLy9nOwpAQCAtMTAyMiw4ICsxMDI3LDEwIEBACiAJCX0gZWxzaWYgKCRwb3NzaWJsZSA9fiAvXHMvKSB7CiAJCQkkcG9zc2libGUgPX4gcy9ccyokVHlwZVxzKi8vZzsKIAkJCWZvciBteSAkbW9kaWZpZXIgKHNwbGl0KCcgJywgJHBvc3NpYmxlKSkgewotCQkJCXdhcm4gIk1PRElGSUVSOiAkbW9kaWZpZXIgKCRwb3NzaWJsZSkgKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSk7Ci0JCQkJcHVzaChAbW9kaWZpZXJMaXN0LCAkbW9kaWZpZXIpOworCQkJCWlmICgkbW9kaWZpZXIgIX4gJG5vdFBlcm1pdHRlZCkgeworCQkJCQl3YXJuICJNT0RJRklFUjogJG1vZGlmaWVyICgkcG9zc2libGUpICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUpOworCQkJCQlwdXNoKEBtb2RpZmllckxpc3QsICRtb2RpZmllcik7CisJCQkJfQogCQkJfQogCiAJCX0gZWxzZSB7CkBAIC0xMTM4LDYgKzExNDUsNyBAQAogCSMgc3VwcHJlc3Npb24gZmxhZ3MKIAlteSAlc3VwcHJlc3NfaWZicmFjZXM7CiAJbXkgJXN1cHByZXNzX3doaWxldHJhaWxlcnM7CisJbXkgJXN1cHByZXNzX2V4cG9ydDsKIAogCSMgUHJlLXNjYW4gdGhlIHBhdGNoIHNhbml0aXppbmcgdGhlIGxpbmVzLgogCSMgUHJlLXNjYW4gdGhlIHBhdGNoIGxvb2tpbmcgZm9yIGFueSBfX3NldHVwIGRvY3VtZW50YXRpb24uCkBAIC0xMjMwLDcgKzEyMzgsNiBAQAogCQkkbGluZW5yKys7CiAKIAkJbXkgJHJhd2xpbmUgPSAkcmF3bGluZXNbJGxpbmVuciAtIDFdOwotCQlteSAkaHVua19saW5lID0gKCRyZWFsY250ICE9IDApOwogCiAjZXh0cmFjdCB0aGUgbGluZSByYW5nZSBpbiB0aGUgZmlsZSBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZAogCQlpZiAoJGxpbmU9fi9eXEBcQCAtXGQrKD86LFxkKyk/IFwrKFxkKykoLChcZCspKT8gXEBcQC8pIHsKQEAgLTEyNDcsNiArMTI1NCw3IEBACiAKIAkJCSVzdXBwcmVzc19pZmJyYWNlcyA9ICgpOwogCQkJJXN1cHByZXNzX3doaWxldHJhaWxlcnMgPSAoKTsKKwkJCSVzdXBwcmVzc19leHBvcnQgPSAoKTsKIAkJCW5leHQ7CiAKICMgdHJhY2sgdGhlIGxpbmUgbnVtYmVyIGFzIHdlIG1vdmUgdGhyb3VnaCB0aGUgaHVuaywgbm90ZSB0aGF0CkBAIC0xMjcwLDYgKzEyNzgsOCBAQAogCQkJJHJlYWxjbnQtLTsKIAkJfQogCisJCW15ICRodW5rX2xpbmUgPSAoJHJlYWxjbnQgIT0gMCk7CisKICNtYWtlIHVwIHRoZSBoYW5kbGUgZm9yIGFueSBlcnJvciB3ZSByZXBvcnQgb24gdGhpcyBsaW5lCiAJCSRwcmVmaXggPSAiJGZpbGVuYW1lOiRyZWFsbGluZTogIiBpZiAoJGVtYWNzICYmICRmaWxlKTsKIAkJJHByZWZpeCA9ICIkZmlsZW5hbWU6JGxpbmVucjogIiBpZiAoJGVtYWNzICYmICEkZmlsZSk7CkBAIC0xNDIwLDEzICsxNDMwLDIyIEBACiAJCX0KIAogIyBDaGVjayBmb3IgcG90ZW50aWFsICdiYXJlJyB0eXBlcwotCQlteSAoJHN0YXQsICRjb25kLCAkbGluZV9ucl9uZXh0LCAkcmVtYWluX25leHQsICRvZmZfbmV4dCk7CisJCW15ICgkc3RhdCwgJGNvbmQsICRsaW5lX25yX25leHQsICRyZW1haW5fbmV4dCwgJG9mZl9uZXh0LAorCQkgICAgJHJlYWxsaW5lX25leHQpOwogCQlpZiAoJHJlYWxjbnQgJiYgJGxpbmUgPX4gLy5ccypcUy8pIHsKIAkJCSgkc3RhdCwgJGNvbmQsICRsaW5lX25yX25leHQsICRyZW1haW5fbmV4dCwgJG9mZl9uZXh0KSA9CiAJCQkJY3R4X3N0YXRlbWVudF9ibG9jaygkbGluZW5yLCAkcmVhbGNudCwgMCk7CiAJCQkkc3RhdCA9fiBzL1xuLi9cbiAvZzsKIAkJCSRjb25kID1+IHMvXG4uL1xuIC9nOwogCisJCQkjIEZpbmQgdGhlIHJlYWwgbmV4dCBsaW5lLgorCQkJJHJlYWxsaW5lX25leHQgPSAkbGluZV9ucl9uZXh0OworCQkJaWYgKGRlZmluZWQgJHJlYWxsaW5lX25leHQgJiYKKwkJCSAgICAoIWRlZmluZWQgJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0gfHwKKwkJCSAgICAgc3Vic3RyKCRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdLCAkb2ZmX25leHQpID1+IC9eXHMqJC8pKSB7CisJCQkJJHJlYWxsaW5lX25leHQrKzsKKwkJCX0KKwogCQkJbXkgJHMgPSAkc3RhdDsKIAkJCSRzID1+IHMvey4qJC8vczsKIApAQCAtMTY2MSw4ICsxNjgwLDggQEAKIAkJfQogCiAjIGNoZWNrIGZvciBpbml0aWFsaXNhdGlvbiB0byBhZ2dyZWdhdGVzIG9wZW4gYnJhY2Ugb24gdGhlIG5leHQgbGluZQotCQlpZiAoJHByZXZsaW5lID1+IC8kRGVjbGFyZVxzKiRJZGVudFxzKj1ccyokLyAmJgotCQkgICAgJGxpbmUgPX4gL14uXHMqey8pIHsKKwkJaWYgKCRsaW5lID1+IC9eLlxzKnsvICYmCisJCSAgICAkcHJldmxpbmUgPX4gLyg/Ol58W149XSk9XHMqJC8pIHsKIAkJCUVSUk9SKCJ0aGF0IG9wZW4gYnJhY2UgeyBzaG91bGQgYmUgb24gdGhlIHByZXZpb3VzIGxpbmVcbiIgLiAkaGVyZXByZXYpOwogCQl9CiAKQEAgLTE2ODcsMjEgKzE3MDYsNDAgQEAKIAkJJGxpbmUgPX4gc0AvLy4qQEA7CiAJCSRvcGxpbmUgPX4gc0AvLy4qQEA7CiAKLSNFWFBPUlRfU1lNQk9MIHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgaXRzIGZ1bmN0aW9uIGNsb3NpbmcgfS4KLQkJaWYgKCgkbGluZSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvKSB8fAotCQkgICAgKCRsaW5lID1+IC9FWFBPUlRfVU5VU0VEX1NZTUJPTC4qXCgoLiopXCkvKSkgeworIyBFWFBPUlRfU1lNQk9MIHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgdGhlIHRoaW5nIGl0IGlzIGV4cG9ydGluZywgY29uc2lkZXIKKyMgdGhlIHdob2xlIHN0YXRlbWVudC4KKyNwcmludCAiQVBXIDwkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXT5cbiI7CisJCWlmIChkZWZpbmVkICRyZWFsbGluZV9uZXh0ICYmCisJCSAgICBleGlzdHMgJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0gJiYKKwkJICAgICFkZWZpbmVkICRzdXBwcmVzc19leHBvcnR7JHJlYWxsaW5lX25leHR9ICYmCisJCSAgICAoJGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0gPX4gL0VYUE9SVF9TWU1CT0wuKlwoKC4qKVwpLyB8fAorCQkgICAgICRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdID1+IC9FWFBPUlRfVU5VU0VEX1NZTUJPTC4qXCgoLiopXCkvKSkgewogCQkJbXkgJG5hbWUgPSAkMTsKLQkJCWlmICgkcHJldmxpbmUgIX4gLyg/OgotCQkJCV4ufXwKKwkJCWlmICgkc3RhdCAhfiAvKD86CisJCQkJXG4ufVxzKiR8CiAJCQkJXi5ERUZJTkVfJElkZW50XChcUSRuYW1lXEVcKXwKIAkJCQleLkRFQ0xBUkVfJElkZW50XChcUSRuYW1lXEVcKXwKIAkJCQleLkxJU1RfSEVBRFwoXFEkbmFtZVxFXCl8Ci0JCQkJXi4kVHlwZVxzKlwoXHMqXCpccypcUSRuYW1lXEVccypcKVxzKlwofAotCQkJCVxiXFEkbmFtZVxFKD86XHMrJEF0dHJpYnV0ZSk/XHMqKD86O3w9fFxbKQorCQkJCV4uKD86JFN0b3JhZ2VccyspPyRUeXBlXHMqXChccypcKlxzKlxRJG5hbWVcRVxzKlwpXHMqXCh8CisJCQkJXGJcUSRuYW1lXEUoPzpccyskQXR0cmlidXRlKSpccyooPzo7fD18XFt8XCgpCiAJCQkgICAgKS94KSB7Ci0JCQkJV0FSTigiRVhQT1JUX1NZTUJPTChmb28pOyBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IGl0cyBmdW5jdGlvbi92YXJpYWJsZVxuIiAuICRoZXJlY3Vycik7CisjcHJpbnQgIkZPTyBBPCRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdPiBzdGF0PCRzdGF0PiBuYW1lPCRuYW1lPlxuIjsKKwkJCQkkc3VwcHJlc3NfZXhwb3J0eyRyZWFsbGluZV9uZXh0fSA9IDI7CisJCQl9IGVsc2UgeworCQkJCSRzdXBwcmVzc19leHBvcnR7JHJlYWxsaW5lX25leHR9ID0gMTsKIAkJCX0KIAkJfQorCQlpZiAoIWRlZmluZWQgJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSAmJgorCQkgICAgJHByZXZsaW5lID1+IC9eLlxzKiQvICYmCisJCSAgICAoJGxpbmUgPX4gL0VYUE9SVF9TWU1CT0wuKlwoKC4qKVwpLyB8fAorCQkgICAgICRsaW5lID1+IC9FWFBPUlRfVU5VU0VEX1NZTUJPTC4qXCgoLiopXCkvKSkgeworI3ByaW50ICJGT08gQiA8JGxpbmVzWyRsaW5lbnIgLSAxXT5cbiI7CisJCQkkc3VwcHJlc3NfZXhwb3J0eyRsaW5lbnJ9ID0gMjsKKwkJfQorCQlpZiAoZGVmaW5lZCAkc3VwcHJlc3NfZXhwb3J0eyRsaW5lbnJ9ICYmCisJCSAgICAkc3VwcHJlc3NfZXhwb3J0eyRsaW5lbnJ9ID09IDIpIHsKKwkJCVdBUk4oIkVYUE9SVF9TWU1CT0woZm9vKTsgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24vdmFyaWFibGVcbiIgLiAkaGVyZWN1cnIpOworCQl9CiAKICMgY2hlY2sgZm9yIGV4dGVybmFsIGluaXRpYWxpc2Vycy4KIAkJaWYgKCRsaW5lID1+IC9eLiRUeXBlXHMqJElkZW50XHMqKD86XHMrJE1vZGlmaWVyKSpccyo9XHMqKDB8TlVMTHxmYWxzZSlccyo7LykgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbCBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKaW5kZXggY2RiNDRiNi4uMTAyYjc2NiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAorKysgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCkBAIC0xMyw3ICsxMyw3IEBACiB1c2Ugc3RyaWN0OwogCiBteSAkUCA9ICQwOwotbXkgJFYgPSAnMC4yMCc7CitteSAkViA9ICcwLjIxJzsKIAogdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9fYWJicmV2KTsKIApAQCAtMzcsNiArMzcsNyBAQAogbXkgJHdlYiA9IDA7CiBteSAkc3Vic3lzdGVtID0gMDsKIG15ICRzdGF0dXMgPSAwOworbXkgJGtleXdvcmRzID0gMTsKIG15ICRmcm9tX2ZpbGVuYW1lID0gMDsKIG15ICRwYXR0ZXJuX2RlcHRoID0gMDsKIG15ICR2ZXJzaW9uID0gMDsKQEAgLTg0LDYgKzg1LDcgQEAKIAkJJ3NjbSEnID0+IFwkc2NtLAogCQknd2ViIScgPT4gXCR3ZWIsCiAJCSdwYXR0ZXJuLWRlcHRoPWknID0+IFwkcGF0dGVybl9kZXB0aCwKKwkJJ2t8a2V5d29yZHMhJyA9PiBcJGtleXdvcmRzLAogCQknZnxmaWxlJyA9PiBcJGZyb21fZmlsZW5hbWUsCiAJCSd2fHZlcnNpb24nID0+IFwkdmVyc2lvbiwKIAkJJ2h8aGVscCcgPT4gXCRoZWxwLApAQCAtMTMyLDYgKzEzNCw4IEBACiAjIyBSZWFkIE1BSU5UQUlORVJTIGZvciB0eXBlL3ZhbHVlIHBhaXJzCiAKIG15IEB0eXBldmFsdWUgPSAoKTsKK215ICVrZXl3b3JkX2hhc2g7CisKIG9wZW4oTUFJTlQsICI8JHtsa19wYXRofU1BSU5UQUlORVJTIikgfHwgZGllICIkUDogQ2FuJ3Qgb3BlbiBNQUlOVEFJTkVSU1xuIjsKIHdoaWxlICg8TUFJTlQ+KSB7CiAgICAgbXkgJGxpbmUgPSAkXzsKQEAgLTE0OSw2ICsxNTMsOCBAQAogCSAgICBpZiAoKC1kICR2YWx1ZSkpIHsKIAkJJHZhbHVlID1+IHNAKFteL10pJEAkMS9AOwogCSAgICB9CisJfSBlbHNpZiAoJHR5cGUgZXEgIksiKSB7CisJICAgICRrZXl3b3JkX2hhc2h7QHR5cGV2YWx1ZX0gPSAkdmFsdWU7CiAJfQogCXB1c2goQHR5cGV2YWx1ZSwgIiR0eXBlOiR2YWx1ZSIpOwogICAgIH0gZWxzaWYgKCEvXihccykqJC8pIHsKQEAgLTE4OCw2ICsxOTQsNyBAQAogCiBteSBAZmlsZXMgPSAoKTsKIG15IEByYW5nZSA9ICgpOworbXkgQGtleXdvcmRfdHZpID0gKCk7CiAKIGZvcmVhY2ggbXkgJGZpbGUgKEBBUkdWKSB7CiAgICAgIyNpZiAkZmlsZSBpcyBhIGRpcmVjdG9yeSBhbmQgaXQgbGFja3MgYSB0cmFpbGluZyBzbGFzaCwgYWRkIG9uZQpAQCAtMTk4LDExICsyMDUsMjQgQEAKICAgICB9CiAgICAgaWYgKCRmcm9tX2ZpbGVuYW1lKSB7CiAJcHVzaChAZmlsZXMsICRmaWxlKTsKKwlpZiAoLWYgJGZpbGUgJiYgJGtleXdvcmRzKSB7CisJICAgIG9wZW4oRklMRSwgIjwkZmlsZSIpIG9yIGRpZSAiJFA6IENhbid0IG9wZW4gJHtmaWxlfVxuIjsKKwkgICAgd2hpbGUgKDxGSUxFPikgeworCQlteSAkcGF0Y2hfbGluZSA9ICRfOworCQlmb3JlYWNoIG15ICRsaW5lIChrZXlzICVrZXl3b3JkX2hhc2gpIHsKKwkJICAgIGlmICgkcGF0Y2hfbGluZSA9fiBtL14uKiRrZXl3b3JkX2hhc2h7JGxpbmV9L3gpIHsKKwkJCXB1c2goQGtleXdvcmRfdHZpLCAkbGluZSk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBjbG9zZShGSUxFKTsKKwl9CiAgICAgfSBlbHNlIHsKIAlteSAkZmlsZV9jbnQgPSBAZmlsZXM7CiAJbXkgJGxhc3RmaWxlOwogCW9wZW4oUEFUQ0gsICI8JGZpbGUiKSBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICR7ZmlsZX1cbiI7CiAJd2hpbGUgKDxQQVRDSD4pIHsKKwkgICAgbXkgJHBhdGNoX2xpbmUgPSAkXzsKIAkgICAgaWYgKG0vXlwrXCtcK1xzKyhcUyspLykgewogCQlteSAkZmlsZW5hbWUgPSAkMTsKIAkJJGZpbGVuYW1lID1+IHNAXlteL10qL0BAOwpAQCAtMjEzLDYgKzIzMywxMiBAQAogCQlpZiAoJGVtYWlsX2dpdF9ibGFtZSkgewogCQkgICAgcHVzaChAcmFuZ2UsICIkbGFzdGZpbGU6JDE6JDIiKTsKIAkJfQorCSAgICB9IGVsc2lmICgka2V5d29yZHMpIHsKKwkJZm9yZWFjaCBteSAkbGluZSAoa2V5cyAla2V5d29yZF9oYXNoKSB7CisJCSAgICBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eWystXS4qJGtleXdvcmRfaGFzaHskbGluZX0veCkgeworCQkJcHVzaChAa2V5d29yZF90dmksICRsaW5lKTsKKwkJICAgIH0KKwkJfQogCSAgICB9CiAJfQogCWNsb3NlKFBBVENIKTsKQEAgLTI4Niw2ICszMTIsMTMgQEAKICAgICB9CiB9CiAKK2lmICgka2V5d29yZHMpIHsKKyAgICBAa2V5d29yZF90dmkgPSBzb3J0X2FuZF91bmlxKEBrZXl3b3JkX3R2aSk7CisgICAgZm9yZWFjaCBteSAkbGluZSAoQGtleXdvcmRfdHZpKSB7CisJYWRkX2NhdGVnb3JpZXMoJGxpbmUpOworICAgIH0KK30KKwogaWYgKCRlbWFpbCkgewogICAgIGZvcmVhY2ggbXkgJGNoaWVmIChAcGVuZ3Vpbl9jaGllZikgewogCWlmICgkY2hpZWYgPX4gbS9eKC4qKTooLiopLykgewpAQCAtMzg0LDYgKzQxNyw3IEBACiAKIE90aGVyIG9wdGlvbnM6CiAgIC0tcGF0dGVybi1kZXB0aCA9PiBOdW1iZXIgb2YgcGF0dGVybiBkaXJlY3RvcnkgdHJhdmVyc2FscyAoZGVmYXVsdDogMCAoYWxsKSkKKyAgLS1rZXl3b3JkcyA9PiBzY2FuIHBhdGNoIGZvciBrZXl3b3JkcyAoZGVmYXVsdDogMSAob24pKQogICAtLXZlcnNpb24gPT4gc2hvdyB2ZXJzaW9uCiAgIC0taGVscCA9PiBzaG93IHRoaXMgaGVscCBpbmZvcm1hdGlvbgogCkBAIC00ODYsNyArNTIwLDYgQEAKIH0KIAogc3ViIGZpbmRfc3RhcnRpbmdfaW5kZXggewotCiAgICAgbXkgKCRpbmRleCkgPSBAXzsKIAogICAgIHdoaWxlICgkaW5kZXggPiAwKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbCBiL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsCmluZGV4IGM2YWU0MDUuLmI4OWNhMmMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsCisrKyBiL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsCkBAIC0yMCw3ICsyMCw3IEBACiAKIG15ICgkcmVhZGRpciwgJGluc3RhbGxkaXIsICRhcmNoLCBAZmlsZXMpID0gQEFSR1Y7CiAKLW15ICR1bmlmZGVmID0gInNjcmlwdHMvdW5pZmRlZiAtVV9fS0VSTkVMX18iOworbXkgJHVuaWZkZWYgPSAic2NyaXB0cy91bmlmZGVmIC1VX19LRVJORUxfXyAtRF9fRVhQT1JURURfSEVBREVSU19fIjsKIAogZm9yZWFjaCBteSAkZmlsZSAoQGZpbGVzKSB7CiAJbG9jYWwgKklORklMRTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWtjb21waWxlX2ggYi9zY3JpcHRzL21rY29tcGlsZV9oCmluZGV4IDZhMTJkZDkuLmJjZTNkMGYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvbWtjb21waWxlX2gKKysrIGIvc2NyaXB0cy9ta2NvbXBpbGVfaApAQCAtMSwzICsxLDUgQEAKKyMhL2Jpbi9zaAorCiBUQVJHRVQ9JDEKIEFSQ0g9JDIKIFNNUD0kMwpAQCAtNTAsNyArNTIsNyBAQAogIyBUcnVuY2F0ZSB0byBtYXhpbXVtIGxlbmd0aAogCiBVVFNfTEVOPTY0Ci1VVFNfVFJVTkNBVEU9InNlZCAtZSBzL1woLlx7MSwkVVRTX0xFTlx9XCkuKi9cMS8iCitVVFNfVFJVTkNBVEU9ImN1dCAtYiAtJFVUU19MRU4iCiAKICMgR2VuZXJhdGUgYSB0ZW1wb3JhcnkgY29tcGlsZS5oCiAKQEAgLTY2LDkgKzY4LDEzIEBACiAgIGVjaG8gXCNkZWZpbmUgTElOVVhfQ09NUElMRV9IT1NUIFwiYGhvc3RuYW1lIHwgJFVUU19UUlVOQ0FURWBcIgogCiAgIGlmIFsgLXggL2Jpbi9kbnNkb21haW5uYW1lIF07IHRoZW4KLSAgICBlY2hvIFwjZGVmaW5lIExJTlVYX0NPTVBJTEVfRE9NQUlOIFwiYGRuc2RvbWFpbm5hbWUgfCAkVVRTX1RSVU5DQVRFYFwiCisgICAgZG9tYWluPWBkbnNkb21haW5uYW1lIDI+IC9kZXYvbnVsbGAKICAgZWxpZiBbIC14IC9iaW4vZG9tYWlubmFtZSBdOyB0aGVuCi0gICAgZWNobyBcI2RlZmluZSBMSU5VWF9DT01QSUxFX0RPTUFJTiBcImBkb21haW5uYW1lIHwgJFVUU19UUlVOQ0FURWBcIgorICAgIGRvbWFpbj1gZG9tYWlubmFtZSAyPiAvZGV2L251bGxgCisgIGZpCisKKyAgaWYgWyAtbiAiJGRvbWFpbiIgXTsgdGhlbgorICAgIGVjaG8gXCNkZWZpbmUgTElOVVhfQ09NUElMRV9ET01BSU4gXCJgZWNobyAkZG9tYWluIHwgJFVUU19UUlVOQ0FURWBcIgogICBlbHNlCiAgICAgZWNobyBcI2RlZmluZSBMSU5VWF9DT01QSUxFX0RPTUFJTgogICBmaQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCmluZGV4IGZhNGEwYTEuLmY2N2NjODggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQorKysgYi9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDkgQEAKICMgZSkgZ2VuZXJhdGUgdGhlIHJwbSBmaWxlcywgYmFzZWQgb24ga2VybmVsLnNwZWMKICMgLSBVc2UgLy4gdG8gYXZvaWQgdGFyIHBhY2tpbmcganVzdCB0aGUgc3ltbGluawogCisjIE5vdGUgdGhhdCB0aGUgcnBtLXBrZyB0YXJnZXQgY2Fubm90IGJlIHVzZWQgd2l0aCBLQlVJTERfT1VUUFVULAorIyBidXQgdGhlIGJpbnJwbS1wa2cgdGFyZ2V0IGNhbjsgZm9yIHNvbWUgcmVhc29uIE89IGdldHMgaWdub3JlZC4KKwogIyBEbyB3ZSBoYXZlIHJwbWJ1aWxkLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIHRoZSBvbGRlciBycG0KIFJQTSA6PSAkKHNoZWxsIGlmIFsgLXggIi91c3IvYmluL3JwbWJ1aWxkIiBdOyB0aGVuIGVjaG8gcnBtYnVpbGQ7IFwKIAkgICAgICAgICAgIGVsc2UgZWNobyBycG07IGZpKQpAQCAtMzMsNiArMzYsMTIgQEAKIAkkKENPTkZJR19TSEVMTCkgJChNS1NQRUMpID4gJEAKIAogcnBtLXBrZyBycG06ICQob2JqdHJlZSkva2VybmVsLnNwZWMgRk9SQ0UKKwlAaWYgdGVzdCAtbiAiJChLQlVJTERfT1VUUFVUKSI7IHRoZW4gXAorCQllY2hvICJCdWlsZGluZyBzb3VyY2UgKyBiaW5hcnkgUlBNIGlzIG5vdCBwb3NzaWJsZSBvdXRzaWRlIHRoZSI7IFwKKwkJZWNobyAia2VybmVsIHNvdXJjZSB0cmVlLiBEb24ndCBzZXQgS0JVSUxEX09VVFBVVCwgb3IgdXNlIHRoZSI7IFwKKwkJZWNobyAiYmlucnBtLXBrZyB0YXJnZXQgaW5zdGVhZC4iOyBcCisJCWZhbHNlOyBcCisJZmkKIAkkKE1BS0UpIGNsZWFuCiAJJChQUkVWKSBsbiAtc2YgJChzcmN0cmVlKSAkKEtFUk5FTFBBVEgpCiAJJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9zZXRsb2NhbHZlcnNpb24gPiAkKG9ianRyZWUpLy5zY212ZXJzaW9uCkBAIC02MSw3ICs3MCw3IEBACiAJc2V0IC1lOyBcCiAJbXYgLWYgJChvYmp0cmVlKS8udG1wX3ZlcnNpb24gJChvYmp0cmVlKS8udmVyc2lvbgogCi0JJChSUE0pICQoUlBNT1BUUykgLS1kZWZpbmUgIl9idWlsZGRpciAkKHNyY3RyZWUpIiAtLXRhcmdldCBcCisJJChSUE0pICQoUlBNT1BUUykgLS1kZWZpbmUgIl9idWlsZGRpciAkKG9ianRyZWUpIiAtLXRhcmdldCBcCiAJCSQoVVRTX01BQ0hJTkUpIC1iYiAkPAogCiBjbGVhbi1maWxlcyArPSAkKG9ianRyZWUpL2Jpbmtlcm5lbC5zcGVjCmRpZmYgLS1naXQgYS9zY3JpcHRzL3BhY2thZ2UvbWtzcGVjIGIvc2NyaXB0cy9wYWNrYWdlL21rc3BlYwppbmRleCAzZDkzZjhjLi40N2JkZDJmIDEwMDc1NQotLS0gYS9zY3JpcHRzL3BhY2thZ2UvbWtzcGVjCisrKyBiL3NjcmlwdHMvcGFja2FnZS9ta3NwZWMKQEAgLTcwLDcgKzcwLDcgQEAKIGVjaG8gJ21rZGlyIC1wICRSUE1fQlVJTERfUk9PVC9saWIvZmlybXdhcmUnCiBlY2hvICIlZW5kaWYiCiAKLWVjaG8gJ0lOU1RBTExfTU9EX1BBVEg9JFJQTV9CVUlMRF9ST09UIG1ha2UgJXtfc21wX21mbGFnc30gbW9kdWxlc19pbnN0YWxsJworZWNobyAnSU5TVEFMTF9NT0RfUEFUSD0kUlBNX0JVSUxEX1JPT1QgbWFrZSAle19zbXBfbWZsYWdzfSBLQlVJTERfU1JDPSBtb2R1bGVzX2luc3RhbGwnCiBlY2hvICIlaWZhcmNoIGlhNjQiCiBlY2hvICdjcCAkS0JVSUxEX0lNQUdFICRSUE1fQlVJTERfUk9PVCciL2Jvb3QvZWZpL3ZtbGludXotJEtFUk5FTFJFTEVBU0UiCiBlY2hvICdsbiAtcyAnImVmaS92bWxpbnV6LSRLRVJORUxSRUxFQVNFIiAnJFJQTV9CVUlMRF9ST09UJyIvYm9vdC8iCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwppbmRleCAyZmIyOGVmLi4wNmVjNzIyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKQEAgLTg3Myw3ICs4NzMsNyBAQAogCS8qIG90aGVyd2lzZSBzcGVjaWZ5IHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nIHJlY29yZGVkIGluIHRoZQogCSAqIGF1dGhvcmlzYXRpb24ga2V5IChhbnkgS0VZX1NQRUNfKl9LRVlSSU5HKSAqLwogCWlmIChyaW5naWQgPj0gS0VZX1NQRUNfUkVRVUVTVE9SX0tFWVJJTkcpIHsKLQkJKl9kZXN0X2tleXJpbmcgPSBya2EtPmRlc3Rfa2V5cmluZzsKKwkJKl9kZXN0X2tleXJpbmcgPSBrZXlfZ2V0KHJrYS0+ZGVzdF9rZXlyaW5nKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5jIGIvc291bmQvYXJtL2FhY2kuYwppbmRleCBkYzc4MjcyLi4xZjBmODIxIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vYWFjaS5jCisrKyBiL3NvdW5kL2FybS9hYWNpLmMKQEAgLTkzNyw2ICs5MzcsNyBAQAogCXN0cnVjdCBzbmRfYWM5NyAqYWM5NzsKIAlpbnQgcmV0OwogCisJd3JpdGVsKDAsIGFhY2ktPmJhc2UgKyBBQzk3X1BPV0VSRE9XTik7CiAJLyoKIAkgKiBBc3NlcnQgQUFDSVJFU0VUIGZvciAydXMKIAkgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggMjQ1ODVjNi4uNGUyYjkyNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTgwOCw2ICs4MDgsOCBAQAogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTAwMiwgMHgwMDAxLCBHRU5FUklDKSwKIAkvKiBMZWFkdGVrIFdpbmZhc3QgdHYgMjAwMHhwIGRlbHV4ICovCiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgMHgxMDdkLCAweDY2MDYsIEdFTkVSSUMpLAorCS8qIFBpbm5hY2xlIFBDVFYgKi8KKwlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCAweDExYmQsIDB4MDAxMiwgR0VORVJJQyksCiAJLyogVm9vZG9vIFRWIDIwMCAqLwogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTIxYSwgMHgzMDAwLCBHRU5FUklDKSwKIAkvKiBBc2tleSBDb21wdXRlciBDb3JwLiBNYWdpY1RWaWV3Jzk5ICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwppbmRleCBjODQzNWM5Li45ZmI2MDI3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKQEAgLTI5LDYgKzI5LDkgQEAKICNpbmNsdWRlICJoZGFfY29kZWMuaCIKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKIAorLyogZGVmaW5lIGJlbG93IHRvIHJlc3RyaWN0IHRoZSBzdXBwb3J0ZWQgcmF0ZXMgYW5kIGZvcm1hdHMgKi8KKy8qICNkZWZpbmUgTElNSVRFRF9SQVRFX0ZNVF9TVVBQT1JUICovCisKIHN0cnVjdCBudmhkbWlfc3BlYyB7CiAJc3RydWN0IGhkYV9tdWx0aV9vdXQgbXVsdGlvdXQ7CiAKQEAgLTYwLDYgKzYzLDIyIEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAorI2lmZGVmIExJTUlURURfUkFURV9GTVRfU1VQUE9SVAorLyogc3VwcG9ydCBvbmx5IHRoZSBzYWZlIGZvcm1hdCBhbmQgcmF0ZSAqLworI2RlZmluZSBTVVBQT1JURURfUkFURVMJCVNORFJWX1BDTV9SQVRFXzQ4MDAwCisjZGVmaW5lIFNVUFBPUlRFRF9NQVhCUFMJMTYKKyNkZWZpbmUgU1VQUE9SVEVEX0ZPUk1BVFMJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUKKyNlbHNlCisvKiBzdXBwb3J0IGFsbCByYXRlcyBhbmQgZm9ybWF0cyAqLworI2RlZmluZSBTVVBQT1JURURfUkFURVMgXAorCShTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDAgfFwKKwlTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwIHwgU05EUlZfUENNX1JBVEVfMTc2NDAwIHxcCisJIFNORFJWX1BDTV9SQVRFXzE5MjAwMCkKKyNkZWZpbmUgU1VQUE9SVEVEX01BWEJQUwkyNAorI2RlZmluZSBTVVBQT1JURURfRk9STUFUUyBcCisJKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisjZW5kaWYKKwogLyoKICAqIENvbnRyb2xzCiAgKi8KQEAgLTI1OCw5ICsyNzcsOSBAQAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSA4LAogCS5uaWQgPSBOdl9NYXN0ZXJfQ29udmVydF9uaWQsCi0JLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCi0JLm1heGJwcyA9IDE2LAotCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzID0gU1VQUE9SVEVEX1JBVEVTLAorCS5tYXhicHMgPSBTVVBQT1JURURfTUFYQlBTLAorCS5mb3JtYXRzID0gU1VQUE9SVEVEX0ZPUk1BVFMsCiAJLm9wcyA9IHsKIAkJLm9wZW4gPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9vcGVuLAogCQkuY2xvc2UgPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9jbG9zZV84Y2gsCkBAIC0yNzMsOSArMjkyLDkgQEAKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKIAkubmlkID0gTnZfTWFzdGVyX0NvbnZlcnRfbmlkLAotCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAotCS5tYXhicHMgPSAxNiwKLQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9IFNVUFBPUlRFRF9SQVRFUywKKwkubWF4YnBzID0gU1VQUE9SVEVEX01BWEJQUywKKwkuZm9ybWF0cyA9IFNVUFBPUlRFRF9GT1JNQVRTLAogCS5vcHMgPSB7CiAJCS5vcGVuID0gbnZoZG1pX2RpZ19wbGF5YmFja19wY21fb3BlbiwKIAkJLmNsb3NlID0gbnZoZG1pX2RpZ19wbGF5YmFja19wY21fY2xvc2VfMmNoLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCA0NzBmZDc0Li5jMDhjYTY2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcF9taXhlcjsJLyogY2FwdHVyZSBtaXhlciAqLwogCXVuc2lnbmVkIGludCBiZWVwX2FtcDsJLyogYmVlcCBhbXAgdmFsdWUsIHNldCB2aWEgc2V0X2JlZXBfYW1wKCkgKi8KIAotCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s1XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKKwljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbMTBdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicwogCQkJCQkJICogZG9uJ3QgZm9yZ2V0IE5VTEwKIAkJCQkJCSAqIHRlcm1pbmF0aW9uIQogCQkJCQkJICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggYTliMjY4Mi4uNjZjMDg3NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtMTU4LDYgKzE1OCw3IEBACiAJU1RBQ19EOTY1XzVTVF9OT19GUCwKIAlTVEFDX0RFTExfM1NULAogCVNUQUNfREVMTF9CSU9TLAorCVNUQUNfOTI3WF9WT0xLTk9CLAogCVNUQUNfOTI3WF9NT0RFTFMKIH07CiAKQEAgLTkwNyw2ICs5MDgsMTYgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBkZWxsXzNzdF9jb3JlX2luaXRbXSA9IHsKKwkvKiBkb24ndCBzZXQgZGVsdGEgYml0ICovCisJezB4MjQsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4N2Z9LAorCS8qIHVubXV0ZSBub2RlIDB4MWIgKi8KKwl7MHgxYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKKwkvKiBzZWxlY3Qgbm9kZSAweDAzIGFzIERBQyAqLworCXsweDBiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyN3hfY29yZV9pbml0W10gPSB7CiAJLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCQogCXsgMHgyNCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCkBAIC05MTUsNiArOTI2LDE0IEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyN3hfdm9sa25vYl9jb3JlX2luaXRbXSA9IHsKKwkvKiBkb24ndCBzZXQgZGVsdGEgYml0ICovCisJezB4MjQsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4N2Z9LAorCS8qIGVuYWJsZSBhbmFsb2cgcGMgYmVlcCBwYXRoICovCisJezB4MDEsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8yLCAxIDw8IDV9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MjA1X2NvcmVfaW5pdFtdID0gewogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwkKIAl7IDB4MjQsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4ZmZ9LApAQCAtMTk5OSw2ICsyMDE4LDcgQEAKIAlbU1RBQ19EOTY1XzVTVF9OT19GUF0gID0gZDk2NV81c3Rfbm9fZnBfcGluX2NvbmZpZ3MsCiAJW1NUQUNfREVMTF8zU1RdICA9IGRlbGxfM3N0X3Bpbl9jb25maWdzLAogCVtTVEFDX0RFTExfQklPU10gPSBOVUxMLAorCVtTVEFDXzkyN1hfVk9MS05PQl0gPSBOVUxMLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5Mjd4X21vZGVsc1tTVEFDXzkyN1hfTU9ERUxTXSA9IHsKQEAgLTIwMTAsNiArMjAzMCw3IEBACiAJW1NUQUNfRDk2NV81U1RfTk9fRlBdCT0gIjVzdGFjay1uby1mcCIsCiAJW1NUQUNfREVMTF8zU1RdCQk9ICJkZWxsLTNzdGFjayIsCiAJW1NUQUNfREVMTF9CSU9TXQk9ICJkZWxsLWJpb3MiLAorCVtTVEFDXzkyN1hfVk9MS05PQl0JPSAidm9sa25vYiIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyN3hfY2ZnX3RibFtdID0gewpAQCAtMjA0NSw2ICsyMDY2LDggQEAKIAkJCSAgICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCiAJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyNTAwLAogCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKKwkvKiB2b2x1bWUta25vYiBmaXhlcyAqLworCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTBjZiwgIkZTQyIsIFNUQUNfOTI3WF9WT0xLTk9CKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC01NjEyLDEwICs1NjM1LDE0IEBACiAJCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5Mjd4X2RtaWNfbmlkczsKIAkJc3BlYy0+bnVtX2RtaWNzID0gU1RBQzkyN1hfTlVNX0RNSUNTOwogCi0JCXNwZWMtPmluaXQgPSBkOTY1X2NvcmVfaW5pdDsKKwkJc3BlYy0+aW5pdCA9IGRlbGxfM3N0X2NvcmVfaW5pdDsKIAkJc3BlYy0+ZG11eF9uaWRzID0gc3RhYzkyN3hfZG11eF9uaWRzOwogCQlzcGVjLT5udW1fZG11eGVzID0gQVJSQVlfU0laRShzdGFjOTI3eF9kbXV4X25pZHMpOwogCQlicmVhazsKKwljYXNlIFNUQUNfOTI3WF9WT0xLTk9COgorCQlzcGVjLT5udW1fZG1pY3MgPSAwOworCQlzcGVjLT5pbml0ID0gc3RhYzkyN3hfdm9sa25vYl9jb3JlX2luaXQ7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNwZWMtPm51bV9kbWljcyA9IDA7CiAJCXNwZWMtPmluaXQgPSBzdGFjOTI3eF9jb3JlX2luaXQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2FtcC5jCmluZGV4IDM3NTY0MzAuLjZkYTIxYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2FtcC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2FtcC5jCkBAIC01MiwxMSArNTIsMTMgQEAKIAogCS8qIG9ubHkgdXNlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgZm9yIG5vdyAqLwogCi0JaWNlLT5udW1fdG90YWxfZGFjcyA9IDI7CS8qIG9ubHkgUFNET1VUMCBpcyBjb25uZWN0ZWQgKi8KKwkvKiBWVDE2MTYgNmNoIGNvZGVjIGNvbm5lY3RlZCB0byBQU0RPVVQwIHVzaW5nIHBhY2tlZCBtb2RlICovCisJaWNlLT5udW1fdG90YWxfZGFjcyA9IDY7CiAJaWNlLT5udW1fdG90YWxfYWRjcyA9IDI7CiAKLQkvKiBDaGFpbnRlY2ggQVYtNzEwIGhhcyBhbm90aGVyIGNvZGVjcywgd2hpY2ggbmVlZCBpbml0aWFsaXphdGlvbiAqLwotCS8qIGluaXRpYWxpemUgV004NzI4IGNvZGVjICovCisJLyogQ2hhaW50ZWNoIEFWLTcxMCBoYXMgYW5vdGhlciBXTTg3MjggY29kZWMgY29ubmVjdGVkIHRvIFBTRE9VVDQKKwkgICAoc2hhcmVkIHdpdGggdGhlIFNQRElGIG91dHB1dCkuIE1peGVyIGNvbnRyb2wgZm9yIHRoaXMgY29kZWMKKwkgICBpcyBub3QgeWV0IHN1cHBvcnRlZC4gKi8KIAlpZiAoaWNlLT5lZXByb20uc3VidmVuZG9yID09IFZUMTcyNF9TVUJERVZJQ0VfQVY3MTApIHsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod21faW5pdHMpOyBpICs9IDIpCiAJCQl3bV9wdXQoaWNlLCB3bV9pbml0c1tpXSwgd21faW5pdHNbaSsxXSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKaW5kZXggNzZiNzE3ZC4uMTBmYzkyYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAJICAgIChpbmIoSUNFTVQxNzI0KGljZSwgRE1BX1BBVVNFKSkgJiBETUFfUEFVU0VTKSkgewogCQkvKiBydW5uaW5nPyB3ZSBjYW5ub3QgY2hhbmdlIHRoZSByYXRlIG5vdy4uLiAqLwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY2UtPnJlZ19sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiAoKHJhdGUgPT0gaWNlLT5jdXJfcmF0ZSkgJiYgIWZvcmNlKSA/IDAgOiAtRUJVU1k7CiAJfQogCWlmICghZm9yY2UgJiYgaXNfcHJvX3JhdGVfbG9ja2VkKGljZSkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNlLT5yZWdfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL0tjb25maWcgYi9zb3VuZC9wcGMvS2NvbmZpZwppbmRleCBiZDIzMzhhLi4wNTE5YzYwIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvS2NvbmZpZworKysgYi9zb3VuZC9wcGMvS2NvbmZpZwpAQCAtMiw3ICsyLDcgQEAKIAogbWVudWNvbmZpZyBTTkRfUFBDCiAJYm9vbCAiUG93ZXJQQyBzb3VuZCBkZXZpY2VzIgotCWRlcGVuZHMgb24gUFBDNjQgfHwgUFBDMzIKKwlkZXBlbmRzIG9uIFBQQwogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHNvdW5kIGRldmljZXMgc3BlY2lmaWMgdG8gUG93ZXJQQyBhcmNoaXRlY3R1cmVzLgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggYjdjNzhhNC4uNzQ5NWNlMyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC0yNzE3LDggKzI3MTcsNiBAQAogCWludCByOwogCWludCBjcHU7CiAKLQlrdm1faW5pdF9kZWJ1ZygpOwotCiAJciA9IGt2bV9hcmNoX2luaXQob3BhcXVlKTsKIAlpZiAocikKIAkJZ290byBvdXRfZmFpbDsKQEAgLTI3ODUsNiArMjc4Myw4IEBACiAJa3ZtX3ByZWVtcHRfb3BzLnNjaGVkX2luID0ga3ZtX3NjaGVkX2luOwogCWt2bV9wcmVlbXB0X29wcy5zY2hlZF9vdXQgPSBrdm1fc2NoZWRfb3V0OwogCisJa3ZtX2luaXRfZGVidWcoKTsKKwogCXJldHVybiAwOwogCiBvdXRfZnJlZToKQEAgLTI4MDcsNyArMjgwNyw2IEBACiBvdXQ6CiAJa3ZtX2FyY2hfZXhpdCgpOwogb3V0X2ZhaWw6Ci0Ja3ZtX2V4aXRfZGVidWcoKTsKIAlyZXR1cm4gcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9pbml0KTsKQEAgLTI4MTUsNiArMjgxNCw3IEBACiB2b2lkIGt2bV9leGl0KHZvaWQpCiB7CiAJdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7CisJa3ZtX2V4aXRfZGVidWcoKTsKIAltaXNjX2RlcmVnaXN0ZXIoJmt2bV9kZXYpOwogCWttZW1fY2FjaGVfZGVzdHJveShrdm1fdmNwdV9jYWNoZSk7CiAJc3lzZGV2X3VucmVnaXN0ZXIoJmt2bV9zeXNkZXYpOwpAQCAtMjgyNCw3ICsyODI0LDYgQEAKIAlvbl9lYWNoX2NwdShoYXJkd2FyZV9kaXNhYmxlLCBOVUxMLCAxKTsKIAlrdm1fYXJjaF9oYXJkd2FyZV91bnNldHVwKCk7CiAJa3ZtX2FyY2hfZXhpdCgpOwotCWt2bV9leGl0X2RlYnVnKCk7CiAJZnJlZV9jcHVtYXNrX3ZhcihjcHVzX2hhcmR3YXJlX2VuYWJsZWQpOwogCV9fZnJlZV9wYWdlKGJhZF9wYWdlKTsKIH0K