From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from smtps.newmedia-net.de ([2a05:a1c0:0:de::167] helo=webmail.newmedia-net.de) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1emKZG-0002oB-Oc for ath10k@lists.infradead.org; Thu, 15 Feb 2018 14:31:47 +0000 Subject: [PATCH 1/1] ath10k: add LED and GPIO controlling support for various chipsets References: <1518684977-14607-1-git-send-email-govinds@codeaurora.org> From: Sebastian Gottschall Message-ID: Date: Thu, 15 Feb 2018 15:31:04 +0100 MIME-Version: 1.0 In-Reply-To: <1518684977-14607-1-git-send-email-govinds@codeaurora.org> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "ath10k" Errors-To: ath10k-bounces+kvalo=adurom.com@lists.infradead.org To: Govind Singh , ath10k@lists.infradead.org Cc: linux-wireless@vger.kernel.org QWRkcyBMRUQgYW5kIEdQSU8gQ29udHJvbCBzdXBwb3J0IGZvciA5ODh4LCA5ODg3LCA5ODg4LCA5 OXgwLCA5OTg0IGFuZCAKaXBxNDAxOSBiYXNlZCBjaGlwc2V0cyB3aXRoIG9uIGNoaXBzZXQgY29u bmVjdGVkIGxlZCdzCnVzaW5nIFdNSSBGaXJtd2FyZSBBUEkuClRoZSBMRUQgZGV2aWNlIHdpbGwg Z2V0IGF2YWlsYWJsZSBuYW1lZCBhcyAiYXRoMTBrLXBoeVgiIGF0IHN5c2ZzIGFuZCAKY2FuIGJl IGNvbnRyb2xsZWQgd2l0aCB2YXJpb3VzIHRyaWdnZXJzLgphZGRzIGFsc28gZGVidWdmcyBpbnRl cmZhY2UgZm9yIGdwaW8gY29udHJvbC4KClNpZ25lZC1vZmYtYnk6IFNlYmFzdGlhbiBHb3R0c2No YWxsIDxzLmdvdHRzY2hhbGxAZGQtd3J0LmNvbT4KCiDCoGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0 aC9hdGgxMGsvY29yZS5jwqDCoMKgIHwgMTY4IAorKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0KIMKgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9jb3JlLmjCoMKgwqAgfMKgIDE1 ICsrKwogwqBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2RlYnVnLmPCoMKgIHwgMTQw ICsrKysrKysrKysrKysrKysrKysrKysrKysKIMKgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0 aDEway9ody5owqDCoMKgwqDCoCB8wqDCoCAxICsKIMKgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRo L2F0aDEway93bWktb3BzLmggfMKgIDM2ICsrKysrKy0KIMKgZHJpdmVycy9uZXQvd2lyZWxlc3Mv YXRoL2F0aDEway93bWkuY8KgwqDCoMKgIHzCoCA0MyArKysrKysrKwogwqBkcml2ZXJzL25ldC93 aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS5owqDCoMKgwqAgfMKgIDM2ICsrKysrKysKIMKgNyBmaWxl cyBjaGFuZ2VkLCA0MzYgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2NvcmUuYyAKYi9kcml2ZXJzL25ldC93 aXJlbGVzcy9hdGgvYXRoMTBrL2NvcmUuYwppbmRleCBmM2VjMTNiODBiMjAuLmI3MTJiZjA5YWQ2 ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9jb3JlLmMKKysr IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9jb3JlLmMKQEAgLTIxLDYgKzIxLDkg QEAKIMKgI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogwqAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4K IMKgI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Cisj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKCiDCoCNpbmNsdWRlICJjb3JlLmgi CiDCoCNpbmNsdWRlICJtYWMuaCIKQEAgLTY1LDYgKzY4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBhdGgxMGtfaHdfcGFyYW1zIAphdGgxMGtfaHdfcGFyYW1zX2xpc3RbXSA9IHsKIMKgwqDCoMKg IMKgwqDCoCAuaWQgPSBRQ0E5ODhYX0hXXzJfMF9WRVJTSU9OLAogwqDCoMKgwqAgwqDCoMKgIC5k ZXZfaWQgPSBRQ0E5ODhYXzJfMF9ERVZJQ0VfSUQsCiDCoMKgwqDCoCDCoMKgwqAgLm5hbWUgPSAi cWNhOTg4eCBodzIuMCIsCivCoMKgwqAgwqDCoMKgIC5sZWRfcGluID0gMSwKIMKgwqDCoMKgIMKg wqDCoCAucGF0Y2hfbG9hZF9hZGRyID0gUUNBOTg4WF9IV18yXzBfUEFUQ0hfTE9BRF9BRERSLAog wqDCoMKgwqAgwqDCoMKgIC51YXJ0X3BpbiA9IDcsCiDCoMKgwqDCoCDCoMKgwqAgLmNjX3dyYXBh cm91bmRfdHlwZSA9IEFUSDEwS19IV19DQ19XUkFQX1NISUZURURfQUxMLApAQCAtOTQsNiArOTgs NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEwa19od19wYXJhbXMgCmF0aDEwa19od19wYXJh bXNfbGlzdFtdID0gewogwqDCoMKgwqAgwqDCoMKgIC5pZCA9IFFDQTk4OFhfSFdfMl8wX1ZFUlNJ T04sCiDCoMKgwqDCoCDCoMKgwqAgLmRldl9pZCA9IFFDQTk4OFhfMl8wX0RFVklDRV9JRF9VQk5U LAogwqDCoMKgwqAgwqDCoMKgIC5uYW1lID0gInFjYTk4OHggaHcyLjAgdWJpcXVpdGkiLAorwqDC oMKgIMKgwqDCoCAubGVkX3BpbiA9IDEsCiDCoMKgwqDCoCDCoMKgwqAgLnBhdGNoX2xvYWRfYWRk ciA9IFFDQTk4OFhfSFdfMl8wX1BBVENIX0xPQURfQUREUiwKIMKgwqDCoMKgIMKgwqDCoCAudWFy dF9waW4gPSA3LAogwqDCoMKgwqAgwqDCoMKgIC5jY193cmFwYXJvdW5kX3R5cGUgPSBBVEgxMEtf SFdfQ0NfV1JBUF9TSElGVEVEX0FMTCwKQEAgLTEyMyw2ICsxMjgsNyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGF0aDEwa19od19wYXJhbXMgCmF0aDEwa19od19wYXJhbXNfbGlzdFtdID0gewogwqDC oMKgwqAgwqDCoMKgIC5pZCA9IFFDQTk4ODdfSFdfMV8wX1ZFUlNJT04sCiDCoMKgwqDCoCDCoMKg wqAgLmRldl9pZCA9IFFDQTk4ODdfMV8wX0RFVklDRV9JRCwKIMKgwqDCoMKgIMKgwqDCoCAubmFt ZSA9ICJxY2E5ODg3IGh3MS4wIiwKK8KgwqDCoCDCoMKgwqAgLmxlZF9waW4gPSAxLAogwqDCoMKg wqAgwqDCoMKgIC5wYXRjaF9sb2FkX2FkZHIgPSBRQ0E5ODg3X0hXXzFfMF9QQVRDSF9MT0FEX0FE RFIsCiDCoMKgwqDCoCDCoMKgwqAgLnVhcnRfcGluID0gNywKIMKgwqDCoMKgIMKgwqDCoCAuY2Nf d3JhcGFyb3VuZF90eXBlID0gQVRIMTBLX0hXX0NDX1dSQVBfU0hJRlRFRF9BTEwsCkBAIC0yNjcs NiArMjczLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMGtfaHdfcGFyYW1zIAphdGgxMGtf aHdfcGFyYW1zX2xpc3RbXSA9IHsKIMKgwqDCoMKgIMKgwqDCoCAuaWQgPSBRQ0E5OVgwX0hXXzJf MF9ERVZfVkVSU0lPTiwKIMKgwqDCoMKgIMKgwqDCoCAuZGV2X2lkID0gUUNBOTlYMF8yXzBfREVW SUNFX0lELAogwqDCoMKgwqAgwqDCoMKgIC5uYW1lID0gInFjYTk5eDAgaHcyLjAiLAorwqDCoMKg IMKgwqDCoCAubGVkX3BpbiA9IDE3LAogwqDCoMKgwqAgwqDCoMKgIC5wYXRjaF9sb2FkX2FkZHIg PSBRQ0E5OVgwX0hXXzJfMF9QQVRDSF9MT0FEX0FERFIsCiDCoMKgwqDCoCDCoMKgwqAgLnVhcnRf cGluID0gNywKIMKgwqDCoMKgIMKgwqDCoCAub3RwX2V4ZV9wYXJhbSA9IDB4MDAwMDA3MDAsCkBA IC0zMDEsNiArMzA4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMGtfaHdfcGFyYW1zIAph dGgxMGtfaHdfcGFyYW1zX2xpc3RbXSA9IHsKIMKgwqDCoMKgIMKgwqDCoCAuaWQgPSBRQ0E5OTg0 X0hXXzFfMF9ERVZfVkVSU0lPTiwKIMKgwqDCoMKgIMKgwqDCoCAuZGV2X2lkID0gUUNBOTk4NF8x XzBfREVWSUNFX0lELAogwqDCoMKgwqAgwqDCoMKgIC5uYW1lID0gInFjYTk5ODQvcWNhOTk5NCBo dzEuMCIsCivCoMKgwqAgwqDCoMKgIC5sZWRfcGluID0gMTcsCiDCoMKgwqDCoCDCoMKgwqAgLnBh dGNoX2xvYWRfYWRkciA9IFFDQTk5ODRfSFdfMV8wX1BBVENIX0xPQURfQUREUiwKIMKgwqDCoMKg IMKgwqDCoCAudWFydF9waW4gPSA3LAogwqDCoMKgwqAgwqDCoMKgIC5jY193cmFwYXJvdW5kX3R5 cGUgPSBBVEgxMEtfSFdfQ0NfV1JBUF9TSElGVEVEX0VBQ0gsCkBAIC0zNDAsNiArMzQ4LDcgQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMGtfaHdfcGFyYW1zIAphdGgxMGtfaHdfcGFyYW1zX2xp c3RbXSA9IHsKIMKgwqDCoMKgIMKgwqDCoCAuaWQgPSBRQ0E5ODg4X0hXXzJfMF9ERVZfVkVSU0lP TiwKIMKgwqDCoMKgIMKgwqDCoCAuZGV2X2lkID0gUUNBOTg4OF8yXzBfREVWSUNFX0lELAogwqDC oMKgwqAgwqDCoMKgIC5uYW1lID0gInFjYTk4ODggaHcyLjAiLAorwqDCoMKgIMKgwqDCoCAubGVk X3BpbiA9IDE3LAogwqDCoMKgwqAgwqDCoMKgIC5wYXRjaF9sb2FkX2FkZHIgPSBRQ0E5ODg4X0hX XzJfMF9QQVRDSF9MT0FEX0FERFIsCiDCoMKgwqDCoCDCoMKgwqAgLnVhcnRfcGluID0gNywKIMKg wqDCoMKgIMKgwqDCoCAuY2Nfd3JhcGFyb3VuZF90eXBlID0gQVRIMTBLX0hXX0NDX1dSQVBfU0hJ RlRFRF9FQUNILApAQCAtNDM2LDYgKzQ0NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTBr X2h3X3BhcmFtcyAKYXRoMTBrX2h3X3BhcmFtc19saXN0W10gPSB7CiDCoMKgwqDCoCDCoMKgwqAg LmlkID0gUUNBNDAxOV9IV18xXzBfREVWX1ZFUlNJT04sCiDCoMKgwqDCoCDCoMKgwqAgLmRldl9p ZCA9IDAsCiDCoMKgwqDCoCDCoMKgwqAgLm5hbWUgPSAicWNhNDAxOSBodzEuMCIsCivCoMKgwqAg wqDCoMKgIC5sZWRfcGluID0gNTgsCiDCoMKgwqDCoCDCoMKgwqAgLnBhdGNoX2xvYWRfYWRkciA9 IFFDQTQwMTlfSFdfMV8wX1BBVENIX0xPQURfQUREUiwKIMKgwqDCoMKgIMKgwqDCoCAudWFydF9w aW4gPSA3LAogwqDCoMKgwqAgwqDCoMKgIC5jY193cmFwYXJvdW5kX3R5cGUgPSBBVEgxMEtfSFdf Q0NfV1JBUF9TSElGVEVEX0VBQ0gsCkBAIC0yMTMyLDEyICsyMTQyLDE0MyBAQCBzdGF0aWMgaW50 IGF0aDEwa19jb3JlX3Jlc2V0X3J4X2ZpbHRlcihzdHJ1Y3QgCmF0aDEwayAqYXIpCiDCoMKgwqDC oCByZXR1cm4gMDsKIMKgfQoKK3N0YXRpYyBpbnQgYXRoMTBrX2dwaW9fcGluX2NmZ19pbnB1dChz dHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCAKb2Zmc2V0KQoreworwqDCoMKgIHN0cnVj dCBhdGgxMGtfZ3Bpb2NvbnRyb2wgKmdwaW8gPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IAph dGgxMGtfZ3Bpb2NvbnRyb2wsIGdjaGlwKTsKK8KgwqDCoCBhdGgxMGtfd21pX2dwaW9fY29uZmln KGdwaW8tPmFyLCBvZmZzZXQsIDEsIFdNSV9HUElPX1BVTExfTk9ORSwgCldNSV9HUElPX0lOVFRZ UEVfRElTQUJMRSk7IC8vIGNvbmZpZ3VyZSB0byBpbnB1dAorwqDCoMKgIGdwaW8tPmdwaW9fc3Rh dGVfZGlyID0gMTsKK8KgwqDCoCByZXR1cm4gMDsKK30KKworLyogZ3Bpb19jaGlwIGhhbmRsZXIg OiBzZXQgR1BJTyB0byBvdXRwdXQgKi8KK3N0YXRpYyBpbnQgYXRoMTBrX2dwaW9fcGluX2NmZ19v dXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgCm9mZnNldCwKK8KgwqDCoCDC oMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqDCoCBpbnQgdmFsdWUpCit7CivCoMKgwqAgc3RydWN0 IGF0aDEwa19ncGlvY29udHJvbCAqZ3BpbyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgCmF0 aDEwa19ncGlvY29udHJvbCwgZ2NoaXApOworCivCoMKgwqAgYXRoMTBrX3dtaV9ncGlvX2NvbmZp ZyhncGlvLT5hciwgb2Zmc2V0LCAwLCBXTUlfR1BJT19QVUxMX05PTkUsIApXTUlfR1BJT19JTlRU WVBFX0RJU0FCTEUpOyAvLyBjb25maWd1cmUgdG8gb3V0cHV0CivCoMKgwqAgYXRoMTBrX3dtaV9n cGlvX291dHB1dChncGlvLT5hciwgb2Zmc2V0LCB2YWx1ZSk7CivCoMKgwqAgZ3Bpby0+Z3Bpb19z dGF0ZV9kaXIgPSAwOworwqDCoMKgIGdwaW8tPmdwaW9fc3RhdGVfcGluID0gdmFsdWU7CivCoMKg wqAgcmV0dXJuIDA7Cit9CisKKy8qIGdwaW9fY2hpcCBoYW5kbGVyIDogcXVlcnkgR1BJTyBkaXJl Y3Rpb24gKDA9b3V0LCAxPWluKSAqLworc3RhdGljIGludCBhdGgxMGtfZ3Bpb19waW5fZ2V0X2Rp cihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CivCoMKgwqAgc3Ry dWN0IGF0aDEwa19ncGlvY29udHJvbCAqZ3BpbyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qg CmF0aDEwa19ncGlvY29udHJvbCwgZ2NoaXApOworCivCoMKgwqAgcmV0dXJuIGdwaW8tPmdwaW9f c3RhdGVfZGlyOworfQorCisvKiBncGlvX2NoaXAgaGFuZGxlciA6IGdldCBHUElPIHBpbiB2YWx1 ZSAqLworc3RhdGljIGludCBhdGgxMGtfZ3Bpb19waW5fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNo aXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKK8KgwqDCoCBzdHJ1Y3QgYXRoMTBrX2dwaW9jb250cm9s ICpncGlvID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCAKYXRoMTBrX2dwaW9jb250cm9sLCBn Y2hpcCk7CisKK8KgwqDCoCByZXR1cm4gZ3Bpby0+Z3Bpb19zdGF0ZV9waW47Cit9CisKKy8qIGdw aW9fY2hpcCBoYW5kbGVyIDogc2V0IEdQSU8gcGluIHRvIHZhbHVlICovCitzdGF0aWMgdm9pZCBh dGgxMGtfZ3Bpb19waW5fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNl dCwKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoMKgwqDCoCBpbnQgdmFsdWUpCit7CivCoMKg wqAgc3RydWN0IGF0aDEwa19ncGlvY29udHJvbCAqZ3BpbyA9IGNvbnRhaW5lcl9vZihjaGlwLCBz dHJ1Y3QgCmF0aDEwa19ncGlvY29udHJvbCwgZ2NoaXApOworCivCoMKgwqAgYXRoMTBrX3dtaV9n cGlvX291dHB1dChncGlvLT5hciwgb2Zmc2V0LCB2YWx1ZSk7CivCoMKgwqAgZ3Bpby0+Z3Bpb19z dGF0ZV9waW4gPSB2YWx1ZTsKK30KKworLyogcmVnaXN0ZXIgR1BJTyBjaGlwICovCitzdGF0aWMg aW50IGF0aDEwa19yZWdpc3Rlcl9ncGlvX2NoaXAoc3RydWN0IGF0aDEwayAqYXIpCit7CivCoMKg wqAgc3RydWN0IGF0aDEwa19ncGlvY29udHJvbCAqZ3BpbzsKK8KgwqDCoCBncGlvID0ga3phbGxv YyhzaXplb2Yoc3RydWN0IGF0aDEwa19ncGlvY29udHJvbCksIEdGUF9LRVJORUwpOworwqDCoMKg IGlmICghZ3BpbykgeworwqDCoMKgIMKgwqDCoCByZXR1cm4gLTE7CivCoMKgwqAgfQorCivCoMKg wqAgc25wcmludGYoZ3Bpby0+bGFiZWwsIHNpemVvZihncGlvLT5sYWJlbCksICJhdGgxMGstJXMi LAorwqDCoMKgIMKgwqDCoCDCoHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworI2lmIExJTlVY X1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LDUsMCkKK8KgwqDCoCBncGlvLT5nY2hp cC5wYXJlbnQgPSBhci0+ZGV2OworI2Vsc2UKK8KgwqDCoCBncGlvLT5nY2hpcC5kZXYgPSBhci0+ ZGV2OworI2VuZGlmCivCoMKgwqAgZ3Bpby0+Z2NoaXAuYmFzZSA9IC0xO8KgwqDCoCAvKiBkZXRl cm1pbmUgYmFzZSBhdXRvbWF0aWNhbGx5ICovCivCoMKgwqAgZ3Bpby0+Z2NoaXAubmdwaW8gPSAz MjsKK8KgwqDCoCBncGlvLT5nY2hpcC5sYWJlbCA9IGdwaW8tPmxhYmVsOworwqDCoMKgIGdwaW8t PmdjaGlwLmRpcmVjdGlvbl9pbnB1dCA9IGF0aDEwa19ncGlvX3Bpbl9jZmdfaW5wdXQ7CivCoMKg wqAgZ3Bpby0+Z2NoaXAuZGlyZWN0aW9uX291dHB1dCA9IGF0aDEwa19ncGlvX3Bpbl9jZmdfb3V0 cHV0OworwqDCoMKgIGdwaW8tPmdjaGlwLmdldF9kaXJlY3Rpb24gPSBhdGgxMGtfZ3Bpb19waW5f Z2V0X2RpcjsKK8KgwqDCoCBncGlvLT5nY2hpcC5nZXQgPSBhdGgxMGtfZ3Bpb19waW5fZ2V0Owor wqDCoMKgIGdwaW8tPmdjaGlwLnNldCA9IGF0aDEwa19ncGlvX3Bpbl9zZXQ7CisKK8KgwqDCoCBp ZiAoZ3Bpb2NoaXBfYWRkKCZncGlvLT5nY2hpcCkpIHsKK8KgwqDCoCDCoMKgwqAgcHJpbnRrKEtF Uk5fRVJSICJFcnJvciB3aGlsZSByZWdpc3RlcmluZyBncGlvIGNoaXBcbiIpOworwqDCoMKgIMKg wqDCoCByZXR1cm4gLTE7CivCoMKgwqAgfQorwqDCoMKgIGdwaW8tPmdjaGlwLm93bmVyID0gTlVM TDsKK8KgwqDCoCBhci0+Z3BpbyA9IGdwaW87CivCoMKgwqAgZ3Bpby0+YXIgPSBhcjsKK8KgwqDC oCByZXR1cm4gMDsKK30KKworLyogcmVtb3ZlIEdQSU8gY2hpcCAqLworc3RhdGljIHZvaWQgYXRo MTBrX3VucmVnaXN0ZXJfZ3Bpb19jaGlwKHN0cnVjdCBhdGgxMGsgKmFyKQoreworwqDCoMKgIHN0 cnVjdCBhdGgxMGtfZ3Bpb2NvbnRyb2wgKmdwaW8gPSBhci0+Z3BpbzsKK8KgwqDCoCBpZiAoZ3Bp bykKK8KgwqDCoCDCoMKgwqAgZ3Bpb2NoaXBfcmVtb3ZlKCZncGlvLT5nY2hpcCk7Cit9CisKK3N0 YXRpYyB2b2lkIGF0aDEwa19sZWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRf Y2RldiwKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoMKgwqDCoCBlbnVtIGxlZF9icmlnaHRu ZXNzIGJyaWdodG5lc3MpCit7CivCoMKgwqAgc3RydWN0IGF0aDEwa19ncGlvY29udHJvbCAqZ3Bp byA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IAphdGgxMGtfZ3Bpb2NvbnRyb2wsIGNk ZXYpOworwqDCoMKgIHN0cnVjdCBncGlvX2xlZCAqbGVkID0gJmdwaW8tPndpZmlfbGVkOworwqDC oMKgIGlmIChncGlvLT5hci0+c3RhdGUgPT0gQVRIMTBLX1NUQVRFX09OKSB7CivCoMKgwqAgwqDC oMKgIGdwaW8tPmdwaW9fc3RhdGVfcGluID0gKGJyaWdodG5lc3MgIT0gTEVEX09GRikgXiBsZWQt PmFjdGl2ZV9sb3c7CivCoMKgwqAgwqDCoMKgIGF0aDEwa193bWlfZ3Bpb19vdXRwdXQoZ3Bpby0+ YXIsIGxlZC0+Z3BpbywgZ3Bpby0+Z3Bpb19zdGF0ZV9waW4pOworwqDCoMKgIH0KK30KKworc3Rh dGljIGludCBhdGgxMGtfYWRkX2xlZChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IGdwaW9fbGVk ICpncGlvbGVkKQoreworwqDCoMKgIGludCByZXQ7CivCoMKgwqAgc3RydWN0IGF0aDEwa19ncGlv Y29udHJvbCAqZ3BpbyA9IGFyLT5ncGlvOworwqDCoMKgIGlmICghZ3BpbykKK8KgwqDCoCDCoMKg wqAgcmV0dXJuIC0xOworwqDCoMKgIGdwaW8tPmNkZXYubmFtZSA9IGdwaW9sZWQtPm5hbWU7CivC oMKgwqAgZ3Bpby0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSBncGlvbGVkLT5kZWZhdWx0X3RyaWdn ZXI7CivCoMKgwqAgZ3Bpby0+Y2Rldi5icmlnaHRuZXNzX3NldCA9IGF0aDEwa19sZWRfYnJpZ2h0 bmVzczsKKworwqDCoMKgIHJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYoYXIt Pmh3LT53aXBoeSksICZncGlvLT5jZGV2KTsKK8KgwqDCoCBpZiAocmV0IDwgMCkKK8KgwqDCoCDC oMKgwqAgcmV0dXJuIHJldDsKKworwqDCoMKgIGF0aDEwa193bWlfZ3Bpb19jb25maWcoYXIsIGdw aW9sZWQtPmdwaW8sIDAsIFdNSV9HUElPX1BVTExfTk9ORSwgCldNSV9HUElPX0lOVFRZUEVfRElT QUJMRSk7IC8vIGNvbmZpZ3VyZSB0byBvdXRwdXQKKworwqDCoMKgIC8qIFNldCBkZWZhdWx0IExF RCBzdGF0ZSAqLworwqDCoMKgIGlmIChncGlvbGVkLT5kZWZhdWx0X3N0YXRlID09IExFRFNfR1BJ T19ERUZTVEFURV9PTikKK8KgwqDCoCDCoMKgwqAgYXRoMTBrX3dtaV9ncGlvX291dHB1dChhciwg Z3Bpb2xlZC0+Z3BpbywgIWdwaW9sZWQtPmFjdGl2ZV9sb3cpOworwqDCoMKgIGVsc2UKK8KgwqDC oCDCoMKgwqAgYXRoMTBrX3dtaV9ncGlvX291dHB1dChhciwgZ3Bpb2xlZC0+Z3BpbywgZ3Bpb2xl ZC0+YWN0aXZlX2xvdyk7CisKK8KgwqDCoCByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXRo MTBrX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGgxMGsgKmFyKQoreworwqDCoMKgIGlmIChhci0+ Z3BpbykKK8KgwqDCoCDCoMKgwqAgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFyLT5ncGlvLT5j ZGV2KTsKK30KKwogwqBpbnQgYXRoMTBrX2NvcmVfc3RhcnQoc3RydWN0IGF0aDEwayAqYXIsIGVu dW0gYXRoMTBrX2Zpcm13YXJlX21vZGUgbW9kZSwKIMKgwqDCoMKgIMKgwqDCoCDCoMKgwqDCoMKg IGNvbnN0IHN0cnVjdCBhdGgxMGtfZndfY29tcG9uZW50cyAqZncpCiDCoHsKIMKgwqDCoMKgIGlu dCBzdGF0dXM7CiDCoMKgwqDCoCB1MzIgdmFsOwotCiDCoMKgwqDCoCBsb2NrZGVwX2Fzc2VydF9o ZWxkKCZhci0+Y29uZl9tdXRleCk7CgogwqDCoMKgwqAgY2xlYXJfYml0KEFUSDEwS19GTEFHX0NS QVNIX0ZMVVNILCAmYXItPmRldl9mbGFncyk7CkBAIC0yMzcyLDggKzI1MTMsMjggQEAgaW50IGF0 aDEwa19jb3JlX3N0YXJ0KHN0cnVjdCBhdGgxMGsgKmFyLCBlbnVtIAphdGgxMGtfZmlybXdhcmVf bW9kZSBtb2RlLAogwqDCoMKgwqAgaWYgKHN0YXR1cykKIMKgwqDCoMKgIMKgwqDCoCBnb3RvIGVy cl9oaWZfc3RvcDsKCi3CoMKgwqAgcmV0dXJuIDA7CisvKiBMRUQgQ29kZSAqLworwqDCoMKgIGlm IChhci0+aHdfcGFyYW1zLmxlZF9waW4pIHsgLy8gb25seSBjb25maWd1cmUgaWYgbm9uIHplcm8K K8KgwqDCoCDCoMKgwqAgaWYgKCFhci0+Z3Bpb19hdHRhY2hlZCkgeworwqDCoMKgIMKgwqDCoCDC oMKgwqAgc3RhdHVzID0gYXRoMTBrX3JlZ2lzdGVyX2dwaW9fY2hpcChhcik7CivCoMKgwqAgwqDC oMKgIMKgwqDCoCBpZiAoc3RhdHVzKSB7CivCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgZ290 byBlcnJfbm9fbGVkOworwqDCoMKgIMKgwqDCoCDCoMKgwqAgfQorwqDCoMKgIMKgwqDCoCDCoMKg wqAgYXItPmdwaW9fYXR0YWNoZWQgPSAxOworwqDCoMKgIMKgwqDCoCDCoMKgwqAgYXItPmdwaW8t PndpZmlfbGVkLmFjdGl2ZV9sb3cgPSAxOworwqDCoMKgIMKgwqDCoCDCoMKgwqAgYXItPmdwaW8t PndpZmlfbGVkLmdwaW8gPSBhci0+aHdfcGFyYW1zLmxlZF9waW47CivCoMKgwqAgwqDCoMKgIMKg wqDCoCBhci0+Z3Bpby0+d2lmaV9sZWQubmFtZSA9IGFyLT5ncGlvLT5sYWJlbDsKK8KgwqDCoCDC oMKgwqAgwqDCoMKgIGFyLT5ncGlvLT53aWZpX2xlZC5kZWZhdWx0X3N0YXRlID0gTEVEU19HUElP X0RFRlNUQVRFX0tFRVA7CisKK8KgwqDCoCDCoMKgwqAgwqDCoMKgIGF0aDEwa19hZGRfbGVkKGFy LCAmYXItPmdwaW8tPndpZmlfbGVkKTsKK8KgwqDCoCDCoMKgwqAgfQorwqDCoMKgIMKgwqDCoCBh dGgxMGtfd21pX2dwaW9fY29uZmlnKGFyLCBhci0+aHdfcGFyYW1zLmxlZF9waW4sIDAsIApXTUlf R1BJT19QVUxMX05PTkUsIFdNSV9HUElPX0lOVFRZUEVfRElTQUJMRSk7IC8vIGNvbmZpZ3VyZSB0 byBvdXRwdXQKK8KgwqDCoCDCoMKgwqAgYXRoMTBrX3dtaV9ncGlvX291dHB1dChhciwgYXItPmh3 X3BhcmFtcy5sZWRfcGluLCAxKTsKK8KgwqDCoCB9CgorZXJyX25vX2xlZDo7CisKK8KgwqDCoCBy ZXR1cm4gMDsKIMKgZXJyX2hpZl9zdG9wOgogwqDCoMKgwqAgYXRoMTBrX2hpZl9zdG9wKGFyKTsK IMKgZXJyX2h0dF9yeF9kZXRhY2g6CkBAIC0yNjczLDYgKzI4MzQsOSBAQCB2b2lkIGF0aDEwa19j b3JlX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEwayAqYXIpCiDCoMKgwqDCoCBhdGgxMGtfY29yZV9m cmVlX2JvYXJkX2ZpbGVzKGFyKTsKCiDCoMKgwqDCoCBhdGgxMGtfZGVidWdfdW5yZWdpc3Rlcihh cik7CisKK8KgwqDCoCBhdGgxMGtfdW5yZWdpc3Rlcl9sZWQoYXIpOworwqDCoMKgIGF0aDEwa191 bnJlZ2lzdGVyX2dwaW9fY2hpcChhcik7CiDCoH0KIMKgRVhQT1JUX1NZTUJPTChhdGgxMGtfY29y ZV91bnJlZ2lzdGVyKTsKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRo MTBrL2NvcmUuaCAKYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2NvcmUuaAppbmRl eCBjNjI0Yjk2ZjhiODQuLmMyODlkZWIwOWNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ly ZWxlc3MvYXRoL2F0aDEway9jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0 aDEway9jb3JlLmgKQEAgLTI1LDYgKzI1LDggQEAKIMKgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgog wqAjaW5jbHVkZSA8bGludXgvdXVpZC5oPgogwqAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CgogwqAjaW5jbHVk ZSAiaHR0LmgiCiDCoCNpbmNsdWRlICJodGMuaCIKQEAgLTgxMiw2ICs4MTQsMTcgQEAgc3RydWN0 IGF0aDEwa19wZXJfcGVlcl90eF9zdGF0cyB7CiDCoMKgwqDCoCB1MzLCoMKgwqAgcmVzZXJ2ZWQy OwogwqB9OwoKK3N0cnVjdCBhdGgxMGtfZ3Bpb2NvbnRyb2wgeworwqDCoMKgIHN0cnVjdCBhdGgx MGsgKmFyOworwqDCoMKgIHUzMiBncGlvX3NldF9udW0sIGdwaW9fbnVtLCBncGlvX2lucHV0LCBn cGlvX3B1bGxfdHlwZSwgCmdwaW9faW50cl9tb2RlLCBncGlvX3NldDsgLyogc2luY2Ugd2UgaGF2 ZSBubyBncGlvIHJlYWQgbWV0aG9kLCB0aGVzZSAKYXJlIHRoZSBzdGF0ZSB2YXJpYWJsZXMgZm9y IGRlYnVnZnMuwqAgKi8KK8KgwqDCoCBzdHJ1Y3QgZ3Bpb19sZWQgd2lmaV9sZWQ7CivCoMKgwqAg c3RydWN0IGdwaW9fY2hpcCBnY2hpcDsKK8KgwqDCoCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7 CivCoMKgwqAgY2hhciBsYWJlbFs0OF07CivCoMKgwqAgdTMyIGdwaW9fc3RhdGVfZGlyOyAvKiBz YW1lIGFzIGZvciBkZWJ1Z2ZzLCBidXQgZm9yIGdwaW9jaGlwIAppbXBsZW1lbnRhdGlvbiAqLwor wqDCoMKgIHUzMiBncGlvX3N0YXRlX3BpbjsKK307CisKIMKgc3RydWN0IGF0aDEwayB7CiDCoMKg wqDCoCBzdHJ1Y3QgYXRoX2NvbW1vbiBhdGhfY29tbW9uOwogwqDCoMKgwqAgc3RydWN0IGllZWU4 MDIxMV9odyAqaHc7CkBAIC04NDAsNiArODUzLDggQEAgc3RydWN0IGF0aDEwayB7CiDCoMKgwqDC oCB1MzIgbG93XzVnaHpfY2hhbjsKIMKgwqDCoMKgIHUzMiBoaWdoXzVnaHpfY2hhbjsKIMKgwqDC oMKgIGJvb2wgYW5pX2VuYWJsZWQ7CivCoMKgwqAgc3RydWN0IGF0aDEwa19ncGlvY29udHJvbCAq Z3BpbzsKK8KgwqDCoCBpbnQgZ3Bpb19hdHRhY2hlZDsKCiDCoMKgwqDCoCBib29sIHAycDsKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2RlYnVnLmMgCmIvZHJp dmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9kZWJ1Zy5jCmluZGV4IDFiOWMwOTJkMjEwZi4u NjI1M2FjZWM3ZWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBr L2RlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9kZWJ1Zy5jCkBA IC0xMDg0LDYgKzEwODQsMTIyIEBAIHN0YXRpYyBzc2l6ZV90IGF0aDEwa193cml0ZV9md19kYmds b2coc3RydWN0IApmaWxlICpmaWxlLAogwqDCoMKgwqAgcmV0dXJuIHJldDsKIMKgfQoKKworc3Rh dGljIHNzaXplX3QgYXRoMTBrX3JlYWRfZ3Bpb19jb25maWcoc3RydWN0IGZpbGUgKmZpbGUsIGNo YXIgX191c2VyIAoqdXNlcl9idWYsCivCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKg wqDCoCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKK8KgwqDCoCBzdHJ1Y3QgYXRoMTBr ICphciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKK8KgwqDCoCBzdHJ1Y3QgYXRoMTBrX2dwaW9jb250 cm9sICpncGlvID0gYXItPmdwaW87CivCoMKgwqAgc2l6ZV90IGxlbjsKK8KgwqDCoCBjaGFyIGJ1 Zls5Nl07CisKK8KgwqDCoCBsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1ICV1 ICV1ICV1XG4iLCBncGlvLT5ncGlvX251bSwgCmdwaW8tPmdwaW9faW5wdXQsIGdwaW8tPmdwaW9f cHVsbF90eXBlLCBncGlvLT5ncGlvX2ludHJfbW9kZSk7CisKK8KgwqDCoCByZXR1cm4gc2ltcGxl X3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CisK Kworc3RhdGljIHNzaXplX3QgYXRoMTBrX3dyaXRlX2dwaW9fY29uZmlnKHN0cnVjdCBmaWxlICpm aWxlLAorwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoMKgwqAgY29uc3QgY2hhciBf X3VzZXIgKnVzZXJfYnVmLAorwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoMKgwqAg c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CivCoMKgwqAgc3RydWN0IGF0aDEwayAqYXIg PSBmaWxlLT5wcml2YXRlX2RhdGE7CivCoMKgwqAgc3RydWN0IGF0aDEwa19ncGlvY29udHJvbCAq Z3BpbyA9IGFyLT5ncGlvOworwqDCoMKgIGludCByZXQ7CivCoMKgwqAgY2hhciBidWZbOTZdOwor wqDCoMKgIHUzMiBncGlvX251bSwgaW5wdXQsIHB1bGxfdHlwZSwgaW50cl9tb2RlOworCivCoMKg wqAgc2ltcGxlX3dyaXRlX3RvX2J1ZmZlcihidWYsIHNpemVvZihidWYpIC0gMSwgcHBvcywgdXNl cl9idWYsIGNvdW50KTsKKworwqDCoMKgIC8qIG1ha2Ugc3VyZSB0aGF0IGJ1ZiBpcyBudWxsIHRl cm1pbmF0ZWQgKi8KK8KgwqDCoCBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7CisKK8KgwqDCoCBn cGlvLT5ncGlvX251bSA9IGdwaW9fbnVtOworwqDCoMKgIGdwaW8tPmdwaW9faW5wdXQgPSBpbnB1 dDsKK8KgwqDCoCBncGlvLT5ncGlvX3B1bGxfdHlwZSA9IHB1bGxfdHlwZTsKK8KgwqDCoCBncGlv LT5ncGlvX2ludHJfbW9kZSA9IGludHJfbW9kZTsKK8KgwqDCoCByZXQgPSBzc2NhbmYoYnVmLCAi JXUgJXUgJXUgJXUiLCAmZ3Bpb19udW0sICZpbnB1dCwgJnB1bGxfdHlwZSwgCiZpbnRyX21vZGUp OworCivCoMKgwqAgaWYgKCFyZXQpCivCoMKgwqAgwqDCoMKgIHJldHVybiAtRUlOVkFMOworCisK K8KgwqDCoCBtdXRleF9sb2NrKCZhci0+Y29uZl9tdXRleCk7CisKKworwqDCoMKgIHJldCA9IGF0 aDEwa193bWlfZ3Bpb19jb25maWcoYXIsIGdwaW9fbnVtLCBpbnB1dCwgcHVsbF90eXBlLCAKaW50 cl9tb2RlKTsKKworwqDCoMKgIGlmIChyZXQpIHsKK8KgwqDCoCDCoMKgwqAgYXRoMTBrX3dhcm4o YXIsICJncGlvX2NvbmZpZyBjZmcgZmFpbGVkIGZyb20gZGVidWdmczogJWRcbiIsIHJldCk7CivC oMKgwqAgwqDCoMKgIGdvdG8gZXhpdDsKK8KgwqDCoCB9CivCoMKgwqAgcmV0ID0gY291bnQ7CisK K2V4aXQ6CivCoMKgwqAgbXV0ZXhfdW5sb2NrKCZhci0+Y29uZl9tdXRleCk7CisKK8KgwqDCoCBy ZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBhdGgxMGtfcmVhZF9ncGlvX291dHB1dChz dHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgCip1c2VyX2J1ZiwKK8KgwqDCoCDCoMKgwqAg wqDCoMKgIMKgwqDCoCDCoMKgwqDCoMKgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorewor wqDCoMKgIHN0cnVjdCBhdGgxMGsgKmFyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworwqDCoMKgIHN0 cnVjdCBhdGgxMGtfZ3Bpb2NvbnRyb2wgKmdwaW8gPSBhci0+Z3BpbzsKKworwqDCoMKgIHNpemVf dCBsZW47CivCoMKgwqAgY2hhciBidWZbOTZdOworCivCoMKgwqAgbGVuID0gc2NucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksICIldSAldVxuIiwgZ3Bpby0+Z3Bpb19udW0sIApncGlvLT5ncGlvX3Nl dCk7CisKK8KgwqDCoCByZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNv dW50LCBwcG9zLCBidWYsIGxlbik7Cit9CisKKworc3RhdGljIHNzaXplX3QgYXRoMTBrX3dyaXRl X2dwaW9fb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLAorwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDC oMKgIMKgwqDCoMKgwqAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorwqDCoMKgIMKgwqDC oCDCoMKgwqAgwqDCoMKgIMKgwqDCoMKgwqAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7 CivCoMKgwqAgc3RydWN0IGF0aDEwayAqYXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CivCoMKgwqAg c3RydWN0IGF0aDEwa19ncGlvY29udHJvbCAqZ3BpbyA9IGFyLT5ncGlvOworCivCoMKgwqAgaW50 IHJldDsKK8KgwqDCoCBjaGFyIGJ1Zls5Nl07CivCoMKgwqAgdTMyIGdwaW9fbnVtLCBzZXQ7CisK K8KgwqDCoCBzaW1wbGVfd3JpdGVfdG9fYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCBwcG9z LCB1c2VyX2J1ZiwgY291bnQpOworCivCoMKgwqAgLyogbWFrZSBzdXJlIHRoYXQgYnVmIGlzIG51 bGwgdGVybWluYXRlZCAqLworwqDCoMKgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKKworwqDC oMKgIGdwaW8tPmdwaW9fc2V0X251bSA9IGdwaW9fbnVtOworwqDCoMKgIGdwaW8tPmdwaW9fc2V0 ID0gc2V0OworwqDCoMKgIHJldCA9IHNzY2FuZihidWYsICIldSAldSIsICZncGlvX251bSwgJnNl dCk7CisKK8KgwqDCoCBpZiAoIXJldCkKK8KgwqDCoCDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7CisK KworwqDCoMKgIG11dGV4X2xvY2soJmFyLT5jb25mX211dGV4KTsKKworCivCoMKgwqAgcmV0ID0g YXRoMTBrX3dtaV9ncGlvX291dHB1dChhciwgZ3Bpb19udW0sIHNldCk7CisKK8KgwqDCoCBpZiAo cmV0KSB7CivCoMKgwqAgwqDCoMKgIGF0aDEwa193YXJuKGFyLCAiZ3Bpb19vdXRwdXQgY2ZnIGZh aWxlZCBmcm9tIGRlYnVnZnM6ICVkXG4iLCByZXQpOworwqDCoMKgIMKgwqDCoCBnb3RvIGV4aXQ7 CivCoMKgwqAgfQorwqDCoMKgIHJldCA9IGNvdW50OworCitleGl0OgorwqDCoMKgIG11dGV4X3Vu bG9jaygmYXItPmNvbmZfbXV0ZXgpOworCivCoMKgwqAgcmV0dXJuIHJldDsKK30KKworCisKKwog wqAvKiBUT0RPOsKgIFdvdWxkIGJlIG5pY2UgdG8gYWx3YXlzIHN1cHBvcnQgZXRodG9vbCBzdGF0 cywgd291bGQgbmVlZCB0bwogwqAgKiBtb3ZlIHRoZSBzdGF0cyBzdG9yYWdlIG91dCBvZiBhdGgx MGtfZGVidWcsIG9yIGFsd2F5cyBoYXZlIGF0aDEwa19kZWJ1ZwogwqAgKiBzdHJ1Y3QgYXZhaWxh YmxlLi4KQEAgLTEyNTIsNiArMTM2OCwyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3Bl cmF0aW9ucyAKZm9wc19md19kYmdsb2cgPSB7CiDCoMKgwqDCoCAubGxzZWVrID0gZGVmYXVsdF9s bHNlZWssCiDCoH07CgorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZv cHNfZ3Bpb19vdXRwdXQgPSB7CivCoMKgwqAgLnJlYWQgPSBhdGgxMGtfcmVhZF9ncGlvX291dHB1 dCwKK8KgwqDCoCAud3JpdGUgPSBhdGgxMGtfd3JpdGVfZ3Bpb19vdXRwdXQsCivCoMKgwqAgLm9w ZW4gPSBzaW1wbGVfb3BlbiwKK8KgwqDCoCAub3duZXIgPSBUSElTX01PRFVMRSwKK8KgwqDCoCAu bGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBmb3BzX2dwaW9fY29uZmlnID0geworwqDCoMKgIC5yZWFkID0gYXRoMTBrX3Jl YWRfZ3Bpb19jb25maWcsCivCoMKgwqAgLndyaXRlID0gYXRoMTBrX3dyaXRlX2dwaW9fY29uZmln LAorwqDCoMKgIC5vcGVuID0gc2ltcGxlX29wZW4sCivCoMKgwqAgLm93bmVyID0gVEhJU19NT0RV TEUsCivCoMKgwqAgLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKwogwqBzdGF0aWMgaW50 IGF0aDEwa19kZWJ1Z19jYWxfZGF0YV9mZXRjaChzdHJ1Y3QgYXRoMTBrICphcikKIMKgewogwqDC oMKgwqAgdTMyIGhpX2FkZHI7CkBAIC0yMjU5LDYgKzIzOTMsMTIgQEAgaW50IGF0aDEwa19kZWJ1 Z19yZWdpc3RlcihzdHJ1Y3QgYXRoMTBrICphcikKIMKgwqDCoMKgIGRlYnVnZnNfY3JlYXRlX2Zp bGUoImZ3X2RiZ2xvZyIsIDA2MDAsIGFyLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgYXIsCiDCoMKgwqDC oCDCoMKgwqAgwqDCoMKgIMKgwqDCoCAmZm9wc19md19kYmdsb2cpOwoKK8KgwqDCoCBkZWJ1Z2Zz X2NyZWF0ZV9maWxlKCJncGlvX291dHB1dCIsIDA2MDAsIGFyLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwg YXIsCivCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgJmZvcHNfZ3Bpb19vdXRwdXQpOworCivC oMKgwqAgZGVidWdmc19jcmVhdGVfZmlsZSgiZ3Bpb19jb25maWciLCAwNjAwLCBhci0+ZGVidWcu ZGVidWdmc19waHksIGFyLAorwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgICZmb3BzX2dwaW9f Y29uZmlnKTsKKwogwqDCoMKgwqAgZGVidWdmc19jcmVhdGVfZmlsZSgiY2FsX2RhdGEiLCAwNDAw LCBhci0+ZGVidWcuZGVidWdmc19waHksIGFyLAogwqDCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKg wqAgJmZvcHNfY2FsX2RhdGEpOwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0 aC9hdGgxMGsvaHcuaCAKYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h3LmgKaW5k ZXggNDEzYjFiNDMyMWY3Li43Yjc0M2YzYjIwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL2F0aC9hdGgxMGsvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRo MTBrL2h3LmgKQEAgLTQ5NSw2ICs0OTUsNyBAQCBzdHJ1Y3QgYXRoMTBrX2h3X3BhcmFtcyB7CiDC oMKgwqDCoCBjb25zdCBjaGFyICpuYW1lOwogwqDCoMKgwqAgdTMyIHBhdGNoX2xvYWRfYWRkcjsK IMKgwqDCoMKgIGludCB1YXJ0X3BpbjsKK8KgwqDCoCBpbnQgbGVkX3BpbjsgLy8gMSBmb3IgcGVy ZWdyaW5lLCAxNyBmb3IgYmVlbGluZXIsIDU4IGZvciBpcHE0MDE5CiDCoMKgwqDCoCB1MzIgb3Rw X2V4ZV9wYXJhbTsKCiDCoMKgwqDCoCAvKiBUeXBlIG9mIGh3IGN5Y2xlIGNvdW50ZXIgd3JhcGFy b3VuZCBsb2dpYywgZm9yIG1vcmUgaW5mbwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxl c3MvYXRoL2F0aDEway93bWktb3BzLmggCmIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEw ay93bWktb3BzLmgKaW5kZXggMTQwOTNjZmRjNTA1Li5hMzhkNmE4ZjdlYzUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLW9wcy5oCisrKyBiL2RyaXZlcnMv bmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLW9wcy5oCkBAIC0xOTcsOCArMTk3LDEzIEBAIHN0 cnVjdCB3bWlfb3BzIHsKIMKgwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoCAoc3Ry dWN0IGF0aDEwayAqYXIsCiDCoMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqBl bnVtIHdtaV9ic3Nfc3VydmV5X3JlcV90eXBlIHR5cGUpOwogwqDCoMKgwqAgc3RydWN0IHNrX2J1 ZmYgKigqZ2VuX2VjaG8pKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmFsdWUpOworCivCoMKgwqAg c3RydWN0IHNrX2J1ZmYgKigqZ2VuX2dwaW9fY29uZmlnKShzdHJ1Y3QgYXRoMTBrICphciwgdTMy IGdwaW9fbnVtLCAKdTMyIGlucHV0LCB1MzIgcHVsbF90eXBlLCB1MzIgaW50cl9tb2RlKTsKKwor wqDCoMKgIHN0cnVjdCBza19idWZmICooKmdlbl9ncGlvX291dHB1dCkoc3RydWN0IGF0aDEwayAq YXIsIHUzMiBncGlvX251bSwgCnUzMiBzZXQpOwogwqB9OwoKKwogwqBpbnQgYXRoMTBrX3dtaV9j bWRfc2VuZChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIApjbWRf aWQpOwoKIMKgc3RhdGljIGlubGluZSBpbnQKQEAgLTk1Nyw2ICs5NjIsMzUgQEAgYXRoMTBrX3dt aV9mb3JjZV9md19oYW5nKHN0cnVjdCBhdGgxMGsgKmFyLAoKIMKgwqDCoMKgIHJldHVybiBhdGgx MGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGFyLT53bWkuY21kLT5mb3JjZV9md19oYW5nX2NtZGlk KTsKIMKgfQorc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfZ3Bpb19jb25maWcoc3RydWN0 IGF0aDEwayAqYXIsIHUzMiBncGlvX251bSwgdTMyIGlucHV0LCB1MzIgCnB1bGxfdHlwZSwgdTMy IGludHJfbW9kZSkKK3sKK8KgwqDCoCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCivCoMKgwqAgaWYg KCFhci0+d21pLm9wcy0+Z2VuX2dwaW9fY29uZmlnKQorwqDCoMKgIMKgwqDCoCByZXR1cm4gLUVP UE5PVFNVUFA7CisKK8KgwqDCoCBza2IgPSBhci0+d21pLm9wcy0+Z2VuX2dwaW9fY29uZmlnKGFy LCBncGlvX251bSwgaW5wdXQsIHB1bGxfdHlwZSwgCmludHJfbW9kZSk7CivCoMKgwqAgaWYgKElT X0VSUihza2IpKQorwqDCoMKgIMKgwqDCoCByZXR1cm4gUFRSX0VSUihza2IpOworCivCoMKgwqAg cmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmRfbm93YWl0KGFyLCBza2IsIAphci0+d21pLmNtZC0+ Z3Bpb19jb25maWdfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9n cGlvX291dHB1dChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIGdwaW9fbnVtLCB1MzIgc2V0KQorewor wqDCoMKgIHN0cnVjdCBza19idWZmICpza2I7CisKK8KgwqDCoCBpZiAoIWFyLT53bWkub3BzLT5n ZW5fZ3Bpb19jb25maWcpCivCoMKgwqAgwqDCoMKgIHJldHVybiAtRU9QTk9UU1VQUDsKKworwqDC oMKgIHNrYiA9IGFyLT53bWkub3BzLT5nZW5fZ3Bpb19vdXRwdXQoYXIsIGdwaW9fbnVtLCBzZXQp OworwqDCoMKgIGlmIChJU19FUlIoc2tiKSkKK8KgwqDCoCDCoMKgwqAgcmV0dXJuIFBUUl9FUlIo c2tiKTsKKworwqDCoMKgIHJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kX25vd2FpdChhciwgc2ti LCAKYXItPndtaS5jbWQtPmdwaW9fb3V0cHV0X2NtZGlkKTsKK30KCiDCoHN0YXRpYyBpbmxpbmUg aW50CiDCoGF0aDEwa193bWlfZGJnbG9nX2NmZyhzdHJ1Y3QgYXRoMTBrICphciwgdTY0IG1vZHVs ZV9lbmFibGUsIHUzMiBsb2dfbGV2ZWwpCkBAIC0xMDM0LDcgKzEwNjgsNyBAQCBhdGgxMGtfd21p X3BkZXZfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBhdGgxMGsgKmFyKQogwqDCoMKgwqAgaWYgKElT X0VSUihza2IpKQogwqDCoMKgwqAgwqDCoMKgIHJldHVybiBQVFJfRVJSKHNrYik7CgotwqDCoMKg IHJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsCivCoMKgwqAgcmV0dXJuIGF0aDEw a193bWlfY21kX3NlbmRfbm93YWl0KGFyLCBza2IsCiDCoMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKg wqDCoCDCoMKgIGFyLT53bWkuY21kLT5wZGV2X2dldF90ZW1wZXJhdHVyZV9jbWRpZCk7CiDCoH0K CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS5jIApiL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmMKaW5kZXggNThkYzIxODliYTQ5Li4y MzY3ZGNjMTFiNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsv d21pLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuYwpAQCAtNjY0 Niw2ICs2NjQ2LDM4IEBAIGF0aDEwa193bWlfb3BfZ2VuX3BlZXJfc2V0X3BhcmFtKHN0cnVjdCBh dGgxMGsgCiphciwgdTMyIHZkZXZfaWQsCiDCoMKgwqDCoCByZXR1cm4gc2tiOwogwqB9Cgorc3Rh dGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX2dwaW9fY29uZmlnKHN0cnVj dCBhdGgxMGsgKmFyLCB1MzIgZ3Bpb19udW0sIHUzMiAKaW5wdXQsIHUzMiBwdWxsX3R5cGUsIHUz MiBpbnRyX21vZGUpCit7CivCoMKgwqAgc3RydWN0IHdtaV9ncGlvX2NvbmZpZ19jbWQgKmNtZDsK K8KgwqDCoCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCivCoMKgwqAgc2tiID0gYXRoMTBrX3dtaV9h bGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CivCoMKgwqAgaWYgKCFza2IpCivCoMKgwqAgcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7CivCoMKgwqAgY21kID0gKHN0cnVjdCB3bWlfZ3Bpb19jb25m aWdfY21kICopc2tiLT5kYXRhOworwqDCoMKgIGNtZC0+cHVsbF90eXBlID0gX19jcHVfdG9fbGUz MihwdWxsX3R5cGUpOworwqDCoMKgIGNtZC0+Z3Bpb19udW0gPSBfX2NwdV90b19sZTMyKGdwaW9f bnVtKTsKK8KgwqDCoCBjbWQtPmlucHV0ID0gX19jcHVfdG9fbGUzMihpbnB1dCk7CivCoMKgwqAg Y21kLT5pbnRyX21vZGUgPSBfX2NwdV90b19sZTMyKGludHJfbW9kZSk7CivCoMKgwqAgcmV0dXJu IHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX2dw aW9fb3V0cHV0KHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgZ3Bpb19udW0sIHUzMiBzZXQpCit7CivC oMKgwqAgc3RydWN0IHdtaV9ncGlvX291dHB1dF9jbWQgKmNtZDsKK8KgwqDCoCBzdHJ1Y3Qgc2tf YnVmZiAqc2tiOworCivCoMKgwqAgc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVv ZigqY21kKSk7CivCoMKgwqAgaWYgKCFza2IpCivCoMKgwqAgcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CivCoMKgwqAgY21kID0gKHN0cnVjdCB3bWlfZ3Bpb19vdXRwdXRfY21kICopc2tiLT5kYXRh OworwqDCoMKgIGNtZC0+Z3Bpb19udW0gPSBfX2NwdV90b19sZTMyKGdwaW9fbnVtKTsKK8KgwqDC oCBjbWQtPnNldCA9IF9fY3B1X3RvX2xlMzIoc2V0KTsKK8KgwqDCoCByZXR1cm4gc2tiOworfQor CiDCoHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCiDCoGF0aDEwa193bWlfb3BfZ2VuX3NldF9wc21v ZGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAogwqDCoMKgwqAgwqDCoMKgIMKgwqDC oCDCoMKgwqDCoCBlbnVtIHdtaV9zdGFfcHNfbW9kZSBwc21vZGUpCkBAIC04MTUzLDYgKzgxODUs OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHdtaV9vcHMgd21pX29wcyA9IHsKIMKgwqDCoMKgIC5m d19zdGF0c19maWxsID0gYXRoMTBrX3dtaV9tYWluX29wX2Z3X3N0YXRzX2ZpbGwsCiDCoMKgwqDC oCAuZ2V0X3ZkZXZfc3VidHlwZSA9IGF0aDEwa193bWlfb3BfZ2V0X3ZkZXZfc3VidHlwZSwKIMKg wqDCoMKgIC5nZW5fZWNobyA9IGF0aDEwa193bWlfb3BfZ2VuX2VjaG8sCivCoMKgwqAgLmdlbl9n cGlvX2NvbmZpZyA9IGF0aDEwa193bWlfb3BfZ2VuX2dwaW9fY29uZmlnLAorwqDCoMKgIC5nZW5f Z3Bpb19vdXRwdXQgPSBhdGgxMGtfd21pX29wX2dlbl9ncGlvX291dHB1dCwKKwogwqDCoMKgwqAg LyogLmdlbl9iY25fdG1wbCBub3QgaW1wbGVtZW50ZWQgKi8KIMKgwqDCoMKgIC8qIC5nZW5fcHJi X3RtcGwgbm90IGltcGxlbWVudGVkICovCiDCoMKgwqDCoCAvKiAuZ2VuX3AycF9nb19iY25faWUg bm90IGltcGxlbWVudGVkICovCkBAIC04MjIzLDYgKzgyNTgsOCBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IHdtaV9vcHMgd21pXzEwXzFfb3BzID0gewogwqDCoMKgwqAgLmZ3X3N0YXRzX2ZpbGwgPSBh dGgxMGtfd21pXzEweF9vcF9md19zdGF0c19maWxsLAogwqDCoMKgwqAgLmdldF92ZGV2X3N1YnR5 cGUgPSBhdGgxMGtfd21pX29wX2dldF92ZGV2X3N1YnR5cGUsCiDCoMKgwqDCoCAuZ2VuX2VjaG8g PSBhdGgxMGtfd21pX29wX2dlbl9lY2hvLAorwqDCoMKgIC5nZW5fZ3Bpb19jb25maWcgPSBhdGgx MGtfd21pX29wX2dlbl9ncGlvX2NvbmZpZywKK8KgwqDCoCAuZ2VuX2dwaW9fb3V0cHV0ID0gYXRo MTBrX3dtaV9vcF9nZW5fZ3Bpb19vdXRwdXQsCiDCoMKgwqDCoCAvKiAuZ2VuX2Jjbl90bXBsIG5v dCBpbXBsZW1lbnRlZCAqLwogwqDCoMKgwqAgLyogLmdlbl9wcmJfdG1wbCBub3QgaW1wbGVtZW50 ZWQgKi8KIMKgwqDCoMKgIC8qIC5nZW5fcDJwX2dvX2Jjbl9pZSBub3QgaW1wbGVtZW50ZWQgKi8K QEAgLTgyOTQsNiArODMzMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd21pX29wcyB3bWlfMTBf Ml9vcHMgPSB7CiDCoMKgwqDCoCAuZ2VuX2RlbGJhX3NlbmQgPSBhdGgxMGtfd21pX29wX2dlbl9k ZWxiYV9zZW5kLAogwqDCoMKgwqAgLmZ3X3N0YXRzX2ZpbGwgPSBhdGgxMGtfd21pXzEweF9vcF9m d19zdGF0c19maWxsLAogwqDCoMKgwqAgLmdldF92ZGV2X3N1YnR5cGUgPSBhdGgxMGtfd21pX29w X2dldF92ZGV2X3N1YnR5cGUsCivCoMKgwqAgLmdlbl9ncGlvX2NvbmZpZyA9IGF0aDEwa193bWlf b3BfZ2VuX2dwaW9fY29uZmlnLAorwqDCoMKgIC5nZW5fZ3Bpb19vdXRwdXQgPSBhdGgxMGtfd21p X29wX2dlbl9ncGlvX291dHB1dCwKIMKgwqDCoMKgIC8qIC5nZW5fcGRldl9lbmFibGVfYWRhcHRp dmVfY2NhIG5vdCBpbXBsZW1lbnRlZCAqLwogwqB9OwoKQEAgLTgzNjQsNiArODQwMyw4IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3Qgd21pX29wcyB3bWlfMTBfMl80X29wcyA9IHsKIMKgwqDCoMKgIC5n ZW5fcGRldl9lbmFibGVfYWRhcHRpdmVfY2NhID0KIMKgwqDCoMKgIMKgwqDCoCBhdGgxMGtfd21p X29wX2dlbl9wZGV2X2VuYWJsZV9hZGFwdGl2ZV9jY2EsCiDCoMKgwqDCoCAuZ2V0X3ZkZXZfc3Vi dHlwZSA9IGF0aDEwa193bWlfMTBfMl80X29wX2dldF92ZGV2X3N1YnR5cGUsCivCoMKgwqAgLmdl bl9ncGlvX2NvbmZpZyA9IGF0aDEwa193bWlfb3BfZ2VuX2dwaW9fY29uZmlnLAorwqDCoMKgIC5n ZW5fZ3Bpb19vdXRwdXQgPSBhdGgxMGtfd21pX29wX2dlbl9ncGlvX291dHB1dCwKIMKgwqDCoMKg IC8qIC5nZW5fYmNuX3RtcGwgbm90IGltcGxlbWVudGVkICovCiDCoMKgwqDCoCAvKiAuZ2VuX3By Yl90bXBsIG5vdCBpbXBsZW1lbnRlZCAqLwogwqDCoMKgwqAgLyogLmdlbl9wMnBfZ29fYmNuX2ll IG5vdCBpbXBsZW1lbnRlZCAqLwpAQCAtODQzOSw2ICs4NDgwLDggQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCB3bWlfb3BzIHdtaV8xMF80X29wcyA9IHsKIMKgwqDCoMKgIC5nZW5fcGRldl9ic3NfY2hh bl9pbmZvX3JlcSA9IAphdGgxMGtfd21pXzEwXzJfb3BfZ2VuX3BkZXZfYnNzX2NoYW5faW5mbywK IMKgwqDCoMKgIC5nZW5fZWNobyA9IGF0aDEwa193bWlfb3BfZ2VuX2VjaG8sCiDCoMKgwqDCoCAu Z2VuX3BkZXZfZ2V0X3RwY19jb25maWcgPSAKYXRoMTBrX3dtaV8xMF8yXzRfb3BfZ2VuX3BkZXZf Z2V0X3RwY19jb25maWcsCivCoMKgwqAgLmdlbl9ncGlvX2NvbmZpZyA9IGF0aDEwa193bWlfb3Bf Z2VuX2dwaW9fY29uZmlnLAorwqDCoMKgIC5nZW5fZ3Bpb19vdXRwdXQgPSBhdGgxMGtfd21pX29w X2dlbl9ncGlvX291dHB1dCwKIMKgfTsKCiDCoGludCBhdGgxMGtfd21pX2F0dGFjaChzdHJ1Y3Qg YXRoMTBrICphcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsv d21pLmggCmIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuaAppbmRleCBjN2Iz MGVkOTAxNWQuLmRjMTgwYTg2ZGMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mv YXRoL2F0aDEway93bWkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dt aS5oCkBAIC0yOTA2LDYgKzI5MDYsNDIgQEAgZW51bSB3bWlfMTBfNF9mZWF0dXJlX21hc2sgewoK IMKgfTsKCisvKiBXTUlfR1BJT19DT05GSUdfQ01ESUQgKi8KK2VudW0geworwqDCoMKgIFdNSV9H UElPX1BVTExfTk9ORSwKK8KgwqDCoCBXTUlfR1BJT19QVUxMX1VQLAorwqDCoMKgIFdNSV9HUElP X1BVTExfRE9XTiwKK307CisKK2VudW0geworwqDCoMKgIFdNSV9HUElPX0lOVFRZUEVfRElTQUJM RSwKK8KgwqDCoCBXTUlfR1BJT19JTlRUWVBFX1JJU0lOR19FREdFLAorwqDCoMKgIFdNSV9HUElP X0lOVFRZUEVfRkFMTElOR19FREdFLAorwqDCoMKgIFdNSV9HUElPX0lOVFRZUEVfQk9USF9FREdF LAorwqDCoMKgIFdNSV9HUElPX0lOVFRZUEVfTEVWRUxfTE9XLAorwqDCoMKgIFdNSV9HUElPX0lO VFRZUEVfTEVWRUxfSElHSAorfTsKKworLyogV01JX0dQSU9fQ09ORklHX0NNRElEICovCitzdHJ1 Y3Qgd21pX2dwaW9fY29uZmlnX2NtZCB7CivCoMKgwqAgX19sZTMyIGdwaW9fbnVtO8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAvKiBHUElPIG51bWJlciB0byBiZSBzZXR1cCAqLworwqDCoMKgIF9f bGUzMiBpbnB1dDvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogMCAtIE91dHB1dC8g MSAtIElucHV0ICovCivCoMKgwqAgX19sZTMyIHB1bGxfdHlwZTvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC8qIFB1bGwgdHlwZSBkZWZpbmVkIGFib3ZlICovCivCoMKgwqAgX19sZTMyIGludHJfbW9k ZTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIEludGVycnVwdCBtb2RlIGRlZmluZWQgYWJvdmUg KElucHV0KSAqLworfSBfX3BhY2tlZDsKKworLyogV01JX0dQSU9fT1VUUFVUX0NNRElEICovCitz dHJ1Y3Qgd21pX2dwaW9fb3V0cHV0X2NtZCB7CivCoMKgwqAgX19sZTMyIGdwaW9fbnVtO8KgwqDC oCAvKiBHUElPIG51bWJlciB0byBiZSBzZXR1cCAqLworwqDCoMKgIF9fbGUzMiBzZXQ7wqDCoMKg wqDCoMKgwqDCoCAvKiBTZXQgdGhlIEdQSU8gcGluKi8KK30gX19wYWNrZWQ7CisKKy8qIFdNSV9H UElPX0lOUFVUX0VWRU5USUQgKi8KK3N0cnVjdCB3bWlfZ3Bpb19pbnB1dF9ldmVudCB7CivCoMKg wqAgX19sZTMyIGdwaW9fbnVtO8KgwqDCoCAvKiBHUElPIG51bWJlciB3aGljaCBjaGFuZ2VkIHN0 YXRlICovCit9IF9fcGFja2VkOworCisKIMKgc3RydWN0IHdtaV9leHRfcmVzb3VyY2VfY29uZmln XzEwXzRfY21kIHsKIMKgwqDCoMKgIC8qIGNvbnRhaW5zIGVudW0gd21pX2hvc3RfcGxhdGZvcm1f dHlwZSAqLwogwqDCoMKgwqAgX19sZTMyIGhvc3RfcGxhdGZvcm1fY29uZmlnOwoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYXRoMTBrIG1haWxpbmcgbGlz dAphdGgxMGtAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2F0aDEwawo=