From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S264507AbTL0RVT (ORCPT ); Sat, 27 Dec 2003 12:21:19 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S264508AbTL0RVT (ORCPT ); Sat, 27 Dec 2003 12:21:19 -0500 Received: from wblv-224-192.telkomadsl.co.za ([165.165.224.192]:33684 "EHLO gateway.lan") by vger.kernel.org with ESMTP id S264507AbTL0RUi (ORCPT ); Sat, 27 Dec 2003 12:20:38 -0500 Subject: Re: OSS sound emulation broken between 2.6.0-test2 and test3 From: Martin Schlemmer Reply-To: azarah@nosferatu.za.org To: Edward Tandi Cc: "Martin J. Bligh" , perex@suse.cz, alsa-devel@lists.sourceforge.net, Linux Kernel Mailing Lists , Rob Love , Andrew Morton , Stan Bubrouski In-Reply-To: <1072544151.8611.18.camel@wires.home.biz> References: <1080000.1072475704@[10.10.2.4]> <1072479167.21020.59.camel@nosferatu.lan> <1480000.1072479655@[10.10.2.4]> <1072480660.21020.64.camel@nosferatu.lan> <1640000.1072481061@[10.10.2.4]> <1072482611.21020.71.camel@nosferatu.lan> <2060000.1072483186@[10.10.2.4]> <1072500516.12203.2.camel@duergar> <8240000.1072511437@[10.10.2.4]> <1072523478.12308.52.camel@nosferatu.lan> <1072525450.3794.8.camel@wires.home.biz> <1072527874.12308.100.camel@nosferatu.lan> <1072530488.2906.1.camel@wires.home.biz> <1072535590.12308.250.camel@nosferatu.lan> <1072544151.8611.18.camel@wires.home.biz> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-gNjL088WZNrcYREPakor" Message-Id: <1072545744.12308.390.camel@nosferatu.lan> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.5 Date: Sat, 27 Dec 2003 19:22:25 +0200 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --=-gNjL088WZNrcYREPakor Content-Type: multipart/mixed; boundary="=-C/G1BXyeYSKrlQ+ZdOiM" --=-C/G1BXyeYSKrlQ+ZdOiM Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On Sat, 2003-12-27 at 18:55, Edward Tandi wrote: > On Sat, 2003-12-27 at 14:33, Martin Schlemmer wrote: > > On Sat, 2003-12-27 at 15:08, Edward Tandi wrote: > > > On Sat, 2003-12-27 at 12:24, Martin Schlemmer wrote: > > > > On Sat, 2003-12-27 at 13:44, Edward Tandi wrote: > > > > > On Sat, 2003-12-27 at 11:11, Martin Schlemmer wrote: > > > > > > On Sat, 2003-12-27 at 09:50, Martin J. Bligh wrote: > > > > > > > Something appears to have broken OSS sound emulation between=20 > > > > > > > test2 and test3. Best I can tell (despite the appearance of t= he BK logs),=20 > > > > > > > that included ALSA updates 0.9.5 and 0.9.6. Hopefully someone= who > > > > > > > understands the sound architecture better than I can fix this= ? > > > > > > >=20 > > > > > >=20 > > > > > > I wont say I understand it, but a quick look seems the major ch= ange is > > > > > > the addition of the 'whole-frag' and 'no-silence' opts. You mi= ght try > > > > > > the following to revert what 'no-silence' change at least does: > > > > > >=20 > > > > > > -- > > > > > > # echo 'xmms 0 0 no-silence' > /proc/asound/card0/pcm0p/oss > > > > > > # echo 'xmms 0 0 whole-frag' > /proc/asound/card0/pcm0p/oss > > > > > > -- > > > > >=20 > > > > > Thanks, that fixes it for me. I too have been seeing terrible pro= blems > > > > > with XMMS since the early 2.6 pre- kernels. > > > > >=20 > > > > > Because it only happens in XMMS I thought it was one of those > > > > > application bugs brought out by scheduler changes. I now use Zinf= BTW > > > > > -It's better for large music collections (although not as stable = or > > > > > flash). > > > > >=20 > > > >=20 > > > > Can you check which one actually fixes it ? > > >=20 > > > Yes, its the 'whole-frag' line. > > >=20 > >=20 > > Well, I can't say I can see why. In snd_pcm_oss_write1 where the change > > for whole-frag was, I cannot see a race or such. The only possible > > causes I can see, is that: > > 1) xmms's scheduling gets screwed due to the short writes > > 2) some drivers may have issues with getting short writes all the time. > >=20 > > Only problem with 2), is that Zinf works fine for you, so I guess the > > only thing to assume is that either Zinf do not use OSS, but ALSA > > interface, or that 1) is indeed the correct answer. What version of > > XMMS do you use btw? >=20 > I was originally running 1.2.7 when I first encountered the problem. I > then built 1.2.8 -but no difference. >=20 > Zinf does indeed use the ALSA interface (as most apps do nowadays). >=20 Ok, so it still can go either way. > I would say the symptoms are that the music starts playing OK bit after > a short period (18-19 seconds), the music changes overall speed (by a > semi-tone or so). When it does this, the sound also starts to break up. > This is why I associated the problem with the process scheduling changes > being made at the time. >=20 I do not use the default scheduler - I attached Nick's one, with a context-switch-accounting-fix.patch which should be applied before sched-rollup-v19a.patch ... I cannot reboot now with vanilla to test if this will break things for me again (until weekend is past), but you may try with it and see if the scheduler theory is correct. > It could be a driver issue. FYI, I am using a VIA KT400 chipset. Any one > know of any low-level timing issues with the KT400? >=20 I do not have a box with this chipset, so I do not follow related threads, sorry. --=20 Martin Schlemmer --=-C/G1BXyeYSKrlQ+ZdOiM Content-Disposition: attachment; filename=context-switch-accounting-fix.patch Content-Type: text/x-patch; name=context-switch-accounting-fix.patch; charset=iso-8859-1 Content-Transfer-Encoding: base64 DQpGcm9tOiBOaWNrIFBpZ2dpbiA8cGlnZ2luQGN5YmVyb25lLmNvbS5hdT4NCg0KTWFrZSBzdXJl IHRvIGNvdW50IGtlcm5lbCBwcmVlbXB0aW9uIGFzIGEgY29udGV4dCBzd2l0Y2guIEEgc2hvcnQg Y3V0DQpoYXMgYmVlbiBwcmV2ZW50aW5nIGl0Lg0KDQoNCg0KIGtlcm5lbC9zY2hlZC5jIHwgICAz NyArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogMSBmaWxlcyBjaGFuZ2Vk LCAxNSBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkNCg0KZGlmZiAtcHVOIGtlcm5lbC9z Y2hlZC5jfmNvbnRleHQtc3dpdGNoLWFjY291bnRpbmctZml4IGtlcm5lbC9zY2hlZC5jDQotLS0g MjUva2VybmVsL3NjaGVkLmN+Y29udGV4dC1zd2l0Y2gtYWNjb3VudGluZy1maXgJMjAwMy0xMS0x MSAxOToyOTozNy4wMDAwMDAwMDAgLTA4MDANCisrKyAyNS1ha3BtL2tlcm5lbC9zY2hlZC5jCTIw MDMtMTEtMTEgMTk6Mjk6MzcuMDAwMDAwMDAwIC0wODAwDQpAQCAtMTUxMywzMyArMTUxMywyMCBA QCBuZWVkX3Jlc2NoZWQ6DQogDQogCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsNCiANCi0JLyoN Ci0JICogaWYgZW50ZXJpbmcgb2ZmIG9mIGEga2VybmVsIHByZWVtcHRpb24gZ28gc3RyYWlnaHQN Ci0JICogdG8gcGlja2luZyB0aGUgbmV4dCB0YXNrLg0KLQkgKi8NCi0JaWYgKHVubGlrZWx5KHBy ZWVtcHRfY291bnQoKSAmIFBSRUVNUFRfQUNUSVZFKSkNCi0JCWdvdG8gcGlja19uZXh0X3Rhc2s7 DQotDQotCXN3aXRjaCAocHJldi0+c3RhdGUpIHsNCi0JY2FzZSBUQVNLX0lOVEVSUlVQVElCTEU6 DQotCQlpZiAodW5saWtlbHkoc2lnbmFsX3BlbmRpbmcocHJldikpKSB7DQorCWlmIChwcmV2LT5z dGF0ZSAhPSBUQVNLX1JVTk5JTkcgJiYNCisJCQlsaWtlbHkoIShwcmVlbXB0X2NvdW50KCkgJiBQ UkVFTVBUX0FDVElWRSkpICkgew0KKwkJaWYgKHVubGlrZWx5KHNpZ25hbF9wZW5kaW5nKHByZXYp KSAmJg0KKwkJCQlwcmV2LT5zdGF0ZSA9PSBUQVNLX0lOVEVSUlVQVElCTEUpDQogCQkJcHJldi0+ c3RhdGUgPSBUQVNLX1JVTk5JTkc7DQotCQkJYnJlYWs7DQotCQl9DQotCWRlZmF1bHQ6DQotCQlk ZWFjdGl2YXRlX3Rhc2socHJldiwgcnEpOw0KLQkJcHJldi0+bnZjc3crKzsNCi0JCWJyZWFrOw0K LQljYXNlIFRBU0tfUlVOTklORzoNCi0JCXByZXYtPm5pdmNzdysrOw0KKwkJZWxzZQ0KKwkJCWRl YWN0aXZhdGVfdGFzayhwcmV2LCBycSk7DQogCX0NCi1waWNrX25leHRfdGFzazoNCi0JaWYgKHVu bGlrZWx5KCFycS0+bnJfcnVubmluZykpIHsNCisNCiAjaWZkZWYgQ09ORklHX1NNUA0KKwlpZiAo dW5saWtlbHkoIXJxLT5ucl9ydW5uaW5nKSkNCiAJCWxvYWRfYmFsYW5jZShycSwgMSwgY3B1X3Rv X25vZGVfbWFzayhzbXBfcHJvY2Vzc29yX2lkKCkpKTsNCi0JCWlmIChycS0+bnJfcnVubmluZykN Ci0JCQlnb3RvIHBpY2tfbmV4dF90YXNrOw0KICNlbmRpZg0KKwlpZiAodW5saWtlbHkoIXJxLT5u cl9ydW5uaW5nKSkgew0KIAkJbmV4dCA9IHJxLT5pZGxlOw0KIAkJcnEtPmV4cGlyZWRfdGltZXN0 YW1wID0gMDsNCiAJCWdvdG8gc3dpdGNoX3Rhc2tzOw0KQEAgLTE1ODYsNiArMTU3MywxMiBAQCBz d2l0Y2hfdGFza3M6DQogCXByZXYtPnRpbWVzdGFtcCA9IG5vdzsNCiANCiAJaWYgKGxpa2VseShw cmV2ICE9IG5leHQpKSB7DQorCQlpZiAocHJldi0+c3RhdGUgPT0gVEFTS19SVU5OSU5HIHx8DQor CQkJCXVubGlrZWx5KHByZWVtcHRfY291bnQoKSAmIFBSRUVNUFRfQUNUSVZFKSkNCisJCQlwcmV2 LT5uaXZjc3crKzsNCisJCWVsc2UNCisJCQlwcmV2LT5udmNzdysrOw0KKw0KIAkJbmV4dC0+dGlt ZXN0YW1wID0gbm93Ow0KIAkJcnEtPm5yX3N3aXRjaGVzKys7DQogCQlycS0+Y3VyciA9IG5leHQ7 DQoNCl8NCg== --=-C/G1BXyeYSKrlQ+ZdOiM Content-Disposition: attachment; filename=sched-rollup-v19a.patch Content-Type: text/x-patch; name=sched-rollup-v19a.patch; charset=iso-8859-1 Content-Transfer-Encoding: base64 IGxpbnV4LTIuNi1ucGlnZ2luL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jIHwgICAgNCANCiBs aW51eC0yLjYtbnBpZ2dpbi9mcy9wcm9jL2FycmF5LmMgICAgICAgICAgICB8ICAgIDggDQogbGlu dXgtMi42LW5waWdnaW4vaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCAgfCAgICA0IA0KIGxpbnV4 LTIuNi1ucGlnZ2luL2luY2x1ZGUvbGludXgvc2NoZWQuaCAgICAgIHwgICAxMiANCiBsaW51eC0y LjYtbnBpZ2dpbi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmggICB8ICAgIDggDQogbGludXgtMi42 LW5waWdnaW4vaW5pdC9tYWluLmMgICAgICAgICAgICAgICAgfCAgICAxIA0KIGxpbnV4LTIuNi1u cGlnZ2luL2tlcm5lbC9mb3JrLmMgICAgICAgICAgICAgIHwgICAzMCANCiBsaW51eC0yLjYtbnBp Z2dpbi9rZXJuZWwvc2NoZWQuYyAgICAgICAgICAgICB8IDEyMzcgKysrKysrKysrKysrKystLS0t LS0tLS0tLS0tDQogOCBmaWxlcyBjaGFuZ2VkLCA2ODggaW5zZXJ0aW9ucygrKSwgNjE2IGRlbGV0 aW9ucygtKQ0KDQpkaWZmIC1wdU4gYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmN+cm9sbHVwIGFy Y2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jDQotLS0gbGludXgtMi42L2FyY2gvaTM4Ni9rZXJuZWwv c21wYm9vdC5jfnJvbGx1cAkyMDAzLTExLTE1IDIzOjQ2OjM0LjAwMDAwMDAwMCArMTEwMA0KKysr IGxpbnV4LTIuNi1ucGlnZ2luL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCTIwMDMtMTEtMTUg MjM6NDY6MzQuMDAwMDAwMDAwICsxMTAwDQpAQCAtOTE1LDEzICs5MTUsMTMgQEAgc3RhdGljIHZv aWQgc21wX3R1bmVfc2NoZWR1bGluZyAodm9pZCkNCiAJCWNhY2hlZmx1c2hfdGltZSA9IChjcHVf a2h6Pj4xMCkgKiAoY2FjaGVzaXplPDwxMCkgLyBiYW5kd2lkdGg7DQogCX0NCiANCi0JY2FjaGVf ZGVjYXlfdGlja3MgPSAobG9uZyljYWNoZWZsdXNoX3RpbWUvY3B1X2toeiArIDE7DQorCWNhY2hl X2RlY2F5X3RpY2tzID0gKGxvbmcpY2FjaGVmbHVzaF90aW1lL2NwdV9raHogKiBIWiAvIDEwMDA7 DQogDQogCXByaW50aygicGVyLUNQVSB0aW1lc2xpY2UgY3V0b2ZmOiAlbGQuJTAybGQgdXNlY3Mu XG4iLA0KIAkJKGxvbmcpY2FjaGVmbHVzaF90aW1lLyhjcHVfa2h6LzEwMDApLA0KIAkJKChsb25n KWNhY2hlZmx1c2hfdGltZSoxMDAvKGNwdV9raHovMTAwMCkpICUgMTAwKTsNCiAJcHJpbnRrKCJ0 YXNrIG1pZ3JhdGlvbiBjYWNoZSBkZWNheSB0aW1lb3V0OiAlbGQgbXNlY3MuXG4iLA0KLQkJY2Fj aGVfZGVjYXlfdGlja3MpOw0KKwkJKGNhY2hlX2RlY2F5X3RpY2tzICsgMSkgKiAxMDAwIC8gSFop Ow0KIH0NCiANCiAvKg0KZGlmZiAtcHVOIGZzL3Byb2MvYXJyYXkuY35yb2xsdXAgZnMvcHJvYy9h cnJheS5jDQotLS0gbGludXgtMi42L2ZzL3Byb2MvYXJyYXkuY35yb2xsdXAJMjAwMy0xMS0xNSAy Mzo0NjozNC4wMDAwMDAwMDAgKzExMDANCisrKyBsaW51eC0yLjYtbnBpZ2dpbi9mcy9wcm9jL2Fy cmF5LmMJMjAwMy0xMS0xNSAyMzo0NjozNS4wMDAwMDAwMDAgKzExMDANCkBAIC0xNTQsNyArMTU0 LDkgQEAgc3RhdGljIGlubGluZSBjaGFyICogdGFza19zdGF0ZShzdHJ1Y3QgdA0KIAlyZWFkX2xv Y2soJnRhc2tsaXN0X2xvY2spOw0KIAlidWZmZXIgKz0gc3ByaW50ZihidWZmZXIsDQogCQkiU3Rh dGU6XHQlc1xuIg0KLQkJIlNsZWVwQVZHOlx0JWx1JSVcbiINCisJCSJzbGVlcF9hdmc6XHQlbHVc biINCisJCSJzbGVlcF90aW1lOlx0JWx1XG4iDQorCQkidG90YWxfdGltZTpcdCVsdVxuIg0KIAkJ IlRnaWQ6XHQlZFxuIg0KIAkJIlBpZDpcdCVkXG4iDQogCQkiUFBpZDpcdCVkXG4iDQpAQCAtMTYy LDggKzE2NCw4IEBAIHN0YXRpYyBpbmxpbmUgY2hhciAqIHRhc2tfc3RhdGUoc3RydWN0IHQNCiAJ CSJVaWQ6XHQlZFx0JWRcdCVkXHQlZFxuIg0KIAkJIkdpZDpcdCVkXHQlZFx0JWRcdCVkXG4iLA0K IAkJZ2V0X3Rhc2tfc3RhdGUocCksDQotCQkocC0+c2xlZXBfYXZnLzEwMjQpKjEwMC8oMTAwMDAw MDAwMC8xMDI0KSwNCi0JICAgICAgIAlwLT50Z2lkLA0KKwkJcC0+c2xlZXBfYXZnLCBwLT5zbGVl cF90aW1lLCBwLT50b3RhbF90aW1lLA0KKwkJcC0+dGdpZCwNCiAJCXAtPnBpZCwgcC0+cGlkID8g cC0+cmVhbF9wYXJlbnQtPnBpZCA6IDAsDQogCQlwLT5waWQgJiYgcC0+cHRyYWNlID8gcC0+cGFy ZW50LT5waWQgOiAwLA0KIAkJcC0+dWlkLCBwLT5ldWlkLCBwLT5zdWlkLCBwLT5mc3VpZCwNCmRp ZmYgLXB1TiBpbmNsdWRlL2xpbnV4L2luaXRfdGFzay5ofnJvbGx1cCBpbmNsdWRlL2xpbnV4L2lu aXRfdGFzay5oDQotLS0gbGludXgtMi42L2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmh+cm9sbHVw CTIwMDMtMTEtMTUgMjM6NDY6MzQuMDAwMDAwMDAwICsxMTAwDQorKysgbGludXgtMi42LW5waWdn aW4vaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAkyMDAzLTExLTE1IDIzOjQ2OjM1LjAwMDAwMDAw MCArMTEwMA0KQEAgLTY3LDggKzY3LDggQEANCiAJLnVzYWdlCQk9IEFUT01JQ19JTklUKDIpLAkJ CQlcDQogCS5mbGFncwkJPSAwLAkJCQkJCVwNCiAJLmxvY2tfZGVwdGgJPSAtMSwJCQkJCQlcDQot CS5wcmlvCQk9IE1BWF9QUklPLTIwLAkJCQkJXA0KLQkuc3RhdGljX3ByaW8JPSBNQVhfUFJJTy0y MCwJCQkJCVwNCisJLnByaW8JCT0gTUFYX1BSSU8tMzAsCQkJCQlcDQorCS5zdGF0aWNfcHJpbwk9 IE1BWF9QUklPLTMwLAkJCQkJXA0KIAkucG9saWN5CQk9IFNDSEVEX05PUk1BTCwJCQkJCVwNCiAJ LmNwdXNfYWxsb3dlZAk9IENQVV9NQVNLX0FMTCwJCQkJCVwNCiAJLm1tCQk9IE5VTEwsCQkJCQkJ XA0KZGlmZiAtcHVOIGluY2x1ZGUvbGludXgvc2NoZWQuaH5yb2xsdXAgaW5jbHVkZS9saW51eC9z Y2hlZC5oDQotLS0gbGludXgtMi42L2luY2x1ZGUvbGludXgvc2NoZWQuaH5yb2xsdXAJMjAwMy0x MS0xNSAyMzo0NjozNC4wMDAwMDAwMDAgKzExMDANCisrKyBsaW51eC0yLjYtbnBpZ2dpbi9pbmNs dWRlL2xpbnV4L3NjaGVkLmgJMjAwMy0xMS0xNSAyMzo0NjozNS4wMDAwMDAwMDAgKzExMDANCkBA IC0yODMsNyArMjgzLDcgQEAgc3RydWN0IHNpZ25hbF9zdHJ1Y3Qgew0KICNkZWZpbmUgTUFYX1VT RVJfUlRfUFJJTwkxMDANCiAjZGVmaW5lIE1BWF9SVF9QUklPCQlNQVhfVVNFUl9SVF9QUklPDQog DQotI2RlZmluZSBNQVhfUFJJTwkJKE1BWF9SVF9QUklPICsgNDApDQorI2RlZmluZSBNQVhfUFJJ TwkJKE1BWF9SVF9QUklPICsgNTkpDQogDQogI2RlZmluZSBydF90YXNrKHApCQkoKHApLT5wcmlv IDwgTUFYX1JUX1BSSU8pDQogDQpAQCAtMzQ0LDE0ICszNDQsMTcgQEAgc3RydWN0IHRhc2tfc3Ry dWN0IHsNCiAJc3RydWN0IGxpc3RfaGVhZCBydW5fbGlzdDsNCiAJcHJpb19hcnJheV90ICphcnJh eTsNCiANCisJLyogU2NoZWR1bGVyIHZhcmlhYmxlcyBmb2xsb3cuIGtlcm5lbC9zY2hlZC5jICov DQorCXVuc2lnbmVkIGxvbmcgYXJyYXlfc2VxdWVuY2U7DQorCXVuc2lnbmVkIGxvbmcgdGltZXN0 YW1wOw0KKw0KKwl1bnNpZ25lZCBsb25nIHRvdGFsX3RpbWUsIHNsZWVwX3RpbWU7DQogCXVuc2ln bmVkIGxvbmcgc2xlZXBfYXZnOw0KLQlsb25nIGludGVyYWN0aXZlX2NyZWRpdDsNCi0JdW5zaWdu ZWQgbG9uZyBsb25nIHRpbWVzdGFtcDsNCi0JaW50IGFjdGl2YXRlZDsNCiANCiAJdW5zaWduZWQg bG9uZyBwb2xpY3k7DQogCWNwdW1hc2tfdCBjcHVzX2FsbG93ZWQ7DQogCXVuc2lnbmVkIGludCB0 aW1lX3NsaWNlLCBmaXJzdF90aW1lX3NsaWNlOw0KKwl1bnNpZ25lZCBpbnQgdXNlZF9zbGljZTsN CiANCiAJc3RydWN0IGxpc3RfaGVhZCB0YXNrczsNCiAJc3RydWN0IGxpc3RfaGVhZCBwdHJhY2Vf Y2hpbGRyZW47DQpAQCAtNTg4LDYgKzU5MSw3IEBAIGV4dGVybiBpbnQgRkFTVENBTEwod2FrZV91 cF9wcm9jZXNzKHN0cnUNCiAgc3RhdGljIGlubGluZSB2b2lkIGtpY2tfcHJvY2VzcyhzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnRzaykgeyB9DQogI2VuZGlmDQogZXh0ZXJuIHZvaWQgRkFTVENBTEwod2Fr ZV91cF9mb3JrZWRfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2spKTsNCitleHRlcm4g dm9pZCBGQVNUQ0FMTChzY2hlZF9mb3JrKHRhc2tfdCAqIHApKTsNCiBleHRlcm4gdm9pZCBGQVNU Q0FMTChzY2hlZF9leGl0KHRhc2tfdCAqIHApKTsNCiANCiBhc21saW5rYWdlIGxvbmcgc3lzX3dh aXQ0KHBpZF90IHBpZCx1bnNpZ25lZCBpbnQgKiBzdGF0X2FkZHIsIGludCBvcHRpb25zLCBzdHJ1 Y3QgcnVzYWdlICogcnUpOw0KZGlmZiAtcHVOIGluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaH5yb2xs dXAgaW5jbHVkZS9saW51eC90b3BvbG9neS5oDQotLS0gbGludXgtMi42L2luY2x1ZGUvbGludXgv dG9wb2xvZ3kuaH5yb2xsdXAJMjAwMy0xMS0xNSAyMzo0NjozNC4wMDAwMDAwMDAgKzExMDANCisr KyBsaW51eC0yLjYtbnBpZ2dpbi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgJMjAwMy0xMS0xNSAy Mzo0NjozNS4wMDAwMDAwMDAgKzExMDANCkBAIC01NCw0ICs1NCwxMiBAQCBzdGF0aWMgaW5saW5l IGludCBfX25leHRfbm9kZV93aXRoX2NwdXMoDQogI2RlZmluZSBmb3JfZWFjaF9ub2RlX3dpdGhf Y3B1cyhub2RlKSBcDQogCWZvciAobm9kZSA9IDA7IG5vZGUgPCBudW1ub2Rlczsgbm9kZSA9IF9f bmV4dF9ub2RlX3dpdGhfY3B1cyhub2RlKSkNCiANCisjaWZuZGVmIE5VTUFfRkFDVE9SX0JPTlVT DQorLyoNCisgKiBIaWdoIE5VTUFfRkFDVE9SX0JPTlVTIG1lYW5zIHJhcmUgY3Jvc3Mtbm9kZSBs b2FkIGJhbGFuY2luZy4gVGhlIGRlZmF1bHQNCisgKiB2YWx1ZSBvZiAyMCBtZWFucyBub2RlIHJl YmFsYW5jZSBhZnRlciAxMCBmYWlsZWQgbG9jYWwgYmFsYW5jZXMsDQorICogU2hvdWxkIGJlIHR1 bmVkIGZvciBlYWNoIHBsYXRmb3JtIGluIGFzbS90b3BvbG9neS5oLg0KKyAqLw0KKyNkZWZpbmUg TlVNQV9GQUNUT1JfQk9OVVMgKEhaLzUwID86IDEpDQorI2VuZGlmDQogI2VuZGlmIC8qIF9MSU5V WF9UT1BPTE9HWV9IICovDQpkaWZmIC1wdU4gaW5pdC9tYWluLmN+cm9sbHVwIGluaXQvbWFpbi5j DQotLS0gbGludXgtMi42L2luaXQvbWFpbi5jfnJvbGx1cAkyMDAzLTExLTE1IDIzOjQ2OjM0LjAw MDAwMDAwMCArMTEwMA0KKysrIGxpbnV4LTIuNi1ucGlnZ2luL2luaXQvbWFpbi5jCTIwMDMtMTEt MTUgMjM6NDY6MzUuMDAwMDAwMDAwICsxMTAwDQpAQCAtNTQ5LDcgKzU0OSw2IEBAIHN0YXRpYyB2 b2lkIGRvX3ByZV9zbXBfaW5pdGNhbGxzKHZvaWQpDQogDQogCW1pZ3JhdGlvbl9pbml0KCk7DQog I2VuZGlmDQotCW5vZGVfbnJfcnVubmluZ19pbml0KCk7DQogCXNwYXduX2tzb2Z0aXJxZCgpOw0K IH0NCiANCmRpZmYgLXB1TiBrZXJuZWwvZm9yay5jfnJvbGx1cCBrZXJuZWwvZm9yay5jDQotLS0g bGludXgtMi42L2tlcm5lbC9mb3JrLmN+cm9sbHVwCTIwMDMtMTEtMTUgMjM6NDY6MzQuMDAwMDAw MDAwICsxMTAwDQorKysgbGludXgtMi42LW5waWdnaW4va2VybmVsL2ZvcmsuYwkyMDAzLTExLTE1 IDIzOjQ2OjM0LjAwMDAwMDAwMCArMTEwMA0KQEAgLTk1OCwzMyArOTU4LDkgQEAgc3RydWN0IHRh c2tfc3RydWN0ICpjb3B5X3Byb2Nlc3ModW5zaWduZQ0KIAlwLT5leGl0X3NpZ25hbCA9IChjbG9u ZV9mbGFncyAmIENMT05FX1RIUkVBRCkgPyAtMSA6IChjbG9uZV9mbGFncyAmIENTSUdOQUwpOw0K IAlwLT5wZGVhdGhfc2lnbmFsID0gMDsNCiANCi0JLyoNCi0JICogU2hhcmUgdGhlIHRpbWVzbGlj ZSBiZXR3ZWVuIHBhcmVudCBhbmQgY2hpbGQsIHRodXMgdGhlDQotCSAqIHRvdGFsIGFtb3VudCBv ZiBwZW5kaW5nIHRpbWVzbGljZXMgaW4gdGhlIHN5c3RlbSBkb2Vzbid0IGNoYW5nZSwNCi0JICog cmVzdWx0aW5nIGluIG1vcmUgc2NoZWR1bGluZyBmYWlybmVzcy4NCi0JICovDQotCWxvY2FsX2ly cV9kaXNhYmxlKCk7DQotICAgICAgICBwLT50aW1lX3NsaWNlID0gKGN1cnJlbnQtPnRpbWVfc2xp Y2UgKyAxKSA+PiAxOw0KLQkvKg0KLQkgKiBUaGUgcmVtYWluZGVyIG9mIHRoZSBmaXJzdCB0aW1l c2xpY2UgbWlnaHQgYmUgcmVjb3ZlcmVkIGJ5DQotCSAqIHRoZSBwYXJlbnQgaWYgdGhlIGNoaWxk IGV4aXRzIGVhcmx5IGVub3VnaC4NCi0JICovDQotCXAtPmZpcnN0X3RpbWVfc2xpY2UgPSAxOw0K LQljdXJyZW50LT50aW1lX3NsaWNlID4+PSAxOw0KLQlwLT50aW1lc3RhbXAgPSBzY2hlZF9jbG9j aygpOw0KLQlpZiAoIWN1cnJlbnQtPnRpbWVfc2xpY2UpIHsNCi0JCS8qDQotCSAJICogVGhpcyBj YXNlIGlzIHJhcmUsIGl0IGhhcHBlbnMgd2hlbiB0aGUgcGFyZW50IGhhcyBvbmx5DQotCSAJICog YSBzaW5nbGUgamlmZnkgbGVmdCBmcm9tIGl0cyB0aW1lc2xpY2UuIFRha2luZyB0aGUNCi0JCSAq IHJ1bnF1ZXVlIGxvY2sgaXMgbm90IGEgcHJvYmxlbS4NCi0JCSAqLw0KLQkJY3VycmVudC0+dGlt ZV9zbGljZSA9IDE7DQotCQlwcmVlbXB0X2Rpc2FibGUoKTsNCi0JCXNjaGVkdWxlcl90aWNrKDAs IDApOw0KLQkJbG9jYWxfaXJxX2VuYWJsZSgpOw0KLQkJcHJlZW1wdF9lbmFibGUoKTsNCi0JfSBl bHNlDQotCQlsb2NhbF9pcnFfZW5hYmxlKCk7DQorCS8qIFBlcmZvcm0gc2NoZWR1bGVyIHJlbGF0 ZWQgYWNjb3VudGluZyAqLw0KKwlzY2hlZF9mb3JrKHApOw0KKw0KIAkvKg0KIAkgKiBPaywgYWRk IGl0IHRvIHRoZSBydW4tcXVldWVzIGFuZCBtYWtlIGl0DQogCSAqIHZpc2libGUgdG8gdGhlIHJl c3Qgb2YgdGhlIHN5c3RlbS4NCmRpZmYgLXB1TiBrZXJuZWwvc2NoZWQuY35yb2xsdXAga2VybmVs L3NjaGVkLmMNCi0tLSBsaW51eC0yLjYva2VybmVsL3NjaGVkLmN+cm9sbHVwCTIwMDMtMTEtMTUg MjM6NDY6MzQuMDAwMDAwMDAwICsxMTAwDQorKysgbGludXgtMi42LW5waWdnaW4va2VybmVsL3Nj aGVkLmMJMjAwMy0xMS0xNSAyMzo0NjozNS4wMDAwMDAwMDAgKzExMDANCkBAIC0xNCw3ICsxNCw2 IEBADQogICoJCWFuIGFycmF5LXN3aXRjaCBtZXRob2Qgb2YgZGlzdHJpYnV0aW5nIHRpbWVzbGlj ZXMNCiAgKgkJYW5kIHBlci1DUFUgcnVucXVldWVzLiAgQ2xlYW51cHMgYW5kIHVzZWZ1bCBzdWdn ZXN0aW9ucw0KICAqCQlieSBEYXZpZGUgTGliZW56aSwgcHJlZW1wdGlibGUga2VybmVsIGJpdHMg YnkgUm9iZXJ0IExvdmUuDQotICogIDIwMDMtMDktMDMJSW50ZXJhY3Rpdml0eSB0dW5pbmcgYnkg Q29uIEtvbGl2YXMuDQogICovDQogDQogI2luY2x1ZGUgPGxpbnV4L21tLmg+DQpAQCAtNDksOCAr NDgsOCBAQA0KICAqIHRvIHN0YXRpYyBwcmlvcml0eSBbIE1BWF9SVF9QUklPLi5NQVhfUFJJTy0x IF0sDQogICogYW5kIGJhY2suDQogICovDQotI2RlZmluZSBOSUNFX1RPX1BSSU8obmljZSkJKE1B WF9SVF9QUklPICsgKG5pY2UpICsgMjApDQotI2RlZmluZSBQUklPX1RPX05JQ0UocHJpbykJKChw cmlvKSAtIE1BWF9SVF9QUklPIC0gMjApDQorI2RlZmluZSBOSUNFX1RPX1BSSU8obmljZSkJKE1B WF9SVF9QUklPICsgKG5pY2UpICsgMzApDQorI2RlZmluZSBQUklPX1RPX05JQ0UocHJpbykJKChw cmlvKSAtIE1BWF9SVF9QUklPIC0gMzApDQogI2RlZmluZSBUQVNLX05JQ0UocCkJCVBSSU9fVE9f TklDRSgocCktPnN0YXRpY19wcmlvKQ0KIA0KIC8qDQpAQCAtNjEsMTM0ICs2MCw3MSBAQA0KICNk ZWZpbmUgVVNFUl9QUklPKHApCQkoKHApLU1BWF9SVF9QUklPKQ0KICNkZWZpbmUgVEFTS19VU0VS X1BSSU8ocCkJVVNFUl9QUklPKChwKS0+c3RhdGljX3ByaW8pDQogI2RlZmluZSBNQVhfVVNFUl9Q UklPCQkoVVNFUl9QUklPKE1BWF9QUklPKSkNCi0jZGVmaW5lIEFWR19USU1FU0xJQ0UJKE1JTl9U SU1FU0xJQ0UgKyAoKE1BWF9USU1FU0xJQ0UgLSBNSU5fVElNRVNMSUNFKSAqXA0KLQkJCShNQVhf UFJJTy0xLU5JQ0VfVE9fUFJJTygwKSkvKE1BWF9VU0VSX1BSSU8gLSAxKSkpDQogDQogLyoNCi0g KiBTb21lIGhlbHBlcnMgZm9yIGNvbnZlcnRpbmcgbmFub3NlY29uZCB0aW1pbmcgdG8gamlmZnkg cmVzb2x1dGlvbg0KKyAqIE1JTl9USU1FU0xJQ0UgaXMgdGhlIHRpbWVzbGljZSB0aGF0IGEgbWlu aW11bSBwcmlvcml0eSBwcm9jZXNzIGdldHMgaWYgdGhlcmUNCisgKiBpcyBhIG1heGltdW0gcHJp b3JpdHkgcHJvY2VzcyBydW5uYWJsZS4gTUFYX1RJTUVTTElDRSBpcyBkZXJpdmVkIGZyb20gdGhl DQorICogZm9ybXVsYSBpbiB0YXNrX3RpbWVzbGljZS4gSXQgY2Fubm90IGJlIGNoYW5nZWQgaGVy ZS4gSXQgaXMgdGhlIHRpbWVzaWxjZQ0KKyAqIHRoYXQgdGhlIG1heGltdW0gcHJpb3JpdHkgcHJv Y2VzcyB3aWxsIGdldC4gTGFyZ2VyIHRpbWVzbGljZXMgYXJlIGF0dGFpbmFibGUNCisgKiBieSBs b3cgcHJpb3JpdHkgcHJvY2Vzc2VzIGhvd2V2ZXIuDQogICovDQotI2RlZmluZSBOU19UT19KSUZG SUVTKFRJTUUpCSgoVElNRSkgLyAoMTAwMDAwMDAwMCAvIEhaKSkNCi0jZGVmaW5lIEpJRkZJRVNf VE9fTlMoVElNRSkJKChUSU1FKSAqICgxMDAwMDAwMDAwIC8gSFopKQ0KKyNkZWZpbmUgTUlOX1RJ TUVTTElDRQkJKDEwMDAwMDAgLyAxMDAwKQ0KKyNkZWZpbmUgTUFYX1RJTUVTTElDRQkJKDYwICog TUlOX1RJTUVTTElDRSkgLyogZG8gbm90IGNoYW5nZSB0aGlzICovDQorDQorLyogTWF4aW11bSBh bW91bnQgb2YgaGlzdG9yeSB0aGF0IHdpbGwgYmUgdXNlZCB0byBjYWxjdWxhdGUgcHJpb3JpdHkg Ki8NCisjZGVmaW5lIE1BWF9TTEVFUAkJKDEwMDAwMDAgLyAyKQ0KIA0KIC8qDQotICogVGhlc2Ug YXJlIHRoZSAndHVuaW5nIGtub2JzJyBvZiB0aGUgc2NoZWR1bGVyOg0KLSAqDQotICogTWluaW11 bSB0aW1lc2xpY2UgaXMgMTAgbXNlY3MsIGRlZmF1bHQgdGltZXNsaWNlIGlzIDEwMCBtc2VjcywN Ci0gKiBtYXhpbXVtIHRpbWVzbGljZSBpcyAyMDAgbXNlY3MuIFRpbWVzbGljZXMgZ2V0IHJlZmls bGVkIGFmdGVyDQotICogdGhleSBleHBpcmUuDQorICogTWF4aW11bSBlZmZlY3QgdGhhdCAxIGJs b2NrIG9mIGFjdGl2aXR5IChydW4vc2xlZXAvZXRjKSBjYW4gaGF2ZS4gVGhpcyBpcw0KKyAqIHdp bGwgbW9kZXJhdGUgZGljYXJkIGZyZWFrIGV2ZW50cyAoZWcuIFNJR1NUT1ApDQogICovDQotI2Rl ZmluZSBNSU5fVElNRVNMSUNFCQkoIDEwICogSFogLyAxMDAwKQ0KLSNkZWZpbmUgTUFYX1RJTUVT TElDRQkJKDIwMCAqIEhaIC8gMTAwMCkNCi0jZGVmaW5lIE9OX1JVTlFVRVVFX1dFSUdIVAkzMA0K LSNkZWZpbmUgQ0hJTERfUEVOQUxUWQkJOTUNCi0jZGVmaW5lIFBBUkVOVF9QRU5BTFRZCQkxMDAN Ci0jZGVmaW5lIEVYSVRfV0VJR0hUCQkzDQotI2RlZmluZSBQUklPX0JPTlVTX1JBVElPCTI1DQot I2RlZmluZSBNQVhfQk9OVVMJCShNQVhfVVNFUl9QUklPICogUFJJT19CT05VU19SQVRJTyAvIDEw MCkNCi0jZGVmaW5lIElOVEVSQUNUSVZFX0RFTFRBCTINCi0jZGVmaW5lIE1BWF9TTEVFUF9BVkcJ CShBVkdfVElNRVNMSUNFICogTUFYX0JPTlVTKQ0KLSNkZWZpbmUgU1RBUlZBVElPTl9MSU1JVAko TUFYX1NMRUVQX0FWRykNCi0jZGVmaW5lIE5TX01BWF9TTEVFUF9BVkcJKEpJRkZJRVNfVE9fTlMo TUFYX1NMRUVQX0FWRykpDQotI2RlZmluZSBOT0RFX1RIUkVTSE9MRAkJMTI1DQotI2RlZmluZSBD UkVESVRfTElNSVQJCTEwMA0KKyNkZWZpbmUgTUFYX1NMRUVQX0FGRkVDVAkoTUFYX1NMRUVQLzQp DQorI2RlZmluZSBNQVhfUlVOX0FGRkVDVAkJKE1BWF9TTEVFUC80KQ0KKyNkZWZpbmUgTUFYX1dB SVRfQUZGRUNUCQkoTUFYX1JVTl9BRkZFQ1QvMikNCiANCiAvKg0KLSAqIElmIGEgdGFzayBpcyAn aW50ZXJhY3RpdmUnIHRoZW4gd2UgcmVpbnNlcnQgaXQgaW4gdGhlIGFjdGl2ZQ0KLSAqIGFycmF5 IGFmdGVyIGl0IGhhcyBleHBpcmVkIGl0cyBjdXJyZW50IHRpbWVzbGljZS4gKGl0IHdpbGwgbm90 DQotICogY29udGludWUgdG8gcnVuIGltbWVkaWF0ZWx5LCBpdCB3aWxsIHN0aWxsIHJvdW5kcm9i aW4gd2l0aA0KLSAqIG90aGVyIGludGVyYWN0aXZlIHRhc2tzLikNCi0gKg0KLSAqIFRoaXMgcGFy dCBzY2FsZXMgdGhlIGludGVyYWN0aXZpdHkgbGltaXQgZGVwZW5kaW5nIG9uIG5pY2VuZXNzLg0K LSAqDQotICogV2Ugc2NhbGUgaXQgbGluZWFybHksIG9mZnNldCBieSB0aGUgSU5URVJBQ1RJVkVf REVMVEEgZGVsdGEuDQotICogSGVyZSBhcmUgYSBmZXcgZXhhbXBsZXMgb2YgZGlmZmVyZW50IG5p Y2UgbGV2ZWxzOg0KLSAqDQotICogIFRBU0tfSU5URVJBQ1RJVkUoLTIwKTogWzEsMSwxLDEsMSwx LDEsMSwxLDAsMF0NCi0gKiAgVEFTS19JTlRFUkFDVElWRSgtMTApOiBbMSwxLDEsMSwxLDEsMSww LDAsMCwwXQ0KLSAqICBUQVNLX0lOVEVSQUNUSVZFKCAgMCk6IFsxLDEsMSwxLDAsMCwwLDAsMCww LDBdDQotICogIFRBU0tfSU5URVJBQ1RJVkUoIDEwKTogWzEsMSwwLDAsMCwwLDAsMCwwLDAsMF0N Ci0gKiAgVEFTS19JTlRFUkFDVElWRSggMTkpOiBbMCwwLDAsMCwwLDAsMCwwLDAsMCwwXQ0KLSAq DQotICogKHRoZSBYIGF4aXMgcmVwcmVzZW50cyB0aGUgcG9zc2libGUgLTUgLi4uIDAgLi4uICs1 IGR5bmFtaWMNCi0gKiAgcHJpb3JpdHkgcmFuZ2UgYSB0YXNrIGNhbiBleHBsb3JlLCBhIHZhbHVl IG9mICcxJyBtZWFucyB0aGUNCi0gKiAgdGFzayBpcyByYXRlZCBpbnRlcmFjdGl2ZS4pDQotICoN Ci0gKiBJZS4gbmljZSArMTkgdGFza3MgY2FuIG5ldmVyIGdldCAnaW50ZXJhY3RpdmUnIGVub3Vn aCB0byBiZQ0KLSAqIHJlaW5zZXJ0ZWQgaW50byB0aGUgYWN0aXZlIGFycmF5LiBBbmQgb25seSBo ZWF2aWx5IENQVS1ob2cgbmljZSAtMjANCi0gKiB0YXNrcyB3aWxsIGJlIGV4cGlyZWQuIERlZmF1 bHQgbmljZSAwIHRhc2tzIGFyZSBzb21ld2hlcmUgYmV0d2VlbiwNCi0gKiBpdCB0YWtlcyBzb21l IGVmZm9ydCBmb3IgdGhlbSB0byBnZXQgaW50ZXJhY3RpdmUsIGJ1dCBpdCdzIG5vdA0KLSAqIHRv byBoYXJkLg0KKyAqIFRoZSBhbW91bnQgb2YgaGlzdG9yeSBjYW4gYmUgZGVjcmVhc2VkIChvbiBm b3JrIGZvciBleGFtcGxlKS4gVGhpcyBwdXRzIGENCisgKiBsb3dlciBib3VuZCBvbiBpdC4NCiAg Ki8NCisjZGVmaW5lIE1JTl9ISVNUT1JZICAgICAgICAgICAoTUFYX1NMRUVQLzIpDQogDQotI2Rl ZmluZSBDVVJSRU5UX0JPTlVTKHApIFwNCi0JKE5TX1RPX0pJRkZJRVMoKHApLT5zbGVlcF9hdmcp ICogTUFYX0JPTlVTIC8gXA0KLQkJTUFYX1NMRUVQX0FWRykNCi0NCi0jaWZkZWYgQ09ORklHX1NN UA0KLSNkZWZpbmUgVElNRVNMSUNFX0dSQU5VTEFSSVRZKHApCShNSU5fVElNRVNMSUNFICogXA0K LQkJKDEgPDwgKCgoTUFYX0JPTlVTIC0gQ1VSUkVOVF9CT05VUyhwKSkgPyA6IDEpIC0gMSkpICog XA0KLQkJCW51bV9vbmxpbmVfY3B1cygpKQ0KLSNlbHNlDQotI2RlZmluZSBUSU1FU0xJQ0VfR1JB TlVMQVJJVFkocCkJKE1JTl9USU1FU0xJQ0UgKiBcDQotCQkoMSA8PCAoKChNQVhfQk9OVVMgLSBD VVJSRU5UX0JPTlVTKHApKSA/IDogMSkgLSAxKSkpDQotI2VuZGlmDQotDQotI2RlZmluZSBTQ0FM RSh2MSx2MV9tYXgsdjJfbWF4KSBcDQotCSh2MSkgKiAodjJfbWF4KSAvICh2MV9tYXgpDQotDQot I2RlZmluZSBERUxUQShwKSBcDQotCShTQ0FMRShUQVNLX05JQ0UocCksIDQwLCBNQVhfVVNFUl9Q UklPKlBSSU9fQk9OVVNfUkFUSU8vMTAwKSArIFwNCi0JCUlOVEVSQUNUSVZFX0RFTFRBKQ0KLQ0K LSNkZWZpbmUgVEFTS19JTlRFUkFDVElWRShwKSBcDQotCSgocCktPnByaW8gPD0gKHApLT5zdGF0 aWNfcHJpbyAtIERFTFRBKHApKQ0KLQ0KLSNkZWZpbmUgSlVTVF9JTlRFUkFDVElWRV9TTEVFUChw KSBcDQotCShKSUZGSUVTX1RPX05TKE1BWF9TTEVFUF9BVkcgKiBcDQotCQkoTUFYX0JPTlVTIC8g MiArIERFTFRBKChwKSkgKyAxKSAvIE1BWF9CT05VUyAtIDEpKQ0KLQ0KLSNkZWZpbmUgSElHSF9D UkVESVQocCkgXA0KLQkoKHApLT5pbnRlcmFjdGl2ZV9jcmVkaXQgPiBDUkVESVRfTElNSVQpDQor LyoNCisgKiBTTEVFUF9GQUNUT1IgaXMgYSBmaXhlZCBwb2ludCBmYWN0b3IgdXNlZCB0byBzY2Fs ZSBoaXN0b3J5IHRyYWNraW5nIHRoaW5ncy4NCisgKiBJbiBwYXJ0aWN1bGFyOiB0b3RhbF90aW1l LCBzbGVlcF90aW1lLCBzbGVlcF9hdmcuDQorICovDQogDQotI2RlZmluZSBMT1dfQ1JFRElUKHAp IFwNCi0JKChwKS0+aW50ZXJhY3RpdmVfY3JlZGl0IDwgLUNSRURJVF9MSU1JVCkNCisjZGVmaW5l IFNMRUVQX0ZBQ1RPUgkJMTAyNA0KIA0KLSNkZWZpbmUgVEFTS19QUkVFTVBUU19DVVJSKHAsIHJx KSBcDQotCSgocCktPnByaW8gPCAocnEpLT5jdXJyLT5wcmlvKQ0KKyNkZWZpbmUgQ1BVX0JBTEFO Q0VfVEhSRVNIT0xECTEyNQ0KKyNkZWZpbmUgTk9ERV9CQUxBTkNFX1RIUkVTSE9MRAkxMjUNCiAN CiAvKg0KLSAqIEJBU0VfVElNRVNMSUNFIHNjYWxlcyB1c2VyLW5pY2UgdmFsdWVzIFsgLTIwIC4u LiAxOSBdDQotICogdG8gdGltZSBzbGljZSB2YWx1ZXMuDQotICoNCi0gKiBUaGUgaGlnaGVyIGEg dGhyZWFkJ3MgcHJpb3JpdHksIHRoZSBiaWdnZXIgdGltZXNsaWNlcw0KLSAqIGl0IGdldHMgZHVy aW5nIG9uZSByb3VuZCBvZiBleGVjdXRpb24uIEJ1dCBldmVuIHRoZSBsb3dlc3QNCi0gKiBwcmlv cml0eSB0aHJlYWQgZ2V0cyBNSU5fVElNRVNMSUNFIHdvcnRoIG9mIGV4ZWN1dGlvbiB0aW1lLg0K LSAqDQotICogdGFza190aW1lc2xpY2UoKSBpcyB0aGUgaW50ZXJmYWNlIHRoYXQgaXMgdXNlZCBi eSB0aGUgc2NoZWR1bGVyLg0KKyAqIFRoZSBzY2hlZHVsZXIgY2xhc3NpZmllcyBhIHByb2Nlc3Mg YXMgcGVyZm9ybWluZyBvbmUgb2YgdGhlIGZvbGxvd2luZw0KKyAqIGFjdGl2aXRpZXMNCiAgKi8N CisjZGVmaW5lIFNUSU1FX1NMRUVQCQkxCS8qIFNsZWVwaW5nICovDQorI2RlZmluZSBTVElNRV9S VU4JCTIJLyogVXNpbmcgQ1BVICovDQorI2RlZmluZSBTVElNRV9XQUlUCQkzCS8qIFdhaXRpbmcg Zm9yIENQVSAqLw0KIA0KLSNkZWZpbmUgQkFTRV9USU1FU0xJQ0UocCkgKE1JTl9USU1FU0xJQ0Ug KyBcDQotCSgoTUFYX1RJTUVTTElDRSAtIE1JTl9USU1FU0xJQ0UpICogKE1BWF9QUklPLTEtKHAp LT5zdGF0aWNfcHJpbykvKE1BWF9VU0VSX1BSSU8gLSAxKSkpDQotDQotc3RhdGljIGlubGluZSB1 bnNpZ25lZCBpbnQgdGFza190aW1lc2xpY2UodGFza190ICpwKQ0KLXsNCi0JcmV0dXJuIEJBU0Vf VElNRVNMSUNFKHApOw0KLX0NCisjZGVmaW5lIFRBU0tfUFJFRU1QVFNfQ1VSUihwLCBycSkJCVwN CisJKCAocCktPnByaW8gPCAocnEpLT5jdXJyLT5wcmlvICkNCiANCiAvKg0KICAqIFRoZXNlIGFy ZSB0aGUgcnVucXVldWUgZGF0YSBzdHJ1Y3R1cmVzOg0KICAqLw0KIA0KLSNkZWZpbmUgQklUTUFQ X1NJWkUgKCgoKE1BWF9QUklPKzErNykvOCkrc2l6ZW9mKGxvbmcpLTEpL3NpemVvZihsb25nKSkN CisjZGVmaW5lIEJJVE1BUF9TSVpFICgoKChNQVhfUFJJTys3KS84KStzaXplb2YobG9uZyktMSkv c2l6ZW9mKGxvbmcpKQ0KIA0KIHR5cGVkZWYgc3RydWN0IHJ1bnF1ZXVlIHJ1bnF1ZXVlX3Q7DQog DQogc3RydWN0IHByaW9fYXJyYXkgew0KLQlpbnQgbnJfYWN0aXZlOw0KKwl1bnNpZ25lZCBpbnQg bnJfYWN0aXZlOw0KIAl1bnNpZ25lZCBsb25nIGJpdG1hcFtCSVRNQVBfU0laRV07DQogCXN0cnVj dCBsaXN0X2hlYWQgcXVldWVbTUFYX1BSSU9dOw0KIH07DQogDQorI2RlZmluZSBGUFQJMTI4CS8q IGZpeGVkIHBvaW50IGZhY3RvciAqLw0KKw0KIC8qDQogICogVGhpcyBpcyB0aGUgbWFpbiwgcGVy LUNQVSBydW5xdWV1ZSBkYXRhIHN0cnVjdHVyZS4NCiAgKg0KQEAgLTE5OCwyMCArMTM0LDI0IEBA IHN0cnVjdCBwcmlvX2FycmF5IHsNCiAgKi8NCiBzdHJ1Y3QgcnVucXVldWUgew0KIAlzcGlubG9j a190IGxvY2s7DQotCXVuc2lnbmVkIGxvbmcgbnJfcnVubmluZywgbnJfc3dpdGNoZXMsIGV4cGly ZWRfdGltZXN0YW1wLA0KLQkJCW5yX3VuaW50ZXJydXB0aWJsZTsNCisJdW5zaWduZWQgbG9uZyBh cnJheV9zZXF1ZW5jZTsNCisJdW5zaWduZWQgbG9uZyBucl9ydW5uaW5nLCBucl9zd2l0Y2hlcywg bnJfdW5pbnRlcnJ1cHRpYmxlOw0KIAl0YXNrX3QgKmN1cnIsICppZGxlOw0KIAlzdHJ1Y3QgbW1f c3RydWN0ICpwcmV2X21tOw0KIAlwcmlvX2FycmF5X3QgKmFjdGl2ZSwgKmV4cGlyZWQsIGFycmF5 c1syXTsNCi0JaW50IHByZXZfY3B1X2xvYWRbTlJfQ1BVU107DQotI2lmZGVmIENPTkZJR19OVU1B DQotCWF0b21pY190ICpub2RlX25yX3J1bm5pbmc7DQotCWludCBwcmV2X25vZGVfbG9hZFtNQVhf TlVNTk9ERVNdOw0KLSNlbmRpZg0KKw0KIAl0YXNrX3QgKm1pZ3JhdGlvbl90aHJlYWQ7DQogCXN0 cnVjdCBsaXN0X2hlYWQgbWlncmF0aW9uX3F1ZXVlOw0KIA0KIAlhdG9taWNfdCBucl9pb3dhaXQ7 DQorDQorI2lmZGVmIENPTkZJR19TTVANCisJdW5zaWduZWQgbG9uZyBucl9sYl9mYWlsZWQ7DQor CXVuc2lnbmVkIGxvbmcgY3B1X2xvYWRbTlJfQ1BVU107DQorI2VuZGlmDQorI2lmZGVmIENPTkZJ R19OVU1BDQorCXVuc2lnbmVkIGxvbmcgbnJfZXhlYzsNCisjZW5kaWYNCiB9Ow0KIA0KIHN0YXRp YyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcnVucXVldWUsIHJ1bnF1ZXVlcyk7DQpAQCAtMjMwLDUx ICsxNzAsMzIgQEAgc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBydW5xdWV1ZSwgcg0KICMg ZGVmaW5lIHRhc2tfcnVubmluZyhycSwgcCkJCSgocnEpLT5jdXJyID09IChwKSkNCiAjZW5kaWYN CiANCi0jaWZkZWYgQ09ORklHX05VTUENCi0NCiAvKg0KICAqIEtlZXAgdHJhY2sgb2YgcnVubmlu ZyB0YXNrcy4NCiAgKi8NCiANCi1zdGF0aWMgYXRvbWljX3Qgbm9kZV9ucl9ydW5uaW5nW01BWF9O VU1OT0RFU10gX19fX2NhY2hlbGluZV9tYXhhbGlnbmVkX2luX3NtcCA9DQotCXtbMCAuLi5NQVhf TlVNTk9ERVMtMV0gPSBBVE9NSUNfSU5JVCgwKX07DQotDQotc3RhdGljIGlubGluZSB2b2lkIG5y X3J1bm5pbmdfaW5pdChzdHJ1Y3QgcnVucXVldWUgKnJxKQ0KK3N0YXRpYyBpbmxpbmUgdm9pZCBu cl9ydW5uaW5nX2luaXQoaW50IGNwdSkNCiB7DQotCXJxLT5ub2RlX25yX3J1bm5pbmcgPSAmbm9k ZV9ucl9ydW5uaW5nWzBdOw0KIH0NCiANCiBzdGF0aWMgaW5saW5lIHZvaWQgbnJfcnVubmluZ19p bmMocnVucXVldWVfdCAqcnEpDQogew0KLQlhdG9taWNfaW5jKHJxLT5ub2RlX25yX3J1bm5pbmcp Ow0KIAlycS0+bnJfcnVubmluZysrOw0KIH0NCiANCiBzdGF0aWMgaW5saW5lIHZvaWQgbnJfcnVu bmluZ19kZWMocnVucXVldWVfdCAqcnEpDQogew0KLQlhdG9taWNfZGVjKHJxLT5ub2RlX25yX3J1 bm5pbmcpOw0KIAlycS0+bnJfcnVubmluZy0tOw0KIH0NCiANCi1fX2luaXQgdm9pZCBub2RlX25y X3J1bm5pbmdfaW5pdCh2b2lkKQ0KKyNkZWZpbmUgVVNfVE9fSklGRklFUyh4KQkoeCAqIEhaIC8g MTAwMDAwMCkNCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2xvY2tfdXModm9pZCkNCiB7 DQotCWludCBpOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7DQotCQlpZiAo Y3B1X3Bvc3NpYmxlKGkpKQ0KLQkJCWNwdV9ycShpKS0+bm9kZV9ucl9ydW5uaW5nID0NCi0JCQkJ Jm5vZGVfbnJfcnVubmluZ1tjcHVfdG9fbm9kZShpKV07DQotCX0NCisJdW5zaWduZWQgbG9uZyBs b25nIG5zID0gc2NoZWRfY2xvY2soKTsNCisJZG9fZGl2KG5zLCAxMDAwVUwpOw0KKwlyZXR1cm4g bnM7DQogfQ0KIA0KLSNlbHNlIC8qICFDT05GSUdfTlVNQSAqLw0KLQ0KLSMgZGVmaW5lIG5yX3J1 bm5pbmdfaW5pdChycSkgICBkbyB7IH0gd2hpbGUgKDApDQotIyBkZWZpbmUgbnJfcnVubmluZ19p bmMocnEpICAgIGRvIHsgKHJxKS0+bnJfcnVubmluZysrOyB9IHdoaWxlICgwKQ0KLSMgZGVmaW5l IG5yX3J1bm5pbmdfZGVjKHJxKSAgICBkbyB7IChycSktPm5yX3J1bm5pbmctLTsgfSB3aGlsZSAo MCkNCi0NCi0jZW5kaWYgLyogQ09ORklHX05VTUEgKi8NCi0NCiAvKg0KICAqIHRhc2tfcnFfbG9j ayAtIGxvY2sgdGhlIHJ1bnF1ZXVlIGEgZ2l2ZW4gdGFzayByZXNpZGVzIG9uIGFuZCBkaXNhYmxl DQogICogaW50ZXJydXB0cy4gIE5vdGUgdGhlIG9yZGVyaW5nOiB3ZSBjYW4gc2FmZWx5IGxvb2t1 cCB0aGUgdGFza19ycSB3aXRob3V0DQpAQCAtMzM5LDM2ICsyNjAsMTIxIEBAIHN0YXRpYyBpbmxp bmUgdm9pZCBlbnF1ZXVlX3Rhc2soc3RydWN0IHQNCiB9DQogDQogLyoNCi0gKiBlZmZlY3RpdmVf cHJpbyAtIHJldHVybiB0aGUgcHJpb3JpdHkgdGhhdCBpcyBiYXNlZCBvbiB0aGUgc3RhdGljDQot ICogcHJpb3JpdHkgYnV0IGlzIG1vZGlmaWVkIGJ5IGJvbnVzZXMvcGVuYWx0aWVzLg0KLSAqDQot ICogV2Ugc2NhbGUgdGhlIGFjdHVhbCBzbGVlcCBhdmVyYWdlIFswIC4uLi4gTUFYX1NMRUVQX0FW R10NCi0gKiBpbnRvIHRoZSAtNSAuLi4gMCAuLi4gKzUgYm9udXMvcGVuYWx0eSByYW5nZS4NCi0g Kg0KLSAqIFdlIHVzZSAyNSUgb2YgdGhlIGZ1bGwgMC4uLjM5IHByaW9yaXR5IHJhbmdlIHNvIHRo YXQ6DQotICoNCi0gKiAxKSBuaWNlICsxOSBpbnRlcmFjdGl2ZSB0YXNrcyBkbyBub3QgcHJlZW1w dCBuaWNlIDAgQ1BVIGhvZ3MuDQotICogMikgbmljZSAtMjAgQ1BVIGhvZ3MgZG8gbm90IGdldCBw cmVlbXB0ZWQgYnkgbmljZSAwIHRhc2tzLg0KKyAqIGFkZF90YXNrX3RpbWUgdXBkYXRlcyBhIHRh c2sgQHAgYWZ0ZXIgQHRpbWUgb2YgZG9pbmcgdGhlIHNwZWNpZmllZCBAdHlwZQ0KKyAqIG9mIGFj dGl2aXR5LiBTZWUgU1RJTUVfKi4gVGhpcyBpcyB1c2VkIGZvciBwcmlvcml0eSBjYWxjdWxhdGlv bi4NCisgKi8NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3Rhc2tfdGltZSh0YXNrX3QgKnAs IHVuc2lnbmVkIGxvbmcgdGltZSwgdW5zaWduZWQgbG9uZyB0eXBlKQ0KK3sNCisJdW5zaWduZWQg bG9uZyByYXRpbzsNCisJdW5zaWduZWQgbG9uZyBtYXhfYWZmZWN0Ow0KKwl1bnNpZ25lZCBsb25n IGxvbmcgdG1wOw0KKw0KKwlpZiAodGltZSA9PSAwKQ0KKwkJcmV0dXJuOw0KKw0KKwlpZiAodHlw ZSA9PSBTVElNRV9TTEVFUCkNCisJCW1heF9hZmZlY3QgPSBNQVhfU0xFRVBfQUZGRUNUOw0KKwll bHNlIGlmICh0eXBlID09IFNUSU1FX1JVTikNCisJCW1heF9hZmZlY3QgPSBNQVhfUlVOX0FGRkVD VDsNCisJZWxzZQ0KKwkJbWF4X2FmZmVjdCA9IE1BWF9XQUlUX0FGRkVDVDsNCisNCisJaWYgKHRp bWUgPiBtYXhfYWZmZWN0KQ0KKwkJdGltZSA9IG1heF9hZmZlY3Q7DQorDQorCXJhdGlvID0gTUFY X1NMRUVQIC0gdGltZTsNCisJdG1wID0gKHVuc2lnbmVkIGxvbmcgbG9uZylyYXRpbypwLT50b3Rh bF90aW1lICsgTUFYX1NMRUVQLzI7DQorCWRvX2Rpdih0bXAsIE1BWF9TTEVFUCk7DQorCXAtPnRv dGFsX3RpbWUgPSB0bXA7DQorDQorCXRtcCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpcmF0aW8qcC0+ c2xlZXBfdGltZSArIE1BWF9TTEVFUC8yOw0KKwlkb19kaXYodG1wLCBNQVhfU0xFRVApOw0KKwlw LT5zbGVlcF90aW1lID0gdG1wOw0KKw0KKwlpZiAodHlwZSAhPSBTVElNRV9XQUlUKSB7DQorCQlw LT50b3RhbF90aW1lICs9IHRpbWU7DQorCQlpZiAodHlwZSA9PSBTVElNRV9TTEVFUCkNCisJCQlw LT5zbGVlcF90aW1lICs9IHRpbWU7DQorDQorCQlwLT5zbGVlcF9hdmcgPSAoU0xFRVBfRkFDVE9S ICogcC0+c2xlZXBfdGltZSkgLyBwLT50b3RhbF90aW1lOw0KKwl9DQorDQorCWlmIChwLT50b3Rh bF90aW1lIDwgTUlOX0hJU1RPUlkpIHsNCisJCXAtPnRvdGFsX3RpbWUgPSBNSU5fSElTVE9SWTsN CisJCXAtPnNsZWVwX3RpbWUgPSBwLT50b3RhbF90aW1lICogcC0+c2xlZXBfYXZnIC8gU0xFRVBf RkFDVE9SOw0KKwl9DQorfQ0KKw0KKy8qDQorICogVGhlIGhpZ2hlciBhIHRocmVhZCdzIHByaW9y aXR5LCB0aGUgYmlnZ2VyIHRpbWVzbGljZXMNCisgKiBpdCBnZXRzIGR1cmluZyBvbmUgcm91bmQg b2YgZXhlY3V0aW9uLiBCdXQgZXZlbiB0aGUgbG93ZXN0DQorICogcHJpb3JpdHkgdGhyZWFkIGdl dHMgTUlOX1RJTUVTTElDRSB3b3J0aCBvZiBleGVjdXRpb24gdGltZS4NCiAgKg0KLSAqIEJvdGgg cHJvcGVydGllcyBhcmUgaW1wb3J0YW50IHRvIGNlcnRhaW4gd29ya2xvYWRzLg0KKyAqIFRpbWVz bGljZXMgYXJlIHNjYWxlZCwgc28gaWYgb25seSBsb3cgcHJpb3JpdHkgcHJvY2Vzc2VzIGFyZSBy dW5uaW5nLA0KKyAqIHRoZXkgd2lsbCBhbGwgZ2V0IGxvbmcgdGltZXNsaWNlcy4NCiAgKi8NCi1z dGF0aWMgaW50IGVmZmVjdGl2ZV9wcmlvKHRhc2tfdCAqcCkNCitzdGF0aWMgdW5zaWduZWQgaW50 IHRhc2tfdGltZXNsaWNlKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEpDQogew0KLQlpbnQgYm9u dXMsIHByaW87DQorCWludCBpZHgsIGRlbHRhOw0KKwl1bnNpZ25lZCBpbnQgYmFzZSwgdGltZXNs aWNlOw0KKw0KKwlpZiAodW5saWtlbHkocnRfdGFzayhwKSkpDQorCQlyZXR1cm4gTUFYX1RJTUVT TElDRTsNCisNCisJaWR4ID0gbWluKGZpbmRfbmV4dF9iaXQocnEtPmFjdGl2ZS0+Yml0bWFwLCBN QVhfUFJJTywgTUFYX1JUX1BSSU8pLA0KKwkJZmluZF9uZXh0X2JpdChycS0+ZXhwaXJlZC0+Yml0 bWFwLCBNQVhfUFJJTywgTUFYX1JUX1BSSU8pKTsNCisJaWR4ID0gbWluKGlkeCwgcC0+cHJpbyk7 DQorCWRlbHRhID0gcC0+cHJpbyAtIGlkeDsNCisNCisJLyoNCisJICogVGhpcyBpcyBhIGJpdCBz dWJ0bGUuIFRoZSBmaXJzdCBsaW5lIGVzdGFibGlzaGVzIGEgdGltZXNsaWNlIGJhc2VkDQorCSAq IG9uIGhvdyBmYXIgdGhpcyB0YXNrIGlzIGZyb20gYmVpbmcgdGhlIGhpZ2hlc3QgcHJpb3JpdHkg cnVubmFibGUuDQorCSAqIFRoZSBzZWNvbmQgbGluZSBzY2FsZXMgdGhpcyByZXN1bHQgc28gbG93 IHByaW9yaXR5IHRhc2tzIHdpbGwgZ2V0DQorCSAqIGJpZyB0aW1lc2xpY2VzIGlmIGhpZ2hlciBw cmlvcml0eSBvbmVzIGFyZSBub3QgcnVubmluZy4NCisJICovDQorCWJhc2UgPSBNSU5fVElNRVNM SUNFICogKE1BWF9VU0VSX1BSSU8gKyAxKSAvIChkZWx0YSArIDIpOw0KKwl0aW1lc2xpY2UgPSBi YXNlICogKFVTRVJfUFJJTyhpZHgpICsgOCkgLyAyNDsNCisNCisJaWYgKHRpbWVzbGljZSA8PSBN SU5fVElNRVNMSUNFKQ0KKwkJdGltZXNsaWNlID0gTUlOX1RJTUVTTElDRTsNCisNCisJcmV0dXJu IHRpbWVzbGljZTsNCit9DQorDQorLyoNCisgKiB0YXNrX3ByaW9yaXR5OiBjYWxjdWxhdGVzIGEg dGFzaydzIHByaW9yaXR5IGJhc2VkIG9uIHByZXZpb3VzIHJ1bm5pbmcNCisgKiBoaXN0b3J5IChz ZWUgYWRkX3Rhc2tfdGltZSkuIFRoZSBwcmlvcml0eSBpcyBqdXN0IGEgc2ltcGxlIGxpbmVhciBm dW5jdGlvbg0KKyAqIGJhc2VkIG9uIHNsZWVwX2F2ZyBhbmQgc3RhdGljX3ByaW8uDQorICovDQor c3RhdGljIHVuc2lnbmVkIGxvbmcgdGFza19wcmlvcml0eSh0YXNrX3QgKnApDQorew0KKwl1bnNp Z25lZCBpbnQgYm9udXMsIHByaW87DQogDQogCWlmIChydF90YXNrKHApKQ0KIAkJcmV0dXJuIHAt PnByaW87DQogDQotCWJvbnVzID0gQ1VSUkVOVF9CT05VUyhwKSAtIE1BWF9CT05VUyAvIDI7DQor CWJvbnVzID0gKChNQVhfVVNFUl9QUklPIC8gMykgKiBwLT5zbGVlcF9hdmcgKyAoU0xFRVBfRkFD VE9SIC8gMikpIC8gU0xFRVBfRkFDVE9SOw0KKwlwcmlvID0gVVNFUl9QUklPKHAtPnN0YXRpY19w cmlvKSArIDEwOw0KKw0KKwlwcmlvID0gTUFYX1JUX1BSSU8gKyBwcmlvIC0gYm9udXM7DQogDQot CXByaW8gPSBwLT5zdGF0aWNfcHJpbyAtIGJvbnVzOw0KIAlpZiAocHJpbyA8IE1BWF9SVF9QUklP KQ0KIAkJcHJpbyA9IE1BWF9SVF9QUklPOw0KIAlpZiAocHJpbyA+IE1BWF9QUklPLTEpDQogCQlw cmlvID0gTUFYX1BSSU8tMTsNCisNCiAJcmV0dXJuIHByaW87DQogfQ0KIA0KK3N0YXRpYyBpbmxp bmUgaW50IHRhc2tfZXhwaXJlZCh0YXNrX3QgKnAsIHJ1bnF1ZXVlX3QgKnJxKQ0KK3sNCisJdW5z aWduZWQgbG9uZyB1c2VkID0gcC0+dXNlZF9zbGljZSArIChjbG9ja191cygpIC0gcC0+dGltZXN0 YW1wKTsNCisJaWYgKHVzZWQgPj0gdGFza190aW1lc2xpY2UocCwgcnEpKQ0KKwkJcmV0dXJuIDE7 DQorDQorCXJldHVybiAwOw0KK30NCiAvKg0KICAqIF9fYWN0aXZhdGVfdGFzayAtIG1vdmUgYSB0 YXNrIHRvIHRoZSBydW5xdWV1ZS4NCiAgKi8NCkBAIC0zNzgsODIgKzM4NCw2IEBAIHN0YXRpYyBp bmxpbmUgdm9pZCBfX2FjdGl2YXRlX3Rhc2sodGFza18NCiAJbnJfcnVubmluZ19pbmMocnEpOw0K IH0NCiANCi1zdGF0aWMgdm9pZCByZWNhbGNfdGFza19wcmlvKHRhc2tfdCAqcCwgdW5zaWduZWQg bG9uZyBsb25nIG5vdykNCi17DQotCXVuc2lnbmVkIGxvbmcgbG9uZyBfX3NsZWVwX3RpbWUgPSBu b3cgLSBwLT50aW1lc3RhbXA7DQotCXVuc2lnbmVkIGxvbmcgc2xlZXBfdGltZTsNCi0NCi0JaWYg KF9fc2xlZXBfdGltZSA+IE5TX01BWF9TTEVFUF9BVkcpDQotCQlzbGVlcF90aW1lID0gTlNfTUFY X1NMRUVQX0FWRzsNCi0JZWxzZQ0KLQkJc2xlZXBfdGltZSA9ICh1bnNpZ25lZCBsb25nKV9fc2xl ZXBfdGltZTsNCi0NCi0JaWYgKGxpa2VseShzbGVlcF90aW1lID4gMCkpIHsNCi0JCS8qDQotCQkg KiBVc2VyIHRhc2tzIHRoYXQgc2xlZXAgYSBsb25nIHRpbWUgYXJlIGNhdGVnb3Jpc2VkIGFzDQot CQkgKiBpZGxlIGFuZCB3aWxsIGdldCBqdXN0IGludGVyYWN0aXZlIHN0YXR1cyB0byBzdGF5IGFj dGl2ZSAmDQotCQkgKiBwcmV2ZW50IHRoZW0gc3VkZGVubHkgYmVjb21pbmcgY3B1IGhvZ3MgYW5k IHN0YXJ2aW5nDQotCQkgKiBvdGhlciBwcm9jZXNzZXMuDQotCQkgKi8NCi0JCWlmIChwLT5tbSAm JiBwLT5hY3RpdmF0ZWQgIT0gLTEgJiYNCi0JCQlzbGVlcF90aW1lID4gSlVTVF9JTlRFUkFDVElW RV9TTEVFUChwKSl7DQotCQkJCXAtPnNsZWVwX2F2ZyA9IEpJRkZJRVNfVE9fTlMoTUFYX1NMRUVQ X0FWRyAtDQotCQkJCQkJQVZHX1RJTUVTTElDRSk7DQotCQkJCWlmICghSElHSF9DUkVESVQocCkp DQotCQkJCQlwLT5pbnRlcmFjdGl2ZV9jcmVkaXQrKzsNCi0JCX0gZWxzZSB7DQotCQkJLyoNCi0J CQkgKiBUaGUgbG93ZXIgdGhlIHNsZWVwIGF2ZyBhIHRhc2sgaGFzIHRoZSBtb3JlDQotCQkJICog cmFwaWRseSBpdCB3aWxsIHJpc2Ugd2l0aCBzbGVlcCB0aW1lLg0KLQkJCSAqLw0KLQkJCXNsZWVw X3RpbWUgKj0gKE1BWF9CT05VUyAtIENVUlJFTlRfQk9OVVMocCkpID8gOiAxOw0KLQ0KLQkJCS8q DQotCQkJICogVGFza3Mgd2l0aCBsb3cgaW50ZXJhY3RpdmVfY3JlZGl0IGFyZSBsaW1pdGVkIHRv DQotCQkJICogb25lIHRpbWVzbGljZSB3b3J0aCBvZiBzbGVlcCBhdmcgYm9udXMuDQotCQkJICov DQotCQkJaWYgKExPV19DUkVESVQocCkgJiYNCi0JCQkJc2xlZXBfdGltZSA+IEpJRkZJRVNfVE9f TlModGFza190aW1lc2xpY2UocCkpKQ0KLQkJCQkJc2xlZXBfdGltZSA9DQotCQkJCQkJSklGRklF U19UT19OUyh0YXNrX3RpbWVzbGljZShwKSk7DQotDQotCQkJLyoNCi0JCQkgKiBOb24gaGlnaF9j cmVkaXQgdGFza3Mgd2FraW5nIGZyb20gdW5pbnRlcnJ1cHRpYmxlDQotCQkJICogc2xlZXAgYXJl IGxpbWl0ZWQgaW4gdGhlaXIgc2xlZXBfYXZnIHJpc2UgYXMgdGhleQ0KLQkJCSAqIGFyZSBsaWtl bHkgdG8gYmUgY3B1IGhvZ3Mgd2FpdGluZyBvbiBJL08NCi0JCQkgKi8NCi0JCQlpZiAocC0+YWN0 aXZhdGVkID09IC0xICYmICFISUdIX0NSRURJVChwKSAmJiBwLT5tbSl7DQotCQkJCWlmIChwLT5z bGVlcF9hdmcgPj0gSlVTVF9JTlRFUkFDVElWRV9TTEVFUChwKSkNCi0JCQkJCXNsZWVwX3RpbWUg PSAwOw0KLQkJCQllbHNlIGlmIChwLT5zbGVlcF9hdmcgKyBzbGVlcF90aW1lID49DQotCQkJCQlK VVNUX0lOVEVSQUNUSVZFX1NMRUVQKHApKXsNCi0JCQkJCQlwLT5zbGVlcF9hdmcgPQ0KLQkJCQkJ CQlKVVNUX0lOVEVSQUNUSVZFX1NMRUVQKHApOw0KLQkJCQkJCXNsZWVwX3RpbWUgPSAwOw0KLQkJ CQkJfQ0KLQkJCX0NCi0NCi0JCQkvKg0KLQkJCSAqIFRoaXMgY29kZSBnaXZlcyBhIGJvbnVzIHRv IGludGVyYWN0aXZlIHRhc2tzLg0KLQkJCSAqDQotCQkJICogVGhlIGJvb3N0IHdvcmtzIGJ5IHVw ZGF0aW5nIHRoZSAnYXZlcmFnZSBzbGVlcCB0aW1lJw0KLQkJCSAqIHZhbHVlIGhlcmUsIGJhc2Vk IG9uIC0+dGltZXN0YW1wLiBUaGUgbW9yZSB0aW1lIGEgdGFzaw0KLQkJCSAqIHNwZW5kcyBzbGVl cGluZywgdGhlIGhpZ2hlciB0aGUgYXZlcmFnZSBnZXRzIC0gYW5kIHRoZQ0KLQkJCSAqIGhpZ2hl ciB0aGUgcHJpb3JpdHkgYm9vc3QgZ2V0cyBhcyB3ZWxsLg0KLQkJCSAqLw0KLQkJCXAtPnNsZWVw X2F2ZyArPSBzbGVlcF90aW1lOw0KLQ0KLQkJCWlmIChwLT5zbGVlcF9hdmcgPiBOU19NQVhfU0xF RVBfQVZHKXsNCi0JCQkJcC0+c2xlZXBfYXZnID0gTlNfTUFYX1NMRUVQX0FWRzsNCi0JCQkJaWYg KCFISUdIX0NSRURJVChwKSkNCi0JCQkJCXAtPmludGVyYWN0aXZlX2NyZWRpdCsrOw0KLQkJCX0N Ci0JCX0NCi0JfQ0KLQ0KLQlwLT5wcmlvID0gZWZmZWN0aXZlX3ByaW8ocCk7DQotfQ0KLQ0KIC8q DQogICogYWN0aXZhdGVfdGFzayAtIG1vdmUgYSB0YXNrIHRvIHRoZSBydW5xdWV1ZSBhbmQgZG8g cHJpb3JpdHkgcmVjYWxjdWxhdGlvbg0KICAqDQpAQCAtNDYyLDMyICszOTIsMjYgQEAgc3RhdGlj IHZvaWQgcmVjYWxjX3Rhc2tfcHJpbyh0YXNrX3QgKnAsIA0KICAqLw0KIHN0YXRpYyBpbmxpbmUg dm9pZCBhY3RpdmF0ZV90YXNrKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEpDQogew0KLQl1bnNp Z25lZCBsb25nIGxvbmcgbm93ID0gc2NoZWRfY2xvY2soKTsNCisJdW5zaWduZWQgbG9uZyBub3cg PSBjbG9ja191cygpOw0KKwl1bnNpZ25lZCBsb25nIHNsZWVwID0gbm93IC0gcC0+dGltZXN0YW1w Ow0KKwlwLT50aW1lc3RhbXAgPSBub3c7DQorDQorCWFkZF90YXNrX3RpbWUocCwgc2xlZXAsIFNU SU1FX1NMRUVQKTsNCiANCi0JcmVjYWxjX3Rhc2tfcHJpbyhwLCBub3cpOw0KKwlwLT5wcmlvID0g dGFza19wcmlvcml0eShwKTsNCiANCiAJLyoNCi0JICogVGhpcyBjaGVja3MgdG8gbWFrZSBzdXJl IGl0J3Mgbm90IGFuIHVuaW50ZXJydXB0aWJsZSB0YXNrDQotCSAqIHRoYXQgaXMgbm93IHdha2lu ZyB1cC4NCisJICogSWYgd2UgaGF2ZSBzbGVwdCB0aHJvdWdoIGFuIGFjdGl2ZS9leHBpcmVkIGFy cmF5IHN3aXRjaCwgcmVzdGFydA0KKwkgKiBvdXIgdGltZXNsaWNlIHRvby4NCiAJICovDQotCWlm ICghcC0+YWN0aXZhdGVkKXsNCi0JCS8qDQotCQkgKiBUYXNrcyB3aGljaCB3ZXJlIHdva2VuIHVw IGJ5IGludGVycnVwdHMgKGllLiBodyBldmVudHMpDQotCQkgKiBhcmUgbW9zdCBsaWtlbHkgb2Yg aW50ZXJhY3RpdmUgbmF0dXJlLiBTbyB3ZSBnaXZlIHRoZW0NCi0JCSAqIHRoZSBjcmVkaXQgb2Yg ZXh0ZW5kaW5nIHRoZWlyIHNsZWVwIHRpbWUgdG8gdGhlIHBlcmlvZA0KLQkJICogb2YgdGltZSB0 aGV5IHNwZW5kIG9uIHRoZSBydW5xdWV1ZSwgd2FpdGluZyBmb3IgZXhlY3V0aW9uDQotCQkgKiBv biBhIENQVSwgZmlyc3QgdGltZSBhcm91bmQ6DQotCQkgKi8NCi0JCWlmIChpbl9pbnRlcnJ1cHQo KSkNCi0JCQlwLT5hY3RpdmF0ZWQgPSAyOw0KLQkJZWxzZQ0KLQkJLyoNCi0JCSAqIE5vcm1hbCBm aXJzdC10aW1lIHdha2V1cHMgZ2V0IGEgY3JlZGl0IHRvbyBmb3Igb24tcnVucXVldWUNCi0JCSAq IHRpbWUsIGJ1dCBpdCB3aWxsIGJlIHdlaWdodGVkIGRvd246DQotCQkgKi8NCi0JCQlwLT5hY3Rp dmF0ZWQgPSAxOw0KLQkJfQ0KLQlwLT50aW1lc3RhbXAgPSBub3c7DQorCWlmIChycS0+YXJyYXlf c2VxdWVuY2UgIT0gcC0+YXJyYXlfc2VxdWVuY2UpIHsNCisJCXAtPmZpcnN0X3RpbWVfc2xpY2Ug PSAwOw0KKwkJcC0+dXNlZF9zbGljZSA9IDA7DQorCX0gZWxzZSBpZiAocC0+dXNlZF9zbGljZSA+ PSB0YXNrX3RpbWVzbGljZShwLCBycSkpIHsNCisJCWVucXVldWVfdGFzayhwLCBycS0+ZXhwaXJl ZCk7DQorCQlucl9ydW5uaW5nX2luYyhycSk7DQorCQlyZXR1cm47DQorCX0NCiANCiAJX19hY3Rp dmF0ZV90YXNrKHAsIHJxKTsNCiB9DQpAQCAtNDk3LDYgKzQyMSw3IEBAIHN0YXRpYyBpbmxpbmUg dm9pZCBhY3RpdmF0ZV90YXNrKHRhc2tfdCANCiAgKi8NCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVh Y3RpdmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgcnVucXVldWVfdCAqcnEpDQogew0K KwlwLT5hcnJheV9zZXF1ZW5jZSA9IHJxLT5hcnJheV9zZXF1ZW5jZTsNCiAJbnJfcnVubmluZ19k ZWMocnEpOw0KIAlpZiAocC0+c3RhdGUgPT0gVEFTS19VTklOVEVSUlVQVElCTEUpDQogCQlycS0+ bnJfdW5pbnRlcnJ1cHRpYmxlKys7DQpAQCAtNjM4LDE4ICs1NjMsMTAgQEAgcmVwZWF0X2xvY2tf dGFzazoNCiAJCQkJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7DQogCQkJCWdvdG8gcmVwZWF0 X2xvY2tfdGFzazsNCiAJCQl9DQotCQkJaWYgKG9sZF9zdGF0ZSA9PSBUQVNLX1VOSU5URVJSVVBU SUJMRSl7DQorCQkJaWYgKG9sZF9zdGF0ZSA9PSBUQVNLX1VOSU5URVJSVVBUSUJMRSkNCiAJCQkJ cnEtPm5yX3VuaW50ZXJydXB0aWJsZS0tOw0KLQkJCQkvKg0KLQkJCQkgKiBUYXNrcyBvbiBpbnZv bHVudGFyeSBzbGVlcCBkb24ndCBlYXJuDQotCQkJCSAqIHNsZWVwX2F2ZyBiZXlvbmQganVzdCBp bnRlcmFjdGl2ZSBzdGF0ZS4NCi0JCQkJICovDQotCQkJCXAtPmFjdGl2YXRlZCA9IC0xOw0KLQkJ CX0NCi0JCQlpZiAoc3luYyAmJiAodGFza19jcHUocCkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSkN Ci0JCQkJX19hY3RpdmF0ZV90YXNrKHAsIHJxKTsNCi0JCQllbHNlIHsNCi0JCQkJYWN0aXZhdGVf dGFzayhwLCBycSk7DQorCQkJYWN0aXZhdGVfdGFzayhwLCBycSk7DQorCQkJaWYgKCFzeW5jKSB7 DQogCQkJCWlmIChUQVNLX1BSRUVNUFRTX0NVUlIocCwgcnEpKQ0KIAkJCQkJcmVzY2hlZF90YXNr KHJxLT5jdXJyKTsNCiAJCQl9DQpAQCAtNjc0LDQyICs1OTEsOTQgQEAgaW50IHdha2VfdXBfc3Rh dGUodGFza190ICpwLCB1bnNpZ25lZCBpbg0KIH0NCiANCiAvKg0KKyAqIFBlcmZvcm0gc2NoZWR1 bGVyIHJlbGF0ZWQgYWNjb3VudGluZyBmb3IgYSBuZXdseSBmb3JrZWQgcHJvY2VzcyBAcC4NCisg KiBAcCBpcyBmb3JrZWQgYnkgY3VycmVudC4NCisgKi8NCit2b2lkIHNjaGVkX2ZvcmsodGFza190 ICpwKQ0KK3sNCisJdW5zaWduZWQgbG9uZyB0cywgbGVmdDsNCisJdW5zaWduZWQgbG9uZyBmbGFn czsNCisJcnVucXVldWVfdCAqcnE7DQorDQorCS8qDQorCSAqIFNoYXJlIHRoZSB0aW1lc2xpY2Ug YmV0d2VlbiBwYXJlbnQgYW5kIGNoaWxkLCB0aHVzIHRoZQ0KKwkgKiB0b3RhbCBhbW91bnQgb2Yg cGVuZGluZyB0aW1lc2xpY2VzIGluIHRoZSBzeXN0ZW0gZG9lc24ndCBjaGFuZ2UsDQorCSAqIHJl c3VsdGluZyBpbiBtb3JlIHNjaGVkdWxpbmcgZmFpcm5lc3MuDQorCSAqLw0KKwlsb2NhbF9pcnFf ZGlzYWJsZSgpOw0KKwlwLT50aW1lc3RhbXAgPSBjbG9ja191cygpOw0KKwlycSA9IHRhc2tfcnFf bG9jayhjdXJyZW50LCAmZmxhZ3MpOw0KKwl0cyA9IHRhc2tfdGltZXNsaWNlKGN1cnJlbnQsIHJx KTsNCisJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7DQorDQorCS8qDQorCSAqIFNoYXJlIGhh bGYgb3VyIHRpbWVzbGljZSB3aXRoIHRoZSBjaGlsZC4NCisJICovDQorCWxlZnQgPSAoY3VycmVu dC0+dXNlZF9zbGljZSArIChjbG9ja191cygpIC0gY3VycmVudC0+dGltZXN0YW1wKSk7DQorCWlm IChsZWZ0ID4gdHMpDQorCQlsZWZ0ID0gMDsNCisJZWxzZQ0KKwkJbGVmdCA9IHRzIC0gbGVmdDsN CisJcC0+dXNlZF9zbGljZSA9IGxlZnQgLyAyOw0KKwljdXJyZW50LT51c2VkX3NsaWNlICs9IChs ZWZ0ICsgMSkgLyAyOw0KKw0KKwkvKg0KKwkgKiBUaGUgcmVtYWluZGVyIG9mIHRoZSBmaXJzdCB0 aW1lc2xpY2UgbWlnaHQgYmUgcmVjb3ZlcmVkIGJ5DQorCSAqIHRoZSBwYXJlbnQgaWYgdGhlIGNo aWxkIGV4aXRzIGVhcmx5IGVub3VnaC4NCisJICovDQorCXAtPmZpcnN0X3RpbWVfc2xpY2UgPSAx Ow0KKwlpZiAodW5saWtlbHkoY3VycmVudC0+dXNlZF9zbGljZSA+PSB0cykpIHsNCisJCS8qDQor CSAJICogVGhpcyBjYXNlIGlzIHJhcmUsIGl0IGhhcHBlbnMgd2hlbiB0aGUgcGFyZW50IGhhcyBv bmx5DQorCSAJICogYSBzaW5nbGUgamlmZnkgbGVmdCBmcm9tIGl0cyB0aW1lc2xpY2UuIFRha2lu ZyB0aGUNCisJCSAqIHJ1bnF1ZXVlIGxvY2sgaXMgbm90IGEgcHJvYmxlbS4NCisJCSAqLw0KKwkJ cHJlZW1wdF9kaXNhYmxlKCk7DQorCQlzY2hlZHVsZXJfdGljaygwLCAwKTsNCisJCWxvY2FsX2ly cV9lbmFibGUoKTsNCisJCXByZWVtcHRfZW5hYmxlKCk7DQorCX0gZWxzZQ0KKwkJbG9jYWxfaXJx X2VuYWJsZSgpOw0KK30NCisNCisvKg0KICAqIHdha2VfdXBfZm9ya2VkX3Byb2Nlc3MgLSB3YWtl IHVwIGEgZnJlc2hseSBmb3JrZWQgcHJvY2Vzcy4NCiAgKg0KICAqIFRoaXMgZnVuY3Rpb24gd2ls bCBkbyBzb21lIGluaXRpYWwgc2NoZWR1bGVyIHN0YXRpc3RpY3MgaG91c2VrZWVwaW5nDQogICog dGhhdCBtdXN0IGJlIGRvbmUgZm9yIGV2ZXJ5IG5ld2x5IGNyZWF0ZWQgcHJvY2Vzcy4NCiAgKi8N Ci12b2lkIHdha2VfdXBfZm9ya2VkX3Byb2Nlc3ModGFza190ICogcCkNCit2b2lkIHdha2VfdXBf Zm9ya2VkX3Byb2Nlc3ModGFza190ICpwKQ0KIHsNCiAJdW5zaWduZWQgbG9uZyBmbGFnczsNCiAJ cnVucXVldWVfdCAqcnEgPSB0YXNrX3JxX2xvY2soY3VycmVudCwgJmZsYWdzKTsNCiANCiAJcC0+ c3RhdGUgPSBUQVNLX1JVTk5JTkc7DQorDQorCXNldF90YXNrX2NwdShwLCBzbXBfcHJvY2Vzc29y X2lkKCkpOw0KKw0KIAkvKg0KLQkgKiBXZSBkZWNyZWFzZSB0aGUgc2xlZXAgYXZlcmFnZSBvZiBm b3JraW5nIHBhcmVudHMNCi0JICogYW5kIGNoaWxkcmVuIGFzIHdlbGwsIHRvIGtlZXAgbWF4LWlu dGVyYWN0aXZlIHRhc2tzDQotCSAqIGZyb20gZm9ya2luZyB0YXNrcyB0aGF0IGFyZSBtYXgtaW50 ZXJhY3RpdmUuDQorCSAqIEdldCBvbmx5IDEvMTB0aCBvZiB0aGUgcGFyZW50cyBoaXN0b3J5LiBM aW1pdGVkIGJ5IE1JTl9ISVNUT1JZLg0KIAkgKi8NCi0JY3VycmVudC0+c2xlZXBfYXZnID0gSklG RklFU19UT19OUyhDVVJSRU5UX0JPTlVTKGN1cnJlbnQpICoNCi0JCVBBUkVOVF9QRU5BTFRZIC8g MTAwICogTUFYX1NMRUVQX0FWRyAvIE1BWF9CT05VUyk7DQorCXAtPnRvdGFsX3RpbWUgPSBjdXJy ZW50LT50b3RhbF90aW1lIC8gNDsNCisJcC0+c2xlZXBfdGltZSA9IGN1cnJlbnQtPnNsZWVwX3Rp bWUgLyA0Ow0KKwlwLT5zbGVlcF9hdmcgPSBjdXJyZW50LT5zbGVlcF9hdmc7DQogDQotCXAtPnNs ZWVwX2F2ZyA9IEpJRkZJRVNfVE9fTlMoQ1VSUkVOVF9CT05VUyhwKSAqDQotCQlDSElMRF9QRU5B TFRZIC8gMTAwICogTUFYX1NMRUVQX0FWRyAvIE1BWF9CT05VUyk7DQorCWlmIChwLT50b3RhbF90 aW1lIDwgTUlOX0hJU1RPUlkpIHsNCisJCXAtPnRvdGFsX3RpbWUgPSBNSU5fSElTVE9SWTsNCisJ CXAtPnNsZWVwX3RpbWUgPSBwLT50b3RhbF90aW1lICogcC0+c2xlZXBfYXZnIC8gU0xFRVBfRkFD VE9SOw0KKwl9DQogDQotCXAtPmludGVyYWN0aXZlX2NyZWRpdCA9IDA7DQorCS8qDQorCSAqIExv c2UgMS80IHNsZWVwX3RpbWUgZm9yIGZvcmtpbmcuDQorCSAqLw0KKwljdXJyZW50LT5zbGVlcF90 aW1lID0gMyAqIGN1cnJlbnQtPnNsZWVwX3RpbWUgLyA0Ow0KKwlpZiAoY3VycmVudC0+dG90YWxf dGltZSAhPSAwKQ0KKwkJY3VycmVudC0+c2xlZXBfYXZnID0gKFNMRUVQX0ZBQ1RPUiAqIGN1cnJl bnQtPnNsZWVwX3RpbWUpDQorCQkJCQkJLyBjdXJyZW50LT50b3RhbF90aW1lOw0KIA0KLQlwLT5w cmlvID0gZWZmZWN0aXZlX3ByaW8ocCk7DQotCXNldF90YXNrX2NwdShwLCBzbXBfcHJvY2Vzc29y X2lkKCkpOw0KKwlwLT5wcmlvID0gdGFza19wcmlvcml0eShwKTsNCisJX19hY3RpdmF0ZV90YXNr KHAsIHJxKTsNCiANCi0JaWYgKHVubGlrZWx5KCFjdXJyZW50LT5hcnJheSkpDQotCQlfX2FjdGl2 YXRlX3Rhc2socCwgcnEpOw0KLQllbHNlIHsNCi0JCXAtPnByaW8gPSBjdXJyZW50LT5wcmlvOw0K LQkJbGlzdF9hZGRfdGFpbCgmcC0+cnVuX2xpc3QsICZjdXJyZW50LT5ydW5fbGlzdCk7DQotCQlw LT5hcnJheSA9IGN1cnJlbnQtPmFycmF5Ow0KLQkJcC0+YXJyYXktPm5yX2FjdGl2ZSsrOw0KLQkJ bnJfcnVubmluZ19pbmMocnEpOw0KLQl9DQogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOw0K IH0NCiANCkBAIC03MjcsMjAgKzY5NiwyOCBAQCB2b2lkIHNjaGVkX2V4aXQodGFza190ICogcCkN CiAJdW5zaWduZWQgbG9uZyBmbGFnczsNCiANCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOw0KKw0K KwkvKiBSZWdhaW4gdGhlIHVudXNlZCB0aW1lc2xpY2UgZ2l2ZW4gdG8gQHAgYnkgaXRzIHBhcmVu dCAqLw0KIAlpZiAocC0+Zmlyc3RfdGltZV9zbGljZSkgew0KLQkJcC0+cGFyZW50LT50aW1lX3Ns aWNlICs9IHAtPnRpbWVfc2xpY2U7DQotCQlpZiAodW5saWtlbHkocC0+cGFyZW50LT50aW1lX3Ns aWNlID4gTUFYX1RJTUVTTElDRSkpDQotCQkJcC0+cGFyZW50LT50aW1lX3NsaWNlID0gTUFYX1RJ TUVTTElDRTsNCisJCXVuc2lnbmVkIGxvbmcgdHM7DQorCQl1bnNpZ25lZCBsb25nIGZsYWdzOw0K KwkJcnVucXVldWVfdCAqcnE7DQorCQlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOw0KKwkJ dHMgPSB0YXNrX3RpbWVzbGljZShwLCBycSk7DQorCQlpZiAodHMgPiBwLT51c2VkX3NsaWNlKQ0K KwkJCXAtPnBhcmVudC0+dXNlZF9zbGljZSAtPSB0cyAtIHAtPnVzZWRfc2xpY2U7DQorCQl0YXNr X3JxX3VubG9jayhycSwgJmZsYWdzKTsNCiAJfQ0KKw0KKwkvKiBBcHBseSBzb21lIHBlbmFsdHkg dG8gQHAncyBwYXJlbnQgaWYgQHAgdXNlZCBhIGxvdCBvZiBDUFUgKi8NCisJaWYgKHAtPnNsZWVw X2F2ZyA8IHAtPnBhcmVudC0+c2xlZXBfYXZnKSB7DQorCQlhZGRfdGFza190aW1lKHAtPnBhcmVu dCwNCisJCQlNQVhfU0xFRVAgKiAocC0+cGFyZW50LT5zbGVlcF9hdmcgLSBwLT5zbGVlcF9hdmcp DQorCQkJLyBTTEVFUF9GQUNUT1IgLyAyLA0KKwkJCVNUSU1FX1JVTik7DQorCX0NCisNCiAJbG9j YWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOw0KLQkvKg0KLQkgKiBJZiB0aGUgY2hpbGQgd2FzIGEgKHJl bGF0aXZlLSkgQ1BVIGhvZyB0aGVuIGRlY3JlYXNlDQotCSAqIHRoZSBzbGVlcF9hdmcgb2YgdGhl IHBhcmVudCBhcyB3ZWxsLg0KLQkgKi8NCi0JaWYgKHAtPnNsZWVwX2F2ZyA8IHAtPnBhcmVudC0+ c2xlZXBfYXZnKQ0KLQkJcC0+cGFyZW50LT5zbGVlcF9hdmcgPSBwLT5wYXJlbnQtPnNsZWVwX2F2 ZyAvDQotCQkoRVhJVF9XRUlHSFQgKyAxKSAqIEVYSVRfV0VJR0hUICsgcC0+c2xlZXBfYXZnIC8N Ci0JCShFWElUX1dFSUdIVCArIDEpOw0KIH0NCiANCiAvKioNCkBAIC05MTAsOCArODg3LDE1OCBA QCBzdGF0aWMgaW5saW5lIHZvaWQgZG91YmxlX3JxX3VubG9jayhydW5xDQogCQlzcGluX3VubG9j aygmcnEyLT5sb2NrKTsNCiB9DQogDQorI2lmZGVmIENPTkZJR19TTVANCitzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGxvbmcgZ2V0X2NwdV9sb2FkKGludCBjcHUpDQorew0KKwlydW5xdWV1ZV90ICpy cSA9IGNwdV9ycShjcHUpOw0KKwlydW5xdWV1ZV90ICp0aGlzX3JxID0gdGhpc19ycSgpOw0KKwl1 bnNpZ25lZCBsb25nIG5yID0gRlBUICogcnEtPm5yX3J1bm5pbmcsIGxvYWQgPSB0aGlzX3JxLT5j cHVfbG9hZFtjcHVdOw0KKwl1bnNpZ25lZCBsb25nIHJldCA9IChuciArIGxvYWQpIC8gMjsNCisN CisJdGhpc19ycS0+Y3B1X2xvYWRbY3B1XSA9IHJldDsNCisNCisJcmV0dXJuIHJldDsNCit9DQor DQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZ2V0X2xvd19jcHVfbG9hZChpbnQgY3B1 KQ0KK3sNCisJcnVucXVldWVfdCAqcnEgPSBjcHVfcnEoY3B1KTsNCisJcnVucXVldWVfdCAqdGhp c19ycSA9IHRoaXNfcnEoKTsNCisJdW5zaWduZWQgbG9uZyBuciA9IEZQVCAqIHJxLT5ucl9ydW5u aW5nLCBsb2FkID0gdGhpc19ycS0+Y3B1X2xvYWRbY3B1XTsNCisJcmV0dXJuIG1pbihuciwgbG9h ZCk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2dldF9oaWdoX2NwdV9s b2FkKGludCBjcHUpDQorew0KKwlydW5xdWV1ZV90ICpycSA9IGNwdV9ycShjcHUpOw0KKwlydW5x dWV1ZV90ICp0aGlzX3JxID0gdGhpc19ycSgpOw0KKwl1bnNpZ25lZCBsb25nIG5yID0gRlBUICog cnEtPm5yX3J1bm5pbmcsIGxvYWQgPSB0aGlzX3JxLT5jcHVfbG9hZFtjcHVdOw0KKwlyZXR1cm4g bWF4KG5yLCBsb2FkKTsNCit9DQorDQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9s b3dfY3B1X2xvYWQoaW50IGNwdSkNCit7DQorCXJ1bnF1ZXVlX3QgKnJxID0gY3B1X3JxKGNwdSk7 DQorCXJ1bnF1ZXVlX3QgKnRoaXNfcnEgPSB0aGlzX3JxKCk7DQorCXVuc2lnbmVkIGxvbmcgbnIg PSBGUFQgKiBycS0+bnJfcnVubmluZywgbG9hZCA9IHRoaXNfcnEtPmNwdV9sb2FkW2NwdV07DQor CXVuc2lnbmVkIGxvbmcgcmV0ID0gbWluKG5yLCBsb2FkKTsNCisNCisJdGhpc19ycS0+Y3B1X2xv YWRbY3B1XSA9IChuciArIGxvYWQpIC8gMjsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3Rh dGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9oaWdoX2NwdV9sb2FkKGludCBjcHUpDQorew0K KwlydW5xdWV1ZV90ICpycSA9IGNwdV9ycShjcHUpOw0KKwlydW5xdWV1ZV90ICp0aGlzX3JxID0g dGhpc19ycSgpOw0KKwl1bnNpZ25lZCBsb25nIG5yID0gRlBUICogcnEtPm5yX3J1bm5pbmcsIGxv YWQgPSB0aGlzX3JxLT5jcHVfbG9hZFtjcHVdOw0KKwl1bnNpZ25lZCBsb25nIHJldCA9IG1heChu ciwgbG9hZCk7DQorDQorCXRoaXNfcnEtPmNwdV9sb2FkW2NwdV0gPSAobnIgKyBsb2FkKSAvIDI7 DQorDQorCXJldHVybiByZXQ7DQorfQ0KKyNlbmRpZg0KKw0KICNpZmRlZiBDT05GSUdfTlVNQQ0K IC8qDQorICogRmluZCB0aGUgYnVzaWVzdCBub2RlLg0KKyAqLw0KK3N0YXRpYyBpbnQgZmluZF9i dXNpZXN0X25vZGUoaW50IHRoaXNfbm9kZSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQ0KK3sN CisJdW5zaWduZWQgbG9uZyBub2RlX2xvYWRzW01BWF9OVU1OT0RFU107DQorCXVuc2lnbmVkIGxv bmcgbnJfbm9kZXMgPSAwLCBhdmdfbG9hZCA9IDAsIG1heF9sb2FkID0gMDsNCisJaW50IGksIG5v ZGUgPSAtMTsNCisNCisJaWYgKCFucl9jcHVzX25vZGUodGhpc19ub2RlKSkNCisJCXJldHVybiBu b2RlOw0KKw0KKwlmb3JfZWFjaF9ub2RlX3dpdGhfY3B1cyhpKQ0KKwkJbm9kZV9sb2Fkc1tpXSA9 IDA7DQorDQorCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsNCisJCWludCBuOw0KKwkJ aWYgKCFjcHVfb25saW5lKGkpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJbiA9IGNwdV90b19ub2Rl KGkpOw0KKwkJaWYgKG4gPT0gdGhpc19ub2RlKQ0KKwkJCW5vZGVfbG9hZHNbbl0gKz0gZ2V0X2Nw dV9sb2FkKGkpOw0KKwkJZWxzZQ0KKwkJCW5vZGVfbG9hZHNbbl0gKz0gZ2V0X2xvd19jcHVfbG9h ZChpKTsNCisJfQ0KKw0KKwlmb3JfZWFjaF9ub2RlX3dpdGhfY3B1cyhpKSB7DQorCQlub2RlX2xv YWRzW2ldIC89IG5yX2NwdXNfbm9kZShpKTsNCisJCW5yX25vZGVzKys7DQorCQlhdmdfbG9hZCAr PSBub2RlX2xvYWRzW2ldOw0KKw0KKwkJaWYgKGkgPT0gdGhpc19ub2RlKQ0KKwkJCWNvbnRpbnVl Ow0KKw0KKwkJaWYgKG1heF9sb2FkIDwgbm9kZV9sb2Fkc1tpXSkgew0KKwkJCW1heF9sb2FkID0g bm9kZV9sb2Fkc1tpXTsNCisJCQlub2RlID0gaTsNCisJCX0NCisJfQ0KKwlhdmdfbG9hZCAvPSBu cl9ub2RlczsNCisNCisJaWYgKG5vZGVfbG9hZHNbdGhpc19ub2RlXSA+PSBhdmdfbG9hZCB8fA0K KwkJMTAwKm1heF9sb2FkIDw9IE5PREVfQkFMQU5DRV9USFJFU0hPTEQqbm9kZV9sb2Fkc1t0aGlz X25vZGVdKQ0KKwkJcmV0dXJuIC0xOw0KKw0KKwkqaW1iYWxhbmNlID0gbWluKG1heF9sb2FkIC0g YXZnX2xvYWQsIGF2Z19sb2FkIC0gbm9kZV9sb2Fkc1t0aGlzX25vZGVdKTsNCisJaWYgKCppbWJh bGFuY2UgPCAxKkZQVCAmJiAobWF4X2xvYWQgLSBub2RlX2xvYWRzW3RoaXNfbm9kZV0pID4gMSpG UFQpDQorCQkqaW1iYWxhbmNlID0gMSpGUFQgKiBtaW4obnJfY3B1c19ub2RlKG5vZGUpLA0KKwkJ CQkJCW5yX2NwdXNfbm9kZSh0aGlzX25vZGUpKTsNCisJZWxzZQ0KKwkJKmltYmFsYW5jZSA9IG1p bigobWF4X2xvYWQgLSBhdmdfbG9hZCkgKiBucl9jcHVzX25vZGUobm9kZSksDQorCQkJCShhdmdf bG9hZCAtIG5vZGVfbG9hZHNbdGhpc19ub2RlXSkNCisJCQkJCQkqIG5yX2NwdXNfbm9kZSh0aGlz X25vZGUpICk7DQorCSppbWJhbGFuY2UgPSAoKmltYmFsYW5jZSArIEZQVC8yKSAvIEZQVDsNCisN CisJcmV0dXJuIG5vZGU7DQorfQ0KKw0KKy8qDQorICogRmluZCB0aGUgbGVhc3QgYnVzeSBub2Rl Lg0KKyAqLw0KK3N0YXRpYyBpbnQgZmluZF9iZXN0X25vZGUoaW50IHRoaXNfbm9kZSkNCit7DQor CXVuc2lnbmVkIGxvbmcgbm9kZV9sb2Fkc1tNQVhfTlVNTk9ERVNdOw0KKwl1bnNpZ25lZCBsb25n IG1pbl9sb2FkID0gSU5UX01BWDsNCisJaW50IGksIG5vZGUgPSB0aGlzX25vZGU7DQorDQorCWZv cl9lYWNoX25vZGVfd2l0aF9jcHVzKGkpDQorCQlub2RlX2xvYWRzW2ldID0gMDsNCisNCisJZm9y IChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgew0KKwkJaW50IG47DQorCQlpZiAoIWNwdV9vbmxp bmUoaSkpDQorCQkJY29udGludWU7DQorDQorCQluID0gY3B1X3RvX25vZGUoaSk7DQorCQlpZiAo biA9PSB0aGlzX25vZGUpDQorCQkJbm9kZV9sb2Fkc1tuXSArPSBnZXRfY3B1X2xvYWQoaSk7DQor CQllbHNlDQorCQkJbm9kZV9sb2Fkc1tuXSArPSBnZXRfbG93X2NwdV9sb2FkKGkpOw0KKwl9DQor DQorCWZvcl9lYWNoX25vZGVfd2l0aF9jcHVzKGkpIHsNCisJCW5vZGVfbG9hZHNbaV0gLz0gbnJf Y3B1c19ub2RlKGkpOw0KKw0KKwkJaWYgKG1pbl9sb2FkID4gbm9kZV9sb2Fkc1tpXSArIE5PREVf QkFMQU5DRV9USFJFU0hPTEQqRlBULzEwMCB8fA0KKwkJCQkobWluX2xvYWQgPiBub2RlX2xvYWRz W2ldICYmIGkgPT0gdGhpc19ub2RlKSkgew0KKwkJCW1pbl9sb2FkID0gbm9kZV9sb2Fkc1tpXTsN CisJCQlub2RlID0gaTsNCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gbm9kZTsNCit9DQorDQorLyoN CiAgKiBJZiBkZXN0X2NwdSBpcyBhbGxvd2VkIGZvciB0aGlzIHByb2Nlc3MsIG1pZ3JhdGUgdGhl IHRhc2sgdG8gaXQuDQogICogVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgZm9yY2luZyB0aGUgY3B1 X2FsbG93ZWQgbWFzayB0byBvbmx5DQogICogYWxsb3cgZGVzdF9jcHUsIHdoaWNoIHdpbGwgZm9y Y2UgdGhlIGNwdSBvbnRvIGRlc3RfY3B1LiAgVGhlbg0KQEAgLTkzNyw4OCArMTA2NCw0NyBAQCBz dGF0aWMgdm9pZCBzY2hlZF9taWdyYXRlX3Rhc2sodGFza190ICpwDQogICovDQogc3RhdGljIGlu dCBzY2hlZF9iZXN0X2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApDQogew0KLQlpbnQgaSwgbWlu bG9hZCwgbG9hZCwgYmVzdF9jcHUsIG5vZGUgPSAwOw0KKwlpbnQgaSwgbWluX2xvYWQsICBiZXN0 X2NwdSA9IHRhc2tfY3B1KHApLCBub2RlOw0KIAljcHVtYXNrX3QgY3B1bWFzazsNCiANCi0JYmVz dF9jcHUgPSB0YXNrX2NwdShwKTsNCi0JaWYgKGNwdV9ycShiZXN0X2NwdSktPm5yX3J1bm5pbmcg PD0gMikNCi0JCXJldHVybiBiZXN0X2NwdTsNCi0NCi0JbWlubG9hZCA9IDEwMDAwMDAwOw0KLQlm b3JfZWFjaF9ub2RlX3dpdGhfY3B1cyhpKSB7DQotCQkvKg0KLQkJICogTm9kZSBsb2FkIGlzIGFs d2F5cyBkaXZpZGVkIGJ5IG5yX2NwdXNfbm9kZSB0byBub3JtYWxpc2UgDQotCQkgKiBsb2FkIHZh bHVlcyBpbiBjYXNlIGNwdSBjb3VudCBkaWZmZXJzIGZyb20gbm9kZSB0byBub2RlLg0KLQkJICog V2UgZmlyc3QgbXVsdGlwbHkgbm9kZV9ucl9ydW5uaW5nIGJ5IDEwIHRvIGdldCBhIGxpdHRsZQ0K LQkJICogYmV0dGVyIHJlc29sdXRpb24uICAgDQotCQkgKi8NCi0JCWxvYWQgPSAxMCAqIGF0b21p Y19yZWFkKCZub2RlX25yX3J1bm5pbmdbaV0pIC8gbnJfY3B1c19ub2RlKGkpOw0KLQkJaWYgKGxv YWQgPCBtaW5sb2FkKSB7DQotCQkJbWlubG9hZCA9IGxvYWQ7DQotCQkJbm9kZSA9IGk7DQotCQl9 DQotCX0NCisJbm9kZSA9IGZpbmRfYmVzdF9ub2RlKGNwdV90b19ub2RlKHRhc2tfY3B1KHApKSk7 DQogDQotCW1pbmxvYWQgPSAxMDAwMDAwMDsNCisJbWluX2xvYWQgPSBJTlRfTUFYOw0KIAljcHVt YXNrID0gbm9kZV90b19jcHVtYXNrKG5vZGUpOw0KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsg KytpKSB7DQorCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsNCisJCXVuc2lnbmVkIGxv bmcgbG9hZDsNCiAJCWlmICghY3B1X2lzc2V0KGksIGNwdW1hc2spKQ0KIAkJCWNvbnRpbnVlOw0K LQkJaWYgKGNwdV9ycShpKS0+bnJfcnVubmluZyA8IG1pbmxvYWQpIHsNCisJCWlmIChpID09IHRh c2tfY3B1KHApKQ0KKwkJCWxvYWQgPSBnZXRfbG93X2NwdV9sb2FkKGkpOw0KKwkJZWxzZQ0KKwkJ CWxvYWQgPSBnZXRfaGlnaF9jcHVfbG9hZChpKSArIEZQVDsNCisJCWlmIChtaW5fbG9hZCA+IGxv YWQpIHsNCiAJCQliZXN0X2NwdSA9IGk7DQotCQkJbWlubG9hZCA9IGNwdV9ycShpKS0+bnJfcnVu bmluZzsNCisJCQltaW5fbG9hZCA9IGxvYWQ7DQogCQl9DQogCX0NCiAJcmV0dXJuIGJlc3RfY3B1 Ow0KIH0NCiANCisjZGVmaW5lIEVYRUNfQkFMQU5DRV9JTlRFUlZBTCA4DQogdm9pZCBzY2hlZF9i YWxhbmNlX2V4ZWModm9pZCkNCiB7DQogCWludCBuZXdfY3B1Ow0KIA0KIAlpZiAobnVtbm9kZXMg PiAxKSB7DQotCQluZXdfY3B1ID0gc2NoZWRfYmVzdF9jcHUoY3VycmVudCk7DQotCQlpZiAobmV3 X2NwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpDQotCQkJc2NoZWRfbWlncmF0ZV90YXNrKGN1cnJl bnQsIG5ld19jcHUpOw0KLQl9DQotfQ0KLQ0KLS8qDQotICogRmluZCB0aGUgYnVzaWVzdCBub2Rl LiBBbGwgcHJldmlvdXMgbm9kZSBsb2FkcyBjb250cmlidXRlIHdpdGggYQ0KLSAqIGdlb21ldHJp Y2FsbHkgZGVjY2F5aW5nIHdlaWdodCB0byB0aGUgbG9hZCBtZWFzdXJlOg0KLSAqICAgICAgbG9h ZF97dH0gPSBsb2FkX3t0LTF9LzIgKyBucl9ub2RlX3J1bm5pbmdfe3R9DQotICogVGhpcyB3YXkg c3VkZGVuIGxvYWQgcGVha3MgYXJlIGZsYXR0ZW5lZCBvdXQgYSBiaXQuDQotICogTm9kZSBsb2Fk IGlzIGRpdmlkZWQgYnkgbnJfY3B1c19ub2RlKCkgaW4gb3JkZXIgdG8gY29tcGFyZSBub2Rlcw0K LSAqIG9mIGRpZmZlcmVudCBjcHUgY291bnQgYnV0IGFsc28gW2ZpcnN0XSBtdWx0aXBsaWVkIGJ5 IDEwIHRvIA0KLSAqIHByb3ZpZGUgYmV0dGVyIHJlc29sdXRpb24uDQotICovDQotc3RhdGljIGlu dCBmaW5kX2J1c2llc3Rfbm9kZShpbnQgdGhpc19ub2RlKQ0KLXsNCi0JaW50IGksIG5vZGUgPSAt MSwgbG9hZCwgdGhpc19sb2FkLCBtYXhsb2FkOw0KLQ0KLQlpZiAoIW5yX2NwdXNfbm9kZSh0aGlz X25vZGUpKQ0KLQkJcmV0dXJuIG5vZGU7DQotCXRoaXNfbG9hZCA9IG1heGxvYWQgPSAodGhpc19y cSgpLT5wcmV2X25vZGVfbG9hZFt0aGlzX25vZGVdID4+IDEpDQotCQkrICgxMCAqIGF0b21pY19y ZWFkKCZub2RlX25yX3J1bm5pbmdbdGhpc19ub2RlXSkNCi0JCS8gbnJfY3B1c19ub2RlKHRoaXNf bm9kZSkpOw0KLQl0aGlzX3JxKCktPnByZXZfbm9kZV9sb2FkW3RoaXNfbm9kZV0gPSB0aGlzX2xv YWQ7DQotCWZvcl9lYWNoX25vZGVfd2l0aF9jcHVzKGkpIHsNCi0JCWlmIChpID09IHRoaXNfbm9k ZSkNCi0JCQljb250aW51ZTsNCi0JCWxvYWQgPSAodGhpc19ycSgpLT5wcmV2X25vZGVfbG9hZFtp XSA+PiAxKQ0KLQkJCSsgKDEwICogYXRvbWljX3JlYWQoJm5vZGVfbnJfcnVubmluZ1tpXSkNCi0J CQkvIG5yX2NwdXNfbm9kZShpKSk7DQotCQl0aGlzX3JxKCktPnByZXZfbm9kZV9sb2FkW2ldID0g bG9hZDsNCi0JCWlmIChsb2FkID4gbWF4bG9hZCAmJiAoMTAwKmxvYWQgPiBOT0RFX1RIUkVTSE9M RCp0aGlzX2xvYWQpKSB7DQotCQkJbWF4bG9hZCA9IGxvYWQ7DQotCQkJbm9kZSA9IGk7DQorCQlp bnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7DQorCQlydW5xdWV1ZV90ICp0aGlzX3Jx ID0gY3B1X3JxKHRoaXNfY3B1KTsNCisJCXRoaXNfcnEtPm5yX2V4ZWMrKzsNCisJCWlmICh1bmxp a2VseSghKHRoaXNfcnEtPm5yX2V4ZWMgJSBFWEVDX0JBTEFOQ0VfSU5URVJWQUwpKSkgew0KKwkJ CW5ld19jcHUgPSBzY2hlZF9iZXN0X2NwdShjdXJyZW50KTsNCisJCQlpZiAobmV3X2NwdSAhPSB0 aGlzX2NwdSkNCisJCQkJc2NoZWRfbWlncmF0ZV90YXNrKGN1cnJlbnQsIG5ld19jcHUpOw0KIAkJ fQ0KIAl9DQotCXJldHVybiBub2RlOw0KIH0NCiANCi0jZW5kaWYgLyogQ09ORklHX05VTUEgKi8N Ci0NCisjZW5kaWYNCiAjaWZkZWYgQ09ORklHX1NNUA0KIA0KIC8qDQpAQCAtMTAyNywzMSArMTEx MywyOCBAQCBzdGF0aWMgaW50IGZpbmRfYnVzaWVzdF9ub2RlKGludCB0aGlzX25vDQogICogdGhp c19ycSBpcyBsb2NrZWQgYWxyZWFkeS4gUmVjYWxjdWxhdGUgbnJfcnVubmluZyBpZiB3ZSBoYXZl IHRvDQogICogZHJvcCB0aGUgcnVucXVldWUgbG9jay4NCiAgKi8NCi1zdGF0aWMgaW5saW5lIHVu c2lnbmVkIGludCBkb3VibGVfbG9ja19iYWxhbmNlKHJ1bnF1ZXVlX3QgKnRoaXNfcnEsDQotCXJ1 bnF1ZXVlX3QgKmJ1c2llc3QsIGludCB0aGlzX2NwdSwgaW50IGlkbGUsIHVuc2lnbmVkIGludCBu cl9ydW5uaW5nKQ0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkb3VibGVfbG9ja19iYWxhbmNlKHJ1bnF1 ZXVlX3QgKnRoaXNfcnEsDQorCQkJCXJ1bnF1ZXVlX3QgKmJ1c2llc3QsIGludCB0aGlzX2NwdSkN CiB7DQogCWlmICh1bmxpa2VseSghc3Bpbl90cnlsb2NrKCZidXNpZXN0LT5sb2NrKSkpIHsNCiAJ CWlmIChidXNpZXN0IDwgdGhpc19ycSkgew0KIAkJCXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2Nr KTsNCiAJCQlzcGluX2xvY2soJmJ1c2llc3QtPmxvY2spOw0KIAkJCXNwaW5fbG9jaygmdGhpc19y cS0+bG9jayk7DQotCQkJLyogTmVlZCB0byByZWNhbGN1bGF0ZSBucl9ydW5uaW5nICovDQotCQkJ aWYgKGlkbGUgfHwgKHRoaXNfcnEtPm5yX3J1bm5pbmcgPiB0aGlzX3JxLT5wcmV2X2NwdV9sb2Fk W3RoaXNfY3B1XSkpDQotCQkJCW5yX3J1bm5pbmcgPSB0aGlzX3JxLT5ucl9ydW5uaW5nOw0KLQkJ CWVsc2UNCi0JCQkJbnJfcnVubmluZyA9IHRoaXNfcnEtPnByZXZfY3B1X2xvYWRbdGhpc19jcHVd Ow0KIAkJfSBlbHNlDQogCQkJc3Bpbl9sb2NrKCZidXNpZXN0LT5sb2NrKTsNCiAJfQ0KLQlyZXR1 cm4gbnJfcnVubmluZzsNCiB9DQogDQogLyoNCiAgKiBmaW5kX2J1c2llc3RfcXVldWUgLSBmaW5k IHRoZSBidXNpZXN0IHJ1bnF1ZXVlIGFtb25nIHRoZSBjcHVzIGluIGNwdW1hc2suDQogICovDQot c3RhdGljIGlubGluZSBydW5xdWV1ZV90ICpmaW5kX2J1c2llc3RfcXVldWUocnVucXVldWVfdCAq dGhpc19ycSwgaW50IHRoaXNfY3B1LCBpbnQgaWRsZSwgaW50ICppbWJhbGFuY2UsIGNwdW1hc2tf dCBjcHVtYXNrKQ0KK3N0YXRpYyBpbmxpbmUgcnVucXVldWVfdCAqDQorZmluZF9idXNpZXN0X3F1 ZXVlKHJ1bnF1ZXVlX3QgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgaW50IGlkbGUsDQorCQkJCXVu c2lnbmVkIGxvbmcgKmltYmFsYW5jZSwgY3B1bWFza190IGNwdW1hc2ssIGludCBsb2NhbCkNCiB7 DQotCWludCBucl9ydW5uaW5nLCBsb2FkLCBtYXhfbG9hZCwgaTsNCisJdW5zaWduZWQgbG9uZyB0 aGlzX2xvYWQsIGxvYWQsIG1heF9sb2FkLCBhdmdfbG9hZDsNCisJaW50IG5yX2NwdXMsIGk7DQog CXJ1bnF1ZXVlX3QgKmJ1c2llc3QsICpycV9zcmM7DQogDQogCS8qDQpAQCAtMTA3Nyw0OSArMTE2 MCw4MCBAQCBzdGF0aWMgaW5saW5lIHJ1bnF1ZXVlX3QgKmZpbmRfYnVzaWVzdF9xDQogCSAqIHRo YXQgY2FzZSB3ZSBhcmUgbGVzcyBwaWNreSBhYm91dCBtb3ZpbmcgYSB0YXNrIGFjcm9zcyBDUFVz IGFuZA0KIAkgKiB0YWtlIHdoYXQgY2FuIGJlIHRha2VuLg0KIAkgKi8NCi0JaWYgKGlkbGUgfHwg KHRoaXNfcnEtPm5yX3J1bm5pbmcgPiB0aGlzX3JxLT5wcmV2X2NwdV9sb2FkW3RoaXNfY3B1XSkp DQotCQlucl9ydW5uaW5nID0gdGhpc19ycS0+bnJfcnVubmluZzsNCisNCisJaWYgKGlkbGUgPT0g MikNCisJCXRoaXNfbG9hZCA9IF9fZ2V0X2hpZ2hfY3B1X2xvYWQodGhpc19jcHUpOw0KIAllbHNl DQotCQlucl9ydW5uaW5nID0gdGhpc19ycS0+cHJldl9jcHVfbG9hZFt0aGlzX2NwdV07DQorCQl0 aGlzX2xvYWQgPSBnZXRfaGlnaF9jcHVfbG9hZCh0aGlzX2NwdSk7DQogDQogCWJ1c2llc3QgPSBO VUxMOw0KLQltYXhfbG9hZCA9IDE7DQorCW1heF9sb2FkID0gdGhpc19sb2FkOw0KKwlhdmdfbG9h ZCA9IHRoaXNfbG9hZDsNCisJbnJfY3B1cyA9IDE7DQorDQorCWlmIChpZGxlKQ0KKwkJbWF4X2xv YWQgPSAwOw0KKw0KIAlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7DQogCQlpZiAoIWNw dV9pc3NldChpLCBjcHVtYXNrKSkNCiAJCQljb250aW51ZTsNCiANCisJCWlmIChpID09IHRoaXNf Y3B1KQ0KKwkJCWNvbnRpbnVlOw0KKw0KIAkJcnFfc3JjID0gY3B1X3JxKGkpOw0KLQkJaWYgKGlk bGUgfHwgKHJxX3NyYy0+bnJfcnVubmluZyA8IHRoaXNfcnEtPnByZXZfY3B1X2xvYWRbaV0pKQ0K LQkJCWxvYWQgPSBycV9zcmMtPm5yX3J1bm5pbmc7DQorCQlpZiAoaWRsZSA9PSAyKQ0KKwkJCWxv YWQgPSBfX2dldF9sb3dfY3B1X2xvYWQoaSk7DQogCQllbHNlDQotCQkJbG9hZCA9IHRoaXNfcnEt PnByZXZfY3B1X2xvYWRbaV07DQotCQl0aGlzX3JxLT5wcmV2X2NwdV9sb2FkW2ldID0gcnFfc3Jj LT5ucl9ydW5uaW5nOw0KKwkJCWxvYWQgPSBnZXRfbG93X2NwdV9sb2FkKGkpOw0KKw0KKwkJbnJf Y3B1cysrOw0KKwkJYXZnX2xvYWQgKz0gbG9hZDsNCiANCi0JCWlmICgobG9hZCA+IG1heF9sb2Fk KSAmJiAocnFfc3JjICE9IHRoaXNfcnEpKSB7DQorCQlpZiAobG9hZCA+IG1heF9sb2FkICYmIHJx X3NyYyAhPSB0aGlzX3JxKSB7DQogCQkJYnVzaWVzdCA9IHJxX3NyYzsNCiAJCQltYXhfbG9hZCA9 IGxvYWQ7DQogCQl9DQogCX0NCiANCiAJaWYgKGxpa2VseSghYnVzaWVzdCkpDQotCQlnb3RvIG91 dDsNCisJCWdvdG8gb3V0X2JhbGFuY2U7DQogDQotCSppbWJhbGFuY2UgPSBtYXhfbG9hZCAtIG5y X3J1bm5pbmc7DQorCWF2Z19sb2FkIC89IG5yX2NwdXM7DQorCWlmICghaWRsZSAmJiB0aGlzX2xv YWQgPj0gYXZnX2xvYWQpIHsNCisJCWJ1c2llc3QgPSBOVUxMOw0KKwkJZ290byBvdXRfYmFsYW5j ZTsNCisJfQ0KIA0KLQkvKiBJdCBuZWVkcyBhbiBhdCBsZWFzdCB+MjUlIGltYmFsYW5jZSB0byB0 cmlnZ2VyIGJhbGFuY2luZy4gKi8NCi0JaWYgKCFpZGxlICYmICgoKmltYmFsYW5jZSkqNCA8IG1h eF9sb2FkKSkgew0KKwlpZiAoIWlkbGUgJiYgMTAwKm1heF9sb2FkIDw9IENQVV9CQUxBTkNFX1RI UkVTSE9MRCp0aGlzX2xvYWQpIHsNCiAJCWJ1c2llc3QgPSBOVUxMOw0KLQkJZ290byBvdXQ7DQor CQlnb3RvIG91dF9iYWxhbmNlOw0KIAl9DQogDQotCW5yX3J1bm5pbmcgPSBkb3VibGVfbG9ja19i YWxhbmNlKHRoaXNfcnEsIGJ1c2llc3QsIHRoaXNfY3B1LCBpZGxlLCBucl9ydW5uaW5nKTsNCi0J LyoNCi0JICogTWFrZSBzdXJlIG5vdGhpbmcgY2hhbmdlZCBzaW5jZSB3ZSBjaGVja2VkIHRoZQ0K LQkgKiBydW5xdWV1ZSBsZW5ndGguDQotCSAqLw0KLQlpZiAoYnVzaWVzdC0+bnJfcnVubmluZyA8 PSBucl9ydW5uaW5nKSB7DQorCWRvdWJsZV9sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCwg dGhpc19jcHUpOw0KKw0KKwlpZiAoYnVzaWVzdC0+bnJfcnVubmluZyA8PSAxKSB7DQogCQlzcGlu X3VubG9jaygmYnVzaWVzdC0+bG9jayk7DQogCQlidXNpZXN0ID0gTlVMTDsNCisJCWlmIChsb2Nh bCkNCisJCQl0aGlzX3JxLT5ucl9sYl9mYWlsZWQrKzsNCisJCWdvdG8gb3V0Ow0KKwl9DQorDQor CSppbWJhbGFuY2UgPSBtaW4obWF4X2xvYWQgLSBhdmdfbG9hZCwgYXZnX2xvYWQgLSB0aGlzX2xv YWQpOw0KKwlpZiAoICgqaW1iYWxhbmNlIDwgMSpGUFQpICYmIChtYXhfbG9hZCAtIHRoaXNfbG9h ZCkgPiAxKkZQVCApDQorCQkqaW1iYWxhbmNlID0gMSpGUFQ7DQorCSppbWJhbGFuY2UgPSAoKmlt YmFsYW5jZSArIEZQVCAtIDEpIC8gRlBUOw0KKw0KKwlpZiAoKmltYmFsYW5jZSA9PSAwKQ0KKwkJ KmltYmFsYW5jZSA9IDE7DQorDQorb3V0X2JhbGFuY2U6DQorCWlmIChsb2NhbCkgew0KKwkJaWYg KGlkbGUpDQorCQkJdGhpc19ycS0+bnJfbGJfZmFpbGVkKys7DQorCQllbHNlDQorCQkJdGhpc19y cS0+bnJfbGJfZmFpbGVkID0gMDsNCiAJfQ0KIG91dDoNCiAJcmV0dXJuIGJ1c2llc3Q7DQpAQCAt MTEzMSwxMSArMTI0NSwxNyBAQCBvdXQ6DQogICovDQogc3RhdGljIGlubGluZSB2b2lkIHB1bGxf dGFzayhydW5xdWV1ZV90ICpzcmNfcnEsIHByaW9fYXJyYXlfdCAqc3JjX2FycmF5LCB0YXNrX3Qg KnAsIHJ1bnF1ZXVlX3QgKnRoaXNfcnEsIGludCB0aGlzX2NwdSkNCiB7DQorCXVuc2lnbmVkIGxv bmcgbm93ID0gY2xvY2tfdXMoKTsNCisNCiAJZGVxdWV1ZV90YXNrKHAsIHNyY19hcnJheSk7DQog CW5yX3J1bm5pbmdfZGVjKHNyY19ycSk7DQogCXNldF90YXNrX2NwdShwLCB0aGlzX2NwdSk7DQog CW5yX3J1bm5pbmdfaW5jKHRoaXNfcnEpOw0KIAllbnF1ZXVlX3Rhc2socCwgdGhpc19ycS0+YWN0 aXZlKTsNCisNCisJYWRkX3Rhc2tfdGltZShwLCBub3cgLSBwLT50aW1lc3RhbXAsIFNUSU1FX1dB SVQpOw0KKwlwLT50aW1lc3RhbXAgPSBub3c7DQorDQogCS8qDQogCSAqIE5vdGUgdGhhdCBpZGxl IHRocmVhZHMgaGF2ZSBhIHByaW8gb2YgTUFYX1BSSU8sIGZvciB0aGlzIHRlc3QNCiAJICogdG8g YmUgYWx3YXlzIHRydWUgZm9yIHRoZW0uDQpAQCAtMTE0NCwyNiArMTI2NCwzNSBAQCBzdGF0aWMg aW5saW5lIHZvaWQgcHVsbF90YXNrKHJ1bnF1ZXVlX3QgDQogCQlzZXRfbmVlZF9yZXNjaGVkKCk7 DQogfQ0KIA0KKyNkZWZpbmUgQ0FDSEVfREVDQVlfVVMgNTAwMA0KIC8qDQotICogUHJldmlvdXNs eToNCi0gKg0KLSAqICNkZWZpbmUgQ0FOX01JR1JBVEVfVEFTSyhwLHJxLHRoaXNfY3B1KQlcDQot ICoJKCghaWRsZSB8fCAoTlNfVE9fSklGRklFUyhub3cgLSAocCktPnRpbWVzdGFtcCkgPiBcDQot ICoJCWNhY2hlX2RlY2F5X3RpY2tzKSkgJiYgIXRhc2tfcnVubmluZyhycSwgcCkgJiYgXA0KLSAq CQkJY3B1X2lzc2V0KHRoaXNfY3B1LCAocCktPmNwdXNfYWxsb3dlZCkpDQorICogY2FuX21pZ3Jh dGVfdGFzaw0KKyAqIE1heSB0YXNrIEBwIGZyb20gcnVucXVldWUgQHJxIGJlIG1pZ3JhdGVkIHRv IEB0aGlzX2NwdT8NCisgKiBSZXR1cm5zOiAxIGlmIEBwIG1heSBiZSBtaWdyYXRlZCwgMCBvdGhl cndpc2UuDQogICovDQotDQogc3RhdGljIGlubGluZSBpbnQNCi1jYW5fbWlncmF0ZV90YXNrKHRh c2tfdCAqdHNrLCBydW5xdWV1ZV90ICpycSwgaW50IHRoaXNfY3B1LCBpbnQgaWRsZSkNCitjYW5f bWlncmF0ZV90YXNrKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEsIGludCB0aGlzX2NwdSwgaW50 IGFnZ3Jlc3NpdmUpDQogew0KLQl1bnNpZ25lZCBsb25nIGRlbHRhID0gc2NoZWRfY2xvY2soKSAt IHRzay0+dGltZXN0YW1wOw0KKwl1bnNpZ25lZCBsb25nIGRlbHRhOw0KIA0KLQlpZiAoIWlkbGUg JiYgKGRlbHRhIDw9IEpJRkZJRVNfVE9fTlMoY2FjaGVfZGVjYXlfdGlja3MpKSkNCi0JCXJldHVy biAwOw0KLQlpZiAodGFza19ydW5uaW5nKHJxLCB0c2spKQ0KKwkvKg0KKwkgKiBXZSBkbyBub3Qg bWlncmF0ZSB0YXNrcyB0aGF0IGFyZToNCisJICogMSkgcnVubmluZyAob2J2aW91c2x5KSwgb3IN CisJICogMikgY2Fubm90IGJlIG1pZ3JhdGVkIHRvIHRoaXMgQ1BVIGR1ZSB0byBjcHVzX2FsbG93 ZWQsIG9yDQorCSAqIDMpIGFyZSBjYWNoZS1ob3Qgb24gdGhlaXIgY3VycmVudCBDUFUuDQorCSAq Lw0KKw0KKwlpZiAodGFza19ydW5uaW5nKHJxLCBwKSkNCiAJCXJldHVybiAwOw0KLQlpZiAoIWNw dV9pc3NldCh0aGlzX2NwdSwgdHNrLT5jcHVzX2FsbG93ZWQpKQ0KKw0KKwlpZiAoIWNwdV9pc3Nl dCh0aGlzX2NwdSwgcC0+Y3B1c19hbGxvd2VkKSkNCiAJCXJldHVybiAwOw0KKw0KKwkvKiBBZ2dy ZXNzaXZlIG1pZ3JhdGlvbiBpZiB3ZSd2ZSBmYWlsZWQgYSBiYWxhbmNlICovDQorCWRlbHRhID0g Y2xvY2tfdXMoKSAtIHAtPnRpbWVzdGFtcDsNCisJaWYgKCFhZ2dyZXNzaXZlICYmIGRlbHRhIDw9 IENBQ0hFX0RFQ0FZX1VTKQ0KKwkJCXJldHVybiAwOw0KKw0KIAlyZXR1cm4gMTsNCiB9DQogDQpA QCAtMTE3NSwyMyArMTMwNCwxOSBAQCBjYW5fbWlncmF0ZV90YXNrKHRhc2tfdCAqdHNrLCBydW5x dWV1ZV90DQogICogV2UgY2FsbCB0aGlzIHdpdGggdGhlIGN1cnJlbnQgcnVucXVldWUgbG9ja2Vk LA0KICAqIGlycXMgZGlzYWJsZWQuDQogICovDQotc3RhdGljIHZvaWQgbG9hZF9iYWxhbmNlKHJ1 bnF1ZXVlX3QgKnRoaXNfcnEsIGludCBpZGxlLCBjcHVtYXNrX3QgY3B1bWFzaykNCitzdGF0aWMg dm9pZCBsb2FkX2JhbGFuY2UocnVucXVldWVfdCAqdGhpc19ycSwgcnVucXVldWVfdCAqYnVzaWVz dCwgdW5zaWduZWQgbG9uZyBtYXhfbnJfbW92ZSwgaW50IGxvY2FsKQ0KIHsNCi0JaW50IGltYmFs YW5jZSwgaWR4LCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsNCi0JcnVucXVldWVfdCAq YnVzaWVzdDsNCisJaW50IGFnZ3Jlc3NpdmUgPSAwOw0KKwlpbnQgaWR4LCB0aGlzX2NwdSA9IHNt cF9wcm9jZXNzb3JfaWQoKTsNCisJaW50IHB1bGxlZCA9IDA7DQogCXByaW9fYXJyYXlfdCAqYXJy YXk7DQogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsICpjdXJyOw0KIAl0YXNrX3QgKnRtcDsNCiAN Ci0JYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZSh0aGlzX3JxLCB0aGlzX2NwdSwgaWRsZSwg JmltYmFsYW5jZSwgY3B1bWFzayk7DQotCWlmICghYnVzaWVzdCkNCi0JCWdvdG8gb3V0Ow0KLQ0K LQkvKg0KLQkgKiBXZSBvbmx5IHdhbnQgdG8gc3RlYWwgYSBudW1iZXIgb2YgdGFza3MgZXF1YWwg dG8gMS8yIHRoZSBpbWJhbGFuY2UsDQotCSAqIG90aGVyd2lzZSB3ZSdsbCBqdXN0IHNoaWZ0IHRo ZSBpbWJhbGFuY2UgdG8gdGhlIG5ldyBxdWV1ZToNCi0JICovDQotCWltYmFsYW5jZSAvPSAyOw0K KwlpZiAobWF4X25yX21vdmUgPD0gMCkgew0KKwkJc3Bpbl91bmxvY2soJmJ1c2llc3QtPmxvY2sp Ow0KKwkJcmV0dXJuOw0KKwl9DQogDQogCS8qDQogCSAqIFdlIGZpcnN0IGNvbnNpZGVyIGV4cGly ZWQgdGFza3MuIFRob3NlIHdpbGwgbGlrZWx5IG5vdCBiZQ0KQEAgLTExOTksNiArMTMyNCw3IEBA IHN0YXRpYyB2b2lkIGxvYWRfYmFsYW5jZShydW5xdWV1ZV90ICp0aGkNCiAJICogYmUgY2FjaGUt Y29sZCwgdGh1cyBzd2l0Y2hpbmcgQ1BVcyBoYXMgdGhlIGxlYXN0IGVmZmVjdA0KIAkgKiBvbiB0 aGVtLg0KIAkgKi8NCithZ2FpbjoNCiAJaWYgKGJ1c2llc3QtPmV4cGlyZWQtPm5yX2FjdGl2ZSkN CiAJCWFycmF5ID0gYnVzaWVzdC0+ZXhwaXJlZDsNCiAJZWxzZQ0KQEAgLTEyMTcsNiArMTM0Mywx MCBAQCBza2lwX2JpdG1hcDoNCiAJCQlhcnJheSA9IGJ1c2llc3QtPmFjdGl2ZTsNCiAJCQlnb3Rv IG5ld19hcnJheTsNCiAJCX0NCisJCWlmICghYWdncmVzc2l2ZSkgew0KKwkJCWFnZ3Jlc3NpdmUg PSAxOw0KKwkJCWdvdG8gYWdhaW47DQorCQl9DQogCQlnb3RvIG91dF91bmxvY2s7DQogCX0NCiAN CkBAIC0xMjI1LDIzICsxMzU1LDIzIEBAIHNraXBfYml0bWFwOg0KIHNraXBfcXVldWU6DQogCXRt cCA9IGxpc3RfZW50cnkoY3VyciwgdGFza190LCBydW5fbGlzdCk7DQogDQotCS8qDQotCSAqIFdl IGRvIG5vdCBtaWdyYXRlIHRhc2tzIHRoYXQgYXJlOg0KLQkgKiAxKSBydW5uaW5nIChvYnZpb3Vz bHkpLCBvcg0KLQkgKiAyKSBjYW5ub3QgYmUgbWlncmF0ZWQgdG8gdGhpcyBDUFUgZHVlIHRvIGNw dXNfYWxsb3dlZCwgb3INCi0JICogMykgYXJlIGNhY2hlLWhvdCBvbiB0aGVpciBjdXJyZW50IENQ VS4NCi0JICovDQotDQogCWN1cnIgPSBjdXJyLT5wcmV2Ow0KIA0KLQlpZiAoIWNhbl9taWdyYXRl X3Rhc2sodG1wLCBidXNpZXN0LCB0aGlzX2NwdSwgaWRsZSkpIHsNCisJaWYgKCFjYW5fbWlncmF0 ZV90YXNrKHRtcCwgYnVzaWVzdCwgdGhpc19jcHUsIGFnZ3Jlc3NpdmUpKSB7DQogCQlpZiAoY3Vy ciAhPSBoZWFkKQ0KIAkJCWdvdG8gc2tpcF9xdWV1ZTsNCiAJCWlkeCsrOw0KIAkJZ290byBza2lw X2JpdG1hcDsNCiAJfQ0KIAlwdWxsX3Rhc2soYnVzaWVzdCwgYXJyYXksIHRtcCwgdGhpc19ycSwg dGhpc19jcHUpOw0KLQlpZiAoIWlkbGUgJiYgLS1pbWJhbGFuY2UpIHsNCisJcHVsbGVkKys7DQor DQorCS8qDQorCSAqIFdlIG9ubHkgd2FudCB0byBzdGVhbCBhIG51bWJlciBvZiB0YXNrcyBlcXVh bCB0byAxLzIgdGhlIGltYmFsYW5jZSwNCisJICogb3RoZXJ3aXNlIHdlJ2xsIGp1c3Qgc2hpZnQg dGhlIGltYmFsYW5jZSB0byB0aGUgbmV3IHF1ZXVlLg0KKwkgKiBPbmx5IG1pZ3JhdGUgMSB0YXNr IGlmIHdlJ3JlIGlkbGUuDQorCSAqLw0KKwlpZiAocHVsbGVkIDwgbWF4X25yX21vdmUpIHsNCiAJ CWlmIChjdXJyICE9IGhlYWQpDQogCQkJZ290byBza2lwX3F1ZXVlOw0KIAkJaWR4Kys7DQpAQCAt MTI0OSwxMCArMTM3OSw0MCBAQCBza2lwX3F1ZXVlOg0KIAl9DQogb3V0X3VubG9jazoNCiAJc3Bp bl91bmxvY2soJmJ1c2llc3QtPmxvY2spOw0KLW91dDoNCi0JOw0KKw0KKwlpZiAobG9jYWwpIHsN CisJCWlmKHB1bGxlZCA9PSAwKQ0KKwkJCXRoaXNfcnEtPm5yX2xiX2ZhaWxlZCsrOw0KKwkJZWxz ZQ0KKwkJCXRoaXNfcnEtPm5yX2xiX2ZhaWxlZCA9IDA7DQorCX0NCiB9DQogDQorI2lmZGVmIENP TkZJR19OVU1BDQorc3RhdGljIHZvaWQgbm9kZV9iYWxhbmNlKGludCB0aGlzX2NwdSwgcnVucXVl dWVfdCAqdGhpc19ycSwgdW5zaWduZWQgbG9uZyBtYXhfbnJfbW92ZSkNCit7DQorCXVuc2lnbmVk IGxvbmcgbnJfbW92ZTsNCisJcnVucXVldWVfdCAqYnVzaWVzdDsNCisJY3B1bWFza190IGNwdW1h c2s7DQorCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlOw0KKwlpbnQgbm9kZSA9IGZpbmRfYnVzaWVz dF9ub2RlKGNwdV90b19ub2RlKHRoaXNfY3B1KSwgJmltYmFsYW5jZSk7DQorCW5yX21vdmUgPSBt aW4oaW1iYWxhbmNlLCBtYXhfbnJfbW92ZSk7DQorDQorCWlmIChub2RlID49IDAgJiYgbnJfbW92 ZSA+IDApIHsNCisJCWNwdW1hc2sgPSBub2RlX3RvX2NwdW1hc2sobm9kZSk7DQorCQlzcGluX2xv Y2soJnRoaXNfcnEtPmxvY2spOw0KKwkJYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZSh0aGlz X3JxLCB0aGlzX2NwdSwgMCwNCisJCQkJCQkmaW1iYWxhbmNlLCBjcHVtYXNrLCAwKTsNCisJCWlm IChidXNpZXN0KSB7DQorCQkJbnJfbW92ZSA9IG1pbihucl9tb3ZlLCBpbWJhbGFuY2UpOw0KKwkJ CWxvYWRfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0LCBucl9tb3ZlLCAwKTsNCisJCX0NCisNCisJ CXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsNCisJfQ0KK30NCisjZW5kaWYNCisNCiAvKg0K ICAqIE9uZSBvZiB0aGUgaWRsZV9jcHVfdGljaygpIGFuZCBidXN5X2NwdV90aWNrKCkgZnVuY3Rp b25zIHdpbGwNCiAgKiBnZXQgY2FsbGVkIGV2ZXJ5IHRpbWVyIHRpY2ssIG9uIGV2ZXJ5IENQVS4g T3VyIGJhbGFuY2luZyBhY3Rpb24NCkBAIC0xMjY0LDMxICsxNDI0LDE3IEBAIG91dDoNCiAgKg0K ICAqIE9uIE5VTUEsIGRvIGEgbm9kZS1yZWJhbGFuY2UgZXZlcnkgNDAwIG1zZWNzLg0KICAqLw0K LSNkZWZpbmUgSURMRV9SRUJBTEFOQ0VfVElDSyAoSFovMTAwMCA/OiAxKQ0KLSNkZWZpbmUgQlVT WV9SRUJBTEFOQ0VfVElDSyAoSFovNSA/OiAxKQ0KLSNkZWZpbmUgSURMRV9OT0RFX1JFQkFMQU5D RV9USUNLIChJRExFX1JFQkFMQU5DRV9USUNLICogNSkNCi0jZGVmaW5lIEJVU1lfTk9ERV9SRUJB TEFOQ0VfVElDSyAoQlVTWV9SRUJBTEFOQ0VfVElDSyAqIDIpDQotDQotI2lmZGVmIENPTkZJR19O VU1BDQotc3RhdGljIHZvaWQgYmFsYW5jZV9ub2RlKHJ1bnF1ZXVlX3QgKnRoaXNfcnEsIGludCBp ZGxlLCBpbnQgdGhpc19jcHUpDQotew0KLQlpbnQgbm9kZSA9IGZpbmRfYnVzaWVzdF9ub2RlKGNw dV90b19ub2RlKHRoaXNfY3B1KSk7DQotDQotCWlmIChub2RlID49IDApIHsNCi0JCWNwdW1hc2tf dCBjcHVtYXNrID0gbm9kZV90b19jcHVtYXNrKG5vZGUpOw0KLQkJY3B1X3NldCh0aGlzX2NwdSwg Y3B1bWFzayk7DQotCQlzcGluX2xvY2soJnRoaXNfcnEtPmxvY2spOw0KLQkJbG9hZF9iYWxhbmNl KHRoaXNfcnEsIGlkbGUsIGNwdW1hc2spOw0KLQkJc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2sp Ow0KLQl9DQotfQ0KLSNlbmRpZg0KKyNkZWZpbmUgSURMRV9SRUJBTEFOQ0VfVElDSwkoSFovMTAw MCA/OiAxKQ0KKyNkZWZpbmUgQlVTWV9SRUJBTEFOQ0VfVElDSwkoSFovNCA/OiAxKQ0KKyNkZWZp bmUgTlVNQV9SRUJBTEFOQ0VfVElDSwkoSFovMiA/OiAxKQ0KKw0KKy8qIERvbid0IGhhdmUgYWxs IGJhbGFuY2luZyBvcGVyYXRpb25zIGdvaW5nIG9mZiBhdCBvbmNlICovDQorI2RlZmluZSBCVVNZ X0NQVV9SRUJBTEFOQ0UoY3B1KQkoY3B1ICogQlVTWV9SRUJBTEFOQ0VfVElDSyAvIE5SX0NQVVMp DQorI2RlZmluZSBOVU1BX0NQVV9SRUJBTEFOQ0UoY3B1KQkoY3B1ICogTlVNQV9SRUJBTEFOQ0Vf VElDSyAvIE5SX0NQVVMpDQogDQogc3RhdGljIHZvaWQgcmViYWxhbmNlX3RpY2socnVucXVldWVf dCAqdGhpc19ycSwgaW50IGlkbGUpDQogew0KLSNpZmRlZiBDT05GSUdfTlVNQQ0KIAlpbnQgdGhp c19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7DQotI2VuZGlmDQogCXVuc2lnbmVkIGxvbmcgaiA9 IGppZmZpZXM7DQogDQogCS8qDQpAQCAtMTI5OSwyNiArMTQ0NSwyOCBAQCBzdGF0aWMgdm9pZCBy ZWJhbGFuY2VfdGljayhydW5xdWV1ZV90ICp0DQogCSAqIG5vZGUgd2l0aCB0aGUgY3VycmVudCBD UFUuIChpZS4gb3RoZXIgQ1BVcyBpbiB0aGUgbG9jYWwgbm9kZQ0KIAkgKiBhcmUgbm90IGJhbGFu Y2VkLikNCiAJICovDQotCWlmIChpZGxlKSB7DQotI2lmZGVmIENPTkZJR19OVU1BDQotCQlpZiAo IShqICUgSURMRV9OT0RFX1JFQkFMQU5DRV9USUNLKSkNCi0JCQliYWxhbmNlX25vZGUodGhpc19y cSwgaWRsZSwgdGhpc19jcHUpOw0KLSNlbmRpZg0KLQkJaWYgKCEoaiAlIElETEVfUkVCQUxBTkNF X1RJQ0spKSB7DQotCQkJc3Bpbl9sb2NrKCZ0aGlzX3JxLT5sb2NrKTsNCi0JCQlsb2FkX2JhbGFu Y2UodGhpc19ycSwgaWRsZSwgY3B1X3RvX25vZGVfbWFzayh0aGlzX2NwdSkpOw0KLQkJCXNwaW5f dW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsNCi0JCX0NCi0JCXJldHVybjsNCi0JfQ0KKw0KICNpZmRl ZiBDT05GSUdfTlVNQQ0KLQlpZiAoIShqICUgQlVTWV9OT0RFX1JFQkFMQU5DRV9USUNLKSkNCi0J CWJhbGFuY2Vfbm9kZSh0aGlzX3JxLCBpZGxlLCB0aGlzX2NwdSk7DQorCWlmICgoaiAlIE5VTUFf UkVCQUxBTkNFX1RJQ0spID09IE5VTUFfQ1BVX1JFQkFMQU5DRSh0aGlzX2NwdSkpDQorCQlub2Rl X2JhbGFuY2UodGhpc19jcHUsIHRoaXNfcnEsIElOVF9NQVgpOw0KICNlbmRpZg0KLQlpZiAoIShq ICUgQlVTWV9SRUJBTEFOQ0VfVElDSykpIHsNCisNCisJaWYgKChpZGxlICYmICEoaiAlIElETEVf UkVCQUxBTkNFX1RJQ0spKQ0KKwkJfHwgKGogJSBCVVNZX1JFQkFMQU5DRV9USUNLKSA9PSBCVVNZ X0NQVV9SRUJBTEFOQ0UodGhpc19jcHUpKSB7DQorCQlydW5xdWV1ZV90ICpidXNpZXN0Ow0KKwkJ dW5zaWduZWQgbG9uZyBpbWJhbGFuY2U7DQorCQljcHVtYXNrX3QgY3B1bWFzayA9IGNwdV90b19u b2RlX21hc2sodGhpc19jcHUpOw0KIAkJc3Bpbl9sb2NrKCZ0aGlzX3JxLT5sb2NrKTsNCi0JCWxv YWRfYmFsYW5jZSh0aGlzX3JxLCBpZGxlLCBjcHVfdG9fbm9kZV9tYXNrKHRoaXNfY3B1KSk7DQor CQlidXNpZXN0ID0gZmluZF9idXNpZXN0X3F1ZXVlKHRoaXNfcnEsIHRoaXNfY3B1LCBpZGxlLA0K KwkJCQkJCQkmaW1iYWxhbmNlLCBjcHVtYXNrLCAxKTsNCisJCWlmIChidXNpZXN0KQ0KKwkJCWxv YWRfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0LCBpbWJhbGFuY2UsIDEpOw0KIAkJc3Bpbl91bmxv Y2soJnRoaXNfcnEtPmxvY2spOw0KKw0KKyNpZmRlZiBDT05GSUdfTlVNQQ0KKwkJaWYgKHVubGlr ZWx5KHRoaXNfcnEtPm5yX2xiX2ZhaWxlZCA+PSBOVU1BX0ZBQ1RPUl9CT05VUykpDQorCQkJbm9k ZV9iYWxhbmNlKHRoaXNfY3B1LCB0aGlzX3JxLCBJTlRfTUFYKTsNCisjZW5kaWYNCiAJfQ0KIH0N CiAjZWxzZQ0KQEAgLTEzMzUsMjAgKzE0ODMsNiBAQCBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga2Vy bmVsX3N0YXQsIGtzdGF0DQogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGtzdGF0KTsNCiANCiAvKg0K LSAqIFdlIHBsYWNlIGludGVyYWN0aXZlIHRhc2tzIGJhY2sgaW50byB0aGUgYWN0aXZlIGFycmF5 LCBpZiBwb3NzaWJsZS4NCi0gKg0KLSAqIFRvIGd1YXJhbnRlZSB0aGF0IHRoaXMgZG9lcyBub3Qg c3RhcnZlIGV4cGlyZWQgdGFza3Mgd2UgaWdub3JlIHRoZQ0KLSAqIGludGVyYWN0aXZpdHkgb2Yg YSB0YXNrIGlmIHRoZSBmaXJzdCBleHBpcmVkIHRhc2sgaGFkIHRvIHdhaXQgbW9yZQ0KLSAqIHRo YW4gYSAncmVhc29uYWJsZScgYW1vdW50IG9mIHRpbWUuIFRoaXMgZGVhZGxpbmUgdGltZW91dCBp cw0KLSAqIGxvYWQtZGVwZW5kZW50LCBhcyB0aGUgZnJlcXVlbmN5IG9mIGFycmF5IHN3aXRjaGVk IGRlY3JlYXNlcyB3aXRoDQotICogaW5jcmVhc2luZyBudW1iZXIgb2YgcnVubmluZyB0YXNrczoN Ci0gKi8NCi0jZGVmaW5lIEVYUElSRURfU1RBUlZJTkcocnEpIFwNCi0JCShTVEFSVkFUSU9OX0xJ TUlUICYmICgocnEpLT5leHBpcmVkX3RpbWVzdGFtcCAmJiBcDQotCQkoamlmZmllcyAtIChycSkt PmV4cGlyZWRfdGltZXN0YW1wID49IFwNCi0JCQlTVEFSVkFUSU9OX0xJTUlUICogKChycSktPm5y X3J1bm5pbmcpICsgMSkpKQ0KLQ0KLS8qDQogICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBi eSB0aGUgdGltZXIgY29kZSwgd2l0aCBIWiBmcmVxdWVuY3kuDQogICogV2UgY2FsbCBpdCB3aXRo IGludGVycnVwdHMgZGlzYWJsZWQuDQogICoNCkBAIC0xMzY1LDE3ICsxNDk5LDExIEBAIHZvaWQg c2NoZWR1bGVyX3RpY2soaW50IHVzZXJfdGlja3MsIGludCANCiAJaWYgKHJjdV9wZW5kaW5nKGNw dSkpDQogCQlyY3VfY2hlY2tfY2FsbGJhY2tzKGNwdSwgdXNlcl90aWNrcyk7DQogDQotCS8qIG5v dGU6IHRoaXMgdGltZXIgaXJxIGNvbnRleHQgbXVzdCBiZSBhY2NvdW50ZWQgZm9yIGFzIHdlbGwg Ki8NCi0JaWYgKGhhcmRpcnFfY291bnQoKSAtIEhBUkRJUlFfT0ZGU0VUKSB7DQotCQljcHVzdGF0 LT5pcnEgKz0gc3lzX3RpY2tzOw0KLQkJc3lzX3RpY2tzID0gMDsNCi0JfSBlbHNlIGlmIChzb2Z0 aXJxX2NvdW50KCkpIHsNCi0JCWNwdXN0YXQtPnNvZnRpcnEgKz0gc3lzX3RpY2tzOw0KLQkJc3lz X3RpY2tzID0gMDsNCi0JfQ0KLQ0KIAlpZiAocCA9PSBycS0+aWRsZSkgew0KLQkJaWYgKGF0b21p Y19yZWFkKCZycS0+bnJfaW93YWl0KSA+IDApDQorCQkvKiBub3RlOiB0aGlzIHRpbWVyIGlycSBj b250ZXh0IG11c3QgYmUgYWNjb3VudGVkIGZvciBhcyB3ZWxsICovDQorCQlpZiAoaXJxX2NvdW50 KCkgLSBIQVJESVJRX09GRlNFVCA+PSBTT0ZUSVJRX09GRlNFVCkNCisJCQljcHVzdGF0LT5zeXN0 ZW0gKz0gc3lzX3RpY2tzOw0KKwkJZWxzZSBpZiAoYXRvbWljX3JlYWQoJnJxLT5ucl9pb3dhaXQp ID4gMCkNCiAJCQljcHVzdGF0LT5pb3dhaXQgKz0gc3lzX3RpY2tzOw0KIAkJZWxzZQ0KIAkJCWNw dXN0YXQtPmlkbGUgKz0gc3lzX3RpY2tzOw0KQEAgLTEzOTgsNjUgKzE1MjYsMjIgQEAgdm9pZCBz Y2hlZHVsZXJfdGljayhpbnQgdXNlcl90aWNrcywgaW50IA0KIAkgKiBUaGUgdGFzayB3YXMgcnVu bmluZyBkdXJpbmcgdGhpcyB0aWNrIC0gdXBkYXRlIHRoZQ0KIAkgKiB0aW1lIHNsaWNlIGNvdW50 ZXIuIE5vdGU6IHdlIGRvIG5vdCB1cGRhdGUgYSB0aHJlYWQncw0KIAkgKiBwcmlvcml0eSB1bnRp bCBpdCBlaXRoZXIgZ29lcyB0byBzbGVlcCBvciB1c2VzIHVwIGl0cw0KLQkgKiB0aW1lc2xpY2Uu IFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIGludGVyYWN0aXZlIHRhc2tzDQotCSAqIHRvIHVz ZSB1cCB0aGVpciB0aW1lc2xpY2VzIGF0IHRoZWlyIGhpZ2hlc3QgcHJpb3JpdHkgbGV2ZWxzLg0K KwkgKiB0aW1lc2xpY2UuDQogCSAqLw0KIAlpZiAodW5saWtlbHkocnRfdGFzayhwKSkpIHsNCiAJ CS8qDQogCQkgKiBSUiB0YXNrcyBuZWVkIGEgc3BlY2lhbCBmb3JtIG9mIHRpbWVzbGljZSBtYW5h Z2VtZW50Lg0KIAkJICogRklGTyB0YXNrcyBoYXZlIG5vIHRpbWVzbGljZXMuDQogCQkgKi8NCi0J CWlmICgocC0+cG9saWN5ID09IFNDSEVEX1JSKSAmJiAhLS1wLT50aW1lX3NsaWNlKSB7DQotCQkJ cC0+dGltZV9zbGljZSA9IHRhc2tfdGltZXNsaWNlKHApOw0KLQkJCXAtPmZpcnN0X3RpbWVfc2xp Y2UgPSAwOw0KLQkJCXNldF90c2tfbmVlZF9yZXNjaGVkKHApOw0KLQ0KLQkJCS8qIHB1dCBpdCBh dCB0aGUgZW5kIG9mIHRoZSBxdWV1ZTogKi8NCi0JCQlkZXF1ZXVlX3Rhc2socCwgcnEtPmFjdGl2 ZSk7DQotCQkJZW5xdWV1ZV90YXNrKHAsIHJxLT5hY3RpdmUpOw0KKwkJaWYgKHAtPnBvbGljeSA9 PSBTQ0hFRF9SUikgew0KKwkJCWlmICh0YXNrX2V4cGlyZWQocCwgcnEpKQ0KKwkJCQlzZXRfdHNr X25lZWRfcmVzY2hlZChwKTsNCiAJCX0NCiAJCWdvdG8gb3V0X3VubG9jazsNCiAJfQ0KLQlpZiAo IS0tcC0+dGltZV9zbGljZSkgew0KLQkJZGVxdWV1ZV90YXNrKHAsIHJxLT5hY3RpdmUpOw0KLQkJ c2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7DQotCQlwLT5wcmlvID0gZWZmZWN0aXZlX3ByaW8ocCk7 DQotCQlwLT50aW1lX3NsaWNlID0gdGFza190aW1lc2xpY2UocCk7DQotCQlwLT5maXJzdF90aW1l X3NsaWNlID0gMDsNCiANCi0JCWlmICghcnEtPmV4cGlyZWRfdGltZXN0YW1wKQ0KLQkJCXJxLT5l eHBpcmVkX3RpbWVzdGFtcCA9IGppZmZpZXM7DQotCQlpZiAoIVRBU0tfSU5URVJBQ1RJVkUocCkg fHwgRVhQSVJFRF9TVEFSVklORyhycSkpIHsNCi0JCQllbnF1ZXVlX3Rhc2socCwgcnEtPmV4cGly ZWQpOw0KLQkJfSBlbHNlDQotCQkJZW5xdWV1ZV90YXNrKHAsIHJxLT5hY3RpdmUpOw0KLQl9IGVs c2Ugew0KLQkJLyoNCi0JCSAqIFByZXZlbnQgYSB0b28gbG9uZyB0aW1lc2xpY2UgYWxsb3dpbmcg YSB0YXNrIHRvIG1vbm9wb2xpemUNCi0JCSAqIHRoZSBDUFUuIFdlIGRvIHRoaXMgYnkgc3BsaXR0 aW5nIHVwIHRoZSB0aW1lc2xpY2UgaW50bw0KLQkJICogc21hbGxlciBwaWVjZXMuDQotCQkgKg0K LQkJICogTm90ZTogdGhpcyBkb2VzIG5vdCBtZWFuIHRoZSB0YXNrJ3MgdGltZXNsaWNlcyBleHBp cmUgb3INCi0JCSAqIGdldCBsb3N0IGluIGFueSB3YXksIHRoZXkganVzdCBtaWdodCBiZSBwcmVl bXB0ZWQgYnkNCi0JCSAqIGFub3RoZXIgdGFzayBvZiBlcXVhbCBwcmlvcml0eS4gKG9uZSB3aXRo IGhpZ2hlcg0KLQkJICogcHJpb3JpdHkgd291bGQgaGF2ZSBwcmVlbXB0ZWQgdGhpcyB0YXNrIGFs cmVhZHkuKSBXZQ0KLQkJICogcmVxdWV1ZSB0aGlzIHRhc2sgdG8gdGhlIGVuZCBvZiB0aGUgbGlz dCBvbiB0aGlzIHByaW9yaXR5DQotCQkgKiBsZXZlbCwgd2hpY2ggaXMgaW4gZXNzZW5jZSBhIHJv dW5kLXJvYmluIG9mIHRhc2tzIHdpdGgNCi0JCSAqIGVxdWFsIHByaW9yaXR5Lg0KLQkJICoNCi0J CSAqIFRoaXMgb25seSBhcHBsaWVzIHRvIHRhc2tzIGluIHRoZSBpbnRlcmFjdGl2ZQ0KLQkJICog ZGVsdGEgcmFuZ2Ugd2l0aCBhdCBsZWFzdCBUSU1FU0xJQ0VfR1JBTlVMQVJJVFkgdG8gcmVxdWV1 ZS4NCi0JCSAqLw0KLQkJaWYgKFRBU0tfSU5URVJBQ1RJVkUocCkgJiYgISgodGFza190aW1lc2xp Y2UocCkgLQ0KLQkJCXAtPnRpbWVfc2xpY2UpICUgVElNRVNMSUNFX0dSQU5VTEFSSVRZKHApKSAm Jg0KLQkJCShwLT50aW1lX3NsaWNlID49IFRJTUVTTElDRV9HUkFOVUxBUklUWShwKSkgJiYNCi0J CQkocC0+YXJyYXkgPT0gcnEtPmFjdGl2ZSkpIHsNCi0NCi0JCQlkZXF1ZXVlX3Rhc2socCwgcnEt PmFjdGl2ZSk7DQotCQkJc2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7DQotCQkJcC0+cHJpbyA9IGVm ZmVjdGl2ZV9wcmlvKHApOw0KLQkJCWVucXVldWVfdGFzayhwLCBycS0+YWN0aXZlKTsNCi0JCX0N CisJaWYgKHRhc2tfZXhwaXJlZChwLCBycSkpIHsNCisJCXNldF90c2tfbmVlZF9yZXNjaGVkKHAp Ow0KIAl9DQogb3V0X3VubG9jazoNCiAJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsNCkBAIC0xNDc1 LDcgKzE1NjAsNyBAQCBhc21saW5rYWdlIHZvaWQgc2NoZWR1bGUodm9pZCkNCiAJcnVucXVldWVf dCAqcnE7DQogCXByaW9fYXJyYXlfdCAqYXJyYXk7DQogCXN0cnVjdCBsaXN0X2hlYWQgKnF1ZXVl Ow0KLQl1bnNpZ25lZCBsb25nIGxvbmcgbm93Ow0KKwl1bnNpZ25lZCBsb25nIG5vdzsNCiAJdW5z aWduZWQgbG9uZyBydW5fdGltZTsNCiAJaW50IGlkeDsNCiANCkBAIC0xNDg0LDExICsxNTY5LDEw IEBAIGFzbWxpbmthZ2Ugdm9pZCBzY2hlZHVsZSh2b2lkKQ0KIAkgKiBzY2hlZHVsZSgpIGF0b21p Y2FsbHksIHdlIGlnbm9yZSB0aGF0IHBhdGggZm9yIG5vdy4NCiAJICogT3RoZXJ3aXNlLCB3aGlu ZSBpZiB3ZSBhcmUgc2NoZWR1bGluZyB3aGVuIHdlIHNob3VsZCBub3QgYmUuDQogCSAqLw0KLQlp ZiAobGlrZWx5KCEoY3VycmVudC0+c3RhdGUgJiAoVEFTS19ERUFEIHwgVEFTS19aT01CSUUpKSkp IHsNCi0JCWlmICh1bmxpa2VseShpbl9hdG9taWMoKSkpIHsNCi0JCQlwcmludGsoS0VSTl9FUlIg ImJhZDogc2NoZWR1bGluZyB3aGlsZSBhdG9taWMhXG4iKTsNCi0JCQlkdW1wX3N0YWNrKCk7DQot CQl9DQorCWlmICh1bmxpa2VseShpbl9hdG9taWMoKSkgJiYNCisJCQlsaWtlbHkoIShjdXJyZW50 LT5zdGF0ZSAmIChUQVNLX0RFQUQgfCBUQVNLX1pPTUJJRSkpKSkgew0KKwkJcHJpbnRrKEtFUk5f RVJSICJiYWQ6IHNjaGVkdWxpbmcgd2hpbGUgYXRvbWljIVxuIik7DQorCQlkdW1wX3N0YWNrKCk7 DQogCX0NCiANCiBuZWVkX3Jlc2NoZWQ6DQpAQCAtMTQ5NywxOSArMTU4MSwxMSBAQCBuZWVkX3Jl c2NoZWQ6DQogCXJxID0gdGhpc19ycSgpOw0KIA0KIAlyZWxlYXNlX2tlcm5lbF9sb2NrKHByZXYp Ow0KLQlub3cgPSBzY2hlZF9jbG9jaygpOw0KLQlpZiAobGlrZWx5KG5vdyAtIHByZXYtPnRpbWVz dGFtcCA8IE5TX01BWF9TTEVFUF9BVkcpKQ0KLQkJcnVuX3RpbWUgPSBub3cgLSBwcmV2LT50aW1l c3RhbXA7DQotCWVsc2UNCi0JCXJ1bl90aW1lID0gTlNfTUFYX1NMRUVQX0FWRzsNCi0NCi0JLyoN Ci0JICogVGFza3Mgd2l0aCBpbnRlcmFjdGl2ZSBjcmVkaXRzIGdldCBjaGFyZ2VkIGxlc3MgcnVu X3RpbWUNCi0JICogYXQgaGlnaCBzbGVlcF9hdmcgdG8gZGVsYXkgdGhlbSBsb3NpbmcgdGhlaXIg aW50ZXJhY3RpdmUNCi0JICogc3RhdHVzDQotCSAqLw0KLQlpZiAoSElHSF9DUkVESVQocHJldikp DQotCQlydW5fdGltZSAvPSAoQ1VSUkVOVF9CT05VUyhwcmV2KSA/IDogMSk7DQorCW5vdyA9IGNs b2NrX3VzKCk7DQorCXJ1bl90aW1lID0gbm93IC0gcHJldi0+dGltZXN0YW1wOw0KKwlwcmV2LT50 aW1lc3RhbXAgPSBub3c7DQorCWFkZF90YXNrX3RpbWUocHJldiwgcnVuX3RpbWUsIFNUSU1FX1JV Tik7DQorCXByZXYtPnVzZWRfc2xpY2UgKz0gcnVuX3RpbWU7DQogDQogCXNwaW5fbG9ja19pcnEo JnJxLT5sb2NrKTsNCiANCkBAIC0xNTIxLDE0ICsxNTk3LDM3IEBAIG5lZWRfcmVzY2hlZDoNCiAJ CWVsc2UNCiAJCQlkZWFjdGl2YXRlX3Rhc2socHJldiwgcnEpOw0KIAl9DQorCWlmICh1bmxpa2Vs eShwcmV2LT51c2VkX3NsaWNlID49IHRhc2tfdGltZXNsaWNlKHByZXYsIHJxKSkpIHsNCisJCWlm IChwcmV2LT5hcnJheSkgew0KKwkJCXByZXYtPnVzZWRfc2xpY2UgPSAwOw0KKwkJCXByZXYtPmZp cnN0X3RpbWVfc2xpY2UgPSAwOw0KKwkJCWlmICh1bmxpa2VseShydF90YXNrKHByZXYpKSAmJg0K KwkJCQkJcHJldi0+cG9saWN5ID09IFNDSEVEX1JSKSB7DQorCQkJCS8qIHB1dCBpdCBhdCB0aGUg ZW5kIG9mIHRoZSBxdWV1ZTogKi8NCisJCQkJZGVxdWV1ZV90YXNrKHByZXYsIHByZXYtPmFycmF5 KTsNCisJCQkJZW5xdWV1ZV90YXNrKHByZXYsIHJxLT5hY3RpdmUpOw0KKwkJCX0gZWxzZSB7DQor CQkJCWRlcXVldWVfdGFzayhwcmV2LCBwcmV2LT5hcnJheSk7DQorCQkJCXByZXYtPnByaW8gPSB0 YXNrX3ByaW9yaXR5KHByZXYpOw0KKwkJCQllbnF1ZXVlX3Rhc2socHJldiwgcnEtPmV4cGlyZWQp Ow0KKwkJCX0NCisJCX0NCisJfQ0KIA0KICNpZmRlZiBDT05GSUdfU01QDQotCWlmICh1bmxpa2Vs eSghcnEtPm5yX3J1bm5pbmcpKQ0KLQkJbG9hZF9iYWxhbmNlKHJxLCAxLCBjcHVfdG9fbm9kZV9t YXNrKHNtcF9wcm9jZXNzb3JfaWQoKSkpOw0KKwlpZiAodW5saWtlbHkoIXJxLT5ucl9ydW5uaW5n KSkgew0KKyAJCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlOw0KKyAJCXJ1bnF1ZXVlX3QgKmJ1c2ll c3Q7DQorIAkJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsNCisgCQlidXNpZXN0ID0gZmlu ZF9idXNpZXN0X3F1ZXVlKHJxLCBjcHUsIDIsICZpbWJhbGFuY2UsDQorIAkJCQkJCWNwdV90b19u b2RlX21hc2soY3B1KSwgMSk7DQorIAkJaWYgKGJ1c2llc3QpDQorIAkJCWxvYWRfYmFsYW5jZShy cSwgYnVzaWVzdCwgaW1iYWxhbmNlLCAxKTsNCisJfQ0KICNlbmRpZg0KIAlpZiAodW5saWtlbHko IXJxLT5ucl9ydW5uaW5nKSkgew0KKwkJcnEtPmFycmF5X3NlcXVlbmNlKys7DQogCQluZXh0ID0g cnEtPmlkbGU7DQotCQlycS0+ZXhwaXJlZF90aW1lc3RhbXAgPSAwOw0KIAkJZ290byBzd2l0Y2hf dGFza3M7DQogCX0NCiANCkBAIC0xNTM3LDQ5ICsxNjM2LDMwIEBAIG5lZWRfcmVzY2hlZDoNCiAJ CS8qDQogCQkgKiBTd2l0Y2ggdGhlIGFjdGl2ZSBhbmQgZXhwaXJlZCBhcnJheXMuDQogCQkgKi8N CisJCXJxLT5hcnJheV9zZXF1ZW5jZSsrOw0KIAkJcnEtPmFjdGl2ZSA9IHJxLT5leHBpcmVkOw0K IAkJcnEtPmV4cGlyZWQgPSBhcnJheTsNCiAJCWFycmF5ID0gcnEtPmFjdGl2ZTsNCi0JCXJxLT5l eHBpcmVkX3RpbWVzdGFtcCA9IDA7DQogCX0NCiANCiAJaWR4ID0gc2NoZWRfZmluZF9maXJzdF9i aXQoYXJyYXktPmJpdG1hcCk7DQogCXF1ZXVlID0gYXJyYXktPnF1ZXVlICsgaWR4Ow0KIAluZXh0 ID0gbGlzdF9lbnRyeShxdWV1ZS0+bmV4dCwgdGFza190LCBydW5fbGlzdCk7DQogDQotCWlmIChu ZXh0LT5hY3RpdmF0ZWQgPiAwKSB7DQotCQl1bnNpZ25lZCBsb25nIGxvbmcgZGVsdGEgPSBub3cg LSBuZXh0LT50aW1lc3RhbXA7DQotDQotCQlpZiAobmV4dC0+YWN0aXZhdGVkID09IDEpDQotCQkJ ZGVsdGEgPSBkZWx0YSAqIChPTl9SVU5RVUVVRV9XRUlHSFQgKiAxMjggLyAxMDApIC8gMTI4Ow0K LQ0KLQkJYXJyYXkgPSBuZXh0LT5hcnJheTsNCi0JCWRlcXVldWVfdGFzayhuZXh0LCBhcnJheSk7 DQotCQlyZWNhbGNfdGFza19wcmlvKG5leHQsIG5leHQtPnRpbWVzdGFtcCArIGRlbHRhKTsNCi0J CWVucXVldWVfdGFzayhuZXh0LCBhcnJheSk7DQotCX0NCi0JbmV4dC0+YWN0aXZhdGVkID0gMDsN CiBzd2l0Y2hfdGFza3M6DQogCXByZWZldGNoKG5leHQpOw0KIAljbGVhcl90c2tfbmVlZF9yZXNj aGVkKHByZXYpOw0KIAlSQ1VfcXNjdHIodGFza19jcHUocHJldikpKys7DQogDQotCXByZXYtPnNs ZWVwX2F2ZyAtPSBydW5fdGltZTsNCi0JaWYgKChsb25nKXByZXYtPnNsZWVwX2F2ZyA8PSAwKXsN Ci0JCXByZXYtPnNsZWVwX2F2ZyA9IDA7DQotCQlpZiAoIShISUdIX0NSRURJVChwcmV2KSB8fCBM T1dfQ1JFRElUKHByZXYpKSkNCi0JCQlwcmV2LT5pbnRlcmFjdGl2ZV9jcmVkaXQtLTsNCi0JfQ0K LQlwcmV2LT50aW1lc3RhbXAgPSBub3c7DQotDQogCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkg ew0KKwkJYWRkX3Rhc2tfdGltZShuZXh0LCBub3cgLSBuZXh0LT50aW1lc3RhbXAsIFNUSU1FX1dB SVQpOw0KKwkJbmV4dC0+dGltZXN0YW1wID0gbm93Ow0KIAkJaWYgKHByZXYtPnN0YXRlID09IFRB U0tfUlVOTklORyB8fA0KLQkJCQl1bmxpa2VseShwcmVlbXB0X2NvdW50KCkgJiBQUkVFTVBUX0FD VElWRSkpDQorCQkJCXVubGlrZWx5KHByZWVtcHRfY291bnQoKSAmIFBSRUVNUFRfQUNUSVZFKSkg ew0KIAkJCXByZXYtPm5pdmNzdysrOw0KLQkJZWxzZQ0KKwkJfSBlbHNlDQogCQkJcHJldi0+bnZj c3crKzsNCiANCi0JCW5leHQtPnRpbWVzdGFtcCA9IG5vdzsNCiAJCXJxLT5ucl9zd2l0Y2hlcysr Ow0KIAkJcnEtPmN1cnIgPSBuZXh0Ow0KIA0KQEAgLTE1OTMsNyArMTY3Myw3IEBAIHN3aXRjaF90 YXNrczoNCiANCiAJcmVhY3F1aXJlX2tlcm5lbF9sb2NrKGN1cnJlbnQpOw0KIAlwcmVlbXB0X2Vu YWJsZV9ub19yZXNjaGVkKCk7DQotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NI RUQpKQ0KKwlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkp DQogCQlnb3RvIG5lZWRfcmVzY2hlZDsNCiB9DQogDQpAQCAtMjQwMSw2ICsyNDgxLDggQEAgYXNt bGlua2FnZSBsb25nIHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YQ0KIAlpbnQgcmV0dmFsID0gLUVJ TlZBTDsNCiAJc3RydWN0IHRpbWVzcGVjIHQ7DQogCXRhc2tfdCAqcDsNCisJdW5zaWduZWQgbG9u ZyBmbGFnczsNCisJcnVucXVldWVfdCAqcnE7DQogDQogCWlmIChwaWQgPCAwKQ0KIAkJZ290byBv dXRfbm91bmxvY2s7DQpAQCAtMjQxNSw4ICsyNDk3LDEwIEBAIGFzbWxpbmthZ2UgbG9uZyBzeXNf c2NoZWRfcnJfZ2V0X2ludGVydmENCiAJaWYgKHJldHZhbCkNCiAJCWdvdG8gb3V0X3VubG9jazsN CiANCisJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsNCiAJamlmZmllc190b190aW1lc3Bl YyhwLT5wb2xpY3kgJiBTQ0hFRF9GSUZPID8NCi0JCQkJMCA6IHRhc2tfdGltZXNsaWNlKHApLCAm dCk7DQorCQkJCTAgOiBVU19UT19KSUZGSUVTKHRhc2tfdGltZXNsaWNlKHAsIHJxKSksICZ0KTsN CisJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7DQogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9s b2NrKTsNCiAJcmV0dmFsID0gY29weV90b191c2VyKGludGVydmFsLCAmdCwgc2l6ZW9mKHQpKSA/ IC1FRkFVTFQgOiAwOw0KIG91dF9ub3VubG9jazoNCkBAIC0yNzA2LDEyICsyNzkwLDExIEBAIHN0 YXRpYyBpbnQgbWlncmF0aW9uX2NhbGwoc3RydWN0IG5vdGlmaWUNCiAJCQkgIHVuc2lnbmVkIGxv bmcgYWN0aW9uLA0KIAkJCSAgdm9pZCAqaGNwdSkNCiB7DQotCWxvbmcgY3B1ID0gKGxvbmcpIGhj cHU7DQorCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsNCiAJbWlncmF0aW9uX3N0YXJ0dXBfdCBzdGFy dHVwOw0KIA0KIAlzd2l0Y2ggKGFjdGlvbikgew0KIAljYXNlIENQVV9PTkxJTkU6DQotDQogCQlw cmludGsoIlN0YXJ0aW5nIG1pZ3JhdGlvbiB0aHJlYWQgZm9yIGNwdSAlbGlcbiIsIGNwdSk7DQog DQogCQlzdGFydHVwLmNwdSA9IGNwdTsNCkBAIC0yODExLDcgKzI4OTQsNyBAQCB2b2lkIF9faW5p dCBzY2hlZF9pbml0KHZvaWQpDQogCQlzcGluX2xvY2tfaW5pdCgmcnEtPmxvY2spOw0KIAkJSU5J VF9MSVNUX0hFQUQoJnJxLT5taWdyYXRpb25fcXVldWUpOw0KIAkJYXRvbWljX3NldCgmcnEtPm5y X2lvd2FpdCwgMCk7DQotCQlucl9ydW5uaW5nX2luaXQocnEpOw0KKwkJbnJfcnVubmluZ19pbml0 KGkpOw0KIA0KIAkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgew0KIAkJCWFycmF5ID0gcnEtPmFy cmF5cyArIGo7DQoNCl8NCn== --=-C/G1BXyeYSKrlQ+ZdOiM-- --=-gNjL088WZNrcYREPakor Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.3 (GNU/Linux) iD8DBQA/7b/QqburzKaJYLYRAuSGAJ0WXp1ChqTd0/dNbcHgFoT5NKWEWQCfaTSZ uoGvJJCR8crguLWEpeDJUkQ= =fV6h -----END PGP SIGNATURE----- --=-gNjL088WZNrcYREPakor--