ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCBiOThmMDFmLi4yZTQxMGY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0yMTEsNDIgKzIxMSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglTdXBwb3J0IGZvciB0aGUgTW9tZW50dW0gLyBQTUMtU2llcnJhIEphZ3VhciBBVFggZXZhbHVhdGlvbiBib2FyZAotV2hlbjoJU2VwdGVtYmVyIDIwMDYKLVdoeToJRG9lcyBubyBsb25nZXIgYnVpbGQgc2luY2UgcXVpdGUgc29tZSB0aW1lLCBhbmQgd2FzIG5ldmVyIHBvcHVsYXIsCi0JZHVlIHRvIHRoZSBwbGF0Zm9ybSBiZWluZyByZXBsYWNlZCBieSBzdWNjZXNzb3IgbW9kZWxzLiAgQXBwYXJlbnRseQotCW5vIHVzZXIgYmFzZSBsZWZ0LiAgSXQgYWxzbyBpcyBvbmUgb2YgdGhlIGxhc3QgdXNlcnMgb2YKLQlXQU5UX1BBR0VfVklSVFVBTC4KLVdobzoJUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hhdDoJU3VwcG9ydCBmb3IgdGhlIE1vbWVudHVtIE9jZWxvdCwgT2NlbG90IDMsIE9jZWxvdCBDIGFuZCBPY2Vsb3QgRwotV2hlbjoJU2VwdGVtYmVyIDIwMDYKLVdoeToJU29tZSBkbyBubyBsb25nZXIgYnVpbGQgYW5kIGFwcGFyZW50bHkgdGhlcmUgaXMgbm8gdXNlciBiYXNlIGxlZnQKLQlmb3IgdGhlc2UgcGxhdGZvcm1zLgotV2hvOglSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaGF0OglTdXBwb3J0IGZvciBNSVBTIFRlY2hub2xvZ2llcycgQWx0YXMgYW5kIFNFQUQgZXZhbHVhdGlvbiBib2FyZAotV2hlbjoJU2VwdGVtYmVyIDIwMDYKLVdoeToJU29tZSBkbyBubyBsb25nZXIgYnVpbGQgYW5kIGFwcGFyZW50bHkgdGhlcmUgaXMgbm8gdXNlciBiYXNlIGxlZnQKLQlmb3IgdGhlc2UgcGxhdGZvcm1zLiAgSGFyZHdhcmUgb3V0IG9mIHByb2R1Y3Rpb24gc2luY2Ugc2V2ZXJhbCB5ZWFycy4KLVdobzoJUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hhdDoJU3VwcG9ydCBmb3IgdGhlIElUODE3Mi1iYXNlZCBwbGF0Zm9ybXMsIElURSA4MTcyRyBhbmQgR2xvYmVzcGFuIElWUgotV2hlbjoJU2VwdGVtYmVyIDIwMDYKLVdoeToJQ29kZSBkb2VzIG5vIGxvbmdlciBidWlsZCBzaW5jZSBhdCBsZWFzdCAyLjYuMCwgIGFwcGFyZW50bHkgdGhlcmUgaXMKLQlubyB1c2VyIGJhc2UgbGVmdCBmb3IgdGhlc2UgcGxhdGZvcm1zLiAgSGFyZHdhcmUgb3V0IG9mIHByb2R1Y3Rpb24KLQlzaW5jZSBzZXZlcmFsIHllYXJzIGFuZCBoYXJkbHkgYSB0cmFjZSBvZiB0aGUgbWFudWZhY3R1cmVyIGxlZnQgb24KLQl0aGUgbmV0LgotV2hvOglSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglJbnRlcnJ1cHQgb25seSBTQV8qIGZsYWdzCiBXaGVuOglKYW51YXIgMjAwNwogV2h5OglUaGUgaW50ZXJydXB0IHJlbGF0ZWQgU0FfKiBmbGFncyBhcmUgcmVwbGFjZWQgYnkgSVJRRl8qIHRvIG1vdmUgdGhlbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CmluZGV4IDY2OWEwOWEuLjEyNmU1OWQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CkBAIC0xNiw3ICsxNiw3IEBACiAgMTUgLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmRiMDBdCiAgMTYgLT4gS1dvcmxkIExUVjg4M1JGCiAgMTcgLT4gRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtUSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmQ4MTAsMThhYzpkODAwXQotIDE4IC0+IEhhdXBwYXVnZSBOb3ZhLVQgRFZCLVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo5MDAyLDAwNzA6OTAwMV0KKyAxOCAtPiBIYXVwcGF1Z2UgTm92YS1UIERWQi1UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6OTAwMiwwMDcwOjkwMDEsMDA3MDo5MDAwXQogIDE5IC0+IENvbmV4YW50IERWQi1UIHJlZmVyZW5jZSBkZXNpZ24gICAgICAgICAgICAgICAgICAgICBbMTRmMTowMTg3XQogIDIwIC0+IFByb3ZpZGVvIFBWMjU5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTU0MDoyNTgwXQogIDIxIC0+IERWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgUGx1cyAgICAgICAgICAgICAgICAgICAgICAgICBbMThhYzpkYjEwLDE4YWM6ZGIxMV0KQEAgLTQxLDcgKzQxLDcgQEAKICA0MCAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTEwMCBEVkItVC9IeWJyaWQgICAgICAgICAgICAgICAgWzAwNzA6OTQwMCwwMDcwOjk0MDJdCiAgNDEgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjExMDAgRFZCLVQvSHlicmlkIChMb3cgUHJvZmlsZSkgIFswMDcwOjk4MDAsMDA3MDo5ODAyXQogIDQyIC0+IGRpZ2l0YWxub3cgRE5UViBMaXZlISBEVkItVCBQcm8gICAgICAgICAgICAgICAgICAgICBbMTgyMjowMDI1LDE4MjI6MDAxOV0KLSA0MyAtPiBLV29ybGQvVlN0cmVhbSBYUGVydCBEVkItVCB3aXRoIGN4MjI3MDIgICAgICAgICAgICAgWzE3ZGU6MDhhMV0KKyA0MyAtPiBLV29ybGQvVlN0cmVhbSBYUGVydCBEVkItVCB3aXRoIGN4MjI3MDIgICAgICAgICAgICAgWzE3ZGU6MDhhMSwxMmFiOjIzMDBdCiAgNDQgLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVCBEdWFsIERpZ2l0YWwgICAgICAgICAgICAgICAgIFsxOGFjOmRiNTAsMThhYzpkYjU0XQogIDQ1IC0+IEtXb3JsZCBIYXJkd2FyZU1wZWdUViBYUGVydCAgICAgICAgICAgICAgICAgICAgICAgICBbMTdkZTowODQwXQogIDQ2IC0+IERWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgSHlicmlkICAgICAgICAgICAgICAgICAgICAgICBbMThhYzpkYjQwLDE4YWM6ZGI0NF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCA5NGNmNjk1Li42ZmI4MmFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC05NywzICs5Nyw0IEBACiAgOTYgLT4gTWVkaW9uIE1kODgwMCBRdWFkcm8gICAgICAgICAgICAgICAgICAgICBbMTZiZTowMDA3LDE2YmU6MDAwOF0KICA5NyAtPiBMaWZlVmlldyBGbHlEVkItUyAvQWNvcnAgVFYxMzREUyAgICAgICAgIFs1MTY4OjAzMDAsNGU0MjowMzAwXQogIDk4IC0+IFByb3RldXMgUHJvIDIzMDkgICAgICAgICAgICAgICAgICAgICAgICAgWzA5MTk6MjAwM10KKyA5OSAtPiBBVmVyTWVkaWEgVFYgSHlicmlkIEExNkFSICAgICAgICAgICAgICAgIFsxNDYxOjJjMDBdCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDI4Y2Q3MGMuLjFjNjIyM2QgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNDQsMTEgKzE0NCw5IEBACiBTOglNYWludGFpbmVkCiAKIDgyNTAvMTY/NTAgKEFORCBDTE9ORSBVQVJUUykgU0VSSUFMIERSSVZFUgotUDoJUnVzc2VsbCBLaW5nCi1NOglybWsrc2VyaWFsQGFybS5saW51eC5vcmcudWsKIEw6CWxpbnV4LXNlcmlhbEB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9zZXJpYWwuc291cmNlZm9yZ2UubmV0Ci1TOglNYWludGFpbmVkCitTOglPcnBoYW4KIAogODM5MCBORVRXT1JLIERSSVZFUlMgW1dEODB4My9TTUMtRUxJVEUsIFNNQy1VTFRSQSwgTkUyMDAwLCAzQzUwMywgZXRjLl0KIFA6CVBhdWwgR29ydG1ha2VyCkBAIC0xOTg2LDkgKzE5ODQsNyBAQAogUzoJTWFpbnRhaW5lZAogCiBNVUxUSU1FRElBIENBUkQgKE1NQykgU1VCU1lTVEVNCi1QOglSdXNzZWxsIEtpbmcKLU06CXJtayttbWNAYXJtLmxpbnV4Lm9yZy51awotUzoJTWFpbnRhaW5lZAorUzoJT3JwaGFuCiAKIE1VTFRJU09VTkQgU09VTkQgRFJJVkVSCiBQOglBbmRyZXcgVmVsaWF0aApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCA4N2NlZTM0Li5iZmFiMDU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMjAzLDM5ICsyMDMsNiBAQAogCSAgPGh0dHA6Ly93d3cubWFydmVsbC5jb20vPi4gIFNheSBZIGhlcmUgaWYgeW91IHdpc2ggdG8gYnVpbGQgYQogCSAga2VybmVsIGZvciB0aGlzIHBsYXRmb3JtLgogCi1jb25maWcgTUlQU19JVlIKLQlib29sICJHbG9iZXNwYW4gSVZSIGJvYXJkIgotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgSFdfSEFTX1BDSQotCXNlbGVjdCBJVEVfQk9BUkRfR0VOCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX05FVkFEQQotCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0JaGVscAotCSAgVGhpcyBpcyBhbiBldmFsdWF0aW9uIGJvYXJkIGJ1aWx0IGJ5IEdsb2Jlc3BhbiB0byBzaG93Y2FzZSB0aGlyCi0JICBpVlIgKEludGVybmV0IFZpZGVvIFJlY29yZGVyKSBkZXNpZ24uIEl0IHV0aWxpemVzIGEgUUVEIFJNNTIzMQotCSAgUjUwMDAgTUlQUyBjb3JlLiBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBvdXQgdGhlaXIgd2Vic2l0ZQotCSAgbG9jYXRlZCBhdCA8aHR0cDovL3d3dy5nbG9iZXNwYW4ubmV0Lz4uIFNheSBZIGhlcmUgaWYgeW91IHdpc2ggdG8KLQkgIGJ1aWxkIGEga2VybmVsIGZvciB0aGlzIHBsYXRmb3JtLgotCi1jb25maWcgTUlQU19JVEU4MTcyCi0JYm9vbCAiSVRFIDgxNzJHIGJvYXJkIgotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgSFdfSEFTX1BDSQotCXNlbGVjdCBJVEVfQk9BUkRfR0VOCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX1I1NDMyCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX05FVkFEQQotCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0JaGVscAotCSAgVGhzIGlzIGFuIGV2YWx1YXRpb24gYm9hcmQgbWFkZSBieSBJVEUgPGh0dHA6Ly93d3cuaXRlLmNvbS50dy8+Ci0JICB3aXRoIEFUWCBmb3JtIGZhY3RvciB0aGF0IHV0aWxpemVzIGEgTUlQUyBSNTAwMCB0byB3b3JrIHdpdGggaXRzCi0JICBJVEU4MTcyRyBjb21wYW5pb24gaW50ZXJuZXQgYXBwbGlhbmNlIGNoaXAuIFRoZSBNSVBTIGNvcmUgY2FuIGJlCi0JICBlaXRoZXIgYSBORUMgVnI1NDMyIG9yIFFFRCBSTTUyMzEuIFNheSBZIGhlcmUgaWYgeW91IHdpc2ggdG8gYnVpbGQKLQkgIGEga2VybmVsIGZvciB0aGlzIHBsYXRmb3JtLgotCiBjb25maWcgTUFDSF9KQVpaCiAJYm9vbCAiSmF6eiBmYW1pbHkgb2YgbWFjaGluZXMiCiAJc2VsZWN0IEFSQwpAQCAtODA0LDcgKzc3MSw2IEBACiBzb3VyY2UgImFyY2gvbWlwcy9kZGI1eHh4L0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2phenovS2NvbmZpZyIKLXNvdXJjZSAiYXJjaC9taXBzL2l0ZS1ib2FyZHMvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2xhc2F0L0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9tb21lbnR1bS9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvcG1jLXNpZXJyYS9LY29uZmlnIgpAQCAtODM3LDYgKzgwMywxMCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfVElNRQorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIFNDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUgogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTk2NCw5ICs5MzQsNiBAQAogY29uZmlnIFBDSV9NQVJWRUxMCiAJYm9vbAogCi1jb25maWcgSVRFX0JPQVJEX0dFTgotCWJvb2wKLQogY29uZmlnIFNPQ19BVTEwMDAKIAlib29sCiAJc2VsZWN0IFNPQ19BVTFYMDAKQEAgLTEwNTAsMTYgKzEwMTcsNiBAQAogCWRlcGVuZHMgb24gTUlQU19QQjE1MDAgfHwgTUlQU19QQjExMDAgfHwgTUlQU19QQjEwMDAKIAlkZWZhdWx0IG4KIAotY29uZmlnIElUODE3Ml9DSVIKLQlib29sCi0JZGVwZW5kcyBvbiBNSVBTX0lURTgxNzIgfHwgTUlQU19JVlIKLQlkZWZhdWx0IHkKLQotY29uZmlnIElUODcxMgotCWJvb2wKLQlkZXBlbmRzIG9uIE1JUFNfSVRFODE3MgotCWRlZmF1bHQgeQotCiBjb25maWcgQk9PVF9FTEYzMgogCWJvb2wKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IGU1MjE4MjYuLjIxMjQzNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTI4NywxOSArMjg3LDYgQEAKIGxvYWQtJChDT05GSUdfV1JfUFBNQykJCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAogCiAjCi0jIEdsb2Jlc3BhbiBJVlIgZXZhbCBib2FyZCB3aXRoIFFFRCA1MjMxIENQVQotIwotY29yZS0kKENPTkZJR19JVEVfQk9BUkRfR0VOKQkrPSBhcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljLwotY29yZS0kKENPTkZJR19NSVBTX0lWUikJCSs9IGFyY2gvbWlwcy9pdGUtYm9hcmRzL2l2ci8KLWxvYWQtJChDT05GSUdfTUlQU19JVlIpCQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLQotIwotIyBJVEUgODE3MiBldmFsIGJvYXJkIHdpdGggUUVEIDUyMzEgQ1BVCi0jCi1jb3JlLSQoQ09ORklHX01JUFNfSVRFODE3MikJKz0gYXJjaC9taXBzL2l0ZS1ib2FyZHMvcWVkLTRuLXMwMWIvCi1sb2FkLSQoQ09ORklHX01JUFNfSVRFODE3MikJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKICMgRm9yIGFsbCBNSVBTLCBJbmMuIGV2YWwgYm9hcmRzCiAjCiBjb3JlLSQoQ09ORklHX01JUFNfQk9BUkRTX0dFTikJKz0gYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCmluZGV4IGJlOTAxZGYuLmZlMTM4N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjAxIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOAorIyBUdWUgT2N0ICAzIDExOjU3OjUzIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTY3LDI3ICsxNjcsMjggQEAKIENPTkZJR19TWVNWSVBDPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19SRUxBWT15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMjA1LDYgKzIwNiw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTIzMSw3ICsyMzMsNiBAQAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CiAjCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCiAjCiAjIFBDSSBIb3RwbHVnIFN1cHBvcnQKQEAgLTI1OCw5ICsyNTksMTAgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT1tCiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQpAQCAtMjY5LDIyICsyNzEsMzcgQEAKICMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorQ09ORklHX0lQVjZfUk9VVEVfSU5GTz15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JUFY2X01JUDY9eQorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TVUJUUkVFUz15CitDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eQogQ09ORklHX05FVFdPUktfU0VDTUFSSz15CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCkBAIC0zMDQsMTQgKzMyMSwxMyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorQ09ORklHX1ZMQU5fODAyMVE9bQogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAogIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zMjcsMTMgKzM0Myw4IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM0NCw4ICszNTUsNiBAQAogIwogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTM4Nyw4ICszOTYsOSBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz1tCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIAogIwpAQCAtNDEwLDEyICs0MjAsMTMgQEAKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CiAKICMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIyBTQ1NJIFRyYW5zcG9ydHMKICMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KIENPTkZJR19TQ1NJX1NBU19BVFRSUz1tCisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTQyMywxMCArNDM0LDE0IEBACiBDT05GSUdfSVNDU0lfVENQPW0KIENPTkZJR19TQ1NJX0RFQ05DUj15CiAjIENPTkZJR19TQ1NJX0RFQ1NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCiAjCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CkBAIC00NTYsMTggKzQ3MSw3IEBACiAjCiAjIFBIWSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1BIWUxJQj1tCi0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX01BUlZFTExfUEhZPW0KLUNPTkZJR19EQVZJQ09NX1BIWT1tCi1DT05GSUdfUVNFTUlfUEhZPW0KLUNPTkZJR19MWFRfUEhZPW0KLUNPTkZJR19DSUNBREFfUEhZPW0KLUNPTkZJR19WSVRFU1NFX1BIWT1tCi1DT05GSUdfU01TQ19QSFk9bQorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTcxMiw3ICs3MTYsMTIgQEAKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldApAQCAtNzQ3LDExICs3NTYsMTMgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9eQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTc2OSw3ICs3ODAsNyBAQAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogQ09ORklHX1VGU19GUz15Ci0jIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAorQ09ORklHX1VGU19GU19XUklURT15CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC03NzcsMjQgKzc4OCwyNSBAQAogIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WM19BQ0w9eQogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTgzMiw0NCArODQ0LDI5IEBACiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCi0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19VTkNBQ0hFRCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwogIwotQ09ORklHX0tFWVM9eQotQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogCiAjCiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KIENPTkZJR19DUllQVE9fSE1BQz15CiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19NRDQ9bQpAQCAtODc5LDkgKzg3NiwxMiBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz1tCiBDT05GSUdfQ1JZUFRPX0RFUz1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KQEAgLTkwMyw3ICs5MDMsNyBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzE2PW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXQ4MTcyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2l0ODE3Ml9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZDIwZmIuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXQ4MTcyX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDk2NCArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MTEgMjAwNgotIwotQ09ORklHX01JUFM9eQotCi0jCi0jIE1hY2hpbmUgc2VsZWN0aW9uCi0jCi0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAotQ09ORklHX01JUFNfSVRFODE3Mj15Ci0jIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAotIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfU0VBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX09DRUxPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX09DRUxPVF8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fT0NFTE9UX0MgaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RRU1VIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9QVFNXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JVDgxNzJfUkVWQyBpcyBub3Qgc2V0Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0RNQV9OT05DT0hFUkVOVD15Ci1DT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15Ci0jIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19JVEVfQk9BUkRfR0VOPXkKLUNPTkZJR19JVDgxNzJfQ0lSPXkKLUNPTkZJR19JVDg3MTI9eQotQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQotCi0jCi0jIENQVSBzZWxlY3Rpb24KLSMKLSMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAotQ09ORklHX0NQVV9ORVZBREE9eQotIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAotQ09ORklHX1NZU19IQVNfQ1BVX1I1NDMyPXkKLUNPTkZJR19TWVNfSEFTX0NQVV9ORVZBREE9eQotQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQotQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQotQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQotQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQotCi0jCi0jIEtlcm5lbCB0eXBlCi0jCi1DT05GSUdfMzJCSVQ9eQotIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1BBR0VfU0laRV80S0I9eQotIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfSEFTX0xMU0M9eQotQ09ORklHX0NQVV9IQVNfU1lOQz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMjggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15Ci0jIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQotQ09ORklHX0haPTEwMDAKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19SRUxBWT15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQotIwotQ09ORklHX0hXX0hBU19QQ0k9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIwotCi0jCi0jIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBRF9TSUdOQUxTPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotIyBDT05GSUdfTVREX0JMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHg4MDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MjAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCi0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCi1DT05GSUdfSURFPXkKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfUkFJRF9BVFRSUz1tCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfUEhZTElCPW0KLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci1DT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVFJPTklYX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lUODE3Ml9TQ1IwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lUODE3Ml9TQ1IxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lURV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cwotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKLSMgQ09ORklHX1NORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLUNPTkZJR19TT1VORF9QUklNRT15Ci1DT05GSUdfU09VTkRfSVQ4MTcyPXkKLSMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKLSMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlVTRV9GUz1tCi0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi1DT05GSUdfS0VZUz15Ci1DT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PW0KLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMTY9bQotQ09ORklHX0NSQzMyPW0KLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19QTElTVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pdnJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXZyX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk4MzFkMC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pdnJfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOTIwICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgVGh1IEp1bCAgNiAxMDowNDoxMiAyMDA2Ci0jCi1DT05GSUdfTUlQUz15Ci0KLSMKLSMgTWFjaGluZSBzZWxlY3Rpb24KLSMKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19JVlI9eQotIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19TRUFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fT0NFTE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fT0NFTE9UXzMgaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX09DRUxPVF9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAotIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FFTVUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1BUU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKLUNPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKLSMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfTElUVExFX0VORElBTj15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX0lURV9CT0FSRF9HRU49eQotQ09ORklHX0lUODE3Ml9DSVI9eQotQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQotCi0jCi0jIENQVSBzZWxlY3Rpb24KLSMKLSMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAotQ09ORklHX0NQVV9ORVZBREE9eQotIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAotQ09ORklHX1NZU19IQVNfQ1BVX05FVkFEQT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15Ci1DT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15Ci1DT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15Ci1DT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15Ci0KLSMKLSMgS2VybmVsIHR5cGUKLSMKLUNPTkZJR18zMkJJVD15Ci0jIENPTkZJR182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9TSVpFXzRLQj15Ci0jIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKLSMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfTExTQz15Ci1DT05GSUdfQ1BVX0hBU19TWU5DPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKLSMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAotQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1JFTEFZPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQotIwotQ09ORklHX0hXX0hBU19QQ0k9eQotQ09ORklHX1BDST15Ci1DT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX1RSQURfU0lHTkFMUz15Ci0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotQ09ORklHX0lERV9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfSURFUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1JBSURfQVRUUlM9bQotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19QSFlMSUI9bQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci1DT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUVRST05JWF9LRVlCT0FSRD15Ci1DT05GSUdfSVQ4MTcyX1NDUjA9eQotQ09ORklHX0lUODE3Ml9TQ1IxPXkKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDPXkKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIwotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCi0jCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotQ09ORklHX0ZVU0VfRlM9bQotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi1DT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX0NST1NTQ09NUElMRT15Ci1DT05GSUdfQ01ETElORT0iIgotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLUNPTkZJR19LRVlTPXkKLUNPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9bQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMxNj1tCi1DT05GSUdfQ1JDMzI9bQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1BMSVNUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvYm9vdC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9kZWMvYm9vdC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlYTQxNi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGVjL2Jvb3QvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgREVDc3RhdGlvbiBmYW1pbHkgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAotIwotCi1uZXRib290OiBhbGwKLQkkKExEKSAtTiAtRyAwIC1UIGxkLmVjb2ZmIC4uLy4uL2Jvb3QvekltYWdlIFwKLQkJZGVjX2Jvb3QubyByYW1kaXNrLmltZyAtbyBuYkltYWdlCi0KLW9iai15CSA6PSBkZWNzdGF0aW9uLm8KLQotY2xlYW46Ci0Jcm0gLWYgbmJJbWFnZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9ib290L2RlY3N0YXRpb24uYyBiL2FyY2gvbWlwcy9kZWMvYm9vdC9kZWNzdGF0aW9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYjhiYWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2RlYy9ib290L2RlY3N0YXRpb24uYworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBhcmNoL21pcHMvZGVjL2RlY3N0YXRpb24uYwotICovCi0jaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+Ci0KLSNkZWZpbmUgUkVMT0MKLSNkZWZpbmUgSU5JVFJECi0jZGVmaW5lIERFQlVHX0JPT1QKLQotLyoKLSAqIE1hZ2ljIG51bWJlciBpbmRpY2F0aW5nIFJFWCBQUk9NIGF2YWlsYWJsZSBvbiBERUNTVEFUSU9OLgotICovCi0jZGVmaW5lCVJFWF9QUk9NX01BR0lDCQkweDMwNDY0MzU0Ci0KLSNkZWZpbmUgUkVYX1BST01fQ0xFQVJDQUNIRQkweDdjLzQKLSNkZWZpbmUgUkVYX1BST01fUFJJTlRGCQkweDMwLzQKLQotI2RlZmluZSBWRUNfUkVTRVQJCTB4QkZDMDAwMDAJCS8qIFByb20gYmFzZSBhZGRyZXNzICovCi0jZGVmaW5lCVBNQVhfUFJPTV9FTlRSWSh4KQkoVkVDX1JFU0VUKygoeCkqOCkpCS8qIFByb20ganVtcCB0YWJsZSAqLwotI2RlZmluZQlQTUFYX1BST01fUFJJTlRGCVBNQVhfUFJPTV9FTlRSWSgxNykKLQotI2RlZmluZSBQQVJBTQkoa19zdGFydCArIDB4MjAwMCkKLQotI2RlZmluZSBMT0FERVJfVFlQRSAoKih1bnNpZ25lZCBjaGFyICopIChQQVJBTSsweDIxMCkpCi0jZGVmaW5lIElOSVRSRF9TVEFSVCAoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDIxOCkpCi0jZGVmaW5lIElOSVRSRF9TSVpFICgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MjFjKSkKLQotZXh0ZXJuIGludCBfZnRleHQ7CQkJLyogYmVnaW4gYW5kIGVuZCBvZiBrZXJuZWwgaW1hZ2UgKi8KLWV4dGVybiB2b2lkIGtlcm5lbF9lbnRyeShpbnQsIGNoYXIgKiosIHVuc2lnbmVkIGxvbmcsIGludCAqKTsKLQotdm9pZCAqIG1lbWNweSh2b2lkICogZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JdW5zaWduZWQgbG9uZyAqdG1wID0gKHVuc2lnbmVkIGxvbmcgKikgZGVzdCwgKnMgPSAodW5zaWduZWQgbG9uZyAqKSBzcmM7Ci0KLQljb3VudCA+Pj0gMjsKLQl3aGlsZSAoY291bnQtLSkKLQkJKnRtcCsrID0gKnMrKzsKLQotCXJldHVybiBkZXN0OwotfQotCi12b2lkIGRlY19lbnRyeShpbnQgYXJnYywgY2hhciAqKmFyZ3YsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgbWFnaWMsIGludCAqcHJvbV92ZWMpCi17Ci0Jdm9pZCAoKnJleF9jbGVhcl9jYWNoZSkodm9pZCk7Ci0JaW50ICgqcHJvbV9wcmludGYpKGNoYXIgKiwgLi4uKTsKLQl1bnNpZ25lZCBsb25nIGtfc3RhcnQsIGxlbjsKLQotCS8qCi0JICogVGhlIERTNTEwMCBsZWF2ZXMgY3B1IHdpdGggQkVWIGVuYWJsZWQsIGNsZWFyIGl0LgotCSAqLwotCWFzbSgJImx1aVx0JDgsMHgzMDAwXG5cdCIKLQkJIm10YzBcdCQ4LCQxMlxuXHQiCi0JCSIuc2VjdGlvblx0LnNkYXRhXG5cdCIKLQkJIi5zZWN0aW9uXHQuc2Jzc1xuXHQiCi0JCSIuc2VjdGlvblx0LnRleHQiCi0JCTogOiA6ICIkOCIpOwotCi0jaWZkZWYgREVCVUdfQk9PVAotCWlmIChtYWdpYyA9PSBSRVhfUFJPTV9NQUdJQykgewotCXByb21fcHJpbnRmID0gKGludCAoKikoY2hhciAqLCAuLi4pKSAqKHByb21fdmVjICsgUkVYX1BST01fUFJJTlRGKTsKLQl9IGVsc2UgewotCQlwcm9tX3ByaW50ZiA9IChpbnQgKCopKGNoYXIgKiwgLi4uKSkgUE1BWF9QUk9NX1BSSU5URjsKLQl9Ci0JcHJvbV9wcmludGYoIkxhdW5jaGluZyBrZXJuZWwuLi5cbiIpOwotI2VuZGlmCi0KLQlrX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpICgma2VybmVsX2VudHJ5KSAmIDB4ZmZmZjAwMDA7Ci0KLSNpZmRlZiBSRUxPQwotCS8qCi0JICogTm93IGNvcHkga2VybmVsIGltYWdlIHRvIGl0cyBkZXN0aW5hdGlvbi4KLQkgKi8KLQlsZW4gPSAoKHVuc2lnbmVkIGxvbmcpICgmX2VuZCkgLSBrX3N0YXJ0KTsKLQltZW1jcHkoKHZvaWQgKilrX3N0YXJ0LCAmX2Z0ZXh0LCBsZW4pOwotI2VuZGlmCi0KLQlpZiAobWFnaWMgPT0gUkVYX1BST01fTUFHSUMpIHsKLQkJcmV4X2NsZWFyX2NhY2hlID0gKHZvaWQgKCopKHZvaWQpKSAqIChwcm9tX3ZlYyArIFJFWF9QUk9NX0NMRUFSQ0FDSEUpOwotCQlyZXhfY2xlYXJfY2FjaGUoKTsKLQl9Ci0KLQlrZXJuZWxfZW50cnkoYXJnYywgYXJndiwgbWFnaWMsIHByb21fdmVjKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvYm9vdC9sZC5lY29mZiBiL2FyY2gvbWlwcy9kZWMvYm9vdC9sZC5lY29mZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFhNjMzZC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGVjL2Jvb3QvbGQuZWNvZmYKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1PVVRQVVRfRk9STUFUKCJlY29mZi1saXR0bGVtaXBzIikKLU9VVFBVVF9BUkNIKG1pcHMpCi1FTlRSWShkZWNfZW50cnkpCi1TRUNUSU9OUwotewotICAuID0gMHg4MDIwMDAwMDsKLQotICAudGV4dCA6Ci0gIHsKLSAgICBfZnRleHQgPSAuOwotICAgICooLnRleHQpCi0gICAgKiguZml4dXApCi0gIH0KLSAgLnJkYXRhIDoKLSAgewotICAgICooLnJvZGF0YSAucm9kYXRhLiogLnJkYXRhKQotICB9Ci0gIC5kYXRhIDoKLSAgewotICAgIC4gPSBBTElHTigweDEwMDApOwotICAgIHJhbWRpc2suaW1nICguZGF0YSkKLSAgICAqKC5kYXRhKQotICB9Ci0gIC5zZGF0YSA6Ci0gIHsKLSAgICAqKC5zZGF0YSkKLSAgfQotICBfZ3AgPSAuOwotICAuc2JzcyA6Ci0gIHsKLSAgICAqKC5zYnNzKQotICAgICooLnNjb21tb24pCi0gIH0KLSAgLmJzcyA6Ci0gIHsKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICB9Ci0gIC9ESVNDQVJELyA6IHsKLSAgICAqKC5yZWdpbmZvIC5tZGVidWcgLm5vdGUpCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvdGltZS5jIGIvYXJjaC9taXBzL2RlYy90aW1lLmMKaW5kZXggNTcyOTQ3NC4uNGNmMGMwNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy90aW1lLmMKKysrIGIvYXJjaC9taXBzL2RlYy90aW1lLmMKQEAgLTE4NCw4ICsxODQsNiBAQAogCUNNT1NfV1JJVEUoUlRDX1JFRl9DTENLXzMyS0haIHwgKDE2IC0gX19mZnMoSFopKSwgUlRDX1JFR19BKTsKIH0KIAotRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOwotCiB2b2lkIF9faW5pdCBwbGF0X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKIHsKIAlzZXR1cF9pcnEoZGVjX2ludGVycnVwdFtERUNfSVJRX1JUQ10sIGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9LY29uZmlnIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkNTlhZC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1jb25maWcgSVQ4MTcyX1JFVkMKLQlib29sICJTdXBwb3J0IGZvciBvbGRlciBJVDgxNzIgKFJldiBDKSIKLQlkZXBlbmRzIG9uIE1JUFNfSVRFODE3MgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgb2xkZXIsIFJldmlzaW9uIEMgdmVyc2lvbiBvZiB0aGUgSW50ZWdyYXRlZAotCSAgVGVjaG5vbG9neSBFeHByZXNzLCBJbmMuIElURTgxNzIgU0JDLiAgVmVuZG9yIHBhZ2UgYXQKLQkgIDxodHRwOi8vd3d3Lml0ZS5jb20udHcvaWEvYnJpZWZfaXQ4MTcyYnNwLmh0bT47IHBpY3R1cmUgb2YgdGhlCi0JICBib2FyZCBhdCA8aHR0cDovL3d3dy5tdmlzdGEuY29tL3BhcnRuZXJzL3NlbWljb25kdWN0b3IvaXRlLmh0bWw+LgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNDMxNTMuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMKLSMgIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotIyAgQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0jICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBJVEUgODE3MiAocWVkLTRuLXMwMWIpIGJvYXJkLCBnZW5lcmljIGZpbGVzLgotIwotCi1vYmoteQkJCSs9IGl0ODE3Ml9zZXR1cC5vIGlycS5vIHBtb25fcHJvbS5vIFwKLQkJCSAgIHRpbWUubyBscGMubyBwdXRzLm8gcmVzZXQubwotCi1vYmotJChDT05GSUdfSVQ4MTcyX0NJUikrPSBpdDgxNzJfY2lyLm8KLW9iai0kKENPTkZJR19LR0RCKQkrPSBkYmdfaW8ubwotCi1FWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2RiZ19pby5jIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9kYmdfaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU5Y2Q4YS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2RiZ19pby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLQotCi0jaWZkZWYgQ09ORklHX0tHREIKLQotLyogLS0tIENPTkZJRyAtLS0gKi8KLQotLyogd2UgbmVlZCB1aW50MzIgdWludDggKi8KLS8qICNpbmNsdWRlICJ0eXBlcy5oIiAqLwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyOwotCi0vKiAtLS0gRU5EIE9GIENPTkZJRyAtLS0gKi8KLQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzI0MDAgICAgICAgICAgICAgMjQwMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzQ4MDAgICAgICAgICAgICAgNDgwMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzk2MDAgICAgICAgICAgICAgOTYwMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzE5MjAwICAgICAgICAgICAgMTkyMDAKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfQkFVRF8zODQwMCAgICAgICAgICAgIDM4NDAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfNTc2MDAgICAgICAgICAgICA1NzYwMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzExNTIwMCAgICAgICAgICAgMTE1MjAwCi0KLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUEFSSVRZX05PTkUgICAgICAgICAgIDAKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUEFSSVRZX09ERCAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUEFSSVRZX0VWRU4gICAgICAgICAgIDB4MTgKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUEFSSVRZX01BUksgICAgICAgICAgIDB4MjgKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUEFSSVRZX1NQQUNFICAgICAgICAgIDB4MzgKLQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9EQVRBXzVCSVQgICAgICAgICAgICAgMHgwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0RBVEFfNkJJVCAgICAgICAgICAgICAweDEKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfREFUQV83QklUICAgICAgICAgICAgIDB4MgotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9EQVRBXzhCSVQgICAgICAgICAgICAgMHgzCi0KLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfU1RPUF8xQklUICAgICAgICAgICAgIDB4MAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9TVE9QXzJCSVQgICAgICAgICAgICAgMHg0Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qID09PSBDT05GSUcgPT09ICovCi0KLS8qIFtzdGV2ZWxdIHdlIHVzZSB0aGUgSVQ4NzEyIHNlcmlhbCBwb3J0IGZvciBrZ2RiICovCi0jZGVmaW5lCURFQlVHX0JBU0UgIDB4QjQwMDAzRjgJLyogODcxMiBzZXJpYWwgcG9ydCAxIGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBNQVhfQkFVRCAgICAxMTUyMDAKLQotLyogPT09IEVORCBPRiBDT05GSUcgPT09ICovCi0KLS8qIHJlZ2lzdGVyIG9mZnNldCAqLwotI2RlZmluZSAgICAgICAgIE9GU19SQ1ZfQlVGRkVSICAgICAgICAgIDAKLSNkZWZpbmUgICAgICAgICBPRlNfVFJBTlNfSE9MRCAgICAgICAgICAwCi0jZGVmaW5lICAgICAgICAgT0ZTX1NFTkRfQlVGRkVSICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIE9GU19JTlRSX0VOQUJMRSAgICAgICAgIDEKLSNkZWZpbmUgICAgICAgICBPRlNfSU5UUl9JRCAgICAgICAgICAgICAyCi0jZGVmaW5lICAgICAgICAgT0ZTX0RBVEFfRk9STUFUICAgICAgICAgMwotI2RlZmluZSAgICAgICAgIE9GU19MSU5FX0NPTlRST0wgICAgICAgIDMKLSNkZWZpbmUgICAgICAgICBPRlNfTU9ERU1fQ09OVFJPTCAgICAgICA0Ci0jZGVmaW5lICAgICAgICAgT0ZTX1JTMjMyX09VVFBVVCAgICAgICAgNAotI2RlZmluZSAgICAgICAgIE9GU19MSU5FX1NUQVRVUyAgICAgICAgIDUKLSNkZWZpbmUgICAgICAgICBPRlNfTU9ERU1fU1RBVFVTICAgICAgICA2Ci0jZGVmaW5lICAgICAgICAgT0ZTX1JTMjMyX0lOUFVUICAgICAgICAgNgotI2RlZmluZSAgICAgICAgIE9GU19TQ1JBVENIX1BBRCAgICAgICAgIDcKLQotI2RlZmluZSAgICAgICAgIE9GU19ESVZJU09SX0xTQiAgICAgICAgIDAKLSNkZWZpbmUgICAgICAgICBPRlNfRElWSVNPUl9NU0IgICAgICAgICAxCi0KLQotLyogbWVtb3J5LW1hcHBlZCByZWFkL3dyaXRlIG9mIHRoZSBwb3J0ICovCi0jZGVmaW5lIFVBUlQxNjU1MF9SRUFEKHkpICAgICgqKCh2b2xhdGlsZSB1aW50OCopKERFQlVHX0JBU0UgKyB5KSkpCi0jZGVmaW5lIFVBUlQxNjU1MF9XUklURSh5LHopICgoKigodm9sYXRpbGUgdWludDgqKShERUJVR19CQVNFICsgeSkpKSA9IHopCi0KLXZvaWQgZGVidWdJbml0KHVpbnQzMiBiYXVkLCB1aW50OCBkYXRhLCB1aW50OCBwYXJpdHksIHVpbnQ4IHN0b3ApCi17Ci0JLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JVUFSVDE2NTUwX1dSSVRFKE9GU19JTlRSX0VOQUJMRSwgMCk7Ci0KLQkvKiBzZXQgdXAgYmF1ZCByYXRlICovCi0JewotCQl1aW50MzIgZGl2aXNvcjsKLQotCQkvKiBzZXQgRElBQiBiaXQgKi8KLQkJVUFSVDE2NTUwX1dSSVRFKE9GU19MSU5FX0NPTlRST0wsIDB4ODApOwotCi0JCS8qIHNldCBkaXZpc29yICovCi0JCWRpdmlzb3IgPSBNQVhfQkFVRCAvIGJhdWQ7Ci0JCVVBUlQxNjU1MF9XUklURShPRlNfRElWSVNPUl9MU0IsIGRpdmlzb3IgJiAweGZmKTsKLQkJVUFSVDE2NTUwX1dSSVRFKE9GU19ESVZJU09SX01TQiwgKGRpdmlzb3IgJiAweGZmMDApID4+IDgpOwotCi0JCS8qIGNsZWFyIERJQUIgYml0ICovCi0JCVVBUlQxNjU1MF9XUklURShPRlNfTElORV9DT05UUk9MLCAweDApOwotCX0KLQotCS8qIHNldCBkYXRhIGZvcm1hdCAqLwotCVVBUlQxNjU1MF9XUklURShPRlNfREFUQV9GT1JNQVQsIGRhdGEgfCBwYXJpdHkgfCBzdG9wKTsKLX0KLQotc3RhdGljIGludCByZW1vdGVEZWJ1Z0luaXRpYWxpemVkID0gMDsKLQotdWludDggZ2V0RGVidWdDaGFyKHZvaWQpCi17Ci0JaWYgKCFyZW1vdGVEZWJ1Z0luaXRpYWxpemVkKSB7Ci0JCXJlbW90ZURlYnVnSW5pdGlhbGl6ZWQgPSAxOwotCQlkZWJ1Z0luaXQoVUFSVDE2NTUwX0JBVURfMTE1MjAwLAotCQkJICBVQVJUMTY1NTBfREFUQV84QklULAotCQkJICBVQVJUMTY1NTBfUEFSSVRZX05PTkUsIFVBUlQxNjU1MF9TVE9QXzFCSVQpOwotCX0KLQotCXdoaWxlICgoVUFSVDE2NTUwX1JFQUQoT0ZTX0xJTkVfU1RBVFVTKSAmIDB4MSkgPT0gMCk7Ci0JcmV0dXJuIFVBUlQxNjU1MF9SRUFEKE9GU19SQ1ZfQlVGRkVSKTsKLX0KLQotCi1pbnQgcHV0RGVidWdDaGFyKHVpbnQ4IGJ5dGUpCi17Ci0JaWYgKCFyZW1vdGVEZWJ1Z0luaXRpYWxpemVkKSB7Ci0JCXJlbW90ZURlYnVnSW5pdGlhbGl6ZWQgPSAxOwotCQlkZWJ1Z0luaXQoVUFSVDE2NTUwX0JBVURfMTE1MjAwLAotCQkJICBVQVJUMTY1NTBfREFUQV84QklULAotCQkJICBVQVJUMTY1NTBfUEFSSVRZX05PTkUsIFVBUlQxNjU1MF9TVE9QXzFCSVQpOwotCX0KLQotCXdoaWxlICgoVUFSVDE2NTUwX1JFQUQoT0ZTX0xJTkVfU1RBVFVTKSAmIDB4MjApID09IDApOwotCVVBUlQxNjU1MF9XUklURShPRlNfU0VORF9CVUZGRVIsIGJ5dGUpOwotCXJldHVybiAxOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXJxLmMgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2lycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjU5Y2E0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJSVRFIDgxNzJHIGludGVycnVwdC9zZXR1cCByb3V0aW5lcy4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCwyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIAlwcG9wb3ZAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqIFBhcnQgb2YgdGhpcyBmaWxlIHdhcyBkZXJpdmVkIGZyb20gQ2Fyc3RlbiBMYW5nZ2FhcmQncwotICogYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX2ludC5jLgotICoKLSAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyLmg+Ci0jaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzJfaW50Lmg+Ci0jaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzJfZGJnLmg+Ci0KLS8qIHJldmlzaXQgKi8KLSNkZWZpbmUgRVhUX0lSUTBfVE9fSVAgMiAvKiBJUCAyICovCi0jZGVmaW5lIEVYVF9JUlE1X1RPX0lQIDcgLyogSVAgNyAqLwotCi0jZGVmaW5lIEFMTElOVFNfTk9USU1FUiAoSUVfSVJRMCB8IElFX0lSUTEgfCBJRV9JUlEyIHwgSUVfSVJRMyB8IElFX0lSUTQpCi0KLWV4dGVybiB2b2lkIHNldF9kZWJ1Z190cmFwcyh2b2lkKTsKLWV4dGVybiB2b2lkIG1pcHNfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLQotc3RydWN0IGl0ODE3Ml9pbnRjX3JlZ3Mgdm9sYXRpbGUgKml0ODE3Ml9odzBfaWNyZWdzID0KLQkoc3RydWN0IGl0ODE3Ml9pbnRjX3JlZ3Mgdm9sYXRpbGUgKikoS1NFRzFBRERSKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX0lOVENfQkFTRSkpOwotCi1zdGF0aWMgdm9pZCBkaXNhYmxlX2l0ODE3Ml9pcnEodW5zaWduZWQgaW50IGlycV9ucikKLXsKLQlpZiAoIChpcnFfbnIgPj0gSVQ4MTcyX0xQQ19JUlFfQkFTRSkgJiYgKGlycV9uciA8PSBJVDgxNzJfU0VSSVJRXzE1KSkgewotCQkvKiBMUEMgaW50ZXJydXB0ICovCi0JCWl0ODE3Ml9odzBfaWNyZWdzLT5scGNfbWFzayB8PQotCQkJKDEgPDwgKGlycV9uciAtIElUODE3Ml9MUENfSVJRX0JBU0UpKTsKLQl9IGVsc2UgaWYgKCAoaXJxX25yID49IElUODE3Ml9MQl9JUlFfQkFTRSkgJiYgKGlycV9uciA8PSBJVDgxNzJfSU9DSEtfSVJRKSkgewotCQkvKiBMb2NhbCBCdXMgaW50ZXJydXB0ICovCi0JCWl0ODE3Ml9odzBfaWNyZWdzLT5sYl9tYXNrIHw9Ci0JCQkoMSA8PCAoaXJxX25yIC0gSVQ4MTcyX0xCX0lSUV9CQVNFKSk7Ci0JfSBlbHNlIGlmICggKGlycV9uciA+PSBJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSkgJiYgKGlycV9uciA8PSBJVDgxNzJfRE1BX0lSUSkpIHsKLQkJLyogUENJIGFuZCBvdGhlciBpbnRlcnJ1cHRzICovCi0JCWl0ODE3Ml9odzBfaWNyZWdzLT5wY2lfbWFzayB8PQotCQkJKDEgPDwgKGlycV9uciAtIElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFKSk7Ci0JfSBlbHNlIGlmICggKGlycV9uciA+PSBJVDgxNzJfTk1JX0lSUV9CQVNFKSAmJiAoaXJxX25yIDw9IElUODE3Ml9QT1dFUl9OTUlfSVJRKSkgewotCQkvKiBOTUkgaW50ZXJydXB0cyAqLwotCQlpdDgxNzJfaHcwX2ljcmVncy0+bm1pX21hc2sgfD0KLQkJCSgxIDw8IChpcnFfbnIgLSBJVDgxNzJfTk1JX0lSUV9CQVNFKSk7Ci0JfSBlbHNlIHsKLQkJcGFuaWMoImRpc2FibGVfaXQ4MTcyX2lycTogYmFkIGlycSAlZCIsIGlycV9ucik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfaXQ4MTcyX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQotewotCWlmICggKGlycV9uciA+PSBJVDgxNzJfTFBDX0lSUV9CQVNFKSAmJiAoaXJxX25yIDw9IElUODE3Ml9TRVJJUlFfMTUpKSB7Ci0JCS8qIExQQyBpbnRlcnJ1cHQgKi8KLQkJaXQ4MTcyX2h3MF9pY3JlZ3MtPmxwY19tYXNrICY9Ci0JCQl+KDEgPDwgKGlycV9uciAtIElUODE3Ml9MUENfSVJRX0JBU0UpKTsKLQl9Ci0JZWxzZSBpZiAoIChpcnFfbnIgPj0gSVQ4MTcyX0xCX0lSUV9CQVNFKSAmJiAoaXJxX25yIDw9IElUODE3Ml9JT0NIS19JUlEpKSB7Ci0JCS8qIExvY2FsIEJ1cyBpbnRlcnJ1cHQgKi8KLQkJaXQ4MTcyX2h3MF9pY3JlZ3MtPmxiX21hc2sgJj0KLQkJCX4oMSA8PCAoaXJxX25yIC0gSVQ4MTcyX0xCX0lSUV9CQVNFKSk7Ci0JfQotCWVsc2UgaWYgKCAoaXJxX25yID49IElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFKSAmJiAoaXJxX25yIDw9IElUODE3Ml9ETUFfSVJRKSkgewotCQkvKiBQQ0kgYW5kIG90aGVyIGludGVycnVwdHMgKi8KLQkJaXQ4MTcyX2h3MF9pY3JlZ3MtPnBjaV9tYXNrICY9Ci0JCQl+KDEgPDwgKGlycV9uciAtIElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFKSk7Ci0JfQotCWVsc2UgaWYgKCAoaXJxX25yID49IElUODE3Ml9OTUlfSVJRX0JBU0UpICYmIChpcnFfbnIgPD0gSVQ4MTcyX1BPV0VSX05NSV9JUlEpKSB7Ci0JCS8qIE5NSSBpbnRlcnJ1cHRzICovCi0JCWl0ODE3Ml9odzBfaWNyZWdzLT5ubWlfbWFzayAmPQotCQkJfigxIDw8IChpcnFfbnIgLSBJVDgxNzJfTk1JX0lSUV9CQVNFKSk7Ci0JfQotCWVsc2UgewotCQlwYW5pYygiZW5hYmxlX2l0ODE3Ml9pcnE6IGJhZCBpcnEgJWQiLCBpcnFfbnIpOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2l0ZV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQllbmFibGVfaXQ4MTcyX2lycShpcnEpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIHNodXRkb3duX2l0ZV9pcnEJZGlzYWJsZV9pdDgxNzJfaXJxCi0jZGVmaW5lIG1hc2tfYW5kX2Fja19pdGVfaXJxICAgIGRpc2FibGVfaXQ4MTcyX2lycQotCi1zdGF0aWMgdm9pZCBlbmRfaXRlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRHxJUlFfSU5QUk9HUkVTUykpKQotCQllbmFibGVfaXQ4MTcyX2lycShpcnEpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGl0ODE3Ml9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUgPSAiSVRFODE3MiIsCi0JLnN0YXJ0dXAgPSBzdGFydHVwX2l0ZV9pcnEsCi0JLnNodXRkb3duID0gc2h1dGRvd25faXRlX2lycSwKLQkuZW5hYmxlID0gZW5hYmxlX2l0ODE3Ml9pcnEsCi0JLmRpc2FibGUgPSBkaXNhYmxlX2l0ODE3Ml9pcnEsCi0JLmFjayA9IG1hc2tfYW5kX2Fja19pdGVfaXJxLAotCS5lbmQgPSBlbmRfaXRlX2lycSwKLX07Ci0KLQotc3RhdGljIHZvaWQgZW5hYmxlX25vbmUodW5zaWduZWQgaW50IGlycSkgeyB9Ci1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfbm9uZSh1bnNpZ25lZCBpbnQgaXJxKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgdm9pZCBkaXNhYmxlX25vbmUodW5zaWduZWQgaW50IGlycSkgeyB9Ci1zdGF0aWMgdm9pZCBhY2tfbm9uZSh1bnNpZ25lZCBpbnQgaXJxKSB7IH0KLQotLyogc3RhcnR1cCBpcyB0aGUgc2FtZSBhcyAiZW5hYmxlIiwgc2h1dGRvd24gaXMgc2FtZSBhcyAiZGlzYWJsZSIgKi8KLSNkZWZpbmUgc2h1dGRvd25fbm9uZQlkaXNhYmxlX25vbmUKLSNkZWZpbmUgZW5kX25vbmUJZW5hYmxlX25vbmUKLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcDBfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIkNQMCBDb3VudCIsCi0JLnN0YXJ0dXAgPSBzdGFydHVwX25vbmUsCi0JLnNodXRkb3duID0gc2h1dGRvd25fbm9uZSwKLQkuZW5hYmxlID0gZW5hYmxlX25vbmUsCi0JLmRpc2FibGUgPSBkaXNhYmxlX25vbmUsCi0JLmFjayA9IGFja19ub25lLAotCS5lbmQgPSBlbmRfbm9uZQotfTsKLQotdm9pZCBlbmFibGVfY3B1X3RpbWVyKHZvaWQpCi17Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSAgICAgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXNldF9jMF9zdGF0dXMoMHgxMDAgPDwgRVhUX0lSUTVfVE9fSVApOwotICAgICAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKLXsKLQlpbnQgaTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIG1hc2sgYWxsIGludGVycnVwdHMgKi8KLQlpdDgxNzJfaHcwX2ljcmVncy0+bGJfbWFzayAgPSAweGZmZmY7Ci0JaXQ4MTcyX2h3MF9pY3JlZ3MtPmxwY19tYXNrID0gMHhmZmZmOwotCWl0ODE3Ml9odzBfaWNyZWdzLT5wY2lfbWFzayA9IDB4ZmZmZjsKLQlpdDgxNzJfaHcwX2ljcmVncy0+bm1pX21hc2sgPSAweGZmZmY7Ci0KLQkvKiBtYWtlIGFsbCBpbnRlcnJ1cHRzIGxldmVsIHRyaWdnZXJlZCAqLwotCWl0ODE3Ml9odzBfaWNyZWdzLT5sYl90cmlnZ2VyICA9IDA7Ci0JaXQ4MTcyX2h3MF9pY3JlZ3MtPmxwY190cmlnZ2VyID0gMDsKLQlpdDgxNzJfaHcwX2ljcmVncy0+cGNpX3RyaWdnZXIgPSAwOwotCWl0ODE3Ml9odzBfaWNyZWdzLT5ubWlfdHJpZ2dlciA9IDA7Ci0KLQkvKiBhY3RpdmUgbGV2ZWwgc2V0dGluZyAqLwotCS8qIHVhcnQsIGtleWJvYXJkLCBhbmQgbW91c2UgYXJlIGFjdGl2ZSBoaWdoICovCi0JaXQ4MTcyX2h3MF9pY3JlZ3MtPmxwY19sZXZlbCA9ICgweDEwIHwgMHgyIHwgMHgxMDAwKTsKLQlpdDgxNzJfaHcwX2ljcmVncy0+bGJfbGV2ZWwgfD0gMHgyMDsKLQotCS8qIGtleWJvYXJkIGFuZCBtb3VzZSBhcmUgZWRnZSB0cmlnZ2VyZWQgKi8KLQlpdDgxNzJfaHcwX2ljcmVncy0+bHBjX3RyaWdnZXIgfD0gKDB4MiB8IDB4MTAwMCk7Ci0KLQotI2lmIDAKLQkvLyBFbmFibGUgdGhpcyBwaWVjZSBvZiBjb2RlIHRvIG1ha2UgaW50ZXJuYWwgVVNCIGludGVycnVwdAotCS8vIGVkZ2UgdHJpZ2dlcmVkLgotCWl0ODE3Ml9odzBfaWNyZWdzLT5wY2lfdHJpZ2dlciB8PQotCQkoMSA8PCAoSVQ4MTcyX1VTQl9JUlEgLSBJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSkpOwotCWl0ODE3Ml9odzBfaWNyZWdzLT5wY2lfbGV2ZWwgJj0KLQkJfigxIDw8IChJVDgxNzJfVVNCX0lSUSAtIElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFKSk7Ci0jZW5kaWYKLQotCWZvciAoaSA9IDA7IGkgPD0gSVQ4MTcyX0xBU1RfSVJROyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZpdDgxNzJfaXJxX3R5cGU7Ci0JCXNwaW5fbG9ja19pbml0KCZpcnFfZGVzY1tpXS5sb2NrKTsKLQl9Ci0JaXJxX2Rlc2NbTUlQU19DUFVfVElNRVJfSVJRXS5jaGlwID0gJmNwMF9pcnFfdHlwZTsKLQlzZXRfYzBfc3RhdHVzKEFMTElOVFNfTk9USU1FUik7Ci19Ci0KLXZvaWQgbWlwc19zcHVyaW91c19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0jaWYgMQotCXJldHVybjsKLSNlbHNlCi0JdW5zaWduZWQgbG9uZyBzdGF0dXMsIGNhdXNlOwotCi0JcHJpbnRrKCJnb3Qgc3B1cmlvdXMgaW50ZXJydXB0XG4iKTsKLQlzdGF0dXMgPSByZWFkX2MwX3N0YXR1cygpOwotCWNhdXNlID0gcmVhZF9jMF9jYXVzZSgpOwotCXByaW50aygic3RhdHVzICV4IGNhdXNlICV4XG4iLCBzdGF0dXMsIGNhdXNlKTsKLQlwcmludGsoImVwYyAleCBiYWR2YWRkciAleCBcbiIsIHJlZ3MtPmNwMF9lcGMsIHJlZ3MtPmNwMF9iYWR2YWRkcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBpdDgxNzJfaHcwX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWludCBpcnE7Ci0JdW5zaWduZWQgc2hvcnQgaW50c3RhdHVzID0gMCwgc3RhdHVzID0gMDsKLQotCWludHN0YXR1cyA9IGl0ODE3Ml9odzBfaWNyZWdzLT5pbnRzdGF0dXM7Ci0JaWYgKGludHN0YXR1cyAmIDB4OCkgewotCQlwYW5pYygiR290IE5NSSBpbnRlcnJ1cHQiKTsKLQl9IGVsc2UgaWYgKGludHN0YXR1cyAmIDB4NCkgewotCQkvKiBQQ0kgaW50ZXJydXB0ICovCi0JCWlycSA9IDA7Ci0JCXN0YXR1cyB8PSBpdDgxNzJfaHcwX2ljcmVncy0+cGNpX3JlcTsKLQkJd2hpbGUgKCEoc3RhdHVzICYgMHgxKSkgewotCQkJaXJxKys7Ci0JCQlzdGF0dXMgPj49IDE7Ci0JCX0KLQkJaXJxICs9IElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFOwotCX0gZWxzZSBpZiAoaW50c3RhdHVzICYgMHgxKSB7Ci0JCS8qIExvY2FsIEJ1cyBpbnRlcnJ1cHQgKi8KLQkJaXJxID0gMDsKLQkJc3RhdHVzIHw9IGl0ODE3Ml9odzBfaWNyZWdzLT5sYl9yZXE7Ci0JCXdoaWxlICghKHN0YXR1cyAmIDB4MSkpIHsKLQkJCWlycSsrOwotCQkJc3RhdHVzID4+PSAxOwotCQl9Ci0JCWlycSArPSBJVDgxNzJfTEJfSVJRX0JBU0U7Ci0JfSBlbHNlIGlmIChpbnRzdGF0dXMgJiAweDIpIHsKLQkJLyogTFBDIGludGVycnVwdCAqLwotCQkvKiBTaW5jZSBzb21lIGxwYyBpbnRlcnJ1cHRzIGFyZSBlZGdlIHRyaWdnZXJlZCwKLQkJICogd2UgY291bGQgbG9zZSBhbiBpbnRlcnJ1cHQgdGhpcyB3YXkgYmVjYXVzZQotCQkgKiB3ZSBhY2tub3dsZWRnZSBhbGwgaW50cyBhdCBvbmNlcy4gUmV2aXNpdC4KLQkJICovCi0JCXN0YXR1cyB8PSBpdDgxNzJfaHcwX2ljcmVncy0+bHBjX3JlcTsKLQkJaXQ4MTcyX2h3MF9pY3JlZ3MtPmxwY19yZXEgPSAwOyAvKiBhY2tub3dsZWRnZSBpbnRzICovCi0JCWlycSA9IDA7Ci0JCXdoaWxlICghKHN0YXR1cyAmIDB4MSkpIHsKLQkJCWlycSsrOwotCQkJc3RhdHVzID4+PSAxOwotCQl9Ci0JCWlycSArPSBJVDgxNzJfTFBDX0lSUV9CQVNFOwotCX0gZWxzZQotCQlyZXR1cm47Ci0KLQlkb19JUlEoaXJxLCByZWdzKTsKLX0KLQotYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKSAmIFNUMF9JTTsKLQotCWlmICghcGVuZGluZykKLQkJbWlwc19zcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpCi0JCWxsX3RpbWVyX2ludGVycnVwdCgxMjcsIHJlZ3MpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAyKQotCQlpdDgxNzJfaHcwX2lycWRpc3BhdGNoKHJlZ3MpOwotfQotCi12b2lkIHNob3dfcGVuZGluZ19pcnFzKHZvaWQpCi17Ci0JZnB1dHMoImludHN0YXR1czogICIpOwotCXB1dDMyKGl0ODE3Ml9odzBfaWNyZWdzLT5pbnRzdGF0dXMpOwotCXB1dHMoIiIpOwotCi0JZnB1dHMoInBjaV9yZXE6ICAiKTsKLQlwdXQzMihpdDgxNzJfaHcwX2ljcmVncy0+cGNpX3JlcSk7Ci0JcHV0cygiIik7Ci0KLQlmcHV0cygibGJfcmVxOiAgIik7Ci0JcHV0MzIoaXQ4MTcyX2h3MF9pY3JlZ3MtPmxiX3JlcSk7Ci0JcHV0cygiIik7Ci0KLQlmcHV0cygibHBjX3JlcTogICIpOwotCXB1dDMyKGl0ODE3Ml9odzBfaWNyZWdzLT5scGNfcmVxKTsKLQlwdXRzKCIiKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXQ4MTcyX2Npci5jIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pdDgxNzJfY2lyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYzI1YWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pdDgxNzJfY2lyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUlUODE3MiBDb25zdW1lciBJUiBwb3J0IGdlbmVyaWMgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLQotI2lmZGVmIENPTkZJR19JVDgxNzJfQ0lSCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyLmg+Ci0jaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzJfY2lyLmg+Ci0KLQotdm9sYXRpbGUgc3RydWN0IGl0ODE3Ml9jaXJfcmVncyAqY2lyX3JlZ3NbTlVNX0NJUl9QT1JUU10gPSB7Ci0JKHZvbGF0aWxlIHN0cnVjdCBpdDgxNzJfY2lyX3JlZ3MgKikoS1NFRzFBRERSKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX0NJUjBfQkFTRSkpLAotCSh2b2xhdGlsZSBzdHJ1Y3QgaXQ4MTcyX2Npcl9yZWdzICopKEtTRUcxQUREUihJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9DSVIxX0JBU0UpKX07Ci0KLQotLyoKLSAqIEluaXRpYWxpemUgQ29uc3VtZXIgSVIgUG9ydC4KLSAqLwotaW50IGNpcl9wb3J0X2luaXQoc3RydWN0IGNpcl9wb3J0ICpjaXIpCi17Ci0JaW50IHBvcnQgPSBjaXItPnBvcnQ7Ci0JdW5zaWduZWQgY2hhciBkYXRhOwotCi0JLyogc2V0IGJhdWQgcmF0ZSAqLwotCWNpcl9yZWdzW3BvcnRdLT5iZGxyID0gY2lyLT5iYXVkX3JhdGUgJiAweGZmOwotCWNpcl9yZWdzW3BvcnRdLT5iZGhyID0gKGNpci0+YmF1ZF9yYXRlID4+IDgpICYgMHhmZjsKLQotCS8qIHNldCByZWNlaXZlciBjb250cm9sIHJlZ2lzdGVyICovCi0JY2lyX3JlZ3NbcG9ydF0tPnJjciA9IChDSVJfU0VUX1JEV09TKGNpci0+cmR3b3MpIHwgQ0lSX1NFVF9SWERDUihjaXItPnJ4ZGNyKSk7Ci0KLQkvKiBzZXQgY2FycmllciBmcmVxdWVuY3kgcmVnaXN0ZXIgKi8KLQljaXJfcmVnc1twb3J0XS0+Y2ZyID0gKENJUl9TRVRfQ0YoY2lyLT5jZnEpIHwgQ0lSX1NFVF9IUyhjaXItPmhjZnMpKTsKLQotCS8qIHNldCBmaWZvIHRocmVzaG9sZCAqLwotCWRhdGEgPSBjaXJfcmVnc1twb3J0XS0+bXN0Y3IgJiAweGYzOwotCWRhdGEgfD0gQ0lSX1NFVF9GSUZPX1RMKGNpci0+Zmlmb190bCk7Ci0JY2lyX3JlZ3NbcG9ydF0tPm1zdGNyID0gZGF0YTsKLQotCWNsZWFyX2ZpZm8oY2lyKTsKLQllbmFibGVfcmVjZWl2ZXIoY2lyKTsKLQlkaXNhYmxlX3J4X2RlbW9kdWxhdGlvbihjaXIpOwotCi0Jc2V0X3J4X2FjdGl2ZShjaXIpOwotCWludF9lbmFibGUoY2lyKTsKLQlyeF9pbnRfZW5hYmxlKGNpcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi12b2lkIGNsZWFyX2ZpZm8oc3RydWN0IGNpcl9wb3J0ICpjaXIpCi17Ci0JY2lyX3JlZ3NbY2lyLT5wb3J0XS0+bXN0Y3IgfD0gQ0lSX0ZJRk9fQ0xFQVI7Ci19Ci0KLXZvaWQgZW5hYmxlX3JlY2VpdmVyKHN0cnVjdCBjaXJfcG9ydCAqY2lyKQotewotCWNpcl9yZWdzW2Npci0+cG9ydF0tPnJjciB8PSBDSVJfUlhFTjsKLX0KLQotdm9pZCBkaXNhYmxlX3JlY2VpdmVyKHN0cnVjdCBjaXJfcG9ydCAqY2lyKQotewotCWNpcl9yZWdzW2Npci0+cG9ydF0tPnJjciAmPSB+Q0lSX1JYRU47Ci19Ci0KLXZvaWQgZW5hYmxlX3J4X2RlbW9kdWxhdGlvbihzdHJ1Y3QgY2lyX3BvcnQgKmNpcikKLXsKLQljaXJfcmVnc1tjaXItPnBvcnRdLT5yY3IgfD0gQ0lSX1JYRU5EOwotfQotCi12b2lkIGRpc2FibGVfcnhfZGVtb2R1bGF0aW9uKHN0cnVjdCBjaXJfcG9ydCAqY2lyKQotewotCWNpcl9yZWdzW2Npci0+cG9ydF0tPnJjciAmPSB+Q0lSX1JYRU5EOwotfQotCi12b2lkIHNldF9yeF9hY3RpdmUoc3RydWN0IGNpcl9wb3J0ICpjaXIpCi17Ci0JY2lyX3JlZ3NbY2lyLT5wb3J0XS0+cmNyIHw9IENJUl9SWEFDVDsKLX0KLQotdm9pZCBpbnRfZW5hYmxlKHN0cnVjdCBjaXJfcG9ydCAqY2lyKQotewotCWNpcl9yZWdzW2Npci0+cG9ydF0tPmllciB8PSBDSVJfSUVDOwotfQotCi12b2lkIHJ4X2ludF9lbmFibGUoc3RydWN0IGNpcl9wb3J0ICpjaXIpCi17Ci0JY2lyX3JlZ3NbY2lyLT5wb3J0XS0+aWVyIHw9IENJUl9SREFJRTsKLX0KLQotdm9pZCBkdW1wX3JlZ3Moc3RydWN0IGNpcl9wb3J0ICpjaXIpCi17Ci0JcHJpbnRrKCJtc3RjciAleCBpZXIgJXggaWlyICV4IGNmciAleCByY3IgJXggdGNyICV4IHRmc3IgJXggcmZzciAleFxuIiwKLQljaXJfcmVnc1tjaXItPnBvcnRdLT5tc3RjciwKLQljaXJfcmVnc1tjaXItPnBvcnRdLT5pZXIsCi0JY2lyX3JlZ3NbY2lyLT5wb3J0XS0+aWlyLAotCWNpcl9yZWdzW2Npci0+cG9ydF0tPmNmciwKLQljaXJfcmVnc1tjaXItPnBvcnRdLT5yY3IsCi0JY2lyX3JlZ3NbY2lyLT5wb3J0XS0+dGNyLAotCWNpcl9yZWdzW2Npci0+cG9ydF0tPnRmc3IsCi0JY2lyX3JlZ3NbY2lyLT5wb3J0XS0+cmZzcik7Ci0KLQl3aGlsZSAoY2lyX3JlZ3NbY2lyLT5wb3J0XS0+aWlyICYgQ0lSX1JEQUkpIHsKLQkJcHJpbnRrKCJkYXRhICV4XG4iLCBjaXJfcmVnc1tjaXItPnBvcnRdLT5kcik7Ci0JfQotfQotCi12b2lkIGR1bXBfcmVnX2FkZHIoc3RydWN0IGNpcl9wb3J0ICpjaXIpCi17Ci0JcHJpbnRrKCJkciAleCBtc3RjciAleCBpZXIgJXggaWlyICV4IGNmciAleCByY3IgJXggdGNyICV4IGJkbHIgJXggYmRociAleCB0ZnNyICV4IHJmc3IgJXhcbiIsCi0JKHVuc2lnbmVkKSZjaXJfcmVnc1tjaXItPnBvcnRdLT5kciwKLQkodW5zaWduZWQpJmNpcl9yZWdzW2Npci0+cG9ydF0tPm1zdGNyLAotCSh1bnNpZ25lZCkmY2lyX3JlZ3NbY2lyLT5wb3J0XS0+aWVyLAotCSh1bnNpZ25lZCkmY2lyX3JlZ3NbY2lyLT5wb3J0XS0+aWlyLAotCSh1bnNpZ25lZCkmY2lyX3JlZ3NbY2lyLT5wb3J0XS0+Y2ZyLAotCSh1bnNpZ25lZCkmY2lyX3JlZ3NbY2lyLT5wb3J0XS0+cmNyLAotCSh1bnNpZ25lZCkmY2lyX3JlZ3NbY2lyLT5wb3J0XS0+dGNyLAotCSh1bnNpZ25lZCkmY2lyX3JlZ3NbY2lyLT5wb3J0XS0+YmRsciwKLQkodW5zaWduZWQpJmNpcl9yZWdzW2Npci0+cG9ydF0tPmJkaHIsCi0JKHVuc2lnbmVkKSZjaXJfcmVnc1tjaXItPnBvcnRdLT50ZnNyLAotCSh1bnNpZ25lZCkmY2lyX3JlZ3NbY2lyLT5wb3J0XS0+cmZzcik7Ci19Ci0KLWludCBjaXJfZ2V0X3J4X2NvdW50KHN0cnVjdCBjaXJfcG9ydCAqY2lyKQotewotCXJldHVybiBjaXJfcmVnc1tjaXItPnBvcnRdLT5yZnNyICYgQ0lSX1JYRkJDX01BU0s7Ci19Ci0KLWNoYXIgY2lyX3JlYWRfZGF0YShzdHJ1Y3QgY2lyX3BvcnQgKmNpcikKLXsKLQlyZXR1cm4gY2lyX3JlZ3NbY2lyLT5wb3J0XS0+ZHI7Ci19Ci0KLWNoYXIgZ2V0X2ludF9zdGF0dXMoc3RydWN0IGNpcl9wb3J0ICpjaXIpCi17Ci0JcmV0dXJuIGNpcl9yZWdzW2Npci0+cG9ydF0tPmlpcjsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pdDgxNzJfc2V0dXAuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXQ4MTcyX3NldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZmFmM2MuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pdDgxNzJfc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDM1MiArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglJVDgxNzIvUUVENTIzMSBib2FyZCBzZXR1cC4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KLSNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0KLSNpbmNsdWRlIDxhc20vY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgotI2luY2x1ZGUgPGFzbS90cmFwcy5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyLmg+Ci0jaW5jbHVkZSA8YXNtL2l0ODcxMi5oPgotCi1leHRlcm4gc3RydWN0IHJlc291cmNlIGlvcG9ydF9yZXNvdXJjZTsKLSNpZmRlZiBDT05GSUdfU0VSSU9fSTgwNDIKLWludCBpbml0Xzg3MTJfa2V5Ym9hcmQodm9pZCk7Ci0jZW5kaWYKLQotZXh0ZXJuIGludCBTZWFyY2hJVDg3MTIodm9pZCk7Ci1leHRlcm4gdm9pZCBJbml0TFBDSW50ZXJmYWNlKHZvaWQpOwotZXh0ZXJuIGNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpOwotZXh0ZXJuIHZvaWQgaXQ4MTcyX3Jlc3RhcnQoY2hhciAqY29tbWFuZCk7Ci1leHRlcm4gdm9pZCBpdDgxNzJfaGFsdCh2b2lkKTsKLWV4dGVybiB2b2lkIGl0ODE3Ml9wb3dlcl9vZmYodm9pZCk7Ci0KLWV4dGVybiB2b2lkIGl0ODE3Ml90aW1lX2luaXQodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfSVQ4MTcyX1JFVkMKLXN0cnVjdCB7Ci0gICAgc3RydWN0IHJlc291cmNlIHJhbTsKLSAgICBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbTsKLSAgICBzdHJ1Y3QgcmVzb3VyY2UgcGNpX2lvOwotICAgIHN0cnVjdCByZXNvdXJjZSBmbGFzaDsKLSAgICBzdHJ1Y3QgcmVzb3VyY2UgYm9vdDsKLX0gaXQ4MTcyX3Jlc291cmNlcyA9IHsKLQl7Ci0JCS5zdGFydAk9IDAsCQkJCS8qIHRvIGJlIGluaXR0ZWQgKi8KLQkJLmVuZAk9IDAsCi0JCS5uYW1lCT0gIlJBTSIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi0JfSwgewotCQkuc3RhcnQJPSAweDEwMDAwMDAwLAotCQkuZW5kCT0gMHgxM0ZGRkZGRiwKLQkJLm5hbWUJPSAiUENJIE1lbSIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi0JfSwgewotCQkuc3RhcnQJPSAweDE0MDAwMDAwLAotCQkuZW5kCT0gMHgxN0ZGRkZGRgotCQkubmFtZQk9ICJQQ0kgSS9PIiwKLQl9LCB7Ci0JCS5zdGFydAk9IDB4MDgwMDAwMDAsCi0JCS5lbmQJPSAweDBDRkZGRkZGCi0JCS5uYW1lCT0gIkZsYXNoIiwKLQl9LCB7Ci0JCS5zdGFydAk9IDB4MUZDMDAwMDAsCi0JCS5lbmQJPSAweDFGRkZGRkZGCi0JCS5uYW1lCT0gIkJvb3QgUk9NIiwKLQl9Ci19OwotI2Vsc2UKLXN0cnVjdCB7Ci0gICAgc3RydWN0IHJlc291cmNlIHJhbTsKLSAgICBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbTA7Ci0gICAgc3RydWN0IHJlc291cmNlIHBjaV9tZW0xOwotICAgIHN0cnVjdCByZXNvdXJjZSBwY2lfaW87Ci0gICAgc3RydWN0IHJlc291cmNlIHBjaV9tZW0yOwotICAgIHN0cnVjdCByZXNvdXJjZSBwY2lfbWVtMzsKLSAgICBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2g7Ci0gICAgc3RydWN0IHJlc291cmNlIGJvb3Q7Ci19IGl0ODE3Ml9yZXNvdXJjZXMgPSB7Ci0JewotCQkuc3RhcnQJPSAwLAkJCQkvKiB0byBiZSBpbml0dGVkICovCi0JCS5lbmQJPSAwLAotCQkubmFtZQk9ICJSQU0iLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQotCX0sIHsKLQkJLnN0YXJ0CT0gMHgwQzAwMDAwMCwKLQkJLmVuZAk9IDB4MEZGRkZGRkYsCi0JCS5uYW1lCT0gIlBDSSBNZW0wIiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQkgfSwgewotCQkuc3RhcnQJPSAweDEwMDAwMDAwLAotCQkuZW5kCT0gMHgxM0ZGRkZGRiwKLQkJLm5hbWUJPSAiUENJIE1lbTEiLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQotCSB9LCB7Ci0JCS5zdGFydAk9IDB4MTQwMDAwMDAsCi0JCS5lbmQJPSAweDE3RkZGRkZGCi0JCS5uYW1lCT0gIlBDSSBJL08iLAotCX0sIHsKLQkJLnN0YXJ0CT0gMHgxQTAwMDAwMCwKLQkJLmVuZAk9IDB4MUJGRkZGRkYsCi0JCS5uYW1lCT0gIlBDSSBNZW0yIiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQl9LCB7Ci0JCS5zdGFydAk9IDB4MUMwMDAwMDAsCi0JCS5lbmQJPSAweDFGQkZGRkZGLAotCQkubmFtZQk9ICJQQ0kgTWVtMyIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi0JfSwgewotCQkuc3RhcnQJPSAweDA4MDAwMDAwLAotCQkuZW5kCT0gMHgwQ0ZGRkZGRgotCQkubmFtZQk9ICJGbGFzaCIsCi0JfSwgewotCQkuc3RhcnQJPSAweDFGQzAwMDAwLAotCQkuZW5kCT0gMHgxRkZGRkZGRgotCQkubmFtZQk9ICJCb290IFJPTSIsCi0JfQotfTsKLSNlbmRpZgotCi0KLXZvaWQgX19pbml0IGl0ODE3Ml9pbml0X3JhbV9yZXNvdXJjZSh1bnNpZ25lZCBsb25nIG1lbXNpemUpCi17Ci0JaXQ4MTcyX3Jlc291cmNlcy5yYW0uZW5kID0gbWVtc2l6ZTsKLX0KLQotdm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKLXsKLQl1bnNpZ25lZCBzaG9ydCBkc3I7Ci0JY2hhciAqYXJncHRyOwotCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF9DT05TT0xFCi0JaWYgKChhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKSkgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgotCi0JY2xlYXJfYzBfc3RhdHVzKFNUMF9GUik7Ci0KLQlib2FyZF90aW1lX2luaXQgPSBpdDgxNzJfdGltZV9pbml0OwotCi0JX21hY2hpbmVfcmVzdGFydCA9IGl0ODE3Ml9yZXN0YXJ0OwotCV9tYWNoaW5lX2hhbHQgPSBpdDgxNzJfaGFsdDsKLQlwbV9wb3dlcl9vZmYgPSBpdDgxNzJfcG93ZXJfb2ZmOwotCi0JLyoKLQkgKiBJTy9NRU0gcmVzb3VyY2VzLgotCSAqCi0JICogcmV2aXNpdCB0aGlzIGFyZWEuCi0JICovCi0Jc2V0X2lvX3BvcnRfYmFzZShLU0VHMSk7Ci0JaW9wb3J0X3Jlc291cmNlLnN0YXJ0ID0gaXQ4MTcyX3Jlc291cmNlcy5wY2lfaW8uc3RhcnQ7Ci0JaW9wb3J0X3Jlc291cmNlLmVuZCA9IGl0ODE3Ml9yZXNvdXJjZXMucGNpX2lvLmVuZDsKLSNpZmRlZiBDT05GSUdfSVQ4MTcyX1JFVkMKLQlpb21lbV9yZXNvdXJjZS5zdGFydCA9IGl0ODE3Ml9yZXNvdXJjZXMucGNpX21lbS5zdGFydDsKLQlpb21lbV9yZXNvdXJjZS5lbmQgPSBpdDgxNzJfcmVzb3VyY2VzLnBjaV9tZW0uZW5kOwotI2Vsc2UKLQlpb21lbV9yZXNvdXJjZS5zdGFydCA9IGl0ODE3Ml9yZXNvdXJjZXMucGNpX21lbTAuc3RhcnQ7Ci0JaW9tZW1fcmVzb3VyY2UuZW5kID0gaXQ4MTcyX3Jlc291cmNlcy5wY2lfbWVtMy5lbmQ7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCVJPT1RfREVWID0gUm9vdF9SQU0wOwotI2VuZGlmCi0KLQkvKgotCSAqIFB1bGwgZW5hYmxlZCBkZXZpY2VzIG91dCBvZiBzdGFuZGJ5Ci0JICovCi0JSVRfSU9fUkVBRDE2KElUX1BNX0RTUiwgZHNyKTsKLQotCS8qCi0JICogRml4bWU6IFRoaXMgYnJlYWtzIHdoZW4gdGhlc2UgZHJpdmVycyBhcmUgbW9kdWxlcyEhIQotCSAqLwotI2lmZGVmIENPTkZJR19TT1VORF9JVDgxNzIKLQlkc3IgJj0gfklUX1BNX0RTUl9BQ1NCOwotI2Vsc2UKLQlkc3IgfD0gSVRfUE1fRFNSX0FDU0I7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JVDgxNzIKLQlkc3IgJj0gfklUX1BNX0RTUl9JREVTQjsKLSNlbHNlCi0JZHNyIHw9IElUX1BNX0RTUl9JREVTQjsKLSNlbmRpZgotCUlUX0lPX1dSSVRFMTYoSVRfUE1fRFNSLCBkc3IpOwotCi0JSW5pdExQQ0ludGVyZmFjZSgpOwotCi0jaWZkZWYgQ09ORklHX01JUFNfSVRFODE3MgotCWlmIChTZWFyY2hJVDg3MTIoKSkgewotCQlwcmludGsoIkZvdW5kIElUODcxMiBTdXBlciBJT1xuIik7Ci0JCS8qIGVuYWJsZSBJVDg3MTIgc2VyaWFsIHBvcnQgKi8KLQkJTFBDU2V0Q29uZmlnKExETl9TRVJJQUwxLCAweDMwLCAweDAxKTsgLyogZW5hYmxlICovCi0JCUxQQ1NldENvbmZpZyhMRE5fU0VSSUFMMSwgMHgyMywgMHgwMSk7IC8qIGNsb2NrIHNlbGVjdGlvbiAqLwotI2lmZGVmIENPTkZJR19TRVJJT19JODA0MgotCQlpZiAoaW5pdF84NzEyX2tleWJvYXJkKCkpIHsKLQkJCXByaW50aygiVW5hYmxlIHRvIGluaXRpYWxpemUga2V5Ym9hcmRcbiIpOwotCQkJTFBDU2V0Q29uZmlnKExETl9LRVlCT0FSRCwgMHgzMCwgMHgwKTsgLyogZGlzYWJsZSBrZXlib2FyZCAqLwotCQl9IGVsc2UgewotCQkJTFBDU2V0Q29uZmlnKExETl9LRVlCT0FSRCwgMHgzMCwgMHgxKTsgLyogZW5hYmxlIGtleWJvYXJkICovCi0JCQlMUENTZXRDb25maWcoTEROX0tFWUJPQVJELCAweGYwLCAweDIpOwotCQkJTFBDU2V0Q29uZmlnKExETl9LRVlCT0FSRCwgMHg3MSwgMHgzKTsKLQotCQkJTFBDU2V0Q29uZmlnKExETl9NT1VTRSwgMHgzMCwgMHgxKTsgLyogZW5hYmxlIG1vdXNlICovCi0KLQkJCUxQQ1NldENvbmZpZygweDQsIDB4MzAsIDB4MSk7Ci0JCQlMUENTZXRDb25maWcoMHg0LCAweGY0LCBMUENHZXRDb25maWcoMHg0LCAweGY0KSB8IDB4ODApOwotCi0JCQlpZiAoKExQQ0dldENvbmZpZyhMRE5fS0VZQk9BUkQsIDB4MzApID09IDApIHx8Ci0JCQkJCShMUENHZXRDb25maWcoTEROX01PVVNFLCAweDMwKSA9PSAwKSkKLQkJCQlwcmludGsoIkVycm9yOiBrZXlib2FyZCBvciBtb3VzZSBub3QgZW5hYmxlZFxuIik7Ci0KLQkJfQotI2VuZGlmCi0JfQotCWVsc2UgewotCQlwcmludGsoIklUODcxMiBTdXBlciBJTyBub3QgZm91bmRcbiIpOwotCX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lUODE3Ml9DSVIKLQl7Ci0JCXVuc2lnbmVkIGxvbmcgZGF0YTsKLQkJLy9wcmludGsoIkVuYWJsaW5nIENJUjBcbiIpOwotCQlJVF9JT19SRUFEMTYoSVRfUE1fRFNSLCBkYXRhKTsKLQkJZGF0YSAmPSB+SVRfUE1fRFNSX0NJUjBTQjsKLQkJSVRfSU9fV1JJVEUxNihJVF9QTV9EU1IsIGRhdGEpOwotCQkvL3ByaW50aygiRFNSIHJlZ2lzdGVyOiAleFxuIiwgKHVuc2lnbmVkKUlUX0lPX1JFQUQxNihJVF9QTV9EU1IsIGRhdGEpKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSVQ4MTcyX1NDUjAKLQl7Ci0JCXVuc2lnbmVkIGk7Ci0JCS8qIEVuYWJsZSBTbWFydCBDYXJkIFJlYWRlciAwICovCi0JCS8qIEZpcnN0IHBvd2VyIGl0IHVwICovCi0JCUlUX0lPX1JFQUQxNihJVF9QTV9EU1IsIGkpOwotCQlpICY9IH5JVF9QTV9EU1JfU0NSMFNCOwotCQlJVF9JT19XUklURTE2KElUX1BNX0RTUiwgaSk7Ci0JCS8qIFRoZW4gaW5pdGlhbGl6ZSBpdHMgcmVnaXN0ZXJzICovCi0JCW91dGIoKCBJVF9TQ1JfU0ZSX0dBVEVfVUFSVF9PRkYgICAgIDw8IElUX1NDUl9TRlJfR0FURV9VQVJUX0JJVAotCQkgICAgICB8SVRfU0NSX1NGUl9GRVRfQ0hBUkdFXzIxM19VUyA8PCBJVF9TQ1JfU0ZSX0ZFVF9DSEFSR0VfQklUCi0JCSAgICAgIHxJVF9TQ1JfU0ZSX0NBUkRfRlJFUV8zXzVfTUhaIDw8IElUX1NDUl9TRlJfQ0FSRF9GUkVRX0JJVAotCQkgICAgICB8SVRfU0NSX1NGUl9GRVRfQUNUSVZFX0lOVkVSVCA8PCBJVF9TQ1JfU0ZSX0ZFVF9BQ1RJVkVfQklUCi0JCSAgICAgIHxJVF9TQ1JfU0ZSX0VOQUJMRV9PTiAgICAgICAgIDw8IElUX1NDUl9TRlJfRU5BQkxFX0JJVCksCi0JCSAgICAgSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfU0NSMF9CQVNFICsgSVRfU0NSX1NGUik7Ci0JCW91dGIoSVRfU0NSX1NDRFJfUkVTRVRfTU9ERV9BU1lOQyA8PCBJVF9TQ1JfU0NEUl9SRVNFVF9NT0RFX0JJVCwKLQkJICAgICBJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9TQ1IwX0JBU0UgKyBJVF9TQ1JfU0NEUik7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19JVDgxNzJfU0NSMCAqLwotI2lmZGVmIENPTkZJR19JVDgxNzJfU0NSMQotCXsKLQkJdW5zaWduZWQgaTsKLQkJLyogRW5hYmxlIFNtYXJ0IENhcmQgUmVhZGVyIDEgKi8KLQkJLyogRmlyc3QgcG93ZXIgaXQgdXAgKi8KLQkJSVRfSU9fUkVBRDE2KElUX1BNX0RTUiwgaSk7Ci0JCWkgJj0gfklUX1BNX0RTUl9TQ1IxU0I7Ci0JCUlUX0lPX1dSSVRFMTYoSVRfUE1fRFNSLCBpKTsKLQkJLyogVGhlbiBpbml0aWFsaXplIGl0cyByZWdpc3RlcnMgKi8KLQkJb3V0YigoIElUX1NDUl9TRlJfR0FURV9VQVJUX09GRiAgICAgPDwgSVRfU0NSX1NGUl9HQVRFX1VBUlRfQklUCi0JCSAgICAgIHxJVF9TQ1JfU0ZSX0ZFVF9DSEFSR0VfMjEzX1VTIDw8IElUX1NDUl9TRlJfRkVUX0NIQVJHRV9CSVQKLQkJICAgICAgfElUX1NDUl9TRlJfQ0FSRF9GUkVRXzNfNV9NSFogPDwgSVRfU0NSX1NGUl9DQVJEX0ZSRVFfQklUCi0JCSAgICAgIHxJVF9TQ1JfU0ZSX0ZFVF9BQ1RJVkVfSU5WRVJUIDw8IElUX1NDUl9TRlJfRkVUX0FDVElWRV9CSVQKLQkJICAgICAgfElUX1NDUl9TRlJfRU5BQkxFX09OICAgICAgICAgPDwgSVRfU0NSX1NGUl9FTkFCTEVfQklUKSwKLQkJICAgICBJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9TQ1IxX0JBU0UgKyBJVF9TQ1JfU0ZSKTsKLQkJb3V0YihJVF9TQ1JfU0NEUl9SRVNFVF9NT0RFX0FTWU5DIDw8IElUX1NDUl9TQ0RSX1JFU0VUX01PREVfQklULAotCQkgICAgIElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1NDUjFfQkFTRSArIElUX1NDUl9TQ0RSKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX0lUODE3Ml9TQ1IxICovCi19Ci0KLSNpZmRlZiBDT05GSUdfU0VSSU9fSTgwNDIKLS8qCi0gKiBBY2NvcmRpbmcgdG8gdGhlIElURSBTcGVjaWFsIEJJT1MgTm90ZSBmb3Igd2FraW5nIHVwIHRoZQotICoga2V5Ym9hcmQgY29udHJvbGxlci4uLgotICovCi1zdGF0aWMgaW50IGluaXRfODcxMl9rZXlib2FyZCh2b2lkKQotewotCXVuc2lnbmVkIGludCBjbWRfcG9ydCA9IDB4MTQwMDAwNjQ7Ci0JdW5zaWduZWQgaW50IGRhdGFfcG9ydCA9IDB4MTQwMDAwNjA7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eCi0JU29tZWJvZHkgaGVyZSBkb2Vzbid0IGdyb2sgdGhlIGNvbmNlcHQgb2YgaW8gcG9ydHMuCi0KLQl1bnNpZ25lZCBjaGFyIGRhdGE7Ci0JaW50IGk7Ci0KLQlvdXRiKDB4YWEsIGNtZF9wb3J0KTsgLyogc2VuZCBzZWxmLXRlc3QgY21kICovCi0JaSA9IDA7Ci0Jd2hpbGUgKCEoaW5iKGNtZF9wb3J0KSAmIDB4MSkpIHsgLyogd2FpdCBvdXRwdXQgYnVmZmVyIGZ1bGwgKi8KLQkJaSsrOwotCQlpZiAoaSA+IDB4ZmZmZmZmKQotCQkJcmV0dXJuIDE7Ci0JfQotCi0JZGF0YSA9IGluYihkYXRhX3BvcnQpOwotCW91dGIoMHhjYiwgY21kX3BvcnQpOyAvKiBzZXQgcHMyIG1vZGUgKi8KLQl3aGlsZSAoaW5iKGNtZF9wb3J0KSAmIDB4MikgeyAvKiB3YWl0IHdoaWxlIGlucHV0IGJ1ZmZlciBmdWxsICovCi0JCWkrKzsKLQkJaWYgKGkgPiAweGZmZmZmZikKLQkJCXJldHVybiAxOwotCX0KLQlvdXRiKDB4MDEsIGRhdGFfcG9ydCk7Ci0Jd2hpbGUgKGluYihjbWRfcG9ydCkgJiAweDIpIHsgLyogd2FpdCB3aGlsZSBpbnB1dCBidWZmZXIgZnVsbCAqLwotCQlpKys7Ci0JCWlmIChpID4gMHhmZmZmZmYpCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlvdXRiKDB4NjAsIGNtZF9wb3J0KTsgLyogd3JpdGUgODA0MiBjb21tYW5kIGJ5dGUgKi8KLQl3aGlsZSAoaW5iKGNtZF9wb3J0KSAmIDB4MikgeyAvKiB3YWl0IHdoaWxlIGlucHV0IGJ1ZmZlciBmdWxsICovCi0JCWkrKzsKLQkJaWYgKGkgPiAweGZmZmZmZikKLQkJCXJldHVybiAxOwotCX0KLQlvdXRiKDB4NDUsIGRhdGFfcG9ydCk7IC8qIGF0IGludGVyZmFjZSwga2V5Ym9hcmQgZW5hYmxlZCwgc3lzdGVtIGZsYWcgKi8KLQl3aGlsZSAoaW5iKGNtZF9wb3J0KSAmIDB4MikgeyAvKiB3YWl0IHdoaWxlIGlucHV0IGJ1ZmZlciBmdWxsICovCi0JCWkrKzsKLQkJaWYgKGkgPiAweGZmZmZmZikKLQkJCXJldHVybiAxOwotCX0KLQotCW91dGIoMHhhZSwgY21kX3BvcnQpOyAvKiBlbmFibGUgaW50ZXJmYWNlICovCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvbHBjLmMgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2xwYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzc1ODRmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvbHBjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUlURSBTZW1pIElUODcxMiBTdXBlciBJL08gZnVuY3Rpb25zLgotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIAlwcG9wb3ZAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2l0ODcxMi5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyLmg+Ci0KLSNpZm5kZWYgVFJVRQotI2RlZmluZSBUUlVFIDEKLSNlbmRpZgotCi0jaWZuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFIDAKLSNlbmRpZgotCi12b2lkIExQQ0VudGVyTUJQblAodm9pZCkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyIGtleVs0XSA9IHsweDg3LCAweDAxLCAweDU1LCAweDU1fTsKLQotCWZvciAoaSA9IDA7IGk8NDsgaSsrKQotCQlvdXRiKGtleVtpXSwgTFBDX0tFWV9BRERSKTsKLQotfQotCi12b2lkIExQQ0V4aXRNQlBuUCh2b2lkKQotewotCW91dGIoMHgwMiwgTFBDX0tFWV9BRERSKTsKLQlvdXRiKDB4MDIsIExQQ19EQVRBX0FERFIpOwotfQotCi12b2lkIExQQ1NldENvbmZpZyhjaGFyIExkbk51bWJlciwgY2hhciBJbmRleCwgY2hhciBkYXRhKQotewotCUxQQ0VudGVyTUJQblAoKTsJCQkJLy8gRW50ZXIgSVQ4NzEyIE1CIFBuUCBtb2RlCi0Jb3V0YigweDA3LCBMUENfS0VZX0FERFIpOwotCW91dGIoTGRuTnVtYmVyLCBMUENfREFUQV9BRERSKTsKLQlvdXRiKEluZGV4LCBMUENfS0VZX0FERFIpOwotCW91dGIoZGF0YSwgTFBDX0RBVEFfQUREUik7Ci0JTFBDRXhpdE1CUG5QKCk7Ci19Ci0KLWNoYXIgTFBDR2V0Q29uZmlnKGNoYXIgTGRuTnVtYmVyLCBjaGFyIEluZGV4KQotewotCWNoYXIgcnRuOwotCi0JTFBDRW50ZXJNQlBuUCgpOwkJCQkvLyBFbnRlciBJVDg3MTIgTUIgUG5QIG1vZGUKLQlvdXRiKDB4MDcsIExQQ19LRVlfQUREUik7Ci0Jb3V0YihMZG5OdW1iZXIsIExQQ19EQVRBX0FERFIpOwotCW91dGIoSW5kZXgsIExQQ19LRVlfQUREUik7Ci0JcnRuID0gaW5iKExQQ19EQVRBX0FERFIpOwotCUxQQ0V4aXRNQlBuUCgpOwotCXJldHVybiBydG47Ci19Ci0KLWludCBTZWFyY2hJVDg3MTIodm9pZCkKLXsKLQl1bnNpZ25lZCBjaGFyIElkMSwgSWQyOwotCXVuc2lnbmVkIHNob3J0IElkOwotCi0JTFBDRW50ZXJNQlBuUCgpOwotCW91dGIoMHgyMCwgTFBDX0tFWV9BRERSKTsgLyogY2hpcCBpZCBieXRlIDEgKi8KLQlJZDEgPSBpbmIoTFBDX0RBVEFfQUREUik7Ci0Jb3V0YigweDIxLCBMUENfS0VZX0FERFIpOyAvKiBjaGlwIGlkIGJ5dGUgMiAqLwotCUlkMiA9IGluYihMUENfREFUQV9BRERSKTsKLQlJZCA9IChJZDEgPDwgOCkgfCBJZDI7Ci0JTFBDRXhpdE1CUG5QKCk7Ci0JaWYgKElkID09IDB4ODcxMikKLQkJcmV0dXJuIFRSVUU7Ci0JZWxzZQotCQlyZXR1cm4gRkFMU0U7Ci19Ci0KLXZvaWQgSW5pdExQQ0ludGVyZmFjZSh2b2lkKQotewotCXVuc2lnbmVkIGNoYXIgYnVzLCBkZXZfZm47Ci0JdW5zaWduZWQgbG9uZyBkYXRhOwotCi0JYnVzID0gMDsKLQlkZXZfZm4gPSAxPDwzIHwgNDsKLQotCi0JLyogcGNpIGNtZCwgU0VSUiMgRW5hYmxlICovCi0JSVRfV1JJVEUoSVRfQ09ORkFERFIsCi0JCSAoYnVzICAgICAgICAgPDwgSVRfQlVTTlVNX1NIRikgICB8Ci0JCSAoZGV2X2ZuICAgICAgPDwgSVRfRlVOQ05VTV9TSEYpIHwKLQkJICgoMHg0IC8gNCkgPDwgSVRfUkVHTlVNX1NIRikpOwotCUlUX1JFQUQoSVRfQ09ORkRBVEEsIGRhdGEpOwotCWRhdGEgfD0gMHgwMTAwOwotCUlUX1dSSVRFKElUX0NPTkZBRERSLAotCQkgKGJ1cyAgICAgICAgIDw8IElUX0JVU05VTV9TSEYpICAgfAotCQkgKGRldl9mbiAgICAgIDw8IElUX0ZVTkNOVU1fU0hGKSB8Ci0JCSAoKDB4NCAvIDQpIDw8IElUX1JFR05VTV9TSEYpKTsKLQlJVF9XUklURShJVF9DT05GREFUQSwgZGF0YSk7Ci0KLQkvKiBzZXR1cCBzZXJpYWwgaXJxIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQlJVF9XUklURShJVF9DT05GQUREUiwKLQkJIChidXMgICAgICAgICA8PCBJVF9CVVNOVU1fU0hGKSAgIHwKLQkJIChkZXZfZm4gICAgICA8PCBJVF9GVU5DTlVNX1NIRikgfAotCQkgKCgweDQ4IC8gNCkgPDwgSVRfUkVHTlVNX1NIRikpOwotCUlUX1JFQUQoSVRfQ09ORkRBVEEsIGRhdGEpOwotCWRhdGEgID0gKGRhdGEgJiAweGZmZmYwMGZmKSB8IDB4YzQwMDsKLQlJVF9XUklURShJVF9DT05GQUREUiwKLQkJIChidXMgICAgICAgICA8PCBJVF9CVVNOVU1fU0hGKSAgIHwKLQkJIChkZXZfZm4gICAgICA8PCBJVF9GVU5DTlVNX1NIRikgfAotCQkgKCgweDQ4IC8gNCkgPDwgSVRfUkVHTlVNX1NIRikpOwotCUlUX1dSSVRFKElUX0NPTkZEQVRBLCBkYXRhKTsKLQotCi0JLyogRW5hYmxlIEkvTyBTcGFjZSBTdWJ0cmFjdGl2ZSBEZWNvZGUgKi8KLQkvKiBkZWZhdWx0IDB4NEMgaXMgMHgzZjIyMDAwMCAqLwotCUlUX1dSSVRFKElUX0NPTkZBRERSLAotCQkgKGJ1cyAgICAgICAgIDw8IElUX0JVU05VTV9TSEYpICAgfAotCQkgKGRldl9mbiAgICAgIDw8IElUX0ZVTkNOVU1fU0hGKSB8Ci0JCSAoKDB4NEMgLyA0KSA8PCBJVF9SRUdOVU1fU0hGKSk7Ci0JSVRfV1JJVEUoSVRfQ09ORkRBVEEsIDB4M2YyMjAwZjMpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9wbW9uX3Byb20uYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvcG1vbl9wcm9tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMGE3OWIuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9wbW9uX3Byb20uYworKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKgotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICogICAgUFJPTSBsaWJyYXJ5IGluaXRpYWxpc2F0aW9uIGNvZGUsIGFzc3VtaW5nIGEgdmVyc2lvbiBvZgotICogICAgcG1vbiBpcyB0aGUgYm9vdCBjb2RlLgotICoKLSAqIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIAlwcG9wb3ZAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqIFRoaXMgZmlsZSB3YXMgZGVyaXZlZCBmcm9tIENhcnN0ZW4gTGFuZ2dhYXJkJ3MKLSAqIGFyY2gvbWlwcy9taXBzLWJvYXJkcy94eCBmaWxlcy4KLSAqCi0gKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCi0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0KLWV4dGVybiBpbnQgcHJvbV9hcmdjOwotZXh0ZXJuIGNoYXIgKipwcm9tX2FyZ3YsICoqcHJvbV9lbnZwOwotCi10eXBlZGVmIHN0cnVjdAotewotICAgIGNoYXIgKm5hbWU7Ci0vKiAgICBjaGFyICp2YWw7ICovCi19dF9lbnZfdmFyOwotCi0KLWNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKLX0KLQotdm9pZCAgX19pbml0IHByb21faW5pdF9jbWRsaW5lKHZvaWQpCi17Ci0JY2hhciAqY3A7Ci0JaW50IGFjdHI7Ci0KLQlhY3RyID0gMTsgLyogQWx3YXlzIGlnbm9yZSBhcmd2WzBdICovCi0KLQljcCA9ICYoYXJjc19jbWRsaW5lWzBdKTsKLQl3aGlsZShhY3RyIDwgcHJvbV9hcmdjKSB7Ci0JICAgICAgICBzdHJjcHkoY3AsIHByb21fYXJndlthY3RyXSk7Ci0JCWNwICs9IHN0cmxlbihwcm9tX2FyZ3ZbYWN0cl0pOwotCQkqY3ArKyA9ICcgJzsKLQkJYWN0cisrOwotCX0KLQlpZiAoY3AgIT0gJihhcmNzX2NtZGxpbmVbMF0pKSAvKiBnZXQgcmlkIG9mIHRyYWlsaW5nIHNwYWNlICovCi0JCS0tY3A7Ci0JKmNwID0gJ1wwJzsKLQotfQotCi0KLWNoYXIgKnByb21fZ2V0ZW52KGNoYXIgKmVudm5hbWUpCi17Ci0JLyoKLQkgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBnaXZlbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQkgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHN0b3JlZCBpbiB0aGUgZm9ybSBvZiAibWVtc2l6ZT02NCIuCi0JICovCi0KLQl0X2Vudl92YXIgKmVudiA9ICh0X2Vudl92YXIgKilwcm9tX2VudnA7Ci0JaW50IGk7Ci0KLQlpID0gc3RybGVuKGVudm5hbWUpOwotCi0Jd2hpbGUoZW52LT5uYW1lKSB7Ci0JCWlmKHN0cm5jbXAoZW52bmFtZSwgZW52LT5uYW1lLCBpKSA9PSAwKSB7Ci0JCQlyZXR1cm4oZW52LT5uYW1lICsgc3RybGVuKGVudm5hbWUpICsgMSk7Ci0JCX0KLQkJZW52Kys7Ci0JfQotCXJldHVybihOVUxMKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHN0cjJoZXhudW0odW5zaWduZWQgY2hhciBjKQotewotCWlmKGMgPj0gJzAnICYmIGMgPD0gJzknKQotCXJldHVybiBjIC0gJzAnOwotCWlmKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQotCXJldHVybiBjIC0gJ2EnICsgMTA7Ci0JcmV0dXJuIDA7IC8qIGZvbyAqLwotfQotCi11bnNpZ25lZCBsb25nIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgbG9uZyBfX2luaXQgcHJvbV9nZXRfbWVtc2l6ZSh2b2lkKQotewotCWNoYXIgKm1lbXNpemVfc3RyOwotCXVuc2lnbmVkIGludCBtZW1zaXplOwotCi0JbWVtc2l6ZV9zdHIgPSBwcm9tX2dldGVudigibWVtc2l6ZSIpOwotCWlmICghbWVtc2l6ZV9zdHIpIHsKLSNpZmRlZiBDT05GSUdfTUlQU19JVEU4MTcyCi0JCW1lbXNpemUgPSAzMjsKLSNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfSVZSKQotCQltZW1zaXplID0gNjQ7Ci0jZWxzZQotCQltZW1zaXplID0gODsKLSNlbmRpZgotCQlwcmludGsoIm1lbXNpemUgdW5rbm93bjogc2V0dGluZyB0byAlZE1CXG4iLCBtZW1zaXplKTsKLQl9IGVsc2UgewotCQlwcmludGsoIm1lbXNpemU6ICVzXG4iLCBtZW1zaXplX3N0cik7Ci0JCW1lbXNpemUgPSBzaW1wbGVfc3RydG9sKG1lbXNpemVfc3RyLCBOVUxMLCAwKTsKLQl9Ci0JcmV0dXJuIG1lbXNpemU7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL3B1dHMuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvcHV0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGIwMmRmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvcHV0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglMb3cgbGV2ZWwgdWFydCByb3V0aW5lcyB0byBkaXJlY3RseSBhY2Nlc3MgYSAxNjU1MCB1YXJ0LgotICoKLSAqIENvcHlyaWdodCAyMDAwLDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jZGVmaW5lIFNFUklBTF9CQVNFICAgMHhCNDAxMTgwMAkvKiBpdDgxNzIgKi8KLSNkZWZpbmUgU0VSX0NNRCAgICAgICA1Ci0jZGVmaW5lIFNFUl9EQVRBICAgICAgMHgwMAotI2RlZmluZSBUWF9CVVNZICAgICAgIDB4MjAKLQotI2RlZmluZSBUSU1FT1VUICAgICAgIDB4ZmZmZgotI3VuZGVmIFNMT1dfRE9XTgotCi1zdGF0aWMgY29uc3QgY2hhciBkaWdpdHNbMTZdID0gIjAxMjM0NTY3ODlhYmNkZWYiOwotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmNvbnN0IGNvbTEgPSAodW5zaWduZWQgY2hhciAqKSBTRVJJQUxfQkFTRTsKLQotCi0jaWZkZWYgU0xPV19ET1dOCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xvd19kb3duKCkKLXsKLQlpbnQgazsKLQlmb3IgKGsgPSAwOyBrIDwgMTAwMDA7IGsrKyk7Ci19Ci0jZWxzZQotI2RlZmluZSBzbG93X2Rvd24oKQotI2VuZGlmCi0KLXZvaWQgcHV0Y2goY29uc3QgdW5zaWduZWQgY2hhciBjKQotewotCXVuc2lnbmVkIGNoYXIgY2g7Ci0JaW50IGkgPSAwOwotCi0JZG8gewotCQljaCA9IGNvbTFbU0VSX0NNRF07Ci0JCXNsb3dfZG93bigpOwotCQlpKys7Ci0JCWlmIChpID4gVElNRU9VVCkgewotCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlICgwID09IChjaCAmIFRYX0JVU1kpKTsKLQljb20xW1NFUl9EQVRBXSA9IGM7Ci19Ci0KLXZvaWQgcHV0cyh1bnNpZ25lZCBjaGFyICpjcCkKLXsKLQl1bnNpZ25lZCBjaGFyIGNoOwotCWludCBpID0gMDsKLQotCXdoaWxlICgqY3ApIHsKLQkJZG8gewotCQkJY2ggPSBjb20xW1NFUl9DTURdOwotCQkJc2xvd19kb3duKCk7Ci0JCQlpKys7Ci0JCQlpZiAoaSA+IFRJTUVPVVQpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSB3aGlsZSAoMCA9PSAoY2ggJiBUWF9CVVNZKSk7Ci0JCWNvbTFbU0VSX0RBVEFdID0gKmNwKys7Ci0JfQotCXB1dGNoKCdccicpOwotCXB1dGNoKCdcbicpOwotfQotCi12b2lkIGZwdXRzKHVuc2lnbmVkIGNoYXIgKmNwKQotewotCXVuc2lnbmVkIGNoYXIgY2g7Ci0JaW50IGkgPSAwOwotCi0Jd2hpbGUgKCpjcCkgewotCi0JCWRvIHsKLQkJCWNoID0gY29tMVtTRVJfQ01EXTsKLQkJCXNsb3dfZG93bigpOwotCQkJaSsrOwotCQkJaWYgKGkgPiBUSU1FT1VUKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gd2hpbGUgKDAgPT0gKGNoICYgVFhfQlVTWSkpOwotCQljb20xW1NFUl9EQVRBXSA9ICpjcCsrOwotCX0KLX0KLQotCi12b2lkIHB1dDY0KHVpbnQ2NF90IHVsKQotewotCWludCBjbnQ7Ci0JdW5zaWduZWQgY2g7Ci0KLQljbnQgPSAxNjsJCS8qIDE2IG5pYmJsZXMgaW4gYSA2NCBiaXQgbG9uZyAqLwotCXB1dGNoKCcwJyk7Ci0JcHV0Y2goJ3gnKTsKLQlkbyB7Ci0JCWNudC0tOwotCQljaCA9ICh1bnNpZ25lZCBjaGFyKSAodWwgPj4gY250ICogNCkgJiAweDBGOwotCQlwdXRjaChkaWdpdHNbY2hdKTsKLQl9IHdoaWxlIChjbnQgPiAwKTsKLX0KLQotdm9pZCBwdXQzMih1bnNpZ25lZCB1KQotewotCWludCBjbnQ7Ci0JdW5zaWduZWQgY2g7Ci0KLQljbnQgPSA4OwkJLyogOCBuaWJibGVzIGluIGEgMzIgYml0IGxvbmcgKi8KLQlwdXRjaCgnMCcpOwotCXB1dGNoKCd4Jyk7Ci0JZG8gewotCQljbnQtLTsKLQkJY2ggPSAodW5zaWduZWQgY2hhcikgKHUgPj4gY250ICogNCkgJiAweDBGOwotCQlwdXRjaChkaWdpdHNbY2hdKTsKLQl9IHdoaWxlIChjbnQgPiAwKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvcmVzZXQuYyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvcmVzZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNiZDViYS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL3Jlc2V0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJSVRFIDgxNzIgcmVzZXQgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLQotdm9pZCBpdDgxNzJfcmVzdGFydCgpCi17Ci0Jc2V0X2MwX3N0YXR1cyhTVDBfQkVWIHwgU1QwX0VSTCk7Ci0JY2hhbmdlX2MwX2NvbmZpZyhDT05GX0NNX0NNQVNLLCBDT05GX0NNX1VOQ0FDSEVEKTsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQl3cml0ZV9jMF93aXJlZCgwKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygianJcdCUwIjo6InIiKDB4YmZjMDAwMDApKTsKLX0KLQotdm9pZCBpdDgxNzJfaGFsdCh2b2lkKQotewotCXByaW50ayhLRVJOX05PVElDRSAiXG4qKiBZb3UgY2FuIHNhZmVseSB0dXJuIG9mZiB0aGUgcG93ZXJcbiIpOwotCXdoaWxlICgxKQotCQlfX2FzbV9fKCIuc2V0XHRtaXBzM1xuXHQiCi0JICAgICAgICAgICAgICAgICJ3YWl0XG5cdCIKLQkJCSIuc2V0XHRtaXBzMCIpOwotfQotCi12b2lkIGl0ODE3Ml9wb3dlcl9vZmYodm9pZCkKLXsKLQlpdDgxNzJfaGFsdCgpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy90aW1lLmMgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL3RpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RjNTU1Ni4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL3RpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IEp1biBTdW4sIGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAqCi0gKiBTZXR0aW5nIHVwIHRoZSBjbG9jayBvbiB0aGUgTUlQUyBib2FyZHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Mi5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyX2ludC5oPgotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgotCi0jZGVmaW5lIElUODE3Ml9SVENfQURSX1JFRyAgKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1JUQ19CQVNFKQotI2RlZmluZSBJVDgxNzJfUlRDX0RBVF9SRUcgIChJVDgxNzJfUlRDX0FEUl9SRUcgKyAxKQotI2RlZmluZSBJVDgxNzJfUlRDX0NFTlRVUllfUkVHICAoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfUlRDX0NFTlRVUlkpCi0KLXN0YXRpYyB2b2xhdGlsZSBjaGFyICpydGNfYWRyX3JlZyA9IChjaGFyKilLU0VHMUFERFIoSVQ4MTcyX1JUQ19BRFJfUkVHKTsKLXN0YXRpYyB2b2xhdGlsZSBjaGFyICpydGNfZGF0X3JlZyA9IChjaGFyKilLU0VHMUFERFIoSVQ4MTcyX1JUQ19EQVRfUkVHKTsKLXN0YXRpYyB2b2xhdGlsZSBjaGFyICpydGNfY2VudHVyeV9yZWcgPSAoY2hhciopS1NFRzFBRERSKElUODE3Ml9SVENfQ0VOVFVSWV9SRUcpOwotCi11bnNpZ25lZCBjaGFyIGl0ODE3Ml9ydGNfcmVhZF9kYXRhKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl1bnNpZ25lZCBjaGFyIHJldHZhbDsKLQotCSpydGNfYWRyX3JlZyA9IGFkZHI7Ci0JcmV0dmFsID0gICpydGNfZGF0X3JlZzsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi12b2lkIGl0ODE3Ml9ydGNfd3JpdGVfZGF0YSh1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkqcnRjX2Fkcl9yZWcgPSBhZGRyOwotCSpydGNfZGF0X3JlZyA9IGRhdGE7Ci19Ci0KLSN1bmRlZiAJQ01PU19SRUFECi0jdW5kZWYgCUNNT1NfV1JJVEUKLSNkZWZpbmUJQ01PU19SRUFEKGFkZHIpCQkJaXQ4MTcyX3J0Y19yZWFkX2RhdGEoYWRkcikKLSNkZWZpbmUgQ01PU19XUklURShkYXRhLCBhZGRyKSAJCWl0ODE3Ml9ydGNfd3JpdGVfZGF0YShkYXRhLCBhZGRyKQotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzYXZlZF9jb250cm9sOwkvKiByZW1lbWJlciBydGMgY29udHJvbCByZWcgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJ0Y18yNGgodm9pZCkgeyByZXR1cm4gc2F2ZWRfY29udHJvbCAmIFJUQ18yNEg7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHJ0Y19kbV9iaW5hcnkodm9pZCkgeyByZXR1cm4gc2F2ZWRfY29udHJvbCAmIFJUQ19ETV9CSU5BUlk7IH0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyCi1iaW5fdG9faHcodW5zaWduZWQgY2hhciBjKQotewotCWlmIChydGNfZG1fYmluYXJ5KCkpCi0JCXJldHVybiBjOwotCWVsc2UKLQkJcmV0dXJuICgoYy8xMCkgPDwgNCkgKyAoYyUxMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhcgotaHdfdG9fYmluKHVuc2lnbmVkIGNoYXIgYykKLXsKLQlpZiAocnRjX2RtX2JpbmFyeSgpKQotCQlyZXR1cm4gYzsKLQllbHNlCi0JCXJldHVybiAoYz4+NCkqMTAgKyAoYyAmMHhmKTsKLX0KLQotLyogMHg4MCBiaXQgaW5kaWNhdGVzIHBtIGluIDEyLWhvdXIgZm9ybWF0ICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIKLWhvdXJfYmluX3RvX2h3KHVuc2lnbmVkIGNoYXIgYykKLXsKLQlpZiAocnRjXzI0aCgpKQotCQlyZXR1cm4gYmluX3RvX2h3KGMpOwotCWlmIChjID49IDEyKQotCQlyZXR1cm4gMHg4MCB8IGJpbl90b19odygoYz09MTIpPzEyOmMtMTIpOyAgLyogMTIgaXMgMTJwbSAqLwotCWVsc2UKLQkJcmV0dXJuIGJpbl90b19odygoYz09MCk/MTI6Yyk7CS8qIDAgaXMgMTIgQU0sIG5vdCAwIGFtICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhcgotaG91cl9od190b19iaW4odW5zaWduZWQgY2hhciBjKQotewotCXVuc2lnbmVkIGNoYXIgdG1wID0gaHdfdG9fYmluKGMmMHgzZik7Ci0JaWYgKHJ0Y18yNGgoKSkKLQkJcmV0dXJuIHRtcDsKLQlpZiAoYyAmIDB4ODApCi0JCXJldHVybiAodG1wPT0xMik/MTI6dG1wKzEyOyAgCS8qIDEycG0gaXMgMTIsIG5vdCAyNCAqLwotCWVsc2UKLQkJcmV0dXJuICh0bXA9PTEyKT8wOnRtcDsJCS8qIDEyYW0gaXMgMCAqLwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyByNGtfb2Zmc2V0OyAvKiBBbW91bnQgdG8gaW5jcmVtZW50IGNvbXBhcmUgcmVnIGVhY2ggdGltZSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcjRrX2N1cjsgICAgLyogV2hhdCBjb3VudGVyIHNob3VsZCBiZSBhdCBuZXh0IHRpbWVyIGlycSAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBtaXBzX2hwdF9mcmVxdWVuY3k7Ci0KLS8qCi0gKiBGaWd1cmUgb3V0IHRoZSByNGsgb2Zmc2V0LCB0aGUgYW1vdW50IHRvIGluY3JlbWVudCB0aGUgY29tcGFyZQotICogcmVnaXN0ZXIgZm9yIGVhY2ggdGltZSB0aWNrLgotICogVXNlIHRoZSBSVEMgdG8gY2FsY3VsYXRlIG9mZnNldC4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGNhbF9yNGtvZmYodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQkvKiBTdGFydCBjb3VudGVyIGV4YWN0bHkgb24gZmFsbGluZyBlZGdlIG9mIHVwZGF0ZSBmbGFnICovCi0Jd2hpbGUgKENNT1NfUkVBRChSVENfUkVHX0EpICYgUlRDX1VJUCk7Ci0Jd2hpbGUgKCEoQ01PU19SRUFEKFJUQ19SRUdfQSkgJiBSVENfVUlQKSk7Ci0KLQkvKiBTdGFydCByNGsgY291bnRlci4gKi8KLQl3cml0ZV9jMF9jb3VudCgwKTsKLQotCS8qIFJlYWQgY291bnRlciBleGFjdGx5IG9uIGZhbGxpbmcgZWRnZSBvZiB1cGRhdGUgZmxhZyAqLwotCXdoaWxlIChDTU9TX1JFQUQoUlRDX1JFR19BKSAmIFJUQ19VSVApOwotCXdoaWxlICghKENNT1NfUkVBRChSVENfUkVHX0EpICYgUlRDX1VJUCkpOwotCi0JbWlwc19ocHRfZnJlcXVlbmN5ID0gcmVhZF9jMF9jb3VudCgpOwotCi0JLyogcmVzdG9yZSBpbnRlcnJ1cHRzICovCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIChtaXBzX2hwdF9mcmVxdWVuY3kgLyBIWik7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1pdDgxNzJfcnRjX2dldF90aW1lKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYzsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0KLQkvKiBhdm9pZCB1cGRhdGUtaW4tcHJvZ3Jlc3MuICovCi0JZm9yICg7OykgewotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWlmICghIChDTU9TX1JFQUQoUlRDX1JFR19BKSAmIFJUQ19VSVApKQotCQkJYnJlYWs7Ci0JCS8qIGRvbid0IGhvbGQgaW50ciBjbG9zZWQgYWxsIHRoZSB0aW1lICovCi0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9Ci0KLQkvKiBSZWFkIHJlZ3MuICovCi0Jc2VjID0gaHdfdG9fYmluKENNT1NfUkVBRChSVENfU0VDT05EUykpOwotCW1pbiA9IGh3X3RvX2JpbihDTU9TX1JFQUQoUlRDX01JTlVURVMpKTsKLQlob3VyID0gaG91cl9od190b19iaW4oQ01PU19SRUFEKFJUQ19IT1VSUykpOwotCWRheSA9IGh3X3RvX2JpbihDTU9TX1JFQUQoUlRDX0RBWV9PRl9NT05USCkpOwotCW1vbiA9IGh3X3RvX2JpbihDTU9TX1JFQUQoUlRDX01PTlRIKSk7Ci0JeWVhciA9IGh3X3RvX2JpbihDTU9TX1JFQUQoUlRDX1lFQVIpKSArCi0JCWh3X3RvX2JpbigqcnRjX2NlbnR1cnlfcmVnKSAqIDEwMDsKLQotCS8qIHJlc3RvcmUgaW50ZXJydXB0cyAqLwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiBta3RpbWUoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKLX0KLQotc3RhdGljIGludAotaXQ4MTcyX3J0Y19zZXRfdGltZSh1bnNpZ25lZCBsb25nIHQpCi17Ci0Jc3RydWN0IHJ0Y190aW1lIHRtOwotCXVuc2lnbmVkIGludCBmbGFnczsKLQotCS8qIGNvbnZlcnQgKi8KLQl0b190bSh0LCAmdG0pOwotCi0JLyogYXZvaWQgdXBkYXRlLWluLXByb2dyZXNzLiAqLwotCWZvciAoOzspIHsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlpZiAoISAoQ01PU19SRUFEKFJUQ19SRUdfQSkgJiBSVENfVUlQKSkKLQkJCWJyZWFrOwotCQkvKiBkb24ndCBob2xkIGludHIgY2xvc2VkIGFsbCB0aGUgdGltZSAqLwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQotCi0JKnJ0Y19jZW50dXJ5X3JlZyA9IGJpbl90b19odyh0bS50bV95ZWFyLzEwMCk7Ci0JQ01PU19XUklURShiaW5fdG9faHcodG0udG1fc2VjKSwgUlRDX1NFQ09ORFMpOwotCUNNT1NfV1JJVEUoYmluX3RvX2h3KHRtLnRtX21pbiksIFJUQ19NSU5VVEVTKTsKLQlDTU9TX1dSSVRFKGhvdXJfYmluX3RvX2h3KHRtLnRtX2hvdXIpLCBSVENfSE9VUlMpOwotCUNNT1NfV1JJVEUoYmluX3RvX2h3KHRtLnRtX21kYXkpLCBSVENfREFZX09GX01PTlRIKTsKLQlDTU9TX1dSSVRFKGJpbl90b19odyh0bS50bV9tb24rMSksIFJUQ19NT05USCk7CS8qIHRtX21vbiBzdGFydHMgZnJvbSAwICovCi0JQ01PU19XUklURShiaW5fdG9faHcodG0udG1feWVhciUxMDApLCBSVENfWUVBUik7Ci0KLQkvKiByZXN0b3JlIGludGVycnVwdHMgKi8KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBfX2luaXQgaXQ4MTcyX3RpbWVfaW5pdCh2b2lkKQotewotICAgICAgICB1bnNpZ25lZCBpbnQgZXN0X2ZyZXEsIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0Jc2F2ZWRfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7Ci0KLQlwcmludGsoImNhbGN1bGF0aW5nIHI0a29mZi4uLiAiKTsKLQlyNGtfb2Zmc2V0ID0gY2FsX3I0a29mZigpOwotCXByaW50aygiJTA4bHgoJWQpXG4iLCByNGtfb2Zmc2V0LCAoaW50KSByNGtfb2Zmc2V0KTsKLQotCWVzdF9mcmVxID0gMipyNGtfb2Zmc2V0KkhaOwotCWVzdF9mcmVxICs9IDUwMDA7ICAgIC8qIHJvdW5kICovCi0JZXN0X2ZyZXEgLT0gZXN0X2ZyZXElMTAwMDA7Ci0JcHJpbnRrKCJDUFUgZnJlcXVlbmN5ICVkLiUwMmQgTUh6XG4iLCBlc3RfZnJlcS8xMDAwMDAwLAotCSAgICAgICAoZXN0X2ZyZXElMTAwMDAwMCkqMTAwLzEwMDAwMDApOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcnRjX21pcHNfZ2V0X3RpbWUgPSBpdDgxNzJfcnRjX2dldF90aW1lOwotCXJ0Y19taXBzX3NldF90aW1lID0gaXQ4MTcyX3J0Y19zZXRfdGltZTsKLX0KLQotI2RlZmluZSBBTExJTlRTIChJRV9JUlEwIHwgSUVfSVJRMSB8IElFX0lSUTIgfCBJRV9JUlEzIHwgSUVfSVJRNCB8IElFX0lSUTUpCi0KLXZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQotewotCXB1dHMoInRpbWVyX3NldHVwXG4iKTsKLQlwdXQzMihOUl9JUlFTKTsKLQlwdXRzKCIiKTsKLSAgICAgICAgLyogd2UgYXJlIHVzaW5nIHRoZSBjcHUgY291bnRlciBmb3IgdGltZXIgaW50ZXJydXB0cyAqLwotCXNldHVwX2lycShNSVBTX0NQVV9USU1FUl9JUlEsIGlycSk7Ci0KLSAgICAgICAgLyogdG8gZ2VuZXJhdGUgdGhlIGZpcnN0IHRpbWVyIGludGVycnVwdCAqLwotCXI0a19jdXIgPSAocmVhZF9jMF9jb3VudCgpICsgcjRrX29mZnNldCk7Ci0Jd3JpdGVfYzBfY29tcGFyZShyNGtfY3VyKTsKLQlzZXRfYzBfc3RhdHVzKEFMTElOVFMpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvaXZyL01ha2VmaWxlIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvaXZyL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGZhNjA0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2l2ci9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSMKLSMgIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotIyAgQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0jICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBHbG9iZXNwYW4gSVZSIGJvYXJkLAotIyBib2FyZC1zcGVjaWZpYyBmaWxlcy4KLSMKLQotb2JqLXkJCSs9IGluaXQubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvaXZyL1JFQURNRSBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2l2ci9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhN2Q4ZGIuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvaXZyL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotVGhpcyBpcyBub3QgcmVhbGx5IGEgYm9hcmQgbWFkZSBieSBJVEUgU2VtaSwgYnV0IGl0J3MgdmVyeQotc2ltaWxhciB0byB0aGUgSVRFIFFFRC00Ti1TMDFCIGJvYXJkLiAgVGhlIElWUiBib2FyZCBpcyBtYWRlCi1ieSBHbG9iZXNwYW4gYW5kIGl0J3MgYSByZWZlcmVuY2UgYm9hcmQgZm9yIHRoZSBQVlIgY2hpcC4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2l2ci9pbml0LmMgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9pdnIvaW5pdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWNmOTIxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2l2ci9pbml0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglJVlIgYm9hcmQgc2V0dXAuCi0gKgotICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyLmg+Ci0jaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzJfZGJnLmg+Ci0KLWludCBwcm9tX2FyZ2M7Ci1jaGFyICoqcHJvbV9hcmd2LCAqKnByb21fZW52cDsKLQotZXh0ZXJuIHZvaWQgIF9faW5pdCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBwcm9tX2dldF9tZW1zaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IGl0ODE3Ml9pbml0X3JhbV9yZXNvdXJjZSh1bnNpZ25lZCBsb25nIG1lbXNpemUpOwotCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gIkdsb2Jlc3BhbiBJVlIiOwotfQotCi12b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG1lbV9zaXplOwotCXVuc2lnbmVkIGxvbmcgcGNpY3I7Ci0KLQlwcm9tX2FyZ2MgPSBmd19hcmcwOwotCXByb21fYXJndiA9IChjaGFyICoqKSBmd19hcmcxOwotCXByb21fZW52cCA9IChpbnQgKikgZndfYXJnMzsKLQotCW1pcHNfbWFjaGdyb3VwID0gTUFDSF9HUk9VUF9HTE9CRVNQQU47Ci0JbWlwc19tYWNodHlwZSA9IE1BQ0hfSVZSOyAgLyogR2xvYmVzcGFuJ3MgaVRWQzE1IHJlZmVyZW5jZSBib2FyZCAqLwotCi0JcHJvbV9pbml0X2NtZGxpbmUoKTsKLQotCS8qIHBtb24gZG9lcyBub3Qgc2V0IG1lbXNpemUgKi8KLQltZW1fc2l6ZSA9IHByb21fZ2V0X21lbXNpemUoKTsKLQltZW1fc2l6ZSA9IG1lbV9zaXplIDw8IDIwOwotCi0JLyoKLQkgKiBtYWtlIHRoZSBlbnRpcmUgcGh5c2ljYWwgbWVtb3J5IHZpc2libGUgdG8gcGNpIGJ1cyBtYXN0ZXJzCi0JICovCi0JSVRfUkVBRChJVF9NQ19QQ0lDUiwgcGNpY3IpOwotCXBjaWNyICY9IH4weDFmOwotCXBjaWNyIHw9IChtZW1fc2l6ZSAtIDEpID4+IDIyOwotCUlUX1dSSVRFKElUX01DX1BDSUNSLCBwY2ljcik7Ci0KLQlpdDgxNzJfaW5pdF9yYW1fcmVzb3VyY2UobWVtX3NpemUpOwotCWFkZF9tZW1vcnlfcmVnaW9uKDAsIG1lbV9zaXplLCBCT09UX01FTV9SQU0pOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvcWVkLTRuLXMwMWIvTWFrZWZpbGUgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9xZWQtNG4tczAxYi9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI5OTcyYS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9xZWQtNG4tczAxYi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSMKLSMgIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotIyAgQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0jICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBJVEUgODE3MiAocWVkLTRuLXMwMWIpIGJvYXJkLCBib2FyZAotIyBzcGVjaWZpYyBmaWxlcy4KLSMKLQotb2JqLXkgOj0gaW5pdC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9xZWQtNG4tczAxYi9SRUFETUUgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9xZWQtNG4tczAxYi9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNGI1MTkuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvcWVkLTRuLXMwMWIvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1UaGlzIGlzIGFuIElURSAod3d3Lml0ZXVzYS5jb20pIGV2YWwgYm9hcmQgZm9yIHRoZSBJVEUgODE3MkcKLXN5c3RlbSBjb250cm9sbGVyLCB3aXRoIGEgUUVEIDUyMzEgQ1BVLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2l0ZS1ib2FyZHMvcWVkLTRuLXMwMWIvaW5pdC5jIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvcWVkLTRuLXMwMWIvaW5pdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTJhNzU0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL3FlZC00bi1zMDFiL2luaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUlUODE3Mi9RRUQ1MjMxIGJvYXJkIHNldHVwLgotICoKLSAqIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIAlwcG9wb3ZAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Mi5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyX2RiZy5oPgotCi1pbnQgcHJvbV9hcmdjOwotY2hhciAqKnByb21fYXJndiwgKipwcm9tX2VudnA7Ci0KLWV4dGVybiB2b2lkICBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgcHJvbV9nZXRfbWVtc2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW5pdCBpdDgxNzJfaW5pdF9yYW1fcmVzb3VyY2UodW5zaWduZWQgbG9uZyBtZW1zaXplKTsKLQotY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCi17Ci0JcmV0dXJuICJJVEUgUUVELTROLVMwMUIiOwotfQotCi12b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG1lbV9zaXplOwotCXVuc2lnbmVkIGxvbmcgcGNpY3I7Ci0KLQlwcm9tX2FyZ2MgPSBmd19hcmcwOwotCXByb21fYXJndiA9IChjaGFyICoqKSBmd19hcmcxOwotCXByb21fZW52cCA9IChpbnQgKikgZndfYXJnMzsKLQotCW1pcHNfbWFjaGdyb3VwID0gTUFDSF9HUk9VUF9JVEU7Ci0JbWlwc19tYWNodHlwZSA9IE1BQ0hfUUVEXzROX1MwMUI7ICAvKiBJVEUgYm9hcmQgbmFtZS9udW1iZXIgKi8KLQotCXByb21faW5pdF9jbWRsaW5lKCk7Ci0JbWVtX3NpemUgPSBwcm9tX2dldF9tZW1zaXplKCk7Ci0KLQlwcmludGsoIk1lbW9yeSBzaXplOiAlZE1CXG4iLCAodW5zaWduZWQpbWVtX3NpemUpOwotCi0JbWVtX3NpemUgPDw9IDIwOyAvKiBNQiAqLwotCi0JLyoKLQkgKiBtYWtlIHRoZSBlbnRpcmUgcGh5c2ljYWwgbWVtb3J5IHZpc2libGUgdG8gcGNpIGJ1cyBtYXN0ZXJzCi0JICovCi0JSVRfUkVBRChJVF9NQ19QQ0lDUiwgcGNpY3IpOwotCXBjaWNyICY9IH4weDFmOwotCXBjaWNyIHw9IChtZW1fc2l6ZSAtIDEpID4+IDIyOwotCUlUX1dSSVRFKElUX01DX1BDSUNSLCBwY2ljcik7Ci0KLQlpdDgxNzJfaW5pdF9yYW1fcmVzb3VyY2UobWVtX3NpemUpOwotCWFkZF9tZW1vcnlfcmVnaW9uKDAsIG1lbV9zaXplLCBCT09UX01FTV9SQU0pOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMgYi9hcmNoL21pcHMva2VybmVsL3RpbWUuYwppbmRleCA4NDVjN2U1Li5hODM0MDgwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RpbWUuYwpAQCAtMTQ5LDgwICsxNDksNiBAQAogdW5zaWduZWQgaW50ICgqbWlwc19ocHRfcmVhZCkodm9pZCk7CiB2b2lkICgqbWlwc19ocHRfaW5pdCkodW5zaWduZWQgaW50KTsKIAotCi0vKgotICogVGhpcyB2ZXJzaW9uIG9mIGdldHRpbWVvZmRheSBoYXMgbWljcm9zZWNvbmQgcmVzb2x1dGlvbiBhbmQgYmV0dGVyIHRoYW4KLSAqIG1pY3Jvc2Vjb25kIHByZWNpc2lvbiBvbiBmYXN0IG1hY2hpbmVzIHdpdGggY3ljbGUgY291bnRlci4KLSAqLwotdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQotewotCXVuc2lnbmVkIGxvbmcgc2VxOwotCXVuc2lnbmVkIGxvbmcgdXNlYywgc2VjOwotCXVuc2lnbmVkIGxvbmcgbWF4X250cF90aWNrOwotCi0JZG8gewotCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQotCQl1c2VjID0gZG9fZ2V0dGltZW9mZnNldCgpOwotCi0JCS8qCi0JCSAqIElmIHRpbWVfYWRqdXN0IGlzIG5lZ2F0aXZlIHRoZW4gTlRQIGlzIHNsb3dpbmcgdGhlIGNsb2NrCi0JCSAqIHNvIG1ha2Ugc3VyZSBub3QgdG8gZ28gaW50byBuZXh0IHBvc3NpYmxlIGludGVydmFsLgotCQkgKiBCZXR0ZXIgdG8gbG9zZSBzb21lIGFjY3VyYWN5IHRoYW4gaGF2ZSB0aW1lIGdvIGJhY2t3YXJkcy4uCi0JCSAqLwotCQlpZiAodW5saWtlbHkodGltZV9hZGp1c3QgPCAwKSkgewotCQkJbWF4X250cF90aWNrID0gKFVTRUNfUEVSX1NFQyAvIEhaKSAtIHRpY2thZGo7Ci0JCQl1c2VjID0gbWluKHVzZWMsIG1heF9udHBfdGljayk7Ci0JCX0KLQotCQlzZWMgPSB4dGltZS50dl9zZWM7Ci0JCXVzZWMgKz0gKHh0aW1lLnR2X25zZWMgLyAxMDAwKTsKLQotCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwotCi0Jd2hpbGUgKHVzZWMgPj0gMTAwMDAwMCkgewotCQl1c2VjIC09IDEwMDAwMDA7Ci0JCXNlYysrOwotCX0KLQotCXR2LT50dl9zZWMgPSBzZWM7Ci0JdHYtPnR2X3VzZWMgPSB1c2VjOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7Ci0KLWludCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dikKLXsKLQl0aW1lX3Qgd3RtX3NlYywgc2VjID0gdHYtPnR2X3NlYzsKLQlsb25nIHd0bV9uc2VjLCBuc2VjID0gdHYtPnR2X25zZWM7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpdHYtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQotCS8qCi0JICogVGhpcyBpcyByZXZvbHRpbmcuICBXZSBuZWVkIHRvIHNldCAieHRpbWUiIGNvcnJlY3RseS4gIEhvd2V2ZXIsCi0JICogdGhlIHZhbHVlIGluIHRoaXMgbG9jYXRpb24gaXMgdGhlIHZhbHVlIGF0IHRoZSBtb3N0IHJlY2VudCB1cGRhdGUKLQkgKiBvZiB3YWxsIHRpbWUuICBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5KCkgd291bGQgaGF2ZQotCSAqIG1hZGUsIGFuZCB0aGVuIHVuZG8gaXQhCi0JICovCi0JbnNlYyAtPSBkb19nZXR0aW1lb2Zmc2V0KCkgKiBOU0VDX1BFUl9VU0VDOwotCi0Jd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKLQl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnh0aW1lLCBzZWMsIG5zZWMpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywgd3RtX3NlYywgd3RtX25zZWMpOwotCi0JbnRwX2NsZWFyKCk7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JY2xvY2tfd2FzX3NldCgpOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7Ci0KIC8qCiAgKiBHZXR0aW1lb2Zmc2V0IHJvdXRpbmVzLiAgVGhlc2Ugcm91dGluZXMgcmV0dXJucyB0aGUgdGltZSBkdXJhdGlvbgogICogc2luY2UgbGFzdCB0aW1lciBpbnRlcnJ1cHQgaW4gdXNlY3MuCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCA1YjA2MzQ5Li44OGI3MmM5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTE2MywxMCArMTYzLDEwIEBACiAKIHZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyB6b25lc19zaXplW10gPSB7IDAsIH07CisJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU10gPSB7IDAsIH07CiAJdW5zaWduZWQgbG9uZyBtYXhfZG1hLCBoaWdoLCBsb3c7CiAjaWZuZGVmIENPTkZJR19GTEFUTUVNCi0JdW5zaWduZWQgbG9uZyB6aG9sZXNfc2l6ZVtdID0geyAwLCB9OworCXVuc2lnbmVkIGxvbmcgemhvbGVzX3NpemVbTUFYX05SX1pPTkVTXSA9IHsgMCwgfTsKIAl1bnNpZ25lZCBsb25nIGksIGosIHBmbjsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL01ha2VmaWxlIGIvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQppbmRleCBlZGVmYTk3Li4zY2YwZGQ0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKQEAgLTcsNyArNyw2IEBACiAjCiAjIFBDSSBidXMgaG9zdCBicmlkZ2Ugc3BlY2lmaWMgY29kZQogIwotb2JqLSQoQ09ORklHX0lURV9CT0FSRF9HRU4pCSs9IG9wcy1pdDgxNzIubwogb2JqLSQoQ09ORklHX01JUFNfQk9OSVRPNjQpCSs9IG9wcy1ib25pdG82NC5vCiBvYmotJChDT05GSUdfTUlQU19HVDY0MTExKQkrPSBvcHMtZ3Q2NDExMS5vCiBvYmotJChDT05GSUdfTUlQU19HVDY0MTIwKQkrPSBvcHMtZ3Q2NDEyMC5vCkBAIC0yOCw4ICsyNyw2IEBACiBvYmotJChDT05GSUdfTUlQU19BVExBUykJKz0gZml4dXAtYXRsYXMubwogb2JqLSQoQ09ORklHX01JUFNfQ09CQUxUKQkrPSBmaXh1cC1jb2JhbHQubwogb2JqLSQoQ09ORklHX01JUFNfRVY2NDEyMCkJKz0gZml4dXAtZXY2NDEyMC5vCi1vYmotJChDT05GSUdfTUlQU19JVEU4MTcyKQkrPSBmaXh1cC1pdGU4MTcyZy5vCi1vYmotJChDT05GSUdfTUlQU19JVlIpCQkrPSBmaXh1cC1pdnIubwogb2JqLSQoQ09ORklHX1NPQ19BVTE1MDApCSs9IGZpeHVwLWF1MTAwMC5vIG9wcy1hdTEwMDAubwogb2JqLSQoQ09ORklHX1NPQ19BVTE1NTApCSs9IGZpeHVwLWF1MTAwMC5vIG9wcy1hdTEwMDAubwogb2JqLSQoQ09ORklHX1NPQ19QTlg4NTUwKQkrPSBmaXh1cC1wbng4NTUwLm8gb3BzLXBueDg1NTAubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1pdGU4MTcyZy5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC1pdGU4MTcyZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjkwZWE0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtaXRlODE3MmcuYworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUJvYXJkIHNwZWNpZmljIHBjaSBmaXh1cHMuCi0gKgotICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Mi5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyX3BjaS5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyX2ludC5oPgotCi0vKgotICogU2hvcnRjdXRzCi0gKi8KLSNkZWZpbmUgSU5UQQlJVDgxNzJfUENJX0lOVEFfSVJRCi0jZGVmaW5lIElOVEIJSVQ4MTcyX1BDSV9JTlRCX0lSUQotI2RlZmluZSBJTlRDCUlUODE3Ml9QQ0lfSU5UQ19JUlEKLSNkZWZpbmUgSU5URAlJVDgxNzJfUENJX0lOVERfSVJRCi0KLXN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxfZnVuY19pcnFzWzddIF9faW5pdGRhdGEgPSB7Ci0JSVQ4MTcyX0FDOTdfSVJRLAotCUlUODE3Ml9ETUFfSVJRLAotCUlUODE3Ml9DRE1BX0lSUSwKLQlJVDgxNzJfVVNCX0lSUSwKLQlJVDgxNzJfQlJJREdFX01BU1RFUl9JUlEsCi0JSVQ4MTcyX0lERV9JUlEsCi0JSVQ4MTcyX01DNjhLX0lSUQotfTsKLQotc3RhdGljIGNoYXIgaXJxX3RhYl9pdGU4MTcyZ1tdWzVdIF9faW5pdGRhdGEgPSB7Ci0gWzB4MTBdID0gewkwLCBJTlRBLCBJTlRCLCBJTlRDLCBJTlREIH0sCi0gWzB4MTFdID0gewkwLCBJTlRBLCBJTlRCLCBJTlRDLCBJTlREIH0sCi0gWzB4MTJdID0gewkwLCBJTlRCLCBJTlRDLCBJTlRELCBJTlRBIH0sCi0gWzB4MTNdID0gewkwLCBJTlRDLCBJTlRELCBJTlRBLCBJTlRCIH0sCi0gWzB4MTRdID0gewkwLCBJTlRELCBJTlRBLCBJTlRCLCBJTlRDIH0sCi19OwotCi1pbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCi17Ci0JLyoKLQkgKiBJbnRlcm5hbCBkZXZpY2UgMSBpcyBhY3R1YWxseSA3IGRpZmZlcmVudCBpbnRlcm5hbCBkZXZpY2VzIG9uIHRoZQotCSAqIElUODE3MkcgKGEgbXVsdGlmdW5jdGlvbiBkZXZpY2UpLgotCSAqLwotCWlmIChzbG90ID09IDEpCi0JCXJldHVybiBpbnRlcm5hbF9mdW5jX2lycXNbUENJX0ZVTkMoZGV2LT5kZXZmbildOwotCi0JcmV0dXJuIGlycV90YWJfaXRlODE3Mmdbc2xvdF1bcGluXTsKLX0KLQotLyogRG8gcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIGluaXRpYWxpemF0aW9uIGF0IHBjaV9lbmFibGVfZGV2aWNlKCkgdGltZSAqLwotaW50IHBjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1pdnIuYyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtaXZyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjN2MxNjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3BjaS9maXh1cC1pdnIuYworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglHbG9iZXNwYW4gSVZSIGJvYXJkLXNwZWNpZmljIHBjaSBmaXh1cHMuCi0gKgotICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Mi5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyX3BjaS5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyX2ludC5oPgotCi0vKgotICogU2hvcnRjdXRzCi0gKi8KLSNkZWZpbmUgSU5UQQlJVDgxNzJfUENJX0lOVEFfSVJRCi0jZGVmaW5lIElOVEIJSVQ4MTcyX1BDSV9JTlRCX0lSUQotI2RlZmluZSBJTlRDCUlUODE3Ml9QQ0lfSU5UQ19JUlEKLSNkZWZpbmUgSU5URAlJVDgxNzJfUENJX0lOVERfSVJRCi0KLXN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxfZnVuY19pcnFzWzddIF9faW5pdGRhdGEgPSB7Ci0JSVQ4MTcyX0FDOTdfSVJRLAotCUlUODE3Ml9ETUFfSVJRLAotCUlUODE3Ml9DRE1BX0lSUSwKLQlJVDgxNzJfVVNCX0lSUSwKLQlJVDgxNzJfQlJJREdFX01BU1RFUl9JUlEsCi0JSVQ4MTcyX0lERV9JUlEsCi0JSVQ4MTcyX01DNjhLX0lSUQotfTsKLQotc3RhdGljIGNoYXIgaXJxX3RhYl9pdnJbXVs1XSBfX2luaXRkYXRhID0gewotIFsweDExXSA9IHsgSU5UQywgSU5UQywgSU5URCwgSU5UQSwgSU5UQiB9LAkvKiBSZWFsdGVrIFJUTC04MTM5CSovCi0gWzB4MTJdID0geyBJTlRCLCBJTlRCLCBJTlRCLCBJTlRDLCBJTlRDIH0sCS8qIElWUiBzbG90CQkqLwotIFsweDEzXSA9IHsgSU5UQSwgSU5UQSwgSU5UQiwgSU5UQywgSU5URCB9CS8qIEV4cGFuc2lvbiBzbG90CSovCi19OwotCi1pbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCi17Ci0JaWYgKHNsb3QgPT0gMSkKLQkJcmV0dXJuIGludGVybmFsX2Z1bmNfaXJxc1tQQ0lfRlVOQyhkZXYtPmRldmZuKV07Ci0KLQlyZXR1cm4gaXJxX3RhYl9pdnJbc2xvdF1bcGluXTsKLX0KLQotLyogRG8gcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIGluaXRpYWxpemF0aW9uIGF0IHBjaV9lbmFibGVfZGV2aWNlKCkgdGltZSAqLwotaW50IHBjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1zYjEyNTAuYyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtc2IxMjUwLmMKaW5kZXggMTM3OTFiNy4uN2E3NDQ0OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9maXh1cC1zYjEyNTAuYworKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLXNiMTI1MC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCWFyY2gvbWlwcy9wY2kvZml4dXAtc2IxMjUwLmMKICAqCi0gKglDb3B5cmlnaHQgKEMpIDIwMDQgIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoJQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2ICBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCSAgICBBdXRob3I6CU1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BtaXBzLmNvbT4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xNCw2ICsxNCwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAvKgorICogU2V0IHRoZSB0aGUgQkNNMTI1MCwgZXRjLiBQQ0kgaG9zdCBicmlkZ2UncyBUUkRZIHRpbWVvdXQKKyAqIHRvIHRoZSBmaW5pdGUgbWF4LgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfc2IxMjUwX3BjaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NDAsIDB4ZmYpOworfQorREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9TSUJZVEUsIFBDSV9ERVZJQ0VfSURfQkNNMTI1MF9QQ0ksCisJCQlxdWlya19zYjEyNTBfcGNpKTsKKworLyoKICAqIFRoZSBCQ00xMjUwLCBldGMuIFBDSS9IVCBicmlkZ2UgcmVwb3J0cyBhcyBhIGhvc3QgYnJpZGdlLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfc2IxMjUwX2h0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0yMiwzICszMywxMyBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9TSUJZVEUsIFBDSV9ERVZJQ0VfSURfQkNNMTI1MF9IVCwKIAkJCXF1aXJrX3NiMTI1MF9odCk7CisKKy8qCisgKiBTZXQgdGhlIHRoZSBTUDEwMTEgSFQvUENJIGJyaWRnZSdzIFRSRFkgdGltZW91dCB0byB0aGUgZmluaXRlIG1heC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHF1aXJrX3NwMTAxMShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NjQsIDB4ZmYpOworfQorREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9TSVBBQ0tFVFMsIFBDSV9ERVZJQ0VfSURfU1AxMDExLAorCQkJcXVpcmtfc3AxMDExKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWl0ODE3Mi5jIGIvYXJjaC9taXBzL3BjaS9vcHMtaXQ4MTcyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhODMyODUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtaXQ4MTcyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotLyoKLSAqCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUlUODE3MiBzeXN0ZW0gY29udHJvbGxlciBzcGVjaWZpYyBwY2kgc3VwcG9ydC4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzIuaD4KLSNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Ml9wY2kuaD4KLQotI2RlZmluZSBQQ0lfQUNDRVNTX1JFQUQgIDAKLSNkZWZpbmUgUENJX0FDQ0VTU19XUklURSAxCi0KLSN1bmRlZiBERUJVRwotI2lmZGVmIERFQlVHCi0jZGVmaW5lIERCRyh4Li4uKSBwcmludGsoeCkKLSNlbHNlCi0jZGVmaW5lIERCRyh4Li4uKQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbV9yZXNvdXJjZV8xOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9pb19yZXNvdXJjZSA9IHsKLQkuc3RhcnQJPSAweDE0MDE4MDAwLAotCS5lbmQJPSAweDE3RkZGRkZGLAotCS5uYW1lCT0gImlvIHBjaSBJTyBzcGFjZSIsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9JTwotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfbWVtX3Jlc291cmNlXzAgPSB7Ci0JLnN0YXJ0CT0gMHgxMDEwMTAwMCwKLQkuZW5kCT0gMHgxM0ZGRkZGRiwKLQkubmFtZQk9ICJleHQgcGNpIG1lbW9yeSBzcGFjZSAwLzEiLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCS5wYXJlbnQJPSAmcGNpX21lbV9yZXNvdXJjZV8wLAotCS5zaWJsaW5nID0gTlVMTCwKLQkuY2hpbGQJPSAmcGNpX21lbV9yZXNvdXJjZV8xCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9tZW1fcmVzb3VyY2VfMSA9IHsKLQkuc3RhcnQJPSAweDFBMDAwMDAwLAotCS5lbmQJPSAweDFGQkZGRkZGLAotCS5uYW1lCT0gImV4dCBwY2kgbWVtb3J5IHNwYWNlIDIvMyIsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JLnBhcmVudAk9ICZwY2lfbWVtX3Jlc291cmNlXzAKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgcGNpX29wcyBpdDgxNzJfcGNpX29wczsKLQotc3RydWN0IHBjaV9jb250cm9sbGVyIGl0ODE3Ml9jb250cm9sbGVyID0gewotCS5wY2lfb3BzCT0gJml0ODE3Ml9wY2lfb3BzLAotCS5pb19yZXNvdXJjZQk9ICZwY2lfaW9fcmVzb3VyY2UsCi0JLm1lbV9yZXNvdXJjZQk9ICZwY2lfbWVtX3Jlc291cmNlXzAsCi19OwotCi1zdGF0aWMgaW50IGl0ODE3Ml9wY2liaW9zX2NvbmZpZ19hY2Nlc3ModW5zaWduZWQgY2hhciBhY2Nlc3NfdHlwZSwKLQkJCQkJc3RydWN0IHBjaV9idXMgKmJ1cywKLQkJCQkJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCi0JCQkJCXUzMiAqIGRhdGEpCi17Ci0JLyoKLQkgKiBjb25maWcgY3ljbGVzIGFyZSBvbiA0IGJ5dGUgYm91bmRhcnkgb25seQotCSAqLwotCi0JLyogU2V0dXAgYWRkcmVzcyAqLwotCUlUX1dSSVRFKElUX0NPTkZBRERSLCAoYnVzLT5udW1iZXIgPDwgSVRfQlVTTlVNX1NIRikgfAotCQkgKGRldmZuIDw8IElUX0ZVTkNOVU1fU0hGKSB8ICh3aGVyZSAmIH4weDMpKTsKLQotCWlmIChhY2Nlc3NfdHlwZSA9PSBQQ0lfQUNDRVNTX1dSSVRFKSB7Ci0JCUlUX1dSSVRFKElUX0NPTkZEQVRBLCAqZGF0YSk7Ci0JfSBlbHNlIHsKLQkJSVRfUkVBRChJVF9DT05GREFUQSwgKmRhdGEpOwotCX0KLQotCS8qCi0JICogUmV2aXNpdDogY2hlY2sgZm9yIG1hc3RlciBvciB0YXJnZXQgYWJvcnQuCi0JICovCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIFdlIGNhbid0IGFkZHJlc3MgOCBhbmQgMTYgYml0IHdvcmRzIGRpcmVjdGx5LiAgSW5zdGVhZCB3ZSBoYXZlIHRvCi0gKiByZWFkL3dyaXRlIGEgMzJiaXQgd29yZCBhbmQgbWFzay9tb2RpZnkgdGhlIGRhdGEgd2UgYWN0dWFsbHkgd2FudC4KLSAqLwotc3RhdGljIHdyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKLQkJICAgIGludCBzaXplLCB1MzIgdmFsKQotewotCXUzMiBkYXRhID0gMDsKLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJaWYgKGl0ODE3Ml9wY2liaW9zX2NvbmZpZ19hY2Nlc3MKLQkJICAgIChQQ0lfQUNDRVNTX1JFQUQsIGRldiwgd2hlcmUsICZkYXRhKSkKLQkJCXJldHVybiAtMTsKLQotCQkqdmFsID0gKGRhdGEgPj4gKCh3aGVyZSAmIDMpIDw8IDMpKSAmIDB4ZmY7Ci0KLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotCWNhc2UgMjoKLQotCQlpZiAod2hlcmUgJiAxKQotCQkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKLQotCQlpZiAoaXQ4MTcyX3BjaWJpb3NfY29uZmlnX2FjY2VzcwotCQkgICAgKFBDSV9BQ0NFU1NfUkVBRCwgZGV2LCB3aGVyZSwgJmRhdGEpKQotCQkJcmV0dXJuIC0xOwotCi0JCSp2YWwgPSAoZGF0YSA+PiAoKHdoZXJlICYgMykgPDwgMykpICYgMHhmZmZmOwotCQlEQkcoImNmZyByZWFkIHdvcmQ6IGJ1cyAlZCBkZXZfZm4gJXggd2hlcmUgJXg6IHZhbCAleFxuIiwKLQkJICAgIGRldi0+YnVzLT5udW1iZXIsIGRldi0+ZGV2Zm4sIHdoZXJlLCAqdmFsKTsKLQotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCi0JY2FzZSA0OgotCi0JCWlmICh3aGVyZSAmIDMpCi0JCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwotCi0JCWlmIChpdDgxNzJfcGNpYmlvc19jb25maWdfYWNjZXNzCi0JCSAgICAoUENJX0FDQ0VTU19SRUFELCBkZXYsIHdoZXJlLCAmZGF0YSkpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJKnZhbCA9IGRhdGE7Ci0KLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQl9Ci19Ci0KLQotc3RhdGljIHdyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKLQkJICAgIGludCBzaXplLCB1MzIgdmFsKQotewotCXUzMiBkYXRhID0gMDsKLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJaWYgKGl0ODE3Ml9wY2liaW9zX2NvbmZpZ19hY2Nlc3MKLQkJICAgIChQQ0lfQUNDRVNTX1JFQUQsIGRldiwgd2hlcmUsICZkYXRhKSkKLQkJCXJldHVybiAtMTsKLQotCQlkYXRhID0gKGRhdGEgJiB+KDB4ZmYgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKSkgfAotCQkgICAgKHZhbCA8PCAoKHdoZXJlICYgMykgPDwgMykpOwotCi0JCWlmIChpdDgxNzJfcGNpYmlvc19jb25maWdfYWNjZXNzCi0JCSAgICAoUENJX0FDQ0VTU19XUklURSwgZGV2LCB3aGVyZSwgJmRhdGEpKQotCQkJcmV0dXJuIC0xOwotCi0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0KLQljYXNlIDI6Ci0JCWlmICh3aGVyZSAmIDEpCi0JCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwotCi0JCWlmIChpdDgxNzJfcGNpYmlvc19jb25maWdfYWNjZXNzCi0JCSAgICAoUENJX0FDQ0VTU19SRUFELCBkZXYsIHdoZXJlLCAmZGF0YSkpCi0JCQlldHVybiAtIDE7Ci0KLQkJZGF0YSA9IChkYXRhICYgfigweGZmZmYgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKSkgfAotCQkgICAgKHZhbCA8PCAoKHdoZXJlICYgMykgPDwgMykpOwotCi0JCWlmIChpdDgxNzJfcGNpYmlvc19jb25maWdfYWNjZXNzCi0JCSAgICAoUENJX0FDQ0VTU19XUklURSwgZGV2LCB3aGVyZSwgJmRhdGEpKQotCQkJcmV0dXJuIC0xOwotCi0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0KLQljYXNlIDQ6Ci0JCWlmICh3aGVyZSAmIDMpCi0JCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwotCi0JCWlmIChpdDgxNzJfcGNpYmlvc19jb25maWdfYWNjZXNzCi0JCSAgICAoUENJX0FDQ0VTU19XUklURSwgZGV2LCB3aGVyZSwgJnZhbCkpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQl9Ci19Ci0KLXN0cnVjdCBwY2lfb3BzIGl0ODE3Ml9wY2lfb3BzID0gewotCS5yZWFkID0gcmVhZF9jb25maWcsCi0JLndyaXRlID0gd3JpdGVfY29uZmlnLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwppbmRleCBhMDIyMmZhLi5hNDZiNzViIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCkBAIC00ODIsNyArNDgyLDcgQEAKIAl3cml0ZV9jMF9jb21wYXJlKHJlYWRfYzBfY291bnQoKSk7CiAjZW5kaWYKIAotCXBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCk7CisJcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCk7CiAKICNpZmRlZiBDT05GSUdfU0lCWVRFX0JDTTE0ODBfUFJPRgogCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykJLyogQ3B1IHBlcmZvcm1hbmNlIGNvdW50ZXIgaW50ZXJydXB0ICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCmluZGV4IGE0NTFiNGMuLmY5YmQ5ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCkBAIC00NDIsNyArNDQyLDcgQEAKIAkgKiBibGFzdGluZyB0aGUgaGlnaCAzMiBiaXRzLgogCSAqLwogCi0JcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKTsKKwlwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKTsKIAogI2lmZGVmIENPTkZJR19TSUJZVEVfU0IxMjUwX1BST0YKIAlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpIC8qIENwdSBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdCAqLwpAQCAtNDc2LDUgKzQ3Niw4IEBACiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJfSU1SX0lOVEVSUlVQVF9TVEFUVVNfQkFTRSkpKTsKIAkJaWYgKG1hc2spCiAJCQlkb19JUlEoZmxzNjQobWFzaykgLSAxLCByZWdzKTsKLQl9CisJCWVsc2UKKwkJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKKwl9IGVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyLy5naXRpZ25vcmUgYi9kcml2ZXJzL2NoYXIvLmdpdGlnbm9yZQppbmRleCA3M2RmZGNlLi44MzY4M2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvLmdpdGlnbm9yZQorKysgYi9kcml2ZXJzL2NoYXIvLmdpdGlnbm9yZQpAQCAtMSwzICsxLDIgQEAKIGNvbnNvbGVtYXBfZGVmdGJsLmMKIGRlZmtleW1hcC5jCi1xdHJvbml4bWFwLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggYmRlMWM2Ni4uMGU2ZjM1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTM3MSwzNiArMzcxLDYgQEAKIAkgIElmIHlvdSBoYXZlIGFuIEFsY2hlbXkgQVUxMDAwIHByb2Nlc3NvciAoTUlQUyBiYXNlZCkgYW5kIHlvdSB3YW50CiAJICB0byB1c2UgYSBjb25zb2xlIG9uIGEgc2VyaWFsIHBvcnQsIHNheSBZLiAgT3RoZXJ3aXNlLCBzYXkgTi4KIAotY29uZmlnIFFUUk9OSVhfS0VZQk9BUkQKLQlib29sICJFbmFibGUgUXRyb25peCA5OTBQIEtleWJvYXJkIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJVDg3MTIKLQloZWxwCi0JICBJbWFnZXMgb2YgUXRyb25peCBrZXlib2FyZHMgYXJlIGF0Ci0JICA8aHR0cDovL3d3dy5xdHJvbml4LmNvbS9rZXlib2FyZC5odG1sPi4KLQotY29uZmlnIElUODE3Ml9DSVIKLQlib29sCi0JZGVwZW5kcyBvbiBRVFJPTklYX0tFWUJPQVJECi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBJVDgxNzJfU0NSMAotCWJvb2wgIkVuYWJsZSBTbWFydCBDYXJkIFJlYWRlciAwIFN1cHBvcnQgIgotCWRlcGVuZHMgb24gSVQ4NzEyCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHNtYXJ0LWNhcmQgcmVhZGVyIDAgKFNDUjApIG9uIHRoZSBJbnRlZ3JhdGVkCi0JICBUZWNobm9sb2d5IEV4cHJlc3MsIEluYy4gSVRFODE3MiBTQkMuICBWZW5kb3IgcGFnZSBhdAotCSAgPGh0dHA6Ly93d3cuaXRlLmNvbS50dy9pYS9icmllZl9pdDgxNzJic3AuaHRtPjsgcGljdHVyZSBvZiB0aGUKLQkgIGJvYXJkIGF0IDxodHRwOi8vd3d3Lm12aXN0YS5jb20vcGFydG5lcnMvc2VtaWNvbmR1Y3Rvci9pdGUuaHRtbD4uCi0KLWNvbmZpZyBJVDgxNzJfU0NSMQotCWJvb2wgIkVuYWJsZSBTbWFydCBDYXJkIFJlYWRlciAxIFN1cHBvcnQgIgotCWRlcGVuZHMgb24gSVQ4NzEyCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHNtYXJ0LWNhcmQgcmVhZGVyIDEgKFNDUjEpIG9uIHRoZSBJbnRlZ3JhdGVkCi0JICBUZWNobm9sb2d5IEV4cHJlc3MsIEluYy4gSVRFODE3MiBTQkMuICBWZW5kb3IgcGFnZSBhdAotCSAgPGh0dHA6Ly93d3cuaXRlLmNvbS50dy9pYS9icmllZl9pdDgxNzJic3AuaHRtPjsgcGljdHVyZSBvZiB0aGUKLQkgIGJvYXJkIGF0IDxodHRwOi8vd3d3Lm12aXN0YS5jb20vcGFydG5lcnMvc2VtaWNvbmR1Y3Rvci9pdGUuaHRtbD4uCi0KIGNvbmZpZyBBMjIzMgogCXRyaXN0YXRlICJDb21tb2RvcmUgQTIyMzIgc2VyaWFsIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgWk9SUk8gJiYgQlJPS0VOX09OX1NNUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IDE5MTE0ZGYuLjc3N2NhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKQEAgLTEwMiw3ICsxMDIsNyBAQAogb2JqLSQoQ09ORklHX1RDR19UUE0pCQkrPSB0cG0vCiAKICMgRmlsZXMgZ2VuZXJhdGVkIHRoYXQgc2hhbGwgYmUgcmVtb3ZlZCB1cG9uIG1ha2UgY2xlYW4KLWNsZWFuLWZpbGVzIDo9IGNvbnNvbGVtYXBfZGVmdGJsLmMgZGVma2V5bWFwLmMgcXRyb25peG1hcC5jCitjbGVhbi1maWxlcyA6PSBjb25zb2xlbWFwX2RlZnRibC5jIGRlZmtleW1hcC5jCiAKIHF1aWV0X2NtZF9jb25tayA9IENPTk1LICAgJEAKICAgICAgIGNtZF9jb25tayA9IHNjcmlwdHMvY29ubWFrZWhhc2ggJDwgPiAkQApAQCAtMTEyLDggKzExMiw2IEBACiAKICQob2JqKS9kZWZrZXltYXAubzogICQob2JqKS9kZWZrZXltYXAuYwogCi0kKG9iaikvcXRyb25peG1hcC5vOiAkKG9iaikvcXRyb25peG1hcC5jCi0KICMgVW5jb21tZW50IGlmIHlvdSdyZSBjaGFuZ2luZyB0aGUga2V5bWFwIGFuZCBoYXZlIGFuIGFwcHJvcHJpYXRlCiAjIGxvYWRrZXlzIHZlcnNpb24gZm9yIHRoZSBtYXAuIEJ5IGRlZmF1bHQsIHdlJ2xsIHVzZSB0aGUgc2hpcHBlZAogIyB2ZXJzaW9ucy4KQEAgLTEyMSw3ICsxMTksNyBAQAogCiBpZmRlZiBHRU5FUkFURV9LRVlNQVAKIAotJChvYmopL2RlZmtleW1hcC5jICQob2JqKS9xdHJvbml4bWFwLmM6ICQob2JqKS8lLmM6ICQoc3JjKS8lLm1hcAorJChvYmopL2RlZmtleW1hcC5jICQob2JqKS8lLmM6ICQoc3JjKS8lLm1hcAogCWxvYWRrZXlzIC0tbWt0YWJsZSAkPCA+ICRALnRtcAogCXNlZCAtZSAncy9ec3RhdGljICovLycgJEAudG1wID4gJEAKIAlybSAkQC50bXAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pdGVfZ3Bpby5jIGIvZHJpdmVycy9jaGFyL2l0ZV9ncGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZTU2MmQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2l0ZV9ncGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTkgKzAsMCBAQAotLyoKLSAqIEZJTEUgTkFNRSBpdGVfZ3Bpby5jCi0gKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKiAgQVBJIGZvciBJVEUgR1BJTyBkZXZpY2UuCi0gKiAgRHJpdmVyIGZvciBJVEUgR1BJTyBkZXZpY2UuCi0gKgotICogIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAgPHNvdXJjZUBtdmlzdGEuY29tPgotICogICAgICAgICAgSGFpLVBhbyBGYW4gPGhhaXBhb0BtdmlzdGEuY29tPgotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFCUxJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Ml9pbnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2l0ZV9ncGlvLmg+Ci0KLSNkZWZpbmUgaXRlX2dwaW9fYmFzZSAweDE0MDEzODAwCi0KLSNkZWZpbmUJSVRFX0dQQURSCSgqKHZvbGF0aWxlIF9fdTggKikoMHgxNDAxMzgwMCArIEtTRUcxKSkKLSNkZWZpbmUJSVRFX0dQQkRSCSgqKHZvbGF0aWxlIF9fdTggKikoMHgxNDAxMzgwOCArIEtTRUcxKSkKLSNkZWZpbmUJSVRFX0dQQ0RSCSgqKHZvbGF0aWxlIF9fdTggKikoMHgxNDAxMzgxMCArIEtTRUcxKSkKLSNkZWZpbmUJSVRFX0dQQUNSCSgqKHZvbGF0aWxlIF9fdTE2ICopKDB4MTQwMTM4MDIgKyBLU0VHMSkpCi0jZGVmaW5lCUlURV9HUEJDUgkoKih2b2xhdGlsZSBfX3UxNiAqKSgweDE0MDEzODBhICsgS1NFRzEpKQotI2RlZmluZQlJVEVfR1BDQ1IJKCoodm9sYXRpbGUgX191MTYgKikoMHgxNDAxMzgxMiArIEtTRUcxKSkKLSNkZWZpbmUgSVRFX0dQQUlDUgkoKih2b2xhdGlsZSBfX3UxNiAqKSgweDE0MDEzODA0ICsgS1NFRzEpKQotI2RlZmluZQlJVEVfR1BCSUNSCSgqKHZvbGF0aWxlIF9fdTE2ICopKDB4MTQwMTM4MGMgKyBLU0VHMSkpCi0jZGVmaW5lCUlURV9HUENJQ1IJKCoodm9sYXRpbGUgX191MTYgKikoMHgxNDAxMzgxNCArIEtTRUcxKSkKLSNkZWZpbmUJSVRFX0dQQUlTUgkoKih2b2xhdGlsZSBfX3U4ICopKDB4MTQwMTM4MDYgKyBLU0VHMSkpCi0jZGVmaW5lCUlURV9HUEJJU1IJKCoodm9sYXRpbGUgX191OCAqKSgweDE0MDEzODBlICsgS1NFRzEpKQotI2RlZmluZQlJVEVfR1BDSVNSCSgqKHZvbGF0aWxlIF9fdTggKikoMHgxNDAxMzgxNiArIEtTRUcxKSkKLSNkZWZpbmUJSVRFX0dDUgkJKCoodm9sYXRpbGUgX191OCAqKSgweDE0MDEzODE4ICsgS1NFRzEpKQotCi0jZGVmaW5lIE1BWF9HUElPX0xJTkUJCTIxCi1zdGF0aWMgaW50IGl0ZV9ncGlvX2lycT1JVDgxNzJfR1BJT19JUlE7Ci0KLXN0YXRpYyBsb25nIGl0ZV9pcnFfY291bnRlcltNQVhfR1BJT19MSU5FXTsKLXdhaXRfcXVldWVfaGVhZF90IGl0ZV9ncGlvX3dhaXRbTUFYX0dQSU9fTElORV07Ci1zdGF0aWMgaW50IGl0ZV9ncGlvX2lycV9wZW5kaW5nW01BWF9HUElPX0xJTkVdOwotCi1zdGF0aWMgaW50IGl0ZV9ncGlvX2RlYnVnPTA7Ci0jZGVmaW5lIERFQih4KSAgaWYgKGl0ZV9ncGlvX2RlYnVnPj0xKSB4Ci0KLWludCBpdGVfZ3Bpb19pbihfX3UzMiBkZXZpY2UsIF9fdTMyIG1hc2ssIHZvbGF0aWxlIF9fdTMyICpkYXRhKQotewotCURFQihwcmludGsoIml0ZV9ncGlvX2luIG1hc2s9MHgleFxuIixtYXNrKSk7IAotCi0Jc3dpdGNoIChkZXZpY2UpIHsKLQljYXNlIElURV9HUElPX1BPUlRBOgotCQlJVEVfR1BBQ1IgPSAoX191MTYpbWFzazsJLyogMHhmZmZmICovCi0JCSpkYXRhID0gSVRFX0dQQURSOwotCQlicmVhazsKLQljYXNlIElURV9HUElPX1BPUlRCOgotCQlJVEVfR1BCQ1IgPSAoX191MTYpbWFzazsJLyogMHhmZmZmICovCi0JCSpkYXRhID0gSVRFX0dQQkRSOwotCQlicmVhazsKLQljYXNlIElURV9HUElPX1BPUlRDOgotCQlJVEVfR1BDQ1IgPSAoX191MTYpbWFzazsJLyogMHgwM2ZmICovCi0JCSpkYXRhID0gSVRFX0dQQ0RSOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgaXRlX2dwaW9fb3V0KF9fdTMyIGRldmljZSwgX191MzIgbWFzaywgX191MzIgZGF0YSkKLXsKLQlzd2l0Y2ggKGRldmljZSkgewotCWNhc2UgSVRFX0dQSU9fUE9SVEE6Ci0JCUlURV9HUEFDUiA9IChfX3UxNiltYXNrOwkvKiAweDU1NTUgKi8KLQkJSVRFX0dQQURSID0gKF9fdTgpZGF0YTsKLQkJYnJlYWs7Ci0JY2FzZSBJVEVfR1BJT19QT1JUQjoKLQkJSVRFX0dQQkNSID0gKF9fdTE2KW1hc2s7CS8qIDB4NTU1NSAqLwotCQlJVEVfR1BCRFIgPSAoX191OClkYXRhOwotCQlicmVhazsKLQljYXNlIElURV9HUElPX1BPUlRDOgotCQlJVEVfR1BDQ1IgPSAoX191MTYpbWFzazsJLyogMHgwMTU1ICovCi0JCUlURV9HUENEUiA9IChfX3U4KWRhdGE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgaXRlX2dwaW9faW50X2N0cmwoX191MzIgZGV2aWNlLCBfX3UzMiBtYXNrLCBfX3UzMiBkYXRhKQotewotCXN3aXRjaCAoZGV2aWNlKSB7Ci0JY2FzZSBJVEVfR1BJT19QT1JUQToKLQkJSVRFX0dQQUlDUiA9IChJVEVfR1BBSUNSICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKTsKLQkJYnJlYWs7Ci0JY2FzZSBJVEVfR1BJT19QT1JUQjoKLQkJSVRFX0dQQklDUiA9IChJVEVfR1BCSUNSICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKTsKLQkJYnJlYWs7Ci0JY2FzZSBJVEVfR1BJT19QT1JUQzoKLQkJSVRFX0dQQ0lDUiA9IChJVEVfR1BDSUNSICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBpdGVfZ3Bpb19pbl9zdGF0dXMoX191MzIgZGV2aWNlLCBfX3UzMiBtYXNrLCB2b2xhdGlsZSBfX3UzMiAqZGF0YSkKLXsKLQlpbnQgcmV0PS0xOwotCi0JaWYgKChNQVhfR1BJT19MSU5FID4gKmRhdGEpICYmICgqZGF0YSA+PSAwKSkgCi0JCXJldD1pdGVfZ3Bpb19pcnFfcGVuZGluZ1sqZGF0YV07Ci0gCi0JREVCKHByaW50aygiaXRlX2dwaW9faW5fc3RhdHVzICVkIHJldD0lZFxuIiwqZGF0YSwgcmV0KSk7Ci0KLQlzd2l0Y2ggKGRldmljZSkgewotCWNhc2UgSVRFX0dQSU9fUE9SVEE6Ci0JCSpkYXRhID0gSVRFX0dQQUlTUiAmIG1hc2s7Ci0JCWJyZWFrOwotCWNhc2UgSVRFX0dQSU9fUE9SVEI6Ci0JCSpkYXRhID0gSVRFX0dQQklTUiAmIG1hc2s7Ci0JCWJyZWFrOwotCWNhc2UgSVRFX0dQSU9fUE9SVEM6Ci0JCSpkYXRhID0gSVRFX0dQQ0lTUiAmIG1hc2s7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBpdGVfZ3Bpb19vdXRfc3RhdHVzKF9fdTMyIGRldmljZSwgX191MzIgbWFzaywgX191MzIgZGF0YSkKLXsKLQlzd2l0Y2ggKGRldmljZSkgewotCWNhc2UgSVRFX0dQSU9fUE9SVEE6Ci0JCUlURV9HUEFJU1IgPSAoSVRFX0dQQUlTUiAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7Ci0JCWJyZWFrOwotCWNhc2UgSVRFX0dQSU9fUE9SVEI6Ci0JCUlURV9HUEJJU1IgPSAoSVRFX0dQQklTUiAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7Ci0JCWJyZWFrOwotCWNhc2UgSVRFX0dQSU9fUE9SVEM6Ci0JCUlURV9HUENJU1IgPSAoSVRFX0dQQ0lTUiAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgaXRlX2dwaW9fZ2VuX2N0cmwoX191MzIgZGV2aWNlLCBfX3UzMiBtYXNrLCBfX3UzMiBkYXRhKQotewotCUlURV9HQ1IgPSAoSVRFX0dDUiAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGl0ZV9ncGlvX2ludF93YWl0IChfX3UzMiBkZXZpY2UsIF9fdTMyIG1hc2ssIF9fdTMyIGRhdGEpCi17Ci0JaW50IGksbGluZT0wLCByZXQ9MDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3dpdGNoIChkZXZpY2UpIHsKLQljYXNlIElURV9HUElPX1BPUlRBOgotCQlsaW5lID0gZGF0YSAmIG1hc2s7Ci0JCWJyZWFrOwotCWNhc2UgSVRFX0dQSU9fUE9SVEI6Ci0JCWxpbmUgPSAoZGF0YSAmIG1hc2spIDw8ODsKLQkJYnJlYWs7Ci0JY2FzZSBJVEVfR1BJT19QT1JUQzoKLQkJbGluZSA9IChkYXRhICYgbWFzaykgPDwxNjsKLQkJYnJlYWs7Ci0JfQotCWZvciAoaT1NQVhfR1BJT19MSU5FLTE7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmICggKGxpbmUpICYgKDEgPDwgaSkpCi0JCQlicmVhazsKLQl9Ci0KLQlERUIocHJpbnRrKCJ3YWl0IGRldmljZT0weCVkIG1hc2s9MHgleCBkYXRhPTB4JXggaW5kZXggJWRcbiIsIAotCQlkZXZpY2UsIG1hc2ssIGRhdGEsIGkpKTsKLQotCWlmIChsaW5lICYgfigxPDxpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoaXRlX2dwaW9faXJxX3BlbmRpbmdbaV09PTEpCi0JCXJldHVybiAtRUZBVUxUOwotCi0Jc2F2ZV9mbGFncyAoZmxhZ3MpOwotCWNsaSgpOwotCWl0ZV9ncGlvX2lycV9wZW5kaW5nW2ldID0gMTsKLQlyZXQgPSBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJml0ZV9ncGlvX3dhaXRbaV0sIDMqSFopOwotCXJlc3RvcmVfZmxhZ3MgKGZsYWdzKTsKLQlpdGVfZ3Bpb19pcnFfcGVuZGluZ1tpXSA9IDA7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1FWFBPUlRfU1lNQk9MKGl0ZV9ncGlvX2luKTsKLUVYUE9SVF9TWU1CT0woaXRlX2dwaW9fb3V0KTsKLUVYUE9SVF9TWU1CT0woaXRlX2dwaW9faW50X2N0cmwpOwotRVhQT1JUX1NZTUJPTChpdGVfZ3Bpb19pbl9zdGF0dXMpOwotRVhQT1JUX1NZTUJPTChpdGVfZ3Bpb19vdXRfc3RhdHVzKTsKLUVYUE9SVF9TWU1CT0woaXRlX2dwaW9fZ2VuX2N0cmwpOwotRVhQT1JUX1NZTUJPTChpdGVfZ3Bpb19pbnRfd2FpdCk7Ci0KLXN0YXRpYyBpbnQgaXRlX2dwaW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGl0ZV9ncGlvX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpdGVfZ3Bpb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdGF0aWMgc3RydWN0IGl0ZV9ncGlvX2lvY3RsX2RhdGEgaW9jdGxfZGF0YTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmaW9jdGxfZGF0YSwgKHN0cnVjdCBpdGVfZ3Bpb19pb2N0bF9kYXRhICopYXJnLAotCQkJc2l6ZW9mKGlvY3RsX2RhdGEpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKChpb2N0bF9kYXRhLmRldmljZSA8IElURV9HUElPX1BPUlRBKSB8fAotCQkJKGlvY3RsX2RhdGEuZGV2aWNlID4gSVRFX0dQSU9fUE9SVEMpICkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCXN3aXRjaChjbWQpIHsKLQkJY2FzZSBJVEVfR1BJT19JTjoKLQkJCWlmIChpdGVfZ3Bpb19pbihpb2N0bF9kYXRhLmRldmljZSwgaW9jdGxfZGF0YS5tYXNrLAotCQkJCQkgICAmaW9jdGxfZGF0YS5kYXRhKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkJaWYgKGNvcHlfdG9fdXNlcigoc3RydWN0IGl0ZV9ncGlvX2lvY3RsX2RhdGEgKilhcmcsCi0JCQkJCSAmaW9jdGxfZGF0YSwgc2l6ZW9mKGlvY3RsX2RhdGEpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSVRFX0dQSU9fT1VUOgotCQkJcmV0dXJuIGl0ZV9ncGlvX291dChpb2N0bF9kYXRhLmRldmljZSwKLQkJCQkJaW9jdGxfZGF0YS5tYXNrLCBpb2N0bF9kYXRhLmRhdGEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJVEVfR1BJT19JTlRfQ1RSTDoKLQkJCXJldHVybiBpdGVfZ3Bpb19pbnRfY3RybChpb2N0bF9kYXRhLmRldmljZSwKLQkJCQkJaW9jdGxfZGF0YS5tYXNrLCBpb2N0bF9kYXRhLmRhdGEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJVEVfR1BJT19JTl9TVEFUVVM6Ci0JCQlpZiAoaXRlX2dwaW9faW5fc3RhdHVzKGlvY3RsX2RhdGEuZGV2aWNlLCBpb2N0bF9kYXRhLm1hc2ssCi0JCQkJCSZpb2N0bF9kYXRhLmRhdGEpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKGNvcHlfdG9fdXNlcigoc3RydWN0IGl0ZV9ncGlvX2lvY3RsX2RhdGEgKilhcmcsCi0JCQkJCSZpb2N0bF9kYXRhLCBzaXplb2YoaW9jdGxfZGF0YSkpKSAKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSVRFX0dQSU9fT1VUX1NUQVRVUzoKLQkJCXJldHVybiBpdGVfZ3Bpb19vdXRfc3RhdHVzKGlvY3RsX2RhdGEuZGV2aWNlLAotCQkJCQlpb2N0bF9kYXRhLm1hc2ssIGlvY3RsX2RhdGEuZGF0YSk7Ci0JCQlicmVhazsKLQotCQljYXNlIElURV9HUElPX0dFTl9DVFJMOgotCQkJcmV0dXJuIGl0ZV9ncGlvX2dlbl9jdHJsKGlvY3RsX2RhdGEuZGV2aWNlLAotCQkJCQlpb2N0bF9kYXRhLm1hc2ssIGlvY3RsX2RhdGEuZGF0YSk7Ci0JCQlicmVhazsKLQotCQljYXNlIElURV9HUElPX0lOVF9XQUlUOgotCQkJcmV0dXJuIGl0ZV9ncGlvX2ludF93YWl0KGlvY3RsX2RhdGEuZGV2aWNlLAotCQkJCQlpb2N0bF9kYXRhLm1hc2ssIGlvY3RsX2RhdGEuZGF0YSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpdGVfZ3Bpb19pcnFfaGFuZGxlcihpbnQgdGhpc19pcnEsIHZvaWQgKmRldl9pZCwKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnQgaSxsaW5lOwotCi0JbGluZSA9IElURV9HUENJU1IgJiAweDFmOwotCWZvciAoaT00OyBpID49MDsgaS0tKSB7Ci0JCWlmICggbGluZSAmICgxIDw8IGkpKSB7IAotCQkJKytpdGVfaXJxX2NvdW50ZXJbaSsxNl07Ci0JCQlpdGVfZ3Bpb19pcnFfcGVuZGluZ1tpKzE2XSA9IDI7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJml0ZV9ncGlvX3dhaXRbaSsxNl0pOwotCi1ERUIocHJpbnRrKCJpbnRlcnJ1cHQgMHgleCAlZFxuIiwgJml0ZV9ncGlvX3dhaXRbaSsxNl0sIGkrMTYpKTsKLQotCQkJSVRFX0dQQ0lTUiA9IElURV9HUENJU1IgJiAoMTw8aSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JbGluZSA9IElURV9HUEJJU1I7Ci0JZm9yIChpPTc7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmICggbGluZSAmICgxIDw8IGkpKSB7Ci0JCQkrK2l0ZV9pcnFfY291bnRlcltpKzhdOwotCQkJaXRlX2dwaW9faXJxX3BlbmRpbmdbaSs4XSA9IDI7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJml0ZV9ncGlvX3dhaXRbaSs4XSk7Ci0KLURFQihwcmludGsoImludGVycnVwdCAweCV4ICVkXG4iLElURV9HUEJJU1IsIGkrOCkpOwotCi0JCQlJVEVfR1BCSVNSID0gSVRFX0dQQklTUiAmICgxPDxpKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlsaW5lID0gSVRFX0dQQUlTUjsKLQlmb3IgKGk9NzsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKCBsaW5lICYgKDEgPDwgaSkpIHsKLQkJCSsraXRlX2lycV9jb3VudGVyW2ldOwotCQkJaXRlX2dwaW9faXJxX3BlbmRpbmdbaV0gPSAyOwotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpdGVfZ3Bpb193YWl0W2ldKTsKLQotREVCKHByaW50aygiaW50ZXJydXB0IDB4JXggJWRcbiIsSVRFX0dQQUlTUiwgaSkpOwotCi0JCQlJVEVfR1BBSVNSID0gSVRFX0dQQUlTUiAmICgxPDxpKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXRlX2dwaW9fZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmlvY3RsCQk9IGl0ZV9ncGlvX2lvY3RsLAotCS5vcGVuCQk9IGl0ZV9ncGlvX29wZW4sCi0JLnJlbGVhc2UJPSBpdGVfZ3Bpb19yZWxlYXNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGl0ZV9ncGlvX21pc2NkZXYgPSB7Ci0JTUlTQ19EWU5BTUlDX01JTk9SLAotCSJpdGVfZ3BpbyIsCi0JJml0ZV9ncGlvX2ZvcHMKLX07Ci0KLWludCBfX2luaXQgaXRlX2dwaW9faW5pdCh2b2lkKQotewotCWludCBpOwotCi0JaWYgKG1pc2NfcmVnaXN0ZXIoJml0ZV9ncGlvX21pc2NkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmICghcmVxdWVzdF9yZWdpb24oaXRlX2dwaW9fYmFzZSwgMHgxYywgIklURSBHUElPIikpCi0JewotCQltaXNjX2RlcmVnaXN0ZXIoJml0ZV9ncGlvX21pc2NkZXYpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBpbml0aWFsaXplIHJlZ2lzdGVycyAqLwotICAgICAgICBJVEVfR1BBQ1IgPSAweGZmZmY7Ci0gICAgICAgIElURV9HUEJDUiA9IDB4ZmZmZjsKLSAgICAgICAgSVRFX0dQQ0NSID0gMHhmZmZmOwotICAgICAgICBJVEVfR1BBSUNSID0gMHgwMGZmOwotICAgICAgICBJVEVfR1BCSUNSID0gMHgwMGZmOwotICAgICAgICBJVEVfR1BDSUNSID0gMHgwMGZmOwotICAgICAgICBJVEVfR0NSID0gMDsKLQkKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0dQSU9fTElORTsgaSsrKSB7Ci0JCWl0ZV9ncGlvX2lycV9wZW5kaW5nW2ldPTA7CQotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpdGVfZ3Bpb193YWl0W2ldKTsKLQl9Ci0KLQlpZiAocmVxdWVzdF9pcnEoaXRlX2dwaW9faXJxLCBpdGVfZ3Bpb19pcnFfaGFuZGxlciwgSVJRRl9TSEFSRUQsICJncGlvIiwgMCkgPCAwKSB7Ci0JCW1pc2NfZGVyZWdpc3RlcigmaXRlX2dwaW9fbWlzY2Rldik7Ci0JCXJlbGVhc2VfcmVnaW9uKGl0ZV9ncGlvX2Jhc2UsIDB4MWMpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwcmludGsoIkdQSU8gYXQgMHgleCAoaXJxID0gJWQpXG4iLCBpdGVfZ3Bpb19iYXNlLCBpdGVfZ3Bpb19pcnEpOwotCi0JcmV0dXJuIDA7Ci19CQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaXRlX2dwaW9fZXhpdCh2b2lkKQotewotCW1pc2NfZGVyZWdpc3RlcigmaXRlX2dwaW9fbWlzY2Rldik7Ci19Ci0KLW1vZHVsZV9pbml0KGl0ZV9ncGlvX2luaXQpOwotbW9kdWxlX2V4aXQoaXRlX2dwaW9fZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9xdHJvbml4bWFwLmNfc2hpcHBlZCBiL2RyaXZlcnMvY2hhci9xdHJvbml4bWFwLmNfc2hpcHBlZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUyYjkyYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcXRyb25peG1hcC5jX3NoaXBwZWQKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotCi0vKiBEbyBub3QgZWRpdCB0aGlzIGZpbGUhIEl0IHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSAgICovCi0vKiAgICBsb2Fka2V5cyAtLW1rdGFibGUgZGVma2V5bWFwLm1hcCA+IGRlZmtleW1hcC5jICAgICAgICAgICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tleWJvYXJkLmg+Ci0jaW5jbHVkZSA8bGludXgva2QuaD4KLQotdV9zaG9ydCBwbGFpbl9tYXBbTlJfS0VZU10gPSB7Ci0JMHhmMjAwLAkweGYwNjAsCTB4ZjAzMSwJMHhmMDMyLAkweGYwMzMsCTB4ZjAzNCwJMHhmMDM1LAkweGYwMzYsCi0JMHhmMDM3LAkweGYwMzgsCTB4ZjAzOSwJMHhmMDMwLAkweGYwMmQsCTB4ZjAzZCwJMHhmMjAwLAkweGYwN2YsCi0JMHhmMDA5LAkweGZiNzEsCTB4ZmI3NywJMHhmYjY1LAkweGZiNzIsCTB4ZmI3NCwJMHhmYjc5LAkweGZiNzUsCi0JMHhmYjY5LAkweGZiNmYsCTB4ZmI3MCwJMHhmMDViLAkweGYwNWQsCTB4ZjA1YywJMHhmMjA3LAkweGZiNjEsCi0JMHhmYjczLAkweGZiNjQsCTB4ZmI2NiwJMHhmYjY3LAkweGZiNjgsCTB4ZmI2YSwJMHhmYjZiLAkweGZiNmMsCi0JMHhmMDNiLAkweGYwMjcsCTB4ZjA2MCwJMHhmMjAxLAkweGY3MDAsCTB4ZjIwMCwJMHhmYjdhLAkweGZiNzgsCi0JMHhmYjYzLAkweGZiNzYsCTB4ZmI2MiwJMHhmYjZlLAkweGZiNmQsCTB4ZjAyYywJMHhmMDJlLAkweGYwMmYsCi0JMHhmMjAwLAkweGY3MDAsCTB4ZjcwMiwJMHhmMjAwLAkweGY3MDMsCTB4ZjAyMCwJMHhmNzAzLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMTE1LAkweGYwN2YsCTB4ZjIwMCwJMHhmMjAwLAkweGY2MDEsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmNjAzLAkweGY2MDAsCTB4ZjExOCwJMHhmMTE5LAkweGYyMDAsCi0JMHhmMjAwLAkweGY2MDIsCTB4ZjIwOCwJMHhmMDJkLAkweGYwMmIsCTB4ZjMwYywJMHhmMDJlLAkweGYzMGQsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMTE3LAkweGY2MDAsCTB4ZjIwMCwJMHhmMDFiLAkweGYyMDAsCi0JMHhmMTAwLAkweGYxMDEsCTB4ZjEwMiwJMHhmMTAzLAkweGYxMDQsCTB4ZjEwNSwJMHhmMTA2LAkweGYxMDcsCi0JMHhmMTA4LAkweGYxMDksCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMTFkLAkweGYyMDAsCi19OwotCi11X3Nob3J0IHNoaWZ0X21hcFtOUl9LRVlTXSA9IHsKLQkweGYyMDAsCTB4ZjA3ZSwJMHhmMDIxLAkweGYwNDAsCTB4ZjAyMywJMHhmMDI0LAkweGYwMjUsCTB4ZjA1ZSwKLQkweGYwMjYsCTB4ZjAyYSwJMHhmMDI4LAkweGYwMjksCTB4ZjA1ZiwJMHhmMDJiLAkweGYyMDAsCTB4ZjA3ZiwKLQkweGYwMDksCTB4ZmI1MSwJMHhmYjU3LAkweGZiNDUsCTB4ZmI1MiwJMHhmYjU0LAkweGZiNTksCTB4ZmI1NSwKLQkweGZiNDksCTB4ZmI0ZiwJMHhmYjUwLAkweGYwN2IsCTB4ZjA3ZCwJMHhmMDdjLAkweGYyMDcsCTB4ZmI0MSwKLQkweGZiNTMsCTB4ZmI0NCwJMHhmYjQ2LAkweGZiNDcsCTB4ZmI0OCwJMHhmYjRhLAkweGZiNGIsCTB4ZmI0YywKLQkweGYwM2EsCTB4ZjAyMiwJMHhmMDdlLAkweGYyMDEsCTB4ZjcwMCwJMHhmMjAwLAkweGZiNWEsCTB4ZmI1OCwKLQkweGZiNDMsCTB4ZmI1NiwJMHhmYjQyLAkweGZiNGUsCTB4ZmI0ZCwJMHhmMDNjLAkweGYwM2UsCTB4ZjAzZiwKLQkweGYyMDAsCTB4ZjcwMCwJMHhmNzAyLAkweGYyMDAsCTB4ZjcwMywJMHhmMDIwLAkweGY3MDMsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYxMTUsCTB4ZjA3ZiwJMHhmMjAwLAkweGYyMDAsCTB4ZjYwMSwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGY2MDMsCTB4ZjYwMCwJMHhmMjBiLAkweGYyMGEsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjYwMiwJMHhmMjEzLAkweGYwMmQsCTB4ZjAyYiwJMHhmMzBjLAkweGYwMmUsCTB4ZjMwZCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYxMTcsCTB4ZjYwMCwJMHhmMjAwLAkweGYwMWIsCTB4ZjIwMCwKLQkweGYxMGEsCTB4ZjEwYiwJMHhmMTBjLAkweGYxMGQsCTB4ZjEwZSwJMHhmMTBmLAkweGYxMTAsCTB4ZjExMSwKLQkweGYxMTIsCTB4ZjExMywJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYxMWQsCTB4ZjIwMCwKLX07Ci0KLXVfc2hvcnQgYWx0Z3JfbWFwW05SX0tFWVNdID0gewotCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjA0MCwJMHhmMjAwLAkweGYwMjQsCTB4ZjIwMCwJMHhmMjAwLAotCTB4ZjA3YiwJMHhmMDViLAkweGYwNWQsCTB4ZjA3ZCwJMHhmMDVjLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAotCTB4ZjIwMCwJMHhmYjcxLAkweGZiNzcsCTB4ZmI2NSwJMHhmYjcyLAkweGZiNzQsCTB4ZmI3OSwJMHhmYjc1LAotCTB4ZmI2OSwJMHhmYjZmLAkweGZiNzAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwNywJMHhmYjYxLAotCTB4ZmI3MywJMHhmYjY0LAkweGZiNjYsCTB4ZmI2NywJMHhmYjY4LAkweGZiNmEsCTB4ZmI2YiwJMHhmYjZjLAotCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMSwJMHhmNzAwLAkweGYyMDAsCTB4ZmI3YSwJMHhmYjc4LAotCTB4ZmI2MywJMHhmYjc2LAkweGZiNjIsCTB4ZmI2ZSwJMHhmYjZkLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAotCTB4ZjIwMCwJMHhmNzAwLAkweGY3MDIsCTB4ZjIwMCwJMHhmNzAzLAkweGYyMDAsCTB4ZjcwMywJMHhmMjAwLAotCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAotCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjExNSwJMHhmMDdmLAkweGYyMDAsCTB4ZjIwMCwJMHhmNjAxLAotCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjYwMywJMHhmNjAwLAkweGYxMTgsCTB4ZjExOSwJMHhmMjAwLAotCTB4ZjIwMCwJMHhmNjAyLAkweGYyMDgsCTB4ZjAyZCwJMHhmMDJiLAkweGYzMGMsCTB4ZjAyZSwJMHhmMzBkLAotCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAotCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjExNywJMHhmNjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAotCTB4ZjUwYywJMHhmNTBkLAkweGY1MGUsCTB4ZjUwZiwJMHhmNTEwLAkweGY1MTEsCTB4ZjUxMiwJMHhmNTEzLAotCTB4ZjUxNCwJMHhmNTE1LAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjExZCwJMHhmMjAwLAotfTsKLQotdV9zaG9ydCBjdHJsX21hcFtOUl9LRVlTXSA9IHsKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYwMDAsCTB4ZjAxYiwJMHhmMDFjLAkweGYwMWQsCTB4ZjAxZSwKLQkweGYwMWYsCTB4ZjA3ZiwJMHhmMjAwLAkweGYyMDAsCTB4ZjAxZiwJMHhmMjAwLAkweGYyMDAsCTB4ZjAwOCwKLQkweGYyMDAsCTB4ZjAxMSwJMHhmMDE3LAkweGYwMDUsCTB4ZjAxMiwJMHhmMDE0LAkweGYwMTksCTB4ZjAxNSwKLQkweGYwMDksCTB4ZjAwZiwJMHhmMDEwLAkweGYwMWIsCTB4ZjAxZCwJMHhmMDFjLAkweGYyMDcsCTB4ZjAwMSwKLQkweGYwMTMsCTB4ZjAwNCwJMHhmMDA2LAkweGYwMDcsCTB4ZjAwOCwJMHhmMDBhLAkweGYwMGIsCTB4ZjAwYywKLQkweGYwMDcsCTB4ZjAwMCwJMHhmMjAwLAkweGYyMDEsCTB4ZjcwMCwJMHhmMjAwLAkweGYwMWEsCTB4ZjAxOCwKLQkweGYwMDMsCTB4ZjAxNiwJMHhmMDAyLAkweGYwMGUsCTB4ZjIwZSwJMHhmMDdmLAkweGYyMDAsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjcwMCwJMHhmNzAyLAkweGYyMDAsCTB4ZjcwMywJMHhmMDAwLAkweGY3MDMsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYxMTUsCTB4ZjA3ZiwJMHhmMjAwLAkweGYyMDAsCTB4ZjYwMSwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGY2MDMsCTB4ZjYwMCwJMHhmMTE4LAkweGYxMTksCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjYwMiwJMHhmMjA4LAkweGYwMmQsCTB4ZjAyYiwJMHhmMzBjLAkweGYwMmUsCTB4ZjMwZCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYxMTcsCTB4ZjYwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwKLQkweGYxMDAsCTB4ZjEwMSwJMHhmMTAyLAkweGYxMDMsCTB4ZjEwNCwJMHhmMTA1LAkweGYxMDYsCTB4ZjEwNywKLQkweGYxMDgsCTB4ZjEwOSwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYxMWQsCTB4ZjIwMCwKLX07Ci0KLXVfc2hvcnQgc2hpZnRfY3RybF9tYXBbTlJfS0VZU10gPSB7Ci0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMDAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYwMWYsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGYwMTEsCTB4ZjAxNywJMHhmMDA1LAkweGYwMTIsCTB4ZjAxNCwJMHhmMDE5LAkweGYwMTUsCi0JMHhmMDA5LAkweGYwMGYsCTB4ZjAxMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjA3LAkweGYwMDEsCi0JMHhmMDEzLAkweGYwMDQsCTB4ZjAwNiwJMHhmMDA3LAkweGYwMDgsCTB4ZjAwYSwJMHhmMDBiLAkweGYwMGMsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAxLAkweGY3MDAsCTB4ZjIwMCwJMHhmMDFhLAkweGYwMTgsCi0JMHhmMDAzLAkweGYwMTYsCTB4ZjAwMiwJMHhmMDBlLAkweGYwMGQsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGY3MDAsCTB4ZjcwMiwJMHhmMjAwLAkweGY3MDMsCTB4ZjIwMCwJMHhmNzAzLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMTE1LAkweGYwN2YsCTB4ZjIwMCwJMHhmMjAwLAkweGY2MDEsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmNjAzLAkweGY2MDAsCTB4ZjExOCwJMHhmMTE5LAkweGYyMDAsCi0JMHhmMjAwLAkweGY2MDIsCTB4ZjIwOCwJMHhmMDJkLAkweGYwMmIsCTB4ZjMwYywJMHhmMDJlLAkweGYzMGQsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMTE3LAkweGY2MDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMTFkLAkweGYyMDAsCi19OwotCi11X3Nob3J0IGFsdF9tYXBbTlJfS0VZU10gPSB7Ci0JMHhmMjAwLAkweGY4MWIsCTB4ZjgzMSwJMHhmODMyLAkweGY4MzMsCTB4ZjgzNCwJMHhmODM1LAkweGY4MzYsCi0JMHhmODM3LAkweGY4MzgsCTB4ZjgzOSwJMHhmODMwLAkweGY4MmQsCTB4ZjgzZCwJMHhmMjAwLAkweGY4N2YsCi0JMHhmODA5LAkweGY4NzEsCTB4Zjg3NywJMHhmODY1LAkweGY4NzIsCTB4Zjg3NCwJMHhmODc5LAkweGY4NzUsCi0JMHhmODY5LAkweGY4NmYsCTB4Zjg3MCwJMHhmODViLAkweGY4NWQsCTB4Zjg1YywJMHhmMjA3LAkweGY4NjEsCi0JMHhmODczLAkweGY4NjQsCTB4Zjg2NiwJMHhmODY3LAkweGY4NjgsCTB4Zjg2YSwJMHhmODZiLAkweGY4M2IsCi0JMHhmODI3LAkweGY4NjAsCTB4ZjIwMCwJMHhmODBkLAkweGY3MDAsCTB4ZjIwMCwJMHhmODdhLAkweGY4NzgsCi0JMHhmODYzLAkweGY4NzYsCTB4Zjg2MiwJMHhmODJjLAkweGY4MmUsCTB4ZjgyZiwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGY3MDAsCTB4ZjcwMiwJMHhmMjAwLAkweGY3MDMsCTB4ZjgyMCwJMHhmNzAzLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMTE1LAkweGYwN2YsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMTAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmNjAzLAkweGY2MDAsCTB4ZjExOCwJMHhmMTE5LAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMTEsCTB4ZjIwOCwJMHhmMDJkLAkweGYwMmIsCTB4ZjMwYywJMHhmMDJlLAkweGYzMGQsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMTE3LAkweGY2MDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCi0JMHhmNTAwLAkweGY1MDEsCTB4ZjUwMiwJMHhmNTAzLAkweGY1MDQsCTB4ZjUwNSwJMHhmNTA2LAkweGY1MDcsCi0JMHhmNTA4LAkweGY1MDksCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMTFkLAkweGYyMDAsCi19OwotCi11X3Nob3J0IGN0cmxfYWx0X21hcFtOUl9LRVlTXSA9IHsKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjgxMSwJMHhmODE3LAkweGY4MDUsCTB4ZjgxMiwJMHhmODE0LAkweGY4MTksCTB4ZjgxNSwKLQkweGY4MDksCTB4ZjgwZiwJMHhmODEwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDcsCTB4ZjgwMSwKLQkweGY4MTMsCTB4ZjgwNCwJMHhmODA2LAkweGY4MDcsCTB4ZjgwOCwJMHhmODBhLAkweGY4MGIsCTB4ZjgwYywKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDEsCTB4ZjcwMCwJMHhmMjAwLAkweGY4MWEsCTB4ZjgxOCwKLQkweGY4MDMsCTB4ZjgxNiwJMHhmODAyLAkweGY4MGUsCTB4ZjgwZCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjcwMCwJMHhmNzAyLAkweGYyMDAsCTB4ZjcwMywJMHhmMjAwLAkweGY3MDMsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYxMTUsCTB4ZjA3ZiwJMHhmMjAwLAkweGYyMDAsCTB4ZjYwMSwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGY2MDMsCTB4ZjYwMCwJMHhmMTE4LAkweGYxMTksCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjYwMiwJMHhmMjA4LAkweGYwMmQsCTB4ZjAyYiwJMHhmMzBjLAkweGYwMmUsCTB4ZjMwZCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwKLQkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYxMTcsCTB4ZjYwMCwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwKLQkweGY1MDAsCTB4ZjUwMSwJMHhmNTAyLAkweGY1MDMsCTB4ZjUwNCwJMHhmNTA1LAkweGY1MDYsCTB4ZjUwNywKLQkweGY1MDgsCTB4ZjUwOSwJMHhmMjAwLAkweGYyMDAsCTB4ZjIwMCwJMHhmMjAwLAkweGYxMWQsCTB4ZjIwMCwKLX07Ci0KLXVzaG9ydCAqa2V5X21hcHNbTUFYX05SX0tFWU1BUFNdID0gewotCXBsYWluX21hcCwgc2hpZnRfbWFwLCBhbHRncl9tYXAsIDAsCi0JY3RybF9tYXAsIHNoaWZ0X2N0cmxfbWFwLCAwLCAwLAotCWFsdF9tYXAsIDAsIDAsIDAsCi0JY3RybF9hbHRfbWFwLAkwCi19OwotCi11bnNpZ25lZCBpbnQga2V5bWFwX2NvdW50ID0gNzsKLQotCi0vKgotICogUGhpbG9zb3BoeTogbW9zdCBwZW9wbGUgZG8gbm90IGRlZmluZSBtb3JlIHN0cmluZ3MsIGJ1dCB0aGV5IHdobyBkbwotICogb2Z0ZW4gd2FudCBxdWl0ZSBhIGxvdCBvZiBzdHJpbmcgc3BhY2UuIFNvLCB3ZSBzdGF0aWNhbGx5IGFsbG9jYXRlCi0gKiB0aGUgZGVmYXVsdCBhbmQgYWxsb2NhdGUgZHluYW1pY2FsbHkgaW4gY2h1bmtzIG9mIDUxMiBieXRlcy4KLSAqLwotCi1jaGFyIGZ1bmNfYnVmW10gPSB7Ci0JJ1wwMzMnLCAnWycsICdbJywgJ0EnLCAwLCAKLQknXDAzMycsICdbJywgJ1snLCAnQicsIDAsIAotCSdcMDMzJywgJ1snLCAnWycsICdDJywgMCwgCi0JJ1wwMzMnLCAnWycsICdbJywgJ0QnLCAwLCAKLQknXDAzMycsICdbJywgJ1snLCAnRScsIDAsIAotCSdcMDMzJywgJ1snLCAnMScsICc3JywgJ34nLCAwLCAKLQknXDAzMycsICdbJywgJzEnLCAnOCcsICd+JywgMCwgCi0JJ1wwMzMnLCAnWycsICcxJywgJzknLCAnficsIDAsIAotCSdcMDMzJywgJ1snLCAnMicsICcwJywgJ34nLCAwLCAKLQknXDAzMycsICdbJywgJzInLCAnMScsICd+JywgMCwgCi0JJ1wwMzMnLCAnWycsICcyJywgJzMnLCAnficsIDAsIAotCSdcMDMzJywgJ1snLCAnMicsICc0JywgJ34nLCAwLCAKLQknXDAzMycsICdbJywgJzInLCAnNScsICd+JywgMCwgCi0JJ1wwMzMnLCAnWycsICcyJywgJzYnLCAnficsIDAsIAotCSdcMDMzJywgJ1snLCAnMicsICc4JywgJ34nLCAwLCAKLQknXDAzMycsICdbJywgJzInLCAnOScsICd+JywgMCwgCi0JJ1wwMzMnLCAnWycsICczJywgJzEnLCAnficsIDAsIAotCSdcMDMzJywgJ1snLCAnMycsICcyJywgJ34nLCAwLCAKLQknXDAzMycsICdbJywgJzMnLCAnMycsICd+JywgMCwgCi0JJ1wwMzMnLCAnWycsICczJywgJzQnLCAnficsIDAsIAotCSdcMDMzJywgJ1snLCAnMScsICd+JywgMCwgCi0JJ1wwMzMnLCAnWycsICcyJywgJ34nLCAwLCAKLQknXDAzMycsICdbJywgJzMnLCAnficsIDAsIAotCSdcMDMzJywgJ1snLCAnNCcsICd+JywgMCwgCi0JJ1wwMzMnLCAnWycsICc1JywgJ34nLCAwLCAKLQknXDAzMycsICdbJywgJzYnLCAnficsIDAsIAotCSdcMDMzJywgJ1snLCAnTScsIDAsIAotCSdcMDMzJywgJ1snLCAnUCcsIDAsIAotfTsKLQotCi1jaGFyICpmdW5jYnVmcHRyID0gZnVuY19idWY7Ci1pbnQgZnVuY2J1ZnNpemUgPSBzaXplb2YoZnVuY19idWYpOwotaW50IGZ1bmNidWZsZWZ0ID0gMDsgICAgICAgICAgLyogc3BhY2UgbGVmdCAqLwotCi1jaGFyICpmdW5jX3RhYmxlW01BWF9OUl9GVU5DXSA9IHsKLQlmdW5jX2J1ZiArIDAsCi0JZnVuY19idWYgKyA1LAotCWZ1bmNfYnVmICsgMTAsCi0JZnVuY19idWYgKyAxNSwKLQlmdW5jX2J1ZiArIDIwLAotCWZ1bmNfYnVmICsgMjUsCi0JZnVuY19idWYgKyAzMSwKLQlmdW5jX2J1ZiArIDM3LAotCWZ1bmNfYnVmICsgNDMsCi0JZnVuY19idWYgKyA0OSwKLQlmdW5jX2J1ZiArIDU1LAotCWZ1bmNfYnVmICsgNjEsCi0JZnVuY19idWYgKyA2NywKLQlmdW5jX2J1ZiArIDczLAotCWZ1bmNfYnVmICsgNzksCi0JZnVuY19idWYgKyA4NSwKLQlmdW5jX2J1ZiArIDkxLAotCWZ1bmNfYnVmICsgOTcsCi0JZnVuY19idWYgKyAxMDMsCi0JZnVuY19idWYgKyAxMDksCi0JZnVuY19idWYgKyAxMTUsCi0JZnVuY19idWYgKyAxMjAsCi0JZnVuY19idWYgKyAxMjUsCi0JZnVuY19idWYgKyAxMzAsCi0JZnVuY19idWYgKyAxMzUsCi0JZnVuY19idWYgKyAxNDAsCi0JZnVuY19idWYgKyAxNDUsCi0JMCwKLQkwLAotCWZ1bmNfYnVmICsgMTQ5LAotCTAsCi19OwotCi1zdHJ1Y3Qga2JkaWFjciBhY2NlbnRfdGFibGVbTUFYX0RJQUNSXSA9IHsKLQl7J2AnLCAnQScsICfAJ30sCXsnYCcsICdhJywgJ+AnfSwKLQl7J1wnJywgJ0EnLCAnwSd9LAl7J1wnJywgJ2EnLCAn4Sd9LAotCXsnXicsICdBJywgJ8InfSwJeydeJywgJ2EnLCAn4id9LAotCXsnficsICdBJywgJ8MnfSwJeyd+JywgJ2EnLCAn4yd9LAotCXsnIicsICdBJywgJ8QnfSwJeyciJywgJ2EnLCAn5Cd9LAotCXsnTycsICdBJywgJ8UnfSwJeydvJywgJ2EnLCAn5Sd9LAotCXsnMCcsICdBJywgJ8UnfSwJeycwJywgJ2EnLCAn5Sd9LAotCXsnQScsICdBJywgJ8UnfSwJeydhJywgJ2EnLCAn5Sd9LAotCXsnQScsICdFJywgJ8YnfSwJeydhJywgJ2UnLCAn5id9LAotCXsnLCcsICdDJywgJ8cnfSwJeycsJywgJ2MnLCAn5yd9LAotCXsnYCcsICdFJywgJ8gnfSwJeydgJywgJ2UnLCAn6Cd9LAotCXsnXCcnLCAnRScsICfJJ30sCXsnXCcnLCAnZScsICfpJ30sCi0JeydeJywgJ0UnLCAnyid9LAl7J14nLCAnZScsICfqJ30sCi0JeyciJywgJ0UnLCAnyyd9LAl7JyInLCAnZScsICfrJ30sCi0JeydgJywgJ0knLCAnzCd9LAl7J2AnLCAnaScsICfsJ30sCi0JeydcJycsICdJJywgJ80nfSwJeydcJycsICdpJywgJ+0nfSwKLQl7J14nLCAnSScsICfOJ30sCXsnXicsICdpJywgJ+4nfSwKLQl7JyInLCAnSScsICfPJ30sCXsnIicsICdpJywgJ+8nfSwKLQl7Jy0nLCAnRCcsICfQJ30sCXsnLScsICdkJywgJ/AnfSwKLQl7J34nLCAnTicsICfRJ30sCXsnficsICduJywgJ/EnfSwKLQl7J2AnLCAnTycsICfSJ30sCXsnYCcsICdvJywgJ/InfSwKLQl7J1wnJywgJ08nLCAn0yd9LAl7J1wnJywgJ28nLCAn8yd9LAotCXsnXicsICdPJywgJ9QnfSwJeydeJywgJ28nLCAn9Cd9LAotCXsnficsICdPJywgJ9UnfSwJeyd+JywgJ28nLCAn9Sd9LAotCXsnIicsICdPJywgJ9YnfSwJeyciJywgJ28nLCAn9id9LAotCXsnLycsICdPJywgJ9gnfSwJeycvJywgJ28nLCAn+Cd9LAotCXsnYCcsICdVJywgJ9knfSwJeydgJywgJ3UnLCAn+Sd9LAotCXsnXCcnLCAnVScsICfaJ30sCXsnXCcnLCAndScsICf6J30sCi0JeydeJywgJ1UnLCAn2yd9LAl7J14nLCAndScsICf7J30sCi0JeyciJywgJ1UnLCAn3Cd9LAl7JyInLCAndScsICf8J30sCi0JeydcJycsICdZJywgJ90nfSwJeydcJycsICd5JywgJ/0nfSwKLQl7J1QnLCAnSCcsICfeJ30sCXsndCcsICdoJywgJ/4nfSwKLQl7J3MnLCAncycsICffJ30sCXsnIicsICd5JywgJ/8nfSwKLQl7J3MnLCAneicsICffJ30sCXsnaScsICdqJywgJ/8nfSwKLX07Ci0KLXVuc2lnbmVkIGludCBhY2NlbnRfdGFibGVfc2l6ZSA9IDY4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3F0cm9uaXhtYXAubWFwIGIvZHJpdmVycy9jaGFyL3F0cm9uaXhtYXAubWFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDFmZjVjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9xdHJvbml4bWFwLm1hcAorKysgL2Rldi9udWxsCkBAIC0xLDI4NyArMCwwIEBACi0jIERlZmF1bHQga2VybmVsIGtleW1hcC4gVGhpcyB1c2VzIDcgbW9kaWZpZXIgY29tYmluYXRpb25zLgota2V5bWFwcyAwLTIsNC01LDgsMTIKLSMgQ2hhbmdlIHRoZSBhYm92ZSBsaW5lIGludG8KLSMJa2V5bWFwcyAwLTIsNC02LDgsMTIKLSMgaW4gY2FzZSB5b3Ugd2FudCB0aGUgZW50cmllcwotIwlhbHRnciAgIGNvbnRyb2wga2V5Y29kZSAgODMgPSBCb290ICAgICAgICAgICAgCi0jCWFsdGdyICAgY29udHJvbCBrZXljb2RlIDExMSA9IEJvb3QgICAgICAgICAgICAKLSMgYmVsb3cuCi0jCi0jIEluIGZhY3QgQWx0R3IgaXMgdXNlZCB2ZXJ5IGxpdHRsZSwgYW5kIG9uZSBtb3JlIGtleW1hcCBjYW4KLSMgYmUgc2F2ZWQgYnkgbWFwcGluZyBBbHRHciB0byBBbHQgKGFuZCBhZGFwdGluZyBhIGZldyBlbnRyaWVzKToKLSMga2V5Y29kZSAxMDAgPSBBbHQKLSMKLWtleWNvZGUgICAxID0gZ3JhdmUgICAgICAgIGFzY2lpdGlsZGUKLQlhbHQgICAgIGtleWNvZGUgICAxID0gTWV0YV9Fc2NhcGUgICAgIAota2V5Y29kZSAgIDIgPSBvbmUgICAgICAgICAgICAgIGV4Y2xhbSAgICAgICAgICAKLQlhbHQgICAgIGtleWNvZGUgICAyID0gTWV0YV9vbmUgICAgICAgIAota2V5Y29kZSAgIDMgPSB0d28gICAgICAgICAgICAgIGF0ICAgICAgICAgICAgICAgYXQgICAgICAgICAgICAgIAotCWNvbnRyb2wJa2V5Y29kZSAgIDMgPSBudWwgICAgICAgICAgICAgCi0Jc2hpZnQJY29udHJvbAlrZXljb2RlICAgMyA9IG51bCAgICAgICAgICAgICAKLQlhbHQJa2V5Y29kZSAgIDMgPSBNZXRhX3R3byAgICAgICAgCi1rZXljb2RlICAgNCA9IHRocmVlICAgICAgICAgICAgbnVtYmVyc2lnbiAgICAgIAotCWNvbnRyb2wga2V5Y29kZSAgIDQgPSBFc2NhcGUgICAgICAgICAgCi0JYWx0ICAgICBrZXljb2RlICAgNCA9IE1ldGFfdGhyZWUgICAgICAKLWtleWNvZGUgICA1ID0gZm91ciAgICAgICAgICAgICBkb2xsYXIgICAgICAgICAgIGRvbGxhciAgICAgICAgICAKLQljb250cm9sIGtleWNvZGUgICA1ID0gQ29udHJvbF9iYWNrc2xhc2gKLQlhbHQgICAgIGtleWNvZGUgICA1ID0gTWV0YV9mb3VyICAgICAgIAota2V5Y29kZSAgIDYgPSBmaXZlICAgICAgICAgICAgIHBlcmNlbnQgICAgICAgICAKLQljb250cm9sIGtleWNvZGUgICA2ID0gQ29udHJvbF9icmFja2V0cmlnaHQKLQlhbHQgICAgIGtleWNvZGUgICA2ID0gTWV0YV9maXZlICAgICAgIAota2V5Y29kZSAgIDcgPSBzaXggICAgICAgICAgICAgIGFzY2lpY2lyY3VtICAgICAKLQljb250cm9sIGtleWNvZGUgICA3ID0gQ29udHJvbF9hc2NpaWNpcmN1bQotCWFsdCAgICAga2V5Y29kZSAgIDcgPSBNZXRhX3NpeCAgICAgICAgCi1rZXljb2RlICAgOCA9IHNldmVuICAgICAgICAgICAgYW1wZXJzYW5kICAgICAgICBicmFjZWxlZnQgICAgICAgCi0JY29udHJvbCBrZXljb2RlICAgOCA9IENvbnRyb2xfdW5kZXJzY29yZQotCWFsdCAgICAga2V5Y29kZSAgIDggPSBNZXRhX3NldmVuICAgICAgCi1rZXljb2RlICAgOSA9IGVpZ2h0ICAgICAgICAgICAgYXN0ZXJpc2sgICAgICAgICBicmFja2V0bGVmdCAgICAgCi0JY29udHJvbCBrZXljb2RlICAgOSA9IERlbGV0ZSAgICAgICAgICAKLQlhbHQgICAgIGtleWNvZGUgICA5ID0gTWV0YV9laWdodCAgICAgIAota2V5Y29kZSAgMTAgPSBuaW5lICAgICAgICAgICAgIHBhcmVubGVmdCAgICAgICAgYnJhY2tldHJpZ2h0ICAgIAotCWFsdCAgICAga2V5Y29kZSAgMTAgPSBNZXRhX25pbmUgICAgICAgCi1rZXljb2RlICAxMSA9IHplcm8gICAgICAgICAgICAgcGFyZW5yaWdodCAgICAgICBicmFjZXJpZ2h0ICAgICAgCi0JYWx0ICAgICBrZXljb2RlICAxMSA9IE1ldGFfemVybyAgICAgICAKLWtleWNvZGUgIDEyID0gbWludXMgICAgICAgICAgICB1bmRlcnNjb3JlICAgICAgIGJhY2tzbGFzaCAgICAgICAKLQljb250cm9sCWtleWNvZGUgIDEyID0gQ29udHJvbF91bmRlcnNjb3JlCi0Jc2hpZnQJY29udHJvbAlrZXljb2RlICAxMiA9IENvbnRyb2xfdW5kZXJzY29yZQotCWFsdAlrZXljb2RlICAxMiA9IE1ldGFfbWludXMgICAgICAKLWtleWNvZGUgIDEzID0gZXF1YWwgICAgICAgICAgICBwbHVzICAgICAgICAgICAgCi0JYWx0ICAgICBrZXljb2RlICAxMyA9IE1ldGFfZXF1YWwgICAgICAKLWtleWNvZGUgIDE1ID0gRGVsZXRlICAgICAgICAgICBEZWxldGUgICAgICAgICAgCi0JY29udHJvbCBrZXljb2RlICAxNSA9IEJhY2tTcGFjZQotCWFsdCAgICAga2V5Y29kZSAgMTUgPSBNZXRhX0RlbGV0ZSAgICAgCi1rZXljb2RlICAxNiA9IFRhYiAgICAgICAgICAgICAgVGFiICAgICAgICAgICAgIAotCWFsdCAgICAga2V5Y29kZSAgMTYgPSBNZXRhX1RhYiAgICAgICAgCi1rZXljb2RlICAxNyA9IHEgICAgICAgICAgICAgICAKLWtleWNvZGUgIDE4ID0gdyAgICAgICAgICAgICAgIAota2V5Y29kZSAgMTkgPSBlCi1rZXljb2RlICAyMCA9IHIgICAgICAgICAgICAgICAKLWtleWNvZGUgIDIxID0gdCAgICAgICAgICAgICAgIAota2V5Y29kZSAgMjIgPSB5ICAgICAgICAgICAgICAgCi1rZXljb2RlICAyMyA9IHUJIAota2V5Y29kZSAgMjQgPSBpICAgICAgICAgICAgICAgCi1rZXljb2RlICAyNSA9IG8gICAgICAgICAgICAgICAKLWtleWNvZGUgIDI2ID0gcCAgICAgICAgICAgICAgIAota2V5Y29kZSAgMjcgPSBicmFja2V0bGVmdCAgICAgIGJyYWNlbGVmdCAgICAgICAKLQljb250cm9sIGtleWNvZGUgIDI3ID0gRXNjYXBlICAgICAgICAgIAotCWFsdCAgICAga2V5Y29kZSAgMjcgPSBNZXRhX2JyYWNrZXRsZWZ0Ci1rZXljb2RlICAyOCA9IGJyYWNrZXRyaWdodCAgICAgYnJhY2VyaWdodAotCWNvbnRyb2wga2V5Y29kZSAgMjggPSBDb250cm9sX2JyYWNrZXRyaWdodAotCWFsdCAgICAga2V5Y29kZSAgMjggPSBNZXRhX2JyYWNrZXRyaWdodAota2V5Y29kZSAgMjkgPSBiYWNrc2xhc2ggICAgICAgIGJhciAgICAgICAgICAgICAKLQljb250cm9sIGtleWNvZGUgIDI5ID0gQ29udHJvbF9iYWNrc2xhc2gKLQlhbHQgICAgIGtleWNvZGUgIDI5ID0gTWV0YV9iYWNrc2xhc2ggIAota2V5Y29kZSAgMzAgPSBDYXBzX0xvY2sKLWtleWNvZGUgIDMxID0gYSAgICAgICAgICAgICAgIAota2V5Y29kZSAgMzIgPSBzCi1rZXljb2RlICAzMyA9IGQKLWtleWNvZGUgIDM0ID0gZiAgICAgICAgICAgICAgIAota2V5Y29kZSAgMzUgPSBnICAgICAgICAgICAgICAgCi1rZXljb2RlICAzNiA9IGggICAgICAgICAgICAgICAKLWtleWNvZGUgIDM3ID0gaiAgICAgICAgICAgICAgIAota2V5Y29kZSAgMzggPSBrICAgICAgICAgICAgICAgCi1rZXljb2RlICAzOSA9IGwgICAgICAgICAgICAgICAKLWtleWNvZGUgIDQwID0gc2VtaWNvbG9uICAgICAgICBjb2xvbiAgICAgICAgICAgCi0JYWx0ICAgICBrZXljb2RlICAzOSA9IE1ldGFfc2VtaWNvbG9uICAKLWtleWNvZGUgIDQxID0gYXBvc3Ryb3BoZSAgICAgICBxdW90ZWRibCAgICAgICAgCi0JY29udHJvbCBrZXljb2RlICA0MCA9IENvbnRyb2xfZyAgICAgICAKLQlhbHQgICAgIGtleWNvZGUgIDQwID0gTWV0YV9hcG9zdHJvcGhlIAota2V5Y29kZSAgNDIgPSBncmF2ZSAgICAgICAgICAgIGFzY2lpdGlsZGUgICAgICAKLQljb250cm9sIGtleWNvZGUgIDQxID0gbnVsICAgICAgICAgICAgIAotCWFsdCAgICAga2V5Y29kZSAgNDEgPSBNZXRhX2dyYXZlICAgICAgCi1rZXljb2RlICA0MyA9IFJldHVybiAgICAgICAgICAKLQlhbHQgICAgIGtleWNvZGUgIDQzID0gTWV0YV9Db250cm9sX20gIAota2V5Y29kZSAgNDQgPSBTaGlmdCAgICAgICAgICAgICAgIAota2V5Y29kZSAgNDYgPSB6Ci1rZXljb2RlICA0NyA9IHggICAgICAgICAgICAgICAKLWtleWNvZGUgIDQ4ID0gYwota2V5Y29kZSAgNDkgPSB2ICAgICAgICAgICAgICAgCi1rZXljb2RlICA1MCA9IGIgICAgICAgICAgICAgICAKLWtleWNvZGUgIDUxID0gbgota2V5Y29kZSAgNTIgPSBtCi1rZXljb2RlICA1MyA9IGNvbW1hICAgICAgICAgICAgbGVzcyAgICAgICAgICAgIAotCWFsdCAgICAga2V5Y29kZSAgNTEgPSBNZXRhX2NvbW1hICAgICAgCi1rZXljb2RlICA1NCA9IHBlcmlvZCAgICAgICAgICAgZ3JlYXRlciAgICAgICAgIAotCWNvbnRyb2wga2V5Y29kZSAgNTIgPSBDb21wb3NlICAgICAgICAgCi0JYWx0ICAgICBrZXljb2RlICA1MiA9IE1ldGFfcGVyaW9kICAgICAKLWtleWNvZGUgIDU1ID0gc2xhc2ggICAgICAgICAgICBxdWVzdGlvbiAgICAgICAgCi0JY29udHJvbCBrZXljb2RlICA1MyA9IERlbGV0ZSAgICAgICAgICAKLQlhbHQgICAgIGtleWNvZGUgIDUzID0gTWV0YV9zbGFzaCAgICAgIAota2V5Y29kZSAgNTcgPSBTaGlmdAota2V5Y29kZSAgNTggPSBDb250cm9sCi1rZXljb2RlICA2MCA9IEFsdAota2V5Y29kZSAgNjEgPSBzcGFjZSAgICAgICAgICAgIHNwYWNlICAgICAgICAgICAKLQljb250cm9sIGtleWNvZGUgIDYxID0gbnVsICAgICAgICAgICAgIAotCWFsdCAgICAga2V5Y29kZSAgNjEgPSBNZXRhX3NwYWNlICAgICAgCi1rZXljb2RlICA2MiA9IEFsdAotCi1rZXljb2RlIDc1ID0gSW5zZXJ0ICAgICAgICAgIAota2V5Y29kZSA3NiA9IERlbGV0ZSAgICAgICAgICAKLQota2V5Y29kZSA4MyA9IFVwICAgICAgICAgICAgICAKLWtleWNvZGUgODQgPSBEb3duICAgICAgICAgICAgICAKLQota2V5Y29kZSA4NSA9IFByaW9yICAgICAgICAgICAKLQlzaGlmdCAgIGtleWNvZGUgODUgPSBTY3JvbGxfQmFja3dhcmQgCi1rZXljb2RlIDg2ID0gTmV4dCAgICAgICAgICAgIAotCXNoaWZ0ICAga2V5Y29kZSA4NiA9IFNjcm9sbF9Gb3J3YXJkICAKLWtleWNvZGUgODkgPSBSaWdodCAgICAgICAgICAgCi0JYWx0ICAgICBrZXljb2RlIDg5ID0gSW5jcl9Db25zb2xlCi1rZXljb2RlIDc5ID0gTGVmdCAgICAgICAgICAgIAotCWFsdCAgICAga2V5Y29kZSA3OSA9IERlY3JfQ29uc29sZQotCi1rZXljb2RlICA5MCA9IE51bV9Mb2NrCi0Jc2hpZnQgICBrZXljb2RlICA5MCA9IEJhcmVfTnVtX0xvY2sKLQota2V5Y29kZSA5MSA9IG1pbnVzCi1rZXljb2RlIDkyID0gcGx1cwota2V5Y29kZSA5MyA9IEtQX011bHRpcGx5Ci1rZXljb2RlIDk0ID0gcGVyaW9kCi1rZXljb2RlIDk1ID0gS1BfRGl2aWRlCi0KLWtleWNvZGUgMTA3ID0gU2VsZWN0ICAgICAgICAgIAota2V5Y29kZSAxMDggPSBEb3duICAgICAgICAgICAgCi0KLWtleWNvZGUgMTEwID0gRXNjYXBlICAgICAgICAgICBFc2NhcGUgICAgICAgICAgCi0JYWx0ICAgICBrZXljb2RlICAgMSA9IE1ldGFfRXNjYXBlICAgICAKLQota2V5Y29kZSAgMTEyID0gRjEgICAgICAgICAgICAgIEYxMSAgICAgICAgICAgICAgQ29uc29sZV8xMyAgICAgIAotCWNvbnRyb2wga2V5Y29kZSAgMTEyID0gRjEgICAgICAgICAgICAgIAotCWFsdCAgICAga2V5Y29kZSAgMTEyID0gQ29uc29sZV8xICAgICAgIAotCWNvbnRyb2wgYWx0ICAgICBrZXljb2RlICAxMTIgPSBDb25zb2xlXzEgICAgICAgCi1rZXljb2RlICAxMTMgPSBGMiAgICAgICAgICAgICAgRjEyICAgICAgICAgICAgICBDb25zb2xlXzE0ICAgICAgCi0JY29udHJvbCBrZXljb2RlICAxMTMgPSBGMiAgICAgICAgICAgICAgCi0JYWx0ICAgICBrZXljb2RlICAxMTMgPSBDb25zb2xlXzIgICAgICAgCi0JY29udHJvbCBhbHQgICAgIGtleWNvZGUgIDExMyA9IENvbnNvbGVfMiAgICAgICAKLWtleWNvZGUgIDExNCA9IEYzICAgICAgICAgICAgICBGMTMgICAgICAgICAgICAgIENvbnNvbGVfMTUgICAgICAKLQljb250cm9sIGtleWNvZGUgIDExNCA9IEYzICAgICAgICAgICAgICAKLQlhbHQgICAgIGtleWNvZGUgIDExNCA9IENvbnNvbGVfMyAgICAgICAKLQljb250cm9sIGFsdCAgICAga2V5Y29kZSAgMTE0ID0gQ29uc29sZV8zICAgICAgIAota2V5Y29kZSAgMTE1ID0gRjQgICAgICAgICAgICAgIEYxNCAgICAgICAgICAgICAgQ29uc29sZV8xNiAgICAgIAotCWNvbnRyb2wga2V5Y29kZSAgMTE1ID0gRjQgICAgICAgICAgICAgIAotCWFsdCAgICAga2V5Y29kZSAgMTE1ID0gQ29uc29sZV80ICAgICAgIAotCWNvbnRyb2wgYWx0ICAgICBrZXljb2RlICAxMTUgPSBDb25zb2xlXzQgICAgICAgCi1rZXljb2RlICAxMTYgPSBGNSAgICAgICAgICAgICAgRjE1ICAgICAgICAgICAgICBDb25zb2xlXzE3ICAgICAgCi0JY29udHJvbCBrZXljb2RlICAxMTYgPSBGNSAgICAgICAgICAgICAgCi0JYWx0ICAgICBrZXljb2RlICAxMTYgPSBDb25zb2xlXzUgICAgICAgCi0JY29udHJvbCBhbHQgICAgIGtleWNvZGUgIDExNiA9IENvbnNvbGVfNSAgICAgICAKLWtleWNvZGUgIDExNyA9IEY2ICAgICAgICAgICAgICBGMTYgICAgICAgICAgICAgIENvbnNvbGVfMTggICAgICAKLQljb250cm9sIGtleWNvZGUgIDExNyA9IEY2ICAgICAgICAgICAgICAKLQlhbHQgICAgIGtleWNvZGUgIDExNyA9IENvbnNvbGVfNiAgICAgICAKLQljb250cm9sIGFsdCAgICAga2V5Y29kZSAgMTE3ID0gQ29uc29sZV82ICAgICAgIAota2V5Y29kZSAgMTE4ID0gRjcgICAgICAgICAgICAgIEYxNyAgICAgICAgICAgICAgQ29uc29sZV8xOSAgICAgIAotCWNvbnRyb2wga2V5Y29kZSAgMTE4ID0gRjcgICAgICAgICAgICAgIAotCWFsdCAgICAga2V5Y29kZSAgMTE4ID0gQ29uc29sZV83ICAgICAgIAotCWNvbnRyb2wgYWx0ICAgICBrZXljb2RlICAxMTggPSBDb25zb2xlXzcgICAgICAgCi1rZXljb2RlICAxMTkgPSBGOCAgICAgICAgICAgICAgRjE4ICAgICAgICAgICAgICBDb25zb2xlXzIwICAgICAgCi0JY29udHJvbCBrZXljb2RlICAxMTkgPSBGOCAgICAgICAgICAgICAgCi0JYWx0ICAgICBrZXljb2RlICAxMTkgPSBDb25zb2xlXzggICAgICAgCi0JY29udHJvbCBhbHQgICAgIGtleWNvZGUgIDExOSA9IENvbnNvbGVfOCAgICAgICAKLWtleWNvZGUgIDEyMCA9IEY5ICAgICAgICAgICAgICBGMTkgICAgICAgICAgICAgIENvbnNvbGVfMjEgICAgICAKLQljb250cm9sIGtleWNvZGUgIDEyMCA9IEY5ICAgICAgICAgICAgICAKLQlhbHQgICAgIGtleWNvZGUgIDEyMCA9IENvbnNvbGVfOSAgICAgICAKLQljb250cm9sIGFsdCAgICAga2V5Y29kZSAgMTIwID0gQ29uc29sZV85ICAgICAgIAota2V5Y29kZSAgMTIxID0gRjEwICAgICAgICAgICAgIEYyMCAgICAgICAgICAgICAgQ29uc29sZV8yMiAgICAgIAotCWNvbnRyb2wga2V5Y29kZSAgMTIxID0gRjEwICAgICAgICAgICAgIAotCWFsdCAgICAga2V5Y29kZSAgMTIxID0gQ29uc29sZV8xMCAgICAgIAotCWNvbnRyb2wgYWx0ICAgICBrZXljb2RlICAxMjEgPSBDb25zb2xlXzEwICAgICAgCi0JCi1rZXljb2RlIDEyNiA9IFBhdXNlICAgICAgICAgICAKLQotCi1zdHJpbmcgRjEgPSAiXDAzM1tbQSIKLXN0cmluZyBGMiA9ICJcMDMzW1tCIgotc3RyaW5nIEYzID0gIlwwMzNbW0MiCi1zdHJpbmcgRjQgPSAiXDAzM1tbRCIKLXN0cmluZyBGNSA9ICJcMDMzW1tFIgotc3RyaW5nIEY2ID0gIlwwMzNbMTd+Igotc3RyaW5nIEY3ID0gIlwwMzNbMTh+Igotc3RyaW5nIEY4ID0gIlwwMzNbMTl+Igotc3RyaW5nIEY5ID0gIlwwMzNbMjB+Igotc3RyaW5nIEYxMCA9ICJcMDMzWzIxfiIKLXN0cmluZyBGMTEgPSAiXDAzM1syM34iCi1zdHJpbmcgRjEyID0gIlwwMzNbMjR+Igotc3RyaW5nIEYxMyA9ICJcMDMzWzI1fiIKLXN0cmluZyBGMTQgPSAiXDAzM1syNn4iCi1zdHJpbmcgRjE1ID0gIlwwMzNbMjh+Igotc3RyaW5nIEYxNiA9ICJcMDMzWzI5fiIKLXN0cmluZyBGMTcgPSAiXDAzM1szMX4iCi1zdHJpbmcgRjE4ID0gIlwwMzNbMzJ+Igotc3RyaW5nIEYxOSA9ICJcMDMzWzMzfiIKLXN0cmluZyBGMjAgPSAiXDAzM1szNH4iCi1zdHJpbmcgRmluZCA9ICJcMDMzWzF+Igotc3RyaW5nIEluc2VydCA9ICJcMDMzWzJ+Igotc3RyaW5nIFJlbW92ZSA9ICJcMDMzWzN+Igotc3RyaW5nIFNlbGVjdCA9ICJcMDMzWzR+Igotc3RyaW5nIFByaW9yID0gIlwwMzNbNX4iCi1zdHJpbmcgTmV4dCA9ICJcMDMzWzZ+Igotc3RyaW5nIE1hY3JvID0gIlwwMzNbTSIKLXN0cmluZyBQYXVzZSA9ICJcMDMzW1AiCi1jb21wb3NlICdgJyAnQScgdG8gJ8AnCi1jb21wb3NlICdgJyAnYScgdG8gJ+AnCi1jb21wb3NlICdcJycgJ0EnIHRvICfBJwotY29tcG9zZSAnXCcnICdhJyB0byAn4ScKLWNvbXBvc2UgJ14nICdBJyB0byAnwicKLWNvbXBvc2UgJ14nICdhJyB0byAn4icKLWNvbXBvc2UgJ34nICdBJyB0byAnwycKLWNvbXBvc2UgJ34nICdhJyB0byAn4ycKLWNvbXBvc2UgJyInICdBJyB0byAnxCcKLWNvbXBvc2UgJyInICdhJyB0byAn5CcKLWNvbXBvc2UgJ08nICdBJyB0byAnxScKLWNvbXBvc2UgJ28nICdhJyB0byAn5ScKLWNvbXBvc2UgJzAnICdBJyB0byAnxScKLWNvbXBvc2UgJzAnICdhJyB0byAn5ScKLWNvbXBvc2UgJ0EnICdBJyB0byAnxScKLWNvbXBvc2UgJ2EnICdhJyB0byAn5ScKLWNvbXBvc2UgJ0EnICdFJyB0byAnxicKLWNvbXBvc2UgJ2EnICdlJyB0byAn5icKLWNvbXBvc2UgJywnICdDJyB0byAnxycKLWNvbXBvc2UgJywnICdjJyB0byAn5ycKLWNvbXBvc2UgJ2AnICdFJyB0byAnyCcKLWNvbXBvc2UgJ2AnICdlJyB0byAn6CcKLWNvbXBvc2UgJ1wnJyAnRScgdG8gJ8knCi1jb21wb3NlICdcJycgJ2UnIHRvICfpJwotY29tcG9zZSAnXicgJ0UnIHRvICfKJwotY29tcG9zZSAnXicgJ2UnIHRvICfqJwotY29tcG9zZSAnIicgJ0UnIHRvICfLJwotY29tcG9zZSAnIicgJ2UnIHRvICfrJwotY29tcG9zZSAnYCcgJ0knIHRvICfMJwotY29tcG9zZSAnYCcgJ2knIHRvICfsJwotY29tcG9zZSAnXCcnICdJJyB0byAnzScKLWNvbXBvc2UgJ1wnJyAnaScgdG8gJ+0nCi1jb21wb3NlICdeJyAnSScgdG8gJ84nCi1jb21wb3NlICdeJyAnaScgdG8gJ+4nCi1jb21wb3NlICciJyAnSScgdG8gJ88nCi1jb21wb3NlICciJyAnaScgdG8gJ+8nCi1jb21wb3NlICctJyAnRCcgdG8gJ9AnCi1jb21wb3NlICctJyAnZCcgdG8gJ/AnCi1jb21wb3NlICd+JyAnTicgdG8gJ9EnCi1jb21wb3NlICd+JyAnbicgdG8gJ/EnCi1jb21wb3NlICdgJyAnTycgdG8gJ9InCi1jb21wb3NlICdgJyAnbycgdG8gJ/InCi1jb21wb3NlICdcJycgJ08nIHRvICfTJwotY29tcG9zZSAnXCcnICdvJyB0byAn8ycKLWNvbXBvc2UgJ14nICdPJyB0byAn1CcKLWNvbXBvc2UgJ14nICdvJyB0byAn9CcKLWNvbXBvc2UgJ34nICdPJyB0byAn1ScKLWNvbXBvc2UgJ34nICdvJyB0byAn9ScKLWNvbXBvc2UgJyInICdPJyB0byAn1icKLWNvbXBvc2UgJyInICdvJyB0byAn9icKLWNvbXBvc2UgJy8nICdPJyB0byAn2CcKLWNvbXBvc2UgJy8nICdvJyB0byAn+CcKLWNvbXBvc2UgJ2AnICdVJyB0byAn2ScKLWNvbXBvc2UgJ2AnICd1JyB0byAn+ScKLWNvbXBvc2UgJ1wnJyAnVScgdG8gJ9onCi1jb21wb3NlICdcJycgJ3UnIHRvICf6JwotY29tcG9zZSAnXicgJ1UnIHRvICfbJwotY29tcG9zZSAnXicgJ3UnIHRvICf7JwotY29tcG9zZSAnIicgJ1UnIHRvICfcJwotY29tcG9zZSAnIicgJ3UnIHRvICf8JwotY29tcG9zZSAnXCcnICdZJyB0byAn3ScKLWNvbXBvc2UgJ1wnJyAneScgdG8gJ/0nCi1jb21wb3NlICdUJyAnSCcgdG8gJ94nCi1jb21wb3NlICd0JyAnaCcgdG8gJ/4nCi1jb21wb3NlICdzJyAncycgdG8gJ98nCi1jb21wb3NlICciJyAneScgdG8gJ/8nCi1jb21wb3NlICdzJyAneicgdG8gJ98nCi1jb21wb3NlICdpJyAnaicgdG8gJ/8nCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9LY29uZmlnIGIvZHJpdmVycy9pZGUvS2NvbmZpZwppbmRleCBhYmNhYmIyLi4wYzY4ZDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWRlL0tjb25maWcKQEAgLTYxNCwxNSArNjE0LDYgQEAKIAkgIHRoZSBrZXJuZWwgdG8gY2hhbmdlIFBJTywgRE1BIGFuZCBVRE1BIHNwZWVkcyBhbmQgdG8gY29uZmlndXJlCiAJICB0aGUgY2hpcCB0byBvcHRpbXVtIHBlcmZvcm1hbmNlLgogCi1jb25maWcgQkxLX0RFVl9JVDgxNzIKLQlib29sICJJVDgxNzIgSURFIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAoTUlQU19JVEU4MTcyIHx8IE1JUFNfSVZSKQotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgb24tYm9hcmQgSURFIGNvbnRyb2xsZXIgb24gdGhlIEludGVncmF0ZWQKLQkgIFRlY2hub2xvZ3kgRXhwcmVzcywgSW5jLiBJVEU4MTcyIFNCQy4gIFZlbmRvciBwYWdlIGF0Ci0JICA8aHR0cDovL3d3dy5pdGUuY29tLnR3L2lhL2JyaWVmX2l0ODE3MmJzcC5odG0+OyBwaWN0dXJlIG9mIHRoZQotCSAgYm9hcmQgYXQgPGh0dHA6Ly93d3cubXZpc3RhLmNvbS9wYXJ0bmVycy9zZW1pY29uZHVjdG9yL2l0ZS5odG1sPi4KLQogY29uZmlnIEJMS19ERVZfSVQ4MjFYCiAJdHJpc3RhdGUgIklUODIxWCBJREUgc3VwcG9ydCIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL2lkZS9wY2kvTWFrZWZpbGUKaW5kZXggNjQwYTU0Yi4uZmVmMDg5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNiBAQAogb2JqLSQoQ09ORklHX0JMS19ERVZfSFBUMzRYKQkJKz0gaHB0MzR4Lm8KIG9iai0kKENPTkZJR19CTEtfREVWX0hQVDM2NikJCSs9IGhwdDM2Ni5vCiAjb2JqLSQoQ09ORklHX0JMS19ERVZfSFBUMzdYKQkJKz0gaHB0Mzd4Lm8KLW9iai0kKENPTkZJR19CTEtfREVWX0lUODE3MikJCSs9IGl0ODE3Mi5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JVDgyMVgpCQkrPSBpdDgyMXgubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSk1JQ1JPTikJCSs9IGptaWNyb24ubwogb2JqLSQoQ09ORklHX0JMS19ERVZfTlM4NzQxNSkJCSs9IG5zODc0MTUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2l0ODE3Mi5jIGIvZHJpdmVycy9pZGUvcGNpL2l0ODE3Mi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmM4OWZhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaWRlL3BjaS9pdDgxNzIuYworKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vKgotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICogICAgICBJVDgxNzIgSURFIGNvbnRyb2xsZXIgc3VwcG9ydAotICoKLSAqIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgICAgICAgc3RldmVsQG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyX2ludC5oPgotCi0vKgotICogUHJvdG90eXBlcwotICovCi1zdGF0aWMgdTggaXQ4MTcyX3JhdGVtYXNrIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGl0ODE3Ml90dW5lX2RyaXZlIChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHBpbykKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldgk9IGh3aWYtPnBjaV9kZXY7Ci0JaW50IGlzX3NsYXZlCQk9ICgmaHdpZi0+ZHJpdmVzWzFdID09IGRyaXZlKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUxNiBkcml2ZV9lbmFibGVzOwotCXUzMiBkcml2ZV90aW1pbmc7Ci0KLQlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIHBpbywgNCwgTlVMTCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCAweDQwLCAmZHJpdmVfZW5hYmxlcyk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0NCwgJmRyaXZlX3RpbWluZyk7Ci0KLQkvKgotCSAqIEZJWCEgVGhlIERJT1IvRElPVyBwdWxzZSB3aWR0aCBhbmQgcmVjb3ZlcnkgdGltZXMgaW4gcG9ydCAweDQ0Ci0JICogYXJlIGJlaW5nIGxlZnQgYXQgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIDggUENJIGNsb2NrcyAoMjQyIG5zZWMKLQkgKiBmb3IgYSAzMyBNSHogY2xvY2spLiBUaGVzZSBjYW4gYmUgc2FmZWx5IHNob3J0ZW5lZCBhdCBoaWdoZXIKLQkgKiBQSU8gbW9kZXMuIFRoZSBESU9SL0RJT1cgcHVsc2Ugd2lkdGggYW5kIHJlY292ZXJ5IHRpbWVzIG9ubHkKLQkgKiBhcHBseSB0byBQSU8gbW9kZXMsIG5vdCB0byB0aGUgRE1BIG1vZGVzLgotCSAqLwotCi0JLyoKLQkgKiBFbmFibGUgcG9ydCAweDQ0LiBUaGUgSVQ4MTcyRyBzcGVjIGlzIGNvbmZ1c2VkOyBpdCBjYWxscwotCSAqIHRoaXMgcmVnaXN0ZXIgdGhlICJTbGF2ZSBJREUgVGltaW5nIFJlZ2lzdGVyIiwgYnV0IGluIGZhY3QsCi0JICogaXQgY29udHJvbHMgdGltaW5nIGZvciBib3RoIG1hc3RlciBhbmQgc2xhdmUgZHJpdmVzLgotCSAqLwotCWRyaXZlX2VuYWJsZXMgfD0gMHg0MDAwOwotCi0JaWYgKGlzX3NsYXZlKSB7Ci0JCWRyaXZlX2VuYWJsZXMgJj0gMHhjMDA2OwotCQlpZiAocGlvID4gMSkKLQkJCS8qIGVuYWJsZSBwcmVmZXRjaCBhbmQgSU9SRFkgc2FtcGxlLXBvaW50ICovCi0JCQlkcml2ZV9lbmFibGVzIHw9IDB4MDA2MDsKLQl9IGVsc2UgewotCQlkcml2ZV9lbmFibGVzICY9IDB4YzA2MDsKLQkJaWYgKHBpbyA+IDEpCi0JCQkvKiBlbmFibGUgcHJlZmV0Y2ggYW5kIElPUkRZIHNhbXBsZS1wb2ludCAqLwotCQkJZHJpdmVfZW5hYmxlcyB8PSAweDAwMDY7Ci0JfQotCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgMHg0MCwgZHJpdmVfZW5hYmxlcyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHU4IGl0ODE3Ml9kbWFfMl9waW8gKHU4IHhmZXJfcmF0ZSkKLXsKLQlzd2l0Y2goeGZlcl9yYXRlKSB7Ci0JCWNhc2UgWEZFUl9VRE1BXzU6Ci0JCWNhc2UgWEZFUl9VRE1BXzQ6Ci0JCWNhc2UgWEZFUl9VRE1BXzM6Ci0JCWNhc2UgWEZFUl9VRE1BXzI6Ci0JCWNhc2UgWEZFUl9VRE1BXzE6Ci0JCWNhc2UgWEZFUl9VRE1BXzA6Ci0JCWNhc2UgWEZFUl9NV19ETUFfMjoKLQkJY2FzZSBYRkVSX1BJT180OgotCQkJcmV0dXJuIDQ7Ci0JCWNhc2UgWEZFUl9NV19ETUFfMToKLQkJY2FzZSBYRkVSX1BJT18zOgotCQkJcmV0dXJuIDM7Ci0JCWNhc2UgWEZFUl9TV19ETUFfMjoKLQkJY2FzZSBYRkVSX1BJT18yOgotCQkJcmV0dXJuIDI7Ci0JCWNhc2UgWEZFUl9NV19ETUFfMDoKLQkJY2FzZSBYRkVSX1NXX0RNQV8xOgotCQljYXNlIFhGRVJfU1dfRE1BXzA6Ci0JCWNhc2UgWEZFUl9QSU9fMToKLQkJY2FzZSBYRkVSX1BJT18wOgotCQljYXNlIFhGRVJfUElPX1NMT1c6Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaXQ4MTcyX3R1bmVfY2hpcHNldCAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCB4ZmVyc3BlZWQpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSBod2lmLT5wY2lfZGV2OwotCXU4IHNwZWVkCT0gaWRlX3JhdGVfZmlsdGVyKGl0ODE3Ml9yYXRlbWFzayhkcml2ZSksIHhmZXJzcGVlZCk7Ci0JaW50IGFfc3BlZWQJCT0gMyA8PCAoZHJpdmUtPmRuICogNCk7Ci0JaW50IHVfZmxhZwkJPSAxIDw8IGRyaXZlLT5kbjsKLQlpbnQgdV9zcGVlZAkJPSAwOwotCXU4IHJlZzQ4LCByZWc0YTsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg0OCwgJnJlZzQ4KTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NGEsICZyZWc0YSk7Ci0KLSAgICAvKgotICAgICAqIFNldHRpbmcgdGhlIERNQSBjeWNsZSB0aW1lIHRvIDIgb3IgMyBQQ0kgY2xvY2tzICg2MCBhbmQgOTEgbnNlYwotICAgICAqIGF0IDMzIE1IeiBQQ0kgY2xvY2spIHNlZW1zIHRvIGNhdXNlIEJhZENSQyBlcnJvcnMgZHVyaW5nIERNQQotICAgICAqIHRyYW5zZmVycyBvbiBzb21lIGRyaXZlcywgZXZlbiB0aG91Z2ggYm90aCBudW1iZXJzIG1lZXQgdGhlIG1pbmltdW0KLSAgICAgKiBBVEFQSS00IHNwZWMgb2YgNzMgYW5kIDU0IG5zZWMgZm9yIFVETUEgMSBhbmQgMiByZXNwZWN0aXZlbHkuCi0gICAgICogU28gdGhlIGZhc3RlciB0aW1lcyBhcmUganVzdCBjb21tZW50ZWQgb3V0IGhlcmUuIFRoZSBnb29kIG5ld3MgaXMKLSAgICAgKiB0aGF0IHRoZSBzbG93ZXIgY3ljbGUgdGltZSBoYXMgdmVyeSBsaXR0bGUgYWZmZWN0IG9uIHRyYW5zZmVyCi0gICAgICogcGVyZm9ybWFuY2UuCi0gICAgICovCi0gICAgCi0Jc3dpdGNoKHNwZWVkKSB7Ci0JCWNhc2UgWEZFUl9VRE1BXzQ6Ci0JCWNhc2UgWEZFUl9VRE1BXzI6CS8vdV9zcGVlZCA9IDIgPDwgKGRyaXZlLT5kbiAqIDQpOyBicmVhazsKLQkJY2FzZSBYRkVSX1VETUFfNToKLQkJY2FzZSBYRkVSX1VETUFfMzoKLQkJY2FzZSBYRkVSX1VETUFfMToJLy91X3NwZWVkID0gMSA8PCAoZHJpdmUtPmRuICogNCk7IGJyZWFrOwotCQljYXNlIFhGRVJfVURNQV8wOgl1X3NwZWVkID0gMCA8PCAoZHJpdmUtPmRuICogNCk7IGJyZWFrOwotCQljYXNlIFhGRVJfTVdfRE1BXzI6Ci0JCWNhc2UgWEZFUl9NV19ETUFfMToKLQkJY2FzZSBYRkVSX01XX0RNQV8wOgotCQljYXNlIFhGRVJfU1dfRE1BXzI6CWJyZWFrOwotCQljYXNlIFhGRVJfUElPXzQ6Ci0JCWNhc2UgWEZFUl9QSU9fMzoKLQkJY2FzZSBYRkVSX1BJT18yOgotCQljYXNlIFhGRVJfUElPXzA6CWJyZWFrOwotCQlkZWZhdWx0OgkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChzcGVlZCA+PSBYRkVSX1VETUFfMCkgewotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ4LCByZWc0OCB8IHVfZmxhZyk7Ci0JCXJlZzRhICY9IH5hX3NwZWVkOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDRhLCByZWc0YSB8IHVfc3BlZWQpOwotCX0gZWxzZSB7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NDgsIHJlZzQ4ICYgfnVfZmxhZyk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NGEsIHJlZzRhICYgfmFfc3BlZWQpOwotCX0KLQotCWl0ODE3Ml90dW5lX2RyaXZlKGRyaXZlLCBpdDgxNzJfZG1hXzJfcGlvKHNwZWVkKSk7Ci0JcmV0dXJuIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBzcGVlZCkpOwotfQotCi1zdGF0aWMgaW50IGl0ODE3Ml9jb25maWdfY2hpcHNldF9mb3JfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JdTggc3BlZWQgPSBpZGVfZG1hX3NwZWVkKGRyaXZlLCBpdDgxNzJfcmF0ZW1hc2soZHJpdmUpKTsKLQotCWlmICghKHNwZWVkKSkgewotCQl1OCB0c3BlZWQgPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIDI1NSwgNCwgTlVMTCk7Ci0JCXNwZWVkID0gaXQ4MTcyX2RtYV8yX3BpbyhYRkVSX1BJT18wICsgdHNwZWVkKTsKLQl9Ci0KLQkodm9pZCkgaXQ4MTcyX3R1bmVfY2hpcHNldChkcml2ZSwgc3BlZWQpOwotCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgaXQ4MTcyX2NvbmZpZ19kcml2ZV94ZmVyX3JhdGUgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0Jc3RydWN0IGhkX2RyaXZlaWQgKmlkCT0gZHJpdmUtPmlkOwotCi0JZHJpdmUtPmluaXRfc3BlZWQgPSAwOwotCi0JaWYgKGlkICYmIChpZC0+Y2FwYWJpbGl0eSAmIDEpICYmIGRyaXZlLT5hdXRvZG1hKSB7Ci0KLQkJaWYgKGlkZV91c2VfZG1hKGRyaXZlKSkgewotCQkJaWYgKGl0ODE3Ml9jb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKLQkJCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vbihkcml2ZSk7Ci0JCX0KLQotCQlnb3RvIGZhc3RfYXRhX3BpbzsKLQotCX0gZWxzZSBpZiAoKGlkLT5jYXBhYmlsaXR5ICYgOCkgfHwgKGlkLT5maWVsZF92YWxpZCAmIDIpKSB7Ci1mYXN0X2F0YV9waW86Ci0JCWl0ODE3Ml90dW5lX2RyaXZlKGRyaXZlLCA1KTsKLQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwotCX0KLQkvKiBJT1JEWSBub3Qgc3VwcG9ydGVkICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGluaXRfY2hpcHNldF9pdDgxNzIgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JdW5zaWduZWQgY2hhciBwcm9naWY7Ci0gICAgCi0JLyoKLQkgKiBQbGFjZSBib3RoIElERSBpbnRlcmZhY2VzIGludG8gUENJICJuYXRpdmUiIG1vZGUKLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19QUk9HLCAmcHJvZ2lmKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0xBU1NfUFJPRywgcHJvZ2lmIHwgMHgwNSk7ICAgIAotCi0JcmV0dXJuIElUODE3Ml9JREVfSVJROwotfQotCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfaXQ4MTcyIChpZGVfaHdpZl90ICpod2lmKQotewotCXN0cnVjdCBwY2lfZGV2KiBkZXYgPSBod2lmLT5wY2lfZGV2OwotCXVuc2lnbmVkIGxvbmcgY21kQmFzZSwgY3RybEJhc2U7Ci0gICAgCi0JaHdpZi0+YXV0b2RtYSA9IDA7Ci0JaHdpZi0+dHVuZXByb2MgPSAmaXQ4MTcyX3R1bmVfZHJpdmU7Ci0JaHdpZi0+c3BlZWRwcm9jID0gJml0ODE3Ml90dW5lX2NoaXBzZXQ7Ci0KLQljbWRCYXNlID0gZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKLQljdHJsQmFzZSA9IGRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7Ci0gICAgCi0JaWRlX2luaXRfaHdpZl9wb3J0cygmaHdpZi0+aHcsIGNtZEJhc2UsIGN0cmxCYXNlIHwgMiwgTlVMTCk7Ci0JbWVtY3B5KGh3aWYtPmlvX3BvcnRzLCBod2lmLT5ody5pb19wb3J0cywgc2l6ZW9mKGh3aWYtPmlvX3BvcnRzKSk7Ci0JaHdpZi0+bm9wcm9iZSA9IDA7Ci0KLQlpZiAoIWh3aWYtPmRtYV9iYXNlKSB7Ci0JCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IDE7Ci0JCWh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7Ci0JCXJldHVybjsKLQl9Ci0KLQlod2lmLT5hdGFwaV9kbWEgPSAxOwotCWh3aWYtPnVsdHJhX21hc2sgPSAweDA3OwotCWh3aWYtPm13ZG1hX21hc2sgPSAweDA2OwotCWh3aWYtPnN3ZG1hX21hc2sgPSAweDA0OwotCi0JaHdpZi0+aWRlX2RtYV9jaGVjayA9ICZpdDgxNzJfY29uZmlnX2RyaXZlX3hmZXJfcmF0ZTsKLQlpZiAoIW5vYXV0b2RtYSkKLQkJaHdpZi0+YXV0b2RtYSA9IDE7Ci0JaHdpZi0+ZHJpdmVzWzBdLmF1dG9kbWEgPSBod2lmLT5hdXRvZG1hOwotCWh3aWYtPmRyaXZlc1sxXS5hdXRvZG1hID0gaHdpZi0+YXV0b2RtYTsKLX0KLQotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgaXQ4MTcyX2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7CS8qIDAgKi8KLQkJLm5hbWUJCT0gIklUODE3MkciLAotCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2l0ODE3MiwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9pdDgxNzIsCi0JCS5jaGFubmVscwk9IDIsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmVuYWJsZWJpdHMJPSB7ezB4MDAsMHgwMCwweDAwfSwgezB4NDAsMHgwMCwweDAxfX0sCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGl0ODE3Ml9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0gICAgICAgIGlmICgoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpIHx8Ci0gICAgICAgICAgICAoISgoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUpKSkpCi0JCXJldHVybiAtRU5PREVWOyAvKiBJVDgxNzIgaXMgbW9yZSB0aGFuIGFuIElERSBjb250cm9sbGVyICovCi0JcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgJml0ODE3Ml9jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl0ODE3Ml9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX0lURSwgUENJX0RFVklDRV9JRF9JVEVfSVQ4MTcyRywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0JeyAwLCB9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpdDgxNzJfcGNpX3RibCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIklUODE3Ml9JREUiLAotCS5pZF90YWJsZQk9IGl0ODE3Ml9wY2lfdGJsLAotCS5wcm9iZQkJPSBpdDgxNzJfaW5pdF9vbmUsCi19OwotCi1zdGF0aWMgaW50IGl0ODE3Ml9pZGVfaW5pdCh2b2lkKQotewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoaXQ4MTcyX2lkZV9pbml0KTsKLQotTU9EVUxFX0FVVEhPUigiU3RldmVMQG12aXN0YS5jb20iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUENJIGRyaXZlciBtb2R1bGUgZm9yIElURSA4MTcyIElERSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCAzZGQ1ZGJhZi4uNTMzMDRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTEwMTQsNiArMTAxNCwxMyBAQAogCWlmICgocmV0ID0gZHZiX2dlbmVyaWNfb3BlbiAoaW5vZGUsIGZpbGUpKSA8IDApCiAJCXJldHVybiByZXQ7CiAKKwlpZiAoZmUtPm9wcy50c19idXNfY3RybCkgeworCQlpZiAoKHJldCA9IGZlLT5vcHMudHNfYnVzX2N0cmwgKGZlLCAxKSkgPCAwKSB7CisJCQlkdmJfZ2VuZXJpY19yZWxlYXNlIChpbm9kZSwgZmlsZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSAhPSBPX1JET05MWSkgewogCiAJCS8qIG5vcm1hbCB0dW5lIG1vZGUgd2hlbiBvcGVuZWQgUi9XICovCkBAIC0xMDQzLDYgKzEwNTAsOSBAQAogCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpCiAJCWZlcHJpdi0+cmVsZWFzZV9qaWZmaWVzID0gamlmZmllczsKIAorCWlmIChmZS0+b3BzLnRzX2J1c19jdHJsKQorCQlmZS0+b3BzLnRzX2J1c19jdHJsIChmZSwgMCk7CisKIAlyZXR1cm4gZHZiX2dlbmVyaWNfcmVsZWFzZSAoaW5vZGUsIGZpbGUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCmluZGV4IGU1ZDUwMjguLmYyMzNkNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCkBAIC0xMjksNiArMTI5LDcgQEAKIAlpbnQgKCplbmFibGVfaGlnaF9sbmJfdm9sdGFnZSkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGxvbmcgYXJnKTsKIAlpbnQgKCpkaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdW5zaWduZWQgbG9uZyBjbWQpOwogCWludCAoKmkyY19nYXRlX2N0cmwpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKTsKKwlpbnQgKCp0c19idXNfY3RybCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBhY3F1aXJlKTsKIAogCXN0cnVjdCBkdmJfdHVuZXJfb3BzIHR1bmVyX29wczsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggMGEzYzM1My4uNjdjZWZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtMzksMjAgKzM5LDggQEAKIAkgIFN1cHBvcnQgZm9yIFVTQiAxLjEgYW5kIDIuMCBEVkItVCByZWNlaXZlcnMgYmFzZWQgb24gcmVmZXJlbmNlIGRlc2lnbnMgbWFkZSBieQogCSAgRGlCY29tICg8aHR0cDovL3d3dy5kaWJjb20uZnI+KSBlcXVpcHBlZCB3aXRoIGEgRGlCMzAwME0tQiBkZW1vZHVsYXRvci4KIAotCSAgRGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXI6Ci0JICAgIEFydGVjIFQxIFVTQjEuMSBib3hlcwotCSAgICBBdmVybWVkaWEgQXZlclRWIERWQlQgVVNCMS4xCi0JICAgIENvbXBybyBWaWRlb21hdGUgRFZCLVUyMDAwIC0gRFZCLVQgVVNCCi0JICAgIERpQmNvbSBVU0IxLjEgcmVmZXJlbmNlIGRldmljZXMgKG5vbi1wdWJsaWMpCi0JICAgIEdyYW5kdGVjIERWQi1UIFVTQgotCSAgICBIYW1hIERWQi1UIFVTQjEuMS1Cb3gKLQkgICAgS1dvcmxkL0pldFdheS9BRFNUZWNoIFYtU3RyZWFtIFhQRVJUIERUViAtIERWQi1UIFVTQjEuMSBhbmQgVVNCMi4wCi0JICAgIFR3aW5oYW5EVFYgTWFnaWMgQm94IChWUDcwNDFlKQotCSAgICBUd2luaGFuRFRWIFVTQi1UZXIgKFZQNzA0MSkKLQkgICAgVWx0aW1hIEVsZWN0cm9uaWMvQXJ0ZWMgVDEgVVNCIFRWQk9YCi0KLQkgIFRoZSBWUDcwNDEgc2VlbXMgdG8gYmUgaWRlbnRpY2FsIHRvICJDVFMgUG9ydGFibGUiIChDaGluZXNlCi0JICBUZWxldmlzaW9uIFN5c3RlbSkuCisJICBGb3IgYW4gdXAtdG8tZGF0ZSBsaXN0IG9mIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBoYXZlIGEgbG9vaworCSAgb24gdGhlIExpbnV4LURWQiBXaWtpIGF0IHd3dy5saW51eHR2Lm9yZy4KIAogCSAgU2F5IFkgaWYgeW91IG93biBzdWNoIGEgZGV2aWNlIGFuZCB3YW50IHRvIHVzZSBpdC4gWW91IHNob3VsZCBidWlsZCBpdCBhcwogCSAgYSBtb2R1bGUuCkBAIC02OSwxMiArNTcsMjkgQEAKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQwogCXNlbGVjdCBEVkJfVFVORVJfTVQyMDYwCiAJaGVscAotCSAgU3VwcG9ydCBmb3IgMi4wIERWQi1UIHJlY2VpdmVycyBiYXNlZCBvbiByZWZlcmVuY2UgZGVzaWducyBtYWRlIGJ5CisJICBTdXBwb3J0IGZvciBVU0IyLjAgRFZCLVQgcmVjZWl2ZXJzIGJhc2VkIG9uIHJlZmVyZW5jZSBkZXNpZ25zIG1hZGUgYnkKIAkgIERpQmNvbSAoPGh0dHA6Ly93d3cuZGliY29tLmZyPikgZXF1aXBwZWQgd2l0aCBhIERpQjMwMDBNLUMvUCBkZW1vZHVsYXRvci4KIAotCSAgRGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXI6Ci0JICAgIEFydGVjIFQxIFVTQjIuMCBib3hlcwotCSAgICBEaUJjb20gVVNCMi4wIHJlZmVyZW5jZSBkZXZpY2VzIChub24tcHVibGljKQorCSAgRm9yIGFuIHVwLXRvLWRhdGUgbGlzdCBvZiBkZXZpY2VzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgaGF2ZSBhIGxvb2sKKwkgIG9uIHRoZSBMaW51eC1EVkIgV2lraSBhdCB3d3cubGludXh0di5vcmcuCisKKwkgIFNheSBZIGlmIHlvdSBvd24gc3VjaCBhIGRldmljZSBhbmQgd2FudCB0byB1c2UgaXQuIFlvdSBzaG91bGQgYnVpbGQgaXQgYXMKKwkgIGEgbW9kdWxlLgorCitjb25maWcgRFZCX1VTQl9ESUIwNzAwCisJdHJpc3RhdGUgIkRpQmNvbSBEaUIwNzAwIFVTQiBEVkIgZGV2aWNlcyAoc2VlIGhlbHAgZm9yIHN1cHBvcnRlZCBkZXZpY2VzKSIKKwlkZXBlbmRzIG9uIERWQl9VU0IKKwlzZWxlY3QgRFZCX0RJQjcwMDBNCisJc2VsZWN0IERWQl9ESUIzMDAwTUMKKwlzZWxlY3QgRFZCX1RVTkVSX01UMjA2MAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIFVTQjIuMC8xLjEgRFZCIHJlY2VpdmVycyBiYXNlZCBvbiB0aGUgRGlCMDcwMCBVU0IgYnJpZGdlLiBUaGUKKwkgIFVTQiBicmlkZ2UgaXMgYWxzbyBwcmVzZW50IGluIGRldmljZXMgaGF2aW5nIHRoZSBEaUI3NzAwIERWQi1ULVVTQgorCSAgc2lsaWNvbi4gVGhpcyBjaGlwIGNhbiBiZSBmb3VuZCBpbiBkZXZpY2VzIG9mZmVyZWQgYnkgSGF1cHBhdWdlLAorCSAgQXZlcm1lZGlhIGFuZCBvdGhlciBiaWcgYW5kIHNtYWxsIGNvbXBhbmllcy4KKworCSAgRm9yIGFuIHVwLXRvLWRhdGUgbGlzdCBvZiBkZXZpY2VzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgaGF2ZSBhIGxvb2sKKwkgIG9uIHRoZSBMaW51eC1EVkIgV2lraSBhdCB3d3cubGludXh0di5vcmcuCiAKIAkgIFNheSBZIGlmIHlvdSBvd24gc3VjaCBhIGRldmljZSBhbmQgd2FudCB0byB1c2UgaXQuIFlvdSBzaG91bGQgYnVpbGQgaXQgYXMKIAkgIGEgbW9kdWxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKaW5kZXggOTY0M2Y1Ni4uZTIzOTEwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotZHZiLXVzYi1vYmpzID0gZHZiLXVzYi1maXJtd2FyZS5vIGR2Yi11c2ItaW5pdC5vIGR2Yi11c2ItdXJiLm8gZHZiLXVzYi1pMmMubyBkdmItdXNiLWR2Yi5vIGR2Yi11c2ItcmVtb3RlLm8KK2R2Yi11c2Itb2JqcyA9IGR2Yi11c2ItZmlybXdhcmUubyBkdmItdXNiLWluaXQubyBkdmItdXNiLXVyYi5vIGR2Yi11c2ItaTJjLm8gZHZiLXVzYi1kdmIubyBkdmItdXNiLXJlbW90ZS5vIHVzYi11cmIubwogb2JqLSQoQ09ORklHX0RWQl9VU0IpICs9IGR2Yi11c2IubwogCiBkdmItdXNiLXZwNzA0NS1vYmpzID0gdnA3MDQ1Lm8gdnA3MDQ1LWZlLm8KQEAgLTM2LDQgKzM2LDcgQEAKIGR2Yi11c2ItY3h1c2Itb2JqcyA9IGN4dXNiLm8KIG9iai0kKENPTkZJR19EVkJfVVNCX0NYVVNCKSArPSBkdmItdXNiLWN4dXNiLm8KIAorZHZiLXVzYi1kaWIwNzAwLW9ianMgPSBkaWIwNzAwX2NvcmUubyBkaWIwNzAwX2RldmljZXMubworb2JqLSQoQ09ORklHX0RWQl9VU0JfRElCMDcwMCkgKz0gZHZiLXVzYi1kaWIwNzAwLm8KKwogRVhUUkFfQ0ZMQUdTID0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2E4MDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCmluZGV4IGRmMGMzODQuLjJlZDNlYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCkBAIC0yNyw3ICsyNyw4IEBACiB9CiAKIC8qIGFzc3VyZSB0byBwdXQgY29sZCB0byAwIGZvciBpTWFudWZhY3R1cmVyID09IDEgKi8KLXN0YXRpYyBpbnQgYTgwMF9pZGVudGlmeV9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyAqcHJvcHMsc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uICoqZGVzYywgaW50ICpjb2xkKQorc3RhdGljIGludCBhODAwX2lkZW50aWZ5X3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqcHJvcHMsCisJc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uICoqZGVzYywgaW50ICpjb2xkKQogewogCSpjb2xkID0gdWRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyICE9IDE7CiAJcmV0dXJuIDA7CkBAIC04OCw3ICs4OSw3IEBACiB9CiAKIC8qIFVTQiBEcml2ZXIgc3R1ZmYgKi8KLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGE4MDBfcHJvcGVydGllczsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBhODAwX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgYTgwMF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQpAQCAtMTA0LDIyICsxMDUsNDEgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGE4MDBfdGFibGUpOwogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBhODAwX3Byb3BlcnRpZXMgPSB7Ci0JLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGIHwgRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKLQkucGlkX2ZpbHRlcl9jb3VudCA9IDMyLAorc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGE4MDBfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCiAKIAkudXNiX2N0cmwgPSBDWVBSRVNTX0ZYMiwKLQogCS5maXJtd2FyZSA9ICJkdmItdXNiLWF2ZXJ0di1hODAwLTAyLmZ3IiwKIAotCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWJ1c2Jfc3RhdGUpLAotCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYsCisJCQkucGlkX2ZpbHRlcl9jb3VudCA9IDMyLAogCS5zdHJlYW1pbmdfY3RybCAgID0gZGlidXNiMl8wX3N0cmVhbWluZ19jdHJsLAogCS5waWRfZmlsdGVyICAgICAgID0gZGlidXNiX3BpZF9maWx0ZXIsCiAJLnBpZF9maWx0ZXJfY3RybCAgPSBkaWJ1c2JfcGlkX2ZpbHRlcl9jdHJsLAotCS5wb3dlcl9jdHJsICAgICAgID0gYTgwMF9wb3dlcl9jdHJsLAorCiAJLmZyb250ZW5kX2F0dGFjaCAgPSBkaWJ1c2JfZGliMzAwMG1jX2Zyb250ZW5kX2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgICA9IGRpYnVzYl9kaWIzMDAwbWNfdHVuZXJfYXR0YWNoLAorCisJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkuY291bnQgPSA3LAorCQkuZW5kcG9pbnQgPSAweDA2LAorCQkudSA9IHsKKwkJCS5idWxrID0geworCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCX0KKwkJfQorCX0sCisKKwkJCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWJ1c2Jfc3RhdGUpLAorCQl9LAorCX0sCisKKwkucG93ZXJfY3RybCAgICAgICA9IGE4MDBfcG93ZXJfY3RybCwKIAkuaWRlbnRpZnlfc3RhdGUgICA9IGE4MDBfaWRlbnRpZnlfc3RhdGUsCiAKIAkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCkBAIC0xMzAsMTggKzE1MCw2IEBACiAJLmkyY19hbGdvICAgICAgICAgPSAmZGlidXNiX2kyY19hbGdvLAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKLQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCi0JLnVyYiA9IHsKLQkJLnR5cGUgPSBEVkJfVVNCX0JVTEssCi0JCS5jb3VudCA9IDcsCi0JCS5lbmRwb2ludCA9IDB4MDYsCi0JCS51ID0gewotCQkJLmJ1bGsgPSB7Ci0JCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAotCQkJfQotCQl9Ci0JfSwKLQogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKIAkJeyAgICJBVmVyTWVkaWEgQXZlclRWIERWQi1UIFVTQiAyLjAgKEE4MDApIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwppbmRleCBjNzEwYzAxLi40M2YzOTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCkBAIC0xNjEsMTMgKzE2MSwxMyBAQAogCQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeHVzYl9zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBvbm9mZikKK3N0YXRpYyBpbnQgY3h1c2Jfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQogewogCXU4IGJ1ZlsyXSA9IHsgMHgwMywgMHgwMCB9OwogCWlmIChvbm9mZikKLQkJY3h1c2JfY3RybF9tc2coZCxDTURfU1RSRUFNSU5HX09OLCBidWYsIDIsIE5VTEwsIDApOworCQljeHVzYl9jdHJsX21zZyhhZGFwLT5kZXYsIENNRF9TVFJFQU1JTkdfT04sIGJ1ZiwgMiwgTlVMTCwgMCk7CiAJZWxzZQotCQljeHVzYl9jdHJsX21zZyhkLENNRF9TVFJFQU1JTkdfT0ZGLCBOVUxMLCAwLCBOVUxMLCAwKTsKKwkJY3h1c2JfY3RybF9tc2coYWRhcC0+ZGV2LCBDTURfU1RSRUFNSU5HX09GRiwgTlVMTCwgMCwgTlVMTCwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyNyw4ICszMjcsOCBAQAogc3RhdGljIGludCBjeHVzYl9sZ2gwNjRmX3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJCSAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCiB7Ci0Jc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gZmUtPmR2Yi0+cHJpdjsKLQlyZXR1cm4gbGdfaDA2eGZfcGxsX3NldChmZSwgJmQtPmkyY19hZGFwLCBmZXApOworCXN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBmZS0+ZHZiLT5wcml2OworCXJldHVybiBsZ19oMDZ4Zl9wbGxfc2V0KGZlLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgZmVwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjeDIyNzAyX2NvbmZpZyBjeHVzYl9jeDIyNzAyX2NvbmZpZyA9IHsKQEAgLTM1OSw5OCArMzU5LDk5IEBACiB9OwogCiAvKiBDYWxsYmFja3MgZm9yIERWQiBVU0IgKi8KLXN0YXRpYyBpbnQgY3h1c2JfZm1kMTIxNm1lX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCitzdGF0aWMgaW50IGN4dXNiX2ZtZDEyMTZtZV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAl1OCBicGxsWzRdID0geyAweDBiLCAweGRjLCAweDljLCAweGEwIH07Ci0JZC0+cGxsX2FkZHIgPSAweDYxOwotCW1lbWNweShkLT5wbGxfaW5pdCwgYnBsbCwgNCk7Ci0JZC0+cGxsX2Rlc2MgPSAmZHZiX3BsbF9mbWQxMjE2bWU7CisJYWRhcC0+cGxsX2FkZHIgPSAweDYxOworCW1lbWNweShhZGFwLT5wbGxfaW5pdCwgYnBsbCwgNCk7CisJYWRhcC0+cGxsX2Rlc2MgPSAmZHZiX3BsbF9mbWQxMjE2bWU7CiAKLQlkLT5mZS0+b3BzLnR1bmVyX29wcy5pbml0ID0gZHZiX3VzYl90dW5lcl9pbml0X2kyYzsKLQlkLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gZHZiX3VzYl90dW5lcl9zZXRfcGFyYW1zX2kyYzsKKwlhZGFwLT5mZS0+b3BzLnR1bmVyX29wcy5pbml0ID0gZHZiX3VzYl90dW5lcl9pbml0X2kyYzsKKwlhZGFwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gZHZiX3VzYl90dW5lcl9zZXRfcGFyYW1zX2kyYzsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4dXNiX2RlZTE2MDFfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3N0YXRpYyBpbnQgY3h1c2JfZGVlMTYwMV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKLQlkLT5wbGxfYWRkciA9IDB4NjE7Ci0JZC0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90aG9tc29uX2R0dDc1Nzk7Ci0JZC0+ZmUtPm9wcy50dW5lcl9vcHMuY2FsY19yZWdzID0gZHZiX3VzYl90dW5lcl9jYWxjX3JlZ3M7CisJYWRhcC0+cGxsX2FkZHIgPSAweDYxOworCWFkYXAtPnBsbF9kZXNjID0gJmR2Yl9wbGxfdGhvbXNvbl9kdHQ3NTc5OworCWFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLmNhbGNfcmVncyA9IGR2Yl91c2JfdHVuZXJfY2FsY19yZWdzOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4dXNiX2xnejIwMV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorc3RhdGljIGludCBjeHVzYl9sZ3oyMDFfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0JZC0+cGxsX2FkZHIgPSAweDYxOwotCWQtPnBsbF9kZXNjID0gJmR2Yl9wbGxfbGdfejIwMTsKLQlkLT5mZS0+b3BzLnR1bmVyX29wcy5jYWxjX3JlZ3MgPSBkdmJfdXNiX3R1bmVyX2NhbGNfcmVnczsKKwlhZGFwLT5wbGxfYWRkciA9IDB4NjE7CisJYWRhcC0+cGxsX2Rlc2MgPSAmZHZiX3BsbF9sZ196MjAxOworCWFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLmNhbGNfcmVncyA9IGR2Yl91c2JfdHVuZXJfY2FsY19yZWdzOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4dXNiX2R0dDc1NzlfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3N0YXRpYyBpbnQgY3h1c2JfZHR0NzU3OV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKLQlkLT5wbGxfYWRkciA9IDB4NjA7Ci0JZC0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90aG9tc29uX2R0dDc1Nzk7Ci0JZC0+ZmUtPm9wcy50dW5lcl9vcHMuY2FsY19yZWdzID0gZHZiX3VzYl90dW5lcl9jYWxjX3JlZ3M7CisJYWRhcC0+cGxsX2FkZHIgPSAweDYwOworCWFkYXAtPnBsbF9kZXNjID0gJmR2Yl9wbGxfdGhvbXNvbl9kdHQ3NTc5OworCWFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLmNhbGNfcmVncyA9IGR2Yl91c2JfdHVuZXJfY2FsY19yZWdzOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4dXNiX2xnZHQzMzAzX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCitzdGF0aWMgaW50IGN4dXNiX2xnZHQzMzAzX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewotCWQtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBjeHVzYl9sZ2gwNjRmX3R1bmVyX3NldF9wYXJhbXM7CisJYWRhcC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGN4dXNiX2xnaDA2NGZfdHVuZXJfc2V0X3BhcmFtczsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeHVzYl9jeDIyNzAyX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCitzdGF0aWMgaW50IGN4dXNiX2N4MjI3MDJfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7CiAJdTggYjsKLQlpZiAodXNiX3NldF9pbnRlcmZhY2UoZC0+dWRldiwwLDYpIDwgMCkKKwlpZiAodXNiX3NldF9pbnRlcmZhY2UoYWRhcC0+ZGV2LT51ZGV2LCAwLCA2KSA8IDApCiAJCWVycigic2V0IGludGVyZmFjZSBmYWlsZWQiKTsKIAotCWN4dXNiX2N0cmxfbXNnKGQsQ01EX0RJR0lUQUwsIE5VTEwsIDAsICZiLCAxKTsKKwljeHVzYl9jdHJsX21zZyhhZGFwLT5kZXYsIENNRF9ESUdJVEFMLCBOVUxMLCAwLCAmYiwgMSk7CiAKLQlpZiAoKGQtPmZlID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwgJmN4dXNiX2N4MjI3MDJfY29uZmlnLCAmZC0+aTJjX2FkYXApKSAhPSBOVUxMKQorCWlmICgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLCAmY3h1c2JfY3gyMjcwMl9jb25maWcsICZhZGFwLT5kZXYtPmkyY19hZGFwKSkgIT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIGludCBjeHVzYl9sZ2R0MzMwM19mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorc3RhdGljIGludCBjeHVzYl9sZ2R0MzMwM19mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKLQlpZiAodXNiX3NldF9pbnRlcmZhY2UoZC0+dWRldiwwLDcpIDwgMCkKKwlpZiAodXNiX3NldF9pbnRlcmZhY2UoYWRhcC0+ZGV2LT51ZGV2LCAwLCA3KSA8IDApCiAJCWVycigic2V0IGludGVyZmFjZSBmYWlsZWQiKTsKIAotCWN4dXNiX2N0cmxfbXNnKGQsQ01EX0RJR0lUQUwsIE5VTEwsIDAsIE5VTEwsIDApOworCWN4dXNiX2N0cmxfbXNnKGFkYXAtPmRldiwgQ01EX0RJR0lUQUwsIE5VTEwsIDAsIE5VTEwsIDApOwogCi0JaWYgKChkLT5mZSA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLCAmY3h1c2JfbGdkdDMzMDNfY29uZmlnLCAmZC0+aTJjX2FkYXApKSAhPSBOVUxMKQorCWlmICgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwgJmN4dXNiX2xnZHQzMzAzX2NvbmZpZywgJmFkYXAtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW50IGN4dXNiX210MzUyX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCi17CS8qIHVzZWQgaW4gYm90aCBsZ3oyMDEgYW5kIHRoNzU3OSAqLwotCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkLT51ZGV2LDAsMCkgPCAwKQotCQllcnIoInNldCBpbnRlcmZhY2UgZmFpbGVkIik7Ci0KLQljeHVzYl9jdHJsX21zZyhkLENNRF9ESUdJVEFMLCBOVUxMLCAwLCBOVUxMLCAwKTsKLQotCWlmICgoZC0+ZmUgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJmN4dXNiX210MzUyX2NvbmZpZywgJmQtPmkyY19hZGFwKSkgIT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gLUVJTzsKLX0KLQotc3RhdGljIGludCBjeHVzYl9kZWUxNjAxX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCitzdGF0aWMgaW50IGN4dXNiX210MzUyX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewotCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkLT51ZGV2LDAsMCkgPCAwKQorCS8qIHVzZWQgaW4gYm90aCBsZ3oyMDEgYW5kIHRoNzU3OSAqLworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShhZGFwLT5kZXYtPnVkZXYsIDAsIDApIDwgMCkKIAkJZXJyKCJzZXQgaW50ZXJmYWNlIGZhaWxlZCIpOwogCi0JY3h1c2JfY3RybF9tc2coZCxDTURfRElHSVRBTCwgTlVMTCwgMCwgTlVMTCwgMCk7CisJY3h1c2JfY3RybF9tc2coYWRhcC0+ZGV2LCBDTURfRElHSVRBTCwgTlVMTCwgMCwgTlVMTCwgMCk7CiAKLQlpZiAoKChkLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmY3h1c2JfZGVlMTYwMV9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpIHx8Ci0JCSgoZC0+ZmUgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLCAmY3h1c2JfemwxMDM1M19kZWUxNjAxX2NvbmZpZywgJmQtPmkyY19hZGFwKSkgIT0gTlVMTCkpCisJaWYgKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmY3h1c2JfbXQzNTJfY29uZmlnLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpICE9IE5VTEwpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgY3h1c2JfZGVlMTYwMV9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlpZiAodXNiX3NldF9pbnRlcmZhY2UoYWRhcC0+ZGV2LT51ZGV2LCAwLCAwKSA8IDApCisJCWVycigic2V0IGludGVyZmFjZSBmYWlsZWQiKTsKKworCWN4dXNiX2N0cmxfbXNnKGFkYXAtPmRldiwgQ01EX0RJR0lUQUwsIE5VTEwsIDAsIE5VTEwsIDApOworCisJaWYgKCgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJmN4dXNiX2RlZTE2MDFfY29uZmlnLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpICE9IE5VTEwpIHx8CisJCSgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLCAmY3h1c2JfemwxMDM1M19kZWUxNjAxX2NvbmZpZywgJmFkYXAtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gLUVJTzsKQEAgLTQ4MCwxMSArNDgxLDExIEBACiB9CiAKIC8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBjeHVzYl9tZWRpb25fcHJvcGVydGllczsKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2xnaDA2NGZfcHJvcGVydGllczsKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2RlZTE2MDFfcHJvcGVydGllczsKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2xnejIwMV9wcm9wZXJ0aWVzOwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgY3h1c2JfYmx1ZWJpcmRfZHR0NzU3OV9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX21lZGlvbl9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2xnaDA2NGZfcHJvcGVydGllczsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9kZWUxNjAxX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY3h1c2JfYmx1ZWJpcmRfbGd6MjAxX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY3h1c2JfYmx1ZWJpcmRfZHR0NzU3OV9wcm9wZXJ0aWVzOwogCiBzdGF0aWMgaW50IGN4dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC01MDQsMzYgKzUwNSwzNiBAQAogCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9NRURJT04sIFVTQl9QSURfTUVESU9OX01EOTU3MDApIH0sCiAJCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0xHMDY0Rl9DT0xEKSB9LAogCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9MRzA2NEZfV0FSTSkgfSwKLQkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfREVFMTYwMV9DT0xEKSB9LAotCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9ERUUxNjAxX1dBUk0pIH0sCisJCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RVQUxfMV9DT0xEKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVUFMXzFfV0FSTSkgfSwKIAkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfTEdaMjAxX0NPTEQpIH0sCiAJCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0xHWjIwMV9XQVJNKSB9LAogCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9USDc1NzlfQ09MRCkgfSwKIAkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfVEg3NTc5X1dBUk0pIH0sCi0JCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RJR0lUQUxOT1dfQkxVRUJJUkRfREVFMTYwMV9DT0xEKSB9LAotCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9ESUdJVEFMTk9XX0JMVUVCSVJEX0RFRTE2MDFfV0FSTSkgfSwKKwkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRElHSVRBTE5PV19CTFVFQklSRF9EVUFMXzFfQ09MRCkgfSwKKwkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRElHSVRBTE5PV19CTFVFQklSRF9EVUFMXzFfV0FSTSkgfSwKKwkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF8yX0NPTEQpIH0sCisJCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RVQUxfMl9XQVJNKSB9LAogCQl7fQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGN4dXNiX3RhYmxlKTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgY3h1c2JfbWVkaW9uX3Byb3BlcnRpZXMgPSB7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY3h1c2JfbWVkaW9uX3Byb3BlcnRpZXMgPSB7CiAJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAogCiAJLnVzYl9jdHJsID0gQ1lQUkVTU19GWDIsCiAKIAkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgY3h1c2Jfc3RhdGUpLAogCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKIAkuc3RyZWFtaW5nX2N0cmwgICA9IGN4dXNiX3N0cmVhbWluZ19jdHJsLAotCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfcG93ZXJfY3RybCwKIAkuZnJvbnRlbmRfYXR0YWNoICA9IGN4dXNiX2N4MjI3MDJfZnJvbnRlbmRfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgID0gY3h1c2JfZm1kMTIxNm1lX3R1bmVyX2F0dGFjaCwKLQotCS5pMmNfYWxnbyAgICAgICAgID0gJmN4dXNiX2kyY19hbGdvLAotCi0JLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIAkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCi0JLnVyYiA9IHsKLQkJLnR5cGUgPSBEVkJfVVNCX0JVTEssCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCiAJCS5jb3VudCA9IDUsCiAJCS5lbmRwb2ludCA9IDB4MDIsCiAJCS51ID0gewpAQCAtNTQzLDYgKzU0NCwxNCBAQAogCQl9CiAJfSwKIAorCQl9LAorCX0sCisJLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9wb3dlcl9jdHJsLAorCisJLmkyY19hbGdvICAgICAgICAgPSAmY3h1c2JfaTJjX2FsZ28sCisKKwkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAorCiAJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAogCS5kZXZpY2VzID0gewogCQl7ICAgIk1lZGlvbiBNRDk1NzAwIChNRFVTQlRWLUhZQlJJRCkiLApAQCAtNTUyLDcgKzU2MSw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgY3h1c2JfYmx1ZWJpcmRfbGdoMDY0Zl9wcm9wZXJ0aWVzID0geworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2xnaDA2NGZfcHJvcGVydGllcyA9IHsKIAkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCiAKIAkudXNiX2N0cmwgICAgICAgICAgPSBERVZJQ0VfU1BFQ0lGSUMsCkBAIC01NjMsMTEgKzU3MiwyOSBAQAogCiAJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGN4dXNiX3N0YXRlKSwKIAorCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQl7CiAJLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKLQkucG93ZXJfY3RybCAgICAgICA9IGN4dXNiX2JsdWViaXJkX3Bvd2VyX2N0cmwsCiAJLmZyb250ZW5kX2F0dGFjaCAgPSBjeHVzYl9sZ2R0MzMwM19mcm9udGVuZF9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9sZ2R0MzMwM190dW5lcl9hdHRhY2gsCiAKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCS5jb3VudCA9IDUsCisJCS5lbmRwb2ludCA9IDB4MDIsCisJCS51ID0geworCQkJLmJ1bGsgPSB7CisJCQkJLmJ1ZmZlcnNpemUgPSA4MTkyLAorCQkJfQorCQl9CisJfSwKKwkJfSwKKwl9LAorCisJLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9ibHVlYmlyZF9wb3dlcl9jdHJsLAorCiAJLmkyY19hbGdvICAgICAgICAgPSAmY3h1c2JfaTJjX2FsZ28sCiAKIAkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKQEAgLTU3NiwxNyArNjAzLDYgQEAKIAkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKLQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCi0JLnVyYiA9IHsKLQkJLnR5cGUgPSBEVkJfVVNCX0JVTEssCi0JCS5jb3VudCA9IDUsCi0JCS5lbmRwb2ludCA9IDB4MDIsCi0JCS51ID0gewotCQkJLmJ1bGsgPSB7Ci0JCQkJLmJ1ZmZlcnNpemUgPSA4MTkyLAotCQkJfQotCQl9Ci0JfSwKIAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKQEAgLTU5Nyw3ICs2MTMsNyBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2RlZTE2MDFfcHJvcGVydGllcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9kZWUxNjAxX3Byb3BlcnRpZXMgPSB7CiAJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAogCiAJLnVzYl9jdHJsICAgICAgICAgID0gREVWSUNFX1NQRUNJRklDLApAQCAtNjA4LDEwICs2MjQsMjcgQEAKIAogCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBjeHVzYl9zdGF0ZSksCiAKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJewogCS5zdHJlYW1pbmdfY3RybCAgID0gY3h1c2Jfc3RyZWFtaW5nX2N0cmwsCi0JLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9ibHVlYmlyZF9wb3dlcl9jdHJsLAogCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfZGVlMTYwMV9mcm9udGVuZF9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9kZWUxNjAxX3R1bmVyX2F0dGFjaCwKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCS5jb3VudCA9IDUsCisJCS5lbmRwb2ludCA9IDB4MDQsCisJCS51ID0geworCQkJLmJ1bGsgPSB7CisJCQkJLmJ1ZmZlcnNpemUgPSA4MTkyLAorCQkJfQorCQl9CisJfSwKKwkJfSwKKwl9LAorCisJLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9ibHVlYmlyZF9wb3dlcl9jdHJsLAogCiAJLmkyY19hbGdvICAgICAgICAgPSAmY3h1c2JfaTJjX2FsZ28sCiAKQEAgLTYyMSwxOSArNjU0LDggQEAKIAkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKLQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCi0JLnVyYiA9IHsKLQkJLnR5cGUgPSBEVkJfVVNCX0JVTEssCi0JCS5jb3VudCA9IDUsCi0JCS5lbmRwb2ludCA9IDB4MDQsCi0JCS51ID0gewotCQkJLmJ1bGsgPSB7Ci0JCQkJLmJ1ZmZlcnNpemUgPSA4MTkyLAotCQkJfQotCQl9Ci0JfSwKIAotCS5udW1fZGV2aWNlX2Rlc2NzID0gMiwKKwkubnVtX2RldmljZV9kZXNjcyA9IDMsCiAJLmRldmljZXMgPSB7CiAJCXsgICAiRFZpQ08gRnVzaW9uSERUViBEVkItVCBEdWFsIFVTQiIsCiAJCQl7ICZjeHVzYl90YWJsZVszXSwgTlVMTCB9LApAQCAtNjQzLDEwICs2NjUsMTQgQEAKIAkJCXsgJmN4dXNiX3RhYmxlWzldLCAgTlVMTCB9LAogCQkJeyAmY3h1c2JfdGFibGVbMTBdLCBOVUxMIH0sCiAJCX0sCisJCXsgICAiRFZpQ08gRnVzaW9uSERUViBEVkItVCBEdWFsIERpZ2l0YWwgMiIsCisJCQl7ICZjeHVzYl90YWJsZVsxMV0sIE5VTEwgfSwKKwkJCXsgJmN4dXNiX3RhYmxlWzEyXSwgTlVMTCB9LAorCQl9LAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2xnejIwMV9wcm9wZXJ0aWVzID0geworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2xnejIwMV9wcm9wZXJ0aWVzID0gewogCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKIAogCS51c2JfY3RybCAgICAgICAgICA9IERFVklDRV9TUEVDSUZJQywKQEAgLTY1NywxMSArNjgzLDI4IEBACiAKIAkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgY3h1c2Jfc3RhdGUpLAogCisJLm51bV9hZGFwdGVycyA9IDIsCisJLmFkYXB0ZXIgPSB7CisJCXsKIAkuc3RyZWFtaW5nX2N0cmwgICA9IGN4dXNiX3N0cmVhbWluZ19jdHJsLAotCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfYmx1ZWJpcmRfcG93ZXJfY3RybCwKIAkuZnJvbnRlbmRfYXR0YWNoICA9IGN4dXNiX210MzUyX2Zyb250ZW5kX2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgICA9IGN4dXNiX2xnejIwMV90dW5lcl9hdHRhY2gsCiAKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCS5jb3VudCA9IDUsCisJCS5lbmRwb2ludCA9IDB4MDQsCisJCS51ID0geworCQkJLmJ1bGsgPSB7CisJCQkJLmJ1ZmZlcnNpemUgPSA4MTkyLAorCQkJfQorCQl9CisJfSwKKwkJfSwKKwl9LAorCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfYmx1ZWJpcmRfcG93ZXJfY3RybCwKKwogCS5pMmNfYWxnbyAgICAgICAgID0gJmN4dXNiX2kyY19hbGdvLAogCiAJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCkBAIC02NzAsMTggKzcxMyw2IEBACiAJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9yY19xdWVyeSwKIAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCi0JLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwotCS51cmIgPSB7Ci0JCS50eXBlID0gRFZCX1VTQl9CVUxLLAotCQkuY291bnQgPSA1LAotCQkuZW5kcG9pbnQgPSAweDA0LAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gODE5MiwKLQkJCX0KLQkJfQotCX0sCi0KIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7CiAJCXsgICAiRFZpQ08gRnVzaW9uSERUViBEVkItVCBVU0IgKExHWjIwMSkiLApAQCAtNjkxLDcgKzcyMiw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgY3h1c2JfYmx1ZWJpcmRfZHR0NzU3OV9wcm9wZXJ0aWVzID0geworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2R0dDc1NzlfcHJvcGVydGllcyA9IHsKIAkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCiAKIAkudXNiX2N0cmwgICAgICAgICAgPSBERVZJQ0VfU1BFQ0lGSUMsCkBAIC03MDIsMTEgKzczMywyOCBAQAogCiAJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGN4dXNiX3N0YXRlKSwKIAorCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQl7CiAJLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKLQkucG93ZXJfY3RybCAgICAgICA9IGN4dXNiX2JsdWViaXJkX3Bvd2VyX2N0cmwsCiAJLmZyb250ZW5kX2F0dGFjaCAgPSBjeHVzYl9tdDM1Ml9mcm9udGVuZF9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9kdHQ3NTc5X3R1bmVyX2F0dGFjaCwKIAorCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS5zdHJlYW0gPSB7CisJCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJLmNvdW50ID0gNSwKKwkJLmVuZHBvaW50ID0gMHgwNCwKKwkJLnUgPSB7CisJCQkuYnVsayA9IHsKKwkJCQkuYnVmZmVyc2l6ZSA9IDgxOTIsCisJCQl9CisJCX0KKwl9LAorCQl9LAorCX0sCisJLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9ibHVlYmlyZF9wb3dlcl9jdHJsLAorCiAJLmkyY19hbGdvICAgICAgICAgPSAmY3h1c2JfaTJjX2FsZ28sCiAKIAkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKQEAgLTcxNSwxNyArNzYzLDYgQEAKIAkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKLQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCi0JLnVyYiA9IHsKLQkJLnR5cGUgPSBEVkJfVVNCX0JVTEssCi0JCS5jb3VudCA9IDUsCi0JCS5lbmRwb2ludCA9IDB4MDQsCi0JCS51ID0gewotCQkJLmJ1bGsgPSB7Ci0JCQkJLmJ1ZmZlcnNpemUgPSA4MTkyLAotCQkJfQotCQl9Ci0JfSwKIAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM4NDM0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgZGV2aWNlcyBiYXNlZCBvbiB0aGUgRGlCY29tIERpQjA3MDAgVVNCIGJyaWRnZQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKgl1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICoJU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtNiBEaUJjb20sIFNBCisgKi8KKyNpZm5kZWYgX0RJQjA3MDBfSF8KKyNkZWZpbmUgX0RJQjA3MDBfSF8KKworI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImRpYjA3MDAiCisjaW5jbHVkZSAiZHZiLXVzYi5oIgorCisjaW5jbHVkZSAiZGliMDd4MC5oIgorCitleHRlcm4gaW50IGR2Yl91c2JfZGliMDcwMF9kZWJ1ZzsKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfZGliMDcwMF9kZWJ1ZywweDAxLGFyZ3MpCisjZGVmaW5lIGRlYl9mdyhhcmdzLi4uKSAgICAgZHByaW50ayhkdmJfdXNiX2RpYjA3MDBfZGVidWcsMHgwMixhcmdzKQorI2RlZmluZSBkZWJfZndkYXRhKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9kaWIwNzAwX2RlYnVnLDB4MDQsYXJncykKKyNkZWZpbmUgZGViX2RhdGEoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfZGliMDcwMF9kZWJ1ZywweDA4LGFyZ3MpCisKKyNkZWZpbmUgUkVRVUVTVF9JMkNfUkVBRCAgICAgMHgyCisjZGVmaW5lIFJFUVVFU1RfSTJDX1dSSVRFICAgIDB4MworI2RlZmluZSBSRVFVRVNUX1BPTExfUkMgICAgICAweDQKKyNkZWZpbmUgUkVRVUVTVF9KVU1QUkFNICAgICAgMHg4CisjZGVmaW5lIFJFUVVFU1RfU0VUX0dQSU8gICAgIDB4QworI2RlZmluZSBSRVFVRVNUX0VOQUJMRV9WSURFTyAweEYKKwkvLyAxIEJ5dGU6IDRNU0IoMSA9IGVuYWJsZSBzdHJlYW1pbmcsIDAgPSBkaXNhYmxlIHN0cmVhbWluZykgNExTQihWaWRlbyBNb2RlOiAwID0gTVBFRzIgMTg4Qnl0ZXMsIDEgPSBBbmFsb2cpCisJLy8gMiBCeXRlOiBNUEVHMiBtb2RlOiAgNE1TQigxID0gTWFzdGVyIE1vZGUsIDAgPSBTbGF2ZSBNb2RlKSA0TFNCKENoYW5uZWwgMSA9IGJpdDAsIENoYW5uZWwgMiA9IGJpdDEpCisJLy8gMiBCeXRlOiBBbmFsb2cgbW9kZTogNE1TQigwID0gNjI1IGxpbmVzLCAxID0gNTI1IGxpbmVzKSAgICA0TFNCKCAgICAgIiAgICAgICAgICAgICAgICAiICAgICAgICAgICApCisKK3N0cnVjdCBkaWIwNzAwX3N0YXRlIHsKKwl1OCBjaGFubmVsX3N0YXRlOworCXUxNiBtdDIwNjBfaWYxWzJdOworfTsKKworZXh0ZXJuIGludCBkaWIwNzAwX3NldF9ncGlvKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqLCBlbnVtIGRpYjA3eDBfZ3Bpb3MgZ3BpbywgdTggZ3Bpb19kaXIsIHU4IGdwaW9fdmFsKTsKK2V4dGVybiBpbnQgZGliMDcwMF9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyk7CitleHRlcm4gaW50IGRpYjA3MDBfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKTsKK2V4dGVybiBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBkaWIwNzAwX2kyY19hbGdvOworZXh0ZXJuIGludCBkaWIwNzAwX2lkZW50aWZ5X3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqcHJvcHMsCisJCQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKipkZXNjLCBpbnQgKmNvbGQpOworCitleHRlcm4gaW50IGRpYjA3MDBfZGV2aWNlX2NvdW50OworZXh0ZXJuIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRpYjA3MDBfZGV2aWNlc1tdOworZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRpYjA3MDBfdXNiX2lkX3RhYmxlW107CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhNmM2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKQEAgLTAsMCArMSwyNzkgQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgZGV2aWNlcyBiYXNlZCBvbiB0aGUgRGlCY29tIERpQjA3MDAgVVNCIGJyaWRnZQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKgl1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICoJU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtNiBEaUJjb20sIFNBCisgKi8KKyNpbmNsdWRlICJkaWIwNzAwLmgiCisKKy8qIGRlYnVnICovCitpbnQgZHZiX3VzYl9kaWIwNzAwX2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLGR2Yl91c2JfZGliMDcwMF9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8sMj1mdyw0PWZ3ZGF0YSw4PWRhdGEgKG9yLWFibGUpKS4iIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKKworLyogZXhwZWN0aW5nIHJ4IGJ1ZmZlcjogcmVxdWVzdCBkYXRhWzBdIGRhdGFbMV0gLi4uIGRhdGFbMl0gKi8KK3N0YXRpYyBpbnQgZGliMDcwMF9jdHJsX3dyKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggKnR4LCB1OCB0eGxlbikKK3sKKwlpbnQgc3RhdHVzOworCisJZGViX2RhdGEoIj4+PiAiKTsKKwlkZWJ1Z19kdW1wKHR4LHR4bGVuLGRlYl9kYXRhKTsKKworCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LCB1c2Jfc25kY3RybHBpcGUoZC0+dWRldiwwKSwKKwkJdHhbMF0sIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VULCAwLCAwLCB0eCwgdHhsZW4sCisJCVVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKworCWlmIChzdGF0dXMgIT0gdHhsZW4pCisJCWRlYl9kYXRhKCJlcCAwIHdyaXRlIGVycm9yIChzdGF0dXMgPSAlZCwgbGVuOiAlZClcbiIsc3RhdHVzLHR4bGVuKTsKKworCXJldHVybiBzdGF0dXMgPCAwID8gc3RhdHVzIDogMDsKK30KKworLyogZXhwZWN0aW5nIHR4IGJ1ZmZlcjogcmVxdWVzdCBkYXRhWzBdIC4uLiBkYXRhW25dIChuIDw9IDQpICovCitzdGF0aWMgaW50IGRpYjA3MDBfY3RybF9yZChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4ICp0eCwgdTggdHhsZW4sIHU4ICpyeCwgdTggcnhsZW4pCit7CisJdTE2IGluZGV4LCB2YWx1ZTsKKwlpbnQgc3RhdHVzOworCisJaWYgKHR4bGVuIDwgMikgeworCQllcnIoInR4IGJ1ZmZlciBsZW5ndGggaXMgc21hbGxlciB0aGFuIDIuIE1ha2VzIG5vIHNlbnNlLiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHR4bGVuID4gNCkgeworCQllcnIoInR4IGJ1ZmZlciBsZW5ndGggaXMgbGFyZ2VyIHRoYW4gNC4gTm90IHN1cHBvcnRlZC4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGViX2RhdGEoIj4+PiAiKTsKKwlkZWJ1Z19kdW1wKHR4LHR4bGVuLGRlYl9kYXRhKTsKKworCXZhbHVlID0gKCh0eGxlbiAtIDIpIDw8IDgpIHwgdHhbMV07CisJaW5kZXggPSAwOworCWlmICh0eGxlbiA+IDIpCisJCWluZGV4IHw9ICh0eFsyXSA8PCA4KTsKKwlpZiAodHhsZW4gPiAzKQorCQlpbmRleCB8PSB0eFszXTsKKworCS8qIHRoaW5rIGFib3V0IHN3YXBwaW5nIGhlcmUgKi8KKwl2YWx1ZSA9IGxlMTZfdG9fY3B1KHZhbHVlKTsKKwlpbmRleCA9IGxlMTZfdG9fY3B1KGluZGV4KTsKKworCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUoZC0+dWRldiwwKSwgdHhbMF0sCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOLCB2YWx1ZSwgaW5kZXgsIHJ4LCByeGxlbiwKKwkJCVVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKworCWlmIChzdGF0dXMgPCAwKQorCQlkZWJfaW5mbygiZXAgMCByZWFkIGVycm9yIChzdGF0dXMgPSAlZClcbiIsc3RhdHVzKTsKKworCWRlYl9kYXRhKCI8PDwgIik7CisJZGVidWdfZHVtcChyeCxyeGxlbixkZWJfZGF0YSk7CisKKwlyZXR1cm4gc3RhdHVzOyAvKiBsZW5ndGggaW4gY2FzZSBvZiBzdWNjZXNzICovCit9CisKK2ludCBkaWIwNzAwX3NldF9ncGlvKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgZW51bSBkaWIwN3gwX2dwaW9zIGdwaW8sIHU4IGdwaW9fZGlyLCB1OCBncGlvX3ZhbCkKK3sKKwl1OCBidWZbM10gPSB7IFJFUVVFU1RfU0VUX0dQSU8sIGdwaW8sICgoZ3Bpb19kaXIgJiAweDAxKSA8PCA3KSB8ICgoZ3Bpb192YWwgJiAweDAxKSA8PCA2KSB9OworCXJldHVybiBkaWIwNzAwX2N0cmxfd3IoZCxidWYsMyk7Cit9CisKKy8qCisgKiBJMkMgbWFzdGVyIHhmZXIgZnVuY3Rpb24KKyAqLworc3RhdGljIGludCBkaWIwNzAwX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCxzdHJ1Y3QgaTJjX21zZyAqbXNnLGludCBudW0pCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlpbnQgaSxsZW47CisJdTggYnVmWzI1NV07CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJLyogZmlsbCBpbiB0aGUgYWRkcmVzcyAqLworCQlidWZbMV0gPSAobXNnW2ldLmFkZHIgPDwgMSk7CisJCS8qIGZpbGwgdGhlIGJ1ZmZlciAqLworCQltZW1jcHkoJmJ1ZlsyXSwgbXNnW2ldLmJ1ZiwgbXNnW2ldLmxlbik7CisKKwkJLyogd3JpdGUvcmVhZCByZXF1ZXN0ICovCisJCWlmIChpKzEgPCBudW0gJiYgKG1zZ1tpKzFdLmZsYWdzICYgSTJDX01fUkQpKSB7CisJCQlidWZbMF0gPSBSRVFVRVNUX0kyQ19SRUFEOworCQkJYnVmWzFdIHw9IDE7CisKKwkJCS8qIHNwZWNpYWwgdGhpbmcgaW4gdGhlIGN1cnJlbnQgZmlybXdhcmU6IHdoZW4gbGVuZ3RoIGlzIHplcm8gdGhlIHJlYWQtZmFpbGVkICovCisJCQlpZiAoKGxlbiA9IGRpYjA3MDBfY3RybF9yZChkLCBidWYsIG1zZ1tpXS5sZW4gKyAyLCBtc2dbaSsxXS5idWYsIG1zZ1tpKzFdLmxlbikpIDw9IDApIHsKKwkJCQlkZWJfaW5mbygiSTJDIHJlYWQgZmFpbGVkIG9uIGFkZHJlc3MgJXhcbiIsIG1zZ1tpXS5hZGRyKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJbXNnW2krMV0ubGVuID0gbGVuOworCisJCQlpKys7CisJCX0gZWxzZSB7CisJCQlidWZbMF0gPSBSRVFVRVNUX0kyQ19XUklURTsKKwkJCWlmIChkaWIwNzAwX2N0cmxfd3IoZCwgYnVmLCBtc2dbaV0ubGVuICsgMikgPCAwKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCXJldHVybiBpOworfQorCitzdGF0aWMgdTMyIGRpYjA3MDBfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBJMkNfRlVOQ19JMkM7Cit9CisKK3N0cnVjdCBpMmNfYWxnb3JpdGhtIGRpYjA3MDBfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBkaWIwNzAwX2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gZGliMDcwMF9pMmNfZnVuYywKK307CisKK2ludCBkaWIwNzAwX2lkZW50aWZ5X3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqcHJvcHMsCisJCQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKipkZXNjLCBpbnQgKmNvbGQpCit7CisJdTggYnVmWzNdID0geyBSRVFVRVNUX1NFVF9HUElPLCA0LCAoR1BJT19JTiA8PCA3KSB8ICgwIDw8IDYpIH07IC8vIEdQSU80IGlzIHNhdmUgLSB1c2VkIGZvciBJMkMKKwkqY29sZCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwwKSwKKwkJYnVmWzBdLCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCwgMCwgMCwgYnVmLCAzLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCkgIT0gMzsKKworCWRlYl9pbmZvKCJjb2xkOiAlZFxuIiwgKmNvbGQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjA3MDBfanVtcHJhbShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTMyIGFkZHJlc3MpCit7CisJaW50IHJldCwgYWN0bGVuOworCXU4IGJ1Zls4XSA9IHsgUkVRVUVTVF9KVU1QUkFNLCAwLCAwLCAwLAorCQkoYWRkcmVzcyA+PiAyNCkgJiAweGZmLAorCQkoYWRkcmVzcyA+PiAxNikgJiAweGZmLAorCQkoYWRkcmVzcyA+PiA4KSAgJiAweGZmLAorCQkgYWRkcmVzcyAgICAgICAgJiAweGZmIH07CisKKwlpZiAoKHJldCA9IHVzYl9idWxrX21zZyh1ZGV2LCB1c2Jfc25kYnVsa3BpcGUodWRldiwgMHgwMSksYnVmLDgsJmFjdGxlbiwxMDAwKSkgPCAwKSB7CisJCWRlYl9mdygianVtcHJhbSB0byAweCV4IGZhaWxlZFxuIixhZGRyZXNzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGFjdGxlbiAhPSA4KSB7CisJCWRlYl9mdygianVtcHJhbSB0byAweCV4IGZhaWxlZFxuIixhZGRyZXNzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitpbnQgZGliMDcwMF9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlzdHJ1Y3QgaGV4bGluZSBoeDsKKwlpbnQgcG9zID0gMCwgcmV0LCBhY3RfbGVuOworCisJdTggYnVmWzI2MF07CisKKwl3aGlsZSAoKHJldCA9IGR2Yl91c2JfZ2V0X2hleGxpbmUoZncsICZoeCwgJnBvcykpID4gMCkgeworCQlkZWJfZndkYXRhKCJ3cml0aW5nIHRvIGFkZHJlc3MgMHglMDh4IChidWZmZXI6IDB4JTAyeCAlMDJ4KVxuIixoeC5hZGRyLCBoeC5sZW4sIGh4LmNoayk7CisKKwkJYnVmWzBdID0gaHgubGVuOworCQlidWZbMV0gPSAoaHguYWRkciA+PiA4KSAmIDB4ZmY7CisJCWJ1ZlsyXSA9ICBoeC5hZGRyICAgICAgICYgMHhmZjsKKwkJYnVmWzNdID0gaHgudHlwZTsKKwkJbWVtY3B5KCZidWZbNF0saHguZGF0YSxoeC5sZW4pOworCQlidWZbNCtoeC5sZW5dID0gaHguY2hrOworCisJCXJldCA9IHVzYl9idWxrX21zZyh1ZGV2LAorCQkJdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIDB4MDEpLAorCQkJYnVmLAorCQkJaHgubGVuICsgNSwKKwkJCSZhY3RfbGVuLAorCQkJMTAwMCk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCWVycigiZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkIGF0ICVkIHdpdGggJWQiLHBvcyxyZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWlmIChyZXQgPT0gMCkgeworCQkvKiBzdGFydCB0aGUgZmlybXdhcmUgKi8KKwkJaWYgKChyZXQgPSBkaWIwNzAwX2p1bXByYW0odWRldiwgMHg3MDAwMDAwMCkpID09IDApIHsKKwkJCWluZm8oImZpcm13YXJlIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LiIpOworCQkJbXNsZWVwKDEwMCk7CisJCX0KKwl9IGVsc2UKKwkJcmV0ID0gLUVJTzsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBkaWIwNzAwX3N0cmVhbWluZ19jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZikKK3sKKwlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBhZGFwLT5kZXYtPnByaXY7CisJdTggYls0XTsKKworCWJbMF0gPSBSRVFVRVNUX0VOQUJMRV9WSURFTzsKKwliWzFdID0gMHgwMDsKKwliWzJdID0gKDB4MDEgPDwgNCk7IC8qIE1hc3RlciBtb2RlICovCisJYlszXSA9IDB4MDA7CisKKwlkZWJfaW5mbygibW9kaWZ5aW5nICglZCkgc3RyZWFtaW5nIHN0YXRlIGZvciAlZFxuIiwgb25vZmYsIGFkYXAtPmlkKTsKKworCWlmIChvbm9mZikKKwkJc3QtPmNoYW5uZWxfc3RhdGUgfD0gICAxIDw8IGFkYXAtPmlkOworCWVsc2UKKwkJc3QtPmNoYW5uZWxfc3RhdGUgJj0gfigxIDw8IGFkYXAtPmlkKTsKKworCWJbMl0gfD0gc3QtPmNoYW5uZWxfc3RhdGU7CisKKwlpZiAoc3QtPmNoYW5uZWxfc3RhdGUpIC8qIGlmIGF0IGxlYXN0IG9uZSBjaGFubmVsIGlzIGFjdGl2ZSAqLworCQliWzFdID0gKDB4MDEgPDwgNCkgfCAweDAwOworCisJZGViX2luZm8oImRhdGEgZm9yIHN0cmVhbWluZzogJXggJXhcbiIsYlsxXSxiWzJdKTsKKworCXJldHVybiBkaWIwNzAwX2N0cmxfd3IoYWRhcC0+ZGV2LCBiLCA0KTsKK30KKworc3RhdGljIGludCBkaWIwNzAwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGliMDcwMF9kZXZpY2VfY291bnQ7IGkrKykKKwkJaWYgKGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmRpYjA3MDBfZGV2aWNlc1tpXSwgVEhJU19NT0RVTEUsIE5VTEwpID09IDApCisJCQlyZXR1cm4gMDsKKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGliMDcwMF9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgPSAiZHZiX3VzYl9kaWIwNzAwIiwKKwkucHJvYmUgICAgICA9IGRpYjA3MDBfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBkdmJfdXNiX2RldmljZV9leGl0LAorCS5pZF90YWJsZSAgID0gZGliMDcwMF91c2JfaWRfdGFibGUsCit9OworCisvKiBtb2R1bGUgc3R1ZmYgKi8KK3N0YXRpYyBpbnQgX19pbml0IGRpYjA3MDBfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCWluZm8oImxvYWRlZCB3aXRoIHN1cHBvcnQgZm9yICVkIGRpZmZlcmVudCBkZXZpY2UtdHlwZXMiLCBkaWIwNzAwX2RldmljZV9jb3VudCk7CisJaWYgKChyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmRpYjA3MDBfZHJpdmVyKSkpIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkaWIwNzAwX21vZHVsZV9leGl0KHZvaWQpCit7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciBmcm9tIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmRpYjA3MDBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKGRpYjA3MDBfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQgKGRpYjA3MDBfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIEJvZXR0Y2hlciA8cGJvZXR0Y2hlckBkaWJjb20uZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgZGV2aWNlcyBiYXNlZCBvbiBEaUJjb20gRGlCMDcwMCAtIFVTQiBicmlkZ2UiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NzNiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCkBAIC0wLDAgKzEsMjEyIEBACisvKiBMaW51eCBkcml2ZXIgZm9yIGRldmljZXMgYmFzZWQgb24gdGhlIERpQmNvbSBEaUIwNzAwIFVTQiBicmlkZ2UKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqCVNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTYgRGlCY29tLCBTQQorICovCisjaW5jbHVkZSAiZGliMDcwMC5oIgorCisjaW5jbHVkZSAiZGliMzAwMG1jLmgiCisjaW5jbHVkZSAibXQyMDYwLmgiCisKK3N0YXRpYyBpbnQgZm9yY2VfbG5hX2FjdGl2YXRpb247Cittb2R1bGVfcGFyYW0oZm9yY2VfbG5hX2FjdGl2YXRpb24sIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX2xuYV9hY3RpdmF0aW9uLCAiZm9yY2UgdGhlIGFjdGl2YXRpb24gb2YgTG93LU5vaXNlLUFtcGxpZnllcihzKSAoTE5BKSwgIgorCQkiaWYgYXBwbGljYWJsZSBmb3IgdGhlIGRldmljZSAoZGVmYXVsdDogMD1hdXRvbWF0aWMvb2ZmKS4iKTsKKworLyogSGF1cHBhdWdlIE5vdmEtVCA1MDAKKyAqICBoYXMgYSBMTkEgb24gR1BJTzAgd2hpY2ggaXMgZW5hYmxlZCBieSBzZXR0aW5nIDEgKi8KK3N0YXRpYyBzdHJ1Y3QgbXQyMDYwX2NvbmZpZyBicmlzdG9sX210MjA2MF9jb25maWdbMl0gPSB7CisJeworCQkuaTJjX2FkZHJlc3MgPSAweDYwLAorCQkuY2xvY2tfb3V0ICAgPSAzLAorCX0sIHsKKwkJLmkyY19hZGRyZXNzID0gMHg2MSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGRpYngwMDBfYWdjX2NvbmZpZyBicmlzdG9sX2RpYjMwMDBwX210MjA2MF9hZ2NfY29uZmlnID0geworCS5iYW5kX2NhcHMgPSBCQU5EX1ZIRiB8IEJBTkRfVUhGLAorCS5zZXR1cCAgICAgPSAoMSA8PCA4KSB8ICg1IDw8IDUpIHwgKDAgPDwgNCkgfCAoMCA8PCAzKSB8ICgwIDw8IDIpIHwgKDIgPDwgMCksCisKKwkuYWdjMV9tYXggPSA0MjU5OCwKKwkuYWdjMV9taW4gPSAxNzY5NCwKKwkuYWdjMl9tYXggPSA0NTg3NSwKKwkuYWdjMl9taW4gPSAwLAorCisJLmFnYzFfcHQxID0gMCwKKwkuYWdjMV9wdDIgPSA1OSwKKworCS5hZ2MxX3Nsb3BlMSA9IDAsCisJLmFnYzFfc2xvcGUyID0gNjksCisKKwkuYWdjMl9wdDEgPSAwLAorCS5hZ2MyX3B0MiA9IDU5LAorCisJLmFnYzJfc2xvcGUxID0gMTExLAorCS5hZ2MyX3Nsb3BlMiA9IDI4LAorfTsKKworc3RhdGljIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIGJyaXN0b2xfZGliMzAwMG1jX2NvbmZpZ1syXSA9IHsKKwl7CS5hZ2MgICAgICAgICAgPSAmYnJpc3RvbF9kaWIzMDAwcF9tdDIwNjBfYWdjX2NvbmZpZywKKwkJLm1heF90aW1lICAgICA9IDB4MTk2LAorCQkubG5fYWRjX2xldmVsID0gMHgxY2M3LAorCQkub3V0cHV0X21wZWcyX2luXzE4OF9ieXRlcyA9IDEsCisJfSwKKwl7CS5hZ2MgICAgICAgICAgPSAmYnJpc3RvbF9kaWIzMDAwcF9tdDIwNjBfYWdjX2NvbmZpZywKKwkJLm1heF90aW1lICAgICA9IDB4MTk2LAorCQkubG5fYWRjX2xldmVsID0gMHgxY2M3LAorCQkub3V0cHV0X21wZWcyX2luXzE4OF9ieXRlcyA9IDEsCisJfQorfTsKKworc3RhdGljIGludCBicmlzdG9sX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGFkYXAtPmRldi0+cHJpdjsKKwlpZiAoYWRhcC0+aWQgPT0gMCkgeworCQlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsICBHUElPX09VVCwgMCk7IG1zbGVlcCgxMCk7CisJCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPNiwgIEdQSU9fT1VULCAxKTsgbXNsZWVwKDEwKTsKKwkJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDApOyBtc2xlZXAoMTApOworCQlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMSk7IG1zbGVlcCgxMCk7CisKKwkJaWYgKGZvcmNlX2xuYV9hY3RpdmF0aW9uKQorCQkJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8wLCBHUElPX09VVCwgMSk7CisJCWVsc2UKKwkJCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMCwgR1BJT19PVVQsIDApOworCisJCWlmIChkaWIzMDAwbWNfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAyLCBERUZBVUxUX0RJQjMwMDBQX0kyQ19BRERSRVNTLCBicmlzdG9sX2RpYjMwMDBtY19jb25maWcpICE9IDApIHsKKwkJCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPNiwgR1BJT19PVVQsIDApOyBtc2xlZXAoMTApOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisJc3QtPm10MjA2MF9pZjFbYWRhcC0+aWRdID0gMTIyMDsKKwlyZXR1cm4gKGFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWIzMDAwbWNfYXR0YWNoLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwKKwkJKDEwICsgYWRhcC0+aWQpIDw8IDEsICZicmlzdG9sX2RpYjMwMDBtY19jb25maWdbYWRhcC0+aWRdKSkgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworfQorCitzdGF0aWMgaW50IGJyaXN0b2xfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gYWRhcC0+ZGV2LT5wcml2OworCXN0cnVjdCBpMmNfYWRhcHRlciAqdHVuX2kyYyA9IGRpYjMwMDBtY19nZXRfdHVuZXJfaTJjX21hc3RlcihhZGFwLT5mZSwgMSk7CisJcmV0dXJuIGR2Yl9hdHRhY2gobXQyMDYwX2F0dGFjaCxhZGFwLT5mZSwgdHVuX2kyYywgJmJyaXN0b2xfbXQyMDYwX2NvbmZpZ1thZGFwLT5pZF0sCisJCXN0LT5tdDIwNjBfaWYxW2FkYXAtPmlkXSkgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworfQorCisvKiBTVEs3NzAwUDogSGF1cHBhdWdlIE5vdmEtVCBTdGljaywgQVZlck1lZGlhIFZvbGFyICovCisvKgorc3RhdGljIHN0cnVjdCBtdDIwNjBfY29uZmlnIHN0azcwMDBwX210MjA2MF9jb25maWcgPSB7CisJMHg2MAorfTsKKyovCisKK3N0YXRpYyBpbnQgc3RrNzcwMHBfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJLyogdW5sZXNzIHRoZXJlIGlzIG5vIHJlYWwgcG93ZXIgbWFuYWdlbWVudCBpbiBEVkIgLSB3ZSBsZWF2ZSB0aGUgZGV2aWNlIG9uIEdQSU82ICovCisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU82LCBHUElPX09VVCwgMCk7IG1zbGVlcCgxMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU82LCBHUElPX09VVCwgMSk7IG1zbGVlcCgxMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDEpOyBtc2xlZXAoMTApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAwKTsgbXNsZWVwKDEwKTsKKworLy8JYWRhcC0+ZmUgPSBkaWI3MDAwbV9hdHRhY2goJmFkYXAtPmRldi0+aTJjX2FkYXAsICZzdGs3NzAwcF9kaWI3MDAwbV9jb25maWcsIDE4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGs3NzAwcF90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKy8vCXR1bl9pMmMgPSBkaWI3MDAwbV9nZXRfdHVuZXJfaTJjX21hc3RlcihhZGFwLT5mZSwgMSk7CisvLwlyZXR1cm4gbXQyMDYwX2F0dGFjaChhZGFwLT5mZSwgdHVuX2kyYywgJnN0azMwMDBwX210MjA2MF9jb25maWcsIGlmMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGRpYjA3MDBfdXNiX2lkX3RhYmxlW10gPSB7CisJCXsgVVNCX0RFVklDRShVU0JfVklEX0RJQkNPTSwgICAgVVNCX1BJRF9ESUJDT01fU1RLNzcwMFApIH0sCisJCXsgVVNCX0RFVklDRShVU0JfVklEX0hBVVBQQVVHRSwgVVNCX1BJRF9IQVVQUEFVR0VfTk9WQV9UXzUwMCkgfSwKKwkJeyBVU0JfREVWSUNFKFVTQl9WSURfSEFVUFBBVUdFLCBVU0JfUElEX0hBVVBQQVVHRV9OT1ZBX1RfNTAwXzIpIH0sCisJCXsgVVNCX0RFVklDRShVU0JfVklEX0hBVVBQQVVHRSwgVVNCX1BJRF9IQVVQUEFVR0VfTk9WQV9UX1NUSUNLKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BVkVSTUVESUEsIFVTQl9QSURfQVZFUk1FRElBX1ZPTEFSKSB9LAorCQl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRpYjA3MDBfdXNiX2lkX3RhYmxlKTsKKworI2RlZmluZSBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMgXAorCS5jYXBzICAgICAgICAgICAgICA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsIFwKKwkudXNiX2N0cmwgICAgICAgICAgPSBERVZJQ0VfU1BFQ0lGSUMsIFwKKwkuZmlybXdhcmUgICAgICAgICAgPSAiZHZiLXVzYi1kaWIwNzAwLTAxLmZ3IiwgXAorCS5kb3dubG9hZF9maXJtd2FyZSA9IGRpYjA3MDBfZG93bmxvYWRfZmlybXdhcmUsIFwKKwkubm9fcmVjb25uZWN0ICAgICAgPSAxLCBcCisJLnNpemVfb2ZfcHJpdiAgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWIwNzAwX3N0YXRlKSwgXAorCS5pMmNfYWxnbyAgICAgICAgICA9ICZkaWIwNzAwX2kyY19hbGdvLCBcCisJLmlkZW50aWZ5X3N0YXRlICAgID0gZGliMDcwMF9pZGVudGlmeV9zdGF0ZQorCisjZGVmaW5lIERJQjA3MDBfREVGQVVMVF9TVFJFQU1JTkdfQ09ORklHKGVwKSBcCisJLnN0cmVhbWluZ19jdHJsICAgPSBkaWIwNzAwX3N0cmVhbWluZ19jdHJsLCBcCisJLnN0cmVhbSA9IHsgXAorCQkudHlwZSA9IFVTQl9CVUxLLCBcCisJCS5jb3VudCA9IDQsIFwKKwkJLmVuZHBvaW50ID0gZXAsIFwKKwkJLnUgPSB7IFwKKwkJCS5idWxrID0geyBcCisJCQkJLmJ1ZmZlcnNpemUgPSAzOTQ4MCwgXAorCQkJfSBcCisJCX0gXAorCX0KKworc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZGliMDcwMF9kZXZpY2VzW10gPSB7CisJeworCQlESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCisKKwkJLm51bV9hZGFwdGVycyA9IDEsCisJCS5hZGFwdGVyID0geworCQkJeworCQkJCS5mcm9udGVuZF9hdHRhY2ggID0gc3RrNzcwMHBfZnJvbnRlbmRfYXR0YWNoLAorCQkJCS50dW5lcl9hdHRhY2ggICAgID0gc3RrNzcwMHBfdHVuZXJfYXR0YWNoLAorCisJCQkJRElCMDcwMF9ERUZBVUxUX1NUUkVBTUlOR19DT05GSUcoMHgwMiksCisJCQl9LAorCQl9LAorCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMywKKwkJLmRldmljZXMgPSB7CisJCQl7ICAgIkRpQmNvbSBTVEs3NzAwUCByZWZlcmVuY2UgZGVzaWduIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVswXSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICAiSGF1cHBhdWdlIE5vdmEtVCBTdGljayIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbM10sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCQl7ICAgIkFWZXJNZWRpYSBBVmVyVFYgRFZCLVQgVm9sYXIiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzRdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQl9CisJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCisKKwkJLm51bV9hZGFwdGVycyA9IDIsCisJCS5hZGFwdGVyID0geworCQkJeworCQkJCS5mcm9udGVuZF9hdHRhY2ggID0gYnJpc3RvbF9mcm9udGVuZF9hdHRhY2gsCisJCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBicmlzdG9sX3R1bmVyX2F0dGFjaCwKKworCQkJCURJQjA3MDBfREVGQVVMVF9TVFJFQU1JTkdfQ09ORklHKDB4MDIpLAorCQkJfSwgeworCQkJCS5mcm9udGVuZF9hdHRhY2ggID0gYnJpc3RvbF9mcm9udGVuZF9hdHRhY2gsCisJCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBicmlzdG9sX3R1bmVyX2F0dGFjaCwKKworCQkJCURJQjA3MDBfREVGQVVMVF9TVFJFQU1JTkdfQ09ORklHKDB4MDMpLAorCQkJfQorCQl9LAorCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkJLmRldmljZXMgPSB7CisJCQl7ICAgIkhhdXBwYXVnZSBOb3ZhLVQgNTAwIER1YWwgRFZCLVQiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzFdLCAmZGliMDcwMF91c2JfaWRfdGFibGVbMl0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCX0KKwl9Cit9OworCitpbnQgZGliMDcwMF9kZXZpY2VfY291bnQgPSBBUlJBWV9TSVpFKGRpYjA3MDBfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3eDAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDd4MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNjJjMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3eDAuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIF9ESUIwN1gwX0hfCisjZGVmaW5lIF9ESUIwN1gwX0hfCisKK2VudW0gZGliMDd4MF9ncGlvcyB7CisJR1BJTzAgID0gIDAsCisJR1BJTzEgID0gIDIsCisJR1BJTzIgID0gIDMsCisJR1BJTzMgID0gIDQsCisJR1BJTzQgID0gIDUsCisJR1BJTzUgID0gIDYsCisJR1BJTzYgID0gIDgsCisJR1BJTzcgID0gMTAsCisJR1BJTzggID0gMTEsCisJR1BJTzkgID0gMTQsCisJR1BJTzEwID0gMTUsCit9OworCisjZGVmaW5lIEdQSU9fSU4gIDAKKyNkZWZpbmUgR1BJT19PVVQgMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItY29tbW9uLmMKaW5kZXggMTI0ZTI1YS4uZmQzYTk5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItY29tbW9uLmMKQEAgLTE4LDEyICsxOCwxMiBAQAogI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKGRlYnVnLDB4MDEsYXJncykKIAogLyogY29tbW9uIHN0dWZmIHVzZWQgYnkgdGhlIGRpZmZlcmVudCBkaWJ1c2IgbW9kdWxlcyAqLwotaW50IGRpYnVzYl9zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBvbm9mZikKK2ludCBkaWJ1c2Jfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQogewotCWlmIChkLT5wcml2ICE9IE5VTEwpIHsKLQkJc3RydWN0IGRpYnVzYl9zdGF0ZSAqc3QgPSBkLT5wcml2OworCWlmIChhZGFwLT5wcml2ICE9IE5VTEwpIHsKKwkJc3RydWN0IGRpYnVzYl9zdGF0ZSAqc3QgPSBhZGFwLT5wcml2OwogCQlpZiAoc3QtPm9wcy5maWZvX2N0cmwgIT0gTlVMTCkKLQkJCWlmIChzdC0+b3BzLmZpZm9fY3RybChkLT5mZSxvbm9mZikpIHsKKwkJCWlmIChzdC0+b3BzLmZpZm9fY3RybChhZGFwLT5mZSxvbm9mZikpIHsKIAkJCQllcnIoImVycm9yIHdoaWxlIGNvbnRyb2xsaW5nIHRoZSBmaWZvIG9mIHRoZSBkZW1vZC4iKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KQEAgLTMyLDIzICszMiwyMyBAQAogfQogRVhQT1JUX1NZTUJPTChkaWJ1c2Jfc3RyZWFtaW5nX2N0cmwpOwogCi1pbnQgZGlidXNiX3BpZF9maWx0ZXIoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgaW5kZXgsIHUxNiBwaWQsIGludCBvbm9mZikKK2ludCBkaWJ1c2JfcGlkX2ZpbHRlcihzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgaW5kZXgsIHUxNiBwaWQsIGludCBvbm9mZikKIHsKLQlpZiAoZC0+cHJpdiAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBkaWJ1c2Jfc3RhdGUgKnN0ID0gZC0+cHJpdjsKKwlpZiAoYWRhcC0+cHJpdiAhPSBOVUxMKSB7CisJCXN0cnVjdCBkaWJ1c2Jfc3RhdGUgKnN0ID0gYWRhcC0+cHJpdjsKIAkJaWYgKHN0LT5vcHMucGlkX2N0cmwgIT0gTlVMTCkKLQkJCXN0LT5vcHMucGlkX2N0cmwoZC0+ZmUsaW5kZXgscGlkLG9ub2ZmKTsKKwkJCXN0LT5vcHMucGlkX2N0cmwoYWRhcC0+ZmUsaW5kZXgscGlkLG9ub2ZmKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRpYnVzYl9waWRfZmlsdGVyKTsKIAotaW50IGRpYnVzYl9waWRfZmlsdGVyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCitpbnQgZGlidXNiX3BpZF9maWx0ZXJfY3RybChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgb25vZmYpCiB7Ci0JaWYgKGQtPnByaXYgIT0gTlVMTCkgewotCQlzdHJ1Y3QgZGlidXNiX3N0YXRlICpzdCA9IGQtPnByaXY7CisJaWYgKGFkYXAtPnByaXYgIT0gTlVMTCkgeworCQlzdHJ1Y3QgZGlidXNiX3N0YXRlICpzdCA9IGFkYXAtPnByaXY7CiAJCWlmIChzdC0+b3BzLnBpZF9wYXJzZSAhPSBOVUxMKQotCQkJaWYgKHN0LT5vcHMucGlkX3BhcnNlKGQtPmZlLG9ub2ZmKSA8IDApCisJCQlpZiAoc3QtPm9wcy5waWRfcGFyc2UoYWRhcC0+ZmUsb25vZmYpIDwgMCkKIAkJCQllcnIoImNvdWxkIG5vdCBoYW5kbGUgcGlkX3BhcnNlciIpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY4LDI0ICs2OCwyNCBAQAogfQogRVhQT1JUX1NZTUJPTChkaWJ1c2JfcG93ZXJfY3RybCk7CiAKLWludCBkaWJ1c2IyXzBfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCitpbnQgZGlidXNiMl8wX3N0cmVhbWluZ19jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZikKIHsKIAl1OCBiWzNdID0geyAwIH07CiAJaW50IHJldDsKIAotCWlmICgocmV0ID0gZGlidXNiX3N0cmVhbWluZ19jdHJsKGQsb25vZmYpKSA8IDApCisJaWYgKChyZXQgPSBkaWJ1c2Jfc3RyZWFtaW5nX2N0cmwoYWRhcCxvbm9mZikpIDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCWlmIChvbm9mZikgewogCQliWzBdID0gRElCVVNCX1JFUV9TRVRfU1RSRUFNSU5HX01PREU7CiAJCWJbMV0gPSAweDAwOwotCQlpZiAoKHJldCA9IGR2Yl91c2JfZ2VuZXJpY193cml0ZShkLGIsMikpIDwgMCkKKwkJaWYgKChyZXQgPSBkdmJfdXNiX2dlbmVyaWNfd3JpdGUoYWRhcC0+ZGV2LGIsMikpIDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQogCiAJYlswXSA9IERJQlVTQl9SRVFfU0VUX0lPQ1RMOwogCWJbMV0gPSBvbm9mZiA/IERJQlVTQl9JT0NUTF9DTURfRU5BQkxFX1NUUkVBTSA6IERJQlVTQl9JT0NUTF9DTURfRElTQUJMRV9TVFJFQU07Ci0JcmV0dXJuIGR2Yl91c2JfZ2VuZXJpY193cml0ZShkLGIsMyk7CisJcmV0dXJuIGR2Yl91c2JfZ2VuZXJpY193cml0ZShhZGFwLT5kZXYsYiwzKTsKIH0KIEVYUE9SVF9TWU1CT0woZGlidXNiMl8wX3N0cmVhbWluZ19jdHJsKTsKIApAQCAtMjI4LDEyICsyMjgsMTIgQEAKIAkub3V0cHV0X21wZWcyX2luXzE4OF9ieXRlcyA9IDEsCiB9OwogCi1pbnQgZGlidXNiX2RpYjMwMDBtY19mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoraW50IGRpYnVzYl9kaWIzMDAwbWNfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0JaWYgKGRpYjMwMDBtY19hdHRhY2goJmQtPmkyY19hZGFwLCAxLCBERUZBVUxUX0RJQjMwMDBQX0kyQ19BRERSRVNTLCAwLCAmbW9kMzAwMHBfZGliMzAwMHBfY29uZmlnLCAmZC0+ZmUpID09IDAgfHwKLQkJZGliMzAwMG1jX2F0dGFjaCgmZC0+aTJjX2FkYXAsIDEsIERFRkFVTFRfRElCMzAwME1DX0kyQ19BRERSRVNTLCAwLCAmbW9kMzAwMHBfZGliMzAwMHBfY29uZmlnLCAmZC0+ZmUpID09IDApIHsKLQkJaWYgKGQtPnByaXYgIT0gTlVMTCkgewotCQkJc3RydWN0IGRpYnVzYl9zdGF0ZSAqc3QgPSBkLT5wcml2OworCWlmICgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjMwMDBtY19hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCBERUZBVUxUX0RJQjMwMDBQX0kyQ19BRERSRVNTLCAgJm1vZDMwMDBwX2RpYjMwMDBwX2NvbmZpZykpICE9IE5VTEwgfHwKKwkJKGFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWIzMDAwbWNfYXR0YWNoLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgREVGQVVMVF9ESUIzMDAwTUNfSTJDX0FERFJFU1MsICZtb2QzMDAwcF9kaWIzMDAwcF9jb25maWcpKSAhPSBOVUxMKSB7CisJCWlmIChhZGFwLT5wcml2ICE9IE5VTEwpIHsKKwkJCXN0cnVjdCBkaWJ1c2Jfc3RhdGUgKnN0ID0gYWRhcC0+cHJpdjsKIAkJCXN0LT5vcHMucGlkX3BhcnNlID0gZGliMzAwMG1jX3BpZF9wYXJzZTsKIAkJCXN0LT5vcHMucGlkX2N0cmwgID0gZGliMzAwMG1jX3BpZF9jb250cm9sOwogCQl9CkBAIC0yNDcsMjAgKzI0NywxOSBAQAogCTB4NjAKIH07CiAKLWludCBkaWJ1c2JfZGliMzAwMG1jX3R1bmVyX2F0dGFjaCAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoraW50IGRpYnVzYl9kaWIzMDAwbWNfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0Jc3RydWN0IGRpYnVzYl9zdGF0ZSAqc3QgPSBkLT5wcml2OwotCWludCByZXQ7CisJc3RydWN0IGRpYnVzYl9zdGF0ZSAqc3QgPSBhZGFwLT5wcml2OwogCXU4IGEsYjsKIAl1MTYgaWYxID0gMTIyMDsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnR1bl9pMmM7CiAKIAkvLyBGaXJzdCBJRiBjYWxpYnJhdGlvbiBmb3IgTGl0ZW9uIFN0aWNrcwotCWlmIChkLT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yID09IFVTQl9WSURfTElURU9OICYmCi0JCWQtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IFVTQl9QSURfTElURU9OX0RWQl9UX1dBUk0pIHsKKwlpZiAoYWRhcC0+ZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yICA9PSBVU0JfVklEX0xJVEVPTiAmJgorCQlhZGFwLT5kZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IFVTQl9QSURfTElURU9OX0RWQl9UX1dBUk0pIHsKIAotCQlkaWJ1c2JfcmVhZF9lZXByb21fYnl0ZShkLDB4N0UsJmEpOwotCQlkaWJ1c2JfcmVhZF9lZXByb21fYnl0ZShkLDB4N0YsJmIpOworCQlkaWJ1c2JfcmVhZF9lZXByb21fYnl0ZShhZGFwLT5kZXYsMHg3RSwmYSk7CisJCWRpYnVzYl9yZWFkX2VlcHJvbV9ieXRlKGFkYXAtPmRldiwweDdGLCZiKTsKIAogCQlpZiAoYSA9PSAweDAwKQogCQkJaWYxICs9IGI7CkBAIC0yNjksMTQgKzI2OCwxNCBAQAogCQllbHNlCiAJCQl3YXJuKCJMSVRFLU9OIERWQi1UOiBTdHJhbmdlIElGMSBjYWxpYnJhdGlvbiA6JTJYICUyWFxuIiwgYSwgYik7CiAKLQl9IGVsc2UgaWYgKGQtPnVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IgID09IFVTQl9WSURfRElCQ09NICYmCi0JCSAgIGQtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IFVTQl9QSURfRElCQ09NX01PRDMwMDFfV0FSTSkgeworCX0gZWxzZSBpZiAoYWRhcC0+ZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yICA9PSBVU0JfVklEX0RJQkNPTSAmJgorCQkgICBhZGFwLT5kZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IFVTQl9QSURfRElCQ09NX01PRDMwMDFfV0FSTSkgewogCQl1OCBkZXNjOwotCQlkaWJ1c2JfcmVhZF9lZXByb21fYnl0ZShkLCA3LCAmZGVzYyk7CisJCWRpYnVzYl9yZWFkX2VlcHJvbV9ieXRlKGFkYXAtPmRldiwgNywgJmRlc2MpOwogCQlpZiAoZGVzYyA9PSAyKSB7CiAJCQlhID0gMTI3OwogCQkJZG8gewotCQkJCWRpYnVzYl9yZWFkX2VlcHJvbV9ieXRlKGQsIGEsICZkZXNjKTsKKwkJCQlkaWJ1c2JfcmVhZF9lZXByb21fYnl0ZShhZGFwLT5kZXYsIGEsICZkZXNjKTsKIAkJCQlhLS07CiAJCQl9IHdoaWxlIChhID4gNyAmJiAoZGVzYyA9PSAweGZmIHx8IGRlc2MgPT0gMHgwMCkpOwogCQkJaWYgKGRlc2MgJiAweDgwKQpAQCAtMjg2LDE1ICsyODUsMTUgQEAKIAkJfQogCX0KIAotCXR1bl9pMmMgPSBkaWIzMDAwbWNfZ2V0X3R1bmVyX2kyY19tYXN0ZXIoZC0+ZmUsIDEpOwotCWlmICgocmV0ID0gbXQyMDYwX2F0dGFjaChkLT5mZSwgdHVuX2kyYywgJnN0azMwMDBwX210MjA2MF9jb25maWcsIGlmMSkpICE9IDApIHsKKwl0dW5faTJjID0gZGliMzAwMG1jX2dldF90dW5lcl9pMmNfbWFzdGVyKGFkYXAtPmZlLCAxKTsKKwlpZiAoZHZiX2F0dGFjaChtdDIwNjBfYXR0YWNoLCBhZGFwLT5mZSwgdHVuX2kyYywgJnN0azMwMDBwX210MjA2MF9jb25maWcsIGlmMSkgPT0gTlVMTCkgewogCQkvKiBub3QgZm91bmQgLSB1c2UgcGFuYXNvbmljIHBsbCBwYXJhbWV0ZXJzICovCi0JCWlmIChkdmJfcGxsX2F0dGFjaChkLT5mZSwgMHg2MCwgdHVuX2kyYywgJmR2Yl9wbGxfZW52NTdoMXhkNSkgPT0gTlVMTCkKKwkJaWYgKGR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGFkYXAtPmZlLCAweDYwLCB0dW5faTJjLCAmZHZiX3BsbF9lbnY1N2gxeGQ1KSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlIHsKIAkJc3QtPm10MjA2MF9wcmVzZW50ID0gMTsKIAkJLyogc2V0IHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMgZm9yIHRoZSBkaWIzMDAwcCAqLwotCQlkaWIzMDAwbWNfc2V0X2NvbmZpZyhkLT5mZSwgJnN0azMwMDBwX2RpYjMwMDBwX2NvbmZpZyk7CisJCWRpYjMwMDBtY19zZXRfY29uZmlnKGFkYXAtPmZlLCAmc3RrMzAwMHBfZGliMzAwMHBfY29uZmlnKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYwppbmRleCBlZmZkMzRjLi40ZmUzNjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMKQEAgLTE0LDM1ICsxNCwzNSBAQAogICovCiAjaW5jbHVkZSAiZGlidXNiLmgiCiAKLXN0YXRpYyBpbnQgZGlidXNiX2RpYjMwMDBtYl9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorc3RhdGljIGludCBkaWJ1c2JfZGliMzAwMG1iX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewogCXN0cnVjdCBkaWIzMDAwX2NvbmZpZyBkZW1vZF9jZmc7Ci0Jc3RydWN0IGRpYnVzYl9zdGF0ZSAqc3QgPSBkLT5wcml2OworCXN0cnVjdCBkaWJ1c2Jfc3RhdGUgKnN0ID0gYWRhcC0+cHJpdjsKIAogCWRlbW9kX2NmZy5kZW1vZF9hZGRyZXNzID0gMHg4OwogCi0JaWYgKChkLT5mZSA9IGRpYjMwMDBtYl9hdHRhY2goJmRlbW9kX2NmZywmZC0+aTJjX2FkYXAsJnN0LT5vcHMpKSA9PSBOVUxMKQorCWlmICgoYWRhcC0+ZmUgPSBkaWIzMDAwbWJfYXR0YWNoKCZkZW1vZF9jZmcsJmFkYXAtPmRldi0+aTJjX2FkYXAsJnN0LT5vcHMpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWQtPmZlLT5vcHMudHVuZXJfb3BzLmluaXQgPSBkdmJfdXNiX3R1bmVyX2luaXRfaTJjOwotCWQtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBkdmJfdXNiX3R1bmVyX3NldF9wYXJhbXNfaTJjOworCWFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLmluaXQgICAgICAgPSBkdmJfdXNiX3R1bmVyX2luaXRfaTJjOworCWFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBkdmJfdXNiX3R1bmVyX3NldF9wYXJhbXNfaTJjOwogCi0JZC0+dHVuZXJfcGFzc19jdHJsID0gc3QtPm9wcy50dW5lcl9wYXNzX2N0cmw7CisJYWRhcC0+dHVuZXJfcGFzc19jdHJsID0gc3QtPm9wcy50dW5lcl9wYXNzX2N0cmw7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkaWJ1c2JfdGhvbXNvbl90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorc3RhdGljIGludCBkaWJ1c2JfdGhvbXNvbl90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKLQlkLT5wbGxfYWRkciA9IDB4NjE7Ci0JZC0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90dWE2MDEweHM7CisJYWRhcC0+cGxsX2FkZHIgPSAweDYxOworCWFkYXAtPnBsbF9kZXNjID0gJmR2Yl9wbGxfdHVhNjAxMHhzOwogCXJldHVybiAwOwogfQogCiAvKiBTb21lIG9mIHRoZSBBcnRlYyAxLjEgZGV2aWNlIGFyZW4ndCBlcXVpcHBlZCB3aXRoIHRoZSBkZWZhdWx0IHR1bmVyCiAgKiAoVGhvbXNvbiBDYWJsZSksIGJ1dCB3aXRoIGEgUGFuYXNvbmljIEVOVjc3SDExRDUuICBUaGlzIGZ1bmN0aW9uIGZpZ3VyZXMKICAqIHRoaXMgb3V0LiAqLwotc3RhdGljIGludCBkaWJ1c2JfdHVuZXJfcHJvYmVfYW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCitzdGF0aWMgaW50IGRpYnVzYl90dW5lcl9wcm9iZV9hbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7CiAJdTggYlsyXSA9IHsgMCwwIH0sIGIyWzFdOwogCWludCByZXQgPSAwOwpAQCAtNTQsMzYgKzU0LDM2IEBACiAJLyogdGhlIFBhbmFzb25pYyBzaXRzIG9uIEkyQyBhZGRyYXNzIDB4NjAsIHRoZSBUaG9tc29uIG9uIDB4NjEgKi8KIAltc2dbMF0uYWRkciA9IG1zZ1sxXS5hZGRyID0gMHg2MDsKIAotCWlmIChkLT50dW5lcl9wYXNzX2N0cmwpCi0JCWQtPnR1bmVyX3Bhc3NfY3RybChkLT5mZSwxLG1zZ1swXS5hZGRyKTsKKwlpZiAoYWRhcC0+dHVuZXJfcGFzc19jdHJsKQorCQlhZGFwLT50dW5lcl9wYXNzX2N0cmwoYWRhcC0+ZmUsMSxtc2dbMF0uYWRkcik7CiAKLQlpZiAoaTJjX3RyYW5zZmVyICgmZC0+aTJjX2FkYXAsIG1zZywgMikgIT0gMikgeworCWlmIChpMmNfdHJhbnNmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsIG1zZywgMikgIT0gMikgewogCQllcnIoInR1bmVyIGkyYyB3cml0ZSBmYWlsZWQuIik7CiAJCXJldCA9IC1FUkVNT1RFSU87CiAJfQogCi0JaWYgKGQtPnR1bmVyX3Bhc3NfY3RybCkKLQkJZC0+dHVuZXJfcGFzc19jdHJsKGQtPmZlLDAsbXNnWzBdLmFkZHIpOworCWlmIChhZGFwLT50dW5lcl9wYXNzX2N0cmwpCisJCWFkYXAtPnR1bmVyX3Bhc3NfY3RybChhZGFwLT5mZSwwLG1zZ1swXS5hZGRyKTsKIAogCWlmIChiMlswXSA9PSAweGZlKSB7CiAJCWluZm8oIlRoaXMgZGV2aWNlIGhhcyB0aGUgVGhvbXNvbiBDYWJsZSBvbmJvYXJkLiBXaGljaCBpcyBkZWZhdWx0LiIpOwotCQlkaWJ1c2JfdGhvbXNvbl90dW5lcl9hdHRhY2goZCk7CisJCWRpYnVzYl90aG9tc29uX3R1bmVyX2F0dGFjaChhZGFwKTsKIAl9IGVsc2UgewogCQl1OCBicGxsWzRdID0geyAweDBiLCAweGY1LCAweDg1LCAweGFiIH07CiAJCWluZm8oIlRoaXMgZGV2aWNlIGhhcyB0aGUgUGFuYXNvbmljIEVOVjc3SDExRDUgb25ib2FyZC4iKTsKLQkJZC0+cGxsX2FkZHIgPSAweDYwOwotCQltZW1jcHkoZC0+cGxsX2luaXQsYnBsbCw0KTsKLQkJZC0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90ZGE2NjV4OworCQlhZGFwLT5wbGxfYWRkciA9IDB4NjA7CisJCW1lbWNweShhZGFwLT5wbGxfaW5pdCxicGxsLDQpOworCQlhZGFwLT5wbGxfZGVzYyA9ICZkdmJfcGxsX3RkYTY2NXg7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAogLyogVVNCIERyaXZlciBzdHVmZiAqLwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgZGlidXNiMV8xX3Byb3BlcnRpZXM7Ci1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkaWJ1c2IxXzFfYW4yMjM1X3Byb3BlcnRpZXM7Ci1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkaWJ1c2IyXzBiX3Byb3BlcnRpZXM7Ci1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBhcnRlY190MV91c2IyX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZGlidXNiMV8xX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZGlidXNiMV8xX2FuMjIzNV9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRpYnVzYjJfMGJfcHJvcGVydGllczsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBhcnRlY190MV91c2IyX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgZGlidXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC0xNTAsMjMgKzE1MCw0MiBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgZGlidXNiX2RpYjMwMDBtYl90YWJsZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGRpYnVzYjFfMV9wcm9wZXJ0aWVzID0gewotCS5jYXBzID0gRFZCX1VTQl9IQVNfUElEX0ZJTFRFUiB8IERWQl9VU0JfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiB8IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCi0JLnBpZF9maWx0ZXJfY291bnQgPSAxNiwKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBkaWJ1c2IxXzFfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9ICBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAogCiAJLnVzYl9jdHJsID0gQ1lQUkVTU19BTjIxMzUsCiAKIAkuZmlybXdhcmUgPSAiZHZiLXVzYi1kaWJ1c2ItNS4wLjAuMTEuZnciLAogCi0JLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGRpYnVzYl9zdGF0ZSksCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYsCisJCQkucGlkX2ZpbHRlcl9jb3VudCA9IDE2LAogCiAJLnN0cmVhbWluZ19jdHJsICAgPSBkaWJ1c2Jfc3RyZWFtaW5nX2N0cmwsCiAJLnBpZF9maWx0ZXIgICAgICAgPSBkaWJ1c2JfcGlkX2ZpbHRlciwKIAkucGlkX2ZpbHRlcl9jdHJsICA9IGRpYnVzYl9waWRfZmlsdGVyX2N0cmwsCi0JLnBvd2VyX2N0cmwgICAgICAgPSBkaWJ1c2JfcG93ZXJfY3RybCwKIAkuZnJvbnRlbmRfYXR0YWNoICA9IGRpYnVzYl9kaWIzMDAwbWJfZnJvbnRlbmRfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX3R1bmVyX3Byb2JlX2FuZF9hdHRhY2gsCiAKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCS5jb3VudCA9IDcsCisJCS5lbmRwb2ludCA9IDB4MDIsCisJCS51ID0geworCQkJLmJ1bGsgPSB7CisJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJfQorCQl9CisJfSwKKwkJCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWJ1c2Jfc3RhdGUpLAorCQl9CisJfSwKKworCS5wb3dlcl9jdHJsICAgICAgID0gZGlidXNiX3Bvd2VyX2N0cmwsCisKIAkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCiAJLnJjX2tleV9tYXAgICAgICAgPSBkaWJ1c2JfcmNfa2V5cywKIAkucmNfa2V5X21hcF9zaXplICA9IDExMSwgLyogd293LCB0aGF0IGlzIHVnbHkgLi4uIEkgd2FudCB0byBsb2FkIGl0IHRvIHRoZSBkcml2ZXIgZHluYW1pY2FsbHkgKi8KQEAgLTE3NSwxNyArMTk0LDYgQEAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZkaWJ1c2JfaTJjX2FsZ28sCiAKIAkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KLQkudXJiID0gewotCQkudHlwZSA9IERWQl9VU0JfQlVMSywKLQkJLmNvdW50ID0gNywKLQkJLmVuZHBvaW50ID0gMHgwMiwKLQkJLnUgPSB7Ci0JCQkuYnVsayA9IHsKLQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCi0JCQl9Ci0JCX0KLQl9LAogCiAJLm51bV9kZXZpY2VfZGVzY3MgPSA5LAogCS5kZXZpY2VzID0gewpAQCAtMjI4LDIzICsyMzYsNDAgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkaWJ1c2IxXzFfYW4yMjM1X3Byb3BlcnRpZXMgPSB7Ci0JLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGIHwgRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKLQkucGlkX2ZpbHRlcl9jb3VudCA9IDE2LAotCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZGlidXNiMV8xX2FuMjIzNV9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKIAkudXNiX2N0cmwgPSBDWVBSRVNTX0FOMjIzNSwKIAogCS5maXJtd2FyZSA9ICJkdmItdXNiLWRpYnVzYi1hbjIyMzUtMDEuZnciLAogCi0JLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGRpYnVzYl9zdGF0ZSksCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5jYXBzID0gRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYgfCBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIsCisJCQkucGlkX2ZpbHRlcl9jb3VudCA9IDE2LAogCiAJLnN0cmVhbWluZ19jdHJsICAgPSBkaWJ1c2Jfc3RyZWFtaW5nX2N0cmwsCiAJLnBpZF9maWx0ZXIgICAgICAgPSBkaWJ1c2JfcGlkX2ZpbHRlciwKIAkucGlkX2ZpbHRlcl9jdHJsICA9IGRpYnVzYl9waWRfZmlsdGVyX2N0cmwsCi0JLnBvd2VyX2N0cmwgICAgICAgPSBkaWJ1c2JfcG93ZXJfY3RybCwKIAkuZnJvbnRlbmRfYXR0YWNoICA9IGRpYnVzYl9kaWIzMDAwbWJfZnJvbnRlbmRfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX3R1bmVyX3Byb2JlX2FuZF9hdHRhY2gsCiAKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCS5jb3VudCA9IDcsCisJCS5lbmRwb2ludCA9IDB4MDIsCisJCS51ID0geworCQkJLmJ1bGsgPSB7CisJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJfQorCQl9CisJfSwKKwkJCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWJ1c2Jfc3RhdGUpLAorCQl9LAorCX0sCisJLnBvd2VyX2N0cmwgICAgICAgPSBkaWJ1c2JfcG93ZXJfY3RybCwKKwogCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKIAkucmNfa2V5X21hcCAgICAgICA9IGRpYnVzYl9yY19rZXlzLAogCS5yY19rZXlfbWFwX3NpemUgID0gMTExLCAvKiB3b3csIHRoYXQgaXMgdWdseSAuLi4gSSB3YW50IHRvIGxvYWQgaXQgdG8gdGhlIGRyaXZlciBkeW5hbWljYWxseSAqLwpAQCAtMjUzLDE3ICsyNzgsNiBAQAogCS5pMmNfYWxnbyAgICAgICAgID0gJmRpYnVzYl9pMmNfYWxnbywKIAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCi0JLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwotCS51cmIgPSB7Ci0JCS50eXBlID0gRFZCX1VTQl9CVUxLLAotCQkuY291bnQgPSA3LAotCQkuZW5kcG9pbnQgPSAweDAyLAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gNDA5NiwKLQkJCX0KLQkJfQotCX0sCiAKICNpZmRlZiBDT05GSUdfRFZCX1VTQl9ESUJVU0JfTUJfRkFVTFRZCiAJLm51bV9kZXZpY2VfZGVzY3MgPSAyLApAQCAtMjg1LDIyICsyOTksMzkgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkaWJ1c2IyXzBiX3Byb3BlcnRpZXMgPSB7Ci0JLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGIHwgRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKLQkucGlkX2ZpbHRlcl9jb3VudCA9IDE2LAorc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRpYnVzYjJfMGJfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCiAKIAkudXNiX2N0cmwgPSBDWVBSRVNTX0ZYMiwKIAogCS5maXJtd2FyZSA9ICJkdmItdXNiLWFkc3RlY2gtdXNiMi0wMi5mdyIsCiAKLQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGlidXNiX3N0YXRlKSwKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKKwkJCS5waWRfZmlsdGVyX2NvdW50ID0gMTYsCiAKIAkuc3RyZWFtaW5nX2N0cmwgICA9IGRpYnVzYjJfMF9zdHJlYW1pbmdfY3RybCwKIAkucGlkX2ZpbHRlciAgICAgICA9IGRpYnVzYl9waWRfZmlsdGVyLAogCS5waWRfZmlsdGVyX2N0cmwgID0gZGlidXNiX3BpZF9maWx0ZXJfY3RybCwKLQkucG93ZXJfY3RybCAgICAgICA9IGRpYnVzYjJfMF9wb3dlcl9jdHJsLAogCS5mcm9udGVuZF9hdHRhY2ggID0gZGlidXNiX2RpYjMwMDBtYl9mcm9udGVuZF9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICAgPSBkaWJ1c2JfdGhvbXNvbl90dW5lcl9hdHRhY2gsCisJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkuY291bnQgPSA3LAorCQkuZW5kcG9pbnQgPSAweDA2LAorCQkudSA9IHsKKwkJCS5idWxrID0geworCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCX0KKwkJfQorCX0sCisJCQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGlidXNiX3N0YXRlKSwKKwkJfQorCX0sCisJLnBvd2VyX2N0cmwgICAgICAgPSBkaWJ1c2IyXzBfcG93ZXJfY3RybCwKIAogCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKIAkucmNfa2V5X21hcCAgICAgICA9IGRpYnVzYl9yY19rZXlzLApAQCAtMzEwLDE3ICszNDEsNiBAQAogCS5pMmNfYWxnbyAgICAgICAgID0gJmRpYnVzYl9pMmNfYWxnbywKIAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCi0JLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwotCS51cmIgPSB7Ci0JCS50eXBlID0gRFZCX1VTQl9CVUxLLAotCQkuY291bnQgPSA3LAotCQkuZW5kcG9pbnQgPSAweDA2LAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gNDA5NiwKLQkJCX0KLQkJfQotCX0sCiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDIsCiAJLmRldmljZXMgPSB7CkBAIC0zMzYsMjIgKzM1NiwzOSBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGFydGVjX3QxX3VzYjJfcHJvcGVydGllcyA9IHsKLQkuY2FwcyA9IERWQl9VU0JfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYgfCBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAotCS5waWRfZmlsdGVyX2NvdW50ID0gMTYsCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgYXJ0ZWNfdDFfdXNiMl9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKIAogCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAogCiAJLmZpcm13YXJlID0gImR2Yi11c2ItZGlidXNiLTYuMC4wLjguZnciLAogCi0JLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGRpYnVzYl9zdGF0ZSksCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYsCisJCQkucGlkX2ZpbHRlcl9jb3VudCA9IDE2LAogCiAJLnN0cmVhbWluZ19jdHJsICAgPSBkaWJ1c2IyXzBfc3RyZWFtaW5nX2N0cmwsCiAJLnBpZF9maWx0ZXIgICAgICAgPSBkaWJ1c2JfcGlkX2ZpbHRlciwKIAkucGlkX2ZpbHRlcl9jdHJsICA9IGRpYnVzYl9waWRfZmlsdGVyX2N0cmwsCi0JLnBvd2VyX2N0cmwgICAgICAgPSBkaWJ1c2IyXzBfcG93ZXJfY3RybCwKIAkuZnJvbnRlbmRfYXR0YWNoICA9IGRpYnVzYl9kaWIzMDAwbWJfZnJvbnRlbmRfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX3R1bmVyX3Byb2JlX2FuZF9hdHRhY2gsCisJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkuY291bnQgPSA3LAorCQkuZW5kcG9pbnQgPSAweDA2LAorCQkudSA9IHsKKwkJCS5idWxrID0geworCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCX0KKwkJfQorCX0sCisJCQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGlidXNiX3N0YXRlKSwKKwkJfQorCX0sCisJLnBvd2VyX2N0cmwgICAgICAgPSBkaWJ1c2IyXzBfcG93ZXJfY3RybCwKIAogCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKIAkucmNfa2V5X21hcCAgICAgICA9IGRpYnVzYl9yY19rZXlzLApAQCAtMzYxLDE3ICszOTgsNiBAQAogCS5pMmNfYWxnbyAgICAgICAgID0gJmRpYnVzYl9pMmNfYWxnbywKIAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCi0JLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwotCS51cmIgPSB7Ci0JCS50eXBlID0gRFZCX1VTQl9CVUxLLAotCQkuY291bnQgPSA3LAotCQkuZW5kcG9pbnQgPSAweDA2LAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gNDA5NiwKLQkJCX0KLQkJfQotCX0sCiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYwppbmRleCBlY2E0MDgyLi5hMGZkMzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1jLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlICJkaWJ1c2IuaCIKIAogLyogVVNCIERyaXZlciBzdHVmZiAqLwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgZGlidXNiX21jX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZGlidXNiX21jX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgZGlidXNiX21jX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC00MywyMiArNDMsMzkgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGRpYnVzYl9kaWIzMDAwbWNfdGFibGUpOwogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkaWJ1c2JfbWNfcHJvcGVydGllcyA9IHsKLQkuY2FwcyA9IERWQl9VU0JfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYgfCBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAotCS5waWRfZmlsdGVyX2NvdW50ID0gMzIsCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZGlidXNiX21jX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAogCiAJLnVzYl9jdHJsID0gQ1lQUkVTU19GWDIsCiAJLmZpcm13YXJlID0gImR2Yi11c2ItZGlidXNiLTYuMC4wLjguZnciLAogCi0JLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGRpYnVzYl9zdGF0ZSksCi0KKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKKwkJCS5waWRfZmlsdGVyX2NvdW50ID0gMzIsCiAJLnN0cmVhbWluZ19jdHJsICAgPSBkaWJ1c2IyXzBfc3RyZWFtaW5nX2N0cmwsCiAJLnBpZF9maWx0ZXIgICAgICAgPSBkaWJ1c2JfcGlkX2ZpbHRlciwKIAkucGlkX2ZpbHRlcl9jdHJsICA9IGRpYnVzYl9waWRfZmlsdGVyX2N0cmwsCi0JLnBvd2VyX2N0cmwgICAgICAgPSBkaWJ1c2IyXzBfcG93ZXJfY3RybCwKIAkuZnJvbnRlbmRfYXR0YWNoICA9IGRpYnVzYl9kaWIzMDAwbWNfZnJvbnRlbmRfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX2RpYjMwMDBtY190dW5lcl9hdHRhY2gsCiAKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCS5jb3VudCA9IDcsCisJCS5lbmRwb2ludCA9IDB4MDYsCisJCS51ID0geworCQkJLmJ1bGsgPSB7CisJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJfQorCQl9CisJfSwKKwkJCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWJ1c2Jfc3RhdGUpLAorCQl9CisJfSwKKwkucG93ZXJfY3RybCAgICAgICA9IGRpYnVzYjJfMF9wb3dlcl9jdHJsLAorCiAJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAogCS5yY19rZXlfbWFwICAgICAgID0gZGlidXNiX3JjX2tleXMsCiAJLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIEZJWE1FICovCkBAIC02NywxNyArODQsNiBAQAogCS5pMmNfYWxnbyAgICAgICAgID0gJmRpYnVzYl9pMmNfYWxnbywKIAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCi0JLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwotCS51cmIgPSB7Ci0JCS50eXBlID0gRFZCX1VTQl9CVUxLLAotCQkuY291bnQgPSA3LAotCQkuZW5kcG9pbnQgPSAweDA2LAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gNDA5NiwKLQkJCX0KLQkJfQotCX0sCiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDcsCiAJLmRldmljZXMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2IuaAppbmRleCBhNDNmODc0Li41MTUzZmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLmgKQEAgLTEwNywxNCArMTA3LDE1IEBACiAKIGV4dGVybiBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBkaWJ1c2JfaTJjX2FsZ287CiAKLWV4dGVybiBpbnQgZGlidXNiX2RpYjMwMDBtY19mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICopOwotZXh0ZXJuIGludCBkaWJ1c2JfZGliMzAwMG1jX3R1bmVyX2F0dGFjaCAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopOworZXh0ZXJuIGludCBkaWJ1c2JfZGliMzAwMG1jX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICopOworZXh0ZXJuIGludCBkaWJ1c2JfZGliMzAwMG1jX3R1bmVyX2F0dGFjaCAoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqKTsKIAotZXh0ZXJuIGludCBkaWJ1c2Jfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICosIGludCk7Ci1leHRlcm4gaW50IGRpYnVzYl9waWRfZmlsdGVyKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqLCBpbnQsIHUxNiwgaW50KTsKLWV4dGVybiBpbnQgZGlidXNiX3BpZF9maWx0ZXJfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiwgaW50KTsKK2V4dGVybiBpbnQgZGlidXNiX3N0cmVhbWluZ19jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKiwgaW50KTsKK2V4dGVybiBpbnQgZGlidXNiX3BpZF9maWx0ZXIoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqLCBpbnQsIHUxNiwgaW50KTsKK2V4dGVybiBpbnQgZGlidXNiX3BpZF9maWx0ZXJfY3RybChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICosIGludCk7CitleHRlcm4gaW50IGRpYnVzYjJfMF9zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICosIGludCk7CisKIGV4dGVybiBpbnQgZGlidXNiX3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICosIGludCk7Ci1leHRlcm4gaW50IGRpYnVzYjJfMF9zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiwgaW50KTsKIGV4dGVybiBpbnQgZGlidXNiMl8wX3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICosIGludCk7CiAKICNkZWZpbmUgREVGQVVMVF9SQ19JTlRFUlZBTCAxNTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlnaXR2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jCmluZGV4IDAxNTg1NDQuLjhmYjM0MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlnaXR2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYwpAQCAtODMsNyArODMsNyBAQAogCiAvKiBDYWxsYmFja3MgZm9yIERWQiBVU0IgKi8KIHN0YXRpYyBpbnQgZGlnaXR2X2lkZW50aWZ5X3N0YXRlIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0Ci0JCWR2Yl91c2JfcHJvcGVydGllcyAqcHJvcHMsIHN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiAqKmRlc2MsCisJCWR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnByb3BzLCBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKipkZXNjLAogCQlpbnQgKmNvbGQpCiB7CiAJKmNvbGQgPSB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIgPT0gMCAmJiB1ZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0ID09IDA7CkBAIC0xMTYsMzMgKzExNiwzMyBAQAogCiBzdGF0aWMgaW50IGRpZ2l0dl9ueHQ2MDAwX3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQogewotCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCA9IGZlLT5kdmItPnByaXY7CiAJdTggYls1XTsKIAlkdmJfdXNiX3R1bmVyX2NhbGNfcmVncyhmZSxmZXAsYiwgNSk7Ci0JcmV0dXJuIGRpZ2l0dl9jdHJsX21zZyhkLFVTQl9XUklURV9UVU5FUiwwLCZiWzFdLDQsTlVMTCwwKTsKKwlyZXR1cm4gZGlnaXR2X2N0cmxfbXNnKGFkYXAtPmRldiwgVVNCX1dSSVRFX1RVTkVSLCAwLCAmYlsxXSwgNCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbnh0NjAwMF9jb25maWcgZGlnaXR2X254dDYwMDBfY29uZmlnID0gewogCS5jbG9ja19pbnZlcnNpb24gPSAxLAogfTsKIAotc3RhdGljIGludCBkaWdpdHZfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3N0YXRpYyBpbnQgZGlnaXR2X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewotCWlmICgoZC0+ZmUgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJmRpZ2l0dl9tdDM1Ml9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKLQkJZC0+ZmUtPm9wcy50dW5lcl9vcHMuY2FsY19yZWdzID0gZHZiX3VzYl90dW5lcl9jYWxjX3JlZ3M7CisJaWYgKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmZGlnaXR2X210MzUyX2NvbmZpZywgJmFkYXAtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CisJCWFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLmNhbGNfcmVncyA9IGR2Yl91c2JfdHVuZXJfY2FsY19yZWdzOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKChkLT5mZSA9IGR2Yl9hdHRhY2gobnh0NjAwMF9hdHRhY2gsICZkaWdpdHZfbnh0NjAwMF9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKLQkJZC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGRpZ2l0dl9ueHQ2MDAwX3R1bmVyX3NldF9wYXJhbXM7CisJaWYgKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2gobnh0NjAwMF9hdHRhY2gsICZkaWdpdHZfbnh0NjAwMF9jb25maWcsICZhZGFwLT5kZXYtPmkyY19hZGFwKSkgIT0gTlVMTCkgeworCQlhZGFwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gZGlnaXR2X254dDYwMDBfdHVuZXJfc2V0X3BhcmFtczsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW50IGRpZ2l0dl90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorc3RhdGljIGludCBkaWdpdHZfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0JZC0+cGxsX2FkZHIgPSAweDYwOwotCWQtPnBsbF9kZXNjID0gJmR2Yl9wbGxfdGRlZDQ7CisJYWRhcC0+cGxsX2FkZHIgPSAweDYwOworCWFkYXAtPnBsbF9kZXNjID0gJmR2Yl9wbGxfdGRlZDQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzOCw3ICsyMzgsNyBAQAogfQogCiAvKiBEVkIgVVNCIERyaXZlciBzdHVmZiAqLwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgZGlnaXR2X3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZGlnaXR2X3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgZGlnaXR2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC0yNjUsMzAgKzI2NSwyMSBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgZGlnaXR2X3RhYmxlKTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgZGlnaXR2X3Byb3BlcnRpZXMgPSB7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZGlnaXR2X3Byb3BlcnRpZXMgPSB7CiAJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAogCiAJLnVzYl9jdHJsID0gQ1lQUkVTU19GWDIsCiAJLmZpcm13YXJlID0gImR2Yi11c2ItZGlnaXR2LTAyLmZ3IiwKIAotCS5zaXplX29mX3ByaXYgICAgID0gMCwKLQorCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQl7CiAJLmZyb250ZW5kX2F0dGFjaCAgPSBkaWdpdHZfZnJvbnRlbmRfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgID0gZGlnaXR2X3R1bmVyX2F0dGFjaCwKIAotCS5yY19pbnRlcnZhbCAgICAgID0gMTAwMCwKLQkucmNfa2V5X21hcCAgICAgICA9IGRpZ2l0dl9yY19rZXlzLAotCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShkaWdpdHZfcmNfa2V5cyksCi0JLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWdpdHZfcmNfcXVlcnksCi0KLQkuaWRlbnRpZnlfc3RhdGUgICA9IGRpZ2l0dl9pZGVudGlmeV9zdGF0ZSwKLQotCS5pMmNfYWxnbyAgICAgICAgID0gJmRpZ2l0dl9pMmNfYWxnbywKLQotCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCiAJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwotCS51cmIgPSB7Ci0JCS50eXBlID0gRFZCX1VTQl9CVUxLLAorCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAogCQkuY291bnQgPSA3LAogCQkuZW5kcG9pbnQgPSAweDAyLAogCQkudSA9IHsKQEAgLTI5Nyw2ICsyODgsMTggQEAKIAkJCX0KIAkJfQogCX0sCisJCX0KKwl9LAorCS5pZGVudGlmeV9zdGF0ZSAgID0gZGlnaXR2X2lkZW50aWZ5X3N0YXRlLAorCisJLnJjX2ludGVydmFsICAgICAgPSAxMDAwLAorCS5yY19rZXlfbWFwICAgICAgID0gZGlnaXR2X3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGRpZ2l0dl9yY19rZXlzKSwKKwkucmNfcXVlcnkgICAgICAgICA9IGRpZ2l0dl9yY19xdWVyeSwKKworCS5pMmNfYWxnbyAgICAgICAgID0gJmRpZ2l0dl9pMmNfYWxnbywKKworCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jCmluZGV4IDI3YWY0ZTQzLi5mYTQzYTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYwpAQCAtMjgsMTkgKzI4LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHR0MjAwdV9zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBvbm9mZikKK3N0YXRpYyBpbnQgZHR0MjAwdV9zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgb25vZmYpCiB7CiAJdTggYl9zdHJlYW1pbmdbMl0gPSB7IFNFVF9TVFJFQU1JTkcsIG9ub2ZmIH07CiAJdTggYl9yc3RfcGlkID0gUkVTRVRfUElEX0ZJTFRFUjsKIAotCWR2Yl91c2JfZ2VuZXJpY193cml0ZShkLGJfc3RyZWFtaW5nLDIpOworCWR2Yl91c2JfZ2VuZXJpY193cml0ZShhZGFwLT5kZXYsIGJfc3RyZWFtaW5nLCAyKTsKIAogCWlmIChvbm9mZiA9PSAwKQotCQlkdmJfdXNiX2dlbmVyaWNfd3JpdGUoZCwmYl9yc3RfcGlkLDEpOworCQlkdmJfdXNiX2dlbmVyaWNfd3JpdGUoYWRhcC0+ZGV2LCAmYl9yc3RfcGlkLCAxKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdHQyMDB1X3BpZF9maWx0ZXIoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgaW5kZXgsIHUxNiBwaWQsIGludCBvbm9mZikKK3N0YXRpYyBpbnQgZHR0MjAwdV9waWRfZmlsdGVyKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBpbmRleCwgdTE2IHBpZCwgaW50IG9ub2ZmKQogewogCXU4IGJfcGlkWzRdOwogCXBpZCA9IG9ub2ZmID8gcGlkIDogMDsKQEAgLTUwLDcgKzUwLDcgQEAKIAliX3BpZFsyXSA9IHBpZCAmIDB4ZmY7CiAJYl9waWRbM10gPSAocGlkID4+IDgpICYgMHgxZjsKIAotCXJldHVybiBkdmJfdXNiX2dlbmVyaWNfd3JpdGUoZCxiX3BpZCw0KTsKKwlyZXR1cm4gZHZiX3VzYl9nZW5lcmljX3dyaXRlKGFkYXAtPmRldiwgYl9waWQsIDQpOwogfQogCiAvKiByZW1vdGUgY29udHJvbCAqLwpAQCAtODYsMTYgKzg2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHR0MjAwdV9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorc3RhdGljIGludCBkdHQyMDB1X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewotCWQtPmZlID0gZHR0MjAwdV9mZV9hdHRhY2goZCk7CisJYWRhcC0+ZmUgPSBkdHQyMDB1X2ZlX2F0dGFjaChhZGFwLT5kZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkdHQyMDB1X3Byb3BlcnRpZXM7Ci1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyB3dDIyMHVfZmNfcHJvcGVydGllczsKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIHd0MjIwdV9wcm9wZXJ0aWVzOwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgd3QyMjB1X3psMDM1M19wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGR0dDIwMHVfcHJvcGVydGllczsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyB3dDIyMHVfZmNfcHJvcGVydGllczsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyB3dDIyMHVfcHJvcGVydGllczsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyB3dDIyMHVfemwwMzUzX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgZHR0MjAwdV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKQEAgLTEyMywyOCArMTIzLDIyIEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGR0dDIwMHVfdXNiX3RhYmxlKTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgZHR0MjAwdV9wcm9wZXJ0aWVzID0gewotCS5jYXBzID0gRFZCX1VTQl9IQVNfUElEX0ZJTFRFUiB8IERWQl9VU0JfTkVFRF9QSURfRklMVEVSSU5HLAotCS5waWRfZmlsdGVyX2NvdW50ID0gMTUsCi0KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBkdHQyMDB1X3Byb3BlcnRpZXMgPSB7CiAJLnVzYl9jdHJsID0gQ1lQUkVTU19GWDIsCiAJLmZpcm13YXJlID0gImR2Yi11c2ItZHR0MjAwdS0wMS5mdyIsCiAKLQkucG93ZXJfY3RybCAgICAgID0gZHR0MjAwdV9wb3dlcl9jdHJsLAorCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQl7CisJCQkuY2FwcyA9IERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUiB8IERWQl9VU0JfQURBUF9ORUVEX1BJRF9GSUxURVJJTkcsCisJCQkucGlkX2ZpbHRlcl9jb3VudCA9IDE1LAorCiAJLnN0cmVhbWluZ19jdHJsICA9IGR0dDIwMHVfc3RyZWFtaW5nX2N0cmwsCiAJLnBpZF9maWx0ZXIgICAgICA9IGR0dDIwMHVfcGlkX2ZpbHRlciwKIAkuZnJvbnRlbmRfYXR0YWNoID0gZHR0MjAwdV9mcm9udGVuZF9hdHRhY2gsCi0KLQkucmNfaW50ZXJ2YWwgICAgID0gMzAwLAotCS5yY19rZXlfbWFwICAgICAgPSBkdHQyMDB1X3JjX2tleXMsCi0JLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoZHR0MjAwdV9yY19rZXlzKSwKLQkucmNfcXVlcnkgICAgICAgID0gZHR0MjAwdV9yY19xdWVyeSwKLQotCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCi0KIAkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCi0JLnVyYiA9IHsKLQkJLnR5cGUgPSBEVkJfVVNCX0JVTEssCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCiAJCS5jb3VudCA9IDcsCiAJCS5lbmRwb2ludCA9IDB4MDIsCiAJCS51ID0gewpAQCAtMTUzLDYgKzE0NywxNiBAQAogCQkJfQogCQl9CiAJfSwKKwkJfQorCX0sCisJLnBvd2VyX2N0cmwgICAgICA9IGR0dDIwMHVfcG93ZXJfY3RybCwKKworCS5yY19pbnRlcnZhbCAgICAgPSAzMDAsCisJLnJjX2tleV9tYXAgICAgICA9IGR0dDIwMHVfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShkdHQyMDB1X3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgPSBkdHQyMDB1X3JjX3F1ZXJ5LAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKQEAgLTE2NCwyOCArMTY4LDIyIEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgd3QyMjB1X3Byb3BlcnRpZXMgPSB7Ci0JLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9ORUVEX1BJRF9GSUxURVJJTkcsCi0JLnBpZF9maWx0ZXJfY291bnQgPSAxNSwKLQorc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHd0MjIwdV9wcm9wZXJ0aWVzID0gewogCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAogCS5maXJtd2FyZSA9ICJkdmItdXNiLXd0MjIwdS0wMi5mdyIsCiAKLQkucG93ZXJfY3RybCAgICAgID0gZHR0MjAwdV9wb3dlcl9jdHJsLAorCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQl7CisJCQkuY2FwcyA9IERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUiB8IERWQl9VU0JfQURBUF9ORUVEX1BJRF9GSUxURVJJTkcsCisJCQkucGlkX2ZpbHRlcl9jb3VudCA9IDE1LAorCiAJLnN0cmVhbWluZ19jdHJsICA9IGR0dDIwMHVfc3RyZWFtaW5nX2N0cmwsCiAJLnBpZF9maWx0ZXIgICAgICA9IGR0dDIwMHVfcGlkX2ZpbHRlciwKIAkuZnJvbnRlbmRfYXR0YWNoID0gZHR0MjAwdV9mcm9udGVuZF9hdHRhY2gsCi0KLQkucmNfaW50ZXJ2YWwgICAgID0gMzAwLAotCS5yY19rZXlfbWFwICAgICAgPSBkdHQyMDB1X3JjX2tleXMsCi0JLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoZHR0MjAwdV9yY19rZXlzKSwKLQkucmNfcXVlcnkgICAgICAgID0gZHR0MjAwdV9yY19xdWVyeSwKLQotCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCi0KIAkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCi0JLnVyYiA9IHsKLQkJLnR5cGUgPSBEVkJfVVNCX0JVTEssCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCiAJCS5jb3VudCA9IDcsCiAJCS5lbmRwb2ludCA9IDB4MDIsCiAJCS51ID0gewpAQCAtMTk0LDYgKzE5MiwxNiBAQAogCQkJfQogCQl9CiAJfSwKKwkJfQorCX0sCisJLnBvd2VyX2N0cmwgICAgICA9IGR0dDIwMHVfcG93ZXJfY3RybCwKKworCS5yY19pbnRlcnZhbCAgICAgPSAzMDAsCisJLnJjX2tleV9tYXAgICAgICA9IGR0dDIwMHVfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShkdHQyMDB1X3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgPSBkdHQyMDB1X3JjX3F1ZXJ5LAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKQEAgLTIwNSwxNyArMjEzLDMzIEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgd3QyMjB1X2ZjX3Byb3BlcnRpZXMgPSB7Ci0JLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9ORUVEX1BJRF9GSUxURVJJTkcsCi0JLnBpZF9maWx0ZXJfY291bnQgPSAxNSwKLQorc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHd0MjIwdV9mY19wcm9wZXJ0aWVzID0gewogCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAogCS5maXJtd2FyZSA9ICJkdmItdXNiLXd0MjIwdS1mYzAzLmZ3IiwKIAotCS5wb3dlcl9jdHJsICAgICAgPSBkdHQyMDB1X3Bvd2VyX2N0cmwsCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9BREFQX05FRURfUElEX0ZJTFRFUklORywKKwkJCS5waWRfZmlsdGVyX2NvdW50ID0gMTUsCisKIAkuc3RyZWFtaW5nX2N0cmwgID0gZHR0MjAwdV9zdHJlYW1pbmdfY3RybCwKIAkucGlkX2ZpbHRlciAgICAgID0gZHR0MjAwdV9waWRfZmlsdGVyLAogCS5mcm9udGVuZF9hdHRhY2ggPSBkdHQyMDB1X2Zyb250ZW5kX2F0dGFjaCwKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCS5jb3VudCA9IDcsCisJCQkJLmVuZHBvaW50ID0gMHgwNiwKKwkJLnUgPSB7CisJCQkuYnVsayA9IHsKKwkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCisJCQl9CisJCX0KKwl9LAorCQl9CisJfSwKKwkucG93ZXJfY3RybCAgICAgID0gZHR0MjAwdV9wb3dlcl9jdHJsLAogCiAJLnJjX2ludGVydmFsICAgICA9IDMwMCwKIAkucmNfa2V5X21hcCAgICAgID0gZHR0MjAwdV9yY19rZXlzLApAQCAtMjI0LDE4ICsyNDgsNiBAQAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KLQkudXJiID0gewotCQkudHlwZSA9IERWQl9VU0JfQlVMSywKLQkJLmNvdW50ID0gNywKLQkJLmVuZHBvaW50ID0gMHg4NiwKLQkJLnUgPSB7Ci0JCQkuYnVsayA9IHsKLQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCi0JCQl9Ci0JCX0KLQl9LAotCiAJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAogCS5kZXZpY2VzID0gewogCQl7IC5uYW1lID0gIldpZGVWaWV3IFdULTIyMFUgUGVuVHlwZSBSZWNlaXZlciAoVHlwaG9vbi9GcmVlY29tKSIsCkBAIC0yNDYsMjggKzI1OCwyMiBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIHd0MjIwdV96bDAzNTNfcHJvcGVydGllcyA9IHsKLQkuY2FwcyA9IERWQl9VU0JfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX05FRURfUElEX0ZJTFRFUklORywKLQkucGlkX2ZpbHRlcl9jb3VudCA9IDE1LAotCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgd3QyMjB1X3psMDM1M19wcm9wZXJ0aWVzID0gewogCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAogCS5maXJtd2FyZSA9ICJkdmItdXNiLXd0MjIwdS16bDAzNTMtMDEuZnciLAogCi0JLnBvd2VyX2N0cmwgICAgICA9IGR0dDIwMHVfcG93ZXJfY3RybCwKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX0FEQVBfTkVFRF9QSURfRklMVEVSSU5HLAorCQkJLnBpZF9maWx0ZXJfY291bnQgPSAxNSwKKwogCS5zdHJlYW1pbmdfY3RybCAgPSBkdHQyMDB1X3N0cmVhbWluZ19jdHJsLAogCS5waWRfZmlsdGVyICAgICAgPSBkdHQyMDB1X3BpZF9maWx0ZXIsCiAJLmZyb250ZW5kX2F0dGFjaCA9IGR0dDIwMHVfZnJvbnRlbmRfYXR0YWNoLAotCi0JLnJjX2ludGVydmFsICAgICA9IDMwMCwKLQkucmNfa2V5X21hcCAgICAgID0gZHR0MjAwdV9yY19rZXlzLAotCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGR0dDIwMHVfcmNfa2V5cyksCi0JLnJjX3F1ZXJ5ICAgICAgICA9IGR0dDIwMHVfcmNfcXVlcnksCi0KLQkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAotCiAJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwotCS51cmIgPSB7Ci0JCS50eXBlID0gRFZCX1VTQl9CVUxLLAorCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAogCQkuY291bnQgPSA3LAogCQkuZW5kcG9pbnQgPSAweDAyLAogCQkudSA9IHsKQEAgLTI3Niw2ICsyODIsMTYgQEAKIAkJCX0KIAkJfQogCX0sCisJCX0KKwl9LAorCS5wb3dlcl9jdHJsICAgICAgPSBkdHQyMDB1X3Bvd2VyX2N0cmwsCisKKwkucmNfaW50ZXJ2YWwgICAgID0gMzAwLAorCS5yY19rZXlfbWFwICAgICAgPSBkdHQyMDB1X3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoZHR0MjAwdV9yY19rZXlzKSwKKwkucmNfcXVlcnkgICAgICAgID0gZHR0MjAwdV9yY19xdWVyeSwKKworCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItY29tbW9uLmgKaW5kZXggYTM0NjBiZi4uMzVhYjY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1jb21tb24uaApAQCAtMTQsMzEgKzE0LDM2IEBACiBleHRlcm4gaW50IGR2Yl91c2JfZGVidWc7CiBleHRlcm4gaW50IGR2Yl91c2JfZGlzYWJsZV9yY19wb2xsaW5nOwogCi0jZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDAxLGFyZ3MpCi0jZGVmaW5lIGRlYl94ZmVyKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDAyLGFyZ3MpCi0jZGVmaW5lIGRlYl9wbGwoYXJncy4uLikgIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDA0LGFyZ3MpCi0jZGVmaW5lIGRlYl90cyhhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDA4LGFyZ3MpCi0jZGVmaW5lIGRlYl9lcnIoYXJncy4uLikgIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDEwLGFyZ3MpCi0jZGVmaW5lIGRlYl9yYyhhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDIwLGFyZ3MpCi0jZGVmaW5lIGRlYl9mdyhhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDQwLGFyZ3MpCi0jZGVmaW5lIGRlYl9tZW0oYXJncy4uLikgIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDgwLGFyZ3MpCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pICBkcHJpbnRrKGR2Yl91c2JfZGVidWcsMHgwMDEsYXJncykKKyNkZWZpbmUgZGViX3hmZXIoYXJncy4uLikgIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDAwMixhcmdzKQorI2RlZmluZSBkZWJfcGxsKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2RlYnVnLDB4MDA0LGFyZ3MpCisjZGVmaW5lIGRlYl90cyhhcmdzLi4uKSAgICBkcHJpbnRrKGR2Yl91c2JfZGVidWcsMHgwMDgsYXJncykKKyNkZWZpbmUgZGViX2VycihhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDAxMCxhcmdzKQorI2RlZmluZSBkZWJfcmMoYXJncy4uLikgICAgZHByaW50ayhkdmJfdXNiX2RlYnVnLDB4MDIwLGFyZ3MpCisjZGVmaW5lIGRlYl9mdyhhcmdzLi4uKSAgICBkcHJpbnRrKGR2Yl91c2JfZGVidWcsMHgwNDAsYXJncykKKyNkZWZpbmUgZGViX21lbShhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9kZWJ1ZywweDA4MCxhcmdzKQorI2RlZmluZSBkZWJfdXhmZXIoYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2RlYnVnLDB4MTAwLGFyZ3MpCiAKIC8qIGNvbW1vbmx5IHVzZWQgIG1ldGhvZHMgKi8KLWV4dGVybiBpbnQgZHZiX3VzYl9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqLCBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzICopOworZXh0ZXJuIGludCBkdmJfdXNiX2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICosIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICopOwogCi1leHRlcm4gaW50IGR2Yl91c2JfdXJiX3N1Ym1pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKik7Ci1leHRlcm4gaW50IGR2Yl91c2JfdXJiX2tpbGwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopOwotZXh0ZXJuIGludCBkdmJfdXNiX3VyYl9pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKTsKLWV4dGVybiBpbnQgZHZiX3VzYl91cmJfZXhpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKik7CitleHRlcm4gaW50IGR2Yl91c2JfZGV2aWNlX3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpOworCitleHRlcm4gaW50IHVzYl91cmJfaW5pdChzdHJ1Y3QgdXNiX2RhdGFfc3RyZWFtICpzdHJlYW0sIHN0cnVjdCB1c2JfZGF0YV9zdHJlYW1fcHJvcGVydGllcyAqcHJvcHMpOworZXh0ZXJuIGludCB1c2JfdXJiX2V4aXQoc3RydWN0IHVzYl9kYXRhX3N0cmVhbSAqc3RyZWFtKTsKK2V4dGVybiBpbnQgdXNiX3VyYl9zdWJtaXQoc3RydWN0IHVzYl9kYXRhX3N0cmVhbSAqc3RyZWFtKTsKK2V4dGVybiBpbnQgdXNiX3VyYl9raWxsKHN0cnVjdCB1c2JfZGF0YV9zdHJlYW0gKnN0cmVhbSk7CisKK2V4dGVybiBpbnQgZHZiX3VzYl9hZGFwdGVyX3N0cmVhbV9pbml0KHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApOworZXh0ZXJuIGludCBkdmJfdXNiX2FkYXB0ZXJfc3RyZWFtX2V4aXQoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCk7CiAKIGV4dGVybiBpbnQgZHZiX3VzYl9pMmNfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKik7CiBleHRlcm4gaW50IGR2Yl91c2JfaTJjX2V4aXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopOwogCi1leHRlcm4gaW50IGR2Yl91c2JfZHZiX2luaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopOwotZXh0ZXJuIGludCBkdmJfdXNiX2R2Yl9leGl0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKTsKLQotZXh0ZXJuIGludCBkdmJfdXNiX2ZlX2luaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopOwotZXh0ZXJuIGludCBkdmJfdXNiX2ZlX2V4aXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopOworZXh0ZXJuIGludCBkdmJfdXNiX2FkYXB0ZXJfZHZiX2luaXQoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCk7CitleHRlcm4gaW50IGR2Yl91c2JfYWRhcHRlcl9kdmJfZXhpdChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKTsKK2V4dGVybiBpbnQgZHZiX3VzYl9hZGFwdGVyX2Zyb250ZW5kX2luaXQoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCk7CitleHRlcm4gaW50IGR2Yl91c2JfYWRhcHRlcl9mcm9udGVuZF9leGl0KHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApOwogCiBleHRlcm4gaW50IGR2Yl91c2JfcmVtb3RlX2luaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopOwogZXh0ZXJuIGludCBkdmJfdXNiX3JlbW90ZV9leGl0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1kdmIuYwppbmRleCBmZTYyMDhhLi40NTYxYTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWR2Yi5jCkBAIC0xLDYgKzEsNiBAQAogLyogZHZiLXVzYi1kdmIuYyBpcyBwYXJ0IG9mIHRoZSBEVkIgVVNCIGxpYnJhcnkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTUgUGF0cmljayBCb2V0dGNoZXIgKHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtNiBQYXRyaWNrIEJvZXR0Y2hlciAocGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZSkKICAqIHNlZSBkdmItdXNiLWluaXQuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBmdW5jdGlvbnMgZm9yIGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgdGhlCkBAIC04LDU1ICs4LDU1IEBACiAgKi8KICNpbmNsdWRlICJkdmItdXNiLWNvbW1vbi5oIgogCisvKiBkb2VzIHRoZSBjb21wbGV0ZSBpbnB1dCB0cmFuc2ZlciBoYW5kbGluZyAqLwogc3RhdGljIGludCBkdmJfdXNiX2N0cmxfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQsIGludCBvbm9mZikKIHsKLQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBkdmJkbXhmZWVkLT5kZW11eC0+cHJpdjsKKwlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gZHZiZG14ZmVlZC0+ZGVtdXgtPnByaXY7CiAJaW50IG5ld2ZlZWRjb3VudCxyZXQ7CiAKLQlpZiAoZCA9PSBOVUxMKQorCWlmIChhZGFwID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbmV3ZmVlZGNvdW50ID0gZC0+ZmVlZGNvdW50ICsgKG9ub2ZmID8gMSA6IC0xKTsKKwluZXdmZWVkY291bnQgPSBhZGFwLT5mZWVkY291bnQgKyAob25vZmYgPyAxIDogLTEpOwogCi0JLyoKLQkgKiBzdG9wIGZlZWQgYmVmb3JlIHNldHRpbmcgYSBuZXcgcGlkIGlmIHRoZXJlIHdpbGwgYmUgbm8gcGlkIGFueW1vcmUKLQkgKi8KKwkvKiBzdG9wIGZlZWQgYmVmb3JlIHNldHRpbmcgYSBuZXcgcGlkIGlmIHRoZXJlIHdpbGwgYmUgbm8gcGlkIGFueW1vcmUgKi8KIAlpZiAobmV3ZmVlZGNvdW50ID09IDApIHsKIAkJZGViX3RzKCJzdG9wIGZlZWRpbmdcbiIpOwotCQlkdmJfdXNiX3VyYl9raWxsKGQpOworCQl1c2JfdXJiX2tpbGwoJmFkYXAtPnN0cmVhbSk7CiAKLQkJaWYgKGQtPnByb3BzLnN0cmVhbWluZ19jdHJsICE9IE5VTEwpCi0JCQlpZiAoKHJldCA9IGQtPnByb3BzLnN0cmVhbWluZ19jdHJsKGQsMCkpKQorCQlpZiAoYWRhcC0+cHJvcHMuc3RyZWFtaW5nX2N0cmwgIT0gTlVMTCkKKwkJCWlmICgocmV0ID0gYWRhcC0+cHJvcHMuc3RyZWFtaW5nX2N0cmwoYWRhcCwwKSkpCiAJCQkJZXJyKCJlcnJvciB3aGlsZSBzdG9wcGluZyBzdHJlYW0uIik7Ci0KIAl9CiAKLQlkLT5mZWVkY291bnQgPSBuZXdmZWVkY291bnQ7CisJYWRhcC0+ZmVlZGNvdW50ID0gbmV3ZmVlZGNvdW50OwogCiAJLyogYWN0aXZhdGUgdGhlIHBpZCBvbiB0aGUgZGV2aWNlIHNwZWNpZmljIHBpZF9maWx0ZXIgKi8KLQlkZWJfdHMoInNldHRpbmcgcGlkOiAlNWQgJTA0eCBhdCBpbmRleCAlZCAnJXMnXG4iLGR2YmRteGZlZWQtPnBpZCxkdmJkbXhmZWVkLT5waWQsZHZiZG14ZmVlZC0+aW5kZXgsb25vZmYgPyAib24iIDogIm9mZiIpOwotCWlmIChkLT5wcm9wcy5jYXBzICYgRFZCX1VTQl9IQVNfUElEX0ZJTFRFUiAmJgotCQlkLT5waWRfZmlsdGVyaW5nICYmCi0JCWQtPnByb3BzLnBpZF9maWx0ZXIgIT0gTlVMTCkKLQkJZC0+cHJvcHMucGlkX2ZpbHRlcihkLGR2YmRteGZlZWQtPmluZGV4LGR2YmRteGZlZWQtPnBpZCxvbm9mZik7CisJZGViX3RzKCJzZXR0aW5nIHBpZCAoJXMpOiAlNWQgJTA0eCBhdCBpbmRleCAlZCAnJXMnXG4iLGFkYXAtPnBpZF9maWx0ZXJpbmcgPworCQkieWVzIiA6ICJubyIsIGR2YmRteGZlZWQtPnBpZCxkdmJkbXhmZWVkLT5waWQsZHZiZG14ZmVlZC0+aW5kZXgsb25vZmYgPworCQkib24iIDogIm9mZiIpOworCWlmIChhZGFwLT5wcm9wcy5jYXBzICYgRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSICYmCisJCWFkYXAtPnBpZF9maWx0ZXJpbmcgJiYKKwkJYWRhcC0+cHJvcHMucGlkX2ZpbHRlciAhPSBOVUxMKQorCQlhZGFwLT5wcm9wcy5waWRfZmlsdGVyKGFkYXAsIGR2YmRteGZlZWQtPmluZGV4LCBkdmJkbXhmZWVkLT5waWQsb25vZmYpOwogCiAJLyogc3RhcnQgdGhlIGZlZWQgaWYgdGhpcyB3YXMgdGhlIGZpcnN0IGZlZWQgYW5kIHRoZXJlIGlzIHN0aWxsIGEgZmVlZAogCSAqIGZvciByZWNlcHRpb24uCiAJICovCi0JaWYgKGQtPmZlZWRjb3VudCA9PSBvbm9mZiAmJiBkLT5mZWVkY291bnQgPiAwKSB7CisJaWYgKGFkYXAtPmZlZWRjb3VudCA9PSBvbm9mZiAmJiBhZGFwLT5mZWVkY291bnQgPiAwKSB7CiAJCWRlYl90cygic3VibWl0dGluZyBhbGwgVVJCc1xuIik7Ci0JCWR2Yl91c2JfdXJiX3N1Ym1pdChkKTsKKwkJdXNiX3VyYl9zdWJtaXQoJmFkYXAtPnN0cmVhbSk7CiAKIAkJZGViX3RzKCJjb250cm9sbGluZyBwaWQgcGFyc2VyXG4iKTsKLQkJaWYgKGQtPnByb3BzLmNhcHMgJiBEVkJfVVNCX0hBU19QSURfRklMVEVSICYmCi0JCQlkLT5wcm9wcy5jYXBzICYgRFZCX1VTQl9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGICYmCi0JCQlkLT5wcm9wcy5waWRfZmlsdGVyX2N0cmwgIT0gTlVMTCkKLQkJCWlmIChkLT5wcm9wcy5waWRfZmlsdGVyX2N0cmwoZCxkLT5waWRfZmlsdGVyaW5nKSA8IDApCisJCWlmIChhZGFwLT5wcm9wcy5jYXBzICYgRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSICYmCisJCQlhZGFwLT5wcm9wcy5jYXBzICYgRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYgJiYKKwkJCWFkYXAtPnByb3BzLnBpZF9maWx0ZXJfY3RybCAhPSBOVUxMKQorCQkJaWYgKGFkYXAtPnByb3BzLnBpZF9maWx0ZXJfY3RybChhZGFwLGFkYXAtPnBpZF9maWx0ZXJpbmcpIDwgMCkKIAkJCQllcnIoImNvdWxkIG5vdCBoYW5kbGUgcGlkX3BhcnNlciIpOwogCiAJCWRlYl90cygic3RhcnQgZmVlZGluZ1xuIik7Ci0JCWlmIChkLT5wcm9wcy5zdHJlYW1pbmdfY3RybCAhPSBOVUxMKQotCQkJaWYgKGQtPnByb3BzLnN0cmVhbWluZ19jdHJsKGQsMSkpIHsKKwkJaWYgKGFkYXAtPnByb3BzLnN0cmVhbWluZ19jdHJsICE9IE5VTEwpCisJCQlpZiAoYWRhcC0+cHJvcHMuc3RyZWFtaW5nX2N0cmwoYWRhcCwxKSkgewogCQkJCWVycigiZXJyb3Igd2hpbGUgZW5hYmxpbmcgZmlmby4iKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KQEAgLTc3LDEzNCArNzcsMTMwIEBACiAJcmV0dXJuIGR2Yl91c2JfY3RybF9mZWVkKGR2YmRteGZlZWQsMCk7CiB9CiAKLWludCBkdmJfdXNiX2R2Yl9pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK2ludCBkdmJfdXNiX2FkYXB0ZXJfZHZiX2luaXQoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAlpbnQgcmV0OwogCi0JaWYgKChyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZC0+ZHZiX2FkYXAsIGQtPmRlc2MtPm5hbWUsCi0JCQlkLT5vd25lciwgJmQtPnVkZXYtPmRldikpIDwgMCkgeworCWlmICgocmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmFkYXAtPmR2Yl9hZGFwLCBhZGFwLT5kZXYtPmRlc2MtPm5hbWUsCisJCQlhZGFwLT5kZXYtPm93bmVyLCAmYWRhcC0+ZGV2LT51ZGV2LT5kZXYpKSA8IDApIHsKIAkJZGViX2luZm8oImR2Yl9yZWdpc3Rlcl9hZGFwdGVyIGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOwogCQlnb3RvIGVycjsKIAl9Ci0JZC0+ZHZiX2FkYXAucHJpdiA9IGQ7CisJYWRhcC0+ZHZiX2FkYXAucHJpdiA9IGFkYXA7CiAKLQlpZiAoZC0+cHJvcHMucmVhZF9tYWNfYWRkcmVzcykgewotCQlpZiAoZC0+cHJvcHMucmVhZF9tYWNfYWRkcmVzcyhkLGQtPmR2Yl9hZGFwLnByb3Bvc2VkX21hYykgPT0gMCkKLQkJCWluZm8oIk1BQyBhZGRyZXNzOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsZC0+ZHZiX2FkYXAucHJvcG9zZWRfbWFjWzBdLAotCQkJCQlkLT5kdmJfYWRhcC5wcm9wb3NlZF9tYWNbMV0sZC0+ZHZiX2FkYXAucHJvcG9zZWRfbWFjWzJdLAotCQkJCQlkLT5kdmJfYWRhcC5wcm9wb3NlZF9tYWNbM10sZC0+ZHZiX2FkYXAucHJvcG9zZWRfbWFjWzRdLAotCQkJCQlkLT5kdmJfYWRhcC5wcm9wb3NlZF9tYWNbNV0pOworCWlmIChhZGFwLT5kZXYtPnByb3BzLnJlYWRfbWFjX2FkZHJlc3MpIHsKKwkJaWYgKGFkYXAtPmRldi0+cHJvcHMucmVhZF9tYWNfYWRkcmVzcyhhZGFwLT5kZXYsYWRhcC0+ZHZiX2FkYXAucHJvcG9zZWRfbWFjKSA9PSAwKQorCQkJaW5mbygiTUFDIGFkZHJlc3M6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IixhZGFwLT5kdmJfYWRhcC5wcm9wb3NlZF9tYWNbMF0sCisJCQkJCWFkYXAtPmR2Yl9hZGFwLnByb3Bvc2VkX21hY1sxXSwgYWRhcC0+ZHZiX2FkYXAucHJvcG9zZWRfbWFjWzJdLAorCQkJCQlhZGFwLT5kdmJfYWRhcC5wcm9wb3NlZF9tYWNbM10sIGFkYXAtPmR2Yl9hZGFwLnByb3Bvc2VkX21hY1s0XSwKKwkJCQkJYWRhcC0+ZHZiX2FkYXAucHJvcG9zZWRfbWFjWzVdKTsKIAkJZWxzZQogCQkJZXJyKCJNQUMgYWRkcmVzcyByZWFkaW5nIGZhaWxlZC4iKTsKIAl9CiAKIAotCWQtPmRlbXV4LmRteC5jYXBhYmlsaXRpZXMgPSBETVhfVFNfRklMVEVSSU5HIHwgRE1YX1NFQ1RJT05fRklMVEVSSU5HOwotCWQtPmRlbXV4LnByaXYgPSBkOworCWFkYXAtPmRlbXV4LmRteC5jYXBhYmlsaXRpZXMgPSBETVhfVFNfRklMVEVSSU5HIHwgRE1YX1NFQ1RJT05fRklMVEVSSU5HOworCWFkYXAtPmRlbXV4LnByaXYgICAgICAgICAgICAgPSBhZGFwOwogCi0JZC0+ZGVtdXguZmVlZG51bSA9IGQtPmRlbXV4LmZpbHRlcm51bSA9IGQtPm1heF9mZWVkX2NvdW50OwotCWQtPmRlbXV4LnN0YXJ0X2ZlZWQgPSBkdmJfdXNiX3N0YXJ0X2ZlZWQ7Ci0JZC0+ZGVtdXguc3RvcF9mZWVkICA9IGR2Yl91c2Jfc3RvcF9mZWVkOwotCWQtPmRlbXV4LndyaXRlX3RvX2RlY29kZXIgPSBOVUxMOwotCWlmICgocmV0ID0gZHZiX2RteF9pbml0KCZkLT5kZW11eCkpIDwgMCkgeworCWFkYXAtPmRlbXV4LmZlZWRudW0gICAgICAgICAgPSBhZGFwLT5kZW11eC5maWx0ZXJudW0gPSBhZGFwLT5tYXhfZmVlZF9jb3VudDsKKwlhZGFwLT5kZW11eC5zdGFydF9mZWVkICAgICAgID0gZHZiX3VzYl9zdGFydF9mZWVkOworCWFkYXAtPmRlbXV4LnN0b3BfZmVlZCAgICAgICAgPSBkdmJfdXNiX3N0b3BfZmVlZDsKKwlhZGFwLT5kZW11eC53cml0ZV90b19kZWNvZGVyID0gTlVMTDsKKwlpZiAoKHJldCA9IGR2Yl9kbXhfaW5pdCgmYWRhcC0+ZGVtdXgpKSA8IDApIHsKIAkJZXJyKCJkdmJfZG14X2luaXQgZmFpbGVkOiBlcnJvciAlZCIscmV0KTsKIAkJZ290byBlcnJfZG14OwogCX0KIAotCWQtPmRteGRldi5maWx0ZXJudW0gPSBkLT5kZW11eC5maWx0ZXJudW07Ci0JZC0+ZG14ZGV2LmRlbXV4ID0gJmQtPmRlbXV4LmRteDsKLQlkLT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKLQlpZiAoKHJldCA9IGR2Yl9kbXhkZXZfaW5pdCgmZC0+ZG14ZGV2LCAmZC0+ZHZiX2FkYXApKSA8IDApIHsKKwlhZGFwLT5kbXhkZXYuZmlsdGVybnVtICAgICAgID0gYWRhcC0+ZGVtdXguZmlsdGVybnVtOworCWFkYXAtPmRteGRldi5kZW11eCAgICAgICAgICAgPSAmYWRhcC0+ZGVtdXguZG14OworCWFkYXAtPmRteGRldi5jYXBhYmlsaXRpZXMgICAgPSAwOworCWlmICgocmV0ID0gZHZiX2RteGRldl9pbml0KCZhZGFwLT5kbXhkZXYsICZhZGFwLT5kdmJfYWRhcCkpIDwgMCkgewogCQllcnIoImR2Yl9kbXhkZXZfaW5pdCBmYWlsZWQ6IGVycm9yICVkIixyZXQpOwogCQlnb3RvIGVycl9kbXhfZGV2OwogCX0KIAotCWR2Yl9uZXRfaW5pdCgmZC0+ZHZiX2FkYXAsICZkLT5kdmJfbmV0LCAmZC0+ZGVtdXguZG14KTsKKwlkdmJfbmV0X2luaXQoJmFkYXAtPmR2Yl9hZGFwLCAmYWRhcC0+ZHZiX25ldCwgJmFkYXAtPmRlbXV4LmRteCk7CiAKLQlkLT5zdGF0ZSB8PSBEVkJfVVNCX1NUQVRFX0RWQjsKKwlhZGFwLT5zdGF0ZSB8PSBEVkJfVVNCX0FEQVBfU1RBVEVfRFZCOwogCXJldHVybiAwOwogCiBlcnJfZG14X2RldjoKLQlkdmJfZG14X3JlbGVhc2UoJmQtPmRlbXV4KTsKKwlkdmJfZG14X3JlbGVhc2UoJmFkYXAtPmRlbXV4KTsKIGVycl9kbXg6Ci0JZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZC0+ZHZiX2FkYXApOworCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmFkYXAtPmR2Yl9hZGFwKTsKIGVycjoKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgZHZiX3VzYl9kdmJfZXhpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCitpbnQgZHZiX3VzYl9hZGFwdGVyX2R2Yl9leGl0KHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0JaWYgKGQtPnN0YXRlICYgRFZCX1VTQl9TVEFURV9EVkIpIHsKKwlpZiAoYWRhcC0+c3RhdGUgJiBEVkJfVVNCX0FEQVBfU1RBVEVfRFZCKSB7CiAJCWRlYl9pbmZvKCJ1bnJlZ2lzdGVyaW5nIERWQiBwYXJ0XG4iKTsKLQkJZHZiX25ldF9yZWxlYXNlKCZkLT5kdmJfbmV0KTsKLQkJZC0+ZGVtdXguZG14LmNsb3NlKCZkLT5kZW11eC5kbXgpOwotCQlkdmJfZG14ZGV2X3JlbGVhc2UoJmQtPmRteGRldik7Ci0JCWR2Yl9kbXhfcmVsZWFzZSgmZC0+ZGVtdXgpOwotCQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZkLT5kdmJfYWRhcCk7Ci0JCWQtPnN0YXRlICY9IH5EVkJfVVNCX1NUQVRFX0RWQjsKKwkJZHZiX25ldF9yZWxlYXNlKCZhZGFwLT5kdmJfbmV0KTsKKwkJYWRhcC0+ZGVtdXguZG14LmNsb3NlKCZhZGFwLT5kZW11eC5kbXgpOworCQlkdmJfZG14ZGV2X3JlbGVhc2UoJmFkYXAtPmRteGRldik7CisJCWR2Yl9kbXhfcmVsZWFzZSgmYWRhcC0+ZGVtdXgpOworCQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZhZGFwLT5kdmJfYWRhcCk7CisJCWFkYXAtPnN0YXRlICY9IH5EVkJfVVNCX0FEQVBfU1RBVEVfRFZCOwogCX0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkdmJfdXNiX2ZlX3dha2V1cChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBmZS0+ZHZiLT5wcml2OwogCi0JaWYgKGQtPnByb3BzLnBvd2VyX2N0cmwpCi0JCWQtPnByb3BzLnBvd2VyX2N0cmwoZCwxKTsKKwlkdmJfdXNiX2RldmljZV9wb3dlcl9jdHJsKGFkYXAtPmRldiwgMSk7CiAKLQlpZiAoZC0+ZmVfaW5pdCkKLQkJZC0+ZmVfaW5pdChmZSk7CisJaWYgKGFkYXAtPmZlX2luaXQpCisJCWFkYXAtPmZlX2luaXQoZmUpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZHZiX3VzYl9mZV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBmZS0+ZHZiLT5wcml2OwogCi0JaWYgKGQtPmZlX3NsZWVwKQotCQlkLT5mZV9zbGVlcChmZSk7CisJaWYgKGFkYXAtPmZlX3NsZWVwKQorCQlhZGFwLT5mZV9zbGVlcChmZSk7CiAKLQlpZiAoZC0+cHJvcHMucG93ZXJfY3RybCkKLQkJZC0+cHJvcHMucG93ZXJfY3RybChkLDApOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGR2Yl91c2JfZGV2aWNlX3Bvd2VyX2N0cmwoYWRhcC0+ZGV2LCAwKTsKIH0KIAotaW50IGR2Yl91c2JfZmVfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UqIGQpCitpbnQgZHZiX3VzYl9hZGFwdGVyX2Zyb250ZW5kX2luaXQoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKLQlpZiAoZC0+cHJvcHMuZnJvbnRlbmRfYXR0YWNoID09IE5VTEwpIHsKLQkJZXJyKCJzdHJhbmdlOiAnJXMnIGRvZXNuJ3Qgd2FudCB0byBhdHRhY2ggYSBmcm9udGVuZC4iLGQtPmRlc2MtPm5hbWUpOworCWlmIChhZGFwLT5wcm9wcy5mcm9udGVuZF9hdHRhY2ggPT0gTlVMTCkgeworCQllcnIoInN0cmFuZ2U6ICclcycgIyVkIGRvZXNuJ3Qgd2FudCB0byBhdHRhY2ggYSBmcm9udGVuZC4iLGFkYXAtPmRldi0+ZGVzYy0+bmFtZSwgYWRhcC0+aWQpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiByZS1hc3NpZ24gc2xlZXAgYW5kIHdha2V1cCBmdW5jdGlvbnMgKi8KLQlpZiAoZC0+cHJvcHMuZnJvbnRlbmRfYXR0YWNoKGQpID09IDAgJiYgZC0+ZmUgIT0gTlVMTCkgewotCQlkLT5mZV9pbml0ID0gZC0+ZmUtPm9wcy5pbml0OyAgIGQtPmZlLT5vcHMuaW5pdCAgPSBkdmJfdXNiX2ZlX3dha2V1cDsKLQkJZC0+ZmVfc2xlZXAgPSBkLT5mZS0+b3BzLnNsZWVwOyBkLT5mZS0+b3BzLnNsZWVwID0gZHZiX3VzYl9mZV9zbGVlcDsKKwlpZiAoYWRhcC0+cHJvcHMuZnJvbnRlbmRfYXR0YWNoKGFkYXApID09IDAgJiYgYWRhcC0+ZmUgIT0gTlVMTCkgeworCQlhZGFwLT5mZV9pbml0ICA9IGFkYXAtPmZlLT5vcHMuaW5pdDsgIGFkYXAtPmZlLT5vcHMuaW5pdCAgPSBkdmJfdXNiX2ZlX3dha2V1cDsKKwkJYWRhcC0+ZmVfc2xlZXAgPSBhZGFwLT5mZS0+b3BzLnNsZWVwOyBhZGFwLT5mZS0+b3BzLnNsZWVwID0gZHZiX3VzYl9mZV9zbGVlcDsKIAotCQlpZiAoZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZkLT5kdmJfYWRhcCwgZC0+ZmUpKSB7CisJCWlmIChkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJmFkYXAtPmR2Yl9hZGFwLCBhZGFwLT5mZSkpIHsKIAkJCWVycigiRnJvbnRlbmQgcmVnaXN0cmF0aW9uIGZhaWxlZC4iKTsKLQkJCWR2Yl9mcm9udGVuZF9kZXRhY2goZC0+ZmUpOwotCQkJZC0+ZmUgPSBOVUxMOworCQkJZHZiX2Zyb250ZW5kX2RldGFjaChhZGFwLT5mZSk7CisJCQlhZGFwLT5mZSA9IE5VTEw7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCiAJCS8qIG9ubHkgYXR0YWNoIHRoZSB0dW5lciBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KLQkJaWYgKGQtPnByb3BzLnR1bmVyX2F0dGFjaCAhPSBOVUxMKQotCQkJZC0+cHJvcHMudHVuZXJfYXR0YWNoKGQpOworCQlpZiAoYWRhcC0+cHJvcHMudHVuZXJfYXR0YWNoICE9IE5VTEwpCisJCQlhZGFwLT5wcm9wcy50dW5lcl9hdHRhY2goYWRhcCk7CiAJfSBlbHNlCi0JCWVycigibm8gZnJvbnRlbmQgd2FzIGF0dGFjaGVkIGJ5ICclcyciLGQtPmRlc2MtPm5hbWUpOworCQllcnIoIm5vIGZyb250ZW5kIHdhcyBhdHRhY2hlZCBieSAnJXMnIixhZGFwLT5kZXYtPmRlc2MtPm5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBkdmJfdXNiX2ZlX2V4aXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoraW50IGR2Yl91c2JfYWRhcHRlcl9mcm9udGVuZF9leGl0KHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0JaWYgKGQtPmZlICE9IE5VTEwpIHsKLQkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZC0+ZmUpOwotCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGQtPmZlKTsKKwlpZiAoYWRhcC0+ZmUgIT0gTlVMTCkgeworCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChhZGFwLT5mZSk7CisJCWR2Yl9mcm9udGVuZF9kZXRhY2goYWRhcC0+ZmUpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWZpcm13YXJlLmMKaW5kZXggOTIyMmIwYS4uZTExMTJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWZpcm13YXJlLmMKQEAgLTEsNiArMSw2IEBACiAvKiBkdmItdXNiLWZpcm13YXJlLmMgaXMgcGFydCBvZiB0aGUgRFZCIFVTQiBsaWJyYXJ5LgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC01IFBhdHJpY2sgQm9ldHRjaGVyIChwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlKQorICogQ29weXJpZ2h0IChDKSAyMDA0LTYgUGF0cmljayBCb2V0dGNoZXIgKHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGUpCiAgKiBzZWUgZHZiLXVzYi1pbml0LmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIGZvciBkb3dubG9hZGluZyB0aGUgZmlybXdhcmUgdG8gQ3lwcmVzcyBGWCAxIGFuZCAyIGJhc2VkIGRldmljZXMuCkBAIC0yNCw5ICsyNCw2IEBACiAJeyAuaWQgPSBDWVBSRVNTX0ZYMiwgICAgIC5uYW1lID0gIkN5cHJlc3MgRlgyIiwgICAgIC5jcHVfY3NfcmVnaXN0ZXIgPSAweGU2MDAgfSwKIH07CiAKLXN0YXRpYyBpbnQgZHZiX3VzYl9nZXRfaGV4bGluZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCBzdHJ1Y3QgaGV4bGluZSAqaHgsCi0JCQkgICAgICAgaW50ICpwb3MpOwotCiAvKgogICogbG9hZCBhIGZpcm13YXJlIHBhY2tldCB0byB0aGUgZGV2aWNlCiAgKi8KQEAgLTc4LDcgKzc1LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2N5cHJlc3NfbG9hZF9maXJtd2FyZSk7CiAKLWludCBkdmJfdXNiX2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzICpwcm9wcykKK2ludCBkdmJfdXNiX2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqcHJvcHMpCiB7CiAJaW50IHJldDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKQEAgLTExNSw3ICsxMTIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZHZiX3VzYl9nZXRfaGV4bGluZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCBzdHJ1Y3QgaGV4bGluZSAqaHgsCitpbnQgZHZiX3VzYl9nZXRfaGV4bGluZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCBzdHJ1Y3QgaGV4bGluZSAqaHgsCiAJCQkgICAgICAgaW50ICpwb3MpCiB7CiAJdTggKmIgPSAodTggKikgJmZ3LT5kYXRhWypwb3NdOwpAQCAtMTQ2LDMgKzE0Myw0IEBACiAKIAlyZXR1cm4gKnBvczsKIH0KK0VYUE9SVF9TWU1CT0woZHZiX3VzYl9nZXRfaGV4bGluZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaTJjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaTJjLmMKaW5kZXggNmI2MTFhNy4uNTViYTAyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pMmMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGR2Yi11c2ItaTJjLmMgaXMgcGFydCBvZiB0aGUgRFZCIFVTQiBsaWJyYXJ5LgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC01IFBhdHJpY2sgQm9ldHRjaGVyIChwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlKQorICogQ29weXJpZ2h0IChDKSAyMDA0LTYgUGF0cmljayBCb2V0dGNoZXIgKHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGUpCiAgKiBzZWUgZHZiLXVzYi1pbml0LmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIGZvciAoZGUtKWluaXRpYWxpemluZyBhbiBJMkMgYWRhcHRlci4KQEAgLTQ4LDQ4ICs0OCw0OCBAQAogCiBpbnQgZHZiX3VzYl90dW5lcl9pbml0X2kyYyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBmZS0+ZHZiLT5wcml2OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBkLT5wbGxfYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGQtPnBsbF9pbml0LCAubGVuID0gNCB9OworCXN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBhZGFwLT5wbGxfYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGFkYXAtPnBsbF9pbml0LCAubGVuID0gNCB9OwogCWludCByZXQgPSAwOwogCiAJLyogaWYgcGxsX2Rlc2MgaXMgbm90IHVzZWQgKi8KLQlpZiAoZC0+cGxsX2Rlc2MgPT0gTlVMTCkKKwlpZiAoYWRhcC0+cGxsX2Rlc2MgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoZC0+dHVuZXJfcGFzc19jdHJsKQotCQlkLT50dW5lcl9wYXNzX2N0cmwoZmUsMSxkLT5wbGxfYWRkcik7CisJaWYgKGFkYXAtPnR1bmVyX3Bhc3NfY3RybCkKKwkJYWRhcC0+dHVuZXJfcGFzc19jdHJsKGZlLCAxLCBhZGFwLT5wbGxfYWRkcik7CiAKLQlkZWJfcGxsKCJwbGwgaW5pdDogJXhcbiIsZC0+cGxsX2FkZHIpOwotCWRlYl9wbGwoInBsbC1idWY6ICV4ICV4ICV4ICV4XG4iLGQtPnBsbF9pbml0WzBdLGQtPnBsbF9pbml0WzFdLAotCQkJZC0+cGxsX2luaXRbMl0sZC0+cGxsX2luaXRbM10pOworCWRlYl9wbGwoInBsbCBpbml0OiAleFxuIixhZGFwLT5wbGxfYWRkcik7CisJZGViX3BsbCgicGxsLWJ1ZjogJXggJXggJXggJXhcbiIsYWRhcC0+cGxsX2luaXRbMF0sIGFkYXAtPnBsbF9pbml0WzFdLAorCQkJYWRhcC0+cGxsX2luaXRbMl0sIGFkYXAtPnBsbF9pbml0WzNdKTsKIAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaWYgKGkyY190cmFuc2ZlciAoJmQtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKSB7CisJaWYgKGkyY190cmFuc2ZlciAoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHsKIAkJZXJyKCJ0dW5lciBpMmMgd3JpdGUgZmFpbGVkIGZvciBwbGxfaW5pdC4iKTsKIAkJcmV0ID0gLUVSRU1PVEVJTzsKIAl9CiAJbXNsZWVwKDEpOwogCi0JaWYgKGQtPnR1bmVyX3Bhc3NfY3RybCkKLQkJZC0+dHVuZXJfcGFzc19jdHJsKGZlLDAsZC0+cGxsX2FkZHIpOworCWlmIChhZGFwLT50dW5lcl9wYXNzX2N0cmwpCisJCWFkYXAtPnR1bmVyX3Bhc3NfY3RybChmZSwwLGFkYXAtPnBsbF9hZGRyKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChkdmJfdXNiX3R1bmVyX2luaXRfaTJjKTsKIAogaW50IGR2Yl91c2JfdHVuZXJfY2FsY19yZWdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCwgdTggKmIsIGludCBidWZfbGVuKQogewotCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCA9IGZlLT5kdmItPnByaXY7CiAKIAlpZiAoYnVmX2xlbiAhPSA1KQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoZC0+cGxsX2Rlc2MgPT0gTlVMTCkKKwlpZiAoYWRhcC0+cGxsX2Rlc2MgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlkZWJfcGxsKCJwbGwgYWRkcjogJXgsIGZyZXE6ICVkICVwXG4iLGQtPnBsbF9hZGRyLGZlcC0+ZnJlcXVlbmN5LGQtPnBsbF9kZXNjKTsKKwlkZWJfcGxsKCJwbGwgYWRkcjogJXgsIGZyZXE6ICVkICVwXG4iLGFkYXAtPnBsbF9hZGRyLCBmZXAtPmZyZXF1ZW5jeSwgYWRhcC0+cGxsX2Rlc2MpOwogCi0JYlswXSA9IGQtPnBsbF9hZGRyOwotCWR2Yl9wbGxfY29uZmlndXJlKGQtPnBsbF9kZXNjLCZiWzFdLGZlcC0+ZnJlcXVlbmN5LGZlcC0+dS5vZmRtLmJhbmR3aWR0aCk7CisJYlswXSA9IGFkYXAtPnBsbF9hZGRyOworCWR2Yl9wbGxfY29uZmlndXJlKGFkYXAtPnBsbF9kZXNjLCAmYlsxXSwgZmVwLT5mcmVxdWVuY3ksIGZlcC0+dS5vZmRtLmJhbmR3aWR0aCk7CiAKIAlkZWJfcGxsKCJwbGwtYnVmOiAleCAleCAleCAleCAleFxuIixiWzBdLGJbMV0sYlsyXSxiWzNdLGJbNF0pOwogCkBAIC05OSwyNiArOTksMjcgQEAKIAogaW50IGR2Yl91c2JfdHVuZXJfc2V0X3BhcmFtc19pMmMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQogewotCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCA9IGZlLT5kdmItPnByaXY7CiAJaW50IHJldCA9IDA7CiAJdTggYls1XTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gZC0+cGxsX2FkZHIsIC5mbGFncyA9IDAsIC5idWYgPSAmYlsxXSwgLmxlbiA9IDQgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gYWRhcC0+cGxsX2FkZHIsIC5mbGFncyA9IDAsIC5idWYgPSAmYlsxXSwgLmxlbiA9IDQgfTsKIAogCWR2Yl91c2JfdHVuZXJfY2FsY19yZWdzKGZlLGZlcCxiLDUpOwogCi0JaWYgKGQtPnR1bmVyX3Bhc3NfY3RybCkKLQkJZC0+dHVuZXJfcGFzc19jdHJsKGZlLDEsZC0+cGxsX2FkZHIpOworCWlmIChhZGFwLT50dW5lcl9wYXNzX2N0cmwpCisJCWFkYXAtPnR1bmVyX3Bhc3NfY3RybChmZSwgMSwgYWRhcC0+cGxsX2FkZHIpOwogCiAJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpZiAoaTJjX3RyYW5zZmVyICgmZC0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHsKKworCWlmIChpMmNfdHJhbnNmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHsKIAkJZXJyKCJ0dW5lciBpMmMgd3JpdGUgZmFpbGVkIGZvciBwbGxfc2V0LiIpOwogCQlyZXQgPSAtRVJFTU9URUlPOwogCX0KIAltc2xlZXAoMSk7CiAKLQlpZiAoZC0+dHVuZXJfcGFzc19jdHJsKQotCQlkLT50dW5lcl9wYXNzX2N0cmwoZmUsMCxkLT5wbGxfYWRkcik7CisJaWYgKGFkYXAtPnR1bmVyX3Bhc3NfY3RybCkKKwkJYWRhcC0+dHVuZXJfcGFzc19jdHJsKGZlLCAwLCBhZGFwLT5wbGxfYWRkcik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IDU3YTEwZGUuLjRkNmIwNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTUyLDggKzUyLDcgQEAKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fTU9EMzAwMF9XQVJNCQkJMHgwYmI5CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX01PRDMwMDFfQ09MRAkJCTB4MGJjNgogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9NT0QzMDAxX1dBUk0JCQkweDBiYzcKLSNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzcwMAkJCQkweDFlMTQKLSNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzcwMF9SRUVOVU0JCQkweDFlMTUKKyNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzcwMFAJCQkJMHgxZTE0CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX0FOQ0hPUl8yMTM1X0NPTEQJCQkweDIxMzEKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQl9DT0xECQkJMHgwZmEwCiAjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0JfV0FSTQkJCTB4MGZhMQpAQCAtOTUsNiArOTQsMTAgQEAKICNkZWZpbmUgVVNCX1BJRF9XVDIyMFVfWkwwMzUzX1dBUk0JCQkweDAyMmIKICNkZWZpbmUgVVNCX1BJRF9XSU5UVl9OT1ZBX1RfVVNCMl9DT0xECQkJMHg5MzAwCiAjZGVmaW5lIFVTQl9QSURfV0lOVFZfTk9WQV9UX1VTQjJfV0FSTQkJCTB4OTMwMQorI2RlZmluZSBVU0JfUElEX0hBVVBQQVVHRV9OT1ZBX1RfNTAwCQkJMHg5OTQxCisjZGVmaW5lIFVTQl9QSURfSEFVUFBBVUdFX05PVkFfVF81MDBfMgkJCTB4OTk1MAorI2RlZmluZSBVU0JfUElEX0hBVVBQQVVHRV9OT1ZBX1RfU1RJQ0sJCQkweDcwNTAKKyNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfVk9MQVIJCQkJMHgxMjM0CiAjZGVmaW5lIFVTQl9QSURfTkVCVUxBX0RJR0lUVgkJCQkweDAyMDEKICNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9MR0RUCQkJMHhkODIwCiAjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfTEcwNjRGX0NPTEQJCTB4ZDUwMApAQCAtMTAzLDEwICsxMDYsMTIgQEAKICNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9MR1oyMDFfV0FSTQkJMHhkYjAxCiAjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfVEg3NTc5X0NPTEQJCTB4ZGIxMAogI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX1RINzU3OV9XQVJNCQkweGRiMTEKLSNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9ERUUxNjAxX0NPTEQJCTB4ZGI1MAotI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RFRTE2MDFfV0FSTQkJMHhkYjUxCi0jZGVmaW5lIFVTQl9QSURfRElHSVRBTE5PV19CTFVFQklSRF9ERUUxNjAxX0NPTEQJMHhkYjU0Ci0jZGVmaW5lIFVTQl9QSURfRElHSVRBTE5PV19CTFVFQklSRF9ERUUxNjAxX1dBUk0JMHhkYjU1CisjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF8xX0NPTEQJCTB4ZGI1MAorI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RVQUxfMV9XQVJNCQkweGRiNTEKKyNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVUFMXzJfQ09MRAkJMHhkYjU4CisjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF8yX1dBUk0JCTB4ZGI1OQorI2RlZmluZSBVU0JfUElEX0RJR0lUQUxOT1dfQkxVRUJJUkRfRFVBTF8xX0NPTEQJMHhkYjU0CisjZGVmaW5lIFVTQl9QSURfRElHSVRBTE5PV19CTFVFQklSRF9EVUFMXzFfV0FSTQkweGRiNTUKICNkZWZpbmUgVVNCX1BJRF9NRURJT05fTUQ5NTcwMAkJCQkweDA5MzIKICNkZWZpbmUgVVNCX1BJRF9LWUVfRFZCX1RfQ09MRAkJCQkweDcwMWUKICNkZWZpbmUgVVNCX1BJRF9LWUVfRFZCX1RfV0FSTQkJCQkweDcwMWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jCmluZGV4IGExNzA1ZWMuLmZmZGRlODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBkdmItdXNiLWluaXQuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC01IFBhdHJpY2sgQm9ldHRjaGVyIChwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlKQorICogQ29weXJpZ2h0IChDKSAyMDA0LTYgUGF0cmljayBCb2V0dGNoZXIgKHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGUpCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCkBAIC0xNiwyMSArMTYsMTA1IEBACiAvKiBkZWJ1ZyAqLwogaW50IGR2Yl91c2JfZGVidWc7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsZHZiX3VzYl9kZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8seGZlcj0yLHBsbD00LHRzPTgsZXJyPTE2LHJjPTMyLGZ3PTY0IChvci1hYmxlKSkuIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLHhmZXI9MixwbGw9NCx0cz04LGVycj0xNixyYz0zMixmdz02NCxtZW09MTI4LHV4ZmVyPTI1NiAgKG9yLWFibGUpKS4iIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKIAogaW50IGR2Yl91c2JfZGlzYWJsZV9yY19wb2xsaW5nOwogbW9kdWxlX3BhcmFtX25hbWVkKGRpc2FibGVfcmNfcG9sbGluZywgZHZiX3VzYl9kaXNhYmxlX3JjX3BvbGxpbmcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfcmNfcG9sbGluZywgImRpc2FibGUgcmVtb3RlIGNvbnRyb2wgcG9sbGluZyAoZGVmYXVsdDogMCkuIik7CiAKK3N0YXRpYyBpbnQgZHZiX3VzYl9mb3JjZV9waWRfZmlsdGVyX3VzYWdlOworbW9kdWxlX3BhcmFtX25hbWVkKGZvcmNlX3BpZF9maWx0ZXJfdXNhZ2UsIGR2Yl91c2JfZm9yY2VfcGlkX2ZpbHRlcl91c2FnZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9yY19wb2xsaW5nLCAiZm9yY2UgYWxsIGR2Yi11c2ItZGV2aWNlcyB0byB1c2UgYSBQSUQgZmlsdGVyLCBpZiBhbnkgKGRlZmF1bHQ6IDApLiIpOworCitzdGF0aWMgaW50IGR2Yl91c2JfYWRhcHRlcl9pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwOworCWludCByZXQsbjsKKworCWZvciAobiA9IDA7IG4gPCBkLT5wcm9wcy5udW1fYWRhcHRlcnM7IG4rKykgeworCQlhZGFwID0gJmQtPmFkYXB0ZXJbbl07CisJCWFkYXAtPmRldiA9IGQ7CisJCWFkYXAtPmlkICA9IG47CisKKwkJbWVtY3B5KCZhZGFwLT5wcm9wcywgJmQtPnByb3BzLmFkYXB0ZXJbbl0sIHNpemVvZihzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyX3Byb3BlcnRpZXMpKTsKKworLyogc3BlZWQgLSB3aGVuIHJ1bm5pbmcgYXQgRlVMTCBzcGVlZCB3ZSBuZWVkIGEgSFcgUElEIGZpbHRlciAqLworCQlpZiAoZC0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwgJiYgIShhZGFwLT5wcm9wcy5jYXBzICYgRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSKSkgeworCQkJZXJyKCJUaGlzIFVTQjIuMCBkZXZpY2UgY2Fubm90IGJlIHJ1biBvbiBhIFVTQjEuMSBwb3J0LiAoaXQgbGFja3MgYSBoYXJkd2FyZSBQSUQgZmlsdGVyKSIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlpZiAoKGQtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMICYmIGFkYXAtPnByb3BzLmNhcHMgJiBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIpIHx8CisJCQkoYWRhcC0+cHJvcHMuY2FwcyAmIERWQl9VU0JfQURBUF9ORUVEX1BJRF9GSUxURVJJTkcpKSB7CisJCQlpbmZvKCJ3aWxsIHVzZSB0aGUgZGV2aWNlJ3MgaGFyZHdhcmUgUElEIGZpbHRlciAodGFibGUgY291bnQ6ICVkKS4iLGFkYXAtPnByb3BzLnBpZF9maWx0ZXJfY291bnQpOworCQkJYWRhcC0+cGlkX2ZpbHRlcmluZyAgPSAxOworCQkJYWRhcC0+bWF4X2ZlZWRfY291bnQgPSBhZGFwLT5wcm9wcy5waWRfZmlsdGVyX2NvdW50OworCQl9IGVsc2UgeworCQkJaW5mbygid2lsbCBwYXNzIHRoZSBjb21wbGV0ZSBNUEVHMiB0cmFuc3BvcnQgc3RyZWFtIHRvIHRoZSBzb2Z0d2FyZSBkZW11eGVyLiIpOworCQkJYWRhcC0+cGlkX2ZpbHRlcmluZyAgPSAwOworCQkJYWRhcC0+bWF4X2ZlZWRfY291bnQgPSAyNTU7CisJCX0KKworCQlpZiAoIWFkYXAtPnBpZF9maWx0ZXJpbmcgJiYKKwkJCWR2Yl91c2JfZm9yY2VfcGlkX2ZpbHRlcl91c2FnZSAmJgorCQkJYWRhcC0+cHJvcHMuY2FwcyAmIERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUikgeworCQkJaW5mbygicGlkIGZpbHRlciBlbmFibGVkIGJ5IG1vZHVsZSBvcHRpb24uIik7CisJCQlhZGFwLT5waWRfZmlsdGVyaW5nICA9IDE7CisJCQlhZGFwLT5tYXhfZmVlZF9jb3VudCA9IGFkYXAtPnByb3BzLnBpZF9maWx0ZXJfY291bnQ7CisJCX0KKworCQlpZiAoYWRhcC0+cHJvcHMuc2l6ZV9vZl9wcml2ID4gMCkgeworCQkJYWRhcC0+cHJpdiA9IGt6YWxsb2MoYWRhcC0+cHJvcHMuc2l6ZV9vZl9wcml2LEdGUF9LRVJORUwpOworCQkJaWYgKGFkYXAtPnByaXYgPT0gTlVMTCkgeworCQkJCWVycigibm8gbWVtb3J5IGZvciBwcml2IGZvciBhZGFwdGVyICVkLiIsbik7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKworCQlpZiAoKHJldCA9IGR2Yl91c2JfYWRhcHRlcl9zdHJlYW1faW5pdChhZGFwKSkgfHwKKwkJCShyZXQgPSBkdmJfdXNiX2FkYXB0ZXJfZHZiX2luaXQoYWRhcCkpIHx8CisJCQkocmV0ID0gZHZiX3VzYl9hZGFwdGVyX2Zyb250ZW5kX2luaXQoYWRhcCkpKSB7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJZC0+bnVtX2FkYXB0ZXJzX2luaXRpYWxpemVkKys7CisJCWQtPnN0YXRlIHw9IERWQl9VU0JfU1RBVEVfRFZCOworCX0KKworCS8qCisJICogd2hlbiByZWxvYWRpbmcgdGhlIGRyaXZlciB3L28gcmVwbHVnZ2luZyB0aGUgZGV2aWNlCisJICogc29tZXRpbWVzIGEgdGltZW91dCBvY2N1cmVzLCB0aGlzIGhlbHBzCisJICovCisJaWYgKGQtPnByb3BzLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ICE9IDApIHsKKwkJdXNiX2NsZWFyX2hhbHQoZC0+dWRldix1c2Jfc25kYnVsa3BpcGUoZC0+dWRldixkLT5wcm9wcy5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCkpOworCQl1c2JfY2xlYXJfaGFsdChkLT51ZGV2LHVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LGQtPnByb3BzLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50KSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHZiX3VzYl9hZGFwdGVyX2V4aXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCWludCBuOworCWZvciAobiA9IDA7IG4gPCBkLT5udW1fYWRhcHRlcnNfaW5pdGlhbGl6ZWQ7IG4rKykgeworCQlkdmJfdXNiX2FkYXB0ZXJfZnJvbnRlbmRfZXhpdCgmZC0+YWRhcHRlcltuXSk7CisJCWR2Yl91c2JfYWRhcHRlcl9kdmJfZXhpdCgmZC0+YWRhcHRlcltuXSk7CisJCWR2Yl91c2JfYWRhcHRlcl9zdHJlYW1fZXhpdCgmZC0+YWRhcHRlcltuXSk7CisJCWtmcmVlKGQtPmFkYXB0ZXJbbl0ucHJpdik7CisJfQorCWQtPm51bV9hZGFwdGVyc19pbml0aWFsaXplZCA9IDA7CisJZC0+c3RhdGUgJj0gfkRWQl9VU0JfU1RBVEVfRFZCOworCXJldHVybiAwOworfQorCisKIC8qIGdlbmVyYWwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCiBzdGF0aWMgaW50IGR2Yl91c2JfZXhpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CiAJZGViX2luZm8oInN0YXRlIGJlZm9yZSBleGl0aW5nIGV2ZXJ5dGhpbmc6ICV4XG4iLGQtPnN0YXRlKTsKIAlkdmJfdXNiX3JlbW90ZV9leGl0KGQpOwotCWR2Yl91c2JfZmVfZXhpdChkKTsKKwlkdmJfdXNiX2FkYXB0ZXJfZXhpdChkKTsKIAlkdmJfdXNiX2kyY19leGl0KGQpOwotCWR2Yl91c2JfZHZiX2V4aXQoZCk7Ci0JZHZiX3VzYl91cmJfZXhpdChkKTsKIAlkZWJfaW5mbygic3RhdGUgc2hvdWxkIGJlIHplcm8gbm93OiAleFxuIixkLT5zdGF0ZSk7CiAJZC0+c3RhdGUgPSBEVkJfVVNCX1NUQVRFX0lOSVQ7CiAJa2ZyZWUoZC0+cHJpdik7CkBAIC00NywzMiArMTMxLDE5IEBACiAKIAlkLT5zdGF0ZSA9IERWQl9VU0JfU1RBVEVfSU5JVDsKIAorCWlmIChkLT5wcm9wcy5zaXplX29mX3ByaXYgPiAwKSB7CisJCWQtPnByaXYgPSBremFsbG9jKGQtPnByb3BzLnNpemVfb2ZfcHJpdixHRlBfS0VSTkVMKTsKKwkJaWYgKGQtPnByaXYgPT0gTlVMTCkgeworCQkJZXJyKCJubyBtZW1vcnkgZm9yIHByaXYgaW4gJ3N0cnVjdCBkdmJfdXNiX2RldmljZSciKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCiAvKiBjaGVjayB0aGUgY2FwYWJpbGl0aWVzIGFuZCBzZXQgYXBwcm9wcmlhdGUgdmFyaWFibGVzICovCisJZHZiX3VzYl9kZXZpY2VfcG93ZXJfY3RybChkLCAxKTsKIAotLyogc3BlZWQgLSB3aGVuIHJ1bm5pbmcgYXQgRlVMTCBzcGVlZCB3ZSBuZWVkIGEgSFcgUElEIGZpbHRlciAqLwotCWlmIChkLT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCAmJiAhKGQtPnByb3BzLmNhcHMgJiBEVkJfVVNCX0hBU19QSURfRklMVEVSKSkgewotCQllcnIoIlRoaXMgVVNCMi4wIGRldmljZSBjYW5ub3QgYmUgcnVuIG9uIGEgVVNCMS4xIHBvcnQuIChpdCBsYWNrcyBhIGhhcmR3YXJlIFBJRCBmaWx0ZXIpIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmICgoZC0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwgJiYgZC0+cHJvcHMuY2FwcyAmIERWQl9VU0JfSEFTX1BJRF9GSUxURVIpIHx8Ci0JCShkLT5wcm9wcy5jYXBzICYgRFZCX1VTQl9ORUVEX1BJRF9GSUxURVJJTkcpKSB7Ci0JCWluZm8oIndpbGwgdXNlIHRoZSBkZXZpY2UncyBoYXJkd2FyZSBQSUQgZmlsdGVyICh0YWJsZSBjb3VudDogJWQpLiIsZC0+cHJvcHMucGlkX2ZpbHRlcl9jb3VudCk7Ci0JCWQtPnBpZF9maWx0ZXJpbmcgPSAxOwotCQlkLT5tYXhfZmVlZF9jb3VudCA9IGQtPnByb3BzLnBpZF9maWx0ZXJfY291bnQ7Ci0JfSBlbHNlIHsKLQkJaW5mbygid2lsbCBwYXNzIHRoZSBjb21wbGV0ZSBNUEVHMiB0cmFuc3BvcnQgc3RyZWFtIHRvIHRoZSBzb2Z0d2FyZSBkZW11eGVyLiIpOwotCQlkLT5waWRfZmlsdGVyaW5nID0gMDsKLQkJZC0+bWF4X2ZlZWRfY291bnQgPSAyNTU7Ci0JfQotCi0JaWYgKGQtPnByb3BzLnBvd2VyX2N0cmwpCi0JCWQtPnByb3BzLnBvd2VyX2N0cmwoZCwxKTsKLQotCWlmICgocmV0ID0gZHZiX3VzYl91cmJfaW5pdChkKSkgfHwKLQkJKHJldCA9IGR2Yl91c2JfZHZiX2luaXQoZCkpIHx8Ci0JCShyZXQgPSBkdmJfdXNiX2kyY19pbml0KGQpKSB8fAotCQkocmV0ID0gZHZiX3VzYl9mZV9pbml0KGQpKSkgeworCWlmICgocmV0ID0gZHZiX3VzYl9pMmNfaW5pdChkKSkgfHwKKwkJKHJldCA9IGR2Yl91c2JfYWRhcHRlcl9pbml0KGQpKSkgewogCQlkdmJfdXNiX2V4aXQoZCk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtODAsMTQgKzE1MSwxMyBAQAogCWlmICgocmV0ID0gZHZiX3VzYl9yZW1vdGVfaW5pdChkKSkpCiAJCWVycigiY291bGQgbm90IGluaXRpYWxpemUgcmVtb3RlIGNvbnRyb2wuIik7CiAKLQlpZiAoZC0+cHJvcHMucG93ZXJfY3RybCkKLQkJZC0+cHJvcHMucG93ZXJfY3RybChkLDApOworCWR2Yl91c2JfZGV2aWNlX3Bvd2VyX2N0cmwoZCwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogZGV0ZXJtaW5lIHRoZSBuYW1lIGFuZCB0aGUgc3RhdGUgb2YgdGhlIGp1c3QgZm91bmQgVVNCIGRldmljZSAqLwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiAqIGR2Yl91c2JfZmluZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyAqcHJvcHMsIGludCAqY29sZCkKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKiBkdmJfdXNiX2ZpbmRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICpwcm9wcywgaW50ICpjb2xkKQogewogCWludCBpLGo7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uICpkZXNjID0gTlVMTDsKQEAgLTEyNSwxMSArMTk1LDI1IEBACiAJcmV0dXJuIGRlc2M7CiB9CiAKK2ludCBkdmJfdXNiX2RldmljZV9wb3dlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQoreworCWlmIChvbm9mZikKKwkJZC0+cG93ZXJlZCsrOworCWVsc2UKKwkJZC0+cG93ZXJlZC0tOworCisJaWYgKGQtPnBvd2VyZWQgPT0gMCB8fCAob25vZmYgJiYgZC0+cG93ZXJlZCA9PSAxKSkgeyAvLyB3aGVuIHN3aXRjaGluZyBmcm9tIDEgdG8gMCBvciBmcm9tIDAgdG8gMQorCQlkZWJfaW5mbygicG93ZXIgY29udHJvbDogJWRcbiIsIG9ub2ZmKTsKKwkJaWYgKGQtPnByb3BzLnBvd2VyX2N0cmwpCisJCQlyZXR1cm4gZC0+cHJvcHMucG93ZXJfY3RybChkLCBvbm9mZik7CisJfQorCXJldHVybiAwOworfQorCiAvKgogICogVVNCCiAgKi8KLQotaW50IGR2Yl91c2JfZGV2aWNlX2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMKK2ludCBkdmJfdXNiX2RldmljZV9pbml0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcwogCQkqcHJvcHMsIHN0cnVjdCBtb2R1bGUgKm93bmVyLHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKmR1KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKQEAgLTE0OSw3ICsyMzMsNyBAQAogCWlmIChjb2xkKSB7CiAJCWluZm8oImZvdW5kIGEgJyVzJyBpbiBjb2xkIHN0YXRlLCB3aWxsIHRyeSB0byBsb2FkIGEgZmlybXdhcmUiLGRlc2MtPm5hbWUpOwogCQlyZXQgPSBkdmJfdXNiX2Rvd25sb2FkX2Zpcm13YXJlKHVkZXYscHJvcHMpOwotCQlpZiAoIXByb3BzLT5ub19yZWNvbm5lY3QpCisJCWlmICghcHJvcHMtPm5vX3JlY29ubmVjdCB8fCByZXQgIT0gMCkKIAkJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xNjEsMTkgKzI0NSwxMCBAQAogCX0KIAogCWQtPnVkZXYgPSB1ZGV2OwotCW1lbWNweSgmZC0+cHJvcHMscHJvcHMsc2l6ZW9mKHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMpKTsKKwltZW1jcHkoJmQtPnByb3BzLHByb3BzLHNpemVvZihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcykpOwogCWQtPmRlc2MgPSBkZXNjOwogCWQtPm93bmVyID0gb3duZXI7CiAKLQlpZiAoZC0+cHJvcHMuc2l6ZV9vZl9wcml2ID4gMCkgewotCQkJZC0+cHJpdiA9IGt6YWxsb2MoZC0+cHJvcHMuc2l6ZV9vZl9wcml2LEdGUF9LRVJORUwpOwotCQlpZiAoZC0+cHJpdiA9PSBOVUxMKSB7Ci0JCQllcnIoIm5vIG1lbW9yeSBmb3IgcHJpdiBpbiAnc3RydWN0IGR2Yl91c2JfZGV2aWNlJyIpOwotCQkJa2ZyZWUoZCk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZCk7CiAKIAlpZiAoZHUgIT0gTlVMTCkKQEAgLTIwNCw3ICsyNzksNyBAQAogfQogRVhQT1JUX1NZTUJPTChkdmJfdXNiX2RldmljZV9leGl0KTsKIAotTU9EVUxFX1ZFUlNJT04oIjAuMyIpOworTU9EVUxFX1ZFUlNJT04oIjEuMCIpOwogTU9EVUxFX0FVVEhPUigiUGF0cmljayBCb2V0dGNoZXIgPHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkEgbGlicmFyeSBtb2R1bGUgY29udGFpbmluZyBjb21tb25seSB1c2VkIFVTQiBhbmQgRFZCIGZ1bmN0aW9uIFVTQiBEVkIgZGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCmluZGV4IDM4MGIyYTQuLjBhM2EwYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKQEAgLTEsNiArMSw2IEBACiAvKiBkdmItdXNiLXJlbW90ZS5jIGlzIHBhcnQgb2YgdGhlIERWQiBVU0IgbGlicmFyeS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtNSBQYXRyaWNrIEJvZXR0Y2hlciAocGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZSkKKyAqIENvcHlyaWdodCAoQykgMjAwNC02IFBhdHJpY2sgQm9ldHRjaGVyIChwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlKQogICogc2VlIGR2Yi11c2ItaW5pdC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgaW5pdGlhbGl6aW5nIHRoZSB0aGUgaW5wdXQtZGV2aWNlIGFuZCBmb3IgaGFuZGxpbmcgcmVtb3RlLWNvbnRyb2wtcXVlcmllcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi11cmIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi11cmIuYwppbmRleCA4OGIyODM3Li41Y2VmMTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItdXJiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXVyYi5jCkBAIC0xLDkgKzEsOSBAQAogLyogZHZiLXVzYi11cmIuYyBpcyBwYXJ0IG9mIHRoZSBEVkIgVVNCIGxpYnJhcnkuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTUgUGF0cmljayBCb2V0dGNoZXIgKHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtNiBQYXRyaWNrIEJvZXR0Y2hlciAocGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZSkKICAqIHNlZSBkdmItdXNiLWluaXQuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgogICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBmdW5jdGlvbnMgZm9yIGluaXRpYWxpemluZyBhbmQgaGFuZGxpbmcgdGhlCisgKiBUaGlzIGZpbGUga2VlcHMgZnVuY3Rpb25zIGZvciBpbml0aWFsaXppbmcgYW5kIGhhbmRsaW5nIHRoZQogICogVVNCIGFuZCBVUkIgc3R1ZmYuCiAgKi8KICNpbmNsdWRlICJkdmItdXNiLWNvbW1vbi5oIgpAQCAtNjQsMjYwICs2NCwzMiBAQAogfQogRVhQT1JUX1NZTUJPTChkdmJfdXNiX2dlbmVyaWNfd3JpdGUpOwogCi0KLS8qIFVSQiBzdHVmZiBmb3Igc3RyZWFtaW5nICovCi1zdGF0aWMgdm9pZCBkdmJfdXNiX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpwdHJlZ3MpCitzdGF0aWMgdm9pZCBkdmJfdXNiX2RhdGFfY29tcGxldGUoc3RydWN0IHVzYl9kYXRhX3N0cmVhbSAqc3RyZWFtLCB1OCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQogewotCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IHVyYi0+Y29udGV4dDsKLQlpbnQgcHR5cGUgPSB1c2JfcGlwZXR5cGUodXJiLT5waXBlKTsKLQlpbnQgaTsKLQl1OCAqYjsKLQotCWRlYl90cygiJyVzJyB1cmIgY29tcGxldGVkLiBmZWVkY291bnQ6ICVkLCBzdGF0dXM6ICVkLCBsZW5ndGg6ICVkLyVkLCBwYWNrX251bTogJWQsIGVycm9yczogJWRcbiIsCi0JCQlwdHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTID8gImlzb2MiIDogImJ1bGsiLCBkLT5mZWVkY291bnQsCi0JCQl1cmItPnN0YXR1cyx1cmItPmFjdHVhbF9sZW5ndGgsdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyx1cmItPmVycm9yX2NvdW50KTsKLQotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQkJY2FzZSAwOiAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KLQkJCWJyZWFrOwotCQljYXNlIC1FQ09OTlJFU0VUOiAgIC8qIGtpbGwgKi8KLQkJY2FzZSAtRU5PRU5UOgotCQljYXNlIC1FU0hVVERPV046Ci0JCQlyZXR1cm47Ci0JCWRlZmF1bHQ6ICAgICAgICAvKiBlcnJvciAqLwotCQkJZGViX3RzKCJ1cmIgY29tcGxldGl0aW9uIGVycm9yICVkLiIsIHVyYi0+c3RhdHVzKTsKLQkJCWJyZWFrOwotCX0KLQotCWlmIChkLT5mZWVkY291bnQgPiAwKSB7Ci0JCWlmIChkLT5zdGF0ZSAmIERWQl9VU0JfU1RBVEVfRFZCKSB7Ci0JCQlzd2l0Y2ggKHB0eXBlKSB7Ci0JCQkJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgotCQkJCQliID0gKHU4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCQkJCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7Ci0JCQkJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgIT0gMCkKLQkJCQkJCQlkZWJfdHMoImlzbyBmcmFtZSBkZXNjcmlwdG9yIGhhcyBhbiBlcnJvcjogJWRcbiIsdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOwotCQkJCQkJZWxzZSBpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID4gMCkgewotCQkJCQkJCQlkdmJfZG14X3N3ZmlsdGVyKCZkLT5kZW11eCxiICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQsCi0JCQkJCQkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKLQkJCQkJCQl9Ci0JCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IDA7Ci0JCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPSAwOwotCQkJCQl9Ci0JCQkJCWRlYnVnX2R1bXAoYiwyMCxkZWJfdHMpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFBJUEVfQlVMSzoKLQkJCQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApCi0JCQkJCQlkdmJfZG14X3N3ZmlsdGVyKCZkLT5kZW11eCwgKHU4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyLHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWVycigidW5rb3duIGVuZHBvaW50IHR5cGUgaW4gY29tcGxldGl0aW9uIGhhbmRsZXIuIik7Ci0JCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCX0KLQotCXVzYl9zdWJtaXRfdXJiKHVyYixHRlBfQVRPTUlDKTsKKwlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gc3RyZWFtLT51c2VyX3ByaXY7CisJaWYgKGFkYXAtPmZlZWRjb3VudCA+IDAgJiYgYWRhcC0+c3RhdGUgJiBEVkJfVVNCX0FEQVBfU1RBVEVfRFZCKQorCQlkdmJfZG14X3N3ZmlsdGVyKCZhZGFwLT5kZW11eCwgYnVmZmVyLCBsZW5ndGgpOwogfQogCi1pbnQgZHZiX3VzYl91cmJfa2lsbChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCitzdGF0aWMgdm9pZCBkdmJfdXNiX2RhdGFfY29tcGxldGVfMjA0KHN0cnVjdCB1c2JfZGF0YV9zdHJlYW0gKnN0cmVhbSwgdTggKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkKIHsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgZC0+dXJic19zdWJtaXR0ZWQ7IGkrKykgewotCQlkZWJfdHMoImtpbGxpbmcgVVJCIG5vLiAlZC5cbiIsaSk7Ci0KLQkJLyogc3RvcCB0aGUgVVJCICovCi0JCXVzYl9raWxsX3VyYihkLT51cmJfbGlzdFtpXSk7Ci0JfQotCWQtPnVyYnNfc3VibWl0dGVkID0gMDsKLQlyZXR1cm4gMDsKKwlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gc3RyZWFtLT51c2VyX3ByaXY7CisJaWYgKGFkYXAtPmZlZWRjb3VudCA+IDAgJiYgYWRhcC0+c3RhdGUgJiBEVkJfVVNCX0FEQVBfU1RBVEVfRFZCKQorCQlkdmJfZG14X3N3ZmlsdGVyXzIwNCgmYWRhcC0+ZGVtdXgsIGJ1ZmZlciwgbGVuZ3RoKTsKIH0KIAotaW50IGR2Yl91c2JfdXJiX3N1Ym1pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCitpbnQgZHZiX3VzYl9hZGFwdGVyX3N0cmVhbV9pbml0KHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0JaW50IGkscmV0OwotCWZvciAoaSA9IDA7IGkgPCBkLT51cmJzX2luaXRpYWxpemVkOyBpKyspIHsKLQkJZGViX3RzKCJzdWJtaXR0aW5nIFVSQiBuby4gJWRcbiIsaSk7Ci0JCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIoZC0+dXJiX2xpc3RbaV0sR0ZQX0FUT01JQykpKSB7Ci0JCQllcnIoImNvdWxkIG5vdCBzdWJtaXQgVVJCIG5vLiAlZCAtIGdldCB0aGVtIGFsbCBiYWNrIixpKTsKLQkJCWR2Yl91c2JfdXJiX2tpbGwoZCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWQtPnVyYnNfc3VibWl0dGVkKys7Ci0JfQotCXJldHVybiAwOworCWFkYXAtPnN0cmVhbS51ZGV2ICAgICAgPSBhZGFwLT5kZXYtPnVkZXY7CisJaWYgKGFkYXAtPnByb3BzLmNhcHMgJiBEVkJfVVNCX0FEQVBfUkVDRUlWRVNfMjA0X0JZVEVfVFMpCisJCWFkYXAtPnN0cmVhbS5jb21wbGV0ZSA9IGR2Yl91c2JfZGF0YV9jb21wbGV0ZV8yMDQ7CisJZWxzZQorCWFkYXAtPnN0cmVhbS5jb21wbGV0ZSAgPSBkdmJfdXNiX2RhdGFfY29tcGxldGU7CisJYWRhcC0+c3RyZWFtLnVzZXJfcHJpdiA9IGFkYXA7CisJcmV0dXJuIHVzYl91cmJfaW5pdCgmYWRhcC0+c3RyZWFtLCAmYWRhcC0+cHJvcHMuc3RyZWFtKTsKIH0KIAotc3RhdGljIGludCBkdmJfdXNiX2ZyZWVfc3RyZWFtX2J1ZmZlcnMoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoraW50IGR2Yl91c2JfYWRhcHRlcl9zdHJlYW1fZXhpdChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewotCWlmIChkLT5zdGF0ZSAmIERWQl9VU0JfU1RBVEVfVVJCX0JVRikgewotCQl3aGlsZSAoZC0+YnVmX251bSkgewotCQkJZC0+YnVmX251bS0tOwotCQkJZGViX21lbSgiZnJlZWluZyBidWZmZXIgJWRcbiIsZC0+YnVmX251bSk7Ci0JCQl1c2JfYnVmZmVyX2ZyZWUoZC0+dWRldiwgZC0+YnVmX3NpemUsCi0JCQkJCWQtPmJ1Zl9saXN0W2QtPmJ1Zl9udW1dLCBkLT5kbWFfYWRkcltkLT5idWZfbnVtXSk7Ci0JCX0KLQkJa2ZyZWUoZC0+YnVmX2xpc3QpOwotCQlrZnJlZShkLT5kbWFfYWRkcik7Ci0JfQotCi0JZC0+c3RhdGUgJj0gfkRWQl9VU0JfU1RBVEVfVVJCX0JVRjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGR2Yl91c2JfYWxsb2NhdGVfc3RyZWFtX2J1ZmZlcnMoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgbnVtLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JZC0+YnVmX251bSA9IDA7Ci0JZC0+YnVmX3NpemUgPSBzaXplOwotCi0JZGViX21lbSgiYWxsIGluIGFsbCBJIHdpbGwgdXNlICVsdSBieXRlcyBmb3Igc3RyZWFtaW5nXG4iLG51bSpzaXplKTsKLQotCWlmICgoZC0+YnVmX2xpc3QgPSBrY2FsbG9jKG51bSwgc2l6ZW9mKHU4ICopLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoKGQtPmRtYV9hZGRyID0ga2NhbGxvYyhudW0sIHNpemVvZihkbWFfYWRkcl90KSwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKLQkJa2ZyZWUoZC0+YnVmX2xpc3QpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlkLT5zdGF0ZSB8PSBEVkJfVVNCX1NUQVRFX1VSQl9CVUY7Ci0KLQlmb3IgKGQtPmJ1Zl9udW0gPSAwOyBkLT5idWZfbnVtIDwgbnVtOyBkLT5idWZfbnVtKyspIHsKLQkJZGViX21lbSgiYWxsb2NhdGluZyBidWZmZXIgJWRcbiIsZC0+YnVmX251bSk7Ci0JCWlmICgoIGQtPmJ1Zl9saXN0W2QtPmJ1Zl9udW1dID0KLQkJCQkJdXNiX2J1ZmZlcl9hbGxvYyhkLT51ZGV2LCBzaXplLCBTTEFCX0FUT01JQywKLQkJCQkJJmQtPmRtYV9hZGRyW2QtPmJ1Zl9udW1dKSApID09IE5VTEwpIHsKLQkJCWRlYl9tZW0oIm5vdCBlbm91Z2ggbWVtb3J5IGZvciB1cmItYnVmZmVyIGFsbG9jYXRpb24uXG4iKTsKLQkJCWR2Yl91c2JfZnJlZV9zdHJlYW1fYnVmZmVycyhkKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWRlYl9tZW0oImJ1ZmZlciAlZDogJXAgKGRtYTogJWxsdSlcbiIsCi0JCQlkLT5idWZfbnVtLCBkLT5idWZfbGlzdFtkLT5idWZfbnVtXSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZC0+ZG1hX2FkZHJbZC0+YnVmX251bV0pOwotCQltZW1zZXQoZC0+YnVmX2xpc3RbZC0+YnVmX251bV0sMCxzaXplKTsKLQl9Ci0JZGViX21lbSgiYWxsb2NhdGlvbiBzdWNjZXNzZnVsXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGR2Yl91c2JfYnVsa191cmJfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCi17Ci0JaW50IGk7Ci0KLQlpZiAoKGkgPSBkdmJfdXNiX2FsbG9jYXRlX3N0cmVhbV9idWZmZXJzKGQsZC0+cHJvcHMudXJiLmNvdW50LAotCQkJCQlkLT5wcm9wcy51cmIudS5idWxrLmJ1ZmZlcnNpemUpKSA8IDApCi0JCXJldHVybiBpOwotCi0JLyogYWxsb2NhdGUgdGhlIFVSQnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMudXJiLmNvdW50OyBpKyspIHsKLQkJaWYgKChkLT51cmJfbGlzdFtpXSA9IHVzYl9hbGxvY191cmIoMCxHRlBfQVRPTUlDKSkgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCXVzYl9maWxsX2J1bGtfdXJiKCBkLT51cmJfbGlzdFtpXSwgZC0+dWRldiwKLQkJCQl1c2JfcmN2YnVsa3BpcGUoZC0+dWRldixkLT5wcm9wcy51cmIuZW5kcG9pbnQpLAotCQkJCWQtPmJ1Zl9saXN0W2ldLAotCQkJCWQtPnByb3BzLnVyYi51LmJ1bGsuYnVmZmVyc2l6ZSwKLQkJCQlkdmJfdXNiX3VyYl9jb21wbGV0ZSwgZCk7Ci0KLQkJZC0+dXJiX2xpc3RbaV0tPnRyYW5zZmVyX2ZsYWdzID0gMDsKLQkJZC0+dXJic19pbml0aWFsaXplZCsrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkdmJfdXNiX2lzb2NfdXJiX2luaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQotewotCWludCBpLGo7Ci0KLQlpZiAoKGkgPSBkdmJfdXNiX2FsbG9jYXRlX3N0cmVhbV9idWZmZXJzKGQsZC0+cHJvcHMudXJiLmNvdW50LAotCQkJCQlkLT5wcm9wcy51cmIudS5pc29jLmZyYW1lc2l6ZSpkLT5wcm9wcy51cmIudS5pc29jLmZyYW1lc3BlcnVyYikpIDwgMCkKLQkJcmV0dXJuIGk7Ci0KLQkvKiBhbGxvY2F0ZSB0aGUgVVJCcyAqLwotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy51cmIuY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgdXJiICp1cmI7Ci0JCWludCBmcmFtZV9vZmZzZXQgPSAwOwotCQlpZiAoKGQtPnVyYl9saXN0W2ldID0KLQkJCQkJdXNiX2FsbG9jX3VyYihkLT5wcm9wcy51cmIudS5pc29jLmZyYW1lc3BlcnVyYixHRlBfQVRPTUlDKSkgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCXVyYiA9IGQtPnVyYl9saXN0W2ldOwotCi0JCXVyYi0+ZGV2ID0gZC0+dWRldjsKLQkJdXJiLT5jb250ZXh0ID0gZDsKLQkJdXJiLT5jb21wbGV0ZSA9IGR2Yl91c2JfdXJiX2NvbXBsZXRlOwotCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZC0+dWRldixkLT5wcm9wcy51cmIuZW5kcG9pbnQpOwotCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0JCXVyYi0+aW50ZXJ2YWwgPSBkLT5wcm9wcy51cmIudS5pc29jLmludGVydmFsOwotCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gZC0+cHJvcHMudXJiLnUuaXNvYy5mcmFtZXNwZXJ1cmI7Ci0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGQtPmJ1Zl9zaXplOwotCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGQtPmJ1Zl9saXN0W2ldOwotCQl1cmItPnRyYW5zZmVyX2RtYSA9IGQtPmRtYV9hZGRyW2ldOwotCi0JCWZvciAoaiA9IDA7IGogPCBkLT5wcm9wcy51cmIudS5pc29jLmZyYW1lc3BlcnVyYjsgaisrKSB7Ci0JCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGZyYW1lX29mZnNldDsKLQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gZC0+cHJvcHMudXJiLnUuaXNvYy5mcmFtZXNpemU7Ci0JCQlmcmFtZV9vZmZzZXQgKz0gZC0+cHJvcHMudXJiLnUuaXNvYy5mcmFtZXNpemU7Ci0JCX0KLQotCQlkLT51cmJzX2luaXRpYWxpemVkKys7Ci0JfQotCXJldHVybiAwOwotCi19Ci0KLWludCBkdmJfdXNiX3VyYl9pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKLXsKLQkvKgotCSAqIHdoZW4gcmVsb2FkaW5nIHRoZSBkcml2ZXIgdy9vIHJlcGx1Z2dpbmcgdGhlIGRldmljZQotCSAqIHNvbWV0aW1lcyBhIHRpbWVvdXQgb2NjdXJlcywgdGhpcyBoZWxwcwotCSAqLwotCWlmIChkLT5wcm9wcy5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCAhPSAwKSB7Ci0JCXVzYl9jbGVhcl9oYWx0KGQtPnVkZXYsdXNiX3NuZGJ1bGtwaXBlKGQtPnVkZXYsZC0+cHJvcHMuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQpKTsKLQkJdXNiX2NsZWFyX2hhbHQoZC0+dWRldix1c2JfcmN2YnVsa3BpcGUoZC0+dWRldixkLT5wcm9wcy5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCkpOwotCX0KLQl1c2JfY2xlYXJfaGFsdChkLT51ZGV2LHVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LGQtPnByb3BzLnVyYi5lbmRwb2ludCkpOwotCi0JLyogYWxsb2NhdGUgdGhlIGFycmF5IGZvciB0aGUgZGF0YSB0cmFuc2ZlciBVUkJzICovCi0JZC0+dXJiX2xpc3QgPSBremFsbG9jKGQtPnByb3BzLnVyYi5jb3VudCAqIHNpemVvZihzdHJ1Y3QgdXJiICopLEdGUF9LRVJORUwpOwotCWlmIChkLT51cmJfbGlzdCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlkLT5zdGF0ZSB8PSBEVkJfVVNCX1NUQVRFX1VSQl9MSVNUOwotCi0Jc3dpdGNoIChkLT5wcm9wcy51cmIudHlwZSkgewotCQljYXNlIERWQl9VU0JfQlVMSzoKLQkJCXJldHVybiBkdmJfdXNiX2J1bGtfdXJiX2luaXQoZCk7Ci0JCWNhc2UgRFZCX1VTQl9JU09DOgotCQkJcmV0dXJuIGR2Yl91c2JfaXNvY191cmJfaW5pdChkKTsKLQkJZGVmYXVsdDoKLQkJCWVycigidW5rb3duIFVSQi10eXBlIGZvciBkYXRhIHRyYW5zZmVyLiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQotCi1pbnQgZHZiX3VzYl91cmJfZXhpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCi17Ci0JaW50IGk7Ci0KLQlkdmJfdXNiX3VyYl9raWxsKGQpOwotCi0JaWYgKGQtPnN0YXRlICYgRFZCX1VTQl9TVEFURV9VUkJfTElTVCkgewotCQlmb3IgKGkgPSAwOyBpIDwgZC0+dXJic19pbml0aWFsaXplZDsgaSsrKSB7Ci0JCQlpZiAoZC0+dXJiX2xpc3RbaV0gIT0gTlVMTCkgewotCQkJCWRlYl9tZW0oImZyZWVpbmcgVVJCIG5vLiAlZC5cbiIsaSk7Ci0JCQkJLyogZnJlZSB0aGUgVVJCcyAqLwotCQkJCXVzYl9mcmVlX3VyYihkLT51cmJfbGlzdFtpXSk7Ci0JCQl9Ci0JCX0KLQkJZC0+dXJic19pbml0aWFsaXplZCA9IDA7Ci0JCS8qIGZyZWUgdGhlIHVyYiBhcnJheSAqLwotCQlrZnJlZShkLT51cmJfbGlzdCk7Ci0JCWQtPnN0YXRlICY9IH5EVkJfVVNCX1NUQVRFX1VSQl9MSVNUOwotCX0KLQotCWR2Yl91c2JfZnJlZV9zdHJlYW1fYnVmZmVycyhkKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdXNiX3VyYl9leGl0KCZhZGFwLT5zdHJlYW0pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaAppbmRleCA5N2Y4ZWE5Li4zNzZjNDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaApAQCAtMSw5ICsxLDExIEBACiAvKiBkdmItdXNiLmggaXMgcGFydCBvZiB0aGUgRFZCIFVTQiBsaWJyYXJ5LgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC01IFBhdHJpY2sgQm9ldHRjaGVyIChwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlKQorICogQ29weXJpZ2h0IChDKSAyMDA0LTYgUGF0cmljayBCb2V0dGNoZXIgKHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGUpCiAgKiBzZWUgZHZiLXVzYi1pbml0LmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KICAqCiAgKiB0aGUgaGVhZGVyZmlsZSwgYWxsIGR2Yi11c2ItZHJpdmVycyBoYXZlIHRvIGluY2x1ZGUuCisgKgorICogVE9ETzogY2xlYW4tdXAgdGhlIHN0cnVjdHVyZXMgZm9yIHVudXNlZCBmaWVsZHMgYW5kIHVwZGF0ZSB0aGUgY29tbWVudHMKICAqLwogI2lmbmRlZiBfX0RWQl9VU0JfSF9fCiAjZGVmaW5lIF9fRFZCX1VTQl9IX18KQEAgLTg0LDM2ICs4Niw4NCBAQAogfTsKIAogc3RydWN0IGR2Yl91c2JfZGV2aWNlOworc3RydWN0IGR2Yl91c2JfYWRhcHRlcjsKK3N0cnVjdCB1c2JfZGF0YV9zdHJlYW07CiAKIC8qKgotICogc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyAtIHByb3BlcnRpZXMgb2YgYSBkdmItdXNiLWRldmljZQorICogUHJvcGVydGllcyBvZiBVU0Igc3RyZWFtaW5nIC0gVE9ETyB0aGlzIHN0cnVjdHVyZSBzaG91bGQgYmUgc29tZXdoZXJlIGVsc2UKKyAqIGRlc2NyaWJlcyB0aGUga2luZCBvZiBVU0IgdHJhbnNmZXIgdXNlZCBmb3IgZGF0YS1zdHJlYW1pbmcuCisgKiAgKEJVTEsgb3IgSVNPQykKKyAqLworc3RydWN0IHVzYl9kYXRhX3N0cmVhbV9wcm9wZXJ0aWVzIHsKKyNkZWZpbmUgVVNCX0JVTEsgIDEKKyNkZWZpbmUgVVNCX0lTT0MgIDIKKwlpbnQgdHlwZTsKKwlpbnQgY291bnQ7CisJaW50IGVuZHBvaW50OworCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJaW50IGJ1ZmZlcnNpemU7IC8qIHBlciBVUkIgKi8KKwkJfSBidWxrOworCQlzdHJ1Y3QgeworCQkJaW50IGZyYW1lc3BlcnVyYjsKKwkJCWludCBmcmFtZXNpemU7CisJCQlpbnQgaW50ZXJ2YWw7CisJCX0gaXNvYzsKKwl9IHU7Cit9OworCisvKioKKyAqIHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXJfcHJvcGVydGllcyAtIHByb3BlcnRpZXMgb2YgYSBkdmItdXNiLWFkYXB0ZXIuCisgKiAgICBBIERWQi1VU0ItQWRhcHRlciBpcyBiYXNpY2FsbHkgYSBkdmJfYWRhcHRlciB3aGljaCBpcyBwcmVzZW50IG9uIGEgVVNCLWRldmljZS4KICAqIEBjYXBzOiBjYXBhYmlsaXRpZXMgb2YgdGhlIERWQiBVU0IgZGV2aWNlLgogICogQHBpZF9maWx0ZXJfY291bnQ6IG51bWJlciBvZiBQSUQgZmlsdGVyIHBvc2l0aW9uIGluIHRoZSBvcHRpb25hbCBoYXJkd2FyZQogICogIFBJRC1maWx0ZXIuCi0gKgorICogQHN0cmVhbWluZ19jcnRsOiBjYWxsZWQgdG8gc3RhcnQgYW5kIHN0b3AgdGhlIE1QRUcyLVRTIHN0cmVhbWluZyBvZiB0aGUKKyAqICBkZXZpY2UgKG5vdCBVUkIgc3VibWl0dGluZy9raWxsaW5nKS4KKyAqIEBwaWRfZmlsdGVyX2N0cmw6IGNhbGxlZCB0byBlbi9kaXNhYmxlIHRoZSBQSUQgZmlsdGVyLCBpZiBhbnkuCisgKiBAcGlkX2ZpbHRlcjogY2FsbGVkIHRvIHNldC91bnNldCBhIFBJRCBmb3IgZmlsdGVyaW5nLgorICogQGZyb250ZW5kX2F0dGFjaDogY2FsbGVkIHRvIGF0dGFjaCB0aGUgcG9zc2libGUgZnJvbnRlbmRzIChmaWxsIGZlLWZpZWxkCisgKiAgb2Ygc3RydWN0IGR2Yl91c2JfZGV2aWNlKS4KKyAqIEB0dW5lcl9hdHRhY2g6IGNhbGxlZCB0byBhdHRhY2ggdGhlIGNvcnJlY3QgdHVuZXIgYW5kIHRvIGZpbGwgcGxsX2FkZHIsCisgKiAgcGxsX2Rlc2MgYW5kIHBsbF9pbml0X2J1ZiBvZiBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UpLgorICogQHN0cmVhbTogY29uZmlndXJhdGlvbiBvZiB0aGUgVVNCIHN0cmVhbWluZworICovCitzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyX3Byb3BlcnRpZXMgeworI2RlZmluZSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIERWQl9VU0JfQURBUF9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGIDB4MDIKKyNkZWZpbmUgRFZCX1VTQl9BREFQX05FRURfUElEX0ZJTFRFUklORyAgICAgICAgICAgMHgwNAorI2RlZmluZSBEVkJfVVNCX0FEQVBfUkVDRUlWRVNfMjA0X0JZVEVfVFMgICAgICAgICAweDA4CisJaW50IGNhcHM7CisJaW50IHBpZF9maWx0ZXJfY291bnQ7CisKKwlpbnQgKCpzdHJlYW1pbmdfY3RybCkgIChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICosIGludCk7CisJaW50ICgqcGlkX2ZpbHRlcl9jdHJsKSAoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqLCBpbnQpOworCWludCAoKnBpZF9maWx0ZXIpICAgICAgKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKiwgaW50LCB1MTYsIGludCk7CisKKwlpbnQgKCpmcm9udGVuZF9hdHRhY2gpIChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICopOworCWludCAoKnR1bmVyX2F0dGFjaCkgICAgKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKik7CisKKwlzdHJ1Y3QgdXNiX2RhdGFfc3RyZWFtX3Byb3BlcnRpZXMgc3RyZWFtOworCisJaW50IHNpemVfb2ZfcHJpdjsKK307CisKKy8qKgorICogc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgLSBwcm9wZXJ0aWVzIG9mIGEgZHZiLXVzYi1kZXZpY2UKICAqIEB1c2JfY3RybDogd2hpY2ggVVNCIGRldmljZS1zaWRlIGNvbnRyb2xsZXIgaXMgaW4gdXNlLiBOZWVkZWQgZm9yIGZpcm13YXJlCiAgKiAgZG93bmxvYWQuCiAgKiBAZmlybXdhcmU6IG5hbWUgb2YgdGhlIGZpcm13YXJlIGZpbGUuCiAgKiBAZG93bmxvYWRfZmlybXdhcmU6IGNhbGxlZCB0byBkb3dubG9hZCB0aGUgZmlybXdhcmUgd2hlbiB0aGUgdXNiX2N0cmwgaXMKICAqICBERVZJQ0VfU1BFQ0lGSUMuCiAgKiBAbm9fcmVjb25uZWN0OiBkZXZpY2UgZG9lc24ndCBkbyBhIHJlY29ubmVjdCBhZnRlciBkb3dubG9hZGluZyB0aGUgZmlybXdhcmUsCi0gICAgc28gZG8gdGhlIHdhcm0gaW5pdGlhbGl6YXRpb24gcmlnaHQgYWZ0ZXIgaXQKLQorICogIHNvIGRvIHRoZSB3YXJtIGluaXRpYWxpemF0aW9uIHJpZ2h0IGFmdGVyIGl0CisgKgogICogQHNpemVfb2ZfcHJpdjogaG93IG1hbnkgYnl0ZXMgc2hhbGwgYmUgYWxsb2NhdGVkIGZvciB0aGUgcHJpdmF0ZSBmaWVsZAogICogIG9mIHN0cnVjdCBkdmJfdXNiX2RldmljZS4KICAqCiAgKiBAcG93ZXJfY3RybDogY2FsbGVkIHRvIGVuYWJsZS9kaXNhYmxlIHBvd2VyIG9mIHRoZSBkZXZpY2UuCi0gKiBAc3RyZWFtaW5nX2NydGw6IGNhbGxlZCB0byBzdGFydCBhbmQgc3RvcCB0aGUgTVBFRzItVFMgc3RyZWFtaW5nIG9mIHRoZQotICogIGRldmljZSAobm90IFVSQiBzdWJtaXR0aW5nL2tpbGxpbmcpLgotICogQHBpZF9maWx0ZXJfY3RybDogY2FsbGVkIHRvIGVuL2Rpc2FibGUgdGhlIFBJRCBmaWx0ZXIsIGlmIGFueS4KLSAqIEBwaWRfZmlsdGVyOiBjYWxsZWQgdG8gc2V0L3Vuc2V0IGEgUElEIGZvciBmaWx0ZXJpbmcuCi0gKgogICogQHJlYWRfbWFjX2FkZHJlc3M6IGNhbGxlZCB0byByZWFkIHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgZGV2aWNlLgotICoKLSAqIEBmcm9udGVuZF9hdHRhY2g6IGNhbGxlZCB0byBhdHRhY2ggdGhlIHBvc3NpYmxlIGZyb250ZW5kcyAoZmlsbCBmZS1maWVsZAotICogIG9mIHN0cnVjdCBkdmJfdXNiX2RldmljZSkuCi0gKiBAdHVuZXJfYXR0YWNoOiBjYWxsZWQgdG8gYXR0YWNoIHRoZSBjb3JyZWN0IHR1bmVyIGFuZCB0byBmaWxsIHBsbF9hZGRyLAotICogIHBsbF9kZXNjIGFuZCBwbGxfaW5pdF9idWYgb2Ygc3RydWN0IGR2Yl91c2JfZGV2aWNlKS4KICAqIEBpZGVudGlmeV9zdGF0ZTogY2FsbGVkIHRvIGRldGVybWluZSB0aGUgc3RhdGUgKGNvbGQgb3Igd2FybSksIHdoZW4gaXQKICAqICBpcyBub3QgZGlzdGluZ3Vpc2hhYmxlIGJ5IHRoZSBVU0IgSURzLgogICoKQEAgLTEzMCw1MCArMTgwLDQwIEBACiAgKiAgaXMgbm9uLXplcm8sIG9uZSBjYW4gdXNlIGR2Yl91c2JfZ2VuZXJpY19ydyBhbmQgZHZiX3VzYl9nZW5lcmljX3dyaXRlLQogICogIGhlbHBlciBmdW5jdGlvbnMuCiAgKgotICogQHVyYjogZGVzY3JpYmVzIHRoZSBraW5kIG9mIFVTQiB0cmFuc2ZlciB1c2VkIGZvciBNUEVHMi1UUy1zdHJlYW1pbmcuCi0gKiAgKEJVTEsgb3IgSVNPQykKLSAqCiAgKiBAbnVtX2RldmljZV9kZXNjczogbnVtYmVyIG9mIHN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiBpbiBAZGV2aWNlcwogICogQGRldmljZXM6IGFycmF5IG9mIHN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiBjb21wYXRpYmxlcyB3aXRoIHRoZXNlCiAgKiAgcHJvcGVydGllcy4KICAqLwotc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyB7CisjZGVmaW5lIE1BWF9OT19PRl9BREFQVEVSX1BFUl9ERVZJQ0UgMgorc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgewogCi0jZGVmaW5lIERWQl9VU0JfSEFTX1BJRF9GSUxURVIgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIERWQl9VU0JfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiAweDAyCi0jZGVmaW5lIERWQl9VU0JfTkVFRF9QSURfRklMVEVSSU5HICAgICAgICAgICAweDA0Ci0jZGVmaW5lIERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIgICAgICAgICAgICAweDA4CisjZGVmaW5lIERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIgICAgICAgICAgICAweDAxCiAJaW50IGNhcHM7Ci0JaW50IHBpZF9maWx0ZXJfY291bnQ7CiAKICNkZWZpbmUgREVWSUNFX1NQRUNJRklDIDAKICNkZWZpbmUgQ1lQUkVTU19BTjIxMzUgIDEKICNkZWZpbmUgQ1lQUkVTU19BTjIyMzUgIDIKICNkZWZpbmUgQ1lQUkVTU19GWDIgICAgIDMKLQlpbnQgdXNiX2N0cmw7CisJaW50ICAgICAgICB1c2JfY3RybDsKKwlpbnQgICAgICAgICgqZG93bmxvYWRfZmlybXdhcmUpIChzdHJ1Y3QgdXNiX2RldmljZSAqLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKik7CiAJY29uc3QgY2hhciBmaXJtd2FyZVtGSVJNV0FSRV9OQU1FX01BWF07Ci0JaW50ICgqZG93bmxvYWRfZmlybXdhcmUpIChzdHJ1Y3QgdXNiX2RldmljZSAqLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKik7Ci0JaW50IG5vX3JlY29ubmVjdDsKKwlpbnQgICAgICAgIG5vX3JlY29ubmVjdDsKIAogCWludCBzaXplX29mX3ByaXY7CiAKLQlpbnQgKCpwb3dlcl9jdHJsKSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICosIGludCk7Ci0JaW50ICgqc3RyZWFtaW5nX2N0cmwpIChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiwgaW50KTsKLQlpbnQgKCpwaWRfZmlsdGVyX2N0cmwpIChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiwgaW50KTsKLQlpbnQgKCpwaWRfZmlsdGVyKSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICosIGludCwgdTE2LCBpbnQpOworCWludCBudW1fYWRhcHRlcnM7CisJc3RydWN0IGR2Yl91c2JfYWRhcHRlcl9wcm9wZXJ0aWVzIGFkYXB0ZXJbTUFYX05PX09GX0FEQVBURVJfUEVSX0RFVklDRV07CiAKKwlpbnQgKCpwb3dlcl9jdHJsKSAgICAgICAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICosIGludCk7CiAJaW50ICgqcmVhZF9tYWNfYWRkcmVzcykgKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqLCB1OCBbXSk7Ci0JaW50ICgqZnJvbnRlbmRfYXR0YWNoKSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopOwotCWludCAoKnR1bmVyX2F0dGFjaCkgKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKTsKLQotCWludCAoKmlkZW50aWZ5X3N0YXRlKSAoc3RydWN0IHVzYl9kZXZpY2UgKiwgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyAqLAorCWludCAoKmlkZW50aWZ5X3N0YXRlKSAgIChzdHJ1Y3QgdXNiX2RldmljZSAqLCBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqLAogCQkJc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uICoqLCBpbnQgKik7CiAKIC8qIHJlbW90ZSBjb250cm9sIHByb3BlcnRpZXMgKi8KICNkZWZpbmUgUkVNT1RFX05PX0tFWV9QUkVTU0VEICAgICAgMHgwMAogI2RlZmluZSBSRU1PVEVfS0VZX1BSRVNTRUQgICAgICAgICAweDAxCiAjZGVmaW5lIFJFTU9URV9LRVlfUkVQRUFUICAgICAgICAgIDB4MDIKLQlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKnJjX2tleV9tYXA7CisJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICAqcmNfa2V5X21hcDsKIAlpbnQgcmNfa2V5X21hcF9zaXplOwogCWludCAoKnJjX3F1ZXJ5KSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICosIHUzMiAqLCBpbnQgKik7CiAJaW50IHJjX2ludGVydmFsOwpAQCAtMTgyLDQwICsyMjIsMTIgQEAKIAogCWludCBnZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludDsKIAotCXN0cnVjdCB7Ci0jZGVmaW5lIERWQl9VU0JfQlVMSyAgMQotI2RlZmluZSBEVkJfVVNCX0lTT0MgIDIKLQkJaW50IHR5cGU7Ci0JCWludCBjb3VudDsKLQkJaW50IGVuZHBvaW50OwotCi0JCXVuaW9uIHsKLQkJCXN0cnVjdCB7Ci0JCQkJaW50IGJ1ZmZlcnNpemU7IC8qIHBlciBVUkIgKi8KLQkJCX0gYnVsazsKLQkJCXN0cnVjdCB7Ci0JCQkJaW50IGZyYW1lc3BlcnVyYjsKLQkJCQlpbnQgZnJhbWVzaXplOwotCQkJCWludCBpbnRlcnZhbDsKLQkJCX0gaXNvYzsKLQkJfSB1OwotCX0gdXJiOwotCiAJaW50IG51bV9kZXZpY2VfZGVzY3M7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uIGRldmljZXNbOV07CiB9OwogCi0KIC8qKgotICogc3RydWN0IGR2Yl91c2JfZGV2aWNlIC0gb2JqZWN0IG9mIGEgRFZCIFVTQiBkZXZpY2UKLSAqIEBwcm9wczogY29weSBvZiB0aGUgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyB0aGlzIGRldmljZSBiZWxvbmdzIHRvLgotICogQGRlc2M6IHBvaW50ZXIgdG8gdGhlIGRldmljZSdzIHN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbi4KLSAqIEBzdGF0ZTogaW5pdGlhbGl6YXRpb24gYW5kIHJ1bnRpbWUgc3RhdGUgb2YgdGhlIGRldmljZS4KLSAqCi0gKiBAdWRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlJ3Mgc3RydWN0IHVzYl9kZXZpY2UuCi0gKiBAdXJiX2xpc3Q6IGFycmF5IG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJ1Y3QgdXJiIGZvciB0aGUgTVBFRzItVFMtCi0gKiAgc3RyZWFtaW5nLgotICoKKyAqIHN0cnVjdCB1c2JfZGF0YV9zdHJlYW0gLSBnZW5lcmljIG9iamVjdCBvZiBhbiBVU0Igc3RyZWFtCiAgKiBAYnVmX251bTogbnVtYmVyIG9mIGJ1ZmZlciBhbGxvY2F0ZWQuCiAgKiBAYnVmX3NpemU6IHNpemUgb2YgZWFjaCBidWZmZXIgaW4gYnVmX2xpc3QuCiAgKiBAYnVmX2xpc3Q6IGFycmF5IGNvbnRhaW5pbmcgYWxsIGFsbG9jYXRlIGJ1ZmZlcnMgZm9yIHN0cmVhbWluZy4KQEAgLTIyMywxOCArMjM1LDQwIEBACiAgKgogICogQHVyYnNfaW5pdGlhbGl6ZWQ6IG51bWJlciBvZiBVUkJzIGluaXRpYWxpemVkLgogICogQHVyYnNfc3VibWl0dGVkOiBudW1iZXIgb2YgVVJCcyBzdWJtaXR0ZWQuCisgKi8KKyNkZWZpbmUgTUFYX05PX1VSQlNfRk9SX0RBVEFfU1RSRUFNIDEwCitzdHJ1Y3QgdXNiX2RhdGFfc3RyZWFtIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAgICAgICAgICAgKnVkZXY7CisJc3RydWN0IHVzYl9kYXRhX3N0cmVhbV9wcm9wZXJ0aWVzICBwcm9wczsKKworI2RlZmluZSBVU0JfU1RBVEVfSU5JVCAgICAweDAwCisjZGVmaW5lIFVTQl9TVEFURV9VUkJfQlVGIDB4MDEKKwlpbnQgc3RhdGU7CisKKwl2b2lkICgqY29tcGxldGUpIChzdHJ1Y3QgdXNiX2RhdGFfc3RyZWFtICosIHU4ICosIHNpemVfdCk7CisKKwlzdHJ1Y3QgdXJiICAgICp1cmJfbGlzdFtNQVhfTk9fVVJCU19GT1JfREFUQV9TVFJFQU1dOworCWludCAgICAgICAgICAgIGJ1Zl9udW07CisJdW5zaWduZWQgbG9uZyAgYnVmX3NpemU7CisJdTggICAgICAgICAgICAqYnVmX2xpc3RbTUFYX05PX1VSQlNfRk9SX0RBVEFfU1RSRUFNXTsKKwlkbWFfYWRkcl90ICAgICBkbWFfYWRkcltNQVhfTk9fVVJCU19GT1JfREFUQV9TVFJFQU1dOworCisJaW50IHVyYnNfaW5pdGlhbGl6ZWQ7CisJaW50IHVyYnNfc3VibWl0dGVkOworCisJdm9pZCAqdXNlcl9wcml2OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyIC0gYSBEVkIgYWRhcHRlciBvbiBhIFVTQiBkZXZpY2UKKyAqIEBpZDogaW5kZXggb2YgdGhpcyBhZGFwdGVyIChzdGFydGluZyB3aXRoIDApLgogICoKICAqIEBmZWVkY291bnQ6IG51bWJlciBvZiByZXFlc3RlZCBmZWVkcyAodXNlZCBmb3Igc3RyZWFtaW5nLWFjdGl2YXRpb24pCiAgKiBAcGlkX2ZpbHRlcmluZzogaXMgaGFyZHdhcmUgcGlkX2ZpbHRlcmluZyB1c2VkIG9yIG5vdC4KICAqCi0gKiBAdXNiX211dGV4OiBzZW1hcGhvcmUgb2YgVVNCIGNvbnRyb2wgbWVzc2FnZXMgKHJlYWRpbmcgbmVlZHMgdHdvIG1lc3NhZ2VzKQotICogQGkyY19tdXRleDogc2VtYXBob3JlIGZvciBpMmMtdHJhbnNmZXJzCi0gKgotICogQGkyY19hZGFwOiBkZXZpY2UncyBpMmNfYWRhcHRlciBpZiBpdCB1c2VzIEkyQ292ZXJVU0IKICAqIEBwbGxfYWRkcjogSTJDIGFkZHJlc3Mgb2YgdGhlIHR1bmVyIGZvciBwcm9ncmFtbWluZwogICogQHBsbF9pbml0OiBhcnJheSBjb250YWluaW5nIHRoZSBpbml0aWFsaXphdGlvbiBidWZmZXIKICAqIEBwbGxfZGVzYzogcG9pbnRlciB0byB0aGUgYXBwcm9wcmlhdGUgc3RydWN0IGR2Yl9wbGxfZGVzYwotICoKICAqIEB0dW5lcl9wYXNzX2N0cmw6IGNhbGxlZCB0byAoZGUpYWN0aXZhdGUgdHVuZXIgcGFzc3RocnUgb2YgdGhlIGRlbW9kIG9yIHRoZSBib2FyZAogICoKICAqIEBkdmJfYWRhcDogZGV2aWNlJ3MgZHZiX2FkYXB0ZXIuCkBAIC0yNDQsOCArMjc4LDYyIEBACiAgKiBAZHZiX2Zyb250ZW5kOiBkZXZpY2UncyBmcm9udGVuZC4KICAqIEBtYXhfZmVlZF9jb3VudDogaG93IG1hbnkgZmVlZHMgY2FuIGJlIGhhbmRsZWQgc2ltdWx0YW5lb3VzbHkgYnkgdGhpcwogICogIGRldmljZQorICoKKyAqIEBmZV9pbml0OiAgcmVyb3V0ZWQgZnJvbnRlbmQtaW5pdCAod2FrZXVwKSBmdW5jdGlvbi4KICAqIEBmZV9zbGVlcDogcmVyb3V0ZWQgZnJvbnRlbmQtc2xlZXAgZnVuY3Rpb24uCi0gKiBAZmVfaW5pdDogcmVyb3V0ZWQgZnJvbnRlbmQtaW5pdCAod2FrZXVwKSBmdW5jdGlvbi4KKyAqCisgKiBAc3RyZWFtOiB0aGUgdXNiIGRhdGEgc3RyZWFtLgorICovCitzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyIHsKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyX3Byb3BlcnRpZXMgcHJvcHM7CisKKyNkZWZpbmUgRFZCX1VTQl9BREFQX1NUQVRFX0lOSVQgMHgwMDAKKyNkZWZpbmUgRFZCX1VTQl9BREFQX1NUQVRFX0RWQiAgMHgwMDEKKwlpbnQgc3RhdGU7CisKKwl1OCAgaWQ7CisKKwlpbnQgZmVlZGNvdW50OworCWludCBwaWRfZmlsdGVyaW5nOworCisJLyogdHVuZXIgcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gKi8KKwl1OCBwbGxfYWRkcjsKKwl1OCBwbGxfaW5pdFs0XTsKKwlzdHJ1Y3QgZHZiX3BsbF9kZXNjICpwbGxfZGVzYzsKKwlpbnQgKCp0dW5lcl9wYXNzX2N0cmwpIChzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGludCwgdTgpOworCisJLyogZHZiICovCisJc3RydWN0IGR2Yl9hZGFwdGVyICAgZHZiX2FkYXA7CisJc3RydWN0IGRteGRldiAgICAgICAgZG14ZGV2OworCXN0cnVjdCBkdmJfZGVtdXggICAgIGRlbXV4OworCXN0cnVjdCBkdmJfbmV0ICAgICAgIGR2Yl9uZXQ7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisJaW50ICAgICAgICAgICAgICAgICAgbWF4X2ZlZWRfY291bnQ7CisKKwlpbnQgKCpmZV9pbml0KSAgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CisJaW50ICgqZmVfc2xlZXApIChzdHJ1Y3QgZHZiX2Zyb250ZW5kICopOworCisJc3RydWN0IHVzYl9kYXRhX3N0cmVhbSBzdHJlYW07CisKKwl2b2lkICpwcml2OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgLSBvYmplY3Qgb2YgYSBEVkIgVVNCIGRldmljZQorICogQHByb3BzOiBjb3B5IG9mIHRoZSBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIHRoaXMgZGV2aWNlIGJlbG9uZ3MgdG8uCisgKiBAZGVzYzogcG9pbnRlciB0byB0aGUgZGV2aWNlJ3Mgc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uLgorICogQHN0YXRlOiBpbml0aWFsaXphdGlvbiBhbmQgcnVudGltZSBzdGF0ZSBvZiB0aGUgZGV2aWNlLgorICoKKyAqIEBwb3dlcmVkOiBpbmRpY2F0ZWQgd2hldGhlciB0aGUgZGV2aWNlIGlzIHBvd2VyIG9yIG5vdC4KKyAqICBQb3dlcmVkIGlzIGluL2RlY3JlbWVudGVkIGZvciBlYWNoIGNhbGwgdG8gbW9kaWZ5IHRoZSBzdGF0ZS4KKyAqIEB1ZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UncyBzdHJ1Y3QgdXNiX2RldmljZS4KKyAqCisgKiBAdXNiX211dGV4OiBzZW1hcGhvcmUgb2YgVVNCIGNvbnRyb2wgbWVzc2FnZXMgKHJlYWRpbmcgbmVlZHMgdHdvIG1lc3NhZ2VzKQorICogQGkyY19tdXRleDogc2VtYXBob3JlIGZvciBpMmMtdHJhbnNmZXJzCisgKgorICogQGkyY19hZGFwOiBkZXZpY2UncyBpMmNfYWRhcHRlciBpZiBpdCB1c2VzIEkyQ292ZXJVU0IKKyAqCiAgKiBAcmNfaW5wdXRfZGV2OiBpbnB1dCBkZXZpY2UgZm9yIHRoZSByZW1vdGUgY29udHJvbC4KICAqIEByY19xdWVyeV93b3JrOiBzdHJ1Y3Qgd29ya19zdHJ1Y3QgZnJlcXVlbnQgcmMgcXVlcmllcwogICogQGxhc3RfZXZlbnQ6IGxhc3QgdHJpZ2dlcmVkIGV2ZW50CkBAIC0yNTUsMzIgKzM0MywxOCBAQAogICogIGluIHNpemVfb2ZfcHJpdiBvZiBkdmJfdXNiX3Byb3BlcnRpZXMpLgogICovCiBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgewotCXN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgcHJvcHM7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgcHJvcHM7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uICpkZXNjOwogCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKICNkZWZpbmUgRFZCX1VTQl9TVEFURV9JTklUICAgICAgICAweDAwMAotI2RlZmluZSBEVkJfVVNCX1NUQVRFX1VSQl9MSVNUICAgIDB4MDAxCi0jZGVmaW5lIERWQl9VU0JfU1RBVEVfVVJCX0JVRiAgICAgMHgwMDIKLSNkZWZpbmUgRFZCX1VTQl9TVEFURV9EVkIgICAgICAgICAweDAwNAotI2RlZmluZSBEVkJfVVNCX1NUQVRFX0kyQyAgICAgICAgIDB4MDA4Ci0jZGVmaW5lIERWQl9VU0JfU1RBVEVfUkVNT1RFICAgICAgMHgwMTAKLSNkZWZpbmUgRFZCX1VTQl9TVEFURV9VUkJfU1VCTUlUICAweDAyMAorI2RlZmluZSBEVkJfVVNCX1NUQVRFX0kyQyAgICAgICAgIDB4MDAxCisjZGVmaW5lIERWQl9VU0JfU1RBVEVfRFZCICAgICAgICAgMHgwMDIKKyNkZWZpbmUgRFZCX1VTQl9TVEFURV9SRU1PVEUgICAgICAweDAwNAogCWludCBzdGF0ZTsKIAotCS8qIHVzYiAqLwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXN0cnVjdCB1cmIgKip1cmJfbGlzdDsKLQotCWludCBidWZfbnVtOwotCXVuc2lnbmVkIGxvbmcgYnVmX3NpemU7Ci0JdTggKipidWZfbGlzdDsKLQlkbWFfYWRkcl90ICpkbWFfYWRkcjsKLQotCWludCB1cmJzX2luaXRpYWxpemVkOwotCWludCB1cmJzX3N1Ym1pdHRlZDsKLQotCWludCBmZWVkY291bnQ7Ci0JaW50IHBpZF9maWx0ZXJpbmc7CisJaW50IHBvd2VyZWQ7CiAKIAkvKiBsb2NraW5nICovCiAJc3RydWN0IG11dGV4IHVzYl9tdXRleDsKQEAgLTI4OSwyMiArMzYzLDggQEAKIAlzdHJ1Y3QgbXV0ZXggaTJjX211dGV4OwogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKIAotCS8qIHR1bmVyIHByb2dyYW1taW5nIGluZm9ybWF0aW9uICovCi0JdTggcGxsX2FkZHI7Ci0JdTggcGxsX2luaXRbNF07Ci0Jc3RydWN0IGR2Yl9wbGxfZGVzYyAqcGxsX2Rlc2M7Ci0JaW50ICgqdHVuZXJfcGFzc19jdHJsKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGludCwgdTgpOwotCi0JLyogZHZiICovCi0Jc3RydWN0IGR2Yl9hZGFwdGVyIGR2Yl9hZGFwOwotCXN0cnVjdCBkbXhkZXYgZG14ZGV2OwotCXN0cnVjdCBkdmJfZGVtdXggZGVtdXg7Ci0Jc3RydWN0IGR2Yl9uZXQgZHZiX25ldDsKLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZTsKLQlpbnQgbWF4X2ZlZWRfY291bnQ7Ci0KLQlpbnQgKCpmZV9zbGVlcCkgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7Ci0JaW50ICgqZmVfaW5pdCkgIChzdHJ1Y3QgZHZiX2Zyb250ZW5kICopOworCWludCAgICAgICAgICAgICAgICAgICAgbnVtX2FkYXB0ZXJzX2luaXRpYWxpemVkOworCXN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgYWRhcHRlcltNQVhfTk9fT0ZfQURBUFRFUl9QRVJfREVWSUNFXTsKIAogCS8qIHJlbW90ZSBjb250cm9sICovCiAJc3RydWN0IGlucHV0X2RldiAqcmNfaW5wdXRfZGV2OwpAQCAtMzE4LDcgKzM3OCw3IEBACiAJdm9pZCAqcHJpdjsKIH07CiAKLWV4dGVybiBpbnQgZHZiX3VzYl9kZXZpY2VfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqLCBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzICosIHN0cnVjdCBtb2R1bGUgKiwgc3RydWN0IGR2Yl91c2JfZGV2aWNlICoqKTsKK2V4dGVybiBpbnQgZHZiX3VzYl9kZXZpY2VfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqLCBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqLCBzdHJ1Y3QgbW9kdWxlICosIHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKik7CiBleHRlcm4gdm9pZCBkdmJfdXNiX2RldmljZV9leGl0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICopOwogCiAvKiB0aGUgZ2VuZXJpYyByZWFkL3dyaXRlIG1ldGhvZCBmb3IgZGV2aWNlIGNvbnRyb2wgKi8KQEAgLTM0Miw1ICs0MDIsNyBAQAogCXU4IGNoazsKIH07CiBleHRlcm4gaW50IHVzYl9jeXByZXNzX2xvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGludCB0eXBlKTsKK2V4dGVybiBpbnQgZHZiX3VzYl9nZXRfaGV4bGluZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCBzdHJ1Y3QgaGV4bGluZSAqaHgsIGludCAqcG9zKTsKKwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay5jCmluZGV4IDlhOThmM2YuLjczNzVlYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2suYwpAQCAtMTYxLDE5ICsxNjEsMTggQEAKIH0KIAogCi1zdGF0aWMgaW50IGdwOHBza19zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBvbm9mZikKK3N0YXRpYyBpbnQgZ3A4cHNrX3N0cmVhbWluZ19jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZikKIHsKLQlyZXR1cm4gZ3A4cHNrX3VzYl9vdXRfb3AoZCwgQVJNX1RSQU5TRkVSLCBvbm9mZiwgMCAsIE5VTEwsIDApOworCXJldHVybiBncDhwc2tfdXNiX291dF9vcChhZGFwLT5kZXYsIEFSTV9UUkFOU0ZFUiwgb25vZmYsIDAgLCBOVUxMLCAwKTsKIH0KIAotc3RhdGljIGludCBncDhwc2tfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3N0YXRpYyBpbnQgZ3A4cHNrX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewotCWQtPmZlID0gZ3A4cHNrX2ZlX2F0dGFjaChkKTsKLQorCWFkYXAtPmZlID0gZ3A4cHNrX2ZlX2F0dGFjaChhZGFwLT5kZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBncDhwc2tfcHJvcGVydGllczsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBncDhwc2tfcHJvcGVydGllczsKIAogc3RhdGljIGludCBncDhwc2tfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC0xODgsMjAgKzE4NywxOCBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBncDhwc2tfdXNiX3RhYmxlKTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgZ3A4cHNrX3Byb3BlcnRpZXMgPSB7Ci0JLmNhcHMgPSAwLAotCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZ3A4cHNrX3Byb3BlcnRpZXMgPSB7CiAJLnVzYl9jdHJsID0gQ1lQUkVTU19GWDIsCiAJLmZpcm13YXJlID0gImR2Yi11c2ItZ3A4cHNrLTAxLmZ3IiwKIAorCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQl7CiAJLnN0cmVhbWluZ19jdHJsICAgPSBncDhwc2tfc3RyZWFtaW5nX2N0cmwsCi0JLnBvd2VyX2N0cmwgICAgICAgPSBncDhwc2tfcG93ZXJfY3RybCwKIAkuZnJvbnRlbmRfYXR0YWNoICA9IGdwOHBza19mcm9udGVuZF9hdHRhY2gsCi0KLQkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAogCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KLQkudXJiID0gewotCQkudHlwZSA9IERWQl9VU0JfQlVMSywKKwkJCS5zdHJlYW0gPSB7CisJCQkJLnR5cGUgPSBVU0JfQlVMSywKIAkJLmNvdW50ID0gNywKIAkJLmVuZHBvaW50ID0gMHg4MiwKIAkJLnUgPSB7CkBAIC0yMTAsNiArMjA3LDExIEBACiAJCQl9CiAJCX0KIAl9LAorCQl9CisJfSwKKwkucG93ZXJfY3RybCAgICAgICA9IGdwOHBza19wb3dlcl9jdHJsLAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKQEAgLTIxNyw3ICsyMTksNyBAQAogCQkgIC5jb2xkX2lkcyA9IHsgJmdwOHBza191c2JfdGFibGVbMF0sIE5VTEwgfSwKIAkJICAud2FybV9pZHMgPSB7ICZncDhwc2tfdXNiX3RhYmxlWzFdLCBOVUxMIH0sCiAJCX0sCi0JCXsgMCB9LAorCQl7IE5VTEwgfSwKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMKaW5kZXggNzlmMGEwMi4uYTkyMTliZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ub3ZhLXQtdXNiMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivbm92YS10LXVzYjIuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiB9CiAKIC8qIFVTQiBEcml2ZXIgc3R1ZmYgKi8KLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIG5vdmFfdF9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIG5vdmFfdF9wcm9wZXJ0aWVzOwogCiBzdGF0aWMgaW50IG5vdmFfdF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQpAQCAtMTUxLDIxICsxNTEsNDEgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgbm92YV90X3RhYmxlKTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgbm92YV90X3Byb3BlcnRpZXMgPSB7Ci0JLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGIHwgRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKLQkucGlkX2ZpbHRlcl9jb3VudCA9IDMyLAorc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIG5vdmFfdF9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKIAogCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAogCS5maXJtd2FyZSA9ICJkdmItdXNiLW5vdmEtdC11c2IyLTAyLmZ3IiwKIAotCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWJ1c2Jfc3RhdGUpLAorCS5udW1fYWRhcHRlcnMgICAgID0gMSwKKwkuYWRhcHRlciAgICAgICAgICA9IHsKKwkJeworCQkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKKwkJCS5waWRfZmlsdGVyX2NvdW50ID0gMzIsCiAKIAkuc3RyZWFtaW5nX2N0cmwgICA9IGRpYnVzYjJfMF9zdHJlYW1pbmdfY3RybCwKIAkucGlkX2ZpbHRlciAgICAgICA9IGRpYnVzYl9waWRfZmlsdGVyLAogCS5waWRfZmlsdGVyX2N0cmwgID0gZGlidXNiX3BpZF9maWx0ZXJfY3RybCwKLQkucG93ZXJfY3RybCAgICAgICA9IGRpYnVzYjJfMF9wb3dlcl9jdHJsLAogCS5mcm9udGVuZF9hdHRhY2ggID0gZGlidXNiX2RpYjMwMDBtY19mcm9udGVuZF9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICAgPSBkaWJ1c2JfZGliMzAwMG1jX3R1bmVyX2F0dGFjaCwKKworCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS5zdHJlYW0gPSB7CisJCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJLmNvdW50ID0gNywKKwkJLmVuZHBvaW50ID0gMHgwNiwKKwkJLnUgPSB7CisJCQkuYnVsayA9IHsKKwkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCisJCQl9CisJCX0KKwl9LAorCisJCQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGlidXNiX3N0YXRlKSwKKwkJfQorCX0sCisKKwkucG93ZXJfY3RybCAgICAgICA9IGRpYnVzYjJfMF9wb3dlcl9jdHJsLAogCS5yZWFkX21hY19hZGRyZXNzID0gbm92YV90X3JlYWRfbWFjX2FkZHJlc3MsCiAKIAkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKQEAgLTE3NiwxNyArMTk2LDYgQEAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZkaWJ1c2JfaTJjX2FsZ28sCiAKIAkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KLQkudXJiID0gewotCQkudHlwZSA9IERWQl9VU0JfQlVMSywKLQkJLmNvdW50ID0gNywKLQkJLmVuZHBvaW50ID0gMHgwNiwKLQkJLnUgPSB7Ci0JCQkuYnVsayA9IHsKLQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCi0JCQl9Ci0JCX0KLQl9LAogCiAJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAogCS5kZXZpY2VzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi91bXQtMDEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3VtdC0wMTAuYwppbmRleCA0MThhMGI3Li5mOTk0MWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3VtdC0wMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3VtdC0wMTAuYwpAQCAtNTAsNyArNTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVtdF9tdDM1Ml9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorc3RhdGljIGludCB1bXRfbXQzNTJfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7CiAJc3RydWN0IG10MzUyX2NvbmZpZyB1bXRfY29uZmlnOwogCkBAIC01OCwyMSArNTgsMjEgQEAKIAl1bXRfY29uZmlnLmRlbW9kX2luaXQgPSB1bXRfbXQzNTJfZGVtb2RfaW5pdDsKIAl1bXRfY29uZmlnLmRlbW9kX2FkZHJlc3MgPSAweGY7CiAKLQlkLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmdW10X2NvbmZpZywgJmQtPmkyY19hZGFwKTsKKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmdW10X2NvbmZpZywgJmFkYXAtPmRldi0+aTJjX2FkYXApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdW10X3R1bmVyX2F0dGFjaCAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorc3RhdGljIGludCB1bXRfdHVuZXJfYXR0YWNoIChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewotCWQtPnBsbF9hZGRyID0gMHg2MTsKLQlkLT5wbGxfZGVzYyA9ICZkdmJfcGxsX3R1YTYwMzQ7Ci0JZC0+ZmUtPm9wcy50dW5lcl9vcHMuY2FsY19yZWdzID0gZHZiX3VzYl90dW5lcl9jYWxjX3JlZ3M7CisJYWRhcC0+cGxsX2FkZHIgPSAweDYxOworCWFkYXAtPnBsbF9kZXNjID0gJmR2Yl9wbGxfdHVhNjAzNDsKKwlhZGFwLT5mZS0+b3BzLnR1bmVyX29wcy5jYWxjX3JlZ3MgPSBkdmJfdXNiX3R1bmVyX2NhbGNfcmVnczsKIAlyZXR1cm4gMDsKIH0KIAogLyogVVNCIERyaXZlciBzdHVmZiAqLwotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgdW10X3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgdW10X3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgdW10X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC05MCwyNSArOTAsMjIgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVtdF90YWJsZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIHVtdF9wcm9wZXJ0aWVzID0geworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHVtdF9wcm9wZXJ0aWVzID0gewogCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKIAogCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAogCS5maXJtd2FyZSA9ICJkdmItdXNiLXVtdC0wMTAtMDIuZnciLAogCi0JLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGRpYnVzYl9zdGF0ZSksCi0KKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJewogCS5zdHJlYW1pbmdfY3RybCAgID0gZGlidXNiMl8wX3N0cmVhbWluZ19jdHJsLAotCS5wb3dlcl9jdHJsICAgICAgID0gZGlidXNiX3Bvd2VyX2N0cmwsCiAJLmZyb250ZW5kX2F0dGFjaCAgPSB1bXRfbXQzNTJfZnJvbnRlbmRfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgID0gdW10X3R1bmVyX2F0dGFjaCwKIAotCS5pMmNfYWxnbyAgICAgICAgID0gJmRpYnVzYl9pMmNfYWxnbywKLQotCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCiAJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwotCS51cmIgPSB7Ci0JCS50eXBlID0gRFZCX1VTQl9CVUxLLAorCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAogCQkuY291bnQgPSAyMCwKIAkJLmVuZHBvaW50ID0gMHgwNiwKIAkJLnUgPSB7CkBAIC0xMTgsNiArMTE1LDE1IEBACiAJCX0KIAl9LAogCisJCQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGlidXNiX3N0YXRlKSwKKwkJfQorCX0sCisJLnBvd2VyX2N0cmwgICAgICAgPSBkaWJ1c2JfcG93ZXJfY3RybCwKKworCS5pMmNfYWxnbyAgICAgICAgID0gJmRpYnVzYl9pMmNfYWxnbywKKworCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCisKIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7CiAJCXsJIkhhbmZ0ZWsgVU1ULTAxMCBEVkItVCBVU0IyLjAiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi91c2ItdXJiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3VzYi11cmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzI4Y2YzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi91c2ItdXJiLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qIHVzYi11cmIuYyBpcyBwYXJ0IG9mIHRoZSBEVkIgVVNCIGxpYnJhcnkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTYgUGF0cmljayBCb2V0dGNoZXIgKHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGUpCisgKiBzZWUgZHZiLXVzYi1pbml0LmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUga2VlcHMgZnVuY3Rpb25zIGZvciBpbml0aWFsaXppbmcgYW5kIGhhbmRsaW5nIHRoZQorICogQlVMSyBhbmQgSVNPQyBVU0IgZGF0YSB0cmFuc2ZlcnMgaW4gYSBnZW5lcmljIHdheS4KKyAqIENhbiBiZSB1c2VkIGZvciBEVkItb25seSBhbmQgYWxzbywgdGhhdCdzIHRoZSBwbGFuLCBmb3IKKyAqIEh5YnJpZCBVU0IgZGV2aWNlcyAoYW5hbG9nIGFuZCBEVkIpLgorICovCisjaW5jbHVkZSAiZHZiLXVzYi1jb21tb24uaCIKKworLyogVVJCIHN0dWZmIGZvciBzdHJlYW1pbmcgKi8KK3N0YXRpYyB2b2lkIHVzYl91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRyZWdzKQoreworCXN0cnVjdCB1c2JfZGF0YV9zdHJlYW0gKnN0cmVhbSA9IHVyYi0+Y29udGV4dDsKKwlpbnQgcHR5cGUgPSB1c2JfcGlwZXR5cGUodXJiLT5waXBlKTsKKwlpbnQgaTsKKwl1OCAqYjsKKworCWRlYl91eGZlcigiJyVzJyB1cmIgY29tcGxldGVkLiBzdGF0dXM6ICVkLCBsZW5ndGg6ICVkLyVkLCBwYWNrX251bTogJWQsIGVycm9yczogJWRcbiIsCisJCXB0eXBlID09IFBJUEVfSVNPQ0hST05PVVMgPyAiaXNvYyIgOiAiYnVsayIsCisJCXVyYi0+c3RhdHVzLHVyYi0+YWN0dWFsX2xlbmd0aCx1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMsdXJiLT5lcnJvcl9jb3VudCk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgMDogICAgICAgICAvKiBzdWNjZXNzICovCisJCWNhc2UgLUVUSU1FRE9VVDogICAgLyogTkFLICovCisJCQlicmVhazsKKwkJY2FzZSAtRUNPTk5SRVNFVDogICAvKiBraWxsICovCisJCWNhc2UgLUVOT0VOVDoKKwkJY2FzZSAtRVNIVVRET1dOOgorCQkJcmV0dXJuOworCQlkZWZhdWx0OiAgICAgICAgLyogZXJyb3IgKi8KKwkJCWRlYl90cygidXJiIGNvbXBsZXRpdGlvbiBlcnJvciAlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJCWJyZWFrOworCX0KKworCWIgPSAodTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3dpdGNoIChwdHlwZSkgeworCQljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisKKwkJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgIT0gMCkKKwkJCQkJZGViX3RzKCJpc28gZnJhbWUgZGVzY3JpcHRvciBoYXMgYW4gZXJyb3I6ICVkXG4iLHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKKwkJCQllbHNlIGlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPiAwKQorCQkJCQlzdHJlYW0tPmNvbXBsZXRlKHN0cmVhbSwgYiArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0LCB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpOworCisJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPSAwOworCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7CisJCQl9CisJCQlkZWJ1Z19kdW1wKGIsMjAsZGViX3V4ZmVyKTsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfQlVMSzoKKwkJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKQorCQkJCXN0cmVhbS0+Y29tcGxldGUoc3RyZWFtLCBiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIoInVua293biBlbmRwb2ludCB0eXBlIGluIGNvbXBsZXRpdGlvbiBoYW5kbGVyLiIpOworCQkJcmV0dXJuOworCX0KKwl1c2Jfc3VibWl0X3VyYih1cmIsR0ZQX0FUT01JQyk7Cit9CisKK2ludCB1c2JfdXJiX2tpbGwoc3RydWN0IHVzYl9kYXRhX3N0cmVhbSAqc3RyZWFtKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBzdHJlYW0tPnVyYnNfc3VibWl0dGVkOyBpKyspIHsKKwkJZGViX3RzKCJraWxsaW5nIFVSQiBuby4gJWQuXG4iLGkpOworCisJCS8qIHN0b3AgdGhlIFVSQiAqLworCQl1c2Jfa2lsbF91cmIoc3RyZWFtLT51cmJfbGlzdFtpXSk7CisJfQorCXN0cmVhbS0+dXJic19zdWJtaXR0ZWQgPSAwOworCXJldHVybiAwOworfQorCitpbnQgdXNiX3VyYl9zdWJtaXQoc3RydWN0IHVzYl9kYXRhX3N0cmVhbSAqc3RyZWFtKQoreworCWludCBpLHJldDsKKwlmb3IgKGkgPSAwOyBpIDwgc3RyZWFtLT51cmJzX2luaXRpYWxpemVkOyBpKyspIHsKKwkJZGViX3RzKCJzdWJtaXR0aW5nIFVSQiBuby4gJWRcbiIsaSk7CisJCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIoc3RyZWFtLT51cmJfbGlzdFtpXSxHRlBfQVRPTUlDKSkpIHsKKwkJCWVycigiY291bGQgbm90IHN1Ym1pdCBVUkIgbm8uICVkIC0gZ2V0IHRoZW0gYWxsIGJhY2siLGkpOworCQkJdXNiX3VyYl9raWxsKHN0cmVhbSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXN0cmVhbS0+dXJic19zdWJtaXR0ZWQrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2ZyZWVfc3RyZWFtX2J1ZmZlcnMoc3RydWN0IHVzYl9kYXRhX3N0cmVhbSAqc3RyZWFtKQoreworCWlmIChzdHJlYW0tPnN0YXRlICYgVVNCX1NUQVRFX1VSQl9CVUYpIHsKKwkJd2hpbGUgKHN0cmVhbS0+YnVmX251bSkgeworCQkJc3RyZWFtLT5idWZfbnVtLS07CisJCQlkZWJfbWVtKCJmcmVlaW5nIGJ1ZmZlciAlZFxuIixzdHJlYW0tPmJ1Zl9udW0pOworCQkJdXNiX2J1ZmZlcl9mcmVlKHN0cmVhbS0+dWRldiwgc3RyZWFtLT5idWZfc2l6ZSwKKwkJCQkJc3RyZWFtLT5idWZfbGlzdFtzdHJlYW0tPmJ1Zl9udW1dLCBzdHJlYW0tPmRtYV9hZGRyW3N0cmVhbS0+YnVmX251bV0pOworCQl9CisJfQorCisJc3RyZWFtLT5zdGF0ZSAmPSB+VVNCX1NUQVRFX1VSQl9CVUY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2JfYWxsb2NhdGVfc3RyZWFtX2J1ZmZlcnMoc3RydWN0IHVzYl9kYXRhX3N0cmVhbSAqc3RyZWFtLCBpbnQgbnVtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RyZWFtLT5idWZfbnVtID0gMDsKKwlzdHJlYW0tPmJ1Zl9zaXplID0gc2l6ZTsKKworCWRlYl9tZW0oImFsbCBpbiBhbGwgSSB3aWxsIHVzZSAlbHUgYnl0ZXMgZm9yIHN0cmVhbWluZ1xuIixudW0qc2l6ZSk7CisKKwlmb3IgKHN0cmVhbS0+YnVmX251bSA9IDA7IHN0cmVhbS0+YnVmX251bSA8IG51bTsgc3RyZWFtLT5idWZfbnVtKyspIHsKKwkJZGViX21lbSgiYWxsb2NhdGluZyBidWZmZXIgJWRcbiIsc3RyZWFtLT5idWZfbnVtKTsKKwkJaWYgKCggc3RyZWFtLT5idWZfbGlzdFtzdHJlYW0tPmJ1Zl9udW1dID0KKwkJCQkJdXNiX2J1ZmZlcl9hbGxvYyhzdHJlYW0tPnVkZXYsIHNpemUsIFNMQUJfQVRPTUlDLAorCQkJCQkmc3RyZWFtLT5kbWFfYWRkcltzdHJlYW0tPmJ1Zl9udW1dKSApID09IE5VTEwpIHsKKwkJCWRlYl9tZW0oIm5vdCBlbm91Z2ggbWVtb3J5IGZvciB1cmItYnVmZmVyIGFsbG9jYXRpb24uXG4iKTsKKwkJCXVzYl9mcmVlX3N0cmVhbV9idWZmZXJzKHN0cmVhbSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlkZWJfbWVtKCJidWZmZXIgJWQ6ICVwIChkbWE6ICV1KVxuIiwKKwkJCXN0cmVhbS0+YnVmX251bSwgc3RyZWFtLT5idWZfbGlzdFtzdHJlYW0tPmJ1Zl9udW1dLCBzdHJlYW0tPmRtYV9hZGRyW3N0cmVhbS0+YnVmX251bV0pOworCQltZW1zZXQoc3RyZWFtLT5idWZfbGlzdFtzdHJlYW0tPmJ1Zl9udW1dLDAsc2l6ZSk7CisJCXN0cmVhbS0+c3RhdGUgfD0gVVNCX1NUQVRFX1VSQl9CVUY7CisJfQorCWRlYl9tZW0oImFsbG9jYXRpb24gc3VjY2Vzc2Z1bFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2JfYnVsa191cmJfaW5pdChzdHJ1Y3QgdXNiX2RhdGFfc3RyZWFtICpzdHJlYW0pCit7CisJaW50IGk7CisKKwlpZiAoKGkgPSB1c2JfYWxsb2NhdGVfc3RyZWFtX2J1ZmZlcnMoc3RyZWFtLHN0cmVhbS0+cHJvcHMuY291bnQsCisJCQkJCXN0cmVhbS0+cHJvcHMudS5idWxrLmJ1ZmZlcnNpemUpKSA8IDApCisJCXJldHVybiBpOworCisJLyogYWxsb2NhdGUgdGhlIFVSQnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3RyZWFtLT5wcm9wcy5jb3VudDsgaSsrKSB7CisJCWlmICgoc3RyZWFtLT51cmJfbGlzdFtpXSA9IHVzYl9hbGxvY191cmIoMCxHRlBfQVRPTUlDKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXVzYl9maWxsX2J1bGtfdXJiKCBzdHJlYW0tPnVyYl9saXN0W2ldLCBzdHJlYW0tPnVkZXYsCisJCQkJdXNiX3JjdmJ1bGtwaXBlKHN0cmVhbS0+dWRldixzdHJlYW0tPnByb3BzLmVuZHBvaW50KSwKKwkJCQlzdHJlYW0tPmJ1Zl9saXN0W2ldLAorCQkJCXN0cmVhbS0+cHJvcHMudS5idWxrLmJ1ZmZlcnNpemUsCisJCQkJdXNiX3VyYl9jb21wbGV0ZSwgc3RyZWFtKTsKKworCQlzdHJlYW0tPnVyYl9saXN0W2ldLT50cmFuc2Zlcl9mbGFncyA9IDA7CisJCXN0cmVhbS0+dXJic19pbml0aWFsaXplZCsrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2JfaXNvY191cmJfaW5pdChzdHJ1Y3QgdXNiX2RhdGFfc3RyZWFtICpzdHJlYW0pCit7CisJaW50IGksajsKKworCWlmICgoaSA9IHVzYl9hbGxvY2F0ZV9zdHJlYW1fYnVmZmVycyhzdHJlYW0sc3RyZWFtLT5wcm9wcy5jb3VudCwKKwkJCQkJc3RyZWFtLT5wcm9wcy51Lmlzb2MuZnJhbWVzaXplKnN0cmVhbS0+cHJvcHMudS5pc29jLmZyYW1lc3BlcnVyYikpIDwgMCkKKwkJcmV0dXJuIGk7CisKKwkvKiBhbGxvY2F0ZSB0aGUgVVJCcyAqLworCWZvciAoaSA9IDA7IGkgPCBzdHJlYW0tPnByb3BzLmNvdW50OyBpKyspIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCQlpbnQgZnJhbWVfb2Zmc2V0ID0gMDsKKwkJaWYgKChzdHJlYW0tPnVyYl9saXN0W2ldID0KKwkJCQkJdXNiX2FsbG9jX3VyYihzdHJlYW0tPnByb3BzLnUuaXNvYy5mcmFtZXNwZXJ1cmIsR0ZQX0FUT01JQykpID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl1cmIgPSBzdHJlYW0tPnVyYl9saXN0W2ldOworCisJCXVyYi0+ZGV2ID0gc3RyZWFtLT51ZGV2OworCQl1cmItPmNvbnRleHQgPSBzdHJlYW07CisJCXVyYi0+Y29tcGxldGUgPSB1c2JfdXJiX2NvbXBsZXRlOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoc3RyZWFtLT51ZGV2LHN0cmVhbS0+cHJvcHMuZW5kcG9pbnQpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCXVyYi0+aW50ZXJ2YWwgPSBzdHJlYW0tPnByb3BzLnUuaXNvYy5pbnRlcnZhbDsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IHN0cmVhbS0+cHJvcHMudS5pc29jLmZyYW1lc3BlcnVyYjsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc3RyZWFtLT5idWZfc2l6ZTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBzdHJlYW0tPmJ1Zl9saXN0W2ldOworCQl1cmItPnRyYW5zZmVyX2RtYSA9IHN0cmVhbS0+ZG1hX2FkZHJbaV07CisKKwkJZm9yIChqID0gMDsgaiA8IHN0cmVhbS0+cHJvcHMudS5pc29jLmZyYW1lc3BlcnVyYjsgaisrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGZyYW1lX29mZnNldDsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gc3RyZWFtLT5wcm9wcy51Lmlzb2MuZnJhbWVzaXplOworCQkJZnJhbWVfb2Zmc2V0ICs9IHN0cmVhbS0+cHJvcHMudS5pc29jLmZyYW1lc2l6ZTsKKwkJfQorCisJCXN0cmVhbS0+dXJic19pbml0aWFsaXplZCsrOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHVzYl91cmJfaW5pdChzdHJ1Y3QgdXNiX2RhdGFfc3RyZWFtICpzdHJlYW0sIHN0cnVjdCB1c2JfZGF0YV9zdHJlYW1fcHJvcGVydGllcyAqcHJvcHMpCit7CisJaWYgKHN0cmVhbSA9PSBOVUxMIHx8IHByb3BzID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KCZzdHJlYW0tPnByb3BzLCBwcm9wcywgc2l6ZW9mKCpwcm9wcykpOworCisJdXNiX2NsZWFyX2hhbHQoc3RyZWFtLT51ZGV2LHVzYl9yY3ZidWxrcGlwZShzdHJlYW0tPnVkZXYsc3RyZWFtLT5wcm9wcy5lbmRwb2ludCkpOworCisJaWYgKHN0cmVhbS0+Y29tcGxldGUgPT0gTlVMTCkgeworCQllcnIoInRoZXJlIGlzIG5vIGRhdGEgY2FsbGJhY2sgLSB0aGlzIGRvZXNuJ3QgbWFrZSBzZW5zZS4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChzdHJlYW0tPnByb3BzLnR5cGUpIHsKKwkJY2FzZSBVU0JfQlVMSzoKKwkJCXJldHVybiB1c2JfYnVsa191cmJfaW5pdChzdHJlYW0pOworCQljYXNlIFVTQl9JU09DOgorCQkJcmV0dXJuIHVzYl9pc29jX3VyYl9pbml0KHN0cmVhbSk7CisJCWRlZmF1bHQ6CisJCQllcnIoInVua293biBVUkItdHlwZSBmb3IgZGF0YSB0cmFuc2Zlci4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworaW50IHVzYl91cmJfZXhpdChzdHJ1Y3QgdXNiX2RhdGFfc3RyZWFtICpzdHJlYW0pCit7CisJaW50IGk7CisKKwl1c2JfdXJiX2tpbGwoc3RyZWFtKTsKKworCWZvciAoaSA9IDA7IGkgPCBzdHJlYW0tPnVyYnNfaW5pdGlhbGl6ZWQ7IGkrKykgeworCQlpZiAoc3RyZWFtLT51cmJfbGlzdFtpXSAhPSBOVUxMKSB7CisJCQlkZWJfbWVtKCJmcmVlaW5nIFVSQiBuby4gJWQuXG4iLGkpOworCQkJLyogZnJlZSB0aGUgVVJCcyAqLworCQkJdXNiX2ZyZWVfdXJiKHN0cmVhbS0+dXJiX2xpc3RbaV0pOworCQl9CisJfQorCXN0cmVhbS0+dXJic19pbml0aWFsaXplZCA9IDA7CisKKwl1c2JfZnJlZV9zdHJlYW1fYnVmZmVycyhzdHJlYW0pOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMngtZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LWZlLmMKaW5kZXggZDRkYTQ5NC4uM2VjYjJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMngtZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC1mZS5jCkBAIC0yNCw2ICsyNCw4IEBACiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmZTsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQ7CiAKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBvcHM7CisKIAlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2U7CiAJZmVfc2VjX3RvbmVfbW9kZV90IHRvbmVfbW9kZTsKIApAQCAtNzIsOSArNzQsNiBAQAogCWVsc2UKIAkJKnN0YXR1cyA9IDA7CiAKLQlkZWJfZmUoInJlYWwgc3RhdGU6ICV4XG4iLCpzdGF0dXMpOwotCSpzdGF0dXMgPSAweDFmOwotCiAJaWYgKCpzdGF0dXMgJiBGRV9IQVNfTE9DSykKIAkJc3QtPnN0YXR1c19jaGVja19pbnRlcnZhbCA9IDEwMDA7CiAJZWxzZQpAQCAtMTcxLDggKzE3MCw2IEBACiAJc3QtPnN0YXR1c19jaGVja19pbnRlcnZhbCA9IDI1MDsKIAlzdC0+bmV4dF9zdGF0dXNfY2hlY2sgPSBqaWZmaWVzOwogCi0JdnA3MDJ4X3VzYl9pbl9vcChzdC0+ZCwgUkVTRVRfVFVORVIsIDAsIDAsIE5VTEwsIDApOwotCW1zbGVlcCgzMCk7CiAJdnA3MDJ4X3VzYl9pbm91dF9vcChzdC0+ZCxjbWQsOCxpYnVmLDEwLDEwMCk7CiAKIAlpZiAoaWJ1ZlsyXSA9PSAwICYmIGlidWZbM10gPT0gMCkKQEAgLTE4Myw2ICsxODAsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB2cDcwMnhfZmVfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdnA3MDJ4X2ZlX3N0YXRlICpzdCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWRlYl9mZSgiJXNcbiIsX19GVU5DVElPTl9fKTsKKwl2cDcwMnhfdXNiX2luX29wKHN0LT5kLCBSRVNFVF9UVU5FUiwgMCwgMCwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnA3MDJ4X2ZlX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWRlYl9mZSgiJXNcbiIsX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB2cDcwMnhfZmVfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAogCQkJCSAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCiB7CkBAIC0xOTMsOCArMjA0LDggQEAKIHN0YXRpYyBpbnQgdnA3MDJ4X2ZlX3NlbmRfZGlzZXFjX21zZyAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCiAJCQkJICAgIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKm0pCiB7Ci0Jc3RydWN0IHZwNzAyeF9mZV9zdGF0ZSAqc3QgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQl1OCBjbWRbOF0saWJ1ZlsxMF07CisJLy9zdHJ1Y3QgdnA3MDJ4X2ZlX3N0YXRlICpzdCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGNtZFs4XTsvLyxpYnVmWzEwXTsKIAltZW1zZXQoY21kLDAsOCk7CiAKIAlkZWJfZmUoIiVzXG4iLF9fRlVOQ1RJT05fXyk7CkBAIC0yMDcsMTIgKzIxOCwxMiBAQAogCW1lbWNweSgmY21kWzNdLCBtLT5tc2csIG0tPm1zZ19sZW4pOwogCWNtZFs3XSA9IHZwNzAyeF9jaGtzdW0oY21kLDAsNyk7CiAKLQl2cDcwMnhfdXNiX2lub3V0X29wKHN0LT5kLGNtZCw4LGlidWYsMTAsMTAwKTsKKy8vCXZwNzAyeF91c2JfaW5vdXRfb3Aoc3QtPmQsY21kLDgsaWJ1ZiwxMCwxMDApOwogCi0JaWYgKGlidWZbMl0gPT0gMCAmJiBpYnVmWzNdID09IDApCi0JCWRlYl9mZSgiZGlzZXFjIGNtZCBmYWlsZWQuXG4iKTsKLQllbHNlCi0JCWRlYl9mZSgiZGlzZXFjIGNtZCBzdWNjZWVkZWQuXG4iKTsKKy8vCWlmIChpYnVmWzJdID09IDAgJiYgaWJ1ZlszXSA9PSAwKQorLy8JCWRlYl9mZSgiZGlzZXFjIGNtZCBmYWlsZWQuXG4iKTsKKy8vCWVsc2UKKy8vCQlkZWJfZmUoImRpc2VxYyBjbWQgc3VjY2VlZGVkLlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMxOCw4ICszMjksOCBAQAogCX0sCiAJLnJlbGVhc2UgPSB2cDcwMnhfZmVfcmVsZWFzZSwKIAotCS5pbml0ID0gTlVMTCwKLQkuc2xlZXAgPSBOVUxMLAorCS5pbml0ICA9IHZwNzAyeF9mZV9pbml0LAorCS5zbGVlcCA9IHZwNzAyeF9mZV9zbGVlcCwKIAogCS5zZXRfZnJvbnRlbmQgPSB2cDcwMnhfZmVfc2V0X2Zyb250ZW5kLAogCS5nZXRfZnJvbnRlbmQgPSB2cDcwMnhfZmVfZ2V0X2Zyb250ZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmMKaW5kZXggYjJmMDk4YS4uMDJiZDYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC5jCkBAIC0yMiw1MCArMjIsNTQgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8seGZlcj0yLHJjPTQgKG9yLWFibGUpKS4iIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKIAogc3RydWN0IHZwNzAyeF9zdGF0ZSB7Ci0JdTggcGlkX3RhYmxlWzE3XTsgLyogWzE2XSBjb250cm9scyB0aGUgcGlkX3RhYmxlIHN0YXRlICovCisJaW50IHBpZF9maWx0ZXJfY291bnQ7CisJaW50IHBpZF9maWx0ZXJfY2FuX2J5cGFzczsKKwl1OCAgcGlkX2ZpbHRlcl9zdGF0ZTsKK307CisKK3N0cnVjdCB2cDcwMnhfZGV2aWNlX3N0YXRlIHsKKwl1OCBwb3dlcl9zdGF0ZTsKIH07CiAKIC8qIGNoZWNrIGZvciBtdXRleCBGSVhNRSAqLwogaW50IHZwNzAyeF91c2JfaW5fb3Aoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1OCAqYiwgaW50IGJsZW4pCiB7Ci0JaW50IHJldCA9IDAsdHJ5ID0gMDsKKwlpbnQgcmV0ID0gLTE7CiAKLQl3aGlsZSAocmV0ID49IDAgJiYgcmV0ICE9IGJsZW4gJiYgdHJ5IDwgMykgewogCQlyZXQgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwKIAkJCXVzYl9yY3ZjdHJscGlwZShkLT51ZGV2LDApLAogCQkJcmVxLAogCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiwKIAkJCXZhbHVlLGluZGV4LGIsYmxlbiwKIAkJCTIwMDApOwotCQlkZWJfaW5mbygicmVhZGluZyBudW1iZXIgJWQgKHJldDogJWQpXG4iLHRyeSxyZXQpOwotCQl0cnkrKzsKLQl9CiAKLQlpZiAocmV0IDwgMCB8fCByZXQgIT0gYmxlbikgewotCQl3YXJuKCJ1c2IgaW4gb3BlcmF0aW9uIGZhaWxlZC4iKTsKKwlpZiAocmV0IDwgMCkgeworCQl3YXJuKCJ1c2IgaW4gb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CiAJCXJldCA9IC1FSU87CiAJfSBlbHNlCiAJCXJldCA9IDA7CiAKLQlkZWJfeGZlcigiaW46IHJlcS4gJXgsIHZhbDogJXgsIGluZDogJXgsIGJ1ZmZlcjogIixyZXEsdmFsdWUsaW5kZXgpOworCisJZGViX3hmZXIoImluOiByZXEuICUwMngsIHZhbDogJTA0eCwgaW5kOiAlMDR4LCBidWZmZXI6ICIscmVxLHZhbHVlLGluZGV4KTsKIAlkZWJ1Z19kdW1wKGIsYmxlbixkZWJfeGZlcik7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHZwNzAyeF91c2Jfb3V0X29wKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggcmVxLCB1MTYgdmFsdWUsCitpbnQgdnA3MDJ4X3VzYl9vdXRfb3Aoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCByZXEsIHUxNiB2YWx1ZSwKIAkJCSAgICAgdTE2IGluZGV4LCB1OCAqYiwgaW50IGJsZW4pCiB7Ci0JZGViX3hmZXIoIm91dDogcmVxLiAleCwgdmFsOiAleCwgaW5kOiAleCwgYnVmZmVyOiAiLHJlcSx2YWx1ZSxpbmRleCk7CisJaW50IHJldDsKKwlkZWJfeGZlcigib3V0OiByZXEuICUwMngsIHZhbDogJTA0eCwgaW5kOiAlMDR4LCBidWZmZXI6ICIscmVxLHZhbHVlLGluZGV4KTsKIAlkZWJ1Z19kdW1wKGIsYmxlbixkZWJfeGZlcik7CiAKLQlpZiAodXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsCisJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShkLT51ZGV2LDApLAogCQkJcmVxLAogCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQsCiAJCQl2YWx1ZSxpbmRleCxiLGJsZW4sCi0JCQkyMDAwKSAhPSBibGVuKSB7Ci0JCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4iKTsKKwkJCTIwMDApKSAhPSBibGVuKSB7CisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIscmV0KTsKIAkJcmV0dXJuIC1FSU87CiAJfSBlbHNlCiAJCXJldHVybiAwOwpAQCAtNzgsMTIgKzgyLDEwIEBACiAJaWYgKChyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPnVzYl9tdXRleCkpKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKChyZXQgPSB2cDcwMnhfdXNiX291dF9vcChkLFJFUVVFU1RfT1VULDAsMCxvLG9sZW4pKSA8IDApCi0JCWdvdG8gdW5sb2NrOworCXJldCA9IHZwNzAyeF91c2Jfb3V0X29wKGQsUkVRVUVTVF9PVVQsMCwwLG8sb2xlbik7CiAJbXNsZWVwKG1zZWMpOwogCXJldCA9IHZwNzAyeF91c2JfaW5fb3AoZCxSRVFVRVNUX0lOLDAsMCxpLGlsZW4pOwogCi11bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkLT51c2JfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKQEAgLTEwOCwyOSArMTEwLDY1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB2cDcwMnhfcGlkX2ZpbHRlcihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBpbmRleCwgdTE2IHBpZCwgaW50IG9ub2ZmKQorc3RhdGljIGludCB2cDcwMnhfc2V0X3BsZF9tb2RlKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIHU4IGJ5cGFzcykKIHsKLQlzdHJ1Y3QgdnA3MDJ4X3N0YXRlICpzdCA9IGQtPnByaXY7Ci0JdTggYnVmWzldOwotCi0JaWYgKG9ub2ZmKSB7Ci0JCXN0LT5waWRfdGFibGVbMTZdICAgfD0gICAxIDw8IGluZGV4OwotCQlzdC0+cGlkX3RhYmxlW2luZGV4KjJdICAgPSAocGlkID4+IDgpICYgMHhmZjsKLQkJc3QtPnBpZF90YWJsZVtpbmRleCoyKzFdID0gIHBpZCAgICAgICAmIDB4ZmY7Ci0JfSBlbHNlIHsKLQkJc3QtPnBpZF90YWJsZVsxNl0gICAmPSB+KDEgPDwgaW5kZXgpOwotCQlzdC0+cGlkX3RhYmxlW2luZGV4KjJdID0gc3QtPnBpZF90YWJsZVtpbmRleCoyKzFdID0gMDsKLQl9Ci0KLQlyZXR1cm4gdnA3MDJ4X3VzYl9pbm91dF9jbWQoZCxTRVRfUElEX0ZJTFRFUixzdC0+cGlkX3RhYmxlLDE3LGJ1Ziw5LDEwKTsKKwl1OCBidWZbMTZdID0geyAwIH07CisJcmV0dXJuIHZwNzAyeF91c2JfaW5fb3AoYWRhcC0+ZGV2LCAweGUwLCAoYnlwYXNzIDw8IDgpIHwgMHgwZSwgMCwgYnVmLCAxNik7CiB9CiAKLXN0YXRpYyBpbnQgdnA3MDJ4X3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCitzdGF0aWMgaW50IHZwNzAyeF9zZXRfcGxkX3N0YXRlKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIHU4IHN0YXRlKQogewotCXZwNzAyeF91c2JfaW5fb3AoZCxSRVNFVF9UVU5FUiwwLDAsTlVMTCwwKTsKKwl1OCBidWZbMTZdID0geyAwIH07CisJcmV0dXJuIHZwNzAyeF91c2JfaW5fb3AoYWRhcC0+ZGV2LCAweGUwLCAoc3RhdGUgPDwgOCkgfCAweDBmLCAwLCBidWYsIDE2KTsKK30KIAotCXZwNzAyeF91c2JfaW5fb3AoZCxTRVRfVFVORVJfUE9XRVJfUkVRLDAsb25vZmYsTlVMTCwwKTsKLQlyZXR1cm4gdnA3MDJ4X3VzYl9pbl9vcChkLFNFVF9UVU5FUl9QT1dFUl9SRVEsMCxvbm9mZixOVUxMLDApOworc3RhdGljIGludCB2cDcwMnhfc2V0X3BpZChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCB1MTYgcGlkLCB1OCBpZCwgaW50IG9ub2ZmKQoreworCXN0cnVjdCB2cDcwMnhfc3RhdGUgKnN0ID0gYWRhcC0+cHJpdjsKKwl1OCBidWZbMTZdID0geyAwIH07CisKKwlpZiAob25vZmYpCisJCXN0LT5waWRfZmlsdGVyX3N0YXRlIHw9ICAoMSA8PCBpZCk7CisJZWxzZSB7CisJCXN0LT5waWRfZmlsdGVyX3N0YXRlICY9IH4oMSA8PCBpZCk7CisJCXBpZCA9IDB4ZmZmZjsKKwl9CisKKwlpZCA9IDB4MTAgKyBpZCoyOworCisJdnA3MDJ4X3NldF9wbGRfc3RhdGUoYWRhcCwgc3QtPnBpZF9maWx0ZXJfc3RhdGUpOworCXZwNzAyeF91c2JfaW5fb3AoYWRhcC0+ZGV2LCAweGUwLCAoKChwaWQgPj4gOCkgJiAweGZmKSA8PCA4KSB8IChpZCksIDAsIGJ1ZiwgMTYpOworCXZwNzAyeF91c2JfaW5fb3AoYWRhcC0+ZGV2LCAweGUwLCAoKChwaWQgICAgICkgJiAweGZmKSA8PCA4KSB8IChpZCsxKSwgMCwgYnVmLCAxNik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2cDcwMnhfaW5pdF9waWRfZmlsdGVyKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IHZwNzAyeF9zdGF0ZSAqc3QgPSBhZGFwLT5wcml2OworCWludCBpOworCXU4IGJbMTBdID0geyAwIH07CisKKwlzdC0+cGlkX2ZpbHRlcl9jb3VudCA9IDg7CisJc3QtPnBpZF9maWx0ZXJfY2FuX2J5cGFzcyA9IDE7CisJc3QtPnBpZF9maWx0ZXJfc3RhdGUgPSAweDAwOworCisJdnA3MDJ4X3NldF9wbGRfbW9kZShhZGFwLCAxKTsgLy8gYnlwYXNzCisKKwlmb3IgKGkgPSAwOyBpIDwgc3QtPnBpZF9maWx0ZXJfY291bnQ7IGkrKykKKwkJdnA3MDJ4X3NldF9waWQoYWRhcCwgMHhmZmZmLCBpLCAxKTsKKworCXZwNzAyeF91c2JfaW5fb3AoYWRhcC0+ZGV2LCAweGI1LCAzLCAwLCBiLCAxMCk7CisJdnA3MDJ4X3VzYl9pbl9vcChhZGFwLT5kZXYsIDB4YjUsIDAsIDAsIGIsIDEwKTsKKwl2cDcwMnhfdXNiX2luX29wKGFkYXAtPmRldiwgMHhiNSwgMSwgMCwgYiwgMTApOworCisJLy92cDcwMnhfc2V0X3BsZF9tb2RlKGQsIDApOyAvLyBmaWx0ZXIKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cDcwMnhfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQoreworCXJldHVybiAwOwogfQogCiAvKiBrZXlzIGZvciB0aGUgZW5jbG9zZWQgcmVtb3RlIGNvbnRyb2wgKi8KQEAgLTE2Niw3NCArMjA0LDgzIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCB2cDcwMnhfcG93ZXJfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBvbm9mZikKK3sKKwlzdHJ1Y3QgdnA3MDJ4X2RldmljZV9zdGF0ZSAqc3QgPSBkLT5wcml2OworCisJaWYgKHN0LT5wb3dlcl9zdGF0ZSA9PSAwICYmIG9ub2ZmKQorCQl2cDcwMnhfdXNiX291dF9vcChkLCBTRVRfVFVORVJfUE9XRVJfUkVRLCAxLCA3LCBOVUxMLCAwKTsKKwllbHNlIGlmIChzdC0+cG93ZXJfc3RhdGUgPT0gMSAmJiBvbm9mZiA9PSAwKQorCQl2cDcwMnhfdXNiX291dF9vcChkLCBTRVRfVFVORVJfUE9XRVJfUkVRLCAwLCA3LCBOVUxMLCAwKTsKKworCXN0LT5wb3dlcl9zdGF0ZSA9IG9ub2ZmOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdnA3MDJ4X3JlYWRfbWFjX2FkZHIoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLHU4IG1hY1s2XSkKIHsKLQl1OCBtYWNiWzldOwotCWlmICh2cDcwMnhfdXNiX2lub3V0X2NtZChkLCBHRVRfTUFDX0FERFJFU1MsIE5VTEwsIDAsIG1hY2IsIDksIDEwKSkKLQkJcmV0dXJuIC1FSU87Ci0JbWVtY3B5KG1hYywmbWFjYlszXSw2KTsKKwl1OCBpOworCWZvciAoaSA9IDY7IGkgPCAxMjsgaSsrKQorCQl2cDcwMnhfdXNiX2luX29wKGQsIFJFQURfRUVQUk9NX1JFUSwgaSwgMSwgJm1hY1tpIC0gNl0sIDEpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZwNzAyeF9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorc3RhdGljIGludCB2cDcwMnhfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0JdTggYnVmWzldID0geyAwIH07CisJdTggYnVmWzEwXSA9IHsgMCB9OwogCi0JaWYgKHZwNzAyeF91c2JfaW5vdXRfY21kKGQsIEdFVF9TWVNURU1fU1RSSU5HLCBOVUxMLCAwLCBidWYsIDksIDEwKSkKKwl2cDcwMnhfdXNiX291dF9vcChhZGFwLT5kZXYsIFNFVF9UVU5FUl9QT1dFUl9SRVEsIDAsIDcsIE5VTEwsIDApOworCisJaWYgKHZwNzAyeF91c2JfaW5vdXRfY21kKGFkYXAtPmRldiwgR0VUX1NZU1RFTV9TVFJJTkcsIE5VTEwsIDAsIGJ1ZiwgMTAsIDEwKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlidWZbOF0gPSAnXDAnOworCWJ1Zls5XSA9ICdcMCc7CiAJaW5mbygic3lzdGVtIHN0cmluZzogJXMiLCZidWZbMV0pOwogCi0JZC0+ZmUgPSB2cDcwMnhfZmVfYXR0YWNoKGQpOworCXZwNzAyeF9pbml0X3BpZF9maWx0ZXIoYWRhcCk7CisKKwlhZGFwLT5mZSA9IHZwNzAyeF9mZV9hdHRhY2goYWRhcC0+ZGV2KTsKKwl2cDcwMnhfdXNiX291dF9vcChhZGFwLT5kZXYsIFNFVF9UVU5FUl9QT1dFUl9SRVEsIDEsIDcsIE5VTEwsIDApOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIHZwNzAyeF9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHZwNzAyeF9wcm9wZXJ0aWVzOwogCiBzdGF0aWMgaW50IHZwNzAyeF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0KLQl1c2JfY2xlYXJfaGFsdCh1ZGV2LHVzYl9zbmRjdHJscGlwZSh1ZGV2LDApKTsKLQl1c2JfY2xlYXJfaGFsdCh1ZGV2LHVzYl9yY3ZjdHJscGlwZSh1ZGV2LDApKTsKLQogCXJldHVybiBkdmJfdXNiX2RldmljZV9pbml0KGludGYsJnZwNzAyeF9wcm9wZXJ0aWVzLFRISVNfTU9EVUxFLE5VTEwpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdnA3MDJ4X3VzYl90YWJsZSBbXSA9IHsKIAkgICAgeyBVU0JfREVWSUNFKFVTQl9WSURfVklTSU9OUExVUywgVVNCX1BJRF9UV0lOSEFOX1ZQNzAyMV9DT0xEKSB9LAotCSAgICB7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9WSVNJT05QTFVTLCBVU0JfUElEX1RXSU5IQU5fVlA3MDIxX1dBUk0pIH0sCi0JICAgIHsgVVNCX0RFVklDRShVU0JfVklEX1ZJU0lPTlBMVVMsIFVTQl9QSURfVFdJTkhBTl9WUDcwMjBfQ09MRCkgfSwKLQkgICAgeyBVU0JfREVWSUNFKFVTQl9WSURfVklTSU9OUExVUywgVVNCX1BJRF9UV0lOSEFOX1ZQNzAyMF9XQVJNKSB9LAorLy8JICAgIHsgVVNCX0RFVklDRShVU0JfVklEX1ZJU0lPTlBMVVMsIFVTQl9QSURfVFdJTkhBTl9WUDcwMjBfQ09MRCkgfSwKKy8vCSAgICB7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9WSVNJT05QTFVTLCBVU0JfUElEX1RXSU5IQU5fVlA3MDIwX1dBUk0pIH0sCiAJICAgIHsgMCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB2cDcwMnhfdXNiX3RhYmxlKTsKIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgdnA3MDJ4X3Byb3BlcnRpZXMgPSB7Ci0JLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9ORUVEX1BJRF9GSUxURVJJTkcsCi0JLnBpZF9maWx0ZXJfY291bnQgPSA4LCAvKiAhISEgKi8KLQorc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHZwNzAyeF9wcm9wZXJ0aWVzID0gewogCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAotCS5maXJtd2FyZSA9ICJkdmItdXNiLXZwNzAyeC0wMS5mdyIsCisJLmZpcm13YXJlICAgICAgICAgICAgPSAiZHZiLXVzYi12cDcwMngtMDIuZnciLAorCS5ub19yZWNvbm5lY3QgICAgICAgID0gMSwKIAotCS5waWRfZmlsdGVyICAgICAgID0gdnA3MDJ4X3BpZF9maWx0ZXIsCi0JLnBvd2VyX2N0cmwgICAgICAgPSB2cDcwMnhfcG93ZXJfY3RybCwKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgdnA3MDJ4X2RldmljZV9zdGF0ZSksCisKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLmNhcHMgICAgICAgICAgICAgPSBEVkJfVVNCX0FEQVBfUkVDRUlWRVNfMjA0X0JZVEVfVFMsCisKKwkJCS5zdHJlYW1pbmdfY3RybCAgID0gdnA3MDJ4X3N0cmVhbWluZ19jdHJsLAogCS5mcm9udGVuZF9hdHRhY2ggID0gdnA3MDJ4X2Zyb250ZW5kX2F0dGFjaCwKLQkucmVhZF9tYWNfYWRkcmVzcyA9IHZwNzAyeF9yZWFkX21hY19hZGRyLAotCi0JLnJjX2tleV9tYXAgICAgICAgPSB2cDcwMnhfcmNfa2V5cywKLQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUodnA3MDJ4X3JjX2tleXMpLAotCS5yY19pbnRlcnZhbCAgICAgID0gNDAwLAotCS5yY19xdWVyeSAgICAgICAgID0gdnA3MDJ4X3JjX3F1ZXJ5LAotCi0JLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IHZwNzAyeF9zdGF0ZSksCiAKIAkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCi0JLnVyYiA9IHsKLQkJLnR5cGUgPSBEVkJfVVNCX0JVTEssCi0JCS5jb3VudCA9IDcsCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJLmNvdW50ID0gMTAsCiAJCS5lbmRwb2ludCA9IDB4MDIsCiAJCS51ID0gewogCQkJLmJ1bGsgPSB7CkBAIC0yNDEsMjQgKzI4OCwzMyBAQAogCQkJfQogCQl9CiAJfSwKKwkJCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCB2cDcwMnhfc3RhdGUpLAorCQl9CisJCX0sCisJLnJlYWRfbWFjX2FkZHJlc3MgPSB2cDcwMnhfcmVhZF9tYWNfYWRkciwKIAotCS5udW1fZGV2aWNlX2Rlc2NzID0gMiwKKwkucmNfa2V5X21hcCAgICAgICA9IHZwNzAyeF9yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRSh2cDcwMnhfcmNfa2V5cyksCisJLnJjX2ludGVydmFsICAgICAgPSA0MDAsCisJLnJjX3F1ZXJ5ICAgICAgICAgPSB2cDcwMnhfcmNfcXVlcnksCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7CiAJCXsgLm5hbWUgPSAiVHdpbmhhbkRUViBTdGFyQm94IERWQi1TIFVTQjIuMCAoVlA3MDIxKSIsCiAJCSAgLmNvbGRfaWRzID0geyAmdnA3MDJ4X3VzYl90YWJsZVswXSwgTlVMTCB9LAotCQkgIC53YXJtX2lkcyA9IHsgJnZwNzAyeF91c2JfdGFibGVbMV0sIE5VTEwgfSwKKwkJICAud2FybV9pZHMgPSB7IE5VTEwgfSwKIAkJfSwKLQkJeyAubmFtZSA9ICJUd2luaGFuRFRWIFN0YXJCb3ggRFZCLVMgVVNCMi4wIChWUDcwMjApIiwKKy8qCQl7IC5uYW1lID0gIlR3aW5oYW5EVFYgU3RhckJveCBEVkItUyBVU0IyLjAgKFZQNzAyMCkiLAogCQkgIC5jb2xkX2lkcyA9IHsgJnZwNzAyeF91c2JfdGFibGVbMl0sIE5VTEwgfSwKIAkJICAud2FybV9pZHMgPSB7ICZ2cDcwMnhfdXNiX3RhYmxlWzNdLCBOVUxMIH0sCiAJCX0sCi0JCXsgMCB9LAorKi8JCXsgTlVMTCB9LAogCX0KIH07CiAKIC8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB2cDcwMnhfdXNiX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiZHZiLXVzYi12cDcwMngiLAorCS5uYW1lCQk9ICJkdmJfdXNiX3ZwNzAyeCIsCiAJLnByb2JlIAkJPSB2cDcwMnhfdXNiX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gZHZiX3VzYl9kZXZpY2VfZXhpdCwKIAkuaWRfdGFibGUgCT0gdnA3MDJ4X3VzYl90YWJsZSwKQEAgLTI4Nyw1ICszNDMsNSBAQAogCiBNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIEJvZXR0Y2hlciA8cGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBUd2luaGFuIFN0YXJCb3ggRFZCLVMgVVNCMi4wIGFuZCBjbG9uZXMiKTsKLU1PRFVMRV9WRVJTSU9OKCIxLjAtYWxwaGEiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC5oCmluZGV4IGMyZjk3ZjkuLjI1YTlkZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguaApAQCAtMTAyLDUgKzEwMiw3IEBACiAKIGV4dGVybiBpbnQgdnA3MDJ4X3VzYl9pbm91dF9vcChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4ICpvLCBpbnQgb2xlbiwgdTggKmksIGludCBpbGVuLCBpbnQgbXNlYyk7CiBleHRlcm4gaW50IHZwNzAyeF91c2JfaW5fb3Aoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1OCAqYiwgaW50IGJsZW4pOworZXh0ZXJuIGludCB2cDcwMnhfdXNiX291dF9vcChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IHJlcSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIHU4ICpiLCBpbnQgYmxlbik7CitleHRlcm4gaW50IHZwNzAyeF9wb3dlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYwppbmRleCA4ZWEzODM0Li5iNGNmMDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMKQEAgLTE2OSwzMSArMTY5LDMxIEBACiAJcmV0dXJuIHZwNzA0NV9yZWFkX2VlcHJvbShkLG1hYywgNiwgTUFDXzBfQUREUik7CiB9CiAKLXN0YXRpYyBpbnQgdnA3MDQ1X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCitzdGF0aWMgaW50IHZwNzA0NV9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAl1OCBidWZbMjU1XSA9IHsgMCB9OwogCi0JdnA3MDQ1X3VzYl9vcChkLFZFTkRPUl9TVFJJTkdfUkVBRCxOVUxMLDAsYnVmLDIwLDApOworCXZwNzA0NV91c2Jfb3AoYWRhcC0+ZGV2LFZFTkRPUl9TVFJJTkdfUkVBRCxOVUxMLDAsYnVmLDIwLDApOwogCWJ1ZlsxMF0gPSAnXDAnOwogCWRlYl9pbmZvKCJmaXJtd2FyZSBzYXlzOiAlcyAiLGJ1Zik7CiAKLQl2cDcwNDVfdXNiX29wKGQsUFJPRFVDVF9TVFJJTkdfUkVBRCxOVUxMLDAsYnVmLDIwLDApOworCXZwNzA0NV91c2Jfb3AoYWRhcC0+ZGV2LFBST0RVQ1RfU1RSSU5HX1JFQUQsTlVMTCwwLGJ1ZiwyMCwwKTsKIAlidWZbMTBdID0gJ1wwJzsKIAlkZWJfaW5mbygiJXMgIixidWYpOwogCi0JdnA3MDQ1X3VzYl9vcChkLEZXX1ZFUlNJT05fUkVBRCxOVUxMLDAsYnVmLDIwLDApOworCXZwNzA0NV91c2Jfb3AoYWRhcC0+ZGV2LEZXX1ZFUlNJT05fUkVBRCxOVUxMLDAsYnVmLDIwLDApOwogCWJ1ZlsxMF0gPSAnXDAnOwogCWRlYl9pbmZvKCJ2JXNcbiIsYnVmKTsKIAogLyoJRHVtcCB0aGUgRUVQUk9NICovCiAvKgl2cDcwNDVfcmVhZF9lZXByb20oZCxidWYsIDI1NSwgRlgyX0lEX0FERFIpOyAqLwogCi0JZC0+ZmUgPSB2cDcwNDVfZmVfYXR0YWNoKGQpOworCWFkYXAtPmZlID0gdnA3MDQ1X2ZlX2F0dGFjaChhZGFwLT5kZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIHZwNzA0NV9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHZwNzA0NV9wcm9wZXJ0aWVzOwogCiBzdGF0aWMgaW50IHZwNzA0NV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKQEAgLTIxMCwyNCArMjEwLDE3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHZwNzA0NV91c2JfdGFibGUpOwogCi1zdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyB2cDcwNDVfcHJvcGVydGllcyA9IHsKLQkuY2FwcyA9IDAsCi0KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyB2cDcwNDVfcHJvcGVydGllcyA9IHsKIAkudXNiX2N0cmwgPSBDWVBSRVNTX0ZYMiwKIAkuZmlybXdhcmUgPSAiZHZiLXVzYi12cDcwNDUtMDEuZnciLAogCi0JLnBvd2VyX2N0cmwgICAgICAgPSB2cDcwNDVfcG93ZXJfY3RybCwKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJewogCS5mcm9udGVuZF9hdHRhY2ggID0gdnA3MDQ1X2Zyb250ZW5kX2F0dGFjaCwKLQkucmVhZF9tYWNfYWRkcmVzcyA9IHZwNzA0NV9yZWFkX21hY19hZGRyLAotCi0JLnJjX2ludGVydmFsICAgICAgPSA0MDAsCi0JLnJjX2tleV9tYXAgICAgICAgPSB2cDcwNDVfcmNfa2V5cywKLQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUodnA3MDQ1X3JjX2tleXMpLAotCS5yY19xdWVyeSAgICAgICAgID0gdnA3MDQ1X3JjX3F1ZXJ5LAotCiAJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwotCS51cmIgPSB7Ci0JCS50eXBlID0gRFZCX1VTQl9CVUxLLAorCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAogCQkuY291bnQgPSA3LAogCQkuZW5kcG9pbnQgPSAweDAyLAogCQkudSA9IHsKQEAgLTIzNiw2ICsyMjksMTUgQEAKIAkJCX0KIAkJfQogCX0sCisJCX0KKwl9LAorCS5wb3dlcl9jdHJsICAgICAgID0gdnA3MDQ1X3Bvd2VyX2N0cmwsCisJLnJlYWRfbWFjX2FkZHJlc3MgPSB2cDcwNDVfcmVhZF9tYWNfYWRkciwKKworCS5yY19pbnRlcnZhbCAgICAgID0gNDAwLAorCS5yY19rZXlfbWFwICAgICAgID0gdnA3MDQ1X3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKHZwNzA0NV9yY19rZXlzKSwKKwkucmNfcXVlcnkgICAgICAgICA9IHZwNzA0NV9yY19xdWVyeSwKIAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMiwKIAkuZGV2aWNlcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCmluZGV4IDYyZDY5YTYuLmEzNTZkMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwpAQCAtNTUzLDggKzU1Myw4IEBACiAJbmRpdiA9ICggKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8gKDIgKiBYVEFMIC8gMTAwMCkpIC8gMzIpICYgMHgxZmY7CiAJYWRpdiA9ICggKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8gKDIgKiBYVEFMIC8gMTAwMCkpICUgMzIpICYgMHgxZjsKIAotCWlmIChhZGl2ID09IDApCi0JCW5kaXYrKzsKKwlpZiAoYWRpdiA9PSAwICYmIG5kaXYgPiAwKQorCQluZGl2LS07CiAKIAkvKiBjb250cm9sIGJpdHMgMTEsIHJlZmRpdiAxMSwgY2hhcmdlIHB1bXAgcG9sYXJpdHkgMSwgY2hhcmdlIHB1bXAgY3VycmVudCwgbmRpdiwgYWRpdiAqLwogCXN0YXRlLT5wbGxhcmcgPSAoMyA8PCAxOSkgfCAoMyA8PCAxNykgfCAoMSA8PCAxNikgfCAocHVtcCA8PCAxNCkgfCAobmRpdiA8PCA1KSB8IGFkaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmMKaW5kZXggY2MyODQxNy4uY2NjODEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuYwpAQCAtMzcsNiArMzcsOCBAQAogCiAJc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciBpMmNfbWFzdGVyOwogCisJdTMyIHRpbWY7CisKIAlmZV9iYW5kd2lkdGhfdCBjdXJyZW50X2JhbmR3aWR0aDsKIAogCXUxNiBkZXZfaWQ7CkBAIC05Miw1MCArOTQsMzEgQEAKIAogc3RhdGljIGludCBkaWIzMDAwbWNfc2V0X3RpbWluZyhzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdGF0ZSwgczE2IG5mZnQsIHU4IGJ3LCB1OCB1cGRhdGVfb2Zmc2V0KQogewotLyoKLQl1MzIgdGltZl9tc2IsIHRpbWZfbHNiLCBpOwotCWludCB0aW1fc2duIDsKLQlMVUludCBjb21wMSwgY29tcDIsIGNvbXAgOwotLy8JdTMyIHRpbV9vZmZzZXQgOwotCWNvbXAgPSAyNzcwMCAqIEJXX0lOREVYX1RPX0tIWihidykgLyAxMDAwOwotCXRpbWZfbXNiID0gKGNvbXAgPj4gMTYpICYgMHgwMEZGOwotCXRpbWZfbHNiID0gIGNvbXAgICAgICAgICYgMHhGRkZGOworCXUzMiB0aW1mOwogCi0JLy8gVXBkYXRlIHRoZSB0aW1pbmcgb2Zmc2V0IDsKKwlpZiAoc3RhdGUtPnRpbWYgPT0gMCkgeworCQl0aW1mID0gMTM4NDQwMjsgLy8gZGVmYXVsdCB2YWx1ZSBmb3IgOE1IegorCQlpZiAodXBkYXRlX29mZnNldCkKKwkJCW1zbGVlcCgyMDApOyAvLyBmaXJzdCB0aW1lIHdlIGRvIGFuIHVwZGF0ZQorCX0gZWxzZQorCQl0aW1mID0gc3RhdGUtPnRpbWY7CisKKwl0aW1mICo9IChCV19JTkRFWF9UT19LSFooYncpIC8gMTAwMCk7CisKIAlpZiAodXBkYXRlX29mZnNldCkgewotCQlpZiAoc3RhdGUtPnRpbWluZ19vZmZzZXRfY29tcF9kb25lID09IDApIHsKLQkJCXVzbGVlcCgyMDAwMDApOwotCQkJc3RhdGUtPnRpbWluZ19vZmZzZXRfY29tcF9kb25lID0gMTsKLQkJfQotCQl0aW1fb2Zmc2V0ID0gZGliMzAwMG1jX3JlYWRfd29yZChzdGF0ZSwgNDE2KTsKLQkJaWYgKCh0aW1fb2Zmc2V0ICYgMHgyMDAwKSA9PSAweDIwMDApCi0JCQl0aW1fb2Zmc2V0IHw9IDB4QzAwMDsgLy8gUEI6IFRoaXMgb25seSB3b3JrcyBpZiB0aW1fb2Zmc2V0IGlzIHMxNiAtIHdlaXJkCisJCXMxNiB0aW1fb2ZmcyA9IGRpYjMwMDBtY19yZWFkX3dvcmQoc3RhdGUsIDQxNik7CisKKwkJaWYgKHRpbV9vZmZzICYgIDB4MjAwMCkKKwkJCXRpbV9vZmZzIC09IDB4NDAwMDsKIAogCQlpZiAobmZmdCA9PSAwKQotCQkJdGltX29mZnNldCA9IHRpbV9vZmZzZXQgPDwgMjsgLy8gUEI6IERvIG5vdCBzdG9yZSB0aGUgb2Zmc2V0IGZvciBkaWZmZXJlbnQgdGhpbmdzIGluIG9uZSB2YXJpYWJsZQotCQlzdGF0ZS0+dGltaW5nX29mZnNldCArPSB0aW1fb2Zmc2V0OworCQkJdGltX29mZnMgKj0gNDsKKworCQl0aW1mICs9IHRpbV9vZmZzOworCQlzdGF0ZS0+dGltZiA9IHRpbWYgLyAoQldfSU5ERVhfVE9fS0haKGJ3KSAvIDEwMDApOwogCX0KLQl0aW1fb2Zmc2V0ID0gc3RhdGUtPnRpbWluZ19vZmZzZXQ7CiAKLQlpZiAodGltX29mZnNldCA8IDApIHsKLQkJdGltX3NnbiA9IDE7Ci0JCXRpbV9vZmZzZXQgPSAtdGltX29mZnNldDsKLQl9IGVsc2UKLQkJdGltX3NnbiA9IDA7Ci0KLQljb21wMSA9IHRpbV9vZmZzZXQgKiB0aW1mX2xzYjsKLQljb21wMiA9IHRpbV9vZmZzZXQgKiB0aW1mX21zYjsKLQljb21wICA9ICgoY29tcDEgPj4gMTYpICsgY29tcDIpID4+IDc7Ci0KLQlpZiAodGltX3NnbiA9PSAwKQotCQljb21wID0gdGltZl9tc2IgKiAoMTw8MTYpICsgdGltZl9sc2IgKyBjb21wOwotCWVsc2UKLQkJY29tcCA9IHRpbWZfbXNiICogKDE8PDE2KSArIHRpbWZfbHNiIC0gY29tcDsKLQotCXRpbWZfbXNiID0gKGNvbXA+PjE2KSYweEZGIDsKLQl0aW1mX2xzYiA9IGNvbXAmMHhGRkZGOwotKi8KLQl1MzIgdGltZiA9IDEzODQ0MDIgKiAoQldfSU5ERVhfVE9fS0haKGJ3KSAvIDEwMDApOworCWRwcmludGsoInRpbWY6ICVkXG4iLCB0aW1mKTsKIAogCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAyMywgdGltZiA+PiAxNik7CiAJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDI0LCB0aW1mICYgMHhmZmZmKTsKQEAgLTE0MywxNSArMTI2LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGliMzAwMG1jX3NldHVwX3B3bTNfc3RhdGUoc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUpCitzdGF0aWMgaW50IGRpYjMwMDBtY19zZXR1cF9wd21fc3RhdGUoc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUpCiB7CisJdTE2IHJlZ181MSwgcmVnXzUyID0gc3RhdGUtPmNmZy0+YWdjLT5zZXR1cCAmIDB4ZmVmYjsKICAgICBpZiAoc3RhdGUtPmNmZy0+cHdtM19pbnZlcnNpb24pIHsKLQkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDUxLCAoMiA8PCAxNCkgfCAoMCA8PCAxMCkgfCAoNyA8PCA2KSB8ICgyIDw8IDIpIHwgKDIgPDwgMCkpOwotCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgNTIsICgwIDw8IDgpIHwgKDUgPDwgNSkgfCAoMSA8PCA0KSB8ICgxIDw8IDMpIHwgKDEgPDwgMikgfCAoMiA8PCAwKSk7CisJCXJlZ181MSA9ICAoMiA8PCAxNCkgfCAoMCA8PCAxMCkgfCAoNyA8PCA2KSB8ICgyIDw8IDIpIHwgKDIgPDwgMCk7CisJCXJlZ181MiB8PSAoMSA8PCAyKTsKIAl9IGVsc2UgewotCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgNTEsICgyIDw8IDE0KSB8ICg0IDw8IDEwKSB8ICg3IDw8IDYpIHwgKDIgPDwgMikgfCAoMiA8PCAwKSk7Ci0JCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA1MiwgKDEgPDwgOCkgfCAoNSA8PCA1KSB8ICgxIDw8IDQpIHwgKDEgPDwgMykgfCAoMCA8PCAyKSB8ICgyIDw8IDApKTsKKwkJcmVnXzUxID0gKDIgPDwgMTQpIHwgKDQgPDwgMTApIHwgKDcgPDwgNikgfCAoMiA8PCAyKSB8ICgyIDw8IDApOworCQlyZWdfNTIgfD0gKDEgPDwgOCk7CiAJfQorCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA1MSwgcmVnXzUxKTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgNTIsIHJlZ181Mik7CiAKICAgICBpZiAoc3RhdGUtPmNmZy0+dXNlX3B3bTMpCiAJCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAyNDUsICgxIDw8IDMpIHwgKDEgPDwgMCkpOwpAQCAtMzI2LDEwICszMTIsMTAgQEAKIAkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDE3NSwgIDB4MDAwMCk7CiAJCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDMyLCAweDAxMkMpOwogCX0KLQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTAzMywgMCk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDEwMzMsIDB4MDAwMCk7CiAKIAkvLyBQX2Nsa19jZmcKLQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTAzNywgMTI1OTIpOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDM3LCAweDMxMzApOwogCiAJLy8gb3RoZXIgY29uZmlndXJhdGlvbnMKIApAQCAtMzUwLDcgKzMzNiw3IEBACiAJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDUwLCAweDgwMDApOwogCiAJLy8gYWdjIHNldHVwIG1pc2MKLQlkaWIzMDAwbWNfc2V0dXBfcHdtM19zdGF0ZShzdGF0ZSk7CisJZGliMzAwMG1jX3NldHVwX3B3bV9zdGF0ZShzdGF0ZSk7CiAKIAkvLyBQX2FnY19jb3VudGVyX2xvY2sKIAlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgNTMsIDB4ODcpOwpAQCAtNDI2LDEwICs0MTIsOSBAQAogewogCXN0cnVjdCBkaWIzMDAwbWNfc3RhdGUgKnN0YXRlID0gZGVtb2QtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTAzNywgZGliMzAwMG1jX3JlYWRfd29yZChzdGF0ZSwgMTAzNykgfCAweDAwMDMpOwogCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDMxLCAweEZGRkYpOwogCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDMyLCAweEZGRkYpOwotCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDMzLCAweEZGRjQpOyAgIC8vICoqKiogIEJpbjIKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTAzMywgMHhGRkYwKTsKIAogICAgIHJldHVybiAwOwogfQpAQCAtNTM5LDYgKzUyNCw3IEBACiAKIAlyZWcgPSBkaWIzMDAwbWNfcmVhZF93b3JkKHN0YXRlLCAwKTsKIAlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMCwgcmVnIHwgKDEgPDwgOCkpOworCWRpYjMwMDBtY19yZWFkX3dvcmQoc3RhdGUsIDUxMSk7CiAJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDAsIHJlZyk7CiAKIAlyZXR1cm4gMDsKQEAgLTU3OCw2MiArNTY0LDEyIEBACiAJCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAzMywgNik7CiAJfQogCi0JLy8gaWYgKGxvY2spCi0JLy8JZGliMzAwMG1jX3NldF90aW1pbmcoc3RhdGUsIGNoLT5uZmZ0LCBjaC0+QncsIDEpOworCWlmIChkaWIzMDAwbWNfcmVhZF93b3JkKHN0YXRlLCA1MDkpICYgMHg4MCkKKwkJZGliMzAwMG1jX3NldF90aW1pbmcoc3RhdGUsIGNoLT5uZmZ0LCBjaC0+QncsIDEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGliMzAwMG1jX2RlbW9kX291dHB1dF9tb2RlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kLCBpbnQgbW9kZSkKLXsKLQlzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdGF0ZSA9IGRlbW9kLT5kZW1vZHVsYXRvcl9wcml2OwotCXJldHVybiBkaWIzMDAwbWNfc2V0X291dHB1dF9tb2RlKHN0YXRlLCBtb2RlKTsKLX0KLQotc3RhdGljIGludCBkaWIzMDAwbWNfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kW10sIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkcikKLXsKLQlzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdDsKLQlpbnQgayxyZXQ9MDsKLQl1OCBuZXdfYWRkcjsKLQotCXN0YXRpYyB1OCBESUIzMDAwTUNfSTJDX0FERFJFU1NbXSA9IHsyMCwyMiwyNCwyNn07Ci0KLQlmb3IgKGsgPSBub19vZl9kZW1vZHMtMTsgayA+PSAwOyBrLS0pIHsKLQkJc3QgPSBkZW1vZFtrXS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQotCQkvKiBkZXNpZ25hdGVkIGkyYyBhZGRyZXNzICovCi0JCW5ld19hZGRyICAgICAgICAgID0gRElCMzAwME1DX0kyQ19BRERSRVNTW2tdOwotCi0JCXN0LT5pMmNfYWRkciA9IG5ld19hZGRyOwotCQlpZiAoZGliMzAwMG1jX2lkZW50aWZ5KHN0KSAhPSAwKSB7Ci0JCQlzdC0+aTJjX2FkZHIgPSBkZWZhdWx0X2FkZHI7Ci0JCQlpZiAoZGliMzAwMG1jX2lkZW50aWZ5KHN0KSAhPSAwKSB7Ci0JCQkJZHByaW50aygiLUUtICBEaUIzMDAwUC9NQyAjJWQ6IG5vdCBpZGVudGlmaWVkXG4iLCBrKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfQotCi0JCS8qIHR1cm4gb24gZGl2X291dCAqLwotCQlkaWIzMDAwbWNfZGVtb2Rfb3V0cHV0X21vZGUoZGVtb2Rba10sIE9VVE1PREVfTVBFRzJfUEFSX0NPTlRfQ0xLKTsKLQotCQkvLyBzZXQgbmV3IGkyYyBhZGRyZXNzIGFuZCBmb3JjZSBkaXZzdHIgKEJpdCAxKSB0byB2YWx1ZSAwIChCaXQgMCkKLQkJcmV0IHw9IGRpYjMwMDBtY193cml0ZV93b3JkKHN0LCAxMDI0LCAobmV3X2FkZHIgPDwgMykgfCAweDEpOwotCQlzdC0+aTJjX2FkZHIgPSBuZXdfYWRkcjsKLQl9Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbm9fb2ZfZGVtb2RzOyBrKyspIHsKLQkJc3QgPSBkZW1vZFtrXS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQotCQlyZXQgfD0gZGliMzAwMG1jX3dyaXRlX3dvcmQoc3QsIDEwMjQsIHN0LT5pMmNfYWRkciA8PCAzKTsKLQotCQkvKiB0dXJuIG9mZiBkYXRhIG91dHB1dCAqLwotCQlkaWIzMDAwbWNfZGVtb2Rfb3V0cHV0X21vZGUoZGVtb2Rba10sT1VUTU9ERV9ISUdIX1opOwotCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdCwgNzY5LCAoMSA8PCA3KSApOwotCi0JfQotCXJldHVybiAwOwotfQotCiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWIzMDAwbWNfZ2V0X3R1bmVyX2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QsIGludCBnYXRpbmcpCiB7CiAJc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3QgPSBkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdjsKQEAgLTgyNiw2MSArNzYyLDc5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRpYjMwMDBtY19zZXRfY29uZmlnKTsKIAotc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGRpYjMwMDBtY19vcHM7Ci0KLWludCBkaWIzMDAwbWNfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIGludCBub19vZl9kZW1vZHMsIHU4CWRlZmF1bHRfYWRkciwJCQkJdTggZG9faTJjX2VudW0sIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIGNmZ1tdLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZFtdKQoraW50IGRpYjMwMDBtY19pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwgc3RydWN0IGRpYjMwMDBtY19jb25maWcgY2ZnW10pCiB7Ci0Jc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3Q7Ci0JaW50IGssIG51bT0wOworCXN0cnVjdCBkaWIzMDAwbWNfc3RhdGUgc3QgPSB7IC5pMmNfYWRhcCA9IGkyYyB9OworCWludCBrOworCXU4IG5ld19hZGRyOwogCi0JaWYgKG5vX29mX2RlbW9kcyA8IDEpCi0JCXJldHVybiAtRUlOVkFMOworCXN0YXRpYyB1OCBESUIzMDAwTUNfSTJDX0FERFJFU1NbXSA9IHsyMCwyMiwyNCwyNn07CisKKwlmb3IgKGsgPSBub19vZl9kZW1vZHMtMTsgayA+PSAwOyBrLS0pIHsKKwkJc3QuY2ZnID0gJmNmZ1trXTsKKworCQkvKiBkZXNpZ25hdGVkIGkyYyBhZGRyZXNzICovCisJCW5ld19hZGRyICAgICAgICAgID0gRElCMzAwME1DX0kyQ19BRERSRVNTW2tdOworCQlzdC5pMmNfYWRkciA9IG5ld19hZGRyOworCQlpZiAoZGliMzAwMG1jX2lkZW50aWZ5KCZzdCkgIT0gMCkgeworCQkJc3QuaTJjX2FkZHIgPSBkZWZhdWx0X2FkZHI7CisJCQlpZiAoZGliMzAwMG1jX2lkZW50aWZ5KCZzdCkgIT0gMCkgeworCQkJCWRwcmludGsoIi1FLSAgRGlCMzAwMFAvTUMgIyVkOiBub3QgaWRlbnRpZmllZFxuIiwgayk7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0KKworCQlkaWIzMDAwbWNfc2V0X291dHB1dF9tb2RlKCZzdCwgT1VUTU9ERV9NUEVHMl9QQVJfQ09OVF9DTEspOworCisJCS8vIHNldCBuZXcgaTJjIGFkZHJlc3MgYW5kIGZvcmNlIGRpdnN0ciAoQml0IDEpIHRvIHZhbHVlIDAgKEJpdCAwKQorCQlkaWIzMDAwbWNfd3JpdGVfd29yZCgmc3QsIDEwMjQsIChuZXdfYWRkciA8PCAzKSB8IDB4MSk7CisJCXN0LmkyY19hZGRyID0gbmV3X2FkZHI7CisJfQogCiAJZm9yIChrID0gMDsgayA8IG5vX29mX2RlbW9kczsgaysrKSB7Ci0JCXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRpYjMwMDBtY19zdGF0ZSksIEdGUF9LRVJORUwpOwotCQlpZiAoc3QgPT0gTlVMTCkKLQkJCWdvdG8gZXJyb3I7CisJCXN0LmNmZyA9ICZjZmdba107CisJCXN0LmkyY19hZGRyID0gRElCMzAwME1DX0kyQ19BRERSRVNTW2tdOwogCi0JCW51bSsrOworCQlkaWIzMDAwbWNfd3JpdGVfd29yZCgmc3QsIDEwMjQsIHN0LmkyY19hZGRyIDw8IDMpOwogCi0JCXN0LT5jZmcgPSAmY2ZnW2tdOwotCS8vCXN0LT5ncGlvX3ZhbCA9IGNmZ1trXS5ncGlvX3ZhbDsKLQkvLwlzdC0+Z3Bpb19kaXIgPSBjZmdba10uZ3Bpb19kaXI7Ci0JCXN0LT5pMmNfYWRhcCA9IGkyY19hZGFwOwotCi0JCWRlbW9kW2tdICAgICAgICAgICA9ICZzdC0+ZGVtb2Q7Ci0JCWRlbW9kW2tdLT5kZW1vZHVsYXRvcl9wcml2ICAgICA9IHN0OwotCQltZW1jcHkoJnN0LT5kZW1vZC5vcHMsICZkaWIzMDAwbWNfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKLQotLy8JCUlOSVRfQ09NUE9ORU5UX1JFR0lTVEVSX0FDQ0VTUygmc3QtPnJlZ2lzdGVyX2FjY2VzcywgMTIsIDE2LCBkaWI3MDAwcF9yZWdpc3Rlcl9yZWFkLCBkaWI3MDAwcF9yZWdpc3Rlcl93cml0ZSwgc3QpOwotLy8JCWRlbW9kW2tdLT5yZWdpc3Rlcl9hY2Nlc3MgPSAmc3QtPnJlZ2lzdGVyX2FjY2VzczsKKwkJLyogdHVybiBvZmYgZGF0YSBvdXRwdXQgKi8KKwkJZGliMzAwMG1jX3NldF9vdXRwdXRfbW9kZSgmc3QsIE9VVE1PREVfSElHSF9aKTsKIAl9Ci0KLQlpZiAoZG9faTJjX2VudW0pIHsKLQkJaWYgKGRpYjMwMDBtY19pMmNfZW51bWVyYXRpb24oZGVtb2Qsbm9fb2ZfZGVtb2RzLGRlZmF1bHRfYWRkcikgIT0gMCkKLQkJCWdvdG8gZXJyb3I7Ci0JfSBlbHNlIHsKLQkJc3QgPSBkZW1vZFswXS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQkJc3QtPmkyY19hZGRyID0gZGVmYXVsdF9hZGRyOwotCQlpZiAoZGliMzAwMG1jX2lkZW50aWZ5KHN0KSAhPSAwKQotCQkJZ290byBlcnJvcjsKLQl9Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbnVtOyBrKyspIHsKLQkJc3QgPSBkZW1vZFtrXS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQkJZGlieDAwMF9pbml0X2kyY19tYXN0ZXIoJnN0LT5pMmNfbWFzdGVyLCBESUIzMDAwTUMsIHN0LT5pMmNfYWRhcCwgc3QtPmkyY19hZGRyKTsKLQl9Ci0KIAlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZGliMzAwMG1jX2kyY19lbnVtZXJhdGlvbik7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBkaWIzMDAwbWNfb3BzOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICogZGliMzAwMG1jX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjMwMDBtY19jb25maWcgKmNmZykKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZDsKKwlzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdDsKKwlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkaWIzMDAwbWNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3QgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdC0+Y2ZnID0gY2ZnOworCXN0LT5pMmNfYWRhcCA9IGkyY19hZGFwOworCXN0LT5pMmNfYWRkciA9IGkyY19hZGRyOworCisJZGVtb2QgICAgICAgICAgICAgICAgICAgPSAmc3QtPmRlbW9kOworCWRlbW9kLT5kZW1vZHVsYXRvcl9wcml2ID0gc3Q7CisJbWVtY3B5KCZzdC0+ZGVtb2Qub3BzLCAmZGliMzAwMG1jX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisKKwlpZiAoZGliMzAwMG1jX2lkZW50aWZ5KHN0KSAhPSAwKQorCQlnb3RvIGVycm9yOworCisJZGlieDAwMF9pbml0X2kyY19tYXN0ZXIoJnN0LT5pMmNfbWFzdGVyLCBESUIzMDAwTUMsIHN0LT5pMmNfYWRhcCwgc3QtPmkyY19hZGRyKTsKKworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0LCAxMDM3LCAweDMxMzApOworCisJcmV0dXJuIGRlbW9kOwogCiBlcnJvcjoKLQlmb3IgKGsgPSAwOyBrIDwgbnVtOyBrKyspIHsKLQkJa2ZyZWUoZGVtb2Rba10tPmRlbW9kdWxhdG9yX3ByaXYpOwotCQlkZW1vZFtrXSA9IE5VTEw7Ci0JfQotCXJldHVybiAtRUlOVkFMOworCWtmcmVlKHN0KTsKKwlyZXR1cm4gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTChkaWIzMDAwbWNfYXR0YWNoKTsKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGRpYjMwMDBtY19vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmgKaW5kZXggZmQwYjJlNy4uYjE5OGNkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuaApAQCAtMzcsMTcgKzM3LDE3IEBACiAjZGVmaW5lIERFRkFVTFRfRElCMzAwMFBfSTJDX0FERFJFU1MgIDI0CiAKICNpZiBkZWZpbmVkKENPTkZJR19EVkJfRElCMzAwME1DKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfRElCMzAwME1DX01PRFVMRSkKLWV4dGVybiBpbnQgZGliMzAwMG1jX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsCi0gICAgdTggZG9faTJjX2VudW0sIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIGNmZ1tdLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZFtdKTsKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICogZGliMzAwMG1jX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjMwMDBtY19jb25maWcgKmNmZyk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBkaWIzMDAwbWNfYXR0YWNoKGNvbnN0IHN0cnVjdCBkaWIzMDAwX2NvbmZpZyogY29uZmlnLAotCQkJCQkgICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjLCBzdHJ1Y3QgZGliX2ZlX3hmZXJfb3BzICp4ZmVyX29wcykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqIGRpYjMwMDBtY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggaTJjX2FkZHIsIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnICpjZmcpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiBOVUxMOwogfQogI2VuZGlmIC8vIENPTkZJR19EVkJfRElCMzAwME1DCiAKK2V4dGVybiBpbnQgZGliMzAwMG1jX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyLCBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyBjZmdbXSk7CisKIGV4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWIzMDAwbWNfZ2V0X3R1bmVyX2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QsIGludCBnYXRpbmcpOwogCiBleHRlcm4gaW50IGRpYjMwMDBtY19waWRfY29udHJvbChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGluZGV4LCBpbnQgcGlkLGludCBvbm9mZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQyMDYwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQyMDYwLmMKaW5kZXggNTA4ZWMxYi4uNDUwZmFkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MjA2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDIwNjAuYwpAQCAtMjQ3LDYgKzI0Nyw5IEBACiAJaWYgKG10MjA2MF93cml0ZXJlZ3MocHJpdixtdDIwNjBfY29uZmlnMixzaXplb2YobXQyMDYwX2NvbmZpZzIpKSkKIAkJcmV0dXJuOwogCisJLyogaW5pdGlhbGl6ZSB0aGUgY2xvY2sgb3V0cHV0ICovCisJbXQyMDYwX3dyaXRlcmVnKHByaXYsIFJFR19WR0FHLCAocHJpdi0+Y2ZnLT5jbG9ja19vdXQgPDwgNikgfCAweDMwKTsKKwogCWRvIHsKIAkJYiB8PSAoMSA8PCA2KTsgLy8gRk0xU1M7CiAJCW10MjA2MF93cml0ZXJlZyhwcml2LCBSRUdfTE8yQzEsYik7CkBAIC0yOTQsMTMgKzI5NywxMyBAQAogc3RhdGljIGludCBtdDIwNjBfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgbXQyMDYwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKLQlyZXR1cm4gbXQyMDYwX3dyaXRlcmVnKHByaXYsIFJFR19WR0FHLDB4MzMpOworCXJldHVybiBtdDIwNjBfd3JpdGVyZWcocHJpdiwgUkVHX1ZHQUcsIChwcml2LT5jZmctPmNsb2NrX291dCA8PCA2KSB8IDB4MzMpOwogfQogCiBzdGF0aWMgaW50IG10MjA2MF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgbXQyMDYwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKLQlyZXR1cm4gbXQyMDYwX3dyaXRlcmVnKHByaXYsIFJFR19WR0FHLDB4MzApOworCXJldHVybiBtdDIwNjBfd3JpdGVyZWcocHJpdiwgUkVHX1ZHQUcsIChwcml2LT5jZmctPmNsb2NrX291dCA8PCA2KSB8IDB4MzApOwogfQogCiBzdGF0aWMgaW50IG10MjA2MF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQpAQCAtMzI5LDE0ICszMzIsMTQgQEAKIH07CiAKIC8qIFRoaXMgZnVuY3Rpb25zIHRyaWVzIHRvIGlkZW50aWZ5IGEgTVQyMDYwIHR1bmVyIGJ5IHJlYWRpbmcgdGhlIFBBUlQvUkVWIHJlZ2lzdGVyLiBUaGlzIGlzIGhhc3R5LiAqLwotaW50IG10MjA2MF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgbXQyMDYwX2NvbmZpZyAqY2ZnLCB1MTYgaWYxKQorc3RydWN0IGR2Yl9mcm9udGVuZCAqIG10MjA2MF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgbXQyMDYwX2NvbmZpZyAqY2ZnLCB1MTYgaWYxKQogewogCXN0cnVjdCBtdDIwNjBfcHJpdiAqcHJpdiA9IE5VTEw7CiAJdTggaWQgPSAwOwogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtdDIwNjBfcHJpdiksIEdGUF9LRVJORUwpOwogCWlmIChwcml2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKIAogCXByaXYtPmNmZyAgICAgID0gY2ZnOwogCXByaXYtPmkyYyAgICAgID0gaTJjOwpAQCAtMzQ0LDEyICszNDcsMTIgQEAKIAogCWlmIChtdDIwNjBfcmVhZHJlZyhwcml2LFJFR19QQVJUX1JFViwmaWQpICE9IDApIHsKIAkJa2ZyZWUocHJpdik7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlpZiAoaWQgIT0gUEFSVF9SRVYpIHsKIAkJa2ZyZWUocHJpdik7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gTlVMTDsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiTVQyMDYwOiBzdWNjZXNzZnVsbHkgaWRlbnRpZmllZCAoSUYxID0gJWQpXG4iLCBpZjEpOwogCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZtdDIwNjBfdHVuZXJfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKQEAgLTM1OCw3ICszNjEsNyBAQAogCiAJbXQyMDYwX2NhbGlicmF0ZShwcml2KTsKIAotCXJldHVybiAwOworCXJldHVybiBmZTsKIH0KIEVYUE9SVF9TWU1CT0wobXQyMDYwX2F0dGFjaCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDIwNjAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDIwNjAuaAppbmRleCBjNThiMDNlLi4zNGEzN2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQyMDYwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MjA2MC5oCkBAIC0yNyw5ICsyNyw5IEBACiAKIHN0cnVjdCBtdDIwNjBfY29uZmlnIHsKIAl1OCBpMmNfYWRkcmVzczsKLQkvKiBTaGFsbCB3ZSBhZGQgc2V0dGluZ3MgZm9yIHRoZSBkaXNjcmV0ZSBvdXRwdXRzID8gKi8KKwl1OCBjbG9ja19vdXQ7IC8qIDAgPSBvZmYsIDEgPSBDTEsvNCwgMiA9IENMSy8yLCAzID0gQ0xLLzEgKi8KIH07CiAKLWV4dGVybiBpbnQgbXQyMDYwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBtdDIwNjBfY29uZmlnICpjZmcsIHUxNiBpZjEpOworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiBtdDIwNjBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IG10MjA2MF9jb25maWcgKmNmZywgdTE2IGlmMSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IGQxMTgzYzkuLjVjNTNmZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTM2LDcgKzM2LDcgQEAKIG1lbnUgIkVuY29kZXJzL2RlY29kZXJzIGFuZCBvdGhlciBoZWxwZXIgY2hpcHMiCiAJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgIVZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAKLWNvbW1lbnQgIkF1ZGlvIERlY29kZXJzIgorY29tbWVudCAiQXVkaW8gZGVjb2RlcnMiCiAKIGNvbmZpZyBWSURFT19UVkFVRElPCiAJdHJpc3RhdGUgIlNpbXBsZSBhdWRpbyBkZWNvZGVyIGNoaXBzIgpAQCAtNTEsNyArNTEsNyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHR2YXVkaW8uCiAKIGNvbmZpZyBWSURFT19UREE3NDMyCi0JdHJpc3RhdGUgIlBoaWxpcHMgVERBNzQzMiBhdWRpbyBwcm9jZXNzb3IgY2hpcCIKKwl0cmlzdGF0ZSAiUGhpbGlwcyBUREE3NDMyIGF1ZGlvIHByb2Nlc3NvciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGRhNzQzMiBhdWRpbyBkZWNvZGVyIGNoaXAgZm91bmQgb24gc29tZSBidDh4eCBib2FyZHMuCkBAIC02MCw3ICs2MCw3IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGRhNzQzMi4KIAogY29uZmlnIFZJREVPX1REQTk4NDAKLQl0cmlzdGF0ZSAiUGhpbGlwcyBUREE5ODQwIGF1ZGlvIHByb2Nlc3NvciBjaGlwIgorCXRyaXN0YXRlICJQaGlsaXBzIFREQTk4NDAgYXVkaW8gcHJvY2Vzc29yIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRkYTk4NDAgYXVkaW8gZGVjb2RlciBjaGlwIGZvdW5kIG9uIHNvbWUgWm9yYW4gYm9hcmRzLgpAQCAtNjksNyArNjksNyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRkYTk4NDAuCiAKIGNvbmZpZyBWSURFT19UREE5ODc1Ci0JdHJpc3RhdGUgIlBoaWxpcHMgVERBOTg3NSBhdWRpbyBwcm9jZXNzb3IgY2hpcCIKKwl0cmlzdGF0ZSAiUGhpbGlwcyBUREE5ODc1IGF1ZGlvIHByb2Nlc3NvciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGRhOTg3NSBhdWRpbyBkZWNvZGVyIGNoaXAgZm91bmQgb24gc29tZSBidDh4eCBib2FyZHMuCkBAIC03OCw3ICs3OCw3IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGRhOTg3NS4KIAogY29uZmlnIFZJREVPX1RFQTY0MTVDCi0JdHJpc3RhdGUgIlBoaWxpcHMgVEVBNjQxNUMgYXVkaW8gcHJvY2Vzc29yIGNoaXAiCisJdHJpc3RhdGUgIlBoaWxpcHMgVEVBNjQxNUMgYXVkaW8gcHJvY2Vzc29yIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRlYTY0MTVjIGF1ZGlvIGRlY29kZXIgY2hpcCBmb3VuZCBvbiBzb21lIGJ0OHh4IGJvYXJkcy4KQEAgLTg3LDcgKzg3LDcgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0ZWE2NDE1Yy4KIAogY29uZmlnIFZJREVPX1RFQTY0MjAKLQl0cmlzdGF0ZSAiUGhpbGlwcyBURUE2NDIwIGF1ZGlvIHByb2Nlc3NvciBjaGlwIgorCXRyaXN0YXRlICJQaGlsaXBzIFRFQTY0MjAgYXVkaW8gcHJvY2Vzc29yIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRlYTY0MjAgYXVkaW8gZGVjb2RlciBjaGlwIGZvdW5kIG9uIHNvbWUgYnQ4eHggYm9hcmRzLgpAQCAtMTQzLDY0ICsxNDMsMTAgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdtODczOS4KIAotY29tbWVudCAiTVBFRyB2aWRlbyBlbmNvZGVycyIKLQotY29uZmlnIFZJREVPX0NYMjM0MVgKLQl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyMzQxeCBNUEVHIGVuY29kZXJzIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBFWFBFUklNRU5UQUwKLQktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0aGUgQ29uZXhhbnQgQ1gyMzQxNiBNUEVHIGVuY29kZXJzCi0JICBhbmQgQ1gyMzQxNSBNUEVHIGVuY29kZXIvZGVjb2RlcnMuCi0KLQkgIFRoaXMgbW9kdWxlIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZW5jb2RpbmcgZnVuY3Rpb25zIG9ubHkuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4MjM0MXguCi0KLXNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL0tjb25maWciCi0KLWNvbW1lbnQgIlZpZGVvIGVuY29kZXJzIgotCi1jb25maWcgVklERU9fU0FBNzEyNwotCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMjcvOSBkaWdpdGFsIHZpZGVvIGVuY29kZXJzIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCi0JLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzEyNy85IGRpZ2l0YWwgdmlkZW8gZW5jb2RlcnMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMjcuCi0KLWNvbmZpZyBWSURFT19TQUE3MTg1Ci0JdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzE4NSB2aWRlbyBlbmNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKLQktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTg1IHZpZGVvIGVuY29kZXIuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxODUuCi0KLWNvbmZpZyBWSURFT19BRFY3MTcwCi0JdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzAgdmlkZW8gZW5jb2RlciBkcml2ZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQwotCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcyBBRFY3MTcwIHZpZGVvIGVuY29kZXIgZHJpdmVyCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFkdjcxNzAuCi0KLWNvbmZpZyBWSURFT19BRFY3MTc1Ci0JdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzUgdmlkZW8gZW5jb2RlciBkcml2ZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQwotCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcyBBRFY3MTc1IHZpZGVvIGVuY29kZXIgZHJpdmVyCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFkdjcxNzUuCi0KIGNvbW1lbnQgIlZpZGVvIGRlY29kZXJzIgogCiBjb25maWcgVklERU9fQlQ4MTkKLQl0cmlzdGF0ZSAiQlQ4MTlBIFZpZGVvU3RyZWFtIERlY29kZXIiCisJdHJpc3RhdGUgIkJUODE5QSBWaWRlb1N0cmVhbSBkZWNvZGVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBCVDgxOUEgdmlkZW8gZGVjb2Rlci4KQEAgLTIwOSw3ICsxNTUsNyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJ0ODE5LgogCiBjb25maWcgVklERU9fQlQ4NTYKLQl0cmlzdGF0ZSAiQlQ4NTYgVmlkZW9TdHJlYW0gRGVjb2RlciIKKwl0cmlzdGF0ZSAiQlQ4NTYgVmlkZW9TdHJlYW0gZGVjb2RlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgQlQ4NTYgdmlkZW8gZGVjb2Rlci4KQEAgLTIxOCw3ICsxNjQsNyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJ0ODU2LgogCiBjb25maWcgVklERU9fQlQ4NjYKLQl0cmlzdGF0ZSAiQlQ4NjYgVmlkZW9TdHJlYW0gRGVjb2RlciIKKwl0cmlzdGF0ZSAiQlQ4NjYgVmlkZW9TdHJlYW0gZGVjb2RlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgQlQ4NjYgdmlkZW8gZGVjb2Rlci4KQEAgLTI5NSw3ICsyNDEsNyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHR2cDUxNTAuCiAKIGNvbmZpZyBWSURFT19WUFgzMjIwCi0JdHJpc3RhdGUgInZweDMyMjBhLCB2cHgzMjE2YiAmIHZweDMyMTRjIHZpZGVvIGRlY29kZXIgZHJpdmVyIgorCXRyaXN0YXRlICJ2cHgzMjIwYSwgdnB4MzIxNmIgJiB2cHgzMjE0YyB2aWRlbyBkZWNvZGVycyIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgVlBYMzIyeCB2aWRlbyBkZWNvZGVycy4KQEAgLTMwMyw2ICsyNDksNjIgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZweDMyMjAuCiAKK2NvbW1lbnQgIlZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycyIKKworc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvS2NvbmZpZyIKKworY29tbWVudCAiTVBFRyB2aWRlbyBlbmNvZGVycyIKKworY29uZmlnIFZJREVPX0NYMjM0MVgKKwl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyMzQxeCBNUEVHIGVuY29kZXJzIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgQ29uZXhhbnQgQ1gyMzQxNiBNUEVHIGVuY29kZXJzCisJICBhbmQgQ1gyMzQxNSBNUEVHIGVuY29kZXIvZGVjb2RlcnMuCisKKwkgIFRoaXMgbW9kdWxlIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZW5jb2RpbmcgZnVuY3Rpb25zIG9ubHkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4MjM0MXguCisKK2NvbW1lbnQgIlZpZGVvIGVuY29kZXJzIgorCitjb25maWcgVklERU9fU0FBNzEyNworCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMjcvOSBkaWdpdGFsIHZpZGVvIGVuY29kZXJzIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzEyNy85IGRpZ2l0YWwgdmlkZW8gZW5jb2RlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMjcuCisKK2NvbmZpZyBWSURFT19TQUE3MTg1CisJdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzE4NSB2aWRlbyBlbmNvZGVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTg1IHZpZGVvIGVuY29kZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxODUuCisKK2NvbmZpZyBWSURFT19BRFY3MTcwCisJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzAgdmlkZW8gZW5jb2RlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVjcxNzAgdmlkZW8gZW5jb2RlciBkcml2ZXIKKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWR2NzE3MC4KKworY29uZmlnIFZJREVPX0FEVjcxNzUKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURWNzE3NSB2aWRlbyBlbmNvZGVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMgQURWNzE3NSB2aWRlbyBlbmNvZGVyIGRyaXZlcgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZHY3MTc1LgorCiBjb21tZW50ICJWaWRlbyBpbXByb3ZlbWVudCBjaGlwcyIKIAogY29uZmlnIFZJREVPX1VQRDY0MDMxQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCBkMjNhNDJiLi5hODQ5MDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwpAQCAtMjAwMCw3ICsyMDAwLDcgQEAKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAzLCAwLCAxLCAyIH0sCisJCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSB9LAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5ub19ncGlvaXJxICAgICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCmluZGV4IGE3OTIxZjlkLi40NjczODMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYwpAQCAtODk2LDcgKzg5Niw3IEBACiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBjb3JlLT5uYW1lKTsKIAkJcHJpbnRrKCIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKIAkJICAgICAgIGNvcmUtPm5hbWUpOwotCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVklESU9DX0xPR19TVEFUVVMsIDApOworCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVklESU9DX0xPR19TVEFUVVMsIE5VTEwpOwogCQljeDIzNDF4X2xvZ19zdGF0dXMoJmRldi0+cGFyYW1zLCBuYW1lKTsKIAkJcHJpbnRrKCIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKIAkJICAgICAgIGNvcmUtPm5hbWUpOwpAQCAtMTA4Niw3ICsxMDg2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllcnIgPSAtRU5PREVWOwotCWlmICghY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLmJsYWNrYmlyZCkKKwlpZiAoIShjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ubXBlZyAmIENYODhfTVBFR19CTEFDS0JJUkQpKQogCQlnb3RvIGZhaWxfY29yZTsKIAogCWVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwppbmRleCA2MjE0ZWI4Li5hZjcxZDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKQEAgLTI5NCw3ICsyOTQsNyBAQAogCQkJLnR5cGUgICA9IENYODhfUkFESU8sCiAJCQkuZ3BpbzAgID0gMHgwMDAwYmQ2MiwKIAkJfSwKLQkJLmJsYWNrYmlyZCA9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19CTEFDS0JJUkQsCiAJfSwKIAlbQ1g4OF9CT0FSRF9JT0RBVEFfR1ZWQ1AzUENJXSA9IHsKIAkJLm5hbWUJCT0gIklPREFUQSBHVi1WQ1AzL1BDSSIsCkBAIC0zNTgsNyArMzU4LDcgQEAKIAkJCS50eXBlICAgPSBDWDg4X1JBRElPLAogCQkJLmdwaW8wICA9IDB4MDAwMGZkZTIsCiAJCX0sCi0JCS5ibGFja2JpcmQgPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfQkxBQ0tCSVJELAogCX0sCiAJW0NYODhfQk9BUkRfTVNJX1RWQU5ZV0hFUkVdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiTVNJIFRWLUBueXdoZXJlIiwKQEAgLTQwMSw3ICs0MDEsNyBAQAogCQkJLmdwaW8wICA9IDB4MDcwMCwKIAkJCS5ncGlvMiAgPSAweDAxMDEsCiAJCX19LAotCQkuZHZiICAgICAgICAgICAgPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVDFdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViBEVkItVDEiLApAQCAtNDE4LDcgKzQxOCw3IEBACiAJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweDAwMDAyN2RmLAogCQl9fSwKLQkJLmR2YiAgICAgICAgICAgID0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX0tXT1JMRF9MVFY4ODNdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiS1dvcmxkIExUVjg4M1JGIiwKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAJPSAweDBmMDAsCiAJCX19LAotCQkuZHZiICAgICAgICAgICAgPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfSEFVUFBBVUdFX0RWQl9UMV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgTm92YS1UIERWQi1UIiwKQEAgLTUwMCw3ICs1MDAsNyBAQAogCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCiAJCQkudm11eCAgID0gMCwKIAkJfX0sCi0JCS5kdmIgICAgICAgICAgICA9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9DT05FWEFOVF9EVkJfVDFdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiQ29uZXhhbnQgRFZCLVQgcmVmZXJlbmNlIGRlc2lnbiIsCkBAIC01MTIsNyArNTEyLDcgQEAKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfRFZCLAogCQkJLnZtdXggICA9IDAsCiAJCX19LAotCQkuZHZiICAgICAgICAgICAgPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfUFJPVklERU9fUFYyNTldID0gewogCQkubmFtZQkJPSAiUHJvdmlkZW8gUFYyNTkiLApAQCAtNTI0LDcgKzUyNCw3IEBACiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKIAkJfX0sCi0JCS5ibGFja2JpcmQgPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfQkxBQ0tCSVJELAogCX0sCiAJW0NYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QTFVTXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgUGx1cyIsCkBAIC01NDEsNyArNTQxLDcgQEAKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4MDAwMDI3ZGYsCiAJCX19LAotCQkuZHZiICAgICAgICAgICAgPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UXSA9IHsKIAkJLm5hbWUJCT0gImRpZ2l0YWxub3cgRE5UViBMaXZlISBEVkItVCIsCkBAIC01NjAsNyArNTYwLDcgQEAKIAkJCS5ncGlvMCAgPSAweDAwMDAwNzAwLAogCQkJLmdwaW8yICA9IDB4MDAwMDAxMDEsCiAJCX19LAotCQkuZHZiICAgICAgICAgICAgPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfUENIRFRWX0hEMzAwMF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJwY0hEVFYgSEQzMDAwIEhEVFYiLApAQCAtNTk5LDcgKzU5OSw3IEBACiAJCQkuZ3BpbzIgID0gMHgwMDAwMDAwMCwKIAkJCS5ncGlvMyAgPSAweDAwMDAwMDAwLAogCQl9LAotCQkuZHZiICAgICAgICAgICAgPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfSEFVUFBBVUdFX1JPU0xZTl0gPSB7CiAJCS8vIGVudHJ5IGFkZGVkIGJ5IEthdXN0dWJoIEQuIEJoYWxlcmFvIDxiaGFsZXJhby4xQG9zdS5lZHU+CkBAIC02MzMsNyArNjMzLDcgQEAKIAkJCSAuZ3BpbzAgID0gMHhlZDk2LAogCQkJIC5ncGlvMiAgPSAweDAwZmYsCiAJCSB9LAotCQkuYmxhY2tiaXJkID0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0JMQUNLQklSRCwKIAl9LAogCVtDWDg4X0JPQVJEX0RJR0lUQUxMT0dJQ19NRUNdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiRGlnaXRhbC1Mb2dpYyBNSUNST1NQQUNFIEVudGVydGFpbm1lbnQgQ2VudGVyIChNRUMpIiwKQEAgLTY1OSw3ICs2NTksNyBAQAogCQkJLnR5cGUgICA9IENYODhfUkFESU8sCiAJCQkuZ3BpbzAgID0gMHgwMDAwOWQwMCwKIAkJfSwKLQkJLmJsYWNrYmlyZCA9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19CTEFDS0JJUkQsCiAJfSwKIAlbQ1g4OF9CT0FSRF9JT0RBVEFfR1ZCQ1RWN0VdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiSU9EQVRBIEdWL0JDVFY3RSIsCkBAIC03MjcsNyArNzI3LDcgQEAKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4OTdlOSwKIAkJfX0sCi0JCS5kdmIgICAgICAgICAgICA9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9BRFNURUNIX0RWQl9UX1BDSV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJBRFMgVGVjaCBJbnN0YW50IFRWIERWQi1UIFBDSSIsCkBAIC03NDYsNyArNzQ2LDcgQEAKIAkJCS5ncGlvMCAgPSAweDA3MDAsCiAJCQkuZ3BpbzIgID0gMHgwMTAxLAogCQl9fSwKLQkJLmR2YiAgICAgICAgICAgID0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMTQwMF9EVkJfVDFdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiVGVycmFUZWMgQ2luZXJneSAxNDAwIERWQi1UIiwKQEAgLTc1NSw3ICs3NTUsNyBAQAogCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCiAJCQkudm11eCAgID0gMCwKIAkJfX0sCi0JCS5kdmIgICAgICAgICAgICA9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfR09MRF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIDUgR29sZCIsCkBAIC03NzcsNyArNzc3LDcgQEAKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4ODdmOSwKIAkJfX0sCi0JCS5kdmIgICAgICAgICAgICA9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9BVkVSTUVESUFfVUxUUkFUVl9NQ181NTBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiQXZlck1lZGlhIFVsdHJhVFYgTWVkaWEgQ2VudGVyIFBDSSA1NTAiLApAQCAtNzg2LDcgKzc4Niw3IEBACiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKLQkJLmJsYWNrYmlyZCAgICAgID0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0JMQUNLQklSRCwKIAkJLmlucHV0ICAgICAgICAgID0ge3sKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAwLApAQCAtODU0LDcgKzg1NCw3IEBACiAJCQkuZ3BpbzIgID0gMHgwMDAwMDAwMSwKIAkJCS5ncGlvMyAgPSAweDAwMDAwMDAwLAogCQl9fSwKLQkJLmR2YiAgICAgICAgICAgID0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTAwMF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJXaW5GYXN0IERUVjEwMDAtVCIsCkBAIC04NjYsNyArODY2LDcgQEAKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfRFZCLAogCQkJLnZtdXggICA9IDAsCiAJCX19LAotCQkuZHZiICAgICAgICAgICAgPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfQVZFUlRWXzMwM10gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJBVmVyVFYgMzAzIChNMTI2KSIsCkBAIC05MTQsNyArOTE0LDcgQEAKIAkJCS50eXBlCT0gQ1g4OF9WTVVYX1NWSURFTywKIAkJCS52bXV4CT0gMiwKIAkJfX0sCi0JCS5kdmIJCT0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU0UyX1MxXSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSBOb3ZhLVNFMiBEVkItUyIsCkBAIC05MjYsNyArOTI2LDcgQEAKIAkJCS50eXBlCT0gQ1g4OF9WTVVYX0RWQiwKIAkJCS52bXV4CT0gMCwKIAkJfX0sCi0JCS5kdmIJCT0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX0tXT1JMRF9EVkJTXzEwMF0gPSB7CiAJCS5uYW1lCQk9ICJLV29ybGQgRFZCLVMgMTAwIiwKQEAgLTk0NCw3ICs5NDQsNyBAQAogCQkJLnR5cGUJPSBDWDg4X1ZNVVhfU1ZJREVPLAogCQkJLnZtdXgJPSAyLAogCQl9fSwKLQkJLmR2YgkJPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDBdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjExMDAgRFZCLVQvSHlicmlkIiwKQEAgLTk2NCw3ICs5NjQsNyBAQAogCQkJLnZtdXgJPSAyLAogCQl9fSwKIAkJLyogZml4bWU6IEFkZCByYWRpbyBzdXBwb3J0ICovCi0JCS5kdmIJCT0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwTFBdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjExMDAgRFZCLVQvSHlicmlkIChMb3cgUHJvZmlsZSkiLApAQCAtOTgxLDcgKzk4MSw3IEBACiAJCQkudm11eAk9IDEsCiAJCX19LAogCQkvKiBmaXhtZTogQWRkIHJhZGlvIHN1cHBvcnQgKi8KLQkJLmR2YgkJPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UX1BST10gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJkaWdpdGFsbm93IEROVFYgTGl2ZSEgRFZCLVQgUHJvIiwKQEAgLTEwMDgsNyArMTAwOCw3IEBACiAJCQkgLnR5cGUgID0gQ1g4OF9SQURJTywKIAkJCSAuZ3BpbzAgPSAweGY4MDgwOCwKIAkJfSwKLQkJLmR2YiAgICAgICAgICAgID0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVF9DWDIyNzAyXSA9IHsKIAkJLyogS3dvcmxkIFYtc3RyZWFtIFhwZXJ0IERWQi1UIHdpdGggVGhvbXNvbiB0dW5lciAqLwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAKIAkJCS5ncGlvMCAgPSAweDA3MDAsCiAJCQkuZ3BpbzIgID0gMHgwMTAxLAogCQl9fSwKLQkJLmR2YiAgICAgICAgICAgID0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIERWQi1UIER1YWwgRGlnaXRhbCIsCkBAIC0xMDQ3LDcgKzEwNDcsNyBAQAogCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAgID0gMHgwMDAwNjdkZiwKIAkJfX0sCi0JCS5kdmIgICAgICAgICAgICA9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9LV09STERfSEFSRFdBUkVfTVBFR19UVl9YUEVSVF0gPSB7CiAJCS8qIEZJWE1FOiBBdWRpbyBub3Qgd29ya2luZyBmb3Igcy12aWRlbyAvIGNvbXBvc2l0ZSBpbnB1dHMuICovCkBAIC0xMDc1LDcgKzEwNzUsNyBAQAogCQkJLmdwaW8wICA9IDB4M2RlNiwKIAkJCS5ncGlvMiAgPSAweDAwZmYsCiAJCX0sCi0JCS5ibGFja2JpcmQgICAgICA9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19CTEFDS0JJUkQsCiAJfSwKIAlbQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0hZQlJJRF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIERWQi1UIEh5YnJpZCIsCkBAIC0xMDk2LDcgKzEwOTYsNyBAQAogCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAgID0gMHgwMDAwYTc1YiwKIAkJfX0sCi0JCS5kdmIgICAgICAgICAgICA9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9QQ0hEVFZfSEQ1NTAwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gInBjSERUViBIRDU1MDAgSERUViIsCkBAIC0xMTE4LDcgKzExMTgsNyBAQAogCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAgID0gMHg4N2Y5LAogCQl9fSwKLQkJLmR2YiAgICAgICAgICAgID0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX0tXT1JMRF9NQ0UyMDBfREVMVVhFXSA9IHsKIAkJLyogRklYTUU6IHRlc3RlZCBUViBpbnB1dCBvbmx5LCBkaXNhYmxlZCBjb21wb3NpdGUsCkBAIC0xMTM0LDcgKzExMzQsNyBAQAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHgwMDAwQkRFNgogCQl9fSwKLQkJLmJsYWNrYmlyZCA9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19CTEFDS0JJUkQsCiAJfSwKIAlbQ1g4OF9CT0FSRF9QSVhFTFZJRVdfUExBWVRWX1A3MDAwXSA9IHsKIAkJLyogRklYTUU6IFNWaWRlbywgQ29tcG9zaXRlIGFuZCBGTSBpbnB1dHMgYXJlIHVudGVzdGVkICovCkBAIC0xMTUwLDcgKzExNTAsNyBAQAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHg1ZGE2LAogCQl9fSwKLQkJLmJsYWNrYmlyZCA9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19CTEFDS0JJUkQsCiAJfSwKIAlbQ1g4OF9CT0FSRF9OUEdURUNIX1JFQUxUVl9UT1AxMEZNXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk5QRyBUZWNoIFJlYWwgVFYgRk0gVG9wIDEwIiwKQEAgLTExOTIsNyArMTE5Miw3IEBACiAJCQkuZ3BpbzIgID0gMHgwMDAxNzMwNCwKIAkJCS5ncGlvMyAgPSAweDAyMDAwMDAwLAogCQl9fSwKLQkJLmR2YiAgICAgICAgICAgID0gMSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX0dFTklBVEVDSF9EVkJTXSA9IHsKIAkJLm5hbWUgICAgICAgICAgPSAiR2VuaWF0ZWNoIERWQi1TIiwKQEAgLTEyMDcsNyArMTIwNyw3IEBACiAJCQkudHlwZSAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICA9IDEsCiAJCX19LAotCQkuZHZiICAgICAgPSAxLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCiAJW0NYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDBdID0gewogCQkvKiBGSVhNRTogQWRkIGR2YiAmIHJhZGlvIHN1cHBvcnQgKi8KQEAgLTEyODcsNiArMTI4Nyw3IEBACiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5hdWRpb19jaGlwICAgICA9IEFVRElPX0NISVBfV004Nzc1LAogCQkuaW5wdXQJCT0ge3sKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLApAQCAtMTMwMSw3ICsxMzAyLDcgQEAKIAkJCS5ncGlvMAk9IDB4ZTc4MCwKIAkJfX0sCiAJCS8qIGZpeG1lOiBBZGQgcmFkaW8gc3VwcG9ydCAqLwotCQkuZHZiCQk9IDEsCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3g4OF9iY291bnQgPSBBUlJBWV9TSVpFKGN4ODhfYm9hcmRzKTsKQEAgLTE1ODEsNiArMTU4MiwxNCBAQAogCQkuc3VidmVuZG9yID0gMHgxMDdkLAogCQkuc3ViZGV2aWNlID0gMHg2NjMyLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9MRUFEVEVLX1BWUjIwMDAsCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDEyYWIsCisJCS5zdWJkZXZpY2UgPSAweDIzMDAsIC8qIENsdWIzRCBaYXAgVFYyMTAwICovCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVF9DWDIyNzAyLAorCX0seworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg5MDAwLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9IQVVQUEFVR0VfRFZCX1QxLAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4ODhfaWRjb3VudCA9IEFSUkFZX1NJWkUoY3g4OF9zdWJpZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCmluZGV4IGYzNzllZGUuLjRiNjU1ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKQEAgLTY1OCwxMyArNjU4LDYgQEAKIAlyZXR1cm4gKG5vcm0tPmlkICYgVjRMMl9TVERfNjI1XzUwKSA/IHBhbCA6IG50c2M7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5saW5lIG5vcm1fbm90Y2hmaWx0ZXIoc3RydWN0IGN4ODhfdHZub3JtICpub3JtKQotewotCXJldHVybiAobm9ybS0+aWQgJiBWNEwyX1NURF82MjVfNTApCi0JCT8gSExOb3RjaEZpbHRlcjEzNVBBTAotCQk6IEhMTm90Y2hGaWx0ZXIxMzVOVFNDOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IGlubGluZSBub3JtX2h0b3RhbChzdHJ1Y3QgY3g4OF90dm5vcm0gKm5vcm0pCiB7CiAJLyogU2hvdWxkIGFsd2F5cyBiZSBMaW5lIERyYXcgVGltZSAvICg0KkZTQykgKi8KQEAgLTkzNyw3ICs5MzAsNyBAQAogCS8vIGh0b3RhbAogCXRtcDY0ID0gbm9ybV9odG90YWwobm9ybSkgKiAodTY0KXZkZWNfY2xvY2s7CiAJZG9fZGl2KHRtcDY0LCBmc2M4KTsKLQlodG90YWwgPSAodTMyKXRtcDY0IHwgKG5vcm1fbm90Y2hmaWx0ZXIobm9ybSkgPDwgMTEpOworCWh0b3RhbCA9ICh1MzIpdG1wNjQgfCAoSExOb3RjaEZpbHRlcjR4RnNjIDw8IDExKTsKIAlkcHJpbnRrKDEsInNldF90dm5vcm06IE1PX0hUT1RBTCAgICAgICAgMHglMDh4IFtvbGQ9MHglMDh4LGh0b3RhbD0lZF1cbiIsCiAJCWh0b3RhbCwgY3hfcmVhZChNT19IVE9UQUwpLCAodTMyKXRtcDY0KTsKIAljeF93cml0ZShNT19IVE9UQUwsIGh0b3RhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCmluZGV4IGM4NzA0MWQuLmJkMGM4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCkBAIC04MDIsNyArODAyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllcnIgPSAtRU5PREVWOwotCWlmICghY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLmR2YikKKwlpZiAoIShjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ubXBlZyAmIENYODhfTVBFR19EVkIpKQogCQlnb3RvIGZhaWxfY29yZTsKIAogCWVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCmluZGV4IDI3YjVkYmIuLjg4YWYyM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlpZiAoMCAhPSBjb3JlLT5pMmNfcmMpCiAJCXJldHVybjsKIAotCWlmIChjb3JlLT5kdmJkZXYpIHsKKwlpZiAoIChjb3JlLT5kdmJkZXYpICYmIChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZCkgKSB7CiAJCWlmIChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCQljb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwoY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQsIDEpOwogCkBAIC0yMjAsNyArMjIwLDcgQEAKIAogCWlmIChjb3JlLT50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkKIAkJY29yZS0+aTJjX2FkYXAuY2xhc3MgfD0gSTJDX0NMQVNTX1RWX0FOQUxPRzsKLQlpZiAoY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLmR2YikKKwlpZiAoY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLm1wZWcgJiBDWDg4X01QRUdfRFZCKQogCQljb3JlLT5pMmNfYWRhcC5jbGFzcyB8PSBJMkNfQ0xBU1NfVFZfRElHSVRBTDsKIAogCWNvcmUtPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmcGNpLT5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggMTM4YTRmNi4uZDZkOTgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtNjUsOCArNjUsMTcgQEAKIAogCS8qIEZJWE1FOiB0aGlzIG5lZWRzIGEgcmV2aWV3LgogCSAqIGFsc286IG1vdmUgdG8gY3g4OC1ibGFja2JpcmQgKyBjeDg4LWR2YiBzb3VyY2UgZmlsZXM/ICovCisJaWYgKGN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkXS5tcGVnID09IChDWDg4X01QRUdfRFZCIHwgQ1g4OF9NUEVHX0JMQUNLQklSRCkgKSB7CisJCS8qIFJlcG9ydCBhIHdhcm5pbmcgdW50aWwgdGhlIG1pbmkgZHJpdmVyIHBhdGNoIGlzIGFwcGxpZWQsCisJCSAqIGVsc2UgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIHdpbGwgc2V0IHRoZSBkbWEgcmVnaXN0ZXJzIGluY29ycmVjdGx5LgorCQkgKiBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciBwYXRjaCBhbmQgY2hhbmdlcyB0byB0aGUgY29uZGl0aW9ucworCQkgKiB3aWxsIGJlIG1hZGUuCisJCSAqLworCQlwcmludGsoS0VSTl9JTkZPICIlcygpIGJvYXJkLT4oQ1g4OF9NUEVHX0RWQiB8IENYODhfTVBFR19CTEFDS0JJUkQpIGlzIGludmFsaWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotCWlmIChjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0uZHZiKSB7CisJaWYgKGN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkXS5tcGVnICYgQ1g4OF9NUEVHX0RWQikgewogCQkvKiBuZWdlZGdlIGRyaXZlbiAmIHNvZnR3YXJlIHJlc2V0ICovCiAJCWN4X3dyaXRlKFRTX0dFTl9DTlRSTCwgMHgwMDQwIHwgZGV2LT50c19nZW5fY250cmwpOwogCQl1ZGVsYXkoMTAwKTsKQEAgLTkyLDcgKzEwMSw3IEBACiAJCXVkZWxheSgxMDApOwogCX0KIAotCWlmIChjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0uYmxhY2tiaXJkKSB7CisJaWYgKGN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkXS5tcGVnICYgQ1g4OF9NUEVHX0JMQUNLQklSRCkgewogCQljeF93cml0ZShNT19QSU5NVVhfSU8sIDB4ODgpOyAvKiBlbmFibGUgTVBFRyBwYXJhbGxlbCBJTyAqLwogCiAJCWN4X3dyaXRlKFRTX0dFTl9DTlRSTCwgMHg0Nik7IC8qIHB1bmN0dXJlZCBjbG9jayBUUyAmIHBvc2VkZ2UgZHJpdmVuICYgc29mdHdhcmUgcmVzZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYwppbmRleCA3NDFlN2M1ZS4uNThiYTlmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJY3hfd3JpdGUoQVVEX1JBVEVfVEhSRVNfRE1ELCAweDAwMDAwMEMwKTsKIAljeDg4X3N0YXJ0X2F1ZGlvX2RtYShjb3JlKTsKIAotCWlmIChjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0uYmxhY2tiaXJkKSB7CisJaWYgKGN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkXS5tcGVnICYgQ1g4OF9NUEVHX0JMQUNLQklSRCkgewogCQkvKiBzZXRzIHNvdW5kIGlucHV0IGZyb20gZXh0ZXJuYWwgYWRjICovCiAJCXN3aXRjaCAoY29yZS0+Ym9hcmQpIHsKIAkJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9ST1NMWU46CkBAIC0xNjQsNyArMTY0LDcgQEAKIAkJY3hfd3JpdGUoQVVEX0kyU0NOVEwsIDApOwogCQkvKiBjeF93cml0ZShBVURfQVBCX0lOX1JBVEVfQURKLCAwKTsgKi8KIAl9Ci0JaWYgKChhbHdheXNfYW5hbG9nKSB8fCAoIWN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkXS5ibGFja2JpcmQpKSB7CisJaWYgKChhbHdheXNfYW5hbG9nKSB8fCAoIShjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ubXBlZyAmIENYODhfTVBFR19CTEFDS0JJUkQpKSkgewogCQljdGwgfD0gRU5fREFDX0VOQUJMRTsKIAkJY3hfd3JpdGUoQVVEX0NUTCwgY3RsKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwppbmRleCBmYmM3OWU5Li5jYjBjMGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKQEAgLTE5MjgsNiArMTkyOCw5IEBACiAJaWYgKFRVTkVSX0FCU0VOVCAhPSBjb3JlLT50dW5lcl90eXBlKQogCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKIAorCWlmIChjeDg4X2JvYXJkc1sgY29yZS0+Ym9hcmQgXS5hdWRpb19jaGlwID09IEFVRElPX0NISVBfV004Nzc1KQorCQlyZXF1ZXN0X21vZHVsZSgid204Nzc1Iik7CisKIAkvKiByZWdpc3RlciB2NGwgZGV2aWNlcyAqLwogCWRldi0+dmlkZW9fZGV2ID0gY3g4OF92ZGV2X2luaXQoY29yZSxkZXYtPnBjaSwKIAkJCQkJJmN4ODgwMF92aWRlb190ZW1wbGF0ZSwidmlkZW8iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCmluZGV4IDg5ZjEyZTIuLjNiYzkxYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW8tYnVmLmg+CiAjaW5jbHVkZSA8bWVkaWEvY3gyMzQxeC5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvLWJ1Zi1kdmIuaD4KIAogI2luY2x1ZGUgImJ0Y3gtcmlzYy5oIgpAQCAtMzksMTIgKzQwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2RlZmluZSBDWDg4X1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLDAsNikKIAotI2lmbmRlZiBUUlVFCi0jIGRlZmluZSBUUlVFICgxPT0xKQotI2VuZGlmCi0jaWZuZGVmIEZBTFNFCi0jIGRlZmluZSBGQUxTRSAoMT09MCkKLSNlbmRpZgogI2RlZmluZSBVTlNFVCAoLTFVKQogCiAjZGVmaW5lIENYODhfTUFYQk9BUkRTIDgKQEAgLTczLDYgKzY4LDEyIEBACiAJRk1fREVFTVBIXzc1CiB9OwogCitlbnVtIGN4ODhfYm9hcmRfdHlwZSB7CisJQ1g4OF9CT0FSRF9OT05FID0gMCwKKwlDWDg4X01QRUdfRFZCLAorCUNYODhfTVBFR19CTEFDS0JJUkQKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiB0diBub3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0yMzAsOCArMjMxLDggQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICB0ZGE5ODg3X2NvbmY7CiAJc3RydWN0IGN4ODhfaW5wdXQgICAgICAgaW5wdXRbTUFYX0NYODhfSU5QVVRdOwogCXN0cnVjdCBjeDg4X2lucHV0ICAgICAgIHJhZGlvOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgIGJsYWNrYmlyZDoxOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgIGR2YjoxOworCWVudW0gY3g4OF9ib2FyZF90eXBlICAgIG1wZWc7CisJZW51bSBhdWRpb2NoaXAgICAgICAgICAgYXVkaW9fY2hpcDsKIH07CiAKIHN0cnVjdCBjeDg4X3N1YmlkIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKaW5kZXggZmJhMzBhNC4uMTQ1N2IxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKQEAgLTY0LDIzICs2NCwzMiBAQAogc3RhdGljIGludCBnZXRfa2V5X2hhdXAoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1ZlszXTsKLQlpbnQgc3RhcnQsIHRvZ2dsZSwgZGV2LCBjb2RlOworCWludCBzdGFydCwgcmFuZ2UsIHRvZ2dsZSwgZGV2LCBjb2RlOwogCiAJLyogcG9sbCBJUiBjaGlwICovCiAJaWYgKDMgIT0gaTJjX21hc3Rlcl9yZWN2KCZpci0+YyxidWYsMykpCiAJCXJldHVybiAtRUlPOwogCiAJLyogc3BsaXQgcmM1IGRhdGEgYmxvY2sgLi4uICovCi0Jc3RhcnQgID0gKGJ1ZlswXSA+PiA2KSAmICAgIDM7CisJc3RhcnQgID0gKGJ1ZlswXSA+PiA3KSAmICAgIDE7CisJcmFuZ2UgID0gKGJ1ZlswXSA+PiA2KSAmICAgIDE7CiAJdG9nZ2xlID0gKGJ1ZlswXSA+PiA1KSAmICAgIDE7CiAJZGV2ICAgID0gIGJ1ZlswXSAgICAgICAmIDB4MWY7CiAJY29kZSAgID0gKGJ1ZlsxXSA+PiAyKSAmIDB4M2Y7CiAKLQlpZiAoMyAhPSBzdGFydCkKKwkvKiByYzUgaGFzIHR3byBzdGFydCBiaXRzCisJICogdGhlIGZpcnN0IGJpdCBtdXN0IGJlIG9uZQorCSAqIHRoZSBzZWNvbmQgYml0IGRlZmluZXMgdGhlIGNvbW1hbmQgcmFuZ2UgKDEgPSAwLTYzLCAwID0gNjQgLSAxMjcpCisJICovCisJaWYgKCFzdGFydCkKIAkJLyogbm8ga2V5IHByZXNzZWQgKi8KIAkJcmV0dXJuIDA7Ci0JZHByaW50aygxLCJpciBoYXVwcGF1Z2UgKHJjNSk6IHMlZCB0JWQgZGV2PSVkIGNvZGU9JWRcbiIsCi0JCXN0YXJ0LCB0b2dnbGUsIGRldiwgY29kZSk7CisKKwlpZiAoIXJhbmdlKQorCQljb2RlICs9IDY0OworCisJZHByaW50aygxLCJpciBoYXVwcGF1Z2UgKHJjNSk6IHMlZCByJWQgdCVkIGRldj0lZCBjb2RlPSVkXG4iLAorCQlzdGFydCwgcmFuZ2UsIHRvZ2dsZSwgZGV2LCBjb2RlKTsKIAogCS8qIHJldHVybiBrZXkgKi8KIAkqaXJfa2V5ID0gY29kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwppbmRleCA1NjI0NmI4Li5jZjQzZGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCkBAIC05MDQsNiArOTA0LDggQEAKIAlzdGF0ZS0+aGFzX3ZpcnR1YWxfZG9sYnlfc3Vycm91bmQgPSBtc3BfcmV2aXNpb24gPT0gJ0cnICYmIG1zcF9wcm9kX2xvID09IDE7CiAJLyogSGFzIFZpcnR1YWwgRG9sYnkgU3Vycm91bmQgJiBEb2xieSBQcm8gTG9naWM6IG9ubHkgaW4gbXNwMzR4MiAqLwogCXN0YXRlLT5oYXNfZG9sYnlfcHJvX2xvZ2ljID0gbXNwX3JldmlzaW9uID09ICdHJyAmJiBtc3BfcHJvZF9sbyA9PSAyOworCS8qIFRoZSBtc3AzNDN4RyBzdXBwb3J0cyBCVFNDIG9ubHkgYW5kIGNhbm5vdCBkbyBBdXRvbWF0aWMgU3RhbmRhcmQgRGV0ZWN0aW9uLiAqLworCXN0YXRlLT5mb3JjZV9idHNjID0gbXNwX2ZhbWlseSA9PSAzICYmIG1zcF9yZXZpc2lvbiA9PSAnRycgJiYgbXNwX3Byb2RfaGkgPT0gMzsKIAogCXN0YXRlLT5vcG1vZGUgPSBvcG1vZGU7CiAJaWYgKHN0YXRlLT5vcG1vZGUgPT0gT1BNT0RFX0FVVE8pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuaAppbmRleCA1NDVlNGFjLi43NTMxZWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5oCkBAIC02NCw2ICs2NCw3IEBACiAJdTggaGFzX3NvdW5kX3Byb2Nlc3Npbmc7CiAJdTggaGFzX3ZpcnR1YWxfZG9sYnlfc3Vycm91bmQ7CiAJdTggaGFzX2RvbGJ5X3Byb19sb2dpYzsKKwl1OCBmb3JjZV9idHNjOwogCiAJaW50IHJhZGlvOwogCWludCBvcG1vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCmluZGV4IGVkMDJmZjguLjRjN2Y4NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jCkBAIC05NjAsOSArOTYwLDEwIEBACiAKIAkJLyogc2V0dXAgdGhlIGNoaXAqLwogCQltc3AzNHh4Z19yZXNldChjbGllbnQpOwotCQlzdGF0ZS0+c3RkID0gc3RhdGUtPnJhZGlvID8gMHg0MCA6IG1zcF9zdGFuZGFyZDsKLQkJLyogc3RhcnQgYXV0b2RldGVjdCAqLworCQlzdGF0ZS0+c3RkID0gc3RhdGUtPnJhZGlvID8gMHg0MCA6CisJCQkoc3RhdGUtPmZvcmNlX2J0c2MgJiYgbXNwX3N0YW5kYXJkID09IDEpID8gMzIgOiBtc3Bfc3RhbmRhcmQ7CiAJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDIwLCBzdGF0ZS0+c3RkKTsKKwkJLyogc3RhcnQgYXV0b2RldGVjdCAqLwogCQlpZiAoc3RhdGUtPnN0ZCAhPSAxKQogCQkJZ290byB1bm11dGU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWcKaW5kZXggYTUyMTcxZS4uNTY0NWM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWcKQEAgLTE4LDggKzE4LDggQEAKIAlzZWxlY3QgVklERU9fU0FBNzExWAogCXNlbGVjdCBWSURFT19NU1AzNDAwCiAJLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBXaW5UVi1QVlIgVVNCMiBkZXZpY2VzIHdob3NlIAotCSAgbW9kZWwgbnVtYmVyIGlzIG9mIHRoZSBmb3JtICIyOXh4eCIgKGxlYWRpbmcgcHJlZml4IG9mICIyOSIgCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIFdpblRWLVBWUiBVU0IyIGRldmljZXMgd2hvc2UKKwkgIG1vZGVsIG51bWJlciBpcyBvZiB0aGUgZm9ybSAiMjl4eHgiIChsZWFkaW5nIHByZWZpeCBvZiAiMjkiCiAJICBmb2xsb3dlZCBieSAzIGRpZ2l0cykuCiAJICBUbyBzZWUgaWYgeW91IG1heSBuZWVkIHRoaXMgb3B0aW9uLCBleGFtaW5lIHRoZSB3aGl0ZQogCSAgc3RpY2tlciBvbiB0aGUgdW5kZXJzaWRlIG9mIHlvdXIgZGV2aWNlLgpAQCAtMzcsMTQgKzM3LDkgQEAKIAkgIGZvcm0gIjI0eHh4IiAobGVhZGluZyBwcmVmaXggb2YgIjI0IiBmb2xsb3dlZCBieSAzIGRpZ2l0cykuCiAJICBUbyBzZWUgaWYgeW91IG1heSBuZWVkIHRoaXMgb3B0aW9uLCBleGFtaW5lIHRoZSB3aGl0ZQogCSAgc3RpY2tlciBvbiB0aGUgdW5kZXJzaWRlIG9mIHlvdXIgZGV2aWNlLiAgRW5hYmxpbmcgdGhpcwotCSAgb3B0aW9uIHdpbGwgbm90IGhhcm0gc3VwcG9ydCBmb3Igb2xkZXIgZGV2aWNlcywgaG93ZXZlciBpdAotCSAgaXMgYSBzZXBhcmF0ZSBvcHRpb24gYmVjYXVzZSBvZiB0aGUgZXhwZXJpbWVudGFsIG5hdHVyZSBvZgotCSAgdGhpcyBuZXcgZmVhdHVyZS4KKwkgIG9wdGlvbiB3aWxsIG5vdCBoYXJtIHN1cHBvcnQgZm9yIG9sZGVyIGRldmljZXMuCiAKLQkgIElmIHlvdSBhcmUgaW4gZG91YnQsIHNheSBOLgotCi0JICBOb3RlOiBUaGlzIGZlYXR1cmUgaXMgX3ZlcnlfIGV4cGVyaW1lbnRhbC4gIFlvdSBoYXZlIGJlZW4KLQkgIHdhcm5lZC4KKwkgIElmIHlvdSBhcmUgaW4gZG91YnQsIHNheSBZLgogCiBjb25maWcgVklERU9fUFZSVVNCMl9TWVNGUwogCWJvb2wgInB2cnVzYjIgc3lzZnMgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKaW5kZXggODg2MDQzNi4uM2Q4Y2QwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlICJwdnJ1c2IyLmgiCiAjaW5jbHVkZSAicHZydXNiMi1zdGQuaCIKQEAgLTMxMzEsNiArMzEzMiw0MiBAQAogfQogCiAKK2ludCBwdnIyX2hkd19yZWdpc3Rlcl9hY2Nlc3Moc3RydWN0IHB2cjJfaGR3ICpoZHcsCisJCQkgICAgIHUzMiBjaGlwX2lkLHVuc2lnbmVkIGxvbmcgcmVnX2lkLAorCQkJICAgICBpbnQgc2V0RmwsdTMyICp2YWxfcHRyKQoreworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVtOworCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwOworCXN0cnVjdCB2NGwyX3JlZ2lzdGVyIHJlcTsKKwlpbnQgc3RhdCA9IDA7CisJaW50IG9rRmwgPSAwOworCisJcmVxLmkyY19pZCA9IGNoaXBfaWQ7CisJcmVxLnJlZyA9IHJlZ19pZDsKKwlpZiAoc2V0RmwpIHJlcS52YWwgPSAqdmFsX3B0cjsKKwltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7CisJCWxpc3RfZm9yX2VhY2goaXRlbSwmaGR3LT5pMmNfY2xpZW50cykgeworCQkJY3AgPSBsaXN0X2VudHJ5KGl0ZW0sc3RydWN0IHB2cjJfaTJjX2NsaWVudCxsaXN0KTsKKwkJCWlmIChjcC0+Y2xpZW50LT5kcml2ZXItPmlkICE9IGNoaXBfaWQpIGNvbnRpbnVlOworCQkJc3RhdCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoCisJCQkJY3AsKHNldEZsID8gVklESU9DX0lOVF9TX1JFR0lTVEVSIDoKKwkJCQkgICAgVklESU9DX0lOVF9HX1JFR0lTVEVSKSwmcmVxKTsKKwkJCWlmICghc2V0RmwpICp2YWxfcHRyID0gcmVxLnZhbDsKKwkJCW9rRmwgPSAhMDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKKwlpZiAob2tGbCkgeworCQlyZXR1cm4gc3RhdDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7CisjZWxzZQorCXJldHVybiAtRU5PU1lTOworI2VuZGlmCit9CisKKwogLyoKICAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKICAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCmluZGV4IGZkOTMxYjUuLjI5OTc5YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCkBAIC0yMTEsNiArMjExLDE0IEBACiAvKiBTdG9yZSB0aGUgdjRsIG1pbm9yIGRldmljZSBudW1iZXIgKi8KIHZvaWQgcHZyMl9oZHdfdjRsX3N0b3JlX21pbm9yX251bWJlcihzdHJ1Y3QgcHZyMl9oZHcgKixpbnQpOwogCisvKiBEaXJlY3QgcmVhZC93cml0ZSBhY2Nlc3MgdG8gY2hpcCdzIHJlZ2lzdGVyczoKKyAgIGNoaXBfaWQgLSB1bmlxdWUgaWQgb2YgY2hpcCAoZS5nLiBJMkNfRFJJVkVSRF94eHh4KQorICAgcmVnX2lkICAtIHJlZ2lzdGVyIG51bWJlciB0byBhY2Nlc3MKKyAgIHNldEZsICAgLSB0cnVlIHRvIHNldCB0aGUgcmVnaXN0ZXIsIGZhbHNlIHRvIHJlYWQgaXQKKyAgIHZhbF9wdHIgLSBzdG9yYWdlIGxvY2F0aW9uIGZvciBzb3VyY2UgLyByZXN1bHQuICovCitpbnQgcHZyMl9oZHdfcmVnaXN0ZXJfYWNjZXNzKHN0cnVjdCBwdnIyX2hkdyAqLAorCQkJICAgICB1MzIgY2hpcF9pZCx1bnNpZ25lZCBsb25nIHJlZ19pZCwKKwkJCSAgICAgaW50IHNldEZsLHUzMiAqdmFsX3B0cik7CiAKIC8qIFRoZSBmb2xsb3dpbmcgZW50cnkgcG9pbnRzIGFyZSBhbGwgbG93ZXIgbGV2ZWwgdGhpbmdzIHlvdSBub3JtYWxseSBkb24ndAogICAgd2FudCB0byB3b3JyeSBhYm91dC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jCmluZGV4IGVkM2U4MTAuLjA1MTIxNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYwpAQCAtMTksNiArMTksNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgogI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCiAjaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgpAQCAtODksNyArOTAsOCBAQAogCiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKnB2cjJfaTJjX2dldF9vcCh1bnNpZ25lZCBpbnQgaWR4KQogewotCWlmIChpZHggPj0gc2l6ZW9mKG9wcykvc2l6ZW9mKG9wc1swXSkpIHJldHVybiAwOworCWlmIChpZHggPj0gQVJSQVlfU0laRShvcHMpKQorCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gb3BzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwppbmRleCAzNjA4YzJmLi45N2U5NzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCkBAIC0yOSwyNyArMjksMTcgQEAKICNpbmNsdWRlICJwdnJ1c2IyLXY0bDIuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWlvcmVhZC5oIgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAogc3RydWN0IHB2cjJfdjRsMl9kZXY7CiBzdHJ1Y3QgcHZyMl92NGwyX2ZoOwogc3RydWN0IHB2cjJfdjRsMjsKIAotLyogVjRMIG5vIGxvbmdlciBwcm92aWRlIHRoZSBhYmlsaXR5IHRvIHNldCAvIGdldCBhIHByaXZhdGUgY29udGV4dCBwb2ludGVyCi0gICAoaS5lLiB2aWRlb19nZXRfZHJ2ZGF0YSAvIHZpZGVvX3NldF9kcnZkYXRhKSwgd2hpY2ggbWVhbnMgd2UgaGF2ZSB0bwotICAgY29uY29jdCBvdXIgb3duIGNvbnRleHQgbG9jYXRpbmcgbWVjaGFuaXNtLiAgU3VwcG9zZWRseSB0aGlzIGlzIGludGVuZGVkCi0gICB0byBzaW1wbGlmeSBkcml2ZXIgaW1wbGVtZW50YXRpb24uICBJdCdzIG5vdCBjbGVhciB0byBtZSBob3cgdGhhdCBjYW4KLSAgIHBvc3NpYmx5IGJlIHRydWUuICBPdXIgc29sdXRpb24gaGVyZSBpcyB0byBtYWludGFpbiBhIGxvb2t1cCB0YWJsZSBvZgotICAgb3VyIGNvbnRleHQgaW5zdGFuY2VzLCBpbmRleGVkIGJ5IHRoZSBtaW5vciBkZXZpY2UgbnVtYmVyIG9mIHRoZSBWNEwKLSAgIGRldmljZS4gIFNlZSBwdnIyX3Y0bDJfb3BlbigpIGZvciBzb21lIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFwcHJvYWNoLiAqLwotc3RhdGljIHN0cnVjdCBwdnIyX3Y0bDJfZGV2ICpkZXZpY2VzWzI1Nl07Ci1zdGF0aWMgREVGSU5FX01VVEVYKGRldmljZV9sb2NrKTsKLQogc3RydWN0IHB2cjJfdjRsMl9kZXYgeworCXN0cnVjdCB2aWRlb19kZXZpY2UgZGV2YmFzZTsgLyogTVVTVCBiZSBmaXJzdCEgKi8KIAlzdHJ1Y3QgcHZyMl92NGwyICp2NGxwOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CiAJc3RydWN0IHB2cjJfY29udGV4dF9zdHJlYW0gKnN0cmVhbTsKLQlpbnQgY3R4dF9pZHg7CiAJZW51bSBwdnIyX2NvbmZpZyBjb25maWc7CiB9OwogCkBAIC03NCw3ICs2NCw3IEBACiAJc3RydWN0IHY0bDJfcHJpb19zdGF0ZSBwcmlvOwogCiAJLyogc3RyZWFtcyAqLwotCXN0cnVjdCBwdnIyX3Y0bDJfZGV2IHZpZGVvX2RldjsKKwlzdHJ1Y3QgcHZyMl92NGwyX2RldiAqdmRldjsKIH07CiAKIHN0YXRpYyBpbnQgdmlkZW9fbnJbUFZSX05VTV0gPSB7WzAgLi4uIFBWUl9OVU0tMV0gPSAtMX07CkBAIC02NzEsNiArNjYxLDIwIEBACiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCX0KKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJY2FzZSBWSURJT0NfSU5UX0dfUkVHSVNURVI6CisJY2FzZSBWSURJT0NfSU5UX1NfUkVHSVNURVI6CisJeworCQl1MzIgdmFsOworCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVxID0gKHN0cnVjdCB2NGwyX3JlZ2lzdGVyICopYXJnOworCQlpZiAoY21kID09IFZJRElPQ19JTlRfU19SRUdJU1RFUikgdmFsID0gcmVxLT52YWw7CisJCXJldCA9IHB2cjJfaGR3X3JlZ2lzdGVyX2FjY2VzcygKKwkJCWhkdyxyZXEtPmkyY19pZCxyZXEtPnJlZywKKwkJCWNtZCA9PSBWSURJT0NfSU5UX1NfUkVHSVNURVIsJnZhbCk7CisJCWlmIChjbWQgPT0gVklESU9DX0lOVF9HX1JFR0lTVEVSKSByZXEtPnZhbCA9IHZhbDsKKwkJYnJlYWs7CisJfQorI2VuZGlmCiAKIAlkZWZhdWx0IDoKIAkJcmV0ID0gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsCkBAIC03MDQsMjEgKzcwOCwyMiBAQAogc3RhdGljIHZvaWQgcHZyMl92NGwyX2Rldl9kZXN0cm95KHN0cnVjdCBwdnIyX3Y0bDJfZGV2ICpkaXApCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAicHZydXNiMjogdW5yZWdpc3RlcmluZyBkZXZpY2UgdmlkZW8lZCBbJXNdXG4iLAotCSAgICAgICBkaXAtPnZkZXYtPm1pbm9yLHB2cjJfY29uZmlnX2dldF9uYW1lKGRpcC0+Y29uZmlnKSk7Ci0JaWYgKGRpcC0+Y3R4dF9pZHggPj0gMCkgewotCQltdXRleF9sb2NrKCZkZXZpY2VfbG9jayk7Ci0JCWRldmljZXNbZGlwLT5jdHh0X2lkeF0gPSBOVUxMOwotCQlkaXAtPmN0eHRfaWR4ID0gLTE7Ci0JCW11dGV4X3VubG9jaygmZGV2aWNlX2xvY2spOwotCX0KLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkaXAtPnZkZXYpOworCSAgICAgICBkaXAtPmRldmJhc2UubWlub3IscHZyMl9jb25maWdfZ2V0X25hbWUoZGlwLT5jb25maWcpKTsKKworCS8qIFBhcmFub2lhICovCisJZGlwLT52NGxwID0gMDsKKwlkaXAtPnN0cmVhbSA9IDA7CisKKwkvKiBBY3R1YWwgZGVhbGxvY2F0aW9uIGhhcHBlbnMgbGF0ZXIgd2hlbiBhbGwgaW50ZXJuYWwgcmVmZXJlbmNlcworCSAgIGFyZSBnb25lLiAqLworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkaXAtPmRldmJhc2UpOwogfQogCiAKIHN0YXRpYyB2b2lkIHB2cjJfdjRsMl9kZXN0cm95X25vX2xvY2soc3RydWN0IHB2cjJfdjRsMiAqdnApCiB7CiAJcHZyMl9oZHdfdjRsX3N0b3JlX21pbm9yX251bWJlcih2cC0+Y2hhbm5lbC5tY19oZWFkLT5oZHcsLTEpOwotCXB2cjJfdjRsMl9kZXZfZGVzdHJveSgmdnAtPnZpZGVvX2Rldik7CisJcHZyMl92NGwyX2Rldl9kZXN0cm95KHZwLT52ZGV2KTsKIAogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9TVFJVQ1QsIkRlc3Ryb3lpbmcgcHZyMl92NGwyIGlkPSVwIix2cCk7CiAJcHZyMl9jaGFubmVsX2RvbmUoJnZwLT5jaGFubmVsKTsKQEAgLTcyNiw2ICs3MzEsMTQgQEAKIH0KIAogCitzdGF0aWMgdm9pZCBwdnIyX3ZpZGVvX2RldmljZV9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHB2cjJfdjRsMl9kZXYgKmRldjsKKwlkZXYgPSBjb250YWluZXJfb2YodmRldixzdHJ1Y3QgcHZyMl92NGwyX2RldixkZXZiYXNlKTsKKwlrZnJlZShkZXYpOworfQorCisKIHN0YXRpYyB2b2lkIHB2cjJfdjRsMl9pbnRlcm5hbF9jaGVjayhzdHJ1Y3QgcHZyMl9jaGFubmVsICpjaHApCiB7CiAJc3RydWN0IHB2cjJfdjRsMiAqdnA7CkBAIC03OTcsNDAgKzgxMCwxMiBAQAogCiBzdGF0aWMgaW50IHB2cjJfdjRsMl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBwdnIyX3Y0bDJfZGV2ICpkaXAgPSBOVUxMOyAvKiBPdXIgb3duIGNvbnRleHQgcG9pbnRlciAqLworCXN0cnVjdCBwdnIyX3Y0bDJfZGV2ICpkaXA7IC8qIE91ciBvd24gY29udGV4dCBwb2ludGVyICovCiAJc3RydWN0IHB2cjJfdjRsMl9maCAqZmhwOwogCXN0cnVjdCBwdnIyX3Y0bDIgKnZwOwogCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwogCi0JbXV0ZXhfbG9jaygmZGV2aWNlX2xvY2spOwotCS8qIE1DSSA3LUp1bi0yMDA2IEV2ZW4gdGhvdWdoIHdlJ3JlIGp1c3QgZG9pbmcgd2hhdCBhbW91bnRzIHRvIGFuCi0JICAgYXRvbWljIHJlYWQgb2YgdGhlIGRldmljZSBtYXBwaW5nIGFycmF5IGhlcmUsIHdlIHN0aWxsIG5lZWQgdGhlCi0JICAgbXV0ZXguICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZXJlIGlzIGEgdGlueSByYWNlIHBvc3NpYmxlIHdoZW4KLQkgICB3ZSByZWdpc3RlciB0aGUgZGV2aWNlLiAgV2UgY2FuJ3QgdXBkYXRlIHRoZSBkZXZpY2UgbWFwcGluZwotCSAgIGFycmF5IHVudGlsIGFmdGVyIHRoZSBkZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCwgb3dpbmcgdG8gdGhlCi0JICAgZmFjdCB0aGF0IHdlIGNhbid0IGtub3cgdGhlIG1pbm9yIGRldmljZSBudW1iZXIgdW50aWwgYWZ0ZXIgdGhlCi0JICAgcmVnaXN0cmF0aW9uIHN1Y2NlZWRzLiAgQW5kIGlmIGFub3RoZXIgdGhyZWFkIHRyaWVzIHRvIG9wZW4gdGhlCi0JICAgZGV2aWNlIGluIHRoZSB3aW5kb3cgb2YgdGltZSBhZnRlciByZWdpc3RyYXRpb24gYnV0IGJlZm9yZSB0aGUKLQkgICBtYXAgaXMgdXBkYXRlZCwgdGhlbiBpdCB3aWxsIGdldCBiYWNrIGFuIGVycm9uZW91cyBudWxsIHBvaW50ZXIKLQkgICBhbmQgdGhlIG9wZW4gd2lsbCByZXN1bHQgaW4gYSBzcHVyaW91cyBmYWlsdXJlLiAgVGhlIG9ubHkgd2F5IHRvCi0JICAgcHJldmVudCB0aGF0IGlzIHRvIChhKSBiZSBpbnNpZGUgdGhlIG11dGV4IGhlcmUgYmVmb3JlIHdlIGFjY2VzcwotCSAgIHRoZSBhcnJheSwgYW5kIChiKSBjb3ZlciB0aGUgZW50aXJlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGxhdGVyCi0JICAgb24gd2l0aCB0aGlzIHNhbWUgbXV0ZXguICBUaHVzIGlmIHdlIGdldCBpbnNpZGUgdGhlIG11dGV4IGhlcmUsCi0JICAgdGhlbiB3ZSBjYW4gYmUgYXNzdXJlZCB0aGF0IHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBhY3R1YWxseQotCSAgIGNvbXBsZXRlZCBjb3JyZWN0bHkuICBUaGlzIGlzIGFuIHVuaGFwcHkgY29tcGxpY2F0aW9uIGZyb20gdGhlCi0JICAgdXNlIG9mIGdsb2JhbCBkYXRhIGluIGEgZHJpdmVyIHRoYXQgbGl2ZXMgaW4gYSBwcmVlbXB0aWJsZQotCSAgIGVudmlyb25tZW50LiAgSXQgc3VyZSB3b3VsZCBiZSBuaWNlIGlmIHRoZSB2aWRlbyBkZXZpY2UgaXRzZWxmCi0JICAgaGFkIGEgbWVhbnMgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgYSBsb2NhbCBjb250ZXh0IHBvaW50ZXIuCi0JICAgT2ggd2FpdC4gIEl0IGRpZC4gIEJ1dCBub3cgaXQncyBnb25lLiAgU2lsbHkgbWUuICovCi0JewotCQl1bnNpZ25lZCBpbnQgbWlkeCA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7Ci0JCWlmIChtaWR4IDwgc2l6ZW9mKGRldmljZXMpL3NpemVvZihkZXZpY2VzWzBdKSkgewotCQkJZGlwID0gZGV2aWNlc1ttaWR4XTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmRldmljZV9sb2NrKTsKLQotCWlmICghZGlwKSByZXR1cm4gLUVOT0RFVjsgLyogU2hvdWxkIGJlIGltcG9zc2libGUgYnV0IEknbSBwYXJhbm9pZCAqLworCWRpcCA9IGNvbnRhaW5lcl9vZih2aWRlb19kZXZkYXRhKGZpbGUpLHN0cnVjdCBwdnIyX3Y0bDJfZGV2LGRldmJhc2UpOwogCiAJdnAgPSBkaXAtPnY0bHA7CiAJaGR3ID0gdnAtPmNoYW5uZWwuaGR3OwpAQCAtMTA2MCwzOCArMTA0NSwyNCBAQAogCQlyZXR1cm47CiAJfQogCi0JZGlwLT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKCFkaXAtPnZkZXYpIHsKLQkJZXJyKCJBbGxvYyBvZiBwdnJ1c2IyIHY0bCB2aWRlbyBkZXZpY2UgZmFpbGVkIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoZGlwLT52ZGV2LCZ2ZGV2X3RlbXBsYXRlLHNpemVvZih2ZGV2X3RlbXBsYXRlKSk7Ci0JZGlwLT52ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0JbXV0ZXhfbG9jaygmZGV2aWNlX2xvY2spOworCW1lbWNweSgmZGlwLT5kZXZiYXNlLCZ2ZGV2X3RlbXBsYXRlLHNpemVvZih2ZGV2X3RlbXBsYXRlKSk7CisJZGlwLT5kZXZiYXNlLnJlbGVhc2UgPSBwdnIyX3ZpZGVvX2RldmljZV9yZWxlYXNlOwogCiAJbWluZGV2bnVtID0gLTE7CiAJdW5pdF9udW1iZXIgPSBwdnIyX2hkd19nZXRfdW5pdF9udW1iZXIodnAtPmNoYW5uZWwubWNfaGVhZC0+aGR3KTsKIAlpZiAoKHVuaXRfbnVtYmVyID49IDApICYmICh1bml0X251bWJlciA8IFBWUl9OVU0pKSB7CiAJCW1pbmRldm51bSA9IHZpZGVvX25yW3VuaXRfbnVtYmVyXTsKIAl9Ci0JaWYgKCh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGlwLT52ZGV2LCB2NGxfdHlwZSwgbWluZGV2bnVtKSA8IDApICYmCi0JICAgICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGlwLT52ZGV2LCB2NGxfdHlwZSwgLTEpIDwgMCkpIHsKKwlpZiAoKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGlwLT5kZXZiYXNlLCB2NGxfdHlwZSwgbWluZGV2bnVtKSA8IDApICYmCisJICAgICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRpcC0+ZGV2YmFzZSwgdjRsX3R5cGUsIC0xKSA8IDApKSB7CiAJCWVycigiRmFpbGVkIHRvIHJlZ2lzdGVyIHB2cnVzYjIgdjRsIHZpZGVvIGRldmljZSIpOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0lORk8gInB2cnVzYjI6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgWyVzXVxuIiwKLQkJICAgICAgIGRpcC0+dmRldi0+bWlub3IscHZyMl9jb25maWdfZ2V0X25hbWUoZGlwLT5jb25maWcpKTsKKwkJICAgICAgIGRpcC0+ZGV2YmFzZS5taW5vcixwdnIyX2NvbmZpZ19nZXRfbmFtZShkaXAtPmNvbmZpZykpOwogCX0KIAotCWlmICgoZGlwLT52ZGV2LT5taW5vciA8IHNpemVvZihkZXZpY2VzKS9zaXplb2YoZGV2aWNlc1swXSkpICYmCi0JICAgIChkZXZpY2VzW2RpcC0+dmRldi0+bWlub3JdID09IE5VTEwpKSB7Ci0JCWRpcC0+Y3R4dF9pZHggPSBkaXAtPnZkZXYtPm1pbm9yOwotCQlkZXZpY2VzW2RpcC0+Y3R4dF9pZHhdID0gZGlwOwotCX0KLQltdXRleF91bmxvY2soJmRldmljZV9sb2NrKTsKLQogCXB2cjJfaGR3X3Y0bF9zdG9yZV9taW5vcl9udW1iZXIodnAtPmNoYW5uZWwubWNfaGVhZC0+aGR3LAotCQkJCQlkaXAtPnZkZXYtPm1pbm9yKTsKKwkJCQkJZGlwLT5kZXZiYXNlLm1pbm9yKTsKIH0KIAogCkBAIC0xMTAyLDE1ICsxMDczLDE5IEBACiAJdnAgPSBrbWFsbG9jKHNpemVvZigqdnApLEdGUF9LRVJORUwpOwogCWlmICghdnApIHJldHVybiB2cDsKIAltZW1zZXQodnAsMCxzaXplb2YoKnZwKSk7Ci0JdnAtPnZpZGVvX2Rldi5jdHh0X2lkeCA9IC0xOworCXZwLT52ZGV2ID0ga21hbGxvYyhzaXplb2YoKnZwLT52ZGV2KSxHRlBfS0VSTkVMKTsKKwlpZiAoIXZwLT52ZGV2KSB7CisJCWtmcmVlKHZwKTsKKwkJcmV0dXJuIDA7CisJfQorCW1lbXNldCh2cC0+dmRldiwwLHNpemVvZigqdnAtPnZkZXYpKTsKIAlwdnIyX2NoYW5uZWxfaW5pdCgmdnAtPmNoYW5uZWwsbW5wKTsKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfU1RSVUNULCJDcmVhdGluZyBwdnIyX3Y0bDIgaWQ9JXAiLHZwKTsKIAogCXZwLT5jaGFubmVsLmNoZWNrX2Z1bmMgPSBwdnIyX3Y0bDJfaW50ZXJuYWxfY2hlY2s7CiAKIAkvKiByZWdpc3RlciBzdHJlYW1zICovCi0JcHZyMl92NGwyX2Rldl9pbml0KCZ2cC0+dmlkZW9fZGV2LHZwLHB2cjJfY29uZmlnX21wZWcpOwotCisJcHZyMl92NGwyX2Rldl9pbml0KHZwLT52ZGV2LHZwLHB2cjJfY29uZmlnX21wZWcpOwogCiAJcmV0dXJuIHZwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggYWExZGI1MC4uZmUzYzgzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0yOTY1LDYgKzI5NjUsMzUgQEAKIAkJCS5hbXV4ID0gTElORTEsCiAJCX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVJdID0geworCQkvKiBQZXRyIEJhdWRpcyA8cGFza3lAdWN3LmN6PiAqLworCQkubmFtZSAgICAgICAgICAgPSAiQVZlck1lZGlhIFRWIEh5YnJpZCBBMTZBUiIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsIC8qIHVudGVzdGVkICovCisJCS5yYWRpb190eXBlICAgICA9IFRVTkVSX1RFQTU3NjcsIC8qIHVudGVzdGVkICovCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfX0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gTElORTEsCisJCX0sCisJfSwKIH07CiAKIGNvbnN0IHVuc2lnbmVkIGludCBzYWE3MTM0X2Jjb3VudCA9IEFSUkFZX1NJWkUoc2FhNzEzNF9ib2FyZHMpOwpAQCAtMzU2Miw2ICszNTkxLDEyIEBACiAJCS5zdWJkZXZpY2UgICAgPSAweDIwMDMsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX1BST1RFVVNfMjMwOSwKIAl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LAorCQkuc3VidmVuZG9yICAgID0gMHgxNDYxLAorCQkuc3ViZGV2aWNlICAgID0gMHgyYzAwLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVIsCisJfSx7CiAJCS8qIC0tLSBib2FyZHMgd2l0aG91dCBlZXByb20gKyBzdWJzeXN0ZW0gSUQgLS0tICovCiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKQEAgLTM3MDMsNiArMzczOCw3IEBACiAJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIDB4MDgpOwogCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzMsIDB4MDApOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkFSOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQ0FSREJVUzoKIAkJLyogcG93ZXItdXAgdHVuZXIgY2hpcCAqLwogCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCmluZGV4IGI2ODgxNTQuLmZiNzQxZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC0xMDU1LDYgKzEwNTUsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfNzc3OgorCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVI6CiAJCXByaW50aygiJXM6IGF2ZXJ0diA3NzcgZHZiIHNldHVwXG4iLGRldi0+bmFtZSk7CiAJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZhdmVybWVkaWFfNzc3LAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggZjdlYTg1Ny4uZmY1OTkxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC0xODUsNiArMTg1LDcgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX1NUVURJT18zMDU6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fMzA3OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfR09fMDA3X0ZNOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVI6CiAJCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2F2ZXJtZWRpYTsKIAkJbWFza19rZXljb2RlID0gMHgwMDA3Qzg7CiAJCW1hc2tfa2V5ZG93biA9IDB4MDAwMDEwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggN2RiN2I5Ny4uNzAxYTkwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCkBAIC0yMjYsNiArMjI2LDcgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9NRURJT05fTUQ4ODAwX1FVQURSTyA5NgogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlNfTFIzMDAgOTcKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9QUk9URVVTXzIzMDkgOTgKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVIgICA5OQogCiAjZGVmaW5lIFNBQTcxMzRfTUFYQk9BUkRTIDgKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMKaW5kZXggYWNjNWVhOS4uZjQyOWY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jCkBAIC0zNjUsNyArMzY1LDEyIEBACiAJCWlmIChOVUxMID09IGZidWYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJLyogRklYTUU6IG5lZWQgc2FuaXR5IGNoZWNrcyBmb3IgdmItPmJvZmYgKi8KLQkJYnVzICAgPSAoZG1hX2FkZHJfdClmYnVmLT5iYXNlICsgdmItPmJvZmY7CisJCS8qCisJCSAqIFVzaW5nIGEgZG91YmxlIGNhc3QgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3Mgd2hlbgorCQkgKiBidWlsZGluZyBmb3IgUEFFLiBDb21waWxlciBkb2Vzbid0IGxpa2UgZGlyZWN0IGNhc3RpbmcKKwkJICogb2YgYSAzMiBiaXQgcHRyIHRvIDY0IGJpdCBpbnRlZ2VyLgorCQkgKi8KKwkJYnVzICAgPSAoZG1hX2FkZHJfdCkodW5zaWduZWQgbG9uZylmYnVmLT5iYXNlICsgdmItPmJvZmY7CiAJCXBhZ2VzID0gUEFHRV9BTElHTih2Yi0+c2l6ZSkgPj4gUEFHRV9TSElGVDsKIAkJZXJyID0gdmlkZW9idWZfZG1hX2luaXRfb3ZlcmxheSgmdmItPmRtYSxQQ0lfRE1BX0ZST01ERVZJQ0UsCiAJCQkJCQlidXMsIHBhZ2VzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYm9vdGluZm8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvYm9vdGluZm8uaAppbmRleCA3OGMzNWVjLi4xZTVjY2RhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2Jvb3RpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9ib290aW5mby5oCkBAIC0xMjUsMTIgKzEyNSw2IEBACiAjZGVmaW5lICBNQUNIX01PTUVOQ09fT0NFTE9UXzMJNAogCiAvKgotICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIElURQotICovCi0jZGVmaW5lIE1BQ0hfR1JPVVBfSVRFCQkxMwkvKiBJVEUgU2VtaSBFdmFsIEJvYXJkcwkJKi8KLSNkZWZpbmUgIE1BQ0hfUUVEXzROX1MwMUIJMAkvKiBJVEU4MTcyIGJhc2VkIGV2YWwgYm9hcmQgKi8KLQotLyoKICAqIFZhbGlkIG1hY2h0eXBlIGZvciBncm91cCBQSElMSVBTCiAgKi8KICNkZWZpbmUgTUFDSF9HUk9VUF9QSElMSVBTICAgICAxNApAQCAtMTM5LDEyICsxMzMsNiBAQAogI2RlZmluZSAgTUFDSF9QSElMSVBTX0pCUwkyCS8qIEpCUyAqLwogCiAvKgotICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIEdsb2Jlc3BhbgotICovCi0jZGVmaW5lIE1BQ0hfR1JPVVBfR0xPQkVTUEFOICAgMTUJLyogR2xvYmVzcGFuICovCi0jZGVmaW5lICBNQUNIX0lWUgkJMAkvKiBJVlIgZXZhbCBib2FyZCAqLwotCi0vKgogICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIFNJQllURQogICovCiAjZGVmaW5lIE1BQ0hfR1JPVVBfU0lCWVRFCTE2CS8qIFNpYnl0ZSAvIEJyb2FkY29tICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXQ4MTcyL2l0ODE3Mi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjIzYWYwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaXQ4MTcyL2l0ODE3Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQ4ICswLDAgQEAKLS8qCi0gKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglJVDgxNzIgc3lzdGVtIGNvbnRyb2xsZXIgZGVmaW5lcy4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0lUODE3Ml9fSF9fCi0jZGVmaW5lIF9fSVQ4MTcyX19IX18KLQotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLQotI2RlZmluZSBJVDgxNzJfQkFTRQkJCTB4MTgwMDAwMDAKLSNkZWZpbmUgSVQ4MTcyX1BDSV9JT19CQVNFCQkweDE0MDAwMDAwCi0jZGVmaW5lIElUODE3Ml9QQ0lfTUVNX0JBU0UJCTB4MTAwMDAwMDAKLQotLy8gU3lzdGVtIHJlZ2lzdGVycyBvZmZzZXRzIGZyb20gSVQ4MTcyX0JBU0UKLSNkZWZpbmUgSVRfQ01GUENSCQkJMHgwCi0jZGVmaW5lIElUX0RTUlIJCQkJMHgyCi0jZGVmaW5lIElUX1BDRENSCQkJMHg0Ci0jZGVmaW5lIElUX1NQTExDUgkJCTB4NgotI2RlZmluZSBJVF9DSURSCQkJCTB4MTAKLSNkZWZpbmUgSVRfQ1JOUgkJCQkweDEyCi0jZGVmaW5lIElUX0NQVVRSCQkJMHgxNAotI2RlZmluZSBJVF9DVENSCQkJCTB4MTYKLSNkZWZpbmUgSVRfU0RQUgkJCQkweEYwCi0KLS8vIFBvd2VyIG1hbmFnZW1lbnQgcmVnaXN0ZXIgb2Zmc2V0IGZyb20gSVQ4MTcyX1BDSV9JT19CQVNFCi0vLyBQb3dlciBNYW5hZ2VtZW50IERldmljZSBTdGFuZGJ5IFJlZ2lzdGVyCi0jZGVmaW5lIElUX1BNX0RTUgkJMHgxNTgwMAotCi0jZGVmaW5lIElUX1BNX0RTUl9UTVIwU0IJMHgwMDAxCi0jZGVmaW5lIElUX1BNX0RTUl9UTVIxU0IJMHgwMDAyCi0jZGVmaW5lIElUX1BNX0RTUl9DSVIwU0IJMHgwMDA0Ci0jZGVmaW5lIElUX1BNX0RTUl9DSVIxU0IJMHgwMDA4Ci0jZGVmaW5lIElUX1BNX0RTUl9TQ1IwU0IJMHgwMDEwCi0jZGVmaW5lIElUX1BNX0RTUl9TQ1IxU0IJMHgwMDIwCi0jZGVmaW5lIElUX1BNX0RTUl9QUFNCCQkweDAwNDAKLSNkZWZpbmUgSVRfUE1fRFNSX0kyQ1NCCQkweDAwODAKLSNkZWZpbmUgSVRfUE1fRFNSX1VBUlRTQgkweDAxMDAKLSNkZWZpbmUgSVRfUE1fRFNSX0lERVNCCQkweDAyMDAKLSNkZWZpbmUgSVRfUE1fRFNSX0FDU0IJCTB4MDQwMAotI2RlZmluZSBJVF9QTV9EU1JfTTY4S1NCCTB4MDgwMAotCi0vLyBQb3dlciBNYW5hZ2VtZW50IFBDSSBEZXZpY2UgU29mdHdhcmUgUmVzZXQgUmVnaXN0ZXIKLSNkZWZpbmUgSVRfUE1fUENJU1IgICAgICAgICAgICAgMHgxNTgwMgotCi0jZGVmaW5lIElUX1BNX1BDSVNSX0lERVNSICAgICAgIDB4MDAwMQotI2RlZmluZSBJVF9QTV9QQ0lTUl9DRE1BU1IgICAgICAweDAwMDIKLSNkZWZpbmUgSVRfUE1fUENJU1JfVVNCU1IgICAgICAgMHgwMDA0Ci0jZGVmaW5lIElUX1BNX1BDSVNSX0RNQVNSICAgICAgIDB4MDAwOAotI2RlZmluZSBJVF9QTV9QQ0lTUl9BQ1NSICAgICAgICAweDAwMTAKLSNkZWZpbmUgSVRfUE1fUENJU1JfTUVNU1IgICAgICAgMHgwMDIwCi0jZGVmaW5lIElUX1BNX1BDSVNSXzY4S1NSICAgICAgIDB4MDA0MAotCi0KLS8vIFBDSSBDb25maWd1cmF0aW9uIGFkZHJlc3MgYW5kIGRhdGEgcmVnaXN0ZXIgb2Zmc2V0cwotLy8gZnJvbSBJVDgxNzJfQkFTRQotI2RlZmluZSBJVF9DT05GQUREUgkJCTB4NDAwMAotI2RlZmluZSBJVF9CVVNOVU1fU0hGICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIElUX0RFVk5VTV9TSEYgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgSVRfRlVOQ05VTV9TSEYgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIElUX1JFR05VTV9TSEYgICAgICAgICAgICAgICAgICAgMgotCi0jZGVmaW5lIElUX0NPTkZEQVRBCQkJMHg0MDA0Ci0KLS8vIFBDSSBjb25maWd1cmF0aW9uIGhlYWRlciBjb21tb24gcmVnaXN0ZXIgb2Zmc2V0cwotI2RlZmluZSBJVF9WSUQJCQkJMHgwMAotI2RlZmluZSBJVF9ESUQJCQkJMHgwMgotI2RlZmluZSBJVF9QQ0lDTUQJCQkweDA0Ci0jZGVmaW5lIElUX1BDSVNUUwkJCTB4MDYKLSNkZWZpbmUgSVRfUklECQkJCTB4MDgKLSNkZWZpbmUgSVRfQ0xBU1NDCQkJMHgwOQotI2RlZmluZSBJVF9IRUFEVAkJCTB4MEUKLSNkZWZpbmUgSVRfU0VSSVJRQwkJCTB4NDkKLQotLy8gUENJIHRvIEludGVybmFsL0xQQyBCdXMgQnJpZGdlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIHJlZ2lzdGVyIG9mZnNldAotI2RlZmluZSBJVF9QMklfQkNSCQkJCTB4NEMKLSNkZWZpbmUgSVRfUDJJX0QwSU9TQwkJCQkweDUwCi0jZGVmaW5lIElUX1AySV9EMUlPU0MJCQkJMHg1NAotI2RlZmluZSBJVF9QMklfRDJJT1NDCQkJCTB4NTgKLSNkZWZpbmUgSVRfUDJJX0QzSU9TQwkJCQkweDVDCi0jZGVmaW5lIElUX1AySV9ENElPU0MJCQkJMHg2MAotI2RlZmluZSBJVF9QMklfRDVJT1NDCQkJCTB4NjQKLSNkZWZpbmUgSVRfUDJJX0Q2SU9TQwkJCQkweDY4Ci0jZGVmaW5lIElUX1AySV9EN0lPU0MJCQkJMHg2QwotI2RlZmluZSBJVF9QMklfRDhJT1NDCQkJCTB4NzAKLSNkZWZpbmUgSVRfUDJJX0Q5SU9TQwkJCQkweDc0Ci0jZGVmaW5lIElUX1AySV9EMTBJT1NDCQkJCTB4NzgKLSNkZWZpbmUgSVRfUDJJX0QxMUlPU0MJCQkJMHg3QwotCi0vLyBNZW1vcnkgY29udHJvbGxlciByZWdpc3RlciBvZmZzZXRzIGZyb20gSVQ4MTcyX0JBU0UKLSNkZWZpbmUgSVRfTUNfU0RSTVIJCQkJCTB4MTAwMAotI2RlZmluZSBJVF9NQ19TRFJUUgkJCQkJMHgxMDA0Ci0jZGVmaW5lIElUX01DX01DUgkJCQkJMHgxMDA4Ci0jZGVmaW5lIElUX01DX1NEVFlQRQkJCQkJMHgxMDBDCi0jZGVmaW5lIElUX01DX1dQQkEJCQkJCTB4MTAxMAotI2RlZmluZSBJVF9NQ19XUFRBCQkJCQkweDEwMTQKLSNkZWZpbmUgSVRfTUNfSEFUUgkJCQkJMHgxMDE4Ci0jZGVmaW5lIElUX01DX1BDSUNSCQkJCQkweDEwMUMKLQotLy8gRmxhc2gvUk9NIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0cyBmcm9tIElUODE3Ml9CQVNFCi0jZGVmaW5lIElUX0ZDX0JSQ1IJCQkJCTB4MjAwMAotI2RlZmluZSBJVF9GQ19GQ1IJCQkJCTB4MjAwNAotI2RlZmluZSBJVF9GQ19EQ1IJCQkJCTB4MjAwOAotCi0vLyBNNjhLIGludGVyZmFjZSBicmlkZ2UgY29uZmlndXJhdGlvbiBoZWFkZXIgcmVnaXN0ZXIgb2Zmc2V0Ci0jZGVmaW5lIElUX002OEtfTUJDU1IJCQkJCTB4NTQKLSNkZWZpbmUgSVRfTTY4S19UTVIJCQkJCTB4NTgKLSNkZWZpbmUgSVRfTTY4S19CQ1IJCQkJCTB4NUMKLSNkZWZpbmUgSVRfTTY4S19CU1IJCQkJCTB4NUQKLSNkZWZpbmUgSVRfTTY4S19EVFIJCQkJCTB4NUYKLQotLy8gUmVnaXN0ZXIgb2Zmc2V0IGZyb20gSVQ4MTcyX1BDSV9JT19CQVNFCi0vLyBUaGVzZSByZWdpc3RlcnMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCA4MTcyIFBDSSBJTyB3aW5kb3cuCi0KLS8vIElOVEMKLSNkZWZpbmUgSVRfSU5UQ19CQVNFCQkJCTB4MTAwMDAKLSNkZWZpbmUgSVRfSU5UQ19MQkROSVJSCQkJCTB4MTAwMDAKLSNkZWZpbmUgSVRfSU5UQ19MQkROSU1SCQkJCTB4MTAwMDIKLSNkZWZpbmUgSVRfSU5UQ19MQkROSVRSCQkJCTB4MTAwMDQKLSNkZWZpbmUgSVRfSU5UQ19MQkROSUFSCQkJCTB4MTAwMDYKLSNkZWZpbmUgSVRfSU5UQ19MUENOSVJSCQkJCTB4MTAwMTAKLSNkZWZpbmUgSVRfSU5UQ19MUENOSU1SCQkJCTB4MTAwMTIKLSNkZWZpbmUgSVRfSU5UQ19MUENOSVRSCQkJCTB4MTAwMTQKLSNkZWZpbmUgSVRfSU5UQ19MUENOSUFSCQkJCTB4MTAwMTYKLSNkZWZpbmUgSVRfSU5UQ19QRE5JUlIJCQkJMHgxMDAyMAotI2RlZmluZSBJVF9JTlRDX1BETklNUgkJCQkweDEwMDIyCi0jZGVmaW5lIElUX0lOVENfUEROSVRSCQkJCTB4MTAwMjQKLSNkZWZpbmUgSVRfSU5UQ19QRE5JQVIJCQkJMHgxMDAyNgotI2RlZmluZSBJVF9JTlRDX1VNTklSUgkJCQkweDEwMDMwCi0jZGVmaW5lIElUX0lOVENfVU1OSVRSCQkJCTB4MTAwMzQKLSNkZWZpbmUgSVRfSU5UQ19VTU5JQVIJCQkJMHgxMDAzNgotI2RlZmluZSBJVF9JTlRDX1RZUEVSCQkJCTB4MTA3RkUKLQotLy8gSVQ4MTcyIFBDSSBkZXZpY2UgbnVtYmVyCi0jZGVmaW5lIElUX0MyUF9ERVZJQ0UJCQkJMAotI2RlZmluZSBJVF9BVURJT19ERVZJQ0UJCQkJMQotI2RlZmluZSBJVF9ETUFDX0RFVklDRQkJCQkxCi0jZGVmaW5lIElUX0NETUFDX0RFVklDRQkJCQkxCi0jZGVmaW5lIElUX1VTQl9ERVZJQ0UJCQkJMQotI2RlZmluZSBJVF9QMklfREVWSUNFCQkJCTEKLSNkZWZpbmUgSVRfSURFX0RFVklDRQkJCQkxCi0jZGVmaW5lIElUX002OEtfREVWSUNFCQkJCTEKLQotLy8gSVQ4MTcyIFBDSSBmdW5jdGlvbiBudW1iZXIKLSNkZWZpbmUgSVRfQzJQX0ZVTkNJT04JCQkJMAotI2RlZmluZSBJVF9BVURJT19GVU5DVElPTgkJCTAKLSNkZWZpbmUgSVRfRE1BQ19GVU5DVElPTgkJCTEKLSNkZWZpbmUgSVRfQ0RNQUNfRlVOQ1RJT04JCQkyCi0jZGVmaW5lIElUX1VTQl9GVU5DVElPTgkJCQkzCi0jZGVmaW5lIElUX1AySV9GVU5DVElPTgkJCQk0Ci0jZGVmaW5lIElUX0lERV9GVU5DVElPTgkJCQk1Ci0jZGVmaW5lIElUX002OEtfRlVOQ1RJT04JCQk2Ci0KLS8vIElUODE3MiBHUElPCi0jZGVmaW5lIElUX0dQQURSCQkJCTB4MTM4MDAKLSNkZWZpbmUgSVRfR1BCRFIJCQkJMHgxMzgwOAotI2RlZmluZSBJVF9HUENEUgkJCQkweDEzODEwCi0jZGVmaW5lIElUX0dQQUNSCQkJCTB4MTM4MDIKLSNkZWZpbmUgSVRfR1BCQ1IJCQkJMHgxMzgwQQotI2RlZmluZSBJVF9HUENDUgkJCQkweDEzODEyCi0jZGVmaW5lIElUX0dQQUlDUgkJCQkweDEzODA0Ci0jZGVmaW5lIElUX0dQQklDUgkJCQkweDEzODBDCi0jZGVmaW5lIElUX0dQQ0lDUgkJCQkweDEzODE0Ci0jZGVmaW5lIElUX0dQQUlTUgkJCQkweDEzODA2Ci0jZGVmaW5lIElUX0dQQklTUgkJCQkweDEzODBFCi0jZGVmaW5lIElUX0dQQ0lTUgkJCQkweDEzODE2Ci0jZGVmaW5lIElUX0dDUgkJCQkJMHgxMzgxOAotCi0vLyBJVDgxNzIgUlRDCi0jZGVmaW5lIElUX1JUQ19CQVNFCQkJCTB4MTQ4MDAKLSNkZWZpbmUgSVRfUlRDX0NFTlRVUlkJCQkJMHgxNDgwOAotCi0jZGVmaW5lIElUX1JUQ19SSVIwCQkJCTB4MDAKLSNkZWZpbmUgSVRfUlRDX1JUUjAJCQkJMHgwMQotI2RlZmluZSBJVF9SVENfUklSMQkJCQkweDAyCi0jZGVmaW5lIElUX1JUQ19SVFIxCQkJCTB4MDMKLSNkZWZpbmUgSVRfUlRDX1JJUjIJCQkJMHgwNAotI2RlZmluZSBJVF9SVENfUlRSMgkJCQkweDA1Ci0jZGVmaW5lIElUX1JUQ19SQ1RSCQkJCTB4MDgKLSNkZWZpbmUgSVRfUlRDX1JBCQkJCTB4MEEKLSNkZWZpbmUgSVRfUlRDX1JCCQkJCTB4MEIKLSNkZWZpbmUgSVRfUlRDX1JDCQkJCTB4MEMKLSNkZWZpbmUgSVRfUlRDX1JECQkJCTB4MEQKLQotI2RlZmluZSBSVENfU0VDX0lOREVYCQkJCTB4MDAKLSNkZWZpbmUgUlRDX01JTl9JTkRFWAkJCQkweDAyCi0jZGVmaW5lIFJUQ19IT1VSX0lOREVYCQkJCTB4MDQKLSNkZWZpbmUgUlRDX0RBWV9JTkRFWAkJCQkweDA2Ci0jZGVmaW5lIFJUQ19EQVRFX0lOREVYCQkJCTB4MDcKLSNkZWZpbmUgUlRDX01PTlRIX0lOREVYCQkJCTB4MDgKLSNkZWZpbmUgUlRDX1lFQVJfSU5ERVgJCQkJMHgwOQotCi0vLyBJVDgxNzIgaW50ZXJuYWwgZGV2aWNlIHJlZ2lzdGVycwotI2RlZmluZSBJVF9USU1FUl9CQVNFCQkJCTB4MTA4MDAKLSNkZWZpbmUgSVRfQ0lSMF9CQVNFCQkJCTB4MTEwMDAKLSNkZWZpbmUgSVRfVUFSVF9CQVNFCQkJCTB4MTE4MDAKLSNkZWZpbmUgSVRfU0NSMF9CQVNFCQkJCTB4MTIwMDAKLSNkZWZpbmUgSVRfU0NSMV9CQVNFCQkJCTB4MTI4MDAKLSNkZWZpbmUgSVRfUFBfQkFTRQkJCQkweDEzMDAwCi0jZGVmaW5lIElUX0kyQ19CQVNFCQkJCTB4MTQwMDAKLSNkZWZpbmUgSVRfQ0lSMV9CQVNFCQkJCTB4MTUwMDAKLQotLy8gSVQ4MTcyIFNtYXJ0IENhcmQgUmVhZGVyIG9mZnNldHMgZnJvbSBJVF9TQ1IqX0JBU0UKLSNkZWZpbmUgSVRfU0NSX1NGUgkJCQkweDA4Ci0jZGVmaW5lIElUX1NDUl9TQ0RSCQkJCTB4MDkKLQotLy8gSVQ4MTcyIElUX1NDUl9TRlIgYml0IGRlZmluaXRpb24gJiBtYXNrCi0jZGVmaW5lCUlUX1NDUl9TRlJfR0FURV9VQVJUCQkJMHg0MAotI2RlZmluZQlJVF9TQ1JfU0ZSX0dBVEVfVUFSVF9CSVQJCTYKLSNkZWZpbmUgSVRfU0NSX1NGUl9HQVRFX1VBUlRfT0ZGCQkwCi0jZGVmaW5lCUlUX1NDUl9TRlJfR0FURV9VQVJUX09OCQkJMQotI2RlZmluZQlJVF9TQ1JfU0ZSX0ZFVF9DSEFSR0UJCQkweDMwCi0jZGVmaW5lCUlUX1NDUl9TRlJfRkVUX0NIQVJHRV9CSVQJCTQKLSNkZWZpbmUgSVRfU0NSX1NGUl9GRVRfQ0hBUkdFXzNfM19VUwkJMwotI2RlZmluZSBJVF9TQ1JfU0ZSX0ZFVF9DSEFSR0VfMTNfVVMJCTIKLSNkZWZpbmUgSVRfU0NSX1NGUl9GRVRfQ0hBUkdFXzUzX1VTCQkxCi0jZGVmaW5lIElUX1NDUl9TRlJfRkVUX0NIQVJHRV8yMTNfVVMJCTAKLSNkZWZpbmUJSVRfU0NSX1NGUl9DQVJEX0ZSRVEJCQkweDBDCi0jZGVmaW5lCUlUX1NDUl9TRlJfQ0FSRF9GUkVRX0JJVAkJMgotI2RlZmluZSBJVF9TQ1JfU0ZSX0NBUkRfRlJFUV9TVE9QCQkzCi0jZGVmaW5lIElUX1NDUl9TRlJfQ0FSRF9GUkVRXzNfNV9NSFoJCTAKLSNkZWZpbmUgSVRfU0NSX1NGUl9DQVJEX0ZSRVFfN18xX01IWgkJMgotI2RlZmluZSBJVF9TQ1JfU0ZSX0NBUkRfRlJFUV85Nl9ESVZfTUhaCQkxCi0jZGVmaW5lCUlUX1NDUl9TRlJfRkVUX0FDVElWRQkJCTB4MDIKLSNkZWZpbmUJSVRfU0NSX1NGUl9GRVRfQUNUSVZFX0JJVAkJMQotI2RlZmluZSBJVF9TQ1JfU0ZSX0ZFVF9BQ1RJVkVfSU5WRVJUCQkwCi0jZGVmaW5lIElUX1NDUl9TRlJfRkVUX0FDVElWRV9OT05JTlZFUlQJCTEKLSNkZWZpbmUJSVRfU0NSX1NGUl9FTkFCTEUJCQkweDAxCi0jZGVmaW5lCUlUX1NDUl9TRlJfRU5BQkxFX0JJVAkJCTAKLSNkZWZpbmUgSVRfU0NSX1NGUl9FTkFCTEVfT0ZGCQkJMAotI2RlZmluZSBJVF9TQ1JfU0ZSX0VOQUJMRV9PTgkJCTEKLQotLy8gSVQ4MTcyIElUX1NDUl9TQ0RSIGJpdCBkZWZpbml0aW9uICYgbWFzawotI2RlZmluZQlJVF9TQ1JfU0NEUl9SRVNFVF9NT0RFCQkJMHg4MAotI2RlZmluZQlJVF9TQ1JfU0NEUl9SRVNFVF9NT0RFX0JJVAkJNwotI2RlZmluZQlJVF9TQ1JfU0NEUl9SRVNFVF9NT0RFX0FTWU5DCQkwCi0jZGVmaW5lIElUX1NDUl9TQ0RSX1JFU0VUX01PREVfU1lOQwkJMQotI2RlZmluZQlJVF9TQ1JfU0NEUl9ESVZJU09SCQkJMHg3RgotI2RlZmluZQlJVF9TQ1JfU0NEUl9ESVZJU09SX0JJVAkJCTAKLSNkZWZpbmUJSVRfU0NSX1NDRFJfRElWSVNPUl9TVE9QX1ZBTF8xCQkweDAwCi0jZGVmaW5lCUlUX1NDUl9TQ0RSX0RJVklTT1JfU1RPUF9WQUxfMgkJMHgwMQotI2RlZmluZQlJVF9TQ1JfU0NEUl9ESVZJU09SX1NUT1BfVkFMXzMJCTB4N0YKLQotLy8gSVQ4MTcyIERNQQotI2RlZmluZSBJVF9ETUFDX0JBU0UJCQkJMHgxNjAwMAotI2RlZmluZSBJVF9ETUFDX0JDQVIwCQkJCTB4MDAKLSNkZWZpbmUgSVRfRE1BQ19CQ0FSMQkJCQkweDA0Ci0jZGVmaW5lIElUX0RNQUNfQkNBUjIJCQkJMHgwOAotI2RlZmluZSBJVF9ETUFDX0JDQVIzCQkJCTB4MEMKLSNkZWZpbmUgSVRfRE1BQ19CQ0NSMAkJCQkweDAyCi0jZGVmaW5lIElUX0RNQUNfQkNDUjEJCQkJMHgwNgotI2RlZmluZSBJVF9ETUFDX0JDQ1IyCQkJCTB4MGEKLSNkZWZpbmUgSVRfRE1BQ19CQ0NSMwkJCQkweDBlCi0jZGVmaW5lIElUX0RNQUNfQ1IJCQkJMHgxMAotI2RlZmluZSBJVF9ETUFDX1NSCQkJCTB4MTIKLSNkZWZpbmUgSVRfRE1BQ19FU1IJCQkJMHgxMwotI2RlZmluZSBJVF9ETUFDX1JRUgkJCQkweDE0Ci0jZGVmaW5lIElUX0RNQUNfTVIJCQkJMHgxNgotI2RlZmluZSBJVF9ETUFDX0VNUgkJCQkweDE3Ci0jZGVmaW5lIElUX0RNQUNfTUtSCQkJCTB4MTgKLSNkZWZpbmUgSVRfRE1BQ19QQVIwCQkJCTB4MjAKLSNkZWZpbmUgSVRfRE1BQ19QQVIxCQkJCTB4MjIKLSNkZWZpbmUgSVRfRE1BQ19QQVIyCQkJCTB4MjQKLSNkZWZpbmUgSVRfRE1BQ19QQVIzCQkJCTB4MjYKLQotLy8gSVQ4MTcyIElERQotI2RlZmluZSBJVF9JREVfQkFTRQkJCQkweDE3ODAwCi0jZGVmaW5lIElUX0lERV9TVEFUVVMJCQkJMHgxRjcKLQotLy8gSVQ4MTcyIEF1ZGlvIENvbnRyb2xsZXIKLSNkZWZpbmUgSVRfQUNfQkFTRQkJCQkweDE3MDAwCi0jZGVmaW5lCUlUX0FDX1BDTU9WCQkJCTB4MDAKLSNkZWZpbmUgSVRfQUNfRk1PVgkJCQkweDAyCi0jZGVmaW5lCUlUX0FDX0kyU1YJCQkJMHgwNAotI2RlZmluZSBJVF9BQ19EUlNTCQkJCTB4MDYKLSNkZWZpbmUgSVRfQUNfUENDCQkJCTB4MDgKLSNkZWZpbmUgSVRfQUNfUENETAkJCQkweDBBCi0jZGVmaW5lIElUX0FDX1BDQjFTVEEJCQkJMHgwQwotI2RlZmluZSBJVF9BQ19QQ0IyU1RBCQkJCTB4MTAKLSNkZWZpbmUgSVRfQUNfQ0FQQ0MJCQkJMHgxNAotI2RlZmluZSBJVF9BQ19DQVBDREwJCQkJMHgxNgotI2RlZmluZSBJVF9BQ19DQVBCMVNUQQkJCQkweDE4Ci0jZGVmaW5lIElUX0FDX0NBUEIyU1RBCQkJCTB4MUMKLSNkZWZpbmUgSVRfQUNfQ09ERUNDCQkJCTB4MjIKLSNkZWZpbmUgSVRfQUNfSTJTTUMJCQkJMHgyNAotI2RlZmluZSBJVF9BQ19WUwkJCQkweDI2Ci0jZGVmaW5lIElUX0FDX1NSQ1MJCQkJMHgyOAotI2RlZmluZSBJVF9BQ19DSVJDUAkJCQkweDJBCi0jZGVmaW5lIElUX0FDX0NJUkRQCQkJCTB4MkMKLSNkZWZpbmUgSVRfQUNfVE0JCQkJMHg0QQotI2RlZmluZSBJVF9BQ19QRkRQCQkJCTB4NEMKLSNkZWZpbmUgSVRfQUNfR0MJCQkJMHg1NAotI2RlZmluZSBJVF9BQ19JTUMJCQkJMHg1NgotI2RlZmluZSBJVF9BQ19JU0MJCQkJMHg1QgotI2RlZmluZSBJVF9BQ19PUEwzU1IJCQkJMHg2OAotI2RlZmluZSBJVF9BQ19PUEwzRFdEUgkJCQkweDY5Ci0jZGVmaW5lIElUX0FDX09QTDNBQjFXCQkJCTB4NkEKLSNkZWZpbmUgSVRfQUNfT1BMM0RXCQkJCTB4NkIKLSNkZWZpbmUgSVRfQUNfQlBEQwkJCQkweDcwCi0KLQotLy8gSVQ4MTcyIFRpbWVyCi0jZGVmaW5lIElUX1RJTUVSX0JBU0UJCQkJMHgxMDgwMAotI2RlZmluZQlUSU1FUl9UQ1ZSMAkJCQkweDAwCi0jZGVmaW5lIFRJTUVSX1RSVlIwCQkJCTB4MDIKLSNkZWZpbmUJVElNRVJfVENSMAkJCQkweDA0Ci0jZGVmaW5lIFRJTUVSX1RJUlIJCQkJMHgwNgotI2RlZmluZQlUSU1FUl9UQ1ZSMQkJCQkweDA4Ci0jZGVmaW5lIFRJTUVSX1RSVlIxCQkJCTB4MEEKLSNkZWZpbmUJVElNRVJfVENSMQkJCQkweDBDCi0jZGVmaW5lIFRJTUVSX1RJRFIJCQkJMHgwRQotCi0KLSNkZWZpbmUgSVRfV1JJVEUob2ZzLCBkYXRhKSAqKHZvbGF0aWxlIHUzMiAqKUtTRUcxQUREUigoSVQ4MTcyX0JBU0Urb2ZzKSkgPSBkYXRhCi0jZGVmaW5lIElUX1JFQUQob2ZzLCBkYXRhKSAgZGF0YSA9ICoodm9sYXRpbGUgdTMyICopS1NFRzFBRERSKChJVDgxNzJfQkFTRStvZnMpKQotCi0jZGVmaW5lIElUX0lPX1dSSVRFKG9mcywgZGF0YSkgKih2b2xhdGlsZSB1MzIgKilLU0VHMUFERFIoKElUODE3Ml9QQ0lfSU9fQkFTRStvZnMpKSA9IGRhdGEKLSNkZWZpbmUgSVRfSU9fUkVBRChvZnMsIGRhdGEpICBkYXRhID0gKih2b2xhdGlsZSB1MzIgKilLU0VHMUFERFIoKElUODE3Ml9QQ0lfSU9fQkFTRStvZnMpKQotCi0jZGVmaW5lIElUX0lPX1dSSVRFMTYob2ZzLCBkYXRhKSAqKHZvbGF0aWxlIHUxNiAqKUtTRUcxQUREUigoSVQ4MTcyX1BDSV9JT19CQVNFK29mcykpID0gZGF0YQotI2RlZmluZSBJVF9JT19SRUFEMTYob2ZzLCBkYXRhKSAgZGF0YSA9ICoodm9sYXRpbGUgdTE2ICopS1NFRzFBRERSKChJVDgxNzJfUENJX0lPX0JBU0Urb2ZzKSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfY2lyLmggYi9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfY2lyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMWRiZDIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9pdDgxNzIvaXQ4MTcyX2Npci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglJVDgxNzIgQ29uc3VtZXIgSVIgcG9ydCBkZWZpbmVzLgotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIAlwcG9wb3ZAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jZGVmaW5lIE5VTV9DSVJfUE9SVFMgMgotCi0vKiBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBDSVJfUkVTRVQgICAgICAgICAgICAgIDB4MQotI2RlZmluZSBDSVJfRklGT19DTEVBUiAgICAgICAgIDB4MgotI2RlZmluZSBDSVJfU0VUX0ZJRk9fVEwoeCkgICAgICgoKHgpJjB4Myk8PDIpCi0jZGVmaW5lIENJUl9JTEUgICAgICAgICAgICAgICAgMHgxMAotI2RlZmluZSBDSVJfSUxTRUwgICAgICAgICAgICAgIDB4MjAKLQotLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLwotI2RlZmluZSBDSVJfVExETElFICAgICAgICAgICAgIDB4MQotI2RlZmluZSBDSVJfUkRBSUUgICAgICAgICAgICAgIDB4MgotI2RlZmluZSBDSVJfUkZPSUUgICAgICAgICAgICAgIDB4NAotI2RlZmluZSBDSVJfSUVDICAgICAgICAgICAgICAgIDB4ODAKLQotLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lIENJUl9UTERMSSAgICAgICAgICAgICAgMHgxCi0jZGVmaW5lIENJUl9SREFJICAgICAgICAgICAgICAgMHgyCi0jZGVmaW5lIENJUl9SRk9JICAgICAgICAgICAgICAgMHg0Ci0jZGVmaW5lIENJUl9OSVAgICAgICAgICAgICAgICAgMHg4MAotCi0vKiBDYXJyaWVyIEZyZXF1ZW5jeSBSZWdpc3RlciAqLwotI2RlZmluZSBDSVJfU0VUX0NGKHgpICAgICAgICAgICgoeCkmMHgxZikKLSAgI2RlZmluZSBDRlFfMzhfNDgwICAgICAgICAgICAweEIgICAgICAgLyogMzggS0h6IGxvdywgNDgwIEtIeiBoaWdoICovCi0jZGVmaW5lIENJUl9IQ0ZTICAgICAgICAgICAgICAgMHgyMAotICAjZGVmaW5lIENJUl9TRVRfSFMoeCkgICAgICAgICgoKHgpJjB4MSk8PDUpCi0KLQotLyogUmVjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBDSVJfU0VUX1JYRENSKHgpICAgICAgICgoeCkmMHg3KQotI2RlZmluZSBDSVJfUlhBQ1QgICAgICAgICAgICAgIDB4OAotI2RlZmluZSBDSVJfUlhFTkQgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgQ0lSX1JEV09TICAgICAgICAgICAgICAweDIwCi0gICNkZWZpbmUgQ0lSX1NFVF9SRFdPUyh4KSAgICAgKCgoeCkmMHgxKTw8NSkKLSNkZWZpbmUgQ0lSX1JYRU4gICAgICAgICAgICAgICAweDgwCi0KLS8qIFRyYW5zbWl0dGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQ0lSX1NFVF9UWE1QVyh4KSAgICAgICAoKHgpJjB4NykKLSNkZWZpbmUgQ0lSX1NFVF9UWE1QTSh4KSAgICAgICAoKCh4KSYweDMpPDwzKQotI2RlZmluZSBDSVJfVFhFTkRGICAgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgQ0lSX1RYUkxFICAgICAgICAgICAgICAweDQwCi0KLS8qIFJlY2VpdmVyIEZJRk8gU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIENJUl9SWEZCQ19NQVNLICAgICAgICAgMHgzZgotI2RlZmluZSBDSVJfUlhGVE8gICAgICAgICAgICAgIDB4ODAKLQotLyogV2FrZXVwIENvZGUgTGVuZ3RoIFJlZ2lzdGVyICovCi0jZGVmaW5lIENJUl9TRVRfV0NMICAgICAgICAgICAgKCh4KSYweDNmKQotI2RlZmluZSBDSVJfV0NMX01BU0soeCkgICAgICAgICgoeCkmMHgzZikKLQotLyogV2FrZXVwIFBvd2VyIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIENJUl9CVE1PTiAgICAgICAgICAgICAgMHgyCi0jZGVmaW5lIENJUl9DSVJPTiAgICAgICAgICAgICAgMHg0Ci0jZGVmaW5lIENJUl9SQ1JTVCAgICAgICAgICAgICAgMHgxMAotI2RlZmluZSBDSVJfV0NSU1QgICAgICAgICAgICAgIDB4MjAKLQotc3RydWN0IGNpcl9wb3J0IHsKLQlpbnQgcG9ydDsKLQl1bnNpZ25lZCBzaG9ydCBiYXVkX3JhdGU7Ci0JdW5zaWduZWQgY2hhciBmaWZvX3RsOwotCXVuc2lnbmVkIGNoYXIgY2ZxOwotCXVuc2lnbmVkIGNoYXIgaGNmczsKLQl1bnNpZ25lZCBjaGFyIHJkd29zOwotCXVuc2lnbmVkIGNoYXIgcnhkY3I7Ci19OwotCi1zdHJ1Y3QgaXQ4MTcyX2Npcl9yZWdzIHsKLQl1bnNpZ25lZCBjaGFyIGRyOyAgICAgICAvKiBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQljaGFyIHBhZDsKLQl1bnNpZ25lZCBjaGFyIG1zdGNyOyAgICAvKiBtYXN0ZXIgY29udHJvbCAgICAgICAgICAgICAgKi8KLQljaGFyIHBhZDE7Ci0JdW5zaWduZWQgY2hhciBpZXI7ICAgICAgLyogaW50ZXJydXB0IGVuYWJsZSAgICAgICAgICAgICovCi0JY2hhciBwYWQyOwotCXVuc2lnbmVkIGNoYXIgaWlyOyAgICAgIC8qIGludGVycnVwdCBpZGVudGlmaWNhdGlvbiAgICAqLwotCWNoYXIgcGFkMzsKLQl1bnNpZ25lZCBjaGFyIGNmcjsgICAgICAvKiBjYXJyaWVyIGZyZXF1ZW5jeSAgICAgICAgICAgKi8KLQljaGFyIHBhZDQ7Ci0JdW5zaWduZWQgY2hhciByY3I7ICAgICAgLyogcmVjZWl2ZXIgY29udHJvbCAgICAgICAgICAgICovCi0JY2hhciBwYWQ1OwotCXVuc2lnbmVkIGNoYXIgdGNyOyAgICAgIC8qIHRyYW5zbWl0dGVyIGNvbnRyb2wgICAgICAgICAqLwotCWNoYXIgcGFkNjsKLQljaGFyIHBhZDc7Ci0JY2hhciBwYWQ4OwotCXVuc2lnbmVkIGNoYXIgYmRscjsgICAgIC8qIGJhdWQgcmF0ZSBkaXZpc29yIGxvdyBieXRlICAqLwotCWNoYXIgcGFkOTsKLQl1bnNpZ25lZCBjaGFyIGJkaHI7ICAgICAvKiBiYXVkIHJhdGUgZGl2aXNvciBoaWdoIGJ5dGUgKi8KLQljaGFyIHBhZDEwOwotCXVuc2lnbmVkIGNoYXIgdGZzcjsgICAgIC8qIHR4IGZpZm8gYnl0ZSBjb3VudCAgICAgICAgICAqLwotCWNoYXIgcGFkMTE7Ci0JdW5zaWduZWQgY2hhciByZnNyOyAgICAgLyogcnggZmlmbyBzdGF0dXMgICAgICAgICAgICAgICovCi0JY2hhciBwYWQxMjsKLQl1bnNpZ25lZCBjaGFyIHdjbDsgICAgICAvKiB3YWtldXAgY29kZSBsZW5ndGggICAgICAgICAgKi8KLQljaGFyIHBhZDEzOwotCXVuc2lnbmVkIGNoYXIgd2NyOyAgICAgIC8qIHdha2V1cCBjb2RlIHJlYWQvd3JpdGUgICAgICAqLwotCWNoYXIgcGFkMTQ7Ci0JdW5zaWduZWQgY2hhciB3cHM7ICAgICAgLyogd2FrZXVwIHBvd2VyIGNvbnRyb2wvc3RhdHVzICovCi19OwotCi1pbnQgY2lyX3BvcnRfaW5pdChzdHJ1Y3QgY2lyX3BvcnQgKmNpcik7Ci1leHRlcm4gdm9pZCBjbGVhcl9maWZvKHN0cnVjdCBjaXJfcG9ydCAqY2lyKTsKLWV4dGVybiB2b2lkIGVuYWJsZV9yZWNlaXZlcihzdHJ1Y3QgY2lyX3BvcnQgKmNpcik7Ci1leHRlcm4gdm9pZCBkaXNhYmxlX3JlY2VpdmVyKHN0cnVjdCBjaXJfcG9ydCAqY2lyKTsKLWV4dGVybiB2b2lkIGVuYWJsZV9yeF9kZW1vZHVsYXRpb24oc3RydWN0IGNpcl9wb3J0ICpjaXIpOwotZXh0ZXJuIHZvaWQgZGlzYWJsZV9yeF9kZW1vZHVsYXRpb24oc3RydWN0IGNpcl9wb3J0ICpjaXIpOwotZXh0ZXJuIHZvaWQgc2V0X3J4X2FjdGl2ZShzdHJ1Y3QgY2lyX3BvcnQgKmNpcik7Ci1leHRlcm4gdm9pZCBpbnRfZW5hYmxlKHN0cnVjdCBjaXJfcG9ydCAqY2lyKTsKLWV4dGVybiB2b2lkIHJ4X2ludF9lbmFibGUoc3RydWN0IGNpcl9wb3J0ICpjaXIpOwotZXh0ZXJuIGNoYXIgZ2V0X2ludF9zdGF0dXMoc3RydWN0IGNpcl9wb3J0ICpjaXIpOwotZXh0ZXJuIGludCBjaXJfZ2V0X3J4X2NvdW50KHN0cnVjdCBjaXJfcG9ydCAqY2lyKTsKLWV4dGVybiBjaGFyIGNpcl9yZWFkX2RhdGEoc3RydWN0IGNpcl9wb3J0ICpjaXIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pdDgxNzIvaXQ4MTcyX2RiZy5oIGIvaW5jbHVkZS9hc20tbWlwcy9pdDgxNzIvaXQ4MTcyX2RiZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDA0ZWM3Yy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfZGJnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgbG93IGxldmVsIHVhcnQgcm91dGluZXMgdG8KLSAqCWRpcmVjdGx5IGFjY2VzcyBhIDE2NTUwIHVhcnQuCi0gKgotICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi1leHRlcm4gdm9pZCBwdXRjaChjb25zdCB1bnNpZ25lZCBjaGFyIGMpOwotZXh0ZXJuIHZvaWQgcHV0cyh1bnNpZ25lZCBjaGFyICpjcCk7Ci1leHRlcm4gdm9pZCBmcHV0cyh1bnNpZ25lZCBjaGFyICpjcCk7Ci1leHRlcm4gdm9pZCBwdXQ2NCh1aW50NjRfdCB1bCk7Ci1leHRlcm4gdm9pZCBwdXQzMih1bnNpZ25lZCB1KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXQ4MTcyL2l0ODE3Ml9pbnQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXQ4MTcyL2l0ODE3Ml9pbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM3ZTgzYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUlURSA4MTcyIEludGVycnVwdCBOdW1iZXJpbmcKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfTUlQU19JVEVJTlRfSAotI2RlZmluZSBfTUlQU19JVEVJTlRfSAotCi0vKgotICogSGVyZSdzIHRoZSAic3RyYXRlZ3kiOgotICogV2UgbnVtYmVyIHRoZSBMUEMgc2VyaWFsIGlycXMgZnJvbSAwIHRvIDE1LAotICogdGhlIGxvY2FsIGJ1cyBpcnFzIGZyb20gMTYgdG8gMzEsCi0gKiB0aGUgcGNpIGRldiByZWdpc3RlciBpbnRlcnJ1cHRzIGZyb20gMzIgdG8gNDcsCi0gKiBhbmQgdGhlIG5vbi1tYXNrYWJsZSBpbnRzIGZyb20gNDggdG8gNTMuCi0gKi8KLQotI2RlZmluZSBJVDgxNzJfTFBDX0lSUV9CQVNFICAwICAgIC8qIGZpcnN0IExQQyBpbnQgbnVtYmVyICovCi0jZGVmaW5lIElUODE3Ml9TRVJJUlFfMCAgICAgIChJVDgxNzJfTFBDX0lSUV9CQVNFICsgMCkKLSNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xICAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxKQotI2RlZmluZSBJVDgxNzJfU0VSSVJRXzIgICAgICAoSVQ4MTcyX0xQQ19JUlFfQkFTRSArIDIpCi0jZGVmaW5lIElUODE3Ml9TRVJJUlFfMyAgICAgIChJVDgxNzJfTFBDX0lSUV9CQVNFICsgMykKLSNkZWZpbmUgSVQ4MTcyX1NFUklSUV80ICAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyA0KQotI2RlZmluZSBJVDgxNzJfU0VSSVJRXzUgICAgICAoSVQ4MTcyX0xQQ19JUlFfQkFTRSArIDUpCi0jZGVmaW5lIElUODE3Ml9TRVJJUlFfNiAgICAgIChJVDgxNzJfTFBDX0lSUV9CQVNFICsgNikKLSNkZWZpbmUgSVQ4MTcyX1NFUklSUV83ICAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyA3KQotI2RlZmluZSBJVDgxNzJfU0VSSVJRXzggICAgICAoSVQ4MTcyX0xQQ19JUlFfQkFTRSArIDgpCi0jZGVmaW5lIElUODE3Ml9TRVJJUlFfOSAgICAgIChJVDgxNzJfTFBDX0lSUV9CQVNFICsgOSkKLSNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xMCAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxMCkKLSNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xMSAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxMSkKLSNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xMiAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxMikKLSNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xMyAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxMykKLSNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xNCAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxNCkKLSNkZWZpbmUgSVQ4MTcyX1NFUklSUV8xNSAgICAgKElUODE3Ml9MUENfSVJRX0JBU0UgKyAxNSkKLQotI2RlZmluZSBJVDgxNzJfTEJfSVJRX0JBU0UgIDE2ICAgLyogZmlyc3QgbG9jYWwgYnVzIGludCBudW1iZXIgKi8KLSNkZWZpbmUgSVQ4MTcyX1BQUl9JUlEgICAgICAgICAgKElUODE3Ml9MQl9JUlFfQkFTRSArIDApIC8qIHBhcmFsbGVsIHBvcnQgKi8KLSNkZWZpbmUgSVQ4MTcyX1RJTUVSMF9JUlEgICAgICAgKElUODE3Ml9MQl9JUlFfQkFTRSArIDEpCi0jZGVmaW5lIElUODE3Ml9USU1FUjFfSVJRICAgICAgIChJVDgxNzJfTEJfSVJRX0JBU0UgKyAyKQotI2RlZmluZSBJVDgxNzJfSTJDX0lSUSAgICAgICAgICAoSVQ4MTcyX0xCX0lSUV9CQVNFICsgMykKLSNkZWZpbmUgSVQ4MTcyX0dQSU9fSVJRICAgICAgICAgKElUODE3Ml9MQl9JUlFfQkFTRSArIDQpCi0jZGVmaW5lIElUODE3Ml9DSVIwX0lSUSAgICAgICAgIChJVDgxNzJfTEJfSVJRX0JBU0UgKyA1KQotI2RlZmluZSBJVDgxNzJfQ0lSMV9JUlEgICAgICAgICAoSVQ4MTcyX0xCX0lSUV9CQVNFICsgNikKLSNkZWZpbmUgSVQ4MTcyX1VBUlRfSVJRICAgICAgICAgKElUODE3Ml9MQl9JUlFfQkFTRSArIDcpCi0jZGVmaW5lIElUODE3Ml9TQ1IwX0lSUSAgICAgICAgIChJVDgxNzJfTEJfSVJRX0JBU0UgKyA4KQotI2RlZmluZSBJVDgxNzJfU0NSMV9JUlEgICAgICAgICAoSVQ4MTcyX0xCX0lSUV9CQVNFICsgOSkKLSNkZWZpbmUgSVQ4MTcyX1JUQ19JUlEgICAgICAgICAgKElUODE3Ml9MQl9JUlFfQkFTRSArIDEwKQotI2RlZmluZSBJVDgxNzJfSU9DSEtfSVJRICAgICAgICAoSVQ4MTcyX0xCX0lSUV9CQVNFICsgMTEpCi0vKiAxMiAtIDE1IHJlc2VydmVkICovCi0KLS8qCi0gKiBOb3RlIGhlcmUgdGhhdCB0aGUgcGNpIGRldiByZWdpc3RlcnMgaW5jbHVkZXMgYml0cyBmb3IgbW9yZSB0aGFuCi0gKiBqdXN0IHRoZSBwY2kgZGV2aWNlcy4KLSAqLwotI2RlZmluZSBJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSAgMzIgICAvKiBmaXJzdCBwY2kgZGV2IGlycSAqLwotI2RlZmluZSBJVDgxNzJfQUM5N19JUlEgICAgICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgMCkKLSNkZWZpbmUgSVQ4MTcyX01DNjhLX0lSUSAgICAgICAgIChJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSArIDEpCi0jZGVmaW5lIElUODE3Ml9JREVfSVJRICAgICAgICAgICAoSVQ4MTcyX1BDSV9ERVZfSVJRX0JBU0UgKyAyKQotI2RlZmluZSBJVDgxNzJfVVNCX0lSUSAgICAgICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgMykKLSNkZWZpbmUgSVQ4MTcyX0JSSURHRV9NQVNURVJfSVJRIChJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSArIDQpCi0jZGVmaW5lIElUODE3Ml9CUklER0VfVEFSR0VUX0lSUSAoSVQ4MTcyX1BDSV9ERVZfSVJRX0JBU0UgKyA1KQotI2RlZmluZSBJVDgxNzJfUENJX0lOVEFfSVJRICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgNikKLSNkZWZpbmUgSVQ4MTcyX1BDSV9JTlRCX0lSUSAgICAgIChJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSArIDcpCi0jZGVmaW5lIElUODE3Ml9QQ0lfSU5UQ19JUlEgICAgICAoSVQ4MTcyX1BDSV9ERVZfSVJRX0JBU0UgKyA4KQotI2RlZmluZSBJVDgxNzJfUENJX0lOVERfSVJRICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgOSkKLSNkZWZpbmUgSVQ4MTcyX1NfSU5UQV9JUlEgICAgICAgIChJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSArIDEwKQotI2RlZmluZSBJVDgxNzJfU19JTlRCX0lSUSAgICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgMTEpCi0jZGVmaW5lIElUODE3Ml9TX0lOVENfSVJRICAgICAgICAoSVQ4MTcyX1BDSV9ERVZfSVJRX0JBU0UgKyAxMikKLSNkZWZpbmUgSVQ4MTcyX1NfSU5URF9JUlEgICAgICAgIChJVDgxNzJfUENJX0RFVl9JUlFfQkFTRSArIDEzKQotI2RlZmluZSBJVDgxNzJfQ0RNQV9JUlEgICAgICAgICAgKElUODE3Ml9QQ0lfREVWX0lSUV9CQVNFICsgMTQpCi0jZGVmaW5lIElUODE3Ml9ETUFfSVJRICAgICAgICAgICAoSVQ4MTcyX1BDSV9ERVZfSVJRX0JBU0UgKyAxNSkKLQotI2RlZmluZSBJVDgxNzJfTk1JX0lSUV9CQVNFICAgICAgNDgKLSNkZWZpbmUgSVQ4MTcyX1NFUl9OTUlfSVJRICAgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgMCkKLSNkZWZpbmUgSVQ4MTcyX1BDSV9OTUlfSVJRICAgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgMSkKLSNkZWZpbmUgSVQ4MTcyX1JUQ19OTUlfSVJRICAgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgMikKLSNkZWZpbmUgSVQ4MTcyX0NQVUlGX05NSV9JUlEgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgMykKLSNkZWZpbmUgSVQ4MTcyX1BNRVJfTk1JX0lSUSAgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgNCkKLSNkZWZpbmUgSVQ4MTcyX1BPV0VSX05NSV9JUlEgICAgIChJVDgxNzJfTk1JX0lSUV9CQVNFICsgNSkKLQotI2RlZmluZSBJVDgxNzJfTEFTVF9JUlEgICAgICAgICAgKElUODE3Ml9QT1dFUl9OTUlfSVJRKQotLyogRmluYWxseSwgbGV0J3MgbW92ZSBvdmVyIGhlcmUgdGhlIG1pcHMgY3B1IHRpbWVyIGludGVycnVwdC4KLSAqLwotI2RlZmluZSBNSVBTX0NQVV9USU1FUl9JUlEgICAgICAgKE5SX0lSUVMtMSkKLQotLyoKLSAqIElUODE3MiBJbnRlcnJ1cHQgQ29udHJvbGxlciBSZWdpc3RlcnMKLSAqLwotc3RydWN0IGl0ODE3Ml9pbnRjX3JlZ3MgewotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBsYl9yZXE7ICAgICAgLyogb2Zmc2V0IDAgKi8KLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgbGJfbWFzazsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgbGJfdHJpZ2dlcjsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgbGJfbGV2ZWw7Ci0JdW5zaWduZWQgY2hhciBwYWQwWzhdOwotCi0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGxwY19yZXE7ICAgICAvKiBvZmZzZXQgMHgxMCAqLwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBscGNfbWFzazsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgbHBjX3RyaWdnZXI7Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGxwY19sZXZlbDsKLQl1bnNpZ25lZCBjaGFyIHBhZDFbOF07Ci0KLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgcGNpX3JlcTsgICAgIC8qIG9mZnNldCAweDIwICovCi0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHBjaV9tYXNrOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBwY2lfdHJpZ2dlcjsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgcGNpX2xldmVsOwotCXVuc2lnbmVkIGNoYXIgcGFkMls4XTsKLQotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBubWlfcmVxOyAgICAgLyogb2Zmc2V0IDB4MzAgKi8KLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgbm1pX21hc2s7Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IG5taV90cmlnZ2VyOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBubWlfbGV2ZWw7Ci0JdW5zaWduZWQgY2hhciBwYWQzWzZdOwotCi0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IG5taV9yZWRpcjsgICAvKiBvZmZzZXQgMHgzRSAqLwotCXVuc2lnbmVkIGNoYXIgcGFkNFsweEJFXTsKLQotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnRzdGF0dXM7ICAgIC8qIG9mZnNldCAweEZFICovCi19OwotCi0jZW5kaWYgLyogX01JUFNfSVRFSU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXQ4MTcyL2l0ODE3Ml9wY2kuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXQ4MTcyL2l0ODE3Ml9wY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJjNjFmNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2l0ODE3Mi9pdDgxNzJfcGNpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUlUODE3MiBzeXN0ZW0gY29udHJvbGxlciBzcGVjaWZpYyBwY2kgZGVmaW5lcy4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfODE3MlBDSV9IXwotI2RlZmluZSBfODE3MlBDSV9IXwotCi0vLyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBUeXBlMAotI2RlZmluZQlQQ0lfSURSRUcJMHgwMAotI2RlZmluZQlQQ0lfQ01EU1RTUkVHCTB4MDQKLSNkZWZpbmUJUENJX0NMQVNTUkVHCTB4MDgKLSNkZWZpbmUJUENJX0JITENSRUcJMHgwQwotI2RlZmluZQlQQ0lfQkFTRTFSRUcJMHgxMAotI2RlZmluZQlQQ0lfQkFTRTJSRUcJMHgxNAotI2RlZmluZQlQQ0lfQkFTRTNSRUcJMHgxOAotI2RlZmluZQlQQ0lfQkFTRTRSRUcJMHgxQwotI2RlZmluZQlQQ0lfQkFTRTVSRUcJMHgyMAotI2RlZmluZQlQQ0lfQkFTRTZSRUcJMHgyNAotI2RlZmluZQlQQ0lfUk9NQkFTRVJFRwkweDMwCi0jZGVmaW5lCVBDSV9JTlRSUkVHCTB4M0MKLQotLy8gUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgVHlwZTEKLSNkZWZpbmUJUENJX0JVU05PUkVHCTB4MTgKLQotI2RlZmluZQlJVF9QQ0lfVkVORE9SSUQoeCkJKCh4KSAmIDB4RkZGRikKLSNkZWZpbmUJSVRfUENJX0RFVklDRUlEKHgpCSgoKHgpPj4xNikgJiAweEZGRkYpCi0KLS8vIENvbW1hbmQgcmVnaXN0ZXIKLSNkZWZpbmUJUENJX0NNRF9JT0VOCQkweDAwMDAwMDAxCi0jZGVmaW5lCVBDSV9DTURfTUVNRU4JCTB4MDAwMDAwMDIKLSNkZWZpbmUJUENJX0NNRF9CVVNNQVNURVIJMHgwMDAwMDAwNAotI2RlZmluZQlQQ0lfQ01EX1NQQ1lDTEUJCTB4MDAwMDAwMDgKLSNkZWZpbmUJUENJX0NNRF9XUklOVgkJMHgwMDAwMDAxMAotI2RlZmluZQlQQ0lfQ01EX1ZHQVNOT09QCTB4MDAwMDAwMjAKLSNkZWZpbmUJUENJX0NNRF9QRVJSCQkweDAwMDAwMDQwCi0jZGVmaW5lCVBDSV9DTURfV0FJVENUUkwJMHgwMDAwMDA4MAotI2RlZmluZQlQQ0lfQ01EX1NFUlIJCTB4MDAwMDAxMDAKLSNkZWZpbmUJUENJX0NNRF9GQVNUX0JBQ0tUT0JBQ0sJMHgwMDAwMDIwMAotCi0vLyBTdGF0dXMgcmVnaXN0ZXIKLSNkZWZpbmUJUENJX1NUU182Nk1IWgkJMHgwMDIwMDAwMAotI2RlZmluZQlQQ0lfU1RTX1NVUFBPUlRfVURGCTB4MDA0MDAwMDAKLSNkZWZpbmUJUENJX1NUU19GQVNUX0JBQ0tUT0JBQ0sJMHgwMDgwMDAwMAotI2RlZmluZQlQQ0lfU1RTX0RBVEFfUEVSUgkweDAxMDAwMDAwCi0jZGVmaW5lCVBDSV9TVFNfREVWU0VMMAkJMHgwMjAwMDAwMAotI2RlZmluZQlQQ0lfU1RTX0RFVlNFTDEJCTB4MDQwMDAwMDAKLSNkZWZpbmUJUENJX1NUU19TSUdfVEdUQUJPUlQJMHgwODAwMDAwMAotI2RlZmluZQlQQ0lfU1RTX1JDVl9UR1RBQk9SVAkweDEwMDAwMDAwCi0jZGVmaW5lCVBDSV9TVFNfUkNWX01TVEFCT1JUCTB4MjAwMDAwMDAKLSNkZWZpbmUJUENJX1NUU19TWVNFUlIJCTB4NDAwMDAwMDAKLSNkZWZpbmUJUENJX1NUU19ERVRDVF9QRVJSCTB4ODAwMDAwMDAKLQotI2RlZmluZQlJVF9QQ0lfQ0xBU1MoeCkJCSgoKHgpPj4yNCkgJiAweEZGKQotI2RlZmluZQlJVF9QQ0lfU1VCQ0xBU1MoeCkJCSgoKHgpPj4xNikgJiAweEZGKQotI2RlZmluZQlJVF9QQ0lfSU5URVJGQUNFKHgpCSgoKHgpPj44KSAmIDB4RkYpCi0jZGVmaW5lCUlUX1BDSV9SRVZJU0lPTih4KQkJKCh4KSAmIDB4RkYpCi0KLS8vIFBDSSBjbGFzcyBjb2RlCi0jZGVmaW5lCVBDSV9DTEFTU19CUklER0UJCQkweDA2Ci0KLS8vIGJyaWRnZSBzdWJjbGFzcwotI2RlZmluZQlQQ0lfU1VCQ0xBU1NfQlJJREdFX0hPU1QJCTB4MDAKLSNkZWZpbmUJUENJX1NVQkNMQVNTX0JSSURHRV9QQ0kJCQkweDA0Ci0KLS8vIEJITENSRUcKLSNkZWZpbmUJSVRfUENJX0JJU1QoeCkJCSgoKHgpPj4yNCkgJiAweEZGKQotI2RlZmluZQlJVF9QQ0lfSEVBREVSVFlQRSh4KQkoKCh4KT4+MTYpICYgMHhGRikKLSNkZWZpbmUJSVRfUENJX0xBVEVOQ1lUSU1FUih4KQkoKCh4KT4+OCkgJiAweEZGKQotI2RlZmluZQlJVF9QQ0lfQ0FDSEVMSU5FU0laRSh4KQkoKHgpICYgMHhGRikKLQotI2RlZmluZQlQQ0lfTVVMVElGVU5DCTB4ODAKLQotLy8gSU5UUlJFRwotI2RlZmluZQlJVF9QQ0lfTUFYTEFUKHgpCQkoKCh4KT4+MjQpICYgMHhGRikKLSNkZWZpbmUJSVRfUENJX01JTkdOVCh4KQkJKCgoeCk+PjE2KSAmIDB4RkYpCi0jZGVmaW5lCUlUX1BDSV9JTlRSUElOKHgpCQkoKCh4KT4+OCkgJiAweEZGKQotI2RlZmluZQlJVF9QQ0lfSU5UUkxJTkUoeCkJCSgoeCkgJiAweEZGKQotCi0jZGVmaW5lCVBDSV9WRU5ET1JfTkVDCTB4MTAzMwotI2RlZmluZSBQQ0lfVkVORE9SX0RFQwkweDExMDEKLQotI2VuZGlmIC8vIF84MTcyUENJX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2l0ODcxMi5oIGIvaW5jbHVkZS9hc20tbWlwcy9pdDg3MTIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EyZGVlMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2l0ODcxMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotCi0jaWZuZGVmIF9fSVQ4NzEyX0hfXwotI2RlZmluZSBfX0lUODcxMl9IX18KLQotI2RlZmluZSBMUENfQkFTRV9BRERSCTB4MTQwMDAwMDAKLQotLy8gTUIgUG5QIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKLSNkZWZpbmUgTFBDX0tFWV9BRERSCTB4MTQwMDAwMkUKLSNkZWZpbmUgTFBDX0RBVEFfQUREUgkweDE0MDAwMDJGCi0KLS8vIERldmljZSBMRE4KLSNkZWZpbmUgTEROX1NFUklBTDEJMHgwMQotI2RlZmluZSBMRE5fU0VSSUFMMgkweDAyCi0jZGVmaW5lIExETl9QQVJBTExFTAkweDAzCi0jZGVmaW5lIExETl9LRVlCT0FSRAkweDA1Ci0jZGVmaW5lIExETl9NT1VTRQkweDA2Ci0KLSNkZWZpbmUgSVQ4NzEyX1VBUlQxX1BPUlQgICAgICAweDNGOAotI2RlZmluZSBJVDg3MTJfVUFSVDJfUE9SVCAgICAgIDB4MkY4Ci0KLSNpZm5kZWYgQVNNX09OTFkKLQotdm9pZCBMUENTZXRDb25maWcoY2hhciBMZG5OdW1iZXIsIGNoYXIgSW5kZXgsIGNoYXIgZGF0YSk7Ci1jaGFyIExQQ0dldENvbmZpZyhjaGFyIExkbk51bWJlciwgY2hhciBJbmRleCk7Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oCmluZGV4IDRmYjBmYzQuLjVmM2E5MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaApAQCAtNDQsOSArNDQsOCBAQAogCXVuc2lnbmVkIGxvbmcgY3AwX2VwYzsKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCiAJdW5zaWduZWQgbG9uZyBjcDBfdGNzdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBzbXRjX3BhZDsKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCi19OworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKTsKIAogLyogQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBzYW1lIHB0cmFjZSBudW1iZXJzIGFzIHVzZWQgYnkgdGhlIFNwYXJjIGNvZGUuICovCiAjZGVmaW5lIFBUUkFDRV9HRVRSRUdTCQkxMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmgKaW5kZXggYzg4MmUwNC4uZDdhNjUxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCkBAIC02OSwzOCArNjksNiBAQAogI2RlZmluZSBFVjY0MTIwX1NFUklBTF9QT1JUX0RFRk5TCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19NSVBTX0lURTgxNzIKLSNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Mi5oPgotI2luY2x1ZGUgPGFzbS9pdDgxNzIvaXQ4MTcyX2ludC5oPgotI2luY2x1ZGUgPGFzbS9pdDg3MTIuaD4KLSNkZWZpbmUgSVRFX1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7IC5iYXVkX2Jhc2UgPSBCQVNFX0JBVUQsIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1VBUlRfQkFTRSksIFwKLSAgICAgIC5pcnEgPSBJVDgxNzJfVUFSVF9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC5wb3J0ID0gUE9SVF8xNjU1MCB9LCBcCi0gICAgeyAuYmF1ZF9iYXNlID0gKDI0MDAwMDAwLygxNioxMykpLCAucG9ydCA9IChJVDgxNzJfUENJX0lPX0JBU0UgKyBJVDg3MTJfVUFSVDFfUE9SVCksIFwKLSAgICAgIC5pcnEgPSBJVDgxNzJfU0VSSVJRXzQsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC5wb3J0ID0gUE9SVF8xNjU1MCB9LCBcCi0gICAgLyogU21hcnQgQ2FyZCBSZWFkZXIgMCAqLyBcCi0gICAgeyAuYmF1ZF9iYXNlID0gQkFTRV9CQVVELCAucG9ydCA9IChJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9TQ1IwX0JBU0UpLCBcCi0gICAgICAuaXJxID0gSVQ4MTcyX1NDUjBfSVJRLCAuZmxhZ3MgPSBTVERfQ09NX0ZMQUdTLCAucG9ydCA9IFBPUlRfMTY1NTAgfSwgXAotICAgIC8qIFNtYXJ0IENhcmQgUmVhZGVyIDEgKi8gXAotICAgIHsgLmJhdWRfYmFzZSA9IEJBU0VfQkFVRCwgLnBvcnQgPSAoSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfU0NSMV9CQVNFKSwgXAotICAgICAgLmlycSA9IElUODE3Ml9TQ1IxX0lSUSwgLmZsYWdzID0gU1REX0NPTV9GTEFHUywgLnBvcnQgPSBQT1JUXzE2NTUwIH0sCi0jZWxzZQotI2RlZmluZSBJVEVfU0VSSUFMX1BPUlRfREVGTlMKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfSVZSCi0jaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzIuaD4KLSNpbmNsdWRlIDxhc20vaXQ4MTcyL2l0ODE3Ml9pbnQuaD4KLSNkZWZpbmUgSVZSX1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7IC5iYXVkX2Jhc2UgPSBCQVNFX0JBVUQsIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1VBUlRfQkFTRSksIFwKLSAgICAgIC5pcnEgPSBJVDgxNzJfVUFSVF9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC5wb3J0ID0gUE9SVF8xNjU1MCB9LCAgICAgICAgIFwKLSAgICAvKiBTbWFydCBDYXJkIFJlYWRlciAxICovIFwKLSAgICB7IC5iYXVkX2Jhc2UgPSBCQVNFX0JBVUQsIC5wb3J0ID0gKElUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1NDUjFfQkFTRSksIFwKLSAgICAgIC5pcnEgPSBJVDgxNzJfU0NSMV9JUlEsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsIC5wb3J0ID0gUE9SVF8xNjU1MCB9LAotI2Vsc2UKLSNkZWZpbmUgSVZSX1NFUklBTF9QT1JUX0RFRk5TCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19IQVZFX1NURF9QQ19TRVJJQUxfUE9SVAogI2RlZmluZSBTVERfU0VSSUFMX1BPUlRfREVGTlMJCQlcCiAJLyogVUFSVCBDTEsgICBQT1JUIElSUSAgICAgRkxBR1MgICAgICAgICovCQkJXApAQCAtMjQwLDggKzIwOCw2IEBACiAJRERCNTQ3N19TRVJJQUxfUE9SVF9ERUZOUwkJCVwKIAlFVjY0MTIwX1NFUklBTF9QT1JUX0RFRk5TCQkJXAogCUlQMzJfU0VSSUFMX1BPUlRfREVGTlMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlJVEVfU0VSSUFMX1BPUlRfREVGTlMgICAgICAgICAgIAkJXAotCUlWUl9TRVJJQUxfUE9SVF9ERUZOUyAgICAgICAgICAgCQlcCiAJSkFaWl9TRVJJQUxfUE9SVF9ERUZOUwkJCQlcCiAJU1REX1NFUklBTF9QT1JUX0RFRk5TCQkJCVwKIAlNT01FTkNPX09DRUxPVF9HX1NFUklBTF9QT1JUX0RFRk5TCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2l0ZV9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L2l0ZV9ncGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMjNhMTQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9pdGVfZ3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIEZJTEUgTkFNRSBpdGVfZ3Bpby5oCi0gKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglHZW5lcmljIGdwaW8uCi0gKgotICogIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAgPHNvdXJjZUBtdmlzdGEuY29tPgotICogICAgICAgICAgSGFpLVBhbyBGYW4gPGhhaXBhb0BtdmlzdGEuY29tPgotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fSVRFX0dQSU9fSAotI2RlZmluZSBfX0lURV9HUElPX0gKLQotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KLXN0cnVjdCBpdGVfZ3Bpb19pb2N0bF9kYXRhIHsKLQlfX3UzMiBkZXZpY2U7Ci0JX191MzIgbWFzazsKLQlfX3UzMiBkYXRhOwotfTsKLQotI2RlZmluZSBJVEVfR1BJT19JT0NUTF9CQVNFCSdaJwotCi0jZGVmaW5lIElURV9HUElPX0lOCQlfSU9XUihJVEVfR1BJT19JT0NUTF9CQVNFLCAwLCBzdHJ1Y3QgaXRlX2dwaW9faW9jdGxfZGF0YSkKLSNkZWZpbmUgSVRFX0dQSU9fT1VUCQlfSU9XIChJVEVfR1BJT19JT0NUTF9CQVNFLCAxLCBzdHJ1Y3QgaXRlX2dwaW9faW9jdGxfZGF0YSkKLSNkZWZpbmUJSVRFX0dQSU9fSU5UX0NUUkwJX0lPVyAoSVRFX0dQSU9fSU9DVExfQkFTRSwgMiwgc3RydWN0IGl0ZV9ncGlvX2lvY3RsX2RhdGEpCi0jZGVmaW5lCUlURV9HUElPX0lOX1NUQVRVUwlfSU9XIChJVEVfR1BJT19JT0NUTF9CQVNFLCAzLCBzdHJ1Y3QgaXRlX2dwaW9faW9jdGxfZGF0YSkKLSNkZWZpbmUJSVRFX0dQSU9fT1VUX1NUQVRVUwlfSU9XIChJVEVfR1BJT19JT0NUTF9CQVNFLCA0LCBzdHJ1Y3QgaXRlX2dwaW9faW9jdGxfZGF0YSkKLSNkZWZpbmUgSVRFX0dQSU9fR0VOX0NUUkwJX0lPVyAoSVRFX0dQSU9fSU9DVExfQkFTRSwgNSwgc3RydWN0IGl0ZV9ncGlvX2lvY3RsX2RhdGEpCi0jZGVmaW5lIElURV9HUElPX0lOVF9XQUlUCV9JT1cgKElURV9HUElPX0lPQ1RMX0JBU0UsIDYsIHN0cnVjdCBpdGVfZ3Bpb19pb2N0bF9kYXRhKQotCi0jZGVmaW5lCUlURV9HUElPX1BPUlRBCTB4MDEKLSNkZWZpbmUJSVRFX0dQSU9fUE9SVEIJMHgwMgotI2RlZmluZQlJVEVfR1BJT19QT1JUQwkweDA0Ci0KLWV4dGVybiBpbnQgaXRlX2dwaW9faW4oX191MzIgZGV2aWNlLCBfX3UzMiBtYXNrLCB2b2xhdGlsZSBfX3UzMiAqZGF0YSk7Ci1leHRlcm4gaW50IGl0ZV9ncGlvX291dChfX3UzMiBkZXZpY2UsIF9fdTMyIG1hc2ssIF9fdTMyIGRhdGEpOwotZXh0ZXJuIGludCBpdGVfZ3Bpb19pbnRfY3RybChfX3UzMiBkZXZpY2UsIF9fdTMyIG1hc2ssIF9fdTMyIGRhdGEpOwotZXh0ZXJuIGludCBpdGVfZ3Bpb19pbl9zdGF0dXMoX191MzIgZGV2aWNlLCBfX3UzMiBtYXNrLCB2b2xhdGlsZSBfX3UzMiAqZGF0YSk7Ci1leHRlcm4gaW50IGl0ZV9ncGlvX291dF9zdGF0dXMoX191MzIgZGV2aWNlLCBfX3UzMiBtYXNrLCBfX3UzMiBkYXRhKTsKLWV4dGVybiBpbnQgaXRlX2dwaW9fZ2VuX2N0cmwoX191MzIgZGV2aWNlLCBfX3UzMiBtYXNrLCBfX3UzMiBkYXRhKTsKLWV4dGVybiBpbnQgaXRlX2dwaW9faW50X3dhaXQoX191MzIgZGV2aWNlLCBfX3UzMiBtYXNrLCBfX3UzMiBkYXRhKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGM5ZmZiYzMuLmYwNjlkZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0xNjE1LDggKzE2MTUsNiBAQAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JPQ0tXRUxMCQkweDEyN0EKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lURQkJMHgxMjgzCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSVRFX0lUODE3MkcJMHg4MTcyCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSVRFX0lUODE3MkdfQVVESU8gMHgwODAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSVRFXzgyMTEJCTB4ODIxMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV84MjEyCQkweDgyMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JVEVfODg3MgkJMHg4ODcyCkBAIC0xODgzLDYgKzE4ODEsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BBTkFDT01fUVVBRE1PREVNCTB4MDQwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BBTkFDT01fRFVBTE1PREVNCTB4MDQwMgogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0lQQUNLRVRTCQkweDE0ZDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TUDEwMTEJCTB4MDAxMAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUZBVkxBQgkJMHgxNGRiCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUZBVkxBQl9QMDI4CTB4MjE4MApAQCAtMTk5Nyw2ICsxOTk3LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1RFMUMgICAgICAweDE2MTIKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJQllURQkJMHgxNjZkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkNNMTI1MF9QQ0kJMHgwMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkNNMTI1MF9IVAkweDAwMDIKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FVENFTEwJCTB4MTY5YwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKaW5kZXggNDRjNTlkYS4uYzVmZGY2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC0yNzYsNiArMjc2LDgyIEBACiAKICNkZWZpbmUgVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEIDB4MDAwMQogCisjaWYgMQorCS8qIEV4cGVyaW1lbnRhbCBGcmFtZSBTaXplIGFuZCBmcmFtZSByYXRlIGVudW1lcmF0aW9uICovCisvKgorICoJRiBSIEEgTSBFICAgUyBJIFogRSAgIEUgTiBVIE0gRSBSIEEgVCBJIE8gTgorICovCitlbnVtIHY0bDJfZnJtc2l6ZXR5cGVzCit7CisJVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEUJPSAxLAorCVY0TDJfRlJNU0laRV9UWVBFX0NPTlRJTlVPVVMJPSAyLAorCVY0TDJfRlJNU0laRV9UWVBFX1NURVBXSVNFCT0gMywKK307CisKK3N0cnVjdCB2NGwyX2ZybXNpemVfZGlzY3JldGUKK3sKKwlfX3UzMgkJCXdpZHRoOwkJLyogRnJhbWUgd2lkdGggW3BpeGVsXSAqLworCV9fdTMyCQkJaGVpZ2h0OwkJLyogRnJhbWUgaGVpZ2h0IFtwaXhlbF0gKi8KK307CisKK3N0cnVjdCB2NGwyX2ZybXNpemVfc3RlcHdpc2UKK3sKKwlfX3UzMgkJCW1pbl93aWR0aDsJLyogTWluaW11bSBmcmFtZSB3aWR0aCBbcGl4ZWxdICovCisJX191MzIJCQltYXhfd2lkdGg7CS8qIE1heGltdW0gZnJhbWUgd2lkdGggW3BpeGVsXSAqLworCV9fdTMyCQkJc3RlcF93aWR0aDsJLyogRnJhbWUgd2lkdGggc3RlcCBzaXplIFtwaXhlbF0gKi8KKwlfX3UzMgkJCW1pbl9oZWlnaHQ7CS8qIE1pbmltdW0gZnJhbWUgaGVpZ2h0IFtwaXhlbF0gKi8KKwlfX3UzMgkJCW1heF9oZWlnaHQ7CS8qIE1heGltdW0gZnJhbWUgaGVpZ2h0IFtwaXhlbF0gKi8KKwlfX3UzMgkJCXN0ZXBfaGVpZ2h0OwkvKiBGcmFtZSBoZWlnaHQgc3RlcCBzaXplIFtwaXhlbF0gKi8KK307CisKK3N0cnVjdCB2NGwyX2ZybXNpemVlbnVtCit7CisJX191MzIJCQlpbmRleDsJCS8qIEZyYW1lIHNpemUgbnVtYmVyICovCisJX191MzIJCQlwaXhlbF9mb3JtYXQ7CS8qIFBpeGVsIGZvcm1hdCAqLworCV9fdTMyCQkJdHlwZTsJCS8qIEZyYW1lIHNpemUgdHlwZSB0aGUgZGV2aWNlIHN1cHBvcnRzLiAqLworCisJdW5pb24gewkJCQkJLyogRnJhbWUgc2l6ZSAqLworCQlzdHJ1Y3QgdjRsMl9mcm1zaXplX2Rpc2NyZXRlCWRpc2NyZXRlOworCQlzdHJ1Y3QgdjRsMl9mcm1zaXplX3N0ZXB3aXNlCXN0ZXB3aXNlOworCX07CisKKwlfX3UzMiAgIHJlc2VydmVkWzJdOwkJCS8qIFJlc2VydmVkIHNwYWNlIGZvciBmdXR1cmUgdXNlICovCit9OworCisvKgorICoJRiBSIEEgTSBFICAgUiBBIFQgRSAgIEUgTiBVIE0gRSBSIEEgVCBJIE8gTgorICovCitlbnVtIHY0bDJfZnJtaXZhbHR5cGVzCit7CisJVjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEUJPSAxLAorCVY0TDJfRlJNSVZBTF9UWVBFX0NPTlRJTlVPVVMJPSAyLAorCVY0TDJfRlJNSVZBTF9UWVBFX1NURVBXSVNFCT0gMywKK307CisKK3N0cnVjdCB2NGwyX2ZybWl2YWxfc3RlcHdpc2UKK3sKKwlzdHJ1Y3QgdjRsMl9mcmFjdAltaW47CQkvKiBNaW5pbXVtIGZyYW1lIGludGVydmFsIFtzXSAqLworCXN0cnVjdCB2NGwyX2ZyYWN0CW1heDsJCS8qIE1heGltdW0gZnJhbWUgaW50ZXJ2YWwgW3NdICovCisJc3RydWN0IHY0bDJfZnJhY3QJc3RlcDsJCS8qIEZyYW1lIGludGVydmFsIHN0ZXAgc2l6ZSBbc10gKi8KK307CisKK3N0cnVjdCB2NGwyX2ZybWl2YWxlbnVtCit7CisJX191MzIJCQlpbmRleDsJCS8qIEZyYW1lIGZvcm1hdCBpbmRleCAqLworCV9fdTMyCQkJcGl4ZWxfZm9ybWF0OwkvKiBQaXhlbCBmb3JtYXQgKi8KKwlfX3UzMgkJCXdpZHRoOwkJLyogRnJhbWUgd2lkdGggKi8KKwlfX3UzMgkJCWhlaWdodDsJCS8qIEZyYW1lIGhlaWdodCAqLworCV9fdTMyCQkJdHlwZTsJCS8qIEZyYW1lIGludGVydmFsIHR5cGUgdGhlIGRldmljZSBzdXBwb3J0cy4gKi8KKworCXVuaW9uIHsJCQkJCS8qIEZyYW1lIGludGVydmFsICovCisJCXN0cnVjdCB2NGwyX2ZyYWN0CQlkaXNjcmV0ZTsKKwkJc3RydWN0IHY0bDJfZnJtaXZhbF9zdGVwd2lzZQlzdGVwd2lzZTsKKwl9OworCisJX191MzIJcmVzZXJ2ZWRbMl07CQkJLyogUmVzZXJ2ZWQgc3BhY2UgZm9yIGZ1dHVyZSB1c2UgKi8KK307CisjZW5kaWYKKwogLyoKICAqCVQgSSBNIEUgQyBPIEQgRQogICovCkBAIC0xMjQ5LDYgKzEzMjUsMTAgQEAKICNkZWZpbmUgVklESU9DX0dfRVhUX0NUUkxTCV9JT1dSICgnVicsIDcxLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMpCiAjZGVmaW5lIFZJRElPQ19TX0VYVF9DVFJMUwlfSU9XUiAoJ1YnLCA3Miwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQogI2RlZmluZSBWSURJT0NfVFJZX0VYVF9DVFJMUwlfSU9XUiAoJ1YnLCA3Mywgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQorI2lmIDEKKyNkZWZpbmUgVklESU9DX0VOVU1fRlJBTUVTSVpFUwlfSU9XUiAoJ1YnLCA3NCwgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0pCisjZGVmaW5lIFZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTCV9JT1dSICgnVicsIDc1LCBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSkKKyNlbmRpZgogCiAjaWZkZWYgX19PTERfVklESU9DXwogLyogZm9yIGNvbXBhdGliaWxpdHksIHdpbGwgZ28gYXdheSBzb21lIGRheSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9hdWRpb2NoaXAuaCBiL2luY2x1ZGUvbWVkaWEvYXVkaW9jaGlwLmgKaW5kZXggMWZkNGEyMi4uZGI4ODIzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9hdWRpb2NoaXAuaAorKysgYi9pbmNsdWRlL21lZGlhL2F1ZGlvY2hpcC5oCkBAIC0xOCw3ICsxOCw5IEBACiAJQVVESU9fQ0hJUF9UREE5ODc0LAogCUFVRElPX0NISVBfUElDMTZDNTQsCiAJLyogUHJvdmlkZWQgYnkgbXNwMzQwMC5jICovCi0JQVVESU9fQ0hJUF9NU1AzNFhYCisJQVVESU9fQ0hJUF9NU1AzNFhYLAorCS8qIFByb3ZpZGVkIGJ5IHdtODc3NS5jICovCisJQVVESU9fQ0hJUF9XTTg3NzUKIH07CiAKICNlbmRpZiAvKiBBVURJT0NISVBfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL0tjb25maWcgYi9zb3VuZC9vc3MvS2NvbmZpZwppbmRleCA5N2UzOGI2Li5mM2IzNTMwIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvS2NvbmZpZworKysgYi9zb3VuZC9vc3MvS2NvbmZpZwpAQCAtMTE1LDEwICsxMTUsNiBAQAogCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhbiBTR0kgSW5keSBvciBJbmRpZ28yIHN5c3RlbSBhbmQgd2FudCB0byBiZSBhYmxlIHRvCiAJICB1c2UgaXRzIG9uLWJvYXJkIEEyIGF1ZGlvIHN5c3RlbS4KIAotY29uZmlnIFNPVU5EX0lUODE3MgotCXRyaXN0YXRlICJJVDgxNzJHIFNvdW5kIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgKE1JUFNfSVRFODE3MiB8fCBNSVBTX0lWUikKLQogY29uZmlnIFNPVU5EX1ZSQzU0NzcKIAl0cmlzdGF0ZSAiTkVDIFZyYzU0NzcgQUM5NyBzb3VuZCIKIAlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIEREQjU0NzcKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9NYWtlZmlsZSBiL3NvdW5kL29zcy9NYWtlZmlsZQppbmRleCA5YmYzZWU1Li44NjgxMTc5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvTWFrZWZpbGUKKysrIGIvc291bmQvb3NzL01ha2VmaWxlCkBAIC03Nyw3ICs3Nyw2IEBACiBvYmotJChDT05GSUdfU09VTkRfUk1FOTZYWCkgICAgICs9IHJtZTk2eHgubwogb2JqLSQoQ09ORklHX1NPVU5EX0JUODc4KQkrPSBidGF1ZGlvLm8KIG9iai0kKENPTkZJR19TT1VORF9BTEk1NDU1KQkrPSBhbGk1NDU1Lm8gYWM5N19jb2RlYy5vCi1vYmotJChDT05GSUdfU09VTkRfSVQ4MTcyKQkrPSBpdGU4MTcyLm8gYWM5N19jb2RlYy5vCiBvYmotJChDT05GSUdfU09VTkRfRk9SVEUpCSs9IGZvcnRlLm8gYWM5N19jb2RlYy5vCiAKIG9iai0kKENPTkZJR19TT1VORF9BRDE5ODApCSs9IGFjOTdfcGx1Z2luX2FkMTk4MC5vIGFjOTdfY29kZWMubwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2l0ZTgxNzIuYyBiL3NvdW5kL29zcy9pdGU4MTcyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YWFiMzYuLjAwMDAwMDAKLS0tIGEvc291bmQvb3NzL2l0ZTgxNzIuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNjEgKzAsMCBAQAotLyoKLSAqICAgICAgaXRlODE3Mi5jICAtLSAgSVRFIElUODE3MkcgU291bmQgRHJpdmVyLgotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIAlzdGV2ZWxAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKgotICogTW9kdWxlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzOgotICoKLSAqICBTdXBwb3J0ZWQgZGV2aWNlczoKLSAqICAvZGV2L2RzcCAgICBzdGFuZGFyZCBPU1MgL2Rldi9kc3AgZGV2aWNlCi0gKiAgL2Rldi9taXhlciAgc3RhbmRhcmQgT1NTIC9kZXYvbWl4ZXIgZGV2aWNlCi0gKgotICogTm90ZXM6Ci0gKgotICogIDEuIE11Y2ggb2YgdGhlIE9TUyBidWZmZXIgYWxsb2NhdGlvbiwgaW9jdGwncywgYW5kIG1tYXAnaW5nIGFyZQotICogICAgIHRha2VuLCBzbGlnaHRseSBtb2RpZmllZCBvciBub3QgYXQgYWxsLCBmcm9tIHRoZSBFUzEzNzEgZHJpdmVyLAotICogICAgIHNvIHJlZmVyIHRvIHRoZSBjcmVkaXRzIGluIGVzMTM3MS5jIGZvciB0aG9zZS4gVGhlIHJlc3Qgb2YgdGhlCi0gKiAgICAgY29kZSAocHJvYmUsIG9wZW4sIHJlYWQsIHdyaXRlLCB0aGUgSVNSLCBldGMuKSBpcyBuZXcuCi0gKiAgMi4gVGhlIGZvbGxvd2luZyBzdXBwb3J0IGlzIHVudGVzdGVkOgotICogICAgICAqIE1lbW9yeSBtYXBwaW5nIHRoZSBhdWRpbyBidWZmZXJzLCBhbmQgdGhlIGlvY3RsIGNvbnRyb2xzIHRoYXQgZ28KLSAqICAgICAgICB3aXRoIGl0LgotICogICAgICAqIFMvUERJRiBvdXRwdXQuCi0gKiAgICAgICogSTJTIHN1cHBvcnQuCi0gKiAgMy4gVGhlIGZvbGxvd2luZyBpcyBub3Qgc3VwcG9ydGVkOgotICogICAgICAqIGxlZ2FjeSBhdWRpbyBtb2RlLgotICogIDQuIFN1cHBvcnQgZm9yIHZvbHVtZSBidXR0b24gaW50ZXJydXB0cyBpcyBpbXBsZW1lbnRlZCBidXQgZG9lc24ndAotICogICAgIHdvcmsgeWV0LgotICoKLSAqICBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgICAwMi4wOC4yMDAxICBJbml0aWFsIHJlbGVhc2UKLSAqICAgIDA2LjIyLjIwMDEgIEFkZGVkIEkyUyBzdXBwb3J0Ci0gKiAgICAwNy4zMC4yMDAzICBSZW1vdmVkIGluaXRpYWxpc2F0aW9uIHRvIHplcm8gZm9yIHN0YXRpYyB2YXJpYWJsZXMKLSAqCQkgICAoc3BkaWZbTlJfREVWSUNFXSwgaTJzX2ZtdFtOUl9ERVZJQ0VdLCBhbmQgZGV2aW5kZXgpCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc291bmQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc291bmRjYXJkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2FjOTdfY29kZWMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzIuaD4KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSN1bmRlZiBPU1NfRE9DVU1FTlRFRF9NSVhFUl9TRU1BTlRJQ1MKLSNkZWZpbmUgSVQ4MTcyX0RFQlVHCi0jdW5kZWYgSVQ4MTcyX1ZFUkJPU0VfREVCVUcKLSNkZWZpbmUgREJHKHgpIHt9Ci0KLSNkZWZpbmUgSVQ4MTcyX01PRFVMRV9OQU1FICJJVDgxNzIgYXVkaW8iCi0jZGVmaW5lIFBGWCBJVDgxNzJfTU9EVUxFX05BTUUKLQotI2lmZGVmIElUODE3Ml9ERUJVRwotI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHIFBGWCAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2Vsc2UKLSNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiBQRlggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyBQRlggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLQotCi0jZGVmaW5lIElUODE3Ml9NT0RVTEVfTkFNRSAiSVQ4MTcyIGF1ZGlvIgotI2RlZmluZSBQRlggSVQ4MTcyX01PRFVMRV9OQU1FCi0KLSNpZmRlZiBJVDgxNzJfREVCVUcKLSNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyBQRlggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNlbHNlCi0jZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKLSNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgUEZYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0jZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gUEZYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0jZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgUEZYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNhbXBsZV9zaGlmdFtdID0geyAwLCAxLCAxLCAyIH07Ci0KLQotLyoKLSAqIEF1ZGlvIENvbnRyb2xsZXIgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zIGZvbGxvdy4gU2VlCi0gKiBpbmNsdWRlL2FzbS9pdDgxNzIvaXQ4MTcyLmggZm9yIHJlZ2lzdGVyIG9mZnNldHMuCi0gKi8KLQotLyogUENNIE91dCBWb2x1bWUgUmVnICovCi0jZGVmaW5lIFBDTU9WX1BDTU9NCSgxPDwxNSkJLyogUENNIE91dCBNdXRlIGRlZmF1bHQgMTogbXV0ZSAqLwotI2RlZmluZQlQQ01PVl9QQ01SQ0dfQklUIDgJLyogUENNIFJpZ2h0IGNoYW5uZWwgR2FpbiAqLwotI2RlZmluZQlQQ01PVl9QQ01SQ0dfTUFTSyAoMHgxZjw8UENNT1ZfUENNUkNHX0JJVCkKLSNkZWZpbmUgUENNT1ZfUENNTENHX0JJVCAwCS8qIFBDTSBMZWZ0IGNoYW5uZWwgZ2FpbiAgKi8KLSNkZWZpbmUgUENNT1ZfUENNTENHX01BU0sgMHgxZgotCi0vKiBGTSBPdXQgVm9sdW1lIFJlZyAqLwotI2RlZmluZSBGTU9WX0ZNT00gICAgICAgKDE8PDE1KQkvKiBGTSBPdXQgTXV0ZSBkZWZhdWx0IDE6IG11dGUgKi8KLSNkZWZpbmUJRk1PVl9GTVJDR19CSVQJOAkvKiBGTSBSaWdodCBjaGFubmVsIEdhaW4gKi8KLSNkZWZpbmUJRk1PVl9GTVJDR19NQVNLICgweDFmPDxGTU9WX0ZNUkNHX0JJVCkKLSNkZWZpbmUgRk1PVl9GTUxDR19CSVQJMAkvKiBGTSBMZWZ0IGNoYW5uZWwgZ2FpbiAgKi8KLSNkZWZpbmUgRk1PVl9GTUxDR19NQVNLIDB4MWYKLQotLyogSTJTIE91dCBWb2x1bWUgUmVnICovCi0jZGVmaW5lIEkyU1ZfSTJTT00JICgxPDwxNSkgLyogSTJTIE91dCBNdXRlIGRlZmF1bHQgMTogbXV0ZSAqLwotI2RlZmluZQlJMlNWX0kyU1JDR19CSVQJIDgJIC8qIEkyUyBSaWdodCBjaGFubmVsIEdhaW4gKi8KLSNkZWZpbmUJSTJTVl9JMlNSQ0dfTUFTSyAoMHgxZjw8STJTVl9JMlNSQ0dfQklUKQotI2RlZmluZSBJMlNWX0kyU0xDR19CSVQJIDAJIC8qIEkyUyBMZWZ0IGNoYW5uZWwgZ2FpbiAgKi8KLSNkZWZpbmUgSTJTVl9JMlNMQ0dfTUFTSyAweDFmCi0KLS8qIERpZ2l0YWwgUmVjb3JkaW5nIFNvdXJjZSBTZWxlY3QgUmVnICovCi0jZGVmaW5lCURSU1NfQklUICAgMAotI2RlZmluZQlEUlNTX01BU0sgIDB4MDcKLSNkZWZpbmUgICBEUlNTX0FDOTdfUFJJTSAwCi0jZGVmaW5lICAgRFJTU19GTSAgICAgICAgMQotI2RlZmluZSAgIERSU1NfSTJTICAgICAgIDIKLSNkZWZpbmUgICBEUlNTX1BDTSAgICAgICAzCi0jZGVmaW5lICAgRFJTU19BQzk3X1NFQyAgNAotCi0vKiBQbGF5YmFjay9DYXB0dXJlIENoYW5uZWwgQ29udHJvbCBSZWdpc3RlcnMgKi8KLSNkZWZpbmUJQ0NfU00JICAgICAgICAoMTw8MTUpCS8qIFN0ZXJlbywgTW9uZSAwOiBtb25vIDE6IHN0ZXJlbyAqLwotI2RlZmluZQlDQ19ERgkgICAgICAgICgxPDwxNCkJLyogRGF0YSBGb3JtYXQgMDogOCBiaXQgMTogMTYgYml0ICovCi0jZGVmaW5lIENDX0ZNVF9CSVQgICAgICAxNAotI2RlZmluZSBDQ19GTVRfTUFTSyAgICAgKDB4MDM8PENDX0ZNVF9CSVQpCi0jZGVmaW5lIENDX0NGX0JJVCAgICAgICAxMiAgICAgIC8qIENoYW5uZWwgZm9ybWF0IChQbGF5YmFjayBvbmx5KSAqLwotI2RlZmluZSBDQ19DRl9NQVNLICAgICAgKDB4MDM8PENDX0NGX0JJVCkKLSNkZWZpbmUJICBDQ19DRl8yCTAKLSNkZWZpbmUgICBDQ19DRl80CSgxPDxDQ19DRl9CSVQpCi0jZGVmaW5lICAgQ0NfQ0ZfNgkoMjw8Q0NfQ0ZfQklUKQotI2RlZmluZSBDQ19TUl9CSVQgICAgICAgOCAgICAgICAvKiBzYW1wbGUgUmF0ZSAqLwotI2RlZmluZSBDQ19TUl9NQVNLICAgICAgKDB4MGY8PENDX1NSX0JJVCkKLSNkZWZpbmUJICBDQ19TUl81NTAwCTAKLSNkZWZpbmUJICBDQ19TUl84MDAwCSgxPDxDQ19TUl9CSVQpCi0jZGVmaW5lCSAgQ0NfU1JfOTYwMAkoMjw8Q0NfU1JfQklUKQotI2RlZmluZQkgIENDX1NSXzExMDI1CSgzPDxDQ19TUl9CSVQpCi0jZGVmaW5lCSAgQ0NfU1JfMTYwMDAJKDQ8PENDX1NSX0JJVCkKLSNkZWZpbmUJICBDQ19TUl8xOTIwMAkoNTw8Q0NfU1JfQklUKQotI2RlZmluZQkgIENDX1NSXzIyMDUwCSg2PDxDQ19TUl9CSVQpCi0jZGVmaW5lCSAgQ0NfU1JfMzIwMDAJKDc8PENDX1NSX0JJVCkKLSNkZWZpbmUJICBDQ19TUl8zODQwMAkoODw8Q0NfU1JfQklUKQotI2RlZmluZQkgIENDX1NSXzQ0MTAwCSg5PDxDQ19TUl9CSVQpCi0jZGVmaW5lCSAgQ0NfU1JfNDgwMDAJKDEwPDxDQ19TUl9CSVQpCi0jZGVmaW5lCUNDX0NTUAkgICAgICAgICgxPDw3KQkvKiBDaGFubmVsIHN0b3AgCi0JCQkJICogMDogRW5kIG9mIEN1cnJlbnQgYnVmZmVyCi0JCQkJICogMTogSW1tZWRpYXRlbHkgc3RvcCB3aGVuIHJlYyBzdG9wICovCi0jZGVmaW5lIENDX0NQCSAgICAgICAgKDE8PDYpCS8qIENoYW5uZWwgcGF1c2UgMDogbm9ybWFsLCAxOiBwYXVzZSAqLwotI2RlZmluZQlDQ19DQQkgICAgICAgICgxPDw1KQkvKiBDaGFubmVsIEFjdGlvbiAwOiBTdG9wICwgMTogc3RhcnQgKi8KLSNkZWZpbmUJQ0NfQ0IyTCAgICAgICAgICgxPDwyKQkvKiBDdXIuIGJ1Zi4gMiB4ZnIgaXMgbGFzdCAwOiBObywgMTogWWVzICovCi0jZGVmaW5lIENDX0NCMUwgICAgICAgICAoMTw8MSkJLyogQ3VyLiBidWYuIDEgeGZyIGlzIGxhc3QgMDogTm8sIDE6IFllcyAqLwotI2RlZmluZSBDQ19ERQkgICAgICAgIDEJLyogREZDL0RGSUZPIERhdGEgRW1wdHkgMTogZW1wdHksIDA6IG5vdCBlbXB0eQotCQkJCSAqIChQbGF5YmFjayBvbmx5KQotCQkJCSAqLwotCi0vKiBDb2RlYyBDb250cm9sIFJlZyAqLwotI2RlZmluZSBDT0RFQ0NfR01FCSgxPDw5KQkvKiBBQzk3IEdQSU8gTW9kZSBlbmFibGUgKi8KLSNkZWZpbmUJQ09ERUNDX0FUTQkoMTw8OCkJLyogQUM5NyBBVEUgdGVzdCBtb2RlIDA6IHRlc3QgMTogbm9ybWFsICovCi0jZGVmaW5lCUNPREVDQ19XUgkoMTw8NikJLyogQUM5NyBXYXJuIHJlc2V0IDE6IHdhcm0gcmVzZXQgLCAwOiBOb3JtYWwgKi8KLSNkZWZpbmUJQ09ERUNDX0NSCSgxPDw1KQkvKiBBQzk3IENvbGQgcmVzZXQgMTogQ29sZCByZXNldCAsIDA6IE5vcm1hbCAqLwotCi0KLS8qIEkyUyBDb250cm9sIFJlZwkqLwotI2RlZmluZQlJMlNNQ19TUl9CSVQJIDYJLyogSTJTIFNhbXBsaW5nIHJhdGUgCi0JCQkJICogMDA6IDQ4S0h6LCAwMTogNDQuMSBLSHosIDEwOiAzMiAzMiBLSHogKi8KLSNkZWZpbmUJSTJTTUNfU1JfTUFTSyAgICAoMHgwMzw8STJTTUNfU1JfQklUKQotI2RlZmluZQkgIEkyU01DX1NSXzQ4MDAwIDAKLSNkZWZpbmUJICBJMlNNQ19TUl80NDEwMCAoMTw8STJTTUNfU1JfQklUKQotI2RlZmluZQkgIEkyU01DX1NSXzMyMDAwICgyPDxJMlNNQ19TUl9CSVQpCi0jZGVmaW5lCUkyU01DX1NSU1MJICgxPDw1KQkvKiBTYW1wbGUgUmF0ZSBTb3VyY2UgU2VsZWN0IDE6Uy9XLCAwOiBIL1cgKi8KLSNkZWZpbmUgSTJTTUNfSTJTRl9CSVQJIDAJLyogSTJTIEZvcm1hdCAqLwotI2RlZmluZSBJMlNNQ19JMlNGX01BU0sgIDB4MDMKLSNkZWZpbmUgICBJMlNNQ19JMlNGX0RBQyAwCi0jZGVmaW5lICAgSTJTTUNfSTJTRl9BREMgMgotI2RlZmluZSAgIEkyU01DX0kyU0ZfSTJTIDMKLQotCi0vKiBWb2x1bWUgdXAsIERvd24sIE11dGUgKi8KLSNkZWZpbmUJVlNfVk1QCSgxPDwyKQkvKiBWb2x1bWUgbXV0ZSAxOiBwdXNoZWQsIDA6IG5vdCAqLwotI2RlZmluZQlWU19WRFAJKDE8PDEpCS8qIFZvbHVtZSBEb3duIDE6IHB1c2hlZCwgMDogbm90ICovCi0jZGVmaW5lIFZTX1ZVUAkxCS8qIFZvbGltZSBVcCAxOiBwdXNoZWQsIDA6IG5vdCAqLwotCi0vKiBTUkMsIE1peGVyIHRlc3QgY29udHJvbC9ERkMgc3RhdHVzIHJlZyAqLwotI2RlZmluZSBTUkNTX0RQVVNDICAgICAgKDE8PDUpCS8qIERGQyBQbGF5YmFjayB1bmRlcnJ1biBTdGF0dXMvY2xlYXIgKi8KLSNkZWZpbmUJU1JDU19EQ09TQwkoMTw8NCkJLyogREZDIENhcHR1cmUgT3ZlcnJ1biBTdGF0dXMvY2xlYXIgKi8KLSNkZWZpbmUgU1JDU19TSVMJKDE8PDMpCS8qIFNSQyBpbnB1dCBzZWxlY3QgMTogTWl4ZXIsIDA6IENvZGVjIEkvRiAqLwotI2RlZmluZSBTUkNTX0NESVNfQklUCTAJLyogQ29kZWMgRGF0YSBJbnB1dCBTZWxlY3QgKi8KLSNkZWZpbmUgU1JDU19DRElTX01BU0sgIDB4MDcKLSNkZWZpbmUgICBTUkNTX0NESVNfTUlYRVIgMAotI2RlZmluZSAgIFNSQ1NfQ0RJU19QQ00gICAxCi0jZGVmaW5lICAgU1JDU19DRElTX0kyUyAgIDIKLSNkZWZpbmUgICBTUkNTX0NESVNfRk0gICAgMwotI2RlZmluZSAgIFNSQ1NfQ0RJU19ERkMgICA0Ci0KLQotLyogQ29kZWMgSW5kZXggUmVnIGNvbW1hbmQgUG9ydCAqLwotI2RlZmluZSBDSVJDUF9DSURfQklUICAgMTAKLSNkZWZpbmUgQ0lSQ1BfQ0lEX01BU0sgICgweDAzPDxDSVJDUF9DSURfQklUKQotI2RlZmluZSBDSVJDUF9DUFMJKDE8PDkpCS8qIENvbW1hbmQgUG9ydCBTdGF0dXMgMDogcmVhZHksIDE6IGJ1c3kgKi8KLSNkZWZpbmUJQ0lSQ1BfRFBWRgkoMTw8OCkJLyogRGF0YSBQb3J0IFZhbGlkIEZsYWcgMDogaW52YWxpcywgMTogdmFsaWQgKi8KLSNkZWZpbmUgQ0lSQ1BfUldDCSgxPDw3KQkvKiBSZWFkL3dyaXRlIGNvbW1hbmQgKi8KLSNkZWZpbmUgQ0lSQ1BfQ0lBX0JJVCAgIDAKLSNkZWZpbmUgQ0lSQ1BfQ0lBX01BU0sgIDB4MDA3RgkvKiBDb2RlYyBJbmRleCBBZGRyZXNzICovCi0KLS8qIFRlc3QgTW9kZSBDb250cm9sL1Rlc3QgZ3JvdXAgU2VsZWN0IENvbnRyb2wgKi8KLQotLyogR2VuZXJhbCBDb250cm9sIFJlZyAqLwotI2RlZmluZSBHQ19WRENfQklUCTYJLyogVm9sdW1lIERpdmlzaW9uIENvbnRyb2wgKi8KLSNkZWZpbmUgR0NfVkRDX01BU0sgICAgICgweDAzPDxHQ19WRENfQklUKQotI2RlZmluZSAgIEdDX1ZEQ19OT05FICAgMAotI2RlZmluZSAgIEdDX1ZEQ19ESVYyICAgKDE8PEdDX1ZEQ19CSVQpCi0jZGVmaW5lICAgR0NfVkRDX0RJVjQgICAoMjw8R0NfVkRDX0JJVCkKLSNkZWZpbmUJR0NfU09FCSAgICAgICAgKDE8PDIpCS8qIFMvUERJRiBPdXRwdXQgZW5hYmxlICovCi0jZGVmaW5lCUdDX1NXUgkgICAgICAgIDEJLyogU29mdHdhcmUgd2FybiByZXNldCAqLwotCi0vKiBJbnRlcnJ1cHQgbWFzayBDb250cm9sIFJlZyAqLwotI2RlZmluZQlJTUNfVkNJTQkoMTw8NikJLyogVm9sdW1lIENOVEwgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUJSU1DX0NDSU0JKDE8PDEpCS8qIENhcHR1cmUgQ2hhbi4gaXRlcnJ1cHQgbWFzayAqLwotI2RlZmluZQlJTUNfUENJTQkxCS8qIFBsYXliYWNrIENoYW4uIGludGVycnVwdCBtYXNrICovCi0KLS8qIEludGVycnVwdCBzdGF0dXMvY2xlYXIgcmVnICovCi0jZGVmaW5lCUlTQ19WQ0kJICAgICAgICAoMTw8NikJLyogVm9sdW1lIENOVEwgaW50ZXJydXB0IDE6IGNsZWFycyAqLwotI2RlZmluZQlJU0NfQ0NJCSAgICAgICAgKDE8PDEpCS8qIENhcHR1cmUgQ2hhbi4gaW50ZXJydXB0IDE6IGNsZWFycyAgKi8KLSNkZWZpbmUJSVNDX1BDSQkgICAgICAgIDEJLyogUGxheWJhY2sgQ2hhbi4gaW50ZXJydXB0IDE6IGNsZWFycyAqLwotCi0vKiBtaXNjIHN0dWZmICovCi0jZGVmaW5lIFBPTExfQ09VTlQgICAweDUwMDAKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIERlZmluZSBESUdJVEFMMSBhcyB0aGUgSTJTIGNoYW5uZWwsIHNpbmNlIGl0IGlzIG5vdCBsaXN0ZWQgaW4KLSAqIHNvdW5kY2FyZC5oLgotICovCi0jZGVmaW5lIFNPVU5EX01JWEVSX0kyUyAgICAgICAgU09VTkRfTUlYRVJfRElHSVRBTDEKLSNkZWZpbmUgU09VTkRfTUFTS19JMlMgICAgICAgICBTT1VORF9NQVNLX0RJR0lUQUwxCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfSTJTICAgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9JMlMpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0kyUyAgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfSTJTKQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RydWN0IGl0ODE3Ml9zdGF0ZSB7Ci0JLyogbGlzdCBvZiBpdDgxNzIgZGV2aWNlcyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgZGV2czsKLQotCS8qIHRoZSBjb3JyZXNwb25kaW5nIHBjaV9kZXYgc3RydWN0dXJlICovCi0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQotCS8qIHNvdW5kY29yZSBzdHVmZiAqLwotCWludCBkZXZfYXVkaW87Ci0KLQkvKiBoYXJkd2FyZSByZXNvdXJjZXMgKi8KLQl1bnNpZ25lZCBsb25nIGlvOwotCXVuc2lnbmVkIGludCBpcnE7Ci0KLQkvKiBQQ0kgSUQncyAqLwotCXUxNiB2ZW5kb3I7Ci0JdTE2IGRldmljZTsKLQl1OCByZXY7IC8qIHRoZSBjaGlwIHJldmlzaW9uICovCi0KLQkvKiBvcHRpb25zICovCi0JaW50IHNwZGlmX3ZvbHVtZTsgLyogUy9QRElGIG91dHB1dCBpcyBlbmFibGVkIGlmICE9IC0xICovCi0JaW50IGkyc192b2x1bWU7ICAgLyogY3VycmVudCBJMlMgb3V0IHZvbHVtZSwgaW4gT1NTIGZvcm1hdCAqLwotCWludCBpMnNfcmVjb3JkaW5nOy8qIDEgPSByZWNvcmRpbmcgZnJvbSBJMlMsIDAgPSBub3QgKi8KLSAgICAKLSNpZmRlZiBJVDgxNzJfREVCVUcKLQkvKiBkZWJ1ZyAvcHJvYyBlbnRyeSAqLwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHM7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICphYzk3X3BzOwotI2VuZGlmIC8qIElUODE3Ml9ERUJVRyAqLwotCi0Jc3RydWN0IGFjOTdfY29kZWMgY29kZWM7Ci0KLQl1bnNpZ25lZCBzaG9ydCBwY2MsIGNhcGNjOwotCXVuc2lnbmVkIGRhY3JhdGUsIGFkY3JhdGU7Ci0KLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7Ci0JbW9kZV90IG9wZW5fbW9kZTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7Ci0KLQlzdHJ1Y3QgZG1hYnVmIHsKLQkJdm9pZCAqcmF3YnVmOwotCQlkbWFfYWRkcl90IGRtYWFkZHI7Ci0JCXVuc2lnbmVkIGJ1Zm9yZGVyOwotCQl1bnNpZ25lZCBudW1mcmFnOwotCQl1bnNpZ25lZCBmcmFnc2hpZnQ7Ci0JCXZvaWQqIG5leHRJbjsKLQkJdm9pZCogbmV4dE91dDsKLQkJaW50IGNvdW50OwotCQlpbnQgY3VyQnVmUHRyOwotCQl1bnNpZ25lZCB0b3RhbF9ieXRlczsKLQkJdW5zaWduZWQgZXJyb3I7IC8qIG92ZXIvdW5kZXJydW4gKi8KLQkJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKLQkJLyogcmVkdW5kYW50LCBidXQgbWFrZXMgY2FsY3VsYXRpb25zIGVhc2llciAqLwotCQl1bnNpZ25lZCBmcmFnc2l6ZTsKLQkJdW5zaWduZWQgZG1hc2l6ZTsKLQkJdW5zaWduZWQgZnJhZ3NhbXBsZXM7Ci0JCS8qIE9TUyBzdHVmZiAqLwotCQl1bnNpZ25lZCBtYXBwZWQ6MTsKLQkJdW5zaWduZWQgcmVhZHk6MTsKLQkJdW5zaWduZWQgc3RvcHBlZDoxOwotCQl1bnNpZ25lZCBvc3NmcmFnc2hpZnQ7Ci0JCWludCBvc3NtYXhmcmFnczsKLQkJdW5zaWduZWQgc3ViZGl2aXNpb247Ci0JfSBkbWFfZGFjLCBkbWFfYWRjOwotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBMSVNUX0hFQUQoZGV2cyk7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxkMih1bnNpZ25lZCBpbnQgeCkKLXsKLQl1bnNpZ25lZCByID0gMDsKLQkKLQlpZiAoeCA+PSAweDEwMDAwKSB7Ci0JCXggPj49IDE2OwotCQlyICs9IDE2OwotCX0KLQlpZiAoeCA+PSAweDEwMCkgewotCQl4ID4+PSA4OwotCQlyICs9IDg7Ci0JfQotCWlmICh4ID49IDB4MTApIHsKLQkJeCA+Pj0gNDsKLQkJciArPSA0OwotCX0KLQlpZiAoeCA+PSA0KSB7Ci0JCXggPj49IDI7Ci0JCXIgKz0gMjsKLQl9Ci0JaWYgKHggPj0gMikKLQkJcisrOwotCXJldHVybiByOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHZvaWQgaXQ4MTcyX2RlbGF5KGludCBtc2VjKQotewotCXVuc2lnbmVkIGxvbmcgdG1vOwotCXNpZ25lZCBsb25nIHRtbzI7Ci0KLQlpZiAoaW5faW50ZXJydXB0KCkpCi0JCXJldHVybjsKLSAgICAKLQl0bW8gPSBqaWZmaWVzICsgKG1zZWMqSFopLzEwMDA7Ci0JZm9yICg7OykgewotCQl0bW8yID0gdG1vIC0gamlmZmllczsKLQkJaWYgKHRtbzIgPD0gMCkKLQkJCWJyZWFrOwotCQlzY2hlZHVsZV90aW1lb3V0KHRtbzIpOwotCX0KLX0KLQotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQKLWdldF9jb21wYXRfcmF0ZSh1bnNpZ25lZCogcmF0ZSkKLXsKLQl1bnNpZ25lZCByYXRlX291dCA9ICpyYXRlOwotCXVuc2lnbmVkIHNob3J0IHNyOwotICAgIAotCWlmIChyYXRlX291dCA+PSA0NjA1MCkgewotCQlzciA9IENDX1NSXzQ4MDAwOyByYXRlX291dCA9IDQ4MDAwOwotCX0gZWxzZSBpZiAocmF0ZV9vdXQgPj0gNDEyNTApIHsKLQkJc3IgPSBDQ19TUl80NDEwMDsgcmF0ZV9vdXQgPSA0NDEwMDsKLQl9IGVsc2UgaWYgKHJhdGVfb3V0ID49IDM1MjAwKSB7Ci0JCXNyID0gQ0NfU1JfMzg0MDA7IHJhdGVfb3V0ID0gMzg0MDA7Ci0JfSBlbHNlIGlmIChyYXRlX291dCA+PSAyNzAyNSkgewotCQlzciA9IENDX1NSXzMyMDAwOyByYXRlX291dCA9IDMyMDAwOwotCX0gZWxzZSBpZiAocmF0ZV9vdXQgPj0gMjA2MjUpIHsKLQkJc3IgPSBDQ19TUl8yMjA1MDsgcmF0ZV9vdXQgPSAyMjA1MDsKLQl9IGVsc2UgaWYgKHJhdGVfb3V0ID49IDE3NjAwKSB7Ci0JCXNyID0gQ0NfU1JfMTkyMDA7IHJhdGVfb3V0ID0gMTkyMDA7Ci0JfSBlbHNlIGlmIChyYXRlX291dCA+PSAxMzUxMykgewotCQlzciA9IENDX1NSXzE2MDAwOyByYXRlX291dCA9IDE2MDAwOwotCX0gZWxzZSBpZiAocmF0ZV9vdXQgPj0gMTAzMTMpIHsKLQkJc3IgPSBDQ19TUl8xMTAyNTsgcmF0ZV9vdXQgPSAxMTAyNTsKLQl9IGVsc2UgaWYgKHJhdGVfb3V0ID49IDg4MDApIHsKLQkJc3IgPSBDQ19TUl85NjAwOyByYXRlX291dCA9IDk2MDA7Ci0JfSBlbHNlIGlmIChyYXRlX291dCA+PSA2NzUwKSB7Ci0JCXNyID0gQ0NfU1JfODAwMDsgcmF0ZV9vdXQgPSA4MDAwOwotCX0gZWxzZSB7Ci0JCXNyID0gQ0NfU1JfNTUwMDsgcmF0ZV9vdXQgPSA1NTAwOwotCX0KLQotCSpyYXRlID0gcmF0ZV9vdXQ7Ci0JcmV0dXJuIHNyOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfYWRjX3JhdGUoc3RydWN0IGl0ODE3Ml9zdGF0ZSAqcywgdW5zaWduZWQgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIHNob3J0IHNyOwotICAgIAotCXNyID0gZ2V0X2NvbXBhdF9yYXRlKCZyYXRlKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0Jcy0+Y2FwY2MgJj0gfkNDX1NSX01BU0s7Ci0Jcy0+Y2FwY2MgfD0gc3I7Ci0Jb3V0dyhzLT5jYXBjYywgcy0+aW8rSVRfQUNfQ0FQQ0MpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQotCXMtPmFkY3JhdGUgPSByYXRlOwotfQotCi0KLXN0YXRpYyB2b2lkIHNldF9kYWNfcmF0ZShzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzLCB1bnNpZ25lZCByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgc2hvcnQgc3I7Ci0gICAgCi0Jc3IgPSBnZXRfY29tcGF0X3JhdGUoJnJhdGUpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlzLT5wY2MgJj0gfkNDX1NSX01BU0s7Ci0Jcy0+cGNjIHw9IHNyOwotCW91dHcocy0+cGNjLCBzLT5pbytJVF9BQ19QQ0MpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQotCXMtPmRhY3JhdGUgPSByYXRlOwotfQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdTE2IHJkY29kZWMoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCB1OCBhZGRyKQotewotCXN0cnVjdCBpdDgxNzJfc3RhdGUgKnMgPSAoc3RydWN0IGl0ODE3Ml9zdGF0ZSAqKWNvZGVjLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBzaG9ydCBjaXJjcCwgZGF0YTsKLQlpbnQgaTsKLSAgICAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IFBPTExfQ09VTlQ7IGkrKykKLQkJaWYgKCEoaW53KHMtPmlvK0lUX0FDX0NJUkNQKSAmIENJUkNQX0NQUykpCi0JCQlicmVhazsKLQlpZiAoaSA9PSBQT0xMX0NPVU5UKQotCQllcnIoInJkY29kZWM6IGNvZGVjIHJlYWR5IHBvbGwgZXhwaXJlZCEiKTsKLQotCWNpcmNwID0gYWRkciAmIENJUkNQX0NJQV9NQVNLOwotCWNpcmNwIHw9IChjb2RlYy0+aWQgPDwgQ0lSQ1BfQ0lEX0JJVCk7Ci0JY2lyY3AgfD0gQ0lSQ1BfUldDOyAvLyByZWFkIGNvbW1hbmQKLQlvdXR3KGNpcmNwLCBzLT5pbytJVF9BQ19DSVJDUCk7Ci0KLQkvKiBub3cgd2FpdCBmb3IgdGhlIGRhdGEgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUE9MTF9DT1VOVDsgaSsrKQotCQlpZiAoaW53KHMtPmlvK0lUX0FDX0NJUkNQKSAmIENJUkNQX0RQVkYpCi0JCQlicmVhazsKLQlpZiAoaSA9PSBQT0xMX0NPVU5UKQotCQllcnIoInJkY29kZWM6IHJlYWQgcG9sbCBleHBpcmVkISIpOwotCi0JZGF0YSA9IGludyhzLT5pbytJVF9BQ19DSVJEUCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIGRhdGE7Ci19Ci0KLQotc3RhdGljIHZvaWQgd3Jjb2RlYyhzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIHU4IGFkZHIsIHUxNiBkYXRhKQotewotCXN0cnVjdCBpdDgxNzJfc3RhdGUgKnMgPSAoc3RydWN0IGl0ODE3Ml9zdGF0ZSAqKWNvZGVjLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBzaG9ydCBjaXJjcDsKLQlpbnQgaTsKLSAgICAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IFBPTExfQ09VTlQ7IGkrKykKLQkJaWYgKCEoaW53KHMtPmlvK0lUX0FDX0NJUkNQKSAmIENJUkNQX0NQUykpCi0JCQlicmVhazsKLQlpZiAoaSA9PSBQT0xMX0NPVU5UKQotCQllcnIoIndyY29kZWM6IGNvZGVjIHJlYWR5IHBvbGwgZXhwaXJlZCEiKTsKLQotCWNpcmNwID0gYWRkciAmIENJUkNQX0NJQV9NQVNLOwotCWNpcmNwIHw9IChjb2RlYy0+aWQgPDwgQ0lSQ1BfQ0lEX0JJVCk7Ci0JY2lyY3AgJj0gfkNJUkNQX1JXQzsgLy8gd3JpdGUgY29tbWFuZAotCi0Jb3V0dyhkYXRhLCAgcy0+aW8rSVRfQUNfQ0lSRFApOyAgLy8gc2VuZCBkYXRhIGZpcnN0Ci0Jb3V0dyhjaXJjcCwgcy0+aW8rSVRfQUNfQ0lSQ1ApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotfQotCi0KLXN0YXRpYyB2b2lkIHdhaXRjb2RlYyhzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgc2hvcnQgdGVtcDsKLQotCS8qIGNvZGVjX3dhaXQgaXMgdXNlZCB0byB3YWl0IGZvciBhIHJlYWR5IHN0YXRlIGFmdGVyCi0JICAgYW4gQUM5N19SRVNFVC4gKi8KLQlpdDgxNzJfZGVsYXkoMTApOwotCi0JdGVtcCA9IHJkY29kZWMoY29kZWMsIDB4MjYpOwotCi0JLy8gSWYgcG93ZXIgZG93biwgcG93ZXIgdXAKLQlpZiAodGVtcCAmIDB4M2YwMCkgewotCQkvLyBQb3dlciBvbgotCQl3cmNvZGVjKGNvZGVjLCAweDI2LCAwKTsKLQkJaXQ4MTcyX2RlbGF5KDEwMCk7Ci0JCS8vIFJlcmVhZAotCQl0ZW1wID0gcmRjb2RlYyhjb2RlYywgMHgyNik7Ci0JfQotICAgIAotCS8vIENoZWNrIGlmIENvZGVjIFJFRixBTkwsREFDLEFEQyByZWFkeSoqKi8KLQlpZiAoKHRlbXAgJiAweDNmMGYpICE9IDB4MDAwZikgewotCQllcnIoImNvZGVjIHJlZyAyNiBzdGF0dXMgKDB4JXgpIG5vdCByZWFkeSEhIiwgdGVtcCk7Ci0JCXJldHVybjsKLQl9Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdG9wX2FkYyhzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzKQotewotCXN0cnVjdCBkbWFidWYqIGRiID0gJnMtPmRtYV9hZGM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBjaGFyIGltYzsKLSAgICAKLQlpZiAoZGItPnN0b3BwZWQpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0KLQlzLT5jYXBjYyAmPSB+KENDX0NBIHwgQ0NfQ1AgfCBDQ19DQjJMIHwgQ0NfQ0IxTCk7Ci0Jcy0+Y2FwY2MgfD0gQ0NfQ1NQOwotCW91dHcocy0+Y2FwY2MsIHMtPmlvK0lUX0FDX0NBUENDKTsKLSAgICAKLQkvLyBkaXNhYmxlIGNhcHR1cmUgaW50ZXJydXB0Ci0JaW1jID0gaW5iKHMtPmlvK0lUX0FDX0lNQyk7Ci0Jb3V0YihpbWMgfCBJTUNfQ0NJTSwgcy0+aW8rSVRfQUNfSU1DKTsKLQotCWRiLT5zdG9wcGVkID0gMTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLX0JCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdG9wX2RhYyhzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzKQotewotCXN0cnVjdCBkbWFidWYqIGRiID0gJnMtPmRtYV9kYWM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBjaGFyIGltYzsKLSAgICAKLQlpZiAoZGItPnN0b3BwZWQpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0KLQlzLT5wY2MgJj0gfihDQ19DQSB8IENDX0NQIHwgQ0NfQ0IyTCB8IENDX0NCMUwpOwotCXMtPnBjYyB8PSBDQ19DU1A7Ci0Jb3V0dyhzLT5wY2MsIHMtPmlvK0lUX0FDX1BDQyk7Ci0gICAgCi0JLy8gZGlzYWJsZSBwbGF5YmFjayBpbnRlcnJ1cHQKLQlpbWMgPSBpbmIocy0+aW8rSVRfQUNfSU1DKTsKLQlvdXRiKGltYyB8IElNQ19QQ0lNLCBzLT5pbytJVF9BQ19JTUMpOwotCi0JZGItPnN0b3BwZWQgPSAxOwotICAgIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLX0JCi0KLXN0YXRpYyB2b2lkIHN0YXJ0X2RhYyhzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzKQotewotCXN0cnVjdCBkbWFidWYqIGRiID0gJnMtPmRtYV9kYWM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBjaGFyIGltYzsKLQl1bnNpZ25lZCBsb25nIGJ1ZjEsIGJ1ZjI7Ci0gICAgCi0JaWYgKCFkYi0+c3RvcHBlZCkKLQkJcmV0dXJuOwotICAgIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0KLQkvLyByZXNldCBCdWZmZXIgMSBhbmQgMiBwb2ludGVycyB0byBuZXh0T3V0IGFuZCBuZXh0T3V0K2ZyYWdzaXplCi0JYnVmMSA9IHZpcnRfdG9fYnVzKGRiLT5uZXh0T3V0KTsKLQlidWYyID0gYnVmMSArIGRiLT5mcmFnc2l6ZTsKLQlpZiAoYnVmMiA+PSBkYi0+ZG1hYWRkciArIGRiLT5kbWFzaXplKQotCQlidWYyIC09IGRiLT5kbWFzaXplOwotICAgIAotCW91dGwoYnVmMSwgcy0+aW8rSVRfQUNfUENCMVNUQSk7Ci0Jb3V0bChidWYyLCBzLT5pbytJVF9BQ19QQ0IyU1RBKTsKLQlkYi0+Y3VyQnVmUHRyID0gSVRfQUNfUENCMVNUQTsKLSAgICAKLQkvLyBlbmFibGUgcGxheWJhY2sgaW50ZXJydXB0Ci0JaW1jID0gaW5iKHMtPmlvK0lUX0FDX0lNQyk7Ci0Jb3V0YihpbWMgJiB+SU1DX1BDSU0sIHMtPmlvK0lUX0FDX0lNQyk7Ci0KLQlzLT5wY2MgJj0gfihDQ19DU1AgfCBDQ19DUCB8IENDX0NCMkwgfCBDQ19DQjFMKTsKLQlzLT5wY2MgfD0gQ0NfQ0E7Ci0Jb3V0dyhzLT5wY2MsIHMtPmlvK0lUX0FDX1BDQyk7Ci0gICAgCi0JZGItPnN0b3BwZWQgPSAwOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotfQkKLQotc3RhdGljIHZvaWQgc3RhcnRfYWRjKHN0cnVjdCBpdDgxNzJfc3RhdGUgKnMpCi17Ci0Jc3RydWN0IGRtYWJ1ZiogZGIgPSAmcy0+ZG1hX2FkYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGNoYXIgaW1jOwotCXVuc2lnbmVkIGxvbmcgYnVmMSwgYnVmMjsKLSAgICAKLQlpZiAoIWRiLT5zdG9wcGVkKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCi0JLy8gcmVzZXQgQnVmZmVyIDEgYW5kIDIgcG9pbnRlcnMgdG8gbmV4dEluIGFuZCBuZXh0SW4rZnJhZ3NpemUKLQlidWYxID0gdmlydF90b19idXMoZGItPm5leHRJbik7Ci0JYnVmMiA9IGJ1ZjEgKyBkYi0+ZnJhZ3NpemU7Ci0JaWYgKGJ1ZjIgPj0gZGItPmRtYWFkZHIgKyBkYi0+ZG1hc2l6ZSkKLQkJYnVmMiAtPSBkYi0+ZG1hc2l6ZTsKLSAgICAKLQlvdXRsKGJ1ZjEsIHMtPmlvK0lUX0FDX0NBUEIxU1RBKTsKLQlvdXRsKGJ1ZjIsIHMtPmlvK0lUX0FDX0NBUEIyU1RBKTsKLQlkYi0+Y3VyQnVmUHRyID0gSVRfQUNfQ0FQQjFTVEE7Ci0KLQkvLyBlbmFibGUgY2FwdHVyZSBpbnRlcnJ1cHQKLQlpbWMgPSBpbmIocy0+aW8rSVRfQUNfSU1DKTsKLQlvdXRiKGltYyAmIH5JTUNfQ0NJTSwgcy0+aW8rSVRfQUNfSU1DKTsKLQotCXMtPmNhcGNjICY9IH4oQ0NfQ1NQIHwgQ0NfQ1AgfCBDQ19DQjJMIHwgQ0NfQ0IxTCk7Ci0Jcy0+Y2FwY2MgfD0gQ0NfQ0E7Ci0Jb3V0dyhzLT5jYXBjYywgcy0+aW8rSVRfQUNfQ0FQQ0MpOwotICAgIAotCWRiLT5zdG9wcGVkID0gMDsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLX0JCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZGVmaW5lIERNQUJVRl9ERUZBVUxUT1JERVIgKDE3LVBBR0VfU0hJRlQpCi0jZGVmaW5lIERNQUJVRl9NSU5PUkRFUiAxCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWFsbG9jX2RtYWJ1ZihzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzLCBzdHJ1Y3QgZG1hYnVmICpkYikKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSwgKnBlbmQ7Ci0KLQlpZiAoZGItPnJhd2J1ZikgewotCQkvKiB1bmRvIG1hcmtpbmcgdGhlIHBhZ2VzIGFzIHJlc2VydmVkICovCi0JCXBlbmQgPSB2aXJ0X3RvX3BhZ2UoZGItPnJhd2J1ZiArCi0JCQkJICAgIChQQUdFX1NJWkUgPDwgZGItPmJ1Zm9yZGVyKSAtIDEpOwotCQlmb3IgKHBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGItPnJhd2J1Zik7IHBhZ2UgPD0gcGVuZDsgcGFnZSsrKQotCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocy0+ZGV2LCBQQUdFX1NJWkUgPDwgZGItPmJ1Zm9yZGVyLAotCQkJCSAgICBkYi0+cmF3YnVmLCBkYi0+ZG1hYWRkcik7Ci0JfQotCWRiLT5yYXdidWYgPSBkYi0+bmV4dEluID0gZGItPm5leHRPdXQgPSBOVUxMOwotCWRiLT5tYXBwZWQgPSBkYi0+cmVhZHkgPSAwOwotfQotCi1zdGF0aWMgaW50IHByb2dfZG1hYnVmKHN0cnVjdCBpdDgxNzJfc3RhdGUgKnMsIHN0cnVjdCBkbWFidWYgKmRiLAotCQkgICAgICAgdW5zaWduZWQgcmF0ZSwgdW5zaWduZWQgZm10LCB1bnNpZ25lZCByZWcpCi17Ci0JaW50IG9yZGVyOwotCXVuc2lnbmVkIGJ5dGVwZXJzZWM7Ci0JdW5zaWduZWQgYnVmczsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSwgKnBlbmQ7Ci0KLQlpZiAoIWRiLT5yYXdidWYpIHsKLQkJZGItPnJlYWR5ID0gZGItPm1hcHBlZCA9IDA7Ci0JCWZvciAob3JkZXIgPSBETUFCVUZfREVGQVVMVE9SREVSOwotCQkgICAgIG9yZGVyID49IERNQUJVRl9NSU5PUkRFUjsgb3JkZXItLSkKLQkJCWlmICgoZGItPnJhd2J1ZiA9Ci0JCQkgICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KHMtPmRldiwKLQkJCQkJCSAgUEFHRV9TSVpFIDw8IG9yZGVyLAotCQkJCQkJICAmZGItPmRtYWFkZHIpKSkKLQkJCQlicmVhazsKLQkJaWYgKCFkYi0+cmF3YnVmKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWRiLT5idWZvcmRlciA9IG9yZGVyOwotCQkvKiBub3cgbWFyayB0aGUgcGFnZXMgYXMgcmVzZXJ2ZWQ7Ci0JCSAgIG90aGVyd2lzZSByZW1hcF9wZm5fcmFuZ2UgZG9lc24ndCBkbyB3aGF0IHdlIHdhbnQgKi8KLQkJcGVuZCA9IHZpcnRfdG9fcGFnZShkYi0+cmF3YnVmICsKLQkJCQkgICAgKFBBR0VfU0laRSA8PCBkYi0+YnVmb3JkZXIpIC0gMSk7Ci0JCWZvciAocGFnZSA9IHZpcnRfdG9fcGFnZShkYi0+cmF3YnVmKTsgcGFnZSA8PSBwZW5kOyBwYWdlKyspCi0JCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0JfQotCi0JZGItPmNvdW50ID0gMDsKLQlkYi0+bmV4dEluID0gZGItPm5leHRPdXQgPSBkYi0+cmF3YnVmOwotICAgIAotCWJ5dGVwZXJzZWMgPSByYXRlIDw8IHNhbXBsZV9zaGlmdFtmbXRdOwotCWJ1ZnMgPSBQQUdFX1NJWkUgPDwgZGItPmJ1Zm9yZGVyOwotCWlmIChkYi0+b3NzZnJhZ3NoaWZ0KSB7Ci0JCWlmICgoMTAwMCA8PCBkYi0+b3NzZnJhZ3NoaWZ0KSA8IGJ5dGVwZXJzZWMpCi0JCQlkYi0+ZnJhZ3NoaWZ0ID0gbGQyKGJ5dGVwZXJzZWMvMTAwMCk7Ci0JCWVsc2UKLQkJCWRiLT5mcmFnc2hpZnQgPSBkYi0+b3NzZnJhZ3NoaWZ0OwotCX0gZWxzZSB7Ci0JCWRiLT5mcmFnc2hpZnQgPSBsZDIoYnl0ZXBlcnNlYy8xMDAvKGRiLT5zdWJkaXZpc2lvbiA/Ci0JCQkJCQkgICAgZGItPnN1YmRpdmlzaW9uIDogMSkpOwotCQlpZiAoZGItPmZyYWdzaGlmdCA8IDMpCi0JCQlkYi0+ZnJhZ3NoaWZ0ID0gMzsKLQl9Ci0JZGItPm51bWZyYWcgPSBidWZzID4+IGRiLT5mcmFnc2hpZnQ7Ci0Jd2hpbGUgKGRiLT5udW1mcmFnIDwgNCAmJiBkYi0+ZnJhZ3NoaWZ0ID4gMykgewotCQlkYi0+ZnJhZ3NoaWZ0LS07Ci0JCWRiLT5udW1mcmFnID0gYnVmcyA+PiBkYi0+ZnJhZ3NoaWZ0OwotCX0KLQlkYi0+ZnJhZ3NpemUgPSAxIDw8IGRiLT5mcmFnc2hpZnQ7Ci0JaWYgKGRiLT5vc3NtYXhmcmFncyA+PSA0ICYmIGRiLT5vc3NtYXhmcmFncyA8IGRiLT5udW1mcmFnKQotCQlkYi0+bnVtZnJhZyA9IGRiLT5vc3NtYXhmcmFnczsKLQlkYi0+ZnJhZ3NhbXBsZXMgPSBkYi0+ZnJhZ3NpemUgPj4gc2FtcGxlX3NoaWZ0W2ZtdF07Ci0JZGItPmRtYXNpemUgPSBkYi0+bnVtZnJhZyA8PCBkYi0+ZnJhZ3NoaWZ0OwotCW1lbXNldChkYi0+cmF3YnVmLCAoZm10ICYgKENDX0RGPj5DQ19GTVRfQklUKSkgPyAwIDogMHg4MCwgYnVmcyk7Ci0gICAgCi0jaWZkZWYgSVQ4MTcyX1ZFUkJPU0VfREVCVUcKLQlkYmcoInJhdGU9JWQsIGZyYWdzaXplPSVkLCBudW1mcmFnPSVkLCBkbWFzaXplPSVkIiwKLQkgICAgcmF0ZSwgZGItPmZyYWdzaXplLCBkYi0+bnVtZnJhZywgZGItPmRtYXNpemUpOwotI2VuZGlmCi0KLQkvLyBzZXQgZGF0YSBsZW5ndGggcmVnaXN0ZXIKLQlvdXR3KGRiLT5mcmFnc2l6ZSwgcy0+aW8rcmVnKzIpOwotCWRiLT5yZWFkeSA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHJvZ19kbWFidWZfYWRjKHN0cnVjdCBpdDgxNzJfc3RhdGUgKnMpCi17Ci0Jc3RvcF9hZGMocyk7Ci0JcmV0dXJuIHByb2dfZG1hYnVmKHMsICZzLT5kbWFfYWRjLCBzLT5hZGNyYXRlLAotCQkJICAgKHMtPmNhcGNjICYgQ0NfRk1UX01BU0spID4+IENDX0ZNVF9CSVQsCi0JCQkgICBJVF9BQ19DQVBDQyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHByb2dfZG1hYnVmX2RhYyhzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzKQotewotCXN0b3BfZGFjKHMpOwotCXJldHVybiBwcm9nX2RtYWJ1ZihzLCAmcy0+ZG1hX2RhYywgcy0+ZGFjcmF0ZSwKLQkJCSAgIChzLT5wY2MgJiBDQ19GTVRfTUFTSykgPj4gQ0NfRk1UX0JJVCwKLQkJCSAgIElUX0FDX1BDQyk7Ci19Ci0KLQotLyogaG9sZCBzcGlubG9jayBmb3IgdGhlIGZvbGxvd2luZyEgKi8KLQotc3RhdGljIGlycXJldHVybl90IGl0ODE3Ml9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzID0gKHN0cnVjdCBpdDgxNzJfc3RhdGUgKilkZXZfaWQ7Ci0Jc3RydWN0IGRtYWJ1ZiogZGFjID0gJnMtPmRtYV9kYWM7Ci0Jc3RydWN0IGRtYWJ1ZiogYWRjID0gJnMtPmRtYV9hZGM7Ci0JdW5zaWduZWQgY2hhciBpc2MsIHZzOwotCXVuc2lnbmVkIHNob3J0IHZvbCwgbXV0ZTsKLQl1bnNpZ25lZCBsb25nIG5ld3B0cjsKLSAgICAKLQlzcGluX2xvY2soJnMtPmxvY2spOwotCi0JaXNjID0gaW5iKHMtPmlvK0lUX0FDX0lTQyk7Ci0KLQkvKiBmYXN0cGF0aCBvdXQsIHRvIGVhc2UgaW50ZXJydXB0IHNoYXJpbmcgKi8KLQlpZiAoIShpc2MgJiAoSVNDX1ZDSSB8IElTQ19DQ0kgfCBJU0NfUENJKSkpIHsKLQkJc3Bpbl91bmxvY2soJnMtPmxvY2spOwotCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQotICAgIAotCS8qIGNsZWFyIGF1ZGlvIGludGVycnVwdHMgZmlyc3QgKi8KLQlvdXRiKGlzYyB8IElTQ19WQ0kgfCBJU0NfQ0NJIHwgSVNDX1BDSSwgcy0+aW8rSVRfQUNfSVNDKTsKLSAgICAKLQkvKiBoYW5kbGUgdm9sdW1lIGJ1dHRvbiBldmVudHMgKGlnbm9yZSBpZiBTL1BESUYgZW5hYmxlZCkgKi8KLQlpZiAoKGlzYyAmIElTQ19WQ0kpICYmIHMtPnNwZGlmX3ZvbHVtZSA9PSAtMSkgewotCQl2cyA9IGluYihzLT5pbytJVF9BQ19WUyk7Ci0JCW91dGIoMCwgcy0+aW8rSVRfQUNfVlMpOwotCQl2b2wgPSBpbncocy0+aW8rSVRfQUNfUENNT1YpOwotCQltdXRlID0gdm9sICYgUENNT1ZfUENNT007Ci0JCXZvbCAmPSBQQ01PVl9QQ01MQ0dfTUFTSzsKLQkJaWYgKCh2cyAmIFZTX1ZVUCkgJiYgdm9sID4gMCkKLQkJCXZvbC0tOwotCQlpZiAoKHZzICYgVlNfVkRQKSAmJiB2b2wgPCAweDFmKQotCQkJdm9sKys7Ci0JCXZvbCB8PSAodm9sIDw8IFBDTU9WX1BDTVJDR19CSVQpOwotCQlpZiAodnMgJiBWU19WTVApCi0JCQl2b2wgfD0gKG11dGUgXiBQQ01PVl9QQ01PTSk7Ci0JCW91dHcodm9sLCBzLT5pbytJVF9BQ19QQ01PVik7Ci0JfQotICAgIAotCS8qIHVwZGF0ZSBjYXB0dXJlIHBvaW50ZXJzICovCi0JaWYgKGlzYyAmIElTQ19DQ0kpIHsKLQkJaWYgKGFkYy0+Y291bnQgPiBhZGMtPmRtYXNpemUgLSBhZGMtPmZyYWdzaXplKSB7Ci0JCQkvLyBPdmVycnVuLiBTdG9wIEFEQyBhbmQgbG9nIHRoZSBlcnJvcgotCQkJc3RvcF9hZGMocyk7Ci0JCQlhZGMtPmVycm9yKys7Ci0JCQlkYmcoImFkYyBvdmVycnVuIik7Ci0JCX0gZWxzZSB7Ci0JCQluZXdwdHIgPSB2aXJ0X3RvX2J1cyhhZGMtPm5leHRJbikgKyAyKmFkYy0+ZnJhZ3NpemU7Ci0JCQlpZiAobmV3cHRyID49IGFkYy0+ZG1hYWRkciArIGFkYy0+ZG1hc2l6ZSkKLQkJCQluZXdwdHIgLT0gYWRjLT5kbWFzaXplOwotCSAgICAKLQkJCW91dGwobmV3cHRyLCBzLT5pbythZGMtPmN1ckJ1ZlB0cik7Ci0JCQlhZGMtPmN1ckJ1ZlB0ciA9IChhZGMtPmN1ckJ1ZlB0ciA9PSBJVF9BQ19DQVBCMVNUQSkgPwotCQkJCUlUX0FDX0NBUEIyU1RBIDogSVRfQUNfQ0FQQjFTVEE7Ci0JICAgIAotCQkJYWRjLT5uZXh0SW4gKz0gYWRjLT5mcmFnc2l6ZTsKLQkJCWlmIChhZGMtPm5leHRJbiA+PSBhZGMtPnJhd2J1ZiArIGFkYy0+ZG1hc2l6ZSkKLQkJCQlhZGMtPm5leHRJbiAtPSBhZGMtPmRtYXNpemU7Ci0JICAgIAotCQkJYWRjLT5jb3VudCArPSBhZGMtPmZyYWdzaXplOwotCQkJYWRjLT50b3RhbF9ieXRlcyArPSBhZGMtPmZyYWdzaXplOwotCi0JCQkvKiB3YWtlIHVwIGFueWJvZHkgbGlzdGVuaW5nICovCi0JCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmYWRjLT53YWl0KSkKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFkYy0+d2FpdCk7Ci0JCX0KLQl9Ci0gICAgCi0JLyogdXBkYXRlIHBsYXliYWNrIHBvaW50ZXJzICovCi0JaWYgKGlzYyAmIElTQ19QQ0kpIHsKLQkJbmV3cHRyID0gdmlydF90b19idXMoZGFjLT5uZXh0T3V0KSArIDIqZGFjLT5mcmFnc2l6ZTsKLQkJaWYgKG5ld3B0ciA+PSBkYWMtPmRtYWFkZHIgKyBkYWMtPmRtYXNpemUpCi0JCQluZXdwdHIgLT0gZGFjLT5kbWFzaXplOwotCQotCQlvdXRsKG5ld3B0ciwgcy0+aW8rZGFjLT5jdXJCdWZQdHIpOwotCQlkYWMtPmN1ckJ1ZlB0ciA9IChkYWMtPmN1ckJ1ZlB0ciA9PSBJVF9BQ19QQ0IxU1RBKSA/Ci0JCQlJVF9BQ19QQ0IyU1RBIDogSVRfQUNfUENCMVNUQTsKLQkKLQkJZGFjLT5uZXh0T3V0ICs9IGRhYy0+ZnJhZ3NpemU7Ci0JCWlmIChkYWMtPm5leHRPdXQgPj0gZGFjLT5yYXdidWYgKyBkYWMtPmRtYXNpemUpCi0JCQlkYWMtPm5leHRPdXQgLT0gZGFjLT5kbWFzaXplOwotCQotCQlkYWMtPmNvdW50IC09IGRhYy0+ZnJhZ3NpemU7Ci0JCWRhYy0+dG90YWxfYnl0ZXMgKz0gZGFjLT5mcmFnc2l6ZTsKLQotCQkvKiB3YWtlIHVwIGFueWJvZHkgbGlzdGVuaW5nICovCi0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZkYWMtPndhaXQpKQotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkYWMtPndhaXQpOwotCQotCQlpZiAoZGFjLT5jb3VudCA8PSAwKQotCQkJc3RvcF9kYWMocyk7Ci0JfQotICAgIAotCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IGl0ODE3Ml9vcGVuX21peGRldihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0Jc3RydWN0IGl0ODE3Ml9zdGF0ZSAqczsKLQotCWZvciAobGlzdCA9IGRldnMubmV4dDsgOyBsaXN0ID0gbGlzdC0+bmV4dCkgewotCQlpZiAobGlzdCA9PSAmZGV2cykKLQkJCXJldHVybiAtRU5PREVWOwotCQlzID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgaXQ4MTcyX3N0YXRlLCBkZXZzKTsKLQkJaWYgKHMtPmNvZGVjLmRldl9taXhlciA9PSBtaW5vcikKLQkJCWJyZWFrOwotCX0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwotCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIGludCBpdDgxNzJfcmVsZWFzZV9taXhkZXYoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHUxNgotY3Z0X29zc3ZvbCh1bnNpZ25lZCBpbnQgZ2FpbikKLXsKLQl1MTYgcmV0OwotICAgIAotCWlmIChnYWluID09IDApCi0JCXJldHVybiAwOwotICAgIAotCWlmIChnYWluID4gMTAwKQotCQlnYWluID0gMTAwOwotICAgIAotCXJldCA9ICgxMDAgLSBnYWluICsgMzIpIC8gNDsKLQlyZXQgPSByZXQgPiAzMSA/IDMxIDogcmV0OwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBtaXhkZXZfaW9jdGwoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IGl0ODE3Ml9zdGF0ZSAqcyA9IChzdHJ1Y3QgaXQ4MTcyX3N0YXRlICopY29kZWMtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBpbnQgbGVmdCwgcmlnaHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdmFsOwotCXUxNiB2b2w7Ci0gICAgCi0JLyoKLQkgKiBXaGVuIHdlIGFyZSBpbiBTL1BESUYgbW9kZSwgd2Ugd2FudCB0byBkaXNhYmxlIGFueSBhbmFsb2cgb3V0cHV0IHNvCi0JICogd2UgZmlsdGVyIHRoZSBtYXN0ZXIvUENNIGNoYW5uZWwgdm9sdW1lIGlvY3Rscy4KLQkgKgotCSAqIEFsc28gZmlsdGVyIEkyUyBjaGFubmVsLCB3aGljaCBBQyc5NyBrbm93cyBub3RoaW5nIGFib3V0LgotCSAqLwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNPVU5EX01JWEVSX1dSSVRFX1ZPTFVNRToKLQkJLy8gaWYgbm90IGluIFMvUERJRiBtb2RlLCBwYXNzIHRvIEFDJzk3Ci0JCWlmIChzLT5zcGRpZl92b2x1bWUgPT0gLTEpCi0JCQlicmVhazsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBTT1VORF9NSVhFUl9XUklURV9QQ006Ci0JCS8vIGlmIG5vdCBpbiBTL1BESUYgbW9kZSwgcGFzcyB0byBBQyc5NwotCQlpZiAocy0+c3BkaWZfdm9sdW1lID09IC0xKQotCQkJYnJlYWs7Ci0JCWlmIChnZXRfdXNlcih2YWwsIChpbnQgKilhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJpZ2h0ID0gKCh2YWwgPj4gOCkgICYgMHhmZik7Ci0JCWxlZnQgPSAodmFsICAmIDB4ZmYpOwotCQlpZiAocmlnaHQgPiAxMDApCi0JCQlyaWdodCA9IDEwMDsKLQkJaWYgKGxlZnQgPiAxMDApCi0JCQlsZWZ0ID0gMTAwOwotCQlzLT5zcGRpZl92b2x1bWUgPSAocmlnaHQgPDwgOCkgfCBsZWZ0OwotCQl2b2wgPSBjdnRfb3Nzdm9sKGxlZnQpOwotCQl2b2wgfD0gKGN2dF9vc3N2b2wocmlnaHQpIDw8IFBDTU9WX1BDTVJDR19CSVQpOwotCQlpZiAodm9sID09IDApCi0JCQl2b2wgPSBQQ01PVl9QQ01PTTsgLy8gbXV0ZQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlvdXR3KHZvbCwgcy0+aW8rSVRfQUNfUENNT1YpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBwdXRfdXNlcihzLT5zcGRpZl92b2x1bWUsIChpbnQgKilhcmcpOwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9QQ006Ci0JCS8vIGlmIG5vdCBpbiBTL1BESUYgbW9kZSwgcGFzcyB0byBBQyc5NwotCQlpZiAocy0+c3BkaWZfdm9sdW1lID09IC0xKQotCQkJYnJlYWs7Ci0JCXJldHVybiBwdXRfdXNlcihzLT5zcGRpZl92b2x1bWUsIChpbnQgKilhcmcpOwotCWNhc2UgU09VTkRfTUlYRVJfV1JJVEVfSTJTOgotCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50ICopYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyaWdodCA9ICgodmFsID4+IDgpICAmIDB4ZmYpOwotCQlsZWZ0ID0gKHZhbCAgJiAweGZmKTsKLQkJaWYgKHJpZ2h0ID4gMTAwKQotCQkJcmlnaHQgPSAxMDA7Ci0JCWlmIChsZWZ0ID4gMTAwKQotCQkJbGVmdCA9IDEwMDsKLQkJcy0+aTJzX3ZvbHVtZSA9IChyaWdodCA8PCA4KSB8IGxlZnQ7Ci0JCXZvbCA9IGN2dF9vc3N2b2wobGVmdCk7Ci0JCXZvbCB8PSAoY3Z0X29zc3ZvbChyaWdodCkgPDwgSTJTVl9JMlNSQ0dfQklUKTsKLQkJaWYgKHZvbCA9PSAwKQotCQkJdm9sID0gSTJTVl9JMlNPTTsgLy8gbXV0ZQotCQlvdXR3KHZvbCwgcy0+aW8rSVRfQUNfSTJTVik7Ci0JCXJldHVybiBwdXRfdXNlcihzLT5pMnNfdm9sdW1lLCAoaW50ICopYXJnKTsKLQljYXNlIFNPVU5EX01JWEVSX1JFQURfSTJTOgotCQlyZXR1cm4gcHV0X3VzZXIocy0+aTJzX3ZvbHVtZSwgKGludCAqKWFyZyk7Ci0JY2FzZSBTT1VORF9NSVhFUl9XUklURV9SRUNTUkM6Ci0JCWlmIChnZXRfdXNlcih2YWwsIChpbnQgKilhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh2YWwgJiBTT1VORF9NQVNLX0kyUykgewotCQkJcy0+aTJzX3JlY29yZGluZyA9IDE7Ci0JCQlvdXRiKERSU1NfSTJTLCBzLT5pbytJVF9BQ19EUlNTKTsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgewotCQkJcy0+aTJzX3JlY29yZGluZyA9IDA7Ci0JCQlvdXRiKERSU1NfQUM5N19QUklNLCBzLT5pbytJVF9BQ19EUlNTKTsKLQkJCS8vIG5vdyBsZXQgQUMnOTcgc2VsZWN0IHJlY29yZCBzb3VyY2UKLQkJCWJyZWFrOwotCQl9Ci0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX1JFQ1NSQzoKLQkJaWYgKHMtPmkyc19yZWNvcmRpbmcpCi0JCQlyZXR1cm4gcHV0X3VzZXIoU09VTkRfTUFTS19JMlMsIChpbnQgKilhcmcpOwotCQllbHNlCi0JCQkvLyBsZXQgQUMnOTcgcmVwb3J0IHJlY29yZGluZyBzb3VyY2UKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBjb2RlYy0+bWl4ZXJfaW9jdGwoY29kZWMsIGNtZCwgYXJnKTsKLX0KLQotc3RhdGljIGludCBpdDgxNzJfaW9jdGxfbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBpdDgxNzJfc3RhdGUgKnMgPSAoc3RydWN0IGl0ODE3Ml9zdGF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMgPSAmcy0+Y29kZWM7Ci0KLQlyZXR1cm4gbWl4ZGV2X2lvY3RsKGNvZGVjLCBjbWQsIGFyZyk7Ci19Ci0KLXN0YXRpYyAvKmNvbnN0Ki8gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpdDgxNzJfbWl4ZXJfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmxsc2VlawkJPSBub19sbHNlZWssCi0JLmlvY3RsCQk9IGl0ODE3Ml9pb2N0bF9taXhkZXYsCi0JLm9wZW4JCT0gaXQ4MTcyX29wZW5fbWl4ZGV2LAotCS5yZWxlYXNlCT0gaXQ4MTcyX3JlbGVhc2VfbWl4ZGV2LAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgZHJhaW5fZGFjKHN0cnVjdCBpdDgxNzJfc3RhdGUgKnMsIGludCBub25ibG9jaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjb3VudCwgdG1vOwotCQotCWlmIChzLT5kbWFfZGFjLm1hcHBlZCB8fCAhcy0+ZG1hX2RhYy5yZWFkeSB8fCBzLT5kbWFfZGFjLnN0b3BwZWQpCi0JCXJldHVybiAwOwotCi0JZm9yICg7OykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQljb3VudCA9IHMtPmRtYV9kYWMuY291bnQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGNvdW50IDw9IDApCi0JCQlicmVhazsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJYnJlYWs7Ci0JCS8vaWYgKG5vbmJsb2NrKQotCQkvL3JldHVybiAtRUJVU1k7Ci0JCXRtbyA9IDEwMDAgKiBjb3VudCAvIHMtPmRhY3JhdGU7Ci0JCXRtbyA+Pj0gc2FtcGxlX3NoaWZ0WyhzLT5wY2MgJiBDQ19GTVRfTUFTSykgPj4gQ0NfRk1UX0JJVF07Ci0JCWl0ODE3Ml9kZWxheSh0bW8pOwotCX0KLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0KLS8qCi0gKiBDb3B5IGF1ZGlvIGRhdGEgdG8vZnJvbSB1c2VyIGJ1ZmZlciBmcm9tL3RvIGRtYSBidWZmZXIsIHRha2luZyBjYXJlCi0gKiB0aGF0IHdlIHdyYXAgd2hlbiByZWFkaW5nL3dyaXRpbmcgdGhlIGRtYSBidWZmZXIuIFJldHVybnMgYWN0dWFsIGJ5dGUKLSAqIGNvdW50IHdyaXR0ZW4gdG8gb3IgcmVhZCBmcm9tIHRoZSBkbWEgYnVmZmVyLgotICovCi1zdGF0aWMgaW50IGNvcHlfZG1hYnVmX3VzZXIoc3RydWN0IGRtYWJ1ZiAqZGIsIGNoYXIqIHVzZXJidWYsCi0JCQkgICAgaW50IGNvdW50LCBpbnQgdG9fdXNlcikKLXsKLQljaGFyKiBidWZwdHIgPSB0b191c2VyID8gZGItPm5leHRPdXQgOiBkYi0+bmV4dEluOwotCWNoYXIqIGJ1ZmVuZCA9IGRiLT5yYXdidWYgKyBkYi0+ZG1hc2l6ZTsKLQkKLQlpZiAoYnVmcHRyICsgY291bnQgPiBidWZlbmQpIHsKLQkJaW50IHBhcnRpYWwgPSAoaW50KShidWZlbmQgLSBidWZwdHIpOwotCQlpZiAodG9fdXNlcikgewotCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYnVmLCBidWZwdHIsIHBhcnRpYWwpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYnVmICsgcGFydGlhbCwgZGItPnJhd2J1ZiwKLQkJCQkJIGNvdW50IC0gcGFydGlhbCkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmcHRyLCB1c2VyYnVmLCBwYXJ0aWFsKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcihkYi0+cmF3YnVmLAotCQkJCQkgICB1c2VyYnVmICsgcGFydGlhbCwKLQkJCQkJICAgY291bnQgLSBwYXJ0aWFsKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICh0b191c2VyKSB7Ci0JCQlpZiAoY29weV90b191c2VyKHVzZXJidWYsIGJ1ZnB0ciwgY291bnQpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQl9IGVsc2UgewotCQkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZnB0ciwgdXNlcmJ1ZiwgY291bnQpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfQotCQotCXJldHVybiBjb3VudDsKLX0KLQotCi1zdGF0aWMgc3NpemVfdCBpdDgxNzJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmZmVyLAotCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGl0ODE3Ml9zdGF0ZSAqcyA9IChzdHJ1Y3QgaXQ4MTcyX3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkbWFidWYgKmRiID0gJnMtPmRtYV9hZGM7Ci0Jc3NpemVfdCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY250LCByZW1haW5kZXIsIGF2YWlsOwotCi0JaWYgKGRiLT5tYXBwZWQpCi0JCXJldHVybiAtRU5YSU87Ci0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0ID0gMDsKLQotCXdoaWxlIChjb3VudCA+IDApIHsKLQkJLy8gd2FpdCBmb3Igc2FtcGxlcyBpbiBjYXB0dXJlIGJ1ZmZlcgotCQlkbyB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKGRiLT5zdG9wcGVkKQotCQkJCXN0YXJ0X2FkYyhzKTsKLQkJCWF2YWlsID0gZGItPmNvdW50OwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKGF2YWlsIDw9IDApIHsKLQkJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCQkJaWYgKCFyZXQpCi0JCQkJCQlyZXQgPSAtRUFHQUlOOwotCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0KLQkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZkYi0+d2FpdCk7Ci0JCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQkJCWlmICghcmV0KQotCQkJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwotCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0KLQkJCX0KLQkJfSB3aGlsZSAoYXZhaWwgPD0gMCk7Ci0KLQkJLy8gY29weSBmcm9tIG5leHRPdXQgdG8gdXNlcgotCQlpZiAoKGNudCA9IGNvcHlfZG1hYnVmX3VzZXIoZGIsIGJ1ZmZlciwgY291bnQgPiBhdmFpbCA/Ci0JCQkJCSAgICBhdmFpbCA6IGNvdW50LCAxKSkgPCAwKSB7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWRiLT5jb3VudCAtPSBjbnQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQotCQlkYi0+bmV4dE91dCArPSBjbnQ7Ci0JCWlmIChkYi0+bmV4dE91dCA+PSBkYi0+cmF3YnVmICsgZGItPmRtYXNpemUpCi0JCQlkYi0+bmV4dE91dCAtPSBkYi0+ZG1hc2l6ZTsJCi0KLQkJY291bnQgLT0gY250OwotCQlidWZmZXIgKz0gY250OwotCQlyZXQgKz0gY250OwotCX0gLy8gd2hpbGUgKGNvdW50ID4gMCkKLQotCS8qCi0JICogU2VlIGlmIHRoZSBkbWEgYnVmZmVyIGNvdW50IGFmdGVyIHRoaXMgcmVhZCBjYWxsIGlzCi0JICogYWxpZ25lZCBvbiBhIGZyYWdzaXplIGJvdW5kYXJ5LiBJZiBub3QsIHJlYWQgZnJvbQotCSAqIGJ1ZmZlciB1bnRpbCB3ZSByZWFjaCBhIGJvdW5kYXJ5LCBhbmQgbGV0J3MgaG9wZSB0aGlzCi0JICogaXMganVzdCB0aGUgbGFzdCByZW1haW5kZXIgb2YgYW4gYXVkaW8gcmVjb3JkLiBJZiBub3QKLQkgKiBpdCBtZWFucyB0aGUgdXNlciBpcyBub3QgcmVhZGluZyBpbiBmcmFnc2l6ZSBjaHVua3MsIGluCi0JICogd2hpY2ggY2FzZSBpdCdzIGhpcy9oZXIgZmF1bHQgdGhhdCB0aGVyZSBhcmUgYXVkaW8gZ2FwcwotCSAqIGluIHRoZWlyIHJlY29yZC4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCXJlbWFpbmRlciA9IGRiLT5jb3VudCAlIGRiLT5mcmFnc2l6ZTsKLQlpZiAocmVtYWluZGVyKSB7Ci0JCWRiLT5uZXh0T3V0ICs9IHJlbWFpbmRlcjsKLQkJaWYgKGRiLT5uZXh0T3V0ID49IGRiLT5yYXdidWYgKyBkYi0+ZG1hc2l6ZSkKLQkJCWRiLT5uZXh0T3V0IC09IGRiLT5kbWFzaXplOwotCQlkYi0+Y291bnQgLT0gcmVtYWluZGVyOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBpdDgxNzJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKLQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzID0gKHN0cnVjdCBpdDgxNzJfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRtYWJ1ZiAqZGIgPSAmcy0+ZG1hX2RhYzsKLQlzc2l6ZV90IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjbnQsIHJlbWFpbmRlciwgYXZhaWw7Ci0KLQlpZiAoZGItPm1hcHBlZCkKLQkJcmV0dXJuIC1FTlhJTzsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldCA9IDA7Ci0gICAgCi0Jd2hpbGUgKGNvdW50ID4gMCkgewotCQkvLyB3YWl0IGZvciBzcGFjZSBpbiBwbGF5YmFjayBidWZmZXIKLQkJZG8gewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJCWF2YWlsID0gZGItPmRtYXNpemUgLSBkYi0+Y291bnQ7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAoYXZhaWwgPD0gMCkgewotCQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJCQlpZiAoIXJldCkKLQkJCQkJCXJldCA9IC1FQUdBSU47Ci0JCQkJCXJldHVybiByZXQ7Ci0JCQkJfQotCQkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJmRiLT53YWl0KTsKLQkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCQkJaWYgKCFyZXQpCi0JCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7Ci0JCQkJCXJldHVybiByZXQ7Ci0JCQkJfQotCQkJfQotCQl9IHdoaWxlIChhdmFpbCA8PSAwKTsKLQkKLQkJLy8gY29weSB0byBuZXh0SW4KLQkJaWYgKChjbnQgPSBjb3B5X2RtYWJ1Zl91c2VyKGRiLCAoY2hhciopYnVmZmVyLAotCQkJCQkgICAgY291bnQgPiBhdmFpbCA/Ci0JCQkJCSAgICBhdmFpbCA6IGNvdW50LCAwKSkgPCAwKSB7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWRiLT5jb3VudCArPSBjbnQ7Ci0JCWlmIChkYi0+c3RvcHBlZCkKLQkJCXN0YXJ0X2RhYyhzKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQotCQlkYi0+bmV4dEluICs9IGNudDsKLQkJaWYgKGRiLT5uZXh0SW4gPj0gZGItPnJhd2J1ZiArIGRiLT5kbWFzaXplKQotCQkJZGItPm5leHRJbiAtPSBkYi0+ZG1hc2l6ZTsKLQkKLQkJY291bnQgLT0gY250OwotCQlidWZmZXIgKz0gY250OwotCQlyZXQgKz0gY250OwotCX0gLy8gd2hpbGUgKGNvdW50ID4gMCkKLQkKLQkvKgotCSAqIFNlZSBpZiB0aGUgZG1hIGJ1ZmZlciBjb3VudCBhZnRlciB0aGlzIHdyaXRlIGNhbGwgaXMKLQkgKiBhbGlnbmVkIG9uIGEgZnJhZ3NpemUgYm91bmRhcnkuIElmIG5vdCwgZmlsbCBidWZmZXIKLQkgKiB3aXRoIHNpbGVuY2UgdG8gdGhlIG5leHQgYm91bmRhcnksIGFuZCBsZXQncyBob3BlIHRoaXMKLQkgKiBpcyBqdXN0IHRoZSBsYXN0IHJlbWFpbmRlciBvZiBhbiBhdWRpbyBwbGF5YmFjay4gSWYgbm90Ci0JICogaXQgbWVhbnMgdGhlIHVzZXIgaXMgbm90IHNlbmRpbmcgdXMgZnJhZ3NpemUgY2h1bmtzLCBpbgotCSAqIHdoaWNoIGNhc2UgaXQncyBoaXMvaGVyIGZhdWx0IHRoYXQgdGhlcmUgYXJlIGF1ZGlvIGdhcHMKLQkgKiBpbiB0aGVpciBwbGF5YmFjay4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCXJlbWFpbmRlciA9IGRiLT5jb3VudCAlIGRiLT5mcmFnc2l6ZTsKLQlpZiAocmVtYWluZGVyKSB7Ci0JCWludCBmaWxsX2NudCA9IGRiLT5mcmFnc2l6ZSAtIHJlbWFpbmRlcjsKLQkJbWVtc2V0KGRiLT5uZXh0SW4sIDAsIGZpbGxfY250KTsKLQkJZGItPm5leHRJbiArPSBmaWxsX2NudDsKLQkJaWYgKGRiLT5uZXh0SW4gPj0gZGItPnJhd2J1ZiArIGRiLT5kbWFzaXplKQotCQkJZGItPm5leHRJbiAtPSBkYi0+ZG1hc2l6ZTsKLQkJZGItPmNvdW50ICs9IGZpbGxfY250OwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBObyBrZXJuZWwgbG9jayAtIHdlIGhhdmUgb3VyIG93biBzcGlubG9jayAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpdDgxNzJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IGl0ODE3Ml9zdGF0ZSAqcyA9IChzdHJ1Y3QgaXQ4MTcyX3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IG1hc2sgPSAwOwotCi0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7Ci0JCWlmICghcy0+ZG1hX2RhYy5yZWFkeSkKLQkJCXJldHVybiAwOwotCQlwb2xsX3dhaXQoZmlsZSwgJnMtPmRtYV9kYWMud2FpdCwgd2FpdCk7Ci0JfQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCWlmICghcy0+ZG1hX2FkYy5yZWFkeSkKLQkJCXJldHVybiAwOwotCQlwb2xsX3dhaXQoZmlsZSwgJnMtPmRtYV9hZGMud2FpdCwgd2FpdCk7Ci0JfQotCQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJaWYgKHMtPmRtYV9hZGMuY291bnQgPj0gKHNpZ25lZClzLT5kbWFfYWRjLmZyYWdzaXplKQotCQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCX0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJaWYgKHMtPmRtYV9kYWMubWFwcGVkKSB7Ci0JCQlpZiAocy0+ZG1hX2RhYy5jb3VudCA+PSAoc2lnbmVkKXMtPmRtYV9kYWMuZnJhZ3NpemUpIAotCQkJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKHNpZ25lZClzLT5kbWFfZGFjLmRtYXNpemUgPj0KLQkJCSAgICBzLT5kbWFfZGFjLmNvdW50ICsgKHNpZ25lZClzLT5kbWFfZGFjLmZyYWdzaXplKQotCQkJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCXJldHVybiBtYXNrOwotfQotCi1zdGF0aWMgaW50IGl0ODE3Ml9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzID0gKHN0cnVjdCBpdDgxNzJfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRtYWJ1ZiAqZGI7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCi0JbG9ja19rZXJuZWwoKTsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKQotCQlkYiA9ICZzLT5kbWFfZGFjOwotCWVsc2UgaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKQotCQlkYiA9ICZzLT5kbWFfYWRjOwotCWVsc2UgewotCQl1bmxvY2tfa2VybmVsKCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAodm1hLT52bV9wZ29mZiAhPSAwKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JaWYgKHNpemUgPiAoUEFHRV9TSVpFIDw8IGRiLT5idWZvcmRlcikpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCi0JCQkgICAgIHZpcnRfdG9fcGh5cyhkYi0+cmF3YnVmKSA+PiBQQUdFX1NISUZULAotCQkJICAgICBzaXplLCB2bWEtPnZtX3BhZ2VfcHJvdCkpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0JZGItPm1hcHBlZCA9IDE7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAwOwotfQotCi0KLSNpZmRlZiBJVDgxNzJfVkVSQk9TRV9ERUJVRwotc3RhdGljIHN0cnVjdCBpb2N0bF9zdHJfdCB7Ci0JdW5zaWduZWQgaW50IGNtZDsKLQljb25zdCBjaGFyKiBzdHI7Ci19IGlvY3RsX3N0cltdID0gewotCXtTTkRDVExfRFNQX1JFU0VULCAiU05EQ1RMX0RTUF9SRVNFVCJ9LAotCXtTTkRDVExfRFNQX1NZTkMsICJTTkRDVExfRFNQX1NZTkMifSwKLQl7U05EQ1RMX0RTUF9TUEVFRCwgIlNORENUTF9EU1BfU1BFRUQifSwKLQl7U05EQ1RMX0RTUF9TVEVSRU8sICJTTkRDVExfRFNQX1NURVJFTyJ9LAotCXtTTkRDVExfRFNQX0dFVEJMS1NJWkUsICJTTkRDVExfRFNQX0dFVEJMS1NJWkUifSwKLQl7U05EQ1RMX0RTUF9TQU1QTEVTSVpFLCAiU05EQ1RMX0RTUF9TQU1QTEVTSVpFIn0sCi0Je1NORENUTF9EU1BfQ0hBTk5FTFMsICJTTkRDVExfRFNQX0NIQU5ORUxTIn0sCi0Je1NPVU5EX1BDTV9XUklURV9DSEFOTkVMUywgIlNPVU5EX1BDTV9XUklURV9DSEFOTkVMUyJ9LAotCXtTT1VORF9QQ01fV1JJVEVfRklMVEVSLCAiU09VTkRfUENNX1dSSVRFX0ZJTFRFUiJ9LAotCXtTTkRDVExfRFNQX1BPU1QsICJTTkRDVExfRFNQX1BPU1QifSwKLQl7U05EQ1RMX0RTUF9TVUJESVZJREUsICJTTkRDVExfRFNQX1NVQkRJVklERSJ9LAotCXtTTkRDVExfRFNQX1NFVEZSQUdNRU5ULCAiU05EQ1RMX0RTUF9TRVRGUkFHTUVOVCJ9LAotCXtTTkRDVExfRFNQX0dFVEZNVFMsICJTTkRDVExfRFNQX0dFVEZNVFMifSwKLQl7U05EQ1RMX0RTUF9TRVRGTVQsICJTTkRDVExfRFNQX1NFVEZNVCJ9LAotCXtTTkRDVExfRFNQX0dFVE9TUEFDRSwgIlNORENUTF9EU1BfR0VUT1NQQUNFIn0sCi0Je1NORENUTF9EU1BfR0VUSVNQQUNFLCAiU05EQ1RMX0RTUF9HRVRJU1BBQ0UifSwKLQl7U05EQ1RMX0RTUF9OT05CTE9DSywgIlNORENUTF9EU1BfTk9OQkxPQ0sifSwKLQl7U05EQ1RMX0RTUF9HRVRDQVBTLCAiU05EQ1RMX0RTUF9HRVRDQVBTIn0sCi0Je1NORENUTF9EU1BfR0VUVFJJR0dFUiwgIlNORENUTF9EU1BfR0VUVFJJR0dFUiJ9LAotCXtTTkRDVExfRFNQX1NFVFRSSUdHRVIsICJTTkRDVExfRFNQX1NFVFRSSUdHRVIifSwKLQl7U05EQ1RMX0RTUF9HRVRJUFRSLCAiU05EQ1RMX0RTUF9HRVRJUFRSIn0sCi0Je1NORENUTF9EU1BfR0VUT1BUUiwgIlNORENUTF9EU1BfR0VUT1BUUiJ9LAotCXtTTkRDVExfRFNQX01BUElOQlVGLCAiU05EQ1RMX0RTUF9NQVBJTkJVRiJ9LAotCXtTTkRDVExfRFNQX01BUE9VVEJVRiwgIlNORENUTF9EU1BfTUFQT1VUQlVGIn0sCi0Je1NORENUTF9EU1BfU0VUU1lOQ1JPLCAiU05EQ1RMX0RTUF9TRVRTWU5DUk8ifSwKLQl7U05EQ1RMX0RTUF9TRVREVVBMRVgsICJTTkRDVExfRFNQX1NFVERVUExFWCJ9LAotCXtTTkRDVExfRFNQX0dFVE9ERUxBWSwgIlNORENUTF9EU1BfR0VUT0RFTEFZIn0sCi0Je1NORENUTF9EU1BfR0VUQ0hBTk5FTE1BU0ssICJTTkRDVExfRFNQX0dFVENIQU5ORUxNQVNLIn0sCi0Je1NORENUTF9EU1BfQklORF9DSEFOTkVMLCAiU05EQ1RMX0RTUF9CSU5EX0NIQU5ORUwifSwKLQl7T1NTX0dFVFZFUlNJT04sICJPU1NfR0VUVkVSU0lPTiJ9LAotCXtTT1VORF9QQ01fUkVBRF9SQVRFLCAiU09VTkRfUENNX1JFQURfUkFURSJ9LAotCXtTT1VORF9QQ01fUkVBRF9DSEFOTkVMUywgIlNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTIn0sCi0Je1NPVU5EX1BDTV9SRUFEX0JJVFMsICJTT1VORF9QQ01fUkVBRF9CSVRTIn0sCi0Je1NPVU5EX1BDTV9SRUFEX0ZJTFRFUiwgIlNPVU5EX1BDTV9SRUFEX0ZJTFRFUiJ9Ci19OwotI2VuZGlmICAgIAotCi1zdGF0aWMgaW50IGl0ODE3Ml9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBpdDgxNzJfc3RhdGUgKnMgPSAoc3RydWN0IGl0ODE3Ml9zdGF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWF1ZGlvX2J1Zl9pbmZvIGFiaW5mbzsKLQljb3VudF9pbmZvIGNpbmZvOwotCWludCBjb3VudDsKLQlpbnQgdmFsLCBtYXBwZWQsIHJldCwgZGlmZjsKLQotCW1hcHBlZCA9ICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmIHMtPmRtYV9kYWMubWFwcGVkKSB8fAotCQkoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpICYmIHMtPmRtYV9hZGMubWFwcGVkKTsKLQotI2lmZGVmIElUODE3Ml9WRVJCT1NFX0RFQlVHCi0JZm9yIChjb3VudD0wOyBjb3VudDxzaXplb2YoaW9jdGxfc3RyKS9zaXplb2YoaW9jdGxfc3RyWzBdKTsgY291bnQrKykgewotCQlpZiAoaW9jdGxfc3RyW2NvdW50XS5jbWQgPT0gY21kKQotCQkJYnJlYWs7Ci0JfQotCWlmIChjb3VudCA8IHNpemVvZihpb2N0bF9zdHIpL3NpemVvZihpb2N0bF9zdHJbMF0pKQotCQlkYmcoImlvY3RsICVzLCBhcmc9MHglMDh4IiwKLQkJICAgIGlvY3RsX3N0cltjb3VudF0uc3RyLCAodW5zaWduZWQgaW50KWFyZyk7Ci0JZWxzZQotCQlkYmcoImlvY3RsIHVua25vd24sIDB4JXgiLCBjbWQpOwotI2VuZGlmCi0gICAgCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIE9TU19HRVRWRVJTSU9OOgotCQlyZXR1cm4gcHV0X3VzZXIoU09VTkRfVkVSU0lPTiwgKGludCAqKWFyZyk7Ci0KLQljYXNlIFNORENUTF9EU1BfU1lOQzoKLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQotCQkJcmV0dXJuIGRyYWluX2RhYyhzLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JCXJldHVybiAwOwotCQkKLQljYXNlIFNORENUTF9EU1BfU0VURFVQTEVYOgotCQlyZXR1cm4gMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9HRVRDQVBTOgotCQlyZXR1cm4gcHV0X3VzZXIoRFNQX0NBUF9EVVBMRVggfCBEU1BfQ0FQX1JFQUxUSU1FIHwKLQkJCQlEU1BfQ0FQX1RSSUdHRVIgfCBEU1BfQ0FQX01NQVAsIChpbnQgKilhcmcpOwotCQkKLQljYXNlIFNORENUTF9EU1BfUkVTRVQ6Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJc3RvcF9kYWMocyk7Ci0JCQlzeW5jaHJvbml6ZV9pcnEocy0+aXJxKTsKLQkJCXMtPmRtYV9kYWMuY291bnQgPSBzLT5kbWFfZGFjLnRvdGFsX2J5dGVzID0gMDsKLQkJCXMtPmRtYV9kYWMubmV4dEluID0gcy0+ZG1hX2RhYy5uZXh0T3V0ID0KLQkJCQlzLT5kbWFfZGFjLnJhd2J1ZjsKLQkJfQotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQkJc3RvcF9hZGMocyk7Ci0JCQlzeW5jaHJvbml6ZV9pcnEocy0+aXJxKTsKLQkJCXMtPmRtYV9hZGMuY291bnQgPSBzLT5kbWFfYWRjLnRvdGFsX2J5dGVzID0gMDsKLQkJCXMtPmRtYV9hZGMubmV4dEluID0gcy0+ZG1hX2FkYy5uZXh0T3V0ID0KLQkJCQlzLT5kbWFfYWRjLnJhd2J1ZjsKLQkJfQotCQlyZXR1cm4gMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9TUEVFRDoKLQkJaWYgKGdldF91c2VyKHZhbCwgKGludCAqKWFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZhbCA+PSAwKSB7Ci0JCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQkJCXN0b3BfYWRjKHMpOwotCQkJCXNldF9hZGNfcmF0ZShzLCB2YWwpOwotCQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfYWRjKHMpKSkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJCXN0b3BfZGFjKHMpOwotCQkJCXNldF9kYWNfcmF0ZShzLCB2YWwpOwotCQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfZGFjKHMpKSkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcHV0X3VzZXIoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8KLQkJCQlzLT5hZGNyYXRlIDogcy0+ZGFjcmF0ZSwgKGludCAqKWFyZyk7Ci0KLQljYXNlIFNORENUTF9EU1BfU1RFUkVPOgotCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50ICopYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQkJc3RvcF9hZGMocyk7Ci0JCQlpZiAodmFsKQotCQkJCXMtPmNhcGNjIHw9IENDX1NNOwotCQkJZWxzZQotCQkJCXMtPmNhcGNjICY9IH5DQ19TTTsKLQkJCW91dHcocy0+Y2FwY2MsIHMtPmlvK0lUX0FDX0NBUENDKTsKLQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfYWRjKHMpKSkKLQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJc3RvcF9kYWMocyk7Ci0JCQlpZiAodmFsKQotCQkJCXMtPnBjYyB8PSBDQ19TTTsKLQkJCWVsc2UKLQkJCQlzLT5wY2MgJj0gfkNDX1NNOwotCQkJb3V0dyhzLT5wY2MsIHMtPmlvK0lUX0FDX1BDQyk7Ci0JCQlpZiAoKHJldCA9IHByb2dfZG1hYnVmX2RhYyhzKSkpCi0JCQkJcmV0dXJuIHJldDsKLQkJfQotCQlyZXR1cm4gMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9DSEFOTkVMUzoKLQkJaWYgKGdldF91c2VyKHZhbCwgKGludCAqKWFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZhbCAhPSAwKSB7Ci0JCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQkJCXN0b3BfYWRjKHMpOwotCQkJCWlmICh2YWwgPj0gMikgewotCQkJCQl2YWwgPSAyOwotCQkJCQlzLT5jYXBjYyB8PSBDQ19TTTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCQlzLT5jYXBjYyAmPSB+Q0NfU007Ci0JCQkJb3V0dyhzLT5jYXBjYywgcy0+aW8rSVRfQUNfQ0FQQ0MpOwotCQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfYWRjKHMpKSkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJCXN0b3BfZGFjKHMpOwotCQkJCXN3aXRjaCAodmFsKSB7Ci0JCQkJY2FzZSAxOgotCQkJCQlzLT5wY2MgJj0gfkNDX1NNOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDI6Ci0JCQkJCXMtPnBjYyB8PSBDQ19TTTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJLy8gRklYISBzdXBwb3J0IG11bHRpY2hhbm5lbD8/PwotCQkJCQl2YWwgPSAyOwotCQkJCQlzLT5wY2MgfD0gQ0NfU007Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlvdXR3KHMtPnBjYywgcy0+aW8rSVRfQUNfUENDKTsKLQkJCQlpZiAoKHJldCA9IHByb2dfZG1hYnVmX2RhYyhzKSkpCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGludCAqKWFyZyk7Ci0JCQotCWNhc2UgU05EQ1RMX0RTUF9HRVRGTVRTOiAvKiBSZXR1cm5zIGEgbWFzayAqLwotCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9TMTZfTEV8QUZNVF9VOCwgKGludCAqKWFyZyk7Ci0JCQotCWNhc2UgU05EQ1RMX0RTUF9TRVRGTVQ6IC8qIFNlbGVjdHMgT05FIGZtdCovCi0JCWlmIChnZXRfdXNlcih2YWwsIChpbnQgKilhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh2YWwgIT0gQUZNVF9RVUVSWSkgewotCQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJCQlzdG9wX2FkYyhzKTsKLQkJCQlpZiAodmFsID09IEFGTVRfUzE2X0xFKQotCQkJCQlzLT5jYXBjYyB8PSBDQ19ERjsKLQkJCQllbHNlIHsKLQkJCQkJdmFsID0gQUZNVF9VODsKLQkJCQkJcy0+Y2FwY2MgJj0gfkNDX0RGOwotCQkJCX0KLQkJCQlvdXR3KHMtPmNhcGNjLCBzLT5pbytJVF9BQ19DQVBDQyk7Ci0JCQkJaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9hZGMocykpKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7Ci0JCQkJc3RvcF9kYWMocyk7Ci0JCQkJaWYgKHZhbCA9PSBBRk1UX1MxNl9MRSkKLQkJCQkJcy0+cGNjIHw9IENDX0RGOwotCQkJCWVsc2UgewotCQkJCQl2YWwgPSBBRk1UX1U4OwotCQkJCQlzLT5wY2MgJj0gfkNDX0RGOwotCQkJCX0KLQkJCQlvdXR3KHMtPnBjYywgcy0+aW8rSVRfQUNfUENDKTsKLQkJCQlpZiAoKHJldCA9IHByb2dfZG1hYnVmX2RhYyhzKSkpCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJCQl2YWwgPSAocy0+Y2FwY2MgJiBDQ19ERikgPwotCQkJCQlBRk1UX1MxNl9MRSA6IEFGTVRfVTg7Ci0JCQllbHNlCi0JCQkJdmFsID0gKHMtPnBjYyAmIENDX0RGKSA/Ci0JCQkJCUFGTVRfUzE2X0xFIDogQUZNVF9VODsKLQkJfQotCQlyZXR1cm4gcHV0X3VzZXIodmFsLCAoaW50ICopYXJnKTsKLQkJCi0JY2FzZSBTTkRDVExfRFNQX1BPU1Q6Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTTkRDVExfRFNQX0dFVFRSSUdHRVI6Ci0JCXZhbCA9IDA7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEICYmICFzLT5kbWFfYWRjLnN0b3BwZWQpCi0JCQl2YWwgfD0gUENNX0VOQUJMRV9JTlBVVDsKLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFICYmICFzLT5kbWFfZGFjLnN0b3BwZWQpCi0JCQl2YWwgfD0gUENNX0VOQUJMRV9PVVRQVVQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGludCAqKWFyZyk7Ci0JCQotCWNhc2UgU05EQ1RMX0RTUF9TRVRUUklHR0VSOgotCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50ICopYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQkJaWYgKHZhbCAmIFBDTV9FTkFCTEVfSU5QVVQpCi0JCQkJc3RhcnRfYWRjKHMpOwotCQkJZWxzZQotCQkJCXN0b3BfYWRjKHMpOwotCQl9Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJaWYgKHZhbCAmIFBDTV9FTkFCTEVfT1VUUFVUKQotCQkJCXN0YXJ0X2RhYyhzKTsKLQkJCWVsc2UKLQkJCQlzdG9wX2RhYyhzKTsKLQkJfQotCQlyZXR1cm4gMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9HRVRPU1BBQ0U6Ci0JCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlhYmluZm8uZnJhZ3NpemUgPSBzLT5kbWFfZGFjLmZyYWdzaXplOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQljb3VudCA9IHMtPmRtYV9kYWMuY291bnQ7Ci0JCWlmICghcy0+ZG1hX2RhYy5zdG9wcGVkKQotCQkJY291bnQgLT0gKHMtPmRtYV9kYWMuZnJhZ3NpemUgLQotCQkJCSAgaW53KHMtPmlvK0lUX0FDX1BDREwpKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlpZiAoY291bnQgPCAwKQotCQkJY291bnQgPSAwOwotCQlhYmluZm8uYnl0ZXMgPSBzLT5kbWFfZGFjLmRtYXNpemUgLSBjb3VudDsKLQkJYWJpbmZvLmZyYWdzdG90YWwgPSBzLT5kbWFfZGFjLm51bWZyYWc7Ci0JCWFiaW5mby5mcmFnbWVudHMgPSBhYmluZm8uYnl0ZXMgPj4gcy0+ZG1hX2RhYy5mcmFnc2hpZnQ7ICAgICAgCi0JCXJldHVybiBjb3B5X3RvX3VzZXIoKHZvaWQgKilhcmcsICZhYmluZm8sIHNpemVvZihhYmluZm8pKSA/Ci0JCQktRUZBVUxUIDogMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9HRVRJU1BBQ0U6Ci0JCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWFiaW5mby5mcmFnc2l6ZSA9IHMtPmRtYV9hZGMuZnJhZ3NpemU7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWNvdW50ID0gcy0+ZG1hX2FkYy5jb3VudDsKLQkJaWYgKCFzLT5kbWFfYWRjLnN0b3BwZWQpCi0JCQljb3VudCArPSAocy0+ZG1hX2FkYy5mcmFnc2l6ZSAtCi0JCQkJICBpbncocy0+aW8rSVRfQUNfQ0FQQ0RMKSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGNvdW50IDwgMCkKLQkJCWNvdW50ID0gMDsKLQkJYWJpbmZvLmJ5dGVzID0gY291bnQ7Ci0JCWFiaW5mby5mcmFnc3RvdGFsID0gcy0+ZG1hX2FkYy5udW1mcmFnOwotCQlhYmluZm8uZnJhZ21lbnRzID0gYWJpbmZvLmJ5dGVzID4+IHMtPmRtYV9hZGMuZnJhZ3NoaWZ0OyAgICAgIAotCQlyZXR1cm4gY29weV90b191c2VyKCh2b2lkICopYXJnLCAmYWJpbmZvLCBzaXplb2YoYWJpbmZvKSkgPwotCQkJLUVGQVVMVCA6IDA7Ci0JCQotCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKLQkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9HRVRPREVMQVk6Ci0JCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQljb3VudCA9IHMtPmRtYV9kYWMuY291bnQ7Ci0JCWlmICghcy0+ZG1hX2RhYy5zdG9wcGVkKQotCQkJY291bnQgLT0gKHMtPmRtYV9kYWMuZnJhZ3NpemUgLQotCQkJCSAgaW53KHMtPmlvK0lUX0FDX1BDREwpKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlpZiAoY291bnQgPCAwKQotCQkJY291bnQgPSAwOwotCQlyZXR1cm4gcHV0X3VzZXIoY291bnQsIChpbnQgKilhcmcpOwotCi0JY2FzZSBTTkRDVExfRFNQX0dFVElQVFI6Ci0JCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWNpbmZvLmJ5dGVzID0gcy0+ZG1hX2FkYy50b3RhbF9ieXRlczsKLQkJY291bnQgPSBzLT5kbWFfYWRjLmNvdW50OwotCQlpZiAoIXMtPmRtYV9hZGMuc3RvcHBlZCkgewotCQkJZGlmZiA9IHMtPmRtYV9hZGMuZnJhZ3NpemUgLSBpbncocy0+aW8rSVRfQUNfQ0FQQ0RMKTsKLQkJCWNvdW50ICs9IGRpZmY7Ci0JCQljaW5mby5ieXRlcyArPSBkaWZmOwotCQkJY2luZm8ucHRyID0gaW5sKHMtPmlvK3MtPmRtYV9hZGMuY3VyQnVmUHRyKSAtCi0JCQkJcy0+ZG1hX2FkYy5kbWFhZGRyOwotCQl9IGVsc2UKLQkJCWNpbmZvLnB0ciA9IHZpcnRfdG9fYnVzKHMtPmRtYV9hZGMubmV4dEluKSAtCi0JCQkJcy0+ZG1hX2FkYy5kbWFhZGRyOwotCQlpZiAocy0+ZG1hX2FkYy5tYXBwZWQpCi0JCQlzLT5kbWFfYWRjLmNvdW50ICY9IHMtPmRtYV9hZGMuZnJhZ3NpemUtMTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlpZiAoY291bnQgPCAwKQotCQkJY291bnQgPSAwOwotCQljaW5mby5ibG9ja3MgPSBjb3VudCA+PiBzLT5kbWFfYWRjLmZyYWdzaGlmdDsKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAqKWFyZywgJmNpbmZvLCBzaXplb2YoY2luZm8pKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9HRVRPUFRSOgotCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQljaW5mby5ieXRlcyA9IHMtPmRtYV9kYWMudG90YWxfYnl0ZXM7Ci0JCWNvdW50ID0gcy0+ZG1hX2RhYy5jb3VudDsKLQkJaWYgKCFzLT5kbWFfZGFjLnN0b3BwZWQpIHsKLQkJCWRpZmYgPSBzLT5kbWFfZGFjLmZyYWdzaXplIC0gaW53KHMtPmlvK0lUX0FDX0NBUENETCk7Ci0JCQljb3VudCAtPSBkaWZmOwotCQkJY2luZm8uYnl0ZXMgKz0gZGlmZjsKLQkJCWNpbmZvLnB0ciA9IGlubChzLT5pbytzLT5kbWFfZGFjLmN1ckJ1ZlB0cikgLQotCQkJCXMtPmRtYV9kYWMuZG1hYWRkcjsKLQkJfSBlbHNlCi0JCQljaW5mby5wdHIgPSB2aXJ0X3RvX2J1cyhzLT5kbWFfZGFjLm5leHRPdXQpIC0KLQkJCQlzLT5kbWFfZGFjLmRtYWFkZHI7Ci0JCWlmIChzLT5kbWFfZGFjLm1hcHBlZCkKLQkJCXMtPmRtYV9kYWMuY291bnQgJj0gcy0+ZG1hX2RhYy5mcmFnc2l6ZS0xOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjb3VudCA8IDApCi0JCQljb3VudCA9IDA7Ci0JCWNpbmZvLmJsb2NrcyA9IGNvdW50ID4+IHMtPmRtYV9kYWMuZnJhZ3NoaWZ0OwotCQlpZiAoY29weV90b191c2VyKCh2b2lkICopYXJnLCAmY2luZm8sIHNpemVvZihjaW5mbykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTTkRDVExfRFNQX0dFVEJMS1NJWkU6Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKLQkJCXJldHVybiBwdXRfdXNlcihzLT5kbWFfZGFjLmZyYWdzaXplLCAoaW50ICopYXJnKTsKLQkJZWxzZQotCQkJcmV0dXJuIHB1dF91c2VyKHMtPmRtYV9hZGMuZnJhZ3NpemUsIChpbnQgKilhcmcpOwotCi0JY2FzZSBTTkRDVExfRFNQX1NFVEZSQUdNRU5UOgotCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50ICopYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQkJc3RvcF9hZGMocyk7Ci0JCQlzLT5kbWFfYWRjLm9zc2ZyYWdzaGlmdCA9IHZhbCAmIDB4ZmZmZjsKLQkJCXMtPmRtYV9hZGMub3NzbWF4ZnJhZ3MgPSAodmFsID4+IDE2KSAmIDB4ZmZmZjsKLQkJCWlmIChzLT5kbWFfYWRjLm9zc2ZyYWdzaGlmdCA8IDQpCi0JCQkJcy0+ZG1hX2FkYy5vc3NmcmFnc2hpZnQgPSA0OwotCQkJaWYgKHMtPmRtYV9hZGMub3NzZnJhZ3NoaWZ0ID4gMTUpCi0JCQkJcy0+ZG1hX2FkYy5vc3NmcmFnc2hpZnQgPSAxNTsKLQkJCWlmIChzLT5kbWFfYWRjLm9zc21heGZyYWdzIDwgNCkKLQkJCQlzLT5kbWFfYWRjLm9zc21heGZyYWdzID0gNDsKLQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfYWRjKHMpKSkKLQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJc3RvcF9kYWMocyk7Ci0JCQlzLT5kbWFfZGFjLm9zc2ZyYWdzaGlmdCA9IHZhbCAmIDB4ZmZmZjsKLQkJCXMtPmRtYV9kYWMub3NzbWF4ZnJhZ3MgPSAodmFsID4+IDE2KSAmIDB4ZmZmZjsKLQkJCWlmIChzLT5kbWFfZGFjLm9zc2ZyYWdzaGlmdCA8IDQpCi0JCQkJcy0+ZG1hX2RhYy5vc3NmcmFnc2hpZnQgPSA0OwotCQkJaWYgKHMtPmRtYV9kYWMub3NzZnJhZ3NoaWZ0ID4gMTUpCi0JCQkJcy0+ZG1hX2RhYy5vc3NmcmFnc2hpZnQgPSAxNTsKLQkJCWlmIChzLT5kbWFfZGFjLm9zc21heGZyYWdzIDwgNCkKLQkJCQlzLT5kbWFfZGFjLm9zc21heGZyYWdzID0gNDsKLQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfZGFjKHMpKSkKLQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTTkRDVExfRFNQX1NVQkRJVklERToKLQkJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEICYmIHMtPmRtYV9hZGMuc3ViZGl2aXNpb24pIHx8Ci0JCSAgICAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUgJiYgcy0+ZG1hX2RhYy5zdWJkaXZpc2lvbikpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGdldF91c2VyKHZhbCwgKGludCAqKWFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZhbCAhPSAxICYmIHZhbCAhPSAyICYmIHZhbCAhPSA0KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQlzdG9wX2FkYyhzKTsKLQkJCXMtPmRtYV9hZGMuc3ViZGl2aXNpb24gPSB2YWw7Ci0JCQlpZiAoKHJldCA9IHByb2dfZG1hYnVmX2FkYyhzKSkpCi0JCQkJcmV0dXJuIHJldDsKLQkJfQotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJCXN0b3BfZGFjKHMpOwotCQkJcy0+ZG1hX2RhYy5zdWJkaXZpc2lvbiA9IHZhbDsKLQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfZGFjKHMpKSkKLQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTT1VORF9QQ01fUkVBRF9SQVRFOgotCQlyZXR1cm4gcHV0X3VzZXIoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8KLQkJCQlzLT5hZGNyYXRlIDogcy0+ZGFjcmF0ZSwgKGludCAqKWFyZyk7Ci0KLQljYXNlIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTOgotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJCXJldHVybiBwdXRfdXNlcigocy0+Y2FwY2MgJiBDQ19TTSkgPyAyIDogMSwKLQkJCQkJKGludCAqKWFyZyk7Ci0JCWVsc2UKLQkJCXJldHVybiBwdXRfdXNlcigocy0+cGNjICYgQ0NfU00pID8gMiA6IDEsCi0JCQkJCShpbnQgKilhcmcpOwotCSAgICAKLQljYXNlIFNPVU5EX1BDTV9SRUFEX0JJVFM6Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQkJcmV0dXJuIHB1dF91c2VyKChzLT5jYXBjYyAmIENDX0RGKSA/IDE2IDogOCwKLQkJCQkJKGludCAqKWFyZyk7Ci0JCWVsc2UKLQkJCXJldHVybiBwdXRfdXNlcigocy0+cGNjICYgQ0NfREYpID8gMTYgOiA4LAotCQkJCQkoaW50ICopYXJnKTsKLQotCWNhc2UgU09VTkRfUENNX1dSSVRFX0ZJTFRFUjoKLQljYXNlIFNORENUTF9EU1BfU0VUU1lOQ1JPOgotCWNhc2UgU09VTkRfUENNX1JFQURfRklMVEVSOgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gbWl4ZGV2X2lvY3RsKCZzLT5jb2RlYywgY21kLCBhcmcpOwotfQotCi0KLXN0YXRpYyBpbnQgaXQ4MTcyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0Jc3RydWN0IGl0ODE3Ml9zdGF0ZSAqczsKLQlpbnQgcmV0OwotICAgIAotI2lmZGVmIElUODE3Ml9WRVJCT1NFX0RFQlVHCi0JaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQotCQlkYmcoIiVzOiBub24tYmxvY2tpbmciLCBfX0ZVTkNUSU9OX18pOwotCWVsc2UKLQkJZGJnKCIlczogYmxvY2tpbmciLCBfX0ZVTkNUSU9OX18pOwotI2VuZGlmCi0JCi0JZm9yIChsaXN0ID0gZGV2cy5uZXh0OyA7IGxpc3QgPSBsaXN0LT5uZXh0KSB7Ci0JCWlmIChsaXN0ID09ICZkZXZzKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCXMgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBpdDgxNzJfc3RhdGUsIGRldnMpOwotCQlpZiAoISgocy0+ZGV2X2F1ZGlvIF4gbWlub3IpICYgfjB4ZikpCi0JCQlicmVhazsKLQl9Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gczsKLQkvKiB3YWl0IGZvciBkZXZpY2UgdG8gYmVjb21lIGZyZWUgKi8KLQltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKLQl3aGlsZSAocy0+b3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSB7Ci0JCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQkJYWRkX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7Ci0JCXNjaGVkdWxlKCk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCXMtPmRtYV9hZGMub3NzZnJhZ3NoaWZ0ID0gcy0+ZG1hX2FkYy5vc3NtYXhmcmFncyA9Ci0JCQlzLT5kbWFfYWRjLnN1YmRpdmlzaW9uID0gcy0+ZG1hX2FkYy50b3RhbF9ieXRlcyA9IDA7Ci0JCXMtPmNhcGNjICY9IH4oQ0NfU00gfCBDQ19ERik7Ci0JCXNldF9hZGNfcmF0ZShzLCA4MDAwKTsKLQkJaWYgKChtaW5vciAmIDB4ZikgPT0gU05EX0RFVl9EU1AxNikKLQkJCXMtPmNhcGNjIHw9IENDX0RGOwotCQlvdXR3KHMtPmNhcGNjLCBzLT5pbytJVF9BQ19DQVBDQyk7Ci0JCWlmICgocmV0ID0gcHJvZ19kbWFidWZfYWRjKHMpKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJcy0+ZG1hX2RhYy5vc3NmcmFnc2hpZnQgPSBzLT5kbWFfZGFjLm9zc21heGZyYWdzID0KLQkJCXMtPmRtYV9kYWMuc3ViZGl2aXNpb24gPSBzLT5kbWFfZGFjLnRvdGFsX2J5dGVzID0gMDsKLQkJcy0+cGNjICY9IH4oQ0NfU00gfCBDQ19ERik7Ci0JCXNldF9kYWNfcmF0ZShzLCA4MDAwKTsKLQkJaWYgKChtaW5vciAmIDB4ZikgPT0gU05EX0RFVl9EU1AxNikKLQkJCXMtPnBjYyB8PSBDQ19ERjsKLQkJb3V0dyhzLT5wY2MsIHMtPmlvK0lUX0FDX1BDQyk7Ci0JCWlmICgocmV0ID0gcHJvZ19kbWFidWZfZGFjKHMpKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLSAgICAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0KLQlzLT5vcGVuX21vZGUgfD0gKGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKTsKLQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwotCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIGludCBpdDgxNzJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzID0gKHN0cnVjdCBpdDgxNzJfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLSNpZmRlZiBJVDgxNzJfVkVSQk9TRV9ERUJVRwotCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwotI2VuZGlmCi0JbG9ja19rZXJuZWwoKTsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCWRyYWluX2RhYyhzLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7Ci0JCXN0b3BfZGFjKHMpOwotCQlkZWFsbG9jX2RtYWJ1ZihzLCAmcy0+ZG1hX2RhYyk7Ci0JfQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCXN0b3BfYWRjKHMpOwotCQlkZWFsbG9jX2RtYWJ1ZihzLCAmcy0+ZG1hX2FkYyk7Ci0JfQotCXMtPm9wZW5fbW9kZSAmPSAoKH5maWxlLT5mX21vZGUpICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKTsKLQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwotCXdha2VfdXAoJnMtPm9wZW5fd2FpdCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgLypjb25zdCovIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXQ4MTcyX2F1ZGlvX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAotCS5yZWFkCQk9IGl0ODE3Ml9yZWFkLAotCS53cml0ZQkJPSBpdDgxNzJfd3JpdGUsCi0JLnBvbGwJCT0gaXQ4MTcyX3BvbGwsCi0JLmlvY3RsCQk9IGl0ODE3Ml9pb2N0bCwKLQkubW1hcAkJPSBpdDgxNzJfbW1hcCwKLQkub3BlbgkJPSBpdDgxNzJfb3BlbiwKLQkucmVsZWFzZQk9IGl0ODE3Ml9yZWxlYXNlLAotfTsKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHdlJ2xsIGNyZWF0ZSBhIHByb2MgZGV2aWNlIHRoYXQgZHVtcHMgdGhlCi0gKiBDT0RFQyBjaGlwc3RhdGUKLSAqLwotCi0jaWZkZWYgSVQ4MTcyX0RFQlVHCi1zdGF0aWMgaW50IHByb2NfaXQ4MTcyX2R1bXAgKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBmcG9zLAotCQkJICAgICBpbnQgbGVuZ3RoLCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzOwotCWludCBjbnQsIGxlbiA9IDA7Ci0KLQlpZiAobGlzdF9lbXB0eSgmZGV2cykpCi0JCXJldHVybiAwOwotCXMgPSBsaXN0X2VudHJ5KGRldnMubmV4dCwgc3RydWN0IGl0ODE3Ml9zdGF0ZSwgZGV2cyk7Ci0KLQkvKiBwcmludCBvdXQgaGVhZGVyICovCi0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiXG5cdFx0SVQ4MTcyIEF1ZGlvIERlYnVnXG5cbiIpOwotCi0JLy8gcHJpbnQgb3V0IGRpZ2l0YWwgY29udHJvbGxlciBzdGF0ZQotCWxlbiArPSBzcHJpbnRmIChidWYgKyBsZW4sICJJVDgxNzIgQXVkaW8gQ29udHJvbGxlciByZWdpc3RlcnNcbiIpOwotCWxlbiArPSBzcHJpbnRmIChidWYgKyBsZW4sICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCWNudD0wOwotCXdoaWxlIChjbnQgPCAweDcyKSB7Ci0JCWlmIChjbnQgPT0gSVRfQUNfUENCMVNUQSB8fCBjbnQgPT0gSVRfQUNfUENCMlNUQSB8fAotCQkgICAgY250ID09IElUX0FDX0NBUEIxU1RBIHx8IGNudCA9PSBJVF9BQ19DQVBCMlNUQSB8fAotCQkgICAgY250ID09IElUX0FDX1BGRFApIHsKLQkJCWxlbis9IHNwcmludGYgKGJ1ZiArIGxlbiwgInJlZyAlMDJ4ID0gJTA4eFxuIiwKLQkJCQkgICAgICAgY250LCBpbmwocy0+aW8rY250KSk7Ci0JCQljbnQgKz0gNDsKLQkJfSBlbHNlIHsKLQkJCWxlbis9IHNwcmludGYgKGJ1ZiArIGxlbiwgInJlZyAlMDJ4ID0gJTA0eFxuIiwKLQkJCQkgICAgICAgY250LCBpbncocy0+aW8rY250KSk7Ci0JCQljbnQgKz0gMjsKLQkJfQotCX0KLSAgICAKLQkvKiBwcmludCBvdXQgQ09ERUMgc3RhdGUgKi8KLQlsZW4gKz0gc3ByaW50ZiAoYnVmICsgbGVuLCAiXG5BQzk3IENPREVDIHJlZ2lzdGVyc1xuIik7Ci0JbGVuICs9IHNwcmludGYgKGJ1ZiArIGxlbiwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCWZvciAoY250PTA7IGNudCA8PSAweDdlOyBjbnQgPSBjbnQgKzIpCi0JCWxlbis9IHNwcmludGYgKGJ1ZiArIGxlbiwgInJlZyAlMDJ4ID0gJTA0eFxuIiwKLQkJCSAgICAgICBjbnQsIHJkY29kZWMoJnMtPmNvZGVjLCBjbnQpKTsKLQotCWlmIChmcG9zID49bGVuKXsKLQkJKnN0YXJ0ID0gYnVmOwotCQkqZW9mID0xOwotCQlyZXR1cm4gMDsKLQl9Ci0JKnN0YXJ0ID0gYnVmICsgZnBvczsKLQlpZiAoKGxlbiAtPSBmcG9zKSA+IGxlbmd0aCkKLQkJcmV0dXJuIGxlbmd0aDsKLQkqZW9mID0xOwotCXJldHVybiBsZW47Ci0KLX0KLSNlbmRpZiAvKiBJVDgxNzJfREVCVUcgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIG1heGltdW0gbnVtYmVyIG9mIGRldmljZXM7IG9ubHkgdXNlZCBmb3IgY29tbWFuZCBsaW5lIHBhcmFtcyAqLwotI2RlZmluZSBOUl9ERVZJQ0UgNQotCi1zdGF0aWMgaW50IHNwZGlmW05SX0RFVklDRV07Ci1zdGF0aWMgaW50IGkyc19mbXRbTlJfREVWSUNFXTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBkZXZpbmRleDsKLQotbW9kdWxlX3BhcmFtX2FycmF5KHNwZGlmLCBpbnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzcGRpZiwgImlmIDEgdGhlIFMvUERJRiBkaWdpdGFsIG91dHB1dCBpcyBlbmFibGVkIik7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoaTJzX2ZtdCwgaW50LCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaTJzX2ZtdCwgInRoZSBmb3JtYXQgb2YgSTJTIik7Ci0KLU1PRFVMRV9BVVRIT1IoIk1vbnRhIFZpc3RhIFNvZnR3YXJlLCBzdGV2ZWxAbXZpc3RhLmNvbSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJVDgxNzIgQXVkaW8gRHJpdmVyIik7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpdDgxNzJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwKLQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lpZCkKLXsKLQlzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzOwotCWludCBpLCB2YWw7Ci0JdW5zaWduZWQgc2hvcnQgcGNpc3IsIHZvbDsKLQl1bnNpZ25lZCBjaGFyIGxlZ2FjeSwgaW1jOwotCWNoYXIgcHJvY19zdHJbODBdOwotICAgIAotCWlmIChwY2lkZXYtPmlycSA9PSAwKSAKLQkJcmV0dXJuIC0xOwotCi0JaWYgKCEocyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpdDgxNzJfc3RhdGUpLCBHRlBfS0VSTkVMKSkpIHsKLQkJZXJyKCJhbGxvYyBvZiBkZXZpY2Ugc3RydWN0IGZhaWxlZCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCQotCW1lbXNldChzLCAwLCBzaXplb2Yoc3RydWN0IGl0ODE3Ml9zdGF0ZSkpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPmRtYV9hZGMud2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+ZG1hX2RhYy53YWl0KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5vcGVuX3dhaXQpOwotCW11dGV4X2luaXQoJnMtPm9wZW5fbXV0ZXgpOwotCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKLQlzLT5kZXYgPSBwY2lkZXY7Ci0Jcy0+aW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKLQlzLT5pcnEgPSBwY2lkZXYtPmlycTsKLQlzLT52ZW5kb3IgPSBwY2lkZXYtPnZlbmRvcjsKLQlzLT5kZXZpY2UgPSBwY2lkZXYtPmRldmljZTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnMtPnJldik7Ci0Jcy0+Y29kZWMucHJpdmF0ZV9kYXRhID0gczsKLQlzLT5jb2RlYy5pZCA9IDA7Ci0Jcy0+Y29kZWMuY29kZWNfcmVhZCA9IHJkY29kZWM7Ci0Jcy0+Y29kZWMuY29kZWNfd3JpdGUgPSB3cmNvZGVjOwotCXMtPmNvZGVjLmNvZGVjX3dhaXQgPSB3YWl0Y29kZWM7Ci0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKHMtPmlvLCBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwwKSwKLQkJCSAgICBJVDgxNzJfTU9EVUxFX05BTUUpKSB7Ci0JCWVycigiaW8gcG9ydHMgJSNseC0+JSNseCBpbiB1c2UiLAotCQkgICAgcy0+aW8sIHMtPmlvICsgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsMCktMSk7Ci0JCWdvdG8gZXJyX3JlZ2lvbjsKLQl9Ci0JaWYgKHJlcXVlc3RfaXJxKHMtPmlycSwgaXQ4MTcyX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKLQkJCUlUODE3Ml9NT0RVTEVfTkFNRSwgcykpIHsKLQkJZXJyKCJpcnEgJXUgaW4gdXNlIiwgcy0+aXJxKTsKLQkJZ290byBlcnJfaXJxOwotCX0KLQotCWluZm8oIklPIGF0ICUjbHgsIElSUSAlZCIsIHMtPmlvLCBzLT5pcnEpOwotCi0JLyogcmVnaXN0ZXIgZGV2aWNlcyAqLwotCWlmICgocy0+ZGV2X2F1ZGlvID0gcmVnaXN0ZXJfc291bmRfZHNwKCZpdDgxNzJfYXVkaW9fZm9wcywgLTEpKSA8IDApCi0JCWdvdG8gZXJyX2RldjE7Ci0JaWYgKChzLT5jb2RlYy5kZXZfbWl4ZXIgPQotCSAgICAgcmVnaXN0ZXJfc291bmRfbWl4ZXIoJml0ODE3Ml9taXhlcl9mb3BzLCAtMSkpIDwgMCkKLQkJZ290byBlcnJfZGV2MjsKLQotI2lmZGVmIElUODE3Ml9ERUJVRwotCS8qIGluaXRpYWxpemUgdGhlIGRlYnVnIHByb2MgZGV2aWNlICovCi0Jcy0+cHMgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KElUODE3Ml9NT0RVTEVfTkFNRSwgMCwgTlVMTCwKLQkJCQkgICAgICAgcHJvY19pdDgxNzJfZHVtcCwgTlVMTCk7Ci0jZW5kaWYgLyogSVQ4MTcyX0RFQlVHICovCi0JCi0JLyoKLQkgKiBSZXNldCB0aGUgQXVkaW8gZGV2aWNlIHVzaW5nIHRoZSBJVDgxNzIgUENJIFJlc2V0IHJlZ2lzdGVyLiBUaGlzCi0JICogY3JlYXRlcyBhbiBhdWRpYmxlIGRvdWJsZSBjbGljayBvbiBhIHNwZWFrZXIgY29ubmVjdGVkIHRvIExpbmUtb3V0LgotCSAqLwotCUlUX0lPX1JFQUQxNihJVF9QTV9QQ0lTUiwgcGNpc3IpOwotCXBjaXNyIHw9IElUX1BNX1BDSVNSX0FDU1I7Ci0JSVRfSU9fV1JJVEUxNihJVF9QTV9QQ0lTUiwgcGNpc3IpOwotCS8qIHdhaXQgdXAgdG8gMTAwbXNlYyBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi8KLQlmb3IgKGk9MDsgcGNpc3IgJiBJVF9QTV9QQ0lTUl9BQ1NSOyBpKyspIHsKLQkJaXQ4MTcyX2RlbGF5KDEwKTsKLQkJaWYgKGkgPT0gMTApCi0JCQlicmVhazsKLQkJSVRfSU9fUkVBRDE2KElUX1BNX1BDSVNSLCBwY2lzcik7Ci0JfQotCWlmIChpID09IDEwKSB7Ci0JCWVycigiY2hpcCByZXNldCB0aW1lb3V0ISIpOwotCQlnb3RvIGVycl9kZXYzOwotCX0KLSAgICAKLQkvKiBlbmFibGUgcGNpIGlvIGFuZCBidXMgbWFzdGVyaW5nICovCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaWRldikpCi0JCWdvdG8gZXJyX2RldjM7Ci0JcGNpX3NldF9tYXN0ZXIocGNpZGV2KTsKLQotCS8qIGdldCBvdXQgb2YgbGVnYWN5IG1vZGUgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZSAocGNpZGV2LCAweDQwLCAmbGVnYWN5KTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUgKHBjaWRldiwgMHg0MCwgbGVnYWN5ICYgfjEpOwotICAgIAotCXMtPnNwZGlmX3ZvbHVtZSA9IC0xOwotCS8qIGNoZWNrIHRvIHNlZSBpZiBzL3BkaWYgbW9kZSBpcyBiZWluZyByZXF1ZXN0ZWQgKi8KLQlpZiAoc3BkaWZbZGV2aW5kZXhdKSB7Ci0JCWluZm8oImVuYWJsaW5nIFMvUERJRiBvdXRwdXQiKTsKLQkJcy0+c3BkaWZfdm9sdW1lID0gMDsKLQkJb3V0YihHQ19TT0UsIHMtPmlvK0lUX0FDX0dDKTsKLQl9IGVsc2UgewotCQlpbmZvKCJkaXNhYmxpbmcgUy9QRElGIG91dHB1dCIpOwotCQlvdXRiKDAsIHMtPmlvK0lUX0FDX0dDKTsKLQl9Ci0gICAgCi0JLyogY2hlY2sgdG8gc2VlIGlmIEkyUyBmb3JtYXQgcmVxdWVzdGVkICovCi0JaWYgKGkyc19mbXRbZGV2aW5kZXhdKSB7Ci0JCWluZm8oInNldHRpbmcgSTJTIGZvcm1hdCB0byAweCUwMngiLCBpMnNfZm10W2RldmluZGV4XSk7Ci0JCW91dGIoaTJzX2ZtdFtkZXZpbmRleF0sIHMtPmlvK0lUX0FDX0kyU01DKTsKLQl9IGVsc2UgewotCQlvdXRiKEkyU01DX0kyU0ZfSTJTLCBzLT5pbytJVF9BQ19JMlNNQyk7Ci0JfQotCi0JLyogY29sZCByZXNldCB0aGUgQUM5NyAqLwotCW91dHcoQ09ERUNDX0NSLCBzLT5pbytJVF9BQ19DT0RFQ0MpOwotCXVkZWxheSgxMDAwKTsKLQlvdXR3KDAsIHMtPmlvK0lUX0FDX0NPREVDQyk7Ci0JLyogbmVlZCB0byBkZWxheSBhcm91bmQgNTAwbXNlYyhibGVlY2gpIHRvIGdpdmUKLQkgICBzb21lIENPREVDcyBlbm91Z2ggdGltZSB0byB3YWtldXAgKi8KLQlpdDgxNzJfZGVsYXkoNTAwKTsKLSAgICAKLQkvKiBBQzk3IHdhcm0gcmVzZXQgdG8gc3RhcnQgdGhlIGJpdGNsayAqLwotCW91dHcoQ09ERUNDX1dSLCBzLT5pbytJVF9BQ19DT0RFQ0MpOwotCXVkZWxheSgxMDAwKTsKLQlvdXR3KDAsIHMtPmlvK0lUX0FDX0NPREVDQyk7Ci0gICAgCi0JLyogY29kZWMgaW5pdCAqLwotCWlmICghYWM5N19wcm9iZV9jb2RlYygmcy0+Y29kZWMpKQotCQlnb3RvIGVycl9kZXYzOwotCi0JLyogYWRkIEkyUyBhcyBhbGxvd2FibGUgcmVjb3JkaW5nIHNvdXJjZSAqLwotCXMtPmNvZGVjLnJlY29yZF9zb3VyY2VzIHw9IFNPVU5EX01BU0tfSTJTOwotCQotCS8qIEVuYWJsZSBWb2x1bWUgYnV0dG9uIGludGVycnVwdHMgKi8KLQlpbWMgPSBpbmIocy0+aW8rSVRfQUNfSU1DKTsKLQlvdXRiKGltYyAmIH5JTUNfVkNJTSwgcy0+aW8rSVRfQUNfSU1DKTsKLQotCS8qIFVuLW11dGUgUENNIGFuZCBGTSBvdXQgb24gdGhlIGNvbnRyb2xsZXIgKi8KLQl2b2wgPSBpbncocy0+aW8rSVRfQUNfUENNT1YpOwotCW91dHcodm9sICYgflBDTU9WX1BDTU9NLCBzLT5pbytJVF9BQ19QQ01PVik7Ci0Jdm9sID0gaW53KHMtPmlvK0lUX0FDX0ZNT1YpOwotCW91dHcodm9sICYgfkZNT1ZfRk1PTSwgcy0+aW8rSVRfQUNfRk1PVik7Ci0gICAgCi0JLyogc2V0IGNoYW5uZWwgZGVmYXVsdHMgdG8gOC1iaXQsIG1vbm8sIDggS2h6ICovCi0Jcy0+cGNjID0gMDsKLQlzLT5jYXBjYyA9IDA7Ci0Jc2V0X2RhY19yYXRlKHMsIDgwMDApOwotCXNldF9hZGNfcmF0ZShzLCA4MDAwKTsKLQotCS8qIHNldCBtaWMgdG8gYmUgdGhlIHJlY29yZGluZyBzb3VyY2UgKi8KLQl2YWwgPSBTT1VORF9NQVNLX01JQzsKLQltaXhkZXZfaW9jdGwoJnMtPmNvZGVjLCBTT1VORF9NSVhFUl9XUklURV9SRUNTUkMsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcpJnZhbCk7Ci0KLQkvKiBtdXRlIEFDJzk3IG1hc3RlciBhbmQgUENNIHdoZW4gaW4gUy9QRElGIG1vZGUgKi8KLQlpZiAocy0+c3BkaWZfdm9sdW1lICE9IC0xKSB7Ci0JCXZhbCA9IDB4MDAwMDsKLQkJcy0+Y29kZWMubWl4ZXJfaW9jdGwoJnMtPmNvZGVjLCBTT1VORF9NSVhFUl9XUklURV9WT0xVTUUsCi0JCQkJICAgICAodW5zaWduZWQgbG9uZykmdmFsKTsKLQkJcy0+Y29kZWMubWl4ZXJfaW9jdGwoJnMtPmNvZGVjLCBTT1VORF9NSVhFUl9XUklURV9QQ00sCi0JCQkJICAgICAodW5zaWduZWQgbG9uZykmdmFsKTsKLQl9Ci0gICAgCi0jaWZkZWYgSVQ4MTcyX0RFQlVHCi0Jc3ByaW50Zihwcm9jX3N0ciwgImRyaXZlci8lcy8lZC9hYzk3IiwgSVQ4MTcyX01PRFVMRV9OQU1FLAotCQlzLT5jb2RlYy5pZCk7Ci0Jcy0+YWM5N19wcyA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkgKHByb2Nfc3RyLCAwLCBOVUxMLAotCQkJCQkgICAgIGFjOTdfcmVhZF9wcm9jLCAmcy0+Y29kZWMpOwotI2VuZGlmCi0gICAgCi0JLyogc3RvcmUgaXQgaW4gdGhlIGRyaXZlciBmaWVsZCAqLwotCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIHMpOwotCXBjaWRldi0+ZG1hX21hc2sgPSAweGZmZmZmZmZmOwotCS8qIHB1dCBpdCBpbnRvIGRyaXZlciBsaXN0ICovCi0JbGlzdF9hZGRfdGFpbCgmcy0+ZGV2cywgJmRldnMpOwotCS8qIGluY3JlbWVudCBkZXZpbmRleCAqLwotCWlmIChkZXZpbmRleCA8IE5SX0RFVklDRS0xKQotCQlkZXZpbmRleCsrOwotCXJldHVybiAwOwotCi0gZXJyX2RldjM6Ci0JdW5yZWdpc3Rlcl9zb3VuZF9taXhlcihzLT5jb2RlYy5kZXZfbWl4ZXIpOwotIGVycl9kZXYyOgotCXVucmVnaXN0ZXJfc291bmRfZHNwKHMtPmRldl9hdWRpbyk7Ci0gZXJyX2RldjE6Ci0JZXJyKCJjYW5ub3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2UiKTsKLQlmcmVlX2lycShzLT5pcnEsIHMpOwotIGVycl9pcnE6Ci0JcmVsZWFzZV9yZWdpb24ocy0+aW8sIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LDApKTsKLSBlcnJfcmVnaW9uOgotCWtmcmVlKHMpOwotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0IGl0ODE3Ml9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlzdHJ1Y3QgaXQ4MTcyX3N0YXRlICpzID0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0KLQlpZiAoIXMpCi0JCXJldHVybjsKLQlsaXN0X2RlbCgmcy0+ZGV2cyk7Ci0jaWZkZWYgSVQ4MTcyX0RFQlVHCi0JaWYgKHMtPnBzKQotCQlyZW1vdmVfcHJvY19lbnRyeShJVDgxNzJfTU9EVUxFX05BTUUsIE5VTEwpOwotI2VuZGlmIC8qIElUODE3Ml9ERUJVRyAqLwotCXN5bmNocm9uaXplX2lycShzLT5pcnEpOwotCWZyZWVfaXJxKHMtPmlycSwgcyk7Ci0JcmVsZWFzZV9yZWdpb24ocy0+aW8sIHBjaV9yZXNvdXJjZV9sZW4oZGV2LDApKTsKLQl1bnJlZ2lzdGVyX3NvdW5kX2RzcChzLT5kZXZfYXVkaW8pOwotCXVucmVnaXN0ZXJfc291bmRfbWl4ZXIocy0+Y29kZWMuZGV2X21peGVyKTsKLQlrZnJlZShzKTsKLQlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKLX0KLQotCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9JVEUsIFBDSV9ERVZJQ0VfSURfSVRFX0lUODE3MkdfQVVESU8sIFBDSV9BTllfSUQsCi0JICBQQ0lfQU5ZX0lELCAwLCAwIH0sCi0JeyAwLCB9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaWRfdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaXQ4MTcyX2RyaXZlciA9IHsKLQkubmFtZSA9IElUODE3Ml9NT0RVTEVfTkFNRSwKLQkuaWRfdGFibGUgPSBpZF90YWJsZSwKLQkucHJvYmUgPSBpdDgxNzJfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGl0ODE3Ml9yZW1vdmUpCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2l0ODE3Mih2b2lkKQotewotCWluZm8oInZlcnNpb24gdjAuNSB0aW1lICIgX19USU1FX18gIiAiIF9fREFURV9fKTsKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXQ4MTcyX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2l0ODE3Mih2b2lkKQotewotCWluZm8oInVubG9hZGluZyIpOwotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXQ4MTcyX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfaXQ4MTcyKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfaXQ4MTcyKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZm5kZWYgTU9EVUxFCi0KLS8qIGZvcm1hdCBpczogaXQ4MTcyPVtzcGRpZl0sW2kyczo8STJTIGZvcm1hdD5dICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGl0ODE3Ml9zZXR1cChjaGFyICpvcHRpb25zKQotewotCWNoYXIqIHRoaXNfb3B0OwotCXN0YXRpYyB1bnNpZ25lZCBfX2luaXRkYXRhIG5yX2RldiA9IDA7Ci0KLQlpZiAobnJfZGV2ID49IE5SX0RFVklDRSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQotCQlyZXR1cm4gMDsKLQotCXdoaWxlICh0aGlzX29wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgewotCQlpZiAoISp0aGlzX29wdCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXN0cm5jbXAodGhpc19vcHQsICJzcGRpZiIsIDUpKSB7Ci0JCQlzcGRpZltucl9kZXZdID0gMTsKLQkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgImkyczoiLCA0KSkgewotCQkJaWYgKCFzdHJuY21wKHRoaXNfb3B0KzQsICJkYWMiLCAzKSkKLQkJCQlpMnNfZm10W25yX2Rldl0gPSBJMlNNQ19JMlNGX0RBQzsKLQkJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0KzQsICJhZGMiLCAzKSkKLQkJCQlpMnNfZm10W25yX2Rldl0gPSBJMlNNQ19JMlNGX0FEQzsKLQkJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0KzQsICJpMnMiLCAzKSkKLQkJCQlpMnNfZm10W25yX2Rldl0gPSBJMlNNQ19JMlNGX0kyUzsKLQkJfQotCX0KLQotCW5yX2RldisrOwotCXJldHVybiAxOwotfQotCi1fX3NldHVwKCJpdDgxNzI9IiwgaXQ4MTcyX3NldHVwKTsKLQotI2VuZGlmIC8qIE1PRFVMRSAqLwo=