From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 0AD4A4F650 for ; Fri, 20 Jun 2025 02:43:51 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 0633468DB74; Fri, 20 Jun 2025 05:43:47 +0300 (EEST) Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id E663868C636 for ; Fri, 20 Jun 2025 05:43:40 +0300 (EEST) Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-54b09cb06b0so1530879e87.1 for ; Thu, 19 Jun 2025 19:43:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750387419; x=1750992219; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=jV7teauy9CvkFuQoeRpJkWGQIYRGX5l6L8dkUNoI4LE=; b=kIk+abIMUh3/g/DwT39WMG1LXqDg8wZyHC9aDJHF5shlAepnuJ4o0VnJFsNnHOB14p lIV5TdyHxLrybuLTW5St6yxl/a6RI5NM7CFEgRHGJC1RE2rMTrvgITUr/w6HXidyyhp9 jUiwfYNyHquNOEC9JuIrWJTbEY7mysk0i74hlQWTJbRrtiKUrhNcClE0z42M6AyZAndL WmCx3IXaQZZjApGKWShsB6amDZhiLZGg04u5hDg1mqOqwiufTHezeQ1Y8M3cOvRFz1Os QqcMomQ+T3MF43WQfhkLcwIX802CScvEvVvAdj5e+LDTuKB+yyC9dojTG5Edgp79agkY /kdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750387419; x=1750992219; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=jV7teauy9CvkFuQoeRpJkWGQIYRGX5l6L8dkUNoI4LE=; b=spmG2KeqIV2/YDYLhls75BfdvI+qgHfOmwUpDjvffi2NhonriQPrd77LC/qAb/y47k FV6NIfHN1JS/w9N0i/6/JIR/Od9BYFhSvvHa2l4KkquTQGQvGmfNdf1tvZY+p8RPQBh6 dD3rr75wECFM6BOATlEaHEjYnWc11VFijCJMIWN6YqEcVLdYDPBU8rAPOTKhCQFGcG8y KuA35VkUHC/iR3VfqsnmpMxxqqqZCwT3kyD9z1uGhz3+HOdsc7EhyOy/D02Zolm1EDGa gIeiozrUauo64rSTdnm6rRNSrAOQPS8PNSJGZS6eL5310msWjwWYRmi0kbnXkHF7a2OQ xlkQ== X-Gm-Message-State: AOJu0YxMr/fWQPkSmFpf0qjJARfaZpuJxWfQUZfoZ7rEoV+97sIInryP M/Mc8cKMXNdqGS4iKwrTiN5lzp2AnA0kPq1FcqQXEqmhveGLPoq/qnBjgmpjm7CkwLGeq5mzAlf wUm9AwsnUIeFeVnsGURY7G9TCuDyKxhTySA== X-Gm-Gg: ASbGncul8GWb/S0lC+eKY/EdQs5Mc9WTC7LNFbdQ5U6wFvaQwiwAa9Tje5g9beiCveC F3BxGUyGHnQTXAerzQ1vyprhGyaSMzpfgAGeUgkQWjXH8gWKxh1SFy/Sx1c+KxVP8liY1Ijv90N ERwoUdDCGHBUk6HstGuKY2foZCDXJ5HcsL4MeGZyiodw== X-Google-Smtp-Source: AGHT+IE1ej7jKFiwAmVxWSrjRqaQF7Kw8JogwMMtKpHNRVrJ1RpC02OVa1RYONCmjvCrx+y4BeVdzcDDYD3sTWI2PPI= X-Received: by 2002:a05:6512:1598:b0:553:65bc:4231 with SMTP id 2adb3069b0e04-553e3bae503mr316632e87.21.1750387419377; Thu, 19 Jun 2025 19:43:39 -0700 (PDT) MIME-Version: 1.0 References: <20250616233931.192291-1-jestrada.list@gmail.com> <924e11e3-4475-4457-9c65-9f5862be25f0@rothenpieler.org> In-Reply-To: <924e11e3-4475-4457-9c65-9f5862be25f0@rothenpieler.org> From: Jorge Estrada Date: Thu, 19 Jun 2025 19:43:29 -0700 X-Gm-Features: AX0GCFsyzJxt1rimt8SlACg4aNsKGUk6IzxL6HnpZivZ7IRZXCntN0FRRi4QC4Q Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="0000000000005a0fa20637f7d4bd" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH] avfilter: add pad_cuda filter X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --0000000000005a0fa20637f7d4bd Content-Type: text/plain; charset="UTF-8" Thanks for the feedback. Addressed your points and attached an updated patch - Simplified the documentation to just point to the pad filter for usage but kept the examples - Made the adjustments to vf_pad_cuda.c - Updated vf_pad_cuda.cu. Should be easier to add 10-12 bit support down the line now. --0000000000005a0fa20637f7d4bd Content-Type: application/octet-stream; name="v2-0001-avfilter-add-pad_cuda-filter.patch" Content-Disposition: attachment; filename="v2-0001-avfilter-add-pad_cuda-filter.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc47ekmv0 RnJvbSBkZDViN2MzY2M2ZTdkNjdkNGE5OTY4YWQ3OWRjZjNlY2NlY2UxNDU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb3JnZSBFc3RyYWRhIDxqZXN0cmFkYS5saXN0QGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAxNiBKdW4gMjAyNSAxNjozMzo0NSAtMDcwMApTdWJqZWN0OiBbUEFUQ0gg djJdIGF2ZmlsdGVyOiBhZGQgcGFkX2N1ZGEgZmlsdGVyCgpUaGlzIHBhdGNoIGFkZHMgdGhlIHBh ZF9jdWRhIHZpZGVvIGZpbHRlci4gQSBmaWx0ZXIgc2ltaWxhciB0byB0aGUgZXhpc3RpbmcgcGFk IGZpbHRlciBidXQgYWNjZWxlcmF0ZWQgYnkgQ1VEQS4KClRoZSBmaWx0ZXIgc2hhcmVzIHRoZSBz YW1lIG9wdGlvbnMgYXMgdGhlIHNvZnR3YXJlIHBhZCBmaWx0ZXIuCgpFeGFtcGxlIHVzYWdlOgpm Zm1wZWcgLWh3YWNjZWwgY3VkYSAtaHdhY2NlbF9vdXRwdXRfZm9ybWF0IGN1ZGEgLWkgaW5wdXQu bXA0IC12ZiAicGFkX2N1ZGE9dz1pdysxMDA6aD1paCsxMDA6eD0tMTp5PS0xOmNvbG9yPXJlZCIg b3V0Lm1wNAotLS0KIENoYW5nZWxvZyAgICAgICAgICAgICAgICAgIHwgICAxICsKIGNvbmZpZ3Vy ZSAgICAgICAgICAgICAgICAgIHwgICAyICsKIGRvYy9maWx0ZXJzLnRleGkgICAgICAgICAgIHwg IDI0ICsrCiBsaWJhdmZpbHRlci9NYWtlZmlsZSAgICAgICB8ICAgMSArCiBsaWJhdmZpbHRlci9h bGxmaWx0ZXJzLmMgICB8ICAgMSArCiBsaWJhdmZpbHRlci92ZXJzaW9uLmggICAgICB8ICAgMiAr LQogbGliYXZmaWx0ZXIvdmZfcGFkX2N1ZGEuYyAgfCA2NTEgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogbGliYXZmaWx0ZXIvdmZfcGFkX2N1ZGEuY3UgfCAgNzYgKysrKysK IDggZmlsZXMgY2hhbmdlZCwgNzU3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92Zl9wYWRfY3VkYS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliYXZmaWx0ZXIvdmZfcGFkX2N1ZGEuY3UKCmRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9D aGFuZ2Vsb2cKaW5kZXggNDIxNzQ0OTQzOC4uYWQ3OTA2YWNmOSAxMDA2NDQKLS0tIGEvQ2hhbmdl bG9nCisrKyBiL0NoYW5nZWxvZwpAQCAtMTgsNiArMTgsNyBAQCB2ZXJzaW9uIDxuZXh0PjoKIC0g QVBWIGVuY29kaW5nIHN1cHBvcnQgdGhyb3VnaCBhIGxpYm9wZW5hcHYgd3JhcHBlcgogLSBWVkMg ZGVjb2RlciBzdXBwb3J0cyBhbGwgY29udGVudCBvZiBTQ0MgKFNjcmVlbiBDb250ZW50IENvZGlu Zyk6CiAgIElCQyAoSW50ZXIgQmxvY2sgQ29weSksIFBhbGV0dGUgTW9kZSBhbmQgQUNUIChBZGFw dGl2ZSBDb2xvciBUcmFuc2Zvcm0KKy0gcGFkX2N1ZGEgZmlsdGVyCiAKIAogdmVyc2lvbiA3LjE6 CmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggNTM0YjQ0M2Y3ZC4uZTY4 ZDYxMjg2NyAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMzM1Nyw2 ICszMzU3LDggQEAgdGh1bWJuYWlsX2N1ZGFfZmlsdGVyX2RlcHNfYW55PSJjdWRhX252Y2MgY3Vk YV9sbHZtIgogdHJhbnNwb3NlX25wcF9maWx0ZXJfZGVwcz0iZmZudmNvZGVjIGxpYm5wcCIKIG92 ZXJsYXlfY3VkYV9maWx0ZXJfZGVwcz0iZmZudmNvZGVjIgogb3ZlcmxheV9jdWRhX2ZpbHRlcl9k ZXBzX2FueT0iY3VkYV9udmNjIGN1ZGFfbGx2bSIKK3BhZF9jdWRhX2ZpbHRlcl9kZXBzPSJmZm52 Y29kZWMiCitwYWRfY3VkYV9maWx0ZXJfZGVwc19hbnk9ImN1ZGFfbnZjYyBjdWRhX2xsdm0iCiBz aGFycGVuX25wcF9maWx0ZXJfZGVwcz0iZmZudmNvZGVjIGxpYm5wcCIKIAogZGRhZ3JhYl9maWx0 ZXJfZGVwcz0iZDNkMTF2YSBJRFhHSU91dHB1dDEgRFhHSV9PVVREVVBMX0ZSQU1FX0lORk8iCmRp ZmYgLS1naXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRleCBmMzJm YzIzYzcwLi45ZmJlMTlkMGVlIDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisrKyBiL2Rv Yy9maWx0ZXJzLnRleGkKQEAgLTI2NjgyLDYgKzI2NjgyLDMwIEBAIFNlZSBAcmVme2ZyYW1lc3lu Y30uCiAKIFRoaXMgZmlsdGVyIGFsc28gc3VwcG9ydHMgdGhlIEByZWZ7ZnJhbWVzeW5jfSBvcHRp b25zLgogCisKK0BhbmNob3J7cGFkX2N1ZGF9CitAc3Vic2VjdGlvbiBwYWRfY3VkYQorQWRkIHBh ZGRpbmdzIHRvIGFuIGlucHV0IHZpZGVvIHN0cmVhbSB1c2luZyBDVURBLgorCitUaGlzIGZpbHRl ciBpcyB0aGUgQ1VEQS1hY2NlbGVyYXRlZCB2ZXJzaW9uIG9mIHRoZSBAcmVme3BhZH0gZmlsdGVy LiBJdCBhY2NlcHRzIHRoZSBzYW1lIG9wdGlvbnMgYW5kIGV4cHJlc3Npb25zIGFuZCBwcm92aWRl cyB0aGUgc2FtZSBjb3JlIGZ1bmN0aW9uYWxpdHkuCitGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlv biBvZiBhdmFpbGFibGUgb3B0aW9ucywgcGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3Ig dGhlIEByZWZ7cGFkfSBmaWx0ZXIuCisKK0BzdWJzdWJzZWN0aW9uIEV4YW1wbGVzCisKK0BpdGVt aXplCitAaXRlbQorQWRkIGEgMjAwLXBpeGVsIGJsYWNrIGJvcmRlciB0byBhbGwgc2lkZXMgb2Yg YSB2aWRlbyBmcmFtZToKK0BleGFtcGxlCitmZm1wZWcgLWh3YWNjZWwgY3VkYSAtaHdhY2NlbF9v dXRwdXRfZm9ybWF0IGN1ZGEgLWkgaW5wdXQubXA0IC12ZiAicGFkX2N1ZGE9dz1pdys0MDA6aD1p aCs0MDA6eD0yMDA6eT0yMDAiIC1jOnYgaDI2NF9udmVuYyBvdXQubXA0CitAZW5kIGV4YW1wbGUK KworQGl0ZW0KK1BhZCB0aGUgaW5wdXQgdmlkZW8gdG8gYSAxNjo5IGFzcGVjdCByYXRpbywgZmls bGluZyB3aXRoIHRoZSBjb2xvciAiYmx1ZSI6CitAZXhhbXBsZQorZmZtcGVnIC1od2FjY2VsIGN1 ZGEgLWh3YWNjZWxfb3V0cHV0X2Zvcm1hdCBjdWRhIC1pIGlucHV0Lm1wNCAtdmYgInBhZF9jdWRh PXc9aWgqMTYvOS9zYXI6aD1paDp4PShvdy1pdykvMjp5PShvaC1paCkvMjpjb2xvcj1ibHVlIiAt Yzp2IGgyNjRfbnZlbmMgb3V0Lm1wNAorQGVuZCBleGFtcGxlCitAZW5kIGl0ZW1pemUKKwogQGFu Y2hvcntzY2FsZV9jdWRhfQogQHN1YnNlY3Rpb24gc2NhbGVfY3VkYQogCmRpZmYgLS1naXQgYS9s aWJhdmZpbHRlci9NYWtlZmlsZSBiL2xpYmF2ZmlsdGVyL01ha2VmaWxlCmluZGV4IDk3ZjhmMTcy NzIuLjllOTE1M2Y1YjAgMTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlCisrKyBiL2xp YmF2ZmlsdGVyL01ha2VmaWxlCkBAIC00MjIsNiArNDIyLDcgQEAgT0JKUy0kKENPTkZJR19PVkVS TEFZX1ZBQVBJX0ZJTFRFUikgICAgICAgICAgKz0gdmZfb3ZlcmxheV92YWFwaS5vIGZyYW1lc3lu Yy5vIHYKIE9CSlMtJChDT05GSUdfT1ZFUkxBWV9WVUxLQU5fRklMVEVSKSAgICAgICAgICs9IHZm X292ZXJsYXlfdnVsa2FuLm8gdnVsa2FuLm8gdnVsa2FuX2ZpbHRlci5vCiBPQkpTLSQoQ09ORklH X09XREVOT0lTRV9GSUxURVIpICAgICAgICAgICAgICArPSB2Zl9vd2Rlbm9pc2UubwogT0JKUy0k KENPTkZJR19QQURfRklMVEVSKSAgICAgICAgICAgICAgICAgICAgKz0gdmZfcGFkLm8KK09CSlMt JChDT05GSUdfUEFEX0NVREFfRklMVEVSKSAgICAgICAgICAgICAgICs9IHZmX3BhZF9jdWRhLm8g dmZfcGFkX2N1ZGEucHR4Lm8gY3VkYS9sb2FkX2hlbHBlci5vCiBPQkpTLSQoQ09ORklHX1BBRF9P UEVOQ0xfRklMVEVSKSAgICAgICAgICAgICArPSB2Zl9wYWRfb3BlbmNsLm8gb3BlbmNsLm8gb3Bl bmNsL3BhZC5vCiBPQkpTLSQoQ09ORklHX1BBTEVUVEVHRU5fRklMVEVSKSAgICAgICAgICAgICAr PSB2Zl9wYWxldHRlZ2VuLm8gcGFsZXR0ZS5vCiBPQkpTLSQoQ09ORklHX1BBTEVUVEVVU0VfRklM VEVSKSAgICAgICAgICAgICArPSB2Zl9wYWxldHRldXNlLm8gZnJhbWVzeW5jLm8gcGFsZXR0ZS5v CmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMgYi9saWJhdmZpbHRlci9hbGxm aWx0ZXJzLmMKaW5kZXggM2JjMDQ1YjI4Zi4uNDA5MDk5YmYxZiAxMDA2NDQKLS0tIGEvbGliYXZm aWx0ZXIvYWxsZmlsdGVycy5jCisrKyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwpAQCAtMzk1 LDYgKzM5NSw3IEBAIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9vdmVybGF5X3Z1bGthbjsK IGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9vdmVybGF5X2N1ZGE7CiBleHRlcm4gY29uc3Qg RkZGaWx0ZXIgZmZfdmZfb3dkZW5vaXNlOwogZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3Bh ZDsKK2V4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9wYWRfY3VkYTsKIGV4dGVybiBjb25zdCBG RkZpbHRlciBmZl92Zl9wYWRfb3BlbmNsOwogZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3Bh bGV0dGVnZW47CiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfcGFsZXR0ZXVzZTsKZGlmZiAt LWdpdCBhL2xpYmF2ZmlsdGVyL3ZlcnNpb24uaCBiL2xpYmF2ZmlsdGVyL3ZlcnNpb24uaAppbmRl eCBkNWE2YmMxNDNhLi4xZTg4NGQ5YjQ0IDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci92ZXJzaW9u LmgKKysrIGIvbGliYXZmaWx0ZXIvdmVyc2lvbi5oCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNs dWRlICJ2ZXJzaW9uX21ham9yLmgiCiAKLSNkZWZpbmUgTElCQVZGSUxURVJfVkVSU0lPTl9NSU5P UiAgIDAKKyNkZWZpbmUgTElCQVZGSUxURVJfVkVSU0lPTl9NSU5PUiAgIDEKICNkZWZpbmUgTElC QVZGSUxURVJfVkVSU0lPTl9NSUNSTyAxMDAKIAogCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92 Zl9wYWRfY3VkYS5jIGIvbGliYXZmaWx0ZXIvdmZfcGFkX2N1ZGEuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi5kNTkxZGRiOWI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGli YXZmaWx0ZXIvdmZfcGFkX2N1ZGEuYwpAQCAtMCwwICsxLDY1MSBAQAorLyoKKyAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBDVURBIHZpZGVvIHBh ZGRpbmcgZmlsdGVyCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8dmVjdG9y X3R5cGVzLmg+CisKKyNpbmNsdWRlICJmaWx0ZXJzLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2 c3RyaW5nLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgorI2luY2x1ZGUgImxpYmF2 dXRpbC9jdWRhX2NoZWNrLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2V2YWwuaCIKKyNpbmNsdWRl ICJsaWJhdnV0aWwvaHdjb250ZXh0LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9j dWRhX2ludGVybmFsLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxzLmgiCisjaW5jbHVk ZSAibGliYXZ1dGlsL2ludGVybmFsLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgorI2lu Y2x1ZGUgImxpYmF2dXRpbC9waXhkZXNjLmgiCisKKyNpbmNsdWRlICJjdWRhL2xvYWRfaGVscGVy LmgiCisKKyNkZWZpbmUgQ0hFQ0tfQ1UoeCkgRkZfQ1VEQV9DSEVDS19ETChjdHgsIGRldmljZV9o d2N0eC0+aW50ZXJuYWwtPmN1ZGFfZGwsIHgpCisjZGVmaW5lIERJVl9VUChhLCBiKSAoICgoYSkg KyAoYikgLSAxKSAvIChiKSApCisjZGVmaW5lIEJMT0NLX1ggMzIKKyNkZWZpbmUgQkxPQ0tfWSAx NgorCitzdGF0aWMgY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0IHN1cHBvcnRlZF9mb3JtYXRzW10g PSB7CisgICAgQVZfUElYX0ZNVF9ZVVY0MjBQLAorICAgIEFWX1BJWF9GTVRfWVVWNDQ0UCwKKyAg ICBBVl9QSVhfRk1UX1lVVkE0MjBQLAorICAgIEFWX1BJWF9GTVRfWVVWQTQ0NFAsCisgICAgQVZf UElYX0ZNVF9OVjEyLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgQ1VEQVBhZENvbnRleHQgeworICAg IGNvbnN0IEFWQ2xhc3MgKmNsYXNzOworCisgICAgQVZCdWZmZXJSZWYgKmZyYW1lc19jdHg7CisK KyAgICBpbnQgdywgaDsgICAgICAgLy8vPCBvdXRwdXQgZGltZW5zaW9ucywgYSB2YWx1ZSBvZiAw IHdpbGwgcmVzdWx0IGluIHRoZSBpbnB1dCBzaXplCisgICAgaW50IHgsIHk7ICAgICAgIC8vLzwg b2Zmc2V0cyBvZiB0aGUgaW5wdXQgYXJlYSB3aXRoIHJlc3BlY3QgdG8gdGhlIHBhZGRlZCBhcmVh CisgICAgaW50IGluX3csIGluX2g7IC8vLzwgd2lkdGggYW5kIGhlaWdodCBmb3IgdGhlIHBhZGRl ZCBpbnB1dCB2aWRlbworCisgICAgY2hhciAqd19leHByOyAgIC8vLzwgd2lkdGggZXhwcmVzc2lv bgorICAgIGNoYXIgKmhfZXhwcjsgICAvLy88IGhlaWdodCBleHByZXNzaW9uCisgICAgY2hhciAq eF9leHByOyAgIC8vLzwgeCBvZmZzZXQgZXhwcmVzc2lvbgorICAgIGNoYXIgKnlfZXhwcjsgICAv Ly88IHkgb2Zmc2V0IGV4cHJlc3Npb24KKworICAgIHVpbnQ4X3QgcmdiYV9jb2xvcls0XTsgICAg Ly8vPCBjb2xvciBmb3IgdGhlIHBhZGRpbmcgYXJlYQorICAgIHVpbnQ4X3QgcGFyc2VkX2NvbG9y WzRdOworICAgIEFWUmF0aW9uYWwgYXNwZWN0OworCisgICAgaW50IGV2YWxfbW9kZTsKKworICAg IGludCBsYXN0X291dF93LCBsYXN0X291dF9oOyAvLy88IHVzZWQgdG8gZXZhbHVhdGUgdGhlIHBy aW9yIG91dHB1dCB3aWR0aCBhbmQgaGVpZ2h0IHdpdGggdGhlIGluY29taW5nIGZyYW1lCisKKyAg ICBBVkNVREFEZXZpY2VDb250ZXh0ICpod2N0eDsKKyAgICBDVW1vZHVsZSBjdV9tb2R1bGU7Cisg ICAgQ1VmdW5jdGlvbiBjdV9mdW5jX3BsYW5hcjsKKyAgICBDVWZ1bmN0aW9uIGN1X2Z1bmNfdXY7 Cit9IENVREFQYWRDb250ZXh0OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdmFyX25hbWVz W10gPSB7CisgICAgImluX3ciLCAgIml3IiwKKyAgICAiaW5faCIsICAiaWgiLAorICAgICJvdXRf dyIsICJvdyIsCisgICAgIm91dF9oIiwgIm9oIiwKKyAgICAieCIsCisgICAgInkiLAorICAgICJh IiwKKyAgICAic2FyIiwKKyAgICAiZGFyIiwKKyAgICAiaHN1YiIsCisgICAgInZzdWIiLAorICAg IE5VTEwKK307CisKK2VudW0geworICAgIFZBUl9JTl9XLAorICAgIFZBUl9JVywKKyAgICBWQVJf SU5fSCwKKyAgICBWQVJfSUgsCisgICAgVkFSX09VVF9XLAorICAgIFZBUl9PVywKKyAgICBWQVJf T1VUX0gsCisgICAgVkFSX09ILAorICAgIFZBUl9YLAorICAgIFZBUl9ZLAorICAgIFZBUl9BLAor ICAgIFZBUl9TQVIsCisgICAgVkFSX0RBUiwKKyAgICBWQVJfSFNVQiwKKyAgICBWQVJfVlNVQiwK KyAgICBWQVJTX05CCit9OworCitlbnVtIEV2YWxNb2RlIHsKKyAgICBFVkFMX01PREVfSU5JVCwK KyAgICBFVkFMX01PREVfRlJBTUUsCisgICAgRVZBTF9NT0RFX05CCit9OworCitzdGF0aWMgaW50 IGV2YWxfZXhwcihBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBDVURBUGFkQ29udGV4dCAq cyA9IGN0eC0+cHJpdjsKKyAgICBBVkZpbHRlckxpbmsgKmlubGluayA9IGN0eC0+aW5wdXRzWzBd OworICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19n ZXQoaW5saW5rLT5mb3JtYXQpOworCisgICAgZG91YmxlIHZhcl92YWx1ZXNbVkFSU19OQl0sIHJl czsKKyAgICBjaGFyICpleHByOworICAgIGludCByZXQ7CisKKyAgICB2YXJfdmFsdWVzW1ZBUl9J Tl9XXSAgID0gdmFyX3ZhbHVlc1tWQVJfSVddICAgPSBzLT5pbl93OworICAgIHZhcl92YWx1ZXNb VkFSX0lOX0hdICAgPSB2YXJfdmFsdWVzW1ZBUl9JSF0gICA9IHMtPmluX2g7CisgICAgdmFyX3Zh bHVlc1tWQVJfT1VUX1ddICA9IHZhcl92YWx1ZXNbVkFSX09XXSAgPSBOQU47CisgICAgdmFyX3Zh bHVlc1tWQVJfT1VUX0hdICA9IHZhcl92YWx1ZXNbVkFSX09IXSAgPSBOQU47CisgICAgdmFyX3Zh bHVlc1tWQVJfQV0gICAgICA9IChkb3VibGUpcy0+aW5fdyAvIHMtPmluX2g7CisgICAgdmFyX3Zh bHVlc1tWQVJfU0FSXSAgICA9IGlubGluay0+c2FtcGxlX2FzcGVjdF9yYXRpby5udW0gPworICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlpbmxpbmstPnNhbXBsZV9hc3BlY3RfcmF0 aW8ubnVtIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluay0+c2FtcGxlX2FzcGVj dF9yYXRpby5kZW4gOiAxOworICAgIHZhcl92YWx1ZXNbVkFSX0RBUl0gICAgPSB2YXJfdmFsdWVz W1ZBUl9BXSAqIHZhcl92YWx1ZXNbVkFSX1NBUl07CisgICAgdmFyX3ZhbHVlc1tWQVJfSFNVQl0g ICA9IDEgPDwgZGVzYy0+bG9nMl9jaHJvbWFfdzsKKyAgICB2YXJfdmFsdWVzW1ZBUl9WU1VCXSAg ID0gMSA8PCBkZXNjLT5sb2cyX2Nocm9tYV9oOworCisgICAgZXhwciA9IHMtPndfZXhwcjsKKyAg ICByZXQgPSBhdl9leHByX3BhcnNlX2FuZF9ldmFsKCZyZXMsIGV4cHIsIHZhcl9uYW1lcywgdmFy X3ZhbHVlcywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgY3R4KTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgcy0+dyA9IHJlczsKKyAgICBpZiAo cy0+dyA8IDApIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiV2lkdGggZXhw cmVzc2lvbiBpcyBuZWdhdGl2ZS5cbiIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7 CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICB2YXJfdmFsdWVzW1ZBUl9PVVRfV10g PSB2YXJfdmFsdWVzW1ZBUl9PV10gPSBzLT53OworCisgICAgZXhwciA9IHMtPmhfZXhwcjsKKyAg ICByZXQgPSBhdl9leHByX3BhcnNlX2FuZF9ldmFsKCZyZXMsIGV4cHIsIHZhcl9uYW1lcywgdmFy X3ZhbHVlcywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgY3R4KTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgcy0+aCA9IHJlczsKKyAgICBpZiAo cy0+aCA8IDApIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSGVpZ2h0IGV4 cHJlc3Npb24gaXMgbmVnYXRpdmUuXG4iKTsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwp OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgIHZhcl92YWx1ZXNbVkFSX09VVF9IXSA9 IHZhcl92YWx1ZXNbVkFSX09IXSA9IHMtPmg7CisKKyAgICBpZiAoIXMtPmgpCisgICAgICAgIHMt PmggPSBzLT5pbl9oOworCisgICAgdmFyX3ZhbHVlc1tWQVJfT1VUX0hdID0gdmFyX3ZhbHVlc1tW QVJfT0hdID0gcy0+aDsKKworCisgICAgZXhwciA9IHMtPndfZXhwcjsKKyAgICByZXQgPSBhdl9l eHByX3BhcnNlX2FuZF9ldmFsKCZyZXMsIGV4cHIsIHZhcl9uYW1lcywgdmFyX3ZhbHVlcywgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgY3R4KTsKKyAgICBpZiAocmV0IDwgMCkKKyAg ICAgICAgZ290byBmYWlsOworCisgICAgcy0+dyA9IHJlczsKKyAgICBpZiAocy0+dyA8IDApIHsK KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiV2lkdGggZXhwcmVzc2lvbiBpcyBu ZWdhdGl2ZS5cbiIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIGdv dG8gZmFpbDsKKyAgICB9CisgICAgaWYgKCFzLT53KQorICAgICAgICBzLT53ID0gcy0+aW5fdzsK KworICAgIHZhcl92YWx1ZXNbVkFSX09VVF9XXSA9IHZhcl92YWx1ZXNbVkFSX09XXSA9IHMtPnc7 CisKKworICAgIGV4cHIgPSBzLT54X2V4cHI7CisgICAgcmV0ID0gYXZfZXhwcl9wYXJzZV9hbmRf ZXZhbCgmcmVzLCBleHByLCB2YXJfbmFtZXMsIHZhcl92YWx1ZXMsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsIDAsIGN0eCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdvdG8gZmFp bDsKKworICAgIHMtPnggPSByZXM7CisKKworICAgIGV4cHIgPSBzLT55X2V4cHI7CisgICAgcmV0 ID0gYXZfZXhwcl9wYXJzZV9hbmRfZXZhbCgmcmVzLCBleHByLCB2YXJfbmFtZXMsIHZhcl92YWx1 ZXMsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDAsIGN0eCk7CisgICAgaWYgKHJldCA8 IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHMtPnkgPSByZXM7CisKKyAgICBpZiAocy0+ eCA8IDAgfHwgcy0+eCArIHMtPmluX3cgPiBzLT53KSB7CisgICAgICAgIHMtPnggPSAocy0+dyAt IHMtPmluX3cpIC8gMjsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJjZW50 ZXJpbmcgWCBvZmZzZXQuXG4iKTsKKyAgICB9CisKKyAgICBpZiAocy0+eSA8IDAgfHwgcy0+eSAr IHMtPmluX2ggPiBzLT5oKSB7CisgICAgICAgIHMtPnkgPSAocy0+aCAtIHMtPmluX2gpIC8gMjsK KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJjZW50ZXJpbmcgWSBvZmZzZXQu XG4iKTsKKyAgICB9CisKKyAgICBzLT53ID0gYXZfY2xpcChzLT53LCAxLCBJTlRfTUFYKTsKKyAg ICBzLT5oID0gYXZfY2xpcChzLT5oLCAxLCBJTlRfTUFYKTsKKworICAgIGlmIChzLT53IDwgcy0+ aW5fdyB8fCBzLT5oIDwgcy0+aW5faCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJS T1IsICJQYWRkZWQgc2l6ZSA8IGlucHV0IHNpemUuXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJS T1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsCisgICAg ICAgICAgICJ3OiVkIGg6JWQgLT4gdzolZCBoOiVkIHg6JWQgeTolZCBjb2xvcjoweCUwMlglMDJY JTAyWCUwMlhcbiIsCisgICAgICAgICAgIGlubGluay0+dywgaW5saW5rLT5oLCBzLT53LCBzLT5o LCBzLT54LCBzLT55LCBzLT5yZ2JhX2NvbG9yWzBdLAorICAgICAgICAgICBzLT5yZ2JhX2NvbG9y WzFdLCBzLT5yZ2JhX2NvbG9yWzJdLCBzLT5yZ2JhX2NvbG9yWzNdKTsKKworICAgIHJldHVybiAw OworCitmYWlsOgorICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkVycm9yIGV2YWx1YXRp bmcgJyVzJ1xuIiwgZXhwcik7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjdWRh X3BhZF9hbGxvY19vdXRfZnJhbWVzX2N0eChBVkZpbHRlckNvbnRleHQgKmN0eCwgQVZCdWZmZXJS ZWYgKipvdXRfZnJhbWVzX2N0eCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQor eworICAgIEFWRmlsdGVyTGluayAqaW5saW5rID0gY3R4LT5pbnB1dHNbMF07CisgICAgRmlsdGVy TGluayAqaW5sID0gZmZfZmlsdGVyX2xpbmsoaW5saW5rKTsKKyAgICBBVkhXRnJhbWVzQ29udGV4 dCAqaW5fZnJhbWVzX2N0eCA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWlubC0+aHdfZnJhbWVzX2N0 eC0+ZGF0YTsKKyAgICBpbnQgcmV0OworCisgICAgKm91dF9mcmFtZXNfY3R4ID0gYXZfaHdmcmFt ZV9jdHhfYWxsb2MoaW5fZnJhbWVzX2N0eC0+ZGV2aWNlX3JlZik7CisgICAgaWYgKCEqb3V0X2Zy YW1lc19jdHgpIHsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAg ICBBVkhXRnJhbWVzQ29udGV4dCAqb3V0X2ZjID0gKEFWSFdGcmFtZXNDb250ZXh0ICopKCpvdXRf ZnJhbWVzX2N0eCktPmRhdGE7CisgICAgb3V0X2ZjLT5mb3JtYXQgICAgPSBBVl9QSVhfRk1UX0NV REE7CisgICAgb3V0X2ZjLT5zd19mb3JtYXQgPSBpbl9mcmFtZXNfY3R4LT5zd19mb3JtYXQ7CisK KyAgICBvdXRfZmMtPndpZHRoICAgICA9IEZGQUxJR04od2lkdGgsIDMyKTsKKyAgICBvdXRfZmMt PmhlaWdodCAgICA9IEZGQUxJR04oaGVpZ2h0LCAzMik7CisKKyAgICByZXQgPSBhdl9od2ZyYW1l X2N0eF9pbml0KCpvdXRfZnJhbWVzX2N0eCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGluaXQgb3V0cHV0IGN0eFxuIik7 CisgICAgICAgIGF2X2J1ZmZlcl91bnJlZihvdXRfZnJhbWVzX2N0eCk7CisgICAgICAgIHJldHVy biByZXQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBhdl9jb2xkIGludCBj dWRhX3BhZF9pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIENVREFQYWRDb250ZXh0 ICpzID0gY3R4LT5wcml2OworCisgICAgcy0+bGFzdF9vdXRfdyA9IC0xOworICAgIHMtPmxhc3Rf b3V0X2ggPSAtMTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgYXZfY29sZCB2b2lkIGN1 ZGFfcGFkX3VuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBDVURBUGFkQ29udGV4 dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBDVWNvbnRleHQgZHVtbXk7CisKKyAgICBhdl9idWZmZXJf dW5yZWYoJnMtPmZyYW1lc19jdHgpOworCisgICAgaWYgKHMtPmh3Y3R4ICYmIHMtPmN1X21vZHVs ZSkgeworICAgICAgICBDdWRhRnVuY3Rpb25zICpjdSA9IHMtPmh3Y3R4LT5pbnRlcm5hbC0+Y3Vk YV9kbDsKKyAgICAgICAgQVZDVURBRGV2aWNlQ29udGV4dCAqZGV2aWNlX2h3Y3R4ID0gcy0+aHdj dHg7CisgICAgICAgIENIRUNLX0NVKGN1LT5jdUN0eFB1c2hDdXJyZW50KHMtPmh3Y3R4LT5jdWRh X2N0eCkpOworICAgICAgICBDSEVDS19DVShjdS0+Y3VNb2R1bGVVbmxvYWQocy0+Y3VfbW9kdWxl KSk7CisgICAgICAgIENIRUNLX0NVKGN1LT5jdUN0eFBvcEN1cnJlbnQoJmR1bW15KSk7CisgICAg fQorCisgICAgcy0+Y3VfbW9kdWxlID0gTlVMTDsKKyAgICBzLT5od2N0eCA9IE5VTEw7Cit9CisK K3N0YXRpYyBhdl9jb2xkIGludCBjdWRhX3BhZF9sb2FkX2Z1bmN0aW9ucyhBVkZpbHRlckNvbnRl eHQgKmN0eCkKK3sKKyAgICBDVURBUGFkQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBDdWRh RnVuY3Rpb25zICpjdSA9IHMtPmh3Y3R4LT5pbnRlcm5hbC0+Y3VkYV9kbDsKKyAgICBDVWNvbnRl eHQgZHVtbXlfY3VfY3R4OworICAgIGludCByZXQ7CisKKyAgICBBVkNVREFEZXZpY2VDb250ZXh0 ICpkZXZpY2VfaHdjdHggPSBzLT5od2N0eDsKKworICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBj aGFyIGZmX3ZmX3BhZF9jdWRhX3B0eF9kYXRhW107CisgICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVk IGludCBmZl92Zl9wYWRfY3VkYV9wdHhfbGVuOworCisgICAgcmV0ID0gQ0hFQ0tfQ1UoY3UtPmN1 Q3R4UHVzaEN1cnJlbnQoZGV2aWNlX2h3Y3R4LT5jdWRhX2N0eCkpOworICAgIGlmIChyZXQgPCAw KQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0ID0gZmZfY3VkYV9sb2FkX21vZHVsZShj dHgsIGRldmljZV9od2N0eCwgJnMtPmN1X21vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZmX3ZmX3BhZF9jdWRhX3B0eF9kYXRhLCBmZl92Zl9wYWRfY3VkYV9wdHhfbGVuKTsK KyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJG YWlsZWQgdG8gbG9hZCBDVURBIG1vZHVsZVxuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0K KworICAgIHJldCA9IENIRUNLX0NVKGN1LT5jdU1vZHVsZUdldEZ1bmN0aW9uKCZzLT5jdV9mdW5j X3BsYW5hciwgcy0+Y3VfbW9kdWxlLCAicGFkX3BsYW5hcl9jdWRhIikpOworICAgIGlmIChyZXQg PCAwKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBsb2Fk IHBhZF9wbGFuYXJfY3VkYVxuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHJl dCA9IENIRUNLX0NVKGN1LT5jdU1vZHVsZUdldEZ1bmN0aW9uKCZzLT5jdV9mdW5jX3V2LCBzLT5j dV9tb2R1bGUsICJwYWRfdXZfY3VkYSIpKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGxvYWQgcGFkX3V2X2N1ZGFcbiIpOwor CitlbmQ6CisgICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3VycmVudCgmZHVtbXlfY3VfY3R4KSk7 CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGN1ZGFfcGFkX2NvbmZpZ19wcm9w cyhBVkZpbHRlckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBv dXRsaW5rLT5zcmM7CisgICAgQ1VEQVBhZENvbnRleHQgKnMgPSBjdHgtPnByaXY7CisKKyAgICBB VkZpbHRlckxpbmsgKmlubGluayA9IGN0eC0+aW5wdXRzWzBdOworICAgIEZpbHRlckxpbmsgKmlu bCA9IGZmX2ZpbHRlcl9saW5rKGlubGluayk7CisKKyAgICBGaWx0ZXJMaW5rICpvbCA9IGZmX2Zp bHRlcl9saW5rKG91dGxpbmspOworCisgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmluX2ZyYW1lc19j dHg7CisgICAgaW50IGZvcm1hdF9zdXBwb3J0ZWQgPSAwOworICAgIGludCByZXQ7CisKKyAgICBz LT5pbl93ID0gaW5saW5rLT53OworICAgIHMtPmluX2ggPSBpbmxpbmstPmg7CisgICAgcmV0ID0g ZXZhbF9leHByKGN0eCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisK KyAgICBpZiAoIWlubC0+aHdfZnJhbWVzX2N0eCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJObyBodyBjb250ZXh0IHByb3ZpZGVkIG9uIGlucHV0XG4iKTsKKyAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBpbl9mcmFtZXNfY3R4ID0gKEFW SFdGcmFtZXNDb250ZXh0ICopaW5sLT5od19mcmFtZXNfY3R4LT5kYXRhOworICAgIHMtPmh3Y3R4 ID0gaW5fZnJhbWVzX2N0eC0+ZGV2aWNlX2N0eC0+aHdjdHg7CisKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IEZGX0FSUkFZX0VMRU1TKHN1cHBvcnRlZF9mb3JtYXRzKTsgaSsrKSB7CisgICAgICAg IGlmIChpbl9mcmFtZXNfY3R4LT5zd19mb3JtYXQgPT0gc3VwcG9ydGVkX2Zvcm1hdHNbaV0pIHsK KyAgICAgICAgICAgIGZvcm1hdF9zdXBwb3J0ZWQgPSAxOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFmb3JtYXRfc3VwcG9ydGVkKSB7CisgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIGlucHV0IGZvcm1hdC5cbiIpOwor ICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIHVpbnQ4X3QgUiA9 IHMtPnJnYmFfY29sb3JbMF07CisgICAgdWludDhfdCBHID0gcy0+cmdiYV9jb2xvclsxXTsKKyAg ICB1aW50OF90IEIgPSBzLT5yZ2JhX2NvbG9yWzJdOworCisgICAgaW50IFkgPSAoKCA2NiAqIFIg KyAxMjkgKiBHICsgIDI1ICogQiArIDEyOCkgPj4gOCkgKyAxNjsKKyAgICBpbnQgVSA9ICgoLTM4 ICogUiAtICA3NCAqIEcgKyAxMTIgKiBCICsgMTI4KSA+PiA4KSArIDEyODsKKyAgICBpbnQgViA9 ICgoMTEyICogUiAtICA5NCAqIEcgLSAgMTggKiBCICsgMTI4KSA+PiA4KSArIDEyODsKKyAgICBz LT5wYXJzZWRfY29sb3JbMF0gPSBhdl9jbGlwX3VpbnQ4KFkpOworICAgIHMtPnBhcnNlZF9jb2xv clsxXSA9IGF2X2NsaXBfdWludDgoVSk7CisgICAgcy0+cGFyc2VkX2NvbG9yWzJdID0gYXZfY2xp cF91aW50OChWKTsKKyAgICBzLT5wYXJzZWRfY29sb3JbM10gPSBzLT5yZ2JhX2NvbG9yWzNdOwor CisgICAgcmV0ID0gY3VkYV9wYWRfYWxsb2Nfb3V0X2ZyYW1lc19jdHgoY3R4LCAmcy0+ZnJhbWVz X2N0eCwgcy0+dywgcy0+aCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7 CisKKyAgICBvbC0+aHdfZnJhbWVzX2N0eCA9IGF2X2J1ZmZlcl9yZWYocy0+ZnJhbWVzX2N0eCk7 CisgICAgaWYgKCFvbC0+aHdfZnJhbWVzX2N0eCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5P TUVNKTsKKworICAgIG91dGxpbmstPncgICAgICAgICA9IHMtPnc7CisgICAgb3V0bGluay0+aCAg ICAgICAgID0gcy0+aDsKKyAgICBvdXRsaW5rLT50aW1lX2Jhc2UgPSBpbmxpbmstPnRpbWVfYmFz ZTsKKyAgICBvdXRsaW5rLT5mb3JtYXQgICAgPSBBVl9QSVhfRk1UX0NVREE7CisKKyAgICBzLT5s YXN0X291dF93ID0gcy0+dzsKKyAgICBzLT5sYXN0X291dF9oID0gcy0+aDsKKworICAgIHJldCA9 IGN1ZGFfcGFkX2xvYWRfZnVuY3Rpb25zKGN0eCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAg IHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdWRhX3BhZF9w YWQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKm91dCwgY29uc3QgQVZGcmFtZSAqaW4p Cit7CisgICAgQ1VEQVBhZENvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgRmlsdGVyTGluayAq aW5sID0gZmZfZmlsdGVyX2xpbmsoY3R4LT5pbnB1dHNbMF0pOworCisgICAgQVZIV0ZyYW1lc0Nv bnRleHQgKmluX2ZyYW1lc19jdHggPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilpbmwtPmh3X2ZyYW1l c19jdHgtPmRhdGE7CisgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjX2luID0gYXZf cGl4X2ZtdF9kZXNjX2dldChpbl9mcmFtZXNfY3R4LT5zd19mb3JtYXQpOworCisgICAgQ3VkYUZ1 bmN0aW9ucyAqY3UgPSBzLT5od2N0eC0+aW50ZXJuYWwtPmN1ZGFfZGw7CisgICAgQVZDVURBRGV2 aWNlQ29udGV4dCAqZGV2aWNlX2h3Y3R4ID0gcy0+aHdjdHg7CisgICAgaW50IHJldDsKKworCisg ICAgY29uc3QgaW50IG5iX3BsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKGluX2ZyYW1l c19jdHgtPnN3X2Zvcm1hdCk7CisgICAgZm9yIChpbnQgcGxhbmUgPSAwOyBwbGFuZSA8IG5iX3Bs YW5lczsgcGxhbmUrKykgeworCisgICAgICAgIGludCBoc3ViID0gKHBsYW5lID09IDEgfHwgcGxh bmUgPT0gMikgPyBkZXNjX2luLT5sb2cyX2Nocm9tYV93IDogMDsKKyAgICAgICAgaW50IHZzdWIg PSAocGxhbmUgPT0gMSB8fCBwbGFuZSA9PSAyKSA/IGRlc2NfaW4tPmxvZzJfY2hyb21hX2ggOiAw OworCisgICAgICAgIGlmIChpbl9mcmFtZXNfY3R4LT5zd19mb3JtYXQgPT0gQVZfUElYX0ZNVF9O VjEyICYmIHBsYW5lID09IDEpIHsKKyAgICAgICAgICAgIGhzdWIgPSBkZXNjX2luLT5sb2cyX2No cm9tYV93OworICAgICAgICAgICAgdnN1YiA9IGRlc2NfaW4tPmxvZzJfY2hyb21hX2g7CisgICAg ICAgIH0KKworICAgICAgICBpbnQgc3JjX3cgPSBBVl9DRUlMX1JTSElGVChzLT5pbl93LCBoc3Vi KTsKKyAgICAgICAgaW50IHNyY19oID0gQVZfQ0VJTF9SU0hJRlQocy0+aW5faCwgdnN1Yik7CisK KyAgICAgICAgaW50IGRzdF93ID0gQVZfQ0VJTF9SU0hJRlQocy0+dywgaHN1Yik7CisgICAgICAg IGludCBkc3RfaCA9IEFWX0NFSUxfUlNISUZUKHMtPmgsIHZzdWIpOworCisgICAgICAgIGludCB5 X3BsYW5lX29mZnNldCA9IEFWX0NFSUxfUlNISUZUKHMtPnksIHZzdWIpOworICAgICAgICBpbnQg eF9wbGFuZV9vZmZzZXQgPSBBVl9DRUlMX1JTSElGVChzLT54LCBoc3ViKTsKKworICAgICAgICBp ZiAoeF9wbGFuZV9vZmZzZXQgKyBzcmNfdyA+IGRzdF93IHx8IHlfcGxhbmVfb2Zmc2V0ICsgc3Jj X2ggPiBkc3RfaCkgeworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAg ICAgICAgICAgICAgICAgICJST0kgb3V0IG9mIGJvdW5kcyBpbiBwbGFuZSAlZDogb2Zmc2V0PSgl ZCwlZCkgaW49KCVkeCVkKSAiCisgICAgICAgICAgICAgICAgICAgIm91dD0oJWR4JWQpXG4iLAor ICAgICAgICAgICAgICAgICAgIHBsYW5lLCB4X3BsYW5lX29mZnNldCwgeV9wbGFuZV9vZmZzZXQs IHNyY193LCBzcmNfaCwgZHN0X3csIGRzdF9oKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7CisgICAgICAgIH0KKworICAgICAgICBDVWZ1bmN0aW9uIGN1ZGFfZnVuYzsKKyAg ICAgICAgdWNoYXIyIGZpbGxfdmFsX3V2OworICAgICAgICB1aW50OF90IGZpbGxfdmFsX3BsYW5h cjsKKyAgICAgICAgdm9pZCAqcF9maWxsX3ZhbDsKKworICAgICAgICBpZiAoaW5fZnJhbWVzX2N0 eC0+c3dfZm9ybWF0ID09IEFWX1BJWF9GTVRfTlYxMiAmJiBwbGFuZSA9PSAxKSB7CisgICAgICAg ICAgICBjdWRhX2Z1bmMgPSBzLT5jdV9mdW5jX3V2OworICAgICAgICAgICAgZmlsbF92YWxfdXYu eCA9IHMtPnBhcnNlZF9jb2xvclsxXTsKKyAgICAgICAgICAgIGZpbGxfdmFsX3V2LnkgPSBzLT5w YXJzZWRfY29sb3JbMl07CisgICAgICAgICAgICBwX2ZpbGxfdmFsID0gJmZpbGxfdmFsX3V2Owor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3VkYV9mdW5jID0gcy0+Y3VfZnVuY19wbGFu YXI7CisgICAgICAgICAgICBmaWxsX3ZhbF9wbGFuYXIgPSBzLT5wYXJzZWRfY29sb3JbcGxhbmVd OworICAgICAgICAgICAgcF9maWxsX3ZhbCA9ICZmaWxsX3ZhbF9wbGFuYXI7CisgICAgICAgIH0K KworICAgICAgICBDVWRldmljZXB0ciBkX2RzdCA9IChDVWRldmljZXB0cilvdXQtPmRhdGFbcGxh bmVdOworICAgICAgICBDVWRldmljZXB0ciBkX3NyYyA9IChDVWRldmljZXB0cilpbi0+ZGF0YVtw bGFuZV07CisKKyAgICAgICAgaW50IHNyY19saW5lc2l6ZSA9IGluLT5saW5lc2l6ZVtwbGFuZV07 CisKKyAgICAgICAgdm9pZCAqa2VybmVsX2FyZ3NbXSA9IHsKKyAgICAgICAgICAgICZkX2RzdCwg Jm91dC0+bGluZXNpemVbcGxhbmVdLCAmZHN0X3csICZkc3RfaCwKKyAgICAgICAgICAgICZkX3Ny YywgJnNyY19saW5lc2l6ZSwgJnNyY193LCAmc3JjX2gsCisgICAgICAgICAgICAmeF9wbGFuZV9v ZmZzZXQsICZ5X3BsYW5lX29mZnNldCwgcF9maWxsX3ZhbAorICAgICAgICB9OworCisgICAgICAg IHVuc2lnbmVkIGludCBncmlkX3ggPSBESVZfVVAoZHN0X3csIEJMT0NLX1gpOworICAgICAgICB1 bnNpZ25lZCBpbnQgZ3JpZF95ID0gRElWX1VQKGRzdF9oLCBCTE9DS19ZKTsKKworICAgICAgICBy ZXQgPSBDSEVDS19DVShjdS0+Y3VMYXVuY2hLZXJuZWwoY3VkYV9mdW5jLCBncmlkX3gsIGdyaWRf eSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJMT0NLX1gs IEJMT0NLX1ksIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LCBzLT5od2N0eC0+c3RyZWFtLCBrZXJuZWxfYXJncywgTlVMTCkpOworCisgICAgICAgIGlmIChy ZXQgPCAwKSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQg dG8gbGF1bmNoIGtlcm5lbCBmb3IgcGxhbmUgJWRcbiIsIHBsYW5lKTsKKyAgICAgICAgICAgIHJl dHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBjdWRhX3BhZF9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFWRnJhbWUg KmluKQoreworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gaW5saW5rLT5kc3Q7CisgICAgQ1VE QVBhZENvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0g Y3R4LT5vdXRwdXRzWzBdOworCisgICAgRmlsdGVyTGluayAqb3V0bCA9IGZmX2ZpbHRlcl9saW5r KG91dGxpbmspOworCisgICAgQVZIV0ZyYW1lc0NvbnRleHQgKm91dF9mcmFtZXNfY3R4ID0gKEFW SFdGcmFtZXNDb250ZXh0ICopb3V0bC0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsKKyAgICBBVkNVREFE ZXZpY2VDb250ZXh0ICpkZXZpY2VfaHdjdHggPSBvdXRfZnJhbWVzX2N0eC0+ZGV2aWNlX2N0eC0+ aHdjdHg7CisKKyAgICBpbnQgcmV0OworCisgICAgaWYgKHMtPmV2YWxfbW9kZSA9PSBFVkFMX01P REVfRlJBTUUpIHsKKyAgICAgICAgcy0+aW5fdyAgID0gaW4tPndpZHRoOworICAgICAgICBzLT5p bl9oICAgPSBpbi0+aGVpZ2h0OworICAgICAgICBzLT5hc3BlY3QgPSBpbi0+c2FtcGxlX2FzcGVj dF9yYXRpbzsKKworICAgICAgICByZXQgPSBldmFsX2V4cHIoY3R4KTsKKyAgICAgICAgaWYgKHJl dCA8IDApIHsKKyAgICAgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICAgICAgICAgIHJl dHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIGlmIChzLT54ID09IDAgJiYgcy0+ eSA9PSAwICYmCisgICAgICAgIHMtPncgPT0gaW4tPndpZHRoICYmIHMtPmggPT0gaW4tPmhlaWdo dCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsICJObyBib3JkZXIuIFBhc3Np bmcgdGhlIGZyYW1lIHVubW9kaWZpZWQuXG4iKTsKKyAgICAgICAgcy0+bGFzdF9vdXRfdyA9IHMt Pnc7CisgICAgICAgIHMtPmxhc3Rfb3V0X2ggPSBzLT5oOworICAgICAgICByZXR1cm4gZmZfZmls dGVyX2ZyYW1lKG91dGxpbmssIGluKTsKKyAgICB9CisKKworICAgIGlmIChzLT53ICE9IHMtPmxh c3Rfb3V0X3cgfHwgcy0+aCAhPSBzLT5sYXN0X291dF9oKSB7CisKKyAgICAgICAgYXZfYnVmZmVy X3VucmVmKCZzLT5mcmFtZXNfY3R4KTsKKworICAgICAgICByZXQgPSBjdWRhX3BhZF9hbGxvY19v dXRfZnJhbWVzX2N0eChjdHgsICZzLT5mcmFtZXNfY3R4LCBzLT53LCBzLT5oKTsKKyAgICAgICAg aWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgIGF2X2J1ZmZl cl91bnJlZigmb3V0bC0+aHdfZnJhbWVzX2N0eCk7CisgICAgICAgIG91dGwtPmh3X2ZyYW1lc19j dHggPSBhdl9idWZmZXJfcmVmKHMtPmZyYW1lc19jdHgpOworICAgICAgICBpZiAoIW91dGwtPmh3 X2ZyYW1lc19jdHgpIHsKKyAgICAgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICAgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBvdXRwdXQg ZnJhbWUgY29udGV4dC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK KyAgICAgICAgfQorICAgICAgICBvdXRsaW5rLT53ID0gcy0+dzsKKyAgICAgICAgb3V0bGluay0+ aCA9IHMtPmg7CisKKyAgICAgICAgcy0+bGFzdF9vdXRfdyA9IHMtPnc7CisgICAgICAgIHMtPmxh c3Rfb3V0X2ggPSBzLT5oOworICAgIH0KKworICAgIEFWRnJhbWUgKm91dCA9IGF2X2ZyYW1lX2Fs bG9jKCk7CisgICAgaWYgKCFvdXQpIHsKKyAgICAgICAgYXZfZnJhbWVfZnJlZSgmaW4pOworICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gYWxsb2NhdGUgb3V0cHV0 IEFWRnJhbWUuXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9Cisg ICAgcmV0ID0gYXZfaHdmcmFtZV9nZXRfYnVmZmVyKG91dGwtPmh3X2ZyYW1lc19jdHgsIG91dCwg MCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIGdldCBvdXRwdXQgYnVmZmVyOiAlc1xuIiwKKyAgICAgICAgICAgICAgIGF2 X2VycjJzdHIocmV0KSk7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7CisgICAgICAgIGF2 X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBDVWNv bnRleHQgZHVtbXk7CisgICAgcmV0ID0gQ0hFQ0tfQ1UoZGV2aWNlX2h3Y3R4LT5pbnRlcm5hbC0+ Y3VkYV9kbC0+Y3VDdHhQdXNoQ3VycmVudCgKKyAgICAgICAgZGV2aWNlX2h3Y3R4LT5jdWRhX2N0 eCkpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7Cisg ICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisK KyAgICByZXQgPSBjdWRhX3BhZF9wYWQoY3R4LCBvdXQsIGluKTsKKworICAgIENIRUNLX0NVKGRl dmljZV9od2N0eC0+aW50ZXJuYWwtPmN1ZGFfZGwtPmN1Q3R4UG9wQ3VycmVudCgmZHVtbXkpKTsK KworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7CisgICAg ICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAg ICBhdl9mcmFtZV9jb3B5X3Byb3BzKG91dCwgaW4pOworICAgIG91dC0+d2lkdGggID0gcy0+dzsK KyAgICBvdXQtPmhlaWdodCA9IHMtPmg7CisKKworICAgIGF2X3JlZHVjZSgmb3V0LT5zYW1wbGVf YXNwZWN0X3JhdGlvLm51bSwgJm91dC0+c2FtcGxlX2FzcGVjdF9yYXRpby5kZW4sCisgICAgICAg ICAgICAgIChpbnQ2NF90KWluLT5zYW1wbGVfYXNwZWN0X3JhdGlvLm51bSAqIG91dC0+aGVpZ2h0 ICogaW4tPndpZHRoLAorICAgICAgICAgICAgICAoaW50NjRfdClpbi0+c2FtcGxlX2FzcGVjdF9y YXRpby5kZW4gKiBvdXQtPndpZHRoICogaW4tPmhlaWdodCwKKyAgICAgICAgICAgICAgSU5UX01B WCk7CisKKyAgICBhdl9mcmFtZV9mcmVlKCZpbik7CisgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFt ZShvdXRsaW5rLCBvdXQpOworfQorCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihDVURBUGFk Q29udGV4dCwgeCkKKyNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSB8 IEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNKQorCitzdGF0aWMgY29uc3QgQVZPcHRpb24gY3VkYV9w YWRfb3B0aW9uc1tdID0geworICAgIHsgIndpZHRoIiwgICJzZXQgdGhlIHBhZCBhcmVhIHdpZHRo IGV4cHJlc3Npb24iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGU0VUKHdfZXhwciks ICAgICBBVl9PUFRfVFlQRV9TVFJJTkcsICAgey5zdHIgPSAiaXcifSwgICAgICAgMCwgMCwgICAg ICAgIEZMQUdTIH0sCisgICAgeyAidyIsICAgICAgInNldCB0aGUgcGFkIGFyZWEgd2lkdGggZXhw cmVzc2lvbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRkZTRVQod19leHByKSwgICAg IEFWX09QVF9UWVBFX1NUUklORywgICB7LnN0ciA9ICJpdyJ9LCAgICAgICAwLCAwLCAgICAgICAg RkxBR1MgfSwKKyAgICB7ICJoZWlnaHQiLCAic2V0IHRoZSBwYWQgYXJlYSBoZWlnaHQgZXhwcmVz c2lvbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRlNFVChoX2V4cHIpLCAgICAgQVZf T1BUX1RZUEVfU1RSSU5HLCAgIHsuc3RyID0gImloIn0sICAgICAgIDAsIDAsICAgICAgICBGTEFH UyB9LAorICAgIHsgImgiLCAgICAgICJzZXQgdGhlIHBhZCBhcmVhIGhlaWdodCBleHByZXNzaW9u IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGU0VUKGhfZXhwciksICAgICBBVl9PUFRf VFlQRV9TVFJJTkcsICAgey5zdHIgPSAiaWgifSwgICAgICAgMCwgMCwgICAgICAgIEZMQUdTIH0s CisgICAgeyAieCIsICAgICAgInNldCB0aGUgeCBvZmZzZXQgZXhwcmVzc2lvbiBmb3IgdGhlIGlu cHV0IGltYWdlIHBvc2l0aW9uIiwgICAgICBPRkZTRVQoeF9leHByKSwgICAgIEFWX09QVF9UWVBF X1NUUklORywgICB7LnN0ciA9ICIwIn0sICAgICAgICAwLCAwLCAgICAgICAgRkxBR1MgfSwKKyAg ICB7ICJ5IiwgICAgICAic2V0IHRoZSB5IG9mZnNldCBleHByZXNzaW9uIGZvciB0aGUgaW5wdXQg aW1hZ2UgcG9zaXRpb24iLCAgICAgIE9GRlNFVCh5X2V4cHIpLCAgICAgQVZfT1BUX1RZUEVfU1RS SU5HLCAgIHsuc3RyID0gIjAifSwgICAgICAgIDAsIDAsICAgICAgICBGTEFHUyB9LAorICAgIHsg ImNvbG9yIiwgICJzZXQgdGhlIGNvbG9yIG9mIHRoZSBwYWRkZWQgYXJlYSBib3JkZXIiLCAgICAg ICAgICAgICAgICAgICAgICAgT0ZGU0VUKHJnYmFfY29sb3IpLCBBVl9PUFRfVFlQRV9DT0xPUiwg ICAgey5zdHIgPSAiYmxhY2sifSwgICAgLmZsYWdzID0gICAgICBGTEFHUyB9LAorICAgIHsgImV2 YWwiLCAgICJzcGVjaWZ5IHdoZW4gdG8gZXZhbHVhdGUgZXhwcmVzc2lvbnMiLCAgICAgICAgICAg ICAgICAgICAgICAgICAgT0ZGU0VUKGV2YWxfbW9kZSksICBBVl9PUFRfVFlQRV9JTlQsICAgICAg ey5pNjQgPSBFVkFMX01PREVfSU5JVH0sIDAsIEVWQUxfTU9ERV9OQi0xLCBGTEFHUywgLnVuaXQg PSAiZXZhbCIgfSwKKyAgICAgICAgIHsgImluaXQiLCAgImV2YWwgZXhwcmVzc2lvbnMgb25jZSBk dXJpbmcgaW5pdGlhbGl6YXRpb24iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9RVZBTF9N T0RFX0lOSVR9LCAgLmZsYWdzID0gRkxBR1MsIC51bml0ID0gImV2YWwiIH0sCisgICAgICAgICB7 ICJmcmFtZSIsICJldmFsIGV4cHJlc3Npb25zIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgcGVy LWZyYW1lIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PUVWQUxfTU9ERV9GUkFNRX0sIC5m bGFncyA9IEZMQUdTLCAudW5pdCA9ICJldmFsIiB9LAorICAgIHsgImFzcGVjdCIsICJwYWQgdG8g Zml0IGFuIGFzcGVjdCBpbnN0ZWFkIG9mIGEgcmVzb2x1dGlvbiIsICAgICAgICAgICAgICAgICAg T0ZGU0VUKGFzcGVjdCksICAgICBBVl9PUFRfVFlQRV9SQVRJT05BTCwgey5kYmwgPSAwfSwgICAg ICAgIDAsIERCTF9NQVgsICAgIEZMQUdTIH0sCisgICAgeyBOVUxMIH0KK307CisKK3N0YXRpYyBj b25zdCBBVkNsYXNzIGN1ZGFfcGFkX2NsYXNzID0geworICAgIC5jbGFzc19uYW1lID0gInBhZF9j dWRhIiwKKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAorICAgIC5vcHRp b24gICAgID0gY3VkYV9wYWRfb3B0aW9ucywKKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9W RVJTSU9OX0lOVCwKK307CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBjdWRhX3BhZF9pbnB1 dHNbXSA9IHt7CisgICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAgIC50 eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5maWx0ZXJfZnJhbWUg PSBjdWRhX3BhZF9maWx0ZXJfZnJhbWUKK319OworCitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQg Y3VkYV9wYWRfb3V0cHV0c1tdID0ge3sKKyAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0 IiwKKyAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAgICAg LmNvbmZpZ19wcm9wcyA9IGN1ZGFfcGFkX2NvbmZpZ19wcm9wcywKK319OworCitjb25zdCBGRkZp bHRlciBmZl92Zl9wYWRfY3VkYSA9IHsKKyAgICAucC5uYW1lICAgICAgICAgPSAicGFkX2N1ZGEi LAorICAgIC5wLmRlc2NyaXB0aW9uICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJDVURBLWJhc2Vk IEdQVSBwYWRkaW5nIGZpbHRlciIpLAorICAgIC5pbml0ICAgICAgICAgICA9IGN1ZGFfcGFkX2lu aXQsCisgICAgLnVuaW5pdCAgICAgICAgID0gY3VkYV9wYWRfdW5pbml0LAorCisgICAgLnAucHJp dl9jbGFzcyAgID0gJmN1ZGFfcGFkX2NsYXNzLAorCisgICAgRklMVEVSX0lOUFVUUyhjdWRhX3Bh ZF9pbnB1dHMpLAorICAgIEZJTFRFUl9PVVRQVVRTKGN1ZGFfcGFkX291dHB1dHMpLAorCisgICAg RklMVEVSX1NJTkdMRV9QSVhGTVQoQVZfUElYX0ZNVF9DVURBKSwKKworICAgIC5wcml2X3NpemUg ICAgICA9IHNpemVvZihDVURBUGFkQ29udGV4dCksCisgICAgLmZsYWdzX2ludGVybmFsID0gRkZf RklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdmZfcGFkX2N1ZGEuY3UgYi9saWJhdmZpbHRlci92 Zl9wYWRfY3VkYS5jdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lNjhh ZWFmNTAxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIvdmZfcGFkX2N1ZGEuY3UKQEAg LTAsMCArMSw3NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisg KiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCitf X2RldmljZV9fIGlubGluZSBpbnQgZ2V0X3R5cGVkX3BpdGNoKGludCBieXRlX3BpdGNoLCBjb25z dCB1bnNpZ25lZCBjaGFyKikKK3sKKyAgICByZXR1cm4gYnl0ZV9waXRjaDsKK30KKworCitfX2Rl dmljZV9fIGlubGluZSBpbnQgZ2V0X3R5cGVkX3BpdGNoKGludCBieXRlX3BpdGNoLCBjb25zdCB1 Y2hhcjIqKQoreworICAgIHJldHVybiBieXRlX3BpdGNoIC8gc2l6ZW9mKHVjaGFyMik7Cit9CisK KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitfX2RldmljZV9fIHZvaWQgcGFkX2ltcGwoVCogZHN0 LCBpbnQgZHN0X3BpdGNoLCBpbnQgZHN0X3csIGludCBkc3RfaCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBUKiBzcmMsIGludCBzcmNfcGl0Y2gsIGludCBzcmNfdywgaW50IHNyY19o LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb2lfeCwgaW50IHJvaV95LCBUIGZpbGxf dmFsKQoreworICAgIGNvbnN0IGludCB4ID0gYmxvY2tJZHgueCAqIGJsb2NrRGltLnggKyB0aHJl YWRJZHgueDsKKyAgICBjb25zdCBpbnQgeSA9IGJsb2NrSWR4LnkgKiBibG9ja0RpbS55ICsgdGhy ZWFkSWR4Lnk7CisKKyAgICBpZiAoeCA+PSBkc3RfdyB8fCB5ID49IGRzdF9oKSB7CisgICAgICAg IHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBpbnQgZmluYWxfZHN0X3BpdGNoID0gZ2V0X3R5 cGVkX3BpdGNoKGRzdF9waXRjaCwgZHN0KTsKKyAgICBjb25zdCBpbnQgZmluYWxfc3JjX3BpdGNo ID0gZ2V0X3R5cGVkX3BpdGNoKHNyY19waXRjaCwgc3JjKTsKKworICAgIGlmICh4ID49IHJvaV94 ICYmIHggPCAocm9pX3ggKyBzcmNfdykgJiYgeSA+PSByb2lfeSAmJiB5IDwgKHJvaV95ICsgc3Jj X2gpKSB7CisgICAgICAgIGNvbnN0IGludCBzcmNfeCA9IHggLSByb2lfeDsKKyAgICAgICAgY29u c3QgaW50IHNyY195ID0geSAtIHJvaV95OworICAgICAgICBkc3RbeSAqIGZpbmFsX2RzdF9waXRj aCArIHhdID0gc3JjW3NyY195ICogZmluYWxfc3JjX3BpdGNoICsgc3JjX3hdOworICAgIH0gZWxz ZSB7CisgICAgICAgIGRzdFt5ICogZmluYWxfZHN0X3BpdGNoICsgeF0gPSBmaWxsX3ZhbDsKKyAg ICB9Cit9CisKKworZXh0ZXJuICJDIiB7CisKK19fZ2xvYmFsX18gdm9pZCBwYWRfcGxhbmFyX2N1 ZGEodW5zaWduZWQgY2hhciogZHN0LCBpbnQgZHN0X3BpdGNoLCBpbnQgZHN0X3csIGludCBkc3Rf aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog c3JjLCBpbnQgc3JjX3BpdGNoLCBpbnQgc3JjX3csIGludCBzcmNfaCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHJvaV94LCBpbnQgcm9pX3ksIHVuc2lnbmVkIGNoYXIgZmls bF92YWwpCit7CisgICAgcGFkX2ltcGw8dW5zaWduZWQgY2hhcj4oZHN0LCBkc3RfcGl0Y2gsIGRz dF93LCBkc3RfaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMsIHNyY19waXRjaCwg c3JjX3csIHNyY19oLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvaV94LCByb2lfeSwg ZmlsbF92YWwpOworfQorCitfX2dsb2JhbF9fIHZvaWQgcGFkX3V2X2N1ZGEodWNoYXIyKiBkc3Qs IGludCBkc3RfcGl0Y2gsIGludCBkc3RfdywgaW50IGRzdF9oLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVjaGFyMiogc3JjLCBpbnQgc3JjX3BpdGNoLCBpbnQgc3JjX3csIGlu dCBzcmNfaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm9pX3gsIGludCByb2lf eSwgdWNoYXIyIGZpbGxfdmFsKQoreworICAgIHBhZF9pbXBsPHVjaGFyMj4oZHN0LCBkc3RfcGl0 Y2gsIGRzdF93LCBkc3RfaCwKKyAgICAgICAgICAgICAgICAgICAgIHNyYywgc3JjX3BpdGNoLCBz cmNfdywgc3JjX2gsCisgICAgICAgICAgICAgICAgICAgICByb2lfeCwgcm9pX3ksIGZpbGxfdmFs KTsKK30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKLS0gCjIuMzQuMQoK --0000000000005a0fa20637f7d4bd Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --0000000000005a0fa20637f7d4bd--