From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTPS id 93B244AB4F
	for <ffmpegdev@gitmailbox.com>; Mon, 24 Mar 2025 22:21:23 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 942F1687B8C;
	Tue, 25 Mar 2025 00:21:19 +0200 (EET)
Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com
 [209.85.214.169])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8DAC96879CB
 for <ffmpeg-devel@ffmpeg.org>; Tue, 25 Mar 2025 00:21:13 +0200 (EET)
Received: by mail-pl1-f169.google.com with SMTP id
 d9443c01a7336-227d6b530d8so22078615ad.3
 for <ffmpeg-devel@ffmpeg.org>; Mon, 24 Mar 2025 15:21:13 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1742854870; x=1743459670; darn=ffmpeg.org;
 h=content-transfer-encoding:mime-version:message-id:date:subject:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=DaapabR34zLu9wV41s+yxW7Zy/blT8vOiPhMugCiYQY=;
 b=E/nBzjOZ6IPHWtrimPNOrR27Yzt5bANSliLFUNUfMYDY9pXvf/arIjraK1suuG7s4n
 VVcOrRogZxFsL/mIL0rS4C9gvPmXqmm3vHQxSp8uAeQz2eDXoUZ+SQ++/YeD/J5PHu3h
 QIF+1TBu1K+wfwfw1ReWYE3mHJwufuPe0DTbnced28Ain6EmI4cbA2zexp0GMXyqqcZ3
 dMtkYz/grVgrbM4sfvsC/xllWb1itVN1mIJJOsW0vFlWXhQoO0w8+QZxM0UsswBdEild
 kFGTqXphsV/+WFw3fYtUJVKY0cOg9/0GsCYqWhD410GwiaFeAbd9x/R1yGK8yusYWBG+
 nVIA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1742854870; x=1743459670;
 h=content-transfer-encoding:mime-version:message-id:date:subject:to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=DaapabR34zLu9wV41s+yxW7Zy/blT8vOiPhMugCiYQY=;
 b=ldO2MnXpRBfgG3TaKIhArRhTAL0RsYeXN0j0JurECBmGm2kqcaCvByZjmVnTBwKUX5
 yUvbPTRcK+X8A3XIPUU4SFpU/lwcpe77UyKrN9Q7aKrmVuCp+zz9WeMMmn7f5E4WwaoK
 fIMaBCFP0/Rm436LiTeX2bC2s2kwM//m4ayTCUHN6C4amXkSJLSXj14LPdV3SJMU6BB5
 OzxL6lpuYBZDP7a7wEypkZHXSERmq+Q94MCdOlPwfTcVz+z8Af7jbuWVEC0eyrFfd1YX
 L/1HhJr8qXqcHfNKZVsieonY8gdG9dmj5p0iLyAn2u5kEYcZgnA6fmgmA9ELin16ZDBu
 ft6Q==
X-Gm-Message-State: AOJu0YyDCGXhmQIhq/RkoN5hb3jAsn9RHxhaqIIGkuxsmHjlJ7odOPCb
 f/vJB1B8SnfMUFJLx9JR1JLP14iDL3OeskIqnvbKsZxYAMRPagGoNTn6Bg==
X-Gm-Gg: ASbGncvfTKXuEXEecPLV6c904FYPexT+uRvY2kQiuoEAjKAcx78dY2NdSwNFEVXmHK/
 8zjusPfq+nx13eBeyCwzY4BOo7ItaK0Lt3yz3YU8nWHp6w40sprivRqrC/Gsp5CRMlyQlIqj/bm
 IRY+NUq7ihDcPux4ou4mNbbyOVk8IOqkPHzY94ULC0+1bAwlTpLAQoQSR+j4GNfXft0VARlek9D
 rt47vTIdSVGx2pL7p03fOuvl/m68M6XSkfUy+kVXm4edWiYjhOQAlNJj3s+l1Cr3wcJEGfbmhlB
 m5aziIgT6UMuud+gnMPxD3r+yq8ZaNx+MHUJe2U7aFB27aKjrmFvEnI/Gy/H36w=
X-Google-Smtp-Source: AGHT+IELtuGo6t+1Zi6+/CJuAUVJp/1qiIqTy9d2YVmxSfXDewq124mGWNmN7z6KCqPuCVTdM7CggA==
X-Received: by 2002:a05:6a00:4648:b0:730:927c:d451 with SMTP id
 d2e1a72fcca58-73905a234f3mr24511678b3a.20.1742854869980; 
 Mon, 24 Mar 2025 15:21:09 -0700 (PDT)
