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 81A7B409C1 for ; Fri, 24 Dec 2021 20:52:00 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E36B168B004; Fri, 24 Dec 2021 22:51:57 +0200 (EET) Received: from mail-qv1-f44.google.com (mail-qv1-f44.google.com [209.85.219.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ACB1C68AF87 for ; Fri, 24 Dec 2021 22:51:50 +0200 (EET) Received: by mail-qv1-f44.google.com with SMTP id kc16so8590514qvb.3 for ; Fri, 24 Dec 2021 12:51:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ylo-ph.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=JxvAoyCQKVxRAEhi9uRl8VnA2Tb/6sG9z2ECepcYLhE=; b=Pw0PDrRlfocJenNP0WJWjPfiyOsjCzlFAVCrwK6+6ANk2XNz8eICx4XcFc3fZfZhHt bRj2Wkuyc4nw03GclQ36vxHsDiUrLxqksXGT/nPFcR6dG+7AnjXlA4OkrYxYRFGs3iXB Olb/TV2b3PsAp4KXk5u/Ocd4FeqAooMiN3KCWq5vtiEXNrkgV6LPw1JbTToey9rPDTLR SC5wvuazkNuL5lXqAsLEClWtpZ1ydJ/m8o0FpcLGO+FLFw4maysTxQu0HwuTgIwsTk1W 8XV3000FOJoTQ+QyMD/pjnf6gtAFQYzs4Q1cxC/s7gjDLvhYmtMl7rnh53pqUWqREaiV MZ3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=JxvAoyCQKVxRAEhi9uRl8VnA2Tb/6sG9z2ECepcYLhE=; b=TZ0lorICNmP7VeqxM5oGoJjphLekqzPOoxLEmmzyrrc89GKroP7cmLKeJRSaB5Lt2Q FZ7sM7INjZpegzWUxPkWrG7MkgNRZFL1FUND40H09AceRTH6/UnmAyxiTFEtNK1YkTQE VhxCLEA0n8z2rfWSzVe99IcNqDZuLPkzcuz4Vqaqrw1975qQzYX8G25JdNlH28cfHOxu ziiakYdC+eo0bwm/HhnOqIH/lG2I8FeL8eYWhdVnyAK82nzkgtPEh1lJBJ1nzLCecyyc 5xi0YAF3x8CT1rQGlmq7J/TI8uH0F0hMo8mk2EelVVrTddWNVN6hUzf0WcgIt08THWBz J9dA== X-Gm-Message-State: AOAM533OvW7gwm25biXEYLD6V/MLUmjgQb5InSOjoGl3VQA11eVYg+XD +ZVw8ZpqAZgBuqFMUPlsqpqq2v9JLxMi+lAUpfFbEPOwegs= X-Google-Smtp-Source: ABdhPJyH2AHhc+EOfDFsWPqJbFIQOjmYxwnd+NxH2rpIj2lc+V68J+Ew7w4sJc5HAQVglJ2ARc3Oglwd1EALi6XbWMY= X-Received: by 2002:a05:6214:76b:: with SMTP id f11mr6942563qvz.106.1640379108396; Fri, 24 Dec 2021 12:51:48 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Kyle Swanson Date: Fri, 24 Dec 2021 12:51:37 -0800 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="0000000000000dcef705d3ea86f5" Subject: Re: [FFmpeg-devel] [PATCH] avfilter/vf_libvmaf: update filter for libvmaf v2.0.0 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: --0000000000000dcef705d3ea86f5 Content-Type: text/plain; charset="UTF-8" Hi, Never followed through on this vf_libvmaf patch from last June, and I've had several people asking about its status lately. Rebased patch attached. It's been a while, so I guess let's start the review again. Would be nice if we could get this in before 5.0. Thanks, Kyle On Wed, Jun 30, 2021 at 6:55 AM Moritz Barsnick wrote: > > Hi, > > > -enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 1.5.2" libvmaf.h compute_vmaf > > +enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 2.0.0" libvmaf.h vmaf_init > > General question: Is it acceptable to drop support for libvmaf 1.x? I > saw that Fedora 33 is still on 1.x. > > > -Obtain the VMAF (Video Multi-Method Assessment Fusion) > > -score between two input videos. > > +Calulate the VMAF (Video Multi-Method Assessment Fusion) score for a > > +reference/distorted pair of input videos. > > These documentation improvements aren't related to the actual switch to > 2.x, and should be in a separate commit. > > > @code{./configure --enable-libvmaf}. > > -If no model path is specified it uses the default model: @code{vmaf_v0.6.1.pkl}. > > Unless they are consequences of the switch, of course. > > > - {"model_path", "Set the model to be used for computing vmaf.", OFFSET(model_path), AV_OPT_TYPE_STRING, {.str="/usr/local/share/model/vmaf_v0.6.1.pkl"}, 0, 1, FLAGS}, > > - {"log_path", "Set the file path to be used to store logs.", OFFSET(log_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, > > - {"log_fmt", "Set the format of the log (csv, json or xml).", OFFSET(log_fmt), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, > > - {"enable_transform", "Enables transform for computing vmaf.", OFFSET(enable_transform), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > - {"phone_model", "Invokes the phone model that will generate higher VMAF scores.", OFFSET(phone_model), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > - {"psnr", "Enables computing psnr along with vmaf.", OFFSET(psnr), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > - {"ssim", "Enables computing ssim along with vmaf.", OFFSET(ssim), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > - {"ms_ssim", "Enables computing ms-ssim along with vmaf.", OFFSET(ms_ssim), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > - {"pool", "Set the pool method to be used for computing vmaf.", OFFSET(pool), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, > > - {"n_threads", "Set number of threads to be used when computing vmaf.", OFFSET(n_threads), AV_OPT_TYPE_INT, {.i64=0}, 0, UINT_MAX, FLAGS}, > > - {"n_subsample", "Set interval for frame subsampling used when computing vmaf.", OFFSET(n_subsample), AV_OPT_TYPE_INT, {.i64=1}, 1, UINT_MAX, FLAGS}, > > - {"enable_conf_interval", "Enables confidence interval.", OFFSET(enable_conf_interval), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > + {"model", "Set the model to be used for computing vmaf.", OFFSET(model_cfg), AV_OPT_TYPE_STRING, {.str="version=vmaf_v0.6.1"}, 0, 1, FLAGS}, > > + {"feature", "Set the feature to be used for computing vmaf.", OFFSET(feature_cfg), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, > > + {"log_path", "Set the file path to be used to write log.", OFFSET(log_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, > > + {"log_fmt", "Set the format of the log (csv, json, xml, or sub).", OFFSET(log_fmt), AV_OPT_TYPE_STRING, {.str="xml"}, 0, 1, FLAGS}, > > + {"n_threads", "Set number of threads to be used when computing vmaf.", OFFSET(n_threads), AV_OPT_TYPE_INT, {.i64=0}, 0, UINT_MAX, FLAGS}, > > + {"n_subsample", "Set interval for frame subsampling used when computing vmaf.", OFFSET(n_subsample), AV_OPT_TYPE_INT, {.i64=1}, 1, UINT_MAX, FLAGS}, > > > Some changes are easier to review, if you don't change all the > whitespace initially. > > > + if (err) return AVERROR(ENOMEM); > > Line break. > > > + int err = 0; > > + if (!str) return NULL; > > Line break. > > > + if (!dict) goto fail; > > Ditto, in several subsequent places. > > > + if (str_copy) > > + av_free(str_copy); > > No need to check for str_copy. > > > + e = NULL; > > + while (e = av_dict_get(dict[i], "", e, AV_DICT_IGNORE_SUFFIX)) { > > I believe the assigned value from "e = NULL" is never used. > > > .name = "main", > > .type = AVMEDIA_TYPE_VIDEO, > > - },{ > > + }, > > + { > > .name = "reference", > > Unrelated style change. > > Since it looks like a complete re-write, it doesn't look like support > for both old and new API seems feasible, right? Just wondering, I am > not the one to judge. > > (And I cannot judge on the actual functionality.) > > Oh, and you should probably bump at least libavfilter MICRO version - > not sure whether even MINOR is justified. > > Cheers, > Moritz > _______________________________________________ > 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". --0000000000000dcef705d3ea86f5 Content-Type: application/octet-stream; name="0001-avfilter-vf_libvmaf-update-filter-for-libvmaf-v2.0.0.patch" Content-Disposition: attachment; filename="0001-avfilter-vf_libvmaf-update-filter-for-libvmaf-v2.0.0.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kxkv9qfl0 RnJvbSBkMDgwMjE0YzFhZGFlM2Q0NjFhMDA5Y2FiMzhhNTQyZTBlNjg1NmU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBLeWxlIFN3YW5zb24gPGtzd2Fuc29uQG5ldGZsaXguY29tPgpE YXRlOiBGcmksIDI0IERlYyAyMDIxIDEyOjQzOjUwIC0wODAwClN1YmplY3Q6IFtQQVRDSF0gYXZm aWx0ZXIvdmZfbGlidm1hZjogdXBkYXRlIGZpbHRlciBmb3IgbGlidm1hZiB2Mi4wLjAKCi0tLQog Y29uZmlndXJlICAgICAgICAgICAgICAgIHwgICA0ICstCiBkb2MvZmlsdGVycy50ZXhpICAgICAg ICAgfCAgNzcgKystLS0tCiBsaWJhdmZpbHRlci92Zl9saWJ2bWFmLmMgfCA1NjEgKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDQxMSBpbnNl cnRpb25zKCspLCAyMzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29u ZmlndXJlCmluZGV4IDIzZWYyYWJjOWIuLjg1OGZmMDkwZGIgMTAwNzU1Ci0tLSBhL2NvbmZpZ3Vy ZQorKysgYi9jb25maWd1cmUKQEAgLTM3NDAsNyArMzc0MCw3IEBAIHZhZ3VlZGVub2lzZXJfZmls dGVyX2RlcHM9ImdwbCIKIHZmbGlwX3Z1bGthbl9maWx0ZXJfZGVwcz0idnVsa2FuIHNwaXJ2X2Nv bXBpbGVyIgogdmlkc3RhYmRldGVjdF9maWx0ZXJfZGVwcz0ibGlidmlkc3RhYiIKIHZpZHN0YWJ0 cmFuc2Zvcm1fZmlsdGVyX2RlcHM9ImxpYnZpZHN0YWIiCi1saWJ2bWFmX2ZpbHRlcl9kZXBzPSJs aWJ2bWFmIHB0aHJlYWRzIgorbGlidm1hZl9maWx0ZXJfZGVwcz0ibGlidm1hZiIKIHptcV9maWx0 ZXJfZGVwcz0ibGliem1xIgogem9vbXBhbl9maWx0ZXJfZGVwcz0ic3dzY2FsZSIKIHpzY2FsZV9m aWx0ZXJfZGVwcz0ibGliemltZyBjb25zdF9uYW4iCkBAIC02NjA4LDcgKzY2MDgsNyBAQCBlbmFi bGVkIGxpYnR3b2xhbWUgICAgICAgICYmIHJlcXVpcmUgbGlidHdvbGFtZSB0d29sYW1lLmggdHdv bGFtZV9pbml0IC1sdHdvbGFtZQogZW5hYmxlZCBsaWJ1YXZzM2QgICAgICAgICAmJiByZXF1aXJl X3BrZ19jb25maWcgbGlidWF2czNkICJ1YXZzM2QgPj0gMS4xLjQxIiB1YXZzM2QuaCB1YXZzM2Rf ZGVjb2RlCiBlbmFibGVkIGxpYnY0bDIgICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBs aWJ2NGwyIGxpYnY0bDIgbGlidjRsMi5oIHY0bDJfaW9jdGwKIGVuYWJsZWQgbGlidmlkc3RhYiAg ICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYnZpZHN0YWIgInZpZHN0YWIgPj0gMC45OCIg dmlkLnN0YWIvbGlidmlkc3RhYi5oIHZzTW90aW9uRGV0ZWN0SW5pdAotZW5hYmxlZCBsaWJ2bWFm ICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGlidm1hZiAibGlidm1hZiA+PSAxLjUu MiIgbGlidm1hZi5oIGNvbXB1dGVfdm1hZgorZW5hYmxlZCBsaWJ2bWFmICAgICAgICAgICAmJiBy ZXF1aXJlX3BrZ19jb25maWcgbGlidm1hZiAibGlidm1hZiA+PSAyLjAuMCIgbGlidm1hZi5oIHZt YWZfaW5pdAogZW5hYmxlZCBsaWJ2b19hbXJ3YmVuYyAgICAmJiByZXF1aXJlIGxpYnZvX2Ftcndi ZW5jIHZvLWFtcndiZW5jL2VuY19pZi5oIEVfSUZfaW5pdCAtbHZvLWFtcndiZW5jCiBlbmFibGVk IGxpYnZvcmJpcyAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ2b3JiaXMgdm9yYmlz IHZvcmJpcy9jb2RlYy5oIHZvcmJpc19pbmZvX2luaXQgJiYKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVxdWlyZV9wa2dfY29uZmlnIGxpYnZvcmJpc2VuYyB2b3JiaXNlbmMgdm9yYmlz L3ZvcmJpc2VuYy5oIHZvcmJpc19lbmNvZGVfaW5pdApkaWZmIC0tZ2l0IGEvZG9jL2ZpbHRlcnMu dGV4aSBiL2RvYy9maWx0ZXJzLnRleGkKaW5kZXggZGE5NTY4OGM1My4uZTcyOGVlMTg1MCAxMDA2 NDQKLS0tIGEvZG9jL2ZpbHRlcnMudGV4aQorKysgYi9kb2MvZmlsdGVycy50ZXhpCkBAIC0xNDY2 Niw2OCArMTQ2NjYsMzkgQEAgZmZtcGVnIC1pIGlucHV0Lm1vdiAtdmYgbGVuc2Z1bj1tYWtlPUNh bm9uOm1vZGVsPSJDYW5vbiBFT1MgMTAwRCI6bGVuc19tb2RlbD0iQ2EKIAogQHNlY3Rpb24gbGli dm1hZgogCi1PYnRhaW4gdGhlIFZNQUYgKFZpZGVvIE11bHRpLU1ldGhvZCBBc3Nlc3NtZW50IEZ1 c2lvbikKLXNjb3JlIGJldHdlZW4gdHdvIGlucHV0IHZpZGVvcy4KK0NhbHVsYXRlIHRoZSBWTUFG IChWaWRlbyBNdWx0aS1NZXRob2QgQXNzZXNzbWVudCBGdXNpb24pIHNjb3JlIGZvciBhCityZWZl cmVuY2UvZGlzdG9ydGVkIHBhaXIgb2YgaW5wdXQgdmlkZW9zLgogCi1UaGUgZmlyc3QgaW5wdXQg aXMgdGhlIGVuY29kZWQgdmlkZW8sIGFuZCB0aGUgc2Vjb25kIGlucHV0IGlzIHRoZSByZWZlcmVu Y2UgdmlkZW8uCitUaGUgZmlyc3QgaW5wdXQgaXMgdGhlIGRpc3RvcnRlZCB2aWRlbywgYW5kIHRo ZSBzZWNvbmQgaW5wdXQgaXMgdGhlIHJlZmVyZW5jZSB2aWRlby4KIAogVGhlIG9idGFpbmVkIFZN QUYgc2NvcmUgaXMgcHJpbnRlZCB0aHJvdWdoIHRoZSBsb2dnaW5nIHN5c3RlbS4KIAogSXQgcmVx dWlyZXMgTmV0ZmxpeCdzIHZtYWYgbGlicmFyeSAobGlidm1hZikgYXMgYSBwcmUtcmVxdWlzaXRl LgogQWZ0ZXIgaW5zdGFsbGluZyB0aGUgbGlicmFyeSBpdCBjYW4gYmUgZW5hYmxlZCB1c2luZzoK IEBjb2Rley4vY29uZmlndXJlIC0tZW5hYmxlLWxpYnZtYWZ9LgotSWYgbm8gbW9kZWwgcGF0aCBp cyBzcGVjaWZpZWQgaXQgdXNlcyB0aGUgZGVmYXVsdCBtb2RlbDogQGNvZGV7dm1hZl92MC42LjEu cGtsfS4KIAogVGhlIGZpbHRlciBoYXMgZm9sbG93aW5nIG9wdGlvbnM6CiAKIEB0YWJsZSBAb3B0 aW9uCi1AaXRlbSBtb2RlbF9wYXRoCi1TZXQgdGhlIG1vZGVsIHBhdGggd2hpY2ggaXMgdG8gYmUg dXNlZCBmb3IgU1ZNLgotRGVmYXVsdCB2YWx1ZTogQGNvZGV7Ii91c3IvbG9jYWwvc2hhcmUvbW9k ZWwvdm1hZl92MC42LjEucGtsIn0KK0BpdGVtIG1vZGVsCitBIGB8YCBkZWxpbWl0ZWQgbGlzdCBv ZiB2bWFmIG1vZGVscy4gRWFjaCBtb2RlbCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIGEgbnVtYmVy IG9mIHBhcmFtZXRlcnMuCitEZWZhdWx0IHZhbHVlOiBAY29kZXsidmVyc2lvbj12bWFmX3YwLjYu MSJ9CisKK0BpdGVtIGZlYXR1cmUKK0EgYHxgIGRlbGltaXRlZCBsaXN0IG9mIGZlYXR1cmVzLiBF YWNoIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBhIG51bWJlciBvZiBwYXJhbWV0ZXJz LgogCiBAaXRlbSBsb2dfcGF0aAotU2V0IHRoZSBmaWxlIHBhdGggdG8gYmUgdXNlZCB0byBzdG9y ZSBsb2dzLgorU2V0IHRoZSBmaWxlIHBhdGggdG8gYmUgdXNlZCB0byBzdG9yZSBsb2cgZmlsZXMu CiAKIEBpdGVtIGxvZ19mbXQKLVNldCB0aGUgZm9ybWF0IG9mIHRoZSBsb2cgZmlsZSAoY3N2LCBq c29uIG9yIHhtbCkuCi0KLUBpdGVtIGVuYWJsZV90cmFuc2Zvcm0KLVRoaXMgb3B0aW9uIGNhbiBl bmFibGUvZGlzYWJsZSB0aGUgQGNvZGV7c2NvcmVfdHJhbnNmb3JtfSBhcHBsaWVkIHRvIHRoZSBm aW5hbCBwcmVkaWN0ZWQgVk1BRiBzY29yZSwKLWlmIHlvdSBoYXZlIHNwZWNpZmllZCBzY29yZV90 cmFuc2Zvcm0gb3B0aW9uIGluIHRoZSBpbnB1dCBwYXJhbWV0ZXIgZmlsZSBwYXNzZWQgdG8gQGNv ZGV7cnVuX3ZtYWZfdHJhaW5pbmcucHl9Ci1EZWZhdWx0IHZhbHVlOiBAY29kZXtmYWxzZX0KLQot QGl0ZW0gcGhvbmVfbW9kZWwKLUludm9rZXMgdGhlIHBob25lIG1vZGVsIHdoaWNoIHdpbGwgZ2Vu ZXJhdGUgVk1BRiBzY29yZXMgaGlnaGVyIHRoYW4gaW4gdGhlCi1yZWd1bGFyIG1vZGVsLCB3aGlj aCBpcyBtb3JlIHN1aXRhYmxlIGZvciBsYXB0b3AsIFRWLCBldGMuIHZpZXdpbmcgY29uZGl0aW9u cy4KLURlZmF1bHQgdmFsdWU6IEBjb2Rle2ZhbHNlfQotCi1AaXRlbSBwc25yCi1FbmFibGVzIGNv bXB1dGluZyBwc25yIGFsb25nIHdpdGggdm1hZi4KLURlZmF1bHQgdmFsdWU6IEBjb2Rle2ZhbHNl fQotCi1AaXRlbSBzc2ltCi1FbmFibGVzIGNvbXB1dGluZyBzc2ltIGFsb25nIHdpdGggdm1hZi4K LURlZmF1bHQgdmFsdWU6IEBjb2Rle2ZhbHNlfQotCi1AaXRlbSBtc19zc2ltCi1FbmFibGVzIGNv bXB1dGluZyBtc19zc2ltIGFsb25nIHdpdGggdm1hZi4KLURlZmF1bHQgdmFsdWU6IEBjb2Rle2Zh bHNlfQotCi1AaXRlbSBwb29sCi1TZXQgdGhlIHBvb2wgbWV0aG9kIHRvIGJlIHVzZWQgZm9yIGNv bXB1dGluZyB2bWFmLgotT3B0aW9ucyBhcmUgQGNvZGV7bWlufSwgQGNvZGV7aGFybW9uaWNfbWVh bn0gb3IgQGNvZGV7bWVhbn0gKGRlZmF1bHQpLgorU2V0IHRoZSBmb3JtYXQgb2YgdGhlIGxvZyBm aWxlICh4bWwsIGpzb24sIGNzdiwgb3Igc3ViKS4KIAogQGl0ZW0gbl90aHJlYWRzCi1TZXQgbnVt YmVyIG9mIHRocmVhZHMgdG8gYmUgdXNlZCB3aGVuIGNvbXB1dGluZyB2bWFmLgotRGVmYXVsdCB2 YWx1ZTogQGNvZGV7MH0sIHdoaWNoIG1ha2VzIHVzZSBvZiBhbGwgYXZhaWxhYmxlIGxvZ2ljYWwg cHJvY2Vzc29ycy4KK1NldCBudW1iZXIgb2YgdGhyZWFkcyB0byBiZSB1c2VkIHdoZW4gaW5pdGlh bGl6aW5nIGxpYnZtYWYuCitEZWZhdWx0IHZhbHVlOiBAY29kZXswfSwgbm8gdGhyZWFkcy4KIAog QGl0ZW0gbl9zdWJzYW1wbGUKLVNldCBpbnRlcnZhbCBmb3IgZnJhbWUgc3Vic2FtcGxpbmcgdXNl ZCB3aGVuIGNvbXB1dGluZyB2bWFmLgotRGVmYXVsdCB2YWx1ZTogQGNvZGV7MX0KLQotQGl0ZW0g ZW5hYmxlX2NvbmZfaW50ZXJ2YWwKLUVuYWJsZXMgY29uZmlkZW5jZSBpbnRlcnZhbC4KLURlZmF1 bHQgdmFsdWU6IEBjb2Rle2ZhbHNlfQorU2V0IGZyYW1lIHN1YnNhbXBsaW5nIGludGVydmFsIHRv IGJlIHVzZWQuCiBAZW5kIHRhYmxlCiAKIFRoaXMgZmlsdGVyIGFsc28gc3VwcG9ydHMgdGhlIEBy ZWZ7ZnJhbWVzeW5jfSBvcHRpb25zLgpAQCAtMTQ3MzUsMjMgKzE0NzA2LDMxIEBAIFRoaXMgZmls dGVyIGFsc28gc3VwcG9ydHMgdGhlIEByZWZ7ZnJhbWVzeW5jfSBvcHRpb25zLgogQHN1YnNlY3Rp b24gRXhhbXBsZXMKIEBpdGVtaXplCiBAaXRlbQotT24gdGhlIGJlbG93IGV4YW1wbGVzIHRoZSBp bnB1dCBmaWxlIEBmaWxle21haW4ubXBnfSBiZWluZyBwcm9jZXNzZWQgaXMKLWNvbXBhcmVkIHdp dGggdGhlIHJlZmVyZW5jZSBmaWxlIEBmaWxle3JlZi5tcGd9LgorSW4gdGhlIGV4YW1wbGVzIGJl bG93LCBhIGRpc3RvcnRlZCB2aWRlbyBAZmlsZXtkaXN0b3J0ZWQubXBnfSBpcworY29tcGFyZWQg d2l0aCBhIHJlZmVyZW5jZSBmaWxlIEBmaWxle3JlZmVyZW5jZS5tcGd9LgogCitAaXRlbQorQmFz aWMgdXNhZ2U6CitAZXhhbXBsZQorZmZtcGVnIC1pIGRpc3RvcnRlZC5tcGcgLWkgcmVmZXJlbmNl Lm1wZyAtbGF2ZmkgbGlidm1hZj1sb2dfcGF0aD1vdXRwdXQueG1sIC1mIG51bGwgLQorQGVuZCBl eGFtcGxlCisKK0BpdGVtCitFeGFtcGxlIHdpdGggbXVsdGlwbGUgbW9kZWxzOgogQGV4YW1wbGUK LWZmbXBlZyAtaSBtYWluLm1wZyAtaSByZWYubXBnIC1sYXZmaSBsaWJ2bWFmIC1mIG51bGwgLQor ZmZtcGVnIC1pIGRpc3RvcnRlZC5tcGcgLWkgcmVmZXJlbmNlLm1wZyAtbGF2ZmkgbGlidm1hZj0n bW9kZWw9dmVyc2lvbj12bWFmX3YwLjYuMVxcOm5hbWU9dm1hZnx2ZXJzaW9uPXZtYWZfdjAuNi4x bmVnXFw6bmFtZT12bWFmX25lZzpsb2dfcGF0aD1vdXRwdXQueG1sJyAtZiBudWxsIC0KIEBlbmQg ZXhhbXBsZQogCiBAaXRlbQotRXhhbXBsZSB3aXRoIG9wdGlvbnM6CitFeGFtcGxlIHdpdGggbXVs dGlwbGUgYWRkdGlvbmFsIGZlYXR1cmVzOgogQGV4YW1wbGUKLWZmbXBlZyAtaSBtYWluLm1wZyAt aSByZWYubXBnIC1sYXZmaSBsaWJ2bWFmPSJwc25yPTE6bG9nX2ZtdD1qc29uIiAtZiBudWxsIC0K K2ZmbXBlZyAtaSBkaXN0b3J0ZWQubXBnIC1pIHJlZmVyZW5jZS5tcGcgLWxhdmZpIGxpYnZtYWY9 J2ZlYXR1cmU9bmFtZT1wc25yfG5hbWU9Y2llZGU6bG9nX3BhdGg9b3V0cHV0LnhtbCcgLWYgbnVs bCAtCiBAZW5kIGV4YW1wbGUKIAogQGl0ZW0KIEV4YW1wbGUgd2l0aCBvcHRpb25zIGFuZCBkaWZm ZXJlbnQgY29udGFpbmVyczoKIEBleGFtcGxlCi1mZm1wZWcgLWkgbWFpbi5tcGcgLWkgcmVmLm1r diAtbGF2ZmkgIlswOnZdc2V0dGI9QVZUQixzZXRwdHM9UFRTLVNUQVJUUFRTW21haW5dO1sxOnZd c2V0dGI9QVZUQixzZXRwdHM9UFRTLVNUQVJUUFRTW3JlZl07W21haW5dW3JlZl1saWJ2bWFmPXBz bnI9MTpsb2dfZm10PWpzb24iIC1mIG51bGwgLQorZmZtcGVnIC1pIGRpc3RvcnRlZC5tcGcgLWkg cmVmZXJlbmNlLm1rdiAtbGF2ZmkgIlswOnZdc2V0dGI9QVZUQixzZXRwdHM9UFRTLVNUQVJUUFRT W21haW5dO1sxOnZdc2V0dGI9QVZUQixzZXRwdHM9UFRTLVNUQVJUUFRTW3JlZl07W21haW5dW3Jl Zl1saWJ2bWFmPWxvZ19mbXQ9anNvbjpsb2dfcGF0aD1vdXRwdXQuanNvbiIgLWYgbnVsbCAtCiBA ZW5kIGV4YW1wbGUKIEBlbmQgaXRlbWl6ZQogCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92Zl9s aWJ2bWFmLmMgYi9saWJhdmZpbHRlci92Zl9saWJ2bWFmLmMKaW5kZXggNWQ0OTIxMjZlYi4uNGZl NjMzYmI2NSAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvdmZfbGlidm1hZi5jCisrKyBiL2xpYmF2 ZmlsdGVyL3ZmX2xpYnZtYWYuYwpAQCAtMjQsOCArMjQsOCBAQAogICogQ2FsY3VsYXRlIHRoZSBW TUFGIGJldHdlZW4gdHdvIGlucHV0IHZpZGVvcy4KICAqLwogCi0jaW5jbHVkZSA8cHRocmVhZC5o PgogI2luY2x1ZGUgPGxpYnZtYWYuaD4KKwogI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5o IgogI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKICNpbmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVz Yy5oIgpAQCAtMzksMjEwICszOSwzNzEgQEAKIHR5cGVkZWYgc3RydWN0IExJQlZNQUZDb250ZXh0 IHsKICAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKICAgICBGRkZyYW1lU3luYyBmczsKLSAgICBj b25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2M7Ci0gICAgaW50IHdpZHRoOwotICAgIGludCBo ZWlnaHQ7Ci0gICAgZG91YmxlIHZtYWZfc2NvcmU7Ci0gICAgaW50IHZtYWZfdGhyZWFkX2NyZWF0 ZWQ7Ci0gICAgcHRocmVhZF90IHZtYWZfdGhyZWFkOwotICAgIHB0aHJlYWRfbXV0ZXhfdCBsb2Nr OwotICAgIHB0aHJlYWRfY29uZF90IGNvbmQ7Ci0gICAgaW50IGVvZjsKLSAgICBBVkZyYW1lICpn bWFpbjsKLSAgICBBVkZyYW1lICpncmVmOwotICAgIGludCBmcmFtZV9zZXQ7Ci0gICAgY2hhciAq bW9kZWxfcGF0aDsKICAgICBjaGFyICpsb2dfcGF0aDsKICAgICBjaGFyICpsb2dfZm10OwotICAg IGludCBkaXNhYmxlX2NsaXA7Ci0gICAgaW50IGRpc2FibGVfYXZ4OwotICAgIGludCBlbmFibGVf dHJhbnNmb3JtOwotICAgIGludCBwaG9uZV9tb2RlbDsKLSAgICBpbnQgcHNucjsKLSAgICBpbnQg c3NpbTsKLSAgICBpbnQgbXNfc3NpbTsKLSAgICBjaGFyICpwb29sOwogICAgIGludCBuX3RocmVh ZHM7CiAgICAgaW50IG5fc3Vic2FtcGxlOwotICAgIGludCBlbmFibGVfY29uZl9pbnRlcnZhbDsK LSAgICBpbnQgZXJyb3I7CisgICAgY2hhciAqbW9kZWxfY2ZnOworICAgIGNoYXIgKmZlYXR1cmVf Y2ZnOworICAgIFZtYWZDb250ZXh0ICp2bWFmOworICAgIFZtYWZNb2RlbCAqKm1vZGVsOworICAg IHVuc2lnbmVkIG1vZGVsX2NudDsKKyAgICB1bnNpZ25lZCBmcmFtZV9jbnQ7CisgICAgdW5zaWdu ZWQgYnBjOwogfSBMSUJWTUFGQ29udGV4dDsKIAogI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2Yo TElCVk1BRkNvbnRleHQsIHgpCiAjZGVmaW5lIEZMQUdTIEFWX09QVF9GTEFHX0ZJTFRFUklOR19Q QVJBTXxBVl9PUFRfRkxBR19WSURFT19QQVJBTQogCiBzdGF0aWMgY29uc3QgQVZPcHRpb24gbGli dm1hZl9vcHRpb25zW10gPSB7Ci0gICAgeyJtb2RlbF9wYXRoIiwgICJTZXQgdGhlIG1vZGVsIHRv IGJlIHVzZWQgZm9yIGNvbXB1dGluZyB2bWFmLiIsICAgICAgICAgICAgICAgICAgICAgT0ZGU0VU KG1vZGVsX3BhdGgpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPSIvdXNyL2xvY2FsL3NoYXJl L21vZGVsL3ZtYWZfdjAuNi4xLnBrbCJ9LCAwLCAxLCBGTEFHU30sCi0gICAgeyJsb2dfcGF0aCIs ICAiU2V0IHRoZSBmaWxlIHBhdGggdG8gYmUgdXNlZCB0byBzdG9yZSBsb2dzLiIsICAgICAgICAg ICAgICAgICAgICAgICAgT0ZGU0VUKGxvZ19wYXRoKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0 cj1OVUxMfSwgMCwgMSwgRkxBR1N9LAotICAgIHsibG9nX2ZtdCIsICAiU2V0IHRoZSBmb3JtYXQg b2YgdGhlIGxvZyAoY3N2LCBqc29uIG9yIHhtbCkuIiwgICAgICAgICAgICAgICAgICAgICAgIE9G RlNFVChsb2dfZm10KSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj1OVUxMfSwgMCwgMSwgRkxB R1N9LAotICAgIHsiZW5hYmxlX3RyYW5zZm9ybSIsICAiRW5hYmxlcyB0cmFuc2Zvcm0gZm9yIGNv bXB1dGluZyB2bWFmLiIsICAgICAgICAgICAgICAgICAgICAgIE9GRlNFVChlbmFibGVfdHJhbnNm b3JtKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQ9MH0sIDAsIDEsIEZMQUdTfSwKLSAgICB7InBo b25lX21vZGVsIiwgICJJbnZva2VzIHRoZSBwaG9uZSBtb2RlbCB0aGF0IHdpbGwgZ2VuZXJhdGUg aGlnaGVyIFZNQUYgc2NvcmVzLiIsICBPRkZTRVQocGhvbmVfbW9kZWwpLCBBVl9PUFRfVFlQRV9C T09MLCB7Lmk2ND0wfSwgMCwgMSwgRkxBR1N9LAotICAgIHsicHNuciIsICAiRW5hYmxlcyBjb21w dXRpbmcgcHNuciBhbG9uZyB3aXRoIHZtYWYuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE9GRlNFVChwc25yKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQ9MH0sIDAsIDEsIEZMQUdT fSwKLSAgICB7InNzaW0iLCAgIkVuYWJsZXMgY29tcHV0aW5nIHNzaW0gYWxvbmcgd2l0aCB2bWFm LiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRkZTRVQoc3NpbSksIEFWX09QVF9U WVBFX0JPT0wsIHsuaTY0PTB9LCAwLCAxLCBGTEFHU30sCi0gICAgeyJtc19zc2ltIiwgICJFbmFi bGVzIGNvbXB1dGluZyBtcy1zc2ltIGFsb25nIHdpdGggdm1hZi4iLCAgICAgICAgICAgICAgICAg ICAgICAgICAgT0ZGU0VUKG1zX3NzaW0pLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2ND0wfSwgMCwg MSwgRkxBR1N9LAotICAgIHsicG9vbCIsICAiU2V0IHRoZSBwb29sIG1ldGhvZCB0byBiZSB1c2Vk IGZvciBjb21wdXRpbmcgdm1hZi4iLCAgICAgICAgICAgICAgICAgICAgIE9GRlNFVChwb29sKSwg QVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0cj1OVUxMfSwgMCwgMSwgRkxBR1N9LAotICAgIHsibl90 aHJlYWRzIiwgIlNldCBudW1iZXIgb2YgdGhyZWFkcyB0byBiZSB1c2VkIHdoZW4gY29tcHV0aW5n IHZtYWYuIiwgICAgICAgICAgICAgIE9GRlNFVChuX3RocmVhZHMpLCBBVl9PUFRfVFlQRV9JTlQs IHsuaTY0PTB9LCAwLCBVSU5UX01BWCwgRkxBR1N9LAotICAgIHsibl9zdWJzYW1wbGUiLCAiU2V0 IGludGVydmFsIGZvciBmcmFtZSBzdWJzYW1wbGluZyB1c2VkIHdoZW4gY29tcHV0aW5nIHZtYWYu IiwgICAgIE9GRlNFVChuX3N1YnNhbXBsZSksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQ9MX0sIDEs IFVJTlRfTUFYLCBGTEFHU30sCi0gICAgeyJlbmFibGVfY29uZl9pbnRlcnZhbCIsICAiRW5hYmxl cyBjb25maWRlbmNlIGludGVydmFsLiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGU0VU KGVuYWJsZV9jb25mX2ludGVydmFsKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQ9MH0sIDAsIDEs IEZMQUdTfSwKKyAgICB7Im1vZGVsIiwgIlNldCB0aGUgbW9kZWwgdG8gYmUgdXNlZCBmb3IgY29t cHV0aW5nIHZtYWYuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRlNFVChtb2RlbF9j ZmcpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPSJ2ZXJzaW9uPXZtYWZfdjAuNi4xIn0sIDAs IDEsIEZMQUdTfSwKKyAgICB7ImZlYXR1cmUiLCAiU2V0IHRoZSBmZWF0dXJlIHRvIGJlIHVzZWQg Zm9yIGNvbXB1dGluZyB2bWFmLiIsICAgICAgICAgICAgICAgICAgICAgICAgIE9GRlNFVChmZWF0 dXJlX2NmZyksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9TlVMTH0sIDAsIDEsIEZMQUdTfSwK KyAgICB7ImxvZ19wYXRoIiwgICJTZXQgdGhlIGZpbGUgcGF0aCB0byBiZSB1c2VkIHRvIHdyaXRl IGxvZy4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRlNFVChsb2dfcGF0aCksIEFWX09Q VF9UWVBFX1NUUklORywgey5zdHI9TlVMTH0sIDAsIDEsIEZMQUdTfSwKKyAgICB7ImxvZ19mbXQi LCAgIlNldCB0aGUgZm9ybWF0IG9mIHRoZSBsb2cgKGNzdiwganNvbiwgeG1sLCBvciBzdWIpLiIs ICAgICAgICAgICAgICAgICAgIE9GRlNFVChsb2dfZm10KSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7 LnN0cj0ieG1sIn0sIDAsIDEsIEZMQUdTfSwKKyAgICB7Im5fdGhyZWFkcyIsICJTZXQgbnVtYmVy IG9mIHRocmVhZHMgdG8gYmUgdXNlZCB3aGVuIGNvbXB1dGluZyB2bWFmLiIsICAgICAgICAgICAg ICAgIE9GRlNFVChuX3RocmVhZHMpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0PTB9LCAwLCBVSU5U X01BWCwgRkxBR1N9LAorICAgIHsibl9zdWJzYW1wbGUiLCAiU2V0IGludGVydmFsIGZvciBmcmFt ZSBzdWJzYW1wbGluZyB1c2VkIHdoZW4gY29tcHV0aW5nIHZtYWYuIiwgICAgICAgT0ZGU0VUKG5f c3Vic2FtcGxlKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND0xfSwgMSwgVUlOVF9NQVgsIEZMQUdT fSwKICAgICB7IE5VTEwgfQogfTsKIAogRlJBTUVTWU5DX0RFRklORV9DTEFTUyhsaWJ2bWFmLCBM SUJWTUFGQ29udGV4dCwgZnMpOwogCi0jZGVmaW5lIHJlYWRfZnJhbWVfZm4odHlwZSwgYml0cykg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdGF0 aWMgaW50IHJlYWRfZnJhbWVfIyNiaXRzIyNiaXQoZmxvYXQgKnJlZl9kYXRhLCBmbG9hdCAqbWFp bl9kYXRhLCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm bG9hdCAqdGVtcF9kYXRhLCBpbnQgc3RyaWRlLCB2b2lkICpjdHgpICBcCi17ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICBMSUJWTUFGQ29udGV4dCAqcyA9IChMSUJWTUFGQ29udGV4dCAqKSBj dHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGludCByZXQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgXAotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcy0+bG9jayk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgXAotICAgIHdoaWxl ICghcy0+ZnJhbWVfc2V0ICYmICFzLT5lb2YpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgICAgIHB0aHJlYWRfY29uZF93YWl0KCZzLT5jb25kLCAmcy0+ bG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgIFwKLSAgICBpZiAocy0+ZnJhbWVfc2V0KSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpbnQg cmVmX3N0cmlkZSA9IHMtPmdyZWYtPmxpbmVzaXplWzBdOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICAgIGludCBtYWluX3N0cmlkZSA9IHMtPmdtYWluLT5saW5lc2l6 ZVswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgXAotICAgICAg ICBjb25zdCB0eXBlICpyZWZfcHRyID0gKGNvbnN0IHR5cGUgKikgcy0+Z3JlZi0+ZGF0YVswXTsg ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IHR5cGUgKm1haW5fcHRyID0gKGNvbnN0 IHR5cGUgKikgcy0+Z21haW4tPmRhdGFbMF07ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgXAot ICAgICAgICBmbG9hdCAqcHRyID0gcmVmX2RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGZsb2F0IGZhY3RvciA9IDEuZiAvICgx IDw8IChiaXRzIC0gOCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgXAotICAgICAgICBpbnQgaCA9IHMtPmhlaWdodDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGludCB3ID0gcy0+d2lkdGg7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICAgICAgXAotICAgICAgICBpbnQgaSxqOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFwKLSAgICAgICAg Zm9yIChpID0gMDsgaSA8IGg7IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCB3OyBqKyspIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAg ICAgcHRyW2pdID0gcmVmX3B0cltqXSAqIGZhY3RvcjsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmVmX3B0 ciArPSByZWZfc3RyaWRlIC8gc2l6ZW9mKCpyZWZfcHRyKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgICAgICBwdHIgKz0gc3RyaWRlIC8gc2l6ZW9mKCpwdHIpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgICAgICBcCi0gICAgICAgIHB0ciA9IG1haW5fZGF0YTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgXAotICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdzsgaisrKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg ICAgICBwdHJbal0gPSBtYWluX3B0cltqXSAqIGZhY3RvcjsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBtYWlu X3B0ciArPSBtYWluX3N0cmlkZSAvIHNpemVvZigqbWFpbl9wdHIpOyAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgICAgIHB0ciArPSBzdHJpZGUgLyBzaXplb2YoKnB0cik7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBcCi0gICAgcmV0ID0gIXMtPmZyYW1l X3NldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICBcCi0gICAgYXZfZnJhbWVfdW5yZWYocy0+Z3JlZik7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhdl9mcmFtZV91bnJl ZihzLT5nbWFpbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIHMtPmZyYW1lX3NldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgXAotICAgIHB0aHJlYWRfY29u ZF9zaWduYWwoJnMtPmNvbmQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJnMtPmxvY2spOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBcCi0gICAgaWYgKHJldCkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgXAotICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgZW51bSBWbWFm UGl4ZWxGb3JtYXQgcGl4X2ZtdF9tYXAoZW51bSBBVlBpeGVsRm9ybWF0IGF2X3BpeF9mbXQpCit7 CisgICAgc3dpdGNoIChhdl9waXhfZm10KSB7CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFA6 CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAxMExFOgorICAgIGNhc2UgQVZfUElYX0ZNVF9Z VVY0MjBQMTJMRToKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDE2TEU6CisgICAgICAgIHJl dHVybiBWTUFGX1BJWF9GTVRfWVVWNDIwUDsKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDoK KyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDEwTEU6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lV VjQyMlAxMkxFOgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQMTZMRToKKyAgICAgICAgcmV0 dXJuIFZNQUZfUElYX0ZNVF9ZVVY0MjJQOworICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQOgor ICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQMTBMRToKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVW NDQ0UDEyTEU6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxNkxFOgorICAgICAgICByZXR1 cm4gVk1BRl9QSVhfRk1UX1lVVjQ0NFA7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFZN QUZfUElYX0ZNVF9VTktOT1dOOworICAgIH0KIH0KIAotcmVhZF9mcmFtZV9mbih1aW50OF90LCA4 KTsKLXJlYWRfZnJhbWVfZm4odWludDE2X3QsIDEwKTsKK3N0YXRpYyBpbnQgY29weV9waWN0dXJl X2RhdGEoQVZGcmFtZSAqc3JjLCBWbWFmUGljdHVyZSAqZHN0LCB1bnNpZ25lZCBicGMpCit7Cisg ICAgaW50IGVyciA9IHZtYWZfcGljdHVyZV9hbGxvYyhkc3QsIHBpeF9mbXRfbWFwKHNyYy0+Zm9y bWF0KSwgYnBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT53aWR0aCwg c3JjLT5oZWlnaHQpOworICAgIGlmIChlcnIpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAg ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgIHVpbnQ4X3QgKnNy Y19kYXRhID0gc3JjLT5kYXRhW2ldOworICAgICAgICB1aW50OF90ICpkc3RfZGF0YSA9IGRzdC0+ ZGF0YVtpXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGRzdC0+aFtpXTsgaisr KSB7CisgICAgICAgICAgICBtZW1jcHkoZHN0X2RhdGEsIHNyY19kYXRhLCBzaXplb2YoKmRzdF9k YXRhKSAqIGRzdC0+d1tpXSk7CisgICAgICAgICAgICBzcmNfZGF0YSArPSBzcmMtPmxpbmVzaXpl W2ldOworICAgICAgICAgICAgZHN0X2RhdGEgKz0gZHN0LT5zdHJpZGVbaV07CisgICAgICAgIH0K KyAgICB9CiAKLXN0YXRpYyB2b2lkIGNvbXB1dGVfdm1hZl9zY29yZShMSUJWTUFGQ29udGV4dCAq cykKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb192bWFmKEZGRnJhbWVTeW5jICpm cykKIHsKLSAgICBpbnQgKCpyZWFkX2ZyYW1lKShmbG9hdCAqcmVmX2RhdGEsIGZsb2F0ICptYWlu X2RhdGEsIGZsb2F0ICp0ZW1wX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmlk ZSwgdm9pZCAqY3R4KTsKLSAgICBjaGFyICpmb3JtYXQ7Ci0KLSAgICBpZiAocy0+ZGVzYy0+Y29t cFswXS5kZXB0aCA8PSA4KSB7Ci0gICAgICAgIHJlYWRfZnJhbWUgPSByZWFkX2ZyYW1lXzhiaXQ7 Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVhZF9mcmFtZSA9IHJlYWRfZnJhbWVfMTBiaXQ7Cisg ICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBmcy0+cGFyZW50OworICAgIExJQlZNQUZDb250ZXh0 ICpzID0gY3R4LT5wcml2OworICAgIEFWRnJhbWUgKnJlZiwgKmRpc3Q7CisgICAgaW50IGVyciA9 IDA7CisKKyAgICBpbnQgcmV0ID0gZmZfZnJhbWVzeW5jX2R1YWxpbnB1dF9nZXQoZnMsICZkaXN0 LCAmcmVmKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICBpZiAo Y3R4LT5pc19kaXNhYmxlZCB8fCAhcmVmKQorICAgICAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1l KGN0eC0+b3V0cHV0c1swXSwgZGlzdCk7CisKKyAgICBWbWFmUGljdHVyZSBwaWNfcmVmOworICAg IGVyciA9IGNvcHlfcGljdHVyZV9kYXRhKHJlZiwgJnBpY19yZWYsIHMtPmJwYyk7CisgICAgaWYg KGVycikgeworICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAicHJvYmxlbSBkdXJpbmcg dm1hZl9waWN0dXJlX2FsbG9jLlxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 CiAgICAgfQogCi0gICAgZm9ybWF0ID0gKGNoYXIgKikgcy0+ZGVzYy0+bmFtZTsKKyAgICBWbWFm UGljdHVyZSBwaWNfZGlzdDsKKyAgICBlcnIgPSBjb3B5X3BpY3R1cmVfZGF0YShkaXN0LCAmcGlj X2Rpc3QsIHMtPmJwYyk7CisgICAgaWYgKGVycikgeworICAgICAgICBhdl9sb2cocywgQVZfTE9H X0VSUk9SLCAicHJvYmxlbSBkdXJpbmcgdm1hZl9waWN0dXJlX2FsbG9jLlxuIik7CisgICAgICAg IHZtYWZfcGljdHVyZV91bnJlZigmcGljX3JlZik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CisgICAgfQogCi0gICAgcy0+ZXJyb3IgPSBjb21wdXRlX3ZtYWYoJnMtPnZtYWZfc2Nv cmUsIGZvcm1hdCwgcy0+d2lkdGgsIHMtPmhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZWFkX2ZyYW1lLCBzLCBzLT5tb2RlbF9wYXRoLCBzLT5sb2dfcGF0aCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzLT5sb2dfZm10LCAwLCAwLCBzLT5lbmFibGVfdHJhbnNmb3Jt LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnBob25lX21vZGVsLCBzLT5wc25yLCBz LT5zc2ltLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPm1zX3NzaW0sIHMtPnBvb2ws Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bl90aHJlYWRzLCBzLT5uX3N1YnNhbXBs ZSwgcy0+ZW5hYmxlX2NvbmZfaW50ZXJ2YWwpOworICAgIGVyciA9IHZtYWZfcmVhZF9waWN0dXJl cyhzLT52bWFmLCAmcGljX3JlZiwgJnBpY19kaXN0LCBzLT5mcmFtZV9jbnQrKyk7CisgICAgaWYg KGVycikgeworICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAicHJvYmxlbSBkdXJpbmcg dm1hZl9yZWFkX3BpY3R1cmVzLlxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7 CisgICAgfQorCisgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShjdHgtPm91dHB1dHNbMF0sIGRp c3QpOwogfQogCi1zdGF0aWMgdm9pZCAqY2FsbF92bWFmKHZvaWQgKmN0eCkKK3N0YXRpYyBBVkRp Y3Rpb25hcnkgKipkZWxpbWl0ZWRfZGljdF9wYXJzZShjaGFyICpzdHIsIHVuc2lnbmVkICpjbnQp CiB7Ci0gICAgTElCVk1BRkNvbnRleHQgKnMgPSAoTElCVk1BRkNvbnRleHQgKikgY3R4OwotICAg IGNvbXB1dGVfdm1hZl9zY29yZShzKTsKLSAgICBpZiAoIXMtPmVycm9yKSB7Ci0gICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiVk1BRiBzY29yZTogJWZcbiIscy0+dm1hZl9zY29yZSk7 Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZzLT5sb2NrKTsKLSAg ICAgICAgcHRocmVhZF9jb25kX3NpZ25hbCgmcy0+Y29uZCk7Ci0gICAgICAgIHB0aHJlYWRfbXV0 ZXhfdW5sb2NrKCZzLT5sb2NrKTsKKyAgICBpbnQgZXJyID0gMDsKKyAgICBpZiAoIXN0cikgcmV0 dXJuIE5VTEw7CisKKyAgICAqY250ID0gMTsKKyAgICBmb3IgKGNoYXIgKnAgPSBzdHI7ICpwOyBw KyspIHsKKyAgICAgICAgaWYgKCpwID09ICd8JykKKyAgICAgICAgICAgICgqY250KSsrOwogICAg IH0KLSAgICBwdGhyZWFkX2V4aXQoTlVMTCk7CisKKyAgICBBVkRpY3Rpb25hcnkgKipkaWN0ID0g YXZfY2FsbG9jKCpjbnQsIHNpemVvZigqZGljdCkpOworICAgIGlmICghZGljdCkgZ290byBmYWls OworCisgICAgY2hhciAqc3RyX2NvcHkgPSBhdl9zdHJkdXAoc3RyKTsKKyAgICBpZiAoIXN0cl9j b3B5KSBnb3RvIGZhaWw7CisKKyAgICBjaGFyICpzYXZlcHRyID0gTlVMTDsKKyAgICBmb3IgKHVu c2lnbmVkIGkgPSAwOyBpIDwgKmNudDsgaSsrKSB7CisgICAgICAgIGNoYXIgKnMgPSBhdl9zdHJ0 b2soaSA9PSAwID8gc3RyX2NvcHkgOiBOVUxMLCAifCIsICZzYXZlcHRyKTsKKyAgICAgICAgZXJy ID0gYXZfZGljdF9wYXJzZV9zdHJpbmcoJmRpY3RbaV0sIHMsICI9IiwgIjoiLCAwKTsKKyAgICAg ICAgaWYgKGVycikgZ290byBmYWlsOworICAgIH0KKworICAgIGF2X2ZyZWUoc3RyX2NvcHkpOwor ICAgIHJldHVybiBkaWN0OworCitmYWlsOgorICAgIGlmIChkaWN0KSB7CisgICAgICAgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCAqY250OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChkaWN0W2ld KQorICAgICAgICAgICAgICAgIGF2X2RpY3RfZnJlZSgmZGljdFtpXSk7CisgICAgICAgIH0KKyAg ICAgICAgYXZfZnJlZShkaWN0KTsKKyAgICB9CisgICAgaWYgKHN0cl9jb3B5KQorICAgICAgICBh dl9mcmVlKHN0cl9jb3B5KTsKKyAgICAqY250ID0gMDsKICAgICByZXR1cm4gTlVMTDsKIH0KIAot c3RhdGljIGludCBkb192bWFmKEZGRnJhbWVTeW5jICpmcykKK3N0YXRpYyBpbnQgcGFyc2VfZmVh dHVyZXMoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiB7Ci0gICAgQVZGaWx0ZXJDb250ZXh0ICpjdHgg PSBmcy0+cGFyZW50OwogICAgIExJQlZNQUZDb250ZXh0ICpzID0gY3R4LT5wcml2OwotICAgIEFW RnJhbWUgKm1hc3RlciwgKnJlZjsKLSAgICBpbnQgcmV0OworICAgIGlmICghcy0+ZmVhdHVyZV9j ZmcpIHJldHVybiAwOwogCi0gICAgcmV0ID0gZmZfZnJhbWVzeW5jX2R1YWxpbnB1dF9nZXQoZnMs ICZtYXN0ZXIsICZyZWYpOwotICAgIGlmIChyZXQgPCAwKQotICAgICAgICByZXR1cm4gcmV0Owot ICAgIGlmICghcmVmKQotICAgICAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKGN0eC0+b3V0cHV0 c1swXSwgbWFzdGVyKTsKKyAgICBpbnQgZXJyID0gMDsKKworICAgIHVuc2lnbmVkIGRpY3RfY250 ID0gMDsKKyAgICBBVkRpY3Rpb25hcnkgKipkaWN0ID0gZGVsaW1pdGVkX2RpY3RfcGFyc2Uocy0+ ZmVhdHVyZV9jZmcsICZkaWN0X2NudCk7CisgICAgaWYgKCFkaWN0KSB7CisgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJjb3VsZCBub3QgcGFyc2UgZmVh dHVyZSBjb25maWc6ICVzXG4iLCBzLT5mZWF0dXJlX2NmZyk7CisgICAgICAgIHJldHVybiBBVkVS Uk9SKEVJTlZBTCk7CisgICAgfQogCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZzLT5sb2NrKTsK KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGljdF9jbnQ7IGkrKykgeworICAgICAgICBj aGFyICpmZWF0dXJlX25hbWUgPSBOVUxMOworICAgICAgICBWbWFmRmVhdHVyZURpY3Rpb25hcnkg KmZlYXR1cmVfb3B0c19kaWN0ID0gTlVMTDsKKyAgICAgICAgQVZEaWN0aW9uYXJ5RW50cnkgKmUg PSBOVUxMOworCisgICAgICAgIHdoaWxlIChlID0gYXZfZGljdF9nZXQoZGljdFtpXSwgIiIsIGUs IEFWX0RJQ1RfSUdOT1JFX1NVRkZJWCkpIHsKKyAgICAgICAgICAgIGlmIChhdl9zdHJpc3RyKGUt PmtleSwgIm5hbWUiKSkgeworICAgICAgICAgICAgICAgIGZlYXR1cmVfbmFtZSA9IGUtPnZhbHVl OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg ICBlcnIgPSB2bWFmX2ZlYXR1cmVfZGljdGlvbmFyeV9zZXQoJmZlYXR1cmVfb3B0c19kaWN0LCBl LT5rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+ dmFsdWUpOworICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBzZXQg ZmVhdHVyZSBvcHRpb246ICVzLiVzPSVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBmZWF0 dXJlX25hbWUsIGUtPmtleSwgZS0+dmFsdWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGVyciA9IHZtYWZfdXNlX2ZlYXR1 cmUocy0+dm1hZiwgZmVhdHVyZV9uYW1lLCBmZWF0dXJlX29wdHNfZGljdCk7CisgICAgICAgIGlm IChlcnIpIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAg ICAgICAgICAgICAicHJvYmxlbSBkdXJpbmcgdm1hZl91c2VfZmVhdHVyZTogJXNcbiIsIGZlYXR1 cmVfbmFtZSk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CiAKLSAg ICB3aGlsZSAocy0+ZnJhbWVfc2V0ICYmICFzLT5lcnJvcikgewotICAgICAgICBwdGhyZWFkX2Nv bmRfd2FpdCgmcy0+Y29uZCwgJnMtPmxvY2spOworZXhpdDoKKyAgICBmb3IgKHVuc2lnbmVkIGkg PSAwOyBpIDwgZGljdF9jbnQ7IGkrKykgeworICAgICAgICBpZiAoZGljdFtpXSkKKyAgICAgICAg ICAgIGF2X2RpY3RfZnJlZSgmZGljdFtpXSk7CiAgICAgfQorICAgIGF2X2ZyZWUoZGljdCk7Cisg ICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwYXJzZV9tb2RlbHMoQVZGaWx0ZXJDb250 ZXh0ICpjdHgpCit7CisgICAgTElCVk1BRkNvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgaWYg KCFzLT5tb2RlbF9jZmcpIHJldHVybiAwOworCisgICAgaW50IGVyciA9IDA7CiAKLSAgICBpZiAo cy0+ZXJyb3IpIHsKKyAgICB1bnNpZ25lZCBkaWN0X2NudCA9IDA7CisgICAgQVZEaWN0aW9uYXJ5 ICoqZGljdCA9IGRlbGltaXRlZF9kaWN0X3BhcnNlKHMtPm1vZGVsX2NmZywgJmRpY3RfY250KTsK KyAgICBpZiAoIWRpY3QpIHsKICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAotICAg ICAgICAgICAgICAgImxpYnZtYWYgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGNoZWNrIGxvZyBmb3Ig ZGV0YWlsc1xuIik7Ci0gICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzLT5sb2NrKTsKKyAg ICAgICAgICAgICAgICJjb3VsZCBub3QgcGFyc2UgbW9kZWwgY29uZmlnOiAlc1xuIiwgcy0+bW9k ZWxfY2ZnKTsKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKICAgICB9CiAKLSAgICBh dl9mcmFtZV9yZWYocy0+Z3JlZiwgcmVmKTsKLSAgICBhdl9mcmFtZV9yZWYocy0+Z21haW4sIG1h c3Rlcik7CisgICAgcy0+bW9kZWxfY250ID0gZGljdF9jbnQ7CisgICAgcy0+bW9kZWwgPSBhdl9j YWxsb2Mocy0+bW9kZWxfY250LCBzaXplb2YoKnMtPm1vZGVsKSk7CisgICAgaWYgKCFzLT5tb2Rl bCkgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg PCBkaWN0X2NudDsgaSsrKSB7CisgICAgICAgIFZtYWZNb2RlbENvbmZpZyBtb2RlbF9jZmcgPSB7 MH07CisgICAgICAgIEFWRGljdGlvbmFyeUVudHJ5ICplID0gTlVMTDsKKyAgICAgICAgY2hhciAq dmVyc2lvbiwgKnBhdGg7CisKKyAgICAgICAgd2hpbGUgKGUgPSBhdl9kaWN0X2dldChkaWN0W2ld LCAiIiwgZSwgQVZfRElDVF9JR05PUkVfU1VGRklYKSkgeworICAgICAgICAgICAgaWYgKGF2X3N0 cmlzdHIoZS0+a2V5LCAiZGlzYWJsZV9jbGlwIikpIHsKKyAgICAgICAgICAgICAgICBtb2RlbF9j ZmcuZmxhZ3MgfD0gYXZfc3RyaXN0cihlLT52YWx1ZSwgInRydWUiKSA/CisgICAgICAgICAgICAg ICAgICAgIFZNQUZfTU9ERUxfRkxBR19ESVNBQkxFX0NMSVAgOiAwOworICAgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXZfc3RyaXN0cihl LT5rZXksICJlbmFibGVfdHJhbnNmb3JtIikpIHsKKyAgICAgICAgICAgICAgICBtb2RlbF9jZmcu ZmxhZ3MgfD0gYXZfc3RyaXN0cihlLT52YWx1ZSwgInRydWUiKSA/CisgICAgICAgICAgICAgICAg ICAgIFZNQUZfTU9ERUxfRkxBR19FTkFCTEVfVFJBTlNGT1JNIDogMDsKKyAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGF2X3N0cmlzdHIo ZS0+a2V5LCAibmFtZSIpKSB7CisgICAgICAgICAgICAgICAgbW9kZWxfY2ZnLm5hbWUgPSBlLT52 YWx1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgaWYgKGF2X3N0cmlzdHIoZS0+a2V5LCAidmVyc2lvbiIpKSB7CisgICAgICAgICAgICAg ICAgdmVyc2lvbiA9IGUtPnZhbHVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXZfc3RyaXN0cihlLT5rZXksICJwYXRoIikpIHsK KyAgICAgICAgICAgICAgICBwYXRoID0gZS0+dmFsdWU7CisgICAgICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyc2lvbikgewor ICAgICAgICAgICAgZXJyID0gdm1hZl9tb2RlbF9sb2FkKCZzLT5tb2RlbFtpXSwgJm1vZGVsX2Nm ZywgdmVyc2lvbik7CisgICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90 IGxvYWQgbGlidm1hZiBtb2RlbCB3aXRoIHZlcnNpb246ICVzXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICB2ZXJzaW9uKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocGF0aCAmJiAhcy0+bW9kZWxbaV0pIHsKKyAg ICAgICAgICAgIGVyciA9IHZtYWZfbW9kZWxfbG9hZF9mcm9tX3BhdGgoJnMtPm1vZGVsW2ldLCAm bW9kZWxfY2ZnLCBwYXRoKTsKKyAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICJjb3Vs ZCBub3QgbG9hZCBsaWJ2bWFmIG1vZGVsIHdpdGggcGF0aDogJXNcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgIGUtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXMtPm1vZGVsW2ldKSB7CisgICAgICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgImNvdWxk IG5vdCBsb2FkIGxpYnZtYWYgbW9kZWwgd2l0aCBjb25maWc6ICVzXG4iLAorICAgICAgICAgICAg ICAgICAgIHMtPm1vZGVsX2NmZyk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0K KworICAgICAgICBlID0gTlVMTDsKKyAgICAgICAgd2hpbGUgKGUgPSBhdl9kaWN0X2dldChkaWN0 W2ldLCAiIiwgZSwgQVZfRElDVF9JR05PUkVfU1VGRklYKSkgeworICAgICAgICAgICAgY2hhciAq ZmVhdHVyZV9vcHQgPSBOVUxMOworICAgICAgICAgICAgY2hhciAqZmVhdHVyZV9uYW1lID0gYXZf c3RydG9rKGUtPmtleSwgIi4iLCAmZmVhdHVyZV9vcHQpOworICAgICAgICAgICAgaWYgKCFmZWF0 dXJlX29wdCkgY29udGludWU7CisKKyAgICAgICAgICAgIFZtYWZGZWF0dXJlRGljdGlvbmFyeSAq ZmVhdHVyZV9vcHRzX2RpY3QgPSBOVUxMOworICAgICAgICAgICAgZXJyID0gdm1hZl9mZWF0dXJl X2RpY3Rpb25hcnlfc2V0KCZmZWF0dXJlX29wdHNfZGljdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX29wdCwgZS0+dmFsdWUpOworICAgICAg ICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwKKyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBzZXQgZmVhdHVyZSBvcHRpb246 ICVzLiVzPSVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX25hbWUsIGZlYXR1 cmVfb3B0LCBlLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgZXJyID0gQVZFUlJPUihFSU5WQUwp OworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgZXJyID0gdm1hZl9tb2RlbF9mZWF0dXJlX292ZXJsb2FkKHMtPm1vZGVsW2ldLCBmZWF0dXJl X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVh dHVyZV9vcHRzX2RpY3QpOworICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxk IG5vdCBvdmVybG9hZCBmZWF0dXJlOiAlc1xuIiwgZmVhdHVyZV9uYW1lKTsKKyAgICAgICAgICAg ICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgZ290byBleGl0Owor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogCi0gICAgcy0+ZnJhbWVfc2V0ID0gMTsK KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcy0+bW9kZWxfY250OyBpKyspIHsKKyAgICAg ICAgZXJyID0gdm1hZl91c2VfZmVhdHVyZXNfZnJvbV9tb2RlbChzLT52bWFmLCBzLT5tb2RlbFtp XSk7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwKKyAgICAgICAgICAgICAgICAgICAicHJvYmxlbSBkdXJpbmcgdm1hZl91c2VfZmVhdHVy ZXNfZnJvbV9tb2RlbFxuIik7CisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7Cisg ICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBwdGhyZWFkX2Nv bmRfc2lnbmFsKCZzLT5jb25kKTsKLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcy0+bG9jayk7 CitleGl0OgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaWN0X2NudDsgaSsrKSB7Cisg ICAgICAgIGlmIChkaWN0W2ldKQorICAgICAgICAgICAgYXZfZGljdF9mcmVlKCZkaWN0W2ldKTsK KyAgICB9CisgICAgYXZfZnJlZShkaWN0KTsKKyAgICByZXR1cm4gZXJyOworfQogCi0gICAgcmV0 dXJuIGZmX2ZpbHRlcl9mcmFtZShjdHgtPm91dHB1dHNbMF0sIG1hc3Rlcik7CitzdGF0aWMgZW51 bSBWbWFmTG9nTGV2ZWwgbG9nX2xldmVsX21hcChpbnQgbG9nX2xldmVsKQoreworICAgIHN3aXRj aCAobG9nX2xldmVsKSB7CisgICAgY2FzZSBBVl9MT0dfUVVJRVQ6CisgICAgICAgIHJldHVybiBW TUFGX0xPR19MRVZFTF9OT05FOworICAgIGNhc2UgQVZfTE9HX0VSUk9SOgorICAgICAgICByZXR1 cm4gVk1BRl9MT0dfTEVWRUxfRVJST1I7CisgICAgY2FzZSBBVl9MT0dfV0FSTklORzoKKyAgICAg ICAgcmV0dXJuIFZNQUZfTE9HX0xFVkVMX1dBUk5JTkc7CisgICAgY2FzZSBBVl9MT0dfSU5GTzoK KyAgICAgICAgcmV0dXJuIFZNQUZfTE9HX0xFVkVMX0lORk87CisgICAgY2FzZSBBVl9MT0dfREVC VUc6CisgICAgICAgIHJldHVybiBWTUFGX0xPR19MRVZFTF9ERUJVRzsKKyAgICBkZWZhdWx0Ogor ICAgICAgICByZXR1cm4gVk1BRl9MT0dfTEVWRUxfSU5GTzsKKyAgICB9CiB9CiAKIHN0YXRpYyBh dl9jb2xkIGludCBpbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQogewogICAgIExJQlZNQUZDb250 ZXh0ICpzID0gY3R4LT5wcml2OworICAgIGludCBlcnIgPSAwOwogCi0gICAgcy0+Z3JlZiA9IGF2 X2ZyYW1lX2FsbG9jKCk7Ci0gICAgcy0+Z21haW4gPSBhdl9mcmFtZV9hbGxvYygpOwotICAgIGlm ICghcy0+Z3JlZiB8fCAhcy0+Z21haW4pCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 CisgICAgVm1hZkNvbmZpZ3VyYXRpb24gY2ZnID0geworICAgICAgICAubG9nX2xldmVsID0gbG9n X2xldmVsX21hcChhdl9sb2dfZ2V0X2xldmVsKCkpLAorICAgICAgICAubl9zdWJzYW1wbGUgPSBz LT5uX3N1YnNhbXBsZSwKKyAgICAgICAgLm5fdGhyZWFkcyA9IHMtPm5fdGhyZWFkcywKKyAgICB9 OwogCi0gICAgcy0+ZXJyb3IgPSAwOworICAgIGVyciA9IHZtYWZfaW5pdCgmcy0+dm1hZiwgY2Zn KTsKKyAgICBpZiAoZXJyKSByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwogCi0gICAgcy0+dm1hZl90 aHJlYWRfY3JlYXRlZCA9IDA7Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZzLT5sb2NrLCBOVUxM KTsKLSAgICBwdGhyZWFkX2NvbmRfaW5pdCAoJnMtPmNvbmQsIE5VTEwpOworICAgIGVyciA9IHBh cnNlX21vZGVscyhjdHgpOworICAgIGlmIChlcnIpIHJldHVybiBlcnI7CisKKyAgICBlcnIgPSBw YXJzZV9mZWF0dXJlcyhjdHgpOworICAgIGlmIChlcnIpIHJldHVybiBlcnI7CiAKICAgICBzLT5m cy5vbl9ldmVudCA9IGRvX3ZtYWY7CiAgICAgcmV0dXJuIDA7CkBAIC0yNTYsMjYgKzQxNywzMCBA QCBzdGF0aWMgY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXRzW10gPSB7CiAKIHN0YXRp YyBpbnQgY29uZmlnX2lucHV0X3JlZihBVkZpbHRlckxpbmsgKmlubGluaykKIHsKLSAgICBBVkZp bHRlckNvbnRleHQgKmN0eCAgPSBpbmxpbmstPmRzdDsKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0 eCA9IGlubGluay0+ZHN0OwogICAgIExJQlZNQUZDb250ZXh0ICpzID0gY3R4LT5wcml2OwotICAg IGludCB0aDsKIAotICAgIGlmIChjdHgtPmlucHV0c1swXS0+dyAhPSBjdHgtPmlucHV0c1sxXS0+ dyB8fAotICAgICAgICBjdHgtPmlucHV0c1swXS0+aCAhPSBjdHgtPmlucHV0c1sxXS0+aCkgewot ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJXaWR0aCBhbmQgaGVpZ2h0IG9mIGlu cHV0IHZpZGVvcyBtdXN0IGJlIHNhbWUuXG4iKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsKKyAgICBpbnQgZXJyID0gMDsKKworICAgIGlmIChjdHgtPmlucHV0c1swXS0+dyAhPSBj dHgtPmlucHV0c1sxXS0+dykgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJp bnB1dCB3aWR0aCBtdXN0IG1hdGNoLlxuIik7CisgICAgICAgIGVyciB8PSBBVkVSUk9SKEVJTlZB TCk7CiAgICAgfQogCi0gICAgcy0+ZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoaW5saW5rLT5m b3JtYXQpOwotICAgIHMtPndpZHRoID0gY3R4LT5pbnB1dHNbMF0tPnc7Ci0gICAgcy0+aGVpZ2h0 ID0gY3R4LT5pbnB1dHNbMF0tPmg7CisgICAgaWYgKGN0eC0+aW5wdXRzWzBdLT5oICE9IGN0eC0+ aW5wdXRzWzFdLT5oKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgImlucHV0 IGhlaWdodCBtdXN0IG1hdGNoLlxuIik7CisgICAgICAgIGVyciB8PSBBVkVSUk9SKEVJTlZBTCk7 CisgICAgfQogCi0gICAgdGggPSBwdGhyZWFkX2NyZWF0ZSgmcy0+dm1hZl90aHJlYWQsIE5VTEws IGNhbGxfdm1hZiwgKHZvaWQgKikgcyk7Ci0gICAgaWYgKHRoKSB7Ci0gICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwgIlRocmVhZCBjcmVhdGlvbiBmYWlsZWQuXG4iKTsKLSAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICBpZiAoY3R4LT5pbnB1dHNbMF0tPmZvcm1hdCAh PSBjdHgtPmlucHV0c1sxXS0+Zm9ybWF0KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgImlucHV0IHBpeF9mbXQgbXVzdCBtYXRjaC5cbiIpOworICAgICAgICBlcnIgfD0gQVZF UlJPUihFSU5WQUwpOwogICAgIH0KLSAgICBzLT52bWFmX3RocmVhZF9jcmVhdGVkID0gMTsKKwor ICAgIGlmIChlcnIpIHJldHVybiBlcnI7CisKKyAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3Ig KmRlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0KGlubGluay0+Zm9ybWF0KTsKKyAgICBzLT5icGMg PSBkZXNjLT5jb21wWzBdLmRlcHRoOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zMDcsMjggKzQ3 Miw2NCBAQCBzdGF0aWMgaW50IGFjdGl2YXRlKEFWRmlsdGVyQ29udGV4dCAqY3R4KQogICAgIHJl dHVybiBmZl9mcmFtZXN5bmNfYWN0aXZhdGUoJnMtPmZzKTsKIH0KIAorc3RhdGljIGVudW0gVm1h Zk91dHB1dEZvcm1hdCBsb2dfZm10X21hcChjb25zdCBjaGFyICpsb2dfZm10KQoreworICAgIGlm IChhdl9zdHJpc3RyKGxvZ19mbXQsICJ4bWwiKSkKKyAgICAgICAgcmV0dXJuIFZNQUZfT1VUUFVU X0ZPUk1BVF9YTUw7CisgICAgaWYgKGF2X3N0cmlzdHIobG9nX2ZtdCwgImpzb24iKSkKKyAgICAg ICAgcmV0dXJuIFZNQUZfT1VUUFVUX0ZPUk1BVF9KU09OOworICAgIGlmIChhdl9zdHJpc3RyKGxv Z19mbXQsICJjc3YiKSkKKyAgICAgICAgcmV0dXJuIFZNQUZfT1VUUFVUX0ZPUk1BVF9DU1Y7Cisg ICAgaWYgKGF2X3N0cmlzdHIobG9nX2ZtdCwgInN1YiIpKQorICAgICAgICByZXR1cm4gVk1BRl9P VVRQVVRfRk9STUFUX1NVQjsKKworICAgIHJldHVybiBWTUFGX09VVFBVVF9GT1JNQVRfWE1MOwor fQorCiBzdGF0aWMgYXZfY29sZCB2b2lkIHVuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKIHsK ICAgICBMSUJWTUFGQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKIAorICAgIGludCBlcnIgPSAwOwor CiAgICAgZmZfZnJhbWVzeW5jX3VuaW5pdCgmcy0+ZnMpOwogCi0gICAgcHRocmVhZF9tdXRleF9s b2NrKCZzLT5sb2NrKTsKLSAgICBzLT5lb2YgPSAxOwotICAgIHB0aHJlYWRfY29uZF9zaWduYWwo JnMtPmNvbmQpOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzLT5sb2NrKTsKKyAgICBpZiAo IXMtPmZyYW1lX2NudCkgZ290byBjbGVhbl91cDsKIAotICAgIGlmIChzLT52bWFmX3RocmVhZF9j cmVhdGVkKQotICAgIHsKLSAgICAgICAgcHRocmVhZF9qb2luKHMtPnZtYWZfdGhyZWFkLCBOVUxM KTsKLSAgICAgICAgcy0+dm1hZl90aHJlYWRfY3JlYXRlZCA9IDA7CisgICAgZXJyID0gdm1hZl9y ZWFkX3BpY3R1cmVzKHMtPnZtYWYsIE5VTEwsIE5VTEwsIDApOworICAgIGlmIChlcnIpIHsKKyAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgInByb2JsZW0g Zmx1c2hpbmcgbGlidm1hZiBjb250ZXh0LlxuIik7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IHMtPm1vZGVsX2NudDsgaSsrKSB7CisgICAgICAgIGRvdWJsZSB2bWFmX3Nj b3JlOworICAgICAgICBlcnIgPSB2bWFmX3Njb3JlX3Bvb2xlZChzLT52bWFmLCBzLT5tb2RlbFtp XSwgVk1BRl9QT09MX01FVEhPRF9NRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdm1hZl9zY29yZSwgMCwgcy0+ZnJhbWVfY250IC0gMSk7CisgICAgICAgIGlmIChlcnIpIHsK KyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAg ICAicHJvYmxlbSBnZXR0aW5nIHBvb2xlZCB2bWFmIHNjb3JlLlxuIik7CisgICAgICAgIH0KKwor ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIlZNQUYgc2NvcmU6ICVmXG4iLCB2bWFm X3Njb3JlKTsKKyAgICB9CisKKyAgICBpZiAocy0+dm1hZikgeworICAgICAgICBpZiAocy0+bG9n X3BhdGggJiYgIWVycikKKyAgICAgICAgICAgIHZtYWZfd3JpdGVfb3V0cHV0KHMtPnZtYWYsIHMt PmxvZ19wYXRoLCBsb2dfZm10X21hcChzLT5sb2dfZm10KSk7CiAgICAgfQogCi0gICAgYXZfZnJh bWVfZnJlZSgmcy0+Z3JlZik7Ci0gICAgYXZfZnJhbWVfZnJlZSgmcy0+Z21haW4pOworY2xlYW5f dXA6CisgICAgaWYgKHMtPm1vZGVsKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg PCBzLT5tb2RlbF9jbnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKHMtPm1vZGVsW2ldKQorICAg ICAgICAgICAgICAgIHZtYWZfbW9kZWxfZGVzdHJveShzLT5tb2RlbFtpXSk7CisgICAgICAgIH0K KyAgICAgICAgYXZfZnJlZShzLT5tb2RlbCk7CisgICAgfQogCi0gICAgcHRocmVhZF9tdXRleF9k ZXN0cm95KCZzLT5sb2NrKTsKLSAgICBwdGhyZWFkX2NvbmRfZGVzdHJveSgmcy0+Y29uZCk7Cisg ICAgaWYgKHMtPnZtYWYpCisgICAgICAgIHZtYWZfY2xvc2Uocy0+dm1hZik7CiB9CiAKIHN0YXRp YyBjb25zdCBBVkZpbHRlclBhZCBsaWJ2bWFmX2lucHV0c1tdID0gewotLSAKMi4yNC4zIChBcHBs ZSBHaXQtMTI4KQoK --0000000000000dcef705d3ea86f5 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". --0000000000000dcef705d3ea86f5--