From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/5705 Path: news.gmane.org!not-for-mail From: Jens Gustedt Newsgroups: gmane.linux.lib.musl.general Subject: C threads, v3.0 Date: Mon, 04 Aug 2014 11:30:03 +0200 Message-ID: <1407144603.8274.248.camel@eris.loria.fr> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-hPXhuwqZtgOq16B1uNzW" X-Trace: ger.gmane.org 1407144623 17171 80.91.229.3 (4 Aug 2014 09:30:23 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 4 Aug 2014 09:30:23 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-5710-gllmg-musl=m.gmane.org@lists.openwall.com Mon Aug 04 11:30:19 2014 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1XEEav-0005Bh-Hv for gllmg-musl@plane.gmane.org; Mon, 04 Aug 2014 11:30:17 +0200 Original-Received: (qmail 19912 invoked by uid 550); 4 Aug 2014 09:30:16 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 19900 invoked from network); 4 Aug 2014 09:30:15 -0000 X-IronPort-AV: E=Sophos;i="5.01,796,1400018400"; d="scan'";a="88174819" Face: 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 X-Mailer: Evolution 3.4.4-3 Xref: news.gmane.org gmane.linux.lib.musl.general:5705 Archived-At: --=-hPXhuwqZtgOq16B1uNzW Content-Type: multipart/mixed; boundary="=-9kpthEBBzXIA+eNbjYvO" --=-9kpthEBBzXIA+eNbjYvO Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable Hi everybody, please find a new version for the C11 threads attached. This new version reimplements the functions for the control structures mtx_t and cond_t. (Only the functions, the types underneath didn't change for the moment.) This brings some interesting code simplification because - we don't have to care about process shared constructs - there are no attributes, so (almost) all code branches that concern optional features can be cut off - in particular there are no robust mutexes In any case, all of this should still have the same observable behavior as without C11 threads. All I intended to do so far is basically textual rewriting under the assumptions of C11. I'd like to discuss two issues before going further. The first is of minor concern. In many places of that code _m_lock uses a flag, namely 0x40000000. I only found places where this bit is read, but not where it is set. Did I overlook something or is this a leftover? The second issue concerns tsd. C threads can't be fine tuned with attributes, in particular they receive exactly as much stack space as we give them. They are supposed to implement an economic thread model that uses up as few resources as possible. In the current implementation tsd takes up a medium sized part of the stack (__pthread_tsd_size) if any of the application or linked libraries use pthread_key_create somewhere. My impression is that pthread_[gs]etspecific is already rarely used and that tss_[gs]et will be even less. C threads also introduce _Thread_local, a much more convenient interface as long as you don't have=20 I don't think that this policy is ideal for C threads, but it could perhaps be revised for pthreads, too. My idea is the following. (version for C threads with minimal impact on pthreads) - don't assign a tsd in thrd_create - change pthread_getspecific, pthread_setspecific, tss_get, and __pthread_tsd_run_dtors such that they check for nullness of tsd. this is a trivial and non-expensive change. pthread_setspecific may return ENOMEM or EINVAL in such cases. The getters should just return 0. __pthread_tsd_run_dtors obviously would just do nothing, then. - change tss_set, to mmap the table if it is absent and if it is called with a non-null pointer argument. (I.e if it really has to store something). C11 allows this function to fail, so we could return thrd_error if mmap fails. - change thrd_exit to check for tsd and to unmap it at the end if necessary For thrd_create one of the consequences would be that main hasn't to be treated special with that respect. The additional mmap and unmap in tss_set should only concern entire pages. This should only have a minimal runtime overhead, but which only would occur for threads that call tss_set with a non-null pointer to be stored. Please let me know what you think. Jens --=20 :: INRIA Nancy Grand Est ::: AlGorille ::: ICube/ICPS ::: :: ::::::::::::::: office Strasbourg : +33 368854536 :: :: :::::::::::::::::::::: gsm France : +33 651400183 :: :: ::::::::::::::: gsm international : +49 15737185122 :: :: http://icube-icps.unistra.fr/index.php/Jens_Gustedt :: --=-9kpthEBBzXIA+eNbjYvO Content-Disposition: attachment; filename="thrd11-v3.0.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="thrd11-v3.0.patch"; charset="ISO-8859-1" ZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWxsdHlwZXMuaC5pbiBiL2luY2x1ZGUvYWxsdHlwZXMuaC5p bg0KaW5kZXggODQ3OGZiNC4uNGNkMmNiMSAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvYWxsdHlwZXMu aC5pbg0KKysrIGIvaW5jbHVkZS9hbGx0eXBlcy5oLmluDQpAQCAtNTgsNiArNTgsMTAgQEAgVFlQ RURFRiBzdHJ1Y3QgeyB1bnNpZ25lZCBfX2F0dHI7IH0gcHRocmVhZF9tdXRleGF0dHJfdDsNCiBU WVBFREVGIHN0cnVjdCB7IHVuc2lnbmVkIF9fYXR0cjsgfSBwdGhyZWFkX2NvbmRhdHRyX3Q7DQog VFlQRURFRiBzdHJ1Y3QgeyB1bnNpZ25lZCBfX2F0dHI7IH0gcHRocmVhZF9iYXJyaWVyYXR0cl90 Ow0KIFRZUEVERUYgc3RydWN0IHsgdW5zaWduZWQgX19hdHRyWzJdOyB9IHB0aHJlYWRfcndsb2Nr YXR0cl90Ow0KK1RZUEVERUYgcHRocmVhZF9jb25kX3QgY25kX3Q7DQorVFlQRURFRiBwdGhyZWFk X211dGV4X3QgbXR4X3Q7DQorDQorDQogDQogVFlQRURFRiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsN CiANCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RocmVhZHMuaCBiL2luY2x1ZGUvdGhyZWFkcy5oDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZTEzMTc4MQ0KLS0tIC9kZXYvbnVs bA0KKysrIGIvaW5jbHVkZS90aHJlYWRzLmgNCkBAIC0wLDAgKzEsMTY5IEBADQorI2lmbmRlZiBf VEhSRUFEU19IDQorI2RlZmluZSBfVEhSRUFEU19IDQorDQorLyogVGhpcyBvbmUgaXMgZXhwbGlj aXRseSBhbGxvd2VkIHRvIGJlIGluY2x1ZGVkLiAqLw0KKyNpbmNsdWRlIDx0aW1lLmg+DQorDQor DQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorI2RlZmlu ZSBfX05FRURfY25kX3QNCisjZGVmaW5lIF9fTkVFRF9tdHhfdA0KKy8qIFVudGlsIHdlIGNvbWUg dXAgd2l0aCBhIGJldHRlciBuYW1pbmcgc2NoZW1lLCB3ZSBuZWVkIHRvIGV4cG9zZQ0KKyAgIHNv bWUgcHRocmVhZCB0eXBlcy4gKi8NCisjZGVmaW5lIF9fTkVFRF9wdGhyZWFkX2NvbmRfdA0KKyNk ZWZpbmUgX19ORUVEX3B0aHJlYWRfbXV0ZXhfdA0KKyNkZWZpbmUgX19ORUVEX3B0aHJlYWRfb25j ZV90DQorI2RlZmluZSBfX05FRURfcHRocmVhZF90DQorI2RlZmluZSBfX05FRURfcHRocmVhZF9r ZXlfdA0KKw0KKyNpbmNsdWRlIDxiaXRzL2FsbHR5cGVzLmg+DQorI2luY2x1ZGUgPGJpdHMvZXJy bm8uaD4NCisNCit0eXBlZGVmIHB0aHJlYWRfb25jZV90IG9uY2VfZmxhZzsNCit0eXBlZGVmIHB0 aHJlYWRfdCB0aHJkX3Q7DQordHlwZWRlZiBwdGhyZWFkX2tleV90IHRzc190Ow0KK3R5cGVkZWYg aW50ICgqdGhyZF9zdGFydF90KSh2b2lkKik7DQordHlwZWRlZiB2b2lkICgqdHNzX2R0b3JfdCko dm9pZCopOw0KKw0KKw0KKyNpZm5kZWYgX19USFJEX0VYUEVSSU1FTlRBTA0KKyMgZGVmaW5lIF9f VEhSRF9FWFBFUklNRU5UQUwgMQ0KKyNlbmRpZg0KKw0KKyAgLyogVGhlIGZvbGxvd2luZyBsaXN0 IG9mIDkgaW50ZWdlciBjb25zdGFudHMgbWFrZXMgdXAgZm9yIHRoZSBiaW5hcnkNCisgICAgIGNv bXBhdGliaWxpdHkgb2YgdGhpcyBDIHRocmVhZCBpbXBsZW1lbnRhdGlvbi4gWW91IG11c3QgbmV2 ZXINCisgICAgIGxpbmsgY29kZSBhZ2FpbnN0IHZlcnNpb25zIG9mIHRoZSBDIGxpYnJhcnkgdGhh dCBkbyBub3QgYWdyZWUNCisgICAgIHVwb24gdGhlc2UgQUJJIHBhcmFtZXRlcnMuDQorDQorICAg ICBBZGRpdGlvbmFsbHkgdGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIDUgdHlw ZXMgaGF2ZQ0KKyAgICAgdGhlIHNhbWUgc2l6ZSBhY3Jvc3MgQyBsaWJyYXJpZXMgYW5kIHRoYXQg dGhlc2UgdHlwZXMgY2FuIGJlDQorICAgICBpbml0aWFsaXplZCBieSB0aGUgZGVmYXVsdCBpbml0 aWFsaXplci4NCisNCisgICAgIFRoZSB2YWx1ZXMgZm9yIHRoZSA5IHBhcmFtZXRlcnMgYXJlIG5v dCBmaXhlZCBmb3Igbm93LiBEZXBlbmRpbmcNCisgICAgIG9uIHRoZSBjaG9pY2VzIG9mIG90aGVy IGltcGxlbWVudGF0aW9ucyBhbmQgdGhlIGV2b2x1dGlvbiBvZiB0aGUNCisgICAgIEMgc3RhbmRh cmQgdGhleSBtYXkgc3RpbGwgY2hhbmdlLiBUaGlzIHNob3VsZCBoYXBwZW4gcmFyZWx5LCBidXQN CisgICAgIHlvdSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBDIHRocmVhZCBmZWF0dXJlIHRvIGJlIGV4 cGVyaW1lbnRhbA0KKyAgICAgdW50aWwgdGhlbiwgYW5kIGJlIHByZXBhcmVkIHRvIHJlY29tcGls ZSB5b3VyIGJpbmFyeSB3aGVuIGxpbmtpbmcNCisgICAgIGFnYWluc3QgYSBkaWZmZXJlbnQgaW1w bGVtZW50YXRpb24gb3IgYSBuZXcgdmVyc2lvbi4NCisNCisgICAgIFRoZSBtYWNybyBfX1RIUkRf RVhQRVJJTUVOVEFMIHdpbGwgYmUgZGVmaW5lZCBhcyBsb25nIGFzIHdlDQorICAgICBjb25zaWRl ciB0aGlzIEFCSSB0byBiZSB1bnN0YWJsZS4gVGhpcyBjb21lcyB3aXRoIHNvbWUgbGluayB0aW1l DQorICAgICBjaGVja3MgYW5kIGFuIG92ZXJoZWFkIG9mIHNvbWUgYnl0ZXMuIEF0IHlvdXIgb3du IHJpc2sgeW91IG1heQ0KKyAgICAgc3dpdGNoIHRoaXMgY2hlY2sgb2ZmIGJ5IGRlZmluaW5nIF9f VEhSRF9FWFBFUklNRU5UQUwgbWFjcm8gdG8NCisgICAgIDAuICovDQorDQorI2RlZmluZSBfX1RI UkRfU1VDQ0VTUyAgICAgIDANCisjZGVmaW5lIF9fVEhSRF9CVVNZICAgICAgICAgRUJVU1kNCisj ZGVmaW5lIF9fVEhSRF9FUlJPUiAgICAgICAgRUlOVkFMDQorI2RlZmluZSBfX1RIUkRfTk9NRU0g ICAgICAgIEVOT01FTQ0KKyNkZWZpbmUgX19USFJEX1RJTUVET1VUICAgICBFVElNRURPVVQNCisj ZGVmaW5lIF9fTVRYX1BMQUlOICAgICAgICAgMA0KKyNkZWZpbmUgX19NVFhfUkVDVVJTSVZFICAg ICAxDQorI2RlZmluZSBfX01UWF9USU1FRCAgICAgICAgIDINCisjZGVmaW5lIFRTU19EVE9SX0lU RVJBVElPTlMgNA0KKw0KKyNkZWZpbmUgX19USFJEX0NPTkNBVDEwXyhfMCwgXzEsIF8yLCBfMywg XzQsIF81LCBfNiwgXzcsIF84LCBfOSkgICAgICAgICBcDQorXzAgIyMgXyAjIyBfMSAjIyBfICMj IF8yICMjIF8gIyMgXzMgIyMgXyAjIyBfNCAjIyBfICMjIF81ICMjIF8gIyMgXzYgIyMgXyAjIyBf NyAjIyBfICMjIF84ICMjIF8gIyMgXzkNCisNCisjZGVmaW5lIF9fVEhSRF9DT05DQVQxMChfMCwg XzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84LCBfOSkgXA0KKyAgX19USFJEX0NPTkNBVDEw XyhfMCwgXzEsIF8yLCBfMywgXzQsIF81LCBfNiwgXzcsIF84LCBfOSkNCisNCisNCisjZGVmaW5l IF9fVEhSRF9BQkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorX19USFJEX0NPTkNB VDEwKF9fdGhyZF9hYmksICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICBf X1RIUkRfU1VDQ0VTUywgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgX19USFJE X0JVU1ksICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgIF9fVEhSRF9FUlJP UiwgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICBfX1RIUkRfTk9NRU0sICAg ICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgX19USFJEX1RJTUVET1VULCAgICAg ICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgIF9fTVRYX1BMQUlOLCAgICAgICAgICAgICAg ICAgICAgXA0KKyAgICAgICAgICAgICAgICBfX01UWF9SRUNVUlNJVkUsICAgICAgICAgICAgICAg IFwNCisgICAgICAgICAgICAgICAgX19NVFhfVElNRUQsICAgICAgICAgICAgICAgICAgICBcDQor ICAgICAgICAgICAgICAgIFRTU19EVE9SX0lURVJBVElPTlMgICAgICAgICAgICAgXA0KKyAgICAg ICAgICAgICAgICApDQorDQorI2RlZmluZSBfX1RIUkRfU0hGVChYLCBZKSAoKChYKSA8PCAzKSBe IChZKSkNCisNCitlbnVtIHsNCisgIF9fdGhyZF9hYmkgPQ0KKyAgX19USFJEX1NIRlQoc2l6ZW9m KGNuZF90KSwNCisgICAgICAgICAgICAgIF9fVEhSRF9TSEZUKHNpemVvZihtdHhfdCksDQorICAg ICAgICAgICAgICAgICAgICAgICAgICBfX1RIUkRfU0hGVChzaXplb2Yob25jZV9mbGFnKSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVEhSRF9TSEZUKHNpemVvZih0 aHJkX3QpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mKHRzc190KSkpKSksDQorfTsNCisNCitleHRlcm4gdW5zaWduZWQgY29uc3QgX19U SFJEX0FCSTsNCisNCisjZGVmaW5lIF9fVEhSRF9BQklfQ0hFQ0sgKDEvKF9fVEhSRF9BQkkgPT0g X190aHJkX2FiaSkpDQorDQorI2lmIF9fVEhSRF9FWFBFUklNRU5UQUwNCisjIGRlZmluZSBfX1RI UkRfQUJJX01BUksgX19hdHRyaWJ1dGVfXygodXNlZCkpIHN0YXRpYyB1bnNpZ25lZCBjb25zdCpj b25zdCBfX3RocmRfYWJpX21hcmsgPSAmX19USFJEX0FCSQ0KKyNlbHNlDQorIyBkZWZpbmUgX19U SFJEX0FCSV9NQVJLIHR5cGVkZWYgdW5zaWduZWQgX190aHJkX2FiaV9kdW1teV90eXBlDQorI2Vu ZGlmDQorDQorZW51bSB7DQorICB0aHJkX3N1Y2Nlc3MgPSBfX1RIUkRfU1VDQ0VTUywNCisgIHRo cmRfYnVzeSA9IF9fVEhSRF9CVVNZLA0KKyAgdGhyZF9lcnJvciA9IF9fVEhSRF9FUlJPUiwNCisg IHRocmRfbm9tZW0gPSBfX1RIUkRfTk9NRU0sDQorICB0aHJkX3RpbWVkb3V0ID0gX19USFJEX1RJ TUVET1VULA0KK307DQorDQorZW51bSB7DQorICBtdHhfcGxhaW4gPSBfX01UWF9QTEFJTiwNCisg IG10eF9yZWN1cnNpdmUgPSBfX01UWF9SRUNVUlNJVkUsDQorICAvLyBhbGwgbXV0ZXhlcyBhcmUg dGltZWQsIGhlcmUuIHNvIHRoaXMgaXMgYSBuby1vcA0KKyAgbXR4X3RpbWVkID0gX19NVFhfVElN RUQsDQorfTsNCisNCisjZGVmaW5lIE9OQ0VfRkxBR19JTklUIHsgMCB9DQorI2RlZmluZSB0aHJl YWRfbG9jYWwgX1RocmVhZF9sb2NhbA0KKw0KK2ludCB0aHJkX2NyZWF0ZSh0aHJkX3QgKiwgdGhy ZF9zdGFydF90LCB2b2lkICopOw0KK19Ob3JldHVybiB2b2lkIHRocmRfZXhpdChpbnQpOw0KKw0K K2ludCB0aHJkX2RldGFjaCh0aHJkX3QpOw0KK2ludCB0aHJkX2pvaW4odGhyZF90LCBpbnQgKik7 DQorDQoraW50IHRocmRfc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1l c3BlYyAqKTsNCit2b2lkIHRocmRfeWllbGQodm9pZCk7DQorDQordGhyZF90IHRocmRfY3VycmVu dCh2b2lkKTsNCitpbnQgdGhyZF9lcXVhbCh0aHJkX3QsIHRocmRfdCk7DQorI2RlZmluZSB0aHJk X2VxdWFsKEEsIEIpICgoQSkgPT0gKEIpKQ0KKw0KK3ZvaWQgY2FsbF9vbmNlKG9uY2VfZmxhZyAq LCB2b2lkICgqKSh2b2lkKSk7DQorDQoraW50IG10eF9pbml0KG10eF90ICosIGludCk7DQordm9p ZCBtdHhfZGVzdHJveShtdHhfdCAqKTsNCisNCitpbnQgbXR4X2xvY2sobXR4X3QgKik7DQoraW50 IG10eF90aW1lZGxvY2sobXR4X3QgKnJlc3RyaWN0LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJl c3RyaWN0KTsNCitpbnQgbXR4X3RyeWxvY2sobXR4X3QgKik7DQoraW50IG10eF91bmxvY2sobXR4 X3QgKik7DQorDQoraW50IGNuZF9pbml0KGNuZF90ICopOw0KK3ZvaWQgY25kX2Rlc3Ryb3koY25k X3QgKik7DQorDQoraW50IGNuZF9icm9hZGNhc3QoY25kX3QgKik7DQoraW50IGNuZF9zaWduYWwo Y25kX3QgKik7DQorDQoraW50IGNuZF90aW1lZHdhaXQoY25kX3QgKnJlc3RyaWN0LCBtdHhfdCAq cmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVzdHJpY3QpOw0KK2ludCBjbmRfd2Fp dChjbmRfdCAqLCBtdHhfdCAqKTsNCisNCitpbnQgdHNzX2NyZWF0ZSh0c3NfdCAqLCB0c3NfZHRv cl90KTsNCit2b2lkIHRzc19kZWxldGUodHNzX3Qga2V5KTsNCisNCitpbnQgdHNzX3NldCh0c3Nf dCwgdm9pZCAqKTsNCit2b2lkICp0c3NfZ2V0KHRzc190KTsNCisNCisjaWZkZWYgX19jcGx1c3Bs dXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvc3JjL21tYW4vbXByb3Rl Y3QuYyBiL3NyYy9tbWFuL21wcm90ZWN0LmMNCmluZGV4IGY0ODg0ODYuLjUzNTc4N2IgMTAwNjQ0 DQotLS0gYS9zcmMvbW1hbi9tcHJvdGVjdC5jDQorKysgYi9zcmMvbW1hbi9tcHJvdGVjdC5jDQpA QCAtMiwxMCArMiwxMiBAQA0KICNpbmNsdWRlICJsaWJjLmgiDQogI2luY2x1ZGUgInN5c2NhbGwu aCINCiANCi1pbnQgbXByb3RlY3Qodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHByb3QpDQor aW50IF9fbXByb3RlY3Qodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHByb3QpDQogew0KIAlz aXplX3Qgc3RhcnQsIGVuZDsNCiAJc3RhcnQgPSAoc2l6ZV90KWFkZHIgJiAtUEFHRV9TSVpFOw0K IAllbmQgPSAoc2l6ZV90KSgoY2hhciAqKWFkZHIgKyBsZW4gKyBQQUdFX1NJWkUtMSkgJiAtUEFH RV9TSVpFOw0KIAlyZXR1cm4gc3lzY2FsbChTWVNfbXByb3RlY3QsIHN0YXJ0LCBlbmQtc3RhcnQs IHByb3QpOw0KIH0NCisNCit3ZWFrX2FsaWFzKF9fbXByb3RlY3QsIG1wcm90ZWN0KTsNCmRpZmYg LS1naXQgYS9zcmMvc2NoZWQvdGhyZF95aWVsZC5jIGIvc3JjL3NjaGVkL3RocmRfeWllbGQuYw0K bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjMwMWU5NTMNCi0tLSAvZGV2L251 bGwNCisrKyBiL3NyYy9zY2hlZC90aHJkX3lpZWxkLmMNCkBAIC0wLDAgKzEsNyBAQA0KKyNpbmNs dWRlIDxzY2hlZC5oPg0KKyNpbmNsdWRlICJzeXNjYWxsLmgiDQorDQordm9pZCB0aHJkX3lpZWxk KCkNCit7DQorICAgICAgICAgKHZvaWQpc3lzY2FsbChTWVNfc2NoZWRfeWllbGQpOw0KK30NCmRp ZmYgLS1naXQgYS9zcmMvdGhyZWFkL19fdGhyZF9hYmkuYyBiL3NyYy90aHJlYWQvX190aHJkX2Fi aS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZTU2NzRlNg0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9fX3RocmRfYWJpLmMNCkBAIC0wLDAgKzEsMyBAQA0K KyNpbmNsdWRlIDx0aHJlYWRzLmg+DQorDQordW5zaWduZWQgY29uc3QgX19USFJEX0FCSSA9ICBf X3RocmRfYWJpOw0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvX190aW1lZHdhaXQuYyBiL3NyYy90 aHJlYWQvX190aW1lZHdhaXQuYw0KaW5kZXggMzAyMjczYS4uM2FlZDJiZCAxMDA2NDQNCi0tLSBh L3NyYy90aHJlYWQvX190aW1lZHdhaXQuYw0KKysrIGIvc3JjL3RocmVhZC9fX3RpbWVkd2FpdC5j DQpAQCAtNCw2ICs0LDkgQEANCiAjaW5jbHVkZSAiZnV0ZXguaCINCiAjaW5jbHVkZSAic3lzY2Fs bC5oIg0KIA0KK2ludCBfX3B0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUoaW50IG5ldywgaW50ICpvbGQp Ow0KK2ludCBfX2Nsb2NrX2dldHRpbWUoY2xvY2tpZF90IGNsaywgc3RydWN0IHRpbWVzcGVjICp0 cyk7DQorDQogc3RhdGljIGludCBkb193YWl0KHZvbGF0aWxlIGludCAqYWRkciwgaW50IHZhbCwN CiAJY2xvY2tpZF90IGNsaywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICphdCwgaW50IHByaXYpDQog ew0KQEAgLTEyLDcgKzE1LDcgQEAgc3RhdGljIGludCBkb193YWl0KHZvbGF0aWxlIGludCAqYWRk ciwgaW50IHZhbCwNCiANCiAJaWYgKGF0KSB7DQogCQlpZiAoYXQtPnR2X25zZWMgPj0gMTAwMDAw MDAwMFVMKSByZXR1cm4gRUlOVkFMOw0KLQkJaWYgKGNsb2NrX2dldHRpbWUoY2xrLCAmdG8pKSBy ZXR1cm4gRUlOVkFMOw0KKwkJaWYgKF9fY2xvY2tfZ2V0dGltZShjbGssICZ0bykpIHJldHVybiBF SU5WQUw7DQogCQl0by50dl9zZWMgPSBhdC0+dHZfc2VjIC0gdG8udHZfc2VjOw0KIAkJaWYgKCh0 by50dl9uc2VjID0gYXQtPnR2X25zZWMgLSB0by50dl9uc2VjKSA8IDApIHsNCiAJCQl0by50dl9z ZWMtLTsNCkBAIC0zMywxMyArMzYsMTMgQEAgaW50IF9fdGltZWR3YWl0KHZvbGF0aWxlIGludCAq YWRkciwgaW50IHZhbCwNCiB7DQogCWludCByLCBjczsNCiANCi0JaWYgKCFjbGVhbnVwKSBwdGhy ZWFkX3NldGNhbmNlbHN0YXRlKFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUsICZjcyk7DQorCWlmICgh Y2xlYW51cCkgX19wdGhyZWFkX3NldGNhbmNlbHN0YXRlKFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUs ICZjcyk7DQogCXB0aHJlYWRfY2xlYW51cF9wdXNoKGNsZWFudXAsIGFyZyk7DQogDQogCXIgPSBk b193YWl0KGFkZHIsIHZhbCwgY2xrLCBhdCwgcHJpdik7DQogDQogCXB0aHJlYWRfY2xlYW51cF9w b3AoMCk7DQotCWlmICghY2xlYW51cCkgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShjcywgMCk7DQor CWlmICghY2xlYW51cCkgX19wdGhyZWFkX3NldGNhbmNlbHN0YXRlKGNzLCAwKTsNCiANCiAJcmV0 dXJuIHI7DQogfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvY2FsbF9vbmNlLmMgYi9zcmMvdGhy ZWFkL2NhbGxfb25jZS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNzQy YTcwNw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9jYWxsX29uY2UuYw0KQEAgLTAs MCArMSw5IEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRz Lmg+DQorDQoraW50IF9fcHRocmVhZF9vbmNlKG9uY2VfZmxhZyAqLCB2b2lkICgqKSh2b2lkKSk7 DQorDQordm9pZCAoY2FsbF9vbmNlKShvbmNlX2ZsYWcgKmZsYWcsIHZvaWQgKCpmdW5jKSh2b2lk KSkgew0KKwlfX1RIUkRfQUJJX01BUks7DQorCSh2b2lkKV9fcHRocmVhZF9vbmNlKGZsYWcsIGZ1 bmMpOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL2NuZF9icm9hZGNhc3QuYyBiL3NyYy90 aHJlYWQvY25kX2Jyb2FkY2FzdC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MC4uNzBmYjdhNw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9jbmRfYnJvYWRjYXN0 LmMNCkBAIC0wLDAgKzEsMzQgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorI2luY2x1 ZGUgPHRocmVhZHMuaD4NCisNCitpbnQgY25kX2Jyb2FkY2FzdChjbmRfdCAqYykNCit7DQorCW10 eF90ICptOw0KKw0KKwlpZiAoIWMtPl9jX3dhaXRlcnMpIHJldHVybiB0aHJkX3N1Y2Nlc3M7DQor DQorCWFfaW5jKCZjLT5fY19zZXEpOw0KKw0KKwkvKiBCbG9jayB3YWl0ZXJzIGZyb20gcmV0dXJu aW5nIHNvIHdlIGNhbiB1c2UgdGhlIG11dGV4LiAqLw0KKwl3aGlsZSAoYV9zd2FwKCZjLT5fY19s b2NrLCAxKSkNCisJCV9fd2FpdCgmYy0+X2NfbG9jaywgJmMtPl9jX2xvY2t3YWl0LCAxLCAxKTsN CisJaWYgKCFjLT5fY193YWl0ZXJzKQ0KKwkJZ290byBvdXQ7DQorCW0gPSBjLT5fY19tdXRleDsN CisNCisJLyogTW92ZSB3YWl0ZXIgY291bnQgdG8gdGhlIG11dGV4ICovDQorCWFfZmV0Y2hfYWRk KCZtLT5fbV93YWl0ZXJzLCBjLT5fY193YWl0ZXJzMik7DQorCWMtPl9jX3dhaXRlcnMyID0gMDsN CisNCisJLyogUGVyZm9ybSB0aGUgZnV0ZXggcmVxdWV1ZSwgd2FraW5nIG9uZSB3YWl0ZXIgdW5s ZXNzIHdlIGtub3cNCisJICogdGhhdCB0aGUgY2FsbGluZyB0aHJlYWQgaG9sZHMgdGhlIG11dGV4 LiAqLw0KKwlfX3N5c2NhbGwoU1lTX2Z1dGV4LCAmYy0+X2Nfc2VxLCBGVVRFWF9SRVFVRVVFLA0K KwkJIW0tPl9tX3R5cGUgfHwgKG0tPl9tX2xvY2smSU5UX01BWCkhPV9fcHRocmVhZF9zZWxmKCkt PnRpZCwNCisJCUlOVF9NQVgsICZtLT5fbV9sb2NrKTsNCisNCitvdXQ6DQorCWFfc3RvcmUoJmMt Pl9jX2xvY2ssIDApOw0KKwlpZiAoYy0+X2NfbG9ja3dhaXQpIF9fd2FrZSgmYy0+X2NfbG9jaywg MSwgMCk7DQorDQorCXJldHVybiB0aHJkX3N1Y2Nlc3M7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90 aHJlYWQvY25kX2Rlc3Ryb3kuYyBiL3NyYy90aHJlYWQvY25kX2Rlc3Ryb3kuYw0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjdkNmYzYTENCi0tLSAvZGV2L251bGwNCisrKyBi L3NyYy90aHJlYWQvY25kX2Rlc3Ryb3kuYw0KQEAgLTAsMCArMSwyMSBAQA0KKyNpbmNsdWRlICJw dGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KKy8qIFRoZSBiZWhhdmlv ciBvZiBjbmRfZGVzdHJveSBpcyB1bmRlZmluZWQgaWYgY25kIGlzIHN0aWxsIGluDQorICAgdXNl LiBUaGUgY2hvaWNlIGZvciBwdGhyZWFkX2NvbmRfZGVzdHJveSBpbiB0aGF0IHNpdHVhdGlvbiBp cyB0bw0KKyAgIHdha2UgdXAgYWxsIHVzZXJzIGJlZm9yZSBkZXN0cm95aW5nLiBJIGFtIG5vdCBz dXJlIHRoYXQgd2Ugc2hvdWxkDQorICAgZG8gaXQgbGlrZSB0aGF0IGhlcmUsIHRvby4gQWx0ZXJu YXRpdmVzIHdvdWxkIGJlOg0KKyAgIC0gY29tcGxhaW4gYnkgdXNpbmcgcGVycm9yIG9yIGVxdWl2 YWxlbnQNCisgICAtIGFzc2VydCB0aGF0IHRoZXJlIGlzIG5vIHdhaXRlcg0KKyAgIC0gYWJvcnQg d2hlbiB0aGVyZSBpcyBhIHdhaXRlcg0KKyAgIC0gZG8gbm90aGluZw0KKyAgICovDQordm9pZCBj bmRfZGVzdHJveShjbmRfdCAqYykNCit7DQorCWludCBjbnQ7DQorCWMtPl9jX2Rlc3Ryb3kgPSAx Ow0KKwlpZiAoYy0+X2Nfd2FpdGVycykNCisJCV9fd2FrZSgmYy0+X2Nfc2VxLCAtMSwgMCk7DQor CXdoaWxlICgoY250ID0gYy0+X2Nfd2FpdGVycykpDQorCQlfX3dhaXQoJmMtPl9jX3dhaXRlcnMs IDAsIGNudCwgMCk7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvY25kX2luaXQuYyBiL3Ny Yy90aHJlYWQvY25kX2luaXQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAu LmM3ZjFlZGYNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvY25kX2luaXQuYw0KQEAg LTAsMCArMSwxMCBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhy ZWFkcy5oPg0KKw0KK2ludCBjbmRfaW5pdChjbmRfdCAqIGMpDQorew0KKwkqYyA9IChjbmRfdCkg ew0KKwkJMA0KKwl9Ow0KKwlyZXR1cm4gdGhyZF9zdWNjZXNzOw0KK30NCmRpZmYgLS1naXQgYS9z cmMvdGhyZWFkL2NuZF9zaWduYWwuYyBiL3NyYy90aHJlYWQvY25kX3NpZ25hbC5jDQpuZXcgZmls ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMzk2NzY4Nw0KLS0tIC9kZXYvbnVsbA0KKysr IGIvc3JjL3RocmVhZC9jbmRfc2lnbmFsLmMNCkBAIC0wLDAgKzEsMTAgQEANCisjaW5jbHVkZSAi cHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRocmVhZHMuaD4NCisNCitpbnQgY25kX3NpZ25h bChjbmRfdCAqIGNuZCkgew0KKwlpZiAoY25kLT5fY193YWl0ZXJzKSB7DQorCQlhX2luYygmY25k LT5fY19zZXEpOw0KKwkJaWYgKGNuZC0+X2Nfd2FpdGVycykgX193YWtlKCZjbmQtPl9jX3NlcSwg MSwgMCk7DQorIAl9DQorCXJldHVybiB0aHJkX3N1Y2Nlc3M7DQorfQ0KZGlmZiAtLWdpdCBhL3Ny Yy90aHJlYWQvY25kX3RpbWVkd2FpdC5jIGIvc3JjL3RocmVhZC9jbmRfdGltZWR3YWl0LmMNCm5l dyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi4xOGRiM2VmDQotLS0gL2Rldi9udWxs DQorKysgYi9zcmMvdGhyZWFkL2NuZF90aW1lZHdhaXQuYw0KQEAgLTAsMCArMSw4MSBAQA0KKyNp bmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK3ZvaWQg X19wdGhyZWFkX3Rlc3RjYW5jZWwodm9pZCk7DQorDQorc3RydWN0IGNtIHsNCisJY25kX3QgKmM7 DQorCW10eF90ICptOw0KK307DQorDQorc3RhdGljIHZvaWQgdW53YWl0KGNuZF90ICpjLCBtdHhf dCAqbSkNCit7DQorCV9fVEhSRF9BQklfTUFSSzsNCisJLyogUmVtb3ZpbmcgYSB3YWl0ZXIgaXMg bm9uLXRyaXZpYWwgaWYgd2UgY291bGQgYmUgdXNpbmcgcmVxdWV1ZQ0KKwkgKiBiYXNlZCBicm9h ZGNhc3Qgc2lnbmFscywgZHVlIHRvIG11dGV4IGFjY2VzcyBpc3N1ZXMsIGV0Yy4gKi8NCisNCisJ d2hpbGUgKGFfc3dhcCgmYy0+X2NfbG9jaywgMSkpDQorCQlfX3dhaXQoJmMtPl9jX2xvY2ssICZj LT5fY19sb2Nrd2FpdCwgMSwgMSk7DQorDQorCWlmIChjLT5fY193YWl0ZXJzMikgYy0+X2Nfd2Fp dGVyczItLTsNCisJZWxzZSBhX2RlYygmbS0+X21fd2FpdGVycyk7DQorDQorCWFfc3RvcmUoJmMt Pl9jX2xvY2ssIDApOw0KKwlpZiAoYy0+X2NfbG9ja3dhaXQpIF9fd2FrZSgmYy0+X2NfbG9jaywg MSwgMSk7DQorDQorCWFfZGVjKCZjLT5fY193YWl0ZXJzKTsNCisJaWYgKGMtPl9jX2Rlc3Ryb3kp IF9fd2FrZSgmYy0+X2Nfd2FpdGVycywgMSwgMSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGNsZWFu dXAodm9pZCAqcCkNCit7DQorCXN0cnVjdCBjbSAqY20gPSBwOw0KKwl1bndhaXQoY20tPmMsIGNt LT5tKTsNCisJbXR4X2xvY2soY20tPm0pOw0KK30NCisNCitpbnQgY25kX3RpbWVkd2FpdChjbmRf dCAqcmVzdHJpY3QgYywgbXR4X3QgKnJlc3RyaWN0IG0sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAq cmVzdHJpY3QgdHMpDQorew0KKwlzdHJ1Y3QgY20gY20gPSB7IC5jPWMsIC5tPW0gfTsNCisJaW50 IHIsIGU9MCwgc2VxOw0KKw0KKwlpZiAobS0+X21fdHlwZSAmJiAobS0+X21fbG9jayZJTlRfTUFY KSAhPSBfX3B0aHJlYWRfc2VsZigpLT50aWQpDQorCQlyZXR1cm4gdGhyZF9lcnJvcjsNCisNCisJ aWYgKHRzICYmIHRzLT50dl9uc2VjID49IDEwMDAwMDAwMDBVTCkNCisJCXJldHVybiB0aHJkX2Vy cm9yOw0KKw0KKwlfX3B0aHJlYWRfdGVzdGNhbmNlbCgpOw0KKw0KKwlhX2luYygmYy0+X2Nfd2Fp dGVycyk7DQorDQorCWMtPl9jX211dGV4ID0gbTsNCisJd2hpbGUgKGFfc3dhcCgmYy0+X2NfbG9j aywgMSkpDQorCQlfX3dhaXQoJmMtPl9jX2xvY2ssICZjLT5fY19sb2Nrd2FpdCwgMSwgMSk7DQor CWMtPl9jX3dhaXRlcnMyKys7DQorCWFfc3RvcmUoJmMtPl9jX2xvY2ssIDApOw0KKwlpZiAoYy0+ X2NfbG9ja3dhaXQpIF9fd2FrZSgmYy0+X2NfbG9jaywgMSwgMSk7DQorDQorCXNlcSA9IGMtPl9j X3NlcTsNCisNCisJbXR4X3VubG9jayhtKTsNCisNCisJZG8gZSA9IF9fdGltZWR3YWl0KCZjLT5f Y19zZXEsIHNlcSwgQ0xPQ0tfUkVBTFRJTUUsIHRzLCBjbGVhbnVwLCAmY20sIDApOw0KKwl3aGls ZSAoYy0+X2Nfc2VxID09IHNlcSAmJiAoIWUgfHwgZT09RUlOVFIpKTsNCisJaWYgKGUgPT0gRUlO VFIpIGUgPSAwOw0KKw0KKwl1bndhaXQoYywgbSk7DQorDQorCWlmIChtdHhfbG9jayhtKSAhPSB0 aHJkX3N1Y2Nlc3MpDQorCSByZXR1cm4gdGhyZF9lcnJvcjsNCisNCisJc3dpdGNoIChlKSB7DQor CWNhc2UgMDoNCisJCWlmICh0aHJkX3N1Y2Nlc3MgPT0gMCkgYnJlYWs7DQorCQllbHNlIHJldHVy biB0aHJkX3N1Y2Nlc3M7DQorCWNhc2UgRVRJTUVET1VUOg0KKwkJaWYgKHRocmRfdGltZWRvdXQg PT0gRVRJTUVET1VUKSBicmVhazsNCisJCWVsc2UgcmV0dXJuIHRocmRfdGltZWRvdXQ7DQorCX0N CisgICAgICAgIHJldHVybiBlOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL2NuZF93YWl0 LmMgYi9zcmMvdGhyZWFkL2NuZF93YWl0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAw MDAwMDAwLi45MWU4OWRiDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL2NuZF93YWl0 LmMNCkBAIC0wLDAgKzEsMTAgQEANCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2ludCBjbmRf d2FpdChjbmRfdCAqY29uZCwgbXR4X3QgKm11dGV4KQ0KK3sNCisJLyogQ2FsbGluZyBjbmRfdGlt ZWR3YWl0IHdpdGggYSBudWxsIHBvaW50ZXIgaXMgYW4NCisJICAgZXh0ZW5zaW9uLiBTdWNoIGEg Y2FsbCBpcyBjb252ZW5pZW50LCBoZXJlIHNpbmNlIGl0IGF2b2lkcyB0bw0KKwkgICByZXBlYXQg dGhlIGNhc2UgYW5hbHlzaXMgdGhhdCBpcyBhbHJlYWR5IGRvbmUgZm9yDQorCSAgIGNuZF90aW1l ZHdhaXQuICovDQorCXJldHVybiBjbmRfdGltZWR3YWl0KGNvbmQsIG11dGV4LCAwKTsNCit9DQpk aWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9tdHhfZGVzdHJveS5jIGIvc3JjL3RocmVhZC9tdHhfZGVz dHJveS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNDgyYjc4MQ0KLS0t IC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9tdHhfZGVzdHJveS5jDQpAQCAtMCwwICsxLDUg QEANCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK3ZvaWQgKG10eF9kZXN0cm95KShtdHhfdCAq bXR4KSB7DQorCS8qIGVtcHR5ICovDQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvbXR4X2lu aXQuYyBiL3NyYy90aHJlYWQvbXR4X2luaXQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAuLmI4NmFmYjANCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvbXR4X2lu aXQuYw0KQEAgLTAsMCArMSwxMCBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5j bHVkZSA8dGhyZWFkcy5oPg0KKw0KK2ludCBtdHhfaW5pdChtdHhfdCAqIG0sIGludCB0eXBlKQ0K K3sNCisJKm0gPSAobXR4X3QpIHsNCisJCS5fbV90eXBlID0gKCh0eXBlJm10eF9yZWN1cnNpdmUp ID8gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgOiAwKSwNCisJfTsNCisJcmV0dXJuIHRocmRfc3Vj Y2VzczsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9tdHhfbG9jay5jIGIvc3JjL3RocmVh ZC9tdHhfbG9jay5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYWEzZDAz MQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9tdHhfbG9jay5jDQpAQCAtMCwwICsx LDE0IEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRzLmg+ DQorDQoraW50IG10eF9sb2NrKG10eF90ICptKQ0KK3sNCisJX19USFJEX0FCSV9NQVJLOw0KKwlp ZiAobS0+X21fdHlwZSA9PSBQVEhSRUFEX01VVEVYX05PUk1BTCAmJiAhYV9jYXMoJm0tPl9tX2xv Y2ssIDAsIHRocmRfYnVzeSkpDQorCQlyZXR1cm4gdGhyZF9zdWNjZXNzOw0KKwkvKiBDYWxsaW5n IG10eF90aW1lZGxvY2sgd2l0aCBhIG51bGwgcG9pbnRlciBpcyBhbg0KKwkgICBleHRlbnNpb24u IFN1Y2ggYSBjYWxsIGlzIGNvbnZlbmllbnQsIGhlcmUsIHNpbmNlIGl0IGF2b2lkcw0KKwkgICB0 byByZXBlYXQgdGhlIGNhc2UgYW5hbHlzaXMgdGhhdCBpcyBhbHJlYWR5IGRvbmUgZm9yDQorCSAg IG10eF90aW1lZGxvY2suICovDQorCXJldHVybiBtdHhfdGltZWRsb2NrKG0sIDApOw0KK30NCmRp ZmYgLS1naXQgYS9zcmMvdGhyZWFkL210eF90aW1lZGxvY2suYyBiL3NyYy90aHJlYWQvbXR4X3Rp bWVkbG9jay5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMjE2OWM0YQ0K LS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC9tdHhfdGltZWRsb2NrLmMNCkBAIC0wLDAg KzEsMzMgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRocmVhZHMu aD4NCisNCitpbnQgbXR4X3RpbWVkbG9jayhtdHhfdCAqcmVzdHJpY3QgbSwgY29uc3Qgc3RydWN0 IHRpbWVzcGVjICpyZXN0cmljdCBhdCkNCit7DQorCWludCByLCB0Ow0KKw0KKwlpZiAobS0+X21f dHlwZSA9PSBQVEhSRUFEX01VVEVYX05PUk1BTCAmJiAhYV9jYXMoJm0tPl9tX2xvY2ssIDAsIHRo cmRfYnVzeSkpDQorCQlyZXR1cm4gdGhyZF9zdWNjZXNzOw0KKw0KKwlmb3IgKDs7KSB7DQorCQly PW10eF90cnlsb2NrKG0pOw0KKwkJaWYgKHIgIT0gdGhyZF9idXN5KSByZXR1cm4gcjsNCisJCWVs c2Ugew0KKwkJCWlmICghKHI9bS0+X21fbG9jaykgfHwgKHImMHg0MDAwMDAwMCkpIGNvbnRpbnVl Ow0KKwkJCWFfaW5jKCZtLT5fbV93YWl0ZXJzKTsNCisJCQl0ID0gciB8IDB4ODAwMDAwMDA7DQor CQkJYV9jYXMoJm0tPl9tX2xvY2ssIHIsIHQpOw0KKwkJCXIgPSBfX3RpbWVkd2FpdCgmbS0+X21f bG9jaywgdCwgQ0xPQ0tfUkVBTFRJTUUsIGF0LCAwLCAwLCAwKTsNCisJCQlhX2RlYygmbS0+X21f d2FpdGVycyk7DQorCQkJc3dpdGNoIChyKSB7DQorCQkJY2FzZSAwOg0KKwkJCQlicmVhazsNCisJ CQljYXNlIEVJTlRSOg0KKwkJCQlicmVhazsNCisJCQljYXNlIEVUSU1FRE9VVDoNCisJCQkJcmV0 dXJuIHRocmRfdGltZWRvdXQ7DQorCQkJZGVmYXVsdDoNCisJCQkJcmV0dXJuIHRocmRfZXJyb3I7 DQorCQkJfQ0KKwkJfQ0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvbXR4X3RyeWxv Y2suYyBiL3NyYy90aHJlYWQvbXR4X3RyeWxvY2suYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmlu ZGV4IDAwMDAwMDAuLjllM2UwYTUNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvbXR4 X3RyeWxvY2suYw0KQEAgLTAsMCArMSwyNSBAQA0KKyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCIN CisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2ludCBtdHhfdHJ5bG9jayhtdHhfdCAqbSkNCit7 DQorCWludCB0aWQsIG9sZCwgb3duLCByZXQgPSAwOw0KKwlwdGhyZWFkX3Qgc2VsZjsNCisNCisJ aWYgKG0tPl9tX3R5cGUgPT0gUFRIUkVBRF9NVVRFWF9OT1JNQUwpIHsNCisJCXJldHVybiBhX2Nh cygmbS0+X21fbG9jaywgMCwgdGhyZF9idXN5KSAmIHRocmRfYnVzeTsNCisJfSBlbHNlIHsNCisg ICAgICAgCQlzZWxmID0gX19wdGhyZWFkX3NlbGYoKTsNCisgICAgICAgCQl0aWQgPSBzZWxmLT50 aWQ7DQorCQlvbGQgPSBtLT5fbV9sb2NrOw0KKwkJb3duID0gb2xkICYgMHg3ZmZmZmZmZjsNCisJ CWlmIChvd24gPT0gdGlkKSB7DQorCQkJaWYgKCh1bnNpZ25lZCltLT5fbV9jb3VudCA+PSBJTlRf TUFYKSByZXR1cm4gdGhyZF9lcnJvcjsNCisJCQllbHNlIG0tPl9tX2NvdW50Kys7DQorCQl9IGVs c2Ugew0KKwkJCWlmICgob3duICYmICEob3duICYgMHg0MDAwMDAwMCkpIHx8IGFfY2FzKCZtLT5f bV9sb2NrLCBvbGQsIHRpZCkhPW9sZCkNCisJCQkJcmV0dXJuIHRocmRfYnVzeTsNCisJCX0NCisJ fQ0KKwlyZXR1cm4gdGhyZF9zdWNjZXNzOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL210 eF91bmxvY2suYyBiL3NyYy90aHJlYWQvbXR4X3VubG9jay5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMC4uMzBhYTdmMw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVh ZC9tdHhfdW5sb2NrLmMNCkBAIC0wLDAgKzEsMTYgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBs LmgiDQorI2luY2x1ZGUgPHRocmVhZHMuaD4NCisNCitpbnQgbXR4X3VubG9jayhtdHhfdCAqbSkN Cit7DQorCWlmICgobS0+X21fdHlwZSYzKSA9PSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSAmJiBt LT5fbV9jb3VudCkgew0KKwkJaWYgKChtLT5fbV9sb2NrJjB4MWZmZmZmZmYpICE9IF9fcHRocmVh ZF9zZWxmKCktPnRpZCkNCisJCQlyZXR1cm4gdGhyZF9lcnJvcjsNCisgICAgICAgICAgICAgICAg LyogX21fY291bnQgaXMgdGhlIGNvdW50IG9mIGFkZGl0aW9uYWwgbG9ja3MsIG5vIG5lZWQgdG8g cmVhbCB1bmxvY2sgKi8NCisJCS0tbS0+X21fY291bnQ7DQorCX0gZWxzZSB7DQorCQlpZiAoYV9z d2FwKCZtLT5fbV9sb2NrLCAwKTwwIHx8IG0tPl9tX3dhaXRlcnMpDQorCQkJX193YWtlKCZtLT5f bV9sb2NrLCAxLCAwKTsNCisJfQ0KKwlyZXR1cm4gdGhyZF9zdWNjZXNzOw0KK30NCmRpZmYgLS1n aXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfY29uZF90aW1lZHdhaXQuYyBiL3NyYy90aHJlYWQvcHRo cmVhZF9jb25kX3RpbWVkd2FpdC5jDQppbmRleCA5OWQ2MmNjLi5mNDNjYTllIDEwMDY0NA0KLS0t IGEvc3JjL3RocmVhZC9wdGhyZWFkX2NvbmRfdGltZWR3YWl0LmMNCisrKyBiL3NyYy90aHJlYWQv cHRocmVhZF9jb25kX3RpbWVkd2FpdC5jDQpAQCAtMSw1ICsxLDcgQEANCiAjaW5jbHVkZSAicHRo cmVhZF9pbXBsLmgiDQogDQordm9pZCBfX3B0aHJlYWRfdGVzdGNhbmNlbCh2b2lkKTsNCisNCiBz dHJ1Y3QgY20gew0KIAlwdGhyZWFkX2NvbmRfdCAqYzsNCiAJcHRocmVhZF9tdXRleF90ICptOw0K QEAgLTQ3LDcgKzQ5LDcgQEAgaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9jb25k X3QgKnJlc3RyaWN0IGMsIHB0aHJlYWRfbXV0ZXhfdCAqcmVzdHJpY3QNCiAJaWYgKHRzICYmIHRz LT50dl9uc2VjID49IDEwMDAwMDAwMDBVTCkNCiAJCXJldHVybiBFSU5WQUw7DQogDQotCXB0aHJl YWRfdGVzdGNhbmNlbCgpOw0KKwlfX3B0aHJlYWRfdGVzdGNhbmNlbCgpOw0KIA0KIAlhX2luYygm Yy0+X2Nfd2FpdGVycyk7DQogDQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9wdGhyZWFkX2NyZWF0 ZS5jIGIvc3JjL3RocmVhZC9wdGhyZWFkX2NyZWF0ZS5jDQppbmRleCBlNzdlNTRhLi5mYTczODI2 IDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX2NyZWF0ZS5jDQorKysgYi9zcmMvdGhy ZWFkL3B0aHJlYWRfY3JlYXRlLmMNCkBAIC0zLDYgKzMsMTMgQEANCiAjaW5jbHVkZSAic3RkaW9f aW1wbC5oIg0KICNpbmNsdWRlICJsaWJjLmgiDQogI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQorI2lu Y2x1ZGUgPHRocmVhZHMuaD4NCisNCit2b2lkICpfX21tYXAodm9pZCAqLCBzaXplX3QsIGludCwg aW50LCBpbnQsIG9mZl90KTsNCitpbnQgX19tdW5tYXAodm9pZCAqLCBzaXplX3QpOw0KK2ludCBf X21wcm90ZWN0KHZvaWQgKiwgc2l6ZV90LCBpbnQpOw0KKw0KKyNkZWZpbmUgX19USFJEX0MxMSAo KHZvaWQqKSh1aW50cHRyX3QpLTEpDQogDQogc3RhdGljIHZvaWQgZHVtbXlfMCgpDQogew0KQEAg LTExLDcgKzE4LDcgQEAgd2Vha19hbGlhcyhkdW1teV8wLCBfX2FjcXVpcmVfcHRjKTsNCiB3ZWFr X2FsaWFzKGR1bW15XzAsIF9fcmVsZWFzZV9wdGMpOw0KIHdlYWtfYWxpYXMoZHVtbXlfMCwgX19w dGhyZWFkX3RzZF9ydW5fZHRvcnMpOw0KIA0KLV9Ob3JldHVybiB2b2lkIHB0aHJlYWRfZXhpdCh2 b2lkICpyZXN1bHQpDQorX05vcmV0dXJuIHZvaWQgX19wdGhyZWFkX2V4aXQodm9pZCAqcmVzdWx0 KQ0KIHsNCiAJcHRocmVhZF90IHNlbGYgPSBfX3B0aHJlYWRfc2VsZigpOw0KIAlzaWdzZXRfdCBz ZXQ7DQpAQCAtMTEzLDYgKzEyMCwxOSBAQCBzdGF0aWMgaW50IHN0YXJ0KHZvaWQgKnApDQogCXJl dHVybiAwOw0KIH0NCiANCitzdGF0aWMgX05vcmV0dXJuIHZvaWQgX190aHJkX2V4aXQoaW50IHJl c3VsdCkgew0KKwlfX3B0aHJlYWRfZXhpdCgodm9pZCopKGludHB0cl90KXJlc3VsdCk7DQorfQ0K Kw0KKw0KK3N0YXRpYyBpbnQgc3RhcnRfYzExKHZvaWQgKnApDQorew0KKwl0aHJkX3Qgc2VsZiA9 IHA7DQorCWludCAoKnN0YXJ0KSh2b2lkKikgPSAoaW50KCopKHZvaWQqKSkgc2VsZi0+c3RhcnQ7 DQorCV9fdGhyZF9leGl0KHN0YXJ0KHNlbGYtPnN0YXJ0X2FyZykpOw0KKwlyZXR1cm4gMDsNCit9 DQorDQogI2RlZmluZSBST1VORCh4KSAoKCh4KStQQUdFX1NJWkUtMSkmLVBBR0VfU0laRSkNCiAN CiAvKiBwdGhyZWFkX2tleV9jcmVhdGUuYyBvdmVycmlkZXMgdGhpcyAqLw0KQEAgLTEzMywxMCAr MTUzLDEwIEBAIHN0YXRpYyB2b2lkIGluaXRfZmlsZV9sb2NrKEZJTEUgKmYpDQogDQogdm9pZCAq X19jb3B5X3Rscyh1bnNpZ25lZCBjaGFyICopOw0KIA0KLWludCBwdGhyZWFkX2NyZWF0ZShwdGhy ZWFkX3QgKnJlc3RyaWN0IHJlcywgY29uc3QgcHRocmVhZF9hdHRyX3QgKnJlc3RyaWN0IGF0dHJw LCB2b2lkICooKmVudHJ5KSh2b2lkICopLCB2b2lkICpyZXN0cmljdCBhcmcpDQorc3RhdGljIGlu dCBfX3B0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqcmVzdHJpY3QgcmVzLCBjb25zdCBwdGhyZWFk X2F0dHJfdCAqcmVzdHJpY3QgYXR0cnAsIHZvaWQgKigqZW50cnkpKHZvaWQgKiksIHZvaWQgKnJl c3RyaWN0IGFyZykNCiB7DQotCWludCByZXQ7DQotCXNpemVfdCBzaXplLCBndWFyZDsNCisJaW50 IHJldCwgYzExID0gKGF0dHJwID09IF9fVEhSRF9DMTEpOw0KKwlzaXplX3Qgc2l6ZSwgZ3VhcmQg PSAwOw0KIAlzdHJ1Y3QgcHRocmVhZCAqc2VsZiwgKm5ldzsNCiAJdW5zaWduZWQgY2hhciAqbWFw ID0gMCwgKnN0YWNrID0gMCwgKnRzZCA9IDAsICpzdGFja19saW1pdDsNCiAJdW5zaWduZWQgZmxh Z3MgPSBDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBDTE9ORV9TSUdIQU5EDQpA QCAtMTU3LDYgKzE3Nyw5IEBAIGludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFkX3QgKnJlc3RyaWN0 IHJlcywgY29uc3QgcHRocmVhZF9hdHRyX3QgKnJlc3RyaWN0IGF0dHJwDQogCQlzZWxmLT50c2Qg PSAodm9pZCAqKilfX3B0aHJlYWRfdHNkX21haW47DQogCQlsaWJjLnRocmVhZGVkID0gMTsNCiAJ fQ0KKyAgICAgICAgaWYgKGMxMSkgew0KKyAgICAgICAgICBhdHRycCA9IDA7DQorICAgICAgICB9 DQogCWlmIChhdHRycCkgYXR0ciA9ICphdHRycDsNCiANCiAJX19hY3F1aXJlX3B0YygpOw0KQEAg LTE4NCwxNCArMjA3LDE0IEBAIGludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFkX3QgKnJlc3RyaWN0 IHJlcywgY29uc3QgcHRocmVhZF9hdHRyX3QgKnJlc3RyaWN0IGF0dHJwDQogDQogCWlmICghdHNk KSB7DQogCQlpZiAoZ3VhcmQpIHsNCi0JCQltYXAgPSBtbWFwKDAsIHNpemUsIFBST1RfTk9ORSwg TUFQX1BSSVZBVEV8TUFQX0FOT04sIC0xLCAwKTsNCisJCQltYXAgPSBfX21tYXAoMCwgc2l6ZSwg UFJPVF9OT05FLCBNQVBfUFJJVkFURXxNQVBfQU5PTiwgLTEsIDApOw0KIAkJCWlmIChtYXAgPT0g TUFQX0ZBSUxFRCkgZ290byBmYWlsOw0KLQkJCWlmIChtcHJvdGVjdChtYXArZ3VhcmQsIHNpemUt Z3VhcmQsIFBST1RfUkVBRHxQUk9UX1dSSVRFKSkgew0KLQkJCQltdW5tYXAobWFwLCBzaXplKTsN CisJCQlpZiAoX19tcHJvdGVjdChtYXArZ3VhcmQsIHNpemUtZ3VhcmQsIFBST1RfUkVBRHxQUk9U X1dSSVRFKSkgew0KKwkJCQlfX211bm1hcChtYXAsIHNpemUpOw0KIAkJCQlnb3RvIGZhaWw7DQog CQkJfQ0KIAkJfSBlbHNlIHsNCi0JCQltYXAgPSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRHxQUk9U X1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTiwgLTEsIDApOw0KKwkJCW1hcCA9IF9fbW1hcCgw LCBzaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT04sIC0xLCAw KTsNCiAJCQlpZiAobWFwID09IE1BUF9GQUlMRUQpIGdvdG8gZmFpbDsNCiAJCX0NCiAJCXRzZCA9 IG1hcCArIHNpemUgLSBfX3B0aHJlYWRfdHNkX3NpemU7DQpAQCAtMjIzLDcgKzI0NiwxMCBAQCBp bnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICpyZXN0cmljdCByZXMsIGNvbnN0IHB0aHJlYWRf YXR0cl90ICpyZXN0cmljdCBhdHRycA0KIAluZXctPmNhbmFyeSA9IHNlbGYtPmNhbmFyeTsNCiAN CiAJYV9pbmMoJmxpYmMudGhyZWFkc19taW51c18xKTsNCi0JcmV0ID0gX19jbG9uZShzdGFydCwg c3RhY2ssIGZsYWdzLCBuZXcsICZuZXctPnRpZCwgVFBfQURKKG5ldyksICZuZXctPnRpZCk7DQor CWlmIChjMTEpDQorCQlyZXQgPSBfX2Nsb25lKHN0YXJ0X2MxMSwgc3RhY2ssIGZsYWdzLCBuZXcs ICZuZXctPnRpZCwgVFBfQURKKG5ldyksICZuZXctPnRpZCk7DQorCWVsc2UNCisJCXJldCA9IF9f Y2xvbmUoc3RhcnQsIHN0YWNrLCBmbGFncywgbmV3LCAmbmV3LT50aWQsIFRQX0FESihuZXcpLCAm bmV3LT50aWQpOw0KIA0KIAlfX3JlbGVhc2VfcHRjKCk7DQogDQpAQCAtMjMzLDcgKzI1OSw3IEBA IGludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFkX3QgKnJlc3RyaWN0IHJlcywgY29uc3QgcHRocmVh ZF9hdHRyX3QgKnJlc3RyaWN0IGF0dHJwDQogDQogCWlmIChyZXQgPCAwKSB7DQogCQlhX2RlYygm bGliYy50aHJlYWRzX21pbnVzXzEpOw0KLQkJaWYgKG1hcCkgbXVubWFwKG1hcCwgc2l6ZSk7DQor CQlpZiAobWFwKSBfX211bm1hcChtYXAsIHNpemUpOw0KIAkJcmV0dXJuIEVBR0FJTjsNCiAJfQ0K IA0KQEAgLTI1MSwzICsyNzcsMTkgQEAgZmFpbDoNCiAJX19yZWxlYXNlX3B0YygpOw0KIAlyZXR1 cm4gRUFHQUlOOw0KIH0NCisNCitzdGF0aWMgaW50IF9fdGhyZF9jcmVhdGUodGhyZF90ICp0aHIs DQorICAgICAgICAgICAgICAgICAgICAgICAgIHRocmRfc3RhcnRfdCBmdW5jLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICphcmcpIHsNCisJLyogSW4gdGhlIGJlc3Qgb2YgYWxsIHdv cmxkcyB0aGlzIGlzIGEgdGFpbCBjYWxsLiAqLw0KKwlpbnQgcmV0ID0gX19wdGhyZWFkX2NyZWF0 ZSh0aHIsIF9fVEhSRF9DMTEsICh2b2lkICogKCopKHZvaWQgKikpZnVuYywgYXJnKTsNCisJaWYg KHRocmRfc3VjY2VzcykNCisJCXJldHVybiByZXQgPyB0aHJkX2Vycm9yIDogdGhyZF9zdWNjZXNz Ow0KKwkvKiBJbiBjYXNlIG9mIFVCIG1heSBhbHNvIHJldHVybiBFTk9TWVMgb3IgRUFHQUlOLiAq Lw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCit3ZWFrX2FsaWFzKF9fcHRocmVhZF9leGl0LCBwdGhy ZWFkX2V4aXQpOw0KK3dlYWtfYWxpYXMoX19wdGhyZWFkX2NyZWF0ZSwgcHRocmVhZF9jcmVhdGUp Ow0KK3dlYWtfYWxpYXMoX190aHJkX2NyZWF0ZSwgdGhyZF9jcmVhdGUpOw0KK3dlYWtfYWxpYXMo X190aHJkX2V4aXQsIHRocmRfZXhpdCk7DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9wdGhyZWFk X2RldGFjaC5jIGIvc3JjL3RocmVhZC9wdGhyZWFkX2RldGFjaC5jDQppbmRleCA2NTFjMzhlLi41 Y2E3ODU1IDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX2RldGFjaC5jDQorKysgYi9z cmMvdGhyZWFkL3B0aHJlYWRfZGV0YWNoLmMNCkBAIC0xLDExICsxLDE1IEBADQogI2luY2x1ZGUg InB0aHJlYWRfaW1wbC5oIg0KIA0KLWludCBwdGhyZWFkX2RldGFjaChwdGhyZWFkX3QgdCkNCitp bnQgX19wdGhyZWFkX2pvaW4ocHRocmVhZF90IHQsIHZvaWQgKipyZXMpOw0KKw0KK2ludCBfX3B0 aHJlYWRfZGV0YWNoKHB0aHJlYWRfdCB0KQ0KIHsNCiAJLyogQ2Fubm90IGRldGFjaCBhIHRocmVh ZCB0aGF0J3MgYWxyZWFkeSBleGl0aW5nICovDQogCWlmIChhX3N3YXAodC0+ZXhpdGxvY2ssIDEp KQ0KLQkJcmV0dXJuIHB0aHJlYWRfam9pbih0LCAwKTsNCisJCXJldHVybiBfX3B0aHJlYWRfam9p bih0LCAwKTsNCiAJdC0+ZGV0YWNoZWQgPSAyOw0KIAlfX3VubG9jayh0LT5leGl0bG9jayk7DQog CXJldHVybiAwOw0KIH0NCisNCit3ZWFrX2FsaWFzKF9fcHRocmVhZF9kZXRhY2gsIHB0aHJlYWRf ZGV0YWNoKTsNCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfZ2V0c3BlY2lmaWMuYyBi L3NyYy90aHJlYWQvcHRocmVhZF9nZXRzcGVjaWZpYy5jDQppbmRleCBiMmEyODJjLi5iZmM0Mjk0 IDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX2dldHNwZWNpZmljLmMNCisrKyBiL3Ny Yy90aHJlYWQvcHRocmVhZF9nZXRzcGVjaWZpYy5jDQpAQCAtMSw3ICsxLDEwIEBADQogI2luY2x1 ZGUgInB0aHJlYWRfaW1wbC5oIg0KIA0KLXZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMocHRocmVh ZF9rZXlfdCBrKQ0KK3N0YXRpYyB2b2lkICpfX3B0aHJlYWRfZ2V0c3BlY2lmaWMocHRocmVhZF9r ZXlfdCBrKQ0KIHsNCiAJc3RydWN0IHB0aHJlYWQgKnNlbGYgPSBfX3B0aHJlYWRfc2VsZigpOw0K IAlyZXR1cm4gc2VsZi0+dHNkW2tdOw0KIH0NCisNCit3ZWFrX2FsaWFzKF9fcHRocmVhZF9nZXRz cGVjaWZpYywgcHRocmVhZF9nZXRzcGVjaWZpYyk7DQord2Vha19hbGlhcyhfX3B0aHJlYWRfZ2V0 c3BlY2lmaWMsIHRzc19nZXQpOw0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvcHRocmVhZF9qb2lu LmMgYi9zcmMvdGhyZWFkL3B0aHJlYWRfam9pbi5jDQppbmRleCA3MTljOTFjLi4xYjU5NDg5IDEw MDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX2pvaW4uYw0KKysrIGIvc3JjL3RocmVhZC9w dGhyZWFkX2pvaW4uYw0KQEAgLTUsNyArNSw3IEBAIHN0YXRpYyB2b2lkIGR1bW15KHZvaWQgKnAp DQogew0KIH0NCiANCi1pbnQgcHRocmVhZF9qb2luKHB0aHJlYWRfdCB0LCB2b2lkICoqcmVzKQ0K K2ludCBfX3B0aHJlYWRfam9pbihwdGhyZWFkX3QgdCwgdm9pZCAqKnJlcykNCiB7DQogCWludCB0 bXA7DQogCXdoaWxlICgodG1wID0gdC0+dGlkKSkgX190aW1lZHdhaXQoJnQtPnRpZCwgdG1wLCAw LCAwLCBkdW1teSwgMCwgMCk7DQpAQCAtMTMsMyArMTMsNSBAQCBpbnQgcHRocmVhZF9qb2luKHB0 aHJlYWRfdCB0LCB2b2lkICoqcmVzKQ0KIAlpZiAodC0+bWFwX2Jhc2UpIG11bm1hcCh0LT5tYXBf YmFzZSwgdC0+bWFwX3NpemUpOw0KIAlyZXR1cm4gMDsNCiB9DQorDQord2Vha19hbGlhcyhfX3B0 aHJlYWRfam9pbiwgcHRocmVhZF9qb2luKTsNCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJl YWRfa2V5X2NyZWF0ZS5jIGIvc3JjL3RocmVhZC9wdGhyZWFkX2tleV9jcmVhdGUuYw0KaW5kZXgg YTkxODdmNy4uYmZjZDU5NyAxMDA2NDQNCi0tLSBhL3NyYy90aHJlYWQvcHRocmVhZF9rZXlfY3Jl YXRlLmMNCisrKyBiL3NyYy90aHJlYWQvcHRocmVhZF9rZXlfY3JlYXRlLmMNCkBAIC05LDcgKzks NyBAQCBzdGF0aWMgdm9pZCBub2R0b3Iodm9pZCAqZHVtbXkpDQogew0KIH0NCiANCi1pbnQgcHRo cmVhZF9rZXlfY3JlYXRlKHB0aHJlYWRfa2V5X3QgKmssIHZvaWQgKCpkdG9yKSh2b2lkICopKQ0K K2ludCBfX3B0aHJlYWRfa2V5X2NyZWF0ZShwdGhyZWFkX2tleV90ICprLCB2b2lkICgqZHRvciko dm9pZCAqKSkNCiB7DQogCXVuc2lnbmVkIGkgPSAodWludHB0cl90KSZrIC8gMTYgJSBQVEhSRUFE X0tFWVNfTUFYOw0KIAl1bnNpZ25lZCBqID0gaTsNCkBAIC0zMSw3ICszMSw3IEBAIGludCBwdGhy ZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCAqaywgdm9pZCAoKmR0b3IpKHZvaWQgKikpDQog CXJldHVybiBFQUdBSU47DQogfQ0KIA0KLWludCBwdGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9r ZXlfdCBrKQ0KK2ludCBfX3B0aHJlYWRfa2V5X2RlbGV0ZShwdGhyZWFkX2tleV90IGspDQogew0K IAlrZXlzW2tdID0gMDsNCiAJcmV0dXJuIDA7DQpAQCAtNTMsMyArNTMsNiBAQCB2b2lkIF9fcHRo cmVhZF90c2RfcnVuX2R0b3JzKCkNCiAJCX0NCiAJfQ0KIH0NCisNCit3ZWFrX2FsaWFzKF9fcHRo cmVhZF9rZXlfZGVsZXRlLCBwdGhyZWFkX2tleV9kZWxldGUpOw0KK3dlYWtfYWxpYXMoX19wdGhy ZWFkX2tleV9jcmVhdGUsIHB0aHJlYWRfa2V5X2NyZWF0ZSk7DQpkaWZmIC0tZ2l0IGEvc3JjL3Ro cmVhZC9wdGhyZWFkX29uY2UuYyBiL3NyYy90aHJlYWQvcHRocmVhZF9vbmNlLmMNCmluZGV4IGUw MWY2ZDQuLmE2Nzg1OTcgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJlYWRfb25jZS5jDQor KysgYi9zcmMvdGhyZWFkL3B0aHJlYWRfb25jZS5jDQpAQCAtNiw3ICs2LDcgQEAgc3RhdGljIHZv aWQgdW5kbyh2b2lkICpjb250cm9sKQ0KIAlfX3dha2UoY29udHJvbCwgMSwgMCk7DQogfQ0KIA0K LWludCBwdGhyZWFkX29uY2UocHRocmVhZF9vbmNlX3QgKmNvbnRyb2wsIHZvaWQgKCppbml0KSh2 b2lkKSkNCitpbnQgX19wdGhyZWFkX29uY2UocHRocmVhZF9vbmNlX3QgKmNvbnRyb2wsIHZvaWQg KCppbml0KSh2b2lkKSkNCiB7DQogCXN0YXRpYyBpbnQgd2FpdGVyczsNCiANCkBAIC0zNCwzICsz NCw1IEBAIGludCBwdGhyZWFkX29uY2UocHRocmVhZF9vbmNlX3QgKmNvbnRyb2wsIHZvaWQgKCpp bml0KSh2b2lkKSkNCiAJCXJldHVybiAwOw0KIAl9DQogfQ0KKw0KK3dlYWtfYWxpYXMoX19wdGhy ZWFkX29uY2UsIHB0aHJlYWRfb25jZSk7DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9wdGhyZWFk X3NldGNhbmNlbHN0YXRlLmMgYi9zcmMvdGhyZWFkL3B0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUuYw0K aW5kZXggMDYwYmNkYy4uMjI2ODIxNyAxMDA2NDQNCi0tLSBhL3NyYy90aHJlYWQvcHRocmVhZF9z ZXRjYW5jZWxzdGF0ZS5jDQorKysgYi9zcmMvdGhyZWFkL3B0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUu Yw0KQEAgLTEsNiArMSw2IEBADQogI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KIA0KLWludCBw dGhyZWFkX3NldGNhbmNlbHN0YXRlKGludCBuZXcsIGludCAqb2xkKQ0KK2ludCBfX3B0aHJlYWRf c2V0Y2FuY2Vsc3RhdGUoaW50IG5ldywgaW50ICpvbGQpDQogew0KIAlpZiAobmV3ID4gMVUpIHJl dHVybiBFSU5WQUw7DQogCWlmICghbGliYy5oYXNfdGhyZWFkX3BvaW50ZXIpIHJldHVybiBFTk9T WVM7DQpAQCAtOSwzICs5LDUgQEAgaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUoaW50IG5ldywg aW50ICpvbGQpDQogCXNlbGYtPmNhbmNlbGRpc2FibGUgPSBuZXc7DQogCXJldHVybiAwOw0KIH0N CisNCit3ZWFrX2FsaWFzKF9fcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSwgcHRocmVhZF9zZXRjYW5j ZWxzdGF0ZSk7DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9wdGhyZWFkX3NldGNhbmNlbHR5cGUu YyBiL3NyYy90aHJlYWQvcHRocmVhZF9zZXRjYW5jZWx0eXBlLmMNCmluZGV4IGJmMGEzZjMuLmQ0 OTNjMWIgMTAwNjQ0DQotLS0gYS9zcmMvdGhyZWFkL3B0aHJlYWRfc2V0Y2FuY2VsdHlwZS5jDQor KysgYi9zcmMvdGhyZWFkL3B0aHJlYWRfc2V0Y2FuY2VsdHlwZS5jDQpAQCAtMSwxMSArMSwxMyBA QA0KICNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCiANCit2b2lkIF9fcHRocmVhZF90ZXN0Y2Fu Y2VsKHZvaWQpOw0KKw0KIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUoaW50IG5ldywgaW50ICpv bGQpDQogew0KIAlzdHJ1Y3QgcHRocmVhZCAqc2VsZiA9IF9fcHRocmVhZF9zZWxmKCk7DQogCWlm IChuZXcgPiAxVSkgcmV0dXJuIEVJTlZBTDsNCiAJaWYgKG9sZCkgKm9sZCA9IHNlbGYtPmNhbmNl bGFzeW5jOw0KIAlzZWxmLT5jYW5jZWxhc3luYyA9IG5ldzsNCi0JaWYgKG5ldykgcHRocmVhZF90 ZXN0Y2FuY2VsKCk7DQorCWlmIChuZXcpIF9fcHRocmVhZF90ZXN0Y2FuY2VsKCk7DQogCXJldHVy biAwOw0KIH0NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3B0aHJlYWRfc2V0c3BlY2lmaWMuYyBi L3NyYy90aHJlYWQvcHRocmVhZF9zZXRzcGVjaWZpYy5jDQppbmRleCA1NWU0NmE4Li5kZDE4Yjk2 IDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFkX3NldHNwZWNpZmljLmMNCisrKyBiL3Ny Yy90aHJlYWQvcHRocmVhZF9zZXRzcGVjaWZpYy5jDQpAQCAtMSw2ICsxLDYgQEANCiAjaW5jbHVk ZSAicHRocmVhZF9pbXBsLmgiDQogDQotaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMocHRocmVhZF9r ZXlfdCBrLCBjb25zdCB2b2lkICp4KQ0KK2ludCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMocHRocmVh ZF9rZXlfdCBrLCBjb25zdCB2b2lkICp4KQ0KIHsNCiAJc3RydWN0IHB0aHJlYWQgKnNlbGYgPSBf X3B0aHJlYWRfc2VsZigpOw0KIAkvKiBBdm9pZCB1bm5lY2Vzc2FyeSBDT1cgKi8NCkBAIC0xMCwz ICsxMCw1IEBAIGludCBwdGhyZWFkX3NldHNwZWNpZmljKHB0aHJlYWRfa2V5X3QgaywgY29uc3Qg dm9pZCAqeCkNCiAJfQ0KIAlyZXR1cm4gMDsNCiB9DQorDQord2Vha19hbGlhcyhfX3B0aHJlYWRf c2V0c3BlY2lmaWMsIHB0aHJlYWRfc2V0c3BlY2lmaWMpOw0KZGlmZiAtLWdpdCBhL3NyYy90aHJl YWQvcHRocmVhZF90ZXN0Y2FuY2VsLmMgYi9zcmMvdGhyZWFkL3B0aHJlYWRfdGVzdGNhbmNlbC5j DQppbmRleCBiYTVmN2M2Li5lZTQ4ZTZkIDEwMDY0NA0KLS0tIGEvc3JjL3RocmVhZC9wdGhyZWFk X3Rlc3RjYW5jZWwuYw0KKysrIGIvc3JjL3RocmVhZC9wdGhyZWFkX3Rlc3RjYW5jZWwuYw0KQEAg LTcsNyArNyw5IEBAIHN0YXRpYyB2b2lkIGR1bW15KCkNCiANCiB3ZWFrX2FsaWFzKGR1bW15LCBf X3Rlc3RjYW5jZWwpOw0KIA0KLXZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsKCkNCit2b2lkIF9fcHRo cmVhZF90ZXN0Y2FuY2VsKCkNCiB7DQogCV9fdGVzdGNhbmNlbCgpOw0KIH0NCisNCit3ZWFrX2Fs aWFzKF9fcHRocmVhZF90ZXN0Y2FuY2VsLCBwdGhyZWFkX3Rlc3RjYW5jZWwpOw0KZGlmZiAtLWdp dCBhL3NyYy90aHJlYWQvdGhyZF9jdXJyZW50LmMgYi9zcmMvdGhyZWFkL3RocmRfY3VycmVudC5j DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMTcyODUzNQ0KLS0tIC9kZXYv bnVsbA0KKysrIGIvc3JjL3RocmVhZC90aHJkX2N1cnJlbnQuYw0KQEAgLTAsMCArMSwxMSBAQA0K KyNpbmNsdWRlICJwdGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KKy8q IE5vdCBhbGwgYXJjaCBoYXZlIF9fcHRocmVhZF9zZWxmIGFzIGEgc3ltYm9sLiBPbiBzb21lIHRo aXMgcmVzdWx0cw0KKyAgIGluIHNvbWUgbWFnaWMuIFNvIHRoaXMgImNhbGwiIHRvIF9fcHRocmVh ZF9zZWxmIGlzIG5vdCBuZWNlc3NhcnkgYQ0KKyAgIHRhaWwgY2FsbC4gSW4gcGFydGljdWxhciwg b3RoZXIgdGhhbiB0aGUgYXBwZWFyYW5jZSwgdGhyZF9jdXJyZW50DQorICAgY2FuIG5vdCBiZSBp bXBsZW1lbnRlZCBhcyBhIHdlYWsgc3ltYm9sLiAqLw0KK3B0aHJlYWRfdCB0aHJkX2N1cnJlbnQo KQ0KK3sNCisJcmV0dXJuIF9fcHRocmVhZF9zZWxmKCk7DQorfQ0KZGlmZiAtLWdpdCBhL3NyYy90 aHJlYWQvdGhyZF9kZXRhY2guYyBiL3NyYy90aHJlYWQvdGhyZF9kZXRhY2guYw0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjEyZGZmMTQNCi0tLSAvZGV2L251bGwNCisrKyBi L3NyYy90aHJlYWQvdGhyZF9kZXRhY2guYw0KQEAgLTAsMCArMSwxMyBAQA0KKyNpbmNsdWRlICJw dGhyZWFkX2ltcGwuaCINCisjaW5jbHVkZSA8dGhyZWFkcy5oPg0KKw0KK2ludCBfX3B0aHJlYWRf ZGV0YWNoKHB0aHJlYWRfdCB0KTsNCisNCitpbnQgdGhyZF9kZXRhY2godGhyZF90IHQpDQorew0K KwkvKiBJbiB0aGUgYmVzdCBvZiBhbGwgd29ybGRzIHRoaXMgaXMgYSB0YWlsIGNhbGwuICovDQor CWludCByZXQgPSBfX3B0aHJlYWRfZGV0YWNoKHQpOw0KKwlpZiAodGhyZF9zdWNjZXNzKQ0KKwkJ cmV0dXJuIHJldCA/IHRocmRfZXJyb3IgOiB0aHJkX3N1Y2Nlc3M7DQorCXJldHVybiByZXQ7DQor fQ0KZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQvdGhyZF9lcXVhbC5jIGIvc3JjL3RocmVhZC90aHJk X2VxdWFsLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5hYzQ5YTQ0DQot LS0gL2Rldi9udWxsDQorKysgYi9zcmMvdGhyZWFkL3RocmRfZXF1YWwuYw0KQEAgLTAsMCArMSw2 IEBADQorI2luY2x1ZGUgPHRocmVhZHMuaD4NCisNCitpbnQgKHRocmRfZXF1YWwpKHRocmRfdCBh LCB0aHJkX3QgYikNCit7DQorCXJldHVybiBhPT1iOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhy ZWFkL3RocmRfam9pbi5jIGIvc3JjL3RocmVhZC90aHJkX2pvaW4uYw0KbmV3IGZpbGUgbW9kZSAx MDA2NDQNCmluZGV4IDAwMDAwMDAuLjA0NDY5NzUNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90 aHJlYWQvdGhyZF9qb2luLmMNCkBAIC0wLDAgKzEsMTQgQEANCisjaW5jbHVkZSAicHRocmVhZF9p bXBsLmgiDQorI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQorI2luY2x1ZGUgPHRocmVhZHMuaD4NCisN CisvKiBDMTEgdGhyZWFkcyBjYW5ub3QgYmUgY2FuY2VsZWQsIHNvIHRoZXJlIGlzIG5vIG5lZWQg Zm9yIGENCisgICBjYW5jZWxhdGlvbiBmdW5jdGlvbiBwb2ludGVyLCBoZXJlLiAqLw0KK2ludCB0 aHJkX2pvaW4odGhyZF90IHQsIGludCAqcmVzKQ0KK3sNCisJaW50IHRtcDsNCisJd2hpbGUgKCh0 bXAgPSB0LT50aWQpKSBfX3RpbWVkd2FpdCgmdC0+dGlkLCB0bXAsIDAsIDAsIDAsIDAsIDApOw0K KwlpZiAocmVzKSAqcmVzID0gKGludCkoaW50cHRyX3QpdC0+cmVzdWx0Ow0KKwlpZiAodC0+bWFw X2Jhc2UpIG11bm1hcCh0LT5tYXBfYmFzZSwgdC0+bWFwX3NpemUpOw0KKwlyZXR1cm4gdGhyZF9z dWNjZXNzOw0KK30NCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL3Rzc19jcmVhdGUuYyBiL3NyYy90 aHJlYWQvdHNzX2NyZWF0ZS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4u MGNiYWRjOA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL3RocmVhZC90c3NfY3JlYXRlLmMNCkBA IC0wLDAgKzEsMTMgQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRo cmVhZHMuaD4NCisNCitpbnQgX19wdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCAqaywg dm9pZCAoKmR0b3IpKHZvaWQgKikpOw0KKw0KK2ludCB0c3NfY3JlYXRlKHRzc190ICp0c3MsIHRz c19kdG9yX3QgZHRvcikNCit7DQorCV9fVEhSRF9BQklfTUFSSzsNCisJLyogRGlmZmVyZW50IGVy cm9yIHJldHVybnMgYXJlIHBvc3NpYmxlLiBDIGdsdWVzIHRoZW0gdG9nZXRoZXIgaW50bw0KKwkg ICBqdXN0IGZhaWx1cmUgbm90aWZpY2F0aW9uLiBDYW4ndCBiZSBvcHRpbWl6ZWQgdG8gYSB0YWls IGNhbGwsDQorCSAgIHVubGVzcyB0aHJkX2Vycm9yIGVxdWFscyBFQUdBSU4uICovDQorCXJldHVy biBfX3B0aHJlYWRfa2V5X2NyZWF0ZSh0c3MsIGR0b3IpID8gdGhyZF9lcnJvciA6IHRocmRfc3Vj Y2VzczsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC90c3NfZGVsZXRlLmMgYi9zcmMvdGhy ZWFkL3Rzc19kZWxldGUuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmQ1 MDczMWYNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvdHNzX2RlbGV0ZS5jDQpAQCAt MCwwICsxLDggQEANCisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiDQorI2luY2x1ZGUgPHRocmVh ZHMuaD4NCisNCitpbnQgX19wdGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9rZXlfdCBrKTsNCisN Cit2b2lkICh0c3NfZGVsZXRlKSh0c3NfdCBrZXkpIHsNCisJKHZvaWQpX19wdGhyZWFkX2tleV9k ZWxldGUoa2V5KTsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC90c3Nfc2V0LmMgYi9zcmMv dGhyZWFkL3Rzc19zZXQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjcw YzRmYjcNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90aHJlYWQvdHNzX3NldC5jDQpAQCAtMCww ICsxLDEzIEBADQorI2luY2x1ZGUgInB0aHJlYWRfaW1wbC5oIg0KKyNpbmNsdWRlIDx0aHJlYWRz Lmg+DQorDQoraW50IHRzc19zZXQodHNzX3Qgaywgdm9pZCAqeCkNCit7DQorCXN0cnVjdCBwdGhy ZWFkICpzZWxmID0gX19wdGhyZWFkX3NlbGYoKTsNCisJLyogQXZvaWQgdW5uZWNlc3NhcnkgQ09X ICovDQorCWlmIChzZWxmLT50c2Rba10gIT0geCkgew0KKwkJc2VsZi0+dHNkW2tdID0geDsNCisJ CXNlbGYtPnRzZF91c2VkID0gMTsNCisJfQ0KKwlyZXR1cm4gdGhyZF9zdWNjZXNzOw0KK30NCmRp ZmYgLS1naXQgYS9zcmMvdGltZS90aHJkX3NsZWVwLmMgYi9zcmMvdGltZS90aHJkX3NsZWVwLmMN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi42NTcwYjBjDQotLS0gL2Rldi9u dWxsDQorKysgYi9zcmMvdGltZS90aHJkX3NsZWVwLmMNCkBAIC0wLDAgKzEsMzEgQEANCisjaW5j bHVkZSA8dGltZS5oPg0KKyNpbmNsdWRlIDxlcnJuby5oPg0KKyNpbmNsdWRlICJzeXNjYWxsLmgi DQorI2luY2x1ZGUgImxpYmMuaCINCisjaW5jbHVkZSAidGhyZWFkcy5oIg0KKw0KKy8qIFJvdWdo bHkgX19zeXNjYWxsIGFscmVhZHkgcmV0dXJucyB0aGUgcmlnaHQgdGhpbmc6IDAgaWYgYWxsIHdl bnQNCisgICB3ZWxsIG9yIGEgbmVnYXRpdmUgZXJyb3IgaW5kaWNhdGlvbiwgb3RoZXJ3aXNlLiAq Lw0KK2ludCB0aHJkX3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVxLCBzdHJ1Y3QgdGlt ZXNwZWMgKnJlbSkNCit7DQorICBpbnQgcmV0ID0gX19zeXNjYWxsKFNZU19uYW5vc2xlZXAsIHJl cSwgcmVtKTsNCisgIC8vIGNvbXBpbGUgdGltZSBjb21wYXJpc29uLCBjb25zdGFudCBwcm9wYWdh dGVkDQorICBpZiAoRUlOVFIgIT0gMSkgew0KKyAgICBzd2l0Y2ggKHJldCkgew0KKyAgICBjYXNl IDA6IHJldHVybiAwOw0KKyAgICAgIC8qIGVycm9yIGRlc2NyaWJlZCBieSBQT1NJWDogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICAgIC8qIEVJTlRSICBUaGUgbmFu b3NsZWVwKCkgZnVuY3Rpb24gd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLiAqLw0KKyAgICAg IC8qIFRoZSBDMTEgd29yZGluZyBpczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLw0KKyAgICAgIC8qIC0xIGlmIGl0IGhhcyBiZWVuIGludGVycnVwdGVkIGJ5IGEg c2lnbmFsICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICBjYXNlIC1FSU5UUjogIHJldHVybiAt MTsNCisgICAgICAvKiBlcnJvciBkZXNjcmliZWQgYnkgUE9TSVggKi8NCisgICAgY2FzZSAtRUlO VkFMOiByZXR1cm4gLTI7DQorICAgICAgLyogZGVzY3JpYmVkIGZvciBsaW51eCAqLw0KKyAgICBj YXNlIC1FRkFVTFQ6IHJldHVybiAtMzsNCisgICAgICAvKiBObyBvdGhlciBlcnJvciByZXR1cm5z IGFyZSBzcGVjaWZpZWQuICovDQorICAgIGRlZmF1bHQ6IHJldHVybiBJTlRfTUlOOw0KKyAgICB9 DQorICB9DQorICAvLyBwb3RlbnRpYWxseSBhIHRhaWwgY2FsbA0KKyAgcmV0dXJuIHJldDsNCit9 DQo= --=-9kpthEBBzXIA+eNbjYvO-- --=-hPXhuwqZtgOq16B1uNzW Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEABECAAYFAlPfUpsACgkQD9PoadrVN+KL6ACbBaMQKsG+EbZlLspGBzzqj51X hk4An2pMJEcvYvKjUntp1ja4nL3sLo5/ =/m5f -----END PGP SIGNATURE----- --=-hPXhuwqZtgOq16B1uNzW--