Received: from localhost.localdomain ([2800:2121:b000:82e:e027:7d24:e7ac:9b9b])
 by smtp.gmail.com with ESMTPSA id
 d2e1a72fcca58-73906159dd5sm8792453b3a.135.2025.03.24.15.21.08
 for <ffmpeg-devel@ffmpeg.org>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Mon, 24 Mar 2025 15:21:09 -0700 (PDT)
From: James Almer <jamrial@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Date: Mon, 24 Mar 2025 19:20:50 -0300
Message-ID: <20250324222051.19096-1-jamrial@gmail.com>
X-Mailer: git-send-email 2.48.1
MIME-Version: 1.0
Subject: [FFmpeg-devel] [PATCH] avcodec/ffv1enc: further reduce stack usage
X-BeenThere: ffmpeg-devel@ffmpeg.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250324222051.19096-1-jamrial@gmail.com/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>

Q29udGludWVzIGZyb20gY29tbWl0IDcwMjIzOWJjNTAwYiwgZml4aW5nIEZBVEUgZmFpbHVyZXMg
b24gTWFjT1MuCgpTaWduZWQtb2ZmLWJ5OiBKYW1lcyBBbG1lciA8amFtcmlhbEBnbWFpbC5jb20+
Ci0tLQpDb25maXJtZWQgYnkgTWFydGluIFN0b3JzasO2LiBGbG9hdCBlbmNvZGluZyB1bnRlc3Rl
ZC4KCiBsaWJhdmNvZGVjL2ZmdjEuaCAgICB8ICAxNiArKysrCiBsaWJhdmNvZGVjL2ZmdjFlbmMu
YyB8IDE3NyArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAyIGZp
bGVzIGNoYW5nZWQsIDg0IGluc2VydGlvbnMoKyksIDEwOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9saWJhdmNvZGVjL2ZmdjEuaCBiL2xpYmF2Y29kZWMvZmZ2MS5oCmluZGV4IDA5MTE4ZTBi
N2QuLmQxYzIzOWYxMzggMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvZmZ2MS5oCisrKyBiL2xpYmF2
Y29kZWMvZmZ2MS5oCkBAIC0xMTUsNiArMTE1LDIyIEBAIHR5cGVkZWYgc3RydWN0IEZGVjFTbGlj
ZUNvbnRleHQgewogICAgICAgICB1aW50MzJfdCB2YWw7IC8vdGhpcyBpcyB1bm5lZWRlZCBpZiB5
b3UgYWNjZXB0IGEgZGVyZWZlcmVuY2Ugb24gZWFjaCBhY2Nlc3MKICAgICAgICAgdWludDE2X3Qg
bmR4OwogICAgIH0gdW5pdFs0XVs2NTUzNl07CisgICAgc3RydWN0IFJlbWFwRW5jb2RlclN0YXRl
IHsKKyAgICAgICAgaW50IGRlbHRhX3N0YWNrWzY1NTM2XTsgICAgIC8vV2UgbmVlZCB0byBlbmNv
ZGUgdGhlIHJ1biB2YWx1ZSBiZWZvcmUgdGhlIGFkanVzdG1lbnRzLCB0aGlzIHN0b3JlcyB0aGUg
YWRqdXN0bWVudHMgdW50aWwgd2Uga25vdyB0aGUgbGVuZ3RoIG9mIHRoZSBydW4KKyAgICAgICAg
aW50MTZfdCBpbmRleF9zdGFja1s2NTUzN107IC8vb25seSBuZWVkZWQgd2l0aCBtdWx0aXBsZSBz
ZWdtZW50cworICAgICAgICB1aW50OF90IHN0YXRlWzJdWzNdWzMyXTsKKyAgICAgICAgaW50IG11
bFs0MDk2KzFdOworICAgICAgICBSYW5nZUNvZGVyIHJjOworICAgICAgICBpbnQgbHU7CisgICAg
ICAgIGludCBydW47CisgICAgICAgIGludDY0X3QgbGFzdF92YWw7CisgICAgICAgIGludCBjb21w
YWN0X2luZGV4OworICAgICAgICBpbnQgbXVsX2NvdW50OworICAgICAgICBpbnQgaTsKKyAgICAg
ICAgaW50IHBpeGVsX251bTsKKyAgICAgICAgaW50IHA7CisgICAgICAgIGludCBjdXJyZW50X211
bF9pbmRleDsKKyAgICB9IHJlbWFwX3N0YXRlOwogfSBGRlYxU2xpY2VDb250ZXh0OwogCiB0eXBl
ZGVmIHN0cnVjdCBGRlYxQ29udGV4dCB7CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2ZmdjFlbmMu
YyBiL2xpYmF2Y29kZWMvZmZ2MWVuYy5jCmluZGV4IDQzNDBhMzAxZTEuLjhkY2NhN2UxZDYgMTAw
NjQ0Ci0tLSBhL2xpYmF2Y29kZWMvZmZ2MWVuYy5jCisrKyBiL2xpYmF2Y29kZWMvZmZ2MWVuYy5j
CkBAIC0xMjQ2LDQyICsxMjQ2LDcgQEAgc3RhdGljIHZvaWQgbG9hZF9yZ2JfZmxvYXQzMl9mcmFt
ZShGRlYxQ29udGV4dCAqZiwgRkZWMVNsaWNlQ29udGV4dCAqc2MsCiAgICAgICAgIEFWX1FTT1JU
KHNjLT51bml0WzNdLCBpLCBzdHJ1Y3QgVW5pdCwgQ01QKTsKIH0KIAotdHlwZWRlZiBzdHJ1Y3Qg
UmVtYXBFbmNvZGVyU3RhdGUgewotICAgIGludCBkZWx0YV9zdGFja1s2NTUzNl07ICAgICAvL1dl
IG5lZWQgdG8gZW5jb2RlIHRoZSBydW4gdmFsdWUgYmVmb3JlIHRoZSBhZGp1c3RtZW50cywgdGhp
cyBzdG9yZXMgdGhlIGFkanVzdG1lbnRzIHVudGlsIHdlIGtub3cgdGhlIGxlbmd0aCBvZiB0aGUg
cnVuCi0gICAgaW50MTZfdCBpbmRleF9zdGFja1s2NTUzN107IC8vb25seSBuZWVkZWQgd2l0aCBt
dWx0aXBsZSBzZWdtZW50cwotICAgIHVpbnQ4X3Qgc3RhdGVbMl1bM11bMzJdOwotICAgIGludCBt
dWxbNDA5NisxXTsKLSAgICBSYW5nZUNvZGVyIHJjOwotICAgIGludCBsdTsKLSAgICBpbnQgcnVu
OwotICAgIGludDY0X3QgbGFzdF92YWw7Ci0gICAgaW50IGNvbXBhY3RfaW5kZXg7Ci0gICAgaW50
IG11bF9jb3VudDsKLSAgICBpbnQgaTsKLSAgICBpbnQgcGl4ZWxfbnVtOwotICAgIGludCBwOwot
ICAgIGludCBjdXJyZW50X211bF9pbmRleDsKLX0gUmVtYXBFbmNvZGVyU3RhdGU7Ci0KLXN0YXRp
YyBpbmxpbmUgdm9pZCBjb3B5X3N0YXRlKFJlbWFwRW5jb2RlclN0YXRlICpkc3QsIGNvbnN0IFJl
bWFwRW5jb2RlclN0YXRlICpzcmMpCi17Ci0gICAgZHN0LT5yYyA9IHNyYy0+cmM7Ci0gICAgbWVt
Y3B5KGRzdC0+bXVsLCBzcmMtPm11bCwgKHNyYy0+bXVsX2NvdW50ICsgMSkgKiBzaXplb2Yoc3Jj
LT5tdWxbMF0pKTsKLSAgICBtZW1jcHkoZHN0LT5kZWx0YV9zdGFjaywgc3JjLT5kZWx0YV9zdGFj
aywgc3JjLT5ydW4gKiBzaXplb2Yoc3JjLT5kZWx0YV9zdGFja1swXSkpOwotICAgIG1lbWNweShk
c3QtPmluZGV4X3N0YWNrLCBzcmMtPmluZGV4X3N0YWNrLCAoc3JjLT5ydW4gKyAxKSAqIHNpemVv
ZihzcmMtPmluZGV4X3N0YWNrWzBdKSk7Ci0gICAgbWVtY3B5KGRzdC0+c3RhdGUsIHNyYy0+c3Rh
dGUsIHNpemVvZihkc3QtPnN0YXRlKSk7Ci0gICAgZHN0LT5sdSAgICAgICAgICAgICA9IHNyYy0+
bHU7Ci0gICAgZHN0LT5ydW4gICAgICAgICAgICA9IHNyYy0+cnVuOwotICAgIGRzdC0+bGFzdF92
YWwgICAgICAgPSBzcmMtPmxhc3RfdmFsOwotICAgIGRzdC0+Y29tcGFjdF9pbmRleCAgPSBzcmMt
PmNvbXBhY3RfaW5kZXg7Ci0gICAgZHN0LT5tdWxfY291bnQgICAgICA9IHNyYy0+bXVsX2NvdW50
OwotICAgIGRzdC0+aSAgICAgICAgICAgICAgPSBzcmMtPmk7Ci0gICAgZHN0LT5waXhlbF9udW0g
ICAgICA9IHNyYy0+cGl4ZWxfbnVtOwotICAgIGRzdC0+cCAgICAgICAgICAgICAgPSBzcmMtPnA7
Ci0gICAgZHN0LT5jdXJyZW50X211bF9pbmRleCA9IHNyYy0+Y3VycmVudF9tdWxfaW5kZXg7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVfbXVsKFJlbWFwRW5jb2RlclN0YXRlICpzLCBp
bnQgbXVsX2luZGV4KQorc3RhdGljIGlubGluZSB2b2lkIGVuY29kZV9tdWwoc3RydWN0IFJlbWFw
RW5jb2RlclN0YXRlICpzLCBpbnQgbXVsX2luZGV4KQogewogICAgIGF2X2Fzc2VydDIocy0+bXVs
WyBtdWxfaW5kZXggXSk7CiAgICAgaWYgKHMtPm11bFsgbXVsX2luZGV4IF0gPCAwKSB7CkBAIC0x
MjkwLDEyMiArMTI1NSwxMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIGVuY29kZV9tdWwoUmVtYXBF
bmNvZGVyU3RhdGUgKnMsIGludCBtdWxfaW5kZXgpCiAgICAgfQogfQogCi1zdGF0aWMgaW50IGVu
Y29kZV9mbG9hdDMyX3JlbWFwX3NlZ21lbnQoRkZWMVNsaWNlQ29udGV4dCAqc2MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtYXBFbmNvZGVyU3RhdGUgKnN0YXRl
X2FyZywgaW50IHVwZGF0ZSwgaW50IGZpbmFsKQorc3RhdGljIGludCBlbmNvZGVfZmxvYXQzMl9y
ZW1hcF9zZWdtZW50KEZGVjFTbGljZUNvbnRleHQgKnNjLCBpbnQgZmluYWwpCiB7Ci0gICAgUmVt
YXBFbmNvZGVyU3RhdGUgczsKLQotICAgIGNvcHlfc3RhdGUoJnMsIHN0YXRlX2FyZyk7Ci0KLSAg
ICBpZiAocy5pID09IDApIHsKLSAgICAgICAgbWVtc2V0KHMuc3RhdGUsIDEyOCwgc2l6ZW9mKHMu
c3RhdGUpKTsKLSAgICAgICAgcHV0X3N5bWJvbCgmcy5yYywgcy5zdGF0ZVswXVswXSwgcy5tdWxf
Y291bnQsIDApOwotICAgICAgICBtZW1zZXQocy5zdGF0ZSwgMTI4LCBzaXplb2Yocy5zdGF0ZSkp
OwotICAgICAgICBzLmxhc3RfdmFsID0gLTE7Ci0gICAgICAgIHMuY29tcGFjdF9pbmRleCA9IC0x
OwotICAgICAgICBzLmx1ID0gMDsKLSAgICAgICAgcy5ydW4gPSAwOwotICAgICAgICBzLmN1cnJl
bnRfbXVsX2luZGV4ID0gLTE7CisgICAgc3RydWN0IFJlbWFwRW5jb2RlclN0YXRlICpzID0gJnNj
LT5yZW1hcF9zdGF0ZTsKKworICAgIGlmIChzLT5pID09IDApIHsKKyAgICAgICAgbWVtc2V0KHMt
PnN0YXRlLCAxMjgsIHNpemVvZihzLT5zdGF0ZSkpOworICAgICAgICBwdXRfc3ltYm9sKCZzLT5y
Yywgcy0+c3RhdGVbMF1bMF0sIHMtPm11bF9jb3VudCwgMCk7CisgICAgICAgIG1lbXNldChzLT5z
dGF0ZSwgMTI4LCBzaXplb2Yocy0+c3RhdGUpKTsKKyAgICAgICAgcy0+bGFzdF92YWwgPSAtMTsK
KyAgICAgICAgcy0+Y29tcGFjdF9pbmRleCA9IC0xOworICAgICAgICBzLT5sdSA9IDA7CisgICAg
ICAgIHMtPnJ1biA9IDA7CisgICAgICAgIHMtPmN1cnJlbnRfbXVsX2luZGV4ID0gLTE7CiAgICAg
fQogCi0gICAgZm9yICg7IHMuaSA8IHMucGl4ZWxfbnVtKzE7IHMuaSsrKSB7Ci0gICAgICAgIGlu
dCBjdXJyZW50X211bCA9IHMuY3VycmVudF9tdWxfaW5kZXggPCAwID8gMSA6IEZGQUJTKHMubXVs
W3MuY3VycmVudF9tdWxfaW5kZXhdKTsKKyAgICBmb3IgKDsgcy0+aSA8IHMtPnBpeGVsX251bSsx
OyBzLT5pKyspIHsKKyAgICAgICAgaW50IGN1cnJlbnRfbXVsID0gcy0+Y3VycmVudF9tdWxfaW5k
ZXggPCAwID8gMSA6IEZGQUJTKHMtPm11bFtzLT5jdXJyZW50X211bF9pbmRleF0pOwogICAgICAg
ICBpbnQ2NF90IHZhbDsKLSAgICAgICAgaWYgKHMuaSA9PSBzLnBpeGVsX251bSkgewotICAgICAg
ICAgICAgaWYgKHMubGFzdF92YWwgPT0gMHhGRkZGRkZGRikgeworICAgICAgICBpZiAocy0+aSA9
PSBzLT5waXhlbF9udW0pIHsKKyAgICAgICAgICAgIGlmIChzLT5sYXN0X3ZhbCA9PSAweEZGRkZG
RkZGKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIHZhbCA9IDFMTDw8MzI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgdmFsID0gc2MtPnVuaXRbcy5wXVtzLmldLnZhbDsKKyAgICAgICAgICAg
IHZhbCA9IHNjLT51bml0W3MtPnBdW3MtPmldLnZhbDsKIAotICAgICAgICBpZiAocy5sYXN0X3Zh
bCAhPSB2YWwpIHsKKyAgICAgICAgaWYgKHMtPmxhc3RfdmFsICE9IHZhbCkgewogICAgICAgICAg
ICAgaW50NjRfdCBkZWx0YSA9IDA7Ci0gICAgICAgICAgICBhdl9hc3NlcnQyKHMubGFzdF92YWwg
PCB2YWwpOworICAgICAgICAgICAgYXZfYXNzZXJ0MihzLT5sYXN0X3ZhbCA8IHZhbCk7CiAgICAg
ICAgICAgICBhdl9hc3NlcnQyKGN1cnJlbnRfbXVsID4gMCk7CiAKICAgICAgICAgICAgIGlmIChj
dXJyZW50X211bCA+IDEpIHsKLSAgICAgICAgICAgICAgICBkZWx0YSA9IHZhbCAtIHMubGFzdF92
YWw7CisgICAgICAgICAgICAgICAgZGVsdGEgPSB2YWwgLSBzLT5sYXN0X3ZhbDsKICAgICAgICAg
ICAgICAgICB2YWwgPSBGRk1BWCgxLCAoZGVsdGEgKyBjdXJyZW50X211bC8yKSAvIGN1cnJlbnRf
bXVsKTsKIAogICAgICAgICAgICAgICAgIGRlbHRhIC09IHZhbCpjdXJyZW50X211bDsKICAgICAg
ICAgICAgICAgICBhdl9hc3NlcnQyKGRlbHRhIDw9IGN1cnJlbnRfbXVsLzIpOwogICAgICAgICAg
ICAgICAgIGF2X2Fzc2VydDIoZGVsdGEgPiAtY3VycmVudF9tdWwpOwotICAgICAgICAgICAgICAg
IHZhbCArPSBzLmxhc3RfdmFsOworICAgICAgICAgICAgICAgIHZhbCArPSBzLT5sYXN0X3ZhbDsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF2X2Fzc2VydDIocy5sYXN0X3ZhbCA8IHZhbCk7
Ci0gICAgICAgICAgICBpZiAocy5sdSkgewotICAgICAgICAgICAgICAgIHMuaW5kZXhfc3RhY2tb
cy5ydW5dID0gcy5jdXJyZW50X211bF9pbmRleDsKLSAgICAgICAgICAgICAgICBhdl9hc3NlcnQy
KHMucnVuIDwgRkZfQVJSQVlfRUxFTVMocy5kZWx0YV9zdGFjaykpOwotICAgICAgICAgICAgICAg
IGlmICh2YWwgLSBzLmxhc3RfdmFsID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcy5kZWx0
YV9zdGFja1tzLnJ1bl0gPSBkZWx0YTsKLSAgICAgICAgICAgICAgICAgICAgcy5ydW4gKys7Ci0g
ICAgICAgICAgICAgICAgICAgIGF2X2Fzc2VydDIocy5pID09IHMucGl4ZWxfbnVtIHx8IHMubGFz
dF92YWwgKyBjdXJyZW50X211bCArIGRlbHRhID09IHNjLT51bml0W3MucF1bcy5pXS52YWwpOwot
ICAgICAgICAgICAgICAgICAgICBzLmxhc3RfdmFsICs9IGN1cnJlbnRfbXVsICsgZGVsdGE7Cisg
ICAgICAgICAgICBhdl9hc3NlcnQyKHMtPmxhc3RfdmFsIDwgdmFsKTsKKyAgICAgICAgICAgIGlm
IChzLT5sdSkgeworICAgICAgICAgICAgICAgIHMtPmluZGV4X3N0YWNrW3MtPnJ1bl0gPSBzLT5j
dXJyZW50X211bF9pbmRleDsKKyAgICAgICAgICAgICAgICBhdl9hc3NlcnQyKHMtPnJ1biA8IEZG
X0FSUkFZX0VMRU1TKHMtPmRlbHRhX3N0YWNrKSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbCAt
IHMtPmxhc3RfdmFsID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcy0+ZGVsdGFfc3RhY2tb
cy0+cnVuXSA9IGRlbHRhOworICAgICAgICAgICAgICAgICAgICBzLT5ydW4gKys7CisgICAgICAg
ICAgICAgICAgICAgIGF2X2Fzc2VydDIocy0+aSA9PSBzLT5waXhlbF9udW0gfHwgcy0+bGFzdF92
YWwgKyBjdXJyZW50X211bCArIGRlbHRhID09IHNjLT51bml0W3MtPnBdW3MtPmldLnZhbCk7Cisg
ICAgICAgICAgICAgICAgICAgIHMtPmxhc3RfdmFsICs9IGN1cnJlbnRfbXVsICsgZGVsdGE7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHV0X3N5bWJvbF9p
bmxpbmUoJnMucmMsIHMuc3RhdGVbcy5sdV1bMF0sIHMucnVuLCAwLCBOVUxMLCBOVUxMKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHV0X3N5bWJvbF9pbmxpbmUoJnMtPnJjLCBzLT5zdGF0ZVtzLT5s
dV1bMF0sIHMtPnJ1biwgMCwgTlVMTCwgTlVMTCk7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9y
KGludCBrPTA7IGs8cy5ydW47IGsrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0
YWNrX211bCA9IHMubXVsWyBzLmluZGV4X3N0YWNrW2tdIF07CisgICAgICAgICAgICAgICAgICAg
IGZvcihpbnQgaz0wOyBrPHMtPnJ1bjsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgc3RhY2tfbXVsID0gcy0+bXVsWyBzLT5pbmRleF9zdGFja1trXSBdOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrX211bD4xKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1dF9zeW1ib2xfaW5saW5lKCZzLnJjLCBzLnN0YXRlW3MubHVdWzFdLCBzLmRlbHRhX3N0YWNr
W2tdLCAxLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZV9tdWwo
JnMsIHMuaW5kZXhfc3RhY2tbaysxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0
X3N5bWJvbF9pbmxpbmUoJnMtPnJjLCBzLT5zdGF0ZVtzLT5sdV1bMV0sIHMtPmRlbHRhX3N0YWNr
W2tdLCAxLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZV9tdWwo
cywgcy0+aW5kZXhfc3RhY2tbaysxXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHMucnVuID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBzLmx1
IF49IDE7Ci0gICAgICAgICAgICAgICAgICAgIHMucnVuID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgcy5pLS07IC8vIHdlIGRpZCBub3QgZW5jb2RlIHZhbCBzbyB3ZSBuZWVkIHRvIGJhY2tzdGVw
Ci0gICAgICAgICAgICAgICAgICAgIHMubGFzdF92YWwgKz0gY3VycmVudF9tdWw7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzLT5ydW4gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHMt
Pmx1IF49IDE7CisgICAgICAgICAgICAgICAgICAgIHMtPnJ1biA9IDA7CisgICAgICAgICAgICAg
ICAgICAgIHMtPmktLTsgLy8gd2UgZGlkIG5vdCBlbmNvZGUgdmFsIHNvIHdlIG5lZWQgdG8gYmFj
a3N0ZXAKKyAgICAgICAgICAgICAgICAgICAgcy0+bGFzdF92YWwgKz0gY3VycmVudF9tdWw7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXZfYXNzZXJ0MihzLnJ1biA9PSAwKTsKLSAg
ICAgICAgICAgICAgICBwdXRfc3ltYm9sX2lubGluZSgmcy5yYywgcy5zdGF0ZVtzLmx1XVswXSwg
dmFsIC0gcy5sYXN0X3ZhbCAtIDEsIDAsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgICAgIGF2
X2Fzc2VydDIocy0+cnVuID09IDApOworICAgICAgICAgICAgICAgIHB1dF9zeW1ib2xfaW5saW5l
KCZzLT5yYywgcy0+c3RhdGVbcy0+bHVdWzBdLCB2YWwgLSBzLT5sYXN0X3ZhbCAtIDEsIDAsIE5V
TEwsIE5VTEwpOwogCiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfbXVsID4gMSkKLSAgICAg
ICAgICAgICAgICAgICAgcHV0X3N5bWJvbF9pbmxpbmUoJnMucmMsIHMuc3RhdGVbcy5sdV1bMV0s
IGRlbHRhLCAxLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsIC0gcy5sYXN0
X3ZhbCA9PSAxKQotICAgICAgICAgICAgICAgICAgICBzLmx1IF49IDE7CisgICAgICAgICAgICAg
ICAgICAgIHB1dF9zeW1ib2xfaW5saW5lKCZzLT5yYywgcy0+c3RhdGVbcy0+bHVdWzFdLCBkZWx0
YSwgMSwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbCAtIHMtPmxhc3RfdmFs
ID09IDEpCisgICAgICAgICAgICAgICAgICAgIHMtPmx1IF49IDE7CiAKLSAgICAgICAgICAgICAg
ICBhdl9hc3NlcnQyKHMuaSA9PSBzLnBpeGVsX251bSB8fCBzLmxhc3RfdmFsICsgKHZhbCAtIHMu
bGFzdF92YWwpICogY3VycmVudF9tdWwgKyBkZWx0YSA9PSBzYy0+dW5pdFtzLnBdW3MuaV0udmFs
KTsKLSAgICAgICAgICAgICAgICBpZiAocy5pIDwgcy5waXhlbF9udW0pCi0gICAgICAgICAgICAg
ICAgICAgIHMubGFzdF92YWwgPSBzYy0+dW5pdFtzLnBdW3MuaV0udmFsOworICAgICAgICAgICAg
ICAgIGF2X2Fzc2VydDIocy0+aSA9PSBzLT5waXhlbF9udW0gfHwgcy0+bGFzdF92YWwgKyAodmFs
IC0gcy0+bGFzdF92YWwpICogY3VycmVudF9tdWwgKyBkZWx0YSA9PSBzYy0+dW5pdFtzLT5wXVtz
LT5pXS52YWwpOworICAgICAgICAgICAgICAgIGlmIChzLT5pIDwgcy0+cGl4ZWxfbnVtKQorICAg
ICAgICAgICAgICAgICAgICBzLT5sYXN0X3ZhbCA9IHNjLT51bml0W3MtPnBdW3MtPmldLnZhbDsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMuY3VycmVudF9tdWxfaW5kZXggPSAoKHMubGFz
dF92YWwgKyAxKSAqIHMubXVsX2NvdW50KSA+PiAzMjsKLSAgICAgICAgICAgIGlmICghcy5ydW4p
Ci0gICAgICAgICAgICAgICAgZW5jb2RlX211bCgmcywgcy5jdXJyZW50X211bF9pbmRleCk7Ci0g
ICAgICAgICAgICBzLmNvbXBhY3RfaW5kZXggKys7CisgICAgICAgICAgICBzLT5jdXJyZW50X211
bF9pbmRleCA9ICgocy0+bGFzdF92YWwgKyAxKSAqIHMtPm11bF9jb3VudCkgPj4gMzI7CisgICAg
ICAgICAgICBpZiAoIXMtPnJ1bikKKyAgICAgICAgICAgICAgICBlbmNvZGVfbXVsKHMsIHMtPmN1
cnJlbnRfbXVsX2luZGV4KTsKKyAgICAgICAgICAgIHMtPmNvbXBhY3RfaW5kZXggKys7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKGZpbmFsICYmIHMuaSA8IHMucGl4ZWxfbnVtKQotICAgICAgICAg
ICAgc2MtPmJpdG1hcFtzLnBdW3NjLT51bml0W3MucF1bcy5pXS5uZHhdID0gcy5jb21wYWN0X2lu
ZGV4OworICAgICAgICBpZiAoZmluYWwgJiYgcy0+aSA8IHMtPnBpeGVsX251bSkKKyAgICAgICAg
ICAgIHNjLT5iaXRtYXBbcy0+cF1bc2MtPnVuaXRbcy0+cF1bcy0+aV0ubmR4XSA9IHMtPmNvbXBh
Y3RfaW5kZXg7CiAgICAgfQogCi0gICAgaWYgKHVwZGF0ZSkgewotICAgICAgICBjb3B5X3N0YXRl
KHN0YXRlX2FyZywgJnMpOwotICAgIH0KLSAgICByZXR1cm4gZ2V0X3JhY19jb3VudCgmcy5yYyk7
CisgICAgcmV0dXJuIGdldF9yYWNfY291bnQoJnMtPnJjKTsKIH0KIAogc3RhdGljIHZvaWQgZW5j
b2RlX2Zsb2F0MzJfcmVtYXAoRkZWMUNvbnRleHQgKmYsIEZGVjFTbGljZUNvbnRleHQgKnNjLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjWzRdKQog
ewotICAgIFJlbWFwRW5jb2RlclN0YXRlIHM7Ci0gICAgcy5waXhlbF9udW0gPSBzYy0+c2xpY2Vf
d2lkdGggKiBzYy0+c2xpY2VfaGVpZ2h0OworICAgIHN0cnVjdCBSZW1hcEVuY29kZXJTdGF0ZSAq
cyA9ICZzYy0+cmVtYXBfc3RhdGU7CisgICAgcy0+cGl4ZWxfbnVtID0gc2MtPnNsaWNlX3dpZHRo
ICogc2MtPnNsaWNlX2hlaWdodDsKIAotICAgIGF2X2Fzc2VydDAgKHMucGl4ZWxfbnVtIDw9IDY1
NTM2KTsKKyAgICBhdl9hc3NlcnQwIChzLT5waXhlbF9udW0gPD0gNjU1MzYpOwogCiAgICAgZm9y
IChpbnQgcD0gMDsgcCA8IDEgKyAyKmYtPmNocm9tYV9wbGFuZXMgKyBmLT50cmFuc3BhcmVuY3k7
IHArKykgewogICAgICAgICBmbG9hdCBzY29yZV90YWJbMTZdID0gezB9OwogICAgICAgICBpbnQ2
NF90IGxhc3RfdmFsID0gLTE7CiAgICAgICAgIGludCBiZXN0X2luZGV4ID0gMDsKLSAgICAgICAg
cy5yYyA9IHNjLT5jOwotICAgICAgICBzLmkgPSAwOwotICAgICAgICBzLnAgPSBwOworICAgICAg
ICBzLT5yYyA9IHNjLT5jOworICAgICAgICBzLT5pID0gMDsKKyAgICAgICAgcy0+cCA9IHA7CiAK
LSAgICAgICAgcy5tdWxfY291bnQgPSAxOworICAgICAgICBzLT5tdWxfY291bnQgPSAxOwogCi0g
ICAgICAgIGZvciAoaW50IGk9IDA7IGk8cy5waXhlbF9udW07IGkrKykgeworICAgICAgICBmb3Ig
KGludCBpPSAwOyBpPHMtPnBpeGVsX251bTsgaSsrKSB7CiAgICAgICAgICAgICBpbnQ2NF90IHZh
bCA9IHNjLT51bml0W3BdW2ldLnZhbDsKICAgICAgICAgICAgIGlmICh2YWwgIT0gbGFzdF92YWwp
IHsKICAgICAgICAgICAgICAgICBhdl9hc3NlcnQyKGxhc3RfdmFsIDwgdmFsKTsKQEAgLTE0MjIs
MTIgKzEzODEsMTIgQEAgc3RhdGljIHZvaWQgZW5jb2RlX2Zsb2F0MzJfcmVtYXAoRkZWMUNvbnRl
eHQgKmYsIEZGVjFTbGljZUNvbnRleHQgKnNjLAogICAgICAgICAgICAgaWYgKHNjb3JlX3RhYltz
aV0gPCBzY29yZV90YWJbIGJlc3RfaW5kZXggXSkKICAgICAgICAgICAgICAgICBiZXN0X2luZGV4
ID0gc2k7CiAgICAgICAgIH0KLSAgICAgICAgcy5tdWxbMF0gPSAtMSA8PCBiZXN0X2luZGV4Owot
ICAgICAgICBzLm11bFtzLm11bF9jb3VudF0gPSAxOworICAgICAgICBzLT5tdWxbMF0gPSAtMSA8
PCBiZXN0X2luZGV4OworICAgICAgICBzLT5tdWxbcy0+bXVsX2NvdW50XSA9IDE7CiAKLSAgICAg
ICAgZW5jb2RlX2Zsb2F0MzJfcmVtYXBfc2VnbWVudChzYywgJnMsIDEsIDEpOworICAgICAgICBl
bmNvZGVfZmxvYXQzMl9yZW1hcF9zZWdtZW50KHNjLCAxKTsKIAotICAgICAgICBzYy0+YyA9IHMu
cmM7CisgICAgICAgIHNjLT5jID0gcy0+cmM7CiAgICAgfQogfQogCi0tIAoyLjQ4LjEKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBt
YWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21h
aWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBh
Ym92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1Ympl
Y3QgInVuc3Vic2NyaWJlIi4K