ZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTMxY2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnCkBAIC0wLDAgKzEsMTc3IEBACittZW51Y29uZmlnIFBPV0VSX1JFU0VUCisJYm9vbCAiQm9hcmQgbGV2ZWwgcmVzZXQgb3IgcG93ZXIgb2ZmIgorCWhlbHAKKwkgIFByb3ZpZGVzIGEgbnVtYmVyIG9mIGRyaXZlcnMgd2hpY2ggZWl0aGVyIHJlc2V0IGEgY29tcGxldGUgYm9hcmQKKwkgIG9yIHNodXQgaXQgZG93biwgYnkgbWFuaXB1bGF0aW5nIHRoZSBtYWluIHBvd2VyIHN1cHBseSBvbiB0aGUgYm9hcmQuCisKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGJvYXJkIHJlc2V0IGFuZCBwb3dlciBvZmYKKworaWYgUE9XRVJfUkVTRVQKKworY29uZmlnIFBPV0VSX1JFU0VUX0FTMzcyMgorCWJvb2wgImFtcyBBUzM3MjIgcG93ZXItb2ZmIGRyaXZlciIKKwlkZXBlbmRzIG9uIE1GRF9BUzM3MjIKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0dXJuaW5nIG9mZiBib2FyZCB2aWEgYSBhbXMgQVMzNzIyIHBvd2VyLW9mZi4KKworY29uZmlnIFBPV0VSX1JFU0VUX0FUOTFfUE9XRVJPRkYKKwl0cmlzdGF0ZSAiQXRtZWwgQVQ5MSBwb3dlcm9mZiBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTEKKwlkZWZhdWx0IFNPQ19BVDkxU0FNOSB8fCBTT0NfU0FNQTUKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBwb3dlcm9mZiBmb3IgQXRtZWwgQVQ5MVNBTTkgYW5kIFNBTUE1CisJICBTb0NzCisKK2NvbmZpZyBQT1dFUl9SRVNFVF9BVDkxX1JFU0VUCisJdHJpc3RhdGUgIkF0bWVsIEFUOTEgcmVzZXQgZHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9BVDkxCisJZGVmYXVsdCBTT0NfQVQ5MVNBTTkgfHwgU09DX1NBTUE1CisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgcmVzdGFydCBmb3IgQXRtZWwgQVQ5MVNBTTkgYW5kIFNBTUE1CisJICBTb0NzCisKK2NvbmZpZyBQT1dFUl9SRVNFVF9BWFhJQQorCWJvb2wgIkxTSSBBeHhpYSByZXNldCBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUkNIX0FYWElBCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgcmVzdGFydCBmb3IgQXh4aWEgU29DLgorCisJICBTYXkgWSBpZiB5b3UgaGF2ZSBhbiBBeHhpYSBmYW1pbHkgU29DLgorCitjb25maWcgUE9XRVJfUkVTRVRfQlJDTVNUQgorCWJvb2wgIkJyb2FkY29tIFNUQiByZXNldCBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUk0gfHwgTUlQUyB8fCBDT01QSUxFX1RFU1QKKwlkZXBlbmRzIG9uIE1GRF9TWVNDT04KKwlkZWZhdWx0IEFSQ0hfQlJDTVNUQgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHJlc3RhcnQgc3VwcG9ydCBmb3IgQnJvYWRjb20gU1RCIGJvYXJkcy4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIEJyb2FkY29tIFNUQiBib2FyZCBhbmQgeW91IHdpc2gKKwkgIHRvIGhhdmUgcmVzdGFydCBzdXBwb3J0LgorCitjb25maWcgUE9XRVJfUkVTRVRfR1BJTworCWJvb2wgIkdQSU8gcG93ZXItb2ZmIGRyaXZlciIKKwlkZXBlbmRzIG9uIE9GX0dQSU8KKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0dXJuaW5nIG9mZiB5b3VyIGJvYXJkIHZpYSBhIEdQSU8gbGluZS4KKwkgIElmIHlvdXIgYm9hcmQgbmVlZHMgYSBHUElPIGhpZ2gvbG93IHRvIHBvd2VyIGRvd24sIHNheSBZIGFuZAorCSAgY3JlYXRlIGEgYmluZGluZyBpbiB5b3VyIGRldmljZXRyZWUuCisKK2NvbmZpZyBQT1dFUl9SRVNFVF9HUElPX1JFU1RBUlQKKwlib29sICJHUElPIHJlc3RhcnQgZHJpdmVyIgorCWRlcGVuZHMgb24gT0ZfR1BJTworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHJlc3RhcnRpbmcgeW91ciBib2FyZCB2aWEgYSBHUElPIGxpbmUuCisJICBJZiB5b3VyIGJvYXJkIG5lZWRzIGEgR1BJTyBoaWdoL2xvdyB0byByZXN0YXJ0LCBzYXkgWSBhbmQKKwkgIGNyZWF0ZSBhIGJpbmRpbmcgaW4geW91ciBkZXZpY2V0cmVlLgorCitjb25maWcgUE9XRVJfUkVTRVRfSElTSQorCWJvb2wgIkhpc2lsaWNvbiBwb3dlci1vZmYgZHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9ISVNJCisJaGVscAorCSAgUmVib290IHN1cHBvcnQgZm9yIEhpc2lsaWNvbiBib2FyZHMuCisKK2NvbmZpZyBQT1dFUl9SRVNFVF9JTVgKKwlib29sICJJTVg2IHBvd2VyLW9mZiBkcml2ZXIiCisJZGVwZW5kcyBvbiBQT1dFUl9SRVNFVCAmJiBTT0NfSU1YNgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnQgcG93ZXIgb2ZmIGV4dGVybmFsIFBNSUMgYnkgUE1JQ19PTl9SRVEgb24gaS5teDYKKwkgIGJvYXJkcy5JZiB5b3Ugd2FudCB0byB1c2Ugb3RoZXIgcGluIHRvIGNvbnRyb2wgZXh0ZXJuYWwgcG93ZXIscGxlYXNlCisJICBzYXkgTiBoZXJlIG9yIGRpc2FibGUgaW4gZHRzIHRvIG1ha2Ugc3VyZSBwbV9wb3dlcl9vZmYgbmV2ZXIgYmUKKwkgIG92ZXJ3cm90ZSB3cm9uZ2x5IGJ5IHRoaXMgZHJpdmVyLgorCitjb25maWcgUE9XRVJfUkVTRVRfTVNNCisJYm9vbCAiUXVhbGNvbW0gTVNNIHBvd2VyLW9mZiBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUkNIX1FDT00KKwloZWxwCisJICBQb3dlciBvZmYgYW5kIHJlc3RhcnQgc3VwcG9ydCBmb3IgUXVhbGNvbW0gYm9hcmRzLgorCitjb25maWcgUE9XRVJfUkVTRVRfTFRDMjk1MgorCWJvb2wgIkxUQzI5NTIgUG93ZXJQYXRoIHBvd2VyLW9mZiBkcml2ZXIiCisJZGVwZW5kcyBvbiBPRl9HUElPCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYW4gZXh0ZXJuYWwgcG93ZXJkb3duIHRyaWdnZXIgYW5kIGJvYXJkIHBvd2VyCisJICBkb3duIHZpYSB0aGUgTFRDMjk1Mi4gQmluZGluZ3MgYXJlIG1hZGUgaW4gdGhlIGRldmljZSB0cmVlLgorCitjb25maWcgUE9XRVJfUkVTRVRfUU5BUAorCWJvb2wgIlFOQVAgcG93ZXItb2ZmIGRyaXZlciIKKwlkZXBlbmRzIG9uIE9GX0dQSU8gJiYgUExBVF9PUklPTgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHR1cm5pbmcgb2ZmIFFOQVAgTkFTIGRldmljZXMgYnkgc2VuZGluZworCSAgY29tbWFuZHMgdG8gdGhlIG1pY3JvY29udHJvbGxlciB3aGljaCBjb250cm9scyB0aGUgbWFpbiBwb3dlci4KKworCSAgU2F5IFkgaWYgeW91IGhhdmUgYSBRTkFQIE5BUy4KKworY29uZmlnIFBPV0VSX1JFU0VUX1JFU1RBUlQKKwlib29sICJSZXN0YXJ0IHBvd2VyLW9mZiBkcml2ZXIiCisJaGVscAorCSAgU29tZSBib2FyZHMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSB0aGUgYWJpbGl0eSB0byBwb3dlciBvZmYuCisJICBJbnN0ZWFkIHRoZXkgcmVzdGFydCwgYW5kIHUtYm9vdCBob2xkcyB0aGUgU29DIHVudGlsIHRoZQorCSAgdXNlciBwcmVzc2VzIGEga2V5LiB1LWJvb3QgdGhlbiBib290cyBpbnRvIExpbnV4LgorCitjb25maWcgUE9XRVJfUkVTRVRfU1QKKwlib29sICJTVCByZXN0YXJ0IGRyaXZlciIKKwlkZXBlbmRzIG9uIEFSQ0hfU1RJCisJaGVscAorCSAgUmVzZXQgc3VwcG9ydCBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzIGJvYXJkcy4KKworY29uZmlnIFBPV0VSX1JFU0VUX1ZFUlNBVElMRQorCWJvb2wgIkFSTSBWZXJzYXRpbGUgZmFtaWx5IHJlYm9vdCBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUk0KKwlkZXBlbmRzIG9uIE1GRF9TWVNDT04KKwlkZXBlbmRzIG9uIE9GCisJaGVscAorCSAgUG93ZXIgb2ZmIGFuZCByZXN0YXJ0IHN1cHBvcnQgZm9yIEFSTSBWZXJzYXRpbGUgZmFtaWx5IG9mCisJICByZWZlcmVuY2UgYm9hcmRzLgorCitjb25maWcgUE9XRVJfUkVTRVRfVkVYUFJFU1MKKwlib29sICJBUk0gVmVyc2F0aWxlIEV4cHJlc3MgcG93ZXItb2ZmIGFuZCByZXNldCBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUk0gfHwgQVJNNjQKKwlkZXBlbmRzIG9uIFZFWFBSRVNTX0NPTkZJRworCWhlbHAKKwkgIFBvd2VyIG9mZiBhbmQgcmVzZXQgc3VwcG9ydCBmb3IgdGhlIEFSTSBMdGQuIFZlcnNhdGlsZQorCSAgRXhwcmVzcyBib2FyZHMuCisKK2NvbmZpZyBQT1dFUl9SRVNFVF9YR0VORQorCWJvb2wgIkFQTSBTb0MgWC1HZW5lIHJlc2V0IGRyaXZlciIKKwlkZXBlbmRzIG9uIEFSTTY0CisJaGVscAorCSAgUmVib290IHN1cHBvcnQgZm9yIHRoZSBBUE0gU29DIFgtR2VuZSBFdmFsIGJvYXJkcy4KKworY29uZmlnIFBPV0VSX1JFU0VUX0tFWVNUT05FCisJYm9vbCAiS2V5c3RvbmUgcmVzZXQgZHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9LRVlTVE9ORQorCXNlbGVjdCBNRkRfU1lTQ09OCisJaGVscAorCSAgUmVib290IHN1cHBvcnQgZm9yIHRoZSBLRVlTVE9ORSBTb0NzLgorCitjb25maWcgUE9XRVJfUkVTRVRfU1lTQ09OCisJYm9vbCAiR2VuZXJpYyBTWVNDT04gcmVnbWFwIHJlc2V0IGRyaXZlciIKKwlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IE1GRF9TWVNDT04KKwloZWxwCisJICBSZWJvb3Qgc3VwcG9ydCBmb3IgZ2VuZXJpYyBTWVNDT04gbWFwcGVkIHJlZ2lzdGVyIHJlc2V0LgorCitjb25maWcgUE9XRVJfUkVTRVRfU1lTQ09OX1BPV0VST0ZGCisJYm9vbCAiR2VuZXJpYyBTWVNDT04gcmVnbWFwIHBvd2Vyb2ZmIGRyaXZlciIKKwlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IE1GRF9TWVNDT04KKwloZWxwCisJICBQb3dlcm9mZiBzdXBwb3J0IGZvciBnZW5lcmljIFNZU0NPTiBtYXBwZWQgcmVnaXN0ZXIgcG93ZXJvZmYuCisKK2NvbmZpZyBQT1dFUl9SRVNFVF9STU9CSUxFCisJdHJpc3RhdGUgIlJlbmVzYXMgUi1Nb2JpbGUgcmVzZXQgZHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9STU9CSUxFIHx8IENPTVBJTEVfVEVTVAorCWRlcGVuZHMgb24gSEFTX0lPTUVNCisJaGVscAorCSAgUmVib290IHN1cHBvcnQgZm9yIFJlbmVzYXMgUi1Nb2JpbGUgYW5kIFNILU1vYmlsZSBTb0NzLgorCitjb25maWcgUE9XRVJfUkVTRVRfWlgKKwl0cmlzdGF0ZSAiWlRFIFNvQ3MgcmVzZXQgZHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9aWCB8fCBDT01QSUxFX1RFU1QKKwlkZXBlbmRzIG9uIEhBU19JT01FTQorCWhlbHAKKwkgIFJlYm9vdCBzdXBwb3J0IGZvciBaVEUgU29Dcy4KKworZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9NYWtlZmlsZSBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2ZmE2NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvTWFrZWZpbGUKQEAgLTAsMCArMSwyMiBAQAorb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX0FTMzcyMikgKz0gYXMzNzIyLXBvd2Vyb2ZmLm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9BVDkxX1BPV0VST0ZGKSArPSBhdDkxLXBvd2Vyb2ZmLm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9BVDkxX1JFU0VUKSArPSBhdDkxLXJlc2V0Lm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9BWFhJQSkgKz0gYXh4aWEtcmVzZXQubworb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX0JSQ01TVEIpICs9IGJyY21zdGItcmVib290Lm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9HUElPKSArPSBncGlvLXBvd2Vyb2ZmLm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9HUElPX1JFU1RBUlQpICs9IGdwaW8tcmVzdGFydC5vCitvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfSElTSSkgKz0gaGlzaS1yZWJvb3Qubworb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX0lNWCkgKz0gaW14LXNudnMtcG93ZXJvZmYubworb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX01TTSkgKz0gbXNtLXBvd2Vyb2ZmLm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9MVEMyOTUyKSArPSBsdGMyOTUyLXBvd2Vyb2ZmLm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9RTkFQKSArPSBxbmFwLXBvd2Vyb2ZmLm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9SRVNUQVJUKSArPSByZXN0YXJ0LXBvd2Vyb2ZmLm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9TVCkgKz0gc3QtcG93ZXJvZmYubworb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1ZFUlNBVElMRSkgKz0gYXJtLXZlcnNhdGlsZS1yZWJvb3Qubworb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1ZFWFBSRVNTKSArPSB2ZXhwcmVzcy1wb3dlcm9mZi5vCitvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfWEdFTkUpICs9IHhnZW5lLXJlYm9vdC5vCitvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfS0VZU1RPTkUpICs9IGtleXN0b25lLXJlc2V0Lm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9TWVNDT04pICs9IHN5c2Nvbi1yZWJvb3Qubworb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1NZU0NPTl9QT1dFUk9GRikgKz0gc3lzY29uLXBvd2Vyb2ZmLm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9STU9CSUxFKSArPSBybW9iaWxlLXJlc2V0Lm8KK29iai0kKENPTkZJR19QT1dFUl9SRVNFVF9aWCkgKz0gengtcmVib290Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXJtLXZlcnNhdGlsZS1yZWJvb3QuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXJtLXZlcnNhdGlsZS1yZWJvb3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjA4MDczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9hcm0tdmVyc2F0aWxlLXJlYm9vdC5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IExpbmFybyBMdGQuCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX0NUUkxfT0ZGU0VUCTB4MEMKKyNkZWZpbmUgSU5URUdSQVRPUl9IRFJfTE9DS19PRkZTRVQJMHgxNAorI2RlZmluZSBJTlRFR1JBVE9SX0NNX0NUUkxfUkVTRVQJKDEgPDwgMykKKworI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS19PRkZTRVQJMHgyMAorI2RlZmluZSBSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VUCTB4NDAKKworLyogTWFnaWMgdW5sb2NraW5nIHRva2VuIHVzZWQgb24gYWxsIFZlcnNhdGlsZSBib2FyZHMgKi8KKyNkZWZpbmUgVkVSU0FUSUxFX0xPQ0tfVkFMCQkweEEwNUYKKworLyoKKyAqIFdlIGRldGVjdCB0aGUgZGlmZmVyZW50IHN5c2NvbiB0eXBlcyBmcm9tIHRoZSBjb21wYXRpYmxlIHN0cmluZ3MuCisgKi8KK2VudW0gdmVyc2F0aWxlX3JlYm9vdCB7CisJSU5URUdSQVRPUl9SRUJPT1RfQ00sCisJUkVBTFZJRVdfUkVCT09UX0VCLAorCVJFQUxWSUVXX1JFQk9PVF9QQjExNzYsCisJUkVBTFZJRVdfUkVCT09UX1BCMTFNUCwKKwlSRUFMVklFV19SRUJPT1RfUEJBOCwKKwlSRUFMVklFV19SRUJPT1RfUEJYLAorfTsKKworLyogUG9pbnRlciB0byB0aGUgc3lzdGVtIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwICpzeXNjb25fcmVnbWFwOworc3RhdGljIGVudW0gdmVyc2F0aWxlX3JlYm9vdCB2ZXJzYXRpbGVfcmVib290X3R5cGU7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHZlcnNhdGlsZV9yZWJvb3Rfb2ZfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gImFybSxjb3JlLW1vZHVsZS1pbnRlZ3JhdG9yIiwKKwkJLmRhdGEgPSAodm9pZCAqKUlOVEVHUkFUT1JfUkVCT09UX0NNCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1lYi1zeXNjb24iLAorCQkuZGF0YSA9ICh2b2lkICopUkVBTFZJRVdfUkVCT09UX0VCLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGIxMTc2LXN5c2NvbiIsCisJCS5kYXRhID0gKHZvaWQgKilSRUFMVklFV19SRUJPT1RfUEIxMTc2LAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGIxMW1wLXN5c2NvbiIsCisJCS5kYXRhID0gKHZvaWQgKilSRUFMVklFV19SRUJPT1RfUEIxMU1QLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctcGJhOC1zeXNjb24iLAorCQkuZGF0YSA9ICh2b2lkICopUkVBTFZJRVdfUkVCT09UX1BCQTgsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYngtc3lzY29uIiwKKwkJLmRhdGEgPSAodm9pZCAqKVJFQUxWSUVXX1JFQk9PVF9QQlgsCisJfSwKKwl7fSwKK307CisKK3N0YXRpYyBpbnQgdmVyc2F0aWxlX3JlYm9vdChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgbW9kZSwKKwkJCSAgICB2b2lkICpjbWQpCit7CisJLyogVW5sb2NrIHRoZSByZXNldCByZWdpc3RlciAqLworCS8qIFRoZW4gaGl0IHJlc2V0IG9uIHRoZSBkaWZmZXJlbnQgbWFjaGluZXMgKi8KKwlzd2l0Y2ggKHZlcnNhdGlsZV9yZWJvb3RfdHlwZSkgeworCWNhc2UgSU5URUdSQVRPUl9SRUJPT1RfQ006CisJCXJlZ21hcF93cml0ZShzeXNjb25fcmVnbWFwLCBJTlRFR1JBVE9SX0hEUl9MT0NLX09GRlNFVCwKKwkJCSAgICAgVkVSU0FUSUxFX0xPQ0tfVkFMKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHN5c2Nvbl9yZWdtYXAsCisJCQkJICAgSU5URUdSQVRPUl9IRFJfQ1RSTF9PRkZTRVQsCisJCQkJICAgSU5URUdSQVRPUl9DTV9DVFJMX1JFU0VULAorCQkJCSAgIElOVEVHUkFUT1JfQ01fQ1RSTF9SRVNFVCk7CisJCWJyZWFrOworCWNhc2UgUkVBTFZJRVdfUkVCT09UX0VCOgorCQlyZWdtYXBfd3JpdGUoc3lzY29uX3JlZ21hcCwgUkVBTFZJRVdfU1lTX0xPQ0tfT0ZGU0VULAorCQkJICAgICBWRVJTQVRJTEVfTE9DS19WQUwpOworCQlyZWdtYXBfd3JpdGUoc3lzY29uX3JlZ21hcCwKKwkJCSAgICAgUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVCwgMHgwMDA4KTsKKwkJYnJlYWs7CisJY2FzZSBSRUFMVklFV19SRUJPT1RfUEIxMTc2OgorCQlyZWdtYXBfd3JpdGUoc3lzY29uX3JlZ21hcCwgUkVBTFZJRVdfU1lTX0xPQ0tfT0ZGU0VULAorCQkJICAgICBWRVJTQVRJTEVfTE9DS19WQUwpOworCQlyZWdtYXBfd3JpdGUoc3lzY29uX3JlZ21hcCwKKwkJCSAgICAgUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVCwgMHgwMTAwKTsKKwkJYnJlYWs7CisJY2FzZSBSRUFMVklFV19SRUJPT1RfUEIxMU1QOgorCWNhc2UgUkVBTFZJRVdfUkVCT09UX1BCQTg6CisJCXJlZ21hcF93cml0ZShzeXNjb25fcmVnbWFwLCBSRUFMVklFV19TWVNfTE9DS19PRkZTRVQsCisJCQkgICAgIFZFUlNBVElMRV9MT0NLX1ZBTCk7CisJCXJlZ21hcF93cml0ZShzeXNjb25fcmVnbWFwLCBSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VULAorCQkJICAgICAweDAwMDApOworCQlyZWdtYXBfd3JpdGUoc3lzY29uX3JlZ21hcCwgUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVCwKKwkJCSAgICAgMHgwMDA0KTsKKwkJYnJlYWs7CisJY2FzZSBSRUFMVklFV19SRUJPT1RfUEJYOgorCQlyZWdtYXBfd3JpdGUoc3lzY29uX3JlZ21hcCwgUkVBTFZJRVdfU1lTX0xPQ0tfT0ZGU0VULAorCQkJICAgICBWRVJTQVRJTEVfTE9DS19WQUwpOworCQlyZWdtYXBfd3JpdGUoc3lzY29uX3JlZ21hcCwgUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVCwKKwkJCSAgICAgMHgwMGYwKTsKKwkJcmVnbWFwX3dyaXRlKHN5c2Nvbl9yZWdtYXAsIFJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQsCisJCQkgICAgIDB4MDBmNCk7CisJCWJyZWFrOworCX0KKwlkc2IoKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB2ZXJzYXRpbGVfcmVib290X25iID0geworCS5ub3RpZmllcl9jYWxsID0gdmVyc2F0aWxlX3JlYm9vdCwKKwkucHJpb3JpdHkgPSAxOTIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2ZXJzYXRpbGVfcmVib290X3Byb2JlKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqcmVib290X2lkOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IGVycjsKKworCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlX2FuZF9tYXRjaChOVUxMLCB2ZXJzYXRpbGVfcmVib290X29mX21hdGNoLAorCQkJCQkJICZyZWJvb3RfaWQpOworCWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCXZlcnNhdGlsZV9yZWJvb3RfdHlwZSA9IChlbnVtIHZlcnNhdGlsZV9yZWJvb3QpcmVib290X2lkLT5kYXRhOworCisJc3lzY29uX3JlZ21hcCA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChucCk7CisJaWYgKElTX0VSUihzeXNjb25fcmVnbWFwKSkKKwkJcmV0dXJuIFBUUl9FUlIoc3lzY29uX3JlZ21hcCk7CisKKwllcnIgPSByZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJnZlcnNhdGlsZV9yZWJvb3RfbmIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlwcl9pbmZvKCJ2ZXJzYXRpbGUgcmVib290IGRyaXZlciByZWdpc3RlcmVkXG4iKTsKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbCh2ZXJzYXRpbGVfcmVib290X3Byb2JlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXMzNzIyLXBvd2Vyb2ZmLmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2FzMzcyMi1wb3dlcm9mZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDAyOTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2FzMzcyMi1wb3dlcm9mZi5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBQb3dlciBvZmYgZHJpdmVyIGZvciBhbXMgQVMzNzIyIGRldmljZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBMYXhtYW4gRGV3YW5nYW4gPGxkZXdhbmdhbkBudmlkaWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbWZkL2FzMzcyMi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCitzdHJ1Y3QgYXMzNzIyX3Bvd2Vyb2ZmIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGFzMzcyMiAqYXMzNzIyOworfTsKKworc3RhdGljIHN0cnVjdCBhczM3MjJfcG93ZXJvZmYgKmFzMzcyMl9wbV9wb3dlcm9mZjsKKworc3RhdGljIHZvaWQgYXMzNzIyX3BtX3Bvd2VyX29mZih2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIWFzMzcyMl9wbV9wb3dlcm9mZikgeworCQlwcl9lcnIoIkFTMzcyMiBwb3dlcm9mZiBpcyBub3QgaW5pdGlhbGlzZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gYXMzNzIyX3VwZGF0ZV9iaXRzKGFzMzcyMl9wbV9wb3dlcm9mZi0+YXMzNzIyLAorCQlBUzM3MjJfUkVTRVRfQ09OVFJPTF9SRUcsIEFTMzcyMl9QT1dFUl9PRkYsIEFTMzcyMl9QT1dFUl9PRkYpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGFzMzcyMl9wbV9wb3dlcm9mZi0+ZGV2LAorCQkJIlJFU0VUX0NPTlRST0xfUkVHIHVwZGF0ZSBmYWlsZWQsICVkXG4iLCByZXQpOworfQorCitzdGF0aWMgaW50IGFzMzcyMl9wb3dlcm9mZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhczM3MjJfcG93ZXJvZmYgKmFzMzcyMl9wb3dlcm9mZjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2LnBhcmVudC0+b2Zfbm9kZTsKKworCWlmICghbnApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJhbXMsc3lzdGVtLXBvd2VyLWNvbnRyb2xsZXIiKSkKKwkJcmV0dXJuIDA7CisKKwlhczM3MjJfcG93ZXJvZmYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCphczM3MjJfcG93ZXJvZmYpLAorCQkJCUdGUF9LRVJORUwpOworCWlmICghYXMzNzIyX3Bvd2Vyb2ZmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFzMzcyMl9wb3dlcm9mZi0+YXMzNzIyID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCWFzMzcyMl9wb3dlcm9mZi0+ZGV2ID0gJnBkZXYtPmRldjsKKwlhczM3MjJfcG1fcG93ZXJvZmYgPSBhczM3MjJfcG93ZXJvZmY7CisJaWYgKCFwbV9wb3dlcl9vZmYpCisJCXBtX3Bvd2VyX29mZiA9IGFzMzcyMl9wbV9wb3dlcl9vZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhczM3MjJfcG93ZXJvZmZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaWYgKHBtX3Bvd2VyX29mZiA9PSBhczM3MjJfcG1fcG93ZXJfb2ZmKQorCQlwbV9wb3dlcl9vZmYgPSBOVUxMOworCWFzMzcyMl9wbV9wb3dlcm9mZiA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXMzNzIyX3Bvd2Vyb2ZmX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJhczM3MjItcG93ZXItb2ZmIiwKKwl9LAorCS5wcm9iZSA9IGFzMzcyMl9wb3dlcm9mZl9wcm9iZSwKKwkucmVtb3ZlID0gYXMzNzIyX3Bvd2Vyb2ZmX3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXMzNzIyX3Bvd2Vyb2ZmX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiUG93ZXIgb2ZmIGRyaXZlciBmb3IgYW1zIEFTMzcyMiBQTUlDIERldmljZSIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphczM3MjItcG93ZXItb2ZmIik7CitNT0RVTEVfQVVUSE9SKCJMYXhtYW4gRGV3YW5nYW4gPGxkZXdhbmdhbkBudmlkaWEuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9hdDkxLXBvd2Vyb2ZmLmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2F0OTEtcG93ZXJvZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTc5ZjAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9hdDkxLXBvd2Vyb2ZmLmMKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiBBdG1lbCBBVDkxIFNBTTkgU29DcyByZXNldCBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEF0bWVsIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IChDKSAyMDExIEplYW4tQ2hyaXN0b3BoZSBQTEFHTklPTC1WSUxMQVJEIDxwbGFnbmlvakBqY3Jvc29mdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBFbGVjdHJvbnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmludGsuaD4KKworI2luY2x1ZGUgPHNvYy9hdDkxL2F0OTFzYW05X2RkcnNkci5oPgorCisjZGVmaW5lIEFUOTFfU0hEV19DUgkweDAwCQkvKiBTaHV0IERvd24gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1NIRFdfU0hEVwkJQklUKDApCQkJLyogU2h1dCBEb3duIGNvbW1hbmQgKi8KKyNkZWZpbmUgQVQ5MV9TSERXX0tFWQkJKDB4YTUgPDwgMjQpCQkvKiBLRVkgUGFzc3dvcmQgKi8KKworI2RlZmluZSBBVDkxX1NIRFdfTVIJMHgwNAkJLyogU2h1dCBEb3duIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9TSERXX1dLTU9ERTAJR0VOTUFTSygyLCAwKQkJLyogV2FrZS11cCAwIE1vZGUgU2VsZWN0aW9uICovCisjZGVmaW5lIEFUOTFfU0hEV19DUFRXSzBfTUFYCTB4ZgkJCS8qIE1heGltdW0gQ291bnRlciBPbiBXYWtlIFVwIDAgKi8KKyNkZWZpbmUgQVQ5MV9TSERXX0NQVFdLMAkoQVQ5MV9TSERXX0NQVFdLMF9NQVggPDwgNCkgLyogQ291bnRlciBPbiBXYWtlIFVwIDAgKi8KKyNkZWZpbmUgQVQ5MV9TSERXX0NQVFdLMF8oeCkJKCh4KSA8PCA0KQorI2RlZmluZSBBVDkxX1NIRFdfUlRUV0tFTglCSVQoMTYpCQkJLyogUmVhbCBUaW1lIFRpbWVyIFdha2UtdXAgRW5hYmxlICovCisjZGVmaW5lIEFUOTFfU0hEV19SVENXS0VOCUJJVCgxNykJCQkvKiBSZWFsIFRpbWUgQ2xvY2sgV2FrZS11cCBFbmFibGUgKi8KKworI2RlZmluZSBBVDkxX1NIRFdfU1IJMHgwOAkJLyogU2h1dCBEb3duIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1NIRFdfV0FLRVVQMAlCSVQoMCkJCQkvKiBXYWtlLXVwIDAgU3RhdHVzICovCisjZGVmaW5lIEFUOTFfU0hEV19SVFRXSwkJQklUKDE2KQkJCS8qIFJlYWwtdGltZSBUaW1lciBXYWtlLXVwICovCisjZGVmaW5lIEFUOTFfU0hEV19SVENXSwkJQklUKDE3KQkJCS8qIFJlYWwtdGltZSBDbG9jayBXYWtlLXVwIFtTQU05UkxdICovCisKK2VudW0gd2FrZXVwX3R5cGUgeworCUFUOTFfU0hEV19XS01PREUwX05PTkUJCT0gMCwKKwlBVDkxX1NIRFdfV0tNT0RFMF9ISUdICQk9IDEsCisJQVQ5MV9TSERXX1dLTU9ERTBfTE9XCQk9IDIsCisJQVQ5MV9TSERXX1dLTU9ERTBfQU5ZTEVWRUwJPSAzLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNoZHdjX3dha2V1cF9tb2Rlc1tdID0geworCVtBVDkxX1NIRFdfV0tNT0RFMF9OT05FXQk9ICJub25lIiwKKwlbQVQ5MV9TSERXX1dLTU9ERTBfSElHSF0JPSAiaGlnaCIsCisJW0FUOTFfU0hEV19XS01PREUwX0xPV10JCT0gImxvdyIsCisJW0FUOTFfU0hEV19XS01PREUwX0FOWUxFVkVMXQk9ICJhbnkiLAorfTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqYXQ5MV9zaGR3Y19iYXNlOworc3RhdGljIHN0cnVjdCBjbGsgKnNjbGs7CitzdGF0aWMgdm9pZCBfX2lvbWVtICptcGRkcmNfYmFzZTsKKworc3RhdGljIHZvaWQgX19pbml0IGF0OTFfd2FrZXVwX3N0YXR1cyh2b2lkKQoreworCXUzMiByZWcgPSByZWFkbChhdDkxX3NoZHdjX2Jhc2UgKyBBVDkxX1NIRFdfU1IpOworCWNoYXIgKnJlYXNvbiA9ICJ1bmtub3duIjsKKworCS8qIFNpbXBsZSBwb3dlci1vbiwganVzdCBiYWlsIG91dCAqLworCWlmICghcmVnKQorCQlyZXR1cm47CisKKwlpZiAocmVnICYgQVQ5MV9TSERXX1JUVFdLKQorCQlyZWFzb24gPSAiUlRUIjsKKwllbHNlIGlmIChyZWcgJiBBVDkxX1NIRFdfUlRDV0spCisJCXJlYXNvbiA9ICJSVEMiOworCisJcHJfaW5mbygiQVQ5MTogV2FrZS1VcCBzb3VyY2U6ICVzXG4iLCByZWFzb24pOworfQorCitzdGF0aWMgdm9pZCBhdDkxX3Bvd2Vyb2ZmKHZvaWQpCit7CisJd3JpdGVsKEFUOTFfU0hEV19LRVkgfCBBVDkxX1NIRFdfU0hEVywgYXQ5MV9zaGR3Y19iYXNlICsgQVQ5MV9TSERXX0NSKTsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9scGRkcl9wb3dlcm9mZih2b2lkKQoreworCWFzbSB2b2xhdGlsZSgKKwkJLyogQWxpZ24gdG8gY2FjaGUgbGluZXMgKi8KKwkJIi5iYWxpZ24gMzJcblx0IgorCisJCS8qIEVuc3VyZSBBVDkxX1NIRFdfQ1IgaXMgaW4gdGhlIFRMQiBieSByZWFkaW5nIGl0ICovCisJCSIJbGRyCXI2LCBbJTIsICMiIF9fc3RyaW5naWZ5KEFUOTFfU0hEV19DUikgIl1cblx0IgorCisJCS8qIFBvd2VyIGRvd24gU0RSQU0wICovCisJCSIJc3RyCSUxLCBbJTAsICMiIF9fc3RyaW5naWZ5KEFUOTFfRERSU0RSQ19MUFIpICJdXG5cdCIKKwkJLyogU2h1dGRvd24gQ1BVICovCisJCSIJc3RyCSUzLCBbJTIsICMiIF9fc3RyaW5naWZ5KEFUOTFfU0hEV19DUikgIl1cblx0IgorCisJCSIJYgkuXG5cdCIKKwkJOgorCQk6ICJyIiAobXBkZHJjX2Jhc2UpLAorCQkgICJyIiBjcHVfdG9fbGUzMihBVDkxX0REUlNEUkNfTFBERFIyX1BXT0ZGKSwKKwkJICAiciIgKGF0OTFfc2hkd2NfYmFzZSksCisJCSAgInIiIGNwdV90b19sZTMyKEFUOTFfU0hEV19LRVkgfCBBVDkxX1NIRFdfU0hEVykKKwkJOiAicjAiKTsKK30KKworc3RhdGljIGludCBhdDkxX3Bvd2Vyb2ZmX2dldF93YWtldXBfbW9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCWNvbnN0IGNoYXIgKnBtOworCXVuc2lnbmVkIGludCBpOworCWludCBlcnI7CisKKwllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgImF0bWVsLHdha2V1cC1tb2RlIiwgJnBtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIEFUOTFfU0hEV19XS01PREUwX0FOWUxFVkVMOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2hkd2Nfd2FrZXVwX21vZGVzKTsgaSsrKQorCQlpZiAoIXN0cmNhc2VjbXAocG0sIHNoZHdjX3dha2V1cF9tb2Rlc1tpXSkpCisJCQlyZXR1cm4gaTsKKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBhdDkxX3Bvd2Vyb2ZmX2R0X3NldF93YWtldXBfbW9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlpbnQgd2FrZXVwX21vZGU7CisJdTMyIG1vZGUgPSAwLCB0bXA7CisKKwl3YWtldXBfbW9kZSA9IGF0OTFfcG93ZXJvZmZfZ2V0X3dha2V1cF9tb2RlKG5wKTsKKwlpZiAod2FrZXVwX21vZGUgPCAwKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJzaGR3YyB1bmtub3duIHdha2V1cCBtb2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJhdG1lbCx3YWtldXAtY291bnRlciIsICZ0bXApKSB7CisJCWlmICh0bXAgPiBBVDkxX1NIRFdfQ1BUV0swX01BWCkgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCQkgInNoZHdjIHdha2V1cCBjb3VudGVyIDB4JXggPiAweCV4IHJlZHVjZSBpdCB0byAweCV4XG4iLAorCQkJCSB0bXAsIEFUOTFfU0hEV19DUFRXSzBfTUFYLCBBVDkxX1NIRFdfQ1BUV0swX01BWCk7CisJCQl0bXAgPSBBVDkxX1NIRFdfQ1BUV0swX01BWDsKKwkJfQorCQltb2RlIHw9IEFUOTFfU0hEV19DUFRXSzBfKHRtcCk7CisJfQorCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImF0bWVsLHdha2V1cC1ydGMtdGltZXIiKSkKKwkJCW1vZGUgfD0gQVQ5MV9TSERXX1JUQ1dLRU47CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiYXRtZWwsd2FrZXVwLXJ0dC10aW1lciIpKQorCQkJbW9kZSB8PSBBVDkxX1NIRFdfUlRUV0tFTjsKKworCXdyaXRlbCh3YWtldXBfbW9kZSB8IG1vZGUsIGF0OTFfc2hkd2NfYmFzZSArIEFUOTFfU0hEV19NUik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfcG93ZXJvZmZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXUzMiBkZHJfdHlwZTsKKwlpbnQgcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlhdDkxX3NoZHdjX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGF0OTFfc2hkd2NfYmFzZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IG1hcCByZXNldCBjb250cm9sbGVyIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gUFRSX0VSUihhdDkxX3NoZHdjX2Jhc2UpOworCX0KKworCXNjbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihzY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2Nsayk7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoc2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgZW5hYmxlIHNsb3cgY2xvY2tcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWF0OTFfd2FrZXVwX3N0YXR1cygpOworCisJaWYgKHBkZXYtPmRldi5vZl9ub2RlKQorCQlhdDkxX3Bvd2Vyb2ZmX2R0X3NldF93YWtldXBfbW9kZShwZGV2KTsKKworCXBtX3Bvd2VyX29mZiA9IGF0OTFfcG93ZXJvZmY7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJhdG1lbCxzYW1hNWQzLWRkcmFtYyIpOworCWlmICghbnApCisJCXJldHVybiAwOworCisJbXBkZHJjX2Jhc2UgPSBvZl9pb21hcChucCwgMCk7CisJb2Zfbm9kZV9wdXQobnApOworCisJaWYgKCFtcGRkcmNfYmFzZSkKKwkJcmV0dXJuIDA7CisKKwlkZHJfdHlwZSA9IHJlYWRsKG1wZGRyY19iYXNlICsgQVQ5MV9ERFJTRFJDX01EUikgJiBBVDkxX0REUlNEUkNfTUQ7CisJaWYgKChkZHJfdHlwZSA9PSBBVDkxX0REUlNEUkNfTURfTFBERFIyKSB8fAorCSAgICAoZGRyX3R5cGUgPT0gQVQ5MV9ERFJTRFJDX01EX0xQRERSMykpCisJCXBtX3Bvd2VyX29mZiA9IGF0OTFfbHBkZHJfcG93ZXJvZmY7CisJZWxzZQorCQlpb3VubWFwKG1wZGRyY19iYXNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBhdDkxX3Bvd2Vyb2ZmX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlmIChwbV9wb3dlcl9vZmYgPT0gYXQ5MV9wb3dlcm9mZiB8fAorCSAgICBwbV9wb3dlcl9vZmYgPT0gYXQ5MV9scGRkcl9wb3dlcm9mZikKKwkJcG1fcG93ZXJfb2ZmID0gTlVMTDsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShzY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdDkxX3JhbWNfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDMtZGRyYW1jIiwgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0OTFfcG93ZXJvZmZfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLXNoZHdjIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05cmwtc2hkd2MiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTl4NS1zaGR3YyIsIH0sCisJeyAvKnNlbnRpbmVsKi8gfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXQ5MV9wb3dlcm9mZl9kcml2ZXIgPSB7CisJLnJlbW92ZSA9IF9fZXhpdF9wKGF0OTFfcG93ZXJvZmZfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJhdDkxLXBvd2Vyb2ZmIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gYXQ5MV9wb3dlcm9mZl9vZl9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXJfcHJvYmUoYXQ5MV9wb3dlcm9mZl9kcml2ZXIsIGF0OTFfcG93ZXJvZmZfcHJvYmUpOworCitNT0RVTEVfQVVUSE9SKCJBdG1lbCBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTaHV0ZG93biBkcml2ZXIgZm9yIEF0bWVsIFNvQ3MiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXQ5MS1yZXNldC5jIGIvZHJpdmVycy9wb3dlci9yZXNldC9hdDkxLXJlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2YjVkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXQ5MS1yZXNldC5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQXRtZWwgQVQ5MSBTQU05ICYgU0FNQTUgU29DcyByZXNldCBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEF0bWVsIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IChDKSBCaXRCb3ggTHRkIDIwMTAKKyAqIENvcHlyaWdodCAoQykgMjAxMSBKZWFuLUNocmlzdG9waGUgUExBR05JT0wtVklMTEFSRCA8cGxhZ25pb2pAamNvc29mdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBFbGVjdHJvbnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisKKyNpbmNsdWRlIDxzb2MvYXQ5MS9hdDkxc2FtOV9kZHJzZHIuaD4KKyNpbmNsdWRlIDxzb2MvYXQ5MS9hdDkxc2FtOV9zZHJhbWMuaD4KKworI2RlZmluZSBBVDkxX1JTVENfQ1IJMHgwMAkJLyogUmVzZXQgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfUlNUQ19QUk9DUlNUCUJJVCgwKQkJLyogUHJvY2Vzc29yIFJlc2V0ICovCisjZGVmaW5lIEFUOTFfUlNUQ19QRVJSU1QJQklUKDIpCQkvKiBQZXJpcGhlcmFsIFJlc2V0ICovCisjZGVmaW5lIEFUOTFfUlNUQ19FWFRSU1QJQklUKDMpCQkvKiBFeHRlcm5hbCBSZXNldCAqLworI2RlZmluZSBBVDkxX1JTVENfS0VZCQkoMHhhNSA8PCAyNCkJLyogS0VZIFBhc3N3b3JkICovCisKKyNkZWZpbmUgQVQ5MV9SU1RDX1NSCTB4MDQJCS8qIFJlc2V0IENvbnRyb2xsZXIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfUlNUQ19VUlNUUwkJQklUKDApCQkvKiBVc2VyIFJlc2V0IFN0YXR1cyAqLworI2RlZmluZSBBVDkxX1JTVENfUlNUVFlQCUdFTk1BU0soMTAsIDgpCS8qIFJlc2V0IFR5cGUgKi8KKyNkZWZpbmUgQVQ5MV9SU1RDX05SU1RMCQlCSVQoMTYpCQkvKiBOUlNUIFBpbiBMZXZlbCAqLworI2RlZmluZSBBVDkxX1JTVENfU1JDTVAJCUJJVCgxNykJCS8qIFNvZnR3YXJlIFJlc2V0IENvbW1hbmQgaW4gUHJvZ3Jlc3MgKi8KKworI2RlZmluZSBBVDkxX1JTVENfTVIJMHgwOAkJLyogUmVzZXQgQ29udHJvbGxlciBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfUlNUQ19VUlNURU4JQklUKDApCQkvKiBVc2VyIFJlc2V0IEVuYWJsZSAqLworI2RlZmluZSBBVDkxX1JTVENfVVJTVElFTglCSVQoNCkJCS8qIFVzZXIgUmVzZXQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBBVDkxX1JTVENfRVJTVEwJCUdFTk1BU0soMTEsIDgpCS8qIEV4dGVybmFsIFJlc2V0IExlbmd0aCAqLworCitlbnVtIHJlc2V0X3R5cGUgeworCVJFU0VUX1RZUEVfR0VORVJBTAk9IDAsCisJUkVTRVRfVFlQRV9XQUtFVVAJPSAxLAorCVJFU0VUX1RZUEVfV0FUQ0hET0cJPSAyLAorCVJFU0VUX1RZUEVfU09GVFdBUkUJPSAzLAorCVJFU0VUX1RZUEVfVVNFUgkJPSA0LAorfTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqYXQ5MV9yYW1jX2Jhc2VbMl0sICphdDkxX3JzdGNfYmFzZTsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpzY2xrOworCisvKgorKiB1bmxlc3MgdGhlIFNEUkFNIGlzIGNsZWFubHkgc2h1dGRvd24gYmVmb3JlIHdlIGhpdCB0aGUKKyogcmVzZXQgcmVnaXN0ZXIgaXQgY2FuIGJlIGxlZnQgZHJpdmluZyB0aGUgZGF0YSBidXMgYW5kCisqIGtpbGxpbmcgdGhlIGNoYW5jZSBvZiBhIHN1YnNlcXVlbnQgYm9vdCBmcm9tIE5BTkQKKyovCitzdGF0aWMgaW50IGF0OTFzYW05MjYwX3Jlc3RhcnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIG1vZGUsCisJCQkgICAgICAgdm9pZCAqY21kKQoreworCWFzbSB2b2xhdGlsZSgKKwkJLyogQWxpZ24gdG8gY2FjaGUgbGluZXMgKi8KKwkJIi5iYWxpZ24gMzJcblx0IgorCisJCS8qIERpc2FibGUgU0RSQU0gYWNjZXNzZXMgKi8KKwkJInN0cgklMiwgWyUwLCAjIiBfX3N0cmluZ2lmeShBVDkxX1NEUkFNQ19UUikgIl1cblx0IgorCisJCS8qIFBvd2VyIGRvd24gU0RSQU0gKi8KKwkJInN0cgklMywgWyUwLCAjIiBfX3N0cmluZ2lmeShBVDkxX1NEUkFNQ19MUFIpICJdXG5cdCIKKworCQkvKiBSZXNldCBDUFUgKi8KKwkJInN0cgklNCwgWyUxLCAjIiBfX3N0cmluZ2lmeShBVDkxX1JTVENfQ1IpICJdXG5cdCIKKworCQkiYgkuXG5cdCIKKwkJOgorCQk6ICJyIiAoYXQ5MV9yYW1jX2Jhc2VbMF0pLAorCQkgICJyIiAoYXQ5MV9yc3RjX2Jhc2UpLAorCQkgICJyIiAoMSksCisJCSAgInIiIGNwdV90b19sZTMyKEFUOTFfU0RSQU1DX0xQQ0JfUE9XRVJfRE9XTiksCisJCSAgInIiIGNwdV90b19sZTMyKEFUOTFfUlNUQ19LRVkgfCBBVDkxX1JTVENfUEVSUlNUIHwgQVQ5MV9SU1RDX1BST0NSU1QpKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIGludCBhdDkxc2FtOWc0NV9yZXN0YXJ0KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBtb2RlLAorCQkJICAgICAgIHZvaWQgKmNtZCkKK3sKKwlhc20gdm9sYXRpbGUoCisJCS8qCisJCSAqIFRlc3Qgd2V0aGVyIHdlIGhhdmUgYSBzZWNvbmQgUkFNIGNvbnRyb2xsZXIgdG8gY2FyZQorCQkgKiBhYm91dC4KKwkJICoKKwkJICogRmlyc3QsIHRlc3QgdGhhdCB3ZSBjYW4gZGVyZWZlcmVuY2UgdGhlIHZpcnR1YWwgYWRkcmVzcy4KKwkJICovCisJCSJjbXAJJTEsICMwXG5cdCIKKwkJImJlcQkxZlxuXHQiCisKKwkJLyogVGhlbiwgdGVzdCB0aGF0IHRoZSBSQU0gY29udHJvbGxlciBpcyBlbmFibGVkICovCisJCSJsZHIJcjAsIFslMV1cblx0IgorCQkiY21wCXIwLCAjMFxuXHQiCisKKwkJLyogQWxpZ24gdG8gY2FjaGUgbGluZXMgKi8KKwkJIi5iYWxpZ24gMzJcblx0IgorCisJCS8qIERpc2FibGUgU0RSQU0wIGFjY2Vzc2VzICovCisJCSIxOglzdHIJJTMsIFslMCwgIyIgX19zdHJpbmdpZnkoQVQ5MV9ERFJTRFJDX1JUUikgIl1cblx0IgorCQkvKiBQb3dlciBkb3duIFNEUkFNMCAqLworCQkiCXN0cgklNCwgWyUwLCAjIiBfX3N0cmluZ2lmeShBVDkxX0REUlNEUkNfTFBSKSAiXVxuXHQiCisJCS8qIERpc2FibGUgU0RSQU0xIGFjY2Vzc2VzICovCisJCSIJc3RybmUJJTMsIFslMSwgIyIgX19zdHJpbmdpZnkoQVQ5MV9ERFJTRFJDX1JUUikgIl1cblx0IgorCQkvKiBQb3dlciBkb3duIFNEUkFNMSAqLworCQkiCXN0cm5lCSU0LCBbJTEsICMiIF9fc3RyaW5naWZ5KEFUOTFfRERSU0RSQ19MUFIpICJdXG5cdCIKKwkJLyogUmVzZXQgQ1BVICovCisJCSIJc3RyCSU1LCBbJTIsICMiIF9fc3RyaW5naWZ5KEFUOTFfUlNUQ19DUikgIl1cblx0IgorCisJCSIJYgkuXG5cdCIKKwkJOgorCQk6ICJyIiAoYXQ5MV9yYW1jX2Jhc2VbMF0pLAorCQkgICJyIiAoYXQ5MV9yYW1jX2Jhc2VbMV0pLAorCQkgICJyIiAoYXQ5MV9yc3RjX2Jhc2UpLAorCQkgICJyIiAoMSksCisJCSAgInIiIGNwdV90b19sZTMyKEFUOTFfRERSU0RSQ19MUENCX1BPV0VSX0RPV04pLAorCQkgICJyIiBjcHVfdG9fbGUzMihBVDkxX1JTVENfS0VZIHwgQVQ5MV9SU1RDX1BFUlJTVCB8IEFUOTFfUlNUQ19QUk9DUlNUKQorCQk6ICJyMCIpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgaW50IHNhbWE1ZDNfcmVzdGFydChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgbW9kZSwKKwkJCSAgIHZvaWQgKmNtZCkKK3sKKwl3cml0ZWwoY3B1X3RvX2xlMzIoQVQ5MV9SU1RDX0tFWSB8IEFUOTFfUlNUQ19QRVJSU1QgfCBBVDkxX1JTVENfUFJPQ1JTVCksCisJICAgICAgIGF0OTFfcnN0Y19iYXNlKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGF0OTFfcmVzZXRfc3RhdHVzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdTMyIHJlZyA9IHJlYWRsKGF0OTFfcnN0Y19iYXNlICsgQVQ5MV9SU1RDX1NSKTsKKwljaGFyICpyZWFzb247CisKKwlzd2l0Y2ggKChyZWcgJiBBVDkxX1JTVENfUlNUVFlQKSA+PiA4KSB7CisJY2FzZSBSRVNFVF9UWVBFX0dFTkVSQUw6CisJCXJlYXNvbiA9ICJnZW5lcmFsIHJlc2V0IjsKKwkJYnJlYWs7CisJY2FzZSBSRVNFVF9UWVBFX1dBS0VVUDoKKwkJcmVhc29uID0gIndha2V1cCI7CisJCWJyZWFrOworCWNhc2UgUkVTRVRfVFlQRV9XQVRDSERPRzoKKwkJcmVhc29uID0gIndhdGNoZG9nIHJlc2V0IjsKKwkJYnJlYWs7CisJY2FzZSBSRVNFVF9UWVBFX1NPRlRXQVJFOgorCQlyZWFzb24gPSAic29mdHdhcmUgcmVzZXQiOworCQlicmVhazsKKwljYXNlIFJFU0VUX1RZUEVfVVNFUjoKKwkJcmVhc29uID0gInVzZXIgcmVzZXQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWFzb24gPSAidW5rbm93biByZXNldCI7CisJCWJyZWFrOworCX0KKworCXByX2luZm8oIkFUOTE6IFN0YXJ0aW5nIGFmdGVyICVzXG4iLCByZWFzb24pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdDkxX3JhbWNfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLXNkcmFtYyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOWc0NS1kZHJhbWMiLCB9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXQ5MV9yZXNldF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTkyNjAtcnN0YyIsIC5kYXRhID0gYXQ5MXNhbTkyNjBfcmVzdGFydCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXNhbTlnNDUtcnN0YyIsIC5kYXRhID0gYXQ5MXNhbTlnNDVfcmVzdGFydCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYTVkMy1yc3RjIiwgLmRhdGEgPSBzYW1hNWQzX3Jlc3RhcnQgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYXQ5MV9yZXN0YXJ0X25iID0geworCS5wcmlvcml0eSA9IDE5MiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfcmVzZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWludCByZXQsIGlkeCA9IDA7CisKKwlhdDkxX3JzdGNfYmFzZSA9IG9mX2lvbWFwKHBkZXYtPmRldi5vZl9ub2RlLCAwKTsKKwlpZiAoIWF0OTFfcnN0Y19iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBtYXAgcmVzZXQgY29udHJvbGxlciBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwZGV2LT5kZXYub2Zfbm9kZSwgImF0bWVsLHNhbWE1ZDMtcnN0YyIpKSB7CisJCS8qIHdlIG5lZWQgdG8gc2h1dGRvd24gdGhlIGRkciBjb250cm9sbGVyLCBzbyBnZXQgcmFtYyBiYXNlICovCisJCWZvcl9lYWNoX21hdGNoaW5nX25vZGUobnAsIGF0OTFfcmFtY19vZl9tYXRjaCkgeworCQkJYXQ5MV9yYW1jX2Jhc2VbaWR4XSA9IG9mX2lvbWFwKG5wLCAwKTsKKwkJCWlmICghYXQ5MV9yYW1jX2Jhc2VbaWR4XSkgeworCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBtYXAgcmFtIGNvbnRyb2xsZXIgYWRkcmVzc1xuIik7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCQlpZHgrKzsKKwkJfQorCX0KKworCW1hdGNoID0gb2ZfbWF0Y2hfbm9kZShhdDkxX3Jlc2V0X29mX21hdGNoLCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJYXQ5MV9yZXN0YXJ0X25iLm5vdGlmaWVyX2NhbGwgPSBtYXRjaC0+ZGF0YTsKKworCXNjbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihzY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2Nsayk7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoc2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgZW5hYmxlIHNsb3cgY2xvY2tcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlZ2lzdGVyX3Jlc3RhcnRfaGFuZGxlcigmYXQ5MV9yZXN0YXJ0X25iKTsKKwlpZiAocmV0KSB7CisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShzY2xrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlhdDkxX3Jlc2V0X3N0YXR1cyhwZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBhdDkxX3Jlc2V0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXVucmVnaXN0ZXJfcmVzdGFydF9oYW5kbGVyKCZhdDkxX3Jlc3RhcnRfbmIpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShzY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBhdDkxX3Jlc2V0X3BsYXRfbWF0Y2hbXSA9IHsKKwl7ICJhdDkxLXNhbTkyNjAtcmVzZXQiLCAodW5zaWduZWQgbG9uZylhdDkxc2FtOTI2MF9yZXN0YXJ0IH0sCisJeyAiYXQ5MS1zYW05ZzQ1LXJlc2V0IiwgKHVuc2lnbmVkIGxvbmcpYXQ5MXNhbTlnNDVfcmVzdGFydCB9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXQ5MV9yZXNldF9kcml2ZXIgPSB7CisJLnJlbW92ZSA9IF9fZXhpdF9wKGF0OTFfcmVzZXRfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJhdDkxLXJlc2V0IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gYXQ5MV9yZXNldF9vZl9tYXRjaCwKKwl9LAorCS5pZF90YWJsZSA9IGF0OTFfcmVzZXRfcGxhdF9tYXRjaCwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKGF0OTFfcmVzZXRfZHJpdmVyLCBhdDkxX3Jlc2V0X3Byb2JlKTsKKworTU9EVUxFX0FVVEhPUigiQXRtZWwgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUmVzZXQgZHJpdmVyIGZvciBBdG1lbCBTb0NzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2F4eGlhLXJlc2V0LmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2F4eGlhLXJlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0Y2QxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXh4aWEtcmVzZXQuYwpAQCAtMCwwICsxLDk3IEBACisvKgorICogUmVzZXQgZHJpdmVyIGZvciBBeHhpYSBkZXZpY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IExTSQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2RlZmluZSBTQ19DUklUX1dSSVRFX0tFWQkweDEwMDAKKyNkZWZpbmUgU0NfTEFUQ0hfT05fUkVTRVQJMHgxMDA0CisjZGVmaW5lIFNDX1JFU0VUX0NPTlRST0wJMHgxMDA4CisjZGVmaW5lICAgUlNUQ1RMX1JTVF9aRVJPCSgxPDwzKQorI2RlZmluZSAgIFJTVENUTF9SU1RfRkFCCSgxPDwyKQorI2RlZmluZSAgIFJTVENUTF9SU1RfQ0hJUAkoMTw8MSkKKyNkZWZpbmUgICBSU1RDVExfUlNUX1NZUwkoMTw8MCkKKyNkZWZpbmUgU0NfRUZVU0VfSU5UX1NUQVRVUwkweDE4MGMKKyNkZWZpbmUgICBFRlVTRV9SRUFEX0RPTkUJKDE8PDMxKQorCitzdGF0aWMgc3RydWN0IHJlZ21hcCAqc3lzY29uOworCitzdGF0aWMgaW50IGF4eGlhX3Jlc3RhcnRfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkJIHVuc2lnbmVkIGxvbmcgbW9kZSwgdm9pZCAqY21kKQoreworCS8qIEFjY2VzcyBLZXkgKDB4YWIpICovCisJcmVnbWFwX3dyaXRlKHN5c2NvbiwgU0NfQ1JJVF9XUklURV9LRVksIDB4YWIpOworCS8qIFNlbGVjdCBpbnRlcm5hbCBib290IGZyb20gMHhmZmZmMDAwMCAqLworCXJlZ21hcF93cml0ZShzeXNjb24sIFNDX0xBVENIX09OX1JFU0VULCAweDAwMDAwMDQwKTsKKwkvKiBBc3NlcnQgUmVzZXRSZWFkRG9uZSAodG8gYXZvaWQgaGFuZ2luZyBpbiBib290IFJPTSkgKi8KKwlyZWdtYXBfd3JpdGUoc3lzY29uLCBTQ19FRlVTRV9JTlRfU1RBVFVTLCBFRlVTRV9SRUFEX0RPTkUpOworCS8qIEFzc2VydCBjaGlwIHJlc2V0ICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHN5c2NvbiwgU0NfUkVTRVRfQ09OVFJPTCwKKwkJCSAgIFJTVENUTF9SU1RfQ0hJUCwgUlNUQ1RMX1JTVF9DSElQKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBheHhpYV9yZXN0YXJ0X25iID0geworCS5ub3RpZmllcl9jYWxsID0gYXh4aWFfcmVzdGFydF9oYW5kbGVyLAorCS5wcmlvcml0eSA9IDEyOCwKK307CisKK3N0YXRpYyBpbnQgYXh4aWFfcmVzZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCWludCBlcnI7CisKKwlzeXNjb24gPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKGRldi0+b2Zfbm9kZSwgInN5c2NvbiIpOworCWlmIChJU19FUlIoc3lzY29uKSkgeworCQlwcl9lcnIoIiVzOiBzeXNjb24gbG9va3VwIGZhaWxlZFxuIiwgZGV2LT5vZl9ub2RlLT5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIoc3lzY29uKTsKKwl9CisKKwllcnIgPSByZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJmF4eGlhX3Jlc3RhcnRfbmIpOworCWlmIChlcnIpCisJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlZ2lzdGVyIHJlc3RhcnQgaGFuZGxlciAoZXJyPSVkKVxuIiwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2F4eGlhX3Jlc2V0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJsc2ksYXhtNTV4eC1yZXNldCIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfYXh4aWFfcmVzZXRfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBheHhpYV9yZXNldF9kcml2ZXIgPSB7CisJLnByb2JlID0gYXh4aWFfcmVzZXRfcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYXh4aWEtcmVzZXQiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob2ZfYXh4aWFfcmVzZXRfbWF0Y2gpLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBheHhpYV9yZXNldF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXh4aWFfcmVzZXRfZHJpdmVyKTsKK30KK2RldmljZV9pbml0Y2FsbChheHhpYV9yZXNldF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvYnJjbXN0Yi1yZWJvb3QuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvYnJjbXN0Yi1yZWJvb3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRiNTNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9icmNtc3RiLXJlYm9vdC5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorCisjZGVmaW5lIFJFU0VUX1NPVVJDRV9FTkFCTEVfUkVHIDEKKyNkZWZpbmUgU1dfTUFTVEVSX1JFU0VUX1JFRyAyCisKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CitzdGF0aWMgdTMyIHJzdF9zcmNfZW47CitzdGF0aWMgdTMyIHN3X21zdHJfcnN0OworCitzdHJ1Y3QgcmVzZXRfcmVnX21hc2sgeworCXUzMiByc3Rfc3JjX2VuX21hc2s7CisJdTMyIHN3X21zdHJfcnN0X21hc2s7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc2V0X3JlZ19tYXNrICpyZXNldF9tYXNrczsKKworc3RhdGljIGludCBicmNtc3RiX3Jlc3RhcnRfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkJICAgdW5zaWduZWQgbG9uZyBtb2RlLCB2b2lkICpjbWQpCit7CisJaW50IHJjOworCXUzMiB0bXA7CisKKwlyYyA9IHJlZ21hcF93cml0ZShyZWdtYXAsIHJzdF9zcmNfZW4sIHJlc2V0X21hc2tzLT5yc3Rfc3JjX2VuX21hc2spOworCWlmIChyYykgeworCQlwcl9lcnIoImZhaWxlZCB0byB3cml0ZSByc3Rfc3JjX2VuICglZClcbiIsIHJjKTsKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCX0KKworCXJjID0gcmVnbWFwX3JlYWQocmVnbWFwLCByc3Rfc3JjX2VuLCAmdG1wKTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCByc3Rfc3JjX2VuICglZClcbiIsIHJjKTsKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCX0KKworCXJjID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgc3dfbXN0cl9yc3QsIHJlc2V0X21hc2tzLT5zd19tc3RyX3JzdF9tYXNrKTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gd3JpdGUgc3dfbXN0cl9yc3QgKCVkKVxuIiwgcmMpOworCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJfQorCisJcmMgPSByZWdtYXBfcmVhZChyZWdtYXAsIHN3X21zdHJfcnN0LCAmdG1wKTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBzd19tc3RyX3JzdCAoJWQpXG4iLCByYyk7CisJCXJldHVybiBOT1RJRllfRE9ORTsKKwl9CisKKwl3aGlsZSAoMSkKKwkJOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGJyY21zdGJfcmVzdGFydF9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGJyY21zdGJfcmVzdGFydF9oYW5kbGVyLAorCS5wcmlvcml0eSA9IDEyOCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzZXRfcmVnX21hc2sgcmVzZXRfYml0c180MG5tID0geworCS5yc3Rfc3JjX2VuX21hc2sgPSBCSVQoMCksCisJLnN3X21zdHJfcnN0X21hc2sgPSBCSVQoMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc2V0X3JlZ19tYXNrIHJlc2V0X2JpdHNfNjVubSA9IHsKKwkucnN0X3NyY19lbl9tYXNrID0gQklUKDMpLAorCS5zd19tc3RyX3JzdF9tYXNrID0gQklUKDMxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJyY21zdGItcmVib290IiwgLmRhdGEgPSAmcmVzZXRfYml0c180MG5tIH0sCisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJjbTcwMzgtcmVib290IiwgLmRhdGEgPSAmcmVzZXRfYml0c182NW5tIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IGJyY21zdGJfcmVib290X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJjOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKworCW9mX2lkID0gb2ZfbWF0Y2hfbm9kZShvZl9tYXRjaCwgbnApOworCWlmICghb2ZfaWQpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gbG9vayB1cCBjb21wYXRpYmxlIHN0cmluZ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXNldF9tYXNrcyA9IG9mX2lkLT5kYXRhOworCisJcmVnbWFwID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShucCwgInN5c2NvbiIpOworCWlmIChJU19FUlIocmVnbWFwKSkgeworCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgc3lzY29uIHBoYW5kbGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCAic3lzY29uIiwgUkVTRVRfU09VUkNFX0VOQUJMRV9SRUcsCisJCQkJCSZyc3Rfc3JjX2VuKTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJjYW4ndCBnZXQgcnN0X3NyY19lbiBvZmZzZXQgKCVkKVxuIiwgcmMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCAic3lzY29uIiwgU1dfTUFTVEVSX1JFU0VUX1JFRywKKwkJCQkJJnN3X21zdHJfcnN0KTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJjYW4ndCBnZXQgc3dfbXN0cl9yc3Qgb2Zmc2V0ICglZClcbiIsIHJjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmMgPSByZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJmJyY21zdGJfcmVzdGFydF9uYik7CisJaWYgKHJjKQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiY2Fubm90IHJlZ2lzdGVyIHJlc3RhcnQgaGFuZGxlciAoZXJyPSVkKVxuIiwgcmMpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBicmNtc3RiX3JlYm9vdF9kcml2ZXIgPSB7CisJLnByb2JlID0gYnJjbXN0Yl9yZWJvb3RfcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYnJjbXN0Yi1yZWJvb3QiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaCwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYnJjbXN0Yl9yZWJvb3RfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmJyY21zdGJfcmVib290X2RyaXZlciwKKwkJCQkJYnJjbXN0Yl9yZWJvb3RfcHJvYmUpOworfQorc3Vic3lzX2luaXRjYWxsKGJyY21zdGJfcmVib290X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9ncGlvLXBvd2Vyb2ZmLmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2dwaW8tcG93ZXJvZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTNkODFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9ncGlvLXBvd2Vyb2ZmLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBUb2dnbGVzIGEgR1BJTyBwaW4gdG8gcG93ZXIgZG93biBhIGRldmljZQorICoKKyAqIEphbWllIExlbnRpbiA8am1AbGVudGluLmNvLnVrPgorICogQW5kcmV3IEx1bm4gPGFuZHJld0BsdW5uLmNoPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBKYW1pZSBMZW50aW4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisvKgorICogSG9sZCBjb25maWd1cmF0aW9uIGhlcmUsIGNhbm5vdCBiZSBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mIHRoZSBkcml2ZXIKKyAqIHNpbmNlIHBtX3Bvd2VyX29mZiBpdHNlbGYgaXMgZ2xvYmFsLgorICovCitzdGF0aWMgc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsKKworc3RhdGljIHZvaWQgZ3Bpb19wb3dlcm9mZl9kb19wb3dlcm9mZih2b2lkKQoreworCUJVR19PTighcmVzZXRfZ3Bpbyk7CisKKwkvKiBkcml2ZSBpdCBhY3RpdmUsIGFsc28gaW5hY3RpdmUtPmFjdGl2ZSBlZGdlICovCisJZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChyZXNldF9ncGlvLCAxKTsKKwltZGVsYXkoMTAwKTsKKwkvKiBkcml2ZSBpbmFjdGl2ZSwgYWxzbyBhY3RpdmUtPmluYWN0aXZlIGVkZ2UgKi8KKwlncGlvZF9zZXRfdmFsdWUocmVzZXRfZ3BpbywgMCk7CisJbWRlbGF5KDEwMCk7CisKKwkvKiBkcml2ZSBpdCBhY3RpdmUsIGFsc28gaW5hY3RpdmUtPmFjdGl2ZSBlZGdlICovCisJZ3Bpb2Rfc2V0X3ZhbHVlKHJlc2V0X2dwaW8sIDEpOworCisJLyogZ2l2ZSBpdCBzb21lIHRpbWUgKi8KKwltZGVsYXkoMzAwMCk7CisKKwlXQVJOX09OKDEpOworfQorCitzdGF0aWMgaW50IGdwaW9fcG93ZXJvZmZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlib29sIGlucHV0ID0gZmFsc2U7CisJZW51bSBncGlvZF9mbGFncyBmbGFnczsKKworCS8qIElmIGEgcG1fcG93ZXJfb2ZmIGZ1bmN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQsIGxlYXZlIGl0IGFsb25lICovCisJaWYgKHBtX3Bvd2VyX29mZiAhPSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSIlczogcG1fcG93ZXJfb2ZmIGZ1bmN0aW9uIGFscmVhZHkgcmVnaXN0ZXJlZCIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaW5wdXQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGRldi0+ZGV2Lm9mX25vZGUsICJpbnB1dCIpOworCWlmIChpbnB1dCkKKwkJZmxhZ3MgPSBHUElPRF9JTjsKKwllbHNlCisJCWZsYWdzID0gR1BJT0RfT1VUX0xPVzsKKworCXJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldCgmcGRldi0+ZGV2LCBOVUxMLCBmbGFncyk7CisJaWYgKElTX0VSUihyZXNldF9ncGlvKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVzZXRfZ3Bpbyk7CisKKwlwbV9wb3dlcl9vZmYgPSAmZ3Bpb19wb3dlcm9mZl9kb19wb3dlcm9mZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncGlvX3Bvd2Vyb2ZmX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlmIChwbV9wb3dlcl9vZmYgPT0gJmdwaW9fcG93ZXJvZmZfZG9fcG93ZXJvZmYpCisJCXBtX3Bvd2VyX29mZiA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZ3Bpb19wb3dlcm9mZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZ3Bpby1wb3dlcm9mZiIsIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBncGlvX3Bvd2Vyb2ZmX2RyaXZlciA9IHsKKwkucHJvYmUgPSBncGlvX3Bvd2Vyb2ZmX3Byb2JlLAorCS5yZW1vdmUgPSBncGlvX3Bvd2Vyb2ZmX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJwb3dlcm9mZi1ncGlvIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfZ3Bpb19wb3dlcm9mZl9tYXRjaCwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihncGlvX3Bvd2Vyb2ZmX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkphbWllIExlbnRpbiA8am1AbGVudGluLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHUElPIHBvd2Vyb2ZmIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpwb3dlcm9mZi1ncGlvIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2dwaW8tcmVzdGFydC5jIGIvZHJpdmVycy9wb3dlci9yZXNldC9ncGlvLXJlc3RhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjliNDVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9ncGlvLXJlc3RhcnQuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIFRvZ2dsZXMgYSBHUElPIHBpbiB0byByZXN0YXJ0IGEgZGV2aWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQmFzZWQgb24gdGhlIGdwaW8tcG93ZXJvZmYgZHJpdmVyLgorICovCisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK3N0cnVjdCBncGlvX3Jlc3RhcnQgeworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJlc3RhcnRfaGFuZGxlcjsKKwl1MzIgYWN0aXZlX2RlbGF5X21zOworCXUzMiBpbmFjdGl2ZV9kZWxheV9tczsKKwl1MzIgd2FpdF9kZWxheV9tczsKK307CisKK3N0YXRpYyBpbnQgZ3Bpb19yZXN0YXJ0X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkJdW5zaWduZWQgbG9uZyBtb2RlLCB2b2lkICpjbWQpCit7CisJc3RydWN0IGdwaW9fcmVzdGFydCAqZ3Bpb19yZXN0YXJ0ID0KKwkJY29udGFpbmVyX29mKHRoaXMsIHN0cnVjdCBncGlvX3Jlc3RhcnQsIHJlc3RhcnRfaGFuZGxlcik7CisKKwkvKiBkcml2ZSBpdCBhY3RpdmUsIGFsc28gaW5hY3RpdmUtPmFjdGl2ZSBlZGdlICovCisJZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChncGlvX3Jlc3RhcnQtPnJlc2V0X2dwaW8sIDEpOworCW1kZWxheShncGlvX3Jlc3RhcnQtPmFjdGl2ZV9kZWxheV9tcyk7CisKKwkvKiBkcml2ZSBpbmFjdGl2ZSwgYWxzbyBhY3RpdmUtPmluYWN0aXZlIGVkZ2UgKi8KKwlncGlvZF9zZXRfdmFsdWUoZ3Bpb19yZXN0YXJ0LT5yZXNldF9ncGlvLCAwKTsKKwltZGVsYXkoZ3Bpb19yZXN0YXJ0LT5pbmFjdGl2ZV9kZWxheV9tcyk7CisKKwkvKiBkcml2ZSBpdCBhY3RpdmUsIGFsc28gaW5hY3RpdmUtPmFjdGl2ZSBlZGdlICovCisJZ3Bpb2Rfc2V0X3ZhbHVlKGdwaW9fcmVzdGFydC0+cmVzZXRfZ3BpbywgMSk7CisKKwkvKiBnaXZlIGl0IHNvbWUgdGltZSAqLworCW1kZWxheShncGlvX3Jlc3RhcnQtPndhaXRfZGVsYXlfbXMpOworCisJV0FSTl9PTigxKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIGludCBncGlvX3Jlc3RhcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZ3Bpb19yZXN0YXJ0ICpncGlvX3Jlc3RhcnQ7CisJYm9vbCBvcGVuX3NvdXJjZSA9IGZhbHNlOworCXUzMiBwcm9wZXJ0eTsKKwlpbnQgcmV0OworCisJZ3Bpb19yZXN0YXJ0ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZ3Bpb19yZXN0YXJ0KSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghZ3Bpb19yZXN0YXJ0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9wZW5fc291cmNlID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKHBkZXYtPmRldi5vZl9ub2RlLCAib3Blbi1zb3VyY2UiKTsKKworCWdwaW9fcmVzdGFydC0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KCZwZGV2LT5kZXYsIE5VTEwsCisJCQlvcGVuX3NvdXJjZSA/IEdQSU9EX0lOIDogR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihncGlvX3Jlc3RhcnQtPnJlc2V0X2dwaW8pKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5ldCBnZXQgcmVzZXQgR1BJT1xuIik7CisJCXJldHVybiBQVFJfRVJSKGdwaW9fcmVzdGFydC0+cmVzZXRfZ3Bpbyk7CisJfQorCisJZ3Bpb19yZXN0YXJ0LT5yZXN0YXJ0X2hhbmRsZXIubm90aWZpZXJfY2FsbCA9IGdwaW9fcmVzdGFydF9ub3RpZnk7CisJZ3Bpb19yZXN0YXJ0LT5yZXN0YXJ0X2hhbmRsZXIucHJpb3JpdHkgPSAxMjk7CisJZ3Bpb19yZXN0YXJ0LT5hY3RpdmVfZGVsYXlfbXMgPSAxMDA7CisJZ3Bpb19yZXN0YXJ0LT5pbmFjdGl2ZV9kZWxheV9tcyA9IDEwMDsKKwlncGlvX3Jlc3RhcnQtPndhaXRfZGVsYXlfbXMgPSAzMDAwOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGRldi0+ZGV2Lm9mX25vZGUsICJwcmlvcml0eSIsICZwcm9wZXJ0eSk7CisJaWYgKCFyZXQpIHsKKwkJaWYgKHByb3BlcnR5ID4gMjU1KQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBwcmlvcml0eSBwcm9wZXJ0eTogJXVcbiIsCisJCQkJCXByb3BlcnR5KTsKKwkJZWxzZQorCQkJZ3Bpb19yZXN0YXJ0LT5yZXN0YXJ0X2hhbmRsZXIucHJpb3JpdHkgPSBwcm9wZXJ0eTsKKwl9CisKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwgImFjdGl2ZS1kZWxheSIsCisJCQkmZ3Bpb19yZXN0YXJ0LT5hY3RpdmVfZGVsYXlfbXMpOworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLCAiaW5hY3RpdmUtZGVsYXkiLAorCQkJJmdwaW9fcmVzdGFydC0+aW5hY3RpdmVfZGVsYXlfbXMpOworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLCAid2FpdC1kZWxheSIsCisJCQkmZ3Bpb19yZXN0YXJ0LT53YWl0X2RlbGF5X21zKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGdwaW9fcmVzdGFydCk7CisKKwlyZXQgPSByZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJmdwaW9fcmVzdGFydC0+cmVzdGFydF9oYW5kbGVyKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBjYW5ub3QgcmVnaXN0ZXIgcmVzdGFydCBoYW5kbGVyLCAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19yZXN0YXJ0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBncGlvX3Jlc3RhcnQgKmdwaW9fcmVzdGFydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSB1bnJlZ2lzdGVyX3Jlc3RhcnRfaGFuZGxlcigmZ3Bpb19yZXN0YXJ0LT5yZXN0YXJ0X2hhbmRsZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSIlczogY2Fubm90IHVucmVnaXN0ZXIgcmVzdGFydCBoYW5kbGVyLCAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2dwaW9fcmVzdGFydF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZ3Bpby1yZXN0YXJ0IiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdwaW9fcmVzdGFydF9kcml2ZXIgPSB7CisJLnByb2JlID0gZ3Bpb19yZXN0YXJ0X3Byb2JlLAorCS5yZW1vdmUgPSBncGlvX3Jlc3RhcnRfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInJlc3RhcnQtZ3BpbyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX2dwaW9fcmVzdGFydF9tYXRjaCwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihncGlvX3Jlc3RhcnRfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiRGF2aWQgUmlsZXkgPGRhdmlkcmlsZXlAY2hyb21pdW0ub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHUElPIHJlc3RhcnQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2hpc2ktcmVib290LmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2hpc2ktcmVib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5Mzg3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvaGlzaS1yZWJvb3QuYwpAQCAtMCwwICsxLDgyIEBACisvKgorICogSGlzaWxpY29uIFNvQyByZXNldCBjb2RlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEhpc2lsaWNvbiBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTGluYXJvIEx0ZC4KKyAqCisgKiBBdXRob3I6IEhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKworI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpiYXNlOworc3RhdGljIHUzMiByZWJvb3Rfb2Zmc2V0OworCitzdGF0aWMgaW50IGhpc2lfcmVzdGFydF9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKwkJCQl1bnNpZ25lZCBsb25nIG1vZGUsIHZvaWQgKmNtZCkKK3sKKwl3cml0ZWxfcmVsYXhlZCgweGRlYWRiZWVmLCBiYXNlICsgcmVib290X29mZnNldCk7CisKKwl3aGlsZSAoMSkKKwkJY3B1X2RvX2lkbGUoKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBoaXNpX3Jlc3RhcnRfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBoaXNpX3Jlc3RhcnRfaGFuZGxlciwKKwkucHJpb3JpdHkgPSAxMjgsCit9OworCitzdGF0aWMgaW50IGhpc2lfcmVib290X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCWludCBlcnI7CisKKwliYXNlID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghYmFzZSkgeworCQlXQVJOKDEsICJmYWlsZWQgdG8gbWFwIGJhc2UgYWRkcmVzcyIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJyZWJvb3Qtb2Zmc2V0IiwgJnJlYm9vdF9vZmZzZXQpIDwgMCkgeworCQlwcl9lcnIoImZhaWxlZCB0byBmaW5kIHJlYm9vdC1vZmZzZXQgcHJvcGVydHlcbiIpOworCQlpb3VubWFwKGJhc2UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnIgPSByZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJmhpc2lfcmVzdGFydF9uYik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgcmVzdGFydCBoYW5kbGVyIChlcnI9JWQpXG4iLAorCQkJZXJyKTsKKwkJaW91bm1hcChiYXNlKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBoaXNpX3JlYm9vdF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiaGlzaWxpY29uLHN5c2N0cmwiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhpc2lfcmVib290X2RyaXZlciA9IHsKKwkucHJvYmUgPSBoaXNpX3JlYm9vdF9wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJoaXNpLXJlYm9vdCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGhpc2lfcmVib290X29mX21hdGNoLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihoaXNpX3JlYm9vdF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9pbXgtc252cy1wb3dlcm9mZi5jIGIvZHJpdmVycy9wb3dlci9yZXNldC9pbXgtc252cy1wb3dlcm9mZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNmNlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2lteC1zbnZzLXBvd2Vyb2ZmLmMKQEAgLTAsMCArMSw2NiBAQAorLyogUG93ZXIgb2ZmIGRyaXZlciBmb3IgaS5teDYKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgRlJFRVNDQUxFIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBiYXNlZCBvbiBtc20tcG93ZXJvZmYuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworc3RhdGljIHZvaWQgX19pb21lbSAqc252c19iYXNlOworCitzdGF0aWMgdm9pZCBkb19pbXhfcG93ZXJvZmYodm9pZCkKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChzbnZzX2Jhc2UpOworCisJLyogc2V0IFRPUCBhbmQgRFBfRU4gYml0ICovCisJd3JpdGVsKHZhbHVlIHwgMHg2MCwgc252c19iYXNlKTsKK30KKworc3RhdGljIGludCBpbXhfcG93ZXJvZmZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzbnZzX2Jhc2UgPSBvZl9pb21hcChwZGV2LT5kZXYub2Zfbm9kZSwgMCk7CisJaWYgKCFzbnZzX2Jhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwbV9wb3dlcl9vZmYgPSBkb19pbXhfcG93ZXJvZmY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2lteF9wb3dlcm9mZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXBvd2Vyb2ZmIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9pbXhfcG93ZXJvZmZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbXhfcG93ZXJvZmZfZHJpdmVyID0geworCS5wcm9iZSA9IGlteF9wb3dlcm9mZl9wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpbXgtc252cy1wb3dlcm9mZiIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihvZl9pbXhfcG93ZXJvZmZfbWF0Y2gpLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbXhfcG93ZXJvZmZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlteF9wb3dlcm9mZl9kcml2ZXIpOworfQorZGV2aWNlX2luaXRjYWxsKGlteF9wb3dlcm9mZl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQva2V5c3RvbmUtcmVzZXQuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQva2V5c3RvbmUtcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzBmMWJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9rZXlzdG9uZS1yZXNldC5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogVEkga2V5c3RvbmUgcmVib290IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQuIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIEF1dGhvcjogSXZhbiBLaG9yb256aHVrIDxpdmFuLmtob3JvbnpodWtAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2RlZmluZSBSU1RZUEVfUkcJCQkweDAKKyNkZWZpbmUgUlNDVFJMX1JHCQkJMHg0CisjZGVmaW5lIFJTQ0ZHX1JHCQkJMHg4CisjZGVmaW5lIFJTSVNPX1JHCQkJMHhjCisKKyNkZWZpbmUgUlNDVFJMX0tFWV9NQVNLCQkJMHgwMDAwZmZmZgorI2RlZmluZSBSU0NUUkxfUkVTRVRfTUFTSwkJQklUKDE2KQorI2RlZmluZSBSU0NUUkxfS0VZCQkJMHg1YTY5CisKKyNkZWZpbmUgUlNNVVhfT01PREVfTUFTSwkJMHhlCisjZGVmaW5lIFJTTVVYX09NT0RFX1JFU0VUX09OCQkweGEKKyNkZWZpbmUgUlNNVVhfT01PREVfUkVTRVRfT0ZGCQkweDAKKyNkZWZpbmUgUlNNVVhfTE9DS19NQVNLCQkJMHgxCisjZGVmaW5lIFJTTVVYX0xPQ0tfU0VUCQkJMHgxCisKKyNkZWZpbmUgUlNDRkdfUlNUWVBFX1NPRlQJCTB4MzAwZgorI2RlZmluZSBSU0NGR19SU1RZUEVfSEFSRAkJMHgwCisKKyNkZWZpbmUgV0RUX01VWF9OVU1CRVIJCQkweDQKKworc3RhdGljIGludCByc3BsbF9vZmZzZXQ7CitzdGF0aWMgc3RydWN0IHJlZ21hcCAqcGxsY3RybF9yZWdzOworCisvKioKKyAqIHJzY3RybF9lbmFibGVfcnNwbGxfd3JpdGUgLSBlbmFibGUgYWNjZXNzIHRvIFJTQ1RSTCwgUlNDRkcKKyAqIFRvIGJlIGFibGUgdG8gYWNjZXNzIHRvIFJTQ1RSTCwgUlNDRkcgcmVnaXN0ZXJzCisgKiB3ZSBoYXZlIHRvIHdyaXRlIGEga2V5IGJlZm9yZQorICovCitzdGF0aWMgaW5saW5lIGludCByc2N0cmxfZW5hYmxlX3JzcGxsX3dyaXRlKHZvaWQpCit7CisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhwbGxjdHJsX3JlZ3MsIHJzcGxsX29mZnNldCArIFJTQ1RSTF9SRywKKwkJCQkgIFJTQ1RSTF9LRVlfTUFTSywgUlNDVFJMX0tFWSk7Cit9CisKK3N0YXRpYyBpbnQgcnNjdHJsX3Jlc3RhcnRfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkJICB1bnNpZ25lZCBsb25nIG1vZGUsIHZvaWQgKmNtZCkKK3sKKwkvKiBlbmFibGUgd3JpdGUgYWNjZXNzIHRvIFJTVENUUkwgKi8KKwlyc2N0cmxfZW5hYmxlX3JzcGxsX3dyaXRlKCk7CisKKwkvKiByZXNldCB0aGUgU09DICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBsbGN0cmxfcmVncywgcnNwbGxfb2Zmc2V0ICsgUlNDVFJMX1JHLAorCQkJICAgUlNDVFJMX1JFU0VUX01BU0ssIDApOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJzY3RybF9yZXN0YXJ0X25iID0geworCS5ub3RpZmllcl9jYWxsID0gcnNjdHJsX3Jlc3RhcnRfaGFuZGxlciwKKwkucHJpb3JpdHkgPSAxMjgsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCByc2N0cmxfb2ZfbWF0Y2hbXSA9IHsKKwl7LmNvbXBhdGlibGUgPSAidGksa2V5c3RvbmUtcmVzZXQiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCByc2N0cmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCXUzMiB2YWw7CisJdW5zaWduZWQgaW50IHJnOworCXUzMiByc211eF9vZmZzZXQ7CisJc3RydWN0IHJlZ21hcCAqZGV2Y3RybF9yZWdzOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKworCWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCisJLyogZ2V0IHJlZ21hcHMgKi8KKwlwbGxjdHJsX3JlZ3MgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAidGksc3lzY29uLXBsbCIpOworCWlmIChJU19FUlIocGxsY3RybF9yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIocGxsY3RybF9yZWdzKTsKKworCWRldmN0cmxfcmVncyA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJ0aSxzeXNjb24tZGV2Iik7CisJaWYgKElTX0VSUihkZXZjdHJsX3JlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihkZXZjdHJsX3JlZ3MpOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJ0aSxzeXNjb24tcGxsIiwgMSwgJnJzcGxsX29mZnNldCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImNvdWxkbid0IHJlYWQgdGhlIHJlc2V0IHBsbCBvZmZzZXQhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJ0aSxzeXNjb24tZGV2IiwgMSwgJnJzbXV4X29mZnNldCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImNvdWxkbid0IHJlYWQgdGhlIHJzbXV4IG9mZnNldCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBzZXQgc29mdC9oYXJkIHJlc2V0ICovCisJdmFsID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAidGksc29mdC1yZXNldCIpOworCXZhbCA9IHZhbCA/IFJTQ0ZHX1JTVFlQRV9TT0ZUIDogUlNDRkdfUlNUWVBFX0hBUkQ7CisKKwlyZXQgPSByc2N0cmxfZW5hYmxlX3JzcGxsX3dyaXRlKCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHJlZ21hcF93cml0ZShwbGxjdHJsX3JlZ3MsIHJzcGxsX29mZnNldCArIFJTQ0ZHX1JHLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBkaXNhYmxlIGEgcmVzZXQgaXNvbGF0aW9uIGZvciBhbGwgbW9kdWxlIGNsb2NrcyAqLworCXJldCA9IHJlZ21hcF93cml0ZShwbGxjdHJsX3JlZ3MsIHJzcGxsX29mZnNldCArIFJTSVNPX1JHLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogZW5hYmxlIGEgcmVzZXQgZm9yIHdhdGNoZG9ncyBmcm9tIHdkdC1saXN0ICovCisJZm9yIChpID0gMDsgaSA8IFdEVF9NVVhfTlVNQkVSOyBpKyspIHsKKwkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJ0aSx3ZHQtbGlzdCIsIGksICZ2YWwpOworCQlpZiAocmV0ID09IC1FT1ZFUkZMT1cgJiYgIWkpIHsKKwkJCWRldl9lcnIoZGV2LCAidGksd2R0LWxpc3QgcHJvcGVydHkgaGFzIHRvIGNvbnRhaW4gYXQiCisJCQkJImxlYXN0IG9uZSBlbnRyeVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIGlmIChyZXQpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHZhbCA+PSBXRFRfTVVYX05VTUJFUikgeworCQkJZGV2X2VycihkZXYsICJ0aSx3ZHQtbGlzdCBwcm9wZXJ0eSBjYW4gY29udGFpbiIKKwkJCQkib25seSBudW1iZXJzIDwgNFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJnID0gcnNtdXhfb2Zmc2V0ICsgdmFsICogNDsKKworCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGV2Y3RybF9yZWdzLCByZywgUlNNVVhfT01PREVfTUFTSywKKwkJCQkJIFJTTVVYX09NT0RFX1JFU0VUX09OIHwKKwkJCQkJIFJTTVVYX0xPQ0tfU0VUKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVnaXN0ZXJfcmVzdGFydF9oYW5kbGVyKCZyc2N0cmxfcmVzdGFydF9uYik7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgcmVnaXN0ZXIgcmVzdGFydCBoYW5kbGVyIChlcnI9JWQpXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnNjdHJsX2RyaXZlciA9IHsKKwkucHJvYmUgPSByc2N0cmxfcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gcnNjdHJsX29mX21hdGNoLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihyc2N0cmxfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiSXZhbiBLaG9yb256aHVrIDxpdmFuLmtob3JvbnpodWtAdGkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUZXhhcyBJbnN0cnVtZW50cyBrZXlzdG9uZSByZXNldCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBLQlVJTERfTU9ETkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2x0YzI5NTItcG93ZXJvZmYuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvbHRjMjk1Mi1wb3dlcm9mZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZmVkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2x0YzI5NTItcG93ZXJvZmYuYwpAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqIExUQzI5NTIgKFBvd2VyUGF0aCkgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0LCBYc2VucyBUZWNobm9sb2dpZXMgQlYgPGluZm9AeHNlbnMuY29tPgorICogTWFpbnRhaW5lcjogUmVu6SBNb2xsIDxsaW51eEByLW1vbGwubmw+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIC0gRGVzY3JpcHRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGlzIGRyaXZlciBpcyB0byBiZSB1c2VkIHdpdGggYW4gZXh0ZXJuYWwgUG93ZXJQYXRoIENvbnRyb2xsZXIgKExUQzI5NTIpLgorICogSXRzIGZ1bmN0aW9uIGlzIHRvIGRldGVybWluZSB3aGVuIGEgZXh0ZXJuYWwgc2h1dCBkb3duIGlzIHRyaWdnZXJlZAorICogYW5kIHJlYWN0IGJ5IHByb3Blcmx5IHNodXR0aW5nIGRvd24gdGhlIHN5c3RlbS4KKyAqCisgKiBUaGlzIGRyaXZlciBleHBlY3RzIGEgZGV2aWNlIHRyZWUgd2l0aCBhIGx0YzI5NTIgZW50cnkgZm9yIHBpbiBtYXBwaW5nLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIC0gR1BJTworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBmb2xsb3dpbmcgR1BJT3MgYXJlIHVzZWQ6CisgKiAtIHRyaWdnZXIgKGlucHV0KQorICogICAgIEEgbGV2ZWwgY2hhbmdlIGluZGljYXRlcyB0aGUgc2h1dC1kb3duIHRyaWdnZXIuIElmIGl0J3Mgc3RhdGUgcmV2ZXJ0cworICogICAgIHdpdGhpbiB0aGUgdGltZS1vdXQgZGVmaW5lZCBieSB0cmlnZ2VyX2RlbGF5LCB0aGUgc2h1dCBkb3duIGlzIG5vdAorICogICAgIGV4ZWN1dGVkLiBJZiBubyBwaW4gaXMgYXNzaWduZWQgdG8gdGhpcyBpbnB1dCwgdGhlIGRyaXZlciB3aWxsIHN0YXJ0IHRoZQorICogICAgIHdhdGNoZG9nIHRvZ2dsZSBpbW1lZGlhdGVseS4gVGhlIGNoaXAgd2lsbCBvbmx5IHBvd2VyIG9mZiB0aGUgc3lzdGVtIGlmCisgKiAgICAgaXQgaXMgcmVxdWVzdGVkIHRvIGRvIHNvIHRocm91Z2ggdGhlIGtpbGwgbGluZS4KKyAqCisgKiAtIHdhdGNoZG9nIChvdXRwdXQpCisgKiAgICAgT25jZSBhIHNodXQgZG93biBpcyB0cmlnZ2VyZWQsIHRoZSBkcml2ZXIgd2lsbCB0b2dnbGUgdGhpcyBzaWduYWwsCisgKiAgICAgd2l0aCBhbiBpbnRlcm5hbCAod2RlX2ludGVydmFsKSB0byBzdGFsbCB0aGUgaGFyZHdhcmUgc2h1dCBkb3duLgorICoKKyAqIC0ga2lsbCAob3V0cHV0KQorICogICAgIFRoZSBsYXN0IGFjdGlvbiBkdXJpbmcgc2h1dCBkb3duIGlzIHRyaWdnZXJpbmcgdGhpcyBzaWduYWxsaW5nLCBzdWNoCisgKiAgICAgdGhhdCB0aGUgUG93ZXJQYXRoIENvbnRyb2wgd2lsbCBwb3dlciBkb3duIHRoZSBoYXJkd2FyZS4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAtIEludGVycnVwdHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgZHJpdmVyIHJlcXVpcmVzIGEgbm9uLXNoYXJlZCwgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IG9uIHRoZSB0cmlnZ2VyCisgKiBHUElPLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisKK3N0cnVjdCBsdGMyOTUyX3Bvd2Vyb2ZmIHsKKwlzdHJ1Y3QgaHJ0aW1lciB0aW1lcl90cmlnZ2VyOworCXN0cnVjdCBocnRpbWVyIHRpbWVyX3dkZTsKKworCWt0aW1lX3QgdHJpZ2dlcl9kZWxheTsKKwlrdGltZV90IHdkZV9pbnRlcnZhbDsKKworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9fdHJpZ2dlcjsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX3dhdGNoZG9nOworCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9fa2lsbDsKKworCWJvb2wga2VybmVsX3BhbmljOworCXN0cnVjdCBub3RpZmllcl9ibG9jayBwYW5pY19ub3RpZmllcjsKK307CisKKyNkZWZpbmUgdG9fbHRjMjk1MihwLCBtKSBjb250YWluZXJfb2YocCwgc3RydWN0IGx0YzI5NTJfcG93ZXJvZmYsIG0pCisKKy8qCisgKiBUaGlzIGdsb2JhbCB2YXJpYWJsZSBpcyBvbmx5IG5lZWRlZCBmb3IgcG1fcG93ZXJfb2ZmLiBXZSBzaG91bGQKKyAqIHJlbW92ZSBpdCBlbnRpcmVseSBvbmNlIHdlIGRvbid0IG5lZWQgdGhlIGdsb2JhbCBzdGF0ZSBhbnltb3JlLgorICovCitzdGF0aWMgc3RydWN0IGx0YzI5NTJfcG93ZXJvZmYgKmx0YzI5NTJfZGF0YTsKKworLyoqCisgKiBsdGMyOTUyX3Bvd2Vyb2ZmX3RpbWVyX3dkZSAtIFRpbWVyIGNhbGxiYWNrCisgKiBUb2dnbGVzIHRoZSB3YXRjaGRvZyByZXNldCBzaWduYWwgZWFjaCB3ZGVfaW50ZXJ2YWwKKyAqCisgKiBAdGltZXI6IGNvcnJlc3BvbmRpbmcgdGltZXIKKyAqCisgKiBSZXR1cm5zIEhSVElNRVJfUkVTVEFSVCBmb3IgYW4gaW5maW5pdGUgbG9vcCB3aGljaCB3aWxsIG9ubHkgc3RvcCB3aGVuIHRoZQorICogbWFjaGluZSBhY3R1YWxseSBzaHV0cyBkb3duCisgKi8KK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBsdGMyOTUyX3Bvd2Vyb2ZmX3RpbWVyX3dkZShzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCit7CisJa3RpbWVfdCBub3c7CisJaW50IHN0YXRlOworCXVuc2lnbmVkIGxvbmcgb3ZlcnJ1bnM7CisJc3RydWN0IGx0YzI5NTJfcG93ZXJvZmYgKmRhdGEgPSB0b19sdGMyOTUyKHRpbWVyLCB0aW1lcl93ZGUpOworCisJaWYgKGRhdGEtPmtlcm5lbF9wYW5pYykKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCisJc3RhdGUgPSBncGlvZF9nZXRfdmFsdWUoZGF0YS0+Z3Bpb193YXRjaGRvZyk7CisJZ3Bpb2Rfc2V0X3ZhbHVlKGRhdGEtPmdwaW9fd2F0Y2hkb2csICFzdGF0ZSk7CisKKwlub3cgPSBocnRpbWVyX2NiX2dldF90aW1lKHRpbWVyKTsKKwlvdmVycnVucyA9IGhydGltZXJfZm9yd2FyZCh0aW1lciwgbm93LCBkYXRhLT53ZGVfaW50ZXJ2YWwpOworCisJcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsKK30KKworc3RhdGljIHZvaWQgbHRjMjk1Ml9wb3dlcm9mZl9zdGFydF93ZGUoc3RydWN0IGx0YzI5NTJfcG93ZXJvZmYgKmRhdGEpCit7CisJaHJ0aW1lcl9zdGFydCgmZGF0YS0+dGltZXJfd2RlLCBkYXRhLT53ZGVfaW50ZXJ2YWwsIEhSVElNRVJfTU9ERV9SRUwpOworfQorCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQKK2x0YzI5NTJfcG93ZXJvZmZfdGltZXJfdHJpZ2dlcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCit7CisJc3RydWN0IGx0YzI5NTJfcG93ZXJvZmYgKmRhdGEgPSB0b19sdGMyOTUyKHRpbWVyLCB0aW1lcl90cmlnZ2VyKTsKKworCWx0YzI5NTJfcG93ZXJvZmZfc3RhcnRfd2RlKGRhdGEpOworCWRldl9pbmZvKGRhdGEtPmRldiwgImV4ZWN1dGluZyBzaHV0ZG93blxuIik7CisJb3JkZXJseV9wb3dlcm9mZih0cnVlKTsKKworCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKK30KKworLyoqCisgKiBsdGMyOTUyX3Bvd2Vyb2ZmX2hhbmRsZXIgLSBJbnRlcnJ1cHQgaGFuZGxlcgorICogVHJpZ2dlcmVkIGVhY2ggdGltZSB0aGUgdHJpZ2dlciBzaWduYWwgY2hhbmdlcyBzdGF0ZSBhbmQgKGRlKWFjdGl2YXRlcyBhCisgKiB0aW1lLW91dCAodGltZXJfdHJpZ2dlcikuIE9uY2UgdGhlIHRpbWUtb3V0IGlzIGFjdHVhbGx5IHJlYWNoZWQgdGhlIHNodXQKKyAqIGRvd24gaXMgZXhlY3V0ZWQuCisgKgorICogQGlycTogSVJRIG51bWJlcgorICogQGRldl9pZDogcG9pbnRlciB0byB0aGUgbWFpbiBkYXRhIHN0cnVjdHVyZQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgbHRjMjk1Ml9wb3dlcm9mZl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbHRjMjk1Ml9wb3dlcm9mZiAqZGF0YSA9IGRldl9pZDsKKworCWlmIChkYXRhLT5rZXJuZWxfcGFuaWMgfHwgaHJ0aW1lcl9hY3RpdmUoJmRhdGEtPnRpbWVyX3dkZSkpIHsKKwkJLyogc2h1dGRvd24gaXMgYWxyZWFkeSB0cmlnZ2VyZWQsIG5vdGhpbmcgdG8gZG8gYW55IG1vcmUgKi8KKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWlmIChncGlvZF9nZXRfdmFsdWUoZGF0YS0+Z3Bpb190cmlnZ2VyKSkgeworCQlocnRpbWVyX3N0YXJ0KCZkYXRhLT50aW1lcl90cmlnZ2VyLCBkYXRhLT50cmlnZ2VyX2RlbGF5LAorCQkJICAgICAgSFJUSU1FUl9NT0RFX1JFTCk7CisJfSBlbHNlIHsKKwkJaHJ0aW1lcl9jYW5jZWwoJmRhdGEtPnRpbWVyX3RyaWdnZXIpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGx0YzI5NTJfcG93ZXJvZmZfa2lsbCh2b2lkKQoreworCWdwaW9kX3NldF92YWx1ZShsdGMyOTUyX2RhdGEtPmdwaW9fa2lsbCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGx0YzI5NTJfcG93ZXJvZmZfZGVmYXVsdChzdHJ1Y3QgbHRjMjk1Ml9wb3dlcm9mZiAqZGF0YSkKK3sKKwlkYXRhLT53ZGVfaW50ZXJ2YWwgPSBrdGltZV9zZXQoMCwgMzAwTCoxRTZMKTsKKwlkYXRhLT50cmlnZ2VyX2RlbGF5ID0ga3RpbWVfc2V0KDIsIDUwMEwqMUU2TCk7CisKKwlocnRpbWVyX2luaXQoJmRhdGEtPnRpbWVyX3RyaWdnZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CisJZGF0YS0+dGltZXJfdHJpZ2dlci5mdW5jdGlvbiA9IGx0YzI5NTJfcG93ZXJvZmZfdGltZXJfdHJpZ2dlcjsKKworCWhydGltZXJfaW5pdCgmZGF0YS0+dGltZXJfd2RlLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOworCWRhdGEtPnRpbWVyX3dkZS5mdW5jdGlvbiA9IGx0YzI5NTJfcG93ZXJvZmZfdGltZXJfd2RlOworfQorCitzdGF0aWMgaW50IGx0YzI5NTJfcG93ZXJvZmZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IGx0YzI5NTJfcG93ZXJvZmYgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWx0YzI5NTJfcG93ZXJvZmZfZGVmYXVsdChkYXRhKTsKKworCWRhdGEtPmdwaW9fd2F0Y2hkb2cgPSBkZXZtX2dwaW9kX2dldCgmcGRldi0+ZGV2LCAid2F0Y2hkb2ciLAorCQkJCQkgICAgIEdQSU9EX09VVF9MT1cpOworCWlmIChJU19FUlIoZGF0YS0+Z3Bpb193YXRjaGRvZykpIHsKKwkJcmV0ID0gUFRSX0VSUihkYXRhLT5ncGlvX3dhdGNoZG9nKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGNsYWltIGdwaW8gXCJ3YXRjaGRvZ1wiXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkYXRhLT5ncGlvX2tpbGwgPSBkZXZtX2dwaW9kX2dldCgmcGRldi0+ZGV2LCAia2lsbCIsIEdQSU9EX09VVF9MT1cpOworCWlmIChJU19FUlIoZGF0YS0+Z3Bpb19raWxsKSkgeworCQlyZXQgPSBQVFJfRVJSKGRhdGEtPmdwaW9fa2lsbCk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBjbGFpbSBncGlvIFwia2lsbFwiXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkYXRhLT5ncGlvX3RyaWdnZXIgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbCgmcGRldi0+ZGV2LCAidHJpZ2dlciIsCisJCQkJCQkgICAgIEdQSU9EX0lOKTsKKwlpZiAoSVNfRVJSKGRhdGEtPmdwaW9fdHJpZ2dlcikpIHsKKwkJLyoKKwkJICogSXQncyBub3QgYSBwcm9ibGVtIGlmIHRoZSB0cmlnZ2VyIGdwaW8gaXNuJ3QgYXZhaWxhYmxlLCBidXQKKwkJICogaXQgaXMgd29ydGggYSB3YXJuaW5nIGlmIGl0cyB1c2Ugd2FzIGRlZmluZWQgaW4gdGhlIGRldmljZQorCQkgKiB0cmVlLgorCQkgKi8KKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGNsYWltIGdwaW8gXCJ0cmlnZ2VyXCJcbiIpOworCQlkYXRhLT5ncGlvX3RyaWdnZXIgPSBOVUxMOworCX0KKworCWlmIChkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGdwaW9kX3RvX2lycShkYXRhLT5ncGlvX3RyaWdnZXIpLAorCQkJICAgICBsdGMyOTUyX3Bvd2Vyb2ZmX2hhbmRsZXIsCisJCQkgICAgIChJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcpLAorCQkJICAgICAibHRjMjk1Mi1wb3dlcm9mZiIsCisJCQkgICAgIGRhdGEpKSB7CisJCS8qCisJCSAqIFNvbWUgdGhpbmdzIG1heSBoYXZlIGhhcHBlbmVkOgorCQkgKiAtIE5vIHRyaWdnZXIgaW5wdXQgd2FzIGRlZmluZWQKKwkJICogLSBDbGFpbWluZyB0aGUgR1BJTyBmYWlsZWQKKwkJICogLSBXZSBjb3VsZCBub3QgbWFwIHRvIGFuIElSUQorCQkgKiAtIFdlIGNvdWxkbid0IHJlZ2lzdGVyIGFuIGludGVycnVwdCBoYW5kbGVyCisJCSAqCisJCSAqIE5vbmUgb2YgdGhlc2UgcmVhbGx5IGFyZSBwcm9ibGVtcywgYnV0IGFsbCBvZiB0aGVtCisJCSAqIGRpc3F1YWxpZnkgdGhlIHB1c2ggYnV0dG9uIGZyb20gY29udHJvbGxpbmcgdGhlIHBvd2VyLgorCQkgKgorCQkgKiBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpZiB0aGUgbHRjMjk1MgorCQkgKiBkZXRlY3RzIGEgYnV0dG9uIHByZXNzIGZvciBsb25nIGVub3VnaCwgaXQgd2lsbCBzdGlsbCBzdGFydAorCQkgKiBpdHMgb3duIHBvd2VyZG93biB3aW5kb3cgYW5kIGN1dCB0aGUgcG93ZXIgb24gdXMgaWYgd2UgZG9uJ3QKKwkJICogc3RhcnQgdGhlIHdhdGNoZG9nIHRyaWdnZXIuCisJCSAqLworCQlpZiAoZGF0YS0+Z3Bpb190cmlnZ2VyKSB7CisJCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJCSAidW5hYmxlIHRvIGNvbmZpZ3VyZSB0aGUgdHJpZ2dlciBpbnRlcnJ1cHRcbiIpOworCQkJZGV2bV9ncGlvZF9wdXQoJnBkZXYtPmRldiwgZGF0YS0+Z3Bpb190cmlnZ2VyKTsKKwkJCWRhdGEtPmdwaW9fdHJpZ2dlciA9IE5VTEw7CisJCX0KKwkJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJCSAicG93ZXIgZG93biB0cmlnZ2VyIGlucHV0IHdpbGwgbm90IGJlIHVzZWRcbiIpOworCQlsdGMyOTUyX3Bvd2Vyb2ZmX3N0YXJ0X3dkZShkYXRhKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsdGMyOTUyX3Bvd2Vyb2ZmX25vdGlmeV9wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCQkgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGx0YzI5NTJfcG93ZXJvZmYgKmRhdGEgPSB0b19sdGMyOTUyKG5iLCBwYW5pY19ub3RpZmllcik7CisKKwlkYXRhLT5rZXJuZWxfcGFuaWMgPSB0cnVlOworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIGludCBsdGMyOTUyX3Bvd2Vyb2ZmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbHRjMjk1Ml9wb3dlcm9mZiAqZGF0YTsKKworCWlmIChwbV9wb3dlcl9vZmYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicG1fcG93ZXJfb2ZmIGFscmVhZHkgcmVnaXN0ZXJlZCIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPmRldiA9ICZwZGV2LT5kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CisKKwlyZXQgPSBsdGMyOTUyX3Bvd2Vyb2ZmX2luaXQocGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFRPRE86IHJlbW92ZSBsdGMyOTUyX2RhdGEgKi8KKwlsdGMyOTUyX2RhdGEgPSBkYXRhOworCXBtX3Bvd2VyX29mZiA9IGx0YzI5NTJfcG93ZXJvZmZfa2lsbDsKKworCWRhdGEtPnBhbmljX25vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBsdGMyOTUyX3Bvd2Vyb2ZmX25vdGlmeV9wYW5pYzsKKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJCQkJICAgICAgICZkYXRhLT5wYW5pY19ub3RpZmllcik7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgInByb2JlIHN1Y2Nlc3NmdWxcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHRjMjk1Ml9wb3dlcm9mZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbHRjMjk1Ml9wb3dlcm9mZiAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcG1fcG93ZXJfb2ZmID0gTlVMTDsKKwlocnRpbWVyX2NhbmNlbCgmZGF0YS0+dGltZXJfdHJpZ2dlcik7CisJaHJ0aW1lcl9jYW5jZWwoJmRhdGEtPnRpbWVyX3dkZSk7CisJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJCQkJCSAmZGF0YS0+cGFuaWNfbm90aWZpZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9sdGMyOTUyX3Bvd2Vyb2ZmX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJsbHRjLGx0YzI5NTIifSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9sdGMyOTUyX3Bvd2Vyb2ZmX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbHRjMjk1Ml9wb3dlcm9mZl9kcml2ZXIgPSB7CisJLnByb2JlID0gbHRjMjk1Ml9wb3dlcm9mZl9wcm9iZSwKKwkucmVtb3ZlID0gbHRjMjk1Ml9wb3dlcm9mZl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibHRjMjk1Mi1wb3dlcm9mZiIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX2x0YzI5NTJfcG93ZXJvZmZfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobHRjMjk1Ml9wb3dlcm9mZl9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJSZW7pIE1vbGwgPHJlbmUubW9sbEB4c2Vucy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxUQyBQb3dlclBhdGggcG93ZXItb2ZmIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9tc20tcG93ZXJvZmYuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvbXNtLXBvd2Vyb2ZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcwMmVmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvbXNtLXBvd2Vyb2ZmLmMKQEAgLTAsMCArMSw4MSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEzLCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm1zbV9wc19ob2xkOworc3RhdGljIGludCBkb19tc21fcmVzdGFydChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJd3JpdGVsKDAsIG1zbV9wc19ob2xkKTsKKwltZGVsYXkoMTAwMDApOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJlc3RhcnRfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBkb19tc21fcmVzdGFydCwKKwkucHJpb3JpdHkgPSAxMjgsCit9OworCitzdGF0aWMgdm9pZCBkb19tc21fcG93ZXJvZmYodm9pZCkKK3sKKwkvKiBUT0RPOiBBZGQgcG93ZXJvZmYgY2FwYWJpbGl0eSAqLworCWRvX21zbV9yZXN0YXJ0KCZyZXN0YXJ0X25iLCAwLCBOVUxMKTsKK30KKworc3RhdGljIGludCBtc21fcmVzdGFydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHJlc291cmNlICptZW07CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1zbV9wc19ob2xkID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKG1zbV9wc19ob2xkKSkKKwkJcmV0dXJuIFBUUl9FUlIobXNtX3BzX2hvbGQpOworCisJcmVnaXN0ZXJfcmVzdGFydF9oYW5kbGVyKCZyZXN0YXJ0X25iKTsKKworCXBtX3Bvd2VyX29mZiA9IGRvX21zbV9wb3dlcm9mZjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9tc21fcmVzdGFydF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAicWNvbSxwc2hvbGQiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX21zbV9yZXN0YXJ0X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXNtX3Jlc3RhcnRfZHJpdmVyID0geworCS5wcm9iZSA9IG1zbV9yZXN0YXJ0X3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1zbS1yZXN0YXJ0IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG9mX21zbV9yZXN0YXJ0X21hdGNoKSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXNtX3Jlc3RhcnRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1zbV9yZXN0YXJ0X2RyaXZlcik7Cit9CitkZXZpY2VfaW5pdGNhbGwobXNtX3Jlc3RhcnRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3FuYXAtcG93ZXJvZmYuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvcW5hcC1wb3dlcm9mZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ODlhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3FuYXAtcG93ZXJvZmYuYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIFFOQVAgVHVyYm8gTkFTIEJvYXJkIHBvd2VyIG9mZi4gQ2FuIGFsc28gYmUgdXNlZCBvbiBTeW5vbG9neSBkZXZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CisgKgorICogQmFzZWQgb24gdGhlIGNvZGUgZnJvbToKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIE1hcnRpbiBNaWNobG1heXIgPHRibUBjeXJpdXMuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4ICBCeXJvbiBCcmFkbGV5IDxieXJvbi5iYnJhZGxleUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjZGVmaW5lIFVBUlQxX1JFRyh4KQkoYmFzZSArICgoVUFSVF8jI3gpIDw8IDIpKQorCitzdHJ1Y3QgcG93ZXJfb2ZmX2NmZyB7CisJdTMyIGJhdWQ7CisJY2hhciBjbWQ7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBvd2VyX29mZl9jZmcgcW5hcF9wb3dlcl9vZmZfY2ZnID0geworCS5iYXVkID0gMTkyMDAsCisJLmNtZCA9ICdBJywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG93ZXJfb2ZmX2NmZyBzeW5vbG9neV9wb3dlcl9vZmZfY2ZnID0geworCS5iYXVkID0gOTYwMCwKKwkuY21kID0gJzEnLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcW5hcF9wb3dlcl9vZmZfb2ZfbWF0Y2hfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInFuYXAscG93ZXItb2ZmIiwKKwkgIC5kYXRhID0gJnFuYXBfcG93ZXJfb2ZmX2NmZywKKwl9LAorCXsgLmNvbXBhdGlibGUgPSAic3lub2xvZ3kscG93ZXItb2ZmIiwKKwkgIC5kYXRhID0gJnN5bm9sb2d5X3Bvd2VyX29mZl9jZmcsCisJfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHFuYXBfcG93ZXJfb2ZmX29mX21hdGNoX3RhYmxlKTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqYmFzZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRjbGs7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBvd2VyX29mZl9jZmcgKmNmZzsKKworc3RhdGljIHZvaWQgcW5hcF9wb3dlcl9vZmYodm9pZCkKK3sKKwljb25zdCB1bnNpZ25lZCBkaXZpc29yID0gKCh0Y2xrICsgKDggKiBjZmctPmJhdWQpKSAvICgxNiAqIGNmZy0+YmF1ZCkpOworCisJcHJfZXJyKCIlczogdHJpZ2dlcmluZyBwb3dlci1vZmYuLi5cbiIsIF9fZnVuY19fKTsKKworCS8qIGhpamFjayBVQVJUMSBhbmQgcmVzZXQgaW50byBzYW5lIHN0YXRlICovCisJd3JpdGVsKDB4ODMsIFVBUlQxX1JFRyhMQ1IpKTsKKwl3cml0ZWwoZGl2aXNvciAmIDB4ZmYsIFVBUlQxX1JFRyhETEwpKTsKKwl3cml0ZWwoKGRpdmlzb3IgPj4gOCkgJiAweGZmLCBVQVJUMV9SRUcoRExNKSk7CisJd3JpdGVsKDB4MDMsIFVBUlQxX1JFRyhMQ1IpKTsKKwl3cml0ZWwoMHgwMCwgVUFSVDFfUkVHKElFUikpOworCXdyaXRlbCgweDAwLCBVQVJUMV9SRUcoRkNSKSk7CisJd3JpdGVsKDB4MDAsIFVBUlQxX1JFRyhNQ1IpKTsKKworCS8qIHNlbmQgdGhlIHBvd2VyLW9mZiBjb21tYW5kIHRvIFBJQyAqLworCXdyaXRlbChjZmctPmNtZCwgVUFSVDFfUkVHKFRYKSk7Cit9CisKK3N0YXRpYyBpbnQgcW5hcF9wb3dlcl9vZmZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGNsayAqY2xrOworCWNoYXIgc3ltbmFtZVtLU1lNX05BTUVfTEVOXTsKKworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoID0KKwkJb2ZfbWF0Y2hfbm9kZShxbmFwX3Bvd2VyX29mZl9vZl9tYXRjaF90YWJsZSwgbnApOworCWNmZyA9IG1hdGNoLT5kYXRhOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJNaXNzaW5nIHJlc291cmNlIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIG1hcCByZXNvdXJjZSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBXZSBuZWVkIHRvIGtub3cgdGNsayBpbiBvcmRlciB0byBjYWxjdWxhdGUgdGhlIFVBUlQgZGl2aXNvciAqLworCWNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2xrIG1pc3NpbmciKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwl9CisKKwl0Y2xrID0gY2xrX2dldF9yYXRlKGNsayk7CisKKwkvKiBDaGVjayB0aGF0IG5vdGhpbmcgZWxzZSBoYXMgYWxyZWFkeSBzZXR1cCBhIGhhbmRsZXIgKi8KKwlpZiAocG1fcG93ZXJfb2ZmKSB7CisJCWxvb2t1cF9zeW1ib2xfbmFtZSgodWxvbmcpcG1fcG93ZXJfb2ZmLCBzeW1uYW1lKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJInBtX3Bvd2VyX29mZiBhbHJlYWR5IGNsYWltZWQgJXAgJXMiLAorCQkJcG1fcG93ZXJfb2ZmLCBzeW1uYW1lKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcG1fcG93ZXJfb2ZmID0gcW5hcF9wb3dlcl9vZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbmFwX3Bvd2VyX29mZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlwbV9wb3dlcl9vZmYgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxbmFwX3Bvd2VyX29mZl9kcml2ZXIgPSB7CisJLnByb2JlCT0gcW5hcF9wb3dlcl9vZmZfcHJvYmUsCisJLnJlbW92ZQk9IHFuYXBfcG93ZXJfb2ZmX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJxbmFwX3Bvd2VyX29mZiIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihxbmFwX3Bvd2VyX29mZl9vZl9tYXRjaF90YWJsZSksCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHFuYXBfcG93ZXJfb2ZmX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUU5BUCBQb3dlciBvZmYgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3Jlc3RhcnQtcG93ZXJvZmYuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvcmVzdGFydC1wb3dlcm9mZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYjIyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3Jlc3RhcnQtcG93ZXJvZmYuYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogUG93ZXIgb2ZmIGJ5IHJlc3RhcnRpbmcgYW5kIGxldCB1LWJvb3Qga2VlcCBob2xkIG9mIHRoZSBtYWNoaW5lCisgKiB1bnRpbCB0aGUgdXNlciBwcmVzc2VzIGEgYnV0dG9uIGZvciBleGFtcGxlLgorICoKKyAqIEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQW5kcmV3IEx1bm4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisKK3N0YXRpYyB2b2lkIHJlc3RhcnRfcG93ZXJvZmZfZG9fcG93ZXJvZmYodm9pZCkKK3sKKwlyZWJvb3RfbW9kZSA9IFJFQk9PVF9IQVJEOworCW1hY2hpbmVfcmVzdGFydChOVUxMKTsKK30KKworc3RhdGljIGludCByZXN0YXJ0X3Bvd2Vyb2ZmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJLyogSWYgYSBwbV9wb3dlcl9vZmYgZnVuY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBhZGRlZCwgbGVhdmUgaXQgYWxvbmUgKi8KKwlpZiAocG1fcG93ZXJfb2ZmICE9IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJInBtX3Bvd2VyX29mZiBmdW5jdGlvbiBhbHJlYWR5IHJlZ2lzdGVyZWQiKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlwbV9wb3dlcl9vZmYgPSAmcmVzdGFydF9wb3dlcm9mZl9kb19wb3dlcm9mZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXN0YXJ0X3Bvd2Vyb2ZmX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlmIChwbV9wb3dlcl9vZmYgPT0gJnJlc3RhcnRfcG93ZXJvZmZfZG9fcG93ZXJvZmYpCisJCXBtX3Bvd2VyX29mZiA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfcmVzdGFydF9wb3dlcm9mZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAicmVzdGFydC1wb3dlcm9mZiIsIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByZXN0YXJ0X3Bvd2Vyb2ZmX2RyaXZlciA9IHsKKwkucHJvYmUgPSByZXN0YXJ0X3Bvd2Vyb2ZmX3Byb2JlLAorCS5yZW1vdmUgPSByZXN0YXJ0X3Bvd2Vyb2ZmX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJwb3dlcm9mZi1yZXN0YXJ0IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfcmVzdGFydF9wb3dlcm9mZl9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocmVzdGFydF9wb3dlcm9mZl9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2giKTsKK01PRFVMRV9ERVNDUklQVElPTigicmVzdGFydCBwb3dlcm9mZiBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06cG93ZXJvZmYtcmVzdGFydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9ybW9iaWxlLXJlc2V0LmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3Jtb2JpbGUtcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjU2OWRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9ybW9iaWxlLXJlc2V0LmMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIFJlbmVzYXMgUi1Nb2JpbGUgUmVzZXQgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEdsaWRlciBidmJhCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisKKy8qIFNZU0MgUmVnaXN0ZXIgQmFuayAyICovCisjZGVmaW5lIFJFU0NOVDIJCTB4MjAJCS8qIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgMiAqLworCisvKiBSZXNldCBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgUkVTQ05UMl9QUkVTCTB4ODAwMDAwMDAJLyogU29mdCBwb3dlci1vbiByZXNldCAqLworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpzeXNjX2Jhc2UyOworCitzdGF0aWMgaW50IHJtb2JpbGVfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkJIHVuc2lnbmVkIGxvbmcgbW9kZSwgdm9pZCAqY21kKQoreworCXByX2RlYnVnKCIlcyAlbHVcbiIsIF9fZnVuY19fLCBtb2RlKTsKKworCS8qIExldCdzIGFzc3VtZSB3ZSBoYXZlIGFjcXVpcmVkIHRoZSBIUEIgc2VtYXBob3JlICovCisJd3JpdGVsKFJFU0NOVDJfUFJFUywgc3lzY19iYXNlMiArIFJFU0NOVDIpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJtb2JpbGVfcmVzZXRfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBybW9iaWxlX3Jlc2V0X2hhbmRsZXIsCisJLnByaW9yaXR5ID0gMTkyLAorfTsKKworc3RhdGljIGludCBybW9iaWxlX3Jlc2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGVycm9yOworCisJc3lzY19iYXNlMiA9IG9mX2lvbWFwKHBkZXYtPmRldi5vZl9ub2RlLCAxKTsKKwlpZiAoIXN5c2NfYmFzZTIpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyb3IgPSByZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJnJtb2JpbGVfcmVzZXRfbmIpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiY2Fubm90IHJlZ2lzdGVyIHJlc3RhcnQgaGFuZGxlciAoZXJyPSVkKVxuIiwgZXJyb3IpOworCQlnb3RvIGZhaWxfdW5tYXA7CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWxfdW5tYXA6CisJaW91bm1hcChzeXNjX2Jhc2UyKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgcm1vYmlsZV9yZXNldF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl1bnJlZ2lzdGVyX3Jlc3RhcnRfaGFuZGxlcigmcm1vYmlsZV9yZXNldF9uYik7CisJaW91bm1hcChzeXNjX2Jhc2UyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcm1vYmlsZV9yZXNldF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAicmVuZXNhcyxzeXNjLXJtb2JpbGUiLCB9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJtb2JpbGVfcmVzZXRfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBybW9iaWxlX3Jlc2V0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBybW9iaWxlX3Jlc2V0X3Byb2JlLAorCS5yZW1vdmUgPSBybW9iaWxlX3Jlc2V0X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJybW9iaWxlX3Jlc2V0IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gcm1vYmlsZV9yZXNldF9vZl9tYXRjaCwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihybW9iaWxlX3Jlc2V0X2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiUmVuZXNhcyBSLU1vYmlsZSBSZXNldCBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnQrcmVuZXNhc0BnbGlkZXIuYmU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3N0LXBvd2Vyb2ZmLmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3N0LXBvd2Vyb2ZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4ODg3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvc3QtcG93ZXJvZmYuYwpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqCisgKiBQb3dlciBvZmYgUmVzdGFydCBkcml2ZXIsIHVzZWQgaW4gU1RNaWNyb2VsZWN0cm9uaWNzIGRldmljZXMuCisgKgorICogQXV0aG9yOiBDaHJpc3RvcGhlIEtlcmVsbG8gPGNocmlzdG9waGUua2VyZWxsb0BzdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKK3N0cnVjdCByZXNldF9zeXNjZmcgeworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwkvKiBzeXNjZmcgdXNlZCBmb3IgcmVzZXQgKi8KKwl1bnNpZ25lZCBpbnQgb2Zmc2V0X3JzdDsKKwl1bnNpZ25lZCBpbnQgbWFza19yc3Q7CisJLyogc3lzY2ZnIHVzZWQgZm9yIHVubWFzayB0aGUgcmVzZXQgKi8KKwl1bnNpZ25lZCBpbnQgb2Zmc2V0X3JzdF9tc2s7CisJdW5zaWduZWQgaW50IG1hc2tfcnN0X21zazsKK307CisKKy8qIFNUaUg0MTUgKi8KKyNkZWZpbmUgU1RJSDQxNV9TWVNDRkdfMTEJMHgyYworI2RlZmluZSBTVElINDE1X1NZU0NGR18xNQkweDNjCisKK3N0YXRpYyBzdHJ1Y3QgcmVzZXRfc3lzY2ZnIHN0aWg0MTVfcmVzZXQgPSB7CisJLm9mZnNldF9yc3QgPSBTVElINDE1X1NZU0NGR18xMSwKKwkubWFza19yc3QgPSBCSVQoMCksCisJLm9mZnNldF9yc3RfbXNrID0gU1RJSDQxNV9TWVNDRkdfMTUsCisJLm1hc2tfcnN0X21zayA9IEJJVCgwKQorfTsKKworLyogU1RpSDQxNiAqLworI2RlZmluZSBTVElINDE2X1NZU0NGR181MDAJMHg3ZDAKKyNkZWZpbmUgU1RJSDQxNl9TWVNDRkdfNTA0CTB4N2UwCisKK3N0YXRpYyBzdHJ1Y3QgcmVzZXRfc3lzY2ZnIHN0aWg0MTZfcmVzZXQgPSB7CisJLm9mZnNldF9yc3QgPSBTVElINDE2X1NZU0NGR181MDAsCisJLm1hc2tfcnN0ID0gQklUKDApLAorCS5vZmZzZXRfcnN0X21zayA9IFNUSUg0MTZfU1lTQ0ZHXzUwNCwKKwkubWFza19yc3RfbXNrID0gQklUKDApCit9OworCisvKiBTVGlINDA3ICovCisjZGVmaW5lIFNUSUg0MDdfU1lTQ0ZHXzQwMDAJMHgwCisjZGVmaW5lIFNUSUg0MDdfU1lTQ0ZHXzQwMDgJMHgyMAorCitzdGF0aWMgc3RydWN0IHJlc2V0X3N5c2NmZyBzdGloNDA3X3Jlc2V0ID0geworCS5vZmZzZXRfcnN0ID0gU1RJSDQwN19TWVNDRkdfNDAwMCwKKwkubWFza19yc3QgPSBCSVQoMCksCisJLm9mZnNldF9yc3RfbXNrID0gU1RJSDQwN19TWVNDRkdfNDAwOCwKKwkubWFza19yc3RfbXNrID0gQklUKDApCit9OworCisvKiBTVGlEMTI3ICovCisjZGVmaW5lIFNUSUQxMjdfU1lTQ0ZHXzcwMAkweDAKKyNkZWZpbmUgU1RJRDEyN19TWVNDRkdfNzczCTB4MTI0CisKK3N0YXRpYyBzdHJ1Y3QgcmVzZXRfc3lzY2ZnIHN0aWQxMjdfcmVzZXQgPSB7CisJLm9mZnNldF9yc3QgPSBTVElEMTI3X1NZU0NGR183NzMsCisJLm1hc2tfcnN0ID0gQklUKDApLAorCS5vZmZzZXRfcnN0X21zayA9IFNUSUQxMjdfU1lTQ0ZHXzcwMCwKKwkubWFza19yc3RfbXNrID0gQklUKDgpCit9OworCitzdGF0aWMgc3RydWN0IHJlc2V0X3N5c2NmZyAqc3RfcmVzdGFydF9zeXNjZmc7CisKK3N0YXRpYyBpbnQgc3RfcmVzdGFydChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgbW9kZSwKKwkJICAgICAgdm9pZCAqY21kKQoreworCS8qIHJlc2V0IHN5c2NmZyB1cGRhdGVkICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHN0X3Jlc3RhcnRfc3lzY2ZnLT5yZWdtYXAsCisJCQkgICBzdF9yZXN0YXJ0X3N5c2NmZy0+b2Zmc2V0X3JzdCwKKwkJCSAgIHN0X3Jlc3RhcnRfc3lzY2ZnLT5tYXNrX3JzdCwKKwkJCSAgIDApOworCisJLyogdW5tYXNrIHRoZSByZXNldCAqLworCXJlZ21hcF91cGRhdGVfYml0cyhzdF9yZXN0YXJ0X3N5c2NmZy0+cmVnbWFwLAorCQkJICAgc3RfcmVzdGFydF9zeXNjZmctPm9mZnNldF9yc3RfbXNrLAorCQkJICAgc3RfcmVzdGFydF9zeXNjZmctPm1hc2tfcnN0X21zaywKKwkJCSAgIDApOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHN0X3Jlc3RhcnRfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBzdF9yZXN0YXJ0LAorCS5wcmlvcml0eSA9IDE5MiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN0X3Jlc2V0X29mX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJzdCxzdGloNDE1LXJlc3RhcnQiLAorCQkuZGF0YSA9ICh2b2lkICopJnN0aWg0MTVfcmVzZXQsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzdCxzdGloNDE2LXJlc3RhcnQiLAorCQkuZGF0YSA9ICh2b2lkICopJnN0aWg0MTZfcmVzZXQsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXJlc3RhcnQiLAorCQkuZGF0YSA9ICh2b2lkICopJnN0aWg0MDdfcmVzZXQsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJzdCxzdGlkMTI3LXJlc3RhcnQiLAorCQkuZGF0YSA9ICh2b2lkICopJnN0aWQxMjdfcmVzZXQsCisJfSwKKwl7fQorfTsKKworc3RhdGljIGludCBzdF9yZXNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2Uoc3RfcmVzZXRfb2ZfbWF0Y2gsIGRldik7CisJaWYgKCFtYXRjaCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzdF9yZXN0YXJ0X3N5c2NmZyA9IChzdHJ1Y3QgcmVzZXRfc3lzY2ZnICopbWF0Y2gtPmRhdGE7CisKKwlzdF9yZXN0YXJ0X3N5c2NmZy0+cmVnbWFwID0KKwkJc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShucCwgInN0LHN5c2NmZyIpOworCWlmIChJU19FUlIoc3RfcmVzdGFydF9zeXNjZmctPnJlZ21hcCkpIHsKKwkJZGV2X2VycihkZXYsICJObyBzeXNjZmcgcGhhbmRsZSBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihzdF9yZXN0YXJ0X3N5c2NmZy0+cmVnbWFwKTsKKwl9CisKKwlyZXR1cm4gcmVnaXN0ZXJfcmVzdGFydF9oYW5kbGVyKCZzdF9yZXN0YXJ0X25iKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3RfcmVzZXRfZHJpdmVyID0geworCS5wcm9iZSA9IHN0X3Jlc2V0X3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInN0X3Jlc2V0IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gc3RfcmVzZXRfb2ZfbWF0Y2gsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN0X3Jlc2V0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzdF9yZXNldF9kcml2ZXIpOworfQorCitkZXZpY2VfaW5pdGNhbGwoc3RfcmVzZXRfaW5pdCk7CisKK01PRFVMRV9BVVRIT1IoIkNocmlzdG9waGUgS2VyZWxsbyA8Y2hyaXN0b3BoZS5rZXJlbGxvQHN0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU1RNaWNyb2VsZWN0cm9uaWNzIFBvd2VyIG9mZiBSZXN0YXJ0IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9zeXNjb24tcG93ZXJvZmYuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvc3lzY29uLXBvd2Vyb2ZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2MGIwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvc3lzY29uLXBvd2Vyb2ZmLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBHZW5lcmljIFN5c2NvbiBQb3dlcm9mZiBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIE5hdGlvbmFsIEluc3RydW1lbnRzIENvcnAuCisgKiBBdXRob3I6IE1vcml0eiBGaXNjaGVyIDxtb3JpdHouZmlzY2hlckBldHR1cy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworc3RhdGljIHN0cnVjdCByZWdtYXAgKm1hcDsKK3N0YXRpYyB1MzIgb2Zmc2V0Oworc3RhdGljIHUzMiBtYXNrOworCit2b2lkIHN5c2Nvbl9wb3dlcm9mZih2b2lkKQoreworCS8qIElzc3VlIHRoZSBwb3dlcm9mZiAqLworCXJlZ21hcF93cml0ZShtYXAsIG9mZnNldCwgbWFzayk7CisKKwltZGVsYXkoMTAwMCk7CisKKwlwcl9lbWVyZygiVW5hYmxlIHRvIHBvd2Vyb2ZmIHN5c3RlbVxuIik7Cit9CisKK3N0YXRpYyBpbnQgc3lzY29uX3Bvd2Vyb2ZmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY2hhciBzeW1uYW1lW0tTWU1fTkFNRV9MRU5dOworCisJbWFwID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShwZGV2LT5kZXYub2Zfbm9kZSwgInJlZ21hcCIpOworCWlmIChJU19FUlIobWFwKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IHN5c2NvbiIpOworCQlyZXR1cm4gUFRSX0VSUihtYXApOworCX0KKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwgIm9mZnNldCIsICZvZmZzZXQpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZWFkICdvZmZzZXQnIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwgIm1hc2siLCAmbWFzaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlYWQgJ21hc2snIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwbV9wb3dlcl9vZmYpIHsKKwkJbG9va3VwX3N5bWJvbF9uYW1lKCh1bG9uZylwbV9wb3dlcl9vZmYsIHN5bW5hbWUpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCSJwbV9wb3dlcl9vZmYgYWxyZWFkeSBjbGFpbWVkICVwICVzIiwKKwkJcG1fcG93ZXJfb2ZmLCBzeW1uYW1lKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlwbV9wb3dlcl9vZmYgPSBzeXNjb25fcG93ZXJvZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzeXNjb25fcG93ZXJvZmZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaWYgKHBtX3Bvd2VyX29mZiA9PSBzeXNjb25fcG93ZXJvZmYpCisJCXBtX3Bvd2VyX29mZiA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3lzY29uX3Bvd2Vyb2ZmX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJzeXNjb24tcG93ZXJvZmYiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN5c2Nvbl9wb3dlcm9mZl9kcml2ZXIgPSB7CisJLnByb2JlID0gc3lzY29uX3Bvd2Vyb2ZmX3Byb2JlLAorCS5yZW1vdmUgPSBzeXNjb25fcG93ZXJvZmZfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInN5c2Nvbi1wb3dlcm9mZiIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHN5c2Nvbl9wb3dlcm9mZl9vZl9tYXRjaCwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3lzY29uX3Bvd2Vyb2ZmX3JlZ2lzdGVyKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc3lzY29uX3Bvd2Vyb2ZmX2RyaXZlcik7Cit9CitkZXZpY2VfaW5pdGNhbGwoc3lzY29uX3Bvd2Vyb2ZmX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvc3lzY29uLXJlYm9vdC5jIGIvZHJpdmVycy9wb3dlci9yZXNldC9zeXNjb24tcmVib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwZDI2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvc3lzY29uLXJlYm9vdC5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBHZW5lcmljIFN5c2NvbiBSZWJvb3QgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEZlbmcgS2FuIDxma2FuQGFwbS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworc3RydWN0IHN5c2Nvbl9yZWJvb3RfY29udGV4dCB7CisJc3RydWN0IHJlZ21hcCAqbWFwOworCXUzMiBvZmZzZXQ7CisJdTMyIG1hc2s7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJlc3RhcnRfaGFuZGxlcjsKK307CisKK3N0YXRpYyBpbnQgc3lzY29uX3Jlc3RhcnRfaGFuZGxlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKwkJCQkJdW5zaWduZWQgbG9uZyBtb2RlLCB2b2lkICpjbWQpCit7CisJc3RydWN0IHN5c2Nvbl9yZWJvb3RfY29udGV4dCAqY3R4ID0KKwkJCWNvbnRhaW5lcl9vZih0aGlzLCBzdHJ1Y3Qgc3lzY29uX3JlYm9vdF9jb250ZXh0LAorCQkJCQlyZXN0YXJ0X2hhbmRsZXIpOworCisJLyogSXNzdWUgdGhlIHJlYm9vdCAqLworCXJlZ21hcF93cml0ZShjdHgtPm1hcCwgY3R4LT5vZmZzZXQsIGN0eC0+bWFzayk7CisKKwltZGVsYXkoMTAwMCk7CisKKwlwcl9lbWVyZygiVW5hYmxlIHRvIHJlc3RhcnQgc3lzdGVtXG4iKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBpbnQgc3lzY29uX3JlYm9vdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzeXNjb25fcmVib290X2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCWludCBlcnI7CisKKwljdHggPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljdHgtPm1hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAicmVnbWFwIik7CisJaWYgKElTX0VSUihjdHgtPm1hcCkpCisJCXJldHVybiBQVFJfRVJSKGN0eC0+bWFwKTsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwgIm9mZnNldCIsICZjdHgtPm9mZnNldCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLCAibWFzayIsICZjdHgtPm1hc2spKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN0eC0+cmVzdGFydF9oYW5kbGVyLm5vdGlmaWVyX2NhbGwgPSBzeXNjb25fcmVzdGFydF9oYW5kbGU7CisJY3R4LT5yZXN0YXJ0X2hhbmRsZXIucHJpb3JpdHkgPSAxOTI7CisJZXJyID0gcmVnaXN0ZXJfcmVzdGFydF9oYW5kbGVyKCZjdHgtPnJlc3RhcnRfaGFuZGxlcik7CisJaWYgKGVycikKKwkJZGV2X2VycihkZXYsICJjYW4ndCByZWdpc3RlciByZXN0YXJ0IG5vdGlmaWVyIChlcnI9JWQpXG4iLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3lzY29uX3JlYm9vdF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAic3lzY29uLXJlYm9vdCIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3lzY29uX3JlYm9vdF9kcml2ZXIgPSB7CisJLnByb2JlID0gc3lzY29uX3JlYm9vdF9wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzeXNjb24tcmVib290IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gc3lzY29uX3JlYm9vdF9vZl9tYXRjaCwKKwl9LAorfTsKK2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVyKHN5c2Nvbl9yZWJvb3RfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvdmV4cHJlc3MtcG93ZXJvZmYuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvdmV4cHJlc3MtcG93ZXJvZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTliZjcwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC92ZXhwcmVzcy1wb3dlcm9mZi5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBUk0gTGltaXRlZAorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvdmV4cHJlc3MuaD4KKworc3RhdGljIHZvaWQgdmV4cHJlc3NfcmVzZXRfZG8oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICp3aGF0KQoreworCWludCBlcnIgPSAtRU5PRU5UOworCXN0cnVjdCByZWdtYXAgKnJlZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKHJlZykgeworCQllcnIgPSByZWdtYXBfd3JpdGUocmVnLCAwLCAwKTsKKwkJaWYgKCFlcnIpCisJCQltZGVsYXkoMTAwMCk7CisJfQorCisJZGV2X2VtZXJnKGRldiwgIlVuYWJsZSB0byAlcyAoJWQpXG4iLCB3aGF0LCBlcnIpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZSAqdmV4cHJlc3NfcG93ZXJfb2ZmX2RldmljZTsKKworc3RhdGljIHZvaWQgdmV4cHJlc3NfcG93ZXJfb2ZmKHZvaWQpCit7CisJdmV4cHJlc3NfcmVzZXRfZG8odmV4cHJlc3NfcG93ZXJfb2ZmX2RldmljZSwgInBvd2VyIG9mZiIpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZSAqdmV4cHJlc3NfcmVzdGFydF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgdmV4cHJlc3NfcmVzdGFydChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgbW9kZSwKKwkJCSAgICAgdm9pZCAqY21kKQoreworCXZleHByZXNzX3Jlc2V0X2RvKHZleHByZXNzX3Jlc3RhcnRfZGV2aWNlLCAicmVzdGFydCIpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHZleHByZXNzX3Jlc3RhcnRfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSB2ZXhwcmVzc19yZXN0YXJ0LAorCS5wcmlvcml0eSA9IDEyOCwKK307CisKK3N0YXRpYyBzc2l6ZV90IHZleHByZXNzX3Jlc2V0X2FjdGl2ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmV4cHJlc3NfcmVzdGFydF9kZXZpY2UgPT0gZGV2KTsKK30KKworc3RhdGljIHNzaXplX3QgdmV4cHJlc3NfcmVzZXRfYWN0aXZlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWxvbmcgdmFsdWU7CisJaW50IGVyciA9IGtzdHJ0b2woYnVmLCAwLCAmdmFsdWUpOworCisJaWYgKCFlcnIgJiYgdmFsdWUpCisJCXZleHByZXNzX3Jlc3RhcnRfZGV2aWNlID0gZGV2OworCisJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OworfQorCitERVZJQ0VfQVRUUihhY3RpdmUsIFNfSVJVR08gfCBTX0lXVVNSLCB2ZXhwcmVzc19yZXNldF9hY3RpdmVfc2hvdywKKwkJdmV4cHJlc3NfcmVzZXRfYWN0aXZlX3N0b3JlKTsKKworCitlbnVtIHZleHByZXNzX3Jlc2V0X2Z1bmMgeyBGVU5DX1JFU0VULCBGVU5DX1NIVVRET1dOLCBGVU5DX1JFQk9PVCB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2ZXhwcmVzc19yZXNldF9vZl9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXJlc2V0IiwKKwkJLmRhdGEgPSAodm9pZCAqKUZVTkNfUkVTRVQsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJhcm0sdmV4cHJlc3Mtc2h1dGRvd24iLAorCQkuZGF0YSA9ICh2b2lkICopRlVOQ19TSFVURE9XTgorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAiYXJtLHZleHByZXNzLXJlYm9vdCIsCisJCS5kYXRhID0gKHZvaWQgKilGVU5DX1JFQk9PVAorCX0sCisJe30KK307CisKK3N0YXRpYyBpbnQgX3ZleHByZXNzX3JlZ2lzdGVyX3Jlc3RhcnRfaGFuZGxlcihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKworCXZleHByZXNzX3Jlc3RhcnRfZGV2aWNlID0gZGV2OworCWVyciA9IHJlZ2lzdGVyX3Jlc3RhcnRfaGFuZGxlcigmdmV4cHJlc3NfcmVzdGFydF9uYik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZWdpc3RlciByZXN0YXJ0IGhhbmRsZXIgKGVycj0lZClcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9hY3RpdmUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmV4cHJlc3NfcmVzZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCA9CisJCQlvZl9tYXRjaF9kZXZpY2UodmV4cHJlc3NfcmVzZXRfb2ZfbWF0Y2gsICZwZGV2LT5kZXYpOworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghbWF0Y2gpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF92ZXhwcmVzc19jb25maWcoJnBkZXYtPmRldik7CisJaWYgKElTX0VSUihyZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihyZWdtYXApOworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCByZWdtYXApOworCisJc3dpdGNoICgoZW51bSB2ZXhwcmVzc19yZXNldF9mdW5jKW1hdGNoLT5kYXRhKSB7CisJY2FzZSBGVU5DX1NIVVRET1dOOgorCQl2ZXhwcmVzc19wb3dlcl9vZmZfZGV2aWNlID0gJnBkZXYtPmRldjsKKwkJcG1fcG93ZXJfb2ZmID0gdmV4cHJlc3NfcG93ZXJfb2ZmOworCQlicmVhazsKKwljYXNlIEZVTkNfUkVTRVQ6CisJCWlmICghdmV4cHJlc3NfcmVzdGFydF9kZXZpY2UpCisJCQlyZXQgPSBfdmV4cHJlc3NfcmVnaXN0ZXJfcmVzdGFydF9oYW5kbGVyKCZwZGV2LT5kZXYpOworCQlicmVhazsKKwljYXNlIEZVTkNfUkVCT09UOgorCQlyZXQgPSBfdmV4cHJlc3NfcmVnaXN0ZXJfcmVzdGFydF9oYW5kbGVyKCZwZGV2LT5kZXYpOworCQlicmVhazsKKwl9OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmV4cHJlc3NfcmVzZXRfZHJpdmVyID0geworCS5wcm9iZSA9IHZleHByZXNzX3Jlc2V0X3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInZleHByZXNzLXJlc2V0IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gdmV4cHJlc3NfcmVzZXRfb2ZfbWF0Y2gsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZleHByZXNzX3Jlc2V0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2ZXhwcmVzc19yZXNldF9kcml2ZXIpOworfQorZGV2aWNlX2luaXRjYWxsKHZleHByZXNzX3Jlc2V0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC94Z2VuZS1yZWJvb3QuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQveGdlbmUtcmVib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3ZTkzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQveGdlbmUtcmVib290LmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBBcHBsaWVkTWljcm8gWC1HZW5lIFNvQyBSZWJvb3QgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEZlbmcgS2FuIDxma2FuQGFwbS5jb20+CisgKiBBdXRob3I6IExvYyBIbyA8bGhvQGFwbS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3lzdGVtIHJlYm9vdCBmdW5jdGlvbmFsaXR5IGZvciBBUE0gWC1HZW5lIFNvQy4KKyAqIEZvciBzeXN0ZW0gc2h1dGRvd24sIHRoaXMgaXMgYm9hcmQgc3BlY2lmeS4gSWYgYSBib2FyZCBkZXNpZ25lcgorICogaW1wbGVtZW50cyBHUElPIHNodXRkb3duLCB1c2UgdGhlIGdwaW8tcG93ZXJvZmYuYyBkcml2ZXIuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworc3RydWN0IHhnZW5lX3JlYm9vdF9jb250ZXh0IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCAqY3NyOworCXUzMiBtYXNrOworCXN0cnVjdCBub3RpZmllcl9ibG9jayByZXN0YXJ0X2hhbmRsZXI7Cit9OworCitzdGF0aWMgaW50IHhnZW5lX3Jlc3RhcnRfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkJIHVuc2lnbmVkIGxvbmcgbW9kZSwgdm9pZCAqY21kKQoreworCXN0cnVjdCB4Z2VuZV9yZWJvb3RfY29udGV4dCAqY3R4ID0KKwkJY29udGFpbmVyX29mKHRoaXMsIHN0cnVjdCB4Z2VuZV9yZWJvb3RfY29udGV4dCwKKwkJCSAgICAgcmVzdGFydF9oYW5kbGVyKTsKKworCS8qIElzc3VlIHRoZSByZWJvb3QgKi8KKwl3cml0ZWwoY3R4LT5tYXNrLCBjdHgtPmNzcik7CisKKwltZGVsYXkoMTAwMCk7CisKKwlkZXZfZW1lcmcoY3R4LT5kZXYsICJVbmFibGUgdG8gcmVzdGFydCBzeXN0ZW1cbiIpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgaW50IHhnZW5lX3JlYm9vdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB4Z2VuZV9yZWJvb3RfY29udGV4dCAqY3R4OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJaW50IGVycjsKKworCWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCisJY3R4LT5jc3IgPSBvZl9pb21hcChkZXYtPm9mX25vZGUsIDApOworCWlmICghY3R4LT5jc3IpIHsKKwkJZGV2X2VycihkZXYsICJjYW4gbm90IG1hcCByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtYXNrIiwgJmN0eC0+bWFzaykpCisJCWN0eC0+bWFzayA9IDB4RkZGRkZGRkY7CisKKwljdHgtPmRldiA9IGRldjsKKwljdHgtPnJlc3RhcnRfaGFuZGxlci5ub3RpZmllcl9jYWxsID0geGdlbmVfcmVzdGFydF9oYW5kbGVyOworCWN0eC0+cmVzdGFydF9oYW5kbGVyLnByaW9yaXR5ID0gMTI4OworCWVyciA9IHJlZ2lzdGVyX3Jlc3RhcnRfaGFuZGxlcigmY3R4LT5yZXN0YXJ0X2hhbmRsZXIpOworCWlmIChlcnIpCisJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlZ2lzdGVyIHJlc3RhcnQgaGFuZGxlciAoZXJyPSVkKVxuIiwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhnZW5lX3JlYm9vdF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYXBtLHhnZW5lLXJlYm9vdCIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGdlbmVfcmVib290X2RyaXZlciA9IHsKKwkucHJvYmUgPSB4Z2VuZV9yZWJvb3RfcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAieGdlbmUtcmVib290IiwKKwkJLm9mX21hdGNoX3RhYmxlID0geGdlbmVfcmVib290X29mX21hdGNoLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB4Z2VuZV9yZWJvb3RfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnhnZW5lX3JlYm9vdF9kcml2ZXIpOworfQorZGV2aWNlX2luaXRjYWxsKHhnZW5lX3JlYm9vdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvengtcmVib290LmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3p4LXJlYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YjAwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3p4LXJlYm9vdC5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBaVEUgengyOTY3MDIgU29DIHJlc2V0IGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTGluYXJvIEx0ZC4KKyAqCisgKiBBdXRob3I6IEp1biBOaWUgPGp1bi5uaWVAbGluYXJvLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmJhc2U7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpwY3VfYmFzZTsKKworc3RhdGljIGludCB6eF9yZXN0YXJ0X2hhbmRsZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBtb2RlLCB2b2lkICpjbWQpCit7CisJd3JpdGVsX3JlbGF4ZWQoMSwgYmFzZSArIDB4YjApOworCXdyaXRlbF9yZWxheGVkKDEsIHBjdV9iYXNlICsgMHgzNCk7CisKKwltZGVsYXkoNTApOworCXByX2VtZXJnKCJVbmFibGUgdG8gcmVzdGFydCBzeXN0ZW1cbiIpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHp4X3Jlc3RhcnRfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSB6eF9yZXN0YXJ0X2hhbmRsZXIsCisJLnByaW9yaXR5ID0gMTI4LAorfTsKKworc3RhdGljIGludCB6eF9yZWJvb3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJaW50IGVycjsKKworCWJhc2UgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFiYXNlKSB7CisJCVdBUk4oMSwgImZhaWxlZCB0byBtYXAgYmFzZSBhZGRyZXNzIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgInp0ZSx6eDI5NjcwMi1wY3UiKTsKKwlwY3VfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlpZiAoIXBjdV9iYXNlKSB7CisJCWlvdW5tYXAoYmFzZSk7CisJCVdBUk4oMSwgImZhaWxlZCB0byBtYXAgcGN1X2Jhc2UgYWRkcmVzcyIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwllcnIgPSByZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJnp4X3Jlc3RhcnRfbmIpOworCWlmIChlcnIpCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlJlZ2lzdGVyIHJlc3RhcnQgaGFuZGxlciBmYWlsZWQoZXJyPSVkKVxuIiwKKwkJCWVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB6eF9yZWJvb3Rfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInp0ZSxzeXNjdHJsIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB6eF9yZWJvb3RfZHJpdmVyID0geworCS5wcm9iZSA9IHp4X3JlYm9vdF9wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ6eC1yZWJvb3QiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB6eF9yZWJvb3Rfb2ZfbWF0Y2gsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHp4X3JlYm9vdF9kcml2ZXIpOwo=