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 226CA428B5 for ; Tue, 5 Apr 2022 16:37:19 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0B39A68B158; Tue, 5 Apr 2022 19:37:17 +0300 (EEST) Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2EE6168AF88 for ; Tue, 5 Apr 2022 19:37:11 +0300 (EEST) Received: by mail-wr1-f54.google.com with SMTP id d29so14138314wra.10 for ; Tue, 05 Apr 2022 09:37:11 -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=Uwl4rGscYZya0SSdCb7aOij6/a4nXA81+IeOkf6RY5o=; b=IUcfLpSOiZHe2H4lHg7D6Yj64gVtIWc9Iv4M2xvUY/Sd1wt4KUUw5w6ysxFsU1AQEN IDe0bL7RLFODtm1mX1P9Dl6ZPFbYEOzWetB7EmSeMZjfmfIzqYKDHxY46mffWL/N9krg wnvctSMTRxtR4Yph+ZwmboIIRGmKf8rma4/+LnZ6CAiixycsTmfm0nVjqcORda2U4fRG QFIbEcLj+Rf+28uRlvRIbC7umw6HZgljnJHHKQkc9AlWxusU8N87Prh0DOq7pzHqlhLp GX1tapZY1Ff7qSBLrrOnC7lJr2pfJ4XSU8K6DPLsaLc2jqsJGhBaOSxrRSUtdTqTbzln irHg== 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=Uwl4rGscYZya0SSdCb7aOij6/a4nXA81+IeOkf6RY5o=; b=Ax+Lad9Wn+Ia3vnpTtOc+Ubk4ZE+zpJbDhc43aktNTpKWlKmFU4z/q2S4Ogk+upjyv 5ZN19rfU9CNYXLa0S+35m8cnYEVLoxwrZFmwKv5l26rQ0NvWOHL0s6kmV3zHzkbu+Dzg ZwWJ0pCQWib6fnoUXu0SQj0x2dPzfmCl4cM/xyoWnxaBLHH+TqKRj6Dth++HC9NNrLiE BKwx3d/UkPrlJxpu01K0JUmGIeAezaMJa+REn6NUyOj2qjxuTvzWmYXHNdQkTZ1LwvYQ luwg3c26AKNOnRWnfdN2jGPwL4YD8EVR5aCWoAwC+h62bVkvlKd6HuUGGTQ2vslkxEox Kvcg== X-Gm-Message-State: AOAM531YEzOUqp4gN6cPEAcBWdM5yPukAINZ2ZZ78Vz1sB31AiGHQeoG VBLDziYWkwQPH0Pi0gTCXNtAIovHuirrFoj0woQ0aJHj X-Google-Smtp-Source: ABdhPJwSLlLwbB+0jVbqfVXBed99icXeOmJtYJpP9rwXB6c1dzXhrMnN0oAO5zXerz8hUa9rlNkSdn/f+dk181nnTUI= X-Received: by 2002:a5d:64aa:0:b0:206:132a:aeb5 with SMTP id m10-20020a5d64aa000000b00206132aaeb5mr3359005wrp.561.1649176630022; Tue, 05 Apr 2022 09:37:10 -0700 (PDT) MIME-Version: 1.0 References: <20220403223825.26764-1-markg85@gmail.com> <20220403223825.26764-2-markg85@gmail.com> In-Reply-To: <20220403223825.26764-2-markg85@gmail.com> From: Mark Gaiser Date: Tue, 5 Apr 2022 18:35:56 +0200 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v12 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: michael@niedermayer.cc, =?UTF-8?Q?Tomas_H=C3=A4rdin?= , Andreas Rheinhardt 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: T24gTW9uLCBBcHIgNCwgMjAyMiBhdCAxMjozOSBBTSBNYXJrIEdhaXNlciA8bWFya2c4NUBnbWFp bC5jb20+IHdyb3RlOgoKPiBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3I6Cj4gLSBmZnBsYXkg aXBmczovLzxjaWQ+Cj4gLSBmZnBsYXkgaXBuczovLzxjaWQ+Cj4KPiBJUEZTIGRhdGEgY2FuIGJl IHBsYXllZCBmcm9tIHNvIGNhbGxlZCAiaXBmcyBnYXRld2F5cyIuCj4gQSBnYXRld2F5IGlzIGVz c2VudGlhbGx5IGEgd2Vic2VydmVyIHRoYXQgZ2l2ZXMgYWNjZXNzIHRvIHRoZQo+IGRpc3RyaWJ1 dGVkIElQRlMgbmV0d29yay4KPgo+IFRoaXMgcHJvdG9jb2wgc3VwcG9ydCAoaXBmcyBhbmQgaXBu cykgdGhlcmVmb3JlIHRyYW5zbGF0ZXMKPiBpcGZzOi8vIGFuZCBpcG5zOi8vIHRvIGEgaHR0cDov LyB1cmwuIFRoaXMgcmVzdWx0aW5nIHVybCBpcwo+IHRoZW4gaGFuZGxlZCBieSB0aGUgaHR0cCBw cm90b2NvbC4gSXQgY291bGQgYWxzbyBiZSBodHRwcwo+IGRlcGVuZGluZyBvbiB0aGUgZ2F0ZXdh eSBwcm92aWRlZC4KPgo+IFRvIHVzZSB0aGlzIHByb3RvY29sLCBhIGdhdGV3YXkgbXVzdCBiZSBw cm92aWRlZC4KPiBJZiB5b3UgZG8gbm90aGluZyBpdCB3aWxsIHRyeSB0byBmaW5kIGl0IGluIHlv dXIKPiAkSE9NRS8uaXBmcy9nYXRld2F5IGZpbGUuIFRoZSB3YXlzIHRvIHNldCBpdCBtYW51YWxs eSBhcmU6Cj4gMS4gRGVmaW5lIGEgLWdhdGV3YXkgPHVybD4gdG8gdGhlIGdhdGV3YXkuCj4gMi4g RGVmaW5lICRJUEZTX0dBVEVXQVkgd2l0aCB0aGUgZnVsbCBodHRwIGxpbmsgdG8gdGhlIGdhdGV3 YXkuCj4gMy4gRGVmaW5lICRJUEZTX1BBVEggYW5kIHBvaW50IGl0IHRvIHRoZSBJUEZTIGRhdGEg cGF0aC4KPiA0LiBIYXZlIElQRlMgcnVubmluZyBpbiB5b3VyIGxvY2FsIHVzZXIgZm9sZGVyICh1 bmRlciAkSE9NRS8uaXBmcykuCj4KPiBTaWduZWQtb2ZmLWJ5OiBNYXJrIEdhaXNlciA8bWFya2c4 NUBnbWFpbC5jb20+Cj4gLS0tCj4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgfCAgIDIgKwo+ ICBkb2MvcHJvdG9jb2xzLnRleGkgICAgICAgIHwgIDMwICsrKysKPiAgbGliYXZmb3JtYXQvTWFr ZWZpbGUgICAgICB8ICAgMiArCj4gIGxpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMgfCAzMjYgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgbGliYXZmb3JtYXQvcHJvdG9j b2xzLmMgICB8ICAgMiArCj4gIDUgZmlsZXMgY2hhbmdlZCwgMzYyIGluc2VydGlvbnMoKykKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMKPgo+IGRpZmYgLS1n aXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPiBpbmRleCBlNGQzNmFhNjM5Li41NWFmOTA5NTdh IDEwMDc1NQo+IC0tLSBhL2NvbmZpZ3VyZQo+ICsrKyBiL2NvbmZpZ3VyZQo+IEBAIC0zNTc5LDYg KzM1NzksOCBAQCB1ZHBfcHJvdG9jb2xfc2VsZWN0PSJuZXR3b3JrIgo+ICB1ZHBsaXRlX3Byb3Rv Y29sX3NlbGVjdD0ibmV0d29yayIKPiAgdW5peF9wcm90b2NvbF9kZXBzPSJzeXNfdW5faCIKPiAg dW5peF9wcm90b2NvbF9zZWxlY3Q9Im5ldHdvcmsiCj4gK2lwZnNfcHJvdG9jb2xfc2VsZWN0PSJo dHRwc19wcm90b2NvbCIKPiAraXBuc19wcm90b2NvbF9zZWxlY3Q9Imh0dHBzX3Byb3RvY29sIgo+ Cj4gICMgZXh0ZXJuYWwgbGlicmFyeSBwcm90b2NvbHMKPiAgbGliYW1xcF9wcm90b2NvbF9kZXBz PSJsaWJyYWJiaXRtcSIKPiBkaWZmIC0tZ2l0IGEvZG9jL3Byb3RvY29scy50ZXhpIGIvZG9jL3By b3RvY29scy50ZXhpCj4gaW5kZXggZDIwN2RmMGI1Mi4uN2M5YzBhNDgwOCAxMDA2NDQKPiAtLS0g YS9kb2MvcHJvdG9jb2xzLnRleGkKPiArKysgYi9kb2MvcHJvdG9jb2xzLnRleGkKPiBAQCAtMjAy NSw1ICsyMDI1LDM1IEBAIGRlY29kaW5nIGVycm9ycy4KPgo+ICBAZW5kIHRhYmxlCj4KPiArQHNl Y3Rpb24gaXBmcwo+ICsKPiArSW50ZXJQbGFuZXRhcnkgRmlsZSBTeXN0ZW0gKElQRlMpIHByb3Rv Y29sIHN1cHBvcnQuIE9uZSBjYW4gYWNjZXNzIGZpbGVzCj4gc3RvcmVkCj4gK29uIHRoZSBJUEZT IG5ldHdvcmsgdGhyb3VnaCBzbyBjYWxsZWQgZ2F0ZXdheXMuIFRob3NlIGFyZSBodHRwKHMpCj4g ZW5kcG9pbnRzLgo+ICtUaGlzIHByb3RvY29sIHdyYXBzIHRoZSBJUEZTIG5hdGl2ZSBwcm90b2Nv bHMgKGlwZnM6Ly8gYW5kIGlwbnM6Ly8pIHRvIGJlCj4gc2VuZAo+ICt0byBzdWNoIGEgZ2F0ZXdh eS4gVXNlcnMgY2FuIChhbmQgc2hvdWxkKSBob3N0IHRoZWlyIG93biBub2RlIHdoaWNoIG1lYW5z Cj4gdGhpcwo+ICtwcm90b2NvbCB3aWxsIHVzZSB5b3VyIGxvY2FsIG1hY2hpbmUgZ2F0ZXdheSB0 byBhY2Nlc3MgZmlsZXMgb24gdGhlIElQRlMKPiBuZXR3b3JrLgo+ICsKPiArSWYgYSB1c2VyIGRv ZXNuJ3QgaGF2ZSBhIG5vZGUgb2YgdGhlaXIgb3duIHRoZW4gdGhlIHB1YmxpYyBnYXRld2F5Cj4g ZHdlYi5saW5rIGlzCj4gK3VzZWQgYnkgZGVmYXVsdC4KPiArCj4gK1lvdSBjYW4gdXNlIHRoaXMg cHJvdG9jb2wgaW4gMiB3YXlzLiBVc2luZyBJUEZTOgo+ICtAZXhhbXBsZQo+ICtmZnBsYXkgaXBm czovL1FtYkd0SmcyM3NraHZGbXU5bUppZVBWQnloZnp1NXJ3bzc0TUVrVkRZQW1GNVQKPiArQGVu ZCBleGFtcGxlCj4gKwo+ICtPciB0aGUgSVBOUyBwcm90b2NvbCAoSVBOUyBpcyBtdXRhYmxlIElQ RlMpOgo+ICtAZXhhbXBsZQo+ICtmZnBsYXkgaXBuczovL1FtYkd0SmcyM3NraHZGbXU5bUppZVBW QnloZnp1NXJ3bzc0TUVrVkRZQW1GNVQKPiArQGVuZCBleGFtcGxlCj4gKwo+ICtZb3UgY2FuIGFs c28gY2hhbmdlIHRoZSBnYXRld2F5IHRvIGJlIHVzZWQ6Cj4gKwo+ICtAdGFibGUgQG9wdGlvbgo+ ICsKPiArQGl0ZW0gZ2F0ZXdheQo+ICtEZWZpbmVzIHRoZSBnYXRld2F5IHRvIHVzZS4gV2hlbiBu b3RoaW5nIGlzIHByb3ZpZGVkIHRoZSBwcm90b2NvbCB3aWxsCj4gZmlyc3QgdHJ5Cj4gK3lvdXIg bG9jYWwgZ2F0ZXdheS4gSWYgdGhhdCBmYWlscyBkd2ViLmxpbmsgd2lsbCBiZSB1c2VkLgo+ICsK PiArQGVuZCB0YWJsZQo+Cj4gIEBjIG1hbiBlbmQgUFJPVE9DT0xTCj4gZGlmZiAtLWdpdCBhL2xp YmF2Zm9ybWF0L01ha2VmaWxlIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiBpbmRleCBkNzE4MmQ2 YmQ4Li5lMzIzM2ZkN2FjIDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gKysr IGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiBAQCAtNjYwLDYgKzY2MCw4IEBAIE9CSlMtJChDT05G SUdfU1JUUF9QUk9UT0NPTCkgICAgICAgICAgICAgKz0KPiBzcnRwcHJvdG8ubyBzcnRwLm8KPiAg T0JKUy0kKENPTkZJR19TVUJGSUxFX1BST1RPQ09MKSAgICAgICAgICArPSBzdWJmaWxlLm8KPiAg T0JKUy0kKENPTkZJR19URUVfUFJPVE9DT0wpICAgICAgICAgICAgICArPSB0ZWVwcm90by5vIHRl ZV9jb21tb24ubwo+ICBPQkpTLSQoQ09ORklHX1RDUF9QUk9UT0NPTCkgICAgICAgICAgICAgICs9 IHRjcC5vCj4gK09CSlMtJChDT05GSUdfSVBGU19QUk9UT0NPTCkgICAgICAgICAgICAgKz0gaXBm c2dhdGV3YXkubwo+ICtPQkpTLSQoQ09ORklHX0lQTlNfUFJPVE9DT0wpICAgICAgICAgICAgICs9 IGlwZnNnYXRld2F5Lm8KPiAgVExTLU9CSlMtJChDT05GSUdfR05VVExTKSAgICAgICAgICAgICAg ICArPSB0bHNfZ251dGxzLm8KPiAgVExTLU9CSlMtJChDT05GSUdfTElCVExTKSAgICAgICAgICAg ICAgICArPSB0bHNfbGlidGxzLm8KPiAgVExTLU9CSlMtJChDT05GSUdfTUJFRFRMUykgICAgICAg ICAgICAgICArPSB0bHNfbWJlZHRscy5vCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2lwZnNn YXRld2F5LmMgYi9saWJhdmZvcm1hdC9pcGZzZ2F0ZXdheS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5lMDFlYjJmOWEzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2xpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMKPiBAQCAtMCwwICsxLDMyNiBAQAo+ICsvKgo+ICsg KiBJUEZTIGFuZCBJUE5TIHByb3RvY29sIHN1cHBvcnQgdGhyb3VnaCBJUEZTIEdhdGV3YXkuCj4g KyAqIENvcHlyaWdodCAoYykgMjAyMiBNYXJrIEdhaXNlcgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+IDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsK PiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGls L29wdC5oIgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgIm9zX3N1cHBvcnQu aCIKPiArI2luY2x1ZGUgInVybC5oIgo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgSVBGU0dhdGV3YXlD b250ZXh0IHsKPiArICAgIEFWQ2xhc3MgKmNsYXNzOwo+ICsgICAgVVJMQ29udGV4dCAqaW5uZXI7 Cj4gKyAgICAvLyBJcyBmaWxsZWQgYnkgdGhlIC1nYXRld2F5IGFyZ3VtZW50IGFuZCBub3QgY2hh bmdlZCBhZnRlci4KPiArICAgIGNoYXIgKmdhdGV3YXk7Cj4gKyAgICAvLyBJZiB0aGUgYWJvdmUg Z2F0ZXdheSBpcyBub24gbnVsbCwgaXQgd2lsbCBiZSBjb3BpZWQgaW50byB0aGlzCj4gYnVmZmVy Lgo+ICsgICAgLy8gRWxzZSB0aGlzIGJ1ZmZlciB3aWxsIGNvbnRhaW4gdGhlIGF1dG8gZGV0ZWN0 ZWQgZ2F0ZXdheS4KPiArICAgIC8vIEluIGVpdGhlciBjYXNlLCB0aGUgZ2F0ZXdheSB0byB1c2Ug d2lsbCBiZSBpbiB0aGlzIGJ1ZmZlci4KPiArICAgIGNoYXIgZ2F0ZXdheV9idWZmZXJbUEFUSF9N QVhdOwo+ICt9IElQRlNHYXRld2F5Q29udGV4dDsKPiArCj4gKy8vIEEgYmVzdC1lZmZvcnQgd2F5 IHRvIGZpbmQgdGhlIElQRlMgZ2F0ZXdheS4KPiArLy8gT25seSB0aGUgbW9zdCBhcHByb3BpYXRl IGdhdGV3YXkgaXMgc2V0LiBJdCdzIG5vdCBhY3R1YWxseSByZXF1ZXN0ZWQKPiArLy8gKGh0dHAg Y2FsbCkgdG8gcHJldmVudCBhIHBvdGVudGlhbCBzbG93ZG93biBpbiBzdGFydHVwLiBBIHBvdGVu dGlhbAo+IHRpbWVvdXQKPiArLy8gaXMgaGFuZGxlZCBieSB0aGUgSFRUUCBwcm90b2NvbC4KPiAr c3RhdGljIGludCBwb3B1bGF0ZV9pcGZzX2dhdGV3YXkoVVJMQ29udGV4dCAqaCkKPiArewo+ICsg ICAgSVBGU0dhdGV3YXlDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwo+ICsgICAgY2hhciBpcGZz X2Z1bGxfZGF0YV9mb2xkZXJbUEFUSF9NQVhdOwo+ICsgICAgY2hhciBpcGZzX2dhdGV3YXlfZmls ZVtQQVRIX01BWF07Cj4gKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKPiArICAgIGludCBzdGF0X3JldCA9 IDA7Cj4gKyAgICBpbnQgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgRklMRSAqZ2F0ZXdh eV9maWxlID0gTlVMTDsKPiArCj4gKyAgICAvLyBUZXN0ICRJUEZTX0dBVEVXQVkuCj4gKyAgICBp ZiAoZ2V0ZW52KCJJUEZTX0dBVEVXQVkiKSAhPSBOVUxMKSB7Cj4gKyAgICAgICAgaWYgKHNucHJp bnRmKGMtPmdhdGV3YXlfYnVmZmVyLCBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpLCAiJXMiLAo+ ICsgICAgICAgICAgICAgICAgICAgICBnZXRlbnYoIklQRlNfR0FURVdBWSIpKSA+PQo+IHNpemVv ZihjLT5nYXRld2F5X2J1ZmZlcikpIHsKPiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19X QVJOSU5HLCAiVGhlIElQRlNfR0FURVdBWSBlbnZpcm9ubWVudAo+IHZhcmlhYmxlICIKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZWVkcyB0aGUgbWF4aW11bSBs ZW5ndGguICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2UgYWxs b3cgYSBtYXggb2YgJXp1Cj4gY2hhcmFjdGVyc1xuIiwKPiArICAgICAgICAgICAgICAgICAgIHNp emVvZihjLT5nYXRld2F5X2J1ZmZlcikpOwo+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJ TlZBTCk7Cj4gKyAgICAgICAgICAgIGdvdG8gZXJyOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAg ICAgcmV0ID0gMTsKPiArICAgICAgICBnb3RvIGVycjsKPiArICAgIH0gZWxzZQo+ICsgICAgICAg IGF2X2xvZyhoLCBBVl9MT0dfREVCVUcsICIkSVBGU19HQVRFV0FZIGlzIGVtcHR5LlxuIik7Cj4g Kwo+ICsgICAgLy8gV2UgbmVlZCB0byBrbm93IHRoZSBJUEZTIGZvbGRlciB0byAtIGV2ZW50dWFs bHkgLSByZWFkIHRoZQo+IGNvbnRlbnRzIG9mCj4gKyAgICAvLyB0aGUgImdhdGV3YXkiIGZpbGUg d2hpY2ggd291bGQgdGVsbCB1cyB0aGUgZ2F0ZXdheSB0byB1c2UuCj4gKyAgICBpZiAoZ2V0ZW52 KCJJUEZTX1BBVEgiKSA9PSBOVUxMKSB7Cj4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19ERUJV RywgIiRJUEZTX1BBVEggaXMgZW1wdHkuXG4iKTsKPiArCj4gKyAgICAgICAgLy8gVHJ5IHZpYSB0 aGUgaG9tZSBmb2xkZXIuCj4gKyAgICAgICAgaWYgKGdldGVudigiSE9NRSIpID09IE5VTEwpIHsK PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiJEhPTUUgYXBwZWFycyB0 byBiZSBlbXB0eS5cbiIpOwo+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4g KyAgICAgICAgICAgIGdvdG8gZXJyOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLy8gVmVy aWZ5IHRoZSBjb21wb3NlZCBwYXRoIGZpdHMuCj4gKyAgICAgICAgaWYgKHNucHJpbnRmKGlwZnNf ZnVsbF9kYXRhX2ZvbGRlciwgc2l6ZW9mKGlwZnNfZnVsbF9kYXRhX2ZvbGRlciksCj4gKyAgICAg ICAgICAgICAgICAgICAgICIlcy8uaXBmcy8iLCBnZXRlbnYoIkhPTUUiKSkgPj0KPiBzaXplb2Yo aXBmc19mdWxsX2RhdGFfZm9sZGVyKSkgewo+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9H X1dBUk5JTkcsICJUaGUgSVBGUyBkYXRhIHBhdGggZXhjZWVkcyB0aGUgIgo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXggcGF0aCBsZW5ndGggKCV6dSlcbiIsCj4g KyAgICAgICAgICAgICAgICAgICBzaXplb2YoaXBmc19mdWxsX2RhdGFfZm9sZGVyKSk7Cj4gKyAg ICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiArICAgICAgICAgICAgZ290byBlcnI7 Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvLyBTdGF0IHRoZSBmb2xkZXIuCj4gKyAgICAg ICAgLy8gSXQgc2hvdWxkIGV4aXN0IGluIGEgZGVmYXVsdCBJUEZTIHNldHVwIHdoZW4gcnVuIGFz IGxvY2FsIHVzZXIuCj4gKyAgICAgICAgc3RhdF9yZXQgPSBzdGF0KGlwZnNfZnVsbF9kYXRhX2Zv bGRlciwgJnN0KTsKPiArCj4gKyAgICAgICAgaWYgKHN0YXRfcmV0IDwgMCkgewo+ICsgICAgICAg ICAgICBhdl9sb2coaCwgQVZfTE9HX0lORk8sICJVbmFibGUgdG8gZmluZCBJUEZTIGZvbGRlci4g V2UKPiB0cmllZDpcbiIpOwo+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0lORk8sICIt ICRJUEZTX1BBVEgsIHdoaWNoIHdhcyBlbXB0eS5cbiIpOwo+ICsgICAgICAgICAgICBhdl9sb2co aCwgQVZfTE9HX0lORk8sICItICRIT01FLy5pcGZzIChmdWxsIHVyaTogJXMpIHdoaWNoCj4gZG9l c24ndCBleGlzdC5cbiIsIGlwZnNfZnVsbF9kYXRhX2ZvbGRlcik7Cj4gKyAgICAgICAgICAgIHJl dCA9IEFWRVJST1IoRU5PRU5UKTsKPiArICAgICAgICAgICAgZ290byBlcnI7Cj4gKyAgICAgICAg fQo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBpZiAoc25wcmludGYoaXBmc19mdWxsX2RhdGFf Zm9sZGVyLAo+IHNpemVvZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpLCAiJXMiLAo+ICsgICAgICAg ICAgICAgICAgIGdldGVudigiSVBGU19QQVRIIikpID49IHNpemVvZihpcGZzX2Z1bGxfZGF0YV9m b2xkZXIpKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlRoZSBJ UEZTX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUKPiAiCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImV4Y2VlZHMgdGhlIG1heGltdW0gbGVuZ3RoLiAiCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldlIGFsbG93IGEgbWF4IG9mICV6dQo+ IGNoYXJhY3RlcnNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBzaXplb2YoYy0+Z2F0ZXdheV9i dWZmZXIpKTsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAg ICAgICBnb3RvIGVycjsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgfQo+ICsKPiArICAgIC8vIENv cHkgdGhlIGZ1bGx5IGNvbXBvc2VkIGdhdGV3YXkgcGF0aCBpbnRvIGlwZnNfZ2F0ZXdheV9maWxl Lgo+ICsgICAgaWYgKHNucHJpbnRmKGlwZnNfZ2F0ZXdheV9maWxlLCBzaXplb2YoaXBmc19nYXRl d2F5X2ZpbGUpLAo+ICIlc2dhdGV3YXkiLAo+ICsgICAgICAgICAgICAgICAgIGlwZnNfZnVsbF9k YXRhX2ZvbGRlcikgPj0gc2l6ZW9mKGlwZnNfZ2F0ZXdheV9maWxlKSkgewo+ICsgICAgICAgIGF2 X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlRoZSBJUEZTIGdhdGV3YXkgZmlsZSBwYXRoIGV4Y2Vl ZHMgIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBtYXggcGF0aCBs ZW5ndGggKCV6dSlcbiIsCj4gKyAgICAgICAgICAgICAgIHNpemVvZihpcGZzX2dhdGV3YXlfZmls ZSkpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRU5PRU5UKTsKPiArICAgICAgICBnb3RvIGVy cjsKPiArICAgIH0KPiArCj4gKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBnYXRld2F5 IGZpbGUuCj4gKyAgICBnYXRld2F5X2ZpbGUgPSBhdl9mb3Blbl91dGY4KGlwZnNfZ2F0ZXdheV9m aWxlLCAiciIpOwo+ICsgICAgaWYgKCFnYXRld2F5X2ZpbGUpIHsKPiArICAgICAgICBhdl9sb2co aCwgQVZfTE9HX1dBUk5JTkcsICJUaGUgSVBGUyBnYXRld2F5IGZpbGUgKGZ1bGwgdXJpOiAlcykK PiBkb2Vzbid0IGV4aXN0LiAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi SXMgdGhlIGdhdGV3YXkgZW5hYmxlZD9cbiIsCj4gKyAgICAgICAgICAgICAgIGlwZnNfZ2F0ZXdh eV9maWxlKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT0VOVCk7Cj4gKyAgICAgICAgZ290 byBlcnI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8gUmVhZCBhIHNpbmdsZSBsaW5lIChmZ2V0cyBz dG9wcyBhdCBuZXcgbGluZSBtYXJrKS4KPiArICAgIGlmICghZmdldHMoYy0+Z2F0ZXdheV9idWZm ZXIsIHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikgLSAxLAo+IGdhdGV3YXlfZmlsZSkpIHsKPiAr ICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVW5hYmxlIHRvIHJlYWQgZnJvbSBmaWxl IChmdWxsIHVyaToKPiAlcykuXG4iLAo+ICsgICAgICAgICAgICAgaXBmc19nYXRld2F5X2ZpbGUp Owo+ICsgICAgICByZXQgPSBBVkVSUk9SKEVOT0VOVCk7Cj4gKyAgICAgIGdvdG8gZXJyOwo+ICsg ICAgfQo+ICsKPiArICAgIC8vIFJlcGxhY2UgZmlyc3Qgb2NjdXJlbmNlIG9mIGVuZCBvZiBsaW5l IHdpdGggXDAKPiArICAgIGMtPmdhdGV3YXlfYnVmZmVyW3N0cmNzcG4oYy0+Z2F0ZXdheV9idWZm ZXIsICJcclxuIildID0gMDsKPiArCj4gKyAgICAvLyBJZiBzdHJsZW4gZmluZHMgYW55dGhpbmcg bG9uZ2VyIHRoZW4gMCBjaGFyYWN0ZXJzIHRoZW4gd2UgaGF2ZSBhCj4gKyAgICAvLyBwb3RlbnRp YWwgZ2F0ZXdheSB1cmwuCj4gKyAgICBpZiAoKmMtPmdhdGV3YXlfYnVmZmVyID09ICdcMCcpIHsK PiArICAgICAgICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJUaGUgSVBGUyBnYXRld2F5IGZp bGUgKGZ1bGwgdXJpOiAlcykKPiBhcHBlYXJzIHRvIGJlIGVtcHR5LiAiCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiSXMgdGhlIGdhdGV3YXkgc3RhcnRlZD9cbiIsCj4gKyAg ICAgICAgICAgICAgIGlwZnNfZ2F0ZXdheV9maWxlKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9S KEVJTFNFUSk7Cj4gKyAgICAgICAgZ290byBlcnI7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAg IC8vIFdlJ3JlIGRvbmUsIHRoZSBjLT5nYXRld2F5X2J1ZmZlciBoYXMgc29tZXRoaW5nIHRoYXQg bG9va3MKPiB2YWxpZC4KPiArICAgICAgICByZXQgPSAxOwo+ICsgICAgICAgIGdvdG8gZXJyOwo+ ICsgICAgfQo+ICsKPiArZXJyOgo+ICsgICAgaWYgKGdhdGV3YXlfZmlsZSkKPiArICAgICAgICBm Y2xvc2UoZ2F0ZXdheV9maWxlKTsKPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHRyYW5zbGF0ZV9pcGZzX3RvX2h0dHAoVVJMQ29udGV4dCAqaCwgY29uc3QgY2hh ciAqdXJpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBB VkRpY3Rpb25hcnkgKipvcHRpb25zKQo+ICt7Cj4gKyAgICBjb25zdCBjaGFyICppcGZzX2NpZDsK PiArICAgIGNoYXIgKmZ1bGx1cmkgPSBOVUxMOwo+ICsgICAgaW50IHJldDsKPiArICAgIElQRlNH YXRld2F5Q29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPiArCj4gKyAgICAvLyBUZXN0IGZvciBp cGZzOi8vLCBpcGZzOiwgaXBuczovLyBhbmQgaXBuczouIFRoaXMgcHJlZml4IGlzCj4gc3RyaXBw ZWQgZnJvbQo+ICsgICAgLy8gdGhlIHN0cmluZyBsZWF2aW5nIGp1c3QgdGhlIENJRCBpbiBpcGZz X2NpZC4KPiArICAgIGludCBpc19pcGZzID0gYXZfc3RyaXN0YXJ0KHVyaSwgImlwZnM6Ly8iLCAm aXBmc19jaWQpOwo+ICsgICAgaW50IGlzX2lwbnMgPSBhdl9zdHJpc3RhcnQodXJpLCAiaXBuczov LyIsICZpcGZzX2NpZCk7Cj4gKwo+ICsgICAgLy8gV2UgbXVzdCBoYXZlIGVpdGhlciBpcG5zIG9y IGlwZnMuCj4gKyAgICBpZiAoIWlzX2lwZnMgJiYgIWlzX2lwbnMpIHsKPiArICAgICAgICByZXQg PSBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAi VW5zdXBwb3J0ZWQgdXJsICVzXG4iLCB1cmkpOwo+ICsgICAgICAgIGdvdG8gZXJyOwo+ICsgICAg fQo+ICsKPiArICAgIC8vIElmIHRoZSBDSUQgaGFzIGEgbGVuZ3RoIGdyZWF0ZXIgdGhlbiAwIHRo ZW4gd2UgYXNzdW1lIHdlIGhhdmUgYQo+IHByb3BlciB3b3JraW5nIG9uZS4KPiArICAgIC8vIEl0 IGNvdWxkIHN0aWxsIGJlIHdyb25nIGJ1dCBpbiB0aGF0IGNhc2UgdGhlIGdhdGV3YXkgc2hvdWxk IHNhdmUKPiB1cyBhbmQKPiArICAgIC8vIHJ1dHVybiBhIDQwMyBlcnJvci4gVGhlIGh0dHAgcHJv dG9jb2wgaGFuZGxlcyB0aGlzLgo+ICsgICAgaWYgKHN0cmxlbihpcGZzX2NpZCkgPCAxKSB7Cj4g KyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiQSBDSUQgbXVzdCBiZSBwcm92aWRl ZC5cbiIpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlMU0VRKTsKPiArICAgICAgICBnb3Rv IGVycjsKPiArICAgIH0KPiArCj4gKyAgICAvLyBQb3B1bGF0ZSBjLT5nYXRld2F5X2J1ZmZlciB3 aXRoIHdoYXRldmVyIGlzIGluIGMtPmdhdGV3YXkKPiArICAgIGlmIChjLT5nYXRld2F5ICE9IE5V TEwpIHsKPiArICAgICAgICBpZiAoc25wcmludGYoYy0+Z2F0ZXdheV9idWZmZXIsIHNpemVvZihj LT5nYXRld2F5X2J1ZmZlciksICIlcyIsCj4gKyAgICAgICAgICAgICAgICAgICAgIGMtPmdhdGV3 YXkpID49IHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikpIHsKPiArICAgICAgICAgICAgYXZfbG9n KGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIC1nYXRld2F5IHBhcmFtZXRlciBpcyB0b28KPiBsb25n LiAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldlIGFsbG93IGEg bWF4IG9mICV6dQo+IGNoYXJhY3RlcnNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBzaXplb2Yo Yy0+Z2F0ZXdheV9idWZmZXIpKTsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwp Owo+ICsgICAgICAgICAgICBnb3RvIGVycjsKPiArICAgICAgICB9Cj4gKyAgICB9IGVsc2Ugewo+ ICsgICAgICAgIC8vIFBvcHVsYXRlIHRoZSBJUEZTIGdhdGV3YXkgaWYgd2UgaGF2ZSBhbnkuCj4g KyAgICAgICAgLy8gSWYgbm90LCBpbmZvcm0gdGhlIHVzZXIgaG93IHRvIHByb3Blcmx5IHNldCBv bmUuCj4gKyAgICAgICAgcmV0ID0gcG9wdWxhdGVfaXBmc19nYXRld2F5KGgpOwo+ICsKPiArICAg ICAgICBpZiAocmV0IDwgMSkgewo+ICsgICAgICAgICAgICAvLyBXZSBmYWxsYmFjayBvbiBkd2Vi LmxpbmsgKG1hbmFnZWQgYnkgUHJvdG9jb2wgTGFicykuCj4gKyAgICAgICAgICAgIHNucHJpbnRm KGMtPmdhdGV3YXlfYnVmZmVyLCBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpLCAiCj4gaHR0cHM6 Ly9kd2ViLmxpbmsiKTsKPiArCj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklO RywgIklQRlMgZG9lcyBub3QgYXBwZWFyIHRvIGJlCj4gcnVubmluZy4gIgo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3XigJlyZSBub3cgdXNpbmcgdGhlIHB1Ymxp Ywo+IGdhdGV3YXkgYXQgZHdlYi5saW5rLlxuIik7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBB Vl9MT0dfSU5GTywgIkluc3RhbGxpbmcgSVBGUyBsb2NhbGx5IGlzCj4gcmVjb21tZW5kZWQgdG8g Igo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXByb3ZlIHBlcmZvcm1h bmNlIGFuZCByZWxpYWJpbGl0eSwgIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJhbmQgbm90IHNoYXJlIGFsbCB5b3VyIGFjdGl2aXR5IHdpdGgKPiBhIHNpbmdsZSBJUEZT IGdhdGV3YXkuXG4iCj4gKyAgICAgICAgICAgICAgICAgICAiVGhlcmUgYXJlIG11bHRpcGxlIG9w dGlvbnMgdG8gZGVmaW5lIHRoaXMgZ2F0ZXdheS5cbiIKPiArICAgICAgICAgICAgICAgICAgICIx LiBDYWxsIGZmbXBlZyB3aXRoIGEgZ2F0ZXdheSBwYXJhbSwgIgo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJ3aXRob3V0IGEgdHJhaWxpbmcgc2xhc2g6IC1nYXRld2F5Cj4g PHVybD4uXG4iCj4gKyAgICAgICAgICAgICAgICAgICAiMi4gRGVmaW5lIGFuICRJUEZTX0dBVEVX QVkgZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aAo+IHRoZSAiCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImZ1bGwgSFRUUCBVUkwgdG8gdGhlIGdhdGV3YXkgIgo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRob3V0IHRyYWlsaW5nIGZvcndhcmQg c2xhc2guXG4iCj4gKyAgICAgICAgICAgICAgICAgICAiMy4gRGVmaW5lIGFuICRJUEZTX1BBVEgg ZW52aXJvbm1lbnQgdmFyaWFibGUgIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJhbmQgcG9pbnQgaXQgdG8gdGhlIElQRlMgZGF0YSBwYXRoICIKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiLSB0aGlzIGlzIHR5cGljYWxseSB+Ly5pcGZzXG4iKTsK PiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8gVGVzdCBpZiB0aGUgZ2F0ZXdheSBz dGFydHMgd2l0aCBlaXRoZXIgaHR0cDovLyBvciBodHRwczovLwo+ICsgICAgaWYgKGF2X3N0cmlz dGFydChjLT5nYXRld2F5X2J1ZmZlciwgImh0dHA6Ly8iLCBOVUxMKSA9PSAwCj4gKyAgICAgICAg JiYgYXZfc3RyaXN0YXJ0KGMtPmdhdGV3YXlfYnVmZmVyLCAiaHR0cHM6Ly8iLCBOVUxMKSA9PSAw KSB7Cj4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIGdhdGV3YXkgVVJM IGRpZG4ndCBzdGFydCB3aXRoCj4gaHR0cDovLyBvciAiCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiaHR0cHM6Ly8gYW5kIGlzIHRoZXJlZm9yZQo+IGludmFsaWQuXG4iKTsK PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTFNFUSk7Cj4gKyAgICAgICAgZ290byBlcnI7Cj4g KyAgICB9Cj4gKwo+ICsgICAgLy8gQ29uY2F0ZW5hdGUgdGhlIHVybC4KPiArICAgIC8vIFRoaXMg ZW5kcyB1cCB3aXRoIHNvbWV0aGluZyBsaWtlOiBodHRwOi8vbG9jYWxob3N0OjgwODAvaXBmcy9R bS4uLgo+IC4uCj4gKyAgICAvLyBUaGUgZm9ybWF0IG9mICIlcyVzJXMlcyIgaXMgdGhlIGZvbGxv d2luZzoKPiArICAgIC8vIDFzdCAlcyA9IFRoZSBnYXRld2F5Lgo+ICsgICAgLy8gMm5kICVzID0g SWYgdGhlIGdhdGV3YXkgZGlkbid0IGVuZCBpbiBhIHNsYXNoLCBhZGQgYSAiLyIuCj4gT3RoZXJ3 aXNlIGl0J3MgYW4gZW1wdHkgc3RyaW5nCj4gKyAgICAvLyAzcmQgJXMgPSBFaXRoZXIgaXBucy8g b3IgaXBmcy8uCj4gKyAgICAvLyA0dGggJXMgPSBUaGUgSVBGUyBDSUQgKFFtLi4uLCBiYWZ5Li4u LCAuLi4pLgo+ICsgICAgZnVsbHVyaSA9IGF2X2FzcHJpbnRmKCIlcyVzJXMlcyIsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgYy0+Z2F0ZXdheV9idWZmZXIsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgKGMtPmdhdGV3YXlfYnVmZmVyW3N0cmxlbihjLT5nYXRld2F5X2J1ZmZlcikg LQo+IDFdID09ICcvJykgPyAiIiA6ICIvIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAo aXNfaXBucykgPyAiaXBucy8iIDogImlwZnMvIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICBpcGZzX2NpZCk7Cj4gKwo+ICsgICAgaWYgKCFmdWxsdXJpKSB7Cj4gKyAgICAgIGF2X2xvZyho LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY29tcG9zZSB0aGUgVVJMXG4iKTsKPiArICAgICAg cmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgICBnb3RvIGVycjsKPiArICAgIH0KPiArCj4g KyAgICAvLyBQYXNzIHRoZSBVUkwgYmFjayB0byBGRk1wZWcncyBwcm90b2NvbCBoYW5kbGVyLgo+ ICsgICAgcmV0ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoJmMtPmlubmVyLCBmdWxsdXJpLCBmbGFn cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoLT5pbnRlcnJ1cHRfY2FsbGJh Y2ssIG9wdGlvbnMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLT5wcm90b2Nv bF93aGl0ZWxpc3QsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLT5wcm90b2Nv bF9ibGFja2xpc3QsIGgpOwo+ICsgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBhdl9sb2co aCwgQVZfTE9HX1dBUk5JTkcsICJVbmFibGUgdG8gb3BlbiByZXNvdXJjZTogJXNcbiIsCj4gZnVs bHVyaSk7Cj4gKyAgICAgICAgZ290byBlcnI7Cj4gKyAgICB9Cj4gKwo+ICtlcnI6Cj4gKyAgICBh dl9mcmVlKGZ1bGx1cmkpOwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBpcGZzX3JlYWQoVVJMQ29udGV4dCAqaCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc2l6ZSkK PiArewo+ICsgICAgSVBGU0dhdGV3YXlDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwo+ICsgICAg cmV0dXJuIGZmdXJsX3JlYWQoYy0+aW5uZXIsIGJ1Ziwgc2l6ZSk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQ2NF90IGlwZnNfc2VlayhVUkxDb250ZXh0ICpoLCBpbnQ2NF90IHBvcywgaW50IHdoZW5j ZSkKPiArewo+ICsgICAgSVBGU0dhdGV3YXlDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwo+ICsg ICAgcmV0dXJuIGZmdXJsX3NlZWsoYy0+aW5uZXIsIHBvcywgd2hlbmNlKTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBpcGZzX2Nsb3NlKFVSTENvbnRleHQgKmgpCj4gK3sKPiArICAgIElQRlNHYXRl d2F5Q29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPiArICAgIHJldHVybiBmZnVybF9jbG9zZXAo JmMtPmlubmVyKTsKPiArfQo+ICsKPiArI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoSVBGU0dh dGV3YXlDb250ZXh0LCB4KQo+ICsKPiArc3RhdGljIGNvbnN0IEFWT3B0aW9uIG9wdGlvbnNbXSA9 IHsKPiArICAgIHsiZ2F0ZXdheSIsICJUaGUgZ2F0ZXdheSB0byBhc2sgZm9yIElQRlMgZGF0YS4i LCBPRkZTRVQoZ2F0ZXdheSksCj4gQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAw LCAwLCBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTX0sCj4gKyAgICB7TlVMTH0sCj4gK307Cj4g Kwo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyBpcGZzX2NvbnRleHRfY2xhc3MgPSB7Cj4gKyAgICAu Y2xhc3NfbmFtZSAgID0gIklQRlMiLAo+ICsgICAgLml0ZW1fbmFtZSAgICA9IGF2X2RlZmF1bHRf aXRlbV9uYW1lLAo+ICsgICAgLm9wdGlvbiAgICAgICA9IG9wdGlvbnMsCj4gKyAgICAudmVyc2lv biAgICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAo+ICt9Owo+ICsKPiArY29uc3QgVVJMUHJv dG9jb2wgZmZfaXBmc19wcm90b2NvbCA9IHsKPiArICAgIC5uYW1lICAgICAgICAgICAgID0gImlw ZnMiLAo+ICsgICAgLnVybF9vcGVuMiAgICAgICAgPSB0cmFuc2xhdGVfaXBmc190b19odHRwLAo+ ICsgICAgLnVybF9yZWFkICAgICAgICAgPSBpcGZzX3JlYWQsCj4gKyAgICAudXJsX3NlZWsgICAg ICAgICA9IGlwZnNfc2VlaywKPiArICAgIC51cmxfY2xvc2UgICAgICAgID0gaXBmc19jbG9zZSwK PiArICAgIC5wcml2X2RhdGFfc2l6ZSAgID0gc2l6ZW9mKElQRlNHYXRld2F5Q29udGV4dCksCj4g KyAgICAucHJpdl9kYXRhX2NsYXNzICA9ICZpcGZzX2NvbnRleHRfY2xhc3MsCj4gK307Cj4gKwo+ ICtjb25zdCBVUkxQcm90b2NvbCBmZl9pcG5zX3Byb3RvY29sID0gewo+ICsgICAgLm5hbWUgICAg ICAgICAgICAgPSAiaXBucyIsCj4gKyAgICAudXJsX29wZW4yICAgICAgICA9IHRyYW5zbGF0ZV9p cGZzX3RvX2h0dHAsCj4gKyAgICAudXJsX3JlYWQgICAgICAgICA9IGlwZnNfcmVhZCwKPiArICAg IC51cmxfc2VlayAgICAgICAgID0gaXBmc19zZWVrLAo+ICsgICAgLnVybF9jbG9zZSAgICAgICAg PSBpcGZzX2Nsb3NlLAo+ICsgICAgLnByaXZfZGF0YV9zaXplICAgPSBzaXplb2YoSVBGU0dhdGV3 YXlDb250ZXh0KSwKPiArICAgIC5wcml2X2RhdGFfY2xhc3MgID0gJmlwZnNfY29udGV4dF9jbGFz cywKPiArfTsKPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvcHJvdG9jb2xzLmMgYi9saWJhdmZv cm1hdC9wcm90b2NvbHMuYwo+IGluZGV4IGQwNzU2M2NkMGMuLjZlZTYyYTU5OGEgMTAwNjQ0Cj4g LS0tIGEvbGliYXZmb3JtYXQvcHJvdG9jb2xzLmMKPiArKysgYi9saWJhdmZvcm1hdC9wcm90b2Nv bHMuYwo+IEBAIC03MSw2ICs3MSw4IEBAIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl9saWJz cnRfcHJvdG9jb2w7Cj4gIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl9saWJzc2hfcHJvdG9j b2w7Cj4gIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl9saWJzbWJjbGllbnRfcHJvdG9jb2w7 Cj4gIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl9saWJ6bXFfcHJvdG9jb2w7Cj4gK2V4dGVy biBjb25zdCBVUkxQcm90b2NvbCBmZl9pcGZzX3Byb3RvY29sOwo+ICtleHRlcm4gY29uc3QgVVJM UHJvdG9jb2wgZmZfaXBuc19wcm90b2NvbDsKPgo+ICAjaW5jbHVkZSAibGliYXZmb3JtYXQvcHJv dG9jb2xfbGlzdC5jIgo+Cj4gLS0KPiAyLjM1LjEKPgo+CiBGcmllbmRseSBwaW5nLCBob3BlZnVs bHkgdGhlIGxhc3Qgb25lIDspCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5v cmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1 bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVl c3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K