From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 703B544E61 for ; Sat, 26 Nov 2022 11:01:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6434C68B8F3; Sat, 26 Nov 2022 13:01:47 +0200 (EET) Received: from mail-vs1-f49.google.com (mail-vs1-f49.google.com [209.85.217.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B060C68B52B for ; Sat, 26 Nov 2022 13:01:40 +0200 (EET) Received: by mail-vs1-f49.google.com with SMTP id m4so6320801vsc.6 for ; Sat, 26 Nov 2022 03:01:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:references:in-reply-to:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=4XLw/OB4rYpLb2wp55LmzpHkL63QlWuBbuUMYBObJ/I=; b=dpSX73LacpKJoW9DpkURDQCl+vd9gQ42bD4po8Yb+uCDkjw1sDCo809JtrkOAZ12Rr rrUtPCtfJTV0DAqq9iZQ6zGYUuyZwLK3Fc2GGJPBDtUuAPCSuCo7meurmAZWnwQgAQOr MG4npD1csLIxhd4zwbEXTXZlBc7TtuCoFXffGAEaoFqrA06+VeeIE8CJaQzcpe/wmV4O ltPKE4HD5e34maDkxbetBysaH+wXwvkrM2eQfUUgTTENGMyou76PBKpQVzpZUpT3r6bU ZnHKhF0EPH23SuhVFUpnsdwfKq3tNrsPLV7nFc6MPOnW5/5iXnPUik4Iznst42ZBdDZR A+qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:references:in-reply-to:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=4XLw/OB4rYpLb2wp55LmzpHkL63QlWuBbuUMYBObJ/I=; b=3oix6LT86IxCZDpfnxTo8nIGcIw+rcXH/WBzE+opTvEWsGGZjXAJSOL1GU5J+MobwF 7CuEuWMTxht/DYqPBuTUYfZlHZ7OsOgzecrAd3uQGahSqbf5/XSvOJPKrFSacBOXNs2P nGwZp2lUAReS2UOF4Q19EZiCw8CHW1Ud0/rr5ZZcFoYjrQJb0hEi99zQha3+bWvMmQRW rJPvZ4hizDbju1EUuDWy3GSXk/3DnETlqvz+TS4QGtXmi1ZgdYhPuJo9fKm/jQlijllq HtHWnN0ZsDx6iwB+1n5nod8bdcDnhAcjJdXhoKGYQBhh6+IDPdP+Ru/5w0U4jKV8H1DH XFUw== X-Gm-Message-State: ANoB5pl5jVV5/hc5CXTvKwWYQilzohMGmvwPiZL7S1jn+jrQ4cU6EY4v 6jubIDPz5p3tnmU06n3W6ZCWkTdgoDtjk5ATH+7q5Lcq X-Google-Smtp-Source: AA0mqf5j010lEvIbSJ0GED2wnWrmaf28SoEeEOp8fippNhrCXghhtZVgyXYiuV7n5XEivRyv3bwQWWhJyPXspYze5a0= X-Received: by 2002:a05:6102:3590:b0:3aa:eee:5bc9 with SMTP id h16-20020a056102359000b003aa0eee5bc9mr13386887vsu.24.1669460498500; Sat, 26 Nov 2022 03:01:38 -0800 (PST) MIME-Version: 1.0 Received: by 2002:a05:612c:2428:b0:32a:5eaa:92e4 with HTTP; Sat, 26 Nov 2022 03:01:36 -0800 (PST) In-Reply-To: References: From: Paul B Mahol Date: Sat, 26 Nov 2022 12:01:36 +0100 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="000000000000faf3d505ee5d8fc0" Subject: Re: [FFmpeg-devel] [PATCH] avfilter: add showcwt multimedia 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: --000000000000faf3d505ee5d8fc0 Content-Type: text/plain; charset="UTF-8" On 11/25/22, Paul B Mahol wrote: > Hello, > > Patch attached. > Improved patch attached. Added slide & direction options. --000000000000faf3d505ee5d8fc0 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-avfilter-add-showcwt-multimedia-filter.patch" Content-Disposition: attachment; filename="0001-avfilter-add-showcwt-multimedia-filter.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 RnJvbSBjZWVjYzE1MzdiOTZmNTYzOWI5OGI0OTBjZDA3YTBmMGExODQzOWMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEIgTWFob2wgPG9uZW1kYUBnbWFpbC5jb20+CkRhdGU6 IFNhdCwgMTkgTm92IDIwMjIgMTk6MDE6MjMgKzAxMDAKU3ViamVjdDogW1BBVENIXSBhdmZpbHRl cjogYWRkIHNob3djd3QgbXVsdGltZWRpYSBmaWx0ZXIKClNpZ25lZC1vZmYtYnk6IFBhdWwgQiBN YWhvbCA8b25lbWRhQGdtYWlsLmNvbT4KLS0tCiBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgIHwg IDg3ICsrKysrCiBsaWJhdmZpbHRlci9NYWtlZmlsZSAgICAgIHwgICAxICsKIGxpYmF2ZmlsdGVy L2FsbGZpbHRlcnMuYyAgfCAgIDEgKwogbGliYXZmaWx0ZXIvYXZmX3Nob3djd3QuYyB8IDcxOCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA4 MDcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL2F2Zl9zaG93 Y3d0LmMKCmRpZmYgLS1naXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQpp bmRleCBlY2Y4ZGZhNDdhLi45NDQ0NWNkZjkxIDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhp CisrKyBiL2RvYy9maWx0ZXJzLnRleGkKQEAgLTI5Mjc0LDYgKzI5Mjc0LDkzIEBAIGF4aXNmaWxl PW15YXhpcy5wbmc6YmFzZWZyZXE9NDA6ZW5kZnJlcT0xMDAwMAogQGVuZCBleGFtcGxlCiBAZW5k IGl0ZW1pemUKIAorQHNlY3Rpb24gc2hvd2N3dAorCitDb252ZXJ0IGlucHV0IGF1ZGlvIHRvIHZp ZGVvIG91dHB1dCByZXByZXNlbnRpbmcgZnJlcXVlbmN5IHNwZWN0cnVtCitsaW5lYXJseSBvciBs b2dhcml0aG1pY2FsbHkgdXNpbmcgQ29udGludW91cyBXYXZlbGV0IFRyYW5zZm9ybSBhbmQKK01v cmxldCB3YXZlbGV0LgorCitUaGUgZmlsdGVyIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25z OgorCitAdGFibGUgQG9wdGlvbgorQGl0ZW0gc2l6ZSwgcworU3BlY2lmeSB0aGUgdmlkZW8gc2l6 ZSBmb3IgdGhlIG91dHB1dC4gRm9yIHRoZSBzeW50YXggb2YgdGhpcyBvcHRpb24sCitjaGVjayB0 aGUgQHJlZnt2aWRlbyBzaXplIHN5bnRheCwsIlZpZGVvIHNpemUiIHNlY3Rpb24gaW4gdGhlIGZm bXBlZy11dGlscyBtYW51YWwsZmZtcGVnLXV0aWxzfS4KK0RlZmF1bHQgdmFsdWUgaXMgQGNvZGV7 NjQweDUxMn0uCisKK0BpdGVtIHJhdGUsIHIKK1NldCB0aGUgb3V0cHV0IGZyYW1lIHJhdGUuIERl ZmF1bHQgdmFsdWUgaXMgQGNvZGV7MjV9LgorCitAaXRlbSBzY2FsZQorU2V0IHRoZSBmcmVxdWVu Y3kgc2NhbGUgdXNlZC4gQ2FuIGJlIEBjb2Rle2xpbmVhcn0gb3IgQGNvZGV7bG9nfS4KK0RlZmF1 bHQgdmFsdWUgaXMgQGNvZGV7bGluZWFyfS4KKworQGl0ZW0gbWluCitTZXQgdGhlIG1pbmltdW0g ZnJlcXVlbmN5IHRoYXQgd2lsbCBiZSB1c2VkIGluIG91dHB1dC4KK0RlZmF1bHQgaXMgQGNvZGV7 MjB9IEh6LgorCitAaXRlbSBtYXgKK1NldCB0aGUgbWF4aW11bSBmcmVxdWVuY3kgdGhhdCB3aWxs IGJlIHVzZWQgaW4gb3V0cHV0LgorRGVmYXVsdCBpcyBAY29kZXsyMDAwMH0gSHouIFRoZSByZWFs IGZyZXF1ZW5jeSB1cHBlciBsaW1pdAorZGVwZW5kcyBvbiBpbnB1dCBhdWRpbydzIHNhbXBsZSBy YXRlIGFuZCBzdWNoIHdpbGwgYmUgZW5mb3JjZWQKK29uIHRoaXMgdmFsdWUgd2hlbiBpdCBpcyBz ZXQgdG8gdmFsdWUgZ3JlYXRlciB0aGFuIE55cXVpc3QgZnJlcXVlbmN5LgorCitAaXRlbSBsb2di CitTZXQgdGhlIGxvZ2FyaXRobWljIGJhc2lzIGZvciBicmlnaHRuZXNzIHN0cmVuZ3RoIHdoZW4K K21hcHBpbmcgY2FsY3VsYXRlZCBtYWduaXR1ZGUgdmFsdWVzIHRvIHBpeGVsIHZhbHVlcy4KK0Fs bG93ZWQgcmFuZ2UgaXMgZnJvbSBAY29kZXswfSB0byBAY29kZXsxfS4KK0RlZmF1bHQgdmFsdWUg aXMgQGNvZGV7MC4wMDAxfS4KKworQGl0ZW0gZGV2aWF0aW9uCitTZXQgdGhlIGZyZXF1ZW5jeSBk ZXZpYXRpb24uCitMb3dlciB2YWx1ZXMgdGhhbiBAY29kZXsxfSBhcmUgbW9yZSBmcmVxdWVuY3kg b3JpZW50ZWQsCit3aGlsZSBoaWdoZXIgdmFsdWVzIHRoYW4gQGNvZGV7MX0gYXJlIG1vcmUgdGlt ZSBvcmllbnRlZC4KK0FsbG93ZWQgcmFuZ2UgaXMgZnJvbSBAY29kZXswfSB0byBAY29kZXsxMH0u CitEZWZhdWx0IHZhbHVlIGlzIEBjb2RlezF9LgorCitAaXRlbSBwcHMKK1NldCB0aGUgbnVtYmVy IG9mIHBpeGVsIG91dHB1dCBwZXIgZWFjaCBzZWNvbmQgaW4gb25lIHJvdy4KK0FsbG93ZWQgcmFu Z2UgaXMgZnJvbSBAY29kZXsxfSB0byBAY29kZXsxMDI0fS4KK0RlZmF1bHQgdmFsdWUgaXMgQGNv ZGV7NjR9LgorCitAaXRlbSBtb2RlCitTZXQgdGhlIG91dHB1dCB2aXN1YWwgbW9kZS4gQWxsb3dl ZCB2YWx1ZXMgYXJlOgorCitAdGFibGUgQG9wdGlvbgorQGl0ZW0gbWFnbml0dWRlCitTaG93IG1h Z25pdHVkZS4KK0BpdGVtIHBoYXNlCitTaG93IG9ubHkgcGhhc2UuCitAaXRlbSBtYWdwaGFzZQor U2hvdyBjb21iaW5hdGlvbiBvZiBtYWduaXR1ZGUgYW5kIHBoYXNlLgorTWFnbml0dWRlIGlzIG1h cHBlZCB0byBicmlnaHRuZXNzIGFuZCBwaGFzZSB0byBjb2xvci4KK0BlbmQgdGFibGUKKworRGVm YXVsdCB2YWx1ZSBpcyBAY29kZXttYWduaXR1ZGV9LgorCitAaXRlbSBzbGlkZQorU2V0IHRoZSBv dXRwdXQgc2xpZGUgbWV0aG9kLiBBbGxvd2VkIHZhbHVlcyBhcmU6CisKK0B0YWJsZSBAb3B0aW9u CitAaXRlbSByZXBsYWNlCitAaXRlbSBzY3JvbGwKK0BlbmQgdGFibGUKKworQGl0ZW0gZGlyZWN0 aW9uCitTZXQgdGhlIGRpcmVjdGlvbiBtZXRob2QgZm9yIG91dHB1dCBzbGlkZSBtZXRob2QuIEFs bG93ZWQgdmFsdWVzIGFyZToKKworQHRhYmxlIEBvcHRpb24KK0BpdGVtIGxyCitEaXJlY3Rpb24g ZnJvbSBsZWZ0IHRvIHJpZ2h0LgorQGl0ZW0gcmwKK0RpcmVjdGlvbiBmcm9tIHJpZ2h0IHRvIGxl ZnQuCitAaXRlbSB1ZAorRGlyZWN0aW9uIGZyb20gdXAgdG8gZG93bi4KK0BpdGVtIGR1CitEaXJl Y3Rpb24gZnJvbSBkb3duIHRvIHVwLgorQGVuZCB0YWJsZQorQGVuZCB0YWJsZQorCiBAc2VjdGlv biBzaG93ZnJlcXMKIAogQ29udmVydCBpbnB1dCBhdWRpbyB0byB2aWRlbyBvdXRwdXQgcmVwcmVz ZW50aW5nIHRoZSBhdWRpbyBwb3dlciBzcGVjdHJ1bS4KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVy L01ha2VmaWxlIGIvbGliYXZmaWx0ZXIvTWFrZWZpbGUKaW5kZXggNjZjNzU0ZjFmNS4uMjc5MWI2 YTk1MCAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbGliYXZmaWx0ZXIv TWFrZWZpbGUKQEAgLTU5NSw2ICs1OTUsNyBAQCBPQkpTLSQoQ09ORklHX0FQSEFTRU1FVEVSX0ZJ TFRFUikgICAgICAgICAgICArPSBhdmZfYXBoYXNlbWV0ZXIubwogT0JKUy0kKENPTkZJR19BVkVD VE9SU0NPUEVfRklMVEVSKSAgICAgICAgICAgKz0gYXZmX2F2ZWN0b3JzY29wZS5vCiBPQkpTLSQo Q09ORklHX0NPTkNBVF9GSUxURVIpICAgICAgICAgICAgICAgICArPSBhdmZfY29uY2F0Lm8KIE9C SlMtJChDT05GSUdfU0hPV0NRVF9GSUxURVIpICAgICAgICAgICAgICAgICs9IGF2Zl9zaG93Y3F0 Lm8gbHN3c3V0aWxzLm8gbGF2ZnV0aWxzLm8KK09CSlMtJChDT05GSUdfU0hPV0NXVF9GSUxURVIp ICAgICAgICAgICAgICAgICs9IGF2Zl9zaG93Y3d0Lm8KIE9CSlMtJChDT05GSUdfU0hPV0ZSRVFT X0ZJTFRFUikgICAgICAgICAgICAgICs9IGF2Zl9zaG93ZnJlcXMubwogT0JKUy0kKENPTkZJR19T SE9XU1BBVElBTF9GSUxURVIpICAgICAgICAgICAgKz0gYXZmX3Nob3dzcGF0aWFsLm8KIE9CSlMt JChDT05GSUdfU0hPV1NQRUNUUlVNX0ZJTFRFUikgICAgICAgICAgICs9IGF2Zl9zaG93c3BlY3Ry dW0ubwpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jIGIvbGliYXZmaWx0ZXIv YWxsZmlsdGVycy5jCmluZGV4IDQ5MDk3MzIwMDIuLjNmZjIwZTc2Y2UgMTAwNjQ0Ci0tLSBhL2xp YmF2ZmlsdGVyL2FsbGZpbHRlcnMuYworKysgYi9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKQEAg LTU2MCw2ICs1NjAsNyBAQCBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfYXZmX2FwaGFzZW1ldGVy OwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX2F2Zl9hdmVjdG9yc2NvcGU7CiBleHRlcm4gY29u c3QgQVZGaWx0ZXIgZmZfYXZmX2NvbmNhdDsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl9hdmZf c2hvd2NxdDsKK2V4dGVybiBjb25zdCBBVkZpbHRlciBmZl9hdmZfc2hvd2N3dDsKIGV4dGVybiBj b25zdCBBVkZpbHRlciBmZl9hdmZfc2hvd2ZyZXFzOwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZm X2F2Zl9zaG93c3BhdGlhbDsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl9hdmZfc2hvd3NwZWN0 cnVtOwpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvYXZmX3Nob3djd3QuYyBiL2xpYmF2ZmlsdGVy L2F2Zl9zaG93Y3d0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMmIx ODM4MzE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL2F2Zl9zaG93Y3d0LmMKQEAg LTAsMCArMSw3MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgUGF1bCBCIE1haG9sCisg KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor ICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG bG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxmbG9hdC5o PgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImxpYmF2dXRpbC90eC5oIgorI2luY2x1 ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5o IgorI2luY2x1ZGUgImxpYmF2dXRpbC9jaGFubmVsX2xheW91dC5oIgorI2luY2x1ZGUgImxpYmF2 dXRpbC9jcHUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCisjaW5jbHVkZSAibGliYXZ1 dGlsL3BhcnNldXRpbHMuaCIKKyNpbmNsdWRlICJhdWRpby5oIgorI2luY2x1ZGUgInZpZGVvLmgi CisjaW5jbHVkZSAiYXZmaWx0ZXIuaCIKKyNpbmNsdWRlICJmaWx0ZXJzLmgiCisjaW5jbHVkZSAi aW50ZXJuYWwuaCIKKworZW51bSBEaXJlY3Rpb25Nb2RlIHsKKyAgICBESVJFQ1RJT05fTFIsCisg ICAgRElSRUNUSU9OX1JMLAorICAgIERJUkVDVElPTl9VRCwKKyAgICBESVJFQ1RJT05fRFUsCisg ICAgTkJfRElSRUNUSU9OLAorfTsKKworZW51bSBTbGlkZU1vZGUgeworICAgIFNMSURFX1JFUExB Q0UsCisgICAgU0xJREVfU0NST0xMLAorICAgIE5CX1NMSURFLAorfTsKKwordHlwZWRlZiBzdHJ1 Y3QgU2hvd0NXVENvbnRleHQgeworICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOworICAgIGludCB3 LCBoOworICAgIGludCBtb2RlOworICAgIGNoYXIgKnJhdGVfc3RyOworICAgIEFWUmF0aW9uYWwg YXV0b19mcmFtZV9yYXRlOworICAgIEFWUmF0aW9uYWwgZnJhbWVfcmF0ZTsKKyAgICBBVlRYQ29u dGV4dCAqZmZ0OworICAgIEFWVFhDb250ZXh0ICoqaWZmdDsKKyAgICBhdl90eF9mbiB0eF9mbjsK KyAgICBhdl90eF9mbiBpdHhfZm47CisgICAgaW50IGZmdF9pbl9zaXplOworICAgIGludCBmZnRf b3V0X3NpemU7CisgICAgaW50IGlmZnRfaW5fc2l6ZTsKKyAgICBpbnQgaWZmdF9vdXRfc2l6ZTsK KyAgICBpbnQgcG9zOworICAgIGludCBpbl9uYl9zYW1wbGVzOworICAgIGludDY0X3QgaW5fcHRz OworICAgIGludDY0X3Qgb2xkX3B0czsKKyAgICBmbG9hdCAqZnJlcXVlbmN5X2JhbmQ7CisgICAg QVZGcmFtZSAqa2VybmVsOworICAgIEFWRnJhbWUgKm92ZXJsYXA7CisgICAgQVZGcmFtZSAqb3V0 cGljcmVmOworICAgIEFWRnJhbWUgKmZmdF9pbjsKKyAgICBBVkZyYW1lICpmZnRfb3V0OworICAg IEFWRnJhbWUgKmlmZnRfaW47CisgICAgQVZGcmFtZSAqaWZmdF9vdXQ7CisgICAgaW50IG5iX3Ro cmVhZHM7CisgICAgaW50IG5iX2NvbnN1bWVkX3NhbXBsZXM7CisgICAgaW50IHBwczsKKyAgICBp bnQgc2xpZGU7CisgICAgaW50IGRpcmVjdGlvbjsKKyAgICBpbnQgaG9wX3NpemU7CisgICAgaW50 IGlob3Bfc2l6ZTsKKyAgICBpbnQgaWhvcF9pbmRleDsKKyAgICBpbnQgaW5wdXRfcGFkZGluZ19z aXplOworICAgIGludCBpbnB1dF9zYW1wbGVfY291bnQ7CisgICAgaW50IG91dHB1dF9wYWRkaW5n X3NpemU7CisgICAgaW50IG91dHB1dF9zYW1wbGVfY291bnQ7CisgICAgaW50IGZyZXF1ZW5jeV9i YW5kX2NvdW50OworICAgIGZsb2F0IGxvZ2FyaXRobWljX2Jhc2lzOworICAgIGludCBmcmVxdWVu Y3lfc2NhbGU7CisgICAgZmxvYXQgbWluaW11bV9mcmVxdWVuY3k7CisgICAgZmxvYXQgbWF4aW11 bV9mcmVxdWVuY3k7CisgICAgZmxvYXQgZGV2aWF0aW9uOworfSBTaG93Q1dUQ29udGV4dDsKKwor I2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoU2hvd0NXVENvbnRleHQsIHgpCisjZGVmaW5lIEZM QUdTIEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTXxBVl9PUFRfRkxBR19WSURFT19QQVJBTQor CitzdGF0aWMgY29uc3QgQVZPcHRpb24gc2hvd2N3dF9vcHRpb25zW10gPSB7CisgICAgeyAic2l6 ZSIsICJzZXQgdmlkZW8gc2l6ZSIsIE9GRlNFVCh3KSwgQVZfT1BUX1RZUEVfSU1BR0VfU0laRSwg ey5zdHIgPSAiNjQweDUxMiJ9LCAwLCAwLCBGTEFHUyB9LAorICAgIHsgInMiLCAgICAic2V0IHZp ZGVvIHNpemUiLCBPRkZTRVQodyksIEFWX09QVF9UWVBFX0lNQUdFX1NJWkUsIHsuc3RyID0gIjY0 MHg1MTIifSwgMCwgMCwgRkxBR1MgfSwKKyAgICB7ICJyYXRlIiwgInNldCB2aWRlbyByYXRlIiwg IE9GRlNFVChyYXRlX3N0ciksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIgPSAiMjUifSwgMCwg MCwgRkxBR1MgfSwKKyAgICB7ICJyIiwgICAgInNldCB2aWRlbyByYXRlIiwgIE9GRlNFVChyYXRl X3N0ciksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIgPSAiMjUifSwgMCwgMCwgRkxBR1MgfSwK KyAgICB7ICJzY2FsZSIsICJzZXQgZnJlcXVlbmN5IHNjYWxlIiwgT0ZGU0VUKGZyZXF1ZW5jeV9z Y2FsZSksIEFWX09QVF9UWVBFX0lOVCwgIHsuaTY0PTB9LCAwLCAxLCBGTEFHUywgInNjYWxlIiB9 LAorICAgIHsgICJsaW5lYXIiLCAgImxpbmVhciIsICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1Qsey5pNjQ9MH0sIDAsIDAsIEZMQUdTLCAic2NhbGUi IH0sCisgICAgeyAgImxvZyIsICAgICAibG9nYXJpdGhtaWMiLCAgICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCx7Lmk2ND0xfSwgMCwgMCwgRkxBR1MsICJzY2Fs ZSIgfSwKKyAgICB7ICJtaW4iLCAgInNldCBtaW5pbXVtIGZyZXF1ZW5jeSIsIE9GRlNFVChtaW5p bXVtX2ZyZXF1ZW5jeSksIEFWX09QVF9UWVBFX0ZMT0FULCB7LmRibCA9IDIwLn0sIDEsIDIwMDAs IEZMQUdTIH0sCisgICAgeyAibWF4IiwgICJzZXQgbWF4aW11bSBmcmVxdWVuY3kiLCBPRkZTRVQo bWF4aW11bV9mcmVxdWVuY3kpLCBBVl9PUFRfVFlQRV9GTE9BVCwgey5kYmwgPSAyMDAwMC59LCAw LCAxOTIwMDAsIEZMQUdTIH0sCisgICAgeyAibG9nYiIsICJzZXQgbG9nYXJpdGhtaWMgYmFzaXMi LCBPRkZTRVQobG9nYXJpdGhtaWNfYmFzaXMpLCBBVl9PUFRfVFlQRV9GTE9BVCwgey5kYmwgPSAw LjAwMDF9LCAwLCAxLCBGTEFHUyB9LAorICAgIHsgImRldmlhdGlvbiIsICJzZXQgZnJlcXVlbmN5 IGRldmlhdGlvbiIsIE9GRlNFVChkZXZpYXRpb24pLCBBVl9PUFRfVFlQRV9GTE9BVCwgey5kYmwg PSAxLn0sIDAsIDEwLCBGTEFHUyB9LAorICAgIHsgInBwcyIsICAic2V0IHBpeGVscyBwZXIgc2Vj b25kIiwgT0ZGU0VUKHBwcyksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQgPSA2NH0sIDEsIDEwMjQs IEZMQUdTIH0sCisgICAgeyAibW9kZSIsICJzZXQgb3V0cHV0IG1vZGUiLCBPRkZTRVQobW9kZSks IEFWX09QVF9UWVBFX0lOVCwgIHsuaTY0PTB9LCAwLCAyLCBGTEFHUywgIm1vZGUiIH0sCisgICAg eyAgIm1hZ25pdHVkZSIsICJtYWduaXR1ZGUiLCAgICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCx7 Lmk2ND0wfSwgMCwgMCwgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgICJwaGFzZSIsICAgICAicGhh c2UiLCAgICAgICAgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1Qsey5pNjQ9MX0sIDAsIDAsIEZMQUdT LCAibW9kZSIgfSwKKyAgICB7ICAibWFncGhhc2UiLCAgIm1hZ25pdHVkZStwaGFzZSIsIDAsIEFW X09QVF9UWVBFX0NPTlNULHsuaTY0PTJ9LCAwLCAwLCBGTEFHUywgIm1vZGUiIH0sCisgICAgeyAi c2xpZGUiLCAic2V0IHNsaWRlIG1vZGUiLCBPRkZTRVQoc2xpZGUpLCBBVl9PUFRfVFlQRV9JTlQs ICB7Lmk2ND0wfSwgMCwgTkJfU0xJREUtMSwgRkxBR1MsICJzbGlkZSIgfSwKKyAgICB7ICAicmVw bGFjZSIsICJyZXBsYWNlIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1Qsey5pNjQ9U0xJREVfUkVQTEFD RX0sMCwgMCwgRkxBR1MsICJzbGlkZSIgfSwKKyAgICB7ICAic2Nyb2xsIiwgICJzY3JvbGwiLCAg MCwgQVZfT1BUX1RZUEVfQ09OU1Qsey5pNjQ9U0xJREVfU0NST0xMfSwgMCwgMCwgRkxBR1MsICJz bGlkZSIgfSwKKyAgICB7ICJkaXJlY3Rpb24iLCAic2V0IGRpcmVjdGlvbiBtb2RlIiwgT0ZGU0VU KGRpcmVjdGlvbiksIEFWX09QVF9UWVBFX0lOVCwgIHsuaTY0PTB9LCAwLCBOQl9ESVJFQ1RJT04t MSwgRkxBR1MsICJkaXJlY3Rpb24iIH0sCisgICAgeyAgImxyIiwgImxlZnQgdG8gcmlnaHQiLCAw LCBBVl9PUFRfVFlQRV9DT05TVCx7Lmk2ND1ESVJFQ1RJT05fTFJ9LCAwLCAwLCBGTEFHUywgImRp cmVjdGlvbiIgfSwKKyAgICB7ICAicmwiLCAicmlnaHQgdG8gbGVmdCIsIDAsIEFWX09QVF9UWVBF X0NPTlNULHsuaTY0PURJUkVDVElPTl9STH0sIDAsIDAsIEZMQUdTLCAiZGlyZWN0aW9uIiB9LAor ICAgIHsgICJ1ZCIsICJ1cCB0byBkb3duIiwgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1Qsey5pNjQ9 RElSRUNUSU9OX1VEfSwgMCwgMCwgRkxBR1MsICJkaXJlY3Rpb24iIH0sCisgICAgeyAgImR1Iiwg ImRvd24gdG8gdXAiLCAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCx7Lmk2ND1ESVJFQ1RJT05fRFV9 LCAwLCAwLCBGTEFHUywgImRpcmVjdGlvbiIgfSwKKyAgICB7IE5VTEwgfQorfTsKKworQVZGSUxU RVJfREVGSU5FX0NMQVNTKHNob3djd3QpOworCitzdGF0aWMgYXZfY29sZCB2b2lkIHVuaW5pdChB VkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBTaG93Q1dUQ29udGV4dCAqcyA9IGN0eC0+cHJp djsKKworICAgIGF2X2ZyZWVwKCZzLT5mcmVxdWVuY3lfYmFuZCk7CisgICAgYXZfZnJhbWVfZnJl ZSgmcy0+a2VybmVsKTsKKyAgICBhdl9mcmFtZV9mcmVlKCZzLT5vdmVybGFwKTsKKyAgICBhdl9m cmFtZV9mcmVlKCZzLT5vdXRwaWNyZWYpOworICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPmZmdF9pbik7 CisgICAgYXZfZnJhbWVfZnJlZSgmcy0+ZmZ0X291dCk7CisgICAgYXZfZnJhbWVfZnJlZSgmcy0+ aWZmdF9pbik7CisgICAgYXZfZnJhbWVfZnJlZSgmcy0+aWZmdF9vdXQpOworICAgIGF2X3R4X3Vu aW5pdCgmcy0+ZmZ0KTsKKworICAgIGlmIChzLT5pZmZ0KSB7CisgICAgICAgIGZvciAoaW50IG4g PSAwOyBuIDwgcy0+bmJfdGhyZWFkczsgbisrKQorICAgICAgICAgICAgYXZfdHhfdW5pbml0KCZz LT5pZmZ0W25dKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcXVlcnlfZm9ybWF0cyhBVkZpbHRl ckNvbnRleHQgKmN0eCkKK3sKKyAgICBBVkZpbHRlckZvcm1hdHMgKmZvcm1hdHMgPSBOVUxMOwor ICAgIEFWRmlsdGVyQ2hhbm5lbExheW91dHMgKmxheW91dHMgPSBOVUxMOworICAgIEFWRmlsdGVy TGluayAqaW5saW5rID0gY3R4LT5pbnB1dHNbMF07CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5r ID0gY3R4LT5vdXRwdXRzWzBdOworICAgIHN0YXRpYyBjb25zdCBlbnVtIEFWU2FtcGxlRm9ybWF0 IHNhbXBsZV9mbXRzW10gPSB7IEFWX1NBTVBMRV9GTVRfRkxUUCwgQVZfU0FNUExFX0ZNVF9OT05F IH07CisgICAgc3RhdGljIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10c1tdID0geyBB Vl9QSVhfRk1UX1lVVjQ0NFAsIEFWX1BJWF9GTVRfWVVWSjQ0NFAsIEFWX1BJWF9GTVRfWVVWQTQ0 NFAsIEFWX1BJWF9GTVRfTk9ORSB9OworICAgIGludCByZXQ7CisKKyAgICBmb3JtYXRzID0gZmZf bWFrZV9mb3JtYXRfbGlzdChzYW1wbGVfZm10cyk7CisgICAgaWYgKChyZXQgPSBmZl9mb3JtYXRz X3JlZihmb3JtYXRzLCAmaW5saW5rLT5vdXRjZmcuZm9ybWF0cykpIDwgMCkKKyAgICAgICAgcmV0 dXJuIHJldDsKKworICAgIGxheW91dHMgPSBmZl9hbGxfY2hhbm5lbF9jb3VudHMoKTsKKyAgICBp ZiAoKHJldCA9IGZmX2NoYW5uZWxfbGF5b3V0c19yZWYobGF5b3V0cywgJmlubGluay0+b3V0Y2Zn LmNoYW5uZWxfbGF5b3V0cykpIDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGZvcm1h dHMgPSBmZl9hbGxfc2FtcGxlcmF0ZXMoKTsKKyAgICBpZiAoKHJldCA9IGZmX2Zvcm1hdHNfcmVm KGZvcm1hdHMsICZpbmxpbmstPm91dGNmZy5zYW1wbGVyYXRlcykpIDwgMCkKKyAgICAgICAgcmV0 dXJuIHJldDsKKworICAgIGZvcm1hdHMgPSBmZl9tYWtlX2Zvcm1hdF9saXN0KHBpeF9mbXRzKTsK KyAgICBpZiAoKHJldCA9IGZmX2Zvcm1hdHNfcmVmKGZvcm1hdHMsICZvdXRsaW5rLT5pbmNmZy5m b3JtYXRzKSkgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIGZyZXF1ZW5jeV9iYW5kKGZsb2F0ICpmcmVxdWVuY3lfYmFuZCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBmcmVxdWVuY3lfYmFuZF9jb3VudCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZsb2F0IGZyZXF1ZW5jeV9yYW5nZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZsb2F0IGZyZXF1ZW5jeV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgZnJlcXVlbmN5X3NjYWxlLCBmbG9hdCBkZXZpYXRpb24pCit7CisgICAgZGV2 aWF0aW9uICo9IHNxcnRmKDEuZiAvICg0LmYgKiBNX1BJKSk7IC8vIEhlaXNlbmJlcmcgR2Fib3Ig TGltaXQKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGZyZXF1ZW5jeV9iYW5kX2NvdW50OyB5Kysp IHsKKyAgICAgICAgZmxvYXQgZnJlcXVlbmN5ID0gZnJlcXVlbmN5X3JhbmdlICogKDEuZiAtIChm bG9hdCl5IC8gZnJlcXVlbmN5X2JhbmRfY291bnQpICsgZnJlcXVlbmN5X29mZnNldDsKKyAgICAg ICAgZmxvYXQgZnJlcXVlbmN5X2Rlcml2YXRpdmUgPSBmcmVxdWVuY3lfcmFuZ2UgLyBmcmVxdWVu Y3lfYmFuZF9jb3VudDsKKworICAgICAgICBpZiAoZnJlcXVlbmN5X3NjYWxlID4gMCkgeworICAg ICAgICAgICAgZnJlcXVlbmN5ID0gcG93ZigyLmYsIGZyZXF1ZW5jeSk7CisgICAgICAgICAgICBm cmVxdWVuY3lfZGVyaXZhdGl2ZSAqPSBsb2dmKDIuZikgKiBmcmVxdWVuY3k7CisgICAgICAgIH0K KworICAgICAgICBmcmVxdWVuY3lfYmFuZFt5KjIgIF0gPSBmcmVxdWVuY3k7CisgICAgICAgIGZy ZXF1ZW5jeV9iYW5kW3kqMisxXSA9IGZyZXF1ZW5jeV9kZXJpdmF0aXZlICogZGV2aWF0aW9uOwor ICAgIH0KK30KKworI2RlZmluZSBjbXVsKG9wZXJhdG9yLCBpbmRleCkgeyAgICAgICAgICAgXAor ICAgIGNvbnN0IGZsb2F0IGZmID0ga2VybmVsW2luZGV4XTsgICAgICAgXAorICAgIGlzcmNbbl0u cmUgb3BlcmF0b3IgZmYqZHN0W2luZGV4XS5yZTsgXAorICAgIGlzcmNbbl0uaW0gb3BlcmF0b3Ig ZmYqZHN0W2luZGV4XS5pbTsgXAorfQorCitzdGF0aWMgZmxvYXQgcmVtYXBfbG9nKGZsb2F0IHZh bHVlLCBmbG9hdCBsb2dfZmFjdG9yKQoreworICAgIGZsb2F0IHNpZ24gPSAoMCA8IHZhbHVlKSAt ICh2YWx1ZSA8IDApOworCisgICAgdmFsdWUgPSBsb2dmKHZhbHVlICogc2lnbikgKiBsb2dfZmFj dG9yOworCisgICAgcmV0dXJuIDEuZiAtIGF2X2NsaXBmKHZhbHVlLCAwLmYsIDEuZik7Cit9CisK K3N0YXRpYyBpbnQgcnVuX2NoYW5uZWxfY3d0X3ByZXBhcmUoQVZGaWx0ZXJDb250ZXh0ICpjdHgs IHZvaWQgKmFyZywgaW50IGNoKQoreworICAgIFNob3dDV1RDb250ZXh0ICpzID0gY3R4LT5wcml2 OworICAgIEFWRnJhbWUgKmZpbiA9IGFyZzsKKyAgICBjb25zdCBmbG9hdCAqaW5wdXQgPSAoY29u c3QgZmxvYXQgKilmaW4tPmV4dGVuZGVkX2RhdGFbY2hdOworICAgIGZsb2F0ICpvdmVybGFwID0g KGZsb2F0ICopcy0+b3ZlcmxhcC0+ZXh0ZW5kZWRfZGF0YVtjaF07CisgICAgQVZDb21wbGV4Rmxv YXQgKnNyYyA9IChBVkNvbXBsZXhGbG9hdCAqKXMtPmZmdF9pbi0+ZXh0ZW5kZWRfZGF0YVtjaF07 CisgICAgQVZDb21wbGV4RmxvYXQgKmRzdCA9IChBVkNvbXBsZXhGbG9hdCAqKXMtPmZmdF9vdXQt PmV4dGVuZGVkX2RhdGFbY2hdOworICAgIGNvbnN0IGludCBuYl9jb25zdW1lZF9zYW1wbGVzID0g cy0+bmJfY29uc3VtZWRfc2FtcGxlczsKKyAgICBjb25zdCBpbnQgaW5wdXRfcGFkZGluZ19zaXpl ID0gcy0+aW5wdXRfcGFkZGluZ19zaXplOworICAgIGNvbnN0IGludCBob3Bfc2l6ZSA9IHMtPmhv cF9zaXplOworICAgIGNvbnN0IGludCBvZmZzZXQgPSBpbnB1dF9wYWRkaW5nX3NpemUgLSBob3Bf c2l6ZTsKKworICAgIG1lbW1vdmUob3ZlcmxhcCwgJm92ZXJsYXBbaG9wX3NpemVdLCBvZmZzZXQg KiBzaXplb2YoZmxvYXQpKTsKKyAgICBtZW1jcHkoJm92ZXJsYXBbb2Zmc2V0XSwgaW5wdXQsCisg ICAgICAgICAgIGZpbi0+bmJfc2FtcGxlcyAqIHNpemVvZihmbG9hdCkpOworICAgIG1lbXNldCgm b3ZlcmxhcFtvZmZzZXQgKyBmaW4tPm5iX3NhbXBsZXNdLCAwLAorICAgICAgICAgICAoaG9wX3Np emUgLSBmaW4tPm5iX3NhbXBsZXMpICogc2l6ZW9mKGZsb2F0KSk7CisKKyAgICBmb3IgKGludCBu ID0gMDsgbiA8IG5iX2NvbnN1bWVkX3NhbXBsZXM7IG4rKykgeworICAgICAgICBzcmNbbl0ucmUg PSBvdmVybGFwW25dOworICAgICAgICBzcmNbbl0uaW0gPSAwLmY7CisgICAgfQorCisgICAgcy0+ dHhfZm4ocy0+ZmZ0LCBkc3QsIHNyYywgc2l6ZW9mKCpzcmMpKTsKKworICAgIHJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHJ1bl9jaGFubmVsX2N3dChBVkZpbHRlckNvbnRleHQgKmN0eCwgdm9p ZCAqYXJnLCBpbnQgam9ibnIsIGludCBuYl9qb2JzKQoreworICAgIFNob3dDV1RDb250ZXh0ICpz ID0gY3R4LT5wcml2OworICAgIGNvbnN0IGludCBjaCA9ICooaW50ICopYXJnOworICAgIGNvbnN0 IHB0cmRpZmZfdCB5bGluZXNpemUgPSBzLT5vdXRwaWNyZWYtPmxpbmVzaXplWzBdOworICAgIGNv bnN0IHB0cmRpZmZfdCB1bGluZXNpemUgPSBzLT5vdXRwaWNyZWYtPmxpbmVzaXplWzFdOworICAg IGNvbnN0IHB0cmRpZmZfdCB2bGluZXNpemUgPSBzLT5vdXRwaWNyZWYtPmxpbmVzaXplWzJdOwor ICAgIEFWQ29tcGxleEZsb2F0ICpkc3QgPSAoQVZDb21wbGV4RmxvYXQgKilzLT5mZnRfb3V0LT5l eHRlbmRlZF9kYXRhW2NoXTsKKyAgICBjb25zdCBpbnQgb3V0cHV0X3NhbXBsZV9jb3VudCA9IHMt Pm91dHB1dF9zYW1wbGVfY291bnQ7CisgICAgY29uc3QgZmxvYXQgbG9nX2ZhY3RvciA9IDEuZi9s b2dmKHMtPmxvZ2FyaXRobWljX2Jhc2lzKTsKKyAgICBjb25zdCBpbnQgaW5wdXRfcGFkZGluZ19z aXplID0gcy0+aW5wdXRfcGFkZGluZ19zaXplOworICAgIGNvbnN0IGludCByZXN0ID0gaW5wdXRf cGFkZGluZ19zaXplICUgb3V0cHV0X3NhbXBsZV9jb3VudDsKKyAgICBjb25zdCBpbnQgaWhvcF9z aXplID0gcy0+aWhvcF9zaXplOworICAgIGNvbnN0IGludCBpb2Zmc2V0ID0gKHMtPm91dHB1dF9w YWRkaW5nX3NpemUgLSBpaG9wX3NpemUpID4+IDE7CisgICAgY29uc3QgaW50IGNvdW50ID0gcy0+ ZnJlcXVlbmN5X2JhbmRfY291bnQ7CisgICAgY29uc3QgaW50IHN0YXJ0ID0gKGNvdW50ICogam9i bnIpIC8gbmJfam9iczsKKyAgICBjb25zdCBpbnQgZW5kID0gKGNvdW50ICogKGpvYm5yKzEpKSAv IG5iX2pvYnM7CisgICAgY29uc3QgaW50IG1vZGUgPSBzLT5tb2RlOworICAgIGNvbnN0IGludCBp aG9wX2luZGV4ID0gcy0+aWhvcF9pbmRleDsKKyAgICBjb25zdCBpbnQgaSA9IGlob3BfaW5kZXgg KyBpb2Zmc2V0OworICAgIGNvbnN0IGludCB3ID0gcy0+dzsKKworICAgIGZvciAoaW50IHkgPSBz dGFydDsgeSA8IGVuZDsgeSsrKSB7CisgICAgICAgIEFWQ29tcGxleEZsb2F0ICppc3JjID0gKEFW Q29tcGxleEZsb2F0ICopcy0+aWZmdF9pbi0+ZXh0ZW5kZWRfZGF0YVtjaCAqIGNvdW50ICsgeV07 CisgICAgICAgIEFWQ29tcGxleEZsb2F0ICppZHN0ID0gKEFWQ29tcGxleEZsb2F0ICopcy0+aWZm dF9vdXQtPmV4dGVuZGVkX2RhdGFbY2ggKiBjb3VudCArIHldOworICAgICAgICBjb25zdCBmbG9h dCAqa2VybmVsID0gKGNvbnN0IGZsb2F0ICopcy0+a2VybmVsLT5leHRlbmRlZF9kYXRhW3ldOwor ICAgICAgICB1aW50OF90ICpkc3RZLCAqZHN0VSwgKmRzdFY7CisgICAgICAgIGZsb2F0IFksIFUs IFY7CisgICAgICAgIGludCB4OworCisgICAgICAgIGlmIChpaG9wX2luZGV4ID4gMCkKKyAgICAg ICAgICAgIGdvdG8gcHV0X3BpeGVsczsKKworICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IG91 dHB1dF9zYW1wbGVfY291bnQ7IG4rKykKKyAgICAgICAgICAgIGNtdWwoPSwgbik7CisKKyAgICAg ICAgaWYgKG91dHB1dF9zYW1wbGVfY291bnQgPCBpbnB1dF9wYWRkaW5nX3NpemUpIHsKKyAgICAg ICAgICAgIGNvbnN0IGludCBjdXRfaW5kZXggPSBpbnB1dF9wYWRkaW5nX3NpemUgLSByZXN0Owor CisgICAgICAgICAgICBmb3IgKGludCBjaHVua19pbmRleCA9IG91dHB1dF9zYW1wbGVfY291bnQ7 IGNodW5rX2luZGV4IDwgY3V0X2luZGV4OyBjaHVua19pbmRleCArPSBvdXRwdXRfc2FtcGxlX2Nv dW50KQorICAgICAgICAgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgb3V0cHV0X3NhbXBsZV9j b3VudDsgbisrKQorICAgICAgICAgICAgICAgICAgICBjbXVsKCs9LCBjaHVua19pbmRleCArIG4p OworICAgICAgICAgICAgZm9yIChpbnQgbiA9IDA7IG4gPCByZXN0OyBuKyspCisgICAgICAgICAg ICAgICAgY211bCgrPSwgY3V0X2luZGV4ICsgbik7CisgICAgICAgIH0KKworICAgICAgICBzLT5p dHhfZm4ocy0+aWZmdFtqb2Jucl0sIGlkc3QsIGlzcmMsIHNpemVvZigqaXNyYykpOworCitwdXRf cGl4ZWxzOgorICAgICAgICB4ID0gcy0+cG9zOworICAgICAgICBzd2l0Y2ggKHMtPmRpcmVjdGlv bikgeworICAgICAgICBjYXNlIERJUkVDVElPTl9MUjoKKyAgICAgICAgY2FzZSBESVJFQ1RJT05f Ukw6CisgICAgICAgICAgICBkc3RZID0gcy0+b3V0cGljcmVmLT5kYXRhWzBdICsgeSAqIHlsaW5l c2l6ZTsKKyAgICAgICAgICAgIGRzdFUgPSBzLT5vdXRwaWNyZWYtPmRhdGFbMV0gKyB5ICogdWxp bmVzaXplOworICAgICAgICAgICAgZHN0ViA9IHMtPm91dHBpY3JlZi0+ZGF0YVsyXSArIHkgKiB2 bGluZXNpemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBESVJFQ1RJT05fVUQ6 CisgICAgICAgIGNhc2UgRElSRUNUSU9OX0RVOgorICAgICAgICAgICAgZHN0WSA9IHMtPm91dHBp Y3JlZi0+ZGF0YVswXSArIHggKiB5bGluZXNpemUgKyB3IC0geSAtIDE7CisgICAgICAgICAgICBk c3RVID0gcy0+b3V0cGljcmVmLT5kYXRhWzFdICsgeCAqIHVsaW5lc2l6ZSArIHcgLSB5IC0gMTsK KyAgICAgICAgICAgIGRzdFYgPSBzLT5vdXRwaWNyZWYtPmRhdGFbMl0gKyB4ICogdmxpbmVzaXpl ICsgdyAtIHkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBz d2l0Y2ggKHMtPnNsaWRlKSB7CisgICAgICAgIGNhc2UgU0xJREVfUkVQTEFDRToKKyAgICAgICAg ICAgIC8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IGNhc2UgU0xJREVfU0NST0xMOgorICAgICAgICAgICAgc3dpdGNoIChzLT5kaXJlY3Rpb24pIHsK KyAgICAgICAgICAgIGNhc2UgRElSRUNUSU9OX1JMOgorICAgICAgICAgICAgICAgIG1lbW1vdmUo ZHN0WSwgZHN0WSArIDEsIHMtPncgLSAxKTsKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGRzdFUs IGRzdFUgKyAxLCBzLT53IC0gMSk7CisgICAgICAgICAgICAgICAgbWVtbW92ZShkc3RWLCBkc3RW ICsgMSwgcy0+dyAtIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz ZSBESVJFQ1RJT05fTFI6CisgICAgICAgICAgICAgICAgbWVtbW92ZShkc3RZICsgMSwgZHN0WSwg cy0+dyAtIDEpOworICAgICAgICAgICAgICAgIG1lbW1vdmUoZHN0VSArIDEsIGRzdFUsIHMtPncg LSAxKTsKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGRzdFYgKyAxLCBkc3RWLCBzLT53IC0gMSk7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzLT5kaXJlY3Rpb24gPT0gRElSRUNUSU9OX1JM IHx8CisgICAgICAgICAgICBzLT5kaXJlY3Rpb24gPT0gRElSRUNUSU9OX0xSKSB7CisgICAgICAg ICAgICBkc3RZICs9IHg7CisgICAgICAgICAgICBkc3RVICs9IHg7CisgICAgICAgICAgICBkc3RW ICs9IHg7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2Fz ZSAyOgorICAgICAgICAgICAgWSA9IGh5cG90ZihpZHN0W2ldLnJlLCBpZHN0W2ldLmltKTsKKyAg ICAgICAgICAgIFkgPSByZW1hcF9sb2coWSwgbG9nX2ZhY3Rvcik7CisgICAgICAgICAgICBVID0g YXRhbjJmKGlkc3RbaV0uaW0sIGlkc3RbaV0ucmUpOworICAgICAgICAgICAgVSA9IDAuNWYgKyAw LjVmICogVSAqIFkgLyBNX1BJOworICAgICAgICAgICAgViA9IDEuZiAtIFU7CisKKyAgICAgICAg ICAgIGRzdFlbMF0gPSBhdl9jbGlwX3VpbnQ4KGxyaW50ZihZICogMjU1LmYpKTsKKyAgICAgICAg ICAgIGRzdFVbMF0gPSBhdl9jbGlwX3VpbnQ4KGxyaW50ZihVICogMjU1LmYpKTsKKyAgICAgICAg ICAgIGRzdFZbMF0gPSBhdl9jbGlwX3VpbnQ4KGxyaW50ZihWICogMjU1LmYpKTsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBZID0gYXRhbjJmKGlkc3Rb aV0uaW0sIGlkc3RbaV0ucmUpOworICAgICAgICAgICAgWSA9IDAuNWYgKyAwLjVmICogWSAvIE1f UEk7CisKKyAgICAgICAgICAgIGRzdFlbMF0gPSBhdl9jbGlwX3VpbnQ4KGxyaW50ZihZICogMjU1 LmYpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBZ ID0gaHlwb3RmKGlkc3RbaV0ucmUsIGlkc3RbaV0uaW0pOworICAgICAgICAgICAgWSA9IHJlbWFw X2xvZyhZLCBsb2dfZmFjdG9yKTsKKworICAgICAgICAgICAgZHN0WVswXSA9IGF2X2NsaXBfdWlu dDgobHJpbnRmKFkgKiAyNTUuZikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZV9rZXJuZWwoQVZG aWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgU2hvd0NXVENvbnRleHQgKnMgPSBjdHgtPnByaXY7 CisgICAgY29uc3QgaW50IHNpemUgPSBzLT5pbnB1dF9zYW1wbGVfY291bnQ7CisgICAgY29uc3Qg ZmxvYXQgc2NhbGVfZmFjdG9yID0gMS5mLyhmbG9hdClzaXplOworICAgIGNvbnN0IGludCBvdXRw dXRfc2FtcGxlX2NvdW50ID0gcy0+b3V0cHV0X3NhbXBsZV9jb3VudDsKKyAgICBjb25zdCBpbnQg ZnNpemUgPSBzLT5mcmVxdWVuY3lfYmFuZF9jb3VudDsKKworICAgIGZvciAoaW50IHkgPSAwOyB5 IDwgZnNpemU7IHkrKykgeworICAgICAgICBmbG9hdCAqa2VybmVsID0gKGZsb2F0ICopcy0+a2Vy bmVsLT5leHRlbmRlZF9kYXRhW3ldOworICAgICAgICBmbG9hdCBmcmVxdWVuY3kgPSBzLT5mcmVx dWVuY3lfYmFuZFt5KjJdOworICAgICAgICBmbG9hdCBkZXZpYXRpb24gPSAxLmYgLyAocy0+ZnJl cXVlbmN5X2JhbmRbeSoyKzFdICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91 dHB1dF9zYW1wbGVfY291bnQpOworCisgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgc2l6ZTsg bisrKSB7CisgICAgICAgICAgICBmbG9hdCBmZiwgZiA9IGZhYnNmKG4tZnJlcXVlbmN5KTsKKwor ICAgICAgICAgICAgZiA9IHNpemUgLSBmYWJzZihmIC0gc2l6ZSk7CisgICAgICAgICAgICBmZiA9 IGV4cGYoLWYqZipkZXZpYXRpb24pICogc2NhbGVfZmFjdG9yOworICAgICAgICAgICAga2VybmVs W25dID0gZmY7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX291dHB1 dChBVkZpbHRlckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBv dXRsaW5rLT5zcmM7CisgICAgQVZGaWx0ZXJMaW5rICppbmxpbmsgPSBjdHgtPmlucHV0c1swXTsK KyAgICBTaG93Q1dUQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBmbG9hdCBtYXhpbXVtX2Zy ZXF1ZW5jeSA9IGZtaW5mKHMtPm1heGltdW1fZnJlcXVlbmN5LCBpbmxpbmstPnNhbXBsZV9yYXRl ICogMC41Zik7CisgICAgZmxvYXQgbWluaW11bV9mcmVxdWVuY3kgPSBzLT5taW5pbXVtX2ZyZXF1 ZW5jeTsKKyAgICBmbG9hdCBzY2FsZSA9IDEuZjsKKyAgICBpbnQgcmV0OworCisgICAgdW5pbml0 KGN0eCk7CisKKyAgICBzd2l0Y2ggKHMtPmRpcmVjdGlvbikgeworICAgIGNhc2UgRElSRUNUSU9O X0xSOgorICAgIGNhc2UgRElSRUNUSU9OX1JMOgorICAgICAgICBzLT5mcmVxdWVuY3lfYmFuZF9j b3VudCA9IHMtPmg7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRElSRUNUSU9OX1VEOgorICAg IGNhc2UgRElSRUNUSU9OX0RVOgorICAgICAgICBzLT5mcmVxdWVuY3lfYmFuZF9jb3VudCA9IHMt Pnc7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHMtPm5iX3RocmVhZHMgPSBGRk1JTihz LT5mcmVxdWVuY3lfYmFuZF9jb3VudCwgZmZfZmlsdGVyX2dldF9uYl90aHJlYWRzKGN0eCkpOwor ICAgIHMtPm9sZF9wdHMgPSBBVl9OT1BUU19WQUxVRTsKKyAgICBzLT5uYl9jb25zdW1lZF9zYW1w bGVzID0gNjU1MzY7CisKKyAgICBzLT5pbnB1dF9zYW1wbGVfY291bnQgPSBzLT5uYl9jb25zdW1l ZF9zYW1wbGVzOworICAgIHMtPmhvcF9zaXplID0gcy0+bmJfY29uc3VtZWRfc2FtcGxlcyA+PiAx OworICAgIHMtPmlucHV0X3BhZGRpbmdfc2l6ZSA9IDY1NTM2OworICAgIHMtPm91dHB1dF9wYWRk aW5nX3NpemUgPSBGRk1BWCgxNixzLT5pbnB1dF9wYWRkaW5nX3NpemUgKiBzLT5wcHMgLyBpbmxp bmstPnNhbXBsZV9yYXRlKTsKKworICAgIG91dGxpbmstPncgPSBzLT53OworICAgIG91dGxpbmst PmggPSBzLT5oOworICAgIG91dGxpbmstPnNhbXBsZV9hc3BlY3RfcmF0aW8gPSAoQVZSYXRpb25h bCl7MSwxfTsKKworICAgIHMtPmZmdF9pbl9zaXplICA9IEZGQUxJR04ocy0+aW5wdXRfcGFkZGlu Z19zaXplLCBhdl9jcHVfbWF4X2FsaWduKCkpOworICAgIHMtPmZmdF9vdXRfc2l6ZSA9IEZGQUxJ R04ocy0+aW5wdXRfcGFkZGluZ19zaXplLCBhdl9jcHVfbWF4X2FsaWduKCkpOworCisgICAgcy0+ b3V0cHV0X3NhbXBsZV9jb3VudCA9IHMtPm91dHB1dF9wYWRkaW5nX3NpemU7CisKKyAgICBzLT5p ZmZ0X2luX3NpemUgPSBGRkFMSUdOKHMtPm91dHB1dF9wYWRkaW5nX3NpemUsIGF2X2NwdV9tYXhf YWxpZ24oKSk7CisgICAgcy0+aWZmdF9vdXRfc2l6ZSA9IEZGQUxJR04ocy0+b3V0cHV0X3BhZGRp bmdfc2l6ZSwgYXZfY3B1X21heF9hbGlnbigpKTsKKyAgICBzLT5paG9wX3NpemUgPSBzLT5vdXRw dXRfcGFkZGluZ19zaXplID4+IDE7CisKKyAgICByZXQgPSBhdl90eF9pbml0KCZzLT5mZnQsICZz LT50eF9mbiwgQVZfVFhfRkxPQVRfRkZULCAwLCBzLT5pbnB1dF9wYWRkaW5nX3NpemUsICZzY2Fs ZSwgMCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBzLT5p ZmZ0ID0gYXZfY2FsbG9jKHMtPm5iX3RocmVhZHMsIHNpemVvZigqcy0+aWZmdCkpOworICAgIGlm ICghcy0+aWZmdCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGZvciAo aW50IG4gPSAwOyBuIDwgcy0+bmJfdGhyZWFkczsgbisrKSB7CisgICAgICAgIHJldCA9IGF2X3R4 X2luaXQoJnMtPmlmZnRbbl0sICZzLT5pdHhfZm4sIEFWX1RYX0ZMT0FUX0ZGVCwgMSwgcy0+b3V0 cHV0X3BhZGRpbmdfc2l6ZSwgJnNjYWxlLCAwKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAg ICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHMtPmZyZXF1ZW5jeV9iYW5kID0gYXZf Y2FsbG9jKHMtPmZyZXF1ZW5jeV9iYW5kX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVvZigqcy0+ZnJlcXVlbmN5X2JhbmQpICogMik7CisgICAgcy0+b3V0cGlj cmVmID0gZmZfZ2V0X3ZpZGVvX2J1ZmZlcihvdXRsaW5rLCBvdXRsaW5rLT53LCBvdXRsaW5rLT5o KTsKKyAgICBzLT5mZnRfaW4gPSBmZl9nZXRfYXVkaW9fYnVmZmVyKGlubGluaywgcy0+ZmZ0X2lu X3NpemUgKiAyKTsKKyAgICBzLT5mZnRfb3V0ID0gZmZfZ2V0X2F1ZGlvX2J1ZmZlcihpbmxpbmss IHMtPmZmdF9vdXRfc2l6ZSAqIDIpOworICAgIHMtPm92ZXJsYXAgPSBmZl9nZXRfYXVkaW9fYnVm ZmVyKGlubGluaywgcy0+aW5wdXRfcGFkZGluZ19zaXplKTsKKyAgICBzLT5pZmZ0X2luID0gYXZf ZnJhbWVfYWxsb2MoKTsKKyAgICBzLT5pZmZ0X291dCA9IGF2X2ZyYW1lX2FsbG9jKCk7CisgICAg cy0+a2VybmVsID0gYXZfZnJhbWVfYWxsb2MoKTsKKyAgICBpZiAoIXMtPm91dHBpY3JlZiB8fCAh cy0+ZmZ0X2luIHx8ICFzLT5mZnRfb3V0IHx8CisgICAgICAgICFzLT5pZmZ0X2luIHx8ICFzLT5p ZmZ0X291dCB8fAorICAgICAgICAhcy0+ZnJlcXVlbmN5X2JhbmQgfHwgIXMtPmtlcm5lbCB8fCAh cy0+b3ZlcmxhcCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIHMtPmlm ZnRfaW4tPmZvcm1hdCAgICAgPSBpbmxpbmstPmZvcm1hdDsKKyAgICBzLT5pZmZ0X2luLT5uYl9z YW1wbGVzID0gcy0+aWZmdF9pbl9zaXplICogMjsKKyAgICBzLT5pZmZ0X2luLT5jaF9sYXlvdXQu bmJfY2hhbm5lbHMgPSBzLT5mcmVxdWVuY3lfYmFuZF9jb3VudDsKKyAgICByZXQgPSBhdl9mcmFt ZV9nZXRfYnVmZmVyKHMtPmlmZnRfaW4sIDApOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBy ZXR1cm4gcmV0OworCisgICAgcy0+aWZmdF9vdXQtPmZvcm1hdCAgICAgPSBpbmxpbmstPmZvcm1h dDsKKyAgICBzLT5pZmZ0X291dC0+bmJfc2FtcGxlcyA9IHMtPmlmZnRfb3V0X3NpemUgKiAyOwor ICAgIHMtPmlmZnRfb3V0LT5jaF9sYXlvdXQubmJfY2hhbm5lbHMgPSBzLT5mcmVxdWVuY3lfYmFu ZF9jb3VudDsKKyAgICByZXQgPSBhdl9mcmFtZV9nZXRfYnVmZmVyKHMtPmlmZnRfb3V0LCAwKTsK KyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHMtPmtlcm5lbC0+ Zm9ybWF0ICAgICA9IGlubGluay0+Zm9ybWF0OworICAgIHMtPmtlcm5lbC0+bmJfc2FtcGxlcyA9 IHMtPmlucHV0X3BhZGRpbmdfc2l6ZTsKKyAgICBzLT5rZXJuZWwtPmNoX2xheW91dC5uYl9jaGFu bmVscyA9IHMtPmZyZXF1ZW5jeV9iYW5kX2NvdW50OworICAgIHJldCA9IGF2X2ZyYW1lX2dldF9i dWZmZXIocy0+a2VybmVsLCAwKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJl dDsKKworICAgIHMtPm91dHBpY3JlZi0+c2FtcGxlX2FzcGVjdF9yYXRpbyA9IChBVlJhdGlvbmFs KXsxLDF9OworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBvdXRsaW5rLT5oOyB5KyspIHsKKyAg ICAgICAgbWVtc2V0KHMtPm91dHBpY3JlZi0+ZGF0YVswXSArIHkgKiBzLT5vdXRwaWNyZWYtPmxp bmVzaXplWzBdLCAgIDAsIG91dGxpbmstPncpOworICAgICAgICBtZW1zZXQocy0+b3V0cGljcmVm LT5kYXRhWzFdICsgeSAqIHMtPm91dHBpY3JlZi0+bGluZXNpemVbMV0sIDEyOCwgb3V0bGluay0+ dyk7CisgICAgICAgIG1lbXNldChzLT5vdXRwaWNyZWYtPmRhdGFbMl0gKyB5ICogcy0+b3V0cGlj cmVmLT5saW5lc2l6ZVsyXSwgMTI4LCBvdXRsaW5rLT53KTsKKyAgICAgICAgaWYgKHMtPm91dHBp Y3JlZi0+ZGF0YVszXSkKKyAgICAgICAgICAgIG1lbXNldChzLT5vdXRwaWNyZWYtPmRhdGFbM10g KyB5ICogcy0+b3V0cGljcmVmLT5saW5lc2l6ZVszXSwgMCwgb3V0bGluay0+dyk7CisgICAgfQor CisgICAgcy0+b3V0cGljcmVmLT5jb2xvcl9yYW5nZSA9IEFWQ09MX1JBTkdFX0pQRUc7CisKKyAg ICBtaW5pbXVtX2ZyZXF1ZW5jeSAqPSBzLT5uYl9jb25zdW1lZF9zYW1wbGVzIC8gKGZsb2F0KWlu bGluay0+c2FtcGxlX3JhdGU7CisgICAgbWF4aW11bV9mcmVxdWVuY3kgKj0gcy0+bmJfY29uc3Vt ZWRfc2FtcGxlcyAvIChmbG9hdClpbmxpbmstPnNhbXBsZV9yYXRlOworICAgIGlmIChzLT5mcmVx dWVuY3lfc2NhbGUgPiAwKSB7CisgICAgICAgIG1pbmltdW1fZnJlcXVlbmN5ID0gbG9nZihtaW5p bXVtX2ZyZXF1ZW5jeSkgLyBsb2dmKDIuZik7CisgICAgICAgIG1heGltdW1fZnJlcXVlbmN5ID0g bG9nZihtYXhpbXVtX2ZyZXF1ZW5jeSkgLyBsb2dmKDIuZik7CisgICAgfQorCisgICAgZnJlcXVl bmN5X2JhbmQocy0+ZnJlcXVlbmN5X2JhbmQsCisgICAgICAgICAgICAgICAgICAgcy0+ZnJlcXVl bmN5X2JhbmRfY291bnQsIG1heGltdW1fZnJlcXVlbmN5IC0gbWluaW11bV9mcmVxdWVuY3ksCisg ICAgICAgICAgICAgICAgICAgbWluaW11bV9mcmVxdWVuY3ksIHMtPmZyZXF1ZW5jeV9zY2FsZSwg cy0+ZGV2aWF0aW9uKTsKKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgImlucHV0X3Nh bXBsZV9jb3VudDogJWRcbiIsIHMtPmlucHV0X3NhbXBsZV9jb3VudCk7CisgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0RFQlVHLCAib3V0cHV0X3NhbXBsZV9jb3VudDogJWRcbiIsIHMtPm91dHB1dF9z YW1wbGVfY291bnQpOworCisgICAgc3dpdGNoIChzLT5kaXJlY3Rpb24pIHsKKyAgICBjYXNlIERJ UkVDVElPTl9MUjoKKyAgICAgICAgcy0+cG9zID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBESVJFQ1RJT05fUkw6CisgICAgICAgIHMtPnBvcyA9IHMtPncgLSAxOworICAgICAgICBicmVh azsKKyAgICBjYXNlIERJUkVDVElPTl9VRDoKKyAgICAgICAgcy0+cG9zID0gMDsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBESVJFQ1RJT05fRFU6CisgICAgICAgIHMtPnBvcyA9IHMtPmggLSAx OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzLT5hdXRvX2ZyYW1lX3JhdGUgPSBhdl9t YWtlX3EoaW5saW5rLT5zYW1wbGVfcmF0ZSwgcy0+aG9wX3NpemUpOworICAgIGlmIChzdHJjbXAo cy0+cmF0ZV9zdHIsICJhdXRvIikpIHsKKyAgICAgICAgcmV0ID0gYXZfcGFyc2VfdmlkZW9fcmF0 ZSgmcy0+ZnJhbWVfcmF0ZSwgcy0+cmF0ZV9zdHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHMt PmZyYW1lX3JhdGUgPSBzLT5hdXRvX2ZyYW1lX3JhdGU7CisgICAgfQorICAgIG91dGxpbmstPmZy YW1lX3JhdGUgPSBzLT5mcmFtZV9yYXRlOworICAgIG91dGxpbmstPnRpbWVfYmFzZSA9IGF2X2lu dl9xKG91dGxpbmstPmZyYW1lX3JhdGUpOworCisgICAgY29tcHV0ZV9rZXJuZWwoY3R4KTsKKwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjdGl2YXRlKEFWRmlsdGVyQ29udGV4dCAq Y3R4KQoreworICAgIEFWRmlsdGVyTGluayAqaW5saW5rID0gY3R4LT5pbnB1dHNbMF07CisgICAg QVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOworICAgIFNob3dDV1RDb250 ZXh0ICpzID0gY3R4LT5wcml2OworICAgIGludCByZXQgPSAwLCBzdGF0dXM7CisgICAgaW50NjRf dCBwdHM7CisKKyAgICBGRl9GSUxURVJfRk9SV0FSRF9TVEFUVVNfQkFDSyhvdXRsaW5rLCBpbmxp bmspOworCisgICAgaWYgKHMtPm91dHBpY3JlZikgeworICAgICAgICBjb25zdCBpbnQgY2ggPSAw OworICAgICAgICBBVkZyYW1lICpmaW47CisKKyAgICAgICAgaWYgKHMtPmlob3BfaW5kZXggPT0g MCkgeworICAgICAgICAgICAgcmV0ID0gZmZfaW5saW5rX2NvbnN1bWVfc2FtcGxlcyhpbmxpbmss IHMtPmhvcF9zaXplLCBzLT5ob3Bfc2l6ZSwgJmZpbik7CisgICAgICAgICAgICBpZiAocmV0IDwg MCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgaWYgKHJldCA+IDAp IHsKKyAgICAgICAgICAgICAgICBydW5fY2hhbm5lbF9jd3RfcHJlcGFyZShjdHgsIGZpbiwgY2gp OworICAgICAgICAgICAgICAgIHMtPmluX3B0cyA9IGZpbi0+cHRzOworICAgICAgICAgICAgICAg IHMtPmluX25iX3NhbXBsZXMgPSBmaW4tPm5iX3NhbXBsZXM7CisgICAgICAgICAgICAgICAgYXZf ZnJhbWVfZnJlZSgmZmluKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm IChyZXQgPiAwIHx8IHMtPmlob3BfaW5kZXggPiAwKSB7CisgICAgICAgICAgICBpbnQ2NF90IHB0 c19vZmZzZXQ7CisKKyAgICAgICAgICAgIHN3aXRjaCAocy0+c2xpZGUpIHsKKyAgICAgICAgICAg IGNhc2UgU0xJREVfU0NST0xMOgorICAgICAgICAgICAgICAgIHN3aXRjaCAocy0+ZGlyZWN0aW9u KSB7CisgICAgICAgICAgICAgICAgY2FzZSBESVJFQ1RJT05fVUQ6CisgICAgICAgICAgICAgICAg ICAgIGZvciAoaW50IHAgPSAwOyBwIDwgMzsgcCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBwdHJkaWZmX3QgbGluZXNpemUgPSBzLT5vdXRwaWNyZWYtPmxpbmVzaXplW3BdOworCisgICAg ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcy0+aCAtIDE7IHkgPiAwOyB5LS0pIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpkc3QgPSBzLT5vdXRwaWNyZWYt PmRhdGFbcF0gKyB5ICogbGluZXNpemU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt ZW1tb3ZlKGRzdCwgZHN0IC0gbGluZXNpemUsIHMtPncpOworICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgIGNhc2UgRElSRUNUSU9OX0RVOgorICAgICAgICAgICAgICAgICAgICBm b3IgKGludCBwID0gMDsgcCA8IDM7IHArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHRy ZGlmZl90IGxpbmVzaXplID0gcy0+b3V0cGljcmVmLT5saW5lc2l6ZVtwXTsKKworICAgICAgICAg ICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzLT5oIC0gMTsgeSsrKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZHN0ID0gcy0+b3V0cGljcmVmLT5kYXRh W3BdICsgeSAqIGxpbmVzaXplOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtbW92 ZShkc3QsIGRzdCArIGxpbmVzaXplLCBzLT53KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIGZmX2ZpbHRlcl9leGVjdXRlKGN0eCwgcnVuX2NoYW5uZWxfY3d0LCAodm9pZCAq KSZjaCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPm5iX3RocmVhZHMp OworCisgICAgICAgICAgICBwdHNfb2Zmc2V0ID0gYXZfcmVzY2FsZV9xKHMtPmlob3BfaW5kZXgs IGF2X21ha2VfcSgxLCBzLT5paG9wX3NpemUpLCBhdl9tYWtlX3EoMSwgcy0+aW5fbmJfc2FtcGxl cykpOworICAgICAgICAgICAgcy0+b3V0cGljcmVmLT5wdHMgPSBhdl9yZXNjYWxlX3Eocy0+aW5f cHRzICsgcHRzX29mZnNldCwgaW5saW5rLT50aW1lX2Jhc2UsIG91dGxpbmstPnRpbWVfYmFzZSk7 CisKKyAgICAgICAgICAgIHMtPmlob3BfaW5kZXgrKzsKKyAgICAgICAgICAgIGlmIChzLT5paG9w X2luZGV4ID49IHMtPmlob3Bfc2l6ZSkKKyAgICAgICAgICAgICAgICBzLT5paG9wX2luZGV4ID0g MDsKKworICAgICAgICAgICAgc3dpdGNoIChzLT5zbGlkZSkgeworICAgICAgICAgICAgY2FzZSBT TElERV9SRVBMQUNFOgorICAgICAgICAgICAgICAgIHN3aXRjaCAocy0+ZGlyZWN0aW9uKSB7Cisg ICAgICAgICAgICAgICAgY2FzZSBESVJFQ1RJT05fTFI6CisgICAgICAgICAgICAgICAgICAgIHMt PnBvcysrOworICAgICAgICAgICAgICAgICAgICBpZiAocy0+cG9zID49IHMtPncpCisgICAgICAg ICAgICAgICAgICAgICAgICBzLT5wb3MgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICBjYXNlIERJUkVDVElPTl9STDoKKyAgICAgICAgICAgICAgICAgICAg cy0+cG9zLS07CisgICAgICAgICAgICAgICAgICAgIGlmIChzLT5wb3MgPCAwKQorICAgICAgICAg ICAgICAgICAgICAgICAgcy0+cG9zID0gcy0+dyAtIDE7CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRElSRUNUSU9OX1VEOgorICAgICAgICAgICAgICAg ICAgICBzLT5wb3MrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHMtPnBvcyA+PSBzLT5oKQor ICAgICAgICAgICAgICAgICAgICAgICAgcy0+cG9zID0gMDsKKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBESVJFQ1RJT05fRFU6CisgICAgICAgICAgICAg ICAgICAgIHMtPnBvcy0tOworICAgICAgICAgICAgICAgICAgICBpZiAocy0+cG9zIDwgMCkKKyAg ICAgICAgICAgICAgICAgICAgICAgIHMtPnBvcyA9IHMtPmggLSAxOworICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICBjYXNlIFNMSURFX1NDUk9MTDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHMt PmRpcmVjdGlvbikgeworICAgICAgICAgICAgICAgIGNhc2UgRElSRUNUSU9OX0xSOgorICAgICAg ICAgICAgICAgICAgICBzLT5wb3MgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICBjYXNlIERJUkVDVElPTl9STDoKKyAgICAgICAgICAgICAgICAgICAgcy0+ cG9zID0gcy0+dyAtIDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgIGNhc2UgRElSRUNUSU9OX1VEOgorICAgICAgICAgICAgICAgICAgICBzLT5wb3MgPSAwOwor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIERJUkVDVElP Tl9EVToKKyAgICAgICAgICAgICAgICAgICAgcy0+cG9zID0gcy0+aCAtIDE7CisgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHMtPm9sZF9wdHMgPCBzLT5vdXRw aWNyZWYtPnB0cykgeworICAgICAgICAgICAgICAgIEFWRnJhbWUgKm91dCA9IGZmX2dldF92aWRl b19idWZmZXIob3V0bGluaywgb3V0bGluay0+dywgb3V0bGluay0+aCk7CisgICAgICAgICAgICAg ICAgaWYgKCFvdXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 CisgICAgICAgICAgICAgICAgcmV0ID0gYXZfZnJhbWVfY29weV9wcm9wcyhvdXQsIHMtPm91dHBp Y3JlZik7CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgICAg IGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICByZXQgPSBhdl9mcmFtZV9jb3B5KG91dCwgcy0+ b3V0cGljcmVmKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAg ICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgICAgIHMtPm9sZF9wdHMgPSBzLT5vdXRwaWNy ZWYtPnB0czsKKyAgICAgICAgICAgICAgICByZXQgPSBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywg b3V0KTsKKyAgICAgICAgICAgICAgICBpZiAocmV0IDw9IDApCisgICAgICAgICAgICAgICAgICAg IHJldHVybiByZXQ7CitmYWlsOgorICAgICAgICAgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7 CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KKworICAgIGlmIChmZl9pbmxpbmtfYWNrbm93bGVkZ2Vfc3RhdHVzKGlubGluaywgJnN0 YXR1cywgJnB0cykpIHsKKyAgICAgICAgaWYgKHN0YXR1cyA9PSBBVkVSUk9SX0VPRikgeworICAg ICAgICAgICAgZmZfb3V0bGlua19zZXRfc3RhdHVzKG91dGxpbmssIHN0YXR1cywgcHRzKTsKKyAg ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZmX2lubGlu a19xdWV1ZWRfc2FtcGxlcyhpbmxpbmspID49IHMtPmhvcF9zaXplIHx8IHMtPmlob3BfaW5kZXgp IHsKKyAgICAgICAgZmZfZmlsdGVyX3NldF9yZWFkeShjdHgsIDEwKTsKKyAgICAgICAgcmV0dXJu IDA7CisgICAgfQorCisgICAgaWYgKGZmX291dGxpbmtfZnJhbWVfd2FudGVkKG91dGxpbmspKSB7 CisgICAgICAgIGZmX2lubGlua19yZXF1ZXN0X2ZyYW1lKGlubGluayk7CisgICAgICAgIHJldHVy biAwOworICAgIH0KKworICAgIHJldHVybiBGRkVSUk9SX05PVF9SRUFEWTsKK30KKworc3RhdGlj IGNvbnN0IEFWRmlsdGVyUGFkIHNob3djd3RfaW5wdXRzW10gPSB7CisgICAgeworICAgICAgICAu bmFtZSA9ICJkZWZhdWx0IiwKKyAgICAgICAgLnR5cGUgPSBBVk1FRElBX1RZUEVfQVVESU8sCisg ICAgfSwKK307CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBzaG93Y3d0X291dHB1dHNbXSA9 IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAgIC50 eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5jb25maWdfcHJvcHMg PSBjb25maWdfb3V0cHV0LAorICAgIH0sCit9OworCitjb25zdCBBVkZpbHRlciBmZl9hdmZfc2hv d2N3dCA9IHsKKyAgICAubmFtZSAgICAgICAgICA9ICJzaG93Y3d0IiwKKyAgICAuZGVzY3JpcHRp b24gICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJDb252ZXJ0IGlucHV0IGF1ZGlvIHRvIGEgQ1dU IChDb250aW51b3VzIFdhdmVsZXQgVHJhbnNmb3JtKSBzcGVjdHJ1bSB2aWRlbyBvdXRwdXQuIiks CisgICAgLnVuaW5pdCAgICAgICAgPSB1bmluaXQsCisgICAgLnByaXZfc2l6ZSAgICAgPSBzaXpl b2YoU2hvd0NXVENvbnRleHQpLAorICAgIEZJTFRFUl9JTlBVVFMoc2hvd2N3dF9pbnB1dHMpLAor ICAgIEZJTFRFUl9PVVRQVVRTKHNob3djd3Rfb3V0cHV0cyksCisgICAgRklMVEVSX1FVRVJZX0ZV TkMocXVlcnlfZm9ybWF0cyksCisgICAgLmFjdGl2YXRlICAgICAgPSBhY3RpdmF0ZSwKKyAgICAu cHJpdl9jbGFzcyAgICA9ICZzaG93Y3d0X2NsYXNzLAorICAgIC5mbGFncyAgICAgICAgID0gQVZG SUxURVJfRkxBR19TTElDRV9USFJFQURTLAorfTsKLS0gCjIuMzcuMgoK --000000000000faf3d505ee5d8fc0 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". --000000000000faf3d505ee5d8fc0--