From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH v6] drm/i915: Tidy workaround batch buffer emission Date: Fri, 17 Feb 2017 07:58:59 +0000 Message-ID: <20170217075859.18007-1-tvrtko.ursulin@linux.intel.com> References: <20170216135402.28433-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id E37806E026 for ; Fri, 17 Feb 2017 07:59:08 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id u63so1133546wmu.2 for ; Thu, 16 Feb 2017 23:59:08 -0800 (PST) In-Reply-To: <20170216135402.28433-1-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClVzZSB0aGUg IipiYXRjaCsrID0gIiBzdHlsZSBhcyBpbiB0aGUgcmluZyBlbWlzc2lvbiBmb3IgYmV0dGVyCnJl YWRhYmlsaXR5IGFuZCBhbHNvIHNpbXBsaWZ5IHRoZSBsb2dpYyBhIGJpdCBieSBjb25zb2xpZGF0 aW5nCnRoZSBvZmZzZXQgYW5kIHNpemUgY2FsY3VsYXRpb25zIGFuZCBvdmVyZmxvdyBjaGVja2lu Zy4gVGhlCmxhdHRlciBpcyBhIHByb2dyYW1taW5nIGVycm9yIHNvIGl0IGlzIG5vdCByZXF1aXJl ZCB0byBjaGVjawpmb3IgaXQgYWZ0ZXIgZWFjaCB3cml0ZSB0byB0aGUgb2JqZWN0LCBidXQgcmF0 aGVyIGRvIGl0IG9uY2UgdGhlCndob2xlIHN0YXRlIGhhcyBiZWVuIHdyaXR0ZW4gYW5kIGZhaWwg dGhlIGRyaXZlciBpZiBzb21ldGhpbmcKd2VudCB3cm9uZy4KCnYyOiBSZWJhc2UuCgp2MzogS2Vl cCB0cmFjayBvZiBvZmZzZXRzIGFuZCBzaXplcyBpbiBieXRlcyBmb3Igc2ltcGxpY2l0eQogICAg YW5kIHJlbmFtZSBmdW5jdGlvbiBwb2ludGVyIHZhcmlhYmxlIHRvIF9mbiBzdWZmaXguCiAgICAo Q2hyaXMgV2lsc29uKQoKdjQ6IEZpeCBzaXplIGNhbGMgYnJva2VuIGluIHYzIGFuZCBhZGQgYWxp Z25tZW50IHdhcm5pbmcuIChDaHJpcyBXaWxzb24pCgp2NTogRml4IHJldHVybiBjb2RlLgoKdjY6 IEkgYWRkZWQgYW4gZXhpdCBmcm9tIGxvb3AgaW4gdjUgYnV0IGZvcmdvdCB0byBwdXQgYmFjawog ICAgdGhlIG9iamVjdCB0ZWFyZG93bi4KClNpZ25lZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0 dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+ClJldmlld2VkLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlz QGNocmlzLXdpbHNvbi5jby51az4gKHY1KQpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13 aWxzb24uY28udWs+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgfCAzMTgg KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwg MTE3IGluc2VydGlvbnMoKyksIDIwMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jCmluZGV4IGVlNDMxZDM5Y2UwNi4uNTE1NDY2MWEzOGNmIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuYwpAQCAtODkwLDE4ICs4OTAsNiBAQCBzdGF0aWMgaW50IGV4ZWNsaXN0c19yZXF1ZXN0 X2FsbG9jKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKIAlyZXR1cm4gcmV0 OwogfQogCi0jZGVmaW5lIHdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgY21kKQkJCQkJXAotCWRv IHsJCQkJCQkJCVwKLQkJaW50IF9faW5kZXggPSAoaW5kZXgpKys7CQkJCVwKLQkJaWYgKFdBUk5f T04oX19pbmRleCA+PSAoUEFHRV9TSVpFIC8gc2l6ZW9mKHVpbnQzMl90KSkpKSB7IFwKLQkJCXJl dHVybiAtRU5PU1BDOwkJCQkJXAotCQl9CQkJCQkJCVwKLQkJYmF0Y2hbX19pbmRleF0gPSAoY21k KTsJCQkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIHdhX2N0eF9lbWl0X3JlZyhiYXRjaCwg aW5kZXgsIHJlZykgXAotCXdhX2N0eF9lbWl0KChiYXRjaCksIChpbmRleCksIGk5MTVfbW1pb19y ZWdfb2Zmc2V0KHJlZykpCi0KIC8qCiAgKiBJbiB0aGlzIFdBIHdlIG5lZWQgdG8gc2V0IEdFTjhf TDNTUUNSRUc0WzIxOjIxXSBhbmQgcmVzZXQgaXQgYWZ0ZXIKICAqIFBJUEVfQ09OVFJPTCBpbnN0 cnVjdGlvbi4gVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIGZsdXNoIHRvIGhhcHBlbiBjb3JyZWN0 bHkKQEAgLTkxOCw1NiArOTA2LDMxIEBAIHN0YXRpYyBpbnQgZXhlY2xpc3RzX3JlcXVlc3RfYWxs b2Moc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQogICogVGhpcyBXQSBpcyBh bHNvIHJlcXVpcmVkIGZvciBHZW45IHNvIGV4dHJhY3RpbmcgYXMgYSBmdW5jdGlvbiBhdm9pZHMK ICAqIGNvZGUgZHVwbGljYXRpb24uCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdlbjhfZW1pdF9m bHVzaF9jb2hlcmVudGwzX3dhKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJCQkJ CXVpbnQzMl90ICpiYXRjaCwKLQkJCQkJCXVpbnQzMl90IGluZGV4KQotewotCXVpbnQzMl90IGwz c3FjNF9mbHVzaCA9ICgweDQwNDAwMDAwIHwgR0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJTkVT KTsKLQotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgKE1JX1NUT1JFX1JFR0lTVEVSX01FTV9H RU44IHwKLQkJCQkgICBNSV9TUk1fTFJNX0dMT0JBTF9HVFQpKTsKLQl3YV9jdHhfZW1pdF9yZWco YmF0Y2gsIGluZGV4LCBHRU44X0wzU1FDUkVHNCk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4 LCBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRjaCkgKyAyNTYpOwotCXdhX2N0eF9lbWl0 KGJhdGNoLCBpbmRleCwgMCk7Ci0KLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIE1JX0xPQURf UkVHSVNURVJfSU1NKDEpKTsKLQl3YV9jdHhfZW1pdF9yZWcoYmF0Y2gsIGluZGV4LCBHRU44X0wz U1FDUkVHNCk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBsM3NxYzRfZmx1c2gpOwotCi0J d2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBHRlhfT1BfUElQRV9DT05UUk9MKDYpKTsKLQl3YV9j dHhfZW1pdChiYXRjaCwgaW5kZXgsIChQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfAotCQkJCSAgIFBJ UEVfQ09OVFJPTF9EQ19GTFVTSF9FTkFCTEUpKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgs IDApOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gs IGluZGV4LCAwKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCi0Jd2FfY3R4X2Vt aXQoYmF0Y2gsIGluZGV4LCAoTUlfTE9BRF9SRUdJU1RFUl9NRU1fR0VOOCB8Ci0JCQkJICAgTUlf U1JNX0xSTV9HTE9CQUxfR1RUKSk7Ci0Jd2FfY3R4X2VtaXRfcmVnKGJhdGNoLCBpbmRleCwgR0VO OF9MM1NRQ1JFRzQpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgaTkxNV9nZ3R0X29mZnNl dChlbmdpbmUtPnNjcmF0Y2gpICsgMjU2KTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDAp OwotCi0JcmV0dXJuIGluZGV4OwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IHdhX2N0eF9z dGFydChzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2N0eCwKLQkJCQkgICAgdWludDMyX3Qgb2Zm c2V0LAotCQkJCSAgICB1aW50MzJfdCBzdGFydF9hbGlnbm1lbnQpCitzdGF0aWMgdTMyICoKK2dl bjhfZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwgdTMyICpiYXRjaCkKIHsKLQlyZXR1cm4gd2FfY3R4LT5vZmZzZXQgPSBBTElHTihvZmZzZXQs IHN0YXJ0X2FsaWdubWVudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHdhX2N0eF9lbmQoc3Ry dWN0IGk5MTVfd2FfY3R4X2JiICp3YV9jdHgsCi0JCQkgICAgIHVpbnQzMl90IG9mZnNldCwKLQkJ CSAgICAgdWludDMyX3Qgc2l6ZV9hbGlnbm1lbnQpCi17Ci0Jd2FfY3R4LT5zaXplID0gb2Zmc2V0 IC0gd2FfY3R4LT5vZmZzZXQ7Ci0KLQlXQVJOKHdhX2N0eC0+c2l6ZSAlIHNpemVfYWxpZ25tZW50 LAotCSAgICAgIndhX2N0eF9iYiBmYWlsZWQgc2FuaXR5IGNoZWNrczogc2l6ZSAlZCBpcyBub3Qg YWxpZ25lZCB0byAlZFxuIiwKLQkgICAgIHdhX2N0eC0+c2l6ZSwgc2l6ZV9hbGlnbm1lbnQpOwot CXJldHVybiAwOworCSpiYXRjaCsrID0gTUlfU1RPUkVfUkVHSVNURVJfTUVNX0dFTjggfCBNSV9T Uk1fTFJNX0dMT0JBTF9HVFQ7CisJKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44 X0wzU1FDUkVHNCk7CisJKmJhdGNoKysgPSBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRj aCkgKyAyNTY7CisJKmJhdGNoKysgPSAwOworCisJKmJhdGNoKysgPSBNSV9MT0FEX1JFR0lTVEVS X0lNTSgxKTsKKwkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfTDNTUUNSRUc0 KTsKKwkqYmF0Y2grKyA9IDB4NDA0MDAwMDAgfCBHRU44X0xRU0NfRkxVU0hfQ09IRVJFTlRfTElO RVM7CisKKwkqYmF0Y2grKyA9IEdGWF9PUF9QSVBFX0NPTlRST0woNik7CisJKmJhdGNoKysgPSBQ SVBFX0NPTlRST0xfQ1NfU1RBTEwgfCBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFOworCSpi YXRjaCsrID0gMDsKKwkqYmF0Y2grKyA9IDA7CisJKmJhdGNoKysgPSAwOworCSpiYXRjaCsrID0g MDsKKworCSpiYXRjaCsrID0gTUlfTE9BRF9SRUdJU1RFUl9NRU1fR0VOOCB8IE1JX1NSTV9MUk1f R0xPQkFMX0dUVDsKKwkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfTDNTUUNS RUc0KTsKKwkqYmF0Y2grKyA9IGk5MTVfZ2d0dF9vZmZzZXQoZW5naW5lLT5zY3JhdGNoKSArIDI1 NjsKKwkqYmF0Y2grKyA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCkBAIC05ODUsNDIg Kzk0OCwyOCBAQCBzdGF0aWMgaW5saW5lIGludCB3YV9jdHhfZW5kKHN0cnVjdCBpOTE1X3dhX2N0 eF9iYiAqd2FfY3R4LAogICogTUlfQkFUQ0hfQlVGRkVSX0VORCB3aWxsIGJlIGFkZGVkIHRvIHBl cmN0eCBiYXRjaCBhbmQgYm90aCBvZiB0aGVtIHRvZ2V0aGVyCiAgKiBtYWtlcyBhIGNvbXBsZXRl IGJhdGNoIGJ1ZmZlci4KICAqLwotc3RhdGljIGludCBnZW44X2luaXRfaW5kaXJlY3RjdHhfYmIo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCSAgICBzdHJ1Y3QgaTkxNV93YV9j dHhfYmIgKndhX2N0eCwKLQkJCQkgICAgdWludDMyX3QgKmJhdGNoLAotCQkJCSAgICB1aW50MzJf dCAqb2Zmc2V0KQorc3RhdGljIHUzMiAqZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCkKIHsKLQl1aW50MzJfdCBzY3JhdGNo X2FkZHI7Ci0JdWludDMyX3QgaW5kZXggPSB3YV9jdHhfc3RhcnQod2FfY3R4LCAqb2Zmc2V0LCBD QUNIRUxJTkVfRFdPUkRTKTsKLQogCS8qIFdhRGlzYWJsZUN0eFJlc3RvcmVBcmJpdHJhdGlvbjpi ZHcsY2h2ICovCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9BUkJfT05fT0ZGIHwgTUlf QVJCX0RJU0FCTEUpOworCSpiYXRjaCsrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9ESVNBQkxF OwogCiAJLyogV2FGbHVzaENvaGVyZW50TDNDYWNoZUxpbmVzQXRDb250ZXh0U3dpdGNoOmJkdyAq LwotCWlmIChJU19CUk9BRFdFTEwoZW5naW5lLT5pOTE1KSkgewotCQlpbnQgcmMgPSBnZW44X2Vt aXRfZmx1c2hfY29oZXJlbnRsM193YShlbmdpbmUsIGJhdGNoLCBpbmRleCk7Ci0JCWlmIChyYyA8 IDApCi0JCQlyZXR1cm4gcmM7Ci0JCWluZGV4ID0gcmM7Ci0JfQorCWlmIChJU19CUk9BRFdFTEwo ZW5naW5lLT5pOTE1KSkKKwkJYmF0Y2ggPSBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShl bmdpbmUsIGJhdGNoKTsKIAorCSpiYXRjaCsrID0gR0ZYX09QX1BJUEVfQ09OVFJPTCg2KTsKKwkq YmF0Y2grKyA9IFBJUEVfQ09OVFJPTF9GTFVTSF9MMyB8IFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RU X0lWQiB8CisJCSAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8IFBJUEVfQ09OVFJPTF9RV19XUklU RTsKIAkvKiBXYUNsZWFyU2xtU3BhY2VBdENvbnRleHRTd2l0Y2g6YmR3LGNodiAqLwogCS8qIEFj dHVhbCBzY3JhdGNoIGxvY2F0aW9uIGlzIGF0IDEyOCBieXRlcyBvZmZzZXQgKi8KLQlzY3JhdGNo X2FkZHIgPSBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRjaCkgKyAyICogQ0FDSEVMSU5F X0JZVEVTOwotCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBHRlhfT1BfUElQRV9DT05UUk9M KDYpKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIChQSVBFX0NPTlRST0xfRkxVU0hfTDMg fAotCQkJCSAgIFBJUEVfQ09OVFJPTF9HTE9CQUxfR1RUX0lWQiB8Ci0JCQkJICAgUElQRV9DT05U Uk9MX0NTX1NUQUxMIHwKLQkJCQkgICBQSVBFX0NPTlRST0xfUVdfV1JJVEUpKTsKLQl3YV9jdHhf ZW1pdChiYXRjaCwgaW5kZXgsIHNjcmF0Y2hfYWRkcik7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGlu ZGV4LCAwKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCXdhX2N0eF9lbWl0KGJh dGNoLCBpbmRleCwgMCk7CisJKmJhdGNoKysgPSBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2Ny YXRjaCkgKyAyICogQ0FDSEVMSU5FX0JZVEVTOworCSpiYXRjaCsrID0gMDsKKwkqYmF0Y2grKyA9 IDA7CisJKmJhdGNoKysgPSAwOwogCiAJLyogUGFkIHRvIGVuZCBvZiBjYWNoZWxpbmUgKi8KLQl3 aGlsZSAoaW5kZXggJSBDQUNIRUxJTkVfRFdPUkRTKQotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5k ZXgsIE1JX05PT1ApOworCXdoaWxlICgodW5zaWduZWQgbG9uZyliYXRjaCAlIENBQ0hFTElORV9C WVRFUykKKwkJKmJhdGNoKysgPSBNSV9OT09QOwogCiAJLyoKIAkgKiBNSV9CQVRDSF9CVUZGRVJf RU5EIGlzIG5vdCByZXF1aXJlZCBpbiBJbmRpcmVjdCBjdHggQkIgYmVjYXVzZQpAQCAtMTAyOCw3 ICs5NzcsNyBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJICogaW4gdGhlIHJlZ2lzdGVyIENUWF9SQ1NfSU5ESVJF Q1RfQ1RYCiAJICovCiAKLQlyZXR1cm4gd2FfY3R4X2VuZCh3YV9jdHgsICpvZmZzZXQgPSBpbmRl eCwgQ0FDSEVMSU5FX0RXT1JEUyk7CisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMTA0MCw1 OCArOTg5LDM4IEBAIHN0YXRpYyBpbnQgZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKICAqICBUaGlzIGJhdGNoIGlzIHRlcm1pbmF0ZWQgd2l0 aCBNSV9CQVRDSF9CVUZGRVJfRU5EIGFuZCBzbyB3ZSBuZWVkIG5vdCBhZGQgcGFkZGluZwogICog IHRvIGFsaWduIGl0IHdpdGggY2FjaGVsaW5lIGFzIHBhZGRpbmcgYWZ0ZXIgTUlfQkFUQ0hfQlVG RkVSX0VORCBpcyByZWR1bmRhbnQuCiAgKi8KLXN0YXRpYyBpbnQgZ2VuOF9pbml0X3BlcmN0eF9i YihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkgICAgICAgc3RydWN0IGk5MTVf d2FfY3R4X2JiICp3YV9jdHgsCi0JCQkgICAgICAgdWludDMyX3QgKmJhdGNoLAotCQkJICAgICAg IHVpbnQzMl90ICpvZmZzZXQpCitzdGF0aWMgdTMyICpnZW44X2luaXRfcGVyY3R4X2JiKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCkKIHsKLQl1aW50MzJfdCBpbmRl eCA9IHdhX2N0eF9zdGFydCh3YV9jdHgsICpvZmZzZXQsIENBQ0hFTElORV9EV09SRFMpOwotCiAJ LyogV2FEaXNhYmxlQ3R4UmVzdG9yZUFyYml0cmF0aW9uOmJkdyxjaHYgKi8KLQl3YV9jdHhfZW1p dChiYXRjaCwgaW5kZXgsIE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRU5BQkxFKTsKLQotCXdhX2N0 eF9lbWl0KGJhdGNoLCBpbmRleCwgTUlfQkFUQ0hfQlVGRkVSX0VORCk7CisJKmJhdGNoKysgPSBN SV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsKKwkqYmF0Y2grKyA9IE1JX0JBVENIX0JVRkZF Ul9FTkQ7CiAKLQlyZXR1cm4gd2FfY3R4X2VuZCh3YV9jdHgsICpvZmZzZXQgPSBpbmRleCwgMSk7 CisJcmV0dXJuIGJhdGNoOwogfQogCi1zdGF0aWMgaW50IGdlbjlfaW5pdF9pbmRpcmVjdGN0eF9i YihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkJICAgIHN0cnVjdCBpOTE1X3dh X2N0eF9iYiAqd2FfY3R4LAotCQkJCSAgICB1aW50MzJfdCAqYmF0Y2gsCi0JCQkJICAgIHVpbnQz Ml90ICpvZmZzZXQpCitzdGF0aWMgdTMyICpnZW45X2luaXRfaW5kaXJlY3RjdHhfYmIoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKQogewotCWludCByZXQ7Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1OwotCXVpbnQzMl90 IGluZGV4ID0gd2FfY3R4X3N0YXJ0KHdhX2N0eCwgKm9mZnNldCwgQ0FDSEVMSU5FX0RXT1JEUyk7 Ci0KIAkvKiBXYUZsdXNoQ29oZXJlbnRMM0NhY2hlTGluZXNBdENvbnRleHRTd2l0Y2g6c2tsLGJ4 dCxnbGsgKi8KLQlyZXQgPSBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShlbmdpbmUsIGJh dGNoLCBpbmRleCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JaW5kZXggPSByZXQ7 CisJYmF0Y2ggPSBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShlbmdpbmUsIGJhdGNoKTsK IAogCS8qIFdhRGlzYWJsZUdhdGhlckF0U2V0U2hhZGVyQ29tbW9uU2xpY2U6c2tsLGJ4dCxrYmws Z2xrICovCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9MT0FEX1JFR0lTVEVSX0lNTSgx KSk7Ci0Jd2FfY3R4X2VtaXRfcmVnKGJhdGNoLCBpbmRleCwgQ09NTU9OX1NMSUNFX0NISUNLRU4y KTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIF9NQVNLRURfQklUX0RJU0FCTEUoCi0JCQkg ICAgR0VOOV9ESVNBQkxFX0dBVEhFUl9BVF9TRVRfU0hBREVSX0NPTU1PTl9TTElDRSkpOwotCXdh X2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgTUlfTk9PUCk7CisJKmJhdGNoKysgPSBNSV9MT0FEX1JF R0lTVEVSX0lNTSgxKTsKKwkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KENPTU1PTl9T TElDRV9DSElDS0VOMik7CisJKmJhdGNoKysgPSBfTUFTS0VEX0JJVF9ESVNBQkxFKAorCQkJR0VO OV9ESVNBQkxFX0dBVEhFUl9BVF9TRVRfU0hBREVSX0NPTU1PTl9TTElDRSk7CisJKmJhdGNoKysg PSBNSV9OT09QOwogCiAJLyogV2FDbGVhclNsbVNwYWNlQXRDb250ZXh0U3dpdGNoOmtibCAqLwog CS8qIEFjdHVhbCBzY3JhdGNoIGxvY2F0aW9uIGlzIGF0IDEyOCBieXRlcyBvZmZzZXQgKi8KLQlp ZiAoSVNfS0JMX1JFVklEKGRldl9wcml2LCAwLCBLQkxfUkVWSURfQTApKSB7Ci0JCXUzMiBzY3Jh dGNoX2FkZHIgPQotCQkJaTkxNV9nZ3R0X29mZnNldChlbmdpbmUtPnNjcmF0Y2gpICsgMiAqIENB Q0hFTElORV9CWVRFUzsKLQotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIEdGWF9PUF9QSVBF X0NPTlRST0woNikpOwotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIChQSVBFX0NPTlRST0xf RkxVU0hfTDMgfAotCQkJCQkgICBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9JVkIgfAotCQkJCQkg ICBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfAotCQkJCQkgICBQSVBFX0NPTlRST0xfUVdfV1JJVEUp KTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBzY3JhdGNoX2FkZHIpOwotCQl3YV9jdHhf ZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwot CQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOworCWlmIChJU19LQkxfUkVWSUQoZW5naW5l LT5pOTE1LCAwLCBLQkxfUkVWSURfQTApKSB7CisJCSpiYXRjaCsrID0gR0ZYX09QX1BJUEVfQ09O VFJPTCg2KTsKKwkJKmJhdGNoKysgPSBQSVBFX0NPTlRST0xfRkxVU0hfTDMgfCBQSVBFX0NPTlRS T0xfR0xPQkFMX0dUVF9JVkIgfAorCQkJICAgUElQRV9DT05UUk9MX0NTX1NUQUxMIHwgUElQRV9D T05UUk9MX1FXX1dSSVRFOworCQkqYmF0Y2grKyA9IGk5MTVfZ2d0dF9vZmZzZXQoZW5naW5lLT5z Y3JhdGNoKSArCisJCQkgICAyICogQ0FDSEVMSU5FX0JZVEVTOworCQkqYmF0Y2grKyA9IDA7CisJ CSpiYXRjaCsrID0gMDsKKwkJKmJhdGNoKysgPSAwOwogCX0KIAogCS8qIFdhTWVkaWFQb29sU3Rh dGVDbWRJbldBQkI6Ynh0LGdsayAqLwpAQCAtMTEwOSw0MSArMTAzOCwzNyBAQCBzdGF0aWMgaW50 IGdlbjlfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs CiAJCSAqIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zLCB0byBhdm9pZCBkdXBsaWNhdGlvbiB0aGV5 IGFyZQogCQkgKiBub3Qgc2hvd24gaGVyZSBhZ2Fpbi4KIAkJICovCi0JCXUzMiBldV9wb29sX2Nv bmZpZyA9IDB4MDA3NzcwMDA7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgR0VOOV9NRURJ QV9QT09MX1NUQVRFKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBHRU45X01FRElBX1BP T0xfRU5BQkxFKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBldV9wb29sX2NvbmZpZyk7 Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBp bmRleCwgMCk7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgMCk7CisJCSpiYXRjaCsrID0g R0VOOV9NRURJQV9QT09MX1NUQVRFOworCQkqYmF0Y2grKyA9IEdFTjlfTUVESUFfUE9PTF9FTkFC TEU7CisJCSpiYXRjaCsrID0gMHgwMDc3NzAwMDsKKwkJKmJhdGNoKysgPSAwOworCQkqYmF0Y2gr KyA9IDA7CisJCSpiYXRjaCsrID0gMDsKIAl9CiAKIAkvKiBQYWQgdG8gZW5kIG9mIGNhY2hlbGlu ZSAqLwotCXdoaWxlIChpbmRleCAlIENBQ0hFTElORV9EV09SRFMpCi0JCXdhX2N0eF9lbWl0KGJh dGNoLCBpbmRleCwgTUlfTk9PUCk7CisJd2hpbGUgKCh1bnNpZ25lZCBsb25nKWJhdGNoICUgQ0FD SEVMSU5FX0JZVEVTKQorCQkqYmF0Y2grKyA9IE1JX05PT1A7CiAKLQlyZXR1cm4gd2FfY3R4X2Vu ZCh3YV9jdHgsICpvZmZzZXQgPSBpbmRleCwgQ0FDSEVMSU5FX0RXT1JEUyk7CisJcmV0dXJuIGJh dGNoOwogfQogCi1zdGF0aWMgaW50IGdlbjlfaW5pdF9wZXJjdHhfYmIoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAotCQkJICAgICAgIHN0cnVjdCBpOTE1X3dhX2N0eF9iYiAqd2FfY3R4 LAotCQkJICAgICAgIHVpbnQzMl90ICpiYXRjaCwKLQkJCSAgICAgICB1aW50MzJfdCAqb2Zmc2V0 KQorc3RhdGljIHUzMiAqZ2VuOV9pbml0X3BlcmN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIHUzMiAqYmF0Y2gpCiB7Ci0JdWludDMyX3QgaW5kZXggPSB3YV9jdHhfc3RhcnQo d2FfY3R4LCAqb2Zmc2V0LCBDQUNIRUxJTkVfRFdPUkRTKTsKLQotCXdhX2N0eF9lbWl0KGJhdGNo LCBpbmRleCwgTUlfQkFUQ0hfQlVGRkVSX0VORCk7CisJKmJhdGNoKysgPSBNSV9CQVRDSF9CVUZG RVJfRU5EOwogCi0JcmV0dXJuIHdhX2N0eF9lbmQod2FfY3R4LCAqb2Zmc2V0ID0gaW5kZXgsIDEp OworCXJldHVybiBiYXRjaDsKIH0KIAotc3RhdGljIGludCBscmNfc2V0dXBfd2FfY3R4X29iaihz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBzaXplKQorI2RlZmluZSBDVFhfV0Ff QkJfT0JKX1NJWkUgKFBBR0VfU0laRSkKKworc3RhdGljIGludCBscmNfc2V0dXBfd2FfY3R4KHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqOwogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwogCWludCBlcnI7CiAKLQlvYmogPSBp OTE1X2dlbV9vYmplY3RfY3JlYXRlKGVuZ2luZS0+aTkxNSwgUEFHRV9BTElHTihzaXplKSk7CisJ b2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShlbmdpbmUtPmk5MTUsIENUWF9XQV9CQl9PQkpf U0laRSk7CiAJaWYgKElTX0VSUihvYmopKQogCQlyZXR1cm4gUFRSX0VSUihvYmopOwogCkBAIC0x MTY1LDc4ICsxMDkwLDcwIEBAIHN0YXRpYyBpbnQgbHJjX3NldHVwX3dhX2N0eF9vYmooc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgc2l6ZSkKIAlyZXR1cm4gZXJyOwogfQogCi1z dGF0aWMgdm9pZCBscmNfZGVzdHJveV93YV9jdHhfb2JqKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKK3N0YXRpYyB2b2lkIGxyY19kZXN0cm95X3dhX2N0eChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCiB7CiAJaTkxNV92bWFfdW5waW5fYW5kX3JlbGVhc2UoJmVuZ2luZS0+ d2FfY3R4LnZtYSk7CiB9CiAKK3R5cGVkZWYgdTMyICooKndhX2JiX2Z1bmNfdCkoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKTsKKwogc3RhdGljIGludCBpbnRlbF9p bml0X3dvcmthcm91bmRfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCXN0 cnVjdCBpOTE1X2N0eF93b3JrYXJvdW5kcyAqd2FfY3R4ID0gJmVuZ2luZS0+d2FfY3R4OwotCXVp bnQzMl90ICpiYXRjaDsKLQl1aW50MzJfdCBvZmZzZXQ7CisJc3RydWN0IGk5MTVfd2FfY3R4X2Ji ICp3YV9iYlsyXSA9IHsgJndhX2N0eC0+aW5kaXJlY3RfY3R4LAorCQkJCQkgICAgJndhX2N0eC0+ cGVyX2N0eCB9OworCXdhX2JiX2Z1bmNfdCB3YV9iYl9mblsyXTsKIAlzdHJ1Y3QgcGFnZSAqcGFn ZTsKKwl2b2lkICpiYXRjaCwgKmJhdGNoX3B0cjsKKwl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0 OwogCi0JV0FSTl9PTihlbmdpbmUtPmlkICE9IFJDUyk7CisJaWYgKFdBUk5fT04oZW5naW5lLT5p ZCAhPSBSQ1MgfHwgIWVuZ2luZS0+c2NyYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOwogCi0JLyog dXBkYXRlIHRoaXMgd2hlbiBXQSBmb3IgaGlnaGVyIEdlbiBhcmUgYWRkZWQgKi8KLQlpZiAoSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkgPiA5KSB7Ci0JCURSTV9FUlJPUigiV0EgYmF0Y2ggYnVmZmVy IGlzIG5vdCBpbml0aWFsaXplZCBmb3IgR2VuJWRcbiIsCi0JCQkgIElOVEVMX0dFTihlbmdpbmUt Pmk5MTUpKTsKKwlzd2l0Y2ggKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKSB7CisJY2FzZSA5Ogor CQl3YV9iYl9mblswXSA9IGdlbjlfaW5pdF9pbmRpcmVjdGN0eF9iYjsKKwkJd2FfYmJfZm5bMV0g PSBnZW45X2luaXRfcGVyY3R4X2JiOworCQlicmVhazsKKwljYXNlIDg6CisJCXdhX2JiX2ZuWzBd ID0gZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiOworCQl3YV9iYl9mblsxXSA9IGdlbjhfaW5pdF9w ZXJjdHhfYmI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4o ZW5naW5lLT5pOTE1KSk7CiAJCXJldHVybiAwOwogCX0KIAotCS8qIHNvbWUgV0EgcGVyZm9ybSB3 cml0ZXMgdG8gc2NyYXRjaCBwYWdlLCBlbnN1cmUgaXQgaXMgdmFsaWQgKi8KLQlpZiAoIWVuZ2lu ZS0+c2NyYXRjaCkgewotCQlEUk1fRVJST1IoInNjcmF0Y2ggcGFnZSBub3QgYWxsb2NhdGVkIGZv ciAlc1xuIiwgZW5naW5lLT5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0ID0g bHJjX3NldHVwX3dhX2N0eF9vYmooZW5naW5lLCBQQUdFX1NJWkUpOworCXJldCA9IGxyY19zZXR1 cF93YV9jdHgoZW5naW5lKTsKIAlpZiAocmV0KSB7CiAJCURSTV9ERUJVR19EUklWRVIoIkZhaWxl ZCB0byBzZXR1cCBjb250ZXh0IFdBIHBhZ2U6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0Owog CX0KIAogCXBhZ2UgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2RpcnR5X3BhZ2Uod2FfY3R4LT52bWEt Pm9iaiwgMCk7Ci0JYmF0Y2ggPSBrbWFwX2F0b21pYyhwYWdlKTsKLQlvZmZzZXQgPSAwOwotCi0J aWYgKElTX0dFTjgoZW5naW5lLT5pOTE1KSkgewotCQlyZXQgPSBnZW44X2luaXRfaW5kaXJlY3Rj dHhfYmIoZW5naW5lLAotCQkJCQkgICAgICAgJndhX2N0eC0+aW5kaXJlY3RfY3R4LAotCQkJCQkg ICAgICAgYmF0Y2gsCi0JCQkJCSAgICAgICAmb2Zmc2V0KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8g b3V0OworCWJhdGNoID0gYmF0Y2hfcHRyID0ga21hcF9hdG9taWMocGFnZSk7CiAKLQkJcmV0ID0g Z2VuOF9pbml0X3BlcmN0eF9iYihlbmdpbmUsCi0JCQkJCSAgJndhX2N0eC0+cGVyX2N0eCwKLQkJ CQkJICBiYXRjaCwKLQkJCQkJICAmb2Zmc2V0KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0Owot CX0gZWxzZSBpZiAoSVNfR0VOOShlbmdpbmUtPmk5MTUpKSB7Ci0JCXJldCA9IGdlbjlfaW5pdF9p bmRpcmVjdGN0eF9iYihlbmdpbmUsCi0JCQkJCSAgICAgICAmd2FfY3R4LT5pbmRpcmVjdF9jdHgs Ci0JCQkJCSAgICAgICBiYXRjaCwKLQkJCQkJICAgICAgICZvZmZzZXQpOwotCQlpZiAocmV0KQot CQkJZ290byBvdXQ7Ci0KLQkJcmV0ID0gZ2VuOV9pbml0X3BlcmN0eF9iYihlbmdpbmUsCi0JCQkJ CSAgJndhX2N0eC0+cGVyX2N0eCwKLQkJCQkJICBiYXRjaCwKLQkJCQkJICAmb2Zmc2V0KTsKLQkJ aWYgKHJldCkKLQkJCWdvdG8gb3V0OworCS8qCisJICogRW1pdCB0aGUgdHdvIHdvcmthcm91bmQg YmF0Y2ggYnVmZmVycywgcmVjb3JkaW5nIHRoZSBvZmZzZXQgZnJvbSB0aGUKKwkgKiBzdGFydCBv ZiB0aGUgd29ya2Fyb3VuZCBiYXRjaCBidWZmZXIgb2JqZWN0IGZvciBlYWNoIGFuZCB0aGVpcgor CSAqIHJlc3BlY3RpdmUgc2l6ZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo d2FfYmJfZm4pOyBpKyspIHsKKwkJd2FfYmJbaV0tPm9mZnNldCA9IGJhdGNoX3B0ciAtIGJhdGNo OworCQlpZiAoV0FSTl9PTighSVNfQUxJR05FRCh3YV9iYltpXS0+b2Zmc2V0LCBDQUNIRUxJTkVf QllURVMpKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWJhdGNoX3B0 ciA9IHdhX2JiX2ZuW2ldKGVuZ2luZSwgYmF0Y2hfcHRyKTsKKwkJd2FfYmJbaV0tPnNpemUgPSBi YXRjaF9wdHIgLSAoYmF0Y2ggKyB3YV9iYltpXS0+b2Zmc2V0KTsKIAl9CiAKLW91dDoKKwlCVUdf T04oYmF0Y2hfcHRyIC0gYmF0Y2ggPiBDVFhfV0FfQkJfT0JKX1NJWkUpOworCiAJa3VubWFwX2F0 b21pYyhiYXRjaCk7CiAJaWYgKHJldCkKLQkJbHJjX2Rlc3Ryb3lfd2FfY3R4X29iaihlbmdpbmUp OworCQlscmNfZGVzdHJveV93YV9jdHgoZW5naW5lKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0x Njg1LDcgKzE2MDIsNyBAQCB2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19jbGVhbnVwKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCWludGVsX2VuZ2luZV9jbGVhbnVwX2NvbW1vbihl bmdpbmUpOwogCi0JbHJjX2Rlc3Ryb3lfd2FfY3R4X29iaihlbmdpbmUpOworCWxyY19kZXN0cm95 X3dhX2N0eChlbmdpbmUpOwogCWVuZ2luZS0+aTkxNSA9IE5VTEw7CiAJZGV2X3ByaXYtPmVuZ2lu ZVtlbmdpbmUtPmlkXSA9IE5VTEw7CiAJa2ZyZWUoZW5naW5lKTsKQEAgLTE5NzEsMTUgKzE4ODgs MTQgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHUzMiAqcmVnX3N0YXRl LAogCQkJdTMyIGdndHRfb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldCh3YV9jdHgtPnZtYSk7CiAK IAkJCXJlZ19zdGF0ZVtDVFhfUkNTX0lORElSRUNUX0NUWCsxXSA9Ci0JCQkJKGdndHRfb2Zmc2V0 ICsgd2FfY3R4LT5pbmRpcmVjdF9jdHgub2Zmc2V0ICogc2l6ZW9mKHVpbnQzMl90KSkgfAotCQkJ CSh3YV9jdHgtPmluZGlyZWN0X2N0eC5zaXplIC8gQ0FDSEVMSU5FX0RXT1JEUyk7CisJCQkJKGdn dHRfb2Zmc2V0ICsgd2FfY3R4LT5pbmRpcmVjdF9jdHgub2Zmc2V0KSB8CisJCQkJKHdhX2N0eC0+ aW5kaXJlY3RfY3R4LnNpemUgLyBDQUNIRUxJTkVfQllURVMpOwogCiAJCQlyZWdfc3RhdGVbQ1RY X1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUKzFdID0KIAkJCQlpbnRlbF9scl9pbmRpcmVjdF9jdHhf b2Zmc2V0KGVuZ2luZSkgPDwgNjsKIAogCQkJcmVnX3N0YXRlW0NUWF9CQl9QRVJfQ1RYX1BUUisx XSA9Ci0JCQkJKGdndHRfb2Zmc2V0ICsgd2FfY3R4LT5wZXJfY3R4Lm9mZnNldCAqIHNpemVvZih1 aW50MzJfdCkpIHwKLQkJCQkweDAxOworCQkJCShnZ3R0X29mZnNldCArIHdhX2N0eC0+cGVyX2N0 eC5vZmZzZXQpIHwgMHgwMTsKIAkJfQogCX0KIAlyZWdfc3RhdGVbQ1RYX0xSSV9IRUFERVJfMV0g PSBNSV9MT0FEX1JFR0lTVEVSX0lNTSg5KSB8IE1JX0xSSV9GT1JDRV9QT1NURUQ7Ci0tIAoyLjku MwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==