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 CCE0240707 for ; Wed, 30 Mar 2022 13:04:36 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6124C68B223; Wed, 30 Mar 2022 16:04:35 +0300 (EEST) Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DC59C68B1EB for ; Wed, 30 Mar 2022 16:04:28 +0300 (EEST) Received: by mail-wm1-f44.google.com with SMTP id r204-20020a1c44d5000000b0038ccb70e239so1176770wma.3 for ; Wed, 30 Mar 2022 06:04:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=FpFIGgEMLqsiNPZnM5GnTUV0RtgEjpSuvnNSIrqBb0g=; b=Y5Tyhhp9BTfme/UHw7BSTRNcS0wwH6qQA5wjc4dgicCTeSthg7IV2js2llixsGjrU2 Shr/RGiZNuohDW1YkdHscbWgpNnZheyKt6SmRijVmHmRKIcNhWOBouI5QYdzMPJB3Gqp 8iwvARt1c0Sm5zFXORmAcwk6Z9g85BgT637u22SGtm14x1clMfcxx3nzcbUrAyqKBrug PH+dHyakxoaxP6jP/C+Mu97Ar7YauW2uXxPyfQknPffs04OREtE5+X0/LVk1lFMz37N1 ogDlGjqZGp2N5XxGmkHmWzSxJofWCUtt1uWDFNSdb/ad+Xd13sA7zgxLi6bmVFbubDIi 3mEQ== 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:cc; bh=FpFIGgEMLqsiNPZnM5GnTUV0RtgEjpSuvnNSIrqBb0g=; b=ESczn74zzkJBJ6/RPpoVxZhK+xAbZgcWSLRsQAVGOtvaiMz2oSY5qjPpETE3Dfedfd CFwXkEZC/KYhesLLIEv8MrKUWdy+bSyFs4RsJWF3kvWyglx9x4PPashgaH+lot7wSxfC GuoFhiSBEMF8CCJlDfJe68vq9Bob0ytcPY23zbPdpoDAPSVpvjeW6IWmOFcTH+ZUgsNl kgjUAS2qwMQuqfC3CKvBruUp5F05H7Pt2ZSBaGGck+9jKHDQPjiIsBPXzl99uH8/Mc+x sehwuFFZjj/HQxPLL0O6ZnRuukBoCDF4IgsmCANFZa6erDp5yePDP3fT/6OlRHXsKnxS /rjg== X-Gm-Message-State: AOAM531HpaF+KPW8NMHFArNdpcEbZe0QvcPzxYdRd39oXwuwY+i+GQKG j/bbyffeklpAoVHGJ3RYYhzyCXfg7J37zLzRmovPEs1I X-Google-Smtp-Source: ABdhPJz5m1gjKz7ey96YuL3TMTsPdljgbppkApGPW5v+Xl24HhQ2Lgqr6GDXVgDsARnESSfRGQ/jgUP4myn4d6u1aaw= X-Received: by 2002:a05:600c:4401:b0:38c:8df8:9797 with SMTP id u1-20020a05600c440100b0038c8df89797mr4321467wmn.13.1648645467809; Wed, 30 Mar 2022 06:04:27 -0700 (PDT) MIME-Version: 1.0 References: <20220330114039.69510-1-markg85@gmail.com> <20220330114039.69510-2-markg85@gmail.com> In-Reply-To: From: Mark Gaiser Date: Wed, 30 Mar 2022 15:03:22 +0200 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v10 1/1] avformat: Add IPFS protocol support. 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: andreas.rheinhardt@outlook.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: T24gV2VkLCBNYXIgMzAsIDIwMjIgYXQgMjoyMSBQTSBBbmRyZWFzIFJoZWluaGFyZHQgPAphbmRy ZWFzLnJoZWluaGFyZHRAb3V0bG9vay5jb20+IHdyb3RlOgoKPiBNYXJrIEdhaXNlcjoKPiA+IFRo aXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvcjoKPiA+IC0gZmZwbGF5IGlwZnM6Ly88Y2lkPgo+ID4g LSBmZnBsYXkgaXBuczovLzxjaWQ+Cj4gPgo+ID4gSVBGUyBkYXRhIGNhbiBiZSBwbGF5ZWQgZnJv bSBzbyBjYWxsZWQgImlwZnMgZ2F0ZXdheXMiLgo+ID4gQSBnYXRld2F5IGlzIGVzc2VudGlhbGx5 IGEgd2Vic2VydmVyIHRoYXQgZ2l2ZXMgYWNjZXNzIHRvIHRoZQo+ID4gZGlzdHJpYnV0ZWQgSVBG UyBuZXR3b3JrLgo+ID4KPiA+IFRoaXMgcHJvdG9jb2wgc3VwcG9ydCAoaXBmcyBhbmQgaXBucykg dGhlcmVmb3JlIHRyYW5zbGF0ZXMKPiA+IGlwZnM6Ly8gYW5kIGlwbnM6Ly8gdG8gYSBodHRwOi8v IHVybC4gVGhpcyByZXN1bHRpbmcgdXJsIGlzCj4gPiB0aGVuIGhhbmRsZWQgYnkgdGhlIGh0dHAg cHJvdG9jb2wuIEl0IGNvdWxkIGFsc28gYmUgaHR0cHMKPiA+IGRlcGVuZGluZyBvbiB0aGUgZ2F0 ZXdheSBwcm92aWRlZC4KPiA+Cj4gPiBUbyB1c2UgdGhpcyBwcm90b2NvbCwgYSBnYXRld2F5IG11 c3QgYmUgcHJvdmlkZWQuCj4gPiBJZiB5b3UgZG8gbm90aGluZyBpdCB3aWxsIHRyeSB0byBmaW5k IGl0IGluIHlvdXIKPiA+ICRIT01FLy5pcGZzL2dhdGV3YXkgZmlsZS4gVGhlIHdheXMgdG8gc2V0 IGl0IG1hbnVhbGx5IGFyZToKPiA+IDEuIERlZmluZSBhIC1nYXRld2F5IDx1cmw+IHRvIHRoZSBn YXRld2F5Lgo+ID4gMi4gRGVmaW5lICRJUEZTX0dBVEVXQVkgd2l0aCB0aGUgZnVsbCBodHRwIGxp bmsgdG8gdGhlIGdhdGV3YXkuCj4gPiAzLiBEZWZpbmUgJElQRlNfUEFUSCBhbmQgcG9pbnQgaXQg dG8gdGhlIElQRlMgZGF0YSBwYXRoLgo+ID4gNC4gSGF2ZSBJUEZTIHJ1bm5pbmcgaW4geW91ciBs b2NhbCB1c2VyIGZvbGRlciAodW5kZXIgJEhPTUUvLmlwZnMpLgo+ID4KPiA+IFNpZ25lZC1vZmYt Ynk6IE1hcmsgR2Fpc2VyIDxtYXJrZzg1QGdtYWlsLmNvbT4KPiA+IC0tLQo+ID4gIGNvbmZpZ3Vy ZSAgICAgICAgICAgICAgICAgfCAgIDIgKwo+ID4gIGRvYy9wcm90b2NvbHMudGV4aSAgICAgICAg fCAgMzAgKysrKwo+ID4gIGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICAgfCAgIDIgKwo+ID4gIGxp YmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMgfCAzMDkgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiA+ICBsaWJhdmZvcm1hdC9wcm90b2NvbHMuYyAgIHwgICAyICsKPiA+ICA1 IGZpbGVzIGNoYW5nZWQsIDM0NSBpbnNlcnRpb25zKCspCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJl IGIvY29uZmlndXJlCj4gPiBpbmRleCBlNGQzNmFhNjM5Li41NWFmOTA5NTdhIDEwMDc1NQo+ID4g LS0tIGEvY29uZmlndXJlCj4gPiArKysgYi9jb25maWd1cmUKPiA+IEBAIC0zNTc5LDYgKzM1Nzks OCBAQCB1ZHBfcHJvdG9jb2xfc2VsZWN0PSJuZXR3b3JrIgo+ID4gIHVkcGxpdGVfcHJvdG9jb2xf c2VsZWN0PSJuZXR3b3JrIgo+ID4gIHVuaXhfcHJvdG9jb2xfZGVwcz0ic3lzX3VuX2giCj4gPiAg dW5peF9wcm90b2NvbF9zZWxlY3Q9Im5ldHdvcmsiCj4gPiAraXBmc19wcm90b2NvbF9zZWxlY3Q9 Imh0dHBzX3Byb3RvY29sIgo+ID4gK2lwbnNfcHJvdG9jb2xfc2VsZWN0PSJodHRwc19wcm90b2Nv bCIKPiA+Cj4gPiAgIyBleHRlcm5hbCBsaWJyYXJ5IHByb3RvY29scwo+ID4gIGxpYmFtcXBfcHJv dG9jb2xfZGVwcz0ibGlicmFiYml0bXEiCj4gPiBkaWZmIC0tZ2l0IGEvZG9jL3Byb3RvY29scy50 ZXhpIGIvZG9jL3Byb3RvY29scy50ZXhpCj4gPiBpbmRleCBkMjA3ZGYwYjUyLi43YzljMGE0ODA4 IDEwMDY0NAo+ID4gLS0tIGEvZG9jL3Byb3RvY29scy50ZXhpCj4gPiArKysgYi9kb2MvcHJvdG9j b2xzLnRleGkKPiA+IEBAIC0yMDI1LDUgKzIwMjUsMzUgQEAgZGVjb2RpbmcgZXJyb3JzLgo+ID4K PiA+ICBAZW5kIHRhYmxlCj4gPgo+ID4gK0BzZWN0aW9uIGlwZnMKPiA+ICsKPiA+ICtJbnRlclBs YW5ldGFyeSBGaWxlIFN5c3RlbSAoSVBGUykgcHJvdG9jb2wgc3VwcG9ydC4gT25lIGNhbiBhY2Nl c3MKPiBmaWxlcyBzdG9yZWQKPiA+ICtvbiB0aGUgSVBGUyBuZXR3b3JrIHRocm91Z2ggc28gY2Fs bGVkIGdhdGV3YXlzLiBUaG9zZSBhcmUgaHR0cChzKQo+IGVuZHBvaW50cy4KPiA+ICtUaGlzIHBy b3RvY29sIHdyYXBzIHRoZSBJUEZTIG5hdGl2ZSBwcm90b2NvbHMgKGlwZnM6Ly8gYW5kIGlwbnM6 Ly8pIHRvCj4gYmUgc2VuZAo+ID4gK3RvIHN1Y2ggYSBnYXRld2F5LiBVc2VycyBjYW4gKGFuZCBz aG91bGQpIGhvc3QgdGhlaXIgb3duIG5vZGUgd2hpY2gKPiBtZWFucyB0aGlzCj4gPiArcHJvdG9j b2wgd2lsbCB1c2UgeW91ciBsb2NhbCBtYWNoaW5lIGdhdGV3YXkgdG8gYWNjZXNzIGZpbGVzIG9u IHRoZQo+IElQRlMgbmV0d29yay4KPiA+ICsKPiA+ICtJZiBhIHVzZXIgZG9lc24ndCBoYXZlIGEg bm9kZSBvZiB0aGVpciBvd24gdGhlbiB0aGUgcHVibGljIGdhdGV3YXkKPiBkd2ViLmxpbmsgaXMK PiA+ICt1c2VkIGJ5IGRlZmF1bHQuCj4gPiArCj4gPiArWW91IGNhbiB1c2UgdGhpcyBwcm90b2Nv bCBpbiAyIHdheXMuIFVzaW5nIElQRlM6Cj4gPiArQGV4YW1wbGUKPiA+ICtmZnBsYXkgaXBmczov L1FtYkd0SmcyM3NraHZGbXU5bUppZVBWQnloZnp1NXJ3bzc0TUVrVkRZQW1GNVQKPiA+ICtAZW5k IGV4YW1wbGUKPiA+ICsKPiA+ICtPciB0aGUgSVBOUyBwcm90b2NvbCAoSVBOUyBpcyBtdXRhYmxl IElQRlMpOgo+ID4gK0BleGFtcGxlCj4gPiArZmZwbGF5IGlwbnM6Ly9RbWJHdEpnMjNza2h2Rm11 OW1KaWVQVkJ5aGZ6dTVyd283NE1Fa1ZEWUFtRjVUCj4gPiArQGVuZCBleGFtcGxlCj4gPiArCj4g PiArWW91IGNhbiBhbHNvIGNoYW5nZSB0aGUgZ2F0ZXdheSB0byBiZSB1c2VkOgo+ID4gKwo+ID4g K0B0YWJsZSBAb3B0aW9uCj4gPiArCj4gPiArQGl0ZW0gZ2F0ZXdheQo+ID4gK0RlZmluZXMgdGhl IGdhdGV3YXkgdG8gdXNlLiBXaGVuIG5vdGhpbmcgaXMgcHJvdmlkZWQgdGhlIHByb3RvY29sIHdp bGwKPiBmaXJzdCB0cnkKPiA+ICt5b3VyIGxvY2FsIGdhdGV3YXkuIElmIHRoYXQgZmFpbHMgZHdl Yi5saW5rIHdpbGwgYmUgdXNlZC4KPiA+ICsKPiA+ICtAZW5kIHRhYmxlCj4gPgo+ID4gIEBjIG1h biBlbmQgUFJPVE9DT0xTCj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUgYi9s aWJhdmZvcm1hdC9NYWtlZmlsZQo+ID4gaW5kZXggZDcxODJkNmJkOC4uZTMyMzNmZDdhYyAxMDA2 NDQKPiA+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gPiArKysgYi9saWJhdmZvcm1hdC9N YWtlZmlsZQo+ID4gQEAgLTY2MCw2ICs2NjAsOCBAQCBPQkpTLSQoQ09ORklHX1NSVFBfUFJPVE9D T0wpICAgICAgICAgICAgICs9Cj4gc3J0cHByb3RvLm8gc3J0cC5vCj4gPiAgT0JKUy0kKENPTkZJ R19TVUJGSUxFX1BST1RPQ09MKSAgICAgICAgICArPSBzdWJmaWxlLm8KPiA+ICBPQkpTLSQoQ09O RklHX1RFRV9QUk9UT0NPTCkgICAgICAgICAgICAgICs9IHRlZXByb3RvLm8gdGVlX2NvbW1vbi5v Cj4gPiAgT0JKUy0kKENPTkZJR19UQ1BfUFJPVE9DT0wpICAgICAgICAgICAgICArPSB0Y3Aubwo+ ID4gK09CSlMtJChDT05GSUdfSVBGU19QUk9UT0NPTCkgICAgICAgICAgICAgKz0gaXBmc2dhdGV3 YXkubwo+ID4gK09CSlMtJChDT05GSUdfSVBOU19QUk9UT0NPTCkgICAgICAgICAgICAgKz0gaXBm c2dhdGV3YXkubwo+ID4gIFRMUy1PQkpTLSQoQ09ORklHX0dOVVRMUykgICAgICAgICAgICAgICAg Kz0gdGxzX2dudXRscy5vCj4gPiAgVExTLU9CSlMtJChDT05GSUdfTElCVExTKSAgICAgICAgICAg ICAgICArPSB0bHNfbGlidGxzLm8KPiA+ICBUTFMtT0JKUy0kKENPTkZJR19NQkVEVExTKSAgICAg ICAgICAgICAgICs9IHRsc19tYmVkdGxzLm8KPiA+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9p cGZzZ2F0ZXdheS5jIGIvbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYwo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAuLjFhMDM5NTg5YzAKPiA+IC0tLSAvZGV2L251 bGwKPiA+ICsrKyBiL2xpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMKPiA+IEBAIC0wLDAgKzEsMzA5 IEBACj4gPiArLyoKPiA+ICsgKiBJUEZTIGFuZCBJUE5TIHByb3RvY29sIHN1cHBvcnQgdGhyb3Vn aCBJUEZTIEdhdGV3YXkuCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDIyIE1hcmsgR2Fpc2VyCj4g PiArICoKPiA+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gPiArICoKPiA+ICsg KiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y Cj4gPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ID4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ID4gKyAqCj4gPiArICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Cj4gPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKPiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ID4gKyAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPiArICoKPiA+ICsgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4g PiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQo+ID4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAxIFVTQQo+ID4gKyAqLwo+ID4gKwo+ ID4gKyNpbmNsdWRlICJhdmZvcm1hdC5oIgo+ID4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3Nl cnQuaCIKPgo+IFVudXNlZC4KPgo+ID4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIK PiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ludGVybmFsLmgiCj4gPiArI2luY2x1ZGUgImxpYmF2 dXRpbC9vcHQuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3RyZWUuaCIKPgo+ID8KPgoKVGhp cyB3aG9sZSBpbmNsdWRlIHBhcnQgY2FuIGJlIGNsZWFuZWQgdXAgbXVjaCBtb3JlLgpKdXN0IGhh dmluZyB0aGVzZToKI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgojaW5jbHVkZSAibGli YXZ1dGlsL29wdC5oIgojaW5jbHVkZSAidXJsLmgiCiNpbmNsdWRlIDxzeXMvc3RhdC5oPgoKaXMg ZW5vdWdoLgoKCj4gPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gPiArI2lmIEhBVkVfSU9fSAo+ID4g KyNpbmNsdWRlIDxpby5oPgo+ID4gKyNlbmRpZgo+ID4gKyNpZiBIQVZFX1VOSVNURF9ICj4gPiAr I2luY2x1ZGUgPHVuaXN0ZC5oPgo+ID4gKyNlbmRpZgo+ID4gKyNpbmNsdWRlICJvc19zdXBwb3J0 LmgiCj4gPiArI2luY2x1ZGUgInVybC5oIgo+ID4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiA+ICsj aW5jbHVkZSA8c3lzL3N0YXQuaD4KPiA+ICsKPiA+ICt0eXBlZGVmIHN0cnVjdCBJUEZTR2F0ZXdh eUNvbnRleHQgewo+ID4gKyAgICBBVkNsYXNzICpjbGFzczsKPiA+ICsgICAgVVJMQ29udGV4dCAq aW5uZXI7Cj4gPiArICAgIC8vIElzIGZpbGxlZCBieSB0aGUgLWdhdGV3YXkgYXJndW1lbnQgYW5k IG5vdCBjaGFuZ2VkIGFmdGVyLgo+ID4gKyAgICBjaGFyICpnYXRld2F5Owo+ID4gKyAgICAvLyBJ ZiB0aGUgYWJvdmUgZ2F0ZXdheSBpcyBub24gbnVsbCwgaXQgd2lsbCBiZSBjb3BpZWQgaW50byB0 aGlzCj4gYnVmZmVyLgo+ID4gKyAgICAvLyBFbHNlIHRoaXMgYnVmZmVyIHdpbGwgY29udGFpbiB0 aGUgYXV0byBkZXRlY3RlZCBnYXRld2F5Lgo+ID4gKyAgICAvLyBJbiBlaXRoZXIgY2FzZSwgdGhl IGdhdGV3YXkgdG8gdXNlIHdpbGwgYmUgaW4gdGhpcyBidWZmZXIuCj4gPiArICAgIGNoYXIgZ2F0 ZXdheV9idWZmZXJbUEFUSF9NQVhdOwo+ID4gK30gSVBGU0dhdGV3YXlDb250ZXh0Owo+ID4gKwo+ ID4gKy8vIEEgYmVzdC1lZmZvcnQgd2F5IHRvIGZpbmQgdGhlIElQRlMgZ2F0ZXdheS4KPiA+ICsv LyBPbmx5IHRoZSBtb3N0IGFwcHJvcGlhdGUgZ2F0ZXdheSBpcyBzZXQuIEl0J3Mgbm90IGFjdHVh bGx5IHJlcXVlc3RlZAo+ID4gKy8vIChodHRwIGNhbGwpIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwg c2xvd2Rvd24gaW4gc3RhcnR1cC4gQSBwb3RlbnRpYWwKPiB0aW1lb3V0Cj4gPiArLy8gaXMgaGFu ZGxlZCBieSB0aGUgSFRUUCBwcm90b2NvbC4KPiA+ICtzdGF0aWMgaW50IHBvcHVsYXRlX2lwZnNf Z2F0ZXdheShVUkxDb250ZXh0ICpoKQo+ID4gK3sKPiA+ICsgICAgSVBGU0dhdGV3YXlDb250ZXh0 ICpjID0gaC0+cHJpdl9kYXRhOwo+ID4gKyAgICBjaGFyIGlwZnNfZnVsbF9kYXRhX2ZvbGRlcltQ QVRIX01BWF07Cj4gPiArICAgIGNoYXIgaXBmc19nYXRld2F5X2ZpbGVbUEFUSF9NQVhdOwo+ID4g KyAgICBzdHJ1Y3Qgc3RhdCBzdDsKPiA+ICsgICAgaW50IHN0YXRfcmV0ID0gMDsKPiA+ICsgICAg aW50IHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiA+ICsgICAgRklMRSAqZ2F0ZXdheV9maWxlID0g TlVMTDsKPiA+ICsKPiA+ICsgICAgLy8gVGVzdCAkSVBGU19HQVRFV0FZLgo+ID4gKyAgICBpZiAo Z2V0ZW52KCJJUEZTX0dBVEVXQVkiKSAhPSBOVUxMKSB7Cj4gPiArICAgICAgICBpZiAoc25wcmlu dGYoYy0+Z2F0ZXdheV9idWZmZXIsIHNpemVvZihjLT5nYXRld2F5X2J1ZmZlciksICIlcyIsCj4g PiArICAgICAgICAgICAgICAgICAgICAgZ2V0ZW52KCJJUEZTX0dBVEVXQVkiKSkgPj0KPiBzaXpl b2YoYy0+Z2F0ZXdheV9idWZmZXIpKSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xP R19XQVJOSU5HLCAiVGhlIElQRlNfR0FURVdBWSBlbnZpcm9ubWVudAo+IHZhcmlhYmxlIGV4Y2Vl ZHMgdGhlIG1heGltdW0gbGVuZ3RoLiBXZSBhbGxvdyBhIG1heCBvZiAlenUgY2hhcmFjdGVyc1xu IiwKPiBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpKTsKPiA+ICsgICAgICAgICAgICByZXQgPSBB VkVSUk9SKEVJTlZBTCk7Cj4gPiArICAgICAgICAgICAgZ290byBlcnI7Cj4gPiArICAgICAgICB9 Cj4gPiArCj4gPiArICAgICAgICByZXQgPSAxOwo+ID4gKyAgICAgICAgZ290byBlcnI7Cj4gPiAr ICAgIH0gZWxzZQo+ID4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19ERUJVRywgIiRJUEZTX0dB VEVXQVkgaXMgZW1wdHkuXG4iKTsKPiA+ICsKPiA+ICsgICAgLy8gV2UgbmVlZCB0byBrbm93IHRo ZSBJUEZTIGZvbGRlciB0byAtIGV2ZW50dWFsbHkgLSByZWFkIHRoZQo+IGNvbnRlbnRzIG9mCj4g PiArICAgIC8vIHRoZSAiZ2F0ZXdheSIgZmlsZSB3aGljaCB3b3VsZCB0ZWxsIHVzIHRoZSBnYXRl d2F5IHRvIHVzZS4KPiA+ICsgICAgaWYgKGdldGVudigiSVBGU19QQVRIIikgPT0gTlVMTCkgewo+ ID4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19ERUJVRywgIiRJUEZTX1BBVEggaXMgZW1wdHku XG4iKTsKPiA+ICsKPiA+ICsgICAgICAgIC8vIFRyeSB2aWEgdGhlIGhvbWUgZm9sZGVyLgo+ID4g KyAgICAgICAgaWYgKGdldGVudigiSE9NRSIpID09IE5VTEwpIHsKPiA+ICsgICAgICAgICAgICBh dl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICIkSE9NRSBhcHBlYXJzIHRvIGJlIGVtcHR5LlxuIik7 Cj4gPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ID4gKyAgICAgICAgICAg IGdvdG8gZXJyOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgLy8gVmVyaWZ5IHRo ZSBjb21wb3NlZCBwYXRoIGZpdHMuCj4gPiArICAgICAgICBpZiAoc25wcmludGYoaXBmc19mdWxs X2RhdGFfZm9sZGVyLAo+IHNpemVvZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICIlcy8uaXBmcy8iLCBnZXRlbnYoIkhPTUUiKSkgPj0KPiBzaXplb2Yo aXBmc19mdWxsX2RhdGFfZm9sZGVyKSkgewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9M T0dfV0FSTklORywgIlRoZSBJUEZTIGRhdGEgcGF0aCBleGNlZWRzIHRoZQo+IG1heCBwYXRoIGxl bmd0aCAoJXp1KVxuIiwgc2l6ZW9mKGlwZnNfZnVsbF9kYXRhX2ZvbGRlcikpOwo+ID4gKyAgICAg ICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiA+ICsgICAgICAgICAgICBnb3RvIGVycjsK PiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIC8vIFN0YXQgdGhlIGZvbGRlci4KPiA+ ICsgICAgICAgIC8vIEl0IHNob3VsZCBleGlzdCBpbiBhIGRlZmF1bHQgSVBGUyBzZXR1cCB3aGVu IHJ1biBhcyBsb2NhbAo+IHVzZXIuCj4gPiArI2lmbmRlZiBfV0lOMzIKPiA+ICsgICAgICAgIHN0 YXRfcmV0ID0gc3RhdChpcGZzX2Z1bGxfZGF0YV9mb2xkZXIsICZzdCk7Cj4gPiArI2Vsc2UKPiA+ ICsgICAgICAgIHN0YXRfcmV0ID0gd2luMzJfc3RhdChpcGZzX2Z1bGxfZGF0YV9mb2xkZXIsICZz dCk7Cj4gPiArI2VuZGlmCj4gPiArICAgICAgICBpZiAoc3RhdF9yZXQgPCAwKSB7Cj4gPiArICAg ICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZPLCAiVW5hYmxlIHRvIGZpbmQgSVBGUyBmb2xk ZXIuIFdlCj4gdHJpZWQ6XG4iKTsKPiA+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0lO Rk8sICItICRJUEZTX1BBVEgsIHdoaWNoIHdhcyBlbXB0eS5cbiIpOwo+ID4gKyAgICAgICAgICAg IGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIi0gJEhPTUUvLmlwZnMgKGZ1bGwgdXJpOiAlcykgd2hp Y2gKPiBkb2Vzbid0IGV4aXN0LlxuIiwgaXBmc19mdWxsX2RhdGFfZm9sZGVyKTsKPiA+ICsgICAg ICAgICAgICByZXQgPSBBVkVSUk9SKEVOT0VOVCk7Cj4gPiArICAgICAgICAgICAgZ290byBlcnI7 Cj4gPiArICAgICAgICB9Cj4gPiArICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICBpZiAoc25wcmlu dGYoaXBmc19mdWxsX2RhdGFfZm9sZGVyLAo+IHNpemVvZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIp LCAiJXMiLAo+ID4gKyAgICAgICAgICAgICAgICAgZ2V0ZW52KCJJUEZTX1BBVEgiKSkgPj0gc2l6 ZW9mKGlwZnNfZnVsbF9kYXRhX2ZvbGRlcikpCj4gewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyho LCBBVl9MT0dfV0FSTklORywgIlRoZSBJUEZTX1BBVEggZW52aXJvbm1lbnQKPiB2YXJpYWJsZSBl eGNlZWRzIHRoZSBtYXhpbXVtIGxlbmd0aC4gV2UgYWxsb3cgYSBtYXggb2YgJXp1IGNoYXJhY3Rl cnNcbiIsCj4gc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSk7Cj4gPiArICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUihFSU5WQUwpOwo+ID4gKyAgICAgICAgICAgIGdvdG8gZXJyOwo+ID4gKyAgICAg ICAgfQo+ID4gKwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8vIENvcHkgdGhlIGZ1bGx5IGNv bXBvc2VkIGdhdGV3YXkgcGF0aCBpbnRvIGlwZnNfZ2F0ZXdheV9maWxlLgo+ID4gKyAgICBpZiAo c25wcmludGYoaXBmc19nYXRld2F5X2ZpbGUsIHNpemVvZihpcGZzX2dhdGV3YXlfZmlsZSksCj4g IiVzZ2F0ZXdheSIsCj4gPiArICAgICAgICAgICAgICAgICBpcGZzX2Z1bGxfZGF0YV9mb2xkZXIp ID49IHNpemVvZihpcGZzX2dhdGV3YXlfZmlsZSkpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhoLCBB Vl9MT0dfV0FSTklORywgIlRoZSBJUEZTIGdhdGV3YXkgZmlsZSBwYXRoIGV4Y2VlZHMKPiB0aGUg bWF4IHBhdGggbGVuZ3RoICglenUpXG4iLCBzaXplb2YoaXBmc19nYXRld2F5X2ZpbGUpKTsKPiA+ ICsgICAgICAgIHJldCA9IEFWRVJST1IoRU5PRU5UKTsKPiA+ICsgICAgICAgIGdvdG8gZXJyOwo+ ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIGdhdGV3 YXkgZmlsZS4KPiA+ICsgICAgZ2F0ZXdheV9maWxlID0gYXZfZm9wZW5fdXRmOChpcGZzX2dhdGV3 YXlfZmlsZSwgInIiKTsKPiA+ICsgICAgaWYgKCFnYXRld2F5X2ZpbGUpIHsKPiA+ICsgICAgICAg IGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlRoZSBJUEZTIGdhdGV3YXkgZmlsZSAoZnVsbCB1 cmk6ICVzKQo+IGRvZXNuJ3QgZXhpc3QuIElzIHRoZSBnYXRld2F5IGVuYWJsZWQ/XG4iLCBpcGZz X2dhdGV3YXlfZmlsZSk7Cj4gPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT0VOVCk7Cj4gPiAr ICAgICAgICBnb3RvIGVycjsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICAvLyBSZWFkIGEgc2lu Z2xlIGxpbmUgKGZnZXRzIHN0b3BzIGF0IG5ldyBsaW5lIG1hcmspLgo+ID4gKyAgICBmZ2V0cyhj LT5nYXRld2F5X2J1ZmZlciwgc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSAtIDEsCj4gZ2F0ZXdh eV9maWxlKTsKPiA+ICsKPiA+ICsgICAgLy8gUmVwbGFjZSB0aGUgbGFzdCBjaGFyIHdpdGggXDAK PiA+ICsgICAgYy0+Z2F0ZXdheV9idWZmZXJbc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSAtIDFd ID0gMDsKPiA+ICsKPiA+ICsgICAgLy8gUmVwbGFjZSBmaXJzdCBvY2N1cmVuY2Ugb2YgZW5kIG9m IGxpbmUgd2l0aCBcMAo+ID4gKyAgICBjLT5nYXRld2F5X2J1ZmZlcltzdHJjc3BuKGMtPmdhdGV3 YXlfYnVmZmVyLCAiXHIiKV0gPSAwOwo+ID4gKyAgICBjLT5nYXRld2F5X2J1ZmZlcltzdHJjc3Bu KGMtPmdhdGV3YXlfYnVmZmVyLCAiXG4iKV0gPSAwOwo+Cj4gSWYgdGhlIGJ1ZmZlciBjb250YWlu cyBib3RoIFxyIGFuZCBcbiBhbmQgdGhlIGZpcnN0IFxuIHByZWNlZGVzIHRoZQo+IGZpcnN0IFxy LCB0aGVuIHRoZSBhYm92ZSB6ZXJvZXMgYm90aCB0aGUgZmlyc3QgXHIgYW5kIHRoZSBmaXJzdCBc bi4gSWYKPiBpdCBpcyBlbm91Z2ggdG8gb25seSB6ZXJvIHRoZSBmaXJzdCBuZXdsaW5lLCB0aGVu IHRoaXMgY2FuIGJlIHNpbXBsaWZpZWQKPiB0byAiYy0+Z2F0ZXdheV9idWZmZXJbc3RyY3Nwbihj LT5nYXRld2F5X2J1ZmZlciwgIlxyXG4iKV0gPSAwOyIuCj4KCkl0IHVzZWQgdG8gYmUgaW4geW91 ciBzdWdnZXN0ZWQgc2ltcGxpZmllZCBhcHByb2FjaC4KSXQgd2FzIHRoZW4gc3VnZ2VzdGVkIHRv IHNwbGl0IGl0IGJlY2F1c2Ugb2YgbmV3IGxpbmUgZGlmZmVyZW5jZXMKb24gZGlmZmVyZW50IHBs YXRmb3Jtcy4gVGhpcyB3YXMgc3VwcG9zZWQgdG8gY2F0Y2ggImV2ZXJ5dGhpbmciLgoKSSBwcmVm ZXIgdG8ga2VlcCB0aGlzIGFzLWlzIG5vdy4KCgo+ID4gKwo+ID4gKyAgICAvLyBJZiBzdHJsZW4g ZmluZHMgYW55dGhpbmcgbG9uZ2VyIHRoZW4gMCBjaGFyYWN0ZXJzIHRoZW4gd2UgaGF2ZSBhCj4g PiArICAgIC8vIHBvdGVudGlhbCBnYXRld2F5IHVybC4KPiA+ICsgICAgaWYgKHN0cmxlbihjLT5n YXRld2F5X2J1ZmZlcikgPCAxKSB7Cj4KPiBpZiAoKmMtPmdhdGV3YXlfYnVmZmVyID09ICdcMCcp Cj4KCklzIHRoYXQgYSBzdHlsZSBkaWZmZXJlbmNlIG9yIGFuIGFjdHVhbCBiZWhhdmlvciBkaWZm ZXJlbmNlPwoKCj4KPiA+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlRoZSBJ UEZTIGdhdGV3YXkgZmlsZSAoZnVsbCB1cmk6ICVzKQo+IGFwcGVhcnMgdG8gYmUgZW1wdHkuIElz IHRoZSBnYXRld2F5IHN0YXJ0ZWQ/XG4iLCBpcGZzX2dhdGV3YXlfZmlsZSk7Cj4gPiArICAgICAg ICByZXQgPSBBVkVSUk9SKEVJTFNFUSk7Cj4gPiArICAgICAgICBnb3RvIGVycjsKPiA+ICsgICAg fSBlbHNlIHsKPiA+ICsgICAgICAgIC8vIFdlJ3JlIGRvbmUsIHRoZSBjLT5nYXRld2F5X2J1ZmZl ciBoYXMgc29tZXRoaW5nIHRoYXQgbG9va3MKPiB2YWxpZC4KPiA+ICsgICAgICAgIHJldCA9IDE7 Cj4gPiArICAgICAgICBnb3RvIGVycjsKPiA+ICsgICAgfQo+ID4gKwo+ID4gK2VycjoKPiA+ICsg ICAgaWYgKGdhdGV3YXlfZmlsZSkKPiA+ICsgICAgICAgIGZjbG9zZShnYXRld2F5X2ZpbGUpOwo+ ID4gKwo+ID4gKyAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHRy YW5zbGF0ZV9pcGZzX3RvX2h0dHAoVVJMQ29udGV4dCAqaCwgY29uc3QgY2hhciAqdXJpLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIEFWRGljdGlvbmFy eSAqKm9wdGlvbnMpCj4gPiArewo+ID4gKyAgICBjb25zdCBjaGFyICppcGZzX2NpZDsKPiA+ICsg ICAgY2hhciAqZnVsbHVyaSA9IE5VTEw7Cj4gPiArICAgIGludCByZXQ7Cj4gPiArICAgIElQRlNH YXRld2F5Q29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgLy8gVGVzdCBm b3IgaXBmczovLywgaXBmczosIGlwbnM6Ly8gYW5kIGlwbnM6LiBUaGlzIHByZWZpeCBpcwo+IHN0 cmlwcGVkIGZyb20KPiA+ICsgICAgLy8gdGhlIHN0cmluZyBsZWF2aW5nIGp1c3QgdGhlIENJRCBp biBpcGZzX2NpZC4KPiA+ICsgICAgaW50IGlzX2lwZnMgPSBhdl9zdHJpc3RhcnQodXJpLCAiaXBm czovLyIsICZpcGZzX2NpZCk7Cj4gPiArICAgIGludCBpc19pcG5zID0gYXZfc3RyaXN0YXJ0KHVy aSwgImlwbnM6Ly8iLCAmaXBmc19jaWQpOwo+ID4gKwo+ID4gKyAgICAvLyBXZSBtdXN0IGhhdmUg ZWl0aGVyIGlwbnMgb3IgaXBmcy4KPiA+ICsgICAgaWYgKCFpc19pcGZzICYmICFpc19pcG5zKSB7 Cj4gPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gPiArICAgICAgICBhdl9sb2co aCwgQVZfTE9HX1dBUk5JTkcsICJVbnN1cHBvcnRlZCB1cmwgJXNcbiIsIHVyaSk7Cj4gPiArICAg ICAgICBnb3RvIGVycjsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICAvLyBJZiB0aGUgQ0lEIGhh cyBhIGxlbmd0aCBncmVhdGVyIHRoZW4gMCB0aGVuIHdlIGFzc3VtZSB3ZSBoYXZlIGEKPiBwcm9w ZXIgd29ya2luZyBvbmUuCj4gPiArICAgIC8vIEl0IGNvdWxkIHN0aWxsIGJlIHdyb25nIGJ1dCBp biB0aGF0IGNhc2UgdGhlIGdhdGV3YXkgc2hvdWxkIHNhdmUKPiB1cyBhbmQKPiA+ICsgICAgLy8g cnV0dXJuIGEgNDAzIGVycm9yLiBUaGUgaHR0cCBwcm90b2NvbCBoYW5kbGVzIHRoaXMuCj4gPiAr ICAgIGlmIChzdHJsZW4oaXBmc19jaWQpIDwgMSkgewo+ID4gKyAgICAgICAgYXZfbG9nKGgsIEFW X0xPR19XQVJOSU5HLCAiQSBDSUQgbXVzdCBiZSBwcm92aWRlZC5cbiIpOwo+ID4gKyAgICAgICAg cmV0ID0gQVZFUlJPUihFSUxTRVEpOwo+ID4gKyAgICAgICAgZ290byBlcnI7Cj4gPiArICAgIH0K PiA+ICsKPiA+ICsgICAgLy8gUG9wdWxhdGUgYy0+Z2F0ZXdheV9idWZmZXIgd2l0aCB3aGF0ZXZl ciBpcyBpbiBjLT5nYXRld2F5Cj4gPiArICAgIGlmIChjLT5nYXRld2F5ICE9IE5VTEwpIHsKPiA+ ICsgICAgICAgIGlmIChzbnByaW50ZihjLT5nYXRld2F5X2J1ZmZlciwgc2l6ZW9mKGMtPmdhdGV3 YXlfYnVmZmVyKSwgIiVzIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICBjLT5nYXRld2F5KSA+ PSBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpKSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKGgs IEFWX0xPR19XQVJOSU5HLCAiVGhlIC1nYXRld2F5IHBhcmFtZXRlciBpcyB0b28KPiBsb25nLiBX ZSBhbGxvdyBhIG1heCBvZiAlenUgY2hhcmFjdGVyc1xuIiwgc2l6ZW9mKGMtPmdhdGV3YXlfYnVm ZmVyKSk7Cj4KPiBXZSB0eXBpY2FsbHkgdXNlIFNJWkVfU1BFQ0lGSUVSIGluc3RlYWQgb2YgeiBm b3IgY29tcGF0aWJpbGl0eSB3aXRoCj4gYW5jaWVudCB2ZXJzaW9ucyBvZiBNU1ZDLgo+IChJIGRv bid0IGtub3cgd2hldGhlciB0aGVyZSBpcyBhbnkgc3VwcG9ydGVkIHZlcnNpb24gb2YgTVNWQyB0 aGF0Cj4gZG9lc24ndCBzdXBwb3J0IHo7IEkgZG9uJ3QgdXNlIE1TVkMgbXlzZWxmLikKPgoKSGVy ZSB0b28gSSB3YXMgZXhwbGljaXRseSBzdWdnZXN0ZWQgdG8gdXNlICV6dSAod2hlbiBJIHdhcyB1 c2luZyAtIEkgdGhpbmsKLSAlbHUgYmVmb3JlKS4KU28gSSBhc3N1bWUgdGhhdCB0aGUgYW5jaWVu dCBNU1ZDIHZlcnNpb24geW91J3JlIHJlZmVycmluZyB0byBpcyBwcm9iYWJseQpub3Qgc3VwcG9y dGVkIGFueW1vcmUgZnJvbSBhbiBmZm1wZWcgY29tcGlsZXIgcmVxdWlyZW1lbnQgcG9pbnQgb2Yg dmlldz8KClNob3VsZCBpIG5vdyBjaGFuZ2UgYWxsICIlenUiIHRvICIlIlNJWkVfU1BFQ0lGSUVS ICh0aGlzIGRvZXMgbm90IG1ha2UgaXQKbmVhdGVyIG5vciBzaG9ydGVyIHdpdGggdGhlIDgwIGNo YXIgbGluZSBsaW1pdCkuCklzIHRoaXMgY2hhbmdlIHJlcXVpcmVkPwoKSWYgaXQgaXMsIHdoYXQg X2V4YWN0bHlfIGRvIGkgbmVlZCB0byBjaGFuZ2UgaXQgaW4/IEkgc2VlIGEKY291cGxlIGRpZmZl cmVudCBTSVpFX1NQRUNJRklFUiBwcmVmaXhlcy4gSSBoYXZlIG5vIGNsdWUgd2hhdCB0byB1c2Ug aGVyZS4KCgo+ID4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiA+ICsgICAg ICAgICAgICBnb3RvIGVycjsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfSBlbHNlIHsKPiA+ICsg ICAgICAgIC8vIFBvcHVsYXRlIHRoZSBJUEZTIGdhdGV3YXkgaWYgd2UgaGF2ZSBhbnkuCj4gPiAr ICAgICAgICAvLyBJZiBub3QsIGluZm9ybSB0aGUgdXNlciBob3cgdG8gcHJvcGVybHkgc2V0IG9u ZS4KPiA+ICsgICAgICAgIHJldCA9IHBvcHVsYXRlX2lwZnNfZ2F0ZXdheShoKTsKPiA+ICsKPiA+ ICsgICAgICAgIGlmIChyZXQgPCAxKSB7Cj4gPiArICAgICAgICAgICAgLy8gV2UgZmFsbGJhY2sg b24gZHdlYi5saW5rIChtYW5hZ2VkIGJ5IFByb3RvY29sIExhYnMpLgo+ID4gKyAgICAgICAgICAg IHNucHJpbnRmKGMtPmdhdGV3YXlfYnVmZmVyLCBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpLCAi Cj4gaHR0cHM6Ly9kd2ViLmxpbmsiKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICBhdl9sb2coaCwg QVZfTE9HX1dBUk5JTkcsICJJUEZTIGRvZXMgbm90IGFwcGVhciB0byBiZQo+IHJ1bm5pbmcuIFlv deKAmXJlIG5vdyB1c2luZyB0aGUgcHVibGljIGdhdGV3YXkgYXQgZHdlYi5saW5rLlxuIik7Cj4g PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZPLCAiSW5zdGFsbGluZyBJUEZTIGxv Y2FsbHkgaXMKPiByZWNvbW1lbmRlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJp bGl0eSwgYW5kIG5vdCBzaGFyZSBhbGwgeW91cgo+IGFjdGl2aXR5IHdpdGggYSBzaW5nbGUgSVBG UyBnYXRld2F5LlxuIik7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZPLCAi VGhlcmUgYXJlIG11bHRpcGxlIG9wdGlvbnMgdG8KPiBkZWZpbmUgdGhpcyBnYXRld2F5LlxuIik7 Cj4gPiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZPLCAiMS4gQ2FsbCBmZm1wZWcg d2l0aCBhIGdhdGV3YXkKPiBwYXJhbSwgd2l0aG91dCBhIHRyYWlsaW5nIHNsYXNoOiAtZ2F0ZXdh eSA8dXJsPi5cbiIpOwo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIjIu IERlZmluZSBhbiAkSVBGU19HQVRFV0FZCj4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCB0aGUg ZnVsbCBIVFRQIFVSTCB0byB0aGUgZ2F0ZXdheSB3aXRob3V0IHRyYWlsaW5nCj4gZm9yd2FyZCBz bGFzaC5cbiIpOwo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIjMuIERl ZmluZSBhbiAkSVBGU19QQVRIIGVudmlyb25tZW50Cj4gdmFyaWFibGUgYW5kIHBvaW50IGl0IHRv IHRoZSBJUEZTIGRhdGEgcGF0aCAtIHRoaXMgaXMgdHlwaWNhbGx5IH4vLmlwZnNcbiIpOwo+Cj4g QWxsIHRob3NlIEFWX0xPR19JTkZPIGNhbiBiZSBjb21iaW5lZCB3aGljaCBoYXMgdGhlIGFkdmFu dGFnZSB0aGF0IHRoZQo+IGxvZ3MgY2FuJ3QgYmUgdGVhcmVkIGFwYXJ0ICh3aGljaCB0aGV5IGNh biBub3cgaWYgc29tZXRoaW5nIGVsc2UgbG9ncyBhdAo+IHRoZSBzYW1lIHRpbWUpOyBmdXJ0aGVy bW9yZSwgdGhpcyB3b3VsZCBhbHNvIGRlY3JlYXNlIGNvZGVzaXplLgo+CgpEbyB5b3UgaGF2ZSBh biBleGFtcGxlIG9mIHdoZXJlIHRoYXQncyBoYXBwZW5pbmc/Cgo+Cj4gPiArICAgICAgICB9Cj4g PiArICAgIH0KPiA+ICsKPiA+ICsgICAgLy8gVGVzdCBpZiB0aGUgZ2F0ZXdheSBzdGFydHMgd2l0 aCBlaXRoZXIgaHR0cDovLyBvciBodHRwczovLwo+ID4gKyAgICBpZiAoYXZfc3RyaXN0YXJ0KGMt PmdhdGV3YXlfYnVmZmVyLCAiaHR0cDovLyIsIE5VTEwpID09IDAKPiA+ICsgICAgICAgICYmIGF2 X3N0cmlzdGFydChjLT5nYXRld2F5X2J1ZmZlciwgImh0dHBzOi8vIiwgTlVMTCkgPT0gMCkgewo+ ID4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIGdhdGV3YXkgVVJMIGRp ZG4ndCBzdGFydCB3aXRoCj4gaHR0cDovLyBvciBodHRwczovLyBhbmQgaXMgdGhlcmVmb3JlIGlu dmFsaWQuXG4iKTsKPiA+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlMU0VRKTsKPiA+ICsgICAg ICAgIGdvdG8gZXJyOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8vIENvbmNhdGVuYXRlIHRo ZSB1cmwuCj4gPiArICAgIC8vIFRoaXMgZW5kcyB1cCB3aXRoIHNvbWV0aGluZyBsaWtlOgo+IGh0 dHA6Ly9sb2NhbGhvc3Q6ODA4MC9pcGZzL1FtLi4uLi4KPiA+ICsgICAgLy8gVGhlIGZvcm1hdCBv ZiAiJXMlcyVzJXMiIGlzIHRoZSBmb2xsb3dpbmc6Cj4gPiArICAgIC8vIDFzdCAlcyA9IFRoZSBn YXRld2F5Lgo+ID4gKyAgICAvLyAybmQgJXMgPSBJZiB0aGUgZ2F0ZXdheSBkaWRuJ3QgZW5kIGlu IGEgc2xhc2gsIGFkZCBhICIvIi4KPiBPdGhlcndpc2UgaXQncyBhbiBlbXB0eSBzdHJpbmcKPiA+ ICsgICAgLy8gM3JkICVzID0gRWl0aGVyIGlwbnMvIG9yIGlwZnMvLgo+ID4gKyAgICAvLyA0dGgg JXMgPSBUaGUgSVBGUyBDSUQgKFFtLi4uLCBiYWZ5Li4uLCAuLi4pLgo+ID4gKyAgICBmdWxsdXJp ID0gYXZfYXNwcmludGYoIiVzJXMlcyVzIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IGMtPmdhdGV3YXlfYnVmZmVyLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGMtPmdh dGV3YXlfYnVmZmVyW3N0cmxlbihjLT5nYXRld2F5X2J1ZmZlcikKPiAtIDFdID09ICcvJykgPyAi IiA6ICIvIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIChpc19pcG5zKSA/ICJpcG5z LyIgOiAiaXBmcy8iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBmc19jaWQpOwo+ Cj4gTWlzc2luZyBhbGxvY2F0aW9uIGNoZWNrLgo+CgpBaApGaXhlZCBpdCBsb2NhbGx5LgoKCj4K PiA+ICsKPiA+ICsgICAgLy8gUGFzcyB0aGUgVVJMIGJhY2sgdG8gRkZNcGVnJ3MgcHJvdG9jb2wg aGFuZGxlci4KPiA+ICsgICAgaWYgKChyZXQgPSBmZnVybF9vcGVuX3doaXRlbGlzdCgmYy0+aW5u ZXIsIGZ1bGx1cmksIGZsYWdzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZoLT5pbnRlcnJ1cHRfY2FsbGJhY2ssIG9wdGlvbnMsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaC0+cHJvdG9jb2xfd2hpdGVsaXN0LAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgtPnByb3RvY29sX2JsYWNrbGlzdCwgaCkpCj4g PiArICAgICAgICA8IDApIHsKPgo+IFdlaXJkIGZvcm1hdHRpbmc7IHdoeSBkb24ndCB5b3UganVz dCB1c2UKPiByZXQgPSBmZnVybF9vcGVuX3doaXRlbGlzdCguLi4pOwo+IGlmIChyZXQgPCAwKSB7 Cj4KCkZpeGVkLgoKCj4KPiA+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlVu YWJsZSB0byBvcGVuIHJlc291cmNlOiAlc1xuIiwKPiBmdWxsdXJpKTsKPiA+ICsgICAgICAgIGdv dG8gZXJyOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArZXJyOgo+ID4gKyAgICBhdl9mcmVlKGZ1bGx1 cmkpOwo+ID4gKyAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGlw ZnNfcmVhZChVUkxDb250ZXh0ICpoLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBzaXplKQo+ID4g K3sKPiA+ICsgICAgSVBGU0dhdGV3YXlDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwo+ID4gKyAg ICByZXR1cm4gZmZ1cmxfcmVhZChjLT5pbm5lciwgYnVmLCBzaXplKTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGludDY0X3QgaXBmc19zZWVrKFVSTENvbnRleHQgKmgsIGludDY0X3QgcG9zLCBp bnQgd2hlbmNlKQo+ID4gK3sKPiA+ICsgICAgSVBGU0dhdGV3YXlDb250ZXh0ICpjID0gaC0+cHJp dl9kYXRhOwo+ID4gKyAgICByZXR1cm4gZmZ1cmxfc2VlayhjLT5pbm5lciwgcG9zLCB3aGVuY2Up Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGlwZnNfY2xvc2UoVVJMQ29udGV4dCAqaCkK PiA+ICt7Cj4gPiArICAgIElQRlNHYXRld2F5Q29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPiA+ ICsgICAgcmV0dXJuIGZmdXJsX2Nsb3NlcCgmYy0+aW5uZXIpOwo+ID4gK30KPiA+ICsKPiA+ICsj ZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihJUEZTR2F0ZXdheUNvbnRleHQsIHgpCj4gPiArCj4g PiArc3RhdGljIGNvbnN0IEFWT3B0aW9uIG9wdGlvbnNbXSA9IHsKPiA+ICsgICAgeyJnYXRld2F5 IiwgIlRoZSBnYXRld2F5IHRvIGFzayBmb3IgSVBGUyBkYXRhLiIsIE9GRlNFVChnYXRld2F5KSwK PiBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gTlVMTH0sIDAsIDAsIEFWX09QVF9GTEFHX0RF Q09ESU5HX1BBUkFNfSwKPiA+ICsgICAge05VTEx9LAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGlj IGNvbnN0IEFWQ2xhc3MgaXBmc19jb250ZXh0X2NsYXNzID0gewo+ID4gKyAgICAuY2xhc3NfbmFt ZSAgID0gIklQRlMiLAo+ID4gKyAgICAuaXRlbV9uYW1lICAgID0gYXZfZGVmYXVsdF9pdGVtX25h bWUsCj4gPiArICAgIC5vcHRpb24gICAgICAgPSBvcHRpb25zLAo+ID4gKyAgICAudmVyc2lvbiAg ICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAo+ID4gK307Cj4gPiArCj4gPiArY29uc3QgVVJM UHJvdG9jb2wgZmZfaXBmc19wcm90b2NvbCA9IHsKPiA+ICsgICAgLm5hbWUgICAgICAgICAgICAg PSAiaXBmcyIsCj4gPiArICAgIC51cmxfb3BlbjIgICAgICAgID0gdHJhbnNsYXRlX2lwZnNfdG9f aHR0cCwKPiA+ICsgICAgLnVybF9yZWFkICAgICAgICAgPSBpcGZzX3JlYWQsCj4gPiArICAgIC51 cmxfc2VlayAgICAgICAgID0gaXBmc19zZWVrLAo+ID4gKyAgICAudXJsX2Nsb3NlICAgICAgICA9 IGlwZnNfY2xvc2UsCj4gPiArICAgIC5wcml2X2RhdGFfc2l6ZSAgID0gc2l6ZW9mKElQRlNHYXRl d2F5Q29udGV4dCksCj4gPiArICAgIC5wcml2X2RhdGFfY2xhc3MgID0gJmlwZnNfY29udGV4dF9j bGFzcywKPiA+ICt9Owo+ID4gKwo+ID4gK2NvbnN0IFVSTFByb3RvY29sIGZmX2lwbnNfcHJvdG9j b2wgPSB7Cj4gPiArICAgIC5uYW1lICAgICAgICAgICAgID0gImlwbnMiLAo+ID4gKyAgICAudXJs X29wZW4yICAgICAgICA9IHRyYW5zbGF0ZV9pcGZzX3RvX2h0dHAsCj4gPiArICAgIC51cmxfcmVh ZCAgICAgICAgID0gaXBmc19yZWFkLAo+ID4gKyAgICAudXJsX3NlZWsgICAgICAgICA9IGlwZnNf c2VlaywKPiA+ICsgICAgLnVybF9jbG9zZSAgICAgICAgPSBpcGZzX2Nsb3NlLAo+ID4gKyAgICAu cHJpdl9kYXRhX3NpemUgICA9IHNpemVvZihJUEZTR2F0ZXdheUNvbnRleHQpLAo+ID4gKyAgICAu cHJpdl9kYXRhX2NsYXNzICA9ICZpcGZzX2NvbnRleHRfY2xhc3MsCj4gPiArfTsKPiA+IGRpZmYg LS1naXQgYS9saWJhdmZvcm1hdC9wcm90b2NvbHMuYyBiL2xpYmF2Zm9ybWF0L3Byb3RvY29scy5j Cj4gPiBpbmRleCBkMDc1NjNjZDBjLi42ZWU2MmE1OThhIDEwMDY0NAo+ID4gLS0tIGEvbGliYXZm b3JtYXQvcHJvdG9jb2xzLmMKPiA+ICsrKyBiL2xpYmF2Zm9ybWF0L3Byb3RvY29scy5jCj4gPiBA QCAtNzEsNiArNzEsOCBAQCBleHRlcm4gY29uc3QgVVJMUHJvdG9jb2wgZmZfbGlic3J0X3Byb3Rv Y29sOwo+ID4gIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl9saWJzc2hfcHJvdG9jb2w7Cj4g PiAgZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29sIGZmX2xpYnNtYmNsaWVudF9wcm90b2NvbDsKPiA+ ICBleHRlcm4gY29uc3QgVVJMUHJvdG9jb2wgZmZfbGliem1xX3Byb3RvY29sOwo+ID4gK2V4dGVy biBjb25zdCBVUkxQcm90b2NvbCBmZl9pcGZzX3Byb3RvY29sOwo+ID4gK2V4dGVybiBjb25zdCBV UkxQcm90b2NvbCBmZl9pcG5zX3Byb3RvY29sOwo+ID4KPiA+ICAjaW5jbHVkZSAibGliYXZmb3Jt YXQvcHJvdG9jb2xfbGlzdC5jIgo+ID4KPgo+ClRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIHlvdXIg cmV2aWV3IQpQbGVhc2UgZG8gaGl0IG1lIGJhY2sgd2l0aCBhIHJlcGx5IG9uIHRoZSBxdWVzdGlv bnMgSSBoYXZlIHN0aWxsIG9wZW4uCgpJJ20gaG9uZXN0bHkgcXVpdGUgZG9uZSB3aXRoIHBhdGNo aW5nIHRoaXMgb3ZlciBhbmQgb3ZlciBhZ2FpbiAoaXQncyBvcGVuCmZvciBtb250aHMgbm93KSBz byBJJ2QgbGlrZSB0byBwdXQgdGhlIHBhY2UgaW4gdGhlc2UgZml4ZXMgYW5kIHNlbmQgYW4KdXBk YXRlZCB2ZXJzaW9uIHRvZGF5LgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1 ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==