From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B18C5C433E0 for ; Tue, 2 Jun 2020 09:06:46 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8B13420738 for ; Tue, 2 Jun 2020 09:06:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8B13420738 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id EE86189B7B; Tue, 2 Jun 2020 09:06:45 +0000 (UTC) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6E1B189A94 for ; Tue, 2 Jun 2020 09:06:43 +0000 (UTC) IronPort-SDR: AQZMFGQM635qjdVkcePz9pHBN1usBtIcKGIt9rRU8W1uR6T0nQ6eDvNGegFyWMVO+4B4dO0AQx WujhOsl33i9w== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jun 2020 02:06:42 -0700 IronPort-SDR: xFTlYft+gszdJPyo4dtaSJhv1bGO/cLxcYdJnQb0KiXAARydc+hDavjtNy+eXDtCNiZe+y7w3G miJkaJjcfe+g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,463,1583222400"; d="scan'208";a="258260802" Received: from gaia.fi.intel.com ([10.237.72.192]) by fmsmga008.fm.intel.com with ESMTP; 02 Jun 2020 02:06:41 -0700 Received: by gaia.fi.intel.com (Postfix, from userid 1000) id 6199F5C2C64; Tue, 2 Jun 2020 12:04:12 +0300 (EEST) From: Mika Kuoppala To: Chris Wilson , intel-gfx@lists.freedesktop.org In-Reply-To: <20200601072446.19548-2-chris@chris-wilson.co.uk> References: <20200601072446.19548-1-chris@chris-wilson.co.uk> <20200601072446.19548-2-chris@chris-wilson.co.uk> Date: Tue, 02 Jun 2020 12:04:12 +0300 Message-ID: <877dwpj0tv.fsf@gaia.fi.intel.com> MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 02/36] drm/i915/gt: Split low level gen2-7 CS emitters X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Chris Wilson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gUHVsbCB0 aGUgcm91dGluZXMgZm9yIHdyaXRpbmcgQ1MgcGFja2V0cyBvdXQgb2YgaW50ZWxfcmluZ19zdWJt aXNzaW9uCj4gaW50byB0aGVpciBvd24gZmlsZXMuIFRoZXNlIGFyZSBsb3cgbGV2ZWwgb3BlcmF0 aW9ucyBmb3IgYnVpbGRpbmcgQ1MKPiBpbnN0cnVjdGlvbnMsIHJhdGhlciB0aGFuIHRoZSBsb2dp YyBmb3IgZmlsbGluZyB0aGUgZ2xvYmFsIHJpbmcgYnVmZmVyCj4gd2l0aCByZXF1ZXN0cywgYW5k IHdlIHdpbGwgd25hdCB0byByZXVzZSB0aGVtIG91dHNpZGUgb2YgdGhpcyBjb250ZXh0LgoKKndh bnQuCgpBY2tlZC1ieTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5j b20+Cgo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24u Y28udWs+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAg ICAgICB8ICAgMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjJfZW5naW5lX2NzLmMg ICAgICB8IDM0MCArKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjJfZW5naW5l X2NzLmggICAgICB8ICAzOCArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjZfZW5naW5l X2NzLmMgICAgICB8IDQ1NSArKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dl bjZfZW5naW5lX2NzLmggICAgICB8ICAzOSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2VuZ2luZS5oICAgICAgICB8ICAgMSAtCj4gIC4uLi9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf cmluZ19zdWJtaXNzaW9uLmMgICB8IDgzMiArLS0tLS0tLS0tLS0tLS0tLS0KPiAgNyBmaWxlcyBj aGFuZ2VkLCA5MDEgaW5zZXJ0aW9ucygrKSwgODA2IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuMl9lbmdpbmVfY3MuYwo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuMl9lbmdpbmVfY3MuaAo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuNl9lbmdpbmVf Y3MuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuNl9l bmdpbmVfY3MuaAo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCBiMGRhNmVhNmUzZjEuLjQx YTI3ZmQ1ZGJjNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTc4LDYgKzc4LDggQEAg Z3QteSArPSBcCj4gIAlndC9kZWJ1Z2ZzX2VuZ2luZXMubyBcCj4gIAlndC9kZWJ1Z2ZzX2d0Lm8g XAo+ICAJZ3QvZGVidWdmc19ndF9wbS5vIFwKPiArCWd0L2dlbjJfZW5naW5lX2NzLm8gXAo+ICsJ Z3QvZ2VuNl9lbmdpbmVfY3MubyBcCj4gIAlndC9nZW42X3BwZ3R0Lm8gXAo+ICAJZ3QvZ2VuN19y ZW5kZXJjbGVhci5vIFwKPiAgCWd0L2dlbjhfcHBndHQubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2dlbjJfZW5naW5lX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9nZW4yX2VuZ2luZV9jcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwMDAwMDAuLjhkMmU4NTA4MTI0Nwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9nZW4yX2VuZ2luZV9jcy5jCj4gQEAgLTAsMCArMSwzNDAgQEAKPiArLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAy MCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJnZW4yX2VuZ2luZV9j cy5oIgo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImludGVsX2VuZ2luZS5o Igo+ICsjaW5jbHVkZSAiaW50ZWxfZ3B1X2NvbW1hbmRzLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9n dC5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZ3RfaXJxLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9yaW5n LmgiCj4gKwo+ICtpbnQgZ2VuMl9lbWl0X2ZsdXNoKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1 MzIgbW9kZSkKPiArewo+ICsJdW5zaWduZWQgaW50IG51bV9zdG9yZV9kdzsKPiArCXUzMiBjbWQs ICpjczsKPiArCj4gKwljbWQgPSBNSV9GTFVTSDsKPiArCW51bV9zdG9yZV9kdyA9IDA7Cj4gKwlp ZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkKPiArCQljbWQgfD0gTUlfUkVBRF9GTFVTSDsKPiAr CWlmIChtb2RlICYgRU1JVF9GTFVTSCkKPiArCQludW1fc3RvcmVfZHcgPSA0Owo+ICsKPiArCWNz ID0gaW50ZWxfcmluZ19iZWdpbihycSwgMiArIDMgKiBudW1fc3RvcmVfZHcpOwo+ICsJaWYgKElT X0VSUihjcykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICsKPiArCSpjcysrID0gY21kOwo+ ICsJd2hpbGUgKG51bV9zdG9yZV9kdy0tKSB7Cj4gKwkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9J TU0gfCBNSV9NRU1fVklSVFVBTDsKPiArCQkqY3MrKyA9IGludGVsX2d0X3NjcmF0Y2hfb2Zmc2V0 KHJxLT5lbmdpbmUtPmd0LAo+ICsJCQkJCQlJTlRFTF9HVF9TQ1JBVENIX0ZJRUxEX0RFRkFVTFQp Owo+ICsJCSpjcysrID0gMDsKPiArCX0KPiArCSpjcysrID0gTUlfRkxVU0ggfCBNSV9OT19XUklU RV9GTFVTSDsKPiArCj4gKwlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiAraW50IGdlbjRfZW1pdF9mbHVzaF9yY3Moc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEsIHUzMiBtb2RlKQo+ICt7Cj4gKwl1MzIgY21kLCAqY3M7Cj4gKwlpbnQgaTsKPiAr Cj4gKwkvKgo+ICsJICogcmVhZC93cml0ZSBjYWNoZXM6Cj4gKwkgKgo+ICsJICogSTkxNV9HRU1f RE9NQUlOX1JFTkRFUiBpcyBhbHdheXMgaW52YWxpZGF0ZWQsIGJ1dCBpcwo+ICsJICogb25seSBm bHVzaGVkIGlmIE1JX05PX1dSSVRFX0ZMVVNIIGlzIHVuc2V0LiAgT24gOTY1LCBpdCBpcwo+ICsJ ICogYWxzbyBmbHVzaGVkIGF0IDJkIHZlcnN1cyAzZCBwaXBlbGluZSBzd2l0Y2hlcy4KPiArCSAq Cj4gKwkgKiByZWFkLW9ubHkgY2FjaGVzOgo+ICsJICoKPiArCSAqIEk5MTVfR0VNX0RPTUFJTl9T QU1QTEVSIGlzIGZsdXNoZWQgb24gcHJlLTk2NSBpZgo+ICsJICogTUlfUkVBRF9GTFVTSCBpcyBz ZXQsIGFuZCBpcyBhbHdheXMgZmx1c2hlZCBvbiA5NjUuCj4gKwkgKgo+ICsJICogSTkxNV9HRU1f RE9NQUlOX0NPTU1BTkQgbWF5IG5vdCBleGlzdD8KPiArCSAqCj4gKwkgKiBJOTE1X0dFTV9ET01B SU5fSU5TVFJVQ1RJT04sIHdoaWNoIGV4aXN0cyBvbiA5NjUsIGlzCj4gKwkgKiBpbnZhbGlkYXRl ZCB3aGVuIE1JX0VYRV9GTFVTSCBpcyBzZXQuCj4gKwkgKgo+ICsJICogSTkxNV9HRU1fRE9NQUlO X1ZFUlRFWCwgd2hpY2ggZXhpc3RzIG9uIDk2NSwgaXMKPiArCSAqIGludmFsaWRhdGVkIHdpdGgg ZXZlcnkgTUlfRkxVU0guCj4gKwkgKgo+ICsJICogVExCczoKPiArCSAqCj4gKwkgKiBPbiA5NjUs IFRMQnMgYXNzb2NpYXRlZCB3aXRoIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5ECj4gKwkgKiBhbmQg STkxNV9HRU1fRE9NQUlOX0NQVSBpbiBhcmUgaW52YWxpZGF0ZWQgYXQgUFRFIHdyaXRlIGFuZAo+ ICsJICogSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiBhbmQgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIK PiArCSAqIGFyZSBmbHVzaGVkIGF0IGFueSBNSV9GTFVTSC4KPiArCSAqLwo+ICsKPiArCWNtZCA9 IE1JX0ZMVVNIOwo+ICsJaWYgKG1vZGUgJiBFTUlUX0lOVkFMSURBVEUpIHsKPiArCQljbWQgfD0g TUlfRVhFX0ZMVVNIOwo+ICsJCWlmIChJU19HNFgocnEtPmk5MTUpIHx8IElTX0dFTihycS0+aTkx NSwgNSkpCj4gKwkJCWNtZCB8PSBNSV9JTlZBTElEQVRFX0lTUDsKPiArCX0KPiArCj4gKwlpID0g MjsKPiArCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKQo+ICsJCWkgKz0gMjA7Cj4gKwo+ICsJ Y3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCBpKTsKPiArCWlmIChJU19FUlIoY3MpKQo+ICsJCXJl dHVybiBQVFJfRVJSKGNzKTsKPiArCj4gKwkqY3MrKyA9IGNtZDsKPiArCj4gKwkvKgo+ICsJICog QSByYW5kb20gZGVsYXkgdG8gbGV0IHRoZSBDUyBpbnZhbGlkYXRlIHRha2UgZWZmZWN0PyBXaXRo b3V0IHRoaXMKPiArCSAqIGRlbGF5LCB0aGUgR1BVIHJlbG9jYXRpb24gcGF0aCBmYWlscyBhcyB0 aGUgQ1MgZG9lcyBub3Qgc2VlCj4gKwkgKiB0aGUgdXBkYXRlZCBjb250ZW50cy4gSnVzdCBhcyBp bXBvcnRhbnQsIGlmIHdlIGFwcGx5IHRoZSBmbHVzaGVzCj4gKwkgKiB0byB0aGUgRU1JVF9GTFVT SCBicmFuY2ggKGkuZS4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHJlbG9jYXRpb24KPiArCSAqIHdy aXRlIGFuZCBiZWZvcmUgdGhlIGludmFsaWRhdGUgb24gdGhlIG5leHQgYmF0Y2gpLCB0aGUgcmVs b2NhdGlvbnMKPiArCSAqIHN0aWxsIGZhaWwuIFRoaXMgaW1wbGllcyB0aGF0IGlzIGEgZGVsYXkg Zm9sbG93aW5nIGludmFsaWRhdGlvbgo+ICsJICogdGhhdCBpcyByZXF1aXJlZCB0byByZXNldCB0 aGUgY2FjaGVzIGFzIG9wcG9zZWQgdG8gYSBkZWxheSB0bwo+ICsJICogZW5zdXJlIHRoZSBtZW1v cnkgaXMgd3JpdHRlbi4KPiArCSAqLwo+ICsJaWYgKG1vZGUgJiBFTUlUX0lOVkFMSURBVEUpIHsK PiArCQkqY3MrKyA9IEdGWF9PUF9QSVBFX0NPTlRST0woNCkgfCBQSVBFX0NPTlRST0xfUVdfV1JJ VEU7Cj4gKwkJKmNzKysgPSBpbnRlbF9ndF9zY3JhdGNoX29mZnNldChycS0+ZW5naW5lLT5ndCwK PiArCQkJCQkJSU5URUxfR1RfU0NSQVRDSF9GSUVMRF9ERUZBVUxUKSB8Cj4gKwkJCVBJUEVfQ09O VFJPTF9HTE9CQUxfR1RUOwo+ICsJCSpjcysrID0gMDsKPiArCQkqY3MrKyA9IDA7Cj4gKwo+ICsJ CWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKQo+ICsJCQkqY3MrKyA9IE1JX0ZMVVNIOwo+ICsKPiAr CQkqY3MrKyA9IEdGWF9PUF9QSVBFX0NPTlRST0woNCkgfCBQSVBFX0NPTlRST0xfUVdfV1JJVEU7 Cj4gKwkJKmNzKysgPSBpbnRlbF9ndF9zY3JhdGNoX29mZnNldChycS0+ZW5naW5lLT5ndCwKPiAr CQkJCQkJSU5URUxfR1RfU0NSQVRDSF9GSUVMRF9ERUZBVUxUKSB8Cj4gKwkJCVBJUEVfQ09OVFJP TF9HTE9CQUxfR1RUOwo+ICsJCSpjcysrID0gMDsKPiArCQkqY3MrKyA9IDA7Cj4gKwl9Cj4gKwo+ ICsJKmNzKysgPSBjbWQ7Cj4gKwo+ICsJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBnZW40X2VtaXRfZmx1c2hfdmNzKHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSkKPiArewo+ICsJdTMyICpjczsKPiArCj4gKwljcyA9 IGludGVsX3JpbmdfYmVnaW4ocnEsIDIpOwo+ICsJaWYgKElTX0VSUihjcykpCj4gKwkJcmV0dXJu IFBUUl9FUlIoY3MpOwo+ICsKPiArCSpjcysrID0gTUlfRkxVU0g7Cj4gKwkqY3MrKyA9IE1JX05P T1A7Cj4gKwlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArdTMyICpnZW4zX2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSwgdTMyICpjcykKPiArewo+ICsJR0VNX0JVR19PTihpOTE1X3JlcXVlc3RfYWN0aXZlX3RpbWVs aW5lKHJxKS0+aHdzcF9nZ3R0ICE9IHJxLT5lbmdpbmUtPnN0YXR1c19wYWdlLnZtYSk7Cj4gKwlH RU1fQlVHX09OKG9mZnNldF9pbl9wYWdlKGk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxpbmUocnEp LT5od3NwX29mZnNldCkgIT0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFIpOwo+ICsKPiArCSpjcysr ID0gTUlfRkxVU0g7Cj4gKwo+ICsJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTkRFWDsKPiArCSpj cysrID0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFI7Cj4gKwkqY3MrKyA9IHJxLT5mZW5jZS5zZXFu bzsKPiArCj4gKwkqY3MrKyA9IE1JX1VTRVJfSU5URVJSVVBUOwo+ICsJKmNzKysgPSBNSV9OT09Q Owo+ICsKPiArCXJxLT50YWlsID0gaW50ZWxfcmluZ19vZmZzZXQocnEsIGNzKTsKPiArCWFzc2Vy dF9yaW5nX3RhaWxfdmFsaWQocnEtPnJpbmcsIHJxLT50YWlsKTsKPiArCj4gKwlyZXR1cm4gY3M7 Cj4gK30KPiArCj4gKyNkZWZpbmUgR0VONV9XQV9TVE9SRVMgOCAvKiBtdXN0IGJlIGF0IGxlYXN0 IDEhICovCj4gK3UzMiAqZ2VuNV9lbWl0X2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEsIHUzMiAqY3MpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCUdFTV9CVUdfT04oaTkxNV9yZXF1 ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3BfZ2d0dCAhPSBycS0+ZW5naW5lLT5zdGF0dXNf cGFnZS52bWEpOwo+ICsJR0VNX0JVR19PTihvZmZzZXRfaW5fcGFnZShpOTE1X3JlcXVlc3RfYWN0 aXZlX3RpbWVsaW5lKHJxKS0+aHdzcF9vZmZzZXQpICE9IEk5MTVfR0VNX0hXU19TRVFOT19BRERS KTsKPiArCj4gKwkqY3MrKyA9IE1JX0ZMVVNIOwo+ICsKPiArCUJVSUxEX0JVR19PTihHRU41X1dB X1NUT1JFUyA8IDEpOwo+ICsJZm9yIChpID0gMDsgaSA8IEdFTjVfV0FfU1RPUkVTOyBpKyspIHsK PiArCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lOREVYOwo+ICsJCSpjcysrID0gSTkxNV9HRU1f SFdTX1NFUU5PX0FERFI7Cj4gKwkJKmNzKysgPSBycS0+ZmVuY2Uuc2Vxbm87Cj4gKwl9Cj4gKwo+ ICsJKmNzKysgPSBNSV9VU0VSX0lOVEVSUlVQVDsKPiArCj4gKwlycS0+dGFpbCA9IGludGVsX3Jp bmdfb2Zmc2V0KHJxLCBjcyk7Cj4gKwlhc3NlcnRfcmluZ190YWlsX3ZhbGlkKHJxLT5yaW5nLCBy cS0+dGFpbCk7Cj4gKwo+ICsJcmV0dXJuIGNzOwo+ICt9Cj4gKyN1bmRlZiBHRU41X1dBX1NUT1JF Uwo+ICsKPiArLyogSnVzdCB1c2Vyc3BhY2UgQUJJIGNvbnZlbnRpb24gdG8gbGltaXQgdGhlIHdh IGJhdGNoIGJvIHRvIGEgcmVzb25hYmxlIHNpemUgKi8KPiArI2RlZmluZSBJODMwX0JBVENIX0xJ TUlUIFNaXzI1NksKPiArI2RlZmluZSBJODMwX1RMQl9FTlRSSUVTICgyKQo+ICsjZGVmaW5lIEk4 MzBfV0FfU0laRSBtYXgoSTgzMF9UTEJfRU5UUklFUyAqIFNaXzRLLCBJODMwX0JBVENIX0xJTUlU KQo+ICtpbnQgaTgzMF9lbWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ICsJ CSAgICAgICB1NjQgb2Zmc2V0LCB1MzIgbGVuLAo+ICsJCSAgICAgICB1bnNpZ25lZCBpbnQgZGlz cGF0Y2hfZmxhZ3MpCj4gK3sKPiArCXUzMiAqY3MsIGNzX29mZnNldCA9Cj4gKwkJaW50ZWxfZ3Rf c2NyYXRjaF9vZmZzZXQocnEtPmVuZ2luZS0+Z3QsCj4gKwkJCQkJSU5URUxfR1RfU0NSQVRDSF9G SUVMRF9ERUZBVUxUKTsKPiArCj4gKwlHRU1fQlVHX09OKHJxLT5lbmdpbmUtPmd0LT5zY3JhdGNo LT5zaXplIDwgSTgzMF9XQV9TSVpFKTsKPiArCj4gKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEs IDYpOwo+ICsJaWYgKElTX0VSUihjcykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICsKPiAr CS8qIEV2aWN0IHRoZSBpbnZhbGlkIFBURSBUTEJzICovCj4gKwkqY3MrKyA9IENPTE9SX0JMVF9D TUQgfCBCTFRfV1JJVEVfUkdCQTsKPiArCSpjcysrID0gQkxUX0RFUFRIXzMyIHwgQkxUX1JPUF9D T0xPUl9DT1BZIHwgNDA5NjsKPiArCSpjcysrID0gSTgzMF9UTEJfRU5UUklFUyA8PCAxNiB8IDQ7 IC8qIGxvYWQgZWFjaCBwYWdlICovCj4gKwkqY3MrKyA9IGNzX29mZnNldDsKPiArCSpjcysrID0g MHhkZWFkYmVlZjsKPiArCSpjcysrID0gTUlfTk9PUDsKPiArCWludGVsX3JpbmdfYWR2YW5jZShy cSwgY3MpOwo+ICsKPiArCWlmICgoZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1BJTk5F RCkgPT0gMCkgewo+ICsJCWlmIChsZW4gPiBJODMwX0JBVENIX0xJTUlUKQo+ICsJCQlyZXR1cm4g LUVOT1NQQzsKPiArCj4gKwkJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA2ICsgMik7Cj4gKwkJ aWYgKElTX0VSUihjcykpCj4gKwkJCXJldHVybiBQVFJfRVJSKGNzKTsKPiArCj4gKwkJLyoKPiAr CQkgKiBCbGl0IHRoZSBiYXRjaCAod2hpY2ggaGFzIG5vdyBhbGwgcmVsb2NzIGFwcGxpZWQpIHRv IHRoZQo+ICsJCSAqIHN0YWJsZSBiYXRjaCBzY3JhdGNoIGJvIGFyZWEgKHNvIHRoYXQgdGhlIENT IG5ldmVyCj4gKwkJICogc3R1bWJsZXMgb3ZlciBpdHMgdGxiIGludmFsaWRhdGlvbiBidWcpIC4u Lgo+ICsJCSAqLwo+ICsJCSpjcysrID0gU1JDX0NPUFlfQkxUX0NNRCB8IEJMVF9XUklURV9SR0JB IHwgKDYgLSAyKTsKPiArCQkqY3MrKyA9IEJMVF9ERVBUSF8zMiB8IEJMVF9ST1BfU1JDX0NPUFkg fCA0MDk2Owo+ICsJCSpjcysrID0gRElWX1JPVU5EX1VQKGxlbiwgNDA5NikgPDwgMTYgfCA0MDk2 Owo+ICsJCSpjcysrID0gY3Nfb2Zmc2V0Owo+ICsJCSpjcysrID0gNDA5NjsKPiArCQkqY3MrKyA9 IG9mZnNldDsKPiArCj4gKwkJKmNzKysgPSBNSV9GTFVTSDsKPiArCQkqY3MrKyA9IE1JX05PT1A7 Cj4gKwkJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Cj4gKwo+ICsJCS8qIC4uLiBhbmQgZXhl Y3V0ZSBpdC4gKi8KPiArCQlvZmZzZXQgPSBjc19vZmZzZXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKCEo ZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1NFQ1VSRSkpCj4gKwkJb2Zmc2V0IHw9IE1J X0JBVENIX05PTl9TRUNVUkU7Cj4gKwo+ICsJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAyKTsK PiArCWlmIChJU19FUlIoY3MpKQo+ICsJCXJldHVybiBQVFJfRVJSKGNzKTsKPiArCj4gKwkqY3Mr KyA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IE1JX0JBVENIX0dUVDsKPiArCSpjcysrID0gb2Zm c2V0Owo+ICsJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK2ludCBnZW4zX2VtaXRfYmJfc3RhcnQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs Cj4gKwkJICAgICAgIHU2NCBvZmZzZXQsIHUzMiBsZW4sCj4gKwkJICAgICAgIHVuc2lnbmVkIGlu dCBkaXNwYXRjaF9mbGFncykKPiArewo+ICsJdTMyICpjczsKPiArCj4gKwlpZiAoIShkaXNwYXRj aF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKSkKPiArCQlvZmZzZXQgfD0gTUlfQkFUQ0hf Tk9OX1NFQ1VSRTsKPiArCj4gKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDIpOwo+ICsJaWYg KElTX0VSUihjcykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICsKPiArCSpjcysrID0gTUlf QkFUQ0hfQlVGRkVSX1NUQVJUIHwgTUlfQkFUQ0hfR1RUOwo+ICsJKmNzKysgPSBvZmZzZXQ7Cj4g KwlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiAraW50IGdlbjRfZW1pdF9iYl9zdGFydChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCQkg ICAgICAgdTY0IG9mZnNldCwgdTMyIGxlbmd0aCwKPiArCQkgICAgICAgdW5zaWduZWQgaW50IGRp c3BhdGNoX2ZsYWdzKQo+ICt7Cj4gKwl1MzIgc2VjdXJpdHk7Cj4gKwl1MzIgKmNzOwo+ICsKPiAr CXNlY3VyaXR5ID0gTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1Owo+ICsJaWYgKGRpc3BhdGNoX2Zs YWdzICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUpCj4gKwkJc2VjdXJpdHkgPSAwOwo+ICsKPiArCWNz ID0gaW50ZWxfcmluZ19iZWdpbihycSwgMik7Cj4gKwlpZiAoSVNfRVJSKGNzKSkKPiArCQlyZXR1 cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJKmNzKysgPSBNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCBN SV9CQVRDSF9HVFQgfCBzZWN1cml0eTsKPiArCSpjcysrID0gb2Zmc2V0Owo+ICsJaW50ZWxfcmlu Z19hZHZhbmNlKHJxLCBjcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgZ2Vu Ml9pcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbmdpbmUtPmk5MTU7Cj4gKwo+ICsJaTkxNS0+ aXJxX21hc2sgJj0gfmVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrOwo+ICsJaW50ZWxfdW5jb3JlX3dy aXRlMTYoJmk5MTUtPnVuY29yZSwgR0VOMl9JTVIsIGk5MTUtPmlycV9tYXNrKTsKPiArCUVOR0lO RV9QT1NUSU5HX1JFQUQxNihlbmdpbmUsIFJJTkdfSU1SKTsKPiArfQo+ICsKPiArdm9pZCBnZW4y X2lycV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbmdpbmUtPmk5MTU7Cj4gKwo+ICsJaTkxNS0+ aXJxX21hc2sgfD0gZW5naW5lLT5pcnFfZW5hYmxlX21hc2s7Cj4gKwlpbnRlbF91bmNvcmVfd3Jp dGUxNigmaTkxNS0+dW5jb3JlLCBHRU4yX0lNUiwgaTkxNS0+aXJxX21hc2spOwo+ICt9Cj4gKwo+ ICt2b2lkIGdlbjNfaXJxX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g K3sKPiArCWVuZ2luZS0+aTkxNS0+aXJxX21hc2sgJj0gfmVuZ2luZS0+aXJxX2VuYWJsZV9tYXNr Owo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKGVuZ2luZS0+dW5jb3JlLCBHRU4yX0lNUiwgZW5naW5l LT5pOTE1LT5pcnFfbWFzayk7Cj4gKwlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkX2Z3KGVuZ2lu ZS0+dW5jb3JlLCBHRU4yX0lNUik7Cj4gK30KPiArCj4gK3ZvaWQgZ2VuM19pcnFfZGlzYWJsZShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCWVuZ2luZS0+aTkxNS0+aXJx X21hc2sgfD0gZW5naW5lLT5pcnFfZW5hYmxlX21hc2s7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUo ZW5naW5lLT51bmNvcmUsIEdFTjJfSU1SLCBlbmdpbmUtPmk5MTUtPmlycV9tYXNrKTsKPiArfQo+ ICsKPiArdm9pZCBnZW41X2lycV9lbmFibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICt7Cj4gKwlnZW41X2d0X2VuYWJsZV9pcnEoZW5naW5lLT5ndCwgZW5naW5lLT5pcnFfZW5h YmxlX21hc2spOwo+ICt9Cj4gKwo+ICt2b2lkIGdlbjVfaXJxX2Rpc2FibGUoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlnZW41X2d0X2Rpc2FibGVfaXJxKGVuZ2luZS0+ Z3QsIGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9nZW4yX2VuZ2luZV9jcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvZ2VuMl9lbmdpbmVfY3MuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MDAwMDAwLi5hNWNkNjRhNjVjOWUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvZ2VuMl9lbmdpbmVfY3MuaAo+IEBAIC0wLDAgKzEsMzggQEAKPiArLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAy MCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19HRU4yX0VOR0lORV9D U19IX18KPiArI2RlZmluZSBfX0dFTjJfRU5HSU5FX0NTX0hfXwo+ICsKPiArI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+Cj4gKwo+ICtzdHJ1Y3QgaTkxNV9yZXF1ZXN0Owo+ICtzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzOwo+ICsKPiAraW50IGdlbjJfZW1pdF9mbHVzaChzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSwgdTMyIG1vZGUpOwo+ICtpbnQgZ2VuNF9lbWl0X2ZsdXNoX3JjcyhzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSwgdTMyIG1vZGUpOwo+ICtpbnQgZ2VuNF9lbWl0X2ZsdXNoX3ZjcyhzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUpOwo+ICsKPiArdTMyICpnZW4zX2VtaXRfYnJlYWRj cnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyICpjcyk7Cj4gK3UzMiAqZ2VuNV9lbWl0 X2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpOwo+ICsKPiAraW50 IGk4MzBfZW1pdF9iYl9zdGFydChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCQkgICAgICAg dTY0IG9mZnNldCwgdTMyIGxlbiwKPiArCQkgICAgICAgdW5zaWduZWQgaW50IGRpc3BhdGNoX2Zs YWdzKTsKPiAraW50IGdlbjNfZW1pdF9iYl9zdGFydChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwK PiArCQkgICAgICAgdTY0IG9mZnNldCwgdTMyIGxlbiwKPiArCQkgICAgICAgdW5zaWduZWQgaW50 IGRpc3BhdGNoX2ZsYWdzKTsKPiAraW50IGdlbjRfZW1pdF9iYl9zdGFydChzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSwKPiArCQkgICAgICAgdTY0IG9mZnNldCwgdTMyIGxlbmd0aCwKPiArCQkgICAg ICAgdW5zaWduZWQgaW50IGRpc3BhdGNoX2ZsYWdzKTsKPiArCj4gK3ZvaWQgZ2VuMl9pcnFfZW5h YmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gK3ZvaWQgZ2VuMl9pcnFfZGlz YWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICt2b2lkIGdlbjNfaXJxX2Vu YWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICt2b2lkIGdlbjNfaXJxX2Rp c2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArdm9pZCBnZW41X2lycV9l bmFibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArdm9pZCBnZW41X2lycV9k aXNhYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gKwo+ICsjZW5kaWYgLyog X19HRU4yX0VOR0lORV9DU19IX18gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvZ2VuNl9lbmdpbmVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjZfZW5n aW5lX2NzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uY2Uz OGQxYmNhYmEzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2dlbjZfZW5naW5lX2NzLmMKPiBAQCAtMCwwICsxLDQ1NSBAQAo+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogTUlUCj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBv cmF0aW9uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImdlbjZfZW5naW5lX2NzLmgiCj4gKyNpbmNs dWRlICJpbnRlbF9lbmdpbmUuaCIKPiArI2luY2x1ZGUgImludGVsX2dwdV9jb21tYW5kcy5oIgo+ ICsjaW5jbHVkZSAiaW50ZWxfZ3QuaCIKPiArI2luY2x1ZGUgImludGVsX2d0X2lycS5oIgo+ICsj aW5jbHVkZSAiaW50ZWxfZ3RfcG1faXJxLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9yaW5nLmgiCj4g Kwo+ICsjZGVmaW5lIEhXU19TQ1JBVENIX0FERFIJKEk5MTVfR0VNX0hXU19TQ1JBVENIICogc2l6 ZW9mKHUzMikpCj4gKwo+ICsvKgo+ICsgKiBFbWl0cyBhIFBJUEVfQ09OVFJPTCB3aXRoIGEgbm9u LXplcm8gcG9zdC1zeW5jIG9wZXJhdGlvbiwgZm9yCj4gKyAqIGltcGxlbWVudGluZyB0d28gd29y a2Fyb3VuZHMgb24gZ2VuNi4gIEZyb20gc2VjdGlvbiAxLjQuNy4xCj4gKyAqICJQSVBFX0NPTlRS T0wiIG9mIHRoZSBTYW5keSBCcmlkZ2UgUFJNIHZvbHVtZSAyIHBhcnQgMToKPiArICoKPiArICog W0RldlNOQi1DK3tXL0F9XSBCZWZvcmUgYW55IGRlcHRoIHN0YWxsIGZsdXNoIChpbmNsdWRpbmcg dGhvc2UKPiArICogcHJvZHVjZWQgYnkgbm9uLXBpcGVsaW5lZCBzdGF0ZSBjb21tYW5kcyksIHNv ZnR3YXJlIG5lZWRzIHRvIGZpcnN0Cj4gKyAqIHNlbmQgYSBQSVBFX0NPTlRST0wgd2l0aCBubyBi aXRzIHNldCBleGNlcHQgUG9zdC1TeW5jIE9wZXJhdGlvbiAhPQo+ICsgKiAwLgo+ICsgKgo+ICsg KiBbRGV2LVNOQntXL0F9XTogQmVmb3JlIGEgUElQRV9DT05UUk9MIHdpdGggV3JpdGUgQ2FjaGUg Rmx1c2ggRW5hYmxlCj4gKyAqID0xLCBhIFBJUEVfQ09OVFJPTCB3aXRoIGFueSBub24temVybyBw b3N0LXN5bmMtb3AgaXMgcmVxdWlyZWQuCj4gKyAqCj4gKyAqIEFuZCB0aGUgd29ya2Fyb3VuZCBm b3IgdGhlc2UgdHdvIHJlcXVpcmVzIHRoaXMgd29ya2Fyb3VuZCBmaXJzdDoKPiArICoKPiArICog W0Rldi1TTkJ7Vy9BfV06IFBpcGUtY29udHJvbCB3aXRoIENTLXN0YWxsIGJpdCBzZXQgbXVzdCBi ZSBzZW50Cj4gKyAqIEJFRk9SRSB0aGUgcGlwZS1jb250cm9sIHdpdGggYSBwb3N0LXN5bmMgb3Ag YW5kIG5vIHdyaXRlLWNhY2hlCj4gKyAqIGZsdXNoZXMuCj4gKyAqCj4gKyAqIEFuZCB0aGlzIGxh c3Qgd29ya2Fyb3VuZCBpcyB0cmlja3kgYmVjYXVzZSBvZiB0aGUgcmVxdWlyZW1lbnRzIG9uCj4g KyAqIHRoYXQgYml0LiAgRnJvbSBzZWN0aW9uIDEuNC43LjIuMyAiU3RhbGwiIG9mIHRoZSBTYW5k eSBCcmlkZ2UgUFJNCj4gKyAqIHZvbHVtZSAyIHBhcnQgMToKPiArICoKPiArICogICAgICIxIG9m IHRoZSBmb2xsb3dpbmcgbXVzdCBhbHNvIGJlIHNldDoKPiArICogICAgICAtIFJlbmRlciBUYXJn ZXQgQ2FjaGUgRmx1c2ggRW5hYmxlIChbMTJdIG9mIERXMSkKPiArICogICAgICAtIERlcHRoIENh Y2hlIEZsdXNoIEVuYWJsZSAoWzBdIG9mIERXMSkKPiArICogICAgICAtIFN0YWxsIGF0IFBpeGVs IFNjb3JlYm9hcmQgKFsxXSBvZiBEVzEpCj4gKyAqICAgICAgLSBEZXB0aCBTdGFsbCAoWzEzXSBv ZiBEVzEpCj4gKyAqICAgICAgLSBQb3N0LVN5bmMgT3BlcmF0aW9uIChbMTNdIG9mIERXMSkKPiAr ICogICAgICAtIE5vdGlmeSBFbmFibGUgKFs4XSBvZiBEVzEpIgo+ICsgKgo+ICsgKiBUaGUgY2Fj aGUgZmx1c2hlcyByZXF1aXJlIHRoZSB3b3JrYXJvdW5kIGZsdXNoIHRoYXQgdHJpZ2dlcmVkIHRo aXMKPiArICogb25lLCBzbyB3ZSBjYW4ndCB1c2UgaXQuICBEZXB0aCBzdGFsbCB3b3VsZCB0cmln Z2VyIHRoZSBzYW1lLgo+ICsgKiBQb3N0LXN5bmMgbm9uemVybyBpcyB3aGF0IHRyaWdnZXJlZCB0 aGlzIHNlY29uZCB3b3JrYXJvdW5kLCBzbyB3ZQo+ICsgKiBjYW4ndCB1c2UgdGhhdCBvbmUgZWl0 aGVyLiAgTm90aWZ5IGVuYWJsZSBpcyBJUlFzLCB3aGljaCBhcmVuJ3QKPiArICogcmVhbGx5IG91 ciBidXNpbmVzcy4gIFRoYXQgbGVhdmVzIG9ubHkgc3RhbGwgYXQgc2NvcmVib2FyZC4KPiArICov Cj4gK3N0YXRpYyBpbnQKPiArZ2VuNl9lbWl0X3Bvc3Rfc3luY19ub256ZXJvX2ZsdXNoKHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwl1MzIgc2NyYXRjaF9hZGRyID0KPiArCQlpbnRl bF9ndF9zY3JhdGNoX29mZnNldChycS0+ZW5naW5lLT5ndCwKPiArCQkJCQlJTlRFTF9HVF9TQ1JB VENIX0ZJRUxEX1JFTkRFUl9GTFVTSCk7Cj4gKwl1MzIgKmNzOwo+ICsKPiArCWNzID0gaW50ZWxf cmluZ19iZWdpbihycSwgNik7Cj4gKwlpZiAoSVNfRVJSKGNzKSkKPiArCQlyZXR1cm4gUFRSX0VS Uihjcyk7Cj4gKwo+ICsJKmNzKysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDUpOwo+ICsJKmNzKysg PSBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfCBQSVBFX0NPTlRST0xfU1RBTExfQVRfU0NPUkVCT0FS RDsKPiArCSpjcysrID0gc2NyYXRjaF9hZGRyIHwgUElQRV9DT05UUk9MX0dMT0JBTF9HVFQ7Cj4g KwkqY3MrKyA9IDA7IC8qIGxvdyBkd29yZCAqLwo+ICsJKmNzKysgPSAwOyAvKiBoaWdoIGR3b3Jk ICovCj4gKwkqY3MrKyA9IE1JX05PT1A7Cj4gKwlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsK PiArCj4gKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDYpOwo+ICsJaWYgKElTX0VSUihjcykp Cj4gKwkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICsKPiArCSpjcysrID0gR0ZYX09QX1BJUEVfQ09O VFJPTCg1KTsKPiArCSpjcysrID0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwo+ICsJKmNzKysgPSBz Y3JhdGNoX2FkZHIgfCBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVDsKPiArCSpjcysrID0gMDsKPiAr CSpjcysrID0gMDsKPiArCSpjcysrID0gTUlfTk9PUDsKPiArCWludGVsX3JpbmdfYWR2YW5jZShy cSwgY3MpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgZ2VuNl9lbWl0X2ZsdXNo X3JjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUpCj4gK3sKPiArCXUzMiBzY3Jh dGNoX2FkZHIgPQo+ICsJCWludGVsX2d0X3NjcmF0Y2hfb2Zmc2V0KHJxLT5lbmdpbmUtPmd0LAo+ ICsJCQkJCUlOVEVMX0dUX1NDUkFUQ0hfRklFTERfUkVOREVSX0ZMVVNIKTsKPiArCXUzMiAqY3Ms IGZsYWdzID0gMDsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyogRm9yY2UgU05CIHdvcmthcm91bmRz IGZvciBQSVBFX0NPTlRST0wgZmx1c2hlcyAqLwo+ICsJcmV0ID0gZ2VuNl9lbWl0X3Bvc3Rfc3lu Y19ub256ZXJvX2ZsdXNoKHJxKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4g KwkvKgo+ICsJICogSnVzdCBmbHVzaCBldmVyeXRoaW5nLiAgRXhwZXJpbWVudHMgaGF2ZSBzaG93 biB0aGF0IHJlZHVjaW5nIHRoZQo+ICsJICogbnVtYmVyIG9mIGJpdHMgYmFzZWQgb24gdGhlIHdy aXRlIGRvbWFpbnMgaGFzIGxpdHRsZSBwZXJmb3JtYW5jZQo+ICsJICogaW1wYWN0LiBBbmQgd2hl biByZWFycmFuZ2luZyByZXF1ZXN0cywgdGhlIG9yZGVyIG9mIGZsdXNoZXMgaXMKPiArCSAqIHVu a25vd24uCj4gKwkgKi8KPiArCWlmIChtb2RlICYgRU1JVF9GTFVTSCkgewo+ICsJCWZsYWdzIHw9 IFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0NBQ0hFX0ZMVVNIOwo+ICsJCWZsYWdzIHw9IFBJ UEVfQ09OVFJPTF9ERVBUSF9DQUNIRV9GTFVTSDsKPiArCQkvKgo+ICsJCSAqIEVuc3VyZSB0aGF0 IGFueSBmb2xsb3dpbmcgc2Vxbm8gd3JpdGVzIG9ubHkgaGFwcGVuCj4gKwkJICogd2hlbiB0aGUg cmVuZGVyIGNhY2hlIGlzIGluZGVlZCBmbHVzaGVkLgo+ICsJCSAqLwo+ICsJCWZsYWdzIHw9IFBJ UEVfQ09OVFJPTF9DU19TVEFMTDsKPiArCX0KPiArCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRF KSB7Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RMQl9JTlZBTElEQVRFOwo+ICsJCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9JTlNUUlVDVElPTl9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9URVhUVVJFX0NBQ0hFX0lOVkFMSURBVEU7Cj4gKwkJZmxhZ3MgfD0g UElQRV9DT05UUk9MX1ZGX0NBQ0hFX0lOVkFMSURBVEU7Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05U Uk9MX0NPTlNUX0NBQ0hFX0lOVkFMSURBVEU7Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NU QVRFX0NBQ0hFX0lOVkFMSURBVEU7Cj4gKwkJLyoKPiArCQkgKiBUTEIgaW52YWxpZGF0ZSByZXF1 aXJlcyBhIHBvc3Qtc3luYyB3cml0ZS4KPiArCQkgKi8KPiArCQlmbGFncyB8PSBQSVBFX0NPTlRS T0xfUVdfV1JJVEUgfCBQSVBFX0NPTlRST0xfQ1NfU1RBTEw7Cj4gKwl9Cj4gKwo+ICsJY3MgPSBp bnRlbF9yaW5nX2JlZ2luKHJxLCA0KTsKPiArCWlmIChJU19FUlIoY3MpKQo+ICsJCXJldHVybiBQ VFJfRVJSKGNzKTsKPiArCj4gKwkqY3MrKyA9IEdGWF9PUF9QSVBFX0NPTlRST0woNCk7Cj4gKwkq Y3MrKyA9IGZsYWdzOwo+ICsJKmNzKysgPSBzY3JhdGNoX2FkZHIgfCBQSVBFX0NPTlRST0xfR0xP QkFMX0dUVDsKPiArCSpjcysrID0gMDsKPiArCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt1MzIgKmdlbjZfZW1pdF9icmVhZGNydW1iX3Jj cyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyICpjcykKPiArewo+ICsJLyogRmlyc3Qgd2Ug ZG8gdGhlIGdlbjZfZW1pdF9wb3N0X3N5bmNfbm9uemVyb19mbHVzaCB3L2EgKi8KPiArCSpjcysr ID0gR0ZYX09QX1BJUEVfQ09OVFJPTCg0KTsKPiArCSpjcysrID0gUElQRV9DT05UUk9MX0NTX1NU QUxMIHwgUElQRV9DT05UUk9MX1NUQUxMX0FUX1NDT1JFQk9BUkQ7Cj4gKwkqY3MrKyA9IDA7Cj4g KwkqY3MrKyA9IDA7Cj4gKwo+ICsJKmNzKysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDQpOwo+ICsJ KmNzKysgPSBQSVBFX0NPTlRST0xfUVdfV1JJVEU7Cj4gKwkqY3MrKyA9IGludGVsX2d0X3NjcmF0 Y2hfb2Zmc2V0KHJxLT5lbmdpbmUtPmd0LAo+ICsJCQkJCUlOVEVMX0dUX1NDUkFUQ0hfRklFTERf REVGQVVMVCkgfAo+ICsJCVBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUOwo+ICsJKmNzKysgPSAwOwo+ ICsKPiArCS8qIEZpbmFsbHkgd2UgY2FuIGZsdXNoIGFuZCB3aXRoIGl0IGVtaXQgdGhlIGJyZWFk Y3J1bWIgKi8KPiArCSpjcysrID0gR0ZYX09QX1BJUEVfQ09OVFJPTCg0KTsKPiArCSpjcysrID0g KFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0NBQ0hFX0ZMVVNIIHwKPiArCQkgUElQRV9DT05U Uk9MX0RFUFRIX0NBQ0hFX0ZMVVNIIHwKPiArCQkgUElQRV9DT05UUk9MX0RDX0ZMVVNIX0VOQUJM RSB8Cj4gKwkJIFBJUEVfQ09OVFJPTF9RV19XUklURSB8Cj4gKwkJIFBJUEVfQ09OVFJPTF9DU19T VEFMTCk7Cj4gKwkqY3MrKyA9IGk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxpbmUocnEpLT5od3Nw X29mZnNldCB8Cj4gKwkJUElQRV9DT05UUk9MX0dMT0JBTF9HVFQ7Cj4gKwkqY3MrKyA9IHJxLT5m ZW5jZS5zZXFubzsKPiArCj4gKwkqY3MrKyA9IE1JX1VTRVJfSU5URVJSVVBUOwo+ICsJKmNzKysg PSBNSV9OT09QOwo+ICsKPiArCXJxLT50YWlsID0gaW50ZWxfcmluZ19vZmZzZXQocnEsIGNzKTsK PiArCWFzc2VydF9yaW5nX3RhaWxfdmFsaWQocnEtPnJpbmcsIHJxLT50YWlsKTsKPiArCj4gKwly ZXR1cm4gY3M7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWlfZmx1c2hfZHcoc3RydWN0IGk5MTVf cmVxdWVzdCAqcnEsIHUzMiBmbGFncykKPiArewo+ICsJdTMyIGNtZCwgKmNzOwo+ICsKPiArCWNz ID0gaW50ZWxfcmluZ19iZWdpbihycSwgNCk7Cj4gKwlpZiAoSVNfRVJSKGNzKSkKPiArCQlyZXR1 cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJY21kID0gTUlfRkxVU0hfRFc7Cj4gKwo+ICsJLyoKPiAr CSAqIFdlIGFsd2F5cyByZXF1aXJlIGEgY29tbWFuZCBiYXJyaWVyIHNvIHRoYXQgc3Vic2VxdWVu dAo+ICsJICogY29tbWFuZHMsIHN1Y2ggYXMgYnJlYWRjcnVtYiBpbnRlcnJ1cHRzLCBhcmUgc3Ry aWN0bHkgb3JkZXJlZAo+ICsJICogd3J0IHRoZSBjb250ZW50cyBvZiB0aGUgd3JpdGUgY2FjaGUg YmVpbmcgZmx1c2hlZCB0byBtZW1vcnkKPiArCSAqIChhbmQgdGh1cyBiZWluZyBjb2hlcmVudCBm cm9tIHRoZSBDUFUpLgo+ICsJICovCj4gKwljbWQgfD0gTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVgg fCBNSV9GTFVTSF9EV19PUF9TVE9SRURXOwo+ICsKPiArCS8qCj4gKwkgKiBCc3BlYyB2b2wgMWMu MyAtIGJsaXR0ZXIgZW5naW5lIGNvbW1hbmQgc3RyZWFtZXI6Cj4gKwkgKiAiSWYgRU5BQkxFRCwg YWxsIFRMQnMgd2lsbCBiZSBpbnZhbGlkYXRlZCBvbmNlIHRoZSBmbHVzaAo+ICsJICogb3BlcmF0 aW9uIGlzIGNvbXBsZXRlLiBUaGlzIGJpdCBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlCj4gKwkgKiBQ b3N0LVN5bmMgT3BlcmF0aW9uIGZpZWxkIGlzIGEgdmFsdWUgb2YgMWggb3IgM2guIgo+ICsJICov Cj4gKwljbWQgfD0gZmxhZ3M7Cj4gKwo+ICsJKmNzKysgPSBjbWQ7Cj4gKwkqY3MrKyA9IEhXU19T Q1JBVENIX0FERFIgfCBNSV9GTFVTSF9EV19VU0VfR1RUOwo+ICsJKmNzKysgPSAwOwo+ICsJKmNz KysgPSBNSV9OT09QOwo+ICsKPiArCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdlbjZfZmx1c2hfZHcoc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnEsIHUzMiBtb2RlLCB1MzIgaW52ZmxhZ3MpCj4gK3sKPiArCXJldHVybiBt aV9mbHVzaF9kdyhycSwgbW9kZSAmIEVNSVRfSU5WQUxJREFURSA/IGludmZsYWdzIDogMCk7Cj4g K30KPiArCj4gK2ludCBnZW42X2VtaXRfZmx1c2hfeGNzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx LCB1MzIgbW9kZSkKPiArewo+ICsJcmV0dXJuIGdlbjZfZmx1c2hfZHcocnEsIG1vZGUsIE1JX0lO VkFMSURBVEVfVExCKTsKPiArfQo+ICsKPiAraW50IGdlbjZfZW1pdF9mbHVzaF92Y3Moc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBtb2RlKQo+ICt7Cj4gKwlyZXR1cm4gZ2VuNl9mbHVzaF9k dyhycSwgbW9kZSwgTUlfSU5WQUxJREFURV9UTEIgfCBNSV9JTlZBTElEQVRFX0JTRCk7Cj4gK30K PiArCj4gK2ludCBnZW42X2VtaXRfYmJfc3RhcnQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4g KwkJICAgICAgIHU2NCBvZmZzZXQsIHUzMiBsZW4sCj4gKwkJICAgICAgIHVuc2lnbmVkIGludCBk aXNwYXRjaF9mbGFncykKPiArewo+ICsJdTMyIHNlY3VyaXR5Owo+ICsJdTMyICpjczsKPiArCj4g KwlzZWN1cml0eSA9IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NTsKPiArCWlmIChkaXNwYXRjaF9m bGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKQo+ICsJCXNlY3VyaXR5ID0gMDsKPiArCj4gKwlj cyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDIpOwo+ICsJaWYgKElTX0VSUihjcykpCj4gKwkJcmV0 dXJuIFBUUl9FUlIoY3MpOwo+ICsKPiArCWNzID0gX19nZW42X2VtaXRfYmJfc3RhcnQoY3MsIG9m ZnNldCwgc2VjdXJpdHkpOwo+ICsJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludAo+ICtoc3dfZW1pdF9iYl9zdGFydChzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSwKPiArCQkgIHU2NCBvZmZzZXQsIHUzMiBsZW4sCj4gKwkJICB1bnNpZ25l ZCBpbnQgZGlzcGF0Y2hfZmxhZ3MpCj4gK3sKPiArCXUzMiBzZWN1cml0eTsKPiArCXUzMiAqY3M7 Cj4gKwo+ICsJc2VjdXJpdHkgPSBNSV9CQVRDSF9QUEdUVF9IU1cgfCBNSV9CQVRDSF9OT05fU0VD VVJFX0hTVzsKPiArCWlmIChkaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKQo+ ICsJCXNlY3VyaXR5ID0gMDsKPiArCj4gKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDIpOwo+ ICsJaWYgKElTX0VSUihjcykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICsKPiArCWNzID0g X19nZW42X2VtaXRfYmJfc3RhcnQoY3MsIG9mZnNldCwgc2VjdXJpdHkpOwo+ICsJaW50ZWxfcmlu Z19hZHZhbmNlKHJxLCBjcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgZ2VuN19zdGFsbF9jcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiArewo+ICsJdTMyICpj czsKPiArCj4gKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQpOwo+ICsJaWYgKElTX0VSUihj cykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICsKPiArCSpjcysrID0gR0ZYX09QX1BJUEVf Q09OVFJPTCg0KTsKPiArCSpjcysrID0gUElQRV9DT05UUk9MX0NTX1NUQUxMIHwgUElQRV9DT05U Uk9MX1NUQUxMX0FUX1NDT1JFQk9BUkQ7Cj4gKwkqY3MrKyA9IDA7Cj4gKwkqY3MrKyA9IDA7Cj4g KwlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiAraW50IGdlbjdfZW1pdF9mbHVzaF9yY3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBt b2RlKQo+ICt7Cj4gKwl1MzIgc2NyYXRjaF9hZGRyID0KPiArCQlpbnRlbF9ndF9zY3JhdGNoX29m ZnNldChycS0+ZW5naW5lLT5ndCwKPiArCQkJCQlJTlRFTF9HVF9TQ1JBVENIX0ZJRUxEX1JFTkRF Ul9GTFVTSCk7Cj4gKwl1MzIgKmNzLCBmbGFncyA9IDA7Cj4gKwo+ICsJLyoKPiArCSAqIEVuc3Vy ZSB0aGF0IGFueSBmb2xsb3dpbmcgc2Vxbm8gd3JpdGVzIG9ubHkgaGFwcGVuIHdoZW4gdGhlIHJl bmRlcgo+ICsJICogY2FjaGUgaXMgaW5kZWVkIGZsdXNoZWQuCj4gKwkgKgo+ICsJICogV29ya2Fy b3VuZDogNHRoIFBJUEVfQ09OVFJPTCBjb21tYW5kIChleGNlcHQgdGhlIG9uZXMgd2l0aCBvbmx5 Cj4gKwkgKiByZWFkLWNhY2hlIGludmFsaWRhdGUgYml0cyBzZXQpIG11c3QgaGF2ZSB0aGUgQ1Nf U1RBTEwgYml0IHNldC4gV2UKPiArCSAqIGRvbid0IHRyeSB0byBiZSBjbGV2ZXIgYW5kIGp1c3Qg c2V0IGl0IHVuY29uZGl0aW9uYWxseS4KPiArCSAqLwo+ICsJZmxhZ3MgfD0gUElQRV9DT05UUk9M X0NTX1NUQUxMOwo+ICsKPiArCS8qCj4gKwkgKiBDU19TVEFMTCBzdWdnZXN0cyBhdCBsZWFzdCBh IHBvc3Qtc3luYyB3cml0ZS4KPiArCSAqLwo+ICsJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dS SVRFOwo+ICsJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCOwo+ICsKPiArCS8q Cj4gKwkgKiBKdXN0IGZsdXNoIGV2ZXJ5dGhpbmcuICBFeHBlcmltZW50cyBoYXZlIHNob3duIHRo YXQgcmVkdWNpbmcgdGhlCj4gKwkgKiBudW1iZXIgb2YgYml0cyBiYXNlZCBvbiB0aGUgd3JpdGUg ZG9tYWlucyBoYXMgbGl0dGxlIHBlcmZvcm1hbmNlCj4gKwkgKiBpbXBhY3QuCj4gKwkgKi8KPiAr CWlmIChtb2RlICYgRU1JVF9GTFVTSCkgewo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9SRU5E RVJfVEFSR0VUX0NBQ0hFX0ZMVVNIOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9D QUNIRV9GTFVTSDsKPiArCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFOwo+ ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9GTFVTSF9FTkFCTEU7Cj4gKwl9Cj4gKwlpZiAobW9k ZSAmIEVNSVRfSU5WQUxJREFURSkgewo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5W QUxJREFURTsKPiArCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FDSEVfSU5W QUxJREFURTsKPiArCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVEVYVFVSRV9DQUNIRV9JTlZBTElE QVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9WRl9DQUNIRV9JTlZBTElEQVRFOwo+ICsJ CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DT05TVF9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9TVEFURV9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJ UEVfQ09OVFJPTF9NRURJQV9TVEFURV9DTEVBUjsKPiArCj4gKwkJLyoKPiArCQkgKiBXb3JrYXJv dW5kOiB3ZSBtdXN0IGlzc3VlIGEgcGlwZV9jb250cm9sIHdpdGggQ1Mtc3RhbGwgYml0Cj4gKwkJ ICogc2V0IGJlZm9yZSBhIHBpcGVfY29udHJvbCBjb21tYW5kIHRoYXQgaGFzIHRoZSBzdGF0ZSBj YWNoZQo+ICsJCSAqIGludmFsaWRhdGUgYml0IHNldC4KPiArCQkgKi8KPiArCQlnZW43X3N0YWxs X2NzKHJxKTsKPiArCX0KPiArCj4gKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQpOwo+ICsJ aWYgKElTX0VSUihjcykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICsKPiArCSpjcysrID0g R0ZYX09QX1BJUEVfQ09OVFJPTCg0KTsKPiArCSpjcysrID0gZmxhZ3M7Cj4gKwkqY3MrKyA9IHNj cmF0Y2hfYWRkcjsKPiArCSpjcysrID0gMDsKPiArCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3Mp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt1MzIgKmdlbjdfZW1pdF9icmVhZGNydW1i X3JjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyICpjcykKPiArewo+ICsJKmNzKysgPSBH RlhfT1BfUElQRV9DT05UUk9MKDQpOwo+ICsJKmNzKysgPSAoUElQRV9DT05UUk9MX1JFTkRFUl9U QVJHRVRfQ0FDSEVfRkxVU0ggfAo+ICsJCSBQSVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0gg fAo+ICsJCSBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFIHwKPiArCQkgUElQRV9DT05UUk9M X0ZMVVNIX0VOQUJMRSB8Cj4gKwkJIFBJUEVfQ09OVFJPTF9RV19XUklURSB8Cj4gKwkJIFBJUEVf Q09OVFJPTF9HTE9CQUxfR1RUX0lWQiB8Cj4gKwkJIFBJUEVfQ09OVFJPTF9DU19TVEFMTCk7Cj4g KwkqY3MrKyA9IGk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxpbmUocnEpLT5od3NwX29mZnNldDsK PiArCSpjcysrID0gcnEtPmZlbmNlLnNlcW5vOwo+ICsKPiArCSpjcysrID0gTUlfVVNFUl9JTlRF UlJVUFQ7Cj4gKwkqY3MrKyA9IE1JX05PT1A7Cj4gKwo+ICsJcnEtPnRhaWwgPSBpbnRlbF9yaW5n X29mZnNldChycSwgY3MpOwo+ICsJYXNzZXJ0X3JpbmdfdGFpbF92YWxpZChycS0+cmluZywgcnEt PnRhaWwpOwo+ICsKPiArCXJldHVybiBjczsKPiArfQo+ICsKPiArdTMyICpnZW42X2VtaXRfYnJl YWRjcnVtYl94Y3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpCj4gK3sKPiArCUdF TV9CVUdfT04oaTkxNV9yZXF1ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3BfZ2d0dCAhPSBy cS0+ZW5naW5lLT5zdGF0dXNfcGFnZS52bWEpOwo+ICsJR0VNX0JVR19PTihvZmZzZXRfaW5fcGFn ZShpOTE1X3JlcXVlc3RfYWN0aXZlX3RpbWVsaW5lKHJxKS0+aHdzcF9vZmZzZXQpICE9IEk5MTVf R0VNX0hXU19TRVFOT19BRERSKTsKPiArCj4gKwkqY3MrKyA9IE1JX0ZMVVNIX0RXIHwgTUlfRkxV U0hfRFdfT1BfU1RPUkVEVyB8IE1JX0ZMVVNIX0RXX1NUT1JFX0lOREVYOwo+ICsJKmNzKysgPSBJ OTE1X0dFTV9IV1NfU0VRTk9fQUREUiB8IE1JX0ZMVVNIX0RXX1VTRV9HVFQ7Cj4gKwkqY3MrKyA9 IHJxLT5mZW5jZS5zZXFubzsKPiArCj4gKwkqY3MrKyA9IE1JX1VTRVJfSU5URVJSVVBUOwo+ICsK PiArCXJxLT50YWlsID0gaW50ZWxfcmluZ19vZmZzZXQocnEsIGNzKTsKPiArCWFzc2VydF9yaW5n X3RhaWxfdmFsaWQocnEtPnJpbmcsIHJxLT50YWlsKTsKPiArCj4gKwlyZXR1cm4gY3M7Cj4gK30K PiArCj4gKyNkZWZpbmUgR0VON19YQ1NfV0EgMzIKPiArdTMyICpnZW43X2VtaXRfYnJlYWRjcnVt Yl94Y3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpCj4gK3sKPiArCWludCBpOwo+ ICsKPiArCUdFTV9CVUdfT04oaTkxNV9yZXF1ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3Bf Z2d0dCAhPSBycS0+ZW5naW5lLT5zdGF0dXNfcGFnZS52bWEpOwo+ICsJR0VNX0JVR19PTihvZmZz ZXRfaW5fcGFnZShpOTE1X3JlcXVlc3RfYWN0aXZlX3RpbWVsaW5lKHJxKS0+aHdzcF9vZmZzZXQp ICE9IEk5MTVfR0VNX0hXU19TRVFOT19BRERSKTsKPiArCj4gKwkqY3MrKyA9IE1JX0ZMVVNIX0RX IHwgTUlfSU5WQUxJREFURV9UTEIgfAo+ICsJCU1JX0ZMVVNIX0RXX09QX1NUT1JFRFcgfCBNSV9G TFVTSF9EV19TVE9SRV9JTkRFWDsKPiArCSpjcysrID0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFIg fCBNSV9GTFVTSF9EV19VU0VfR1RUOwo+ICsJKmNzKysgPSBycS0+ZmVuY2Uuc2Vxbm87Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IEdFTjdfWENTX1dBOyBpKyspIHsKPiArCQkqY3MrKyA9IE1JX1NU T1JFX0RXT1JEX0lOREVYOwo+ICsJCSpjcysrID0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFI7Cj4g KwkJKmNzKysgPSBycS0+ZmVuY2Uuc2Vxbm87Cj4gKwl9Cj4gKwo+ICsJKmNzKysgPSBNSV9GTFVT SF9EVzsKPiArCSpjcysrID0gMDsKPiArCSpjcysrID0gMDsKPiArCj4gKwkqY3MrKyA9IE1JX1VT RVJfSU5URVJSVVBUOwo+ICsJKmNzKysgPSBNSV9OT09QOwo+ICsKPiArCXJxLT50YWlsID0gaW50 ZWxfcmluZ19vZmZzZXQocnEsIGNzKTsKPiArCWFzc2VydF9yaW5nX3RhaWxfdmFsaWQocnEtPnJp bmcsIHJxLT50YWlsKTsKPiArCj4gKwlyZXR1cm4gY3M7Cj4gK30KPiArI3VuZGVmIEdFTjdfWENT X1dBCj4gKwo+ICt2b2lkIGdlbjZfaXJxX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4gK3sKPiArCUVOR0lORV9XUklURShlbmdpbmUsIFJJTkdfSU1SLAo+ICsJCSAgICAg fihlbmdpbmUtPmlycV9lbmFibGVfbWFzayB8IGVuZ2luZS0+aXJxX2tlZXBfbWFzaykpOwo+ICsK PiArCS8qIEZsdXNoL2RlbGF5IHRvIGVuc3VyZSB0aGUgUklOR19JTVIgaXMgYWN0aXZlIGJlZm9y ZSB0aGUgR1QgSU1SICovCj4gKwlFTkdJTkVfUE9TVElOR19SRUFEKGVuZ2luZSwgUklOR19JTVIp Owo+ICsKPiArCWdlbjVfZ3RfZW5hYmxlX2lycShlbmdpbmUtPmd0LCBlbmdpbmUtPmlycV9lbmFi bGVfbWFzayk7Cj4gK30KPiArCj4gK3ZvaWQgZ2VuNl9pcnFfZGlzYWJsZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCUVOR0lORV9XUklURShlbmdpbmUsIFJJTkdfSU1S LCB+ZW5naW5lLT5pcnFfa2VlcF9tYXNrKTsKPiArCWdlbjVfZ3RfZGlzYWJsZV9pcnEoZW5naW5l LT5ndCwgZW5naW5lLT5pcnFfZW5hYmxlX21hc2spOwo+ICt9Cj4gKwo+ICt2b2lkIGhzd19pcnFf ZW5hYmxlX3ZlY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlFTkdJ TkVfV1JJVEUoZW5naW5lLCBSSU5HX0lNUiwgfmVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrKTsKPiAr Cj4gKwkvKiBGbHVzaC9kZWxheSB0byBlbnN1cmUgdGhlIFJJTkdfSU1SIGlzIGFjdGl2ZSBiZWZv cmUgdGhlIEdUIElNUiAqLwo+ICsJRU5HSU5FX1BPU1RJTkdfUkVBRChlbmdpbmUsIFJJTkdfSU1S KTsKPiArCj4gKwlnZW42X2d0X3BtX3VubWFza19pcnEoZW5naW5lLT5ndCwgZW5naW5lLT5pcnFf ZW5hYmxlX21hc2spOwo+ICt9Cj4gKwo+ICt2b2lkIGhzd19pcnFfZGlzYWJsZV92ZWNzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJRU5HSU5FX1dSSVRFKGVuZ2luZSwg UklOR19JTVIsIH4wKTsKPiArCWdlbjZfZ3RfcG1fbWFza19pcnEoZW5naW5lLT5ndCwgZW5naW5l LT5pcnFfZW5hYmxlX21hc2spOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2dlbjZfZW5naW5lX2NzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW42X2Vu Z2luZV9jcy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjc2 YzZiYzlmM2JkZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9nZW42X2VuZ2luZV9jcy5oCj4gQEAgLTAsMCArMSwzOSBAQAo+ICsvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogTUlUICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENv cnBvcmF0aW9uCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX0dFTjZfRU5HSU5FX0NTX0hfXwo+ICsj ZGVmaW5lIF9fR0VONl9FTkdJTkVfQ1NfSF9fCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4KPiArCj4gKyNpbmNsdWRlICJpbnRlbF9ncHVfY29tbWFuZHMuaCIKPiArCj4gK3N0cnVjdCBp OTE1X3JlcXVlc3Q7Cj4gK3N0cnVjdCBpbnRlbF9lbmdpbmVfY3M7Cj4gKwo+ICtpbnQgZ2VuNl9l bWl0X2ZsdXNoX3JjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUpOwo+ICtpbnQg Z2VuNl9lbWl0X2ZsdXNoX3ZjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUpOwo+ ICtpbnQgZ2VuNl9lbWl0X2ZsdXNoX3hjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1v ZGUpOwo+ICt1MzIgKmdlbjZfZW1pdF9icmVhZGNydW1iX3JjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSwgdTMyICpjcyk7Cj4gK3UzMiAqZ2VuNl9lbWl0X2JyZWFkY3J1bWJfeGNzKHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNzKTsKPiArCj4gK2ludCBnZW43X2VtaXRfZmx1c2hfcmNz KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSk7Cj4gK3UzMiAqZ2VuN19lbWl0X2Jy ZWFkY3J1bWJfcmNzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNzKTsKPiArdTMyICpn ZW43X2VtaXRfYnJlYWRjcnVtYl94Y3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3Mp Owo+ICsKPiAraW50IGdlbjZfZW1pdF9iYl9zdGFydChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwK PiArCQkgICAgICAgdTY0IG9mZnNldCwgdTMyIGxlbiwKPiArCQkgICAgICAgdW5zaWduZWQgaW50 IGRpc3BhdGNoX2ZsYWdzKTsKPiAraW50IGhzd19lbWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxLAo+ICsJCSAgICAgIHU2NCBvZmZzZXQsIHUzMiBsZW4sCj4gKwkJICAgICAgdW5z aWduZWQgaW50IGRpc3BhdGNoX2ZsYWdzKTsKPiArCj4gK3ZvaWQgZ2VuNl9pcnFfZW5hYmxlKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gK3ZvaWQgZ2VuNl9pcnFfZGlzYWJsZShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICsKPiArdm9pZCBoc3dfaXJxX2VuYWJs ZV92ZWNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gK3ZvaWQgaHN3X2lycV9k aXNhYmxlX3ZlY3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArCj4gKyNlbmRp ZiAvKiBfX0dFTjZfRU5HSU5FX0NTX0hfXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2VuZ2luZS5oCj4gaW5kZXggOWJmNmQ0OTg5OTY4Li43OTE4OTdmOGQ4NDcgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lLmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaAo+IEBAIC0xODcsNyArMTg3LDYgQEAgaW50 ZWxfd3JpdGVfc3RhdHVzX3BhZ2Uoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpbnQg cmVnLCB1MzIgdmFsdWUpCj4gICNkZWZpbmUgSTkxNV9HRU1fSFdTX1NFUU5PCQkweDQwCj4gICNk ZWZpbmUgSTkxNV9HRU1fSFdTX1NFUU5PX0FERFIJCShJOTE1X0dFTV9IV1NfU0VRTk8gKiBzaXpl b2YodTMyKSkKPiAgI2RlZmluZSBJOTE1X0dFTV9IV1NfU0NSQVRDSAkJMHg4MAo+IC0jZGVmaW5l IEk5MTVfR0VNX0hXU19TQ1JBVENIX0FERFIJKEk5MTVfR0VNX0hXU19TQ1JBVENIICogc2l6ZW9m KHUzMikpCj4gIAo+ICAjZGVmaW5lIEk5MTVfSFdTX0NTQl9CVUYwX0lOREVYCQkweDEwCj4gICNk ZWZpbmUgSTkxNV9IV1NfQ1NCX1dSSVRFX0lOREVYCTB4MWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYwo+IGluZGV4IGNhNzI4NmU1ODQwOS4u OTY4ODFjZDhiMTdiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X3Jpbmdfc3VibWlzc2lvbi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf cmluZ19zdWJtaXNzaW9uLmMKPiBAQCAtMjcsMjEgKzI3LDE1IEBACj4gICAqCj4gICAqLwo+ICAK PiAtI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KPiAtCj4gLSNpbmNsdWRlICJnZW0vaTkxNV9nZW1f Y29udGV4dC5oIgo+IC0KPiArI2luY2x1ZGUgImdlbjJfZW5naW5lX2NzLmgiCj4gKyNpbmNsdWRl ICJnZW42X2VuZ2luZV9jcy5oIgo+ICAjaW5jbHVkZSAiZ2VuNl9wcGd0dC5oIgo+ICAjaW5jbHVk ZSAiZ2VuN19yZW5kZXJjbGVhci5oIgo+ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAtI2luY2x1 ZGUgImk5MTVfdHJhY2UuaCIKPiAgI2luY2x1ZGUgImludGVsX2NvbnRleHQuaCIKPiAgI2luY2x1 ZGUgImludGVsX2d0LmgiCj4gLSNpbmNsdWRlICJpbnRlbF9ndF9pcnEuaCIKPiAtI2luY2x1ZGUg ImludGVsX2d0X3BtX2lycS5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfcmVzZXQuaCIKPiAgI2luY2x1 ZGUgImludGVsX3JpbmcuaCIKPiAtI2luY2x1ZGUgImludGVsX3dvcmthcm91bmRzLmgiCj4gICNp bmNsdWRlICJzaG1lbV91dGlscy5oIgo+ICAKPiAgLyogUm91Z2ggZXN0aW1hdGUgb2YgdGhlIHR5 cGljYWwgcmVxdWVzdCBzaXplLCBwZXJmb3JtaW5nIGEgZmx1c2gsCj4gQEAgLTQ5LDQzNiArNDMs NiBAQAo+ICAgKi8KPiAgI2RlZmluZSBMRUdBQ1lfUkVRVUVTVF9TSVpFIDIwMAo+ICAKPiAtc3Rh dGljIGludAo+IC1nZW4yX3JlbmRlcl9yaW5nX2ZsdXNoKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx LCB1MzIgbW9kZSkKPiAtewo+IC0JdW5zaWduZWQgaW50IG51bV9zdG9yZV9kdzsKPiAtCXUzMiBj bWQsICpjczsKPiAtCj4gLQljbWQgPSBNSV9GTFVTSDsKPiAtCW51bV9zdG9yZV9kdyA9IDA7Cj4g LQlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkKPiAtCQljbWQgfD0gTUlfUkVBRF9GTFVTSDsK PiAtCWlmIChtb2RlICYgRU1JVF9GTFVTSCkKPiAtCQludW1fc3RvcmVfZHcgPSA0Owo+IC0KPiAt CWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgMiArIDMgKiBudW1fc3RvcmVfZHcpOwo+IC0JaWYg KElTX0VSUihjcykpCj4gLQkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+IC0KPiAtCSpjcysrID0gY21k Owo+IC0Jd2hpbGUgKG51bV9zdG9yZV9kdy0tKSB7Cj4gLQkJKmNzKysgPSBNSV9TVE9SRV9EV09S RF9JTU0gfCBNSV9NRU1fVklSVFVBTDsKPiAtCQkqY3MrKyA9IGludGVsX2d0X3NjcmF0Y2hfb2Zm c2V0KHJxLT5lbmdpbmUtPmd0LAo+IC0JCQkJCQlJTlRFTF9HVF9TQ1JBVENIX0ZJRUxEX0RFRkFV TFQpOwo+IC0JCSpjcysrID0gMDsKPiAtCX0KPiAtCSpjcysrID0gTUlfRkxVU0ggfCBNSV9OT19X UklURV9GTFVTSDsKPiAtCj4gLQlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKPiAtCj4gLQly ZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludAo+IC1nZW40X3JlbmRlcl9yaW5nX2ZsdXNo KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSkKPiAtewo+IC0JdTMyIGNtZCwgKmNz Owo+IC0JaW50IGk7Cj4gLQo+IC0JLyoKPiAtCSAqIHJlYWQvd3JpdGUgY2FjaGVzOgo+IC0JICoK PiAtCSAqIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgaXMgYWx3YXlzIGludmFsaWRhdGVkLCBidXQg aXMKPiAtCSAqIG9ubHkgZmx1c2hlZCBpZiBNSV9OT19XUklURV9GTFVTSCBpcyB1bnNldC4gIE9u IDk2NSwgaXQgaXMKPiAtCSAqIGFsc28gZmx1c2hlZCBhdCAyZCB2ZXJzdXMgM2QgcGlwZWxpbmUg c3dpdGNoZXMuCj4gLQkgKgo+IC0JICogcmVhZC1vbmx5IGNhY2hlczoKPiAtCSAqCj4gLQkgKiBJ OTE1X0dFTV9ET01BSU5fU0FNUExFUiBpcyBmbHVzaGVkIG9uIHByZS05NjUgaWYKPiAtCSAqIE1J X1JFQURfRkxVU0ggaXMgc2V0LCBhbmQgaXMgYWx3YXlzIGZsdXNoZWQgb24gOTY1Lgo+IC0JICoK PiAtCSAqIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EIG1heSBub3QgZXhpc3Q/Cj4gLQkgKgo+IC0J ICogSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCB3aGljaCBleGlzdHMgb24gOTY1LCBpcwo+ IC0JICogaW52YWxpZGF0ZWQgd2hlbiBNSV9FWEVfRkxVU0ggaXMgc2V0Lgo+IC0JICoKPiAtCSAq IEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIHdoaWNoIGV4aXN0cyBvbiA5NjUsIGlzCj4gLQkgKiBp bnZhbGlkYXRlZCB3aXRoIGV2ZXJ5IE1JX0ZMVVNILgo+IC0JICoKPiAtCSAqIFRMQnM6Cj4gLQkg Kgo+IC0JICogT24gOTY1LCBUTEJzIGFzc29jaWF0ZWQgd2l0aCBJOTE1X0dFTV9ET01BSU5fQ09N TUFORAo+IC0JICogYW5kIEk5MTVfR0VNX0RPTUFJTl9DUFUgaW4gYXJlIGludmFsaWRhdGVkIGF0 IFBURSB3cml0ZSBhbmQKPiAtCSAqIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgYW5kIEk5MTVfR0VN X0RPTUFJTl9TQU1QTEVSCj4gLQkgKiBhcmUgZmx1c2hlZCBhdCBhbnkgTUlfRkxVU0guCj4gLQkg Ki8KPiAtCj4gLQljbWQgPSBNSV9GTFVTSDsKPiAtCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRF KSB7Cj4gLQkJY21kIHw9IE1JX0VYRV9GTFVTSDsKPiAtCQlpZiAoSVNfRzRYKHJxLT5pOTE1KSB8 fCBJU19HRU4ocnEtPmk5MTUsIDUpKQo+IC0JCQljbWQgfD0gTUlfSU5WQUxJREFURV9JU1A7Cj4g LQl9Cj4gLQo+IC0JaSA9IDI7Cj4gLQlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkKPiAtCQlp ICs9IDIwOwo+IC0KPiAtCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgaSk7Cj4gLQlpZiAoSVNf RVJSKGNzKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gLQo+IC0JKmNzKysgPSBjbWQ7Cj4g LQo+IC0JLyoKPiAtCSAqIEEgcmFuZG9tIGRlbGF5IHRvIGxldCB0aGUgQ1MgaW52YWxpZGF0ZSB0 YWtlIGVmZmVjdD8gV2l0aG91dCB0aGlzCj4gLQkgKiBkZWxheSwgdGhlIEdQVSByZWxvY2F0aW9u IHBhdGggZmFpbHMgYXMgdGhlIENTIGRvZXMgbm90IHNlZQo+IC0JICogdGhlIHVwZGF0ZWQgY29u dGVudHMuIEp1c3QgYXMgaW1wb3J0YW50LCBpZiB3ZSBhcHBseSB0aGUgZmx1c2hlcwo+IC0JICog dG8gdGhlIEVNSVRfRkxVU0ggYnJhbmNoIChpLmUuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZWxv Y2F0aW9uCj4gLQkgKiB3cml0ZSBhbmQgYmVmb3JlIHRoZSBpbnZhbGlkYXRlIG9uIHRoZSBuZXh0 IGJhdGNoKSwgdGhlIHJlbG9jYXRpb25zCj4gLQkgKiBzdGlsbCBmYWlsLiBUaGlzIGltcGxpZXMg dGhhdCBpcyBhIGRlbGF5IGZvbGxvd2luZyBpbnZhbGlkYXRpb24KPiAtCSAqIHRoYXQgaXMgcmVx dWlyZWQgdG8gcmVzZXQgdGhlIGNhY2hlcyBhcyBvcHBvc2VkIHRvIGEgZGVsYXkgdG8KPiAtCSAq IGVuc3VyZSB0aGUgbWVtb3J5IGlzIHdyaXR0ZW4uCj4gLQkgKi8KPiAtCWlmIChtb2RlICYgRU1J VF9JTlZBTElEQVRFKSB7Cj4gLQkJKmNzKysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDQpIHwgUElQ RV9DT05UUk9MX1FXX1dSSVRFOwo+IC0JCSpjcysrID0gaW50ZWxfZ3Rfc2NyYXRjaF9vZmZzZXQo cnEtPmVuZ2luZS0+Z3QsCj4gLQkJCQkJCUlOVEVMX0dUX1NDUkFUQ0hfRklFTERfREVGQVVMVCkg fAo+IC0JCQlQSVBFX0NPTlRST0xfR0xPQkFMX0dUVDsKPiAtCQkqY3MrKyA9IDA7Cj4gLQkJKmNz KysgPSAwOwo+IC0KPiAtCQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykKPiAtCQkJKmNzKysgPSBN SV9GTFVTSDsKPiAtCj4gLQkJKmNzKysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDQpIHwgUElQRV9D T05UUk9MX1FXX1dSSVRFOwo+IC0JCSpjcysrID0gaW50ZWxfZ3Rfc2NyYXRjaF9vZmZzZXQocnEt PmVuZ2luZS0+Z3QsCj4gLQkJCQkJCUlOVEVMX0dUX1NDUkFUQ0hfRklFTERfREVGQVVMVCkgfAo+ IC0JCQlQSVBFX0NPTlRST0xfR0xPQkFMX0dUVDsKPiAtCQkqY3MrKyA9IDA7Cj4gLQkJKmNzKysg PSAwOwo+IC0JfQo+IC0KPiAtCSpjcysrID0gY21kOwo+IC0KPiAtCWludGVsX3JpbmdfYWR2YW5j ZShycSwgY3MpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiBFbWl0cyBh IFBJUEVfQ09OVFJPTCB3aXRoIGEgbm9uLXplcm8gcG9zdC1zeW5jIG9wZXJhdGlvbiwgZm9yCj4g LSAqIGltcGxlbWVudGluZyB0d28gd29ya2Fyb3VuZHMgb24gZ2VuNi4gIEZyb20gc2VjdGlvbiAx LjQuNy4xCj4gLSAqICJQSVBFX0NPTlRST0wiIG9mIHRoZSBTYW5keSBCcmlkZ2UgUFJNIHZvbHVt ZSAyIHBhcnQgMToKPiAtICoKPiAtICogW0RldlNOQi1DK3tXL0F9XSBCZWZvcmUgYW55IGRlcHRo IHN0YWxsIGZsdXNoIChpbmNsdWRpbmcgdGhvc2UKPiAtICogcHJvZHVjZWQgYnkgbm9uLXBpcGVs aW5lZCBzdGF0ZSBjb21tYW5kcyksIHNvZnR3YXJlIG5lZWRzIHRvIGZpcnN0Cj4gLSAqIHNlbmQg YSBQSVBFX0NPTlRST0wgd2l0aCBubyBiaXRzIHNldCBleGNlcHQgUG9zdC1TeW5jIE9wZXJhdGlv biAhPQo+IC0gKiAwLgo+IC0gKgo+IC0gKiBbRGV2LVNOQntXL0F9XTogQmVmb3JlIGEgUElQRV9D T05UUk9MIHdpdGggV3JpdGUgQ2FjaGUgRmx1c2ggRW5hYmxlCj4gLSAqID0xLCBhIFBJUEVfQ09O VFJPTCB3aXRoIGFueSBub24temVybyBwb3N0LXN5bmMtb3AgaXMgcmVxdWlyZWQuCj4gLSAqCj4g LSAqIEFuZCB0aGUgd29ya2Fyb3VuZCBmb3IgdGhlc2UgdHdvIHJlcXVpcmVzIHRoaXMgd29ya2Fy b3VuZCBmaXJzdDoKPiAtICoKPiAtICogW0Rldi1TTkJ7Vy9BfV06IFBpcGUtY29udHJvbCB3aXRo IENTLXN0YWxsIGJpdCBzZXQgbXVzdCBiZSBzZW50Cj4gLSAqIEJFRk9SRSB0aGUgcGlwZS1jb250 cm9sIHdpdGggYSBwb3N0LXN5bmMgb3AgYW5kIG5vIHdyaXRlLWNhY2hlCj4gLSAqIGZsdXNoZXMu Cj4gLSAqCj4gLSAqIEFuZCB0aGlzIGxhc3Qgd29ya2Fyb3VuZCBpcyB0cmlja3kgYmVjYXVzZSBv ZiB0aGUgcmVxdWlyZW1lbnRzIG9uCj4gLSAqIHRoYXQgYml0LiAgRnJvbSBzZWN0aW9uIDEuNC43 LjIuMyAiU3RhbGwiIG9mIHRoZSBTYW5keSBCcmlkZ2UgUFJNCj4gLSAqIHZvbHVtZSAyIHBhcnQg MToKPiAtICoKPiAtICogICAgICIxIG9mIHRoZSBmb2xsb3dpbmcgbXVzdCBhbHNvIGJlIHNldDoK PiAtICogICAgICAtIFJlbmRlciBUYXJnZXQgQ2FjaGUgRmx1c2ggRW5hYmxlIChbMTJdIG9mIERX MSkKPiAtICogICAgICAtIERlcHRoIENhY2hlIEZsdXNoIEVuYWJsZSAoWzBdIG9mIERXMSkKPiAt ICogICAgICAtIFN0YWxsIGF0IFBpeGVsIFNjb3JlYm9hcmQgKFsxXSBvZiBEVzEpCj4gLSAqICAg ICAgLSBEZXB0aCBTdGFsbCAoWzEzXSBvZiBEVzEpCj4gLSAqICAgICAgLSBQb3N0LVN5bmMgT3Bl cmF0aW9uIChbMTNdIG9mIERXMSkKPiAtICogICAgICAtIE5vdGlmeSBFbmFibGUgKFs4XSBvZiBE VzEpIgo+IC0gKgo+IC0gKiBUaGUgY2FjaGUgZmx1c2hlcyByZXF1aXJlIHRoZSB3b3JrYXJvdW5k IGZsdXNoIHRoYXQgdHJpZ2dlcmVkIHRoaXMKPiAtICogb25lLCBzbyB3ZSBjYW4ndCB1c2UgaXQu ICBEZXB0aCBzdGFsbCB3b3VsZCB0cmlnZ2VyIHRoZSBzYW1lLgo+IC0gKiBQb3N0LXN5bmMgbm9u emVybyBpcyB3aGF0IHRyaWdnZXJlZCB0aGlzIHNlY29uZCB3b3JrYXJvdW5kLCBzbyB3ZQo+IC0g KiBjYW4ndCB1c2UgdGhhdCBvbmUgZWl0aGVyLiAgTm90aWZ5IGVuYWJsZSBpcyBJUlFzLCB3aGlj aCBhcmVuJ3QKPiAtICogcmVhbGx5IG91ciBidXNpbmVzcy4gIFRoYXQgbGVhdmVzIG9ubHkgc3Rh bGwgYXQgc2NvcmVib2FyZC4KPiAtICovCj4gLXN0YXRpYyBpbnQKPiAtZ2VuNl9lbWl0X3Bvc3Rf c3luY19ub256ZXJvX2ZsdXNoKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+IC17Cj4gLQl1MzIg c2NyYXRjaF9hZGRyID0KPiAtCQlpbnRlbF9ndF9zY3JhdGNoX29mZnNldChycS0+ZW5naW5lLT5n dCwKPiAtCQkJCQlJTlRFTF9HVF9TQ1JBVENIX0ZJRUxEX1JFTkRFUl9GTFVTSCk7Cj4gLQl1MzIg KmNzOwo+IC0KPiAtCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNik7Cj4gLQlpZiAoSVNfRVJS KGNzKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gLQo+IC0JKmNzKysgPSBHRlhfT1BfUElQ RV9DT05UUk9MKDUpOwo+IC0JKmNzKysgPSBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfCBQSVBFX0NP TlRST0xfU1RBTExfQVRfU0NPUkVCT0FSRDsKPiAtCSpjcysrID0gc2NyYXRjaF9hZGRyIHwgUElQ RV9DT05UUk9MX0dMT0JBTF9HVFQ7Cj4gLQkqY3MrKyA9IDA7IC8qIGxvdyBkd29yZCAqLwo+IC0J KmNzKysgPSAwOyAvKiBoaWdoIGR3b3JkICovCj4gLQkqY3MrKyA9IE1JX05PT1A7Cj4gLQlpbnRl bF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKPiAtCj4gLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEs IDYpOwo+IC0JaWYgKElTX0VSUihjcykpCj4gLQkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+IC0KPiAt CSpjcysrID0gR0ZYX09QX1BJUEVfQ09OVFJPTCg1KTsKPiAtCSpjcysrID0gUElQRV9DT05UUk9M X1FXX1dSSVRFOwo+IC0JKmNzKysgPSBzY3JhdGNoX2FkZHIgfCBQSVBFX0NPTlRST0xfR0xPQkFM X0dUVDsKPiAtCSpjcysrID0gMDsKPiAtCSpjcysrID0gMDsKPiAtCSpjcysrID0gTUlfTk9PUDsK PiAtCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW50Cj4gLWdlbjZfcmVuZGVyX3JpbmdfZmx1c2goc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEsIHUzMiBtb2RlKQo+IC17Cj4gLQl1MzIgc2NyYXRjaF9hZGRyID0KPiAtCQlpbnRl bF9ndF9zY3JhdGNoX29mZnNldChycS0+ZW5naW5lLT5ndCwKPiAtCQkJCQlJTlRFTF9HVF9TQ1JB VENIX0ZJRUxEX1JFTkRFUl9GTFVTSCk7Cj4gLQl1MzIgKmNzLCBmbGFncyA9IDA7Cj4gLQlpbnQg cmV0Owo+IC0KPiAtCS8qIEZvcmNlIFNOQiB3b3JrYXJvdW5kcyBmb3IgUElQRV9DT05UUk9MIGZs dXNoZXMgKi8KPiAtCXJldCA9IGdlbjZfZW1pdF9wb3N0X3N5bmNfbm9uemVyb19mbHVzaChycSk7 Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JLyogSnVzdCBmbHVzaCBldmVy eXRoaW5nLiAgRXhwZXJpbWVudHMgaGF2ZSBzaG93biB0aGF0IHJlZHVjaW5nIHRoZQo+IC0JICog bnVtYmVyIG9mIGJpdHMgYmFzZWQgb24gdGhlIHdyaXRlIGRvbWFpbnMgaGFzIGxpdHRsZSBwZXJm b3JtYW5jZQo+IC0JICogaW1wYWN0Lgo+IC0JICovCj4gLQlpZiAobW9kZSAmIEVNSVRfRkxVU0gp IHsKPiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfUkVOREVSX1RBUkdFVF9DQUNIRV9GTFVTSDsK PiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0g7Cj4gLQkJLyoKPiAt CQkgKiBFbnN1cmUgdGhhdCBhbnkgZm9sbG93aW5nIHNlcW5vIHdyaXRlcyBvbmx5IGhhcHBlbgo+ IC0JCSAqIHdoZW4gdGhlIHJlbmRlciBjYWNoZSBpcyBpbmRlZWQgZmx1c2hlZC4KPiAtCQkgKi8K PiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ1NfU1RBTEw7Cj4gLQl9Cj4gLQlpZiAobW9kZSAm IEVNSVRfSU5WQUxJREFURSkgewo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJ REFURTsKPiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FDSEVfSU5WQUxJ REFURTsKPiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVEVYVFVSRV9DQUNIRV9JTlZBTElEQVRF Owo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9WRl9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZs YWdzIHw9IFBJUEVfQ09OVFJPTF9DT05TVF9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9 IFBJUEVfQ09OVFJPTF9TVEFURV9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCS8qCj4gLQkJICogVExC IGludmFsaWRhdGUgcmVxdWlyZXMgYSBwb3N0LXN5bmMgd3JpdGUuCj4gLQkJICovCj4gLQkJZmxh Z3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFIHwgUElQRV9DT05UUk9MX0NTX1NUQUxMOwo+IC0J fQo+IC0KPiAtCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNCk7Cj4gLQlpZiAoSVNfRVJSKGNz KSkKPiAtCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gLQo+IC0JKmNzKysgPSBHRlhfT1BfUElQRV9D T05UUk9MKDQpOwo+IC0JKmNzKysgPSBmbGFnczsKPiAtCSpjcysrID0gc2NyYXRjaF9hZGRyIHwg UElQRV9DT05UUk9MX0dMT0JBTF9HVFQ7Cj4gLQkqY3MrKyA9IDA7Cj4gLQlpbnRlbF9yaW5nX2Fk dmFuY2UocnEsIGNzKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHUzMiAq Z2VuNl9yY3NfZW1pdF9icmVhZGNydW1iKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNz KQo+IC17Cj4gLQkvKiBGaXJzdCB3ZSBkbyB0aGUgZ2VuNl9lbWl0X3Bvc3Rfc3luY19ub256ZXJv X2ZsdXNoIHcvYSAqLwo+IC0JKmNzKysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDQpOwo+IC0JKmNz KysgPSBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfCBQSVBFX0NPTlRST0xfU1RBTExfQVRfU0NPUkVC T0FSRDsKPiAtCSpjcysrID0gMDsKPiAtCSpjcysrID0gMDsKPiAtCj4gLQkqY3MrKyA9IEdGWF9P UF9QSVBFX0NPTlRST0woNCk7Cj4gLQkqY3MrKyA9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKPiAt CSpjcysrID0gaW50ZWxfZ3Rfc2NyYXRjaF9vZmZzZXQocnEtPmVuZ2luZS0+Z3QsCj4gLQkJCQkJ SU5URUxfR1RfU0NSQVRDSF9GSUVMRF9ERUZBVUxUKSB8Cj4gLQkJUElQRV9DT05UUk9MX0dMT0JB TF9HVFQ7Cj4gLQkqY3MrKyA9IDA7Cj4gLQo+IC0JLyogRmluYWxseSB3ZSBjYW4gZmx1c2ggYW5k IHdpdGggaXQgZW1pdCB0aGUgYnJlYWRjcnVtYiAqLwo+IC0JKmNzKysgPSBHRlhfT1BfUElQRV9D T05UUk9MKDQpOwo+IC0JKmNzKysgPSAoUElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVf RkxVU0ggfAo+IC0JCSBQSVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0ggfAo+IC0JCSBQSVBF X0NPTlRST0xfRENfRkxVU0hfRU5BQkxFIHwKPiAtCQkgUElQRV9DT05UUk9MX1FXX1dSSVRFIHwK PiAtCQkgUElQRV9DT05UUk9MX0NTX1NUQUxMKTsKPiAtCSpjcysrID0gaTkxNV9yZXF1ZXN0X2Fj dGl2ZV90aW1lbGluZShycSktPmh3c3Bfb2Zmc2V0IHwKPiAtCQlQSVBFX0NPTlRST0xfR0xPQkFM X0dUVDsKPiAtCSpjcysrID0gcnEtPmZlbmNlLnNlcW5vOwo+IC0KPiAtCSpjcysrID0gTUlfVVNF Ul9JTlRFUlJVUFQ7Cj4gLQkqY3MrKyA9IE1JX05PT1A7Cj4gLQo+IC0JcnEtPnRhaWwgPSBpbnRl bF9yaW5nX29mZnNldChycSwgY3MpOwo+IC0JYXNzZXJ0X3JpbmdfdGFpbF92YWxpZChycS0+cmlu ZywgcnEtPnRhaWwpOwo+IC0KPiAtCXJldHVybiBjczsKPiAtfQo+IC0KPiAtc3RhdGljIGludAo+ IC1nZW43X3JlbmRlcl9yaW5nX2NzX3N0YWxsX3dhKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ IC17Cj4gLQl1MzIgKmNzOwo+IC0KPiAtCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNCk7Cj4g LQlpZiAoSVNfRVJSKGNzKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gLQo+IC0JKmNzKysg PSBHRlhfT1BfUElQRV9DT05UUk9MKDQpOwo+IC0JKmNzKysgPSBQSVBFX0NPTlRST0xfQ1NfU1RB TEwgfCBQSVBFX0NPTlRST0xfU1RBTExfQVRfU0NPUkVCT0FSRDsKPiAtCSpjcysrID0gMDsKPiAt CSpjcysrID0gMDsKPiAtCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+IC0KPiAtCXJldHVy biAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50Cj4gLWdlbjdfcmVuZGVyX3JpbmdfZmx1c2goc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBtb2RlKQo+IC17Cj4gLQl1MzIgc2NyYXRjaF9hZGRy ID0KPiAtCQlpbnRlbF9ndF9zY3JhdGNoX29mZnNldChycS0+ZW5naW5lLT5ndCwKPiAtCQkJCQlJ TlRFTF9HVF9TQ1JBVENIX0ZJRUxEX1JFTkRFUl9GTFVTSCk7Cj4gLQl1MzIgKmNzLCBmbGFncyA9 IDA7Cj4gLQo+IC0JLyoKPiAtCSAqIEVuc3VyZSB0aGF0IGFueSBmb2xsb3dpbmcgc2Vxbm8gd3Jp dGVzIG9ubHkgaGFwcGVuIHdoZW4gdGhlIHJlbmRlcgo+IC0JICogY2FjaGUgaXMgaW5kZWVkIGZs dXNoZWQuCj4gLQkgKgo+IC0JICogV29ya2Fyb3VuZDogNHRoIFBJUEVfQ09OVFJPTCBjb21tYW5k IChleGNlcHQgdGhlIG9uZXMgd2l0aCBvbmx5Cj4gLQkgKiByZWFkLWNhY2hlIGludmFsaWRhdGUg Yml0cyBzZXQpIG11c3QgaGF2ZSB0aGUgQ1NfU1RBTEwgYml0IHNldC4gV2UKPiAtCSAqIGRvbid0 IHRyeSB0byBiZSBjbGV2ZXIgYW5kIGp1c3Qgc2V0IGl0IHVuY29uZGl0aW9uYWxseS4KPiAtCSAq Lwo+IC0JZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOwo+IC0KPiAtCS8qCj4gLQkgKiBD U19TVEFMTCBzdWdnZXN0cyBhdCBsZWFzdCBhIHBvc3Qtc3luYyB3cml0ZS4KPiAtCSAqLwo+IC0J ZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwo+IC0JZmxhZ3MgfD0gUElQRV9DT05UUk9M X0dMT0JBTF9HVFRfSVZCOwo+IC0KPiAtCS8qIEp1c3QgZmx1c2ggZXZlcnl0aGluZy4gIEV4cGVy aW1lbnRzIGhhdmUgc2hvd24gdGhhdCByZWR1Y2luZyB0aGUKPiAtCSAqIG51bWJlciBvZiBiaXRz IGJhc2VkIG9uIHRoZSB3cml0ZSBkb21haW5zIGhhcyBsaXR0bGUgcGVyZm9ybWFuY2UKPiAtCSAq IGltcGFjdC4KPiAtCSAqLwo+IC0JaWYgKG1vZGUgJiBFTUlUX0ZMVVNIKSB7Cj4gLQkJZmxhZ3Mg fD0gUElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVfRkxVU0g7Cj4gLQkJZmxhZ3MgfD0g UElQRV9DT05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJP TF9EQ19GTFVTSF9FTkFCTEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0ZMVVNIX0VOQUJM RTsKPiAtCX0KPiAtCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7Cj4gLQkJZmxhZ3MgfD0g UElQRV9DT05UUk9MX1RMQl9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9J TlNUUlVDVElPTl9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9U RVhUVVJFX0NBQ0hFX0lOVkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1ZGX0NB Q0hFX0lOVkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTlNUX0NBQ0hFX0lO VkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lOVkFMSURB VEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX01FRElBX1NUQVRFX0NMRUFSOwo+IC0KPiAt CQkvKiBXb3JrYXJvdW5kOiB3ZSBtdXN0IGlzc3VlIGEgcGlwZV9jb250cm9sIHdpdGggQ1Mtc3Rh bGwgYml0Cj4gLQkJICogc2V0IGJlZm9yZSBhIHBpcGVfY29udHJvbCBjb21tYW5kIHRoYXQgaGFz IHRoZSBzdGF0ZSBjYWNoZQo+IC0JCSAqIGludmFsaWRhdGUgYml0IHNldC4gKi8KPiAtCQlnZW43 X3JlbmRlcl9yaW5nX2NzX3N0YWxsX3dhKHJxKTsKPiAtCX0KPiAtCj4gLQljcyA9IGludGVsX3Jp bmdfYmVnaW4ocnEsIDQpOwo+IC0JaWYgKElTX0VSUihjcykpCj4gLQkJcmV0dXJuIFBUUl9FUlIo Y3MpOwo+IC0KPiAtCSpjcysrID0gR0ZYX09QX1BJUEVfQ09OVFJPTCg0KTsKPiAtCSpjcysrID0g ZmxhZ3M7Cj4gLQkqY3MrKyA9IHNjcmF0Y2hfYWRkcjsKPiAtCSpjcysrID0gMDsKPiAtCWludGVs X3JpbmdfYWR2YW5jZShycSwgY3MpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdTMyICpnZW43X3Jjc19lbWl0X2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs IHUzMiAqY3MpCj4gLXsKPiAtCSpjcysrID0gR0ZYX09QX1BJUEVfQ09OVFJPTCg0KTsKPiAtCSpj cysrID0gKFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0NBQ0hFX0ZMVVNIIHwKPiAtCQkgUElQ RV9DT05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIIHwKPiAtCQkgUElQRV9DT05UUk9MX0RDX0ZMVVNI X0VOQUJMRSB8Cj4gLQkJIFBJUEVfQ09OVFJPTF9GTFVTSF9FTkFCTEUgfAo+IC0JCSBQSVBFX0NP TlRST0xfUVdfV1JJVEUgfAo+IC0JCSBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9JVkIgfAo+IC0J CSBQSVBFX0NPTlRST0xfQ1NfU1RBTEwpOwo+IC0JKmNzKysgPSBpOTE1X3JlcXVlc3RfYWN0aXZl X3RpbWVsaW5lKHJxKS0+aHdzcF9vZmZzZXQ7Cj4gLQkqY3MrKyA9IHJxLT5mZW5jZS5zZXFubzsK PiAtCj4gLQkqY3MrKyA9IE1JX1VTRVJfSU5URVJSVVBUOwo+IC0JKmNzKysgPSBNSV9OT09QOwo+ IC0KPiAtCXJxLT50YWlsID0gaW50ZWxfcmluZ19vZmZzZXQocnEsIGNzKTsKPiAtCWFzc2VydF9y aW5nX3RhaWxfdmFsaWQocnEtPnJpbmcsIHJxLT50YWlsKTsKPiAtCj4gLQlyZXR1cm4gY3M7Cj4g LX0KPiAtCj4gLXN0YXRpYyB1MzIgKmdlbjZfeGNzX2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSwgdTMyICpjcykKPiAtewo+IC0JR0VNX0JVR19PTihpOTE1X3JlcXVlc3Rf YWN0aXZlX3RpbWVsaW5lKHJxKS0+aHdzcF9nZ3R0ICE9IHJxLT5lbmdpbmUtPnN0YXR1c19wYWdl LnZtYSk7Cj4gLQlHRU1fQlVHX09OKG9mZnNldF9pbl9wYWdlKGk5MTVfcmVxdWVzdF9hY3RpdmVf dGltZWxpbmUocnEpLT5od3NwX29mZnNldCkgIT0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFIpOwo+ IC0KPiAtCSpjcysrID0gTUlfRkxVU0hfRFcgfCBNSV9GTFVTSF9EV19PUF9TVE9SRURXIHwgTUlf RkxVU0hfRFdfU1RPUkVfSU5ERVg7Cj4gLQkqY3MrKyA9IEk5MTVfR0VNX0hXU19TRVFOT19BRERS IHwgTUlfRkxVU0hfRFdfVVNFX0dUVDsKPiAtCSpjcysrID0gcnEtPmZlbmNlLnNlcW5vOwo+IC0K PiAtCSpjcysrID0gTUlfVVNFUl9JTlRFUlJVUFQ7Cj4gLQo+IC0JcnEtPnRhaWwgPSBpbnRlbF9y aW5nX29mZnNldChycSwgY3MpOwo+IC0JYXNzZXJ0X3JpbmdfdGFpbF92YWxpZChycS0+cmluZywg cnEtPnRhaWwpOwo+IC0KPiAtCXJldHVybiBjczsKPiAtfQo+IC0KPiAtI2RlZmluZSBHRU43X1hD U19XQSAzMgo+IC1zdGF0aWMgdTMyICpnZW43X3hjc19lbWl0X2JyZWFkY3J1bWIoc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpCj4gLXsKPiAtCWludCBpOwo+IC0KPiAtCUdFTV9CVUdf T04oaTkxNV9yZXF1ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3BfZ2d0dCAhPSBycS0+ZW5n aW5lLT5zdGF0dXNfcGFnZS52bWEpOwo+IC0JR0VNX0JVR19PTihvZmZzZXRfaW5fcGFnZShpOTE1 X3JlcXVlc3RfYWN0aXZlX3RpbWVsaW5lKHJxKS0+aHdzcF9vZmZzZXQpICE9IEk5MTVfR0VNX0hX U19TRVFOT19BRERSKTsKPiAtCj4gLQkqY3MrKyA9IE1JX0ZMVVNIX0RXIHwgTUlfSU5WQUxJREFU RV9UTEIgfAo+IC0JCU1JX0ZMVVNIX0RXX09QX1NUT1JFRFcgfCBNSV9GTFVTSF9EV19TVE9SRV9J TkRFWDsKPiAtCSpjcysrID0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFIgfCBNSV9GTFVTSF9EV19V U0VfR1RUOwo+IC0JKmNzKysgPSBycS0+ZmVuY2Uuc2Vxbm87Cj4gLQo+IC0JZm9yIChpID0gMDsg aSA8IEdFTjdfWENTX1dBOyBpKyspIHsKPiAtCQkqY3MrKyA9IE1JX1NUT1JFX0RXT1JEX0lOREVY Owo+IC0JCSpjcysrID0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFI7Cj4gLQkJKmNzKysgPSBycS0+ ZmVuY2Uuc2Vxbm87Cj4gLQl9Cj4gLQo+IC0JKmNzKysgPSBNSV9GTFVTSF9EVzsKPiAtCSpjcysr ID0gMDsKPiAtCSpjcysrID0gMDsKPiAtCj4gLQkqY3MrKyA9IE1JX1VTRVJfSU5URVJSVVBUOwo+ IC0JKmNzKysgPSBNSV9OT09QOwo+IC0KPiAtCXJxLT50YWlsID0gaW50ZWxfcmluZ19vZmZzZXQo cnEsIGNzKTsKPiAtCWFzc2VydF9yaW5nX3RhaWxfdmFsaWQocnEtPnJpbmcsIHJxLT50YWlsKTsK PiAtCj4gLQlyZXR1cm4gY3M7Cj4gLX0KPiAtI3VuZGVmIEdFTjdfWENTX1dBCj4gLQo+ICBzdGF0 aWMgdm9pZCBzZXRfaHdzdGFtKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIG1h c2spCj4gIHsKPiAgCS8qCj4gQEAgLTkxOCwyNTUgKzQ4Miw2IEBAIHN0YXRpYyB2b2lkIGk5eHhf c3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiAgCQkgICAgIGlu dGVsX3Jpbmdfc2V0X3RhaWwocmVxdWVzdC0+cmluZywgcmVxdWVzdC0+dGFpbCkpOwo+ICB9Cj4g IAo+IC1zdGF0aWMgdTMyICppOXh4X2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSwgdTMyICpjcykKPiAtewo+IC0JR0VNX0JVR19PTihpOTE1X3JlcXVlc3RfYWN0aXZlX3Rp bWVsaW5lKHJxKS0+aHdzcF9nZ3R0ICE9IHJxLT5lbmdpbmUtPnN0YXR1c19wYWdlLnZtYSk7Cj4g LQlHRU1fQlVHX09OKG9mZnNldF9pbl9wYWdlKGk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxpbmUo cnEpLT5od3NwX29mZnNldCkgIT0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFIpOwo+IC0KPiAtCSpj cysrID0gTUlfRkxVU0g7Cj4gLQo+IC0JKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTkRFWDsKPiAt CSpjcysrID0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFI7Cj4gLQkqY3MrKyA9IHJxLT5mZW5jZS5z ZXFubzsKPiAtCj4gLQkqY3MrKyA9IE1JX1VTRVJfSU5URVJSVVBUOwo+IC0JKmNzKysgPSBNSV9O T09QOwo+IC0KPiAtCXJxLT50YWlsID0gaW50ZWxfcmluZ19vZmZzZXQocnEsIGNzKTsKPiAtCWFz c2VydF9yaW5nX3RhaWxfdmFsaWQocnEtPnJpbmcsIHJxLT50YWlsKTsKPiAtCj4gLQlyZXR1cm4g Y3M7Cj4gLX0KPiAtCj4gLSNkZWZpbmUgR0VONV9XQV9TVE9SRVMgOCAvKiBtdXN0IGJlIGF0IGxl YXN0IDEhICovCj4gLXN0YXRpYyB1MzIgKmdlbjVfZW1pdF9icmVhZGNydW1iKHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJxLCB1MzIgKmNzKQo+IC17Cj4gLQlpbnQgaTsKPiAtCj4gLQlHRU1fQlVHX09O KGk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxpbmUocnEpLT5od3NwX2dndHQgIT0gcnEtPmVuZ2lu ZS0+c3RhdHVzX3BhZ2Uudm1hKTsKPiAtCUdFTV9CVUdfT04ob2Zmc2V0X2luX3BhZ2UoaTkxNV9y ZXF1ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3Bfb2Zmc2V0KSAhPSBJOTE1X0dFTV9IV1Nf U0VRTk9fQUREUik7Cj4gLQo+IC0JKmNzKysgPSBNSV9GTFVTSDsKPiAtCj4gLQlCVUlMRF9CVUdf T04oR0VONV9XQV9TVE9SRVMgPCAxKTsKPiAtCWZvciAoaSA9IDA7IGkgPCBHRU41X1dBX1NUT1JF UzsgaSsrKSB7Cj4gLQkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTkRFWDsKPiAtCQkqY3MrKyA9 IEk5MTVfR0VNX0hXU19TRVFOT19BRERSOwo+IC0JCSpjcysrID0gcnEtPmZlbmNlLnNlcW5vOwo+ IC0JfQo+IC0KPiAtCSpjcysrID0gTUlfVVNFUl9JTlRFUlJVUFQ7Cj4gLQo+IC0JcnEtPnRhaWwg PSBpbnRlbF9yaW5nX29mZnNldChycSwgY3MpOwo+IC0JYXNzZXJ0X3JpbmdfdGFpbF92YWxpZChy cS0+cmluZywgcnEtPnRhaWwpOwo+IC0KPiAtCXJldHVybiBjczsKPiAtfQo+IC0jdW5kZWYgR0VO NV9XQV9TVE9SRVMKPiAtCj4gLXN0YXRpYyB2b2lkCj4gLWdlbjVfaXJxX2VuYWJsZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCWdlbjVfZ3RfZW5hYmxlX2lycShlbmdp bmUtPmd0LCBlbmdpbmUtPmlycV9lbmFibGVfbWFzayk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk Cj4gLWdlbjVfaXJxX2Rpc2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IC17 Cj4gLQlnZW41X2d0X2Rpc2FibGVfaXJxKGVuZ2luZS0+Z3QsIGVuZ2luZS0+aXJxX2VuYWJsZV9t YXNrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQKPiAtaTl4eF9pcnFfZW5hYmxlKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0JZW5naW5lLT5pOTE1LT5pcnFfbWFzayAm PSB+ZW5naW5lLT5pcnFfZW5hYmxlX21hc2s7Cj4gLQlpbnRlbF91bmNvcmVfd3JpdGUoZW5naW5l LT51bmNvcmUsIEdFTjJfSU1SLCBlbmdpbmUtPmk5MTUtPmlycV9tYXNrKTsKPiAtCWludGVsX3Vu Y29yZV9wb3N0aW5nX3JlYWRfZncoZW5naW5lLT51bmNvcmUsIEdFTjJfSU1SKTsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQKPiAtaTl4eF9pcnFfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gLXsKPiAtCWVuZ2luZS0+aTkxNS0+aXJxX21hc2sgfD0gZW5naW5lLT5pcnFf ZW5hYmxlX21hc2s7Cj4gLQlpbnRlbF91bmNvcmVfd3JpdGUoZW5naW5lLT51bmNvcmUsIEdFTjJf SU1SLCBlbmdpbmUtPmk5MTUtPmlycV9tYXNrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQKPiAt aTh4eF9pcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbmdpbmUtPmk5MTU7Cj4gLQo+IC0JaTkx NS0+aXJxX21hc2sgJj0gfmVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrOwo+IC0JaW50ZWxfdW5jb3Jl X3dyaXRlMTYoJmk5MTUtPnVuY29yZSwgR0VOMl9JTVIsIGk5MTUtPmlycV9tYXNrKTsKPiAtCUVO R0lORV9QT1NUSU5HX1JFQUQxNihlbmdpbmUsIFJJTkdfSU1SKTsKPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQKPiAtaTh4eF9pcnFfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5pOTE1Owo+ IC0KPiAtCWk5MTUtPmlycV9tYXNrIHw9IGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrOwo+IC0JaW50 ZWxfdW5jb3JlX3dyaXRlMTYoJmk5MTUtPnVuY29yZSwgR0VOMl9JTVIsIGk5MTUtPmlycV9tYXNr KTsKPiAtfQo+IC0KPiAtc3RhdGljIGludAo+IC1ic2RfcmluZ19mbHVzaChzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSwgdTMyIG1vZGUpCj4gLXsKPiAtCXUzMiAqY3M7Cj4gLQo+IC0JY3MgPSBpbnRl bF9yaW5nX2JlZ2luKHJxLCAyKTsKPiAtCWlmIChJU19FUlIoY3MpKQo+IC0JCXJldHVybiBQVFJf RVJSKGNzKTsKPiAtCj4gLQkqY3MrKyA9IE1JX0ZMVVNIOwo+IC0JKmNzKysgPSBNSV9OT09QOwo+ IC0JaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAt c3RhdGljIHZvaWQKPiAtZ2VuNl9pcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiAtewo+IC0JRU5HSU5FX1dSSVRFKGVuZ2luZSwgUklOR19JTVIsCj4gLQkJICAgICB+ KGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrIHwgZW5naW5lLT5pcnFfa2VlcF9tYXNrKSk7Cj4gLQo+ IC0JLyogRmx1c2gvZGVsYXkgdG8gZW5zdXJlIHRoZSBSSU5HX0lNUiBpcyBhY3RpdmUgYmVmb3Jl IHRoZSBHVCBJTVIgKi8KPiAtCUVOR0lORV9QT1NUSU5HX1JFQUQoZW5naW5lLCBSSU5HX0lNUik7 Cj4gLQo+IC0JZ2VuNV9ndF9lbmFibGVfaXJxKGVuZ2luZS0+Z3QsIGVuZ2luZS0+aXJxX2VuYWJs ZV9tYXNrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQKPiAtZ2VuNl9pcnFfZGlzYWJsZShzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCUVOR0lORV9XUklURShlbmdpbmUs IFJJTkdfSU1SLCB+ZW5naW5lLT5pcnFfa2VlcF9tYXNrKTsKPiAtCWdlbjVfZ3RfZGlzYWJsZV9p cnEoZW5naW5lLT5ndCwgZW5naW5lLT5pcnFfZW5hYmxlX21hc2spOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZAo+IC1oc3dfdmVib3hfaXJxX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4gLXsKPiAtCUVOR0lORV9XUklURShlbmdpbmUsIFJJTkdfSU1SLCB+ZW5naW5lLT5p cnFfZW5hYmxlX21hc2spOwo+IC0KPiAtCS8qIEZsdXNoL2RlbGF5IHRvIGVuc3VyZSB0aGUgUklO R19JTVIgaXMgYWN0aXZlIGJlZm9yZSB0aGUgR1QgSU1SICovCj4gLQlFTkdJTkVfUE9TVElOR19S RUFEKGVuZ2luZSwgUklOR19JTVIpOwo+IC0KPiAtCWdlbjZfZ3RfcG1fdW5tYXNrX2lycShlbmdp bmUtPmd0LCBlbmdpbmUtPmlycV9lbmFibGVfbWFzayk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk Cj4gLWhzd192ZWJveF9pcnFfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gLXsKPiAtCUVOR0lORV9XUklURShlbmdpbmUsIFJJTkdfSU1SLCB+MCk7Cj4gLQlnZW42X2d0 X3BtX21hc2tfaXJxKGVuZ2luZS0+Z3QsIGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrKTsKPiAtfQo+ IC0KPiAtc3RhdGljIGludAo+IC1pOTY1X2VtaXRfYmJfc3RhcnQoc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsCj4gLQkJICAgdTY0IG9mZnNldCwgdTMyIGxlbmd0aCwKPiAtCQkgICB1bnNpZ25lZCBp bnQgZGlzcGF0Y2hfZmxhZ3MpCj4gLXsKPiAtCXUzMiAqY3M7Cj4gLQo+IC0JY3MgPSBpbnRlbF9y aW5nX2JlZ2luKHJxLCAyKTsKPiAtCWlmIChJU19FUlIoY3MpKQo+IC0JCXJldHVybiBQVFJfRVJS KGNzKTsKPiAtCj4gLQkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IE1JX0JBVENIX0dU VCB8IChkaXNwYXRjaF9mbGFncyAmCj4gLQkJSTkxNV9ESVNQQVRDSF9TRUNVUkUgPyAwIDogTUlf QkFUQ0hfTk9OX1NFQ1VSRV9JOTY1KTsKPiAtCSpjcysrID0gb2Zmc2V0Owo+IC0JaW50ZWxfcmlu Z19hZHZhbmNlKHJxLCBjcyk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLS8qIEp1c3Qg dXNlcnNwYWNlIEFCSSBjb252ZW50aW9uIHRvIGxpbWl0IHRoZSB3YSBiYXRjaCBibyB0byBhIHJl c29uYWJsZSBzaXplICovCj4gLSNkZWZpbmUgSTgzMF9CQVRDSF9MSU1JVCBTWl8yNTZLCj4gLSNk ZWZpbmUgSTgzMF9UTEJfRU5UUklFUyAoMikKPiAtI2RlZmluZSBJODMwX1dBX1NJWkUgbWF4KEk4 MzBfVExCX0VOVFJJRVMqNDA5NiwgSTgzMF9CQVRDSF9MSU1JVCkKPiAtc3RhdGljIGludAo+IC1p ODMwX2VtaXRfYmJfc3RhcnQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gLQkJICAgdTY0IG9m ZnNldCwgdTMyIGxlbiwKPiAtCQkgICB1bnNpZ25lZCBpbnQgZGlzcGF0Y2hfZmxhZ3MpCj4gLXsK PiAtCXUzMiAqY3MsIGNzX29mZnNldCA9Cj4gLQkJaW50ZWxfZ3Rfc2NyYXRjaF9vZmZzZXQocnEt PmVuZ2luZS0+Z3QsCj4gLQkJCQkJSU5URUxfR1RfU0NSQVRDSF9GSUVMRF9ERUZBVUxUKTsKPiAt Cj4gLQlHRU1fQlVHX09OKHJxLT5lbmdpbmUtPmd0LT5zY3JhdGNoLT5zaXplIDwgSTgzMF9XQV9T SVpFKTsKPiAtCj4gLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDYpOwo+IC0JaWYgKElTX0VS UihjcykpCj4gLQkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+IC0KPiAtCS8qIEV2aWN0IHRoZSBpbnZh bGlkIFBURSBUTEJzICovCj4gLQkqY3MrKyA9IENPTE9SX0JMVF9DTUQgfCBCTFRfV1JJVEVfUkdC QTsKPiAtCSpjcysrID0gQkxUX0RFUFRIXzMyIHwgQkxUX1JPUF9DT0xPUl9DT1BZIHwgNDA5NjsK PiAtCSpjcysrID0gSTgzMF9UTEJfRU5UUklFUyA8PCAxNiB8IDQ7IC8qIGxvYWQgZWFjaCBwYWdl ICovCj4gLQkqY3MrKyA9IGNzX29mZnNldDsKPiAtCSpjcysrID0gMHhkZWFkYmVlZjsKPiAtCSpj cysrID0gTUlfTk9PUDsKPiAtCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+IC0KPiAtCWlm ICgoZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1BJTk5FRCkgPT0gMCkgewo+IC0JCWlm IChsZW4gPiBJODMwX0JBVENIX0xJTUlUKQo+IC0JCQlyZXR1cm4gLUVOT1NQQzsKPiAtCj4gLQkJ Y3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA2ICsgMik7Cj4gLQkJaWYgKElTX0VSUihjcykpCj4g LQkJCXJldHVybiBQVFJfRVJSKGNzKTsKPiAtCj4gLQkJLyogQmxpdCB0aGUgYmF0Y2ggKHdoaWNo IGhhcyBub3cgYWxsIHJlbG9jcyBhcHBsaWVkKSB0byB0aGUKPiAtCQkgKiBzdGFibGUgYmF0Y2gg c2NyYXRjaCBibyBhcmVhIChzbyB0aGF0IHRoZSBDUyBuZXZlcgo+IC0JCSAqIHN0dW1ibGVzIG92 ZXIgaXRzIHRsYiBpbnZhbGlkYXRpb24gYnVnKSAuLi4KPiAtCQkgKi8KPiAtCQkqY3MrKyA9IFNS Q19DT1BZX0JMVF9DTUQgfCBCTFRfV1JJVEVfUkdCQSB8ICg2IC0gMik7Cj4gLQkJKmNzKysgPSBC TFRfREVQVEhfMzIgfCBCTFRfUk9QX1NSQ19DT1BZIHwgNDA5NjsKPiAtCQkqY3MrKyA9IERJVl9S T1VORF9VUChsZW4sIDQwOTYpIDw8IDE2IHwgNDA5NjsKPiAtCQkqY3MrKyA9IGNzX29mZnNldDsK PiAtCQkqY3MrKyA9IDQwOTY7Cj4gLQkJKmNzKysgPSBvZmZzZXQ7Cj4gLQo+IC0JCSpjcysrID0g TUlfRkxVU0g7Cj4gLQkJKmNzKysgPSBNSV9OT09QOwo+IC0JCWludGVsX3JpbmdfYWR2YW5jZShy cSwgY3MpOwo+IC0KPiAtCQkvKiAuLi4gYW5kIGV4ZWN1dGUgaXQuICovCj4gLQkJb2Zmc2V0ID0g Y3Nfb2Zmc2V0Owo+IC0JfQo+IC0KPiAtCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgMik7Cj4g LQlpZiAoSVNfRVJSKGNzKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gLQo+IC0JKmNzKysg PSBNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCBNSV9CQVRDSF9HVFQ7Cj4gLQkqY3MrKyA9IG9mZnNl dCB8IChkaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFID8gMCA6Cj4gLQkJTUlf QkFUQ0hfTk9OX1NFQ1VSRSk7Cj4gLQlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKPiAtCj4g LQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludAo+IC1pOTE1X2VtaXRfYmJfc3RhcnQo c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gLQkJICAgdTY0IG9mZnNldCwgdTMyIGxlbiwKPiAt CQkgICB1bnNpZ25lZCBpbnQgZGlzcGF0Y2hfZmxhZ3MpCj4gLXsKPiAtCXUzMiAqY3M7Cj4gLQo+ IC0JY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAyKTsKPiAtCWlmIChJU19FUlIoY3MpKQo+IC0J CXJldHVybiBQVFJfRVJSKGNzKTsKPiAtCj4gLQkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFS VCB8IE1JX0JBVENIX0dUVDsKPiAtCSpjcysrID0gb2Zmc2V0IHwgKGRpc3BhdGNoX2ZsYWdzICYg STkxNV9ESVNQQVRDSF9TRUNVUkUgPyAwIDoKPiAtCQlNSV9CQVRDSF9OT05fU0VDVVJFKTsKPiAt CWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ ICBzdGF0aWMgdm9pZCBfX3JpbmdfY29udGV4dF9maW5pKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSkKPiAgewo+ICAJaTkxNV92bWFfcHV0KGNlLT5zdGF0ZSk7Cj4gQEAgLTE3MDQsOTkgKzEwMTks NiBAQCBzdGF0aWMgdm9pZCBnZW42X2JzZF9zdWJtaXRfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpyZXF1ZXN0KQo+ICAJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQodW5jb3JlLCBGT1JD RVdBS0VfQUxMKTsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBtaV9mbHVzaF9kdyhzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSwgdTMyIGZsYWdzKQo+IC17Cj4gLQl1MzIgY21kLCAqY3M7Cj4gLQo+IC0J Y3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0KTsKPiAtCWlmIChJU19FUlIoY3MpKQo+IC0JCXJl dHVybiBQVFJfRVJSKGNzKTsKPiAtCj4gLQljbWQgPSBNSV9GTFVTSF9EVzsKPiAtCj4gLQkvKgo+ IC0JICogV2UgYWx3YXlzIHJlcXVpcmUgYSBjb21tYW5kIGJhcnJpZXIgc28gdGhhdCBzdWJzZXF1 ZW50Cj4gLQkgKiBjb21tYW5kcywgc3VjaCBhcyBicmVhZGNydW1iIGludGVycnVwdHMsIGFyZSBz dHJpY3RseSBvcmRlcmVkCj4gLQkgKiB3cnQgdGhlIGNvbnRlbnRzIG9mIHRoZSB3cml0ZSBjYWNo ZSBiZWluZyBmbHVzaGVkIHRvIG1lbW9yeQo+IC0JICogKGFuZCB0aHVzIGJlaW5nIGNvaGVyZW50 IGZyb20gdGhlIENQVSkuCj4gLQkgKi8KPiAtCWNtZCB8PSBNSV9GTFVTSF9EV19TVE9SRV9JTkRF WCB8IE1JX0ZMVVNIX0RXX09QX1NUT1JFRFc7Cj4gLQo+IC0JLyoKPiAtCSAqIEJzcGVjIHZvbCAx Yy4zIC0gYmxpdHRlciBlbmdpbmUgY29tbWFuZCBzdHJlYW1lcjoKPiAtCSAqICJJZiBFTkFCTEVE LCBhbGwgVExCcyB3aWxsIGJlIGludmFsaWRhdGVkIG9uY2UgdGhlIGZsdXNoCj4gLQkgKiBvcGVy YXRpb24gaXMgY29tcGxldGUuIFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUKPiAtCSAq IFBvc3QtU3luYyBPcGVyYXRpb24gZmllbGQgaXMgYSB2YWx1ZSBvZiAxaCBvciAzaC4iCj4gLQkg Ki8KPiAtCWNtZCB8PSBmbGFnczsKPiAtCj4gLQkqY3MrKyA9IGNtZDsKPiAtCSpjcysrID0gSTkx NV9HRU1fSFdTX1NDUkFUQ0hfQUREUiB8IE1JX0ZMVVNIX0RXX1VTRV9HVFQ7Cj4gLQkqY3MrKyA9 IDA7Cj4gLQkqY3MrKyA9IE1JX05PT1A7Cj4gLQo+IC0JaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBj cyk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZ2VuNl9mbHVzaF9k dyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUsIHUzMiBpbnZmbGFncykKPiAtewo+ IC0JcmV0dXJuIG1pX2ZsdXNoX2R3KHJxLCBtb2RlICYgRU1JVF9JTlZBTElEQVRFID8gaW52Zmxh Z3MgOiAwKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBnZW42X2JzZF9yaW5nX2ZsdXNoKHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSkKPiAtewo+IC0JcmV0dXJuIGdlbjZfZmx1c2hf ZHcocnEsIG1vZGUsIE1JX0lOVkFMSURBVEVfVExCIHwgTUlfSU5WQUxJREFURV9CU0QpOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50Cj4gLWhzd19lbWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxLAo+IC0JCSAgdTY0IG9mZnNldCwgdTMyIGxlbiwKPiAtCQkgIHVuc2lnbmVkIGludCBk aXNwYXRjaF9mbGFncykKPiAtewo+IC0JdTMyICpjczsKPiAtCj4gLQljcyA9IGludGVsX3Jpbmdf YmVnaW4ocnEsIDIpOwo+IC0JaWYgKElTX0VSUihjcykpCj4gLQkJcmV0dXJuIFBUUl9FUlIoY3Mp Owo+IC0KPiAtCSpjcysrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgKGRpc3BhdGNoX2ZsYWdz ICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUgPwo+IC0JCTAgOiBNSV9CQVRDSF9QUEdUVF9IU1cgfCBN SV9CQVRDSF9OT05fU0VDVVJFX0hTVyk7Cj4gLQkvKiBiaXQwLTcgaXMgdGhlIGxlbmd0aCBvbiBH RU42KyAqLwo+IC0JKmNzKysgPSBvZmZzZXQ7Cj4gLQlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNz KTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludAo+IC1nZW42X2VtaXRf YmJfc3RhcnQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gLQkJICAgdTY0IG9mZnNldCwgdTMy IGxlbiwKPiAtCQkgICB1bnNpZ25lZCBpbnQgZGlzcGF0Y2hfZmxhZ3MpCj4gLXsKPiAtCXUzMiAq Y3M7Cj4gLQo+IC0JY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAyKTsKPiAtCWlmIChJU19FUlIo Y3MpKQo+IC0JCXJldHVybiBQVFJfRVJSKGNzKTsKPiAtCj4gLQkqY3MrKyA9IE1JX0JBVENIX0JV RkZFUl9TVEFSVCB8IChkaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFID8KPiAt CQkwIDogTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1KTsKPiAtCS8qIGJpdDAtNyBpcyB0aGUgbGVu Z3RoIG9uIEdFTjYrICovCj4gLQkqY3MrKyA9IG9mZnNldDsKPiAtCWludGVsX3JpbmdfYWR2YW5j ZShycSwgY3MpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC0vKiBCbGl0dGVyIHN1cHBv cnQgKFNhbmR5QnJpZGdlKykgKi8KPiAtCj4gLXN0YXRpYyBpbnQgZ2VuNl9yaW5nX2ZsdXNoKHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSkKPiAtewo+IC0JcmV0dXJuIGdlbjZfZmx1 c2hfZHcocnEsIG1vZGUsIE1JX0lOVkFMSURBVEVfVExCKTsKPiAtfQo+IC0KPiAgc3RhdGljIHZv aWQgaTl4eF9zZXRfZGVmYXVsdF9zdWJtaXNzaW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiAgewo+ICAJZW5naW5lLT5zdWJtaXRfcmVxdWVzdCA9IGk5eHhfc3VibWl0X3JlcXVl c3Q7Cj4gQEAgLTE4NDMsMTEgKzEwNjUsMTEgQEAgc3RhdGljIHZvaWQgc2V0dXBfaXJxKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCQllbmdpbmUtPmlycV9lbmFibGUgPSBnZW41 X2lycV9lbmFibGU7Cj4gIAkJZW5naW5lLT5pcnFfZGlzYWJsZSA9IGdlbjVfaXJxX2Rpc2FibGU7 Cj4gIAl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSAzKSB7Cj4gLQkJZW5naW5lLT5pcnFf ZW5hYmxlID0gaTl4eF9pcnFfZW5hYmxlOwo+IC0JCWVuZ2luZS0+aXJxX2Rpc2FibGUgPSBpOXh4 X2lycV9kaXNhYmxlOwo+ICsJCWVuZ2luZS0+aXJxX2VuYWJsZSA9IGdlbjNfaXJxX2VuYWJsZTsK PiArCQllbmdpbmUtPmlycV9kaXNhYmxlID0gZ2VuM19pcnFfZGlzYWJsZTsKPiAgCX0gZWxzZSB7 Cj4gLQkJZW5naW5lLT5pcnFfZW5hYmxlID0gaTh4eF9pcnFfZW5hYmxlOwo+IC0JCWVuZ2luZS0+ aXJxX2Rpc2FibGUgPSBpOHh4X2lycV9kaXNhYmxlOwo+ICsJCWVuZ2luZS0+aXJxX2VuYWJsZSA9 IGdlbjJfaXJxX2VuYWJsZTsKPiArCQllbmdpbmUtPmlycV9kaXNhYmxlID0gZ2VuMl9pcnFfZGlz YWJsZTsKPiAgCX0KPiAgfQo+ICAKPiBAQCAtMTg3NCw3ICsxMDk2LDcgQEAgc3RhdGljIHZvaWQg c2V0dXBfY29tbW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCSAqIGVxdWl2 YWxlbnQgdG8gb3VyIG5leHQgaW5pdGlhbCBicmVhZCBzbyB3ZSBjYW4gZWxpZGUKPiAgCSAqIGVu Z2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIoKS4KPiAgCSAqLwo+IC0JZW5naW5lLT5lbWl0X2Zp bmlfYnJlYWRjcnVtYiA9IGk5eHhfZW1pdF9icmVhZGNydW1iOwo+ICsJZW5naW5lLT5lbWl0X2Zp bmlfYnJlYWRjcnVtYiA9IGdlbjNfZW1pdF9icmVhZGNydW1iOwo+ICAJaWYgKElTX0dFTihpOTE1 LCA1KSkKPiAgCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuNV9lbWl0X2JyZWFk Y3J1bWI7Cj4gIAo+IEBAIC0xODgzLDExICsxMTA1LDExIEBAIHN0YXRpYyB2b2lkIHNldHVwX2Nv bW1vbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAlpZiAoSU5URUxfR0VOKGk5 MTUpID49IDYpCj4gIAkJZW5naW5lLT5lbWl0X2JiX3N0YXJ0ID0gZ2VuNl9lbWl0X2JiX3N0YXJ0 Owo+ICAJZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDQpCj4gLQkJZW5naW5lLT5lbWl0X2Ji X3N0YXJ0ID0gaTk2NV9lbWl0X2JiX3N0YXJ0Owo+ICsJCWVuZ2luZS0+ZW1pdF9iYl9zdGFydCA9 IGdlbjRfZW1pdF9iYl9zdGFydDsKPiAgCWVsc2UgaWYgKElTX0k4MzAoaTkxNSkgfHwgSVNfSTg0 NUcoaTkxNSkpCj4gIAkJZW5naW5lLT5lbWl0X2JiX3N0YXJ0ID0gaTgzMF9lbWl0X2JiX3N0YXJ0 Owo+ICAJZWxzZQo+IC0JCWVuZ2luZS0+ZW1pdF9iYl9zdGFydCA9IGk5MTVfZW1pdF9iYl9zdGFy dDsKPiArCQllbmdpbmUtPmVtaXRfYmJfc3RhcnQgPSBnZW4zX2VtaXRfYmJfc3RhcnQ7Cj4gIH0K PiAgCj4gIHN0YXRpYyB2b2lkIHNldHVwX3JjcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCj4gQEAgLTE5MDAsMTggKzExMjIsMTggQEAgc3RhdGljIHZvaWQgc2V0dXBfcmNzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0g R1RfUkVOREVSX1VTRVJfSU5URVJSVVBUOwo+ICAKPiAgCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0g Nykgewo+IC0JCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjdfcmVuZGVyX3JpbmdfZmx1c2g7Cj4g LQkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjdfcmNzX2VtaXRfYnJlYWRjcnVt YjsKPiArCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW43X2VtaXRfZmx1c2hfcmNzOwo+ICsJCWVu Z2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW43X2VtaXRfYnJlYWRjcnVtYl9yY3M7Cj4g IAl9IGVsc2UgaWYgKElTX0dFTihpOTE1LCA2KSkgewo+IC0JCWVuZ2luZS0+ZW1pdF9mbHVzaCA9 IGdlbjZfcmVuZGVyX3JpbmdfZmx1c2g7Cj4gLQkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVt YiA9IGdlbjZfcmNzX2VtaXRfYnJlYWRjcnVtYjsKPiArCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBn ZW42X2VtaXRfZmx1c2hfcmNzOwo+ICsJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBn ZW42X2VtaXRfYnJlYWRjcnVtYl9yY3M7Cj4gIAl9IGVsc2UgaWYgKElTX0dFTihpOTE1LCA1KSkg ewo+IC0JCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjRfcmVuZGVyX3JpbmdfZmx1c2g7Cj4gKwkJ ZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuNF9lbWl0X2ZsdXNoX3JjczsKPiAgCX0gZWxzZSB7Cj4g IAkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDQpCj4gLQkJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdl bjJfcmVuZGVyX3JpbmdfZmx1c2g7Cj4gKwkJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjJfZW1p dF9mbHVzaDsKPiAgCQllbHNlCj4gLQkJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjRfcmVuZGVy X3JpbmdfZmx1c2g7Cj4gKwkJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjRfZW1pdF9mbHVzaF9y Y3M7Cj4gIAkJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBJOTE1X1VTRVJfSU5URVJSVVBUOwo+ ICAJfQo+ICAKPiBAQCAtMTkyOSwxNSArMTE1MSwxNSBAQCBzdGF0aWMgdm9pZCBzZXR1cF92Y3Mo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJCS8qIGdlbjYgYnNkIG5lZWRzIGEg c3BlY2lhbCB3YSBmb3IgdGFpbCB1cGRhdGVzICovCj4gIAkJaWYgKElTX0dFTihpOTE1LCA2KSkK PiAgCQkJZW5naW5lLT5zZXRfZGVmYXVsdF9zdWJtaXNzaW9uID0gZ2VuNl9ic2Rfc2V0X2RlZmF1 bHRfc3VibWlzc2lvbjsKPiAtCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW42X2JzZF9yaW5nX2Zs dXNoOwo+ICsJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjZfZW1pdF9mbHVzaF92Y3M7Cj4gIAkJ ZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBHVF9CU0RfVVNFUl9JTlRFUlJVUFQ7Cj4gIAo+ICAJ CWlmIChJU19HRU4oaTkxNSwgNikpCj4gLQkJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIg PSBnZW42X3hjc19lbWl0X2JyZWFkY3J1bWI7Cj4gKwkJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFk Y3J1bWIgPSBnZW42X2VtaXRfYnJlYWRjcnVtYl94Y3M7Cj4gIAkJZWxzZQo+IC0JCQllbmdpbmUt PmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuN194Y3NfZW1pdF9icmVhZGNydW1iOwo+ICsJCQll bmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuN19lbWl0X2JyZWFkY3J1bWJfeGNzOwo+ ICAJfSBlbHNlIHsKPiAtCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBic2RfcmluZ19mbHVzaDsKPiAr CQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW40X2VtaXRfZmx1c2hfdmNzOwo+ICAJCWlmIChJU19H RU4oaTkxNSwgNSkpCj4gIAkJCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gSUxLX0JTRF9VU0VS X0lOVEVSUlVQVDsKPiAgCQllbHNlCj4gQEAgLTE5NDksMTMgKzExNzEsMTMgQEAgc3RhdGljIHZv aWQgc2V0dXBfYmNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ICAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbmdpbmUtPmk5MTU7Cj4gIAo+IC0JZW5naW5l LT5lbWl0X2ZsdXNoID0gZ2VuNl9yaW5nX2ZsdXNoOwo+ICsJZW5naW5lLT5lbWl0X2ZsdXNoID0g Z2VuNl9lbWl0X2ZsdXNoX3hjczsKPiAgCWVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrID0gR1RfQkxU X1VTRVJfSU5URVJSVVBUOwo+ICAKPiAgCWlmIChJU19HRU4oaTkxNSwgNikpCj4gLQkJZW5naW5l LT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjZfeGNzX2VtaXRfYnJlYWRjcnVtYjsKPiArCQll bmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuNl9lbWl0X2JyZWFkY3J1bWJfeGNzOwo+ ICAJZWxzZQo+IC0JCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW43X3hjc19lbWl0 X2JyZWFkY3J1bWI7Cj4gKwkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjdfZW1p dF9icmVhZGNydW1iX3hjczsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgc2V0dXBfdmVjcyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gQEAgLTE5NjQsMTIgKzExODYsMTIgQEAgc3Rh dGljIHZvaWQgc2V0dXBfdmVjcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAo+ ICAJR0VNX0JVR19PTihJTlRFTF9HRU4oaTkxNSkgPCA3KTsKPiAgCj4gLQllbmdpbmUtPmVtaXRf Zmx1c2ggPSBnZW42X3JpbmdfZmx1c2g7Cj4gKwllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW42X2Vt aXRfZmx1c2hfeGNzOwo+ICAJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sgPSBQTV9WRUJPWF9VU0VS X0lOVEVSUlVQVDsKPiAtCWVuZ2luZS0+aXJxX2VuYWJsZSA9IGhzd192ZWJveF9pcnFfZW5hYmxl Owo+IC0JZW5naW5lLT5pcnFfZGlzYWJsZSA9IGhzd192ZWJveF9pcnFfZGlzYWJsZTsKPiArCWVu Z2luZS0+aXJxX2VuYWJsZSA9IGhzd19pcnFfZW5hYmxlX3ZlY3M7Cj4gKwllbmdpbmUtPmlycV9k aXNhYmxlID0gaHN3X2lycV9kaXNhYmxlX3ZlY3M7Cj4gIAo+IC0JZW5naW5lLT5lbWl0X2Zpbmlf YnJlYWRjcnVtYiA9IGdlbjdfeGNzX2VtaXRfYnJlYWRjcnVtYjsKPiArCWVuZ2luZS0+ZW1pdF9m aW5pX2JyZWFkY3J1bWIgPSBnZW43X2VtaXRfYnJlYWRjcnVtYl94Y3M7Cj4gIH0KPiAgCj4gIHN0 YXRpYyBpbnQgZ2VuN19jdHhfc3dpdGNoX2JiX3NldHVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KiBjb25zdCBlbmdpbmUsCj4gLS0gCj4gMi4yMC4xCj4KPiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==