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 4B79345E27 for ; Mon, 12 Jun 2023 15:09:40 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3EF7D68C3F3; Mon, 12 Jun 2023 18:09:38 +0300 (EEST) Received: from mail-ua1-f43.google.com (mail-ua1-f43.google.com [209.85.222.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D25C868A7B9 for ; Mon, 12 Jun 2023 18:09:31 +0300 (EEST) Received: by mail-ua1-f43.google.com with SMTP id a1e0cc1a2514c-78676ca8435so3402079241.1 for ; Mon, 12 Jun 2023 08:09:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686582570; x=1689174570; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=s5yAy5db0URe15fSX3OqxMcsUfPbh6XfjpaF+epAxRE=; b=XmzlK3ys3j2n6Lio+zGTImzTlqn3Jx9Cqm47sQ0hqVuGLSByEQRRkBupF3o0bonOpq Y40sKRUvVU7NA/GMB+VRcuX+3JrELqs4xdI5weB0rPu+AMHjsdrDMMoGMvMcPPeq0cRt rghodU6DfFYT1cf2KgRVWKKbuZ+cvAXeMP3kpnTZU5Z2ti51oAxZSUnWOSZ7KOe5tsLs BJbI1cCo8TGeH+tZAkwYhtF3teq7HQRWTIjXKUi40Xqt2ShWJOT7m3qMxicPzMMV8AZe ltd08O7vfzw0lIVNRrBJ15jusEdqYs0cHfvZVo/UYP067JExqUinIRuTtOy1UxaSfz1O RMMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686582570; x=1689174570; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=s5yAy5db0URe15fSX3OqxMcsUfPbh6XfjpaF+epAxRE=; b=ZMGGWG49w/jVPRt6V3F0ffTc89nGmBSavzWdZ9FRQ60Fhfy6Qvc++hBfCUH/Blc83P sjy2r6NekgGqvygFctp0JeYM6vBBZmxpeRsKR0WqZ0gq1LX653XykIbp30YKljG7dCJ8 NNCrKiqseXCU/oROIrB4oL2V2WSpAUEpShZM5xy2Gunnwmc5lQ2FPs0kRp+6BOQLbssm qeRVBBk187GYx0cr9OLX3TRHDDfEg6R3i6E2VU0b3oyaFZHu0k0AHT3lxtxenas16i1e FzuLG+3mZwomJjHvK/DYcU8n9zu29k0TRnave9fHSvLJxjGpMz2MsFOseDNRpyLZZjib TYow== X-Gm-Message-State: AC+VfDyC54C0+Pb0PY4fEomVdBlBmwAGzZN5VBWtL8o3aNMj/5YGA38M qfROj0CGz6T+zoE7sHpfA5vmV11QZnNoCaASUJHPhPco X-Google-Smtp-Source: ACHHUZ6Y1SpR9aVic+L/PNH9/4tExtZht6Fpqx7IzcXUqaCMeBCq/bLpJREk5VpZ8deLrWvAYtnM2m8VWUFXXL0e44I= X-Received: by 2002:a05:6102:291e:b0:43b:2c84:1fca with SMTP id cz30-20020a056102291e00b0043b2c841fcamr5985790vsb.5.1686582570420; Mon, 12 Jun 2023 08:09:30 -0700 (PDT) MIME-Version: 1.0 References: <20230612122916.1894-1-d.kozinski@samsung.com> In-Reply-To: <20230612122916.1894-1-d.kozinski@samsung.com> From: Paul B Mahol Date: Mon, 12 Jun 2023 17:09:11 +0200 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v24 3/9] avformat/evc_demuxer: Added demuxer to handle reading EVC video files 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 Cc: Dawid Kozinski , d.frankiewic@samsung.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gTW9uLCBKdW4gMTIsIDIwMjMgYXQgMjoyOeKAr1BNIERhd2lkIEtvemluc2tpIDxkLmtvemlu c2tpQHNhbXN1bmcuY29tPgp3cm90ZToKCj4gLSBQcm92aWRlZCBBVklucHV0Rm9ybWF0IHN0cnVj dCBkZXNjcmliaW5nIEVWQyBpbnB1dCBmb3JtYXQKPiAoZmZfZXZjX2RlbXV4ZXIpCj4KPiBTaWdu ZWQtb2ZmLWJ5OiBEYXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4KPiAtLS0K PiAgbGliYXZjb2RlYy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKwo+ICBsaWJhdmNvZGVj L2V2Y19mcmFtZV9tZXJnZV9ic2YuYyB8IDE3MCArKysrKysrKysrKysrKysrKysrCj4gIGxpYmF2 Zm9ybWF0L01ha2VmaWxlICAgICAgICAgICAgIHwgICAxICsKPiAgbGliYXZmb3JtYXQvYWxsZm9y bWF0cy5jICAgICAgICAgfCAgIDEgKwo+ICBsaWJhdmZvcm1hdC9ldmNkZWMuYyAgICAgICAgICAg ICB8IDI3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDUgZmlsZXMgY2hhbmdl ZCwgNDQ5IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvZXZj X2ZyYW1lX21lcmdlX2JzZi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC9ldmNk ZWMuYwo+Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL01h a2VmaWxlCj4gaW5kZXggMTNlNjU4MmJlMy4uMzc2YzY0NjVjZiAxMDA2NDQKPiAtLS0gYS9saWJh dmNvZGVjL01ha2VmaWxlCj4gKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+IEBAIC0xMjU3LDYg KzEyNTcsNyBAQCBPQkpTLSQoQ09ORklHX1ZQOV9NRVRBREFUQV9CU0YpICAgICAgICAgICArPQo+ IHZwOV9tZXRhZGF0YV9ic2Yubwo+ICBPQkpTLSQoQ09ORklHX1ZQOV9SQVdfUkVPUkRFUl9CU0Yp ICAgICAgICArPSB2cDlfcmF3X3Jlb3JkZXJfYnNmLm8KPiAgT0JKUy0kKENPTkZJR19WUDlfU1VQ RVJGUkFNRV9CU0YpICAgICAgICAgKz0gdnA5X3N1cGVyZnJhbWVfYnNmLm8KPiAgT0JKUy0kKENP TkZJR19WUDlfU1VQRVJGUkFNRV9TUExJVF9CU0YpICAgKz0gdnA5X3N1cGVyZnJhbWVfc3BsaXRf YnNmLm8KPiArT0JKUy0kKENPTkZJR19FVkNfRlJBTUVfTUVSR0VfQlNGKSAgICAgICAgKz0gZXZj X2ZyYW1lX21lcmdlX2JzZi5vCj4KPiAgIyB0aHJlYWQgbGlicmFyaWVzCj4gIE9CSlMtJChIQVZF X0xJQkNfTVNWQ1JUKSAgICAgICAgICAgICAgICs9IGZpbGVfb3Blbi5vCj4gZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvZXZjX2ZyYW1lX21lcmdlX2JzZi5jCj4gYi9saWJhdmNvZGVjL2V2Y19mcmFt ZV9tZXJnZV9ic2YuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4u ZjdjNGUxOGQ3Ngo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmNvZGVjL2V2Y19mcmFtZV9t ZXJnZV9ic2YuYwo+IEBAIC0wLDAgKzEsMTcwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykg MjAxOSBKYW1lcyBBbG1lciA8amFtcmlhbEBnbWFpbC5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCj4gMDIxMTAtMTMwMSBVU0EKPiArICovCj4g KyNpbmNsdWRlICJnZXRfYml0cy5oIgo+ICsjaW5jbHVkZSAiZ29sb21iLmgiCj4gKyNpbmNsdWRl ICJic2YuaCIKPiArI2luY2x1ZGUgImJzZl9pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAiYXZjb2Rl Yy5oIgo+ICsKPiArI2luY2x1ZGUgImV2Yy5oIgo+ICsjaW5jbHVkZSAiZXZjX3BhcnNlLmgiCj4g Kwo+ICsjZGVmaW5lIElOSVRfQVVfQlVGX0NBUEFDSVRZIDEwMjQKPiArCj4gKy8vIEFjY2VzcyB1 bml0IGRhdGEKPiArdHlwZWRlZiBzdHJ1Y3QgQWNjZXNzVW5pdEJ1ZmZlciB7Cj4gKyAgICB1aW50 OF90ICpkYXRhOyAgICAgIC8vIHRoZSBkYXRhIGJ1ZmZlcgo+ICsgICAgc2l6ZV90IGRhdGFfc2l6 ZTsgICAvLyBzaXplIG9mIGRhdGEgaW4gYnl0ZXMKPiArICAgIHNpemVfdCBjYXBhY2l0eTsgICAg Ly8gYnVmZmVyIGNhcGFjaXR5Cj4gK30gQWNjZXNzVW5pdEJ1ZmZlcjsKPiArCj4gK3R5cGVkZWYg c3RydWN0IEVWQ0ZNZXJnZUNvbnRleHQgewo+ICsgICAgQVZQYWNrZXQgKmluOwo+ICsgICAgRVZD UGFyc2VyQ29udGV4dCBwYXJzZXJfY3R4Owo+ICsgICAgQWNjZXNzVW5pdEJ1ZmZlciBhdV9idWZm ZXI7Cj4gK30gRVZDRk1lcmdlQ29udGV4dDsKPiArCj4gK3N0YXRpYyBpbnQgZW5kX29mX2FjY2Vz c191bml0X2ZvdW5kKEVWQ1BhcnNlckNvbnRleHQgKnBhcnNlcl9jdHgpCj4gK3sKPiArICAgIGlm IChwYXJzZXJfY3R4LT5wcm9maWxlID09IDApIHsgLy8gQkFTRUxJTkUgcHJvZmlsZQo+ICsgICAg ICAgIGlmIChwYXJzZXJfY3R4LT5uYWx1X3R5cGUgPT0gRVZDX05PSURSX05VVCB8fAo+IHBhcnNl cl9jdHgtPm5hbHVfdHlwZSA9PSBFVkNfSURSX05VVCkKPiArICAgICAgICAgICAgcmV0dXJuIDE7 Cj4gKyAgICB9IGVsc2UgeyAvLyBNQUlOIHByb2ZpbGUKPiArICAgICAgICBpZiAocGFyc2VyX2N0 eC0+bmFsdV90eXBlID09IEVWQ19OT0lEUl9OVVQpIHsKPiArICAgICAgICAgICAgaWYgKHBhcnNl cl9jdHgtPnBvYy5QaWNPcmRlckNudFZhbCAhPQo+IHBhcnNlcl9jdHgtPnBvYy5wcmV2UGljT3Jk ZXJDbnRWYWwpCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKPiArICAgICAgICB9IGVsc2Ug aWYgKHBhcnNlcl9jdHgtPm5hbHVfdHlwZSA9PSBFVkNfSURSX05VVCkKPiArICAgICAgICAgICAg cmV0dXJuIDE7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgZXZjX2ZyYW1lX21lcmdlX2ZsdXNoKEFWQlNGQ29udGV4dCAqYnNmKQo+ICt7Cj4gKyAgICBF VkNGTWVyZ2VDb250ZXh0ICpjdHggPSBic2YtPnByaXZfZGF0YTsKPiArCj4gKyAgICBhdl9wYWNr ZXRfdW5yZWYoY3R4LT5pbik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZXZjX2ZyYW1lX21lcmdl X2ZpbHRlcihBVkJTRkNvbnRleHQgKmJzZiwgQVZQYWNrZXQgKm91dCkKPiArewo+ICsgICAgRVZD Rk1lcmdlQ29udGV4dCAqY3R4ID0gYnNmLT5wcml2X2RhdGE7Cj4gKyAgICBFVkNQYXJzZXJDb250 ZXh0ICpwYXJzZXJfY3R4ID0gJmN0eC0+cGFyc2VyX2N0eDsKPiArCj4gKyAgICBBVlBhY2tldCAq aW4gPSBjdHgtPmluOwo+ICsKPiArICAgIGludCBmcmVlX3NwYWNlID0gMDsKPiArICAgIHNpemVf dCAgbmFsdV9zaXplID0gMDsKPiArICAgIHVpbnQ4X3QgKm5hbHUgPSBOVUxMOwo+ICsgICAgaW50 IGF1X2VuZF9mb3VuZCA9IDA7Cj4gKyAgICBpbnQgZXJyOwo+ICsKPiArICAgIGVyciA9IGZmX2Jz Zl9nZXRfcGFja2V0X3JlZihic2YsIGluKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAg IHJldHVybiBlcnI7Cj4gKwo+ICsgICAgbmFsdV9zaXplID0gZmZfZXZjX3JlYWRfbmFsX3VuaXRf bGVuZ3RoKGluLT5kYXRhLAo+IEVWQ19OQUxVX0xFTkdUSF9QUkVGSVhfU0laRSwgYnNmKTsKPiAr ICAgIGlmKG5hbHVfc2l6ZSA8PSAwKSB7Cj4KCktlZXAgY29kZSBzdHlsZSBjb25zaXN0ZW50LiBI ZXJlIGlzIG1pc3Npbmcgc3BhY2UsICcgJy4KCisgICAgICAgIGF2X3BhY2tldF91bnJlZihpbik7 Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgbmFsdSA9IGluLT5kYXRhICsgRVZDX05BTFVfTEVOR1RIX1BSRUZJWF9TSVpFOwo+ICsgICAg bmFsdV9zaXplID0gaW4tPnNpemUgLSBFVkNfTkFMVV9MRU5HVEhfUFJFRklYX1NJWkU7Cj4gKwo+ ICsgICAgLy8gTkFMIHVuaXQgcGFyc2luZyBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlmIGVuZCBvZiBB VSB3YXMgZm91bmQKPiArICAgIGVyciA9IGZmX2V2Y19wYXJzZV9uYWxfdW5pdChwYXJzZXJfY3R4 LCBuYWx1LCBuYWx1X3NpemUsIGJzZik7Cj4gKyAgICBpZiAoZXJyIDwgMCkgewo+ICsgICAgICAg IGF2X2xvZyhic2YsIEFWX0xPR19FUlJPUiwgIk5BTCBVbml0IHBhcnNpbmcgZXJyb3JcbiIpOwo+ ICsgICAgICAgIGF2X3BhY2tldF91bnJlZihpbik7Cj4gKwo+ICsgICAgICAgIHJldHVybiBlcnI7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXVfZW5kX2ZvdW5kID0gZW5kX29mX2FjY2Vzc191bml0X2Zv dW5kKHBhcnNlcl9jdHgpOwo+ICsKPiArICAgIGZyZWVfc3BhY2UgPSBjdHgtPmF1X2J1ZmZlci5j YXBhY2l0eSAtIGN0eC0+YXVfYnVmZmVyLmRhdGFfc2l6ZTsKPiArICAgIHdoaWxlKCBmcmVlX3Nw YWNlIDwgaW4tPnNpemUgKSB7Cj4KCldyb25nIHN0eWxlLCBrZWVwIHN0eWxlIGNvbnNpc3RlbnQg d2l0aCBhbHJlYWR5IGV4aXN0aW5nIGZpbGVzIGluCmxpYmF2Zm9ybWF0LgoKCj4gKyAgICAgICAg Y3R4LT5hdV9idWZmZXIuY2FwYWNpdHkgKj0gMjsKPiArICAgICAgICBmcmVlX3NwYWNlID0gY3R4 LT5hdV9idWZmZXIuY2FwYWNpdHkgLSBjdHgtPmF1X2J1ZmZlci5kYXRhX3NpemU7Cj4gKwo+ICsg ICAgICAgIGlmKGZyZWVfc3BhY2UgPj0gaW4tPnNpemUpCj4gKyAgICAgICAgICAgIGN0eC0+YXVf YnVmZmVyLmRhdGEgPSBhdl9yZWFsbG9jKGN0eC0+YXVfYnVmZmVyLmRhdGEsCj4gY3R4LT5hdV9i dWZmZXIuY2FwYWNpdHkpOwo+ICsgICAgfQo+ICsKPiArICAgIG1lbWNweShjdHgtPmF1X2J1ZmZl ci5kYXRhICsgY3R4LT5hdV9idWZmZXIuZGF0YV9zaXplLCBpbi0+ZGF0YSwKPiBpbi0+c2l6ZSk7 Cj4gKwo+ICsgICAgY3R4LT5hdV9idWZmZXIuZGF0YV9zaXplICs9IGluLT5zaXplOwo+ICsKPiAr ICAgIGF2X3BhY2tldF91bnJlZihpbik7Cj4gKwo+ICsgICAgaWYoYXVfZW5kX2ZvdW5kKSB7Cj4g KyAgICAgICAgdWludDhfdCAqZGF0YSA9IGF2X21lbWR1cChjdHgtPmF1X2J1ZmZlci5kYXRhLAo+ IGN0eC0+YXVfYnVmZmVyLmRhdGFfc2l6ZSk7Cj4gKyAgICAgICAgZXJyID0gYXZfcGFja2V0X2Zy b21fZGF0YShvdXQsIGRhdGEsIGN0eC0+YXVfYnVmZmVyLmRhdGFfc2l6ZSk7Cj4gKwo+ICsgICAg ICAgIGN0eC0+YXVfYnVmZmVyLmRhdGFfc2l6ZSA9IDA7Cj4gKyAgICB9IGVsc2UKPiArICAgICAg ICBlcnIgPSBBVkVSUk9SKEVBR0FJTik7Cj4gKwo+ICsgICAgaWYgKGVyciA8IDAgJiYgZXJyICE9 IEFWRVJST1IoRUFHQUlOKSkKPiArICAgICAgICBldmNfZnJhbWVfbWVyZ2VfZmx1c2goYnNmKTsK PiArCj4gKyAgICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGV2Y19mcmFtZV9t ZXJnZV9pbml0KEFWQlNGQ29udGV4dCAqYnNmKQo+ICt7Cj4gKyAgICBFVkNGTWVyZ2VDb250ZXh0 ICpjdHggPSBic2YtPnByaXZfZGF0YTsKPiArCj4gKyAgICBjdHgtPmluICA9IGF2X3BhY2tldF9h bGxvYygpOwo+ICsgICAgaWYgKCFjdHgtPmluKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7Cj4gKwo+ICsgICAgY3R4LT5hdV9idWZmZXIuY2FwYWNpdHkgPSBJTklUX0FVX0JVRl9D QVBBQ0lUWTsKPiArICAgIGN0eC0+YXVfYnVmZmVyLmRhdGEgPSBhdl9tYWxsb2MoSU5JVF9BVV9C VUZfQ0FQQUNJVFkpOwo+ICsgICAgY3R4LT5hdV9idWZmZXIuZGF0YV9zaXplID0gMDsKPiArCj4g KyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZXZjX2ZyYW1lX21lcmdlX2Ns b3NlKEFWQlNGQ29udGV4dCAqYnNmKQo+ICt7Cj4gKyAgICBFVkNGTWVyZ2VDb250ZXh0ICpjdHgg PSBic2YtPnByaXZfZGF0YTsKPiArCj4gKyAgICBhdl9wYWNrZXRfZnJlZSgmY3R4LT5pbik7Cj4g Kwo+ICsgICAgY3R4LT5hdV9idWZmZXIuY2FwYWNpdHkgPSAwOwo+ICsgICAgYXZfZnJlZXAoJmN0 eC0+YXVfYnVmZmVyLmRhdGEpOwo+ICsgICAgY3R4LT5hdV9idWZmZXIuZGF0YV9zaXplID0gMDsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGVudW0gQVZDb2RlY0lEIGV2Y19mcmFtZV9tZXJnZV9j b2RlY19pZHNbXSA9IHsKPiArICAgIEFWX0NPREVDX0lEX0VWQywgQVZfQ09ERUNfSURfTk9ORSwK PiArfTsKPiArCj4gK2NvbnN0IEZGQml0U3RyZWFtRmlsdGVyIGZmX2V2Y19mcmFtZV9tZXJnZV9i c2YgPSB7Cj4gKyAgICAucC5uYW1lICAgICAgICAgPSAiZXZjX2ZyYW1lX21lcmdlIiwKPiArICAg IC5wLmNvZGVjX2lkcyAgICA9IGV2Y19mcmFtZV9tZXJnZV9jb2RlY19pZHMsCj4gKyAgICAucHJp dl9kYXRhX3NpemUgPSBzaXplb2YoRVZDRk1lcmdlQ29udGV4dCksCj4gKyAgICAuaW5pdCAgICAg ICAgICAgPSBldmNfZnJhbWVfbWVyZ2VfaW5pdCwKPiArICAgIC5mbHVzaCAgICAgICAgICA9IGV2 Y19mcmFtZV9tZXJnZV9mbHVzaCwKPiArICAgIC5jbG9zZSAgICAgICAgICA9IGV2Y19mcmFtZV9t ZXJnZV9jbG9zZSwKPiArICAgIC5maWx0ZXIgICAgICAgICA9IGV2Y19mcmFtZV9tZXJnZV9maWx0 ZXIsCj4gK307Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlIGIvbGliYXZmb3Jt YXQvTWFrZWZpbGUKPiBpbmRleCBmMzExMzVkODA2Li42ZTQyMzFmZGEyIDEwMDY0NAo+IC0tLSBh L2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gKysrIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiBAQCAt MjUxLDYgKzI1MSw3IEBAIE9CSlMtJChDT05GSUdfSENPTV9ERU1VWEVSKSAgICAgICAgICAgICAg Kz0gaGNvbS5vCj4gcGNtLm8KPiAgT0JKUy0kKENPTkZJR19IRFNfTVVYRVIpICAgICAgICAgICAg ICAgICArPSBoZHNlbmMubwo+ICBPQkpTLSQoQ09ORklHX0hFVkNfREVNVVhFUikgICAgICAgICAg ICAgICs9IGhldmNkZWMubyByYXdkZWMubwo+ICBPQkpTLSQoQ09ORklHX0hFVkNfTVVYRVIpICAg ICAgICAgICAgICAgICs9IHJhd2VuYy5vCj4gK09CSlMtJChDT05GSUdfRVZDX0RFTVVYRVIpICAg ICAgICAgICAgICAgKz0gZXZjZGVjLm8gcmF3ZGVjLm8KPiAgT0JKUy0kKENPTkZJR19FVkNfTVVY RVIpICAgICAgICAgICAgICAgICArPSByYXdlbmMubwo+ICBPQkpTLSQoQ09ORklHX0hMU19ERU1V WEVSKSAgICAgICAgICAgICAgICs9IGhscy5vIGhsc19zYW1wbGVfZW5jcnlwdGlvbi5vCj4gIE9C SlMtJChDT05GSUdfSExTX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gaGxzZW5jLm8gaGxzcGxh eWxpc3QubyBhdmMubwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9s aWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiBpbmRleCBkMzg3MWRlMjY4Li5hZTYwNDIzNmFlIDEw MDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+ICsrKyBiL2xpYmF2Zm9ybWF0 L2FsbGZvcm1hdHMuYwo+IEBAIC0xNTQsNiArMTU0LDcgQEAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRG b3JtYXQgIGZmX2VhX2NkYXRhX2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0 ICBmZl9lYWMzX2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl9lYWMz X211eGVyOwo+ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZXBhZl9kZW11eGVyOwo+ ICtleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZXZjX2RlbXV4ZXI7Cj4gIGV4dGVybiBj b25zdCBGRk91dHB1dEZvcm1hdCBmZl9ldmNfbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBGRk91dHB1 dEZvcm1hdCBmZl9mNHZfbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9m Zm1ldGFkYXRhX2RlbXV4ZXI7Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2V2Y2RlYy5jIGIv bGliYXZmb3JtYXQvZXZjZGVjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAuLjg5ZWRhMGY1M2UKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZmb3JtYXQvZXZj ZGVjLmMKPiBAQCAtMCwwICsxLDI3NiBAQAo+ICsvKgo+ICsgKiBSQVcgRVZDIHZpZGVvIGRlbXV4 ZXIKPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDIxIERhd2lkIEtvemluc2tpIDxkLmtvemlu c2tpQHNhbXN1bmcuY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcu Cj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAq IEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vu c2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK PiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQQo+IDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImxpYmF2 Y29kZWMvZ2V0X2JpdHMuaCIKPiArI2luY2x1ZGUgImxpYmF2Y29kZWMvZ29sb21iLmgiCj4gKyNp bmNsdWRlICJsaWJhdmNvZGVjL2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJsaWJhdmNvZGVjL2V2 Yy5oIgo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9ic2YuaCIKPiArCj4gKyNpbmNsdWRlICJsaWJh dnV0aWwvb3B0LmgiCj4gKwo+ICsjaW5jbHVkZSAicmF3ZGVjLmgiCj4gKyNpbmNsdWRlICJhdmZv cm1hdC5oIgo+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiArCj4gKwo+ICsjZGVmaW5lIFJBV19Q QUNLRVRfU0laRSAxMDI0Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBFVkNQYXJzZXJDb250ZXh0IHsK PiArICAgIGludCBnb3Rfc3BzOwo+ICsgICAgaW50IGdvdF9wcHM7Cj4gKyAgICBpbnQgZ290X2lk cjsKPiArICAgIGludCBnb3Rfbm9uaWRyOwo+ICsKPiArfSBFVkNQYXJzZXJDb250ZXh0Owo+ICsK PiArdHlwZWRlZiBzdHJ1Y3QgRVZDRGVtdXhDb250ZXh0IHsKPiArICAgIGNvbnN0IEFWQ2xhc3Mg KmNsYXNzOwo+ICsgICAgQVZSYXRpb25hbCBmcmFtZXJhdGU7Cj4gKwo+ICsgICAgQVZCU0ZDb250 ZXh0ICpic2Y7Cj4gKwo+ICt9IEVWQ0RlbXV4Q29udGV4dDsKPiArCj4gKyNkZWZpbmUgREVDIEFW X09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNCj4gKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKEVW Q0RlbXV4Q29udGV4dCwgeCkKPiArc3RhdGljIGNvbnN0IEFWT3B0aW9uIGV2Y19vcHRpb25zW10g PSB7Cj4gKyAgICB7ICJmcmFtZXJhdGUiLCAiIiwgT0ZGU0VUKGZyYW1lcmF0ZSksIEFWX09QVF9U WVBFX1ZJREVPX1JBVEUsIHsuc3RyID0KPiAiMjUifSwgMCwgSU5UX01BWCwgREVDfSwKPiArICAg IHsgTlVMTCB9LAo+ICt9Owo+ICsjdW5kZWYgT0ZGU0VUCj4gKwo+ICtzdGF0aWMgY29uc3QgQVZD bGFzcyBldmNfZGVtdXhlcl9jbGFzcyA9IHsKPiArICAgIC5jbGFzc19uYW1lID0gIkVWQyBBbm5l eCBCIGRlbXV4ZXIiLAo+ICsgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwK PiArICAgIC5vcHRpb24gICAgID0gZXZjX29wdGlvbnMsCj4gKyAgICAudmVyc2lvbiAgICA9IExJ QkFWVVRJTF9WRVJTSU9OX0lOVCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZ2V0X25hbHVfdHlw ZShjb25zdCB1aW50OF90ICpiaXRzLCBpbnQgYml0c19zaXplKQo+ICt7Cj4gKyAgICBpbnQgdW5p dF90eXBlX3BsdXMxID0gMDsKPiArCj4gKyAgICBpZiAoYml0c19zaXplID49IEVWQ19OQUxVX0hF QURFUl9TSVpFKSB7Cj4gKyAgICAgICAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFy ICopYml0czsKPiArICAgICAgICAvLyBmb3JiaWRkZW5femVyb19iaXQKPiArICAgICAgICBpZiAo KHBbMF0gJiAweDgwKSAhPSAwKSAgIC8vIENhbm5vdCBnZXQgYml0c3RyZWFtIGluZm9ybWF0aW9u Lgo+IE1hbGZvcm1lZCBiaXRzdHJlYW0uCj4gKyAgICAgICAgICAgIHJldHVybiAtMTsKPiArCj4g KyAgICAgICAgLy8gbmFsX3VuaXRfdHlwZQo+ICsgICAgICAgIHVuaXRfdHlwZV9wbHVzMSA9IChw WzBdID4+IDEpICYgMHgzRjsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gdW5pdF90eXBlX3Bs dXMxIC0gMTsKPiArfQo+ICsKPiArc3RhdGljIHVpbnQzMl90IHJlYWRfbmFsX3VuaXRfbGVuZ3Ro KGNvbnN0IHVpbnQ4X3QgKmJpdHMsIGludCBiaXRzX3NpemUpCj4gK3sKPiArICAgIHVpbnQzMl90 IG5hbHVfbGVuID0gMDsKPiArCj4gKyAgICBpZiAoYml0c19zaXplID49IEVWQ19OQUxVX0xFTkdU SF9QUkVGSVhfU0laRSkgewo+ICsKPiArICAgICAgICBpbnQgdCA9IDA7Cj4gKyAgICAgICAgdW5z aWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopYml0czsKPiArCj4gKyAgICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBFVkNfTkFMVV9MRU5HVEhfUFJFRklYX1NJWkU7IGkrKykKPiArICAg ICAgICAgICAgdCA9ICh0IDw8IDgpIHwgcFtpXTsKPiArCj4gKyAgICAgICAgbmFsdV9sZW4gPSB0 Owo+ICsgICAgICAgIGlmIChuYWx1X2xlbiA9PSAwKSAgIC8vIEludmFsaWQgYml0c3RyZWFtIHNp emUKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIG5h bHVfbGVuOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNlX25hbF91bml0cyhjb25zdCBBVlBy b2JlRGF0YSAqcCwgRVZDUGFyc2VyQ29udGV4dCAqZXYpCj4gK3sKPiArICAgIGludCBuYWx1X3R5 cGU7Cj4gKyAgICBzaXplX3QgbmFsdV9zaXplOwo+ICsgICAgdW5zaWduZWQgY2hhciAqYml0cyA9 ICh1bnNpZ25lZCBjaGFyICopcC0+YnVmOwo+ICsgICAgaW50IGJ5dGVzX3RvX3JlYWQgPSBwLT5i dWZfc2l6ZTsKPiArCj4gKyAgICB3aGlsZSAoYnl0ZXNfdG9fcmVhZCA+IEVWQ19OQUxVX0xFTkdU SF9QUkVGSVhfU0laRSkgewo+ICsKPiArICAgICAgICBuYWx1X3NpemUgPSByZWFkX25hbF91bml0 X2xlbmd0aChiaXRzLAo+IEVWQ19OQUxVX0xFTkdUSF9QUkVGSVhfU0laRSk7Cj4gKyAgICAgICAg aWYgKG5hbHVfc2l6ZSA9PSAwKSBicmVhazsKPiArCj4gKyAgICAgICAgYml0cyArPSBFVkNfTkFM VV9MRU5HVEhfUFJFRklYX1NJWkU7Cj4gKyAgICAgICAgYnl0ZXNfdG9fcmVhZCAtPSBFVkNfTkFM VV9MRU5HVEhfUFJFRklYX1NJWkU7Cj4gKwo+ICsgICAgICAgIGlmKGJ5dGVzX3RvX3JlYWQgPCBu YWx1X3NpemUpIGJyZWFrOwo+ICsKPiArICAgICAgICBuYWx1X3R5cGUgPSBnZXRfbmFsdV90eXBl KGJpdHMsIGJ5dGVzX3RvX3JlYWQpOwo+ICsKPiArICAgICAgICBpZiAobmFsdV90eXBlID09IEVW Q19TUFNfTlVUKQo+ICsgICAgICAgICAgICBldi0+Z290X3NwcysrOwo+ICsgICAgICAgIGVsc2Ug aWYgKG5hbHVfdHlwZSA9PSBFVkNfUFBTX05VVCkKPiArICAgICAgICAgICAgZXYtPmdvdF9wcHMr KzsKPiArICAgICAgICBlbHNlIGlmIChuYWx1X3R5cGUgPT0gRVZDX0lEUl9OVVQgKQo+ICsgICAg ICAgICAgICBldi0+Z290X2lkcisrOwo+ICsgICAgICAgIGVsc2UgaWYgKG5hbHVfdHlwZSA9PSBF VkNfTk9JRFJfTlVUKQo+ICsgICAgICAgICAgICBldi0+Z290X25vbmlkcisrOwo+ICsKPiArICAg ICAgICBiaXRzICs9IG5hbHVfc2l6ZTsKPiArICAgICAgICBieXRlc190b19yZWFkIC09IG5hbHVf c2l6ZTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBhbm5leGJfcHJvYmUoY29uc3QgQVZQcm9iZURhdGEgKnApCj4gK3sKPiArICAgIEVWQ1BhcnNl ckNvbnRleHQgZXYgPSB7MH07Cj4gKyAgICBpbnQgcmV0ID0gcGFyc2VfbmFsX3VuaXRzKHAsICZl dik7Cj4gKwo+ICsgICAgaWYgKHJldCA9PSAwICYmIGV2LmdvdF9zcHMgJiYgZXYuZ290X3BwcyAm JiAoZXYuZ290X2lkciB8fAo+IGV2LmdvdF9ub25pZHIgPiAzKSkKPiArICAgICAgICByZXR1cm4g QVZQUk9CRV9TQ09SRV9FWFRFTlNJT04gKyAxOyAgLy8gMSBtb3JlIHRoYW4gLm1wZwo+ICsKPiAr ICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGV2Y19yZWFkX2hlYWRlcihBVkZv cm1hdENvbnRleHQgKnMpCj4gK3sKPiArICAgIEFWU3RyZWFtICpzdDsKPiArICAgIEZGU3RyZWFt ICpzdGk7Cj4gKyAgICBjb25zdCBBVkJpdFN0cmVhbUZpbHRlciAqZmlsdGVyID0KPiBhdl9ic2Zf Z2V0X2J5X25hbWUoImV2Y19mcmFtZV9tZXJnZSIpOwo+ICsgICAgRVZDRGVtdXhDb250ZXh0ICpj ID0gcy0+cHJpdl9kYXRhOwo+ICsgICAgaW50IHJldCA9IDA7Cj4gKwo+ICsgICAgc3QgPSBhdmZv cm1hdF9uZXdfc3RyZWFtKHMsIE5VTEwpOwo+ICsgICAgaWYgKCFzdCkgewo+ICsgICAgICAgIHJl dCA9IEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKyAg ICBzdGkgPSBmZnN0cmVhbShzdCk7Cj4gKwo+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2RlY190eXBl ID0gQVZNRURJQV9UWVBFX1ZJREVPOwo+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFW X0NPREVDX0lEX0VWQzsKPiArCj4gKyAgICAvLyBUaGlzIGNhdXNlcyBzZW5kaW5nIHRvIHRoZSBw YXJzZXIgZnVsbCBmcmFtZXMsIG5vdCBjaHVua3Mgb2YgZGF0YQo+ICsgICAgLy8gVGhlIGZsYWcg UEFSU0VSX0ZMQUdfQ09NUExFVEVfRlJBTUVTIHdpbGwgYmUgc2V0IGluIGRlbXV4LmMKPiAoZGVt dXguYzogMTMxNikKPiArICAgIHN0aS0+bmVlZF9wYXJzaW5nID0gQVZTVFJFQU1fUEFSU0VfSEVB REVSUzsKPiArCj4gKyAgICBzdC0+YXZnX2ZyYW1lX3JhdGUgPSBjLT5mcmFtZXJhdGU7Cj4gKyAg ICBzdC0+Y29kZWNwYXItPmZyYW1lcmF0ZSA9IGMtPmZyYW1lcmF0ZTsKPiArCj4gKyAgICAvLyB0 YWtlbiBmcm9tIHJhd3ZpZGVvIGRlbXV4ZXJzCj4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0 LCA2NCwgMSwgMTIwMDAwMCk7Cj4gKwo+ICsgICAgcmV0ID0gYXZfYnNmX2FsbG9jKGZpbHRlciwg JmMtPmJzZik7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsK PiArICAgIHJldCA9IGF2Y29kZWNfcGFyYW1ldGVyc19jb3B5KGMtPmJzZi0+cGFyX2luLCBzdC0+ Y29kZWNwYXIpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiAr Cj4gKyAgICByZXQgPSBhdl9ic2ZfaW5pdChjLT5ic2YpOwo+ICsgICAgaWYgKHJldCA8IDApCj4g KyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gK2ZhaWw6Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGV2Y19yZWFkX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFW UGFja2V0ICpwa3QpCj4gK3sKPiArICAgIGludCByZXQ7Cj4gKyAgICBpbnQzMl90IG5hbHVfc2l6 ZTsKPiArICAgIGludCBhdV9lbmRfZm91bmQ7Cj4gKwo+ICsgICAgRVZDRGVtdXhDb250ZXh0ICpj b25zdCBjID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGludCBlb2YgPSBhdmlvX2Zlb2YgKHMt PnBiKTsKPiArICAgIGlmKGVvZikgewo+ICsgICAgICAgIGF2X3BhY2tldF91bnJlZihwa3QpOwo+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiArICAgIH0KPiArCj4gKyAgICBhdV9lbmRf Zm91bmQgPSAwOwo+ICsKPiArICAgIHdoaWxlKCFhdV9lbmRfZm91bmQpIHsKPiArCj4gKyAgICAg ICAgdWludDhfdCBidWZbRVZDX05BTFVfTEVOR1RIX1BSRUZJWF9TSVpFXTsKPiArICAgICAgICBy ZXQgPSBhdmlvX3JlYWQocy0+cGIsICh1bnNpZ25lZCBjaGFyICopJmJ1ZiwKPiBFVkNfTkFMVV9M RU5HVEhfUFJFRklYX1NJWkUpOwo+ICsgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAg ICAgIGF2X3BhY2tldF91bnJlZihwa3QpOwo+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsg ICAgICAgIH0KPiArCj4gKyAgICAgICAgbmFsdV9zaXplID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgo KGNvbnN0IHVpbnQ4X3QgKikmYnVmLAo+IEVWQ19OQUxVX0xFTkdUSF9QUkVGSVhfU0laRSk7Cj4g KyAgICAgICAgaWYobmFsdV9zaXplIDw9IDApIHsKPiArICAgICAgICAgICAgYXZfcGFja2V0X3Vu cmVmKHBrdCk7Cj4gKyAgICAgICAgICAgIHJldHVybiAtMTsKPiArICAgICAgICB9Cj4gKwo+ICsg ICAgICAgIGF2aW9fc2VlayhzLT5wYiwgLUVWQ19OQUxVX0xFTkdUSF9QUkVGSVhfU0laRSwgU0VF S19DVVIpOwo+ICsKPiArICAgICAgICByZXQgPSBhdl9nZXRfcGFja2V0KHMtPnBiLCBwa3QsIG5h bHVfc2l6ZSArCj4gRVZDX05BTFVfTEVOR1RIX1BSRUZJWF9TSVpFKTsKPiArICAgICAgICBpZiAo cmV0IDwgMCkKPiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICBpZiAocmV0ICE9 IChuYWx1X3NpemUgKyBFVkNfTkFMVV9MRU5HVEhfUFJFRklYX1NJWkUpKQo+ICsgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUihFSU8pOwo+ICsKPiArICAgICAgICByZXQgPSBhdl9ic2Zfc2VuZF9w YWNrZXQoYy0+YnNmLCBwa3QpOwo+ICsgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAg ICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gc2VuZCBwYWNrZXQgdG8gIgo+ ICsgICAgICAgICAgICAgICAgICAgImV2Y19mcmFtZV9tZXJnZSBmaWx0ZXJcbiIpOwo+ICsgICAg ICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgcmV0ID0gYXZf YnNmX3JlY2VpdmVfcGFja2V0KGMtPmJzZiwgcGt0KTsKPiArICAgICAgICBpZiAocmV0IDwgMCAm JiByZXQgIT0gQVZFUlJPUihFQUdBSU4pICYmIHJldCAhPSBBVkVSUk9SX0VPRikKPiArICAgICAg ICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgImV2Y19mcmFtZV9tZXJnZSBmaWx0ZXIgZmFp bGVkIHRvICIKPiArICAgICAgICAgICAgICAgICAgICJzZW5kIG91dHB1dCBwYWNrZXRcbiIpOwo+ ICsKPiArICAgICAgICBhdV9lbmRfZm91bmQgPSAxOwo+ICsgICAgICAgIGlmIChyZXQgPT0gQVZF UlJPUihFQUdBSU4pKQo+ICsgICAgICAgICAgICBhdV9lbmRfZm91bmQgPSAwOwo+ICsgICAgfQo+ ICsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZXZjX3JlYWRfY2xv c2UoQVZGb3JtYXRDb250ZXh0ICpzKQo+ICt7Cj4gKyAgICBFVkNEZW11eENvbnRleHQgKmNvbnN0 IGMgPSBzLT5wcml2X2RhdGE7Cj4gKwo+ICsgICAgYXZfYnNmX2ZyZWUoJmMtPmJzZik7Cj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArY29uc3QgQVZJbnB1dEZvcm1hdCBmZl9ldmNfZGVtdXhl ciA9IHsKPiArICAgIC5uYW1lICAgICAgICAgICA9ICJldmMiLAo+ICsgICAgLmxvbmdfbmFtZSAg ICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkVWQyBBbm5leCBCIiksCj4gKyAgICAucmVhZF9w cm9iZSAgICAgPSBhbm5leGJfcHJvYmUsCj4gKyAgICAucmVhZF9oZWFkZXIgICAgPSBldmNfcmVh ZF9oZWFkZXIsIC8vIGFubmV4Yl9yZWFkX2hlYWRlcgo+ICsgICAgLnJlYWRfcGFja2V0ICAgID0g ZXZjX3JlYWRfcGFja2V0LCAvLyBhbm5leGJfcmVhZF9wYWNrZXQKPiArICAgIC5yZWFkX2Nsb3Nl ICAgICA9IGV2Y19yZWFkX2Nsb3NlLAo+ICsgICAgLmV4dGVuc2lvbnMgICAgID0gImV2YyIsCj4g KyAgICAuZmxhZ3MgICAgICAgICAgPSBBVkZNVF9HRU5FUklDX0lOREVYLAo+ICsgICAgLmZsYWdz X2ludGVybmFsID0gRkZfRk1UX0lOSVRfQ0xFQU5VUCwKPiArICAgIC5yYXdfY29kZWNfaWQgICA9 IEFWX0NPREVDX0lEX0VWQywKPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihFVkNEZW11 eENvbnRleHQpLAo+ICsgICAgLnByaXZfY2xhc3MgICAgID0gJmV2Y19kZW11eGVyX2NsYXNzLAo+ ICt9Owo+IC0tCj4gMi4yNS4xCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwo+IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1wZWctZGV2ZWxA ZmZtcGVnLm9yZwo+IGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1k ZXZlbAo+Cj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZt cGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K PgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWct ZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVn Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0 IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0 aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==