Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1765470AbXHWRmX (ORCPT ); Thu, 23 Aug 2007 13:42:23 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1758445AbXHWRmK (ORCPT ); Thu, 23 Aug 2007 13:42:10 -0400 Received: from viefep18-int.chello.at ([213.46.255.22]:6349 "EHLO viefep14-int.chello.at" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1758743AbXHWRmG (ORCPT ); Thu, 23 Aug 2007 13:42:06 -0400 Subject: RE: [PATCH 00/23] per device dirty throttling -v9 From: Peter Zijlstra To: spamtrap@knobisoft.de Cc: linux-kernel@vger.kernel.org In-Reply-To: <137637.20782.qm@web32614.mail.mud.yahoo.com> References: <137637.20782.qm@web32614.mail.mud.yahoo.com> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-HT1+pPlPpvQvV4W+cIiB" Date: Thu, 23 Aug 2007 19:41:59 +0200 Message-Id: <1187890919.6114.411.camel@twins> Mime-Version: 1.0 X-Mailer: Evolution 2.10.1 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 96465 Lines: 1293 --=-HT1+pPlPpvQvV4W+cIiB Content-Type: multipart/mixed; boundary="=-SZ/QRSavFo1Z4isrVmnh" --=-SZ/QRSavFo1Z4isrVmnh Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On Thu, 2007-08-23 at 08:59 -0700, Martin Knoblauch wrote: > --- Peter Zijlstra wrote: >=20 > > On Thu, 2007-08-16 at 05:49 -0700, Martin Knoblauch wrote: > >=20 > > > Peter, > > >=20 > > > any chance to get a rollup against 2.6.22-stable? > > >=20 > > > The 2.6.23 series may not be usable for me due to the > > > nosharedcache changes for NFS (the new default will massively > > > disturb the user-space automounter). > >=20 > > I'll see what I can do, bit busy with other stuff atm, hopefully > > after > > the weekend. > >=20 > Hi Peter, >=20 > any progress on a version against 2.6.22.5? I have seen the very > positive report from Jeffrey W. Baker and would really love to test > your patch. But as I said, anything newer than 2.6.22.x might not be an > option due to the NFS changes. mindless port, seems to compile and boot on my test box ymmv. I think .5 should not present anything other than trivial rejects if anything. But I'm not keeping -stable in my git remotes so I can't say for sure. --=-SZ/QRSavFo1Z4isrVmnh Content-Disposition: attachment; filename=bdi-rollup-v9-v2.6.22.patch Content-Type: text/x-patch; name=bdi-rollup-v9-v2.6.22.patch; charset=utf-8 Content-Transfer-Encoding: base64 SW5kZXg6IGxpbnV4LTIuNi9mcy9uZnMvd3JpdGUuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxpbnV4LTIu Ni5vcmlnL2ZzL25mcy93cml0ZS5jDQorKysgbGludXgtMi42L2ZzL25mcy93cml0ZS5jDQpAQCAt MjM3LDEwICsyMzcsOCBAQCBzdGF0aWMgdm9pZCBuZnNfZW5kX3BhZ2Vfd3JpdGViYWNrKHN0cnVj DQogCXN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gTkZTX1NFUlZFUihpbm9kZSk7DQogDQogCWVu ZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsNCi0JaWYgKGF0b21pY19sb25nX2RlY19yZXR1cm4oJm5m c3MtPndyaXRlYmFjaykgPCBORlNfQ09OR0VTVElPTl9PRkZfVEhSRVNIKSB7DQorCWlmIChhdG9t aWNfbG9uZ19kZWNfcmV0dXJuKCZuZnNzLT53cml0ZWJhY2spIDwgTkZTX0NPTkdFU1RJT05fT0ZG X1RIUkVTSCkNCiAJCWNsZWFyX2JkaV9jb25nZXN0ZWQoJm5mc3MtPmJhY2tpbmdfZGV2X2luZm8s IFdSSVRFKTsNCi0JCWNvbmdlc3Rpb25fZW5kKFdSSVRFKTsNCi0JfQ0KIH0NCiANCiAvKg0KQEAg LTQ2Niw2ICs0NjQsNyBAQCBuZnNfbWFya19yZXF1ZXN0X2NvbW1pdChzdHJ1Y3QgbmZzX3BhZ2Ug DQogCXNldF9iaXQoUEdfTkVFRF9DT01NSVQsICYocmVxKS0+d2JfZmxhZ3MpOw0KIAlzcGluX3Vu bG9jaygmbmZzaS0+cmVxX2xvY2spOw0KIAlpbmNfem9uZV9wYWdlX3N0YXRlKHJlcS0+d2JfcGFn ZSwgTlJfVU5TVEFCTEVfTkZTKTsNCisJaW5jX2JkaV9zdGF0KHJlcS0+d2JfcGFnZS0+bWFwcGlu Zy0+YmFja2luZ19kZXZfaW5mbywgQkRJX1JFQ0xBSU1BQkxFKTsNCiAJX19tYXJrX2lub2RlX2Rp cnR5KGlub2RlLCBJX0RJUlRZX0RBVEFTWU5DKTsNCiB9DQogDQpAQCAtNTUyLDYgKzU1MSw4IEBA IHN0YXRpYyB2b2lkIG5mc19jYW5jZWxfY29tbWl0X2xpc3Qoc3RydWMNCiAJd2hpbGUoIWxpc3Rf ZW1wdHkoaGVhZCkpIHsNCiAJCXJlcSA9IG5mc19saXN0X2VudHJ5KGhlYWQtPm5leHQpOw0KIAkJ ZGVjX3pvbmVfcGFnZV9zdGF0ZShyZXEtPndiX3BhZ2UsIE5SX1VOU1RBQkxFX05GUyk7DQorCQlk ZWNfYmRpX3N0YXQocmVxLT53Yl9wYWdlLT5tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLA0KKwkJ CQlCRElfUkVDTEFJTUFCTEUpOw0KIAkJbmZzX2xpc3RfcmVtb3ZlX3JlcXVlc3QocmVxKTsNCiAJ CWNsZWFyX2JpdChQR19ORUVEX0NPTU1JVCwgJihyZXEpLT53Yl9mbGFncyk7DQogCQluZnNfaW5v ZGVfcmVtb3ZlX3JlcXVlc3QocmVxKTsNCkBAIC0xMjA3LDYgKzEyMDgsOCBAQCBuZnNfY29tbWl0 X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RyDQogCQluZnNfbGlzdF9yZW1vdmVfcmVxdWVz dChyZXEpOw0KIAkJbmZzX21hcmtfcmVxdWVzdF9jb21taXQocmVxKTsNCiAJCWRlY196b25lX3Bh Z2Vfc3RhdGUocmVxLT53Yl9wYWdlLCBOUl9VTlNUQUJMRV9ORlMpOw0KKwkJZGVjX2JkaV9zdGF0 KHJlcS0+d2JfcGFnZS0+bWFwcGluZy0+YmFja2luZ19kZXZfaW5mbywNCisJCQkJQkRJX1JFQ0xB SU1BQkxFKTsNCiAJCW5mc19jbGVhcl9wYWdlX3dyaXRlYmFjayhyZXEpOw0KIAl9DQogCXJldHVy biAtRU5PTUVNOw0KQEAgLTEyMzIsNiArMTIzNSw4IEBAIHN0YXRpYyB2b2lkIG5mc19jb21taXRf ZG9uZShzdHJ1Y3QgcnBjX3QNCiAJCW5mc19saXN0X3JlbW92ZV9yZXF1ZXN0KHJlcSk7DQogCQlj bGVhcl9iaXQoUEdfTkVFRF9DT01NSVQsICYocmVxKS0+d2JfZmxhZ3MpOw0KIAkJZGVjX3pvbmVf cGFnZV9zdGF0ZShyZXEtPndiX3BhZ2UsIE5SX1VOU1RBQkxFX05GUyk7DQorCQlkZWNfYmRpX3N0 YXQocmVxLT53Yl9wYWdlLT5tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLA0KKwkJCQlCRElfUkVD TEFJTUFCTEUpOw0KIA0KIAkJZHByaW50aygiTkZTOiBjb21taXQgKCVzLyVMZCAlZEAlTGQpIiwN CiAJCQlyZXEtPndiX2NvbnRleHQtPmRlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19pZCwNCkluZGV4 OiBsaW51eC0yLjYvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g bGludXgtMi42Lm9yaWcvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oDQorKysgbGludXgtMi42 L2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaA0KQEAgLTgsNiArOCw5IEBADQogI2lmbmRlZiBf TElOVVhfQkFDS0lOR19ERVZfSA0KICNkZWZpbmUgX0xJTlVYX0JBQ0tJTkdfREVWX0gNCiANCisj aW5jbHVkZSA8bGludXgvcGVyY3B1X2NvdW50ZXIuaD4NCisjaW5jbHVkZSA8bGludXgvbG9nMi5o Pg0KKyNpbmNsdWRlIDxsaW51eC9wcm9wb3J0aW9ucy5oPg0KICNpbmNsdWRlIDxhc20vYXRvbWlj Lmg+DQogDQogc3RydWN0IHBhZ2U7DQpAQCAtMjQsNiArMjcsMTQgQEAgZW51bSBiZGlfc3RhdGUg ew0KIA0KIHR5cGVkZWYgaW50IChjb25nZXN0ZWRfZm4pKHZvaWQgKiwgaW50KTsNCiANCitlbnVt IGJkaV9zdGF0X2l0ZW0gew0KKwlCRElfUkVDTEFJTUFCTEUsDQorCUJESV9XUklURUJBQ0ssDQor CU5SX0JESV9TVEFUX0lURU1TDQorfTsNCisNCisjZGVmaW5lIEJESV9TVEFUX0JBVENIICg4Kigx K2lsb2cyKG5yX2NwdV9pZHMpKSkNCisNCiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyB7DQogCXVu c2lnbmVkIGxvbmcgcmFfcGFnZXM7CS8qIG1heCByZWFkYWhlYWQgaW4gUEFHRV9DQUNIRV9TSVpF IHVuaXRzICovDQogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CS8qIEFsd2F5cyB1c2UgYXRvbWljIGJp dG9wcyBvbiB0aGlzICovDQpAQCAtMzIsOCArNDMsOTAgQEAgc3RydWN0IGJhY2tpbmdfZGV2X2lu Zm8gew0KIAl2b2lkICpjb25nZXN0ZWRfZGF0YTsJLyogUG9pbnRlciB0byBhdXggZGF0YSBmb3Ig Y29uZ2VzdGVkIGZ1bmMgKi8NCiAJdm9pZCAoKnVucGx1Z19pb19mbikoc3RydWN0IGJhY2tpbmdf ZGV2X2luZm8gKiwgc3RydWN0IHBhZ2UgKik7DQogCXZvaWQgKnVucGx1Z19pb19kYXRhOw0KKw0K KwlzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgYmRpX3N0YXRbTlJfQkRJX1NUQVRfSVRFTVNdOw0KKw0K KwlzdHJ1Y3QgcHJvcF9sb2NhbF9wZXJjcHUgY29tcGxldGlvbnM7DQorCWludCBkaXJ0eV9leGNl ZWRlZDsNCiB9Ow0KIA0KK2ludCBiZGlfaW5pdChzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRp KTsNCit2b2lkIGJkaV9kZXN0cm95KHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpOw0KKw0K K3N0YXRpYyBpbmxpbmUgdm9pZCBfX21vZF9iZGlfc3RhdChzdHJ1Y3QgYmFja2luZ19kZXZfaW5m byAqYmRpLA0KKwkJZW51bSBiZGlfc3RhdF9pdGVtIGl0ZW0sIHM2NCBhbW91bnQpDQorew0KKwlf X3BlcmNwdV9jb3VudGVyX2FkZCgmYmRpLT5iZGlfc3RhdFtpdGVtXSwgYW1vdW50LCBCRElfU1RB VF9CQVRDSCk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luY19iZGlfc3RhdChzdHJ1 Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLA0KKwkJZW51bSBiZGlfc3RhdF9pdGVtIGl0ZW0pDQor ew0KKwlfX21vZF9iZGlfc3RhdChiZGksIGl0ZW0sIDEpOw0KK30NCisNCitzdGF0aWMgaW5saW5l IHZvaWQgaW5jX2JkaV9zdGF0KHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksDQorCQllbnVt IGJkaV9zdGF0X2l0ZW0gaXRlbSkNCit7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCWxv Y2FsX2lycV9zYXZlKGZsYWdzKTsNCisJX19pbmNfYmRpX3N0YXQoYmRpLCBpdGVtKTsNCisJbG9j YWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZWNf YmRpX3N0YXQoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwNCisJCWVudW0gYmRpX3N0YXRf aXRlbSBpdGVtKQ0KK3sNCisJX19tb2RfYmRpX3N0YXQoYmRpLCBpdGVtLCAtMSk7DQorfQ0KKw0K K3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNfYmRpX3N0YXQoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8g KmJkaSwNCisJCWVudW0gYmRpX3N0YXRfaXRlbSBpdGVtKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBm bGFnczsNCisNCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOw0KKwlfX2RlY19iZGlfc3RhdChiZGks IGl0ZW0pOw0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7DQorfQ0KKw0KK3N0YXRpYyBpbmxp bmUgczY0IGJkaV9zdGF0KHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksDQorCQllbnVtIGJk aV9zdGF0X2l0ZW0gaXRlbSkNCit7DQorCXJldHVybiBwZXJjcHVfY291bnRlcl9yZWFkX3Bvc2l0 aXZlKCZiZGktPmJkaV9zdGF0W2l0ZW1dKTsNCit9DQorDQorc3RhdGljIGlubGluZSBzNjQgX19i ZGlfc3RhdF9zdW0oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwNCisJCWVudW0gYmRpX3N0 YXRfaXRlbSBpdGVtKQ0KK3sNCisJcmV0dXJuIHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgm YmRpLT5iZGlfc3RhdFtpdGVtXSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgczY0IGJkaV9zdGF0 X3N1bShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLA0KKwkJZW51bSBiZGlfc3RhdF9pdGVt IGl0ZW0pDQorew0KKwlzNjQgc3VtOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKw0KKwlsb2Nh bF9pcnFfc2F2ZShmbGFncyk7DQorCXN1bSA9IF9fYmRpX3N0YXRfc3VtKGJkaSwgaXRlbSk7DQor CWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsNCisNCisJcmV0dXJuIHN1bTsNCit9DQorDQorLyoN CisgKiBtYXhpbWFsIGVycm9yIG9mIGEgc3RhdCBjb3VudGVyLg0KKyAqLw0KK3N0YXRpYyBpbmxp bmUgdW5zaWduZWQgbG9uZyBiZGlfc3RhdF9lcnJvcihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAq YmRpKQ0KK3sNCisjaWZkZWYgQ09ORklHX1NNUA0KKwlyZXR1cm4gbnJfY3B1X2lkcyAqIEJESV9T VEFUX0JBVENIOw0KKyNlbHNlDQorCXJldHVybiAxOw0KKyNlbmRpZg0KK30NCiANCiAvKg0KICAq IEZsYWdzIGluIGJhY2tpbmdfZGV2X2luZm86OmNhcGFiaWxpdHkNCkBAIC05NCw3ICsxODcsNiBA QCB2b2lkIGNsZWFyX2JkaV9jb25nZXN0ZWQoc3RydWN0IGJhY2tpbmdfDQogdm9pZCBzZXRfYmRp X2Nvbmdlc3RlZChzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBpbnQgcncpOw0KIGxvbmcg Y29uZ2VzdGlvbl93YWl0KGludCBydywgbG9uZyB0aW1lb3V0KTsNCiBsb25nIGNvbmdlc3Rpb25f d2FpdF9pbnRlcnJ1cHRpYmxlKGludCBydywgbG9uZyB0aW1lb3V0KTsNCi12b2lkIGNvbmdlc3Rp b25fZW5kKGludCBydyk7DQogDQogI2RlZmluZSBiZGlfY2FwX3dyaXRlYmFja19kaXJ0eShiZGkp IFwNCiAJKCEoKGJkaSktPmNhcGFiaWxpdGllcyAmIEJESV9DQVBfTk9fV1JJVEVCQUNLKSkNCklu ZGV4OiBsaW51eC0yLjYvbW0vYmFja2luZy1kZXYuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxpbnV4LTIu Ni5vcmlnL21tL2JhY2tpbmctZGV2LmMNCisrKyBsaW51eC0yLjYvbW0vYmFja2luZy1kZXYuYw0K QEAgLTUsNiArNSw0MSBAQA0KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPg0KICNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4NCiANCitpbnQgYmRpX2luaXQoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8g KmJkaSkNCit7DQorCWludCBpLCBqOw0KKwlpbnQgZXJyOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwg TlJfQkRJX1NUQVRfSVRFTVM7IGkrKykgew0KKwkJZXJyID0gcGVyY3B1X2NvdW50ZXJfaW5pdF9p cnEoJmJkaS0+YmRpX3N0YXRbaV0sIDApOw0KKwkJaWYgKGVycikNCisJCQlnb3RvIGVycjsNCisJ fQ0KKw0KKwliZGktPmRpcnR5X2V4Y2VlZGVkID0gMDsNCisJZXJyID0gcHJvcF9sb2NhbF9pbml0 X3BlcmNwdSgmYmRpLT5jb21wbGV0aW9ucyk7DQorDQorCWlmIChlcnIpIHsNCitlcnI6DQorCQlm b3IgKGogPSAwOyBqIDwgaTsgaisrKQ0KKwkJCXBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koJmJkaS0+ YmRpX3N0YXRbaV0pOw0KKwl9DQorDQorCXJldHVybiBlcnI7DQorfQ0KK0VYUE9SVF9TWU1CT0wo YmRpX2luaXQpOw0KKw0KK3ZvaWQgYmRpX2Rlc3Ryb3koc3RydWN0IGJhY2tpbmdfZGV2X2luZm8g KmJkaSkNCit7DQorCWludCBpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgTlJfQkRJX1NUQVRfSVRF TVM7IGkrKykNCisJCXBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koJmJkaS0+YmRpX3N0YXRbaV0pOw0K Kw0KKwlwcm9wX2xvY2FsX2Rlc3Ryb3lfcGVyY3B1KCZiZGktPmNvbXBsZXRpb25zKTsNCit9DQor RVhQT1JUX1NZTUJPTChiZGlfZGVzdHJveSk7DQorDQogc3RhdGljIHdhaXRfcXVldWVfaGVhZF90 IGNvbmdlc3Rpb25fd3FoWzJdID0gew0KIAkJX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIo Y29uZ2VzdGlvbl93cWhbMF0pLA0KIAkJX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoY29u Z2VzdGlvbl93cWhbMV0pDQpAQCAtNzAsMTYgKzEwNSwzIEBAIGxvbmcgY29uZ2VzdGlvbl93YWl0 X2ludGVycnVwdGlibGUoaW50IHINCiAJcmV0dXJuIHJldDsNCiB9DQogRVhQT1JUX1NZTUJPTChj b25nZXN0aW9uX3dhaXRfaW50ZXJydXB0aWJsZSk7DQotDQotLyoqDQotICogY29uZ2VzdGlvbl9l bmQgLSB3YWtlIHVwIHNsZWVwZXJzIG9uIGEgY29uZ2VzdGVkIGJhY2tpbmdfZGV2X2luZm8NCi0g KiBAcnc6IFJFQUQgb3IgV1JJVEUNCi0gKi8NCi12b2lkIGNvbmdlc3Rpb25fZW5kKGludCBydykN Ci17DQotCXdhaXRfcXVldWVfaGVhZF90ICp3cWggPSAmY29uZ2VzdGlvbl93cWhbcnddOw0KLQ0K LQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSh3cWgpKQ0KLQkJd2FrZV91cCh3cWgpOw0KLX0NCi1FWFBP UlRfU1lNQk9MKGNvbmdlc3Rpb25fZW5kKTsNCkluZGV4OiBsaW51eC0yLjYvZnMvZXh0Mi9iYWxs b2MuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGxpbnV4LTIuNi5vcmlnL2ZzL2V4dDIvYmFsbG9jLmMNCisr KyBsaW51eC0yLjYvZnMvZXh0Mi9iYWxsb2MuYw0KQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMg aW50IHJlc2VydmVfYmxvY2tzKHN0cnVjdCBzdXBlcl9iDQogCQkJcmV0dXJuIDA7DQogCX0NCiAN Ci0JcGVyY3B1X2NvdW50ZXJfbW9kKCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVyLCAtY291bnQp Ow0KKwlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19mcmVlYmxvY2tzX2NvdW50ZXIsIGNvdW50 KTsNCiAJc2ItPnNfZGlydCA9IDE7DQogCXJldHVybiBjb3VudDsNCiB9DQpAQCAtMTM0LDcgKzEz NCw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfYmxvY2tzKHN0cnVjdCBzdXBlcl8NCiAJaWYgKGNv dW50KSB7DQogCQlzdHJ1Y3QgZXh0Ml9zYl9pbmZvICpzYmkgPSBFWFQyX1NCKHNiKTsNCiANCi0J CXBlcmNwdV9jb3VudGVyX21vZCgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlciwgY291bnQpOw0K KwkJcGVyY3B1X2NvdW50ZXJfYWRkKCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVyLCBjb3VudCk7 DQogCQlzYi0+c19kaXJ0ID0gMTsNCiAJfQ0KIH0NCkluZGV4OiBsaW51eC0yLjYvZnMvZXh0Mi9p YWxsb2MuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxpbnV4LTIuNi5vcmlnL2ZzL2V4dDIvaWFsbG9jLmMN CisrKyBsaW51eC0yLjYvZnMvZXh0Mi9pYWxsb2MuYw0KQEAgLTU0Miw3ICs1NDIsNyBAQCBnb3Q6 DQogCQlnb3RvIGZhaWw7DQogCX0NCiANCi0JcGVyY3B1X2NvdW50ZXJfbW9kKCZzYmktPnNfZnJl ZWlub2Rlc19jb3VudGVyLCAtMSk7DQorCXBlcmNwdV9jb3VudGVyX2FkZCgmc2JpLT5zX2ZyZWVp bm9kZXNfY291bnRlciwgLTEpOw0KIAlpZiAoU19JU0RJUihtb2RlKSkNCiAJCXBlcmNwdV9jb3Vu dGVyX2luYygmc2JpLT5zX2RpcnNfY291bnRlcik7DQogDQpJbmRleDogbGludXgtMi42L2ZzL2V4 dDMvYmFsbG9jLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBsaW51eC0yLjYub3JpZy9mcy9leHQzL2JhbGxv Yy5jDQorKysgbGludXgtMi42L2ZzL2V4dDMvYmFsbG9jLmMNCkBAIC01NzAsNyArNTcwLDcgQEAg ZG9fbW9yZToNCiAJCWNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGRlc2MtPmJnX2ZyZWVfYmxvY2tz X2NvdW50KSArDQogCQkJZ3JvdXBfZnJlZWQpOw0KIAlzcGluX3VubG9jayhzYl9iZ2xfbG9jayhz YmksIGJsb2NrX2dyb3VwKSk7DQotCXBlcmNwdV9jb3VudGVyX21vZCgmc2JpLT5zX2ZyZWVibG9j a3NfY291bnRlciwgY291bnQpOw0KKwlwZXJjcHVfY291bnRlcl9hZGQoJnNiaS0+c19mcmVlYmxv Y2tzX2NvdW50ZXIsIGNvdW50KTsNCiANCiAJLyogV2UgZGlydGllZCB0aGUgYml0bWFwIGJsb2Nr ICovDQogCUJVRkZFUl9UUkFDRShiaXRtYXBfYmgsICJkaXJ0aWVkIGJpdG1hcCBibG9jayIpOw0K QEAgLTE2MzMsNyArMTYzMyw3IEBAIGFsbG9jYXRlZDoNCiAJZ2RwLT5iZ19mcmVlX2Jsb2Nrc19j b3VudCA9DQogCQkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZ2RwLT5iZ19mcmVlX2Jsb2Nrc19j b3VudCktbnVtKTsNCiAJc3Bpbl91bmxvY2soc2JfYmdsX2xvY2soc2JpLCBncm91cF9ubykpOw0K LQlwZXJjcHVfY291bnRlcl9tb2QoJnNiaS0+c19mcmVlYmxvY2tzX2NvdW50ZXIsIC1udW0pOw0K KwlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19mcmVlYmxvY2tzX2NvdW50ZXIsIG51bSk7DQog DQogCUJVRkZFUl9UUkFDRShnZHBfYmgsICJqb3VybmFsX2RpcnR5X21ldGFkYXRhIGZvciBncm91 cCBkZXNjcmlwdG9yIik7DQogCWVyciA9IGV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5k bGUsIGdkcF9iaCk7DQpJbmRleDogbGludXgtMi42L2ZzL2V4dDMvcmVzaXplLmMNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCi0tLSBsaW51eC0yLjYub3JpZy9mcy9leHQzL3Jlc2l6ZS5jDQorKysgbGludXgtMi42L2Zz L2V4dDMvcmVzaXplLmMNCkBAIC04ODQsOSArODg0LDkgQEAgaW50IGV4dDNfZ3JvdXBfYWRkKHN0 cnVjdCBzdXBlcl9ibG9jayAqcw0KIAkJaW5wdXQtPnJlc2VydmVkX2Jsb2Nrcyk7DQogDQogCS8q IFVwZGF0ZSB0aGUgZnJlZSBzcGFjZSBjb3VudHMgKi8NCi0JcGVyY3B1X2NvdW50ZXJfbW9kKCZz YmktPnNfZnJlZWJsb2Nrc19jb3VudGVyLA0KKwlwZXJjcHVfY291bnRlcl9hZGQoJnNiaS0+c19m cmVlYmxvY2tzX2NvdW50ZXIsDQogCQkJICAgaW5wdXQtPmZyZWVfYmxvY2tzX2NvdW50KTsNCi0J cGVyY3B1X2NvdW50ZXJfbW9kKCZzYmktPnNfZnJlZWlub2Rlc19jb3VudGVyLA0KKwlwZXJjcHVf Y291bnRlcl9hZGQoJnNiaS0+c19mcmVlaW5vZGVzX2NvdW50ZXIsDQogCQkJICAgRVhUM19JTk9E RVNfUEVSX0dST1VQKHNiKSk7DQogDQogCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5k bGUsIHNiaS0+c19zYmgpOw0KSW5kZXg6IGxpbnV4LTIuNi9mcy9leHQ0L2JhbGxvYy5jDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gbGludXgtMi42Lm9yaWcvZnMvZXh0NC9iYWxsb2MuYw0KKysrIGxpbnV4LTIu Ni9mcy9leHQ0L2JhbGxvYy5jDQpAQCAtNTg3LDcgKzU4Nyw3IEBAIGRvX21vcmU6DQogCQljcHVf dG9fbGUxNihsZTE2X3RvX2NwdShkZXNjLT5iZ19mcmVlX2Jsb2Nrc19jb3VudCkgKw0KIAkJCWdy b3VwX2ZyZWVkKTsNCiAJc3Bpbl91bmxvY2soc2JfYmdsX2xvY2soc2JpLCBibG9ja19ncm91cCkp Ow0KLQlwZXJjcHVfY291bnRlcl9tb2QoJnNiaS0+c19mcmVlYmxvY2tzX2NvdW50ZXIsIGNvdW50 KTsNCisJcGVyY3B1X2NvdW50ZXJfYWRkKCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVyLCBjb3Vu dCk7DQogDQogCS8qIFdlIGRpcnRpZWQgdGhlIGJpdG1hcCBibG9jayAqLw0KIAlCVUZGRVJfVFJB Q0UoYml0bWFwX2JoLCAiZGlydGllZCBiaXRtYXAgYmxvY2siKTsNCkBAIC0xNjQ3LDcgKzE2NDcs NyBAQCBhbGxvY2F0ZWQ6DQogCWdkcC0+YmdfZnJlZV9ibG9ja3NfY291bnQgPQ0KIAkJCWNwdV90 b19sZTE2KGxlMTZfdG9fY3B1KGdkcC0+YmdfZnJlZV9ibG9ja3NfY291bnQpLW51bSk7DQogCXNw aW5fdW5sb2NrKHNiX2JnbF9sb2NrKHNiaSwgZ3JvdXBfbm8pKTsNCi0JcGVyY3B1X2NvdW50ZXJf bW9kKCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVyLCAtbnVtKTsNCisJcGVyY3B1X2NvdW50ZXJf c3ViKCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVyLCBudW0pOw0KIA0KIAlCVUZGRVJfVFJBQ0Uo Z2RwX2JoLCAiam91cm5hbF9kaXJ0eV9tZXRhZGF0YSBmb3IgZ3JvdXAgZGVzY3JpcHRvciIpOw0K IAllcnIgPSBleHQ0X2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBnZHBfYmgpOw0KSW5k ZXg6IGxpbnV4LTIuNi9mcy9leHQ0L3Jlc2l6ZS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbGludXgtMi42 Lm9yaWcvZnMvZXh0NC9yZXNpemUuYw0KKysrIGxpbnV4LTIuNi9mcy9leHQ0L3Jlc2l6ZS5jDQpA QCAtODkzLDkgKzg5Myw5IEBAIGludCBleHQ0X2dyb3VwX2FkZChzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnMNCiAJCWlucHV0LT5yZXNlcnZlZF9ibG9ja3MpOw0KIA0KIAkvKiBVcGRhdGUgdGhlIGZyZWUg c3BhY2UgY291bnRzICovDQotCXBlcmNwdV9jb3VudGVyX21vZCgmc2JpLT5zX2ZyZWVibG9ja3Nf Y291bnRlciwNCisJcGVyY3B1X2NvdW50ZXJfYWRkKCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVy LA0KIAkJCSAgIGlucHV0LT5mcmVlX2Jsb2Nrc19jb3VudCk7DQotCXBlcmNwdV9jb3VudGVyX21v ZCgmc2JpLT5zX2ZyZWVpbm9kZXNfY291bnRlciwNCisJcGVyY3B1X2NvdW50ZXJfYWRkKCZzYmkt PnNfZnJlZWlub2Rlc19jb3VudGVyLA0KIAkJCSAgIEVYVDRfSU5PREVTX1BFUl9HUk9VUChzYikp Ow0KIA0KIAlleHQ0X2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBzYmktPnNfc2JoKTsN CkluZGV4OiBsaW51eC0yLjYvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gbGludXgtMi42Lm9yaWcvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oDQor KysgbGludXgtMi42L2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaA0KQEAgLTI2LDIwICsy Niw0MyBAQCBzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgew0KICNkZWZpbmUgRkJDX0JBVENICShOUl9D UFVTKjQpDQogI2VuZGlmDQogDQotc3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9jb3VudGVyX2lu aXQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2NCBhbW91bnQpDQorc3RhdGljIGlubGlu ZQ0KK2ludCBwZXJjcHVfY291bnRlcl9pbml0KHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjLCBz NjQgYW1vdW50KQ0KIHsNCiAJc3Bpbl9sb2NrX2luaXQoJmZiYy0+bG9jayk7DQogCWZiYy0+Y291 bnQgPSBhbW91bnQ7DQogCWZiYy0+Y291bnRlcnMgPSBhbGxvY19wZXJjcHUoczMyKTsNCisJaWYg KCFmYmMtPmNvdW50ZXJzKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorCXJldHVybiAwOw0KIH0NCiAN CitpbnQgcGVyY3B1X2NvdW50ZXJfaW5pdF9pcnEoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMs IHM2NCBhbW91bnQpOw0KKw0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfY291bnRlcl9kZXN0 cm95KHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjKQ0KIHsNCiAJZnJlZV9wZXJjcHUoZmJjLT5j b3VudGVycyk7DQogfQ0KIA0KLXZvaWQgcGVyY3B1X2NvdW50ZXJfbW9kKHN0cnVjdCBwZXJjcHVf Y291bnRlciAqZmJjLCBzMzIgYW1vdW50KTsNCi1zNjQgcGVyY3B1X2NvdW50ZXJfc3VtKHN0cnVj dCBwZXJjcHVfY291bnRlciAqZmJjKTsNCit2b2lkIHBlcmNwdV9jb3VudGVyX3NldChzdHJ1Y3Qg cGVyY3B1X2NvdW50ZXIgKmZiYywgczY0IGFtb3VudCk7DQordm9pZCBfX3BlcmNwdV9jb3VudGVy X2FkZChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYywgczY0IGFtb3VudCwgczMyIGJhdGNoKTsN CitzNjQgX19wZXJjcHVfY291bnRlcl9zdW0oc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMpOw0K Kw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfY291bnRlcl9hZGQoc3RydWN0IHBlcmNwdV9j b3VudGVyICpmYmMsIHM2NCBhbW91bnQpDQorew0KKwlfX3BlcmNwdV9jb3VudGVyX2FkZChmYmMs IGFtb3VudCwgRkJDX0JBVENIKTsNCit9DQorDQorc3RhdGljIGlubGluZSBzNjQgcGVyY3B1X2Nv dW50ZXJfc3VtX3Bvc2l0aXZlKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjKQ0KK3sNCisJczY0 IHJldCA9IF9fcGVyY3B1X2NvdW50ZXJfc3VtKGZiYyk7DQorCXJldHVybiByZXQgPCAwID8gMCA6 IHJldDsNCit9DQorDQorc3RhdGljIGlubGluZSBzNjQgcGVyY3B1X2NvdW50ZXJfc3VtKHN0cnVj dCBwZXJjcHVfY291bnRlciAqZmJjKQ0KK3sNCisJcmV0dXJuIF9fcGVyY3B1X2NvdW50ZXJfc3Vt KGZiYyk7DQorfQ0KIA0KIHN0YXRpYyBpbmxpbmUgczY0IHBlcmNwdV9jb3VudGVyX3JlYWQoc3Ry dWN0IHBlcmNwdV9jb3VudGVyICpmYmMpDQogew0KQEAgLTY3LDE3ICs5MCwyOCBAQCBzdHJ1Y3Qg cGVyY3B1X2NvdW50ZXIgew0KIAlzNjQgY291bnQ7DQogfTsNCiANCi1zdGF0aWMgaW5saW5lIHZv aWQgcGVyY3B1X2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYywgczY0IGFt b3VudCkNCitzdGF0aWMgaW5saW5lIGludCBwZXJjcHVfY291bnRlcl9pbml0KHN0cnVjdCBwZXJj cHVfY291bnRlciAqZmJjLCBzNjQgYW1vdW50KQ0KIHsNCiAJZmJjLT5jb3VudCA9IGFtb3VudDsN CisJcmV0dXJuIDA7DQogfQ0KIA0KKyNkZWZpbmUgcGVyY3B1X2NvdW50ZXJfaW5pdF9pcnEgcGVy Y3B1X2NvdW50ZXJfaW5pdA0KKw0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfY291bnRlcl9k ZXN0cm95KHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjKQ0KIHsNCiB9DQogDQorc3RhdGljIGlu bGluZSB2b2lkIHBlcmNwdV9jb3VudGVyX3NldChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYywg czY0IGFtb3VudCkNCit7DQorCWZiYy0+Y291bnQgPSBhbW91bnQ7DQorfQ0KKw0KKyNkZWZpbmUg X19wZXJjcHVfY291bnRlcl9hZGQoZmJjLCBhbW91bnQsIGJhdGNoKSBcDQorCXBlcmNwdV9jb3Vu dGVyX2FkZChmYmMsIGFtb3VudCkNCisNCiBzdGF0aWMgaW5saW5lIHZvaWQNCi1wZXJjcHVfY291 bnRlcl9tb2Qoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHMzMiBhbW91bnQpDQorcGVyY3B1 X2NvdW50ZXJfYWRkKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjLCBzNjQgYW1vdW50KQ0KIHsN CiAJcHJlZW1wdF9kaXNhYmxlKCk7DQogCWZiYy0+Y291bnQgKz0gYW1vdW50Ow0KQEAgLTk0LDIx ICsxMjgsMzEgQEAgc3RhdGljIGlubGluZSBzNjQgcGVyY3B1X2NvdW50ZXJfcmVhZF9wbw0KIAly ZXR1cm4gZmJjLT5jb3VudDsNCiB9DQogDQotc3RhdGljIGlubGluZSBzNjQgcGVyY3B1X2NvdW50 ZXJfc3VtKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjKQ0KK3N0YXRpYyBpbmxpbmUgczY0IHBl cmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZShzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYykNCiB7 DQogCXJldHVybiBwZXJjcHVfY291bnRlcl9yZWFkX3Bvc2l0aXZlKGZiYyk7DQogfQ0KIA0KK3N0 YXRpYyBpbmxpbmUgczY0IHBlcmNwdV9jb3VudGVyX3N1bShzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIg KmZiYykNCit7DQorCXJldHVybiBwZXJjcHVfY291bnRlcl9yZWFkKGZiYyk7DQorfQ0KKw0KICNl bmRpZgkvKiBDT05GSUdfU01QICovDQogDQogc3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9jb3Vu dGVyX2luYyhzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYykNCiB7DQotCXBlcmNwdV9jb3VudGVy X21vZChmYmMsIDEpOw0KKwlwZXJjcHVfY291bnRlcl9hZGQoZmJjLCAxKTsNCiB9DQogDQogc3Rh dGljIGlubGluZSB2b2lkIHBlcmNwdV9jb3VudGVyX2RlYyhzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIg KmZiYykNCiB7DQotCXBlcmNwdV9jb3VudGVyX21vZChmYmMsIC0xKTsNCisJcGVyY3B1X2NvdW50 ZXJfYWRkKGZiYywgLTEpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2NvdW50 ZXJfc3ViKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjLCBzNjQgYW1vdW50KQ0KK3sNCisJcGVy Y3B1X2NvdW50ZXJfYWRkKGZiYywgLWFtb3VudCk7DQogfQ0KIA0KICNlbmRpZiAvKiBfTElOVVhf UEVSQ1BVX0NPVU5URVJfSCAqLw0KSW5kZXg6IGxpbnV4LTIuNi9saWIvcGVyY3B1X2NvdW50ZXIu Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KLS0tIGxpbnV4LTIuNi5vcmlnL2xpYi9wZXJjcHVfY291bnRlci5jDQor KysgbGludXgtMi42L2xpYi9wZXJjcHVfY291bnRlci5jDQpAQCAtNSwxNSArNSw0MSBAQA0KICNp bmNsdWRlIDxsaW51eC9wZXJjcHVfY291bnRlci5oPg0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4NCiANCi12b2lkIHBlcmNwdV9jb3VudGVyX21vZChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZi YywgczMyIGFtb3VudCkNCit2b2lkIHBlcmNwdV9jb3VudGVyX3NldChzdHJ1Y3QgcGVyY3B1X2Nv dW50ZXIgKmZiYywgczY0IGFtb3VudCkNCiB7DQotCWxvbmcgY291bnQ7DQorCWludCBjcHU7DQor DQorCXNwaW5fbG9jaygmZmJjLT5sb2NrKTsNCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkg ew0KKwkJczMyICpwY291bnQgPSBwZXJfY3B1X3B0cihmYmMtPmNvdW50ZXJzLCBjcHUpOw0KKwkJ KnBjb3VudCA9IDA7DQorCX0NCisJZmJjLT5jb3VudCA9IGFtb3VudDsNCisJc3Bpbl91bmxvY2so JmZiYy0+bG9jayk7DQorfQ0KK0VYUE9SVF9TWU1CT0wocGVyY3B1X2NvdW50ZXJfc2V0KTsNCisN CitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHBlcmNwdV9jb3VudGVyX2lycXNhZmU7DQor DQoraW50IHBlcmNwdV9jb3VudGVyX2luaXRfaXJxKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJj LCBzNjQgYW1vdW50KQ0KK3sNCisJaW50IGVycjsNCisNCisJZXJyID0gcGVyY3B1X2NvdW50ZXJf aW5pdChmYmMsIGFtb3VudCk7DQorCWlmICghZXJyKQ0KKwkJbG9ja2RlcF9zZXRfY2xhc3MoJmZi Yy0+bG9jaywgJnBlcmNwdV9jb3VudGVyX2lycXNhZmUpOw0KKwlyZXR1cm4gZXJyOw0KK30NCisN Cit2b2lkIF9fcGVyY3B1X2NvdW50ZXJfYWRkKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjLCBz NjQgYW1vdW50LCBzMzIgYmF0Y2gpDQorew0KKwlzNjQgY291bnQ7DQogCXMzMiAqcGNvdW50Ow0K IAlpbnQgY3B1ID0gZ2V0X2NwdSgpOw0KIA0KIAlwY291bnQgPSBwZXJfY3B1X3B0cihmYmMtPmNv dW50ZXJzLCBjcHUpOw0KIAljb3VudCA9ICpwY291bnQgKyBhbW91bnQ7DQotCWlmIChjb3VudCA+ PSBGQkNfQkFUQ0ggfHwgY291bnQgPD0gLUZCQ19CQVRDSCkgew0KKwlpZiAoY291bnQgPj0gYmF0 Y2ggfHwgY291bnQgPD0gLWJhdGNoKSB7DQogCQlzcGluX2xvY2soJmZiYy0+bG9jayk7DQogCQlm YmMtPmNvdW50ICs9IGNvdW50Ow0KIAkJKnBjb3VudCA9IDA7DQpAQCAtMjMsMTMgKzQ5LDEzIEBA IHZvaWQgcGVyY3B1X2NvdW50ZXJfbW9kKHN0cnVjdCBwZXJjcHVfY28NCiAJfQ0KIAlwdXRfY3B1 KCk7DQogfQ0KLUVYUE9SVF9TWU1CT0wocGVyY3B1X2NvdW50ZXJfbW9kKTsNCitFWFBPUlRfU1lN Qk9MKF9fcGVyY3B1X2NvdW50ZXJfYWRkKTsNCiANCiAvKg0KICAqIEFkZCB1cCBhbGwgdGhlIHBl ci1jcHUgY291bnRzLCByZXR1cm4gdGhlIHJlc3VsdC4gIFRoaXMgaXMgYSBtb3JlIGFjY3VyYXRl DQogICogYnV0IG11Y2ggc2xvd2VyIHZlcnNpb24gb2YgcGVyY3B1X2NvdW50ZXJfcmVhZF9wb3Np dGl2ZSgpDQogICovDQotczY0IHBlcmNwdV9jb3VudGVyX3N1bShzdHJ1Y3QgcGVyY3B1X2NvdW50 ZXIgKmZiYykNCitzNjQgX19wZXJjcHVfY291bnRlcl9zdW0oc3RydWN0IHBlcmNwdV9jb3VudGVy ICpmYmMpDQogew0KIAlzNjQgcmV0Ow0KIAlpbnQgY3B1Ow0KQEAgLTQxLDYgKzY3LDYgQEAgczY0 IHBlcmNwdV9jb3VudGVyX3N1bShzdHJ1Y3QgcGVyY3B1X2NvdQ0KIAkJcmV0ICs9ICpwY291bnQ7 DQogCX0NCiAJc3Bpbl91bmxvY2soJmZiYy0+bG9jayk7DQotCXJldHVybiByZXQgPCAwID8gMCA6 IHJldDsNCisJcmV0dXJuIHJldDsNCiB9DQotRVhQT1JUX1NZTUJPTChwZXJjcHVfY291bnRlcl9z dW0pOw0KK0VYUE9SVF9TWU1CT0woX19wZXJjcHVfY291bnRlcl9zdW0pOw0KSW5kZXg6IGxpbnV4 LTIuNi9mcy9leHQzL3N1cGVyLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBsaW51eC0yLjYub3JpZy9mcy9l eHQzL3N1cGVyLmMNCisrKyBsaW51eC0yLjYvZnMvZXh0My9zdXBlci5jDQpAQCAtMTQwNiw2ICsx NDA2LDcgQEAgc3RhdGljIGludCBleHQzX2ZpbGxfc3VwZXIgKHN0cnVjdCBzdXBlcg0KIAlpbnQg aTsNCiAJaW50IG5lZWRzX3JlY292ZXJ5Ow0KIAlfX2xlMzIgZmVhdHVyZXM7DQorCWludCBlcnI7 DQogDQogCXNiaSA9IGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKTsNCiAJaWYgKCFz YmkpDQpAQCAtMTY2NSwxMiArMTY2NiwxNiBAQCBzdGF0aWMgaW50IGV4dDNfZmlsbF9zdXBlciAo c3RydWN0IHN1cGVyDQogCWdldF9yYW5kb21fYnl0ZXMoJnNiaS0+c19uZXh0X2dlbmVyYXRpb24s IHNpemVvZih1MzIpKTsNCiAJc3Bpbl9sb2NrX2luaXQoJnNiaS0+c19uZXh0X2dlbl9sb2NrKTsN CiANCi0JcGVyY3B1X2NvdW50ZXJfaW5pdCgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlciwNCisJ ZXJyID0gcGVyY3B1X2NvdW50ZXJfaW5pdCgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlciwNCiAJ CWV4dDNfY291bnRfZnJlZV9ibG9ja3Moc2IpKTsNCi0JcGVyY3B1X2NvdW50ZXJfaW5pdCgmc2Jp LT5zX2ZyZWVpbm9kZXNfY291bnRlciwNCisJZXJyIHw9IHBlcmNwdV9jb3VudGVyX2luaXQoJnNi aS0+c19mcmVlaW5vZGVzX2NvdW50ZXIsDQogCQlleHQzX2NvdW50X2ZyZWVfaW5vZGVzKHNiKSk7 DQotCXBlcmNwdV9jb3VudGVyX2luaXQoJnNiaS0+c19kaXJzX2NvdW50ZXIsDQorCWVyciB8PSBw ZXJjcHVfY291bnRlcl9pbml0KCZzYmktPnNfZGlyc19jb3VudGVyLA0KIAkJZXh0M19jb3VudF9k aXJzKHNiKSk7DQorCWlmIChlcnIpIHsNCisJCXByaW50ayhLRVJOX0VSUiAiRVhUMy1mczogaW5z dWZmaWNpZW50IG1lbW9yeVxuIik7DQorCQlnb3RvIGZhaWxlZF9tb3VudDM7DQorCX0NCiANCiAJ LyogcGVyIGZpbGV5c3RlbSByZXNlcnZhdGlvbiBsaXN0IGhlYWQgJiBsb2NrICovDQogCXNwaW5f bG9ja19pbml0KCZzYmktPnNfcnN2X3dpbmRvd19sb2NrKTsNCkBAIC0yNDQ4LDEyICsyNDUzLDEy IEBAIHN0YXRpYyBpbnQgZXh0M19zdGF0ZnMgKHN0cnVjdCBkZW50cnkgKiANCiAJYnVmLT5mX3R5 cGUgPSBFWFQzX1NVUEVSX01BR0lDOw0KIAlidWYtPmZfYnNpemUgPSBzYi0+c19ibG9ja3NpemU7 DQogCWJ1Zi0+Zl9ibG9ja3MgPSBsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpIC0gb3Zl cmhlYWQ7DQotCWJ1Zi0+Zl9iZnJlZSA9IHBlcmNwdV9jb3VudGVyX3N1bSgmc2JpLT5zX2ZyZWVi bG9ja3NfY291bnRlcik7DQorCWJ1Zi0+Zl9iZnJlZSA9IHBlcmNwdV9jb3VudGVyX3N1bV9wb3Np dGl2ZSgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlcik7DQogCWJ1Zi0+Zl9iYXZhaWwgPSBidWYt PmZfYmZyZWUgLSBsZTMyX3RvX2NwdShlcy0+c19yX2Jsb2Nrc19jb3VudCk7DQogCWlmIChidWYt PmZfYmZyZWUgPCBsZTMyX3RvX2NwdShlcy0+c19yX2Jsb2Nrc19jb3VudCkpDQogCQlidWYtPmZf YmF2YWlsID0gMDsNCiAJYnVmLT5mX2ZpbGVzID0gbGUzMl90b19jcHUoZXMtPnNfaW5vZGVzX2Nv dW50KTsNCi0JYnVmLT5mX2ZmcmVlID0gcGVyY3B1X2NvdW50ZXJfc3VtKCZzYmktPnNfZnJlZWlu b2Rlc19jb3VudGVyKTsNCisJYnVmLT5mX2ZmcmVlID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0 aXZlKCZzYmktPnNfZnJlZWlub2Rlc19jb3VudGVyKTsNCiAJYnVmLT5mX25hbWVsZW4gPSBFWFQz X05BTUVfTEVOOw0KIAlmc2lkID0gbGU2NF90b19jcHVwKCh2b2lkICopZXMtPnNfdXVpZCkgXg0K IAkgICAgICAgbGU2NF90b19jcHVwKCh2b2lkICopZXMtPnNfdXVpZCArIHNpemVvZih1NjQpKTsN CkluZGV4OiBsaW51eC0yLjYvZnMvZXh0NC9zdXBlci5jDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbGludXgt Mi42Lm9yaWcvZnMvZXh0NC9zdXBlci5jDQorKysgbGludXgtMi42L2ZzL2V4dDQvc3VwZXIuYw0K QEAgLTE0NjUsNiArMTQ2NSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyIChzdHJ1Y3Qg c3VwZXINCiAJaW50IG5lZWRzX3JlY292ZXJ5Ow0KIAlfX2xlMzIgZmVhdHVyZXM7DQogCV9fdTY0 IGJsb2Nrc19jb3VudDsNCisJaW50IGVycjsNCiANCiAJc2JpID0ga3phbGxvYyhzaXplb2YoKnNi aSksIEdGUF9LRVJORUwpOw0KIAlpZiAoIXNiaSkNCkBAIC0xNzM3LDEyICsxNzM4LDE2IEBAIHN0 YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyIChzdHJ1Y3Qgc3VwZXINCiAJZ2V0X3JhbmRvbV9ieXRl cygmc2JpLT5zX25leHRfZ2VuZXJhdGlvbiwgc2l6ZW9mKHUzMikpOw0KIAlzcGluX2xvY2tfaW5p dCgmc2JpLT5zX25leHRfZ2VuX2xvY2spOw0KIA0KLQlwZXJjcHVfY291bnRlcl9pbml0KCZzYmkt PnNfZnJlZWJsb2Nrc19jb3VudGVyLA0KKwllcnIgPSBwZXJjcHVfY291bnRlcl9pbml0KCZzYmkt PnNfZnJlZWJsb2Nrc19jb3VudGVyLA0KIAkJZXh0NF9jb3VudF9mcmVlX2Jsb2NrcyhzYikpOw0K LQlwZXJjcHVfY291bnRlcl9pbml0KCZzYmktPnNfZnJlZWlub2Rlc19jb3VudGVyLA0KKwllcnIg fD0gcGVyY3B1X2NvdW50ZXJfaW5pdCgmc2JpLT5zX2ZyZWVpbm9kZXNfY291bnRlciwNCiAJCWV4 dDRfY291bnRfZnJlZV9pbm9kZXMoc2IpKTsNCi0JcGVyY3B1X2NvdW50ZXJfaW5pdCgmc2JpLT5z X2RpcnNfY291bnRlciwNCisJZXJyIHw9IHBlcmNwdV9jb3VudGVyX2luaXQoJnNiaS0+c19kaXJz X2NvdW50ZXIsDQogCQlleHQ0X2NvdW50X2RpcnMoc2IpKTsNCisJaWYgKGVycikgew0KKwkJcHJp bnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBpbnN1ZmZpY2llbnQgbWVtb3J5XG4iKTsNCisJCWdvdG8g ZmFpbGVkX21vdW50MzsNCisJfQ0KIA0KIAkvKiBwZXIgZmlsZXlzdGVtIHJlc2VydmF0aW9uIGxp c3QgaGVhZCAmIGxvY2sgKi8NCiAJc3Bpbl9sb2NrX2luaXQoJnNiaS0+c19yc3Zfd2luZG93X2xv Y2spOw0KQEAgLTI1MjMsMTIgKzI1MjgsMTIgQEAgc3RhdGljIGludCBleHQ0X3N0YXRmcyAoc3Ry dWN0IGRlbnRyeSAqIA0KIAlidWYtPmZfdHlwZSA9IEVYVDRfU1VQRVJfTUFHSUM7DQogCWJ1Zi0+ Zl9ic2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsNCiAJYnVmLT5mX2Jsb2NrcyA9IGV4dDRfYmxvY2tz X2NvdW50KGVzKSAtIG92ZXJoZWFkOw0KLQlidWYtPmZfYmZyZWUgPSBwZXJjcHVfY291bnRlcl9z dW0oJnNiaS0+c19mcmVlYmxvY2tzX2NvdW50ZXIpOw0KKwlidWYtPmZfYmZyZWUgPSBwZXJjcHVf Y291bnRlcl9zdW1fcG9zaXRpdmUoJnNiaS0+c19mcmVlYmxvY2tzX2NvdW50ZXIpOw0KIAlidWYt PmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlIC0gZXh0NF9yX2Jsb2Nrc19jb3VudChlcyk7DQogCWlm IChidWYtPmZfYmZyZWUgPCBleHQ0X3JfYmxvY2tzX2NvdW50KGVzKSkNCiAJCWJ1Zi0+Zl9iYXZh aWwgPSAwOw0KIAlidWYtPmZfZmlsZXMgPSBsZTMyX3RvX2NwdShlcy0+c19pbm9kZXNfY291bnQp Ow0KLQlidWYtPmZfZmZyZWUgPSBwZXJjcHVfY291bnRlcl9zdW0oJnNiaS0+c19mcmVlaW5vZGVz X2NvdW50ZXIpOw0KKwlidWYtPmZfZmZyZWUgPSBwZXJjcHVfY291bnRlcl9zdW1fcG9zaXRpdmUo JnNiaS0+c19mcmVlaW5vZGVzX2NvdW50ZXIpOw0KIAlidWYtPmZfbmFtZWxlbiA9IEVYVDRfTkFN RV9MRU47DQogCWZzaWQgPSBsZTY0X3RvX2NwdXAoKHZvaWQgKillcy0+c191dWlkKSBeDQogCSAg ICAgICBsZTY0X3RvX2NwdXAoKHZvaWQgKillcy0+c191dWlkICsgc2l6ZW9mKHU2NCkpOw0KSW5k ZXg6IGxpbnV4LTIuNi9mcy9maWxlX3RhYmxlLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBsaW51eC0yLjYu b3JpZy9mcy9maWxlX3RhYmxlLmMNCisrKyBsaW51eC0yLjYvZnMvZmlsZV90YWJsZS5jDQpAQCAt OTgsNyArOTgsNyBAQCBzdHJ1Y3QgZmlsZSAqZ2V0X2VtcHR5X2ZpbHAodm9pZCkNCiAJCSAqIHBl cmNwdV9jb3VudGVycyBhcmUgaW5hY2N1cmF0ZS4gIERvIGFuIGV4cGVuc2l2ZSBjaGVjayBiZWZv cmUNCiAJCSAqIHdlIGdvIGFuZCBmYWlsLg0KIAkJICovDQotCQlpZiAocGVyY3B1X2NvdW50ZXJf c3VtKCZucl9maWxlcykgPj0gZmlsZXNfc3RhdC5tYXhfZmlsZXMpDQorCQlpZiAocGVyY3B1X2Nv dW50ZXJfc3VtX3Bvc2l0aXZlKCZucl9maWxlcykgPj0gZmlsZXNfc3RhdC5tYXhfZmlsZXMpDQog CQkJZ290byBvdmVyOw0KIAl9DQogDQpJbmRleDogbGludXgtMi42L2ZzL2V4dDIvc3VwZXIuYw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIGxpbnV4LTIuNi5vcmlnL2ZzL2V4dDIvc3VwZXIuYw0KKysrIGxpbnV4 LTIuNi9mcy9leHQyL3N1cGVyLmMNCkBAIC02NTIsNiArNjUyLDcgQEAgc3RhdGljIGludCBleHQy X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyXw0KIAlpbnQgZGJfY291bnQ7DQogCWludCBpLCBqOw0K IAlfX2xlMzIgZmVhdHVyZXM7DQorCWludCBlcnI7DQogDQogCXNiaSA9IGt6YWxsb2Moc2l6ZW9m KCpzYmkpLCBHRlBfS0VSTkVMKTsNCiAJaWYgKCFzYmkpDQpAQCAtOTA3LDEyICs5MDgsMTYgQEAg c3RhdGljIGludCBleHQyX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyXw0KIAlnZXRfcmFuZG9tX2J5 dGVzKCZzYmktPnNfbmV4dF9nZW5lcmF0aW9uLCBzaXplb2YodTMyKSk7DQogCXNwaW5fbG9ja19p bml0KCZzYmktPnNfbmV4dF9nZW5fbG9jayk7DQogDQotCXBlcmNwdV9jb3VudGVyX2luaXQoJnNi aS0+c19mcmVlYmxvY2tzX2NvdW50ZXIsDQorCWVyciA9IHBlcmNwdV9jb3VudGVyX2luaXQoJnNi aS0+c19mcmVlYmxvY2tzX2NvdW50ZXIsDQogCQkJCWV4dDJfY291bnRfZnJlZV9ibG9ja3Moc2Ip KTsNCi0JcGVyY3B1X2NvdW50ZXJfaW5pdCgmc2JpLT5zX2ZyZWVpbm9kZXNfY291bnRlciwNCisJ ZXJyIHw9IHBlcmNwdV9jb3VudGVyX2luaXQoJnNiaS0+c19mcmVlaW5vZGVzX2NvdW50ZXIsDQog CQkJCWV4dDJfY291bnRfZnJlZV9pbm9kZXMoc2IpKTsNCi0JcGVyY3B1X2NvdW50ZXJfaW5pdCgm c2JpLT5zX2RpcnNfY291bnRlciwNCisJZXJyIHw9IHBlcmNwdV9jb3VudGVyX2luaXQoJnNiaS0+ c19kaXJzX2NvdW50ZXIsDQogCQkJCWV4dDJfY291bnRfZGlycyhzYikpOw0KKwlpZiAoZXJyKSB7 DQorCQlwcmludGsoS0VSTl9FUlIgIkVYVDItZnM6IGluc3VmZmljaWVudCBtZW1vcnlcbiIpOw0K KwkJZ290byBmYWlsZWRfbW91bnQzOw0KKwl9DQogCS8qDQogCSAqIHNldCB1cCBlbm91Z2ggc28g dGhhdCBpdCBjYW4gcmVhZCBhbiBpbm9kZQ0KIAkgKi8NCkluZGV4OiBsaW51eC0yLjYvYmxvY2sv bGxfcndfYmxrLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBsaW51eC0yLjYub3JpZy9ibG9jay9sbF9yd19i bGsuYw0KKysrIGxpbnV4LTIuNi9ibG9jay9sbF9yd19ibGsuYw0KQEAgLTE3ODMsNiArMTc4Myw3 IEBAIHN0YXRpYyB2b2lkIGJsa19yZWxlYXNlX3F1ZXVlKHN0cnVjdCBrb2INCiANCiAJYmxrX3Ry YWNlX3NodXRkb3duKHEpOw0KIA0KKwliZGlfZGVzdHJveSgmcS0+YmFja2luZ19kZXZfaW5mbyk7 DQogCWttZW1fY2FjaGVfZnJlZShyZXF1ZXN0cV9jYWNoZXAsIHEpOw0KIH0NCiANCkBAIC0xODM1 LDYgKzE4MzYsNyBAQCBzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBxdWV1ZV9rdHlwZTsNCiANCiBy ZXF1ZXN0X3F1ZXVlX3QgKmJsa19hbGxvY19xdWV1ZV9ub2RlKGdmcF90IGdmcF9tYXNrLCBpbnQg bm9kZV9pZCkNCiB7DQorCWludCBlcnI7DQogCXJlcXVlc3RfcXVldWVfdCAqcTsNCiANCiAJcSA9 IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShyZXF1ZXN0cV9jYWNoZXAsIGdmcF9tYXNrLCBub2RlX2lk KTsNCkBAIC0xODQyLDE1ICsxODQ0LDIwIEBAIHJlcXVlc3RfcXVldWVfdCAqYmxrX2FsbG9jX3F1 ZXVlX25vZGUoZ2YNCiAJCXJldHVybiBOVUxMOw0KIA0KIAltZW1zZXQocSwgMCwgc2l6ZW9mKCpx KSk7DQorCXEtPmJhY2tpbmdfZGV2X2luZm8udW5wbHVnX2lvX2ZuID0gYmxrX2JhY2tpbmdfZGV2 X3VucGx1ZzsNCisJcS0+YmFja2luZ19kZXZfaW5mby51bnBsdWdfaW9fZGF0YSA9IHE7DQorCWVy ciA9IGJkaV9pbml0KCZxLT5iYWNraW5nX2Rldl9pbmZvKTsNCisJaWYgKGVycikgew0KKwkJa21l bV9jYWNoZV9mcmVlKHJlcXVlc3RxX2NhY2hlcCwgcSk7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0K Kw0KIAlpbml0X3RpbWVyKCZxLT51bnBsdWdfdGltZXIpOw0KIA0KIAlzbnByaW50ZihxLT5rb2Jq Lm5hbWUsIEtPQkpfTkFNRV9MRU4sICIlcyIsICJxdWV1ZSIpOw0KIAlxLT5rb2JqLmt0eXBlID0g JnF1ZXVlX2t0eXBlOw0KIAlrb2JqZWN0X2luaXQoJnEtPmtvYmopOw0KIA0KLQlxLT5iYWNraW5n X2Rldl9pbmZvLnVucGx1Z19pb19mbiA9IGJsa19iYWNraW5nX2Rldl91bnBsdWc7DQotCXEtPmJh Y2tpbmdfZGV2X2luZm8udW5wbHVnX2lvX2RhdGEgPSBxOw0KLQ0KIAltdXRleF9pbml0KCZxLT5z eXNmc19sb2NrKTsNCiANCiAJcmV0dXJuIHE7DQpAQCAtMzk4NCw2ICszOTkxLDczIEBAIHN0YXRp YyBzc2l6ZV90IHF1ZXVlX21heF9od19zZWN0b3JzX3Nob3cNCiAJcmV0dXJuIHF1ZXVlX3Zhcl9z aG93KG1heF9od19zZWN0b3JzX2tiLCAocGFnZSkpOw0KIH0NCiANCitzdGF0aWMgc3NpemVfdCBx dWV1ZV9ucl9yZWNsYWltYWJsZV9zaG93KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpw YWdlKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBsb25nIG5yX3JlY2xhaW1hYmxlID0NCisJCWJkaV9z dGF0KCZxLT5iYWNraW5nX2Rldl9pbmZvLCBCRElfUkVDTEFJTUFCTEUpOw0KKw0KKwlyZXR1cm4g c3ByaW50ZihwYWdlLCAiJWxsdVxuIiwNCisJCQlucl9yZWNsYWltYWJsZSA+PiAoUEFHRV9DQUNI RV9TSElGVCAtIDEwKSk7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IHF1ZXVlX25yX3dyaXRlYmFj a19zaG93KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpwYWdlKQ0KK3sNCisJdW5zaWdu ZWQgbG9uZyBsb25nIG5yX3dyaXRlYmFjayA9DQorCQliZGlfc3RhdCgmcS0+YmFja2luZ19kZXZf aW5mbywgQkRJX1dSSVRFQkFDSyk7DQorDQorCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGx1XG4i LA0KKwkJCW5yX3dyaXRlYmFjayA+PiAoUEFHRV9DQUNIRV9TSElGVCAtIDEwKSk7DQorfQ0KKw0K K2V4dGVybiB2b2lkIGJkaV93cml0ZW91dF9mcmFjdGlvbihzdHJ1Y3QgYmFja2luZ19kZXZfaW5m byAqYmRpLA0KKwkJbG9uZyAqbnVtZXJhdG9yLCBsb25nICpkZW5vbWluYXRvcik7DQorDQorc3Rh dGljIHNzaXplX3QgcXVldWVfbnJfY2FjaGVfcmF0aW9fc2hvdyhzdHJ1Y3QgcmVxdWVzdF9xdWV1 ZSAqcSwgY2hhciAqcGFnZSkNCit7DQorCWxvbmcgc2NhbGUsIGRpdjsNCisNCisJYmRpX3dyaXRl b3V0X2ZyYWN0aW9uKCZxLT5iYWNraW5nX2Rldl9pbmZvLCAmc2NhbGUsICZkaXYpOw0KKwlzY2Fs ZSAqPSAxMDI0Ow0KKwlzY2FsZSAvPSBkaXY7DQorDQorCXJldHVybiBzcHJpbnRmKHBhZ2UsICIl bGRcbiIsIHNjYWxlKTsNCit9DQorDQorc3RhdGljIHNzaXplX3QgcXVldWVfbnJfY2FjaGVfbnVt X3Nob3coc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKnBhZ2UpDQorew0KKwlsb25nIHNj YWxlLCBkaXY7DQorDQorCWJkaV93cml0ZW91dF9mcmFjdGlvbigmcS0+YmFja2luZ19kZXZfaW5m bywgJnNjYWxlLCAmZGl2KTsNCisNCisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVsZFxuIiwgc2Nh bGUpOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCBxdWV1ZV9ucl9jYWNoZV9kZW5vbV9zaG93KHN0 cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpwYWdlKQ0KK3sNCisJbG9uZyBzY2FsZSwgZGl2 Ow0KKw0KKwliZGlfd3JpdGVvdXRfZnJhY3Rpb24oJnEtPmJhY2tpbmdfZGV2X2luZm8sICZzY2Fs ZSwgJmRpdik7DQorDQorCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGRcbiIsIGRpdik7DQorfQ0K Kw0KK2V4dGVybiB2b2lkDQorZ2V0X2RpcnR5X2xpbWl0cyhsb25nICpwYmFja2dyb3VuZCwgbG9u ZyAqcGRpcnR5LCBsb25nICpwYmRpX2RpcnR5LA0KKwkJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8g KmJkaSk7DQorDQorc3RhdGljIHNzaXplX3QgcXVldWVfbnJfY2FjaGVfc2l6ZV9zaG93KHN0cnVj dCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpwYWdlKQ0KK3sNCisJbG9uZyBiYWNrZ3JvdW5kLCBk aXJ0eSwgYmRpX2RpcnR5Ow0KKwlnZXRfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kLCAmZGlydHks ICZiZGlfZGlydHksICZxLT5iYWNraW5nX2Rldl9pbmZvKTsNCisJcmV0dXJuIHNwcmludGYocGFn ZSwgIiVsZFxuIiwgYmRpX2RpcnR5KTsNCit9DQorDQorc3RhdGljIHNzaXplX3QgcXVldWVfbnJf Y2FjaGVfdG90YWxfc2hvdyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqcGFnZSkNCit7 DQorCWxvbmcgYmFja2dyb3VuZCwgZGlydHksIGJkaV9kaXJ0eTsNCisJZ2V0X2RpcnR5X2xpbWl0 cygmYmFja2dyb3VuZCwgJmRpcnR5LCAmYmRpX2RpcnR5LCAmcS0+YmFja2luZ19kZXZfaW5mbyk7 DQorCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGRcbiIsIGRpcnR5KTsNCit9DQogDQogc3RhdGlj IHN0cnVjdCBxdWV1ZV9zeXNmc19lbnRyeSBxdWV1ZV9yZXF1ZXN0c19lbnRyeSA9IHsNCiAJLmF0 dHIgPSB7Lm5hbWUgPSAibnJfcmVxdWVzdHMiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0s DQpAQCAtNDAwOCw2ICs0MDgyLDQxIEBAIHN0YXRpYyBzdHJ1Y3QgcXVldWVfc3lzZnNfZW50cnkg cXVldWVfbWENCiAJLnNob3cgPSBxdWV1ZV9tYXhfaHdfc2VjdG9yc19zaG93LA0KIH07DQogDQor c3RhdGljIHN0cnVjdCBxdWV1ZV9zeXNmc19lbnRyeSBxdWV1ZV9yZWNsYWltYWJsZV9lbnRyeSA9 IHsNCisJLmF0dHIgPSB7Lm5hbWUgPSAicmVjbGFpbWFibGVfa2IiLCAubW9kZSA9IFNfSVJVR08g fSwNCisJLnNob3cgPSBxdWV1ZV9ucl9yZWNsYWltYWJsZV9zaG93LA0KK307DQorDQorc3RhdGlj IHN0cnVjdCBxdWV1ZV9zeXNmc19lbnRyeSBxdWV1ZV93cml0ZWJhY2tfZW50cnkgPSB7DQorCS5h dHRyID0gey5uYW1lID0gIndyaXRlYmFja19rYiIsIC5tb2RlID0gU19JUlVHTyB9LA0KKwkuc2hv dyA9IHF1ZXVlX25yX3dyaXRlYmFja19zaG93LA0KK307DQorDQorc3RhdGljIHN0cnVjdCBxdWV1 ZV9zeXNmc19lbnRyeSBxdWV1ZV9jYWNoZV9yYXRpb19lbnRyeSA9IHsNCisJLmF0dHIgPSB7Lm5h bWUgPSAiY2FjaGVfcmF0aW8iLCAubW9kZSA9IFNfSVJVR08gfSwNCisJLnNob3cgPSBxdWV1ZV9u cl9jYWNoZV9yYXRpb19zaG93LA0KK307DQorDQorc3RhdGljIHN0cnVjdCBxdWV1ZV9zeXNmc19l bnRyeSBxdWV1ZV9jYWNoZV9udW1fZW50cnkgPSB7DQorCS5hdHRyID0gey5uYW1lID0gImNhY2hl X251bSIsIC5tb2RlID0gU19JUlVHTyB9LA0KKwkuc2hvdyA9IHF1ZXVlX25yX2NhY2hlX251bV9z aG93LA0KK307DQorDQorc3RhdGljIHN0cnVjdCBxdWV1ZV9zeXNmc19lbnRyeSBxdWV1ZV9jYWNo ZV9kZW5vbV9lbnRyeSA9IHsNCisJLmF0dHIgPSB7Lm5hbWUgPSAiY2FjaGVfZGVub20iLCAubW9k ZSA9IFNfSVJVR08gfSwNCisJLnNob3cgPSBxdWV1ZV9ucl9jYWNoZV9kZW5vbV9zaG93LA0KK307 DQorDQorc3RhdGljIHN0cnVjdCBxdWV1ZV9zeXNmc19lbnRyeSBxdWV1ZV9jYWNoZV9zaXplX2Vu dHJ5ID0gew0KKwkuYXR0ciA9IHsubmFtZSA9ICJjYWNoZV9zaXplIiwgLm1vZGUgPSBTX0lSVUdP IH0sDQorCS5zaG93ID0gcXVldWVfbnJfY2FjaGVfc2l6ZV9zaG93LA0KK307DQorDQorc3RhdGlj IHN0cnVjdCBxdWV1ZV9zeXNmc19lbnRyeSBxdWV1ZV9jYWNoZV90b3RhbF9lbnRyeSA9IHsNCisJ LmF0dHIgPSB7Lm5hbWUgPSAiY2FjaGVfdG90YWwiLCAubW9kZSA9IFNfSVJVR08gfSwNCisJLnNo b3cgPSBxdWV1ZV9ucl9jYWNoZV90b3RhbF9zaG93LA0KK307DQorDQogc3RhdGljIHN0cnVjdCBx dWV1ZV9zeXNmc19lbnRyeSBxdWV1ZV9pb3NjaGVkX2VudHJ5ID0gew0KIAkuYXR0ciA9IHsubmFt ZSA9ICJzY2hlZHVsZXIiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sDQogCS5zaG93ID0g ZWx2X2lvc2NoZWRfc2hvdywNCkBAIC00MDE5LDYgKzQxMjgsMTMgQEAgc3RhdGljIHN0cnVjdCBh dHRyaWJ1dGUgKmRlZmF1bHRfYXR0cnNbXQ0KIAkmcXVldWVfcmFfZW50cnkuYXR0ciwNCiAJJnF1 ZXVlX21heF9od19zZWN0b3JzX2VudHJ5LmF0dHIsDQogCSZxdWV1ZV9tYXhfc2VjdG9yc19lbnRy eS5hdHRyLA0KKwkmcXVldWVfcmVjbGFpbWFibGVfZW50cnkuYXR0ciwNCisJJnF1ZXVlX3dyaXRl YmFja19lbnRyeS5hdHRyLA0KKwkmcXVldWVfY2FjaGVfcmF0aW9fZW50cnkuYXR0ciwNCisJJnF1 ZXVlX2NhY2hlX251bV9lbnRyeS5hdHRyLA0KKwkmcXVldWVfY2FjaGVfZGVub21fZW50cnkuYXR0 ciwNCisJJnF1ZXVlX2NhY2hlX3NpemVfZW50cnkuYXR0ciwNCisJJnF1ZXVlX2NhY2hlX3RvdGFs X2VudHJ5LmF0dHIsDQogCSZxdWV1ZV9pb3NjaGVkX2VudHJ5LmF0dHIsDQogCU5VTEwsDQogfTsN CkluZGV4OiBsaW51eC0yLjYvZHJpdmVycy9ibG9jay9yZC5jDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbGlu dXgtMi42Lm9yaWcvZHJpdmVycy9ibG9jay9yZC5jDQorKysgbGludXgtMi42L2RyaXZlcnMvYmxv Y2svcmQuYw0KQEAgLTQxMSw2ICs0MTEsOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgcmRfY2xlYW51 cCh2b2lkKQ0KIAkJYmxrX2NsZWFudXBfcXVldWUocmRfcXVldWVbaV0pOw0KIAl9DQogCXVucmVn aXN0ZXJfYmxrZGV2KFJBTURJU0tfTUFKT1IsICJyYW1kaXNrIik7DQorDQorCWJkaV9kZXN0cm95 KCZyZF9maWxlX2JhY2tpbmdfZGV2X2luZm8pOw0KKwliZGlfZGVzdHJveSgmcmRfYmFja2luZ19k ZXZfaW5mbyk7DQogfQ0KIA0KIC8qDQpAQCAtNDE5LDcgKzQyMiwxOSBAQCBzdGF0aWMgdm9pZCBf X2V4aXQgcmRfY2xlYW51cCh2b2lkKQ0KIHN0YXRpYyBpbnQgX19pbml0IHJkX2luaXQodm9pZCkN CiB7DQogCWludCBpOw0KLQlpbnQgZXJyID0gLUVOT01FTTsNCisJaW50IGVycjsNCisNCisJZXJy ID0gYmRpX2luaXQoJnJkX2JhY2tpbmdfZGV2X2luZm8pOw0KKwlpZiAoZXJyKQ0KKwkJZ290byBv dXQyOw0KKw0KKwllcnIgPSBiZGlfaW5pdCgmcmRfZmlsZV9iYWNraW5nX2Rldl9pbmZvKTsNCisJ aWYgKGVycikgew0KKwkJYmRpX2Rlc3Ryb3koJnJkX2JhY2tpbmdfZGV2X2luZm8pOw0KKwkJZ290 byBvdXQyOw0KKwl9DQorDQorCWVyciA9IC1FTk9NRU07DQogDQogCWlmIChyZF9ibG9ja3NpemUg PiBQQUdFX1NJWkUgfHwgcmRfYmxvY2tzaXplIDwgNTEyIHx8DQogCQkJKHJkX2Jsb2Nrc2l6ZSAm IChyZF9ibG9ja3NpemUtMSkpKSB7DQpAQCAtNDczLDYgKzQ4OCw5IEBAIG91dDoNCiAJCXB1dF9k aXNrKHJkX2Rpc2tzW2ldKTsNCiAJCWJsa19jbGVhbnVwX3F1ZXVlKHJkX3F1ZXVlW2ldKTsNCiAJ fQ0KKwliZGlfZGVzdHJveSgmcmRfYmFja2luZ19kZXZfaW5mbyk7DQorCWJkaV9kZXN0cm95KCZy ZF9maWxlX2JhY2tpbmdfZGV2X2luZm8pOw0KK291dDI6DQogCXJldHVybiBlcnI7DQogfQ0KIA0K SW5kZXg6IGxpbnV4LTIuNi9kcml2ZXJzL2NoYXIvbWVtLmMNCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBsaW51 eC0yLjYub3JpZy9kcml2ZXJzL2NoYXIvbWVtLmMNCisrKyBsaW51eC0yLjYvZHJpdmVycy9jaGFy L21lbS5jDQpAQCAtOTc3LDYgKzk3NywxMSBAQCBzdGF0aWMgc3RydWN0IGNsYXNzICptZW1fY2xh c3M7DQogc3RhdGljIGludCBfX2luaXQgY2hyX2Rldl9pbml0KHZvaWQpDQogew0KIAlpbnQgaTsN CisJaW50IGVycjsNCisNCisJZXJyID0gYmRpX2luaXQoJnplcm9fYmRpKTsNCisJaWYgKGVycikN CisJCXJldHVybiBlcnI7DQogDQogCWlmIChyZWdpc3Rlcl9jaHJkZXYoTUVNX01BSk9SLCJtZW0i LCZtZW1vcnlfZm9wcykpDQogCQlwcmludGsoInVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIG1l bW9yeSBkZXZzXG4iLCBNRU1fTUFKT1IpOw0KSW5kZXg6IGxpbnV4LTIuNi9mcy9jaGFyX2Rldi5j DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gbGludXgtMi42Lm9yaWcvZnMvY2hhcl9kZXYuYw0KKysrIGxpbnV4 LTIuNi9mcy9jaGFyX2Rldi5jDQpAQCAtNTQ2LDYgKzU0Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qga29i amVjdCAqYmFzZV9wcm9iZShkZXZfdCANCiB2b2lkIF9faW5pdCBjaHJkZXZfaW5pdCh2b2lkKQ0K IHsNCiAJY2Rldl9tYXAgPSBrb2JqX21hcF9pbml0KGJhc2VfcHJvYmUsICZjaHJkZXZzX2xvY2sp Ow0KKwliZGlfaW5pdCgmZGlyZWN0bHlfbWFwcGFibGVfY2Rldl9iZGkpOw0KIH0NCiANCiANCklu ZGV4OiBsaW51eC0yLjYvZnMvZnVzZS9pbm9kZS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbGludXgtMi42 Lm9yaWcvZnMvZnVzZS9pbm9kZS5jDQorKysgbGludXgtMi42L2ZzL2Z1c2UvaW5vZGUuYw0KQEAg LTQwMSw2ICs0MDEsNyBAQCBzdGF0aWMgaW50IGZ1c2Vfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFf DQogc3RhdGljIHN0cnVjdCBmdXNlX2Nvbm4gKm5ld19jb25uKHZvaWQpDQogew0KIAlzdHJ1Y3Qg ZnVzZV9jb25uICpmYzsNCisJaW50IGVycjsNCiANCiAJZmMgPSBremFsbG9jKHNpemVvZigqZmMp LCBHRlBfS0VSTkVMKTsNCiAJaWYgKGZjKSB7DQpAQCAtNDE2LDEwICs0MTcsMTcgQEAgc3RhdGlj IHN0cnVjdCBmdXNlX2Nvbm4gKm5ld19jb25uKHZvaWQpDQogCQlhdG9taWNfc2V0KCZmYy0+bnVt X3dhaXRpbmcsIDApOw0KIAkJZmMtPmJkaS5yYV9wYWdlcyA9IChWTV9NQVhfUkVBREFIRUFEICog MTAyNCkgLyBQQUdFX0NBQ0hFX1NJWkU7DQogCQlmYy0+YmRpLnVucGx1Z19pb19mbiA9IGRlZmF1 bHRfdW5wbHVnX2lvX2ZuOw0KKwkJZXJyID0gYmRpX2luaXQoJmZjLT5iZGkpOw0KKwkJaWYgKGVy cikgew0KKwkJCWtmcmVlKGZjKTsNCisJCQlmYyA9IE5VTEw7DQorCQkJZ290byBvdXQ7DQorCQl9 DQogCQlmYy0+cmVxY3RyID0gMDsNCiAJCWZjLT5ibG9ja2VkID0gMTsNCiAJCWdldF9yYW5kb21f Ynl0ZXMoJmZjLT5zY3JhbWJsZV9rZXksIHNpemVvZihmYy0+c2NyYW1ibGVfa2V5KSk7DQogCX0N CitvdXQ6DQogCXJldHVybiBmYzsNCiB9DQogDQpAQCAtNDI5LDYgKzQzNyw3IEBAIHZvaWQgZnVz ZV9jb25uX3B1dChzdHJ1Y3QgZnVzZV9jb25uICpmYykNCiAJCWlmIChmYy0+ZGVzdHJveV9yZXEp DQogCQkJZnVzZV9yZXF1ZXN0X2ZyZWUoZmMtPmRlc3Ryb3lfcmVxKTsNCiAJCW11dGV4X2Rlc3Ry b3koJmZjLT5pbnN0X211dGV4KTsNCisJCWJkaV9kZXN0cm95KCZmYy0+YmRpKTsNCiAJCWtmcmVl KGZjKTsNCiAJfQ0KIH0NCkluZGV4OiBsaW51eC0yLjYvZnMvbmZzL2NsaWVudC5jDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gbGludXgtMi42Lm9yaWcvZnMvbmZzL2NsaWVudC5jDQorKysgbGludXgtMi42L2Zz L25mcy9jbGllbnQuYw0KQEAgLTY1OCw2ICs2NTgsNyBAQCBzdGF0aWMgdm9pZCBuZnNfc2VydmVy X3NldF9mc2luZm8oc3RydWN0DQogCWlmIChzZXJ2ZXItPnJzaXplID4gTkZTX01BWF9GSUxFX0lP X1NJWkUpDQogCQlzZXJ2ZXItPnJzaXplID0gTkZTX01BWF9GSUxFX0lPX1NJWkU7DQogCXNlcnZl ci0+cnBhZ2VzID0gKHNlcnZlci0+cnNpemUgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdF X0NBQ0hFX1NISUZUOw0KKw0KIAlzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPSBz ZXJ2ZXItPnJwYWdlcyAqIE5GU19NQVhfUkVBREFIRUFEOw0KIA0KIAlpZiAoc2VydmVyLT53c2l6 ZSA+IG1heF9ycGNfcGF5bG9hZCkNCkBAIC03MDgsNiArNzA5LDEwIEBAIHN0YXRpYyBpbnQgbmZz X3Byb2JlX2ZzaW5mbyhzdHJ1Y3QgbmZzX3MNCiAJCWdvdG8gb3V0X2Vycm9yOw0KIA0KIAluZnNf c2VydmVyX3NldF9mc2luZm8oc2VydmVyLCAmZnNpbmZvKTsNCisJZXJyb3IgPSBiZGlfaW5pdCgm c2VydmVyLT5iYWNraW5nX2Rldl9pbmZvKTsNCisJaWYgKGVycm9yKQ0KKwkJZ290byBvdXRfZXJy b3I7DQorDQogDQogCS8qIEdldCBzb21lIGdlbmVyYWwgZmlsZSBzeXN0ZW0gaW5mbyAqLw0KIAlp ZiAoc2VydmVyLT5uYW1lbGVuID09IDApIHsNCkBAIC03ODcsNiArNzkyLDcgQEAgdm9pZCBuZnNf ZnJlZV9zZXJ2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKg0KIAluZnNfcHV0X2NsaWVudChzZXJ2ZXIt Pm5mc19jbGllbnQpOw0KIA0KIAluZnNfZnJlZV9pb3N0YXRzKHNlcnZlci0+aW9fc3RhdHMpOw0K KwliZGlfZGVzdHJveSgmc2VydmVyLT5iYWNraW5nX2Rldl9pbmZvKTsNCiAJa2ZyZWUoc2VydmVy KTsNCiAJbmZzX3JlbGVhc2VfYXV0b21vdW50X3RpbWVyKCk7DQogCWRwcmludGsoIjwtLSBuZnNf ZnJlZV9zZXJ2ZXIoKVxuIik7DQpJbmRleDogbGludXgtMi42L2ZzL2h1Z2V0bGJmcy9pbm9kZS5j DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gbGludXgtMi42Lm9yaWcvZnMvaHVnZXRsYmZzL2lub2RlLmMNCisr KyBsaW51eC0yLjYvZnMvaHVnZXRsYmZzL2lub2RlLmMNCkBAIC04MDIsMTEgKzgwMiwxNSBAQCBz dGF0aWMgaW50IF9faW5pdCBpbml0X2h1Z2V0bGJmc19mcyh2b2lkDQogCWludCBlcnJvcjsNCiAJ c3RydWN0IHZmc21vdW50ICp2ZnNtb3VudDsNCiANCisJZXJyb3IgPSBiZGlfaW5pdCgmaHVnZXRs YmZzX2JhY2tpbmdfZGV2X2luZm8pOw0KKwlpZiAoZXJyb3IpDQorCQlyZXR1cm4gZXJyb3I7DQor DQogCWh1Z2V0bGJmc19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaHVnZXRsYmZz X2lub2RlX2NhY2hlIiwNCiAJCQkJCXNpemVvZihzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8p LA0KIAkJCQkJMCwgMCwgaW5pdF9vbmNlLCBOVUxMKTsNCiAJaWYgKGh1Z2V0bGJmc19pbm9kZV9j YWNoZXAgPT0gTlVMTCkNCi0JCXJldHVybiAtRU5PTUVNOw0KKwkJZ290byBvdXQyOw0KIA0KIAll cnJvciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmh1Z2V0bGJmc19mc190eXBlKTsNCiAJaWYgKGVy cm9yKQ0KQEAgLTgyNCw2ICs4MjgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2h1Z2V0bGJm c19mcyh2b2lkDQogIG91dDoNCiAJaWYgKGVycm9yKQ0KIAkJa21lbV9jYWNoZV9kZXN0cm95KGh1 Z2V0bGJmc19pbm9kZV9jYWNoZXApOw0KKyBvdXQyOg0KKwliZGlfZGVzdHJveSgmaHVnZXRsYmZz X2JhY2tpbmdfZGV2X2luZm8pOw0KIAlyZXR1cm4gZXJyb3I7DQogfQ0KIA0KQEAgLTgzMSw2ICs4 MzcsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9odWdldGxiZnNfZnModm9pDQogew0KIAlr bWVtX2NhY2hlX2Rlc3Ryb3koaHVnZXRsYmZzX2lub2RlX2NhY2hlcCk7DQogCXVucmVnaXN0ZXJf ZmlsZXN5c3RlbSgmaHVnZXRsYmZzX2ZzX3R5cGUpOw0KKwliZGlfZGVzdHJveSgmaHVnZXRsYmZz X2JhY2tpbmdfZGV2X2luZm8pOw0KIH0NCiANCiBtb2R1bGVfaW5pdChpbml0X2h1Z2V0bGJmc19m cykNCkluZGV4OiBsaW51eC0yLjYvZnMvb2NmczIvZGxtL2RsbWZzLmMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t LSBsaW51eC0yLjYub3JpZy9mcy9vY2ZzMi9kbG0vZGxtZnMuYw0KKysrIGxpbnV4LTIuNi9mcy9v Y2ZzMi9kbG0vZGxtZnMuYw0KQEAgLTU4OCwxMyArNTg4LDE3IEBAIHN0YXRpYyBpbnQgX19pbml0 IGluaXRfZGxtZnNfZnModm9pZCkNCiANCiAJZGxtZnNfcHJpbnRfdmVyc2lvbigpOw0KIA0KKwlz dGF0dXMgPSBiZGlfaW5pdCgmZGxtZnNfYmFja2luZ19kZXZfaW5mbyk7DQorCWlmIChzdGF0dXMp DQorCQlyZXR1cm4gc3RhdHVzOw0KKw0KIAlkbG1mc19pbm9kZV9jYWNoZSA9IGttZW1fY2FjaGVf Y3JlYXRlKCJkbG1mc19pbm9kZV9jYWNoZSIsDQogCQkJCXNpemVvZihzdHJ1Y3QgZGxtZnNfaW5v ZGVfcHJpdmF0ZSksDQogCQkJCTAsIChTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9SRUNMQUlNX0FD Q09VTlR8DQogCQkJCQlTTEFCX01FTV9TUFJFQUQpLA0KIAkJCQlkbG1mc19pbml0X29uY2UsIE5V TEwpOw0KIAlpZiAoIWRsbWZzX2lub2RlX2NhY2hlKQ0KLQkJcmV0dXJuIC1FTk9NRU07DQorCQln b3RvIGJhaWw7DQogCWNsZWFudXBfaW5vZGUgPSAxOw0KIA0KIAl1c2VyX2RsbV93b3JrZXIgPSBj cmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgidXNlcl9kbG0iKTsNCkBAIC02MTEsNiArNjE1 LDcgQEAgYmFpbDoNCiAJCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZGxtZnNfaW5vZGVfY2FjaGUpOw0K IAkJaWYgKGNsZWFudXBfd29ya2VyKQ0KIAkJCWRlc3Ryb3lfd29ya3F1ZXVlKHVzZXJfZGxtX3dv cmtlcik7DQorCQliZGlfZGVzdHJveSgmZGxtZnNfYmFja2luZ19kZXZfaW5mbyk7DQogCX0gZWxz ZQ0KIAkJcHJpbnRrKCJPQ0ZTMiBVc2VyIERMTSBrZXJuZWwgaW50ZXJmYWNlIGxvYWRlZFxuIik7 DQogCXJldHVybiBzdGF0dXM7DQpAQCAtNjI0LDYgKzYyOSw4IEBAIHN0YXRpYyB2b2lkIF9fZXhp dCBleGl0X2RsbWZzX2ZzKHZvaWQpDQogCWRlc3Ryb3lfd29ya3F1ZXVlKHVzZXJfZGxtX3dvcmtl cik7DQogDQogCWttZW1fY2FjaGVfZGVzdHJveShkbG1mc19pbm9kZV9jYWNoZSk7DQorDQorCWJk aV9kZXN0cm95KCZkbG1mc19iYWNraW5nX2Rldl9pbmZvKTsNCiB9DQogDQogTU9EVUxFX0FVVEhP UigiT3JhY2xlIik7DQpJbmRleDogbGludXgtMi42L2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVy bmFsLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSBsaW51eC0yLjYub3JpZy9mcy9jb25maWdmcy9jb25maWdm c19pbnRlcm5hbC5oDQorKysgbGludXgtMi42L2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFs LmgNCkBAIC01NSw2ICs1NSw4IEBAIGV4dGVybiBpbnQgY29uZmlnZnNfaXNfcm9vdChzdHJ1Y3Qg Y29uZmkNCiANCiBleHRlcm4gc3RydWN0IGlub2RlICogY29uZmlnZnNfbmV3X2lub2RlKG1vZGVf dCBtb2RlLCBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICopOw0KIGV4dGVybiBpbnQgY29uZmlnZnNf Y3JlYXRlKHN0cnVjdCBkZW50cnkgKiwgaW50IG1vZGUsIGludCAoKmluaXQpKHN0cnVjdCBpbm9k ZSAqKSk7DQorZXh0ZXJuIGludCBjb25maWdmc19pbm9kZV9pbml0KHZvaWQpOw0KK2V4dGVybiB2 b2lkIGNvbmZpZ2ZzX2lub2RlX2V4aXQodm9pZCk7DQogDQogZXh0ZXJuIGludCBjb25maWdmc19j cmVhdGVfZmlsZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKiwgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2F0 dHJpYnV0ZSAqKTsNCiBleHRlcm4gaW50IGNvbmZpZ2ZzX21ha2VfZGlyZW50KHN0cnVjdCBjb25m aWdmc19kaXJlbnQgKiwNCkluZGV4OiBsaW51eC0yLjYvZnMvY29uZmlnZnMvaW5vZGUuYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIGxpbnV4LTIuNi5vcmlnL2ZzL2NvbmZpZ2ZzL2lub2RlLmMNCisrKyBsaW51 eC0yLjYvZnMvY29uZmlnZnMvaW5vZGUuYw0KQEAgLTI1Niw0ICsyNTYsMTIgQEAgdm9pZCBjb25m aWdmc19oYXNoX2FuZF9yZW1vdmUoc3RydWN0IGRlbg0KIAltdXRleF91bmxvY2soJmRpci0+ZF9p bm9kZS0+aV9tdXRleCk7DQogfQ0KIA0KK2ludCBfX2luaXQgY29uZmlnZnNfaW5vZGVfaW5pdCh2 b2lkKQ0KK3sNCisJcmV0dXJuIGJkaV9pbml0KCZjb25maWdmc19iYWNraW5nX2Rldl9pbmZvKTsN Cit9DQogDQordm9pZCBfX2V4aXQgY29uZmlnZnNfaW5vZGVfZXhpdCh2b2lkKQ0KK3sNCisJYmRp X2Rlc3Ryb3koJmNvbmZpZ2ZzX2JhY2tpbmdfZGV2X2luZm8pOw0KK30NCkluZGV4OiBsaW51eC0y LjYvZnMvY29uZmlnZnMvbW91bnQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxpbnV4LTIuNi5vcmlnL2Zz L2NvbmZpZ2ZzL21vdW50LmMNCisrKyBsaW51eC0yLjYvZnMvY29uZmlnZnMvbW91bnQuYw0KQEAg LTE1NCw4ICsxNTQsMTYgQEAgc3RhdGljIGludCBfX2luaXQgY29uZmlnZnNfaW5pdCh2b2lkKQ0K IAkJc3Vic3lzdGVtX3VucmVnaXN0ZXIoJmNvbmZpZ19zdWJzeXMpOw0KIAkJa21lbV9jYWNoZV9k ZXN0cm95KGNvbmZpZ2ZzX2Rpcl9jYWNoZXApOw0KIAkJY29uZmlnZnNfZGlyX2NhY2hlcCA9IE5V TEw7DQorCQlnb3RvIG91dDsNCiAJfQ0KIA0KKwllcnIgPSBjb25maWdmc19pbm9kZV9pbml0KCk7 DQorCWlmIChlcnIpIHsNCisJCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmY29uZmlnZnNfZnNfdHlw ZSk7DQorCQlzdWJzeXN0ZW1fdW5yZWdpc3RlcigmY29uZmlnX3N1YnN5cyk7DQorCQlrbWVtX2Nh Y2hlX2Rlc3Ryb3koY29uZmlnZnNfZGlyX2NhY2hlcCk7DQorCQljb25maWdmc19kaXJfY2FjaGVw ID0gTlVMTDsNCisJfQ0KIG91dDoNCiAJcmV0dXJuIGVycjsNCiB9DQpAQCAtMTY2LDYgKzE3NCw3 IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBjb25maWdmc19leGl0KHZvaWQpDQogCXN1YnN5c3RlbV91 bnJlZ2lzdGVyKCZjb25maWdfc3Vic3lzKTsNCiAJa21lbV9jYWNoZV9kZXN0cm95KGNvbmZpZ2Zz X2Rpcl9jYWNoZXApOw0KIAljb25maWdmc19kaXJfY2FjaGVwID0gTlVMTDsNCisJY29uZmlnZnNf aW5vZGVfZXhpdCgpOw0KIH0NCiANCiBNT0RVTEVfQVVUSE9SKCJPcmFjbGUiKTsNCkluZGV4OiBs aW51eC0yLjYvZnMvcmFtZnMvaW5vZGUuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxpbnV4LTIuNi5vcmln L2ZzL3JhbWZzL2lub2RlLmMNCisrKyBsaW51eC0yLjYvZnMvcmFtZnMvaW5vZGUuYw0KQEAgLTIy Miw3ICsyMjIsMTcgQEAgbW9kdWxlX2V4aXQoZXhpdF9yYW1mc19mcykNCiANCiBpbnQgX19pbml0 IGluaXRfcm9vdGZzKHZvaWQpDQogew0KLQlyZXR1cm4gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmcm9v dGZzX2ZzX3R5cGUpOw0KKwlpbnQgZXJyOw0KKw0KKwllcnIgPSBiZGlfaW5pdCgmcmFtZnNfYmFj a2luZ19kZXZfaW5mbyk7DQorCWlmIChlcnIpDQorCQlyZXR1cm4gZXJyOw0KKw0KKwllcnIgPSBy ZWdpc3Rlcl9maWxlc3lzdGVtKCZyb290ZnNfZnNfdHlwZSk7DQorCWlmIChlcnIpDQorCQliZGlf ZGVzdHJveSgmcmFtZnNfYmFja2luZ19kZXZfaW5mbyk7DQorDQorCXJldHVybiBlcnI7DQogfQ0K IA0KIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCkluZGV4OiBsaW51eC0yLjYvZnMvc3lzZnMvaW5v ZGUuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGxpbnV4LTIuNi5vcmlnL2ZzL3N5c2ZzL2lub2RlLmMNCisr KyBsaW51eC0yLjYvZnMvc3lzZnMvaW5vZGUuYw0KQEAgLTQ0LDYgKzQ0LDExIEBAIHZvaWQgc3lz ZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW4NCiAJcmV0dXJuIGdlbmVyaWNfZGVsZXRl X2lub2RlKGlub2RlKTsNCiB9DQogDQoraW50IF9faW5pdCBzeXNmc19pbm9kZV9pbml0KHZvaWQp DQorew0KKwlyZXR1cm4gYmRpX2luaXQoJnN5c2ZzX2JhY2tpbmdfZGV2X2luZm8pOw0KK30NCisN CiBpbnQgc3lzZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBzdHJ1Y3QgaWF0dHIg KiBpYXR0cikNCiB7DQogCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZGVudHJ5LT5kX2lub2RlOw0K SW5kZXg6IGxpbnV4LTIuNi9mcy9zeXNmcy9tb3VudC5jDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbGludXgt Mi42Lm9yaWcvZnMvc3lzZnMvbW91bnQuYw0KKysrIGxpbnV4LTIuNi9mcy9zeXNmcy9tb3VudC5j DQpAQCAtOTgsNiArOTgsMTAgQEAgaW50IF9faW5pdCBzeXNmc19pbml0KHZvaWQpDQogCWlmICgh c3lzZnNfZGlyX2NhY2hlcCkNCiAJCWdvdG8gb3V0Ow0KIA0KKwllcnIgPSBzeXNmc19pbm9kZV9p bml0KCk7DQorCWlmIChlcnIpDQorCQlnb3RvIG91dF9lcnI7DQorDQogCWVyciA9IHJlZ2lzdGVy X2ZpbGVzeXN0ZW0oJnN5c2ZzX2ZzX3R5cGUpOw0KIAlpZiAoIWVycikgew0KIAkJc3lzZnNfbW91 bnQgPSBrZXJuX21vdW50KCZzeXNmc19mc190eXBlKTsNCkluZGV4OiBsaW51eC0yLjYvZnMvc3lz ZnMvc3lzZnMuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxpbnV4LTIuNi5vcmlnL2ZzL3N5c2ZzL3N5c2Zz LmgNCisrKyBsaW51eC0yLjYvZnMvc3lzZnMvc3lzZnMuaA0KQEAgLTE3LDYgKzE3LDcgQEAgZXh0 ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpzeXNmc19kaXJfY2FjaA0KIGV4dGVybiB2b2lkIHN5c2Zz X2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsNCiBleHRlcm4gc3RydWN0IGlub2Rl ICogc3lzZnNfbmV3X2lub2RlKG1vZGVfdCBtb2RlLCBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICopOw0K IGV4dGVybiBpbnQgc3lzZnNfY3JlYXRlKHN0cnVjdCBkZW50cnkgKiwgaW50IG1vZGUsIGludCAo KmluaXQpKHN0cnVjdCBpbm9kZSAqKSk7DQorZXh0ZXJuIGludCBzeXNmc19pbm9kZV9pbml0KHZv aWQpOw0KIA0KIGV4dGVybiBpbnQgc3lzZnNfZGlyZW50X2V4aXN0KHN0cnVjdCBzeXNmc19kaXJl bnQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqKTsNCiBleHRlcm4gaW50IHN5c2ZzX21ha2VfZGly ZW50KHN0cnVjdCBzeXNmc19kaXJlbnQgKiwgc3RydWN0IGRlbnRyeSAqLCB2b2lkICosDQpJbmRl eDogbGludXgtMi42L21tL3NobWVtLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBsaW51eC0yLjYub3JpZy9t bS9zaG1lbS5jDQorKysgbGludXgtMi42L21tL3NobWVtLmMNCkBAIC0yNDkwLDYgKzI0OTAsMTAg QEAgc3RhdGljIGludCBfX2luaXQgaW5pdF90bXBmcyh2b2lkKQ0KIHsNCiAJaW50IGVycm9yOw0K IA0KKwllcnJvciA9IGJkaV9pbml0KCZzaG1lbV9iYWNraW5nX2Rldl9pbmZvKTsNCisJaWYgKGVy cm9yKQ0KKwkJZ290byBvdXQ0Ow0KKw0KIAllcnJvciA9IGluaXRfaW5vZGVjYWNoZSgpOw0KIAlp ZiAoZXJyb3IpDQogCQlnb3RvIG91dDM7DQpAQCAtMjUxNCw2ICsyNTE4LDggQEAgb3V0MToNCiBv dXQyOg0KIAlkZXN0cm95X2lub2RlY2FjaGUoKTsNCiBvdXQzOg0KKwliZGlfZGVzdHJveSgmc2ht ZW1fYmFja2luZ19kZXZfaW5mbyk7DQorb3V0NDoNCiAJc2htX21udCA9IEVSUl9QVFIoZXJyb3Ip Ow0KIAlyZXR1cm4gZXJyb3I7DQogfQ0KSW5kZXg6IGxpbnV4LTIuNi9tbS9zd2FwLmMNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSBsaW51eC0yLjYub3JpZy9tbS9zd2FwLmMNCisrKyBsaW51eC0yLjYvbW0vc3dh cC5jDQpAQCAtNTA1LDYgKzUwNSwxMCBAQCB2b2lkIF9faW5pdCBzd2FwX3NldHVwKHZvaWQpDQog ew0KIAl1bnNpZ25lZCBsb25nIG1lZ3MgPSBudW1fcGh5c3BhZ2VzID4+ICgyMCAtIFBBR0VfU0hJ RlQpOw0KIA0KKyNpZmRlZiBDT05GSUdfU1dBUA0KKwliZGlfaW5pdChzd2FwcGVyX3NwYWNlLmJh Y2tpbmdfZGV2X2luZm8pOw0KKyNlbmRpZg0KKw0KIAkvKiBVc2UgYSBzbWFsbGVyIGNsdXN0ZXIg Zm9yIHNtYWxsLW1lbW9yeSBtYWNoaW5lcyAqLw0KIAlpZiAobWVncyA8IDE2KQ0KIAkJcGFnZV9j bHVzdGVyID0gMjsNCkluZGV4OiBsaW51eC0yLjYvbW0vcmVhZGFoZWFkLmMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBsaW51eC0yLjYub3JpZy9tbS9yZWFkYWhlYWQuYw0KKysrIGxpbnV4LTIuNi9tbS9yZWFk YWhlYWQuYw0KQEAgLTc1LDYgKzc1LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByYV9vZmYoc3Ry dWN0IGZpbGVfcmENCiAJcmV0dXJuOw0KIH0NCiANCitzdGF0aWMgaW50IF9faW5pdCByZWFkYWhl YWRfaW5pdCh2b2lkKQ0KK3sNCisJcmV0dXJuIGJkaV9pbml0KCZkZWZhdWx0X2JhY2tpbmdfZGV2 X2luZm8pOw0KK30NCitzdWJzeXNfaW5pdGNhbGwocmVhZGFoZWFkX2luaXQpOw0KKw0KIC8qDQog ICogU2V0IHRoZSBpbml0aWFsIHdpbmRvdyBzaXplLCByb3VuZCB0byBuZXh0IHBvd2VyIG9mIDIg YW5kIHNxdWFyZQ0KICAqIGZvciBzbWFsbCBzaXplLCB4IDQgZm9yIG1lZGl1bSwgYW5kIHggMiBm b3IgbGFyZ2UNCkluZGV4OiBsaW51eC0yLjYvZnMvYnVmZmVyLmMNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBs aW51eC0yLjYub3JpZy9mcy9idWZmZXIuYw0KKysrIGxpbnV4LTIuNi9mcy9idWZmZXIuYw0KQEAg LTcyNiw2ICs3MjYsOCBAQCBpbnQgX19zZXRfcGFnZV9kaXJ0eV9idWZmZXJzKHN0cnVjdCBwYWdl DQogCWlmIChwYWdlLT5tYXBwaW5nKSB7CS8qIFJhY2Ugd2l0aCB0cnVuY2F0ZT8gKi8NCiAJCWlm IChtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKSB7DQogCQkJX19pbmNfem9uZV9w YWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfRElSVFkpOw0KKwkJCV9faW5jX2JkaV9zdGF0KG1hcHBp bmctPmJhY2tpbmdfZGV2X2luZm8sDQorCQkJCQlCRElfUkVDTEFJTUFCTEUpOw0KIAkJCXRhc2tf aW9fYWNjb3VudF93cml0ZShQQUdFX0NBQ0hFX1NJWkUpOw0KIAkJfQ0KIAkJcmFkaXhfdHJlZV90 YWdfc2V0KCZtYXBwaW5nLT5wYWdlX3RyZWUsDQpJbmRleDogbGludXgtMi42L21tL3BhZ2Utd3Jp dGViYWNrLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi0tLSBsaW51eC0yLjYub3JpZy9tbS9wYWdlLXdyaXRlYmFj ay5jDQorKysgbGludXgtMi42L21tL3BhZ2Utd3JpdGViYWNrLmMNCkBAIC0yLDYgKzIsNyBAQA0K ICAqIG1tL3BhZ2Utd3JpdGViYWNrLmMNCiAgKg0KICAqIENvcHlyaWdodCAoQykgMjAwMiwgTGlu dXMgVG9ydmFsZHMuDQorICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4sIFBldGVy IFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPg0KICAqDQogICogQ29udGFpbnMgZnVuY3Rp b25zIHJlbGF0ZWQgdG8gd3JpdGluZyBiYWNrIGRpcnR5IHBhZ2VzIGF0IHRoZQ0KICAqIGFkZHJl c3Nfc3BhY2UgbGV2ZWwuDQpAQCAtNDksOCArNTAsNiBAQA0KICAqLw0KIHN0YXRpYyBsb25nIHJh dGVsaW1pdF9wYWdlcyA9IDMyOw0KIA0KLXN0YXRpYyBpbnQgZGlydHlfZXhjZWVkZWQgX19jYWNo ZWxpbmVfYWxpZ25lZF9pbl9zbXA7CS8qIERpcnR5IG1lbSBtYXkgYmUgb3ZlciBsaW1pdCAqLw0K LQ0KIC8qDQogICogV2hlbiBiYWxhbmNlX2RpcnR5X3BhZ2VzIGRlY2lkZXMgdGhhdCB0aGUgY2Fs bGVyIG5lZWRzIHRvIHBlcmZvcm0gc29tZQ0KICAqIG5vbi1iYWNrZ3JvdW5kIHdyaXRlYmFjaywg dGhpcyBpcyBob3cgbWFueSBwYWdlcyBpdCB3aWxsIGF0dGVtcHQgdG8gd3JpdGUuDQpAQCAtMTAz LDYgKzEwMiwxNDEgQEAgRVhQT1JUX1NZTUJPTChsYXB0b3BfbW9kZSk7DQogc3RhdGljIHZvaWQg YmFja2dyb3VuZF93cml0ZW91dCh1bnNpZ25lZCBsb25nIF9taW5fcGFnZXMpOw0KIA0KIC8qDQor ICogU2NhbGUgdGhlIHdyaXRlYmFjayBjYWNoZSBzaXplIHByb3BvcnRpb25hbCB0byB0aGUgcmVs YXRpdmUgd3JpdGVvdXQgc3BlZWRzLg0KKyAqDQorICogV2UgZG8gdGhpcyBieSBrZWVwaW5nIGEg ZmxvYXRpbmcgcHJvcG9ydGlvbiBiZXR3ZWVuIEJESXMsIGJhc2VkIG9uIHBhZ2UNCisgKiB3cml0 ZWJhY2sgY29tcGxldGlvbnMgW2VuZF9wYWdlX3dyaXRlYmFjaygpXS4gVGhvc2UgZGV2aWNlcyB0 aGF0IHdyaXRlIG91dA0KKyAqIHBhZ2VzIGZhc3Rlc3Qgd2lsbCBnZXQgdGhlIGxhcmdlciBzaGFy ZSwgd2hpbGUgdGhlIHNsb3dlciB3aWxsIGdldCBhIHNtYWxsZXINCisgKiBzaGFyZS4NCisgKg0K KyAqIFdlIHVzZSBwYWdlIHdyaXRlb3V0IGNvbXBsZXRpb25zIGJlY2F1c2Ugd2UgYXJlIGludGVy ZXN0ZWQgaW4gZ2V0dGluZyByaWQgb2YNCisgKiBkaXJ0eSBwYWdlcy4gSGF2aW5nIHRoZW0gd3Jp dHRlbiBvdXQgaXMgdGhlIHByaW1hcnkgZ29hbC4NCisgKg0KKyAqIFdlIGludHJvZHVjZSBhIGNv bmNlcHQgb2YgdGltZSwgYSBwZXJpb2Qgb3ZlciB3aGljaCB3ZSBtZWFzdXJlIHRoZXNlIGV2ZW50 cywNCisgKiBiZWNhdXNlIGRlbWFuZCBjYW4vd2lsbCB2YXJ5IG92ZXIgdGltZS4gVGhlIGxlbmd0 aCBvZiB0aGlzIHBlcmlvZCBpdHNlbGYgaXMNCisgKiBtZWFzdXJlZCBpbiBwYWdlIHdyaXRlYmFj ayBjb21wbGV0aW9ucy4NCisgKg0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3QgcHJvcF9kZXNjcmlwdG9y IHZtX2NvbXBsZXRpb25zOw0KK3N0YXRpYyBzdHJ1Y3QgcHJvcF9kZXNjcmlwdG9yIHZtX2RpcnRp ZXM7DQorDQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZGV0ZXJtaW5lX2RpcnR5YWJsZV9tZW1vcnko dm9pZCk7DQorDQorLyoNCisgKiBjb3VwbGUgdGhlIHBlcmlvZCB0byB0aGUgZGlydHlfcmF0aW86 DQorICoNCisgKiAgIHBlcmlvZC8yIH4gcm91bmR1cF9wb3dfb2ZfdHdvKGRpcnR5IGxpbWl0KQ0K KyAqLw0KK3N0YXRpYyBpbnQgY2FsY19wZXJpb2Rfc2hpZnQodm9pZCkNCit7DQorCXVuc2lnbmVk IGxvbmcgZGlydHlfdG90YWw7DQorDQorCWRpcnR5X3RvdGFsID0gKHZtX2RpcnR5X3JhdGlvICog ZGV0ZXJtaW5lX2RpcnR5YWJsZV9tZW1vcnkoKSkgLyAxMDA7DQorCXJldHVybiAyICsgaWxvZzIo ZGlydHlfdG90YWwgLSAxKTsNCit9DQorDQorLyoNCisgKiB1cGRhdGUgdGhlIHBlcmlvZCB3aGVu IHRoZSBkaXJ0eSByYXRpbyBjaGFuZ2VzLg0KKyAqLw0KK2ludCBkaXJ0eV9yYXRpb19oYW5kbGVy KGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwNCisJCXN0cnVjdCBmaWxlICpmaWxwLCB2b2lk IF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsDQorCQlsb2ZmX3QgKnBwb3MpDQorew0KKwlp bnQgb2xkX3JhdGlvID0gdm1fZGlydHlfcmF0aW87DQorCWludCByZXQgPSBwcm9jX2RvaW50dmVj X21pbm1heCh0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7DQorCWlmIChy ZXQgPT0gMCAmJiB3cml0ZSAmJiB2bV9kaXJ0eV9yYXRpbyAhPSBvbGRfcmF0aW8pIHsNCisJCWlu dCBzaGlmdCA9IGNhbGNfcGVyaW9kX3NoaWZ0KCk7DQorCQlwcm9wX2NoYW5nZV9zaGlmdCgmdm1f Y29tcGxldGlvbnMsIHNoaWZ0KTsNCisJCXByb3BfY2hhbmdlX3NoaWZ0KCZ2bV9kaXJ0aWVzLCBz aGlmdCk7DQorCX0NCisJcmV0dXJuIHJldDsNCit9DQorDQorLyoNCisgKiBJbmNyZW1lbnQgdGhl IEJESSdzIHdyaXRlb3V0IGNvbXBsZXRpb24gY291bnQgYW5kIHRoZSBnbG9iYWwgd3JpdGVvdXQN CisgKiBjb21wbGV0aW9uIGNvdW50LiBDYWxsZWQgZnJvbSB0ZXN0X2NsZWFyX3BhZ2Vfd3JpdGVi YWNrKCkuDQorICovDQorc3RhdGljIGlubGluZSB2b2lkIF9fYmRpX3dyaXRlb3V0X2luYyhzdHJ1 Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQ0KK3sNCisJX19wcm9wX2luY19wZXJjcHUoJnZtX2Nv bXBsZXRpb25zLCAmYmRpLT5jb21wbGV0aW9ucyk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9p ZCB0YXNrX2RpcnR5X2luYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykNCit7DQorCXByb3BfaW5j X3NpbmdsZSgmdm1fZGlydGllcywgJnRzay0+ZGlydGllcyk7DQorfQ0KKw0KKy8qDQorICogT2J0 YWluIGFuIGFjY3VyYXRlIGZyYWN0aW9uIG9mIHRoZSBCREkncyBwb3J0aW9uLg0KKyAqLw0KK3Zv aWQgYmRpX3dyaXRlb3V0X2ZyYWN0aW9uKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksDQor CQlsb25nICpudW1lcmF0b3IsIGxvbmcgKmRlbm9taW5hdG9yKQ0KK3sNCisJaWYgKGJkaV9jYXBf d3JpdGViYWNrX2RpcnR5KGJkaSkpIHsNCisJCXByb3BfZnJhY3Rpb25fcGVyY3B1KCZ2bV9jb21w bGV0aW9ucywgJmJkaS0+Y29tcGxldGlvbnMsDQorCQkJCW51bWVyYXRvciwgZGVub21pbmF0b3Ip Ow0KKwl9IGVsc2Ugew0KKwkJKm51bWVyYXRvciA9IDA7DQorCQkqZGVub21pbmF0b3IgPSAxOw0K Kwl9DQorfQ0KKw0KKy8qDQorICogQ2xpcCB0aGUgZWFybmVkIHNoYXJlIG9mIGRpcnR5IHBhZ2Vz IHRvIHRoYXQgd2hpY2ggaXMgYWN0dWFsbHkgYXZhaWxhYmxlLg0KKyAqIFRoaXMgYXZvaWRzIGV4 Y2VlZGluZyB0aGUgdG90YWwgZGlydHlfbGltaXQgd2hlbiB0aGUgZmxvYXRpbmcgYXZlcmFnZXMN CisgKiBmbHVjdHVhdGUgdG9vIHF1aWNrbHkuDQorICovDQorc3RhdGljIHZvaWQNCitjbGlwX2Jk aV9kaXJ0eV9saW1pdChzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBsb25nIGRpcnR5LCBs b25nICpwYmRpX2RpcnR5KQ0KK3sNCisJbG9uZyBhdmFpbF9kaXJ0eTsNCisNCisJYXZhaWxfZGly dHkgPSBkaXJ0eSAtDQorCQkoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkgKw0KKwkJ IGdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDSykgKw0KKwkJIGdsb2JhbF9wYWdlX3N0YXRl KE5SX1VOU1RBQkxFX05GUykpOw0KKw0KKwlpZiAoYXZhaWxfZGlydHkgPCAwKQ0KKwkJYXZhaWxf ZGlydHkgPSAwOw0KKw0KKwlhdmFpbF9kaXJ0eSArPSBiZGlfc3RhdChiZGksIEJESV9SRUNMQUlN QUJMRSkgKw0KKwkJYmRpX3N0YXQoYmRpLCBCRElfV1JJVEVCQUNLKTsNCisNCisJKnBiZGlfZGly dHkgPSBtaW4oKnBiZGlfZGlydHksIGF2YWlsX2RpcnR5KTsNCit9DQorDQorc3RhdGljIGlubGlu ZSB2b2lkIHRhc2tfZGlydGllc19mcmFjdGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywNCisJ CWxvbmcgKm51bWVyYXRvciwgbG9uZyAqZGVub21pbmF0b3IpDQorew0KKwlwcm9wX2ZyYWN0aW9u X3NpbmdsZSgmdm1fZGlydGllcywgJnRzay0+ZGlydGllcywNCisJCQkJbnVtZXJhdG9yLCBkZW5v bWluYXRvcik7DQorfQ0KKw0KKy8qDQorICogc2NhbGUgdGhlIGRpcnR5IGxpbWl0DQorICoNCisg KiB0YXNrIHNwZWNpZmljIGRpcnR5IGxpbWl0Og0KKyAqDQorICogICBkaXJ0eSAtPSAoZGlydHkv OCkgKiBwX3t0fQ0KKyAqLw0KK3ZvaWQgdGFza19kaXJ0eV9saW1pdChzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRzaywgbG9uZyAqcGRpcnR5KQ0KK3sNCisJbG9uZyBudW1lcmF0b3IsIGRlbm9taW5hdG9y Ow0KKwlsb25nIGRpcnR5ID0gKnBkaXJ0eTsNCisJbG9uZyBsb25nIGludiA9IGRpcnR5ID4+IDM7 DQorDQorCXRhc2tfZGlydGllc19mcmFjdGlvbih0c2ssICZudW1lcmF0b3IsICZkZW5vbWluYXRv cik7DQorCWludiAqPSBudW1lcmF0b3I7DQorCWRvX2RpdihpbnYsIGRlbm9taW5hdG9yKTsNCisN CisJZGlydHkgLT0gaW52Ow0KKwlpZiAoZGlydHkgPCAqcGRpcnR5LzIpDQorCQlkaXJ0eSA9ICpw ZGlydHkvMjsNCisNCisJKnBkaXJ0eSA9IGRpcnR5Ow0KK30NCisNCisvKg0KICAqIFdvcmsgb3V0 IHRoZSBjdXJyZW50IGRpcnR5LW1lbW9yeSBjbGFtcGluZyBhbmQgYmFja2dyb3VuZCB3cml0ZW91 dA0KICAqIHRocmVzaG9sZHMuDQogICoNCkBAIC0xNTcsOSArMjkxLDkgQEAgc3RhdGljIHVuc2ln bmVkIGxvbmcgZGV0ZXJtaW5lX2RpcnR5YWJsZQ0KIAlyZXR1cm4geCArIDE7CS8qIEVuc3VyZSB0 aGF0IHdlIG5ldmVyIHJldHVybiAwICovDQogfQ0KIA0KLXN0YXRpYyB2b2lkDQotZ2V0X2RpcnR5 X2xpbWl0cyhsb25nICpwYmFja2dyb3VuZCwgbG9uZyAqcGRpcnR5LA0KLQkJCQkJc3RydWN0IGFk ZHJlc3Nfc3BhY2UgKm1hcHBpbmcpDQordm9pZA0KK2dldF9kaXJ0eV9saW1pdHMobG9uZyAqcGJh Y2tncm91bmQsIGxvbmcgKnBkaXJ0eSwgbG9uZyAqcGJkaV9kaXJ0eSwNCisJCSBzdHJ1Y3QgYmFj a2luZ19kZXZfaW5mbyAqYmRpKQ0KIHsNCiAJaW50IGJhY2tncm91bmRfcmF0aW87CQkvKiBQZXJj ZW50YWdlcyAqLw0KIAlpbnQgZGlydHlfcmF0aW87DQpAQCAtMTkzLDYgKzMyNywyMyBAQCBnZXRf ZGlydHlfbGltaXRzKGxvbmcgKnBiYWNrZ3JvdW5kLCBsb25nDQogCX0NCiAJKnBiYWNrZ3JvdW5k ID0gYmFja2dyb3VuZDsNCiAJKnBkaXJ0eSA9IGRpcnR5Ow0KKw0KKwlpZiAoYmRpKSB7DQorCQls b25nIGxvbmcgYmRpX2RpcnR5ID0gZGlydHk7DQorCQlsb25nIG51bWVyYXRvciwgZGVub21pbmF0 b3I7DQorDQorCQkvKg0KKwkJICogQ2FsY3VsYXRlIHRoaXMgQkRJJ3Mgc2hhcmUgb2YgdGhlIGRp cnR5IHJhdGlvLg0KKwkJICovDQorCQliZGlfd3JpdGVvdXRfZnJhY3Rpb24oYmRpLCAmbnVtZXJh dG9yLCAmZGVub21pbmF0b3IpOw0KKw0KKwkJYmRpX2RpcnR5ICo9IG51bWVyYXRvcjsNCisJCWRv X2RpdihiZGlfZGlydHksIGRlbm9taW5hdG9yKTsNCisNCisJCSpwYmRpX2RpcnR5ID0gYmRpX2Rp cnR5Ow0KKwkJY2xpcF9iZGlfZGlydHlfbGltaXQoYmRpLCBkaXJ0eSwgcGJkaV9kaXJ0eSk7DQor CQl0YXNrX2RpcnR5X2xpbWl0KGN1cnJlbnQsIHBiZGlfZGlydHkpOw0KKwl9DQogfQ0KIA0KIC8q DQpAQCAtMjA0LDkgKzM1NSwxMSBAQCBnZXRfZGlydHlfbGltaXRzKGxvbmcgKnBiYWNrZ3JvdW5k LCBsb25nDQogICovDQogc3RhdGljIHZvaWQgYmFsYW5jZV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgYWRk cmVzc19zcGFjZSAqbWFwcGluZykNCiB7DQotCWxvbmcgbnJfcmVjbGFpbWFibGU7DQorCWxvbmcg YmRpX25yX3JlY2xhaW1hYmxlOw0KKwlsb25nIGJkaV9ucl93cml0ZWJhY2s7DQogCWxvbmcgYmFj a2dyb3VuZF90aHJlc2g7DQogCWxvbmcgZGlydHlfdGhyZXNoOw0KKwlsb25nIGJkaV90aHJlc2g7 DQogCXVuc2lnbmVkIGxvbmcgcGFnZXNfd3JpdHRlbiA9IDA7DQogCXVuc2lnbmVkIGxvbmcgd3Jp dGVfY2h1bmsgPSBzeW5jX3dyaXRlYmFja19wYWdlcygpOw0KIA0KQEAgLTIyMSwxNSArMzc0LDE1 IEBAIHN0YXRpYyB2b2lkIGJhbGFuY2VfZGlydHlfcGFnZXMoc3RydWN0IGENCiAJCQkucmFuZ2Vf Y3ljbGljCT0gMSwNCiAJCX07DQogDQotCQlnZXRfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kX3Ro cmVzaCwgJmRpcnR5X3RocmVzaCwgbWFwcGluZyk7DQotCQlucl9yZWNsYWltYWJsZSA9IGdsb2Jh bF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpICsNCi0JCQkJCWdsb2JhbF9wYWdlX3N0YXRlKE5S X1VOU1RBQkxFX05GUyk7DQotCQlpZiAobnJfcmVjbGFpbWFibGUgKyBnbG9iYWxfcGFnZV9zdGF0 ZShOUl9XUklURUJBQ0spIDw9DQotCQkJZGlydHlfdGhyZXNoKQ0KKwkJZ2V0X2RpcnR5X2xpbWl0 cygmYmFja2dyb3VuZF90aHJlc2gsICZkaXJ0eV90aHJlc2gsDQorCQkJCSZiZGlfdGhyZXNoLCBi ZGkpOw0KKwkJYmRpX25yX3JlY2xhaW1hYmxlID0gYmRpX3N0YXQoYmRpLCBCRElfUkVDTEFJTUFC TEUpOw0KKwkJYmRpX25yX3dyaXRlYmFjayA9IGJkaV9zdGF0KGJkaSwgQkRJX1dSSVRFQkFDSyk7 DQorCQlpZiAoYmRpX25yX3JlY2xhaW1hYmxlICsgYmRpX25yX3dyaXRlYmFjayA8PSBiZGlfdGhy ZXNoKQ0KIAkJCQlicmVhazsNCiANCi0JCWlmICghZGlydHlfZXhjZWVkZWQpDQotCQkJZGlydHlf ZXhjZWVkZWQgPSAxOw0KKwkJaWYgKCFiZGktPmRpcnR5X2V4Y2VlZGVkKQ0KKwkJCWJkaS0+ZGly dHlfZXhjZWVkZWQgPSAxOw0KIA0KIAkJLyogTm90ZTogbnJfcmVjbGFpbWFibGUgZGVub3RlcyBu cl9kaXJ0eSArIG5yX3Vuc3RhYmxlLg0KIAkJICogVW5zdGFibGUgd3JpdGVzIGFyZSBhIGZlYXR1 cmUgb2YgY2VydGFpbiBuZXR3b3JrZWQNCkBAIC0yMzcsMTYgKzM5MCwzNyBAQCBzdGF0aWMgdm9p ZCBiYWxhbmNlX2RpcnR5X3BhZ2VzKHN0cnVjdCBhDQogCQkgKiB3cml0dGVuIHRvIHRoZSBzZXJ2 ZXIncyB3cml0ZSBjYWNoZSwgYnV0IGhhcyBub3QgeWV0DQogCQkgKiBiZWVuIGZsdXNoZWQgdG8g cGVybWFuZW50IHN0b3JhZ2UuDQogCQkgKi8NCi0JCWlmIChucl9yZWNsYWltYWJsZSkgew0KKwkJ aWYgKGJkaV9ucl9yZWNsYWltYWJsZSkgew0KIAkJCXdyaXRlYmFja19pbm9kZXMoJndiYyk7DQot CQkJZ2V0X2RpcnR5X2xpbWl0cygmYmFja2dyb3VuZF90aHJlc2gsDQotCQkJCQkgCSZkaXJ0eV90 aHJlc2gsIG1hcHBpbmcpOw0KLQkJCW5yX3JlY2xhaW1hYmxlID0gZ2xvYmFsX3BhZ2Vfc3RhdGUo TlJfRklMRV9ESVJUWSkgKw0KLQkJCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZT KTsNCi0JCQlpZiAobnJfcmVjbGFpbWFibGUgKw0KLQkJCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9X UklURUJBQ0spDQotCQkJCQk8PSBkaXJ0eV90aHJlc2gpDQotCQkJCQkJYnJlYWs7DQorDQorCQkJ Z2V0X2RpcnR5X2xpbWl0cygmYmFja2dyb3VuZF90aHJlc2gsICZkaXJ0eV90aHJlc2gsDQorCQkJ CSAgICAgICAmYmRpX3RocmVzaCwgYmRpKTsNCisNCisJCQkvKg0KKwkJCSAqIEluIG9yZGVyIHRv IGF2b2lkIHRoZSBzdGFja2VkIEJESSBkZWFkbG9jayB3ZSBuZWVkDQorCQkJICogdG8gZW5zdXJl IHdlIGFjY3VyYXRlbHkgY291bnQgdGhlICdkaXJ0eScgcGFnZXMgd2hlbg0KKwkJCSAqIHRoZSB0 aHJlc2hvbGQgaXMgbG93Lg0KKwkJCSAqDQorCQkJICogT3RoZXJ3aXNlIGl0IHdvdWxkIGJlIHBv c3NpYmxlIHRvIGdldCB0aHJlc2grbiBwYWdlcw0KKwkJCSAqIHJlcG9ydGVkIGRpcnR5LCBldmVu IHRob3VnaCB0aGVyZSBhcmUgdGhyZXNoLW0gcGFnZXMNCisJCQkgKiBhY3R1YWxseSBkaXJ0eTsg d2l0aCBtK24gc2l0dGluZyBpbiB0aGUgcGVyY3B1DQorCQkJICogZGVsdGFzLg0KKwkJCSAqLw0K KwkJCWlmIChiZGlfdGhyZXNoIDwgMipiZGlfc3RhdF9lcnJvcihiZGkpKSB7DQorCQkJCWJkaV9u cl9yZWNsYWltYWJsZSA9DQorCQkJCQliZGlfc3RhdF9zdW0oYmRpLCBCRElfUkVDTEFJTUFCTEUp Ow0KKwkJCQliZGlfbnJfd3JpdGViYWNrID0NCisJCQkJCWJkaV9zdGF0X3N1bShiZGksIEJESV9X UklURUJBQ0spOw0KKwkJCX0gZWxzZSB7DQorCQkJCWJkaV9ucl9yZWNsYWltYWJsZSA9DQorCQkJ CQliZGlfc3RhdChiZGksIEJESV9SRUNMQUlNQUJMRSk7DQorCQkJCWJkaV9ucl93cml0ZWJhY2sg PQ0KKwkJCQkJYmRpX3N0YXQoYmRpLCBCRElfV1JJVEVCQUNLKTsNCisJCQl9DQorDQorCQkJaWYg KGJkaV9ucl9yZWNsYWltYWJsZSArIGJkaV9ucl93cml0ZWJhY2sgPD0gYmRpX3RocmVzaCkNCisJ CQkJYnJlYWs7DQorDQogCQkJcGFnZXNfd3JpdHRlbiArPSB3cml0ZV9jaHVuayAtIHdiYy5ucl90 b193cml0ZTsNCiAJCQlpZiAocGFnZXNfd3JpdHRlbiA+PSB3cml0ZV9jaHVuaykNCiAJCQkJYnJl YWs7CQkvKiBXZSd2ZSBkb25lIG91ciBkdXR5ICovDQpAQCAtMjU0LDkgKzQyOCw5IEBAIHN0YXRp YyB2b2lkIGJhbGFuY2VfZGlydHlfcGFnZXMoc3RydWN0IGENCiAJCWNvbmdlc3Rpb25fd2FpdChX UklURSwgSFovMTApOw0KIAl9DQogDQotCWlmIChucl9yZWNsYWltYWJsZSArIGdsb2JhbF9wYWdl X3N0YXRlKE5SX1dSSVRFQkFDSykNCi0JCTw9IGRpcnR5X3RocmVzaCAmJiBkaXJ0eV9leGNlZWRl ZCkNCi0JCQlkaXJ0eV9leGNlZWRlZCA9IDA7DQorCWlmIChiZGlfbnJfcmVjbGFpbWFibGUgKyBi ZGlfbnJfd3JpdGViYWNrIDwgYmRpX3RocmVzaCAmJg0KKwkJCWJkaS0+ZGlydHlfZXhjZWVkZWQp DQorCQliZGktPmRpcnR5X2V4Y2VlZGVkID0gMDsNCiANCiAJaWYgKHdyaXRlYmFja19pbl9wcm9n cmVzcyhiZGkpKQ0KIAkJcmV0dXJuOwkJLyogcGRmbHVzaCBpcyBhbHJlYWR5IHdvcmtpbmcgdGhp cyBxdWV1ZSAqLw0KQEAgLTI3MCw3ICs0NDQsOSBAQCBzdGF0aWMgdm9pZCBiYWxhbmNlX2RpcnR5 X3BhZ2VzKHN0cnVjdCBhDQogCSAqIGJhY2tncm91bmRfdGhyZXNoLCB0byBrZWVwIHRoZSBhbW91 bnQgb2YgZGlydHkgbWVtb3J5IGxvdy4NCiAJICovDQogCWlmICgobGFwdG9wX21vZGUgJiYgcGFn ZXNfd3JpdHRlbikgfHwNCi0JICAgICAoIWxhcHRvcF9tb2RlICYmIChucl9yZWNsYWltYWJsZSA+ IGJhY2tncm91bmRfdGhyZXNoKSkpDQorCQkJKCFsYXB0b3BfbW9kZSAmJiAoZ2xvYmFsX3BhZ2Vf c3RhdGUoTlJfRklMRV9ESVJUWSkNCisJCQkJCSAgKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNU QUJMRV9ORlMpDQorCQkJCQkgID4gYmFja2dyb3VuZF90aHJlc2gpKSkNCiAJCXBkZmx1c2hfb3Bl cmF0aW9uKGJhY2tncm91bmRfd3JpdGVvdXQsIDApOw0KIH0NCiANCkBAIC0zMDYsNyArNDgyLDcg QEAgdm9pZCBiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkX25yKA0KIAl1bnNpZ25lZCBs b25nICpwOw0KIA0KIAlyYXRlbGltaXQgPSByYXRlbGltaXRfcGFnZXM7DQotCWlmIChkaXJ0eV9l eGNlZWRlZCkNCisJaWYgKG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8tPmRpcnR5X2V4Y2VlZGVk KQ0KIAkJcmF0ZWxpbWl0ID0gODsNCiANCiAJLyoNCkBAIC0zNDIsNyArNTE4LDcgQEAgdm9pZCB0 aHJvdHRsZV92bV93cml0ZW91dChnZnBfdCBnZnBfbWFzaw0KIAl9DQogDQogICAgICAgICBmb3Ig KCA7IDsgKSB7DQotCQlnZXRfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kX3RocmVzaCwgJmRpcnR5 X3RocmVzaCwgTlVMTCk7DQorCQlnZXRfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kX3RocmVzaCwg JmRpcnR5X3RocmVzaCwgTlVMTCwgTlVMTCk7DQogDQogICAgICAgICAgICAgICAgIC8qDQogICAg ICAgICAgICAgICAgICAqIEJvb3N0IHRoZSBhbGxvd2FibGUgZGlydHkgdGhyZXNob2xkIGEgYml0 IGZvciBwYWdlDQpAQCAtMzc3LDcgKzU1Myw3IEBAIHN0YXRpYyB2b2lkIGJhY2tncm91bmRfd3Jp dGVvdXQodW5zaWduZWQNCiAJCWxvbmcgYmFja2dyb3VuZF90aHJlc2g7DQogCQlsb25nIGRpcnR5 X3RocmVzaDsNCiANCi0JCWdldF9kaXJ0eV9saW1pdHMoJmJhY2tncm91bmRfdGhyZXNoLCAmZGly dHlfdGhyZXNoLCBOVUxMKTsNCisJCWdldF9kaXJ0eV9saW1pdHMoJmJhY2tncm91bmRfdGhyZXNo LCAmZGlydHlfdGhyZXNoLCBOVUxMLCBOVUxMKTsNCiAJCWlmIChnbG9iYWxfcGFnZV9zdGF0ZShO Ul9GSUxFX0RJUlRZKSArDQogCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSA8 IGJhY2tncm91bmRfdGhyZXNoDQogCQkJCSYmIG1pbl9wYWdlcyA8PSAwKQ0KQEAgLTU4Miw5ICs3 NTgsMTUgQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYQ0KICAqLw0K IHZvaWQgX19pbml0IHBhZ2Vfd3JpdGViYWNrX2luaXQodm9pZCkNCiB7DQorCWludCBzaGlmdDsN CisNCiAJbW9kX3RpbWVyKCZ3Yl90aW1lciwgamlmZmllcyArIGRpcnR5X3dyaXRlYmFja19pbnRl cnZhbCk7DQogCXdyaXRlYmFja19zZXRfcmF0ZWxpbWl0KCk7DQogCXJlZ2lzdGVyX2NwdV9ub3Rp ZmllcigmcmF0ZWxpbWl0X25iKTsNCisNCisJc2hpZnQgPSBjYWxjX3BlcmlvZF9zaGlmdCgpOw0K Kwlwcm9wX2Rlc2NyaXB0b3JfaW5pdCgmdm1fY29tcGxldGlvbnMsIHNoaWZ0KTsNCisJcHJvcF9k ZXNjcmlwdG9yX2luaXQoJnZtX2RpcnRpZXMsIHNoaWZ0KTsNCiB9DQogDQogLyoqDQpAQCAtODI4 LDYgKzEwMTAsOCBAQCBpbnQgX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMoc3RydWN0IHBhDQog CQkJQlVHX09OKG1hcHBpbmcyICE9IG1hcHBpbmcpOw0KIAkJCWlmIChtYXBwaW5nX2NhcF9hY2Nv dW50X2RpcnR5KG1hcHBpbmcpKSB7DQogCQkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBO Ul9GSUxFX0RJUlRZKTsNCisJCQkJX19pbmNfYmRpX3N0YXQobWFwcGluZy0+YmFja2luZ19kZXZf aW5mbywNCisJCQkJCQlCRElfUkVDTEFJTUFCTEUpOw0KIAkJCQl0YXNrX2lvX2FjY291bnRfd3Jp dGUoUEFHRV9DQUNIRV9TSVpFKTsNCiAJCQl9DQogCQkJcmFkaXhfdHJlZV90YWdfc2V0KCZtYXBw aW5nLT5wYWdlX3RyZWUsDQpAQCAtODYwLDcgKzEwNDQsNyBAQCBFWFBPUlRfU1lNQk9MKHJlZGly dHlfcGFnZV9mb3Jfd3JpdGVwYWdlDQogICogSWYgdGhlIG1hcHBpbmcgZG9lc24ndCBwcm92aWRl IGEgc2V0X3BhZ2VfZGlydHkgYV9vcCwgdGhlbg0KICAqIGp1c3QgZmFsbCB0aHJvdWdoIGFuZCBh c3N1bWUgdGhhdCBpdCB3YW50cyBidWZmZXJfaGVhZHMuDQogICovDQotaW50IGZhc3RjYWxsIHNl dF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKQ0KK3N0YXRpYyBpbnQgX19zZXRfcGFnZV9k aXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSkNCiB7DQogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBw aW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOw0KIA0KQEAgLTg3OCw2ICsxMDYyLDE0IEBAIGludCBm YXN0Y2FsbCBzZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSANCiAJfQ0KIAlyZXR1cm4gMDsNCiB9 DQorDQoraW50IGZhc3RjYWxsIHNldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKQ0KK3sN CisJaW50IHJldCA9IF9fc2V0X3BhZ2VfZGlydHkocGFnZSk7DQorCWlmIChyZXQpDQorCQl0YXNr X2RpcnR5X2luYyhjdXJyZW50KTsNCisJcmV0dXJuIHJldDsNCit9DQogRVhQT1JUX1NZTUJPTChz ZXRfcGFnZV9kaXJ0eSk7DQogDQogLyoNCkBAIC05NTQsNiArMTE0Niw4IEBAIGludCBjbGVhcl9w YWdlX2RpcnR5X2Zvcl9pbyhzdHJ1Y3QgcGFnZSANCiAJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsN CiAJCWlmIChUZXN0Q2xlYXJQYWdlRGlydHkocGFnZSkpIHsNCiAJCQlkZWNfem9uZV9wYWdlX3N0 YXRlKHBhZ2UsIE5SX0ZJTEVfRElSVFkpOw0KKwkJCWRlY19iZGlfc3RhdChtYXBwaW5nLT5iYWNr aW5nX2Rldl9pbmZvLA0KKwkJCQkJQkRJX1JFQ0xBSU1BQkxFKTsNCiAJCQlyZXR1cm4gMTsNCiAJ CX0NCiAJCXJldHVybiAwOw0KQEAgLTk2OCwxNCArMTE2MiwyMCBAQCBpbnQgdGVzdF9jbGVhcl9w YWdlX3dyaXRlYmFjayhzdHJ1Y3QgcGFnDQogCWludCByZXQ7DQogDQogCWlmIChtYXBwaW5nKSB7 DQorCQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gbWFwcGluZy0+YmFja2luZ19kZXZf aW5mbzsNCiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQogDQogCQl3cml0ZV9sb2NrX2lycXNhdmUo Jm1hcHBpbmctPnRyZWVfbG9jaywgZmxhZ3MpOw0KIAkJcmV0ID0gVGVzdENsZWFyUGFnZVdyaXRl YmFjayhwYWdlKTsNCi0JCWlmIChyZXQpDQorCQlpZiAocmV0KSB7DQogCQkJcmFkaXhfdHJlZV90 YWdfY2xlYXIoJm1hcHBpbmctPnBhZ2VfdHJlZSwNCiAJCQkJCQlwYWdlX2luZGV4KHBhZ2UpLA0K IAkJCQkJCVBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKTsNCisJCQlpZiAoYmRpX2NhcF93cml0ZWJh Y2tfZGlydHkoYmRpKSkgew0KKwkJCQlfX2RlY19iZGlfc3RhdChiZGksIEJESV9XUklURUJBQ0sp Ow0KKwkJCQlfX2JkaV93cml0ZW91dF9pbmMoYmRpKTsNCisJCQl9DQorCQl9DQogCQl3cml0ZV91 bmxvY2tfaXJxcmVzdG9yZSgmbWFwcGluZy0+dHJlZV9sb2NrLCBmbGFncyk7DQogCX0gZWxzZSB7 DQogCQlyZXQgPSBUZXN0Q2xlYXJQYWdlV3JpdGViYWNrKHBhZ2UpOw0KQEAgLTk4OSwxNCArMTE4 OSwxOCBAQCBpbnQgdGVzdF9zZXRfcGFnZV93cml0ZWJhY2soc3RydWN0IHBhZ2UgDQogCWludCBy ZXQ7DQogDQogCWlmIChtYXBwaW5nKSB7DQorCQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRp ID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsNCiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQog DQogCQl3cml0ZV9sb2NrX2lycXNhdmUoJm1hcHBpbmctPnRyZWVfbG9jaywgZmxhZ3MpOw0KIAkJ cmV0ID0gVGVzdFNldFBhZ2VXcml0ZWJhY2socGFnZSk7DQotCQlpZiAoIXJldCkNCisJCWlmICgh cmV0KSB7DQogCQkJcmFkaXhfdHJlZV90YWdfc2V0KCZtYXBwaW5nLT5wYWdlX3RyZWUsDQogCQkJ CQkJcGFnZV9pbmRleChwYWdlKSwNCiAJCQkJCQlQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSyk7DQor CQkJaWYgKGJkaV9jYXBfd3JpdGViYWNrX2RpcnR5KGJkaSkpDQorCQkJCV9faW5jX2JkaV9zdGF0 KGJkaSwgQkRJX1dSSVRFQkFDSyk7DQorCQl9DQogCQlpZiAoIVBhZ2VEaXJ0eShwYWdlKSkNCiAJ CQlyYWRpeF90cmVlX3RhZ19jbGVhcigmbWFwcGluZy0+cGFnZV90cmVlLA0KIAkJCQkJCXBhZ2Vf aW5kZXgocGFnZSksDQpJbmRleDogbGludXgtMi42L21tL3RydW5jYXRlLmMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBsaW51eC0yLjYub3JpZy9tbS90cnVuY2F0ZS5jDQorKysgbGludXgtMi42L21tL3RydW5j YXRlLmMNCkBAIC03Miw2ICs3Miw4IEBAIHZvaWQgY2FuY2VsX2RpcnR5X3BhZ2Uoc3RydWN0IHBh Z2UgKnBhZ2UNCiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGlu ZzsNCiAJCWlmIChtYXBwaW5nICYmIG1hcHBpbmdfY2FwX2FjY291bnRfZGlydHkobWFwcGluZykp IHsNCiAJCQlkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfRElSVFkpOw0KKwkJCWRl Y19iZGlfc3RhdChtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLA0KKwkJCQkJQkRJX1JFQ0xBSU1B QkxFKTsNCiAJCQlpZiAoYWNjb3VudF9zaXplKQ0KIAkJCQl0YXNrX2lvX2FjY291bnRfY2FuY2Vs bGVkX3dyaXRlKGFjY291bnRfc2l6ZSk7DQogCQl9DQpJbmRleDogbGludXgtMi42L2xpYi9wcm9w b3J0aW9ucy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gL2Rldi9udWxsDQorKysgbGludXgtMi42L2xpYi9w cm9wb3J0aW9ucy5jDQpAQCAtMCwwICsxLDM4NSBAQA0KKy8qDQorICogRkxvYXRpbmcgcHJvcG9y dGlvbnMNCisgKg0KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiwgUGV0ZXIg WmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+DQorICoNCisgKiBEZXNjcmlwdGlvbjoNCisg Kg0KKyAqIFRoZSBmbG9hdGluZyBwcm9wb3J0aW9uIGlzIGEgdGltZSBkZXJpdmF0aXZlIHdpdGgg YW4gZXhwb25lbnRpYWxseSBkZWNheWluZw0KKyAqIGhpc3Rvcnk6DQorICoNCisgKiAgIHBfe2p9 ID0gXFN1bV97aT0wfSAoZHhfe2p9L2R0X3staX0pIC8gMl4oMStpKQ0KKyAqDQorICogV2hlcmUg aiBpcyBhbiBlbGVtZW50IGZyb20ge3Byb3BfbG9jYWx9LCB4X3tqfSBpcyBqJ3MgbnVtYmVyIG9m IGV2ZW50cywNCisgKiBhbmQgaSB0aGUgdGltZSBwZXJpb2Qgb3ZlciB3aGljaCB0aGUgZGlmZmVy ZW50aWFsIGlzIHRha2VuLiBTbyBkL2R0X3staX0gaXMNCisgKiB0aGUgZGlmZmVyZW50aWFsIG92 ZXIgdGhlIGktdGggbGFzdCBwZXJpb2QuDQorICoNCisgKiBUaGUgZGVjYXlpbmcgaGlzdG9yeSBn aXZlcyBzbW9vdGggdHJhbnNpdGlvbnMuIFRoZSB0aW1lIGRpZmZlcmVudGlhbCBjYXJyaWVzDQor ICogdGhlIG5vdGlvbiBvZiBzcGVlZC4NCisgKg0KKyAqIFRoZSBkZW5vbWluYXRvciBpcyAyXigx K2kpIGJlY2F1c2Ugd2Ugd2FudCB0aGUgc2VyaWVzIHRvIGJlIG5vcm1hbGlzZWQsIGllLg0KKyAq DQorICogICBcU3VtX3tpPTB9IDEvMl4oMStpKSA9IDENCisgKg0KKyAqIEZ1cnRoZXIgbW9yZSwg aWYgd2UgbWVhc3VyZSB0aW1lICh0KSBpbiB0aGUgc2FtZSBldmVudHMgYXMgeDsgc28gdGhhdDoN CisgKg0KKyAqICAgdCA9IFxTdW1fe2p9IHhfe2p9DQorICoNCisgKiB3ZSBnZXQgdGhhdDoNCisg Kg0KKyAqICAgXFN1bV97an0gcF97an0gPSAxDQorICoNCisgKiBXcml0aW5nIHRoaXMgaW4gYW4g aXRlcmF0aXZlIGZhc2hpb24gd2UgZ2V0IChkcm9wcGluZyB0aGUgJ2Qncyk6DQorICoNCisgKiAg IGlmICgrK3hfe2p9LCArK3QgPiBwZXJpb2QpDQorICogICAgIHQgLz0gMjsNCisgKiAgICAgZm9y X2VhY2ggKGopDQorICogICAgICAgeF97an0gLz0gMjsNCisgKg0KKyAqIHNvIHRoYXQ6DQorICoN CisgKiAgIHBfe2p9ID0geF97an0gLyB0Ow0KKyAqDQorICogV2Ugb3B0aW1pemUgYXdheSB0aGUg Jy89IDInIGZvciB0aGUgZ2xvYmFsIHRpbWUgZGVsdGEgYnkgbm90aW5nIHRoYXQ6DQorICoNCisg KiAgIGlmICgrK3QgPiBwZXJpb2QpIHQgLz0gMjoNCisgKg0KKyAqIENhbiBiZSBhcHByb3hpbWF0 ZWQgYnk6DQorICoNCisgKiAgIHBlcmlvZC8yICsgKCsrdCAlIHBlcmlvZC8yKQ0KKyAqDQorICog WyBGdXJ0aGVybW9yZSwgd2hlbiB3ZSBjaG9vc2UgcGVyaW9kIHRvIGJlIDJebiBpdCBjYW4gYmUg d3JpdHRlbiBpbiB0ZXJtcyBvZg0KKyAqICAgYmluYXJ5IG9wZXJhdGlvbnMgYW5kIHdyYXBhcm91 bmQgYXJ0ZWZhY3RzIGRpc2FwcGVhci4gXQ0KKyAqDQorICogQWxzbyBub3RlIHRoYXQgdGhpcyB5 aWVsZHMgYSBuYXR1cmFsIGNvdW50ZXIgb2YgdGhlIGVsYXBzZWQgcGVyaW9kczoNCisgKg0KKyAq ICAgYyA9IHQgLyAocGVyaW9kLzIpDQorICoNCisgKiBbIEl0cyBtb25vdG9uaWMgaW5jcmVhc2lu ZyBwcm9wZXJ0eSBjYW4gYmUgYXBwbGllZCB0byBtaXRpZ2F0ZSB0aGUgd3JhcC0NCisgKiAgIGFy b3VuZCBpc3N1ZS4gXQ0KKyAqDQorICogVGhpcyBhbGxvd3MgdXMgdG8gZG8gYXdheSB3aXRoIHRo ZSBsb29wIG92ZXIgYWxsIHByb3BfbG9jYWxzIG9uIGVhY2ggcGVyaW9kDQorICogZXhwaXJhdGlv bi4gQnkgcmVtZW1iZXJpbmcgdGhlIHBlcmlvZCBjb3VudCB1bmRlciB3aGljaCBpdCB3YXMgbGFz dCBhY2Nlc3NlZA0KKyAqIGFzIGNfe2p9LCB3ZSBjYW4gb2J0YWluIHRoZSBudW1iZXIgb2YgJ21p c3NlZCcgY3ljbGVzIGZyb206DQorICoNCisgKiAgIGMgLSBjX3tqfQ0KKyAqDQorICogV2UgY2Fu IHRoZW4gbGF6aWx5IGNhdGNoIHVwIHRvIHRoZSBnbG9iYWwgcGVyaW9kIGNvdW50IGV2ZXJ5IHRp bWUgd2UgYXJlDQorICogZ29pbmcgdG8gdXNlIHhfe2p9LCBieSBkb2luZzoNCisgKg0KKyAqICAg eF97an0gLz0gMl4oYyAtIGNfe2p9KSwgY197an0gPSBjDQorICovDQorDQorI2luY2x1ZGUgPGxp bnV4L3Byb3BvcnRpb25zLmg+DQorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+DQorDQorLyoN CisgKiBMaW1pdCB0aGUgdGltZSBwYXJ0IGluIG9yZGVyIHRvIGVuc3VyZSB0aGVyZSBhcmUgc29t ZSBiaXRzIGxlZnQgZm9yIHRoZQ0KKyAqIGN5Y2xlIGNvdW50ZXIuDQorICovDQorI2RlZmluZSBQ Uk9QX01BWF9TSElGVCAoMypCSVRTX1BFUl9MT05HLzQpDQorDQoraW50IHByb3BfZGVzY3JpcHRv cl9pbml0KHN0cnVjdCBwcm9wX2Rlc2NyaXB0b3IgKnBkLCBpbnQgc2hpZnQpDQorew0KKwlpbnQg ZXJyOw0KKw0KKwlpZiAoc2hpZnQgPiBQUk9QX01BWF9TSElGVCkNCisJCXNoaWZ0ID0gUFJPUF9N QVhfU0hJRlQ7DQorDQorCXBkLT5pbmRleCA9IDA7DQorCXBkLT5wZ1swXS5zaGlmdCA9IHNoaWZ0 Ow0KKwltdXRleF9pbml0KCZwZC0+bXV0ZXgpOw0KKwllcnIgPSBwZXJjcHVfY291bnRlcl9pbml0 X2lycSgmcGQtPnBnWzBdLmV2ZW50cywgMCk7DQorCWlmIChlcnIpDQorCQlnb3RvIG91dDsNCisN CisJZXJyID0gcGVyY3B1X2NvdW50ZXJfaW5pdF9pcnEoJnBkLT5wZ1sxXS5ldmVudHMsIDApOw0K KwlpZiAoZXJyKQ0KKwkJcGVyY3B1X2NvdW50ZXJfZGVzdHJveSgmcGQtPnBnWzBdLmV2ZW50cyk7 DQorDQorb3V0Og0KKwlyZXR1cm4gZXJyOw0KK30NCisNCisvKg0KKyAqIFdlIGhhdmUgdHdvIGNv cGllcywgYW5kIGZsaXAgYmV0d2VlbiB0aGVtIHRvIG1ha2UgaXQgc2VlbSBsaWtlIGFuIGF0b21p Yw0KKyAqIHVwZGF0ZS4gVGhlIHVwZGF0ZSBpcyBub3QgcmVhbGx5IGF0b21pYyB3cnQgdGhlIGV2 ZW50cyBjb3VudGVyLCBidXQNCisgKiBpdCBpcyBpbnRlcm5hbGx5IGNvbnNpc3RlbnQgd2l0aCB0 aGUgYml0IGxheW91dCBkZXBlbmRpbmcgb24gc2hpZnQuDQorICoNCisgKiBXZSBjb3B5IHRoZSBl dmVudHMgY291bnQsIG1vdmUgdGhlIGJpdHMgYXJvdW5kIGFuZCBmbGlwIHRoZSBpbmRleC4NCisg Ki8NCit2b2lkIHByb3BfY2hhbmdlX3NoaWZ0KHN0cnVjdCBwcm9wX2Rlc2NyaXB0b3IgKnBkLCBp bnQgc2hpZnQpDQorew0KKwlpbnQgaW5kZXg7DQorCWludCBvZmZzZXQ7DQorCXU2NCBldmVudHM7 DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCWlmIChzaGlmdCA+IFBST1BfTUFYX1NISUZU KQ0KKwkJc2hpZnQgPSBQUk9QX01BWF9TSElGVDsNCisNCisJbXV0ZXhfbG9jaygmcGQtPm11dGV4 KTsNCisNCisJaW5kZXggPSBwZC0+aW5kZXggXiAxOw0KKwlvZmZzZXQgPSBwZC0+cGdbcGQtPmlu ZGV4XS5zaGlmdCAtIHNoaWZ0Ow0KKwlpZiAoIW9mZnNldCkNCisJCWdvdG8gb3V0Ow0KKw0KKwlw ZC0+cGdbaW5kZXhdLnNoaWZ0ID0gc2hpZnQ7DQorDQorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsN CisJZXZlbnRzID0gcGVyY3B1X2NvdW50ZXJfc3VtKCZwZC0+cGdbcGQtPmluZGV4XS5ldmVudHMp Ow0KKwlpZiAob2Zmc2V0IDwgMCkNCisJCWV2ZW50cyA8PD0gLW9mZnNldDsNCisJZWxzZQ0KKwkJ ZXZlbnRzID4+PSBvZmZzZXQ7DQorCXBlcmNwdV9jb3VudGVyX3NldCgmcGQtPnBnW2luZGV4XS5l dmVudHMsIGV2ZW50cyk7DQorDQorCS8qDQorCSAqIGVuc3VyZSB0aGUgbmV3IHBnIGlzIGZ1bGx5 IHdyaXR0ZW4gYmVmb3JlIHRoZSBzd2l0Y2gNCisJICovDQorCXNtcF93bWIoKTsNCisJcGQtPmlu ZGV4ID0gaW5kZXg7DQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsNCisNCisJc3luY2hyb25p emVfcmN1KCk7DQorDQorb3V0Og0KKwltdXRleF91bmxvY2soJnBkLT5tdXRleCk7DQorfQ0KKw0K Ky8qDQorICogd3JhcCB0aGUgYWNjZXNzIHRvIHRoZSBkYXRhIGluIGFuIHJjdV9yZWFkX2xvY2so KSBzZWN0aW9uOw0KKyAqIHRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHJlZmVyZW5j ZXMuDQorICovDQorc3RhdGljIHN0cnVjdCBwcm9wX2dsb2JhbCAqcHJvcF9nZXRfZ2xvYmFsKHN0 cnVjdCBwcm9wX2Rlc2NyaXB0b3IgKnBkKQ0KK3sNCisJaW50IGluZGV4Ow0KKw0KKwlyY3VfcmVh ZF9sb2NrKCk7DQorCWluZGV4ID0gcGQtPmluZGV4Ow0KKwkvKg0KKwkgKiBtYXRjaCB0aGUgd21i IGZyb20gdmNkX2ZsaXAoKQ0KKwkgKi8NCisJc21wX3JtYigpOw0KKwlyZXR1cm4gJnBkLT5wZ1tp bmRleF07DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHByb3BfcHV0X2dsb2JhbChzdHJ1Y3QgcHJvcF9k ZXNjcmlwdG9yICpwZCwgc3RydWN0IHByb3BfZ2xvYmFsICpwZykNCit7DQorCXJjdV9yZWFkX3Vu bG9jaygpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK3Byb3BfYWRqdXN0X3NoaWZ0KGludCAqcGxf c2hpZnQsIHVuc2lnbmVkIGxvbmcgKnBsX3BlcmlvZCwgaW50IG5ld19zaGlmdCkNCit7DQorCWlu dCBvZmZzZXQgPSAqcGxfc2hpZnQgLSBuZXdfc2hpZnQ7DQorDQorCWlmICghb2Zmc2V0KQ0KKwkJ cmV0dXJuOw0KKw0KKwlpZiAob2Zmc2V0IDwgMCkNCisJCSpwbF9wZXJpb2QgPDw9IC1vZmZzZXQ7 DQorCWVsc2UNCisJCSpwbF9wZXJpb2QgPj49IG9mZnNldDsNCisNCisJKnBsX3NoaWZ0ID0gbmV3 X3NoaWZ0Ow0KK30NCisNCisvKg0KKyAqIFBFUkNQVQ0KKyAqLw0KKw0KK2ludCBwcm9wX2xvY2Fs X2luaXRfcGVyY3B1KHN0cnVjdCBwcm9wX2xvY2FsX3BlcmNwdSAqcGwpDQorew0KKwlzcGluX2xv Y2tfaW5pdCgmcGwtPmxvY2spOw0KKwlwbC0+c2hpZnQgPSAwOw0KKwlwbC0+cGVyaW9kID0gMDsN CisJcmV0dXJuIHBlcmNwdV9jb3VudGVyX2luaXRfaXJxKCZwbC0+ZXZlbnRzLCAwKTsNCit9DQor DQordm9pZCBwcm9wX2xvY2FsX2Rlc3Ryb3lfcGVyY3B1KHN0cnVjdCBwcm9wX2xvY2FsX3BlcmNw dSAqcGwpDQorew0KKwlwZXJjcHVfY291bnRlcl9kZXN0cm95KCZwbC0+ZXZlbnRzKTsNCit9DQor DQorLyoNCisgKiBDYXRjaCB1cCB3aXRoIG1pc3NlZCBwZXJpb2QgZXhwaXJhdGlvbnMuDQorICoN CisgKiAgIHVudGlsIChjX3tqfSA9PSBjKQ0KKyAqICAgICB4X3tqfSAtPSB4X3tqfS8yOw0KKyAq ICAgICBjX3tqfSsrOw0KKyAqLw0KK3N0YXRpYw0KK3ZvaWQgcHJvcF9ub3JtX3BlcmNwdShzdHJ1 Y3QgcHJvcF9nbG9iYWwgKnBnLCBzdHJ1Y3QgcHJvcF9sb2NhbF9wZXJjcHUgKnBsKQ0KK3sNCisJ dW5zaWduZWQgbG9uZyBwZXJpb2QgPSAxVUwgPDwgKHBnLT5zaGlmdCAtIDEpOw0KKwl1bnNpZ25l ZCBsb25nIHBlcmlvZF9tYXNrID0gfihwZXJpb2QgLSAxKTsNCisJdW5zaWduZWQgbG9uZyBnbG9i YWxfcGVyaW9kOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKw0KKwlnbG9iYWxfcGVyaW9kID0g cGVyY3B1X2NvdW50ZXJfcmVhZCgmcGctPmV2ZW50cyk7DQorCWdsb2JhbF9wZXJpb2QgJj0gcGVy aW9kX21hc2s7DQorDQorCS8qDQorCSAqIEZhc3QgcGF0aCAtIGNoZWNrIGlmIHRoZSBsb2NhbCBh bmQgZ2xvYmFsIHBlcmlvZCBjb3VudCBzdGlsbCBtYXRjaA0KKwkgKiBvdXRzaWRlIG9mIHRoZSBs b2NrLg0KKwkgKi8NCisJaWYgKHBsLT5wZXJpb2QgPT0gZ2xvYmFsX3BlcmlvZCkNCisJCXJldHVy bjsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBsLT5sb2NrLCBmbGFncyk7DQorCXByb3BfYWRq dXN0X3NoaWZ0KCZwbC0+c2hpZnQsICZwbC0+cGVyaW9kLCBwZy0+c2hpZnQpOw0KKwlwZXJpb2Qg PSAxVUwgPDwgKHBnLT5zaGlmdCAtIDEpOw0KKwkvKg0KKwkgKiBGb3IgZWFjaCBtaXNzZWQgcGVy aW9kLCB3ZSBoYWxmIHRoZSBsb2NhbCBjb3VudGVyLg0KKwkgKiBiYXNpY2FsbHk6DQorCSAqICAg cGwtPmV2ZW50cyA+PiAoZ2xvYmFsX3BlcmlvZCAtIHBsLT5wZXJpb2QpOw0KKwkgKg0KKwkgKiBi dXQgc2luY2UgdGhlIGRpc3RyaWJ1dGVkIG5hdHVyZSBvZiBwZXJjcHUgY291bnRlcnMgbWFrZSBk aXZpc2lvbg0KKwkgKiByYXRoZXIgaGFyZCwgdXNlIGEgcmVndWxhciBzdWJ0cmFjdGlvbiBsb29w LiBUaGlzIGlzIHNhZmUsIGJlY2F1c2UNCisJICogdGhlIGV2ZW50cyB3aWxsIG9ubHkgZXZlcnkg YmUgaW5jcmVtZW50ZWQsIGhlbmNlIHRoZSBzdWJ0cmFjdGlvbg0KKwkgKiBjYW4gbmV2ZXIgcmVz dWx0IGluIGEgbmVnYXRpdmUgbnVtYmVyLg0KKwkgKi8NCisJd2hpbGUgKHBsLT5wZXJpb2QgIT0g Z2xvYmFsX3BlcmlvZCkgew0KKwkJdW5zaWduZWQgbG9uZyB2YWwgPSBwZXJjcHVfY291bnRlcl9y ZWFkKCZwbC0+ZXZlbnRzKTsNCisJCXVuc2lnbmVkIGxvbmcgaGFsZiA9ICh2YWwgKyAxKSA+PiAx Ow0KKw0KKwkJLyoNCisJCSAqIEhhbGYgb2YgemVybyB3b24ndCBiZSBtdWNoIGxlc3MsIGJyZWFr IG91dC4NCisJCSAqIFRoaXMgbGltaXRzIHRoZSBsb29wIHRvIHNoaWZ0IGl0ZXJhdGlvbnMsIGV2 ZW4NCisJCSAqIGlmIHdlIG1pc3NlZCBhIG1pbGxpb24uDQorCQkgKi8NCisJCWlmICghdmFsKQ0K KwkJCWJyZWFrOw0KKw0KKwkJcGVyY3B1X2NvdW50ZXJfYWRkKCZwbC0+ZXZlbnRzLCAtaGFsZik7 DQorCQlwbC0+cGVyaW9kICs9IHBlcmlvZDsNCisJfQ0KKwlwbC0+cGVyaW9kID0gZ2xvYmFsX3Bl cmlvZDsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGwtPmxvY2ssIGZsYWdzKTsNCit9DQor DQorLyoNCisgKiAgICsreF97an0sICsrdA0KKyAqLw0KK3ZvaWQgX19wcm9wX2luY19wZXJjcHUo c3RydWN0IHByb3BfZGVzY3JpcHRvciAqcGQsIHN0cnVjdCBwcm9wX2xvY2FsX3BlcmNwdSAqcGwp DQorew0KKwlzdHJ1Y3QgcHJvcF9nbG9iYWwgKnBnID0gcHJvcF9nZXRfZ2xvYmFsKHBkKTsNCisN CisJcHJvcF9ub3JtX3BlcmNwdShwZywgcGwpOw0KKwlwZXJjcHVfY291bnRlcl9hZGQoJnBsLT5l dmVudHMsIDEpOw0KKwlwZXJjcHVfY291bnRlcl9hZGQoJnBnLT5ldmVudHMsIDEpOw0KKwlwcm9w X3B1dF9nbG9iYWwocGQsIHBnKTsNCit9DQorDQorLyoNCisgKiBPYnRhaW4gYW4gZnJhY3Rpb24g b2YgdGhpcyBwcm9wb3J0aW9uDQorICoNCisgKiAgIHBfe2p9ID0geF97an0gLyAocGVyaW9kLzIg KyB0ICUgcGVyaW9kLzIpDQorICovDQordm9pZCBwcm9wX2ZyYWN0aW9uX3BlcmNwdShzdHJ1Y3Qg cHJvcF9kZXNjcmlwdG9yICpwZCwNCisJCXN0cnVjdCBwcm9wX2xvY2FsX3BlcmNwdSAqcGwsDQor CQlsb25nICpudW1lcmF0b3IsIGxvbmcgKmRlbm9taW5hdG9yKQ0KK3sNCisJc3RydWN0IHByb3Bf Z2xvYmFsICpwZyA9IHByb3BfZ2V0X2dsb2JhbChwZCk7DQorCXVuc2lnbmVkIGxvbmcgcGVyaW9k XzIgPSAxVUwgPDwgKHBnLT5zaGlmdCAtIDEpOw0KKwl1bnNpZ25lZCBsb25nIGNvdW50ZXJfbWFz ayA9IHBlcmlvZF8yIC0gMTsNCisJdW5zaWduZWQgbG9uZyBnbG9iYWxfY291bnQ7DQorDQorCXBy b3Bfbm9ybV9wZXJjcHUocGcsIHBsKTsNCisJKm51bWVyYXRvciA9IHBlcmNwdV9jb3VudGVyX3Jl YWRfcG9zaXRpdmUoJnBsLT5ldmVudHMpOw0KKw0KKwlnbG9iYWxfY291bnQgPSBwZXJjcHVfY291 bnRlcl9yZWFkKCZwZy0+ZXZlbnRzKTsNCisJKmRlbm9taW5hdG9yID0gcGVyaW9kXzIgKyAoZ2xv YmFsX2NvdW50ICYgY291bnRlcl9tYXNrKTsNCisNCisJcHJvcF9wdXRfZ2xvYmFsKHBkLCBwZyk7 DQorfQ0KKw0KKy8qDQorICogU0lOR0xFDQorICovDQorDQoraW50IHByb3BfbG9jYWxfaW5pdF9z aW5nbGUoc3RydWN0IHByb3BfbG9jYWxfc2luZ2xlICpwbCkNCit7DQorCXNwaW5fbG9ja19pbml0 KCZwbC0+bG9jayk7DQorCXBsLT5zaGlmdCA9IDA7DQorCXBsLT5wZXJpb2QgPSAwOw0KKwlwbC0+ ZXZlbnRzID0gMDsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgcHJvcF9sb2NhbF9kZXN0cm95 X3NpbmdsZShzdHJ1Y3QgcHJvcF9sb2NhbF9zaW5nbGUgKnBsKQ0KK3sNCit9DQorDQorLyoNCisg KiBDYXRjaCB1cCB3aXRoIG1pc3NlZCBwZXJpb2QgZXhwaXJhdGlvbnMuDQorICovDQorc3RhdGlj DQordm9pZCBwcm9wX25vcm1fc2luZ2xlKHN0cnVjdCBwcm9wX2dsb2JhbCAqcGcsIHN0cnVjdCBw cm9wX2xvY2FsX3NpbmdsZSAqcGwpDQorew0KKwl1bnNpZ25lZCBsb25nIHBlcmlvZCA9IDFVTCA8 PCAocGctPnNoaWZ0IC0gMSk7DQorCXVuc2lnbmVkIGxvbmcgcGVyaW9kX21hc2sgPSB+KHBlcmlv ZCAtIDEpOw0KKwl1bnNpZ25lZCBsb25nIGdsb2JhbF9wZXJpb2Q7DQorCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7DQorDQorCWdsb2JhbF9wZXJpb2QgPSBwZXJjcHVfY291bnRlcl9yZWFkKCZwZy0+ZXZl bnRzKTsNCisJZ2xvYmFsX3BlcmlvZCAmPSBwZXJpb2RfbWFzazsNCisNCisJLyoNCisJICogRmFz dCBwYXRoIC0gY2hlY2sgaWYgdGhlIGxvY2FsIGFuZCBnbG9iYWwgcGVyaW9kIGNvdW50IHN0aWxs IG1hdGNoDQorCSAqIG91dHNpZGUgb2YgdGhlIGxvY2suDQorCSAqLw0KKwlpZiAocGwtPnBlcmlv ZCA9PSBnbG9iYWxfcGVyaW9kKQ0KKwkJcmV0dXJuOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgm cGwtPmxvY2ssIGZsYWdzKTsNCisJcHJvcF9hZGp1c3Rfc2hpZnQoJnBsLT5zaGlmdCwgJnBsLT5w ZXJpb2QsIHBnLT5zaGlmdCk7DQorCS8qDQorCSAqIEZvciBlYWNoIG1pc3NlZCBwZXJpb2QsIHdl IGhhbGYgdGhlIGxvY2FsIGNvdW50ZXIuDQorCSAqLw0KKwlwZXJpb2QgPSAoZ2xvYmFsX3Blcmlv ZCAtIHBsLT5wZXJpb2QpID4+IChwZy0+c2hpZnQgLSAxKTsNCisJaWYgKGxpa2VseShwZXJpb2Qg PCBCSVRTX1BFUl9MT05HKSkNCisJCXBsLT5ldmVudHMgPj49IHBlcmlvZDsNCisJZWxzZQ0KKwkJ cGwtPmV2ZW50cyA9IDA7DQorCXBsLT5wZXJpb2QgPSBnbG9iYWxfcGVyaW9kOw0KKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZwbC0+bG9jaywgZmxhZ3MpOw0KK30NCisNCisvKg0KKyAqICAgKyt4 X3tqfSwgKyt0DQorICovDQordm9pZCBfX3Byb3BfaW5jX3NpbmdsZShzdHJ1Y3QgcHJvcF9kZXNj cmlwdG9yICpwZCwgc3RydWN0IHByb3BfbG9jYWxfc2luZ2xlICpwbCkNCit7DQorCXN0cnVjdCBw cm9wX2dsb2JhbCAqcGcgPSBwcm9wX2dldF9nbG9iYWwocGQpOw0KKw0KKwlwcm9wX25vcm1fc2lu Z2xlKHBnLCBwbCk7DQorCXBsLT5ldmVudHMrKzsNCisJcGVyY3B1X2NvdW50ZXJfYWRkKCZwZy0+ ZXZlbnRzLCAxKTsNCisJcHJvcF9wdXRfZ2xvYmFsKHBkLCBwZyk7DQorfQ0KKw0KKy8qDQorICog T2J0YWluIGFuIGZyYWN0aW9uIG9mIHRoaXMgcHJvcG9ydGlvbg0KKyAqDQorICogICBwX3tqfSA9 IHhfe2p9IC8gKHBlcmlvZC8yICsgdCAlIHBlcmlvZC8yKQ0KKyAqLw0KK3ZvaWQgcHJvcF9mcmFj dGlvbl9zaW5nbGUoc3RydWN0IHByb3BfZGVzY3JpcHRvciAqcGQsDQorCSAgICAgICAJc3RydWN0 IHByb3BfbG9jYWxfc2luZ2xlICpwbCwNCisJCWxvbmcgKm51bWVyYXRvciwgbG9uZyAqZGVub21p bmF0b3IpDQorew0KKwlzdHJ1Y3QgcHJvcF9nbG9iYWwgKnBnID0gcHJvcF9nZXRfZ2xvYmFsKHBk KTsNCisJdW5zaWduZWQgbG9uZyBwZXJpb2RfMiA9IDFVTCA8PCAocGctPnNoaWZ0IC0gMSk7DQor CXVuc2lnbmVkIGxvbmcgY291bnRlcl9tYXNrID0gcGVyaW9kXzIgLSAxOw0KKwl1bnNpZ25lZCBs b25nIGdsb2JhbF9jb3VudDsNCisNCisJcHJvcF9ub3JtX3NpbmdsZShwZywgcGwpOw0KKwkqbnVt ZXJhdG9yID0gcGwtPmV2ZW50czsNCisNCisJZ2xvYmFsX2NvdW50ID0gcGVyY3B1X2NvdW50ZXJf cmVhZCgmcGctPmV2ZW50cyk7DQorCSpkZW5vbWluYXRvciA9IHBlcmlvZF8yICsgKGdsb2JhbF9j b3VudCAmIGNvdW50ZXJfbWFzayk7DQorDQorCXByb3BfcHV0X2dsb2JhbChwZCwgcGcpOw0KK30N CkluZGV4OiBsaW51eC0yLjYvaW5jbHVkZS9saW51eC9wcm9wb3J0aW9ucy5oDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gL2Rldi9udWxsDQorKysgbGludXgtMi42L2luY2x1ZGUvbGludXgvcHJvcG9ydGlvbnMu aA0KQEAgLTAsMCArMSwxMTkgQEANCisvKg0KKyAqIEZMb2F0aW5nIHByb3BvcnRpb25zDQorICoN CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxw emlqbHN0ckByZWRoYXQuY29tPg0KKyAqDQorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwdWJs aWMgZGF0YSBzdHJ1Y3R1cmUgYW5kIEFQSSBkZWZpbml0aW9ucy4NCisgKi8NCisNCisjaWZuZGVm IF9MSU5VWF9QUk9QT1JUSU9OU19IDQorI2RlZmluZSBfTElOVVhfUFJPUE9SVElPTlNfSA0KKw0K KyNpbmNsdWRlIDxsaW51eC9wZXJjcHVfY291bnRlci5oPg0KKyNpbmNsdWRlIDxsaW51eC9zcGlu bG9jay5oPg0KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KKw0KK3N0cnVjdCBwcm9wX2dsb2Jh bCB7DQorCS8qDQorCSAqIFRoZSBwZXJpb2Qgb3ZlciB3aGljaCB3ZSBkaWZmZXJlbnRpYXRlDQor CSAqDQorCSAqICAgcGVyaW9kID0gMl5zaGlmdA0KKwkgKi8NCisJaW50IHNoaWZ0Ow0KKwkvKg0K KwkgKiBUaGUgdG90YWwgZXZlbnQgY291bnRlciBha2EgJ3RpbWUnLg0KKwkgKg0KKwkgKiBUcmVh dGVkIGFzIGFuIHVuc2lnbmVkIGxvbmc7IHRoZSBsb3dlciAnc2hpZnQgLSAxJyBiaXRzIGFyZSB0 aGUNCisJICogY291bnRlciBiaXRzLCB0aGUgcmVtYWluaW5nIHVwcGVyIGJpdHMgdGhlIHBlcmlv ZCBjb3VudGVyLg0KKwkgKi8NCisJc3RydWN0IHBlcmNwdV9jb3VudGVyIGV2ZW50czsNCit9Ow0K Kw0KKy8qDQorICogZ2xvYmFsIHByb3BvcnRpb24gZGVzY3JpcHRvcg0KKyAqDQorICogdGhpcyBp cyBuZWVkZWQgdG8gY29uc2l0ZW50bHkgZmxpcCBwcm9wX2dsb2JhbCBzdHJ1Y3R1cmVzLg0KKyAq Lw0KK3N0cnVjdCBwcm9wX2Rlc2NyaXB0b3Igew0KKwlpbnQgaW5kZXg7DQorCXN0cnVjdCBwcm9w X2dsb2JhbCBwZ1syXTsNCisJc3RydWN0IG11dGV4IG11dGV4OwkJLyogc2VyaWFsaXplIHRoZSBw cm9wX2dsb2JhbCBzd2l0Y2ggKi8NCit9Ow0KKw0KK2ludCBwcm9wX2Rlc2NyaXB0b3JfaW5pdChz dHJ1Y3QgcHJvcF9kZXNjcmlwdG9yICpwZCwgaW50IHNoaWZ0KTsNCit2b2lkIHByb3BfY2hhbmdl X3NoaWZ0KHN0cnVjdCBwcm9wX2Rlc2NyaXB0b3IgKnBkLCBpbnQgbmV3X3NoaWZ0KTsNCisNCisv Kg0KKyAqIC0tLS0tIFBFUkNQVSAtLS0tLS0NCisgKi8NCisNCitzdHJ1Y3QgcHJvcF9sb2NhbF9w ZXJjcHUgew0KKwkvKg0KKwkgKiB0aGUgbG9jYWwgZXZlbnRzIGNvdW50ZXINCisJICovDQorCXN0 cnVjdCBwZXJjcHVfY291bnRlciBldmVudHM7DQorDQorCS8qDQorCSAqIHNuYXBzaG90IG9mIHRo ZSBsYXN0IHNlZW4gZ2xvYmFsIHN0YXRlDQorCSAqLw0KKwlpbnQgc2hpZnQ7DQorCXVuc2lnbmVk IGxvbmcgcGVyaW9kOw0KKwlzcGlubG9ja190IGxvY2s7CQkvKiBwcm90ZWN0IHRoZSBzbmFwc2hv dCBzdGF0ZSAqLw0KK307DQorDQoraW50IHByb3BfbG9jYWxfaW5pdF9wZXJjcHUoc3RydWN0IHBy b3BfbG9jYWxfcGVyY3B1ICpwbCk7DQordm9pZCBwcm9wX2xvY2FsX2Rlc3Ryb3lfcGVyY3B1KHN0 cnVjdCBwcm9wX2xvY2FsX3BlcmNwdSAqcGwpOw0KK3ZvaWQgX19wcm9wX2luY19wZXJjcHUoc3Ry dWN0IHByb3BfZGVzY3JpcHRvciAqcGQsIHN0cnVjdCBwcm9wX2xvY2FsX3BlcmNwdSAqcGwpOw0K K3ZvaWQgcHJvcF9mcmFjdGlvbl9wZXJjcHUoc3RydWN0IHByb3BfZGVzY3JpcHRvciAqcGQsIHN0 cnVjdCBwcm9wX2xvY2FsX3BlcmNwdSAqcGwsDQorCQlsb25nICpudW1lcmF0b3IsIGxvbmcgKmRl bm9taW5hdG9yKTsNCisNCitzdGF0aWMgaW5saW5lDQordm9pZCBwcm9wX2luY19wZXJjcHUoc3Ry dWN0IHByb3BfZGVzY3JpcHRvciAqcGQsIHN0cnVjdCBwcm9wX2xvY2FsX3BlcmNwdSAqcGwpDQor ew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKw0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7DQor CV9fcHJvcF9pbmNfcGVyY3B1KHBkLCBwbCk7DQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsN Cit9DQorDQorLyoNCisgKiAtLS0tLSBTSU5HTEUgLS0tLS0tDQorICovDQorDQorc3RydWN0IHBy b3BfbG9jYWxfc2luZ2xlIHsNCisJLyoNCisJICogdGhlIGxvY2FsIGV2ZW50cyBjb3VudGVyDQor CSAqLw0KKwl1bnNpZ25lZCBsb25nIGV2ZW50czsNCisNCisJLyoNCisJICogc25hcHNob3Qgb2Yg dGhlIGxhc3Qgc2VlbiBnbG9iYWwgc3RhdGUNCisJICogYW5kIGEgbG9jayBwcm90ZWN0aW5nIHRo aXMgc3RhdGUNCisJICovDQorCWludCBzaGlmdDsNCisJdW5zaWduZWQgbG9uZyBwZXJpb2Q7DQor CXNwaW5sb2NrX3QgbG9jazsJCS8qIHByb3RlY3QgdGhlIHNuYXBzaG90IHN0YXRlICovDQorfTsN CisNCisjZGVmaW5lIElOSVRfUFJPUF9MT0NBTF9TSU5HTEUobmFtZSkJCQlcDQorewkubG9jayA9 IF9fU1BJTl9MT0NLX1VOTE9DS0VEKG5hbWUubG9jayksCVwNCit9DQorDQoraW50IHByb3BfbG9j YWxfaW5pdF9zaW5nbGUoc3RydWN0IHByb3BfbG9jYWxfc2luZ2xlICpwbCk7DQordm9pZCBwcm9w X2xvY2FsX2Rlc3Ryb3lfc2luZ2xlKHN0cnVjdCBwcm9wX2xvY2FsX3NpbmdsZSAqcGwpOw0KK3Zv aWQgX19wcm9wX2luY19zaW5nbGUoc3RydWN0IHByb3BfZGVzY3JpcHRvciAqcGQsIHN0cnVjdCBw cm9wX2xvY2FsX3NpbmdsZSAqcGwpOw0KK3ZvaWQgcHJvcF9mcmFjdGlvbl9zaW5nbGUoc3RydWN0 IHByb3BfZGVzY3JpcHRvciAqcGQsIHN0cnVjdCBwcm9wX2xvY2FsX3NpbmdsZSAqcGwsDQorCQls b25nICpudW1lcmF0b3IsIGxvbmcgKmRlbm9taW5hdG9yKTsNCisNCitzdGF0aWMgaW5saW5lDQor dm9pZCBwcm9wX2luY19zaW5nbGUoc3RydWN0IHByb3BfZGVzY3JpcHRvciAqcGQsIHN0cnVjdCBw cm9wX2xvY2FsX3NpbmdsZSAqcGwpDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKw0KKwls b2NhbF9pcnFfc2F2ZShmbGFncyk7DQorCV9fcHJvcF9pbmNfc2luZ2xlKHBkLCBwbCk7DQorCWxv Y2FsX2lycV9yZXN0b3JlKGZsYWdzKTsNCit9DQorDQorI2VuZGlmIC8qIF9MSU5VWF9QUk9QT1JU SU9OU19IICovDQpJbmRleDogbGludXgtMi42L2xpYi9NYWtlZmlsZQ0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IGxpbnV4LTIuNi5vcmlnL2xpYi9NYWtlZmlsZQ0KKysrIGxpbnV4LTIuNi9saWIvTWFrZWZpbGUN CkBAIC01LDcgKzUsOCBAQA0KIGxpYi15IDo9IGN0eXBlLm8gc3RyaW5nLm8gdnNwcmludGYubyBj bWRsaW5lLm8gXA0KIAkgcmJ0cmVlLm8gcmFkaXgtdHJlZS5vIGR1bXBfc3RhY2subyBcDQogCSBp ZHIubyBpbnRfc3FydC5vIGJpdG1hcC5vIGV4dGFibGUubyBwcmlvX3RyZWUubyBcDQotCSBzaGEx Lm8gaXJxX3JlZ3MubyByZWNpcHJvY2FsX2Rpdi5vDQorCSBzaGExLm8gaXJxX3JlZ3MubyByZWNp cHJvY2FsX2Rpdi5vIFwNCisJIHByb3BvcnRpb25zLm8NCiANCiBsaWItJChDT05GSUdfTU1VKSAr PSBpb3JlbWFwLm8NCiBsaWItJChDT05GSUdfU01QKSArPSBjcHVtYXNrLm8NCkluZGV4OiBsaW51 eC0yLjYva2VybmVsL3N5c2N0bC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbGludXgtMi42Lm9yaWcva2Vy bmVsL3N5c2N0bC5jDQorKysgbGludXgtMi42L2tlcm5lbC9zeXNjdGwuYw0KQEAgLTE2MCw2ICsx NjAsMTAgQEAgZXh0ZXJuIGN0bF90YWJsZSBpbm90aWZ5X3RhYmxlW107DQogaW50IHN5c2N0bF9s ZWdhY3lfdmFfbGF5b3V0Ow0KICNlbmRpZg0KIA0KK2V4dGVybiBpbnQgZGlydHlfcmF0aW9faGFu ZGxlcihjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsDQorCQlzdHJ1Y3QgZmlsZSAqZmlscCwg dm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLA0KKwkJbG9mZl90ICpwcG9zKTsNCisN CiANCiAvKiBUaGUgZGVmYXVsdCBzeXNjdGwgdGFibGVzOiAqLw0KIA0KQEAgLTY3NSw3ICs2Nzks NyBAQCBzdGF0aWMgY3RsX3RhYmxlIHZtX3RhYmxlW10gPSB7DQogCQkuZGF0YQkJPSAmdm1fZGly dHlfcmF0aW8sDQogCQkubWF4bGVuCQk9IHNpemVvZih2bV9kaXJ0eV9yYXRpbyksDQogCQkubW9k ZQkJPSAwNjQ0LA0KLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwNCisJ CS5wcm9jX2hhbmRsZXIJPSAmZGlydHlfcmF0aW9faGFuZGxlciwNCiAJCS5zdHJhdGVneQk9ICZz eXNjdGxfaW50dmVjLA0KIAkJLmV4dHJhMQkJPSAmemVybywNCiAJCS5leHRyYTIJCT0gJm9uZV9o dW5kcmVkLA0KSW5kZXg6IGxpbnV4LTIuNi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCi0tLSBsaW51eC0yLjYub3JpZy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgNCisrKyBsaW51eC0y LjYvaW5jbHVkZS9saW51eC9zY2hlZC5oDQpAQCAtODMsNiArODMsNyBAQCBzdHJ1Y3Qgc2NoZWRf cGFyYW0gew0KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPg0KICNpbmNsdWRlIDxsaW51eC9ocnRp bWVyLmg+DQogI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZy5oPg0KKyNpbmNsdWRl IDxsaW51eC9wcm9wb3J0aW9ucy5oPg0KIA0KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+DQog DQpAQCAtMTA3Niw2ICsxMDc3LDcgQEAgc3RydWN0IHRhc2tfc3RydWN0IHsNCiAjaWZkZWYgQ09O RklHX0ZBVUxUX0lOSkVDVElPTg0KIAlpbnQgbWFrZV9pdF9mYWlsOw0KICNlbmRpZg0KKwlzdHJ1 Y3QgcHJvcF9sb2NhbF9zaW5nbGUgZGlydGllczsNCiB9Ow0KIA0KIHN0YXRpYyBpbmxpbmUgcGlk X3QgcHJvY2Vzc19ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykNCkluZGV4OiBsaW51eC0y LjYva2VybmVsL2ZvcmsuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxpbnV4LTIuNi5vcmlnL2tlcm5lbC9m b3JrLmMNCisrKyBsaW51eC0yLjYva2VybmVsL2ZvcmsuYw0KQEAgLTEwNiw2ICsxMDYsNyBAQCBz dGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1tX2NhY2hlcDsNCiANCiB2b2lkIGZyZWVfdGFzayhz dHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykNCiB7DQorCXByb3BfbG9jYWxfZGVzdHJveV9zaW5nbGUo JnRzay0+ZGlydGllcyk7DQogCWZyZWVfdGhyZWFkX2luZm8odHNrLT5zdGFjayk7DQogCXJ0X211 dGV4X2RlYnVnX3Rhc2tfZnJlZSh0c2spOw0KIAlmcmVlX3Rhc2tfc3RydWN0KHRzayk7DQpAQCAt MTYyLDYgKzE2Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmR1cF90YXNrX3N0cnUN CiB7DQogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOw0KIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRp Ow0KKwlpbnQgZXJyOw0KIA0KIAlwcmVwYXJlX3RvX2NvcHkob3JpZyk7DQogDQpAQCAtMTc3LDYg KzE3OSwxNCBAQCBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpkdXBfdGFza19zdHJ1DQogDQog CSp0c2sgPSAqb3JpZzsNCiAJdHNrLT5zdGFjayA9IHRpOw0KKw0KKwllcnIgPSBwcm9wX2xvY2Fs X2luaXRfc2luZ2xlKCZ0c2stPmRpcnRpZXMpOw0KKwlpZiAoZXJyKSB7DQorCQlmcmVlX3RocmVh ZF9pbmZvKHRpKTsNCisJCWZyZWVfdGFza19zdHJ1Y3QodHNrKTsNCisJCXJldHVybiBOVUxMOw0K Kwl9DQorDQogCXNldHVwX3RocmVhZF9zdGFjayh0c2ssIG9yaWcpOw0KIA0KICNpZmRlZiBDT05G SUdfQ0NfU1RBQ0tQUk9URUNUT1INCkluZGV4OiBsaW51eC0yLjYvaW5jbHVkZS9saW51eC9pbml0 X3Rhc2suaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGxpbnV4LTIuNi5vcmlnL2luY2x1ZGUvbGludXgvaW5p dF90YXNrLmgNCisrKyBsaW51eC0yLjYvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaA0KQEAgLTE2 Nyw2ICsxNjcsNyBAQCBleHRlcm4gc3RydWN0IGdyb3VwX2luZm8gaW5pdF9ncm91cHM7DQogCQlb UElEVFlQRV9QR0lEXSA9IElOSVRfUElEX0xJTksoUElEVFlQRV9QR0lEKSwJCVwNCiAJCVtQSURU WVBFX1NJRF0gID0gSU5JVF9QSURfTElOSyhQSURUWVBFX1NJRCksCQlcDQogCX0sCQkJCQkJCQlc DQorCS5kaXJ0aWVzID0gSU5JVF9QUk9QX0xPQ0FMX1NJTkdMRShkaXJ0aWVzKSwJCQlcDQogCUlO SVRfVFJBQ0VfSVJRRkxBR1MJCQkJCQlcDQogCUlOSVRfTE9DS0RFUAkJCQkJCQlcDQogfQ0K --=-SZ/QRSavFo1Z4isrVmnh-- --=-HT1+pPlPpvQvV4W+cIiB Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQBGzcbnXA2jU0ANEf4RAnJqAJ0SY+rYiF2WJOBYVBYdQt9wuG5XqACfUyKY Fpox1VZibaKt1Tz1Aghm93o= =mVV4 -----END PGP SIGNATURE----- --=-HT1+pPlPpvQvV4W+cIiB-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/