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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id ECB05C4345F for ; Mon, 29 Apr 2024 15:09:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ZUCtVPBYn621JIUVwC97U7dtmkyqkbsrVn0m2VT3MK8=; b=tVDHhxUNlTXaQF 8rO+bVB/vD6Ooxhd1vtCei7rvIyiidCaD+s4BkWV+N9tK+qPQg1EQC4LFO0mF2ShfhUjCJ+sRJHD6 jdEO897Z4JXsS/pV70kAa1JINh7f/+BVWUzEBA7hmdzzKwTpy6Tn+ilux+mZDa9XMoFe9P9CZcWwK u20NXjnd7yQk2swCBCoUw66FG4988QpsmCYaaqpAvy2Cz9uWBjOav42Aax+JFmSJ8JDUD3ia2+Z7C Kize9zvwCHzulWXRlSgfXbAz4gL1VSH/lo39tzWxsbDVLJhN/Xk2t+ev88q8poOyicF1eWOSNV6+7 4DH+t0TAf5JTzvwrFzfg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1SdA-00000003I7r-2UZh; Mon, 29 Apr 2024 15:09:24 +0000 Received: from mail-lj1-x22c.google.com ([2a00:1450:4864:20::22c]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1SaR-00000003GLo-1b2S for linux-riscv@lists.infradead.org; Mon, 29 Apr 2024 15:06:41 +0000 Received: by mail-lj1-x22c.google.com with SMTP id 38308e7fff4ca-2dfe5e0c1a6so3935301fa.1 for ; Mon, 29 Apr 2024 08:06:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1714403193; x=1715007993; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mAWGMqETz0T0fwgkfnv1xM4Kqba1hiikMJXRUjnFrJ8=; b=QelSTvwzqzjGpPsWITqamikdowi1ry1Thg+BDhFahO07XYYdxkzoL8A8mVoRx9ZA+i ncAoIjOiSjkZ0TkupBQtDSf5FuatYqdXpFPmiNrBusqeTZPPNeVADThPad45izcl59lg 7QKB4+goUEpopnW6kpzH+YLLo0+CdQalNRuRi0DvIc2DwmTO4SjQLdk7o5GTML52z53I p8FVCHceH0HkkmMwWNVpgtulZCFLVuYi/Zach2U/cgxlB4hkAh0ZFUeoE5/GbEirJ2Bx KKrKIEU9RxojDQzbqftHYLYnDKAv/HV4KUhiVyFfbWd6RCWx98GxBDsYIHnrlcADGXWw hMLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714403193; x=1715007993; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mAWGMqETz0T0fwgkfnv1xM4Kqba1hiikMJXRUjnFrJ8=; b=VLvOSGTfxgtpOPhg1xV3Bio+9WhQEpgwCeUg0VX5v2f2VsyAyWit2Wgk790cdCX5P/ pXgPkdg/46nDUf8GiKXgBoTNbDQAWh7e+utbG3+bdhQvidge4unIyZFyCkOIeSnINMY3 TYcZMk0reqrjScIZTWKkVC/weXzxK/Qw786nHGp0+eqXdhRlXpAzzAXPjw/hIL87K49s zv2gkLAL9ZbSJw8Mj2mSNhrBTAei+5/XrXE3yxzNB5cvGsryrfOVMbs/N6T7T8HI6Vzs 99v76LlEAAYa9sMFJWQaEXRmvDAAG0aRVzWnkkOjgHq2KuypBIC0vjJW+TQ/7QLXW7L0 jmyg== X-Forwarded-Encrypted: i=1; AJvYcCVm5nAzAjmNPIuSGn0zOcMw59CM4GxV+l5HjqIZBvtxEwcH1sOyjlKz1xFkE8y2em+5ZxyZiykBtTf3ivpTtfce21lPFBOY6jgcl1Vp8ARC X-Gm-Message-State: AOJu0Yz7AkgoT8X9U+mmeAQrVMywVE+oY8UFuHmoR28iPbjc1/Z8uae7 BMCldiP9iwWqxqS6BLRZ2c2/487xJH8cMmbzIBV78Fk5iMYVYDVZe28vy4MNI0M= X-Google-Smtp-Source: AGHT+IFkatZ4wwupzmAn8lx3iUcH4IllYVahxeNpS0mhut67Vq4+WTiNb3F+8vfRLcnn2NPZ8stdHQ== X-Received: by 2002:a2e:9891:0:b0:2df:907e:6da2 with SMTP id b17-20020a2e9891000000b002df907e6da2mr5258082ljj.1.1714403192800; Mon, 29 Apr 2024 08:06:32 -0700 (PDT) Received: from carbon-x1.. ([2a01:e0a:999:a3a0:2fec:d20:2b60:e334]) by smtp.gmail.com with ESMTPSA id l23-20020a05600c1d1700b00418f99170f2sm39646638wms.32.2024.04.29.08.06.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 08:06:31 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Jonathan Corbet , Paul Walmsley , Palmer Dabbelt , Albert Ou , Conor Dooley , Rob Herring , Krzysztof Kozlowski , Anup Patel , Shuah Khan Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Atish Patra , linux-doc@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Subject: [PATCH v4 02/11] riscv: add ISA extensions validation Date: Mon, 29 Apr 2024 17:04:55 +0200 Message-ID: <20240429150553.625165-3-cleger@rivosinc.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240429150553.625165-1-cleger@rivosinc.com> References: <20240429150553.625165-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240429_080635_792503_5E43451B X-CRM114-Status: GOOD ( 27.07 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org U2luY2UgYSBmZXcgZXh0ZW5zaW9ucyAoWmljYm9tL1ppY2JveikgYWxyZWFkeSBuZWVkcyB2YWxp ZGF0aW9uIGFuZApmdXR1cmUgb25lcyB3aWxsIG5lZWQgaXQgYXMgd2VsbCAoWmMqKSBhZGQgYSB2 YWxpZGF0ZSgpIGNhbGxiYWNrIHRvCnN0cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEuIFRoaXMgcmVx dWlyZSB0byByZXdvcmsgdGhlIHdheSBleHRlbnNpb25zIGFyZQpwYXJzZWQgYW5kIHNwbGl0IGl0 IGluIHR3byBwaGFzZXMuIEZpcnN0IHBoYXNlIGlzIGlzYSBzdHJpbmcgb3IgaXNhCmV4dGVuc2lv biBsaXN0IHBhcnNpbmcgYW5kIGNvbnNpc3RzIGluIGVuYWJsaW5nIGFsbCB0aGUgZXh0ZW5zaW9u cyBpbiBhCnRlbXBvcmFyeSBiaXRtYXNrIHdpdGhvdXQgYW55IHZhbGlkYXRpb24uIFRoZSBzZWNv bmQgc3RlcCAicmVzb2x2ZXMiIHRoZQpmaW5hbCBpc2EgYml0bWFwLCBoYW5kbGluZyBwb3RlbnRp YWwgbWlzc2luZyBkZXBlbmRlbmNpZXMuIFRoZSBtZWNoYW5pc20KaXMgcXVpdGUgc2ltcGxlIGFu ZCBzaW1wbHkgdmFsaWRhdGUgZWFjaCBleHRlbnNpb24gZGVzY3JpYmVkIGluIHRoZQp0ZW1wb3Jh cnkgYml0bWFwIGJlZm9yZSBlbmFibGluZyBpdCBpbiB0aGUgZmluYWwgaXNhIGJpdG1hcC4gdmFs aWRhdGUoKQpjYWxsYmFja3MgY2FuIHJldHVybiBlaXRoZXIgMCBmb3Igc3VjY2VzcywgLUVQUk9C RURFRkVSIGlmIGV4dGVuc2lvbgpuZWVkcyB0byBiZSB2YWxpZGF0ZWQgYWdhaW4gYXQgbmV4dCBs b29wLiBBIHByZXZpb3VzIElTQSBiaXRtYXAgaXMga2VwdAp0byBhdm9pZCBsb29waW5nIG11dGxp cGxlIHRpbWVzIGlmIGFuIGV4dGVuc2lvbiBkZXBlbmRlbmNpZXMgYXJlIG5ldmVyCnNhdGlzZmll ZCB1bnRpbCB3ZSByZWFjaCBhIHN0YWJsZSBzdGF0ZS4gSW4gb3JkZXIgdG8gYXZvaWQgYW55IHBv dGVudGlhbAppbmZpbml0ZSBsb29waW5nLCBhbGxvdyBsb29waW5nIGEgbWF4aW11bSBvZiB0aGUg bnVtYmVyIG9mIGV4dGVuc2lvbiB3ZQpoYW5kbGUuIFppY2JveiBhbmQgWmljYm9tIGV4dGVuc2lv bnMgYXJlIG1vZGlmaWVkIHRvIHVzZSB0aGlzIHZhbGlkYXRpb24KbWVjaGFuaXNtLgoKU2lnbmVk LW9mZi1ieTogQ2zDqW1lbnQgTMOpZ2VyIDxjbGVnZXJAcml2b3NpbmMuY29tPgotLS0KIGFyY2gv cmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIHwgICAxICsKIGFyY2gvcmlzY3Yva2VybmVs L2NwdWZlYXR1cmUuYyAgICAgIHwgMjExICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIDIg ZmlsZXMgY2hhbmdlZCwgMTI2IGluc2VydGlvbnMoKyksIDg2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9yaXNjdi9p bmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggMzQ3ODA1NDQ2MTUxLi4wMDA3OTZjMmQwYjEg MTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCisrKyBiL2Fy Y2gvcmlzY3YvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC03MCw2ICs3MCw3IEBAIHN0cnVj dCByaXNjdl9pc2FfZXh0X2RhdGEgewogCWNvbnN0IGNoYXIgKnByb3BlcnR5OwogCWNvbnN0IHVu c2lnbmVkIGludCAqc3Vic2V0X2V4dF9pZHM7CiAJY29uc3QgdW5zaWduZWQgaW50IHN1YnNldF9l eHRfc2l6ZTsKKwlpbnQgKCp2YWxpZGF0ZSkoY29uc3Qgc3RydWN0IHJpc2N2X2lzYV9leHRfZGF0 YSAqZGF0YSwgY29uc3QgdW5zaWduZWQgbG9uZyAqaXNhX2JpdG1hcCk7CiB9OwogCiBleHRlcm4g Y29uc3Qgc3RydWN0IHJpc2N2X2lzYV9leHRfZGF0YSByaXNjdl9pc2FfZXh0W107CmRpZmYgLS1n aXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9j cHVmZWF0dXJlLmMKaW5kZXggMTE1YmEwMDFmMWJjLi5jYjJmZmE2YzhjMzMgMTAwNjQ0Ci0tLSBh L2FyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYworKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9j cHVmZWF0dXJlLmMKQEAgLTcyLDUxICs3Miw1OCBAQCBib29sIF9fcmlzY3ZfaXNhX2V4dGVuc2lv bl9hdmFpbGFibGUoY29uc3QgdW5zaWduZWQgbG9uZyAqaXNhX2JpdG1hcCwgdW5zaWduZWQgaQog fQogRVhQT1JUX1NZTUJPTF9HUEwoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZSk7CiAK LXN0YXRpYyBib29sIHJpc2N2X2lzYV9leHRlbnNpb25fY2hlY2soaW50IGlkKQorc3RhdGljIGJv b2wgcmlzY3ZfaXNhX2V4dGVuc2lvbl92YWxpZChpbnQgaWQpCiB7Ci0Jc3dpdGNoIChpZCkgewot CWNhc2UgUklTQ1ZfSVNBX0VYVF9aSUNCT006Ci0JCWlmICghcmlzY3ZfY2JvbV9ibG9ja19zaXpl KSB7Ci0JCQlwcl9lcnIoIlppY2JvbSBkZXRlY3RlZCBpbiBJU0Egc3RyaW5nLCBkaXNhYmxpbmcg YXMgbm8gY2JvbS1ibG9jay1zaXplIGZvdW5kXG4iKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfSBl bHNlIGlmICghaXNfcG93ZXJfb2ZfMihyaXNjdl9jYm9tX2Jsb2NrX3NpemUpKSB7Ci0JCQlwcl9l cnIoIlppY2JvbSBkaXNhYmxlZCBhcyBjYm9tLWJsb2NrLXNpemUgcHJlc2VudCwgYnV0IGlzIG5v dCBhIHBvd2VyLW9mLTJcbiIpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiB0cnVl OwotCWNhc2UgUklTQ1ZfSVNBX0VYVF9aSUNCT1o6Ci0JCWlmICghcmlzY3ZfY2Jvel9ibG9ja19z aXplKSB7Ci0JCQlwcl9lcnIoIlppY2JveiBkZXRlY3RlZCBpbiBJU0Egc3RyaW5nLCBkaXNhYmxp bmcgYXMgbm8gY2Jvei1ibG9jay1zaXplIGZvdW5kXG4iKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJ fSBlbHNlIGlmICghaXNfcG93ZXJfb2ZfMihyaXNjdl9jYm96X2Jsb2NrX3NpemUpKSB7Ci0JCQlw cl9lcnIoIlppY2JveiBkaXNhYmxlZCBhcyBjYm96LWJsb2NrLXNpemUgcHJlc2VudCwgYnV0IGlz IG5vdCBhIHBvd2VyLW9mLTJcbiIpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiB0 cnVlOwotCWNhc2UgUklTQ1ZfSVNBX0VYVF9JTlZBTElEOgotCQlyZXR1cm4gZmFsc2U7CisJcmV0 dXJuIGlkICE9IFJJU0NWX0lTQV9FWFRfSU5WQUxJRDsKK30KKworc3RhdGljIGludCByaXNjdl9l eHRfemljYm9tX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEgKmRhdGEs CisJCQkJICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppc2FfYml0bWFwKQoreworCWlmICghcmlz Y3ZfY2JvbV9ibG9ja19zaXplKSB7CisJCXByX2VycigiWmljYm9tIGRldGVjdGVkIGluIElTQSBz dHJpbmcsIGRpc2FibGluZyBhcyBubyBjYm9tLWJsb2NrLXNpemUgZm91bmRcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKCFpc19wb3dlcl9vZl8yKHJpc2N2X2Nib21fYmxvY2tf c2l6ZSkpIHsKKwkJcHJfZXJyKCJaaWNib20gZGlzYWJsZWQgYXMgY2JvbS1ibG9jay1zaXplIHBy ZXNlbnQsIGJ1dCBpcyBub3QgYSBwb3dlci1vZi0yXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJ fQorCXJldHVybiAwOworfQogCi0JcmV0dXJuIHRydWU7CitzdGF0aWMgaW50IHJpc2N2X2V4dF96 aWNib3pfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHJpc2N2X2lzYV9leHRfZGF0YSAqZGF0YSwKKwkJ CQkgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmlzYV9iaXRtYXApCit7CisJaWYgKCFyaXNjdl9j Ym96X2Jsb2NrX3NpemUpIHsKKwkJcHJfZXJyKCJaaWNib3ogZGV0ZWN0ZWQgaW4gSVNBIHN0cmlu ZywgZGlzYWJsaW5nIGFzIG5vIGNib3otYmxvY2stc2l6ZSBmb3VuZFxuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0gZWxzZSBpZiAoIWlzX3Bvd2VyX29mXzIocmlzY3ZfY2Jvel9ibG9ja19zaXpl KSkgeworCQlwcl9lcnIoIlppY2JveiBkaXNhYmxlZCBhcyBjYm96LWJsb2NrLXNpemUgcHJlc2Vu dCwgYnV0IGlzIG5vdCBhIHBvd2VyLW9mLTJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJ cmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgX1JJU0NWX0lTQV9FWFRfREFUQShfbmFtZSwgX2lkLCBf c3Vic2V0X2V4dHMsIF9zdWJzZXRfZXh0c19zaXplKSB7CVwKLQkubmFtZSA9ICNfbmFtZSwJCQkJ CQkJCVwKLQkucHJvcGVydHkgPSAjX25hbWUsCQkJCQkJCVwKLQkuaWQgPSBfaWQsCQkJCQkJCQlc Ci0JLnN1YnNldF9leHRfaWRzID0gX3N1YnNldF9leHRzLAkJCQkJCVwKLQkuc3Vic2V0X2V4dF9z aXplID0gX3N1YnNldF9leHRzX3NpemUJCQkJCVwKKyNkZWZpbmUgX1JJU0NWX0lTQV9FWFRfREFU QShfbmFtZSwgX2lkLCBfc3Vic2V0X2V4dHMsIF9zdWJzZXRfZXh0c19zaXplLCBfdmFsaWRhdGUp IHsJXAorCS5uYW1lID0gI19uYW1lLAkJCQkJCQkJCVwKKwkucHJvcGVydHkgPSAjX25hbWUsCQkJ CQkJCQlcCisJLmlkID0gX2lkLAkJCQkJCQkJCVwKKwkuc3Vic2V0X2V4dF9pZHMgPSBfc3Vic2V0 X2V4dHMsCQkJCQkJCVwKKwkuc3Vic2V0X2V4dF9zaXplID0gX3N1YnNldF9leHRzX3NpemUsCQkJ CQkJXAorCS52YWxpZGF0ZSA9IF92YWxpZGF0ZQkJCQkJCQkJXAogfQogCi0jZGVmaW5lIF9fUklT Q1ZfSVNBX0VYVF9EQVRBKF9uYW1lLCBfaWQpIF9SSVNDVl9JU0FfRVhUX0RBVEEoX25hbWUsIF9p ZCwgTlVMTCwgMCkKKyNkZWZpbmUgX19SSVNDVl9JU0FfRVhUX0RBVEEoX25hbWUsIF9pZCkgX1JJ U0NWX0lTQV9FWFRfREFUQShfbmFtZSwgX2lkLCBOVUxMLCAwLCBOVUxMKQogCiAvKiBVc2VkIHRv IGRlY2xhcmUgcHVyZSAibGFzc28iIGV4dGVuc2lvbiAoWmsgZm9yIGluc3RhbmNlKSAqLwogI2Rl ZmluZSBfX1JJU0NWX0lTQV9FWFRfQlVORExFKF9uYW1lLCBfYnVuZGxlZF9leHRzKSBcCi0JX1JJ U0NWX0lTQV9FWFRfREFUQShfbmFtZSwgUklTQ1ZfSVNBX0VYVF9JTlZBTElELCBfYnVuZGxlZF9l eHRzLCBBUlJBWV9TSVpFKF9idW5kbGVkX2V4dHMpKQorCV9SSVNDVl9JU0FfRVhUX0RBVEEoX25h bWUsIFJJU0NWX0lTQV9FWFRfSU5WQUxJRCwgX2J1bmRsZWRfZXh0cywgXAorCQkJICAgIEFSUkFZ X1NJWkUoX2J1bmRsZWRfZXh0cyksIE5VTEwpCiAKIC8qIFVzZWQgdG8gZGVjbGFyZSBleHRlbnNp b25zIHRoYXQgYXJlIGEgc3VwZXJzZXQgb2Ygb3RoZXIgZXh0ZW5zaW9ucyAoWnZiYiBmb3IgaW5z dGFuY2UpICovCiAjZGVmaW5lIF9fUklTQ1ZfSVNBX0VYVF9TVVBFUlNFVChfbmFtZSwgX2lkLCBf c3ViX2V4dHMpIFwKLQlfUklTQ1ZfSVNBX0VYVF9EQVRBKF9uYW1lLCBfaWQsIF9zdWJfZXh0cywg QVJSQVlfU0laRShfc3ViX2V4dHMpKQorCV9SSVNDVl9JU0FfRVhUX0RBVEEoX25hbWUsIF9pZCwg X3N1Yl9leHRzLCBBUlJBWV9TSVpFKF9zdWJfZXh0cyksIE5VTEwpCisjZGVmaW5lIF9fUklTQ1Zf SVNBX0VYVF9TVVBFUlNFVF9WQUxJREFURShfbmFtZSwgX2lkLCBfc3ViX2V4dHMsIF92YWxpZGF0 ZSkgXAorCV9SSVNDVl9JU0FfRVhUX0RBVEEoX25hbWUsIF9pZCwgX3N1Yl9leHRzLCBBUlJBWV9T SVpFKF9zdWJfZXh0cyksIF92YWxpZGF0ZSkKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBy aXNjdl96a19idW5kbGVkX2V4dHNbXSA9IHsKIAlSSVNDVl9JU0FfRVhUX1pCS0IsCkBAIC0yNDcs OCArMjU0LDEwIEBAIGNvbnN0IHN0cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEgcmlzY3ZfaXNhX2V4 dFtdID0gewogCV9fUklTQ1ZfSVNBX0VYVF9EQVRBKGMsIFJJU0NWX0lTQV9FWFRfYyksCiAJX19S SVNDVl9JU0FfRVhUX0RBVEEodiwgUklTQ1ZfSVNBX0VYVF92KSwKIAlfX1JJU0NWX0lTQV9FWFRf REFUQShoLCBSSVNDVl9JU0FfRVhUX2gpLAotCV9fUklTQ1ZfSVNBX0VYVF9TVVBFUlNFVCh6aWNi b20sIFJJU0NWX0lTQV9FWFRfWklDQk9NLCByaXNjdl94bGludXhlbnZjZmdfZXh0cyksCi0JX19S SVNDVl9JU0FfRVhUX1NVUEVSU0VUKHppY2JveiwgUklTQ1ZfSVNBX0VYVF9aSUNCT1osIHJpc2N2 X3hsaW51eGVudmNmZ19leHRzKSwKKwlfX1JJU0NWX0lTQV9FWFRfU1VQRVJTRVRfVkFMSURBVEUo emljYm9tLCBSSVNDVl9JU0FfRVhUX1pJQ0JPTSwgcmlzY3ZfeGxpbnV4ZW52Y2ZnX2V4dHMsCisJ CQkJCSAgcmlzY3ZfZXh0X3ppY2JvbV92YWxpZGF0ZSksCisJX19SSVNDVl9JU0FfRVhUX1NVUEVS U0VUX1ZBTElEQVRFKHppY2JveiwgUklTQ1ZfSVNBX0VYVF9aSUNCT1osIHJpc2N2X3hsaW51eGVu dmNmZ19leHRzLAorCQkJCQkgIHJpc2N2X2V4dF96aWNib3pfdmFsaWRhdGUpLAogCV9fUklTQ1Zf SVNBX0VYVF9EQVRBKHppY250ciwgUklTQ1ZfSVNBX0VYVF9aSUNOVFIpLAogCV9fUklTQ1ZfSVNB X0VYVF9EQVRBKHppY29uZCwgUklTQ1ZfSVNBX0VYVF9aSUNPTkQpLAogCV9fUklTQ1ZfSVNBX0VY VF9EQVRBKHppY3NyLCBSSVNDVl9JU0FfRVhUX1pJQ1NSKSwKQEAgLTMxMCwzMyArMzE5LDgwIEBA IGNvbnN0IHN0cnVjdCByaXNjdl9pc2FfZXh0X2RhdGEgcmlzY3ZfaXNhX2V4dFtdID0gewogCiBj b25zdCBzaXplX3QgcmlzY3ZfaXNhX2V4dF9jb3VudCA9IEFSUkFZX1NJWkUocmlzY3ZfaXNhX2V4 dCk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtYXRjaF9pc2FfZXh0KGNvbnN0IHN0cnVjdCByaXNj dl9pc2FfZXh0X2RhdGEgKmV4dCwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgY29uc3QgY2hhciAq bmFtZV9lbmQsIHN0cnVjdCByaXNjdl9pc2FpbmZvICppc2FpbmZvKQorc3RhdGljIHZvaWQgcmlz Y3ZfaXNhX3NldF9leHQoY29uc3Qgc3RydWN0IHJpc2N2X2lzYV9leHRfZGF0YSAqZXh0LCB1bnNp Z25lZCBsb25nICpiaXRtYXApCiB7Ci0JaWYgKChuYW1lX2VuZCAtIG5hbWUgPT0gc3RybGVuKGV4 dC0+bmFtZSkpICYmCi0JICAgICAhc3RybmNhc2VjbXAobmFtZSwgZXh0LT5uYW1lLCBuYW1lX2Vu ZCAtIG5hbWUpKSB7Ci0JCS8qCi0JCSAqIElmIHRoaXMgaXMgYSBidW5kbGUsIGVuYWJsZSBhbGwg dGhlIElTQSBleHRlbnNpb25zIHRoYXQKLQkJICogY29tcHJpc2UgdGhlIGJ1bmRsZS4KLQkJICov Ci0JCWlmIChleHQtPnN1YnNldF9leHRfc2l6ZSkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBl eHQtPnN1YnNldF9leHRfc2l6ZTsgaSsrKSB7Ci0JCQkJaWYgKHJpc2N2X2lzYV9leHRlbnNpb25f Y2hlY2soZXh0LT5zdWJzZXRfZXh0X2lkc1tpXSkpCi0JCQkJCXNldF9iaXQoZXh0LT5zdWJzZXRf ZXh0X2lkc1tpXSwgaXNhaW5mby0+aXNhKTsKLQkJCX0KKwkvKgorCSAqIFRoaXMgaXMgdmFsaWQg ZXZlbiBmb3IgYnVuZGxlIGV4dGVuc2lvbnMgd2hpY2ggdXNlcyB0aGUgUklTQ1ZfSVNBX0VYVF9J TlZBTElEIGlkCisJICogKHJlamVjdGVkIGJ5IHJpc2N2X2lzYV9leHRlbnNpb25fdmFsaWQoKSku CisJICovCisJaWYgKHJpc2N2X2lzYV9leHRlbnNpb25fdmFsaWQoZXh0LT5pZCkpCisJCXNldF9i aXQoZXh0LT5pZCwgYml0bWFwKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgZXh0LT5zdWJzZXRf ZXh0X3NpemU7IGkrKykgeworCQlpZiAocmlzY3ZfaXNhX2V4dGVuc2lvbl92YWxpZChleHQtPnN1 YnNldF9leHRfaWRzW2ldKSkKKwkJCXNldF9iaXQoZXh0LT5zdWJzZXRfZXh0X2lkc1tpXSwgYml0 bWFwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9yZXNvbHZlX2lzYSh1bnNp Z25lZCBsb25nICppc2FfYml0bWFwLCBzdHJ1Y3QgcmlzY3ZfaXNhaW5mbyAqaXNhaW5mbywKKwkJ CQkgICAgIHVuc2lnbmVkIGxvbmcgKnRoaXNfaHdjYXAsIHVuc2lnbmVkIGxvbmcgKmlzYTJod2Nh cCkKK3sKKwlib29sIGxvb3A7CisJY29uc3Qgc3RydWN0IHJpc2N2X2lzYV9leHRfZGF0YSAqZXh0 OworCURFQ0xBUkVfQklUTUFQKHByZXZfYml0bWFwLCBSSVNDVl9JU0FfRVhUX01BWCk7CisJaW50 IG1heF9sb29wX2NvdW50ID0gcmlzY3ZfaXNhX2V4dF9jb3VudCwgcmV0OworCisJZG8geworCQls b29wID0gZmFsc2U7CisJCWlmIChtYXhfbG9vcF9jb3VudC0tIDwgMCkgeworCQkJcHJfZXJyKCJG YWlsZWQgdG8gcmVhY2ggYSBzdGFibGUgSVNBIHN0YXRlXG4iKTsKKwkJCXJldHVybjsKIAkJfQor CQltZW1jcHkocHJldl9iaXRtYXAsIGlzYWluZm8tPmlzYSwgc2l6ZW9mKHByZXZfYml0bWFwKSk7 CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcmlzY3ZfaXNhX2V4dF9jb3VudDsgaSsrKSB7CisJCQll eHQgPSAmcmlzY3ZfaXNhX2V4dFtpXTsKKworCQkJLyogQnVuZGxlIGV4dGVuc2lvbnMgaWRzIGFy ZSBpbnZhbGlkKi8KKwkJCWlmICghcmlzY3ZfaXNhX2V4dGVuc2lvbl92YWxpZChleHQtPmlkKSkK KwkJCQljb250aW51ZTsKKworCQkJaWYgKCF0ZXN0X2JpdChleHQtPmlkLCBpc2FfYml0bWFwKSB8 fCB0ZXN0X2JpdChleHQtPmlkLCBpc2FpbmZvLT5pc2EpKQorCQkJCWNvbnRpbnVlOworCisJCQlp ZiAoZXh0LT52YWxpZGF0ZSkgeworCQkJCXJldCA9IGV4dC0+dmFsaWRhdGUoZXh0LCBpc2FpbmZv LT5pc2EpOworCQkJCWlmIChyZXQpIHsKKwkJCQkJaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKQor CQkJCQkJbG9vcCA9IHRydWU7CisJCQkJCWVsc2UKKwkJCQkJCWNsZWFyX2JpdChleHQtPmlkLCBp c2FfYml0bWFwKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQogCi0JCS8qCi0JCSAqIFRo aXMgaXMgdmFsaWQgZXZlbiBmb3IgYnVuZGxlIGV4dGVuc2lvbnMgd2hpY2ggdXNlcyB0aGUgUklT Q1ZfSVNBX0VYVF9JTlZBTElEIGlkCi0JCSAqIChyZWplY3RlZCBieSByaXNjdl9pc2FfZXh0ZW5z aW9uX2NoZWNrKCkpLgotCQkgKi8KLQkJaWYgKHJpc2N2X2lzYV9leHRlbnNpb25fY2hlY2soZXh0 LT5pZCkpCiAJCQlzZXRfYml0KGV4dC0+aWQsIGlzYWluZm8tPmlzYSk7CisKKwkJCS8qIE9ubHkg c2luZ2xlIGxldHRlciBleHRlbnNpb25zIGdldCBzZXQgaW4gaHdjYXAgKi8KKwkJCWlmIChleHQt PmlkIDwgUklTQ1ZfSVNBX0VYVF9CQVNFKQorCQkJCSp0aGlzX2h3Y2FwIHw9IGlzYTJod2NhcFtl eHQtPmlkXTsKKwkJfQorCX0gd2hpbGUgKGxvb3AgJiYgbWVtY21wKHByZXZfYml0bWFwLCBpc2Fp bmZvLT5pc2EsIHNpemVvZihwcmV2X2JpdG1hcCkpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0 IG1hdGNoX2lzYV9leHQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbmFtZV9lbmQsIHVu c2lnbmVkIGxvbmcgKmJpdG1hcCkKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8IHJpc2N2X2lzYV9l eHRfY291bnQ7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcmlzY3ZfaXNhX2V4dF9kYXRhICpleHQg PSAmcmlzY3ZfaXNhX2V4dFtpXTsKKworCQlpZiAoKG5hbWVfZW5kIC0gbmFtZSA9PSBzdHJsZW4o ZXh0LT5uYW1lKSkgJiYKKwkJICAgICFzdHJuY2FzZWNtcChuYW1lLCBleHQtPm5hbWUsIG5hbWVf ZW5kIC0gbmFtZSkpIHsKKwkJCXJpc2N2X2lzYV9zZXRfZXh0KGV4dCwgYml0bWFwKTsKKwkJCWJy ZWFrOworCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfcGFyc2VfaXNhX3N0 cmluZyh1bnNpZ25lZCBsb25nICp0aGlzX2h3Y2FwLCBzdHJ1Y3QgcmlzY3ZfaXNhaW5mbyAqaXNh aW5mbywKLQkJCQkJICB1bnNpZ25lZCBsb25nICppc2EyaHdjYXAsIGNvbnN0IGNoYXIgKmlzYSkK K3N0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9yZXNvbHZlX2lzYV9zdHJpbmcoY29uc3QgY2hhciAq aXNhLCB1bnNpZ25lZCBsb25nICpiaXRtYXApCiB7CiAJLyoKIAkgKiBGb3IgYWxsIHBvc3NpYmxl IGNwdXMsIHdlIGhhdmUgYWxyZWFkeSB2YWxpZGF0ZWQgaW4KQEAgLTM0OSw3ICs0MDUsNyBAQCBz dGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfcGFyc2VfaXNhX3N0cmluZyh1bnNpZ25lZCBsb25nICp0 aGlzX2h3Y2FwLCBzdHJ1Y3QgcmlzYwogCXdoaWxlICgqaXNhKSB7CiAJCWNvbnN0IGNoYXIgKmV4 dCA9IGlzYSsrOwogCQljb25zdCBjaGFyICpleHRfZW5kID0gaXNhOwotCQlib29sIGV4dF9sb25n ID0gZmFsc2UsIGV4dF9lcnIgPSBmYWxzZTsKKwkJYm9vbCBleHRfZXJyID0gZmFsc2U7CiAKIAkJ c3dpdGNoICgqZXh0KSB7CiAJCWNhc2UgJ3MnOgpAQCAtMzg5LDcgKzQ0NSw2IEBAIHN0YXRpYyB2 b2lkIF9faW5pdCByaXNjdl9wYXJzZV9pc2Ffc3RyaW5nKHVuc2lnbmVkIGxvbmcgKnRoaXNfaHdj YXAsIHN0cnVjdCByaXNjCiAJCQkgKiBjaGFyYWN0ZXIgaXRzZWxmIHdoaWxlIGVsaW1pbmF0aW5n IHRoZSBleHRlbnNpb25zIHZlcnNpb24gbnVtYmVyLgogCQkJICogQSBzaW1wbGUgcmUtaW5jcmVt ZW50IHNvbHZlcyB0aGlzIHByb2JsZW0uCiAJCQkgKi8KLQkJCWV4dF9sb25nID0gdHJ1ZTsKIAkJ CWZvciAoOyAqaXNhICYmICppc2EgIT0gJ18nOyArK2lzYSkKIAkJCQlpZiAodW5saWtlbHkoIWlz YWxudW0oKmlzYSkpKQogCQkJCQlleHRfZXJyID0gdHJ1ZTsKQEAgLTQ2OSwxNyArNTI0LDggQEAg c3RhdGljIHZvaWQgX19pbml0IHJpc2N2X3BhcnNlX2lzYV9zdHJpbmcodW5zaWduZWQgbG9uZyAq dGhpc19od2NhcCwgc3RydWN0IHJpc2MKIAogCQlpZiAodW5saWtlbHkoZXh0X2VycikpCiAJCQlj b250aW51ZTsKLQkJaWYgKCFleHRfbG9uZykgewotCQkJaW50IG5yID0gdG9sb3dlcigqZXh0KSAt ICdhJzsKIAotCQkJaWYgKHJpc2N2X2lzYV9leHRlbnNpb25fY2hlY2sobnIpKSB7Ci0JCQkJKnRo aXNfaHdjYXAgfD0gaXNhMmh3Y2FwW25yXTsKLQkJCQlzZXRfYml0KG5yLCBpc2FpbmZvLT5pc2Ep OwotCQkJfQotCQl9IGVsc2UgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByaXNjdl9pc2FfZXh0 X2NvdW50OyBpKyspCi0JCQkJbWF0Y2hfaXNhX2V4dCgmcmlzY3ZfaXNhX2V4dFtpXSwgZXh0LCBl eHRfZW5kLCBpc2FpbmZvKTsKLQkJfQorCQltYXRjaF9pc2FfZXh0KGV4dCwgZXh0X2VuZCwgYml0 bWFwKTsKIAl9CiB9CiAKQEAgLTUwMSw2ICs1NDcsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmlz Y3ZfZmlsbF9od2NhcF9mcm9tX2lzYV9zdHJpbmcodW5zaWduZWQgbG9uZyAqaXNhMmh3Y2FwKQog CWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RydWN0IHJpc2N2X2lzYWluZm8gKmlz YWluZm8gPSAmaGFydF9pc2FbY3B1XTsKIAkJdW5zaWduZWQgbG9uZyB0aGlzX2h3Y2FwID0gMDsK KwkJREVDTEFSRV9CSVRNQVAoaXNhX2JpdG1hcCwgUklTQ1ZfSVNBX0VYVF9NQVgpID0geyAwIH07 CiAKIAkJaWYgKGFjcGlfZGlzYWJsZWQpIHsKIAkJCW5vZGUgPSBvZl9jcHVfZGV2aWNlX25vZGVf Z2V0KGNwdSk7CkBAIC01MjMsNyArNTcwLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHJpc2N2X2Zp bGxfaHdjYXBfZnJvbV9pc2Ffc3RyaW5nKHVuc2lnbmVkIGxvbmcgKmlzYTJod2NhcCkKIAkJCX0K IAkJfQogCi0JCXJpc2N2X3BhcnNlX2lzYV9zdHJpbmcoJnRoaXNfaHdjYXAsIGlzYWluZm8sIGlz YTJod2NhcCwgaXNhKTsKKwkJcmlzY3ZfcmVzb2x2ZV9pc2Ffc3RyaW5nKGlzYSwgaXNhX2JpdG1h cCk7CiAKIAkJLyoKIAkJICogVGhlc2Ugb25lcyB3ZXJlIGFzIHRoZXkgd2VyZSBwYXJ0IG9mIHRo ZSBiYXNlIElTQSB3aGVuIHRoZQpAQCAtNTMxLDEwICs1NzgsMTAgQEAgc3RhdGljIHZvaWQgX19p bml0IHJpc2N2X2ZpbGxfaHdjYXBfZnJvbV9pc2Ffc3RyaW5nKHVuc2lnbmVkIGxvbmcgKmlzYTJo d2NhcCkKIAkJICogdW5jb25kaXRpb25hbGx5IHdoZXJlIGBpYCBpcyBpbiByaXNjdixpc2Egb24g RFQgc3lzdGVtcy4KIAkJICovCiAJCWlmIChhY3BpX2Rpc2FibGVkKSB7Ci0JCQlzZXRfYml0KFJJ U0NWX0lTQV9FWFRfWklDU1IsIGlzYWluZm8tPmlzYSk7Ci0JCQlzZXRfYml0KFJJU0NWX0lTQV9F WFRfWklGRU5DRUksIGlzYWluZm8tPmlzYSk7Ci0JCQlzZXRfYml0KFJJU0NWX0lTQV9FWFRfWklD TlRSLCBpc2FpbmZvLT5pc2EpOwotCQkJc2V0X2JpdChSSVNDVl9JU0FfRVhUX1pJSFBNLCBpc2Fp bmZvLT5pc2EpOworCQkJc2V0X2JpdChSSVNDVl9JU0FfRVhUX1pJQ1NSLCBpc2FfYml0bWFwKTsK KwkJCXNldF9iaXQoUklTQ1ZfSVNBX0VYVF9aSUZFTkNFSSwgaXNhX2JpdG1hcCk7CisJCQlzZXRf Yml0KFJJU0NWX0lTQV9FWFRfWklDTlRSLCBpc2FfYml0bWFwKTsKKwkJCXNldF9iaXQoUklTQ1Zf SVNBX0VYVF9aSUhQTSwgaXNhX2JpdG1hcCk7CiAJCX0KIAogCQkvKgpAQCAtNTQ4LDkgKzU5NSwx MSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfZmlsbF9od2NhcF9mcm9tX2lzYV9zdHJpbmco dW5zaWduZWQgbG9uZyAqaXNhMmh3Y2FwKQogCQlpZiAoYWNwaV9kaXNhYmxlZCAmJiByaXNjdl9j YWNoZWRfbXZlbmRvcmlkKGNwdSkgPT0gVEhFQURfVkVORE9SX0lEICYmCiAJCSAgICByaXNjdl9j YWNoZWRfbWFyY2hpZChjcHUpID09IDB4MCkgewogCQkJdGhpc19od2NhcCAmPSB+aXNhMmh3Y2Fw W1JJU0NWX0lTQV9FWFRfdl07Ci0JCQljbGVhcl9iaXQoUklTQ1ZfSVNBX0VYVF92LCBpc2FpbmZv LT5pc2EpOworCQkJY2xlYXJfYml0KFJJU0NWX0lTQV9FWFRfdiwgaXNhX2JpdG1hcCk7CiAJCX0K IAorCQlyaXNjdl9yZXNvbHZlX2lzYShpc2FfYml0bWFwLCBpc2FpbmZvLCAmdGhpc19od2NhcCwg aXNhMmh3Y2FwKTsKKwogCQkvKgogCQkgKiBBbGwgIm9rYXkiIGhhcnQgc2hvdWxkIGhhdmUgc2Ft ZSBpc2EuIFNldCBIV0NBUCBiYXNlZCBvbgogCQkgKiBjb21tb24gY2FwYWJpbGl0aWVzIG9mIGV2 ZXJ5ICJva2F5IiBoYXJ0LCBpbiBjYXNlIHRoZXkgZG9uJ3QKQEAgLTU3OSw2ICs2MjgsNyBAQCBz dGF0aWMgaW50IF9faW5pdCByaXNjdl9maWxsX2h3Y2FwX2Zyb21fZXh0X2xpc3QodW5zaWduZWQg bG9uZyAqaXNhMmh3Y2FwKQogCQl1bnNpZ25lZCBsb25nIHRoaXNfaHdjYXAgPSAwOwogCQlzdHJ1 Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlOwogCQlzdHJ1Y3QgcmlzY3ZfaXNhaW5mbyAqaXNhaW5m byA9ICZoYXJ0X2lzYVtjcHVdOworCQlERUNMQVJFX0JJVE1BUChpc2FfYml0bWFwLCBSSVNDVl9J U0FfRVhUX01BWCkgPSB7IDAgfTsKIAogCQljcHVfbm9kZSA9IG9mX2NwdV9kZXZpY2Vfbm9kZV9n ZXQoY3B1KTsKIAkJaWYgKCFjcHVfbm9kZSkgewpAQCAtNTk4LDIyICs2NDgsMTEgQEAgc3RhdGlj IGludCBfX2luaXQgcmlzY3ZfZmlsbF9od2NhcF9mcm9tX2V4dF9saXN0KHVuc2lnbmVkIGxvbmcg KmlzYTJod2NhcCkKIAkJCQkJCSAgICAgZXh0LT5wcm9wZXJ0eSkgPCAwKQogCQkJCWNvbnRpbnVl OwogCi0JCQlpZiAoZXh0LT5zdWJzZXRfZXh0X3NpemUpIHsKLQkJCQlmb3IgKGludCBqID0gMDsg aiA8IGV4dC0+c3Vic2V0X2V4dF9zaXplOyBqKyspIHsKLQkJCQkJaWYgKHJpc2N2X2lzYV9leHRl bnNpb25fY2hlY2soZXh0LT5zdWJzZXRfZXh0X2lkc1tpXSkpCi0JCQkJCQlzZXRfYml0KGV4dC0+ c3Vic2V0X2V4dF9pZHNbal0sIGlzYWluZm8tPmlzYSk7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAo cmlzY3ZfaXNhX2V4dGVuc2lvbl9jaGVjayhleHQtPmlkKSkgewotCQkJCXNldF9iaXQoZXh0LT5p ZCwgaXNhaW5mby0+aXNhKTsKLQotCQkJCS8qIE9ubHkgc2luZ2xlIGxldHRlciBleHRlbnNpb25z IGdldCBzZXQgaW4gaHdjYXAgKi8KLQkJCQlpZiAoc3RybmxlbihyaXNjdl9pc2FfZXh0W2ldLm5h bWUsIDIpID09IDEpCi0JCQkJCXRoaXNfaHdjYXAgfD0gaXNhMmh3Y2FwW3Jpc2N2X2lzYV9leHRb aV0uaWRdOwotCQkJfQorCQkJcmlzY3ZfaXNhX3NldF9leHQoZXh0LCBpc2FfYml0bWFwKTsKIAkJ fQogCisJCXJpc2N2X3Jlc29sdmVfaXNhKGlzYV9iaXRtYXAsIGlzYWluZm8sICZ0aGlzX2h3Y2Fw LCBpc2EyaHdjYXApOworCiAJCW9mX25vZGVfcHV0KGNwdV9ub2RlKTsKIAogCQkvKgotLSAKMi40 My4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo=