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