From nobody Sat Sep 26 11:47:53 2026 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D6B531F9AC for ; Wed, 2 Sep 2026 02:53:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788317588; cv=none; b=bJf4ectUbcGAirf89LlMdvlNu20G+rDeYHDAUt2zm8GPJnuyXq8k2fvTMin8i5Q4c72Zn7pPZQUKO/xnTDQxONU2AMlu3F2HcOyP3pGxrjp6jRwlUEeWzxkQ3M9IX151uxqTFy628ecPefa7gd55KCIgxvcM812/Ys4Trhk7o7Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788317588; c=relaxed/simple; bh=dpuCgbdp399BvtRbYBxctf0r6zfxTLSACjrQYL0yWds=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type:Content-Disposition; b=eJqnsSnf9je9NpFmCxSES7UL/ChLCTtsyCd04K0bhLkiNJExVlr0yr72/bCJfSMREZj8AyXsxH2cqQ8+LVR+/Ck174hpH5+8PLV5nfYLIllAqz9Tp7t16KUO21YkNw5YOCmP2bE5qUxE46+x7Ue8ZJq6s9WB0J7C4jDsgpxoM4w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=bkhzQca9; arc=none smtp.client-ip=209.85.216.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bkhzQca9" Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-396affa9420so61884a91.3 for ; Tue, 01 Sep 2026 19:53:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788317584; x=1788922384; darn=vger.kernel.org; h=content-transfer-encoding:content-disposition:content-type :mime-version:references:in-reply-to:message-id:subject:cc:to:from :date:from:to:cc:subject:date:message-id:reply-to:content-type; bh=2GqCSOLlVLGsId6mtHAUwhg+HGCjbvnLLyhmiVIgBUE=; b=bkhzQca9zOWpQuSgtfKx9Hzz25nhwmYY47dYYOxPEIjkulk/OxztlReCSUOw6jEyav HaITBV8kpzPp83xwKvTdfDMwXBz1hF32gIpYE4/fYbksz2aBWqNAiALphKoAltISOauU XNQcdxUFmVehacjyBmUlA8c4lLyHgmFxAPFMVCNKtVPP7IBuRGFpEbbZuxJM7TGL8KTS ZdtI5S3QqgyGZQdUYfQv7lPPqXIcxbzMS9Rb2sZQwY0/4k27BHs4Ezcnch7bRLlK+AGG 1/9PVKxVUMl8mt6X6D9TFx/XHja5uvCgb6yUfsbiYRIQrRcPOqHu5yhPY4ew+nqqcHk4 f2gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788317584; x=1788922384; h=content-transfer-encoding:content-disposition:content-type :mime-version:references:in-reply-to:message-id:subject:cc:to:from :date:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to:content-type; bh=2GqCSOLlVLGsId6mtHAUwhg+HGCjbvnLLyhmiVIgBUE=; b=HAvjzEW2gZAad7pF1kuzfdtiDRgK0YrlpeXLRNOaYgAK57CTMbkM1jwqO8a6A8Faoh XkCnderwi2IsEur3pOMwRhL91Fd8j6CQe/HJFS7dHmnn1z2O+QHMjv90wFSAY5rmWgdT zSLian7KWgIGFh+89jZb8LqolislNFApcimQqrROGyaQWVP2vJDP5zpBNC97/iNH3H3g pm8QHQzihS0PQJfAfCpH7anMz0NUDNnRKj4Pn8fyn4fPBts2i48CB6BAzv5f0uGOnclN b8edHtAsHULzutV1+yMl6M2GY2dBPPURkcSdPnLghw+XCAjiwIPexAnMXHQpKmOHkbwU bCgQ== X-Forwarded-Encrypted: i=1; AKwUvBxQR80VoWi5Rv95kV2SLzwSpnlmZb4Lbh0cfxuRwSKBvqdShe+tmhvvFsOdZL2nbIt9O8B3QouhI6UtCpA=@vger.kernel.org X-Gm-Message-State: AFuF++mn9pP/b7KBBzpY7ExjEQ1HQC6u1jkzt2Ya0PtSTXBosbi1YHTX 5Gs+di/WS58J/w75/6gCw/R94iR4zMRT4TDbnnJG+cJNjjXQIpMuaiVr X-Gm-Gg: AYBFou0WMrsudBBEGDah9F/6OX0NyOTEiQ7Ki7tMdBaX5pTpUNCVAaQDcCgqHUwxY6r mLloMIHHIYfDqjeZeCj5azOP/yxaGJdpEMRp13BpSqev4pjRrm8EmS/K1eyEox7tkIyIzzgvg+l uf/S1kOCtopvg6bO6oKYzu27LnDk55z3cTTtkODGgn6Va/ROyu29r0UvvtmWMfJa5DYEF+lnMIq 98pjlyn+IDvGxk6uThBmvJ2fZGD8Ci50bvOHXmGlOwCllOM4oef8edbf0Z4v6JZ5ealocuk1RGx GooGG1MhWcgp4dISlFu09ju3+nQeJXQBpIfoVaWUC77cHT+H7fFi71WqWegHjTw9kvT+oBJoD7l XUwwZzIUWPKwQeHYL5lwl3qwEZyppBissD+4OcQqORskMscTRdaoTw/F+PhdeJYxU+Ld5ViSqW0 SMtahq/uxrLy+NnbqeMX9sB0IXytWzLigL9smOoglsR/W3jo7KvK42DgR5xPWgzcArMNo9cpSGl zmbnvBE4Ry22cwXxCeq/IYedjLIi5DZljmN X-Received: by 2002:a17:90b:3841:b0:398:bac0:238e with SMTP id 98e67ed59e1d1-39aee24957amr1355015a91.6.1788317583823; Tue, 01 Sep 2026 19:53:03 -0700 (PDT) Received: from sunyiqi-llm-kernel ([189.1.242.96]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3990d7bb7c5sm10243449a91.14.2026.09.01.19.53.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 19:53:03 -0700 (PDT) Date: Wed, 2 Sep 2026 10:52:06 +0800 From: Yiqi Sun To: lucien.xin@gmail.com Cc: davem@davemloft.net, edumazet@google.com, horms@kernel.org, kuba@kernel.org, linux-kernel@vger.kernel.org, linux-sctp@vger.kernel.org, marcelo.leitner@gmail.com, netdev@vger.kernel.org, pabeni@redhat.com, stable@vger.kernel.org, sunyiqixm@gmail.com Subject: [PATCH v2 net] sctp: avoid livelock while updating retransmit path Message-ID: <20260902025206.phbpyxmpf4zrtdpx@sunyiqi-llm-kernel> In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="jv3lfyjkrnvkybth" Content-Disposition: inline Content-Transfer-Encoding: 8bit Content-Transfer-Encoding: quoted-printable --jv3lfyjkrnvkybth Content-Disposition: inline MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gVGh1LCBBdWcgMjcsIDIwMjYgYXQgMzo1MCBBTSwgWGluIExvbmcgd3JvdGU6Cj4gQWZ0ZXIg cmVtb3ZpbmcgdGhlIGNvbnRpbnVlLCBJIHRoaW5rIHlvdSBjYW4ga2VlcCB1c2luZwo+IGlmICh0 cmFucyA9M0Q9M0QgYXNvYy0+cGVlci5yZXRyYW5fcGF0aCkgaGVyZSB3aXRob3V0ICdsYXN0JyBu ZWVkZWQuCgpZZXMuIFRoZSB2MSAnbGFzdCcgdmFyaWFibGUgd2FzIHJlZHVuZGFudCBvbmNlIHRo ZSBTQ1RQX1VOQ09ORklSTUVECnBhdGggbm8gbG9uZ2VyIHVzZXMgY29udGludWUuIERyb3AgaXQg aW4gdGhpcyByZXZpc2lvbiBhbmQgcmV0YWluIHRoZQpvcmlnaW5hbCB3cmFwYXJvdW5kIGNvbXBh cmlzb24gYWZ0ZXIgdGhlIGNhbmRpZGF0ZS1zZWxlY3Rpb24gYmxvY2suCgpUaGUgcmVwcm9kdWNl ciBpcyBhdHRhY2hlZC4KCnNjdHBfYXNzb2NfdXBkYXRlX3JldHJhbl9wYXRoKCkgd2Fsa3MgdGhl IGFzc29jaWF0aW9uIHRyYW5zcG9ydCBsaXN0CmZyb20gdGhlIGN1cnJlbnQgcmV0cmFuc21pdCBw YXRoJ3Mgc3VjY2Vzc29yIGFuZCBzdG9wcyBvbmNlIGl0IHJlYWNoZXMKdGhlIGN1cnJlbnQgcmV0 cmFuc21pdCBwYXRoIGFnYWluLiBIb3dldmVyLCB0aGUgbG9vcCBza2lwcyB0cmFuc3BvcnRzIGlu ClNDVFBfVU5DT05GSVJNRUQgc3RhdGUgYmVmb3JlIGNoZWNraW5nIGZvciB0aGUgd3JhcGFyb3Vu ZCBjb25kaXRpb24uCgpUaGlzIG1ha2VzIHRoZSBsb29wIG5vbi10ZXJtaW5hdGluZyB3aGVuIHRo ZSBhc3NvY2lhdGlvbiBjb250YWlucyBvbmx5ClVOQ09ORklSTUVEIHRyYW5zcG9ydHMgYXQgdGhh dCBwb2ludCBhbmQgYXNvYy0+cGVlci5yZXRyYW5fcGF0aCBpcyBhbHNvClVOQ09ORklSTUVELiBP bmUgd2F5IHRvIHJlYWNoIHRoYXQgc3RhdGUgaXMgdGhyb3VnaCBBU0NPTkYgd2lsZGNhcmQKREVM LUlQIHByb2Nlc3NpbmcgYWZ0ZXIgYW4gdW5jb25maXJtZWQgYWRkcmVzcyBpcyBzZWxlY3RlZCBh cyB0aGUKcHJpbWFyeSB0cmFuc3BvcnQuIHNjdHBfYXNzb2NfZGVsX25vbnByaW1hcnlfcGVlcnMo KSB0aGVuIHJlbW92ZXMgdGhlCm90aGVyIHRyYW5zcG9ydHMgb25lIGJ5IG9uZTsgd2hlbiByZW1v dmluZyB0aGUgY3VycmVudCByZXRyYW5fcGF0aCwKc2N0cF9hc3NvY19ybV9wZWVyKCkgY2FsbHMg c2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGgoKSBiZWZvcmUKdW5saW5raW5nIGl0LiBJZiB0 aGUgcmVtYWluaW5nIGNhbmRpZGF0ZSBhbmQgdGhlIGN1cnJlbnQgcmV0cmFuX3BhdGggYXJlCmJv dGggVU5DT05GSVJNRUQsIHRoZSBsb29wIHJlcGVhdGVkbHkgY29udGludWVzIGJlZm9yZSBpdCBj YW4gb2JzZXJ2ZQp0aGF0IGl0IGhhcyBjb21wbGV0ZWQgYSBmdWxsIHBhc3MuCgpGaXggdGhpcyBi eSBjb25zaWRlcmluZyBhIHRyYW5zcG9ydCBvbmx5IHdoZW4gaXQgaXMgbm90IFVOQ09ORklSTUVE LAp0aGVuIGNoZWNraW5nIHdoZXRoZXIgdGhlIHdhbGsgaGFzIHJldHVybmVkIHRvIHJldHJhbl9w YXRoLiBUaGlzIG1ha2VzCnRoZSBmdWxsLXBhc3MgdGVybWluYXRpb24gaW5kZXBlbmRlbnQgb2Yg dGhlIHRyYW5zcG9ydCBzdGF0ZSB3aGlsZQpwcmVzZXJ2aW5nIHRoZSBleGlzdGluZyBmYWxsYmFj ayBzZWxlY3Rpb24gc2VtYW50aWNzLgoKQWxzbyByZXN0b3JlIHRoZSBOVUxMIGd1YXJkIGFyb3Vu ZCB0aGUgcmV0cmFuX3BhdGggYXNzaWdubWVudC4gSW4gdGhlCmFsbC1VTkNPTkZJUk1FRCBjYXNl IHRoZXJlIGlzIG5vIGVsaWdpYmxlIHJlcGxhY2VtZW50IHRyYW5zcG9ydCwgYW5kCmluc3RhbGxp bmcgTlVMTCB3b3VsZCBsZWF2ZSBsYXRlciByZXRyYW5zbWl0LXBhdGggdXNlcnMgYW5kIHRoZSBk ZWJ1ZwpwcmludCB3aXRoIGEgTlVMTCBwYXRoLgoKRml4ZXM6IDRjNDdhZjRkNWViMiAoIm5ldDog c2N0cDogcmV3b3JrIG11bHRpaG9taW5nIHJldHJhbnNtaXNzaW9uIHBhdGggc2VsPQplY3Rpb24g dG8gcmZjNDk2MCIpClNpZ25lZC1vZmYtYnk6IFlpcWkgU3VuIDxzdW55aXFpeG1AZ21haWwuY29t PgpSZXBvcnRlZC1ieS9DbG9zZXMgdGFnIHBvaW50aW5nIGF0IG9uZSwgc28gYSByZWFkZXIgb2YK LS0tCkNoYW5nZXMgaW4gdjI6Ci0gRHJvcCB0aGUgcmVkdW5kYW50ICdsYXN0JyB2YXJpYWJsZSBh cyBzdWdnZXN0ZWQgYnkgWGluIExvbmcuCi0gTGluayB0byB2MTogaHR0cHM6Ly9sb3JlLmtlcm5l bC5vcmcvci8yMDI2MDgyNzA3NTAwNi4zOTc5NTY2LTEtc3VueWlxaXhtQD0KZ21haWwuY29tLwot LS0KIG5ldC9zY3RwL2Fzc29jaW9sYS5jIHwgMTUgKysrKysrKystLS0tLS0tCiAxIGZpbGUgY2hh bmdlZCwgOCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL25ldC9z Y3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKaW5kZXggYzA1MTJjODI3ZDBm Li40NTIxYmUzYmQ4NWEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2Fzc29jaW9sYS5jCisrKyBiL25l dC9zY3RwL2Fzc29jaW9sYS5jCkBAIC0xMjg5LDE4ICsxMjg5LDE5IEBAIHZvaWQgc2N0cF9hc3Nv Y191cGRhdGVfcmV0cmFuX3BhdGgoc3RydWN0IHNjdHBfYXNzbz0KY2lhdGlvbiAqYXNvYykKIAkJ LyogTWFudWFsbHkgc2tpcCB0aGUgaGVhZCBlbGVtZW50LiAqLwogCQlpZiAoJnRyYW5zLT50cmFu c3BvcnRzID0zRD0zRCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0KQogCQkJY29udGlu dWU7Ci0JCWlmICh0cmFucy0+c3RhdGUgPTNEPTNEIFNDVFBfVU5DT05GSVJNRUQpCi0JCQljb250 aW51ZTsKLQkJdHJhbnNfbmV4dCA9M0Qgc2N0cF90cmFuc19lbGVjdF9iZXN0KHRyYW5zLCB0cmFu c19uZXh0KTsKLQkJLyogQWN0aXZlIGlzIGdvb2QgZW5vdWdoIGZvciBpbW1lZGlhdGUgcmV0dXJu LiAqLwotCQlpZiAodHJhbnNfbmV4dC0+c3RhdGUgPTNEPTNEIFNDVFBfQUNUSVZFKQotCQkJYnJl YWs7CisJCWlmICh0cmFucy0+c3RhdGUgIT0zRCBTQ1RQX1VOQ09ORklSTUVEKSB7CisJCQl0cmFu c19uZXh0ID0zRCBzY3RwX3RyYW5zX2VsZWN0X2Jlc3QodHJhbnMsIHRyYW5zX25leHQpOworCQkJ LyogQWN0aXZlIGlzIGdvb2QgZW5vdWdoIGZvciBpbW1lZGlhdGUgcmV0dXJuLiAqLworCQkJaWYg KHRyYW5zX25leHQtPnN0YXRlID0zRD0zRCBTQ1RQX0FDVElWRSkKKwkJCQlicmVhazsKKwkJfQog CQkvKiBXZSd2ZSByZWFjaGVkIHRoZSBlbmQsIHRpbWUgdG8gdXBkYXRlIHBhdGguICovCiAJCWlm ICh0cmFucyA9M0Q9M0QgYXNvYy0+cGVlci5yZXRyYW5fcGF0aCkKIAkJCWJyZWFrOwogCX0KPTIw Ci0JYXNvYy0+cGVlci5yZXRyYW5fcGF0aCA9M0QgdHJhbnNfbmV4dDsKKwlpZiAodHJhbnNfbmV4 dCkKKwkJYXNvYy0+cGVlci5yZXRyYW5fcGF0aCA9M0QgdHJhbnNfbmV4dDsKPTIwCiAJcHJfZGVi dWcoIiVzOiBhc3NvY2lhdGlvbjolcCB1cGRhdGVkIG5ldyBwYXRoIHRvIGFkZHI6JXBJU3BjXG4i LAogCQkgX19mdW5jX18sIGFzb2MsICZhc29jLT5wZWVyLnJldHJhbl9wYXRoLT5pcGFkZHIuc2Ep OwotLT0yMAoyLjM0LjEK --jv3lfyjkrnvkybth Content-Type: text/x-csrc; charset="utf-8" Content-Disposition: attachment; filename="cve-2026-64564-fix-verifier-sctp-cpu-stall-ai.c" Content-Transfer-Encoding: base64 LyoKICogQ3Jhc2ggUG9DIGZvciBDVkUtMjAyNi02NDU2NCDigJQgU0NUUCBBU0NPTkYgREVMLUlQ IFVzZS1BZnRlci1GcmVlCiAqCiAqIFZ1bG5lcmFiaWxpdHkKICogLS0tLS0tLS0tLS0tLQogKiBz Y3RwX3Byb2Nlc3NfYXNjb25mX3BhcmFtKCkgKG5ldC9zY3RwL3NtX21ha2VfY2h1bmsuYykgY2Fj aGVzIHRoZSB0cmFuc3BvcnQKICogdGhlIEFTQ09ORiBjaHVuayBpcyBwcm9jZXNzZWQgYWdhaW5z dCBpbiBhc2NvbmYtPnRyYW5zcG9ydC4gIFRoaXMgaXMgdGhlCiAqIHBlZXIgdHJhbnNwb3J0IG1h dGNoaW5nIHRoZSBBU0NPTkYncyBsZWFkaW5nIEFkZHJlc3MgUGFyYW1ldGVyIEwsIHNldCBkdXJp bmcKICogcmVjZXB0aW9uIHZpYSBfX3NjdHBfcmN2X2FzY29uZl9sb29rdXAoKSAobmV0L3NjdHAv aW5wdXQuYykuCiAqCiAqIFRoZSBERUwtSVAgY2FzZSByZWplY3RzIGRlbGV0aW5nIHRoZSBwYWNr ZXQgKnNvdXJjZSogYWRkcmVzcyAoQURESVAgRDgsCiAqIFNDVFBfRVJST1JfREVMX1NSQ19JUCkg YnV0LCBvbiB1bnBhdGNoZWQga2VybmVscywgbm90aGluZyBwcm90ZWN0cwogKiBhc2NvbmYtPnRy YW5zcG9ydCBpdHNlbGYuICBBIHNpbmdsZSBBU0NPTkYgY2FuIHRoZXJlZm9yZSBjYXJyeSwgaW4g b3JkZXI6CiAqCiAqICAgICBbQWRkcmVzcyBQYXJhbWV0ZXIgTF0gW0RFTC1JUCBMXSBbREVMLUlQ IDAuMC4wLjBdCiAqCiAqIHdoZXJlIEwgZGlmZmVycyBmcm9tIHRoZSBwYWNrZXQgc291cmNlLiAg VGhlIERFTC1JUCBmb3IgTCBwYXNzZXMgdGhlIEQ4CiAqIGNoZWNrIGFuZCBjYWxscyBzY3RwX2Fz c29jX3JtX3BlZXIoKSBvbiB0aGUgdHJhbnNwb3J0IHRoYXQgYXNjb25mLT50cmFuc3BvcnQKICog c3RpbGwgcG9pbnRzIGF0LCBmcmVlaW5nIGl0IChSQ1UtZGVmZXJyZWQgdmlhIGNhbGxfcmN1KS4g IFRoZSBmb2xsb3dpbmcKICogd2lsZGNhcmQgREVMLUlQIHRoZW4gcmV1c2VzIHRoZSBub3ctZGFu Z2xpbmcgYXNjb25mLT50cmFuc3BvcnQgaW4KICogc2N0cF9hc3NvY19zZXRfcHJpbWFyeSgpIGFu ZCBzY3RwX2Fzc29jX2RlbF9ub25wcmltYXJ5X3BlZXJzKCk6CiAqICAgLSBzZXRfcHJpbWFyeSgp IGRlcmVmZXJlbmNlcyB0aGUgZnJlZWQgdHJhbnNwb3J0ICgtPmlwYWRkciwgLT5zdGF0ZSwgLT5j YWNjKQogKiAgICAgYW5kIHBsYW50cyB0aGUgZGFuZ2xpbmcgcG9pbnRlciBpbnRvIGFzb2MtPnBl ZXIucHJpbWFyeV9wYXRoIC8gYWN0aXZlX3BhdGguCiAqICAgLSBkZWxfbm9ucHJpbWFyeV9wZWVy cygpLCBrZWVwaW5nIG9ubHkgdGhlIHBvaW50ZXIgdGhhdCBpcyBubyBsb25nZXIgb24gdGhlCiAq ICAgICBsaXN0LCByZW1vdmVzIGV2ZXJ5IHJlYWwgdHJhbnNwb3J0LCBsZWF2aW5nIHRyYW5zcG9y dF9jb3VudCA9PSAwIGFuZAogKiAgICAgcHJpbWFyeV9wYXRoL2FjdGl2ZV9wYXRoIHBvaW50aW5n IGF0IGZyZWVkIG1lbW9yeS4KICoKICogVGhlIGZpeCAoc21fbWFrZV9jaHVuay5jKSBhZGRzOgog KiAgICAgaWYgKHBlZXIgPT0gYXNjb25mLT50cmFuc3BvcnQpCiAqICAgICAgICAgcmV0dXJuIFND VFBfRVJST1JfUkVRX1JFRlVTRUQ7CiAqIGJlZm9yZSBzY3RwX2Fzc29jX3JtX3BlZXIoKSwgc28g dGhlIHdpbGRjYXJkIGJyYW5jaCBjYW4gbmV2ZXIgcmV1c2UgYSBmcmVlZAogKiB0cmFuc3BvcnQu CiAqCiAqIFRoaXMgUG9DIHRyaWdnZXJzIHRoZSBVQUYgYW5kIHRoZW4gZGVyZWZlcmVuY2VzIHRo ZSBkYW5nbGluZyBwb2ludGVyIHRvCiAqIGNyYXNoIHRoZSBrZXJuZWwuCiAqCiAqIEJ1aWxkOiAg Z2NjIC1vIHBvYyBwb2MuYyAtc3RhdGljCiAqICAgYWx0OiAgZ2NjIC1vIHBvYyBwb2MuYwogKiBS dW46ICAgIC4vcG9jCiAqCiAqIFJlcXVpcmVzIENPTkZJR19VU0VSX05TPXkgKHVucHJpdmlsZWdl ZCB1c2VyIG5hbWVzcGFjZXMpLgogKiBUYXJnZXQ6IExpbnV4IDYuNiBrZXJuZWwgKGJlZm9yZS9h ZnRlciB0aGUgZml4KS4KICovCgojZGVmaW5lIF9HTlVfU09VUkNFCiNpbmNsdWRlIDxwb2xsLmg+ CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcu aD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgPGZjbnRs Lmg+CiNpbmNsdWRlIDxzY2hlZC5oPgojaW5jbHVkZSA8c2lnbmFsLmg+CiNpbmNsdWRlIDxzdGRp bnQuaD4KI2luY2x1ZGUgPGFycGEvaW5ldC5oPgojaW5jbHVkZSA8c3lzL3NvY2tldC5oPgojaW5j bHVkZSA8c3lzL2lvY3RsLmg+CiNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgojaW5jbHVkZSA8c3lz L2lwYy5oPgojaW5jbHVkZSA8c3lzL21zZy5oPgojaW5jbHVkZSA8bmV0L2lmLmg+CiNpbmNsdWRl IDxuZXRpbmV0L2luLmg+CiNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CiNpbmNsdWRlIDxsaW51eC9p Zl9wYWNrZXQuaD4KI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CgovKiAtLS0tIG5ldHdvcmsg Y29uc3RhbnRzIC0tLS0gKi8KI2RlZmluZSBWUE9SVCAyMDAwMCAgICAgICAgICAgICAgICAgICAg ICAgLyogc2VydmVyICh2aWN0aW0pIFNDVFAgcG9ydCAqLwojZGVmaW5lIEJQT1JUIDIwMDAxICAg ICAgICAgICAgICAgICAgICAgICAvKiBjbGllbnQgKHBlZXIpIFNDVFAgcG9ydCAgICAqLwojZGVm aW5lIExPT1AgIGh0b25sKDB4N2YwMDAwMDEpICAgICAgICAgICAvKiAxMjcuMC4wLjEg4oCUIHNl cnZlciBhZGRyZXNzICovCiNkZWZpbmUgU1JDQiAgaHRvbmwoMHg3ZjAwMDAwOSkgICAgICAgICAg IC8qIDEyNy4wLjAuOSDigJQgc3Bvb2ZlZCBzb3VyY2UgKGJsYWNraG9sZWQpICovCiNkZWZpbmUg TF9JUCAgMHg3ZjAwMDAwMyAgICAgICAgICAgICAgICAgICAvKiAxMjcuMC4wLjMg4oCUIERFTC1J UCB0YXJnZXQgKGEgcGVlciB0cmFuc3BvcnQpICovCgovKiAtLS0tIFNDVFAgVUFQSSBjb25zdGFu dHMgKGF2b2lkIGhlYWRlciBjb25mbGljdHMpIC0tLS0gKi8KI2RlZmluZSBTT0xfU0NUUF8gICAg ICAgIDEzMgojZGVmaW5lIFNDVFBfQklORFhfQUREICAgMTAwCiNkZWZpbmUgU0NUUF9TVEFUVVNf ICAgICAxNAoKLyogQVNDT05GIGNodW5rIHR5cGUgYW5kIHBhcmFtZXRlciB0eXBlcyAobmV0d29y ayBieXRlIG9yZGVyIHZpYSBwMTYvcDMyKSAqLwojZGVmaW5lIENIVU5LX0FTQ09ORiAgICAgMHhD MQojZGVmaW5lIFBBUkFNX0lQVjQgICAgICAgMHgwMDA1CiNkZWZpbmUgUEFSQU1fREVMX0lQICAg ICAweEMwMDIKCi8qIC0tLS0gc21hbGwgaGVscGVycyAtLS0tICovCgpzdGF0aWMgdm9pZCBkaWUo Y29uc3QgY2hhciAqbSkKewoJZnByaW50ZihzdGRlcnIsICJmYXRhbDogJXM6ICVzXG4iLCBtLCBz dHJlcnJvcihlcnJubykpOwoJZXhpdCgxKTsKfQoKLyogV3JpdGUgYSBzdHJpbmcgdG8gYSBzeXNj dGwgZmlsZS4gKi8Kc3RhdGljIHZvaWQgd2YoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAq dmFsKQp7CglpbnQgZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKCWlmIChmZCA8IDApIHJldHVy bjsKCXdyaXRlKGZkLCB2YWwsIHN0cmxlbih2YWwpKTsKCWNsb3NlKGZkKTsKfQoKLyogQ1JDMzJj IChDYXN0YWdub2xpKSDigJQgU0NUUCBjaGVja3N1bS4gKi8Kc3RhdGljIHVpbnQzMl90IGNyYzMy Yyhjb25zdCB1aW50OF90ICpwLCBzaXplX3QgbikKewoJdWludDMyX3QgYyA9IDB4RkZGRkZGRkY7 Cglmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47IGkrKykgewoJCWMgXj0gcFtpXTsKCQlmb3IgKGlu dCBrID0gMDsgayA8IDg7IGsrKykKCQkJYyA9IChjICYgMSkgPyAoYyA+PiAxKSBeIDB4ODJGNjNC NzggOiAoYyA+PiAxKTsKCX0KCXJldHVybiB+YzsKfQoKLyogV3JpdGUgYSAxNi8zMi1iaXQgdmFs dWUgaW4gbmV0d29yayBieXRlIG9yZGVyLCBhZHZhbmNlIHBvaW50ZXIuICovCnN0YXRpYyB1aW50 OF90ICpwMTYodWludDhfdCAqcCwgdWludDE2X3QgdikgeyAqKHVpbnQxNl90ICopcCA9IGh0b25z KHYpOyByZXR1cm4gcCArIDI7IH0Kc3RhdGljIHVpbnQ4X3QgKnAzMih1aW50OF90ICpwLCB1aW50 MzJfdCB2KSB7ICoodWludDMyX3QgKilwID0gdjsgICAgICAgICAgcmV0dXJuIHAgKyA0OyB9Cgov KiBXcmFwIGFuIFNDVFAgcGF5bG9hZCBpbiBhbiBJUHY0IGhlYWRlciAoSVBfSERSSU5DTCBzdHls ZSkuICovCnN0YXRpYyBpbnQgaXBfd3JhcCh1aW50OF90ICpiLCB1aW50MzJfdCBzcmMsIHVpbnQz Ml90IGRzdCwKCQkgICBjb25zdCB1aW50OF90ICp4LCBpbnQgeGwpCnsKCXN0cnVjdCBpcGhkciAq aXAgPSAodm9pZCAqKWI7CgltZW1zZXQoaXAsIDAsIHNpemVvZiAqaXApOwoJaXAtPnZlcnNpb24g PSA0OwoJaXAtPmlobCAgICAgPSA1OwoJaXAtPnRvdF9sZW4gPSBodG9ucyhzaXplb2YgKmlwICsg eGwpOwoJaXAtPnR0bCAgICAgPSA2NDsKCWlwLT5wcm90b2NvbCA9IElQUFJPVE9fU0NUUDsKCWlw LT5zYWRkciAgID0gc3JjOwoJaXAtPmRhZGRyICAgPSBkc3Q7CgltZW1jcHkoYiArIHNpemVvZiAq aXAsIHgsIHhsKTsKCXJldHVybiBzaXplb2YgKmlwICsgeGw7Cn0KCi8qIC0tLS0gbmFtZXNwYWNl IHNldHVwIC0tLS0gKi8KCnN0YXRpYyB2b2lkIG5zKHZvaWQpCnsKCXVpZF90IHUgPSBnZXR1aWQo KTsKCWdpZF90IGcgPSBnZXRnaWQoKTsKCWNoYXIgeFs2NF07CgoJaWYgKHVuc2hhcmUoQ0xPTkVf TkVXVVNFUiB8IENMT05FX05FV05FVCkgPCAwKQoJCWRpZSgidW5zaGFyZSIpOwoKCXdmKCIvcHJv Yy9zZWxmL3NldGdyb3VwcyIsICJkZW55Iik7CglzbnByaW50Zih4LCBzaXplb2YgeCwgIjAgJWQg MSIsIHUpOyAgd2YoIi9wcm9jL3NlbGYvdWlkX21hcCIsIHgpOwoJc25wcmludGYoeCwgc2l6ZW9m IHgsICIwICVkIDEiLCBnKTsgIHdmKCIvcHJvYy9zZWxmL2dpZF9tYXAiLCB4KTsKCgkvKiBFbmFi bGUgQVNDT05GIChBREQtSVApIGV4dGVuc2lvbiB3aXRob3V0IHJlcXVpcmluZyBBVVRILiAqLwoJ d2YoIi9wcm9jL3N5cy9uZXQvc2N0cC9hZGRpcF9lbmFibGUiLCAgICAgICAiMSIpOwoJd2YoIi9w cm9jL3N5cy9uZXQvc2N0cC9hZGRpcF9ub2F1dGhfZW5hYmxlIiwgIjEiKTsKCgkvKiBDb25maWd1 cmUgbG9vcGJhY2sgaW5zaWRlIHRoZSBuZXcgbmV0d29yayBuYW1lc3BhY2UuICovCglpbnQgcyA9 IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKCXN0cnVjdCBpZnJlcSBmOwoJbWVtc2V0 KCZmLCAwLCBzaXplb2YgZik7CglzdHJjcHkoZi5pZnJfbmFtZSwgImxvIik7CglzdHJ1Y3Qgc29j a2FkZHJfaW4gKnNpID0gKHZvaWQgKikmZi5pZnJfYWRkcjsKCXNpLT5zaW5fZmFtaWx5ID0gQUZf SU5FVDsKCXNpLT5zaW5fYWRkci5zX2FkZHIgPSBMT09QOwoJaW9jdGwocywgU0lPQ1NJRkFERFIs ICZmKTsKCXNpLT5zaW5fYWRkci5zX2FkZHIgPSBodG9ubCgweGZmMDAwMDAwKTsKCWlvY3RsKHMs IFNJT0NTSUZORVRNQVNLLCAmZik7CglmLmlmcl9mbGFncyA9IDA7Cglpb2N0bChzLCBTSU9DR0lG RkxBR1MsICZmKTsKCWYuaWZyX2ZsYWdzIHw9IElGRl9VUCB8IElGRl9SVU5OSU5HOwoJaW9jdGwo cywgU0lPQ1NJRkZMQUdTLCAmZik7CgljbG9zZShzKTsKCgkvKiBCbGFja2hvbGUgdGhlIHNwb29m ZWQgc291cmNlIHNvIHRoZSBBU0NPTkYtQUNLIGlzIGRyb3BwZWQKCSAqIGFuZCBjYW5ub3QgdGVh ciBkb3duIHRoZSBhc3NvY2lhdGlvbiBmcm9tIHRoZSByZW1vdGUgc2lkZS4KCSAqLwoJc2V0ZW52 KCJQQVRIIiwgIi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwgMSk7CglpZiAoc3lzdGVt KCJpcCByb3V0ZSBhZGQgYmxhY2tob2xlIDEyNy4wLjAuOS8zMiAyPi9kZXYvbnVsbCIpKSB7fQp9 CgovKiAtLS0tIEFTQ09ORiBjaHVuayBjcmFmdGVyIC0tLS0gKi8KLyoKICogQnVpbGRzIGEgcmF3 IFNDVFAgcGFja2V0IGNvbnRhaW5pbmcgb25lIEFTQ09ORiBjaHVuazoKICoKICogICBbY29tbW9u IGhkcjogc3JjPUJQT1JUIGRzdD1WUE9SVCB2dGFnPXZ0XQogKiAgIFtBU0NPTkYgY2h1bms6IHR5 cGU9MHhDMSBzZXJpYWw9c2VyaWFsXQogKiAgIFtBZGRyZXNzIFBhcmFtOiAxMjcuMC4wLjNdICAg ICAgICAgIOKGkCBzZXRzIGFzY29uZi0+dHJhbnNwb3J0ID0gdHJhbnNwb3J0X0wKICogICBbREVM LUlQIDEyNy4wLjAuMyAgKGNycl9pZD0xKV0gICAgICDihpAgZnJlZXMgYXNjb25mLT50cmFuc3Bv cnQgKHVucGF0Y2hlZCkKICogICBbREVMLUlQIDAuMC4wLjAgICAgKGNycl9pZD0yKV0gICAgICDi hpAgd2lsZGNhcmQ6IGRlcmVmZXJlbmNlcyBmcmVlZCB0cmFuc3BvcnQKICoKICogVGhlIENSQzMy YyBjaGVja3N1bSBpcyBjb21wdXRlZCBhbmQgc3RvcmVkLgogKi8Kc3RhdGljIGludCBidWlsZF9h c2NvbmYodWludDhfdCAqcGssIHVpbnQzMl90IHZ0LCB1aW50MzJfdCBzZXJpYWwpCnsKCXVpbnQ4 X3QgKnAgPSBwazsKCgkvKiBTQ1RQIGNvbW1vbiBoZWFkZXIgKDEyIGJ5dGVzKSAqLwoJcCA9IHAx NihwLCBCUE9SVCk7ICAgICAvKiBzb3VyY2UgcG9ydCAgICAgKi8KCXAgPSBwMTYocCwgVlBPUlQp OyAgICAgLyogZGVzdCBwb3J0ICAgICAgICovCglwID0gcDMyKHAsIHZ0KTsgICAgICAgIC8qIHZl cmlmaWNhdGlvbiB0YWcgKi8KCXAgPSBwMzIocCwgMCk7ICAgICAgICAgLyogY2hlY2tzdW0gKGZp bGxlZCBsYXN0KSAqLwoKCS8qIEFTQ09ORiBjaHVuayBoZWFkZXIgKDQgYnl0ZXMpICsgc2VyaWFs ICg0IGJ5dGVzKSAqLwoJdWludDhfdCAqY2h1bmsgPSBwOwoJKnArKyA9IENIVU5LX0FTQ09ORjsg ICAvKiBjaHVuayB0eXBlICAqLwoJKnArKyA9IDA7ICAgICAgICAgICAgICAgLyogZmxhZ3MgICAg ICAgKi8KCXAgKz0gMjsgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCAoZmlsbGVkIGJlbG93KSAq LwoJcCA9IHAzMihwLCBodG9ubChzZXJpYWwpKTsKCgkvKiBBZGRyZXNzIFBhcmFtZXRlciBUTFYg 4oCUIDEyNy4wLjAuMwoJICogVGhpcyBkZXRlcm1pbmVzIGFzY29uZi0+dHJhbnNwb3J0ICh0aGUg dHJhbnNwb3J0IHRvIGJlIGZyZWVkKS4KCSAqLwoJcCA9IHAxNihwLCBQQVJBTV9JUFY0KTsKCXAg PSBwMTYocCwgOCk7CglwID0gcDMyKHAsIGh0b25sKExfSVApKTsKCgkvKiBERUwtSVAgcGFyYW1l dGVyIDEg4oCUIGRlbGV0ZSAxMjcuMC4wLjMKCSAqIE9uIHVucGF0Y2hlZCBrZXJuZWxzIHRoaXMg ZnJlZXMgYXNjb25mLT50cmFuc3BvcnQgYmVjYXVzZQoJICogcGVlciA9PSBhc2NvbmYtPnRyYW5z cG9ydCBhbmQgdGhlIGd1YXJkIGlzIGFic2VudC4KCSAqLwoJcCA9IHAxNihwLCBQQVJBTV9ERUxf SVApOwoJcCA9IHAxNihwLCAxNik7ICAgICAgICAgIC8qIHBhcmFtIGxlbmd0aDogNCBoZHIgKyA0 IGNycl9pZCArIDggYWRkciAqLwoJcCA9IHAzMihwLCBodG9ubCgxKSk7ICAgIC8qIGNycl9pZCAq LwoJcCA9IHAxNihwLCBQQVJBTV9JUFY0KTsKCXAgPSBwMTYocCwgOCk7CglwID0gcDMyKHAsIGh0 b25sKExfSVApKTsKCgkvKiBERUwtSVAgcGFyYW1ldGVyIDIg4oCUIHdpbGRjYXJkIDAuMC4wLjAK CSAqIEVudGVycyB0aGUgaXNfYW55KCkgYnJhbmNoIHdoaWNoIGNhbGxzOgoJICogICBzY3RwX2Fz c29jX3NldF9wcmltYXJ5KGFzb2MsIGFzY29uZi0+dHJhbnNwb3J0KSAgICAgIOKGkCBVQUYKCSAq ICAgc2N0cF9hc3NvY19kZWxfbm9ucHJpbWFyeV9wZWVycyhhc29jLCBhc2NvbmYtPnRyYW5zcG9y dCkKCSAqIGRlcmVmZXJlbmNpbmcgdGhlIG5vdy1mcmVlZCBhc2NvbmYtPnRyYW5zcG9ydC4KCSAq LwoJcCA9IHAxNihwLCBQQVJBTV9ERUxfSVApOwoJcCA9IHAxNihwLCAxNik7CglwID0gcDMyKHAs IGh0b25sKDIpKTsgICAgLyogY3JyX2lkICovCglwID0gcDE2KHAsIFBBUkFNX0lQVjQpOwoJcCA9 IHAxNihwLCA4KTsKCXAgPSBwMzIocCwgaHRvbmwoMCkpOyAgICAvKiAwLjAuMC4wID0gd2lsZGNh cmQgKi8KCgkvKiBGaWxsIGluIGNodW5rIGxlbmd0aCAqLwoJKih1aW50MTZfdCAqKShjaHVuayAr IDIpID0gaHRvbnMoKHVpbnQxNl90KShwIC0gY2h1bmspKTsKCgkvKiBDb21wdXRlIGFuZCBzdG9y ZSBDUkMzMmMgb3ZlciB0aGUgZW50aXJlIFNDVFAgcGFja2V0ICovCglpbnQgbGVuID0gcCAtIHBr OwoJdWludDMyX3QgY3JjID0gY3JjMzJjKHBrLCBsZW4pOwoJbWVtY3B5KHBrICsgOCwgJmNyYywg NCk7CglyZXR1cm4gbGVuOwp9CgovKiAtLS0tIGhhbmRzaGFrZSBzbmlmZmVyIC0tLS0gKi8KLyoK ICogU25pZmZzIHRoZSA0LXdheSBTQ1RQIGhhbmRzaGFrZSBvbiBsb29wYmFjayB0byBleHRyYWN0 OgogKiAgIC0gdnRhZzogIHRoZSBzZXJ2ZXIncyBpbml0LXRhZyAoZnJvbSBJTklULUFDSyksIG5l ZWRlZCBpbiB0aGUgY29tbW9uIGhlYWRlcgogKiAgIC0gdHNuOiAgIHRoZSBjbGllbnQncyBpbml0 aWFsIFRTTiAoZnJvbSBJTklUKSwgbmVlZGVkIGFzIHRoZSBBU0NPTkYgc2VyaWFsCiAqICAgICAg ICAgICAgKHNlcmlhbCBtdXN0IGVxdWFsIGFzb2MtPnBlZXIuYWRkaXBfc2VyaWFsICsgMSA9PSBp bml0aWFsX3RzbikKICovCnN0YXRpYyB2b2lkIHNuaWZmX2hhbmRzaGFrZShpbnQgd2ZkKQp7Cglp bnQgcHMgPSBzb2NrZXQoQUZfUEFDS0VULCBTT0NLX0RHUkFNLCBodG9ucyhFVEhfUF9JUCkpOwoJ c3RydWN0IHNvY2thZGRyX2xsIGxsID0gewoJCS5zbGxfZmFtaWx5ICAgPSBBRl9QQUNLRVQsCgkJ LnNsbF9wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKSwKCQkuc2xsX2lmaW5kZXggID0gKGludClp Zl9uYW1ldG9pbmRleCgibG8iKSwKCX07CgliaW5kKHBzLCAodm9pZCAqKSZsbCwgc2l6ZW9mIGxs KTsKCgl1aW50MzJfdCB2dGFnID0gMCwgdHNuID0gMDsKCWludCBnb3RfdnRhZyA9IDAsIGdvdF90 c24gPSAwOwoKCWZvciAoaW50IGkgPSAwOyBpIDwgOTAwMCAmJiAhKGdvdF92dGFnICYmIGdvdF90 c24pOyBpKyspIHsKCQl1aW50OF90IHBrWzIwNDhdOwoJCXNzaXplX3QgbiA9IHJlY3YocHMsIHBr LCBzaXplb2YgcGssIDApOwoJCWlmIChuIDwgMjgpIGNvbnRpbnVlOwoJCWludCBpaCA9IChwa1sw XSAmIDB4ZikgKiA0OyAgICAgICAgICAvKiBJUCBoZWFkZXIgbGVuZ3RoICovCgkJaWYgKG4gPCBp aCArIDMyKSBjb250aW51ZTsKCQl1aW50MTZfdCBzcCA9IG50b2hzKCoodWludDE2X3QgKikocGsg KyBpaCkpOyAgICAgICAvKiBTQ1RQIHNyYyBwb3J0ICovCgkJdWludDE2X3QgZHAgPSBudG9ocygq KHVpbnQxNl90ICopKHBrICsgaWggKyAyKSk7ICAgLyogU0NUUCBkc3QgcG9ydCAqLwoJCXVpbnQ4 X3QgIGN0ID0gcGtbaWggKyAxMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2h1bmsg dHlwZSAgICovCgoJCS8qIElOSVQgKHR5cGUgMSkgZnJvbSBjbGllbnQg4oaSIHNlcnZlcjogZXh0 cmFjdCBpbml0aWFsIFRTTgoJCSAqIENodW5rIGJvZHkgc3RhcnRzIGF0IGloKzEyKzQ7IGluaXRp YWxfdHNuIGF0IGJvZHkrMTIgPSBpaCsxMisxNi4KCQkgKi8KCQlpZiAoc3AgPT0gQlBPUlQgJiYg ZHAgPT0gVlBPUlQgJiYgY3QgPT0gMSkgewoJCQl0c24gPSBudG9obCgqKHVpbnQzMl90ICopKHBr ICsgaWggKyAxMiArIDE2KSk7CgkJCWdvdF90c24gPSAxOwoJCX0KCQkvKiBJTklULUFDSyAodHlw ZSAyKSBmcm9tIHNlcnZlciDihpIgY2xpZW50OiBleHRyYWN0IGluaXQgdGFnCgkJICogaW5pdF90 YWcgaXMgdGhlIGZpcnN0IGZpZWxkIG9mIHRoZSBjaHVuayBib2R5ID0gaWgrMTIrNC4KCQkgKi8K CQlpZiAoc3AgPT0gVlBPUlQgJiYgZHAgPT0gQlBPUlQgJiYgY3QgPT0gMikgewoJCQl2dGFnID0g Kih1aW50MzJfdCAqKShwayArIGloICsgMTIgKyA0KTsKCQkJZ290X3Z0YWcgPSAxOwoJCX0KCX0K Cgl1aW50MzJfdCBvdXRbMl0gPSB7IHZ0YWcsIHRzbiB9OwoJd3JpdGUod2ZkLCBvdXQsIHNpemVv ZiBvdXQpOwoJX2V4aXQoMCk7Cn0KCi8qIC0tLS0gY2xpZW50IHBlZXIgLS0tLSAqLwovKgogKiBD cmVhdGVzIHRoZSBtdWx0aWhvbWVkIFNDVFAgYXNzb2NpYXRpb24gZnJvbSB0aGUgY2xpZW50IHNp ZGUuCiAqIEJpbmRzIHRocmVlIGFkZHJlc3NlcyAoMTI3LjAuMC4xLCAxMjcuMC4wLjIsIDEyNy4w LjAuMykgc28gdGhlIHNlcnZlcgogKiBzZWVzIHRocmVlIHBlZXIgdHJhbnNwb3J0cy4gIEFmdGVy IERFTC1JUCAxMjcuMC4wLjMsIHRyYW5zcG9ydF9jb3VudAogKiBkcm9wcyB0byAyLCBhbGxvd2lu ZyB0aGUgd2lsZGNhcmQgREVMLUlQIHRvIHByb2NlZWQgKGl0IHJlcXVpcmVzCiAqIHRyYW5zcG9y dF9jb3VudCA+IDEgdG8gcGFzcyB0aGUgREVMX0xBU1RfSVAgY2hlY2spLgogKi8Kc3RhdGljIHZv aWQgcGVlcl9iKHN0cnVjdCBzb2NrYWRkcl9pbiB2YWRkcikKewoJaW50IG9uZSA9IDE7CglpbnQg YiA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQKTsKCWlmIChiIDwg MCkgZGllKCJwZWVyIHNvY2tldCIpOwoJc2V0c29ja29wdChiLCBTT0xfU09DS0VULCBTT19SRVVT RUFERFIsICZvbmUsIHNpemVvZiBvbmUpOwoKCS8qIFByaW1hcnkgYmluZCB0byAxMjcuMC4wLjEg Ki8KCXN0cnVjdCBzb2NrYWRkcl9pbiBidiA9IHsKCQkuc2luX2ZhbWlseSA9IEFGX0lORVQsCgkJ LnNpbl9wb3J0ICAgPSBodG9ucyhCUE9SVCksCgkJLnNpbl9hZGRyLnNfYWRkciA9IExPT1AsCgl9 OwoJaWYgKGJpbmQoYiwgKHZvaWQgKikmYnYsIHNpemVvZiBidikgPCAwKSBkaWUoInBlZXIgYmlu ZCIpOwoKCS8qIEFkZCAxMjcuMC4wLjIgYW5kIDEyNy4wLjAuMyBhcyBhZGRpdGlvbmFsIGJpbmQg YWRkcmVzc2VzLgoJICogVG9nZXRoZXIgd2l0aCB0aGUgcHJpbWFyeSBiaW5kIHRoaXMgZ2l2ZXMg MyBwZWVyIHRyYW5zcG9ydHMuCgkgKi8KCWZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CgkJ c3RydWN0IHNvY2thZGRyX2luIGFkID0gewoJCQkuc2luX2ZhbWlseSA9IEFGX0lORVQsCgkJCS5z aW5fcG9ydCAgID0gaHRvbnMoQlBPUlQpLAoJCQkuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoMHg3 ZjAwMDAwMiArIGkpLAoJCX07CgkJc2V0c29ja29wdChiLCBTT0xfU0NUUF8sIFNDVFBfQklORFhf QURELCAmYWQsIHNpemVvZiBhZCk7Cgl9CgoJdXNsZWVwKDEyMDAwMCk7CglpZiAoY29ubmVjdChi LCAodm9pZCAqKSZ2YWRkciwgc2l6ZW9mIHZhZGRyKSA8IDApCgkJZGllKCJjb25uZWN0Iik7CgoJ LyogS2VlcCB0aGUgYXNzb2NpYXRpb24gYWxpdmUuICovCglwYXVzZSgpOwp9CgovKiAtLS0tIG1z Z19tc2cgc3ByYXkgKGttYWxsb2MtMTAyNCByZWNsYWltKSAtLS0tICovCi8qCiAqIEFmdGVyIHRo ZSBSQ1UgZ3JhY2UgcGVyaW9kLCB0aGUgZnJlZWQgdHJhbnNwb3J0IG1lbW9yeSBpcyByZXR1cm5l ZCB0byB0aGUKICogc2xhYi4gIFNwcmF5aW5nIGttYWxsb2MtMTAyNCBvYmplY3RzIG92ZXJ3cml0 ZXMgdGhlIGZyZWVkIHNsb3Qgd2l0aAogKiBjb250cm9sbGVkIGRhdGEgc28gdGhhdCBzdWJzZXF1 ZW50IGRlcmVmZXJlbmNlcyBvZiB0aGUgZGFuZ2xpbmcKICogcHJpbWFyeV9wYXRoL2FjdGl2ZV9w YXRoIHBvaW50ZXIgYWNjZXNzIGdhcmJhZ2UgYW5kIGZhdWx0LgogKi8KI2RlZmluZSBNU0dfREFU QSA5NzYgICAvKiA0OC1ieXRlIG1zZ19tc2cgaGVhZGVyICsgOTc2ID0gMTAyNCAoa21hbGxvYy0x MDI0KSAqLwpzdGF0aWMgaW50IGdfbXNxWzY0XTsKc3RhdGljIGludCBnX25tc3EgPSAwOwoKc3Rh dGljIHZvaWQgbXNnX3NwcmF5KHZvaWQpCnsKCXN0cnVjdCB7IGxvbmcgbXR5cGU7IGNoYXIgbXRl eHRbTVNHX0RBVEFdOyB9IG1iOwoJbWIubXR5cGUgPSAxOwoJbWVtc2V0KG1iLm10ZXh0LCAweDQx LCBzaXplb2YgbWIubXRleHQpOwoKCWZvciAoaW50IGkgPSAwOyBpIDwgNjQ7IGkrKykgewoJCWlu dCBxID0gbXNnZ2V0KElQQ19QUklWQVRFLCAwNjQ0IHwgSVBDX0NSRUFUKTsKCQlpZiAocSA8IDAp IGJyZWFrOwoJCWdfbXNxW2dfbm1zcSsrXSA9IHE7CgkJZm9yIChpbnQgayA9IDA7IGsgPCA2NDsg aysrKQoJCQlpZiAobXNnc25kKHEsICZtYiwgc2l6ZW9mIG1iLm10ZXh0LCBJUENfTk9XQUlUKSAh PSAwKQoJCQkJYnJlYWs7Cgl9Cn0KCi8qIC0tLS0gU0NUUCBzdGF0dXMgc3RydWN0IGZvciBnZXRz b2Nrb3B0IHRyaWdnZXIgLS0tLSAqLwpzdHJ1Y3QgcGFkZHJpbmZvIHsKCXVpbnQzMl90IHNwaW5m b19hc3NvY19pZDsKCXVpbnQ4X3QgIHNwaW5mb19hZGRyZXNzWzEyOF07CglpbnQzMl90ICBzcGlu Zm9fc3RhdGU7Cgl1aW50MzJfdCBzcGluZm9fY3duZDsKCXVpbnQzMl90IHNwaW5mb19zcnR0OwoJ dWludDMyX3Qgc3BpbmZvX3J0bzsKCXVpbnQzMl90IHNwaW5mb19tdHU7Cn0gX19hdHRyaWJ1dGVf XygocGFja2VkLCBhbGlnbmVkKDQpKSk7CgpzdHJ1Y3Qgc2N0cF9zdGF0dXNfIHsKCXVpbnQzMl90 IHNzdGF0X2Fzc29jX2lkOwoJaW50MzJfdCAgc3N0YXRfc3RhdGU7Cgl1aW50MzJfdCBzc3RhdF9y d25kOwoJdWludDE2X3Qgc3N0YXRfdW5hY2tkYXRhOwoJdWludDE2X3Qgc3N0YXRfcGVuZGRhdGE7 Cgl1aW50MTZfdCBzc3RhdF9pbnN0cm1zOwoJdWludDE2X3Qgc3N0YXRfb3V0c3RybXM7Cgl1aW50 MzJfdCBzc3RhdF9mcmFnbWVudGF0aW9uX3BvaW50OwoJc3RydWN0IHBhZGRyaW5mbyBzc3RhdF9w cmltYXJ5Owp9OwoKLyogLS0tLSBtYWluIC0tLS0gKi8KaW50IG1haW4odm9pZCkKewoJc2lnbmFs KFNJR1BJUEUsIFNJR19JR04pOwoJc2V0YnVmKHN0ZG91dCwgTlVMTCk7CgoJLyogUGluIHRvIENQ VSAwIHNvIFJDVSBmcmVlcyBsYW5kIG9uIG9uZSBwZXItQ1BVIGZyZWVsaXN0LiAqLwoJY3B1X3Nl dF90IGNzOwoJQ1BVX1pFUk8oJmNzKTsKCUNQVV9TRVQoMCwgJmNzKTsKCXNjaGVkX3NldGFmZmlu aXR5KDAsIHNpemVvZiBjcywgJmNzKTsKCglucygpOwoJcHJpbnRmKCJbKl0gbmFtZXNwYWNlIHJl YWR5XG4iKTsKCgkvKiAtLS0gc2VydmVyICh2aWN0aW0pIHNvY2tldCAtLS0gKi8KCWludCBvbmUg PSAxOwoJaW50IEwgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCk7 CglpZiAoTCA8IDApIGRpZSgic2VydmVyIHNvY2tldCIpOwoJc2V0c29ja29wdChMLCBTT0xfU09D S0VULCBTT19SRVVTRUFERFIsICZvbmUsIHNpemVvZiBvbmUpOwoKCXN0cnVjdCBzb2NrYWRkcl9p biB2YWRkciA9IHsKCQkuc2luX2ZhbWlseSA9IEFGX0lORVQsCgkJLnNpbl9wb3J0ICAgPSBodG9u cyhWUE9SVCksCgkJLnNpbl9hZGRyLnNfYWRkciA9IExPT1AsCgl9OwoJaWYgKGJpbmQoTCwgKHZv aWQgKikmdmFkZHIsIHNpemVvZiB2YWRkcikgPCAwKSBkaWUoInNlcnZlciBiaW5kIik7CglpZiAo bGlzdGVuKEwsIDgpIDwgMCkgZGllKCJsaXN0ZW4iKTsKCgkvKiAtLS0gZm9yayBoYW5kc2hha2Ug c25pZmZlciAtLS0gKi8KCWludCBwZmRbMl07CglwaXBlKHBmZCk7CglpZiAoZm9yaygpID09IDAp IHsgY2xvc2UocGZkWzBdKTsgc25pZmZfaGFuZHNoYWtlKHBmZFsxXSk7IH0KCgkvKiAtLS0gZm9y ayBjbGllbnQgcGVlciAtLS0gKi8KCWlmIChmb3JrKCkgPT0gMCkgeyBjbG9zZShwZmRbMF0pOyBj bG9zZShwZmRbMV0pOyBwZWVyX2IodmFkZHIpOyB9CgljbG9zZShwZmRbMV0pOwoKCS8qIC0tLSBh Y2NlcHQgdGhlIGFzc29jaWF0aW9uIC0tLSAqLwoJc3RydWN0IHBvbGxmZCBwZiA9IHsgLmZkID0g TCwgLmV2ZW50cyA9IFBPTExJTiB9OwoJaWYgKHBvbGwoJnBmLCAxLCA1MDAwKSA8PSAwKSB7IGZw cmludGYoc3RkZXJyLCAiYWNjZXB0IHRpbWVvdXRcbiIpOyByZXR1cm4gMTsgfQoJaW50IEEgPSBh Y2NlcHQoTCwgTlVMTCwgTlVMTCk7CglpZiAoQSA8IDApIGRpZSgiYWNjZXB0Iik7CgoJLyogLS0t IHJlYWQgdnRhZyBhbmQgaW5pdGlhbF90c24gZnJvbSBzbmlmZmVyIC0tLSAqLwoJdWludDMyX3Qg aW5bMl07CglpZiAocmVhZChwZmRbMF0sIGluLCBzaXplb2YgaW4pICE9IHNpemVvZiBpbikgewoJ CWZwcmludGYoc3RkZXJyLCAic25pZmYgZmFpbGVkXG4iKTsKCQlyZXR1cm4gMTsKCX0KCXVpbnQz Ml90IHZ0YWcgPSBpblswXSwgdHNuID0gaW5bMV07CglwcmludGYoIlsqXSB2dGFnPTB4JTA4eCAg aW5pdGlhbF90c249MHglMDh4XG4iLCB2dGFnLCB0c24pOwoKCS8qIExldCB0aGUgYXNzb2NpYXRp b24gc3RhYmlsaXNlICh0cmFuc3BvcnRzIGFyZSBjcmVhdGVkIGR1cmluZwoJICogdGhlIDQtd2F5 IGhhbmRzaGFrZTsgYWNjZXB0KCkgcmV0dXJucyBvbmNlIGl0IGNvbXBsZXRlcykuCgkgKi8KCXVz bGVlcCgyMDAwMDApOwoJcHJpbnRmKCJbKl0gYXNzb2NpYXRpb24gZXN0YWJsaXNoZWQgd2l0aCAz IHBlZXIgdHJhbnNwb3J0c1xuIik7CgoJLyogLS0tIHNlbmQgdGhlIG1hbGljaW91cyBBU0NPTkYg LS0tICovCglwcmludGYoIlsqXSBzZW5kaW5nIEFTQ09ORiBbQWRkciAxMjcuMC4wLjNdW0RFTC1J UCAxMjcuMC4wLjNdW0RFTC1JUCAwLjAuMC4wXS4uLlxuIik7CgoJaW50IHJhdyA9IHNvY2tldChB Rl9JTkVULCBTT0NLX1JBVywgSVBQUk9UT19SQVcpOwoJaWYgKHJhdyA8IDApIGRpZSgicmF3IHNv Y2tldCIpOwoJc2V0c29ja29wdChyYXcsIElQUFJPVE9fSVAsIElQX0hEUklOQ0wsICZvbmUsIHNp emVvZiBvbmUpOwoKCXVpbnQ4X3Qgc2N0cFsyNTZdLCBpcFs0MDBdOwoJaW50IHNsID0gYnVpbGRf YXNjb25mKHNjdHAsIHZ0YWcsIHRzbik7CglpbnQgaWwgPSBpcF93cmFwKGlwLCBTUkNCLCBMT09Q LCBzY3RwLCBzbCk7CgoJc3RydWN0IHNvY2thZGRyX2luIGRzdCA9IHsKCQkuc2luX2ZhbWlseSA9 IEFGX0lORVQsCgkJLnNpbl9hZGRyLnNfYWRkciA9IExPT1AsCgl9OwoJaWYgKHNlbmR0byhyYXcs IGlwLCBpbCwgMCwgKHZvaWQgKikmZHN0LCBzaXplb2YgZHN0KSA8IDApCgkJZGllKCJzZW5kdG8i KTsKCWNsb3NlKHJhdyk7CgoJcHJpbnRmKCJbKl0gQVNDT05GIHNlbnQg4oCUIFVBRiB0cmlnZ2Vy ZWQgb24gdW5wYXRjaGVkIGtlcm5lbFxuIik7CgoJLyogLS0tIHdhaXQgZm9yIHRoZSBSQ1UgZ3Jh Y2UgcGVyaW9kIHNvIHRoZSB0cmFuc3BvcnQgaXMgYWN0dWFsbHkgZnJlZWQgLS0tICovCgkvKiBN RU1CQVJSSUVSX0NNRF9TSEFSRUQgPSAxOyB0aGlzIGJsb2NrcyB1bnRpbCBhbGwgQ1BVcyBoYXZl IHBhc3NlZCBhCgkgKiBncmFjZSBwZXJpb2QsIGd1YXJhbnRlZWluZyB0aGUgY2FsbF9yY3UgY2Fs bGJhY2sgKGtmcmVlKSBoYXMgcnVuLgoJICovCglzeXNjYWxsKFNZU19tZW1iYXJyaWVyLCAxLCAw LCAtMSk7Cgl1c2xlZXAoMTAwMDAwKTsKCgkvKiAtLS0gcmVjbGFpbSB0aGUgZnJlZWQgdHJhbnNw b3J0IG1lbW9yeSB3aXRoIGNvbnRyb2xsZWQgZGF0YSAtLS0gKi8KCXByaW50ZigiWypdIHNwcmF5 aW5nIG1zZ19tc2cgKGttYWxsb2MtMTAyNCkgdG8gcmVjbGFpbSBmcmVlZCB0cmFuc3BvcnQuLi5c biIpOwoJbXNnX3NwcmF5KCk7Cgl1c2xlZXAoNTAwMDApOwoKCS8qIC0tLSB0cmlnZ2VyIGRlcmVm ZXJlbmNlIG9mIHRoZSBkYW5nbGluZyBwcmltYXJ5X3BhdGggLyBhY3RpdmVfcGF0aCAtLS0gKi8K CXByaW50ZigiWypdIGF0dGVtcHRpbmcgdG8gZGVyZWZlcmVuY2UgZGFuZ2xpbmcgcG9pbnRlcnMu Li5cbiIpOwoKCS8qIChhKSBnZXRzb2Nrb3B0IFNDVFBfU1RBVFVTIOKAlCByZWFkcyBwcmltYXJ5 X3BhdGgtPmlwYWRkciwgLT5zdGF0ZSwgZXRjLiAqLwoJc3RydWN0IHNjdHBfc3RhdHVzXyBzdDsK CW1lbXNldCgmc3QsIDAsIHNpemVvZiBzdCk7Cglzb2NrbGVuX3Qgc2xfb3B0ID0gc2l6ZW9mIHN0 OwoJZ2V0c29ja29wdChBLCBTT0xfU0NUUF8sIFNDVFBfU1RBVFVTXywgJnN0LCAmc2xfb3B0KTsK CgkvKiAoYikgc2VuZCDigJQgcm91dGVzIHZpYSBhY3RpdmVfcGF0aCAoZGFuZ2xpbmcpICovCglz ZW5kKEEsICJ4IiwgMSwgTVNHX0RPTlRXQUlUIHwgTVNHX05PU0lHTkFMKTsKCgkvKiAoYykgY2xv c2Ug4oCUIGFzc29jaWF0aW9uIHRlYXJkb3duIGRlcmVmZXJlbmNlcyBwcmltYXJ5X3BhdGggKi8K CWNsb3NlKEEpOwoKCS8qIElmIHdlIHJlYWNoIGhlcmUgdGhlIGRlcmVmZXJlbmNlIGRpZCBub3Qg ZmF1bHQgKGUuZy4gZnJlZWQgbWVtb3J5CgkgKiB3YXMgbm90IHlldCByZWNsYWltZWQsIG9yIEtB U0FOL1NMVUIgZGVidWcgaXMgb2ZmKS4gIFRoZSBVQUYgd2FzCgkgKiBzdGlsbCB0cmlnZ2VyZWQg 4oCUIHRoZSBhc3NvY2lhdGlvbiBpcyBjb3JydXB0ZWQgKHRyYW5zcG9ydF9jb3VudCA9PSAwLAoJ ICogcHJpbWFyeV9wYXRoIGRhbmdsaW5nKS4gIEEgc3Vic2VxdWVudCBvcGVyYXRpb24gb3IgdGlt ZXIgd2lsbCBjcmFzaC4KCSAqLwoJcHJpbnRmKCJbIV0gc3Vydml2ZWQgaW1tZWRpYXRlIGRlcmVm ZXJlbmNlIOKAlCBVQUYgaXMgdHJpZ2dlcmVkIGJ1dFxuIgoJICAgICAgICIgICAgdGhlIGZyZWVk IHNsb3Qgd2FzIG5vdCB5ZXQgcmVjbGFpbWVkIGF0IHRoZSB0aW1lIG9mIGFjY2Vzcy5cbiIKCSAg ICAgICAiICAgIFRoZSBhc3NvY2lhdGlvbiBpcyBjb3JydXB0ZWQ7IGEgY3Jhc2ggaXMgaW1taW5l bnQuXG4iKTsKCXNsZWVwKDMpOwoJcmV0dXJuIDA7Cn0K --jv3lfyjkrnvkybth--