From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3,7/7] EDAC: Add driver for the Marvell Armada XP SDRAM and L2 cache ECC From: Borislav Petkov Message-Id: <20171116193145.s2nja2kfevjxlnt5@pd.tnic> Date: Thu, 16 Nov 2017 20:31:45 +0100 To: Jan Luebbe Cc: Russell King - ARM Linux , Chris Packham , linux-arm-kernel@lists.infradead.org, linux-edac@vger.kernel.org, kernel@pengutronix.de, Thomas Petazzoni , Gregory CLEMENT List-ID: T24gRnJpLCBOb3YgMTAsIDIwMTcgYXQgMTA6MDM6MDhBTSArMDEwMCwgSmFuIEx1ZWJiZSB3cm90 ZToKPiBBZGQgc3VwcG9ydCBmb3IgdGhlIEVDQyBmdW5jdGlvbmFsaXR5IGFzIGZvdW5kIGluIHRo ZSBERFIgUkFNIGFuZCBMMgo+IGNhY2hlIGNvbnRyb2xsZXJzIG9uIHRoZSBNVjc4MjMwL01WNzh4 NjAgU29Dcy4gVGhpcyBkcml2ZXIgaGFzIGJlZW4KPiB0ZXN0ZWQgb24gdGhlIE1WNzg0NjAgKG9u IGEgY3VzdG9tIGJvYXJkIHdpdGggYSBERFIzIEVDQyBESU1NKS4KPiAKPiBTaWduZWQtb2ZmLWJ5 OiBKYW4gTHVlYmJlIDxqbHVAcGVuZ3V0cm9uaXguZGU+CgouLi4KCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZWRhYy9hcm1hZGFfeHBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FybWFkYV94cF9lZGFj LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uY2I5MTczYjMw YWE5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZWRhYy9hcm1hZGFfeHBfZWRhYy5j Cj4gQEAgLTAsMCArMSw2NTggQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE3IFBlbmd1 dHJvbml4LCBKYW4gTHVlYmJlIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+Cj4gKyAqCj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKPiArICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAr ICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9lZGFjLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgo+ICsKPiArI2lu Y2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CgpJIGdldCB0aGlzIHdoZW4gSSBjcm9z cy1idWlsZCBpdDoKCmRyaXZlcnMvZWRhYy9hcm1hZGFfeHBfZWRhYy5jOjE5OjM3OiBmYXRhbCBl cnJvcjogYXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9y eQogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCmNvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCm1ha2VbMl06ICoq KiBbZHJpdmVycy9lZGFjL2FybWFkYV94cF9lZGFjLm9dIEVycm9yIDEKbWFrZVsxXTogKioqIFtk cml2ZXJzL2VkYWNdIEVycm9yIDIKbWFrZVsxXTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQg am9icy4uLi4KbWFrZTogKioqIFtkcml2ZXJzXSBFcnJvciAyCgoKYW5kIHRoYXQgZHJpdmVyIGRl cGVuZHMgb24gQVJDSF9NVkVCVSB3aGljaCBpcyBhcm02NCwgQUZBSUNULgoKVGhhdCBoZWFkZXIg aXMKCmFyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaAoKaG93ZXZlciBh bmQgbm90IGluIGFyY2gvYXJtNjQvLgoKSSBjb3VsZCB2ZXJ5IHdlbGwgYmUgbWlzc2luZyBzb21l dGhpbmcgdGhvdWdoLi4uCgo+ICsjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWF1cm9yYS1s Mi5oPgo+ICsKPiArI2luY2x1ZGUgImVkYWNfbWMuaCIKPiArI2luY2x1ZGUgImVkYWNfZGV2aWNl LmgiCj4gKyNpbmNsdWRlICJlZGFjX21vZHVsZS5oIgo+ICsKPiArLyoqKioqKioqKioqKioqKioq KioqKioqKiBFREFDIE1DIChERFIgUkFNKSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KPiArCj4gKyNkZWZpbmUgU0RSQU1fTlVNX0NTIDQKPiArCj4gKyNkZWZpbmUgU0RSQU1fQ09O RklHX1JFRyAweDAKPiArI2RlZmluZSBTRFJBTV9DT05GSUdfRUNDX01BU0sgICAgICAgIEJJVCgx OCkKPiArI2RlZmluZSBTRFJBTV9DT05GSUdfUkVHSVNURVJFRF9NQVNLIEJJVCgxNykKPiArI2Rl ZmluZSBTRFJBTV9DT05GSUdfQlVTX1dJRFRIX01BU0sgIEJJVCgxNSkKPiArCj4gKyNkZWZpbmUg U0RSQU1fQUREUl9DVFJMX1JFRyAweDEwCj4gKyNkZWZpbmUgU0RSQU1fQUREUl9DVFJMX1NJWkVf SElHSF9PRkZTRVQoY3MpICAgKDIwK2NzKQo+ICsjZGVmaW5lIFNEUkFNX0FERFJfQ1RSTF9TSVpF X0hJR0hfTUFTSyhjcykgICAgICAgICAgIFwKPiArCSgweDEgPDwgU0RSQU1fQUREUl9DVFJMX1NJ WkVfSElHSF9PRkZTRVQoY3MpKQo+ICsjZGVmaW5lIFNEUkFNX0FERFJfQ1RSTF9BRERSX1NFTF9N QVNLKGNzKSAgIEJJVCgxNitjcykKPiArI2RlZmluZSBTRFJBTV9BRERSX0NUUkxfU0laRV9MT1df T0ZGU0VUKGNzKSAgIChjcyo0KzIpCj4gKyNkZWZpbmUgU0RSQU1fQUREUl9DVFJMX1NJWkVfTE9X X01BU0soY3MpICAgICAgICAgICAgXAo+ICsJKDB4MyA8PCBTRFJBTV9BRERSX0NUUkxfU0laRV9M T1dfT0ZGU0VUKGNzKSkKPiArI2RlZmluZSBTRFJBTV9BRERSX0NUUkxfU1RSVUNUX09GRlNFVChj cykgICAgICAgKGNzKjQpCj4gKyNkZWZpbmUgU0RSQU1fQUREUl9DVFJMX1NUUlVDVF9NQVNLKGNz KSAgICAgICAgICAgICAgXAo+ICsJKDB4MyA8PCBTRFJBTV9BRERSX0NUUkxfU1RSVUNUX09GRlNF VChjcykpCj4gKwo+ICsjZGVmaW5lIFNEUkFNX0VSUl9EQVRBX0hfUkVHIDB4NDAKPiArI2RlZmlu ZSBTRFJBTV9FUlJfREFUQV9MX1JFRyAweDQ0Cj4gKwo+ICsjZGVmaW5lIFNEUkFNX0VSUl9SRUNW X0VDQ19SRUcgMHg0OAo+ICsjZGVmaW5lIFNEUkFNX0VSUl9SRUNWX0VDQ19WQUxVRV9NQVNLIDB4 ZmYKPiArCj4gKyNkZWZpbmUgU0RSQU1fRVJSX0NBTENfRUNDX1JFRyAweDRjCj4gKyNkZWZpbmUg U0RSQU1fRVJSX0NBTENfRUNDX1JPV19PRkZTRVQgICAgICAgICAgICAgOAo+ICsjZGVmaW5lIFNE UkFNX0VSUl9DQUxDX0VDQ19ST1dfTUFTSyAgICAgICAgICAgICAgIFwKPiArCSgweGZmZmYgPDwg U0RSQU1fRVJSX0NBTENfRUNDX1JPV19PRkZTRVQpCj4gKyNkZWZpbmUgU0RSQU1fRVJSX0NBTENf RUNDX1ZBTFVFX01BU0sgICAgICAgICAgMHhmZgo+ICsKPiArI2RlZmluZSBTRFJBTV9FUlJfQURE Ul9SRUcgMHg1MAo+ICsjZGVmaW5lIFNEUkFNX0VSUl9BRERSX0JBTktfT0ZGU0VUICAgICAgICAg ICAyMwo+ICsjZGVmaW5lIFNEUkFNX0VSUl9BRERSX0JBTktfTUFTSyAgICAgICAgICAgICAgXAo+ ICsJKDB4NyA8PCBTRFJBTV9FUlJfQUREUl9CQU5LX09GRlNFVCkKPiArI2RlZmluZSBTRFJBTV9F UlJfQUREUl9DT0xfT0ZGU0VUICAgICAgICAgICAgIDgKPiArI2RlZmluZSBTRFJBTV9FUlJfQURE Ul9DT0xfTUFTSyAgICAgICAgICAgICAgIFwKPiArCSgweDdmZmYgPDwgU0RSQU1fRVJSX0FERFJf Q09MX09GRlNFVCkKPiArI2RlZmluZSBTRFJBTV9FUlJfQUREUl9DU19PRkZTRVQgICAgICAgICAg ICAgIDEKPiArI2RlZmluZSBTRFJBTV9FUlJfQUREUl9DU19NQVNLICAgICAgICAgICAgICAgIFwK PiArCSgweDMgPDwgU0RSQU1fRVJSX0FERFJfQ1NfT0ZGU0VUKQo+ICsjZGVmaW5lIFNEUkFNX0VS Ul9BRERSX1RZUEVfTUFTSyAgICAgICAgIEJJVCgwKQo+ICsKPiArI2RlZmluZSBTRFJBTV9FUlJf Q1RSTF9SRUcgMHg1NAo+ICsjZGVmaW5lIFNEUkFNX0VSUl9DVFJMX0VSUl9USFJfT0ZGU0VUICAg ICAgICAgIDE2Cj4gKyNkZWZpbmUgU0RSQU1fRVJSX0NUUkxfRVJSX1RIUl9NQVNLICAgICAgICAg ICAgIFwKPiArCSgweGZmIDw8IFNEUkFNX0VSUl9DVFJMX0VSUl9USFJfT0ZGU0VUKQo+ICsjZGVm aW5lIFNEUkFNX0VSUl9DVFJMX0VSUl9QUk9QX01BU0sgICAgICAgQklUKDkpCj4gKwo+ICsjZGVm aW5lIFNEUkFNX0VSUl9TQkVfQ09VTlRfUkVHIDB4NTgKPiArI2RlZmluZSBTRFJBTV9FUlJfREJF X0NPVU5UX1JFRyAweDVjCj4gKwo+ICsjZGVmaW5lIFNEUkFNX0VSUl9DQVVTRV9FUlJfUkVHIDB4 ZDAKPiArI2RlZmluZSBTRFJBTV9FUlJfQ0FVU0VfTVNHX1JFRyAweGQ4Cj4gKyNkZWZpbmUgU0RS QU1fRVJSX0NBVVNFX0RCRV9NQVNLIEJJVCgxKQo+ICsjZGVmaW5lIFNEUkFNX0VSUl9DQVVTRV9T QkVfTUFTSyBCSVQoMCkKPiArCj4gKyNkZWZpbmUgU0RSQU1fUkFOS19DVFJMX1JFRyAweDFlMAo+ ICsjZGVmaW5lIFNEUkFNX1JBTktfQ1RSTF9FWElTVF9NQVNLKGNzKSBCSVQoY3MpCgpBbGlnbiB0 aG9zZSBkZWZpbmUgbmFtZXMgYW5kIHZhbHVlcyB2ZXJ0aWNhbGx5LiBUaGV5IGNhbiBzdGljayBv dXQgYW5kCm92ZXJmbG93IHRoZSA4MCBjb2xzIHJ1bGU6CgojZGVmaW5lIFNEUkFNX0VSUl9DVFJM X0VSUl9USFJfT0ZGU0VUCQkxNgojZGVmaW5lIFNEUkFNX0VSUl9DVFJMX0VSUl9USFJfTUFTSwkJ KDB4ZmYgPDwgU0RSQU1fRVJSX0NUUkxfRVJSX1RIUl9PRkZTRVQpCiNkZWZpbmUgU0RSQU1fRVJS X0NUUkxfRVJSX1BST1BfTUFTSwkJQklUKDkpCgphbHNvLCB5b3UgY2FuIHNob3J0ZW4gdGhvc2Ug ZGVmaW5lcyB0b28gLSB0aGVyZSdzICJFUlIiIHR3aWNlIGluIHRoZQpuYW1lLgoKPiArCj4gK3N0 cnVjdCBhcm1hZGFfeHBfbWNfZWRhY19kcnZkYXRhIHsKClRoYXQgc3RydWN0IG5hbWUgaXMgdG9v IGxvbmcuIFNvIGxvbmcgdGhhdCBpdCBtYWtlcyB5b3UgYnJlYWsgcGFyYW1ldGVyCm5hbWVzIGJl bG93LgoKRm9yIGV4YW1wbGUsIHlvdSBkb24ndCBuZWVkIHRoYXQgbGVuZ2h0eSBwcmVmaXggImFy bWFkYV94cF9tY19lZGFjIgpwcmVwZW5kZWQgdG8gc3RhdGljIHN5bWJvbHMuIFNhbWUgZm9yIHRo ZSBmdW5jdGlvbiBuYW1lcyBiZWxvdy4KCj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwo+ICsJ dW5zaWduZWQgaW50IHdpZHRoOyAvKiB3aWR0aCBpbiBieXRlcyAqLwo+ICsJYm9vbCBjc19hZGRy X3NlbFtTRFJBTV9OVU1fQ1NdOyAvKiBiYW5rIGludGVybGVhdmluZyAqLwoKUHV0IGFsbCBzaWRl IGNvbW1lbnRzIG92ZXIgdGhlIHJlc3BlY3RpdmUgbGluZSB0aGV5J3JlIGNvbW1lbnRpbmcuCgo+ ICsKPiArCWNoYXIgbXNnWzEyOF07Cj4gK307Cj4gKwo+ICsvKiBkZXJpdmVkIGZyb20gIkRSQU0g QWRkcmVzcyBNdWx0aXBsZXhpbmciIGluIHRoZSBBUkFNREEgWFAgRnVuY3Rpb25hbCBTcGVjICov Cj4gK3N0YXRpYyB1aW50MzJfdCBhcm1hZGFfeHBfbWNfZWRhY19jYWxjX2FkZHJlc3Moc3RydWN0 IGFybWFkYV94cF9tY19lZGFjX2RydmRhdGEKPiArCQkJCQkgICAgICAgKmRydmRhdGEsIHVpbnQ4 X3QgY3MsCj4gKwkJCQkJICAgICAgIHVpbnQ4X3QgYmFuaywgdWludDE2X3Qgcm93LAo+ICsJCQkJ CSAgICAgICB1aW50MTZfdCBjb2wpCj4gK3sKPiArCWlmIChkcnZkYXRhLT53aWR0aCA9PSA4KSB7 IC8qIDY0IGJpdCAqLwo+ICsJCWlmIChkcnZkYXRhLT5jc19hZGRyX3NlbFtjc10pIC8qIGJhbmsg aW50ZXJsZWF2ZWQgKi8KPiArCQkJcmV0dXJuICgoKHJvdyAmIDB4ZmZmOCkgPDwgMTYpIHwKPiAr CQkJCSgoYmFuayAmIDB4NykgPDwgMTYpIHwKPiArCQkJCSgocm93ICYgMHg3KSA8PCAxMykgfAo+ ICsJCQkJKChjb2wgJiAweDNmZikgPDwgMykpOwo+ICsJCWVsc2UKPiArCQkJcmV0dXJuICgoKHJv dyAmIDB4ZmZmZiA8PCAxNikgfAo+ICsJCQkJICgoYmFuayAmIDB4NykgPDwgMTMpIHwKPiArCQkJ CSAoKGNvbCAmIDB4M2ZmKSkgPDwgMykpOwo+ICsJfSBlbHNlIGlmIChkcnZkYXRhLT53aWR0aCA9 PSA0KSB7IC8qIDMyIGJpdCAqLwo+ICsJCWlmIChkcnZkYXRhLT5jc19hZGRyX3NlbFtjc10pIC8q IGJhbmsgaW50ZXJsZWF2ZWQgKi8KPiArCQkJcmV0dXJuICgoKHJvdyAmIDB4ZmZmMCkgPDwgMTUp IHwKPiArCQkJCSgoYmFuayAmIDB4NykgPDwgMTYpIHwKPiArCQkJCSgocm93ICYgMHhmKSA8PCAx MikgfAo+ICsJCQkJKChjb2wgJiAweDNmZikgPDwgMikpOwo+ICsJCWVsc2UKPiArCQkJcmV0dXJu ICgoKHJvdyAmIDB4ZmZmZiA8PCAxNSkgfAo+ICsJCQkJICgoYmFuayAmIDB4NykgPDwgMTIpIHwK PiArCQkJCSAoKGNvbCAmIDB4M2ZmKSkgPDwgMikpOwo+ICsJfSBlbHNlIHsgLyogMTYgYml0ICov Cj4gKwkJaWYgKGRydmRhdGEtPmNzX2FkZHJfc2VsW2NzXSkgLyogYmFuayBpbnRlcmxlYXZlZCAq Lwo+ICsJCQlyZXR1cm4gKCgocm93ICYgMHhmZmUwKSA8PCAxNCkgfAo+ICsJCQkJKChiYW5rICYg MHg3KSA8PCAxNikgfAo+ICsJCQkJKChyb3cgJiAweDFmKSA8PCAxMSkgfAo+ICsJCQkJKChjb2wg JiAweDNmZikgPDwgMSkpOwo+ICsJCWVsc2UKPiArCQkJcmV0dXJuICgoKHJvdyAmIDB4ZmZmZiA8 PCAxNCkgfAo+ICsJCQkJICgoYmFuayAmIDB4NykgPDwgMTEpIHwKPiArCQkJCSAoKGNvbCAmIDB4 M2ZmKSkgPDwgMSkpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1hZGFfeHBfbWNf ZWRhY19jaGVjayhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCj4gK3sKPiArCXN0cnVjdCBhcm1h ZGFfeHBfbWNfZWRhY19kcnZkYXRhICpkcnZkYXRhID0gbWNpLT5wdnRfaW5mbzsKPiArCXVpbnQz Ml90IGRhdGFfaCwgZGF0YV9sLCByZWN2X2VjYywgY2FsY19lY2MsIGFkZHI7Cj4gKwl1aW50MzJf dCBjbnRfc2JlLCBjbnRfZGJlLCBjYXVzZV9lcnIsIGNhdXNlX21zZzsKPiArCXVpbnQzMl90IHJv d192YWwsIGNvbF92YWwsIGJhbmtfdmFsLCBhZGRyX3ZhbDsKPiArCXVpbnQ4X3Qgc3luZHJvbWVf dmFsLCBjc192YWw7Cj4gKwljaGFyICptc2cgPSBkcnZkYXRhLT5tc2c7Cj4gKwo+ICsJZGF0YV9o ID0gcmVhZGwoZHJ2ZGF0YS0+YmFzZSArIFNEUkFNX0VSUl9EQVRBX0hfUkVHKTsKPiArCWRhdGFf bCA9IHJlYWRsKGRydmRhdGEtPmJhc2UgKyBTRFJBTV9FUlJfREFUQV9MX1JFRyk7Cj4gKwlyZWN2 X2VjYyA9IHJlYWRsKGRydmRhdGEtPmJhc2UgKyBTRFJBTV9FUlJfUkVDVl9FQ0NfUkVHKTsKPiAr CWNhbGNfZWNjID0gcmVhZGwoZHJ2ZGF0YS0+YmFzZSArIFNEUkFNX0VSUl9DQUxDX0VDQ19SRUcp Owo+ICsJYWRkciA9IHJlYWRsKGRydmRhdGEtPmJhc2UgKyBTRFJBTV9FUlJfQUREUl9SRUcpOwo+ ICsJY250X3NiZSA9IHJlYWRsKGRydmRhdGEtPmJhc2UgKyBTRFJBTV9FUlJfU0JFX0NPVU5UX1JF Ryk7Cj4gKwljbnRfZGJlID0gcmVhZGwoZHJ2ZGF0YS0+YmFzZSArIFNEUkFNX0VSUl9EQkVfQ09V TlRfUkVHKTsKPiArCWNhdXNlX2VyciA9IHJlYWRsKGRydmRhdGEtPmJhc2UgKyBTRFJBTV9FUlJf Q0FVU0VfRVJSX1JFRyk7Cj4gKwljYXVzZV9tc2cgPSByZWFkbChkcnZkYXRhLT5iYXNlICsgU0RS QU1fRVJSX0NBVVNFX01TR19SRUcpOwoKQWxpZ24gdmVydGljYWxseSBmb3IgYmV0dGVyIHJlYWRh YmlsaXR5OgoKCWRhdGFfaAkgPSByZWFkbChkcnZkYXRhLT5iYXNlICsgU0RSQU1fRVJSX0RBVEFf SF9SRUcpOwoJZGF0YV9sCSA9IHJlYWRsKGRydmRhdGEtPmJhc2UgKyBTRFJBTV9FUlJfREFUQV9M X1JFRyk7CglyZWN2X2VjYyA9IHJlYWRsKGRydmRhdGEtPmJhc2UgKyBTRFJBTV9FUlJfUkVDVl9F Q0NfUkVHKTsKCWNhbGNfZWNjID0gcmVhZGwoZHJ2ZGF0YS0+YmFzZSArIFNEUkFNX0VSUl9DQUxD X0VDQ19SRUcpOwoJLi4uCgoKPiArCj4gKwkvKiBjbGVhciBjYXVzZSByZWdpc3RlcnMgKi8KPiAr CXdyaXRlbCh+KFNEUkFNX0VSUl9DQVVTRV9EQkVfTUFTSyB8IFNEUkFNX0VSUl9DQVVTRV9TQkVf TUFTSyksCj4gKwkgICAgICAgZHJ2ZGF0YS0+YmFzZSArIFNEUkFNX0VSUl9DQVVTRV9FUlJfUkVH KTsKPiArCXdyaXRlbCh+KFNEUkFNX0VSUl9DQVVTRV9EQkVfTUFTSyB8IFNEUkFNX0VSUl9DQVVT RV9TQkVfTUFTSyksCj4gKwkgICAgICAgZHJ2ZGF0YS0+YmFzZSArIFNEUkFNX0VSUl9DQVVTRV9N U0dfUkVHKTsKPiArCj4gKwkvKiBjbGVhciBlcnJvciBjb3VudGVyIHJlZ2lzdGVycyAqLwo+ICsJ aWYgKGNudF9zYmUpCj4gKwkJd3JpdGVsKDAsIGRydmRhdGEtPmJhc2UgKyBTRFJBTV9FUlJfU0JF X0NPVU5UX1JFRyk7Cj4gKwlpZiAoY250X2RiZSkKPiArCQl3cml0ZWwoMCwgZHJ2ZGF0YS0+YmFz ZSArIFNEUkFNX0VSUl9EQkVfQ09VTlRfUkVHKTsKPiArCj4gKwlpZiAoIWNudF9zYmUgJiYgIWNu dF9kYmUpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICgoYWRkciAmIFNEUkFNX0VSUl9BRERSX1RZ UEVfTUFTSykgPT0gMCkgewoKCWlmICghKGFkZHIgJiBTRFJBTV9FUlJfQUREUl9UWVBFX01BU0sp KSB7Cgo+ICsJCWlmIChjbnRfc2JlKQo+ICsJCQljbnRfc2JlLS07Cj4gKwkJZWxzZQo+ICsJCQlk ZXZfd2FybihtY2ktPnBkZXYsICJpbmNvbnNpc3RlbnQgU0JFIGNvdW50IGRldGVjdGVkIik7Cj4g Kwl9IGVsc2Ugewo+ICsJCWlmIChjbnRfZGJlKQo+ICsJCQljbnRfZGJlLS07Cj4gKwkJZWxzZQo+ ICsJCQlkZXZfd2FybihtY2ktPnBkZXYsICJpbmNvbnNpc3RlbnQgREJFIGNvdW50IGRldGVjdGVk Iik7Cj4gKwl9Cj4gKwo+ICsJLyogcmVwb3J0IGVhcmxpZXIgZXJyb3JzICovCj4gKwlpZiAoY250 X3NiZSkKPiArCQllZGFjX21jX2hhbmRsZV9lcnJvcihIV19FVkVOVF9FUlJfQ09SUkVDVEVELCBt Y2ksCj4gKwkJCQkgICAgIGNudF9zYmUsIC8qIGVycm9yIGNvdW50ICovCj4gKwkJCQkgICAgIDAs IDAsIDAsIC8qIHBmbiwgb2Zmc2V0LCBzeW5kcm9tZSAqLwo+ICsJCQkJICAgICAtMSwgLTEsIC0x LCAvKiB0b3AsIG1pZCwgbG93IGxheWVyICovCj4gKwkJCQkgICAgIG1jaS0+Y3RsX25hbWUsCj4g KwkJCQkgICAgICJkZXRhaWxzIHVuYXZhaWxhYmxlIChtdWx0aXBsZSBlcnJvcnMpIik7Cj4gKwlp ZiAoY250X2RiZSkKPiArCQllZGFjX21jX2hhbmRsZV9lcnJvcihIV19FVkVOVF9FUlJfVU5DT1JS RUNURUQsIG1jaSwKPiArCQkJCSAgICAgY250X3NiZSwgLyogZXJyb3IgY291bnQgKi8KPiArCQkJ CSAgICAgMCwgMCwgMCwgLyogcGZuLCBvZmZzZXQsIHN5bmRyb21lICovCj4gKwkJCQkgICAgIC0x LCAtMSwgLTEsIC8qIHRvcCwgbWlkLCBsb3cgbGF5ZXIgKi8KPiArCQkJCSAgICAgbWNpLT5jdGxf bmFtZSwKPiArCQkJCSAgICAgImRldGFpbHMgdW5hdmFpbGFibGUgKG11bHRpcGxlIGVycm9ycyki KTsKPiArCj4gKwkvKiByZXBvcnQgZGV0YWlscyBmb3IgbW9zdCByZWNlbnQgZXJyb3IgKi8KPiAr CWNzX3ZhbCA9IChhZGRyICYgU0RSQU1fRVJSX0FERFJfQ1NfTUFTSykKPiArCSAgICA+PiBTRFJB TV9FUlJfQUREUl9DU19PRkZTRVQ7Cj4gKwliYW5rX3ZhbCA9IChhZGRyICYgU0RSQU1fRVJSX0FE RFJfQkFOS19NQVNLKQo+ICsJICAgID4+IFNEUkFNX0VSUl9BRERSX0JBTktfT0ZGU0VUOwo+ICsJ cm93X3ZhbCA9IChjYWxjX2VjYyAmIFNEUkFNX0VSUl9DQUxDX0VDQ19ST1dfTUFTSykKPiArCSAg ICA+PiBTRFJBTV9FUlJfQ0FMQ19FQ0NfUk9XX09GRlNFVDsKPiArCWNvbF92YWwgPSAoYWRkciAm IFNEUkFNX0VSUl9BRERSX0NPTF9NQVNLKQo+ICsJICAgID4+IFNEUkFNX0VSUl9BRERSX0NPTF9P RkZTRVQ7CgpMZXQgdGhvc2Ugc3RpY2sgb3V0IGFuZCBhbGlnbiB2ZXJ0aWNhbGx5LgoKPiArCXN5 bmRyb21lX3ZhbCA9IChyZWN2X2VjYyBeIGNhbGNfZWNjKSAmIDB4ZmY7Cj4gKwlhZGRyX3ZhbCA9 IGFybWFkYV94cF9tY19lZGFjX2NhbGNfYWRkcmVzcyhkcnZkYXRhLCBjc192YWwsIGJhbmtfdmFs LAo+ICsJCQkJCQkgIHJvd192YWwsIGNvbF92YWwpOwo+ICsJbXNnICs9IHNwcmludGYobXNnLCAi cm93PTB4JTA0eCAiLCByb3dfdmFsKTsgLyogMTEgY2hhcnMgKi8KPiArCW1zZyArPSBzcHJpbnRm KG1zZywgImJhbms9MHgleCAiLCBiYW5rX3ZhbCk7IC8qICA5IGNoYXJzICovCj4gKwltc2cgKz0g c3ByaW50Zihtc2csICJjb2w9MHglMDR4ICIsIGNvbF92YWwpOyAvKiAxMSBjaGFycyAqLwo+ICsJ bXNnICs9IHNwcmludGYobXNnLCAiY3M9JWQiLCBjc192YWwpOwkgICAgIC8qICA0IGNoYXJzICov Cj4gKwo+ICsJaWYgKChhZGRyICYgU0RSQU1fRVJSX0FERFJfVFlQRV9NQVNLKSA9PSAwKSB7CgoJ aWYgKCEoLi4uCgphcyBhYm92ZS4KCj4gKwkJZWRhY19tY19oYW5kbGVfZXJyb3IoSFdfRVZFTlRf RVJSX0NPUlJFQ1RFRCwgbWNpLAo+ICsJCQkJICAgICAxLAkvKiBlcnJvciBjb3VudCAqLwo+ICsJ CQkJICAgICBhZGRyX3ZhbCA+PiBQQUdFX1NISUZULAo+ICsJCQkJICAgICBhZGRyX3ZhbCAmIH5Q QUdFX01BU0ssCj4gKwkJCQkgICAgIHN5bmRyb21lX3ZhbCwKPiArCQkJCSAgICAgY3NfdmFsLCAt MSwgLTEsIC8qIHRvcCwgbWlkLCBsb3cgbGF5ZXIgKi8KPiArCQkJCSAgICAgbWNpLT5jdGxfbmFt ZSwgZHJ2ZGF0YS0+bXNnKTsKPiArCX0gZWxzZSB7Cj4gKwkJZWRhY19tY19oYW5kbGVfZXJyb3Io SFdfRVZFTlRfRVJSX1VOQ09SUkVDVEVELCBtY2ksCj4gKwkJCQkgICAgIDEsCS8qIGVycm9yIGNv dW50ICovCj4gKwkJCQkgICAgIGFkZHJfdmFsID4+IFBBR0VfU0hJRlQsCj4gKwkJCQkgICAgIGFk ZHJfdmFsICYgflBBR0VfTUFTSywKPiArCQkJCSAgICAgc3luZHJvbWVfdmFsLAo+ICsJCQkJICAg ICBjc192YWwsIC0xLCAtMSwgLyogdG9wLCBtaWQsIGxvdyBsYXllciAqLwo+ICsJCQkJICAgICBt Y2ktPmN0bF9uYW1lLCBkcnZkYXRhLT5tc2cpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBhcm1hZGFfeHBfbWNfZWRhY19yZWFkX2NvbmZpZyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kp Cj4gK3sKPiArCXN0cnVjdCBhcm1hZGFfeHBfbWNfZWRhY19kcnZkYXRhICpkcnZkYXRhID0gbWNp LT5wdnRfaW5mbzsKPiArCXN0cnVjdCBkaW1tX2luZm8gKmRpbW07Cj4gKwl1bnNpZ25lZCBpbnQg aSwgY3Nfc3RydWN0LCBjc19zaXplOwo+ICsJdWludDMyX3QgY29uZmlnLCBhZGRyX2N0cmwsIHJh bmtfY3RybDsKClBsZWFzZSBzb3J0IGZ1bmN0aW9uIGxvY2FsIHZhcmlhYmxlcyBkZWNsYXJhdGlv biBpbiBhIHJldmVyc2UgY2hyaXN0bWFzCnRyZWUgb3JkZXI6CgoJPHR5cGU+IGxvbmdlc3RfdmFy aWFibGVfbmFtZTsKCTx0eXBlPiBzaG9ydGVyX3Zhcl9uYW1lOwoJPHR5cGU+IGV2ZW5fc2hvcnRl cjsKCTx0eXBlPiBpOwoKPiArCj4gKwljb25maWcgPSByZWFkbChkcnZkYXRhLT5iYXNlICsgU0RS QU1fQ09ORklHX1JFRyk7Cj4gKwlpZiAoY29uZmlnICYgU0RSQU1fQ09ORklHX0JVU19XSURUSF9N QVNLKQo+ICsJCWRydmRhdGEtPndpZHRoID0gODsgLyogNjQgYml0ICovCj4gKwllbHNlCj4gKwkJ ZHJ2ZGF0YS0+d2lkdGggPSA0OyAvKiAzMiBiaXQgKi8KPiArCj4gKwlhZGRyX2N0cmwgPSByZWFk bChkcnZkYXRhLT5iYXNlICsgU0RSQU1fQUREUl9DVFJMX1JFRyk7Cj4gKwlyYW5rX2N0cmwgPSBy ZWFkbChkcnZkYXRhLT5iYXNlICsgU0RSQU1fUkFOS19DVFJMX1JFRyk7Cj4gKwlmb3IgKGkgPSAw OyBpIDwgU0RSQU1fTlVNX0NTOyBpKyspIHsKPiArCQlkaW1tID0gbWNpLT5kaW1tc1tpXTsKPiAr Cj4gKwkJaWYgKCEocmFua19jdHJsICYgU0RSQU1fUkFOS19DVFJMX0VYSVNUX01BU0soaSkpKQo+ ICsJCQljb250aW51ZTsKPiArCj4gKwkJZHJ2ZGF0YS0+Y3NfYWRkcl9zZWxbaV0gPQo+ICsJCQkh IShhZGRyX2N0cmwgJiBTRFJBTV9BRERSX0NUUkxfQUREUl9TRUxfTUFTSyhpKSk7Cj4gKwo+ICsJ CWNzX3N0cnVjdCA9IChhZGRyX2N0cmwgJiBTRFJBTV9BRERSX0NUUkxfU1RSVUNUX01BU0soaSkp ID4+Cj4gKwkJCVNEUkFNX0FERFJfQ1RSTF9TVFJVQ1RfT0ZGU0VUKGkpOwo+ICsJCWNzX3NpemUg PSAoKGFkZHJfY3RybCAmIFNEUkFNX0FERFJfQ1RSTF9TSVpFX0hJR0hfTUFTSyhpKSkgPj4KPiAr CQkJICAgKFNEUkFNX0FERFJfQ1RSTF9TSVpFX0hJR0hfT0ZGU0VUKGkpIC0gMikgfAo+ICsJCQkg ICAoKGFkZHJfY3RybCAmIFNEUkFNX0FERFJfQ1RSTF9TSVpFX0xPV19NQVNLKGkpKSA+Pgo+ICsJ CQkgICAgU0RSQU1fQUREUl9DVFJMX1NJWkVfTE9XX09GRlNFVChpKSkpOwoKQWxpZ24gdmVydGlj YWxseSBhbmQgbGV0IHRoZW0gc3RpY2sgb3V0LiBBcyB0aGV5IGFyZSBub3csIHRoZXkncmUgYWxt b3N0CnVucmVhZGFibGUuCgo+ICsJCXN3aXRjaCAoY3Nfc2l6ZSkgewo+ICsJCWNhc2UgMDogLyog MkdCaXQgKi8KPiArCQkJZGltbS0+bnJfcGFnZXMgPSAoMHg4MDAwMDAwMFVMTCA+PiBQQUdFX1NI SUZUKTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSAxOiAvKiAyNTZNQml0ICovCj4gKwkJCWRpbW0t Pm5yX3BhZ2VzID0gKDB4MTAwMDAwMDBVTEwgPj4gUEFHRV9TSElGVCk7Cj4gKwkJCWJyZWFrOwo+ ICsJCWNhc2UgMjogLyogNTEyTUJpdCAqLwo+ICsJCQlkaW1tLT5ucl9wYWdlcyA9ICgweDIwMDAw MDAwVUxMID4+IFBBR0VfU0hJRlQpOwo+ICsJCQlicmVhazsKPiArCQljYXNlIDM6IC8qIDFHQml0 ICovCj4gKwkJCWRpbW0tPm5yX3BhZ2VzID0gKDB4NDAwMDAwMDBVTEwgPj4gUEFHRV9TSElGVCk7 Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgNDogLyogNEdCaXQgKi8KPiArCQkJZGltbS0+bnJfcGFn ZXMgPSAoMHgxMDAwMDAwMDBVTEwgPj4gUEFHRV9TSElGVCk7Cj4gKwkJCWJyZWFrOwo+ICsJCWNh c2UgNTogLyogOEdCaXQgKi8KPiArCQkJZGltbS0+bnJfcGFnZXMgPSAoMHgyMDAwMDAwMDBVTEwg Pj4gUEFHRV9TSElGVCk7CgpUaGF0J3Mgc2lsbHkuIEp1c3Qgd3JpdGUgdGhlIHBhZ2VzIGluIGRl Y2ltYWwgbnVtYmVycy4gWW91IGhhdmUgdGhlCmNvbW1lbnRzIGV4cGxhaW5pbmcgd2hhdCB0aG9z ZSBudW1iZXJzIGFyZS4KCj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQlkaW1tLT5ncmFpbiA9IDg7 Cj4gKwkJZGltbS0+ZHR5cGUgPSBjc19zdHJ1Y3QgPyBERVZfWDE2IDogREVWX1g4Owo+ICsJCWRp bW0tPm10eXBlID0gKGNvbmZpZyAmIFNEUkFNX0NPTkZJR19SRUdJU1RFUkVEX01BU0spID8KPiAr CQkJTUVNX1JERFIzIDogTUVNX0REUjM7Cj4gKwkJZGltbS0+ZWRhY19tb2RlID0gRURBQ19TRUNE RUQ7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFy bWFkYV94cF9tY19lZGFjX29mX21hdGNoW10gPSB7Cj4gKwl7LmNvbXBhdGlibGUgPSAibWFydmVs bCxhcm1hZGEteHAtc2RyYW0tY29udHJvbGxlciIsfSwKPiArCXt9LAo+ICt9Owo+ICtNT0RVTEVf REVWSUNFX1RBQkxFKG9mLCBhcm1hZGFfeHBfbWNfZWRhY19vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0 aWMgaW50IGFybWFkYV94cF9tY19lZGFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkOwo+ICsJc3RydWN0IG1l bV9jdGxfaW5mbyAqbWNpOwo+ICsJc3RydWN0IGVkYWNfbWNfbGF5ZXIgbGF5ZXJzWzFdOwo+ICsJ c3RydWN0IGFybWFkYV94cF9tY19lZGFjX2RydmRhdGEgKmRydmRhdGE7Cj4gKwlzdHJ1Y3QgcmVz b3VyY2UgKnI7Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwl1aW50MzJfdCBjb25maWc7CgpQ bGVhc2Ugc29ydCBmdW5jdGlvbiBsb2NhbCB2YXJpYWJsZXMgZGVjbGFyYXRpb24gaW4gYSByZXZl cnNlIGNocmlzdG1hcwp0cmVlIG9yZGVyOgoKCTx0eXBlPiBsb25nZXN0X3ZhcmlhYmxlX25hbWU7 Cgk8dHlwZT4gc2hvcnRlcl92YXJfbmFtZTsKCTx0eXBlPiBldmVuX3Nob3J0ZXI7Cgk8dHlwZT4g aTsKCj4gKwo+ICsJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01F TSwgMCk7Cj4gKwlpZiAoIXIpIHsKPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8g Z2V0IG1lbSByZXNvdXJjZVxuIik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJ YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByKTsKPiArCWlmIChJU19F UlIoYmFzZSkpIHsKPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gbWFwIHJlZ3Nc biIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGJhc2UpOwo+ICsJfQo+ICsKPiArCWNvbmZpZyA9IHJl YWRsKGJhc2UgKyBTRFJBTV9DT05GSUdfUkVHKTsKPiArCWlmICghKGNvbmZpZyAmIFNEUkFNX0NP TkZJR19FQ0NfTUFTSykpIHsKPiArCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiU0RSQU0gRUNDIGlz IG5vdCBlbmFibGVkIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJbGF5ZXJz WzBdLnR5cGUgPSBFREFDX01DX0xBWUVSX0NISVBfU0VMRUNUOwo+ICsJbGF5ZXJzWzBdLnNpemUg PSBTRFJBTV9OVU1fQ1M7Cj4gKwlsYXllcnNbMF0uaXNfdmlydF9jc3JvdyA9IHRydWU7Cj4gKwo+ ICsJbWNpID0gZWRhY19tY19hbGxvYygwLCBBUlJBWV9TSVpFKGxheWVycyksIGxheWVycywgc2l6 ZW9mKCpkcnZkYXRhKSk7Cj4gKwlpZiAoIW1jaSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4g KwlkcnZkYXRhID0gbWNpLT5wdnRfaW5mbzsKPiArCWRydmRhdGEtPmJhc2UgPSBiYXNlOwo+ICsJ bWNpLT5wZGV2ID0gJnBkZXYtPmRldjsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1j aSk7Cj4gKwo+ICsJaWQgPSBvZl9tYXRjaF9kZXZpY2UoYXJtYWRhX3hwX21jX2VkYWNfb2ZfbWF0 Y2gsICZwZGV2LT5kZXYpOwo+ICsJbWNpLT5lZGFjX2NoZWNrID0gYXJtYWRhX3hwX21jX2VkYWNf Y2hlY2s7Cj4gKwltY2ktPm10eXBlX2NhcCA9IE1FTV9GTEFHX0REUjM7Cj4gKwltY2ktPmVkYWNf Y2FwID0gRURBQ19GTEFHX1NFQ0RFRDsKPiArCW1jaS0+bW9kX25hbWUgPSBwZGV2LT5kZXYuZHJp dmVyLT5uYW1lOwo+ICsJbWNpLT5jdGxfbmFtZSA9IGlkID8gaWQtPmNvbXBhdGlibGUgOiAidW5r bm93biI7Cj4gKwltY2ktPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7Cj4gKwltY2kt PnNjcnViX21vZGUgPSBTQ1JVQl9OT05FOwo+ICsKPiArCWFybWFkYV94cF9tY19lZGFjX3JlYWRf Y29uZmlnKG1jaSk7Cj4gKwo+ICsJLyogY29uZmlndXJlIFNCRSB0aHJlc2hvbGQgKi8KPiArCS8q IGl0IHNlZW1zIHRoYXQgU0JFcyBhcmUgbm90IGNhcHR1cmVkIG90aGVyd2lzZSAqLwo+ICsJd3Jp dGVsKDEgPDwgU0RSQU1fRVJSX0NUUkxfRVJSX1RIUl9PRkZTRVQsCj4gKwkgICAgICAgZHJ2ZGF0 YS0+YmFzZSArIFNEUkFNX0VSUl9DVFJMX1JFRyk7Cj4gKwo+ICsJLyogY2xlYXIgY2F1c2UgcmVn aXN0ZXJzICovCj4gKwl3cml0ZWwofihTRFJBTV9FUlJfQ0FVU0VfREJFX01BU0sgfCBTRFJBTV9F UlJfQ0FVU0VfU0JFX01BU0spLAo+ICsJICAgICAgIGRydmRhdGEtPmJhc2UgKyBTRFJBTV9FUlJf Q0FVU0VfRVJSX1JFRyk7Cj4gKwl3cml0ZWwofihTRFJBTV9FUlJfQ0FVU0VfREJFX01BU0sgfCBT RFJBTV9FUlJfQ0FVU0VfU0JFX01BU0spLAo+ICsJICAgICAgIGRydmRhdGEtPmJhc2UgKyBTRFJB TV9FUlJfQ0FVU0VfTVNHX1JFRyk7CgpMZXQgdGhvc2Ugc3RpY2sgb3V0IGFuZCBhbGlnbiB2ZXJ0 aWNhbGx5LgoKPiArCj4gKwkvKiBjbGVhciBjb3VudGVyIHJlZ2lzdGVycyAqLwo+ICsJd3JpdGVs KDAsIGRydmRhdGEtPmJhc2UgKyBTRFJBTV9FUlJfU0JFX0NPVU5UX1JFRyk7Cj4gKwl3cml0ZWwo MCwgZHJ2ZGF0YS0+YmFzZSArIFNEUkFNX0VSUl9EQkVfQ09VTlRfUkVHKTsKPiArCj4gKwlpZiAo ZWRhY19tY19hZGRfbWMobWNpKSkgewo+ICsJCWVkYWNfbWNfZnJlZShtY2kpOwo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICsJfQo+ICsJZWRhY19vcF9zdGF0ZSA9IEVEQUNfT1BTVEFURV9QT0xMOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFybWFkYV94cF9tY19lZGFj X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbWVt X2N0bF9pbmZvICptY2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4gKwllZGFj X21jX2RlbF9tYygmcGRldi0+ZGV2KTsKPiArCWVkYWNfbWNfZnJlZShtY2kpOwo+ICsJcGxhdGZv cm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFybWFkYV94cF9tY19lZGFjX2RyaXZlciA9 IHsKPiArCS5wcm9iZSA9IGFybWFkYV94cF9tY19lZGFjX3Byb2JlLAo+ICsJLnJlbW92ZSA9IGFy bWFkYV94cF9tY19lZGFjX3JlbW92ZSwKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAiYXJt YWRhX3hwX21jX2VkYWMiLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihhcm1h ZGFfeHBfbWNfZWRhY19vZl9tYXRjaCksCj4gKwl9LAo+ICt9Owo+ICsKPiArLyoqKioqKioqKioq KioqKioqKioqKioqKiBFREFDIERldmljZSAoTDIgQ2FjaGUpICoqKioqKioqKioqKioqKioqKioq KioqKioqKi8KPiArCj4gK3N0cnVjdCBhdXJvcmFfbDJfZWRhY19kcnZkYXRhIHsKPiArCXZvaWQg X19pb21lbSAqYmFzZTsKPiArCj4gKwljaGFyIG1zZ1sxMjhdOwo+ICsKPiArCS8qIGVycm9yIGlu amVjdGlvbiB2aWEgZGVidWdmcyAqLwo+ICsJdWludDMyX3QgaW5qZWN0X2FkZHI7Cj4gKwl1aW50 MzJfdCBpbmplY3RfbWFzazsKPiArCXVpbnQ4X3QgaW5qZWN0X2N0bDsKPiArCj4gKwlzdHJ1Y3Qg ZGVudHJ5ICpkZWJ1Z2ZzOwo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgYXVyb3JhX2wyX2VkYWNf aW5qZWN0KHN0cnVjdCBhdXJvcmFfbDJfZWRhY19kcnZkYXRhICpkcnZkYXRhKQoKVGhlIHdob2xl IEVEQUMgZXJyb3IgaW5qZWN0aW9uIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlIGJlaGluZApDT05G SUdfRURBQ19ERUJVRy4gWW91IGRvbid0IHdhbnQgZXJyb3IgaW5qZWN0aW9uIGNhcGFiaWxpdGll cyBleHBvc2VkCm9uIGEgcHJvZHVjdGlvbiBzeXN0ZW0uCgo+ICt7Cj4gKwlkcnZkYXRhLT5pbmpl Y3RfYWRkciAmPSBBVVJPUkFfRVJSX0lOSkVDVF9DVExfQUREUl9NQVNLOwo+ICsJZHJ2ZGF0YS0+ aW5qZWN0X2N0bCAmPSBBVVJPUkFfRVJSX0lOSkVDVF9DVExfRU5fTUFTSzsKPiArCXdyaXRlbCgw LCBkcnZkYXRhLT5iYXNlICsgQVVST1JBX0VSUl9JTkpFQ1RfQ1RMX1JFRyk7Cj4gKwl3cml0ZWwo ZHJ2ZGF0YS0+aW5qZWN0X21hc2ssCj4gKwkgICAgICAgZHJ2ZGF0YS0+YmFzZSArIEFVUk9SQV9F UlJfSU5KRUNUX01BU0tfUkVHKTsKPiArCXdyaXRlbChkcnZkYXRhLT5pbmplY3RfYWRkciB8IGRy dmRhdGEtPmluamVjdF9jdGwsCj4gKwkgICAgICAgZHJ2ZGF0YS0+YmFzZSArIEFVUk9SQV9FUlJf SU5KRUNUX0NUTF9SRUcpOwoKTGV0IHRob3NlIHN0aWNrIG91dCBhbmQgYWxpZ24gdmVydGljYWxs eS4KCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGF1cm9yYV9sMl9lZGFjX2NoZWNrKHN0cnVjdCBl ZGFjX2RldmljZV9jdGxfaW5mbyAqZGNpKQo+ICt7Cj4gKwlzdHJ1Y3QgYXVyb3JhX2wyX2VkYWNf ZHJ2ZGF0YSAqZHJ2ZGF0YSA9IGRjaS0+cHZ0X2luZm87Cj4gKwl1aW50MzJfdCBjbnQsIGF0dHJf Y2FwLCBhZGRyX2NhcCwgd2F5X2NhcDsKPiArCXVuc2lnbmVkIGludCBjbnRfY2UsIGNudF91ZTsK PiArCj4gKwljbnQgPSByZWFkbChkcnZkYXRhLT5iYXNlICsgQVVST1JBX0VSUl9DTlRfUkVHKTsK PiArCWF0dHJfY2FwID0gcmVhZGwoZHJ2ZGF0YS0+YmFzZSArIEFVUk9SQV9FUlJfQVRUUl9DQVBf UkVHKTsKPiArCWFkZHJfY2FwID0gcmVhZGwoZHJ2ZGF0YS0+YmFzZSArIEFVUk9SQV9FUlJfQURE Ul9DQVBfUkVHKTsKPiArCXdheV9jYXAgPSByZWFkbChkcnZkYXRhLT5iYXNlICsgQVVST1JBX0VS Ul9XQVlfQ0FQX1JFRyk7Cj4gKwo+ICsJY250X2NlID0gKGNudCAmIEFVUk9SQV9FUlJfQ05UX0NF X01BU0spID4+IEFVUk9SQV9FUlJfQ05UX0NFX09GRlNFVDsKPiArCWNudF91ZSA9IChjbnQgJiBB VVJPUkFfRVJSX0NOVF9VRV9NQVNLKSA+PiBBVVJPUkFfRVJSX0NOVF9VRV9PRkZTRVQ7Cj4gKwkv KiBjbGVhciBlcnJvciBjb3VudGVyIHJlZ2lzdGVycyAqLwo+ICsJaWYgKGNudF9jZSB8fCBjbnRf dWUpCj4gKwkJd3JpdGVsKEFVUk9SQV9FUlJfQ05UX0NMUiwgZHJ2ZGF0YS0+YmFzZSArIEFVUk9S QV9FUlJfQ05UX1JFRyk7Cj4gKwo+ICsJaWYgKGF0dHJfY2FwICYgQVVST1JBX0VSUl9BVFRSX0NB UF9WQUxJRCkgewoKCglpZiAoIShhdHRyX2NhcCAmIEFVUk9SQV9FUlJfQVRUUl9DQVBfVkFMSUQp KQoJCWdvdG8gY2xlYXJfcmVtYWluaW5nOwoKc2F2ZXMgeW91IGFuIGluZGVudGF0aW9uIGxldmVs LgoKPiArCQljaGFyICptc2cgPSBkcnZkYXRhLT5tc2c7Cj4gKwkJc2l6ZV90IHNpemUgPSBzaXpl b2YoZHJ2ZGF0YS0+bXNnKTsKPiArCQlzaXplX3QgbGVuID0gMDsKPiArCj4gKwkJc3dpdGNoICgo YXR0cl9jYXAgJiBBVVJPUkFfRVJSX0FUVFJfQ0FQX0VSUl9TT1VSQ0VfTUFTSykKPiArCQkJPj4g QVVST1JBX0VSUl9BVFRSX0NBUF9FUlJfU09VUkNFX09GRlNFVCkgewo+ICsJCWNhc2UgMDoKPiAr CQkJbGVuICs9IHNucHJpbnRmKG1zZytsZW4sIHNpemUtbGVuLCAic3JjPUNQVTAgIik7Cj4gKwkJ CWJyZWFrOwo+ICsJCWNhc2UgMToKPiArCQkJbGVuICs9IHNucHJpbnRmKG1zZytsZW4sIHNpemUt bGVuLCAic3JjPUNQVTEgIik7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgMjoKPiArCQkJbGVuICs9 IHNucHJpbnRmKG1zZytsZW4sIHNpemUtbGVuLCAic3JjPUNQVTIgIik7Cj4gKwkJCWJyZWFrOwo+ ICsJCWNhc2UgMzoKPiArCQkJbGVuICs9IHNucHJpbnRmKG1zZytsZW4sIHNpemUtbGVuLCAic3Jj PUNQVTMgIik7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgNzoKPiArCQkJbGVuICs9IHNucHJpbnRm KG1zZytsZW4sIHNpemUtbGVuLCAic3JjPUlPICIpOwo+ICsJCQlicmVhazsKPiArCQl9CgpMZW1t ZSB0cnkgdG8gc2hvcnRlbiB0aGF0OgoKCXNyYyA9IChhdHRyX2NhcCAmIEFVUk9SQV9FUlJfQVRU Ul9TUkNfTVNLKSA+PiBBVVJPUkFfRVJSX0FUVFJfU1JDX09GRjsKCWlmIChzcmMgPD0gMykKCQls ZW4gKz0gc25wcmludGYobXNnK2xlbiwgc2l6ZS1sZW4sICJzcmM9Q1BVJWQgIiwgc3JjKTsKCWVs c2UKCQlsZW4gKz0gc25wcmludGYobXNnK2xlbiwgc2l6ZS1sZW4sICJzcmM9SU8gIik7CgpZZWFo LCB0aG9zZSBBVVJPUkFfKiBkZWZpbmVzIGNvdWxkIGJlIHNob3J0ZXIuCgo+ICsJCXN3aXRjaCAo KGF0dHJfY2FwICYgQVVST1JBX0VSUl9BVFRSX0NBUF9UUkFOU19UWVBFX01BU0spCj4gKwkJCT4+ IEFVUk9SQV9FUlJfQVRUUl9DQVBfVFJBTlNfVFlQRV9PRkZTRVQpIHsKCkRpdHRvLgoKPiArCQlj YXNlIDA6Cj4gKwkJCWxlbiArPSBzbnByaW50Zihtc2crbGVuLCBzaXplLWxlbiwgInR4bj1EYXRh LVJlYWQgIik7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgMToKPiArCQkJbGVuICs9IHNucHJpbnRm KG1zZytsZW4sIHNpemUtbGVuLCAidHhuPUlzbi1SZWFkICIpOwo+ICsJCQlicmVhazsKPiArCQlj YXNlIDI6Cj4gKwkJCWxlbiArPSBzbnByaW50Zihtc2crbGVuLCBzaXplLWxlbiwgInR4bj1DbGVh bi1GbHVzaCAiKTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSAzOgo+ICsJCQlsZW4gKz0gc25wcmlu dGYobXNnK2xlbiwgc2l6ZS1sZW4sICJ0eG49RXZpY3Rpb24gIik7Cj4gKwkJCWJyZWFrOwo+ICsJ CWNhc2UgNDoKPiArCQkJbGVuICs9IHNucHJpbnRmKG1zZytsZW4sIHNpemUtbGVuLAo+ICsJCQkJ CSJ0eG49UmVhZC1Nb2RpZnktV3JpdGUgIik7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQlzd2l0 Y2ggKChhdHRyX2NhcCAmIEFVUk9SQV9FUlJfQVRUUl9DQVBfRVJSX1RZUEVfTUFTSykKPiArCQkJ Pj4gQVVST1JBX0VSUl9BVFRSX0NBUF9FUlJfVFlQRV9PRkZTRVQpIHsKPiArCQljYXNlIDA6Cj4g KwkJCWxlbiArPSBzbnByaW50Zihtc2crbGVuLCBzaXplLWxlbiwgImVycj1Db3JyRUNDICIpOwo+ ICsJCQlicmVhazsKPiArCQljYXNlIDE6Cj4gKwkJCWxlbiArPSBzbnByaW50Zihtc2crbGVuLCBz aXplLWxlbiwgImVycj1VbkNvcnJFQ0MgIik7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgMjoKPiAr CQkJbGVuICs9IHNucHJpbnRmKG1zZytsZW4sIHNpemUtbGVuLCAiZXJyPVRhZ1Bhcml0eSAiKTsK PiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJCWxlbiArPSBzbnByaW50Zihtc2crbGVuLCBzaXplLWxl biwgImFkZHI9MHgleCAiLAo+ICsJCQkgICAgYWRkcl9jYXAgJiBBVVJPUkFfRVJSX0FERFJfQ0FQ X0FERFJfTUFTSyk7Cj4gKwkJbGVuICs9IHNucHJpbnRmKG1zZytsZW4sIHNpemUtbGVuLCAiaW5k ZXg9MHgleCAiLAo+ICsJCQkgICAgKHdheV9jYXAgJiBBVVJPUkFfRVJSX1dBWV9DQVBfSU5ERVhf TUFTSykKPiArCQkJICAgID4+IEFVUk9SQV9FUlJfV0FZX0NBUF9JTkRFWF9PRkZTRVQpOwo+ICsJ CWxlbiArPSBzbnByaW50Zihtc2crbGVuLCBzaXplLWxlbiwgIndheT0weCV4IiwKPiArCQkJICAg ICh3YXlfY2FwICYgQVVST1JBX0VSUl9XQVlfQ0FQX1dBWV9NQVNLKQo+ICsJCQkgICAgPj4gQVVS T1JBX0VSUl9XQVlfQ0FQX1dBWV9PRkZTRVQpOwoKTGV0IGl0IHN0aWNrIG91dC4KCjwtLS0tIG5l d2xpbmUgaGVyZS4KCj4gKwkJLyogY2xlYXIgZXJyb3IgY2FwdHVyZSByZWdpc3RlcnMgKi8KPiAr CQl3cml0ZWwoQVVST1JBX0VSUl9BVFRSX0NBUF9WQUxJRCwKPiArCQkgICAgICAgZHJ2ZGF0YS0+ YmFzZSArIEFVUk9SQV9FUlJfQVRUUl9DQVBfUkVHKTsKCkxldCBpdCBzdGljayBvdXQuCgo+ICsJ CWlmICgoYXR0cl9jYXAgJiBBVVJPUkFfRVJSX0FUVFJfQ0FQX0VSUl9UWVBFX01BU0spCj4gKwkJ ICAgID4+IEFVUk9SQV9FUlJfQVRUUl9DQVBfRVJSX1RZUEVfT0ZGU0VUKSB7CgpEaXR0by4KCj4g KwkJCS8qIFVuQ29yckVDQyBvciBUYWdQYXJpdHkgKi8KPiArCQkJaWYgKGNudF91ZSkKPiArCQkJ CWNudF91ZS0tOwo+ICsJCQllZGFjX2RldmljZV9oYW5kbGVfdWUoZGNpLCAwLCAwLCBkcnZkYXRh LT5tc2cpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWlmIChjbnRfY2UpCj4gKwkJCQljbnRfY2UtLTsK PiArCQkJZWRhY19kZXZpY2VfaGFuZGxlX2NlKGRjaSwgMCwgMCwgZHJ2ZGF0YS0+bXNnKTsKPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJLyogcmVwb3J0IHJlbWFpbmluZyBlcnJvcnMgKi8KPiArCXdoaWxl IChjbnRfdWUtLSkKPiArCQllZGFjX2RldmljZV9oYW5kbGVfdWUoZGNpLCAwLCAwLAo+ICsJCQkJ ICAgICAgImRldGFpbHMgdW5hdmFpbGFibGUgKG11bHRpcGxlIGVycm9ycykiKTsKPiArCXdoaWxl IChjbnRfY2UtLSkKPiArCQllZGFjX2RldmljZV9oYW5kbGVfdWUoZGNpLCAwLCAwLAo+ICsJCQkJ ICAgICAgImRldGFpbHMgdW5hdmFpbGFibGUgKG11bHRpcGxlIGVycm9ycykiKTsKCkRpdHRvLiBZ b3UgZ2V0IHRoZSBpZGVhLi4uCgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhdXJvcmFfbDJfZWRh Y19wb2xsKHN0cnVjdCBlZGFjX2RldmljZV9jdGxfaW5mbyAqZGNpKQo+ICt7Cj4gKwlzdHJ1Y3Qg YXVyb3JhX2wyX2VkYWNfZHJ2ZGF0YSAqZHJ2ZGF0YSA9IGRjaS0+cHZ0X2luZm87Cj4gKwo+ICsJ YXVyb3JhX2wyX2VkYWNfY2hlY2soZGNpKTsKPiArCWF1cm9yYV9sMl9lZGFjX2luamVjdChkcnZk YXRhKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXVyb3Jh X2wyX2VkYWNfb2ZfbWF0Y2hbXSA9IHsKPiArCXsuY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGF1cm9y YS1zeXN0ZW0tY2FjaGUiLH0sCj4gKwl7fSwKPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShv ZiwgYXVyb3JhX2wyX2VkYWNfb2ZfbWF0Y2gpOwo+ICsKPiArc3RhdGljIGludCBhdXJvcmFfbDJf ZWRhY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwljb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkICppZDsKPiArCXN0cnVjdCBlZGFjX2RldmljZV9jdGxfaW5mbyAq ZGNpOwo+ICsJc3RydWN0IGF1cm9yYV9sMl9lZGFjX2RydmRhdGEgKmRydmRhdGE7Cj4gKwlzdHJ1 Y3QgcmVzb3VyY2UgKnI7Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwl1aW50MzJfdCBsMngw X2F1eF9jdHJsOwoKUGxlYXNlIHNvcnQgZnVuY3Rpb24gbG9jYWwgdmFyaWFibGVzIGRlY2xhcmF0 aW9uIGluIGEgcmV2ZXJzZSBjaHJpc3RtYXMKdHJlZSBvcmRlcjoKCgk8dHlwZT4gbG9uZ2VzdF92 YXJpYWJsZV9uYW1lOwoJPHR5cGU+IHNob3J0ZXJfdmFyX25hbWU7Cgk8dHlwZT4gZXZlbl9zaG9y dGVyOwoJPHR5cGU+IGk7Cgo+ICsKPiArCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwg SU9SRVNPVVJDRV9NRU0sIDApOwo+ICsJaWYgKCFyKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiVW5hYmxlIHRvIGdldCBtZW0gcmVzb3VyY2VcbiIpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ ICsJfQo+ICsKPiArCWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcik7 Cj4gKwlpZiAoSVNfRVJSKGJhc2UpKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxl IHRvIG1hcCByZWdzXG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKPiArCX0KPiArCj4g KwlsMngwX2F1eF9jdHJsID0gcmVhZGwoYmFzZSArIEwyWDBfQVVYX0NUUkwpOwo+ICsJaWYgKCEo bDJ4MF9hdXhfY3RybCAmIEFVUk9SQV9BQ1JfUEFSSVRZX0VOKSkKPiArCQlkZXZfd2FybigmcGRl di0+ZGV2LCAidGFnIHBhcml0eSBpcyBub3QgZW5hYmxlZCIpOwo+ICsJaWYgKCEobDJ4MF9hdXhf Y3RybCAmIEFVUk9SQV9BQ1JfRUNDX0VOKSkKPiArCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZGF0 YSBFQ0MgaXMgbm90IGVuYWJsZWQiKTsKPiArCj4gKwlkY2kgPSBlZGFjX2RldmljZV9hbGxvY19j dGxfaW5mbyhzaXplb2YoKmRydmRhdGEpLAo+ICsJCQkJCSAiY3B1IiwgMSwgIkwiLCAxLCAyLCBO VUxMLCAwLCAwKTsKPiArCWlmICghZGNpKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRy dmRhdGEgPSBkY2ktPnB2dF9pbmZvOwo+ICsJZHJ2ZGF0YS0+YmFzZSA9IGJhc2U7Cj4gKwlkY2kt PmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkY2kpOwo+ ICsKPiArCWlkID0gb2ZfbWF0Y2hfZGV2aWNlKGF1cm9yYV9sMl9lZGFjX29mX21hdGNoLCAmcGRl di0+ZGV2KTsKPiArCWRjaS0+ZWRhY19jaGVjayA9IGF1cm9yYV9sMl9lZGFjX3BvbGw7Cj4gKwlk Y2ktPm1vZF9uYW1lID0gcGRldi0+ZGV2LmRyaXZlci0+bmFtZTsKPiArCWRjaS0+Y3RsX25hbWUg PSBpZCA/IGlkLT5jb21wYXRpYmxlIDogInVua25vd24iOwo+ICsJZGNpLT5kZXZfbmFtZSA9IGRl dl9uYW1lKCZwZGV2LT5kZXYpOwo+ICsKPiArCS8qIGNsZWFyIHJlZ2lzdGVycyAqLwo+ICsJd3Jp dGVsKEFVUk9SQV9FUlJfQ05UX0NMUiwgZHJ2ZGF0YS0+YmFzZSArIEFVUk9SQV9FUlJfQ05UX1JF Ryk7Cj4gKwl3cml0ZWwoQVVST1JBX0VSUl9BVFRSX0NBUF9WQUxJRCwKPiArCSAgICAgICBkcnZk YXRhLT5iYXNlICsgQVVST1JBX0VSUl9BVFRSX0NBUF9SRUcpOwo+ICsKPiArCWlmIChlZGFjX2Rl dmljZV9hZGRfZGV2aWNlKGRjaSkpIHsKPiArCQllZGFjX2RldmljZV9mcmVlX2N0bF9pbmZvKGRj aSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZHJ2ZGF0YS0+ZGVidWdmcyA9 IGVkYWNfZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKPiArCWlmIChk cnZkYXRhLT5kZWJ1Z2ZzKSB7Cj4gKwkJZWRhY19kZWJ1Z2ZzX2NyZWF0ZV94MzIoImluamVjdF9h ZGRyIiwgMDY0NCwKPiArCQkJCQlkcnZkYXRhLT5kZWJ1Z2ZzLAo+ICsJCQkJCSZkcnZkYXRhLT5p bmplY3RfYWRkcik7Cj4gKwkJZWRhY19kZWJ1Z2ZzX2NyZWF0ZV94MzIoImluamVjdF9tYXNrIiwg MDY0NCwKPiArCQkJCQlkcnZkYXRhLT5kZWJ1Z2ZzLAo+ICsJCQkJCSZkcnZkYXRhLT5pbmplY3Rf bWFzayk7Cj4gKwkJZWRhY19kZWJ1Z2ZzX2NyZWF0ZV94OCgiaW5qZWN0X2N0bCIsIDA2NDQsCj4g KwkJCQkgICAgICAgZHJ2ZGF0YS0+ZGVidWdmcywgJmRydmRhdGEtPmluamVjdF9jdGwpOwo+ICsJ fQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGF1cm9yYV9sMl9lZGFj X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZWRh Y19kZXZpY2VfY3RsX2luZm8gKmRjaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsJ c3RydWN0IGF1cm9yYV9sMl9lZGFjX2RydmRhdGEgKmRydmRhdGEgPSBkY2ktPnB2dF9pbmZvOwo+ ICsKPiArCWVkYWNfZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRydmRhdGEtPmRlYnVnZnMpOwo+ ICsJZWRhY19kZXZpY2VfZGVsX2RldmljZSgmcGRldi0+ZGV2KTsKPiArCWVkYWNfZGV2aWNlX2Zy ZWVfY3RsX2luZm8oZGNpKTsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBhdXJvcmFfbDJfZWRhY19kcml2ZXIgPSB7Cj4gKwkucHJvYmUgPSBhdXJvcmFfbDJfZWRhY19w cm9iZSwKPiArCS5yZW1vdmUgPSBhdXJvcmFfbDJfZWRhY19yZW1vdmUsCj4gKwkuZHJpdmVyID0g ewo+ICsJCS5uYW1lID0gImF1cm9yYV9sMl9lZGFjIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBv Zl9tYXRjaF9wdHIoYXVyb3JhX2wyX2VkYWNfb2ZfbWF0Y2gpLAo+ICsJfSwKPiArfTsKPiArCj4g Ky8qKioqKioqKioqKioqKioqKioqKioqKiogRHJpdmVyIHJlZ2lzdHJhdGlvbiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciAqIGNvbnN0IGRyaXZlcnNbXSA9IHsKPiArCSZhcm1hZGFfeHBfbWNfZWRhY19kcml2ZXIsCj4g KwkmYXVyb3JhX2wyX2VkYWNfZHJpdmVyLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBfX2luaXQg YXJtYWRhX3hwX2VkYWNfaW5pdCh2b2lkKQo+ICt7Cj4gKwlpbnQgcmVzID0gMDsKCk5vIG5lZWQg dG8gemVybyBpdC4KCj4gKwo+ICsJLyogb25seSBwb2xsaW5nIGlzIHN1cHBvcnRlZCAqLwo+ICsJ ZWRhY19vcF9zdGF0ZSA9IEVEQUNfT1BTVEFURV9QT0xMOwo+ICsKPiArCXJlcyA9IHBsYXRmb3Jt X3JlZ2lzdGVyX2RyaXZlcnMoZHJpdmVycywgQVJSQVlfU0laRShkcml2ZXJzKSk7Cj4gKwlpZiAo cmVzKQo+ICsJCXByX3dhcm4oIkFyYW1kYSBYUCBFREFDIGRyaXZlcnMgZmFpbCB0byByZWdpc3Rl clxuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArbW9kdWxlX2luaXQoYXJtYWRhX3hwX2Vk YWNfaW5pdCk7Cg==