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=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT 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 EC556C433DF for ; Mon, 1 Jun 2020 07:25:11 +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 C53EB206C3 for ; Mon, 1 Jun 2020 07:25:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C53EB206C3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk 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 E543689DA5; Mon, 1 Jun 2020 07:25:03 +0000 (UTC) Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8BC2689E52 for ; Mon, 1 Jun 2020 07:25:02 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from build.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 21356602-1500050 for multiple; Mon, 01 Jun 2020 08:24:51 +0100 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Mon, 1 Jun 2020 08:24:12 +0100 Message-Id: <20200601072446.19548-2-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200601072446.19548-1-chris@chris-wilson.co.uk> References: <20200601072446.19548-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [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" UHVsbCB0aGUgcm91dGluZXMgZm9yIHdyaXRpbmcgQ1MgcGFja2V0cyBvdXQgb2YgaW50ZWxfcmlu Z19zdWJtaXNzaW9uCmludG8gdGhlaXIgb3duIGZpbGVzLiBUaGVzZSBhcmUgbG93IGxldmVsIG9w ZXJhdGlvbnMgZm9yIGJ1aWxkaW5nIENTCmluc3RydWN0aW9ucywgcmF0aGVyIHRoYW4gdGhlIGxv Z2ljIGZvciBmaWxsaW5nIHRoZSBnbG9iYWwgcmluZyBidWZmZXIKd2l0aCByZXF1ZXN0cywgYW5k IHdlIHdpbGwgd25hdCB0byByZXVzZSB0aGVtIG91dHNpZGUgb2YgdGhpcyBjb250ZXh0LgoKU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAyICsKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjJfZW5naW5lX2NzLmMgICAgICB8IDM0MCArKysrKysr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW4yX2VuZ2luZV9jcy5oICAgICAgfCAgMzggKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuNl9lbmdpbmVfY3MuYyAgICAgIHwgNDU1ICsrKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjZfZW5naW5lX2NzLmggICAgICB8ICAz OSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaCAgICAgICAgfCAgIDEg LQogLi4uL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yaW5nX3N1Ym1pc3Npb24uYyAgIHwgODMyICst LS0tLS0tLS0tLS0tLS0tLQogNyBmaWxlcyBjaGFuZ2VkLCA5MDEgaW5zZXJ0aW9ucygrKSwgODA2 IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2dlbjJfZW5naW5lX2NzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9nZW4yX2VuZ2luZV9jcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvZ2VuNl9lbmdpbmVfY3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2dlbjZfZW5naW5lX2NzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGIw ZGE2ZWE2ZTNmMS4uNDFhMjdmZDVkYmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtNzgsNiAr NzgsOCBAQCBndC15ICs9IFwKIAlndC9kZWJ1Z2ZzX2VuZ2luZXMubyBcCiAJZ3QvZGVidWdmc19n dC5vIFwKIAlndC9kZWJ1Z2ZzX2d0X3BtLm8gXAorCWd0L2dlbjJfZW5naW5lX2NzLm8gXAorCWd0 L2dlbjZfZW5naW5lX2NzLm8gXAogCWd0L2dlbjZfcHBndHQubyBcCiAJZ3QvZ2VuN19yZW5kZXJj bGVhci5vIFwKIAlndC9nZW44X3BwZ3R0Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvZ2VuMl9lbmdpbmVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjJf ZW5naW5lX2NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ZDJl ODUwODEyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW4y X2VuZ2luZV9jcy5jCkBAIC0wLDAgKzEsMzQwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLwor CisjaW5jbHVkZSAiZ2VuMl9lbmdpbmVfY3MuaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2lu Y2x1ZGUgImludGVsX2VuZ2luZS5oIgorI2luY2x1ZGUgImludGVsX2dwdV9jb21tYW5kcy5oIgor I2luY2x1ZGUgImludGVsX2d0LmgiCisjaW5jbHVkZSAiaW50ZWxfZ3RfaXJxLmgiCisjaW5jbHVk ZSAiaW50ZWxfcmluZy5oIgorCitpbnQgZ2VuMl9lbWl0X2ZsdXNoKHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxLCB1MzIgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX3N0b3JlX2R3OworCXUzMiBj bWQsICpjczsKKworCWNtZCA9IE1JX0ZMVVNIOworCW51bV9zdG9yZV9kdyA9IDA7CisJaWYgKG1v ZGUgJiBFTUlUX0lOVkFMSURBVEUpCisJCWNtZCB8PSBNSV9SRUFEX0ZMVVNIOworCWlmIChtb2Rl ICYgRU1JVF9GTFVTSCkKKwkJbnVtX3N0b3JlX2R3ID0gNDsKKworCWNzID0gaW50ZWxfcmluZ19i ZWdpbihycSwgMiArIDMgKiBudW1fc3RvcmVfZHcpOworCWlmIChJU19FUlIoY3MpKQorCQlyZXR1 cm4gUFRSX0VSUihjcyk7CisKKwkqY3MrKyA9IGNtZDsKKwl3aGlsZSAobnVtX3N0b3JlX2R3LS0p IHsKKwkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTU0gfCBNSV9NRU1fVklSVFVBTDsKKwkJKmNz KysgPSBpbnRlbF9ndF9zY3JhdGNoX29mZnNldChycS0+ZW5naW5lLT5ndCwKKwkJCQkJCUlOVEVM X0dUX1NDUkFUQ0hfRklFTERfREVGQVVMVCk7CisJCSpjcysrID0gMDsKKwl9CisJKmNzKysgPSBN SV9GTFVTSCB8IE1JX05PX1dSSVRFX0ZMVVNIOworCisJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBj cyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdlbjRfZW1pdF9mbHVzaF9yY3Moc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnEsIHUzMiBtb2RlKQoreworCXUzMiBjbWQsICpjczsKKwlpbnQgaTsKKwor CS8qCisJICogcmVhZC93cml0ZSBjYWNoZXM6CisJICoKKwkgKiBJOTE1X0dFTV9ET01BSU5fUkVO REVSIGlzIGFsd2F5cyBpbnZhbGlkYXRlZCwgYnV0IGlzCisJICogb25seSBmbHVzaGVkIGlmIE1J X05PX1dSSVRFX0ZMVVNIIGlzIHVuc2V0LiAgT24gOTY1LCBpdCBpcworCSAqIGFsc28gZmx1c2hl ZCBhdCAyZCB2ZXJzdXMgM2QgcGlwZWxpbmUgc3dpdGNoZXMuCisJICoKKwkgKiByZWFkLW9ubHkg Y2FjaGVzOgorCSAqCisJICogSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIgaXMgZmx1c2hlZCBvbiBw cmUtOTY1IGlmCisJICogTUlfUkVBRF9GTFVTSCBpcyBzZXQsIGFuZCBpcyBhbHdheXMgZmx1c2hl ZCBvbiA5NjUuCisJICoKKwkgKiBJOTE1X0dFTV9ET01BSU5fQ09NTUFORCBtYXkgbm90IGV4aXN0 PworCSAqCisJICogSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCB3aGljaCBleGlzdHMgb24g OTY1LCBpcworCSAqIGludmFsaWRhdGVkIHdoZW4gTUlfRVhFX0ZMVVNIIGlzIHNldC4KKwkgKgor CSAqIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIHdoaWNoIGV4aXN0cyBvbiA5NjUsIGlzCisJICog aW52YWxpZGF0ZWQgd2l0aCBldmVyeSBNSV9GTFVTSC4KKwkgKgorCSAqIFRMQnM6CisJICoKKwkg KiBPbiA5NjUsIFRMQnMgYXNzb2NpYXRlZCB3aXRoIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5ECisJ ICogYW5kIEk5MTVfR0VNX0RPTUFJTl9DUFUgaW4gYXJlIGludmFsaWRhdGVkIGF0IFBURSB3cml0 ZSBhbmQKKwkgKiBJOTE1X0dFTV9ET01BSU5fUkVOREVSIGFuZCBJOTE1X0dFTV9ET01BSU5fU0FN UExFUgorCSAqIGFyZSBmbHVzaGVkIGF0IGFueSBNSV9GTFVTSC4KKwkgKi8KKworCWNtZCA9IE1J X0ZMVVNIOworCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7CisJCWNtZCB8PSBNSV9FWEVf RkxVU0g7CisJCWlmIChJU19HNFgocnEtPmk5MTUpIHx8IElTX0dFTihycS0+aTkxNSwgNSkpCisJ CQljbWQgfD0gTUlfSU5WQUxJREFURV9JU1A7CisJfQorCisJaSA9IDI7CisJaWYgKG1vZGUgJiBF TUlUX0lOVkFMSURBVEUpCisJCWkgKz0gMjA7CisKKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEs IGkpOworCWlmIChJU19FUlIoY3MpKQorCQlyZXR1cm4gUFRSX0VSUihjcyk7CisKKwkqY3MrKyA9 IGNtZDsKKworCS8qCisJICogQSByYW5kb20gZGVsYXkgdG8gbGV0IHRoZSBDUyBpbnZhbGlkYXRl IHRha2UgZWZmZWN0PyBXaXRob3V0IHRoaXMKKwkgKiBkZWxheSwgdGhlIEdQVSByZWxvY2F0aW9u IHBhdGggZmFpbHMgYXMgdGhlIENTIGRvZXMgbm90IHNlZQorCSAqIHRoZSB1cGRhdGVkIGNvbnRl bnRzLiBKdXN0IGFzIGltcG9ydGFudCwgaWYgd2UgYXBwbHkgdGhlIGZsdXNoZXMKKwkgKiB0byB0 aGUgRU1JVF9GTFVTSCBicmFuY2ggKGkuZS4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHJlbG9jYXRp b24KKwkgKiB3cml0ZSBhbmQgYmVmb3JlIHRoZSBpbnZhbGlkYXRlIG9uIHRoZSBuZXh0IGJhdGNo KSwgdGhlIHJlbG9jYXRpb25zCisJICogc3RpbGwgZmFpbC4gVGhpcyBpbXBsaWVzIHRoYXQgaXMg YSBkZWxheSBmb2xsb3dpbmcgaW52YWxpZGF0aW9uCisJICogdGhhdCBpcyByZXF1aXJlZCB0byBy ZXNldCB0aGUgY2FjaGVzIGFzIG9wcG9zZWQgdG8gYSBkZWxheSB0bworCSAqIGVuc3VyZSB0aGUg bWVtb3J5IGlzIHdyaXR0ZW4uCisJICovCisJaWYgKG1vZGUgJiBFTUlUX0lOVkFMSURBVEUpIHsK KwkJKmNzKysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDQpIHwgUElQRV9DT05UUk9MX1FXX1dSSVRF OworCQkqY3MrKyA9IGludGVsX2d0X3NjcmF0Y2hfb2Zmc2V0KHJxLT5lbmdpbmUtPmd0LAorCQkJ CQkJSU5URUxfR1RfU0NSQVRDSF9GSUVMRF9ERUZBVUxUKSB8CisJCQlQSVBFX0NPTlRST0xfR0xP QkFMX0dUVDsKKwkJKmNzKysgPSAwOworCQkqY3MrKyA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8 IDEyOyBpKyspCisJCQkqY3MrKyA9IE1JX0ZMVVNIOworCisJCSpjcysrID0gR0ZYX09QX1BJUEVf Q09OVFJPTCg0KSB8IFBJUEVfQ09OVFJPTF9RV19XUklURTsKKwkJKmNzKysgPSBpbnRlbF9ndF9z Y3JhdGNoX29mZnNldChycS0+ZW5naW5lLT5ndCwKKwkJCQkJCUlOVEVMX0dUX1NDUkFUQ0hfRklF TERfREVGQVVMVCkgfAorCQkJUElQRV9DT05UUk9MX0dMT0JBTF9HVFQ7CisJCSpjcysrID0gMDsK KwkJKmNzKysgPSAwOworCX0KKworCSpjcysrID0gY21kOworCisJaW50ZWxfcmluZ19hZHZhbmNl KHJxLCBjcyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdlbjRfZW1pdF9mbHVzaF92Y3Moc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBtb2RlKQoreworCXUzMiAqY3M7CisKKwljcyA9IGlu dGVsX3JpbmdfYmVnaW4ocnEsIDIpOworCWlmIChJU19FUlIoY3MpKQorCQlyZXR1cm4gUFRSX0VS Uihjcyk7CisKKwkqY3MrKyA9IE1JX0ZMVVNIOworCSpjcysrID0gTUlfTk9PUDsKKwlpbnRlbF9y aW5nX2FkdmFuY2UocnEsIGNzKTsKKworCXJldHVybiAwOworfQorCit1MzIgKmdlbjNfZW1pdF9i cmVhZGNydW1iKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNzKQoreworCUdFTV9CVUdf T04oaTkxNV9yZXF1ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3BfZ2d0dCAhPSBycS0+ZW5n aW5lLT5zdGF0dXNfcGFnZS52bWEpOworCUdFTV9CVUdfT04ob2Zmc2V0X2luX3BhZ2UoaTkxNV9y ZXF1ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3Bfb2Zmc2V0KSAhPSBJOTE1X0dFTV9IV1Nf U0VRTk9fQUREUik7CisKKwkqY3MrKyA9IE1JX0ZMVVNIOworCisJKmNzKysgPSBNSV9TVE9SRV9E V09SRF9JTkRFWDsKKwkqY3MrKyA9IEk5MTVfR0VNX0hXU19TRVFOT19BRERSOworCSpjcysrID0g cnEtPmZlbmNlLnNlcW5vOworCisJKmNzKysgPSBNSV9VU0VSX0lOVEVSUlVQVDsKKwkqY3MrKyA9 IE1JX05PT1A7CisKKwlycS0+dGFpbCA9IGludGVsX3Jpbmdfb2Zmc2V0KHJxLCBjcyk7CisJYXNz ZXJ0X3JpbmdfdGFpbF92YWxpZChycS0+cmluZywgcnEtPnRhaWwpOworCisJcmV0dXJuIGNzOwor fQorCisjZGVmaW5lIEdFTjVfV0FfU1RPUkVTIDggLyogbXVzdCBiZSBhdCBsZWFzdCAxISAqLwor dTMyICpnZW41X2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyICpj cykKK3sKKwlpbnQgaTsKKworCUdFTV9CVUdfT04oaTkxNV9yZXF1ZXN0X2FjdGl2ZV90aW1lbGlu ZShycSktPmh3c3BfZ2d0dCAhPSBycS0+ZW5naW5lLT5zdGF0dXNfcGFnZS52bWEpOworCUdFTV9C VUdfT04ob2Zmc2V0X2luX3BhZ2UoaTkxNV9yZXF1ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3 c3Bfb2Zmc2V0KSAhPSBJOTE1X0dFTV9IV1NfU0VRTk9fQUREUik7CisKKwkqY3MrKyA9IE1JX0ZM VVNIOworCisJQlVJTERfQlVHX09OKEdFTjVfV0FfU1RPUkVTIDwgMSk7CisJZm9yIChpID0gMDsg aSA8IEdFTjVfV0FfU1RPUkVTOyBpKyspIHsKKwkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTkRF WDsKKwkJKmNzKysgPSBJOTE1X0dFTV9IV1NfU0VRTk9fQUREUjsKKwkJKmNzKysgPSBycS0+ZmVu Y2Uuc2Vxbm87CisJfQorCisJKmNzKysgPSBNSV9VU0VSX0lOVEVSUlVQVDsKKworCXJxLT50YWls ID0gaW50ZWxfcmluZ19vZmZzZXQocnEsIGNzKTsKKwlhc3NlcnRfcmluZ190YWlsX3ZhbGlkKHJx LT5yaW5nLCBycS0+dGFpbCk7CisKKwlyZXR1cm4gY3M7Cit9CisjdW5kZWYgR0VONV9XQV9TVE9S RVMKKworLyogSnVzdCB1c2Vyc3BhY2UgQUJJIGNvbnZlbnRpb24gdG8gbGltaXQgdGhlIHdhIGJh dGNoIGJvIHRvIGEgcmVzb25hYmxlIHNpemUgKi8KKyNkZWZpbmUgSTgzMF9CQVRDSF9MSU1JVCBT Wl8yNTZLCisjZGVmaW5lIEk4MzBfVExCX0VOVFJJRVMgKDIpCisjZGVmaW5lIEk4MzBfV0FfU0la RSBtYXgoSTgzMF9UTEJfRU5UUklFUyAqIFNaXzRLLCBJODMwX0JBVENIX0xJTUlUKQoraW50IGk4 MzBfZW1pdF9iYl9zdGFydChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJICAgICAgIHU2NCBv ZmZzZXQsIHUzMiBsZW4sCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZGlzcGF0Y2hfZmxhZ3MpCit7 CisJdTMyICpjcywgY3Nfb2Zmc2V0ID0KKwkJaW50ZWxfZ3Rfc2NyYXRjaF9vZmZzZXQocnEtPmVu Z2luZS0+Z3QsCisJCQkJCUlOVEVMX0dUX1NDUkFUQ0hfRklFTERfREVGQVVMVCk7CisKKwlHRU1f QlVHX09OKHJxLT5lbmdpbmUtPmd0LT5zY3JhdGNoLT5zaXplIDwgSTgzMF9XQV9TSVpFKTsKKwor CWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNik7CisJaWYgKElTX0VSUihjcykpCisJCXJldHVy biBQVFJfRVJSKGNzKTsKKworCS8qIEV2aWN0IHRoZSBpbnZhbGlkIFBURSBUTEJzICovCisJKmNz KysgPSBDT0xPUl9CTFRfQ01EIHwgQkxUX1dSSVRFX1JHQkE7CisJKmNzKysgPSBCTFRfREVQVEhf MzIgfCBCTFRfUk9QX0NPTE9SX0NPUFkgfCA0MDk2OworCSpjcysrID0gSTgzMF9UTEJfRU5UUklF UyA8PCAxNiB8IDQ7IC8qIGxvYWQgZWFjaCBwYWdlICovCisJKmNzKysgPSBjc19vZmZzZXQ7CisJ KmNzKysgPSAweGRlYWRiZWVmOworCSpjcysrID0gTUlfTk9PUDsKKwlpbnRlbF9yaW5nX2FkdmFu Y2UocnEsIGNzKTsKKworCWlmICgoZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1BJTk5F RCkgPT0gMCkgeworCQlpZiAobGVuID4gSTgzMF9CQVRDSF9MSU1JVCkKKwkJCXJldHVybiAtRU5P U1BDOworCisJCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNiArIDIpOworCQlpZiAoSVNfRVJS KGNzKSkKKwkJCXJldHVybiBQVFJfRVJSKGNzKTsKKworCQkvKgorCQkgKiBCbGl0IHRoZSBiYXRj aCAod2hpY2ggaGFzIG5vdyBhbGwgcmVsb2NzIGFwcGxpZWQpIHRvIHRoZQorCQkgKiBzdGFibGUg YmF0Y2ggc2NyYXRjaCBibyBhcmVhIChzbyB0aGF0IHRoZSBDUyBuZXZlcgorCQkgKiBzdHVtYmxl cyBvdmVyIGl0cyB0bGIgaW52YWxpZGF0aW9uIGJ1ZykgLi4uCisJCSAqLworCQkqY3MrKyA9IFNS Q19DT1BZX0JMVF9DTUQgfCBCTFRfV1JJVEVfUkdCQSB8ICg2IC0gMik7CisJCSpjcysrID0gQkxU X0RFUFRIXzMyIHwgQkxUX1JPUF9TUkNfQ09QWSB8IDQwOTY7CisJCSpjcysrID0gRElWX1JPVU5E X1VQKGxlbiwgNDA5NikgPDwgMTYgfCA0MDk2OworCQkqY3MrKyA9IGNzX29mZnNldDsKKwkJKmNz KysgPSA0MDk2OworCQkqY3MrKyA9IG9mZnNldDsKKworCQkqY3MrKyA9IE1JX0ZMVVNIOworCQkq Y3MrKyA9IE1JX05PT1A7CisJCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOworCisJCS8qIC4u LiBhbmQgZXhlY3V0ZSBpdC4gKi8KKwkJb2Zmc2V0ID0gY3Nfb2Zmc2V0OworCX0KKworCWlmICgh KGRpc3BhdGNoX2ZsYWdzICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUpKQorCQlvZmZzZXQgfD0gTUlf QkFUQ0hfTk9OX1NFQ1VSRTsKKworCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgMik7CisJaWYg KElTX0VSUihjcykpCisJCXJldHVybiBQVFJfRVJSKGNzKTsKKworCSpjcysrID0gTUlfQkFUQ0hf QlVGRkVSX1NUQVJUIHwgTUlfQkFUQ0hfR1RUOworCSpjcysrID0gb2Zmc2V0OworCWludGVsX3Jp bmdfYWR2YW5jZShycSwgY3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBnZW4zX2VtaXRfYmJf c3RhcnQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCisJCSAgICAgICB1NjQgb2Zmc2V0LCB1MzIg bGVuLAorCQkgICAgICAgdW5zaWduZWQgaW50IGRpc3BhdGNoX2ZsYWdzKQoreworCXUzMiAqY3M7 CisKKwlpZiAoIShkaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKSkKKwkJb2Zm c2V0IHw9IE1JX0JBVENIX05PTl9TRUNVUkU7CisKKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEs IDIpOworCWlmIChJU19FUlIoY3MpKQorCQlyZXR1cm4gUFRSX0VSUihjcyk7CisKKwkqY3MrKyA9 IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IE1JX0JBVENIX0dUVDsKKwkqY3MrKyA9IG9mZnNldDsK KwlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKKworCXJldHVybiAwOworfQorCitpbnQgZ2Vu NF9lbWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkgICAgICAgdTY0IG9m ZnNldCwgdTMyIGxlbmd0aCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkaXNwYXRjaF9mbGFncykK K3sKKwl1MzIgc2VjdXJpdHk7CisJdTMyICpjczsKKworCXNlY3VyaXR5ID0gTUlfQkFUQ0hfTk9O X1NFQ1VSRV9JOTY1OworCWlmIChkaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJF KQorCQlzZWN1cml0eSA9IDA7CisKKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDIpOworCWlm IChJU19FUlIoY3MpKQorCQlyZXR1cm4gUFRSX0VSUihjcyk7CisKKwkqY3MrKyA9IE1JX0JBVENI X0JVRkZFUl9TVEFSVCB8IE1JX0JBVENIX0dUVCB8IHNlY3VyaXR5OworCSpjcysrID0gb2Zmc2V0 OworCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQg Z2VuMl9pcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGVuZ2luZS0+aTkxNTsKKworCWk5MTUtPmlycV9t YXNrICY9IH5lbmdpbmUtPmlycV9lbmFibGVfbWFzazsKKwlpbnRlbF91bmNvcmVfd3JpdGUxNigm aTkxNS0+dW5jb3JlLCBHRU4yX0lNUiwgaTkxNS0+aXJxX21hc2spOworCUVOR0lORV9QT1NUSU5H X1JFQUQxNihlbmdpbmUsIFJJTkdfSU1SKTsKK30KKwordm9pZCBnZW4yX2lycV9kaXNhYmxlKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IGVuZ2luZS0+aTkxNTsKKworCWk5MTUtPmlycV9tYXNrIHw9IGVuZ2luZS0+aXJx X2VuYWJsZV9tYXNrOworCWludGVsX3VuY29yZV93cml0ZTE2KCZpOTE1LT51bmNvcmUsIEdFTjJf SU1SLCBpOTE1LT5pcnFfbWFzayk7Cit9CisKK3ZvaWQgZ2VuM19pcnFfZW5hYmxlKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwllbmdpbmUtPmk5MTUtPmlycV9tYXNrICY9IH5l bmdpbmUtPmlycV9lbmFibGVfbWFzazsKKwlpbnRlbF91bmNvcmVfd3JpdGUoZW5naW5lLT51bmNv cmUsIEdFTjJfSU1SLCBlbmdpbmUtPmk5MTUtPmlycV9tYXNrKTsKKwlpbnRlbF91bmNvcmVfcG9z dGluZ19yZWFkX2Z3KGVuZ2luZS0+dW5jb3JlLCBHRU4yX0lNUik7Cit9CisKK3ZvaWQgZ2VuM19p cnFfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJZW5naW5lLT5p OTE1LT5pcnFfbWFzayB8PSBlbmdpbmUtPmlycV9lbmFibGVfbWFzazsKKwlpbnRlbF91bmNvcmVf d3JpdGUoZW5naW5lLT51bmNvcmUsIEdFTjJfSU1SLCBlbmdpbmUtPmk5MTUtPmlycV9tYXNrKTsK K30KKwordm9pZCBnZW41X2lycV9lbmFibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQoreworCWdlbjVfZ3RfZW5hYmxlX2lycShlbmdpbmUtPmd0LCBlbmdpbmUtPmlycV9lbmFibGVf bWFzayk7Cit9CisKK3ZvaWQgZ2VuNV9pcnFfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCit7CisJZ2VuNV9ndF9kaXNhYmxlX2lycShlbmdpbmUtPmd0LCBlbmdpbmUtPmly cV9lbmFibGVfbWFzayk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9n ZW4yX2VuZ2luZV9jcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuMl9lbmdpbmVfY3Mu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE1Y2Q2NGE2NWM5ZQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjJfZW5naW5lX2Nz LmgKQEAgLTAsMCArMSwzOCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLwor LyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRl ZiBfX0dFTjJfRU5HSU5FX0NTX0hfXworI2RlZmluZSBfX0dFTjJfRU5HSU5FX0NTX0hfXworCisj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGk5MTVfcmVxdWVzdDsKK3N0cnVjdCBp bnRlbF9lbmdpbmVfY3M7CisKK2ludCBnZW4yX2VtaXRfZmx1c2goc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsIHUzMiBtb2RlKTsKK2ludCBnZW40X2VtaXRfZmx1c2hfcmNzKHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxLCB1MzIgbW9kZSk7CitpbnQgZ2VuNF9lbWl0X2ZsdXNoX3ZjcyhzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUpOworCit1MzIgKmdlbjNfZW1pdF9icmVhZGNydW1iKHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNzKTsKK3UzMiAqZ2VuNV9lbWl0X2JyZWFkY3J1 bWIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpOworCitpbnQgaTgzMF9lbWl0X2Ji X3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkgICAgICAgdTY0IG9mZnNldCwgdTMy IGxlbiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkaXNwYXRjaF9mbGFncyk7CitpbnQgZ2VuM19l bWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkgICAgICAgdTY0IG9mZnNl dCwgdTMyIGxlbiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkaXNwYXRjaF9mbGFncyk7CitpbnQg Z2VuNF9lbWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkgICAgICAgdTY0 IG9mZnNldCwgdTMyIGxlbmd0aCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkaXNwYXRjaF9mbGFn cyk7CisKK3ZvaWQgZ2VuMl9pcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSk7Cit2b2lkIGdlbjJfaXJxX2Rpc2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KTsKK3ZvaWQgZ2VuM19pcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7 Cit2b2lkIGdlbjNfaXJxX2Rpc2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsK K3ZvaWQgZ2VuNV9pcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cit2 b2lkIGdlbjVfaXJxX2Rpc2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKKwor I2VuZGlmIC8qIF9fR0VOMl9FTkdJTkVfQ1NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9nZW42X2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv Z2VuNl9lbmdpbmVfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LmNlMzhkMWJjYWJhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2dlbjZfZW5naW5lX2NzLmMKQEAgLTAsMCArMSw0NTUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgor ICovCisKKyNpbmNsdWRlICJnZW42X2VuZ2luZV9jcy5oIgorI2luY2x1ZGUgImludGVsX2VuZ2lu ZS5oIgorI2luY2x1ZGUgImludGVsX2dwdV9jb21tYW5kcy5oIgorI2luY2x1ZGUgImludGVsX2d0 LmgiCisjaW5jbHVkZSAiaW50ZWxfZ3RfaXJxLmgiCisjaW5jbHVkZSAiaW50ZWxfZ3RfcG1faXJx LmgiCisjaW5jbHVkZSAiaW50ZWxfcmluZy5oIgorCisjZGVmaW5lIEhXU19TQ1JBVENIX0FERFIJ KEk5MTVfR0VNX0hXU19TQ1JBVENIICogc2l6ZW9mKHUzMikpCisKKy8qCisgKiBFbWl0cyBhIFBJ UEVfQ09OVFJPTCB3aXRoIGEgbm9uLXplcm8gcG9zdC1zeW5jIG9wZXJhdGlvbiwgZm9yCisgKiBp bXBsZW1lbnRpbmcgdHdvIHdvcmthcm91bmRzIG9uIGdlbjYuICBGcm9tIHNlY3Rpb24gMS40Ljcu MQorICogIlBJUEVfQ09OVFJPTCIgb2YgdGhlIFNhbmR5IEJyaWRnZSBQUk0gdm9sdW1lIDIgcGFy dCAxOgorICoKKyAqIFtEZXZTTkItQyt7Vy9BfV0gQmVmb3JlIGFueSBkZXB0aCBzdGFsbCBmbHVz aCAoaW5jbHVkaW5nIHRob3NlCisgKiBwcm9kdWNlZCBieSBub24tcGlwZWxpbmVkIHN0YXRlIGNv bW1hbmRzKSwgc29mdHdhcmUgbmVlZHMgdG8gZmlyc3QKKyAqIHNlbmQgYSBQSVBFX0NPTlRST0wg d2l0aCBubyBiaXRzIHNldCBleGNlcHQgUG9zdC1TeW5jIE9wZXJhdGlvbiAhPQorICogMC4KKyAq CisgKiBbRGV2LVNOQntXL0F9XTogQmVmb3JlIGEgUElQRV9DT05UUk9MIHdpdGggV3JpdGUgQ2Fj aGUgRmx1c2ggRW5hYmxlCisgKiA9MSwgYSBQSVBFX0NPTlRST0wgd2l0aCBhbnkgbm9uLXplcm8g cG9zdC1zeW5jLW9wIGlzIHJlcXVpcmVkLgorICoKKyAqIEFuZCB0aGUgd29ya2Fyb3VuZCBmb3Ig dGhlc2UgdHdvIHJlcXVpcmVzIHRoaXMgd29ya2Fyb3VuZCBmaXJzdDoKKyAqCisgKiBbRGV2LVNO QntXL0F9XTogUGlwZS1jb250cm9sIHdpdGggQ1Mtc3RhbGwgYml0IHNldCBtdXN0IGJlIHNlbnQK KyAqIEJFRk9SRSB0aGUgcGlwZS1jb250cm9sIHdpdGggYSBwb3N0LXN5bmMgb3AgYW5kIG5vIHdy aXRlLWNhY2hlCisgKiBmbHVzaGVzLgorICoKKyAqIEFuZCB0aGlzIGxhc3Qgd29ya2Fyb3VuZCBp cyB0cmlja3kgYmVjYXVzZSBvZiB0aGUgcmVxdWlyZW1lbnRzIG9uCisgKiB0aGF0IGJpdC4gIEZy b20gc2VjdGlvbiAxLjQuNy4yLjMgIlN0YWxsIiBvZiB0aGUgU2FuZHkgQnJpZGdlIFBSTQorICog dm9sdW1lIDIgcGFydCAxOgorICoKKyAqICAgICAiMSBvZiB0aGUgZm9sbG93aW5nIG11c3QgYWxz byBiZSBzZXQ6CisgKiAgICAgIC0gUmVuZGVyIFRhcmdldCBDYWNoZSBGbHVzaCBFbmFibGUgKFsx Ml0gb2YgRFcxKQorICogICAgICAtIERlcHRoIENhY2hlIEZsdXNoIEVuYWJsZSAoWzBdIG9mIERX MSkKKyAqICAgICAgLSBTdGFsbCBhdCBQaXhlbCBTY29yZWJvYXJkIChbMV0gb2YgRFcxKQorICog ICAgICAtIERlcHRoIFN0YWxsIChbMTNdIG9mIERXMSkKKyAqICAgICAgLSBQb3N0LVN5bmMgT3Bl cmF0aW9uIChbMTNdIG9mIERXMSkKKyAqICAgICAgLSBOb3RpZnkgRW5hYmxlIChbOF0gb2YgRFcx KSIKKyAqCisgKiBUaGUgY2FjaGUgZmx1c2hlcyByZXF1aXJlIHRoZSB3b3JrYXJvdW5kIGZsdXNo IHRoYXQgdHJpZ2dlcmVkIHRoaXMKKyAqIG9uZSwgc28gd2UgY2FuJ3QgdXNlIGl0LiAgRGVwdGgg c3RhbGwgd291bGQgdHJpZ2dlciB0aGUgc2FtZS4KKyAqIFBvc3Qtc3luYyBub256ZXJvIGlzIHdo YXQgdHJpZ2dlcmVkIHRoaXMgc2Vjb25kIHdvcmthcm91bmQsIHNvIHdlCisgKiBjYW4ndCB1c2Ug dGhhdCBvbmUgZWl0aGVyLiAgTm90aWZ5IGVuYWJsZSBpcyBJUlFzLCB3aGljaCBhcmVuJ3QKKyAq IHJlYWxseSBvdXIgYnVzaW5lc3MuICBUaGF0IGxlYXZlcyBvbmx5IHN0YWxsIGF0IHNjb3JlYm9h cmQuCisgKi8KK3N0YXRpYyBpbnQKK2dlbjZfZW1pdF9wb3N0X3N5bmNfbm9uemVyb19mbHVzaChz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKK3sKKwl1MzIgc2NyYXRjaF9hZGRyID0KKwkJaW50ZWxf Z3Rfc2NyYXRjaF9vZmZzZXQocnEtPmVuZ2luZS0+Z3QsCisJCQkJCUlOVEVMX0dUX1NDUkFUQ0hf RklFTERfUkVOREVSX0ZMVVNIKTsKKwl1MzIgKmNzOworCisJY3MgPSBpbnRlbF9yaW5nX2JlZ2lu KHJxLCA2KTsKKwlpZiAoSVNfRVJSKGNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3MpOworCisJKmNz KysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDUpOworCSpjcysrID0gUElQRV9DT05UUk9MX0NTX1NU QUxMIHwgUElQRV9DT05UUk9MX1NUQUxMX0FUX1NDT1JFQk9BUkQ7CisJKmNzKysgPSBzY3JhdGNo X2FkZHIgfCBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVDsKKwkqY3MrKyA9IDA7IC8qIGxvdyBkd29y ZCAqLworCSpjcysrID0gMDsgLyogaGlnaCBkd29yZCAqLworCSpjcysrID0gTUlfTk9PUDsKKwlp bnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKKworCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwg Nik7CisJaWYgKElTX0VSUihjcykpCisJCXJldHVybiBQVFJfRVJSKGNzKTsKKworCSpjcysrID0g R0ZYX09QX1BJUEVfQ09OVFJPTCg1KTsKKwkqY3MrKyA9IFBJUEVfQ09OVFJPTF9RV19XUklURTsK KwkqY3MrKyA9IHNjcmF0Y2hfYWRkciB8IFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUOworCSpjcysr ID0gMDsKKwkqY3MrKyA9IDA7CisJKmNzKysgPSBNSV9OT09QOworCWludGVsX3JpbmdfYWR2YW5j ZShycSwgY3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBnZW42X2VtaXRfZmx1c2hfcmNzKHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSkKK3sKKwl1MzIgc2NyYXRjaF9hZGRyID0K KwkJaW50ZWxfZ3Rfc2NyYXRjaF9vZmZzZXQocnEtPmVuZ2luZS0+Z3QsCisJCQkJCUlOVEVMX0dU X1NDUkFUQ0hfRklFTERfUkVOREVSX0ZMVVNIKTsKKwl1MzIgKmNzLCBmbGFncyA9IDA7CisJaW50 IHJldDsKKworCS8qIEZvcmNlIFNOQiB3b3JrYXJvdW5kcyBmb3IgUElQRV9DT05UUk9MIGZsdXNo ZXMgKi8KKwlyZXQgPSBnZW42X2VtaXRfcG9zdF9zeW5jX25vbnplcm9fZmx1c2gocnEpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIEp1c3QgZmx1c2ggZXZlcnl0aGluZy4g IEV4cGVyaW1lbnRzIGhhdmUgc2hvd24gdGhhdCByZWR1Y2luZyB0aGUKKwkgKiBudW1iZXIgb2Yg Yml0cyBiYXNlZCBvbiB0aGUgd3JpdGUgZG9tYWlucyBoYXMgbGl0dGxlIHBlcmZvcm1hbmNlCisJ ICogaW1wYWN0LiBBbmQgd2hlbiByZWFycmFuZ2luZyByZXF1ZXN0cywgdGhlIG9yZGVyIG9mIGZs dXNoZXMgaXMKKwkgKiB1bmtub3duLgorCSAqLworCWlmIChtb2RlICYgRU1JVF9GTFVTSCkgewor CQlmbGFncyB8PSBQSVBFX0NPTlRST0xfUkVOREVSX1RBUkdFVF9DQUNIRV9GTFVTSDsKKwkJZmxh Z3MgfD0gUElQRV9DT05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIOworCQkvKgorCQkgKiBFbnN1cmUg dGhhdCBhbnkgZm9sbG93aW5nIHNlcW5vIHdyaXRlcyBvbmx5IGhhcHBlbgorCQkgKiB3aGVuIHRo ZSByZW5kZXIgY2FjaGUgaXMgaW5kZWVkIGZsdXNoZWQuCisJCSAqLworCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfQ1NfU1RBTEw7CisJfQorCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7CisJ CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9D T05UUk9MX0lOU1RSVUNUSU9OX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09O VFJPTF9URVhUVVJFX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9W Rl9DQUNIRV9JTlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ09OU1RfQ0FDSEVf SU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lOVkFMSURB VEU7CisJCS8qCisJCSAqIFRMQiBpbnZhbGlkYXRlIHJlcXVpcmVzIGEgcG9zdC1zeW5jIHdyaXRl LgorCQkgKi8KKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFIHwgUElQRV9DT05UUk9M X0NTX1NUQUxMOworCX0KKworCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNCk7CisJaWYgKElT X0VSUihjcykpCisJCXJldHVybiBQVFJfRVJSKGNzKTsKKworCSpjcysrID0gR0ZYX09QX1BJUEVf Q09OVFJPTCg0KTsKKwkqY3MrKyA9IGZsYWdzOworCSpjcysrID0gc2NyYXRjaF9hZGRyIHwgUElQ RV9DT05UUk9MX0dMT0JBTF9HVFQ7CisJKmNzKysgPSAwOworCWludGVsX3JpbmdfYWR2YW5jZShy cSwgY3MpOworCisJcmV0dXJuIDA7Cit9CisKK3UzMiAqZ2VuNl9lbWl0X2JyZWFkY3J1bWJfcmNz KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNzKQoreworCS8qIEZpcnN0IHdlIGRvIHRo ZSBnZW42X2VtaXRfcG9zdF9zeW5jX25vbnplcm9fZmx1c2ggdy9hICovCisJKmNzKysgPSBHRlhf T1BfUElQRV9DT05UUk9MKDQpOworCSpjcysrID0gUElQRV9DT05UUk9MX0NTX1NUQUxMIHwgUElQ RV9DT05UUk9MX1NUQUxMX0FUX1NDT1JFQk9BUkQ7CisJKmNzKysgPSAwOworCSpjcysrID0gMDsK KworCSpjcysrID0gR0ZYX09QX1BJUEVfQ09OVFJPTCg0KTsKKwkqY3MrKyA9IFBJUEVfQ09OVFJP TF9RV19XUklURTsKKwkqY3MrKyA9IGludGVsX2d0X3NjcmF0Y2hfb2Zmc2V0KHJxLT5lbmdpbmUt Pmd0LAorCQkJCQlJTlRFTF9HVF9TQ1JBVENIX0ZJRUxEX0RFRkFVTFQpIHwKKwkJUElQRV9DT05U Uk9MX0dMT0JBTF9HVFQ7CisJKmNzKysgPSAwOworCisJLyogRmluYWxseSB3ZSBjYW4gZmx1c2gg YW5kIHdpdGggaXQgZW1pdCB0aGUgYnJlYWRjcnVtYiAqLworCSpjcysrID0gR0ZYX09QX1BJUEVf Q09OVFJPTCg0KTsKKwkqY3MrKyA9IChQSVBFX0NPTlRST0xfUkVOREVSX1RBUkdFVF9DQUNIRV9G TFVTSCB8CisJCSBQSVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0ggfAorCQkgUElQRV9DT05U Uk9MX0RDX0ZMVVNIX0VOQUJMRSB8CisJCSBQSVBFX0NPTlRST0xfUVdfV1JJVEUgfAorCQkgUElQ RV9DT05UUk9MX0NTX1NUQUxMKTsKKwkqY3MrKyA9IGk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxp bmUocnEpLT5od3NwX29mZnNldCB8CisJCVBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUOworCSpjcysr ID0gcnEtPmZlbmNlLnNlcW5vOworCisJKmNzKysgPSBNSV9VU0VSX0lOVEVSUlVQVDsKKwkqY3Mr KyA9IE1JX05PT1A7CisKKwlycS0+dGFpbCA9IGludGVsX3Jpbmdfb2Zmc2V0KHJxLCBjcyk7CisJ YXNzZXJ0X3JpbmdfdGFpbF92YWxpZChycS0+cmluZywgcnEtPnRhaWwpOworCisJcmV0dXJuIGNz OworfQorCitzdGF0aWMgaW50IG1pX2ZsdXNoX2R3KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1 MzIgZmxhZ3MpCit7CisJdTMyIGNtZCwgKmNzOworCisJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJx LCA0KTsKKwlpZiAoSVNfRVJSKGNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3MpOworCisJY21kID0g TUlfRkxVU0hfRFc7CisKKwkvKgorCSAqIFdlIGFsd2F5cyByZXF1aXJlIGEgY29tbWFuZCBiYXJy aWVyIHNvIHRoYXQgc3Vic2VxdWVudAorCSAqIGNvbW1hbmRzLCBzdWNoIGFzIGJyZWFkY3J1bWIg aW50ZXJydXB0cywgYXJlIHN0cmljdGx5IG9yZGVyZWQKKwkgKiB3cnQgdGhlIGNvbnRlbnRzIG9m IHRoZSB3cml0ZSBjYWNoZSBiZWluZyBmbHVzaGVkIHRvIG1lbW9yeQorCSAqIChhbmQgdGh1cyBi ZWluZyBjb2hlcmVudCBmcm9tIHRoZSBDUFUpLgorCSAqLworCWNtZCB8PSBNSV9GTFVTSF9EV19T VE9SRV9JTkRFWCB8IE1JX0ZMVVNIX0RXX09QX1NUT1JFRFc7CisKKwkvKgorCSAqIEJzcGVjIHZv bCAxYy4zIC0gYmxpdHRlciBlbmdpbmUgY29tbWFuZCBzdHJlYW1lcjoKKwkgKiAiSWYgRU5BQkxF RCwgYWxsIFRMQnMgd2lsbCBiZSBpbnZhbGlkYXRlZCBvbmNlIHRoZSBmbHVzaAorCSAqIG9wZXJh dGlvbiBpcyBjb21wbGV0ZS4gVGhpcyBiaXQgaXMgb25seSB2YWxpZCB3aGVuIHRoZQorCSAqIFBv c3QtU3luYyBPcGVyYXRpb24gZmllbGQgaXMgYSB2YWx1ZSBvZiAxaCBvciAzaC4iCisJICovCisJ Y21kIHw9IGZsYWdzOworCisJKmNzKysgPSBjbWQ7CisJKmNzKysgPSBIV1NfU0NSQVRDSF9BRERS IHwgTUlfRkxVU0hfRFdfVVNFX0dUVDsKKwkqY3MrKyA9IDA7CisJKmNzKysgPSBNSV9OT09QOwor CisJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBnZW42X2ZsdXNoX2R3KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSwgdTMy IGludmZsYWdzKQoreworCXJldHVybiBtaV9mbHVzaF9kdyhycSwgbW9kZSAmIEVNSVRfSU5WQUxJ REFURSA/IGludmZsYWdzIDogMCk7Cit9CisKK2ludCBnZW42X2VtaXRfZmx1c2hfeGNzKHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSkKK3sKKwlyZXR1cm4gZ2VuNl9mbHVzaF9kdyhy cSwgbW9kZSwgTUlfSU5WQUxJREFURV9UTEIpOworfQorCitpbnQgZ2VuNl9lbWl0X2ZsdXNoX3Zj cyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUpCit7CisJcmV0dXJuIGdlbjZfZmx1 c2hfZHcocnEsIG1vZGUsIE1JX0lOVkFMSURBVEVfVExCIHwgTUlfSU5WQUxJREFURV9CU0QpOwor fQorCitpbnQgZ2VuNl9lbWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkg ICAgICAgdTY0IG9mZnNldCwgdTMyIGxlbiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkaXNwYXRj aF9mbGFncykKK3sKKwl1MzIgc2VjdXJpdHk7CisJdTMyICpjczsKKworCXNlY3VyaXR5ID0gTUlf QkFUQ0hfTk9OX1NFQ1VSRV9JOTY1OworCWlmIChkaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFU Q0hfU0VDVVJFKQorCQlzZWN1cml0eSA9IDA7CisKKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEs IDIpOworCWlmIChJU19FUlIoY3MpKQorCQlyZXR1cm4gUFRSX0VSUihjcyk7CisKKwljcyA9IF9f Z2VuNl9lbWl0X2JiX3N0YXJ0KGNzLCBvZmZzZXQsIHNlY3VyaXR5KTsKKwlpbnRlbF9yaW5nX2Fk dmFuY2UocnEsIGNzKTsKKworCXJldHVybiAwOworfQorCitpbnQKK2hzd19lbWl0X2JiX3N0YXJ0 KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkgIHU2NCBvZmZzZXQsIHUzMiBsZW4sCisJCSAg dW5zaWduZWQgaW50IGRpc3BhdGNoX2ZsYWdzKQoreworCXUzMiBzZWN1cml0eTsKKwl1MzIgKmNz OworCisJc2VjdXJpdHkgPSBNSV9CQVRDSF9QUEdUVF9IU1cgfCBNSV9CQVRDSF9OT05fU0VDVVJF X0hTVzsKKwlpZiAoZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1NFQ1VSRSkKKwkJc2Vj dXJpdHkgPSAwOworCisJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAyKTsKKwlpZiAoSVNfRVJS KGNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3MpOworCisJY3MgPSBfX2dlbjZfZW1pdF9iYl9zdGFy dChjcywgb2Zmc2V0LCBzZWN1cml0eSk7CisJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZW43X3N0YWxsX2NzKHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxKQoreworCXUzMiAqY3M7CisKKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQp OworCWlmIChJU19FUlIoY3MpKQorCQlyZXR1cm4gUFRSX0VSUihjcyk7CisKKwkqY3MrKyA9IEdG WF9PUF9QSVBFX0NPTlRST0woNCk7CisJKmNzKysgPSBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfCBQ SVBFX0NPTlRST0xfU1RBTExfQVRfU0NPUkVCT0FSRDsKKwkqY3MrKyA9IDA7CisJKmNzKysgPSAw OworCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBn ZW43X2VtaXRfZmx1c2hfcmNzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSkKK3sK Kwl1MzIgc2NyYXRjaF9hZGRyID0KKwkJaW50ZWxfZ3Rfc2NyYXRjaF9vZmZzZXQocnEtPmVuZ2lu ZS0+Z3QsCisJCQkJCUlOVEVMX0dUX1NDUkFUQ0hfRklFTERfUkVOREVSX0ZMVVNIKTsKKwl1MzIg KmNzLCBmbGFncyA9IDA7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IGFueSBmb2xsb3dpbmcgc2Vx bm8gd3JpdGVzIG9ubHkgaGFwcGVuIHdoZW4gdGhlIHJlbmRlcgorCSAqIGNhY2hlIGlzIGluZGVl ZCBmbHVzaGVkLgorCSAqCisJICogV29ya2Fyb3VuZDogNHRoIFBJUEVfQ09OVFJPTCBjb21tYW5k IChleGNlcHQgdGhlIG9uZXMgd2l0aCBvbmx5CisJICogcmVhZC1jYWNoZSBpbnZhbGlkYXRlIGJp dHMgc2V0KSBtdXN0IGhhdmUgdGhlIENTX1NUQUxMIGJpdCBzZXQuIFdlCisJICogZG9uJ3QgdHJ5 IHRvIGJlIGNsZXZlciBhbmQganVzdCBzZXQgaXQgdW5jb25kaXRpb25hbGx5LgorCSAqLworCWZs YWdzIHw9IFBJUEVfQ09OVFJPTF9DU19TVEFMTDsKKworCS8qCisJICogQ1NfU1RBTEwgc3VnZ2Vz dHMgYXQgbGVhc3QgYSBwb3N0LXN5bmMgd3JpdGUuCisJICovCisJZmxhZ3MgfD0gUElQRV9DT05U Uk9MX1FXX1dSSVRFOworCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUX0lWQjsKKwor CS8qCisJICogSnVzdCBmbHVzaCBldmVyeXRoaW5nLiAgRXhwZXJpbWVudHMgaGF2ZSBzaG93biB0 aGF0IHJlZHVjaW5nIHRoZQorCSAqIG51bWJlciBvZiBiaXRzIGJhc2VkIG9uIHRoZSB3cml0ZSBk b21haW5zIGhhcyBsaXR0bGUgcGVyZm9ybWFuY2UKKwkgKiBpbXBhY3QuCisJICovCisJaWYgKG1v ZGUgJiBFTUlUX0ZMVVNIKSB7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VU X0NBQ0hFX0ZMVVNIOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0g7 CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9EQ19GTFVTSF9FTkFCTEU7CisJCWZsYWdzIHw9IFBJ UEVfQ09OVFJPTF9GTFVTSF9FTkFCTEU7CisJfQorCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRF KSB7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0g UElQRV9DT05UUk9MX0lOU1RSVUNUSU9OX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJ UEVfQ09OVFJPTF9URVhUVVJFX0NBQ0hFX0lOVkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09O VFJPTF9WRl9DQUNIRV9JTlZBTElEQVRFOworCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ09OU1Rf Q0FDSEVfSU5WQUxJREFURTsKKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lO VkFMSURBVEU7CisJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9NRURJQV9TVEFURV9DTEVBUjsKKwor CQkvKgorCQkgKiBXb3JrYXJvdW5kOiB3ZSBtdXN0IGlzc3VlIGEgcGlwZV9jb250cm9sIHdpdGgg Q1Mtc3RhbGwgYml0CisJCSAqIHNldCBiZWZvcmUgYSBwaXBlX2NvbnRyb2wgY29tbWFuZCB0aGF0 IGhhcyB0aGUgc3RhdGUgY2FjaGUKKwkJICogaW52YWxpZGF0ZSBiaXQgc2V0LgorCQkgKi8KKwkJ Z2VuN19zdGFsbF9jcyhycSk7CisJfQorCisJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0KTsK KwlpZiAoSVNfRVJSKGNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3MpOworCisJKmNzKysgPSBHRlhf T1BfUElQRV9DT05UUk9MKDQpOworCSpjcysrID0gZmxhZ3M7CisJKmNzKysgPSBzY3JhdGNoX2Fk ZHI7CisJKmNzKysgPSAwOworCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOworCisJcmV0dXJu IDA7Cit9CisKK3UzMiAqZ2VuN19lbWl0X2JyZWFkY3J1bWJfcmNzKHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxLCB1MzIgKmNzKQoreworCSpjcysrID0gR0ZYX09QX1BJUEVfQ09OVFJPTCg0KTsKKwkq Y3MrKyA9IChQSVBFX0NPTlRST0xfUkVOREVSX1RBUkdFVF9DQUNIRV9GTFVTSCB8CisJCSBQSVBF X0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0ggfAorCQkgUElQRV9DT05UUk9MX0RDX0ZMVVNIX0VO QUJMRSB8CisJCSBQSVBFX0NPTlRST0xfRkxVU0hfRU5BQkxFIHwKKwkJIFBJUEVfQ09OVFJPTF9R V19XUklURSB8CisJCSBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9JVkIgfAorCQkgUElQRV9DT05U Uk9MX0NTX1NUQUxMKTsKKwkqY3MrKyA9IGk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxpbmUocnEp LT5od3NwX29mZnNldDsKKwkqY3MrKyA9IHJxLT5mZW5jZS5zZXFubzsKKworCSpjcysrID0gTUlf VVNFUl9JTlRFUlJVUFQ7CisJKmNzKysgPSBNSV9OT09QOworCisJcnEtPnRhaWwgPSBpbnRlbF9y aW5nX29mZnNldChycSwgY3MpOworCWFzc2VydF9yaW5nX3RhaWxfdmFsaWQocnEtPnJpbmcsIHJx LT50YWlsKTsKKworCXJldHVybiBjczsKK30KKwordTMyICpnZW42X2VtaXRfYnJlYWRjcnVtYl94 Y3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpCit7CisJR0VNX0JVR19PTihpOTE1 X3JlcXVlc3RfYWN0aXZlX3RpbWVsaW5lKHJxKS0+aHdzcF9nZ3R0ICE9IHJxLT5lbmdpbmUtPnN0 YXR1c19wYWdlLnZtYSk7CisJR0VNX0JVR19PTihvZmZzZXRfaW5fcGFnZShpOTE1X3JlcXVlc3Rf YWN0aXZlX3RpbWVsaW5lKHJxKS0+aHdzcF9vZmZzZXQpICE9IEk5MTVfR0VNX0hXU19TRVFOT19B RERSKTsKKworCSpjcysrID0gTUlfRkxVU0hfRFcgfCBNSV9GTFVTSF9EV19PUF9TVE9SRURXIHwg TUlfRkxVU0hfRFdfU1RPUkVfSU5ERVg7CisJKmNzKysgPSBJOTE1X0dFTV9IV1NfU0VRTk9fQURE UiB8IE1JX0ZMVVNIX0RXX1VTRV9HVFQ7CisJKmNzKysgPSBycS0+ZmVuY2Uuc2Vxbm87CisKKwkq Y3MrKyA9IE1JX1VTRVJfSU5URVJSVVBUOworCisJcnEtPnRhaWwgPSBpbnRlbF9yaW5nX29mZnNl dChycSwgY3MpOworCWFzc2VydF9yaW5nX3RhaWxfdmFsaWQocnEtPnJpbmcsIHJxLT50YWlsKTsK KworCXJldHVybiBjczsKK30KKworI2RlZmluZSBHRU43X1hDU19XQSAzMgordTMyICpnZW43X2Vt aXRfYnJlYWRjcnVtYl94Y3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpCit7CisJ aW50IGk7CisKKwlHRU1fQlVHX09OKGk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxpbmUocnEpLT5o d3NwX2dndHQgIT0gcnEtPmVuZ2luZS0+c3RhdHVzX3BhZ2Uudm1hKTsKKwlHRU1fQlVHX09OKG9m ZnNldF9pbl9wYWdlKGk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxpbmUocnEpLT5od3NwX29mZnNl dCkgIT0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFIpOworCisJKmNzKysgPSBNSV9GTFVTSF9EVyB8 IE1JX0lOVkFMSURBVEVfVExCIHwKKwkJTUlfRkxVU0hfRFdfT1BfU1RPUkVEVyB8IE1JX0ZMVVNI X0RXX1NUT1JFX0lOREVYOworCSpjcysrID0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFIgfCBNSV9G TFVTSF9EV19VU0VfR1RUOworCSpjcysrID0gcnEtPmZlbmNlLnNlcW5vOworCisJZm9yIChpID0g MDsgaSA8IEdFTjdfWENTX1dBOyBpKyspIHsKKwkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTkRF WDsKKwkJKmNzKysgPSBJOTE1X0dFTV9IV1NfU0VRTk9fQUREUjsKKwkJKmNzKysgPSBycS0+ZmVu Y2Uuc2Vxbm87CisJfQorCisJKmNzKysgPSBNSV9GTFVTSF9EVzsKKwkqY3MrKyA9IDA7CisJKmNz KysgPSAwOworCisJKmNzKysgPSBNSV9VU0VSX0lOVEVSUlVQVDsKKwkqY3MrKyA9IE1JX05PT1A7 CisKKwlycS0+dGFpbCA9IGludGVsX3Jpbmdfb2Zmc2V0KHJxLCBjcyk7CisJYXNzZXJ0X3Jpbmdf dGFpbF92YWxpZChycS0+cmluZywgcnEtPnRhaWwpOworCisJcmV0dXJuIGNzOworfQorI3VuZGVm IEdFTjdfWENTX1dBCisKK3ZvaWQgZ2VuNl9pcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKK3sKKwlFTkdJTkVfV1JJVEUoZW5naW5lLCBSSU5HX0lNUiwKKwkJICAgICB+ KGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrIHwgZW5naW5lLT5pcnFfa2VlcF9tYXNrKSk7CisKKwkv KiBGbHVzaC9kZWxheSB0byBlbnN1cmUgdGhlIFJJTkdfSU1SIGlzIGFjdGl2ZSBiZWZvcmUgdGhl IEdUIElNUiAqLworCUVOR0lORV9QT1NUSU5HX1JFQUQoZW5naW5lLCBSSU5HX0lNUik7CisKKwln ZW41X2d0X2VuYWJsZV9pcnEoZW5naW5lLT5ndCwgZW5naW5lLT5pcnFfZW5hYmxlX21hc2spOwor fQorCit2b2lkIGdlbjZfaXJxX2Rpc2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQoreworCUVOR0lORV9XUklURShlbmdpbmUsIFJJTkdfSU1SLCB+ZW5naW5lLT5pcnFfa2VlcF9t YXNrKTsKKwlnZW41X2d0X2Rpc2FibGVfaXJxKGVuZ2luZS0+Z3QsIGVuZ2luZS0+aXJxX2VuYWJs ZV9tYXNrKTsKK30KKwordm9pZCBoc3dfaXJxX2VuYWJsZV92ZWNzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKK3sKKwlFTkdJTkVfV1JJVEUoZW5naW5lLCBSSU5HX0lNUiwgfmVuZ2lu ZS0+aXJxX2VuYWJsZV9tYXNrKTsKKworCS8qIEZsdXNoL2RlbGF5IHRvIGVuc3VyZSB0aGUgUklO R19JTVIgaXMgYWN0aXZlIGJlZm9yZSB0aGUgR1QgSU1SICovCisJRU5HSU5FX1BPU1RJTkdfUkVB RChlbmdpbmUsIFJJTkdfSU1SKTsKKworCWdlbjZfZ3RfcG1fdW5tYXNrX2lycShlbmdpbmUtPmd0 LCBlbmdpbmUtPmlycV9lbmFibGVfbWFzayk7Cit9CisKK3ZvaWQgaHN3X2lycV9kaXNhYmxlX3Zl Y3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCUVOR0lORV9XUklURShlbmdp bmUsIFJJTkdfSU1SLCB+MCk7CisJZ2VuNl9ndF9wbV9tYXNrX2lycShlbmdpbmUtPmd0LCBlbmdp bmUtPmlycV9lbmFibGVfbWFzayk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9nZW42X2VuZ2luZV9jcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuNl9lbmdp bmVfY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjc2YzZiYzlm M2JkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjZfZW5n aW5lX2NzLmgKQEAgLTAsMCArMSwzOSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1J VCAqLworLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBvcmF0aW9uCisgKi8KKwor I2lmbmRlZiBfX0dFTjZfRU5HSU5FX0NTX0hfXworI2RlZmluZSBfX0dFTjZfRU5HSU5FX0NTX0hf XworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgImludGVsX2dwdV9jb21t YW5kcy5oIgorCitzdHJ1Y3QgaTkxNV9yZXF1ZXN0Oworc3RydWN0IGludGVsX2VuZ2luZV9jczsK KworaW50IGdlbjZfZW1pdF9mbHVzaF9yY3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBt b2RlKTsKK2ludCBnZW42X2VtaXRfZmx1c2hfdmNzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1 MzIgbW9kZSk7CitpbnQgZ2VuNl9lbWl0X2ZsdXNoX3hjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSwgdTMyIG1vZGUpOwordTMyICpnZW42X2VtaXRfYnJlYWRjcnVtYl9yY3Moc3RydWN0IGk5MTVf cmVxdWVzdCAqcnEsIHUzMiAqY3MpOwordTMyICpnZW42X2VtaXRfYnJlYWRjcnVtYl94Y3Moc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpOworCitpbnQgZ2VuN19lbWl0X2ZsdXNoX3Jj cyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUpOwordTMyICpnZW43X2VtaXRfYnJl YWRjcnVtYl9yY3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpOwordTMyICpnZW43 X2VtaXRfYnJlYWRjcnVtYl94Y3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpOwor CitpbnQgZ2VuNl9lbWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkgICAg ICAgdTY0IG9mZnNldCwgdTMyIGxlbiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkaXNwYXRjaF9m bGFncyk7CitpbnQgaHN3X2VtaXRfYmJfc3RhcnQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCisJ CSAgICAgIHU2NCBvZmZzZXQsIHUzMiBsZW4sCisJCSAgICAgIHVuc2lnbmVkIGludCBkaXNwYXRj aF9mbGFncyk7CisKK3ZvaWQgZ2VuNl9pcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSk7Cit2b2lkIGdlbjZfaXJxX2Rpc2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKTsKKwordm9pZCBoc3dfaXJxX2VuYWJsZV92ZWNzKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSk7Cit2b2lkIGhzd19pcnFfZGlzYWJsZV92ZWNzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSk7CisKKyNlbmRpZiAvKiBfX0dFTjZfRU5HSU5FX0NTX0hfXyAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lLmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaAppbmRleCA5YmY2ZDQ5ODk5NjguLjc5MTg5 N2Y4ZDg0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5l LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lLmgKQEAgLTE4Nyw3 ICsxODcsNiBAQCBpbnRlbF93cml0ZV9zdGF0dXNfcGFnZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIGludCByZWcsIHUzMiB2YWx1ZSkKICNkZWZpbmUgSTkxNV9HRU1fSFdTX1NFUU5P CQkweDQwCiAjZGVmaW5lIEk5MTVfR0VNX0hXU19TRVFOT19BRERSCQkoSTkxNV9HRU1fSFdTX1NF UU5PICogc2l6ZW9mKHUzMikpCiAjZGVmaW5lIEk5MTVfR0VNX0hXU19TQ1JBVENICQkweDgwCi0j ZGVmaW5lIEk5MTVfR0VNX0hXU19TQ1JBVENIX0FERFIJKEk5MTVfR0VNX0hXU19TQ1JBVENIICog c2l6ZW9mKHUzMikpCiAKICNkZWZpbmUgSTkxNV9IV1NfQ1NCX0JVRjBfSU5ERVgJCTB4MTAKICNk ZWZpbmUgSTkxNV9IV1NfQ1NCX1dSSVRFX0lOREVYCTB4MWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfcmluZ19zdWJtaXNzaW9uLmMKaW5kZXggY2E3Mjg2ZTU4NDA5Li45Njg4 MWNkOGIxN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdf c3VibWlzc2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdfc3Vi bWlzc2lvbi5jCkBAIC0yNywyMSArMjcsMTUgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4 L2xvZzIuaD4KLQotI2luY2x1ZGUgImdlbS9pOTE1X2dlbV9jb250ZXh0LmgiCi0KKyNpbmNsdWRl ICJnZW4yX2VuZ2luZV9jcy5oIgorI2luY2x1ZGUgImdlbjZfZW5naW5lX2NzLmgiCiAjaW5jbHVk ZSAiZ2VuNl9wcGd0dC5oIgogI2luY2x1ZGUgImdlbjdfcmVuZGVyY2xlYXIuaCIKICNpbmNsdWRl ICJpOTE1X2Rydi5oIgotI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKICNpbmNsdWRlICJpbnRlbF9j b250ZXh0LmgiCiAjaW5jbHVkZSAiaW50ZWxfZ3QuaCIKLSNpbmNsdWRlICJpbnRlbF9ndF9pcnEu aCIKLSNpbmNsdWRlICJpbnRlbF9ndF9wbV9pcnEuaCIKICNpbmNsdWRlICJpbnRlbF9yZXNldC5o IgogI2luY2x1ZGUgImludGVsX3JpbmcuaCIKLSNpbmNsdWRlICJpbnRlbF93b3JrYXJvdW5kcy5o IgogI2luY2x1ZGUgInNobWVtX3V0aWxzLmgiCiAKIC8qIFJvdWdoIGVzdGltYXRlIG9mIHRoZSB0 eXBpY2FsIHJlcXVlc3Qgc2l6ZSwgcGVyZm9ybWluZyBhIGZsdXNoLApAQCAtNDksNDM2ICs0Myw2 IEBACiAgKi8KICNkZWZpbmUgTEVHQUNZX1JFUVVFU1RfU0laRSAyMDAKIAotc3RhdGljIGludAot Z2VuMl9yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUp Ci17Ci0JdW5zaWduZWQgaW50IG51bV9zdG9yZV9kdzsKLQl1MzIgY21kLCAqY3M7Ci0KLQljbWQg PSBNSV9GTFVTSDsKLQludW1fc3RvcmVfZHcgPSAwOwotCWlmIChtb2RlICYgRU1JVF9JTlZBTElE QVRFKQotCQljbWQgfD0gTUlfUkVBRF9GTFVTSDsKLQlpZiAobW9kZSAmIEVNSVRfRkxVU0gpCi0J CW51bV9zdG9yZV9kdyA9IDQ7Ci0KLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDIgKyAzICog bnVtX3N0b3JlX2R3KTsKLQlpZiAoSVNfRVJSKGNzKSkKLQkJcmV0dXJuIFBUUl9FUlIoY3MpOwot Ci0JKmNzKysgPSBjbWQ7Ci0Jd2hpbGUgKG51bV9zdG9yZV9kdy0tKSB7Ci0JCSpjcysrID0gTUlf U1RPUkVfRFdPUkRfSU1NIHwgTUlfTUVNX1ZJUlRVQUw7Ci0JCSpjcysrID0gaW50ZWxfZ3Rfc2Ny YXRjaF9vZmZzZXQocnEtPmVuZ2luZS0+Z3QsCi0JCQkJCQlJTlRFTF9HVF9TQ1JBVENIX0ZJRUxE X0RFRkFVTFQpOwotCQkqY3MrKyA9IDA7Ci0JfQotCSpjcysrID0gTUlfRkxVU0ggfCBNSV9OT19X UklURV9GTFVTSDsKLQotCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQKLWdlbjRfcmVuZGVyX3JpbmdfZmx1c2goc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEsIHUzMiBtb2RlKQotewotCXUzMiBjbWQsICpjczsKLQlpbnQgaTsKLQotCS8qCi0J ICogcmVhZC93cml0ZSBjYWNoZXM6Ci0JICoKLQkgKiBJOTE1X0dFTV9ET01BSU5fUkVOREVSIGlz IGFsd2F5cyBpbnZhbGlkYXRlZCwgYnV0IGlzCi0JICogb25seSBmbHVzaGVkIGlmIE1JX05PX1dS SVRFX0ZMVVNIIGlzIHVuc2V0LiAgT24gOTY1LCBpdCBpcwotCSAqIGFsc28gZmx1c2hlZCBhdCAy ZCB2ZXJzdXMgM2QgcGlwZWxpbmUgc3dpdGNoZXMuCi0JICoKLQkgKiByZWFkLW9ubHkgY2FjaGVz OgotCSAqCi0JICogSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIgaXMgZmx1c2hlZCBvbiBwcmUtOTY1 IGlmCi0JICogTUlfUkVBRF9GTFVTSCBpcyBzZXQsIGFuZCBpcyBhbHdheXMgZmx1c2hlZCBvbiA5 NjUuCi0JICoKLQkgKiBJOTE1X0dFTV9ET01BSU5fQ09NTUFORCBtYXkgbm90IGV4aXN0PwotCSAq Ci0JICogSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCB3aGljaCBleGlzdHMgb24gOTY1LCBp cwotCSAqIGludmFsaWRhdGVkIHdoZW4gTUlfRVhFX0ZMVVNIIGlzIHNldC4KLQkgKgotCSAqIEk5 MTVfR0VNX0RPTUFJTl9WRVJURVgsIHdoaWNoIGV4aXN0cyBvbiA5NjUsIGlzCi0JICogaW52YWxp ZGF0ZWQgd2l0aCBldmVyeSBNSV9GTFVTSC4KLQkgKgotCSAqIFRMQnM6Ci0JICoKLQkgKiBPbiA5 NjUsIFRMQnMgYXNzb2NpYXRlZCB3aXRoIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5ECi0JICogYW5k IEk5MTVfR0VNX0RPTUFJTl9DUFUgaW4gYXJlIGludmFsaWRhdGVkIGF0IFBURSB3cml0ZSBhbmQK LQkgKiBJOTE1X0dFTV9ET01BSU5fUkVOREVSIGFuZCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUgot CSAqIGFyZSBmbHVzaGVkIGF0IGFueSBNSV9GTFVTSC4KLQkgKi8KLQotCWNtZCA9IE1JX0ZMVVNI OwotCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7Ci0JCWNtZCB8PSBNSV9FWEVfRkxVU0g7 Ci0JCWlmIChJU19HNFgocnEtPmk5MTUpIHx8IElTX0dFTihycS0+aTkxNSwgNSkpCi0JCQljbWQg fD0gTUlfSU5WQUxJREFURV9JU1A7Ci0JfQotCi0JaSA9IDI7Ci0JaWYgKG1vZGUgJiBFTUlUX0lO VkFMSURBVEUpCi0JCWkgKz0gMjA7Ci0KLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIGkpOwot CWlmIChJU19FUlIoY3MpKQotCQlyZXR1cm4gUFRSX0VSUihjcyk7Ci0KLQkqY3MrKyA9IGNtZDsK LQotCS8qCi0JICogQSByYW5kb20gZGVsYXkgdG8gbGV0IHRoZSBDUyBpbnZhbGlkYXRlIHRha2Ug ZWZmZWN0PyBXaXRob3V0IHRoaXMKLQkgKiBkZWxheSwgdGhlIEdQVSByZWxvY2F0aW9uIHBhdGgg ZmFpbHMgYXMgdGhlIENTIGRvZXMgbm90IHNlZQotCSAqIHRoZSB1cGRhdGVkIGNvbnRlbnRzLiBK dXN0IGFzIGltcG9ydGFudCwgaWYgd2UgYXBwbHkgdGhlIGZsdXNoZXMKLQkgKiB0byB0aGUgRU1J VF9GTFVTSCBicmFuY2ggKGkuZS4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHJlbG9jYXRpb24KLQkg KiB3cml0ZSBhbmQgYmVmb3JlIHRoZSBpbnZhbGlkYXRlIG9uIHRoZSBuZXh0IGJhdGNoKSwgdGhl IHJlbG9jYXRpb25zCi0JICogc3RpbGwgZmFpbC4gVGhpcyBpbXBsaWVzIHRoYXQgaXMgYSBkZWxh eSBmb2xsb3dpbmcgaW52YWxpZGF0aW9uCi0JICogdGhhdCBpcyByZXF1aXJlZCB0byByZXNldCB0 aGUgY2FjaGVzIGFzIG9wcG9zZWQgdG8gYSBkZWxheSB0bwotCSAqIGVuc3VyZSB0aGUgbWVtb3J5 IGlzIHdyaXR0ZW4uCi0JICovCi0JaWYgKG1vZGUgJiBFTUlUX0lOVkFMSURBVEUpIHsKLQkJKmNz KysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDQpIHwgUElQRV9DT05UUk9MX1FXX1dSSVRFOwotCQkq Y3MrKyA9IGludGVsX2d0X3NjcmF0Y2hfb2Zmc2V0KHJxLT5lbmdpbmUtPmd0LAotCQkJCQkJSU5U RUxfR1RfU0NSQVRDSF9GSUVMRF9ERUZBVUxUKSB8Ci0JCQlQSVBFX0NPTlRST0xfR0xPQkFMX0dU VDsKLQkJKmNzKysgPSAwOwotCQkqY3MrKyA9IDA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDEyOyBp KyspCi0JCQkqY3MrKyA9IE1JX0ZMVVNIOwotCi0JCSpjcysrID0gR0ZYX09QX1BJUEVfQ09OVFJP TCg0KSB8IFBJUEVfQ09OVFJPTF9RV19XUklURTsKLQkJKmNzKysgPSBpbnRlbF9ndF9zY3JhdGNo X29mZnNldChycS0+ZW5naW5lLT5ndCwKLQkJCQkJCUlOVEVMX0dUX1NDUkFUQ0hfRklFTERfREVG QVVMVCkgfAotCQkJUElQRV9DT05UUk9MX0dMT0JBTF9HVFQ7Ci0JCSpjcysrID0gMDsKLQkJKmNz KysgPSAwOwotCX0KLQotCSpjcysrID0gY21kOwotCi0JaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBj cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEVtaXRzIGEgUElQRV9DT05UUk9MIHdpdGgg YSBub24temVybyBwb3N0LXN5bmMgb3BlcmF0aW9uLCBmb3IKLSAqIGltcGxlbWVudGluZyB0d28g d29ya2Fyb3VuZHMgb24gZ2VuNi4gIEZyb20gc2VjdGlvbiAxLjQuNy4xCi0gKiAiUElQRV9DT05U Uk9MIiBvZiB0aGUgU2FuZHkgQnJpZGdlIFBSTSB2b2x1bWUgMiBwYXJ0IDE6Ci0gKgotICogW0Rl dlNOQi1DK3tXL0F9XSBCZWZvcmUgYW55IGRlcHRoIHN0YWxsIGZsdXNoIChpbmNsdWRpbmcgdGhv c2UKLSAqIHByb2R1Y2VkIGJ5IG5vbi1waXBlbGluZWQgc3RhdGUgY29tbWFuZHMpLCBzb2Z0d2Fy ZSBuZWVkcyB0byBmaXJzdAotICogc2VuZCBhIFBJUEVfQ09OVFJPTCB3aXRoIG5vIGJpdHMgc2V0 IGV4Y2VwdCBQb3N0LVN5bmMgT3BlcmF0aW9uICE9Ci0gKiAwLgotICoKLSAqIFtEZXYtU05Ce1cv QX1dOiBCZWZvcmUgYSBQSVBFX0NPTlRST0wgd2l0aCBXcml0ZSBDYWNoZSBGbHVzaCBFbmFibGUK LSAqID0xLCBhIFBJUEVfQ09OVFJPTCB3aXRoIGFueSBub24temVybyBwb3N0LXN5bmMtb3AgaXMg cmVxdWlyZWQuCi0gKgotICogQW5kIHRoZSB3b3JrYXJvdW5kIGZvciB0aGVzZSB0d28gcmVxdWly ZXMgdGhpcyB3b3JrYXJvdW5kIGZpcnN0OgotICoKLSAqIFtEZXYtU05Ce1cvQX1dOiBQaXBlLWNv bnRyb2wgd2l0aCBDUy1zdGFsbCBiaXQgc2V0IG11c3QgYmUgc2VudAotICogQkVGT1JFIHRoZSBw aXBlLWNvbnRyb2wgd2l0aCBhIHBvc3Qtc3luYyBvcCBhbmQgbm8gd3JpdGUtY2FjaGUKLSAqIGZs dXNoZXMuCi0gKgotICogQW5kIHRoaXMgbGFzdCB3b3JrYXJvdW5kIGlzIHRyaWNreSBiZWNhdXNl IG9mIHRoZSByZXF1aXJlbWVudHMgb24KLSAqIHRoYXQgYml0LiAgRnJvbSBzZWN0aW9uIDEuNC43 LjIuMyAiU3RhbGwiIG9mIHRoZSBTYW5keSBCcmlkZ2UgUFJNCi0gKiB2b2x1bWUgMiBwYXJ0IDE6 Ci0gKgotICogICAgICIxIG9mIHRoZSBmb2xsb3dpbmcgbXVzdCBhbHNvIGJlIHNldDoKLSAqICAg ICAgLSBSZW5kZXIgVGFyZ2V0IENhY2hlIEZsdXNoIEVuYWJsZSAoWzEyXSBvZiBEVzEpCi0gKiAg ICAgIC0gRGVwdGggQ2FjaGUgRmx1c2ggRW5hYmxlIChbMF0gb2YgRFcxKQotICogICAgICAtIFN0 YWxsIGF0IFBpeGVsIFNjb3JlYm9hcmQgKFsxXSBvZiBEVzEpCi0gKiAgICAgIC0gRGVwdGggU3Rh bGwgKFsxM10gb2YgRFcxKQotICogICAgICAtIFBvc3QtU3luYyBPcGVyYXRpb24gKFsxM10gb2Yg RFcxKQotICogICAgICAtIE5vdGlmeSBFbmFibGUgKFs4XSBvZiBEVzEpIgotICoKLSAqIFRoZSBj YWNoZSBmbHVzaGVzIHJlcXVpcmUgdGhlIHdvcmthcm91bmQgZmx1c2ggdGhhdCB0cmlnZ2VyZWQg dGhpcwotICogb25lLCBzbyB3ZSBjYW4ndCB1c2UgaXQuICBEZXB0aCBzdGFsbCB3b3VsZCB0cmln Z2VyIHRoZSBzYW1lLgotICogUG9zdC1zeW5jIG5vbnplcm8gaXMgd2hhdCB0cmlnZ2VyZWQgdGhp cyBzZWNvbmQgd29ya2Fyb3VuZCwgc28gd2UKLSAqIGNhbid0IHVzZSB0aGF0IG9uZSBlaXRoZXIu ICBOb3RpZnkgZW5hYmxlIGlzIElSUXMsIHdoaWNoIGFyZW4ndAotICogcmVhbGx5IG91ciBidXNp bmVzcy4gIFRoYXQgbGVhdmVzIG9ubHkgc3RhbGwgYXQgc2NvcmVib2FyZC4KLSAqLwotc3RhdGlj IGludAotZ2VuNl9lbWl0X3Bvc3Rfc3luY19ub256ZXJvX2ZsdXNoKHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxKQotewotCXUzMiBzY3JhdGNoX2FkZHIgPQotCQlpbnRlbF9ndF9zY3JhdGNoX29mZnNl dChycS0+ZW5naW5lLT5ndCwKLQkJCQkJSU5URUxfR1RfU0NSQVRDSF9GSUVMRF9SRU5ERVJfRkxV U0gpOwotCXUzMiAqY3M7Ci0KLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDYpOwotCWlmIChJ U19FUlIoY3MpKQotCQlyZXR1cm4gUFRSX0VSUihjcyk7Ci0KLQkqY3MrKyA9IEdGWF9PUF9QSVBF X0NPTlRST0woNSk7Ci0JKmNzKysgPSBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfCBQSVBFX0NPTlRS T0xfU1RBTExfQVRfU0NPUkVCT0FSRDsKLQkqY3MrKyA9IHNjcmF0Y2hfYWRkciB8IFBJUEVfQ09O VFJPTF9HTE9CQUxfR1RUOwotCSpjcysrID0gMDsgLyogbG93IGR3b3JkICovCi0JKmNzKysgPSAw OyAvKiBoaWdoIGR3b3JkICovCi0JKmNzKysgPSBNSV9OT09QOwotCWludGVsX3JpbmdfYWR2YW5j ZShycSwgY3MpOwotCi0JY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA2KTsKLQlpZiAoSVNfRVJS KGNzKSkKLQkJcmV0dXJuIFBUUl9FUlIoY3MpOwotCi0JKmNzKysgPSBHRlhfT1BfUElQRV9DT05U Uk9MKDUpOwotCSpjcysrID0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwotCSpjcysrID0gc2NyYXRj aF9hZGRyIHwgUElQRV9DT05UUk9MX0dMT0JBTF9HVFQ7Ci0JKmNzKysgPSAwOwotCSpjcysrID0g MDsKLQkqY3MrKyA9IE1JX05PT1A7Ci0JaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotZ2VuNl9yZW5kZXJfcmluZ19mbHVzaChzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUpCi17Ci0JdTMyIHNjcmF0Y2hfYWRkciA9Ci0JCWlu dGVsX2d0X3NjcmF0Y2hfb2Zmc2V0KHJxLT5lbmdpbmUtPmd0LAotCQkJCQlJTlRFTF9HVF9TQ1JB VENIX0ZJRUxEX1JFTkRFUl9GTFVTSCk7Ci0JdTMyICpjcywgZmxhZ3MgPSAwOwotCWludCByZXQ7 Ci0KLQkvKiBGb3JjZSBTTkIgd29ya2Fyb3VuZHMgZm9yIFBJUEVfQ09OVFJPTCBmbHVzaGVzICov Ci0JcmV0ID0gZ2VuNl9lbWl0X3Bvc3Rfc3luY19ub256ZXJvX2ZsdXNoKHJxKTsKLQlpZiAocmV0 KQotCQlyZXR1cm4gcmV0OwotCi0JLyogSnVzdCBmbHVzaCBldmVyeXRoaW5nLiAgRXhwZXJpbWVu dHMgaGF2ZSBzaG93biB0aGF0IHJlZHVjaW5nIHRoZQotCSAqIG51bWJlciBvZiBiaXRzIGJhc2Vk IG9uIHRoZSB3cml0ZSBkb21haW5zIGhhcyBsaXR0bGUgcGVyZm9ybWFuY2UKLQkgKiBpbXBhY3Qu Ci0JICovCi0JaWYgKG1vZGUgJiBFTUlUX0ZMVVNIKSB7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJP TF9SRU5ERVJfVEFSR0VUX0NBQ0hFX0ZMVVNIOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfREVQ VEhfQ0FDSEVfRkxVU0g7Ci0JCS8qCi0JCSAqIEVuc3VyZSB0aGF0IGFueSBmb2xsb3dpbmcgc2Vx bm8gd3JpdGVzIG9ubHkgaGFwcGVuCi0JCSAqIHdoZW4gdGhlIHJlbmRlciBjYWNoZSBpcyBpbmRl ZWQgZmx1c2hlZC4KLQkJICovCi0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DU19TVEFMTDsKLQl9 Ci0JaWYgKG1vZGUgJiBFTUlUX0lOVkFMSURBVEUpIHsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9M X1RMQl9JTlZBTElEQVRFOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FD SEVfSU5WQUxJREFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RFWFRVUkVfQ0FDSEVfSU5W QUxJREFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1ZGX0NBQ0hFX0lOVkFMSURBVEU7Ci0J CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DT05TVF9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8 PSBQSVBFX0NPTlRST0xfU1RBVEVfQ0FDSEVfSU5WQUxJREFURTsKLQkJLyoKLQkJICogVExCIGlu dmFsaWRhdGUgcmVxdWlyZXMgYSBwb3N0LXN5bmMgd3JpdGUuCi0JCSAqLwotCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfUVdfV1JJVEUgfCBQSVBFX0NPTlRST0xfQ1NfU1RBTEw7Ci0JfQotCi0JY3Mg PSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0KTsKLQlpZiAoSVNfRVJSKGNzKSkKLQkJcmV0dXJuIFBU Ul9FUlIoY3MpOwotCi0JKmNzKysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDQpOwotCSpjcysrID0g ZmxhZ3M7Ci0JKmNzKysgPSBzY3JhdGNoX2FkZHIgfCBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVDsK LQkqY3MrKyA9IDA7Ci0JaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIHUzMiAqZ2VuNl9yY3NfZW1pdF9icmVhZGNydW1iKHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxLCB1MzIgKmNzKQotewotCS8qIEZpcnN0IHdlIGRvIHRoZSBnZW42X2VtaXRfcG9z dF9zeW5jX25vbnplcm9fZmx1c2ggdy9hICovCi0JKmNzKysgPSBHRlhfT1BfUElQRV9DT05UUk9M KDQpOwotCSpjcysrID0gUElQRV9DT05UUk9MX0NTX1NUQUxMIHwgUElQRV9DT05UUk9MX1NUQUxM X0FUX1NDT1JFQk9BUkQ7Ci0JKmNzKysgPSAwOwotCSpjcysrID0gMDsKLQotCSpjcysrID0gR0ZY X09QX1BJUEVfQ09OVFJPTCg0KTsKLQkqY3MrKyA9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKLQkq Y3MrKyA9IGludGVsX2d0X3NjcmF0Y2hfb2Zmc2V0KHJxLT5lbmdpbmUtPmd0LAotCQkJCQlJTlRF TF9HVF9TQ1JBVENIX0ZJRUxEX0RFRkFVTFQpIHwKLQkJUElQRV9DT05UUk9MX0dMT0JBTF9HVFQ7 Ci0JKmNzKysgPSAwOwotCi0JLyogRmluYWxseSB3ZSBjYW4gZmx1c2ggYW5kIHdpdGggaXQgZW1p dCB0aGUgYnJlYWRjcnVtYiAqLwotCSpjcysrID0gR0ZYX09QX1BJUEVfQ09OVFJPTCg0KTsKLQkq Y3MrKyA9IChQSVBFX0NPTlRST0xfUkVOREVSX1RBUkdFVF9DQUNIRV9GTFVTSCB8Ci0JCSBQSVBF X0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0ggfAotCQkgUElQRV9DT05UUk9MX0RDX0ZMVVNIX0VO QUJMRSB8Ci0JCSBQSVBFX0NPTlRST0xfUVdfV1JJVEUgfAotCQkgUElQRV9DT05UUk9MX0NTX1NU QUxMKTsKLQkqY3MrKyA9IGk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxpbmUocnEpLT5od3NwX29m ZnNldCB8Ci0JCVBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUOwotCSpjcysrID0gcnEtPmZlbmNlLnNl cW5vOwotCi0JKmNzKysgPSBNSV9VU0VSX0lOVEVSUlVQVDsKLQkqY3MrKyA9IE1JX05PT1A7Ci0K LQlycS0+dGFpbCA9IGludGVsX3Jpbmdfb2Zmc2V0KHJxLCBjcyk7Ci0JYXNzZXJ0X3JpbmdfdGFp bF92YWxpZChycS0+cmluZywgcnEtPnRhaWwpOwotCi0JcmV0dXJuIGNzOwotfQotCi1zdGF0aWMg aW50Ci1nZW43X3JlbmRlcl9yaW5nX2NzX3N0YWxsX3dhKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KQotewotCXUzMiAqY3M7Ci0KLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQpOwotCWlmIChJ U19FUlIoY3MpKQotCQlyZXR1cm4gUFRSX0VSUihjcyk7Ci0KLQkqY3MrKyA9IEdGWF9PUF9QSVBF X0NPTlRST0woNCk7Ci0JKmNzKysgPSBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfCBQSVBFX0NPTlRS T0xfU1RBTExfQVRfU0NPUkVCT0FSRDsKLQkqY3MrKyA9IDA7Ci0JKmNzKysgPSAwOwotCWludGVs X3JpbmdfYWR2YW5jZShycSwgY3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWdl bjdfcmVuZGVyX3JpbmdfZmx1c2goc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBtb2RlKQot ewotCXUzMiBzY3JhdGNoX2FkZHIgPQotCQlpbnRlbF9ndF9zY3JhdGNoX29mZnNldChycS0+ZW5n aW5lLT5ndCwKLQkJCQkJSU5URUxfR1RfU0NSQVRDSF9GSUVMRF9SRU5ERVJfRkxVU0gpOwotCXUz MiAqY3MsIGZsYWdzID0gMDsKLQotCS8qCi0JICogRW5zdXJlIHRoYXQgYW55IGZvbGxvd2luZyBz ZXFubyB3cml0ZXMgb25seSBoYXBwZW4gd2hlbiB0aGUgcmVuZGVyCi0JICogY2FjaGUgaXMgaW5k ZWVkIGZsdXNoZWQuCi0JICoKLQkgKiBXb3JrYXJvdW5kOiA0dGggUElQRV9DT05UUk9MIGNvbW1h bmQgKGV4Y2VwdCB0aGUgb25lcyB3aXRoIG9ubHkKLQkgKiByZWFkLWNhY2hlIGludmFsaWRhdGUg Yml0cyBzZXQpIG11c3QgaGF2ZSB0aGUgQ1NfU1RBTEwgYml0IHNldC4gV2UKLQkgKiBkb24ndCB0 cnkgdG8gYmUgY2xldmVyIGFuZCBqdXN0IHNldCBpdCB1bmNvbmRpdGlvbmFsbHkuCi0JICovCi0J ZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOwotCi0JLyoKLQkgKiBDU19TVEFMTCBzdWdn ZXN0cyBhdCBsZWFzdCBhIHBvc3Qtc3luYyB3cml0ZS4KLQkgKi8KLQlmbGFncyB8PSBQSVBFX0NP TlRST0xfUVdfV1JJVEU7Ci0JZmxhZ3MgfD0gUElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCOwot Ci0JLyogSnVzdCBmbHVzaCBldmVyeXRoaW5nLiAgRXhwZXJpbWVudHMgaGF2ZSBzaG93biB0aGF0 IHJlZHVjaW5nIHRoZQotCSAqIG51bWJlciBvZiBiaXRzIGJhc2VkIG9uIHRoZSB3cml0ZSBkb21h aW5zIGhhcyBsaXR0bGUgcGVyZm9ybWFuY2UKLQkgKiBpbXBhY3QuCi0JICovCi0JaWYgKG1vZGUg JiBFTUlUX0ZMVVNIKSB7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0NB Q0hFX0ZMVVNIOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0g7Ci0J CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9EQ19GTFVTSF9FTkFCTEU7Ci0JCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9GTFVTSF9FTkFCTEU7Ci0JfQotCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7 Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJREFURTsKLQkJZmxhZ3MgfD0gUElQ RV9DT05UUk9MX0lOU1RSVUNUSU9OX0NBQ0hFX0lOVkFMSURBVEU7Ci0JCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9URVhUVVJFX0NBQ0hFX0lOVkFMSURBVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJP TF9WRl9DQUNIRV9JTlZBTElEQVRFOwotCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ09OU1RfQ0FD SEVfSU5WQUxJREFURTsKLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lOVkFM SURBVEU7Ci0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9NRURJQV9TVEFURV9DTEVBUjsKLQotCQkv KiBXb3JrYXJvdW5kOiB3ZSBtdXN0IGlzc3VlIGEgcGlwZV9jb250cm9sIHdpdGggQ1Mtc3RhbGwg Yml0Ci0JCSAqIHNldCBiZWZvcmUgYSBwaXBlX2NvbnRyb2wgY29tbWFuZCB0aGF0IGhhcyB0aGUg c3RhdGUgY2FjaGUKLQkJICogaW52YWxpZGF0ZSBiaXQgc2V0LiAqLwotCQlnZW43X3JlbmRlcl9y aW5nX2NzX3N0YWxsX3dhKHJxKTsKLQl9Ci0KLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQp OwotCWlmIChJU19FUlIoY3MpKQotCQlyZXR1cm4gUFRSX0VSUihjcyk7Ci0KLQkqY3MrKyA9IEdG WF9PUF9QSVBFX0NPTlRST0woNCk7Ci0JKmNzKysgPSBmbGFnczsKLQkqY3MrKyA9IHNjcmF0Y2hf YWRkcjsKLQkqY3MrKyA9IDA7Ci0JaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIHUzMiAqZ2VuN19yY3NfZW1pdF9icmVhZGNydW1iKHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNzKQotewotCSpjcysrID0gR0ZYX09QX1BJUEVfQ09OVFJP TCg0KTsKLQkqY3MrKyA9IChQSVBFX0NPTlRST0xfUkVOREVSX1RBUkdFVF9DQUNIRV9GTFVTSCB8 Ci0JCSBQSVBFX0NPTlRST0xfREVQVEhfQ0FDSEVfRkxVU0ggfAotCQkgUElQRV9DT05UUk9MX0RD X0ZMVVNIX0VOQUJMRSB8Ci0JCSBQSVBFX0NPTlRST0xfRkxVU0hfRU5BQkxFIHwKLQkJIFBJUEVf Q09OVFJPTF9RV19XUklURSB8Ci0JCSBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9JVkIgfAotCQkg UElQRV9DT05UUk9MX0NTX1NUQUxMKTsKLQkqY3MrKyA9IGk5MTVfcmVxdWVzdF9hY3RpdmVfdGlt ZWxpbmUocnEpLT5od3NwX29mZnNldDsKLQkqY3MrKyA9IHJxLT5mZW5jZS5zZXFubzsKLQotCSpj cysrID0gTUlfVVNFUl9JTlRFUlJVUFQ7Ci0JKmNzKysgPSBNSV9OT09QOwotCi0JcnEtPnRhaWwg PSBpbnRlbF9yaW5nX29mZnNldChycSwgY3MpOwotCWFzc2VydF9yaW5nX3RhaWxfdmFsaWQocnEt PnJpbmcsIHJxLT50YWlsKTsKLQotCXJldHVybiBjczsKLX0KLQotc3RhdGljIHUzMiAqZ2VuNl94 Y3NfZW1pdF9icmVhZGNydW1iKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNzKQotewot CUdFTV9CVUdfT04oaTkxNV9yZXF1ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3BfZ2d0dCAh PSBycS0+ZW5naW5lLT5zdGF0dXNfcGFnZS52bWEpOwotCUdFTV9CVUdfT04ob2Zmc2V0X2luX3Bh Z2UoaTkxNV9yZXF1ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3Bfb2Zmc2V0KSAhPSBJOTE1 X0dFTV9IV1NfU0VRTk9fQUREUik7Ci0KLQkqY3MrKyA9IE1JX0ZMVVNIX0RXIHwgTUlfRkxVU0hf RFdfT1BfU1RPUkVEVyB8IE1JX0ZMVVNIX0RXX1NUT1JFX0lOREVYOwotCSpjcysrID0gSTkxNV9H RU1fSFdTX1NFUU5PX0FERFIgfCBNSV9GTFVTSF9EV19VU0VfR1RUOwotCSpjcysrID0gcnEtPmZl bmNlLnNlcW5vOwotCi0JKmNzKysgPSBNSV9VU0VSX0lOVEVSUlVQVDsKLQotCXJxLT50YWlsID0g aW50ZWxfcmluZ19vZmZzZXQocnEsIGNzKTsKLQlhc3NlcnRfcmluZ190YWlsX3ZhbGlkKHJxLT5y aW5nLCBycS0+dGFpbCk7Ci0KLQlyZXR1cm4gY3M7Ci19Ci0KLSNkZWZpbmUgR0VON19YQ1NfV0Eg MzIKLXN0YXRpYyB1MzIgKmdlbjdfeGNzX2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycSwgdTMyICpjcykKLXsKLQlpbnQgaTsKLQotCUdFTV9CVUdfT04oaTkxNV9yZXF1ZXN0 X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3BfZ2d0dCAhPSBycS0+ZW5naW5lLT5zdGF0dXNfcGFn ZS52bWEpOwotCUdFTV9CVUdfT04ob2Zmc2V0X2luX3BhZ2UoaTkxNV9yZXF1ZXN0X2FjdGl2ZV90 aW1lbGluZShycSktPmh3c3Bfb2Zmc2V0KSAhPSBJOTE1X0dFTV9IV1NfU0VRTk9fQUREUik7Ci0K LQkqY3MrKyA9IE1JX0ZMVVNIX0RXIHwgTUlfSU5WQUxJREFURV9UTEIgfAotCQlNSV9GTFVTSF9E V19PUF9TVE9SRURXIHwgTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVg7Ci0JKmNzKysgPSBJOTE1X0dF TV9IV1NfU0VRTk9fQUREUiB8IE1JX0ZMVVNIX0RXX1VTRV9HVFQ7Ci0JKmNzKysgPSBycS0+ZmVu Y2Uuc2Vxbm87Ci0KLQlmb3IgKGkgPSAwOyBpIDwgR0VON19YQ1NfV0E7IGkrKykgewotCQkqY3Mr KyA9IE1JX1NUT1JFX0RXT1JEX0lOREVYOwotCQkqY3MrKyA9IEk5MTVfR0VNX0hXU19TRVFOT19B RERSOwotCQkqY3MrKyA9IHJxLT5mZW5jZS5zZXFubzsKLQl9Ci0KLQkqY3MrKyA9IE1JX0ZMVVNI X0RXOwotCSpjcysrID0gMDsKLQkqY3MrKyA9IDA7Ci0KLQkqY3MrKyA9IE1JX1VTRVJfSU5URVJS VVBUOwotCSpjcysrID0gTUlfTk9PUDsKLQotCXJxLT50YWlsID0gaW50ZWxfcmluZ19vZmZzZXQo cnEsIGNzKTsKLQlhc3NlcnRfcmluZ190YWlsX3ZhbGlkKHJxLT5yaW5nLCBycS0+dGFpbCk7Ci0K LQlyZXR1cm4gY3M7Ci19Ci0jdW5kZWYgR0VON19YQ1NfV0EKLQogc3RhdGljIHZvaWQgc2V0X2h3 c3RhbShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBtYXNrKQogewogCS8qCkBA IC05MTgsMjU1ICs0ODIsNiBAQCBzdGF0aWMgdm9pZCBpOXh4X3N1Ym1pdF9yZXF1ZXN0KHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCiAJCSAgICAgaW50ZWxfcmluZ19zZXRfdGFpbChyZXF1 ZXN0LT5yaW5nLCByZXF1ZXN0LT50YWlsKSk7CiB9CiAKLXN0YXRpYyB1MzIgKmk5eHhfZW1pdF9i cmVhZGNydW1iKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNzKQotewotCUdFTV9CVUdf T04oaTkxNV9yZXF1ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3BfZ2d0dCAhPSBycS0+ZW5n aW5lLT5zdGF0dXNfcGFnZS52bWEpOwotCUdFTV9CVUdfT04ob2Zmc2V0X2luX3BhZ2UoaTkxNV9y ZXF1ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPmh3c3Bfb2Zmc2V0KSAhPSBJOTE1X0dFTV9IV1Nf U0VRTk9fQUREUik7Ci0KLQkqY3MrKyA9IE1JX0ZMVVNIOwotCi0JKmNzKysgPSBNSV9TVE9SRV9E V09SRF9JTkRFWDsKLQkqY3MrKyA9IEk5MTVfR0VNX0hXU19TRVFOT19BRERSOwotCSpjcysrID0g cnEtPmZlbmNlLnNlcW5vOwotCi0JKmNzKysgPSBNSV9VU0VSX0lOVEVSUlVQVDsKLQkqY3MrKyA9 IE1JX05PT1A7Ci0KLQlycS0+dGFpbCA9IGludGVsX3Jpbmdfb2Zmc2V0KHJxLCBjcyk7Ci0JYXNz ZXJ0X3JpbmdfdGFpbF92YWxpZChycS0+cmluZywgcnEtPnRhaWwpOwotCi0JcmV0dXJuIGNzOwot fQotCi0jZGVmaW5lIEdFTjVfV0FfU1RPUkVTIDggLyogbXVzdCBiZSBhdCBsZWFzdCAxISAqLwot c3RhdGljIHUzMiAqZ2VuNV9lbWl0X2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs IHUzMiAqY3MpCi17Ci0JaW50IGk7Ci0KLQlHRU1fQlVHX09OKGk5MTVfcmVxdWVzdF9hY3RpdmVf dGltZWxpbmUocnEpLT5od3NwX2dndHQgIT0gcnEtPmVuZ2luZS0+c3RhdHVzX3BhZ2Uudm1hKTsK LQlHRU1fQlVHX09OKG9mZnNldF9pbl9wYWdlKGk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxpbmUo cnEpLT5od3NwX29mZnNldCkgIT0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFIpOwotCi0JKmNzKysg PSBNSV9GTFVTSDsKLQotCUJVSUxEX0JVR19PTihHRU41X1dBX1NUT1JFUyA8IDEpOwotCWZvciAo aSA9IDA7IGkgPCBHRU41X1dBX1NUT1JFUzsgaSsrKSB7Ci0JCSpjcysrID0gTUlfU1RPUkVfRFdP UkRfSU5ERVg7Ci0JCSpjcysrID0gSTkxNV9HRU1fSFdTX1NFUU5PX0FERFI7Ci0JCSpjcysrID0g cnEtPmZlbmNlLnNlcW5vOwotCX0KLQotCSpjcysrID0gTUlfVVNFUl9JTlRFUlJVUFQ7Ci0KLQly cS0+dGFpbCA9IGludGVsX3Jpbmdfb2Zmc2V0KHJxLCBjcyk7Ci0JYXNzZXJ0X3JpbmdfdGFpbF92 YWxpZChycS0+cmluZywgcnEtPnRhaWwpOwotCi0JcmV0dXJuIGNzOwotfQotI3VuZGVmIEdFTjVf V0FfU1RPUkVTCi0KLXN0YXRpYyB2b2lkCi1nZW41X2lycV9lbmFibGUoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQotewotCWdlbjVfZ3RfZW5hYmxlX2lycShlbmdpbmUtPmd0LCBlbmdp bmUtPmlycV9lbmFibGVfbWFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW41X2lycV9kaXNhYmxl KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlnZW41X2d0X2Rpc2FibGVfaXJx KGVuZ2luZS0+Z3QsIGVuZ2luZS0+aXJxX2VuYWJsZV9tYXNrKTsKLX0KLQotc3RhdGljIHZvaWQK LWk5eHhfaXJxX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0JZW5n aW5lLT5pOTE1LT5pcnFfbWFzayAmPSB+ZW5naW5lLT5pcnFfZW5hYmxlX21hc2s7Ci0JaW50ZWxf dW5jb3JlX3dyaXRlKGVuZ2luZS0+dW5jb3JlLCBHRU4yX0lNUiwgZW5naW5lLT5pOTE1LT5pcnFf bWFzayk7Ci0JaW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZF9mdyhlbmdpbmUtPnVuY29yZSwgR0VO Ml9JTVIpOwotfQotCi1zdGF0aWMgdm9pZAotaTl4eF9pcnFfZGlzYWJsZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCi17Ci0JZW5naW5lLT5pOTE1LT5pcnFfbWFzayB8PSBlbmdpbmUt PmlycV9lbmFibGVfbWFzazsKLQlpbnRlbF91bmNvcmVfd3JpdGUoZW5naW5lLT51bmNvcmUsIEdF TjJfSU1SLCBlbmdpbmUtPmk5MTUtPmlycV9tYXNrKTsKLX0KLQotc3RhdGljIHZvaWQKLWk4eHhf aXJxX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbmdpbmUtPmk5MTU7Ci0KLQlpOTE1LT5pcnFfbWFzayAm PSB+ZW5naW5lLT5pcnFfZW5hYmxlX21hc2s7Ci0JaW50ZWxfdW5jb3JlX3dyaXRlMTYoJmk5MTUt PnVuY29yZSwgR0VOMl9JTVIsIGk5MTUtPmlycV9tYXNrKTsKLQlFTkdJTkVfUE9TVElOR19SRUFE MTYoZW5naW5lLCBSSU5HX0lNUik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pOHh4X2lycV9kaXNhYmxl KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IGVuZ2luZS0+aTkxNTsKLQotCWk5MTUtPmlycV9tYXNrIHw9IGVuZ2luZS0+ aXJxX2VuYWJsZV9tYXNrOwotCWludGVsX3VuY29yZV93cml0ZTE2KCZpOTE1LT51bmNvcmUsIEdF TjJfSU1SLCBpOTE1LT5pcnFfbWFzayk7Ci19Ci0KLXN0YXRpYyBpbnQKLWJzZF9yaW5nX2ZsdXNo KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgbW9kZSkKLXsKLQl1MzIgKmNzOwotCi0JY3Mg PSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAyKTsKLQlpZiAoSVNfRVJSKGNzKSkKLQkJcmV0dXJuIFBU Ul9FUlIoY3MpOwotCi0JKmNzKysgPSBNSV9GTFVTSDsKLQkqY3MrKyA9IE1JX05PT1A7Ci0JaW50 ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1n ZW42X2lycV9lbmFibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCUVOR0lO RV9XUklURShlbmdpbmUsIFJJTkdfSU1SLAotCQkgICAgIH4oZW5naW5lLT5pcnFfZW5hYmxlX21h c2sgfCBlbmdpbmUtPmlycV9rZWVwX21hc2spKTsKLQotCS8qIEZsdXNoL2RlbGF5IHRvIGVuc3Vy ZSB0aGUgUklOR19JTVIgaXMgYWN0aXZlIGJlZm9yZSB0aGUgR1QgSU1SICovCi0JRU5HSU5FX1BP U1RJTkdfUkVBRChlbmdpbmUsIFJJTkdfSU1SKTsKLQotCWdlbjVfZ3RfZW5hYmxlX2lycShlbmdp bmUtPmd0LCBlbmdpbmUtPmlycV9lbmFibGVfbWFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW42 X2lycV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlFTkdJTkVf V1JJVEUoZW5naW5lLCBSSU5HX0lNUiwgfmVuZ2luZS0+aXJxX2tlZXBfbWFzayk7Ci0JZ2VuNV9n dF9kaXNhYmxlX2lycShlbmdpbmUtPmd0LCBlbmdpbmUtPmlycV9lbmFibGVfbWFzayk7Ci19Ci0K LXN0YXRpYyB2b2lkCi1oc3dfdmVib3hfaXJxX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCi17Ci0JRU5HSU5FX1dSSVRFKGVuZ2luZSwgUklOR19JTVIsIH5lbmdpbmUtPmly cV9lbmFibGVfbWFzayk7Ci0KLQkvKiBGbHVzaC9kZWxheSB0byBlbnN1cmUgdGhlIFJJTkdfSU1S IGlzIGFjdGl2ZSBiZWZvcmUgdGhlIEdUIElNUiAqLwotCUVOR0lORV9QT1NUSU5HX1JFQUQoZW5n aW5lLCBSSU5HX0lNUik7Ci0KLQlnZW42X2d0X3BtX3VubWFza19pcnEoZW5naW5lLT5ndCwgZW5n aW5lLT5pcnFfZW5hYmxlX21hc2spOwotfQotCi1zdGF0aWMgdm9pZAotaHN3X3ZlYm94X2lycV9k aXNhYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlFTkdJTkVfV1JJVEUo ZW5naW5lLCBSSU5HX0lNUiwgfjApOwotCWdlbjZfZ3RfcG1fbWFza19pcnEoZW5naW5lLT5ndCwg ZW5naW5lLT5pcnFfZW5hYmxlX21hc2spOwotfQotCi1zdGF0aWMgaW50Ci1pOTY1X2VtaXRfYmJf c3RhcnQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCi0JCSAgIHU2NCBvZmZzZXQsIHUzMiBsZW5n dGgsCi0JCSAgIHVuc2lnbmVkIGludCBkaXNwYXRjaF9mbGFncykKLXsKLQl1MzIgKmNzOwotCi0J Y3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCAyKTsKLQlpZiAoSVNfRVJSKGNzKSkKLQkJcmV0dXJu IFBUUl9FUlIoY3MpOwotCi0JKmNzKysgPSBNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCBNSV9CQVRD SF9HVFQgfCAoZGlzcGF0Y2hfZmxhZ3MgJgotCQlJOTE1X0RJU1BBVENIX1NFQ1VSRSA/IDAgOiBN SV9CQVRDSF9OT05fU0VDVVJFX0k5NjUpOwotCSpjcysrID0gb2Zmc2V0OwotCWludGVsX3Jpbmdf YWR2YW5jZShycSwgY3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEp1c3QgdXNlcnNwYWNlIEFC SSBjb252ZW50aW9uIHRvIGxpbWl0IHRoZSB3YSBiYXRjaCBibyB0byBhIHJlc29uYWJsZSBzaXpl ICovCi0jZGVmaW5lIEk4MzBfQkFUQ0hfTElNSVQgU1pfMjU2SwotI2RlZmluZSBJODMwX1RMQl9F TlRSSUVTICgyKQotI2RlZmluZSBJODMwX1dBX1NJWkUgbWF4KEk4MzBfVExCX0VOVFJJRVMqNDA5 NiwgSTgzMF9CQVRDSF9MSU1JVCkKLXN0YXRpYyBpbnQKLWk4MzBfZW1pdF9iYl9zdGFydChzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSwKLQkJICAgdTY0IG9mZnNldCwgdTMyIGxlbiwKLQkJICAgdW5z aWduZWQgaW50IGRpc3BhdGNoX2ZsYWdzKQotewotCXUzMiAqY3MsIGNzX29mZnNldCA9Ci0JCWlu dGVsX2d0X3NjcmF0Y2hfb2Zmc2V0KHJxLT5lbmdpbmUtPmd0LAotCQkJCQlJTlRFTF9HVF9TQ1JB VENIX0ZJRUxEX0RFRkFVTFQpOwotCi0JR0VNX0JVR19PTihycS0+ZW5naW5lLT5ndC0+c2NyYXRj aC0+c2l6ZSA8IEk4MzBfV0FfU0laRSk7Ci0KLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDYp OwotCWlmIChJU19FUlIoY3MpKQotCQlyZXR1cm4gUFRSX0VSUihjcyk7Ci0KLQkvKiBFdmljdCB0 aGUgaW52YWxpZCBQVEUgVExCcyAqLwotCSpjcysrID0gQ09MT1JfQkxUX0NNRCB8IEJMVF9XUklU RV9SR0JBOwotCSpjcysrID0gQkxUX0RFUFRIXzMyIHwgQkxUX1JPUF9DT0xPUl9DT1BZIHwgNDA5 NjsKLQkqY3MrKyA9IEk4MzBfVExCX0VOVFJJRVMgPDwgMTYgfCA0OyAvKiBsb2FkIGVhY2ggcGFn ZSAqLwotCSpjcysrID0gY3Nfb2Zmc2V0OwotCSpjcysrID0gMHhkZWFkYmVlZjsKLQkqY3MrKyA9 IE1JX05PT1A7Ci0JaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Ci0KLQlpZiAoKGRpc3BhdGNo X2ZsYWdzICYgSTkxNV9ESVNQQVRDSF9QSU5ORUQpID09IDApIHsKLQkJaWYgKGxlbiA+IEk4MzBf QkFUQ0hfTElNSVQpCi0JCQlyZXR1cm4gLUVOT1NQQzsKLQotCQljcyA9IGludGVsX3JpbmdfYmVn aW4ocnEsIDYgKyAyKTsKLQkJaWYgKElTX0VSUihjcykpCi0JCQlyZXR1cm4gUFRSX0VSUihjcyk7 Ci0KLQkJLyogQmxpdCB0aGUgYmF0Y2ggKHdoaWNoIGhhcyBub3cgYWxsIHJlbG9jcyBhcHBsaWVk KSB0byB0aGUKLQkJICogc3RhYmxlIGJhdGNoIHNjcmF0Y2ggYm8gYXJlYSAoc28gdGhhdCB0aGUg Q1MgbmV2ZXIKLQkJICogc3R1bWJsZXMgb3ZlciBpdHMgdGxiIGludmFsaWRhdGlvbiBidWcpIC4u LgotCQkgKi8KLQkJKmNzKysgPSBTUkNfQ09QWV9CTFRfQ01EIHwgQkxUX1dSSVRFX1JHQkEgfCAo NiAtIDIpOwotCQkqY3MrKyA9IEJMVF9ERVBUSF8zMiB8IEJMVF9ST1BfU1JDX0NPUFkgfCA0MDk2 OwotCQkqY3MrKyA9IERJVl9ST1VORF9VUChsZW4sIDQwOTYpIDw8IDE2IHwgNDA5NjsKLQkJKmNz KysgPSBjc19vZmZzZXQ7Ci0JCSpjcysrID0gNDA5NjsKLQkJKmNzKysgPSBvZmZzZXQ7Ci0KLQkJ KmNzKysgPSBNSV9GTFVTSDsKLQkJKmNzKysgPSBNSV9OT09QOwotCQlpbnRlbF9yaW5nX2FkdmFu Y2UocnEsIGNzKTsKLQotCQkvKiAuLi4gYW5kIGV4ZWN1dGUgaXQuICovCi0JCW9mZnNldCA9IGNz X29mZnNldDsKLQl9Ci0KLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDIpOwotCWlmIChJU19F UlIoY3MpKQotCQlyZXR1cm4gUFRSX0VSUihjcyk7Ci0KLQkqY3MrKyA9IE1JX0JBVENIX0JVRkZF Ul9TVEFSVCB8IE1JX0JBVENIX0dUVDsKLQkqY3MrKyA9IG9mZnNldCB8IChkaXNwYXRjaF9mbGFn cyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFID8gMCA6Ci0JCU1JX0JBVENIX05PTl9TRUNVUkUpOwot CWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQKLWk5MTVfZW1pdF9iYl9zdGFydChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKLQkJICAgdTY0 IG9mZnNldCwgdTMyIGxlbiwKLQkJICAgdW5zaWduZWQgaW50IGRpc3BhdGNoX2ZsYWdzKQotewot CXUzMiAqY3M7Ci0KLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDIpOwotCWlmIChJU19FUlIo Y3MpKQotCQlyZXR1cm4gUFRSX0VSUihjcyk7Ci0KLQkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9T VEFSVCB8IE1JX0JBVENIX0dUVDsKLQkqY3MrKyA9IG9mZnNldCB8IChkaXNwYXRjaF9mbGFncyAm IEk5MTVfRElTUEFUQ0hfU0VDVVJFID8gMCA6Ci0JCU1JX0JBVENIX05PTl9TRUNVUkUpOwotCWlu dGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lk IF9fcmluZ19jb250ZXh0X2Zpbmkoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQogewogCWk5MTVf dm1hX3B1dChjZS0+c3RhdGUpOwpAQCAtMTcwNCw5OSArMTAxOSw2IEBAIHN0YXRpYyB2b2lkIGdl bjZfYnNkX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCiAJaW50 ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQodW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKIH0KIAotc3Rh dGljIGludCBtaV9mbHVzaF9kdyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIGZsYWdzKQot ewotCXUzMiBjbWQsICpjczsKLQotCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNCk7Ci0JaWYg KElTX0VSUihjcykpCi0JCXJldHVybiBQVFJfRVJSKGNzKTsKLQotCWNtZCA9IE1JX0ZMVVNIX0RX OwotCi0JLyoKLQkgKiBXZSBhbHdheXMgcmVxdWlyZSBhIGNvbW1hbmQgYmFycmllciBzbyB0aGF0 IHN1YnNlcXVlbnQKLQkgKiBjb21tYW5kcywgc3VjaCBhcyBicmVhZGNydW1iIGludGVycnVwdHMs IGFyZSBzdHJpY3RseSBvcmRlcmVkCi0JICogd3J0IHRoZSBjb250ZW50cyBvZiB0aGUgd3JpdGUg Y2FjaGUgYmVpbmcgZmx1c2hlZCB0byBtZW1vcnkKLQkgKiAoYW5kIHRodXMgYmVpbmcgY29oZXJl bnQgZnJvbSB0aGUgQ1BVKS4KLQkgKi8KLQljbWQgfD0gTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVgg fCBNSV9GTFVTSF9EV19PUF9TVE9SRURXOwotCi0JLyoKLQkgKiBCc3BlYyB2b2wgMWMuMyAtIGJs aXR0ZXIgZW5naW5lIGNvbW1hbmQgc3RyZWFtZXI6Ci0JICogIklmIEVOQUJMRUQsIGFsbCBUTEJz IHdpbGwgYmUgaW52YWxpZGF0ZWQgb25jZSB0aGUgZmx1c2gKLQkgKiBvcGVyYXRpb24gaXMgY29t cGxldGUuIFRoaXMgYml0IGlzIG9ubHkgdmFsaWQgd2hlbiB0aGUKLQkgKiBQb3N0LVN5bmMgT3Bl cmF0aW9uIGZpZWxkIGlzIGEgdmFsdWUgb2YgMWggb3IgM2guIgotCSAqLwotCWNtZCB8PSBmbGFn czsKLQotCSpjcysrID0gY21kOwotCSpjcysrID0gSTkxNV9HRU1fSFdTX1NDUkFUQ0hfQUREUiB8 IE1JX0ZMVVNIX0RXX1VTRV9HVFQ7Ci0JKmNzKysgPSAwOwotCSpjcysrID0gTUlfTk9PUDsKLQot CWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgZ2VuNl9mbHVzaF9kdyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUsIHUzMiBp bnZmbGFncykKLXsKLQlyZXR1cm4gbWlfZmx1c2hfZHcocnEsIG1vZGUgJiBFTUlUX0lOVkFMSURB VEUgPyBpbnZmbGFncyA6IDApOwotfQotCi1zdGF0aWMgaW50IGdlbjZfYnNkX3JpbmdfZmx1c2go c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBtb2RlKQotewotCXJldHVybiBnZW42X2ZsdXNo X2R3KHJxLCBtb2RlLCBNSV9JTlZBTElEQVRFX1RMQiB8IE1JX0lOVkFMSURBVEVfQlNEKTsKLX0K LQotc3RhdGljIGludAotaHN3X2VtaXRfYmJfc3RhcnQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEs Ci0JCSAgdTY0IG9mZnNldCwgdTMyIGxlbiwKLQkJICB1bnNpZ25lZCBpbnQgZGlzcGF0Y2hfZmxh Z3MpCi17Ci0JdTMyICpjczsKLQotCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgMik7Ci0JaWYg KElTX0VSUihjcykpCi0JCXJldHVybiBQVFJfRVJSKGNzKTsKLQotCSpjcysrID0gTUlfQkFUQ0hf QlVGRkVSX1NUQVJUIHwgKGRpc3BhdGNoX2ZsYWdzICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUgPwot CQkwIDogTUlfQkFUQ0hfUFBHVFRfSFNXIHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9IU1cpOwotCS8q IGJpdDAtNyBpcyB0aGUgbGVuZ3RoIG9uIEdFTjYrICovCi0JKmNzKysgPSBvZmZzZXQ7Ci0JaW50 ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAot Z2VuNl9lbWl0X2JiX3N0YXJ0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAotCQkgICB1NjQgb2Zm c2V0LCB1MzIgbGVuLAotCQkgICB1bnNpZ25lZCBpbnQgZGlzcGF0Y2hfZmxhZ3MpCi17Ci0JdTMy ICpjczsKLQotCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgMik7Ci0JaWYgKElTX0VSUihjcykp Ci0JCXJldHVybiBQVFJfRVJSKGNzKTsKLQotCSpjcysrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJU IHwgKGRpc3BhdGNoX2ZsYWdzICYgSTkxNV9ESVNQQVRDSF9TRUNVUkUgPwotCQkwIDogTUlfQkFU Q0hfTk9OX1NFQ1VSRV9JOTY1KTsKLQkvKiBiaXQwLTcgaXMgdGhlIGxlbmd0aCBvbiBHRU42KyAq LwotCSpjcysrID0gb2Zmc2V0OwotCWludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwotCi0JcmV0 dXJuIDA7Ci19Ci0KLS8qIEJsaXR0ZXIgc3VwcG9ydCAoU2FuZHlCcmlkZ2UrKSAqLwotCi1zdGF0 aWMgaW50IGdlbjZfcmluZ19mbHVzaChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyIG1vZGUp Ci17Ci0JcmV0dXJuIGdlbjZfZmx1c2hfZHcocnEsIG1vZGUsIE1JX0lOVkFMSURBVEVfVExCKTsK LX0KLQogc3RhdGljIHZvaWQgaTl4eF9zZXRfZGVmYXVsdF9zdWJtaXNzaW9uKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAllbmdpbmUtPnN1Ym1pdF9yZXF1ZXN0ID0gaTl4eF9z dWJtaXRfcmVxdWVzdDsKQEAgLTE4NDMsMTEgKzEwNjUsMTEgQEAgc3RhdGljIHZvaWQgc2V0dXBf aXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJZW5naW5lLT5pcnFfZW5hYmxl ID0gZ2VuNV9pcnFfZW5hYmxlOwogCQllbmdpbmUtPmlycV9kaXNhYmxlID0gZ2VuNV9pcnFfZGlz YWJsZTsKIAl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSAzKSB7Ci0JCWVuZ2luZS0+aXJx X2VuYWJsZSA9IGk5eHhfaXJxX2VuYWJsZTsKLQkJZW5naW5lLT5pcnFfZGlzYWJsZSA9IGk5eHhf aXJxX2Rpc2FibGU7CisJCWVuZ2luZS0+aXJxX2VuYWJsZSA9IGdlbjNfaXJxX2VuYWJsZTsKKwkJ ZW5naW5lLT5pcnFfZGlzYWJsZSA9IGdlbjNfaXJxX2Rpc2FibGU7CiAJfSBlbHNlIHsKLQkJZW5n aW5lLT5pcnFfZW5hYmxlID0gaTh4eF9pcnFfZW5hYmxlOwotCQllbmdpbmUtPmlycV9kaXNhYmxl ID0gaTh4eF9pcnFfZGlzYWJsZTsKKwkJZW5naW5lLT5pcnFfZW5hYmxlID0gZ2VuMl9pcnFfZW5h YmxlOworCQllbmdpbmUtPmlycV9kaXNhYmxlID0gZ2VuMl9pcnFfZGlzYWJsZTsKIAl9CiB9CiAK QEAgLTE4NzQsNyArMTA5Niw3IEBAIHN0YXRpYyB2b2lkIHNldHVwX2NvbW1vbihzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJICogZXF1aXZhbGVudCB0byBvdXIgbmV4dCBpbml0aWFs IGJyZWFkIHNvIHdlIGNhbiBlbGlkZQogCSAqIGVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIo KS4KIAkgKi8KLQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gaTl4eF9lbWl0X2JyZWFk Y3J1bWI7CisJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjNfZW1pdF9icmVhZGNy dW1iOwogCWlmIChJU19HRU4oaTkxNSwgNSkpCiAJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1 bWIgPSBnZW41X2VtaXRfYnJlYWRjcnVtYjsKIApAQCAtMTg4MywxMSArMTEwNSwxMSBAQCBzdGF0 aWMgdm9pZCBzZXR1cF9jb21tb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCWlm IChJTlRFTF9HRU4oaTkxNSkgPj0gNikKIAkJZW5naW5lLT5lbWl0X2JiX3N0YXJ0ID0gZ2VuNl9l bWl0X2JiX3N0YXJ0OwogCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA0KQotCQllbmdpbmUt PmVtaXRfYmJfc3RhcnQgPSBpOTY1X2VtaXRfYmJfc3RhcnQ7CisJCWVuZ2luZS0+ZW1pdF9iYl9z dGFydCA9IGdlbjRfZW1pdF9iYl9zdGFydDsKIAllbHNlIGlmIChJU19JODMwKGk5MTUpIHx8IElT X0k4NDVHKGk5MTUpKQogCQllbmdpbmUtPmVtaXRfYmJfc3RhcnQgPSBpODMwX2VtaXRfYmJfc3Rh cnQ7CiAJZWxzZQotCQllbmdpbmUtPmVtaXRfYmJfc3RhcnQgPSBpOTE1X2VtaXRfYmJfc3RhcnQ7 CisJCWVuZ2luZS0+ZW1pdF9iYl9zdGFydCA9IGdlbjNfZW1pdF9iYl9zdGFydDsKIH0KIAogc3Rh dGljIHZvaWQgc2V0dXBfcmNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKQEAgLTE5 MDAsMTggKzExMjIsMTggQEAgc3RhdGljIHZvaWQgc2V0dXBfcmNzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKIAllbmdpbmUtPmlycV9lbmFibGVfbWFzayA9IEdUX1JFTkRFUl9VU0VS X0lOVEVSUlVQVDsKIAogCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNykgewotCQllbmdpbmUtPmVt aXRfZmx1c2ggPSBnZW43X3JlbmRlcl9yaW5nX2ZsdXNoOwotCQllbmdpbmUtPmVtaXRfZmluaV9i cmVhZGNydW1iID0gZ2VuN19yY3NfZW1pdF9icmVhZGNydW1iOworCQllbmdpbmUtPmVtaXRfZmx1 c2ggPSBnZW43X2VtaXRfZmx1c2hfcmNzOworCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1i ID0gZ2VuN19lbWl0X2JyZWFkY3J1bWJfcmNzOwogCX0gZWxzZSBpZiAoSVNfR0VOKGk5MTUsIDYp KSB7Ci0JCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjZfcmVuZGVyX3JpbmdfZmx1c2g7Ci0JCWVu Z2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW42X3Jjc19lbWl0X2JyZWFkY3J1bWI7CisJ CWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjZfZW1pdF9mbHVzaF9yY3M7CisJCWVuZ2luZS0+ZW1p dF9maW5pX2JyZWFkY3J1bWIgPSBnZW42X2VtaXRfYnJlYWRjcnVtYl9yY3M7CiAJfSBlbHNlIGlm IChJU19HRU4oaTkxNSwgNSkpIHsKLQkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuNF9yZW5kZXJf cmluZ19mbHVzaDsKKwkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuNF9lbWl0X2ZsdXNoX3JjczsK IAl9IGVsc2UgewogCQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNCkKLQkJCWVuZ2luZS0+ZW1pdF9m bHVzaCA9IGdlbjJfcmVuZGVyX3JpbmdfZmx1c2g7CisJCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBn ZW4yX2VtaXRfZmx1c2g7CiAJCWVsc2UKLQkJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjRfcmVu ZGVyX3JpbmdfZmx1c2g7CisJCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW40X2VtaXRfZmx1c2hf cmNzOwogCQllbmdpbmUtPmlycV9lbmFibGVfbWFzayA9IEk5MTVfVVNFUl9JTlRFUlJVUFQ7CiAJ fQogCkBAIC0xOTI5LDE1ICsxMTUxLDE1IEBAIHN0YXRpYyB2b2lkIHNldHVwX3ZjcyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJCS8qIGdlbjYgYnNkIG5lZWRzIGEgc3BlY2lhbCB3 YSBmb3IgdGFpbCB1cGRhdGVzICovCiAJCWlmIChJU19HRU4oaTkxNSwgNikpCiAJCQllbmdpbmUt PnNldF9kZWZhdWx0X3N1Ym1pc3Npb24gPSBnZW42X2JzZF9zZXRfZGVmYXVsdF9zdWJtaXNzaW9u OwotCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW42X2JzZF9yaW5nX2ZsdXNoOworCQllbmdpbmUt PmVtaXRfZmx1c2ggPSBnZW42X2VtaXRfZmx1c2hfdmNzOwogCQllbmdpbmUtPmlycV9lbmFibGVf bWFzayA9IEdUX0JTRF9VU0VSX0lOVEVSUlVQVDsKIAogCQlpZiAoSVNfR0VOKGk5MTUsIDYpKQot CQkJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjZfeGNzX2VtaXRfYnJlYWRjcnVt YjsKKwkJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW42X2VtaXRfYnJlYWRjcnVt Yl94Y3M7CiAJCWVsc2UKLQkJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW43X3hj c19lbWl0X2JyZWFkY3J1bWI7CisJCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2Vu N19lbWl0X2JyZWFkY3J1bWJfeGNzOwogCX0gZWxzZSB7Ci0JCWVuZ2luZS0+ZW1pdF9mbHVzaCA9 IGJzZF9yaW5nX2ZsdXNoOworCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW40X2VtaXRfZmx1c2hf dmNzOwogCQlpZiAoSVNfR0VOKGk5MTUsIDUpKQogCQkJZW5naW5lLT5pcnFfZW5hYmxlX21hc2sg PSBJTEtfQlNEX1VTRVJfSU5URVJSVVBUOwogCQllbHNlCkBAIC0xOTQ5LDEzICsxMTcxLDEzIEBA IHN0YXRpYyB2b2lkIHNldHVwX2JjcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbmdpbmUtPmk5MTU7CiAKLQllbmdp bmUtPmVtaXRfZmx1c2ggPSBnZW42X3JpbmdfZmx1c2g7CisJZW5naW5lLT5lbWl0X2ZsdXNoID0g Z2VuNl9lbWl0X2ZsdXNoX3hjczsKIAllbmdpbmUtPmlycV9lbmFibGVfbWFzayA9IEdUX0JMVF9V U0VSX0lOVEVSUlVQVDsKIAogCWlmIChJU19HRU4oaTkxNSwgNikpCi0JCWVuZ2luZS0+ZW1pdF9m aW5pX2JyZWFkY3J1bWIgPSBnZW42X3hjc19lbWl0X2JyZWFkY3J1bWI7CisJCWVuZ2luZS0+ZW1p dF9maW5pX2JyZWFkY3J1bWIgPSBnZW42X2VtaXRfYnJlYWRjcnVtYl94Y3M7CiAJZWxzZQotCQll bmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuN194Y3NfZW1pdF9icmVhZGNydW1iOwor CQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuN19lbWl0X2JyZWFkY3J1bWJfeGNz OwogfQogCiBzdGF0aWMgdm9pZCBzZXR1cF92ZWNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKQEAgLTE5NjQsMTIgKzExODYsMTIgQEAgc3RhdGljIHZvaWQgc2V0dXBfdmVjcyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAKIAlHRU1fQlVHX09OKElOVEVMX0dFTihpOTE1 KSA8IDcpOwogCi0JZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuNl9yaW5nX2ZsdXNoOworCWVuZ2lu ZS0+ZW1pdF9mbHVzaCA9IGdlbjZfZW1pdF9mbHVzaF94Y3M7CiAJZW5naW5lLT5pcnFfZW5hYmxl X21hc2sgPSBQTV9WRUJPWF9VU0VSX0lOVEVSUlVQVDsKLQllbmdpbmUtPmlycV9lbmFibGUgPSBo c3dfdmVib3hfaXJxX2VuYWJsZTsKLQllbmdpbmUtPmlycV9kaXNhYmxlID0gaHN3X3ZlYm94X2ly cV9kaXNhYmxlOworCWVuZ2luZS0+aXJxX2VuYWJsZSA9IGhzd19pcnFfZW5hYmxlX3ZlY3M7CisJ ZW5naW5lLT5pcnFfZGlzYWJsZSA9IGhzd19pcnFfZGlzYWJsZV92ZWNzOwogCi0JZW5naW5lLT5l bWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjdfeGNzX2VtaXRfYnJlYWRjcnVtYjsKKwllbmdpbmUt PmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuN19lbWl0X2JyZWFkY3J1bWJfeGNzOwogfQogCiBz dGF0aWMgaW50IGdlbjdfY3R4X3N3aXRjaF9iYl9zZXR1cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICogY29uc3QgZW5naW5lLAotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK