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 095924224A for ; Thu, 31 Mar 2022 22:18:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9362468B211; Fri, 1 Apr 2022 01:18:36 +0300 (EEST) Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 84F6C68AB45 for ; Fri, 1 Apr 2022 01:18:30 +0300 (EEST) Received: by mail-wm1-f48.google.com with SMTP id f6-20020a1c3806000000b0038e4a0fc5easo442039wma.3 for ; Thu, 31 Mar 2022 15:18:30 -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=Rur5bSrQkJ2xOzk5LvmvPqLZya+cuiuBWOTVtmydT6U=; b=aF8JyET7HTCDTNQS6eQQ8pPw6ZeatmPzWYFHtpgLXjVeFe4ufjN+XvIvhah/F6JLXm KHe30XKJUGX5A0/cVGBFmA0BQKahJr7WCy2IeJvFTjEMjJAbElFoBxSQZJM7BVsdnRSK pAYkXACt38TDh8htwWVMQsCBPYgjspYcDnaSnXyhH1YK6+L65XW1S/vYdDpBzLxKPCWc W41CLIIz+/DElFU5I51KxXL45gejwwTNfpoBBn0rPwINYyRF1pMXklnrjDlc7frANmC/ gBQnobC6DmPrWWKiQFTZ5EiAcKTKi0sFIr9HLbA3uBsHAIb+bELgNEtFYBCcb6Y7rwg4 lEhg== 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=Rur5bSrQkJ2xOzk5LvmvPqLZya+cuiuBWOTVtmydT6U=; b=JeqbTcYUPeGoJdTEWq/ss+sKeirhT3/xO7woe7VifpHXlgf+aDasaU/wfGlNzHG0RF FRUtGZINJ0mdnTJCdmXAIJ0cjBXvFTIEdTk+e3O2NgWdABcqIG4wKM6quukkKTt8yPZz 5tQvhVAbvHMWo2BCDRm5gCYaI3U7U0yv46QQ2ZOsXMLHBU/WJ0n7m1XpdFkH8EMBh6eq 8RDlqvllPl8ufMKQS5bz+mZZU8ZiVdWZ94yuUahQE/451AfH6SW6ItrlgAmKJuI+QMrb vY7eKx1/fY7sKwxJ6T+KrSp1KHGzmcTwKWnYBqa9e9DmQVbztrUnwMxuar32X4qYDJYr waQA== X-Gm-Message-State: AOAM530fQq/3udNMB5KUlKzlxsYpRA40MP/Uj/bCLoXQ04Y5RXK0/7N9 bNJDDWnoKCqStjX337TcPPTMH8Vne3VXebRvE8rRiKTp0fc= X-Google-Smtp-Source: ABdhPJzJd7O5q38VHROgP5dh3pL4K2n6Jus3UzF6Ssy82VM59Xxb/AfnRHtIWwXZ4RZbIjTZPwAFNRKIKgKfJhL1TCA= X-Received: by 2002:a1c:ed11:0:b0:38a:dd7:ab91 with SMTP id l17-20020a1ced11000000b0038a0dd7ab91mr6441664wmh.37.1648765109542; Thu, 31 Mar 2022 15:18:29 -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: Fri, 1 Apr 2022 00:17:21 +0200 Message-ID: To: Andreas Rheinhardt 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: FFmpeg development discussions and patches 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: T24gVGh1LCBNYXIgMzEsIDIwMjIgYXQgMTE6NDQgUE0gQW5kcmVhcyBSaGVpbmhhcmR0IDwKYW5k cmVhcy5yaGVpbmhhcmR0QG91dGxvb2suY29tPiB3cm90ZToKCj4gTWFyayBHYWlzZXI6Cj4gPiBP biBXZWQsIE1hciAzMCwgMjAyMiBhdCAzOjU3IFBNIEFuZHJlYXMgUmhlaW5oYXJkdCA8Cj4gPiBh bmRyZWFzLnJoZWluaGFyZHRAb3V0bG9vay5jb20+IHdyb3RlOgo+ID4KPiA+PiBNYXJrIEdhaXNl cjoKPiA+Pj4gT24gV2VkLCBNYXIgMzAsIDIwMjIgYXQgMjoyMSBQTSBBbmRyZWFzIFJoZWluaGFy ZHQgPAo+ID4+PiBhbmRyZWFzLnJoZWluaGFyZHRAb3V0bG9vay5jb20+IHdyb3RlOgo+ID4+Pgo+ ID4+Pj4gTWFyayBHYWlzZXI6Cj4gPj4+Pj4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yOgo+ ID4+Pj4+IC0gZmZwbGF5IGlwZnM6Ly88Y2lkPgo+ID4+Pj4+IC0gZmZwbGF5IGlwbnM6Ly88Y2lk Pgo+ID4+Pj4+Cj4gPj4+Pj4gSVBGUyBkYXRhIGNhbiBiZSBwbGF5ZWQgZnJvbSBzbyBjYWxsZWQg ImlwZnMgZ2F0ZXdheXMiLgo+ID4+Pj4+IEEgZ2F0ZXdheSBpcyBlc3NlbnRpYWxseSBhIHdlYnNl cnZlciB0aGF0IGdpdmVzIGFjY2VzcyB0byB0aGUKPiA+Pj4+PiBkaXN0cmlidXRlZCBJUEZTIG5l dHdvcmsuCj4gPj4+Pj4KPiA+Pj4+PiBUaGlzIHByb3RvY29sIHN1cHBvcnQgKGlwZnMgYW5kIGlw bnMpIHRoZXJlZm9yZSB0cmFuc2xhdGVzCj4gPj4+Pj4gaXBmczovLyBhbmQgaXBuczovLyB0byBh IGh0dHA6Ly8gdXJsLiBUaGlzIHJlc3VsdGluZyB1cmwgaXMKPiA+Pj4+PiB0aGVuIGhhbmRsZWQg YnkgdGhlIGh0dHAgcHJvdG9jb2wuIEl0IGNvdWxkIGFsc28gYmUgaHR0cHMKPiA+Pj4+PiBkZXBl bmRpbmcgb24gdGhlIGdhdGV3YXkgcHJvdmlkZWQuCj4gPj4+Pj4KPiA+Pj4+PiBUbyB1c2UgdGhp cyBwcm90b2NvbCwgYSBnYXRld2F5IG11c3QgYmUgcHJvdmlkZWQuCj4gPj4+Pj4gSWYgeW91IGRv IG5vdGhpbmcgaXQgd2lsbCB0cnkgdG8gZmluZCBpdCBpbiB5b3VyCj4gPj4+Pj4gJEhPTUUvLmlw ZnMvZ2F0ZXdheSBmaWxlLiBUaGUgd2F5cyB0byBzZXQgaXQgbWFudWFsbHkgYXJlOgo+ID4+Pj4+ IDEuIERlZmluZSBhIC1nYXRld2F5IDx1cmw+IHRvIHRoZSBnYXRld2F5Lgo+ID4+Pj4+IDIuIERl ZmluZSAkSVBGU19HQVRFV0FZIHdpdGggdGhlIGZ1bGwgaHR0cCBsaW5rIHRvIHRoZSBnYXRld2F5 Lgo+ID4+Pj4+IDMuIERlZmluZSAkSVBGU19QQVRIIGFuZCBwb2ludCBpdCB0byB0aGUgSVBGUyBk YXRhIHBhdGguCj4gPj4+Pj4gNC4gSGF2ZSBJUEZTIHJ1bm5pbmcgaW4geW91ciBsb2NhbCB1c2Vy IGZvbGRlciAodW5kZXIgJEhPTUUvLmlwZnMpLgo+ID4+Pj4+Cj4gPj4+Pj4gU2lnbmVkLW9mZi1i eTogTWFyayBHYWlzZXIgPG1hcmtnODVAZ21haWwuY29tPgo+ID4+Pj4+IC0tLQo+ID4+Pj4+ICBj b25maWd1cmUgICAgICAgICAgICAgICAgIHwgICAyICsKPiA+Pj4+PiAgZG9jL3Byb3RvY29scy50 ZXhpICAgICAgICB8ICAzMCArKysrCj4gPj4+Pj4gIGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICAg fCAgIDIgKwo+ID4+Pj4+ICBsaWJhdmZvcm1hdC9pcGZzZ2F0ZXdheS5jIHwgMzA5Cj4gKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+Pj4+PiAgbGliYXZmb3JtYXQvcHJv dG9jb2xzLmMgICB8ICAgMiArCj4gPj4+Pj4gIDUgZmlsZXMgY2hhbmdlZCwgMzQ1IGluc2VydGlv bnMoKykKPiA+Pj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L2lwZnNnYXRld2F5 LmMKPiA+Pj4+Pgo+ID4+Pj4+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPiA+ Pj4+PiBpbmRleCBlNGQzNmFhNjM5Li41NWFmOTA5NTdhIDEwMDc1NQo+ID4+Pj4+IC0tLSBhL2Nv bmZpZ3VyZQo+ID4+Pj4+ICsrKyBiL2NvbmZpZ3VyZQo+ID4+Pj4+IEBAIC0zNTc5LDYgKzM1Nzks OCBAQCB1ZHBfcHJvdG9jb2xfc2VsZWN0PSJuZXR3b3JrIgo+ID4+Pj4+ICB1ZHBsaXRlX3Byb3Rv Y29sX3NlbGVjdD0ibmV0d29yayIKPiA+Pj4+PiAgdW5peF9wcm90b2NvbF9kZXBzPSJzeXNfdW5f aCIKPiA+Pj4+PiAgdW5peF9wcm90b2NvbF9zZWxlY3Q9Im5ldHdvcmsiCj4gPj4+Pj4gK2lwZnNf cHJvdG9jb2xfc2VsZWN0PSJodHRwc19wcm90b2NvbCIKPiA+Pj4+PiAraXBuc19wcm90b2NvbF9z ZWxlY3Q9Imh0dHBzX3Byb3RvY29sIgo+ID4+Pj4+Cj4gPj4+Pj4gICMgZXh0ZXJuYWwgbGlicmFy eSBwcm90b2NvbHMKPiA+Pj4+PiAgbGliYW1xcF9wcm90b2NvbF9kZXBzPSJsaWJyYWJiaXRtcSIK PiA+Pj4+PiBkaWZmIC0tZ2l0IGEvZG9jL3Byb3RvY29scy50ZXhpIGIvZG9jL3Byb3RvY29scy50 ZXhpCj4gPj4+Pj4gaW5kZXggZDIwN2RmMGI1Mi4uN2M5YzBhNDgwOCAxMDA2NDQKPiA+Pj4+PiAt LS0gYS9kb2MvcHJvdG9jb2xzLnRleGkKPiA+Pj4+PiArKysgYi9kb2MvcHJvdG9jb2xzLnRleGkK PiA+Pj4+PiBAQCAtMjAyNSw1ICsyMDI1LDM1IEBAIGRlY29kaW5nIGVycm9ycy4KPiA+Pj4+Pgo+ ID4+Pj4+ICBAZW5kIHRhYmxlCj4gPj4+Pj4KPiA+Pj4+PiArQHNlY3Rpb24gaXBmcwo+ID4+Pj4+ ICsKPiA+Pj4+PiArSW50ZXJQbGFuZXRhcnkgRmlsZSBTeXN0ZW0gKElQRlMpIHByb3RvY29sIHN1 cHBvcnQuIE9uZSBjYW4gYWNjZXNzCj4gPj4+PiBmaWxlcyBzdG9yZWQKPiA+Pj4+PiArb24gdGhl IElQRlMgbmV0d29yayB0aHJvdWdoIHNvIGNhbGxlZCBnYXRld2F5cy4gVGhvc2UgYXJlIGh0dHAo cykKPiA+Pj4+IGVuZHBvaW50cy4KPiA+Pj4+PiArVGhpcyBwcm90b2NvbCB3cmFwcyB0aGUgSVBG UyBuYXRpdmUgcHJvdG9jb2xzIChpcGZzOi8vIGFuZCBpcG5zOi8vKQo+IHRvCj4gPj4+PiBiZSBz ZW5kCj4gPj4+Pj4gK3RvIHN1Y2ggYSBnYXRld2F5LiBVc2VycyBjYW4gKGFuZCBzaG91bGQpIGhv c3QgdGhlaXIgb3duIG5vZGUgd2hpY2gKPiA+Pj4+IG1lYW5zIHRoaXMKPiA+Pj4+PiArcHJvdG9j b2wgd2lsbCB1c2UgeW91ciBsb2NhbCBtYWNoaW5lIGdhdGV3YXkgdG8gYWNjZXNzIGZpbGVzIG9u IHRoZQo+ID4+Pj4gSVBGUyBuZXR3b3JrLgo+ID4+Pj4+ICsKPiA+Pj4+PiArSWYgYSB1c2VyIGRv ZXNuJ3QgaGF2ZSBhIG5vZGUgb2YgdGhlaXIgb3duIHRoZW4gdGhlIHB1YmxpYyBnYXRld2F5Cj4g Pj4+PiBkd2ViLmxpbmsgaXMKPiA+Pj4+PiArdXNlZCBieSBkZWZhdWx0Lgo+ID4+Pj4+ICsKPiA+ Pj4+PiArWW91IGNhbiB1c2UgdGhpcyBwcm90b2NvbCBpbiAyIHdheXMuIFVzaW5nIElQRlM6Cj4g Pj4+Pj4gK0BleGFtcGxlCj4gPj4+Pj4gK2ZmcGxheSBpcGZzOi8vUW1iR3RKZzIzc2todkZtdTlt SmllUFZCeWhmenU1cndvNzRNRWtWRFlBbUY1VAo+ID4+Pj4+ICtAZW5kIGV4YW1wbGUKPiA+Pj4+ PiArCj4gPj4+Pj4gK09yIHRoZSBJUE5TIHByb3RvY29sIChJUE5TIGlzIG11dGFibGUgSVBGUyk6 Cj4gPj4+Pj4gK0BleGFtcGxlCj4gPj4+Pj4gK2ZmcGxheSBpcG5zOi8vUW1iR3RKZzIzc2todkZt dTltSmllUFZCeWhmenU1cndvNzRNRWtWRFlBbUY1VAo+ID4+Pj4+ICtAZW5kIGV4YW1wbGUKPiA+ Pj4+PiArCj4gPj4+Pj4gK1lvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlIGdhdGV3YXkgdG8gYmUgdXNl ZDoKPiA+Pj4+PiArCj4gPj4+Pj4gK0B0YWJsZSBAb3B0aW9uCj4gPj4+Pj4gKwo+ID4+Pj4+ICtA aXRlbSBnYXRld2F5Cj4gPj4+Pj4gK0RlZmluZXMgdGhlIGdhdGV3YXkgdG8gdXNlLiBXaGVuIG5v dGhpbmcgaXMgcHJvdmlkZWQgdGhlIHByb3RvY29sCj4gd2lsbAo+ID4+Pj4gZmlyc3QgdHJ5Cj4g Pj4+Pj4gK3lvdXIgbG9jYWwgZ2F0ZXdheS4gSWYgdGhhdCBmYWlscyBkd2ViLmxpbmsgd2lsbCBi ZSB1c2VkLgo+ID4+Pj4+ICsKPiA+Pj4+PiArQGVuZCB0YWJsZQo+ID4+Pj4+Cj4gPj4+Pj4gIEBj IG1hbiBlbmQgUFJPVE9DT0xTCj4gPj4+Pj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2Vm aWxlIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiA+Pj4+PiBpbmRleCBkNzE4MmQ2YmQ4Li5lMzIz M2ZkN2FjIDEwMDY0NAo+ID4+Pj4+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gPj4+Pj4g KysrIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiA+Pj4+PiBAQCAtNjYwLDYgKzY2MCw4IEBAIE9C SlMtJChDT05GSUdfU1JUUF9QUk9UT0NPTCkgICAgICAgICAgICAgKz0KPiA+Pj4+IHNydHBwcm90 by5vIHNydHAubwo+ID4+Pj4+ICBPQkpTLSQoQ09ORklHX1NVQkZJTEVfUFJPVE9DT0wpICAgICAg ICAgICs9IHN1YmZpbGUubwo+ID4+Pj4+ICBPQkpTLSQoQ09ORklHX1RFRV9QUk9UT0NPTCkgICAg ICAgICAgICAgICs9IHRlZXByb3RvLm8gdGVlX2NvbW1vbi5vCj4gPj4+Pj4gIE9CSlMtJChDT05G SUdfVENQX1BST1RPQ09MKSAgICAgICAgICAgICAgKz0gdGNwLm8KPiA+Pj4+PiArT0JKUy0kKENP TkZJR19JUEZTX1BST1RPQ09MKSAgICAgICAgICAgICArPSBpcGZzZ2F0ZXdheS5vCj4gPj4+Pj4g K09CSlMtJChDT05GSUdfSVBOU19QUk9UT0NPTCkgICAgICAgICAgICAgKz0gaXBmc2dhdGV3YXku bwo+ID4+Pj4+ICBUTFMtT0JKUy0kKENPTkZJR19HTlVUTFMpICAgICAgICAgICAgICAgICs9IHRs c19nbnV0bHMubwo+ID4+Pj4+ICBUTFMtT0JKUy0kKENPTkZJR19MSUJUTFMpICAgICAgICAgICAg ICAgICs9IHRsc19saWJ0bHMubwo+ID4+Pj4+ICBUTFMtT0JKUy0kKENPTkZJR19NQkVEVExTKSAg ICAgICAgICAgICAgICs9IHRsc19tYmVkdGxzLm8KPiA+Pj4+PiBkaWZmIC0tZ2l0IGEvbGliYXZm b3JtYXQvaXBmc2dhdGV3YXkuYyBiL2xpYmF2Zm9ybWF0L2lwZnNnYXRld2F5LmMKPiA+Pj4+PiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4+Pj4+IGluZGV4IDAwMDAwMDAwMDAuLjFhMDM5NTg5YzAK PiA+Pj4+PiAtLS0gL2Rldi9udWxsCj4gPj4+Pj4gKysrIGIvbGliYXZmb3JtYXQvaXBmc2dhdGV3 YXkuYwo+ID4+Pj4+IEBAIC0wLDAgKzEsMzA5IEBACj4gPj4+Pj4gKy8qCj4gPj4+Pj4gKyAqIElQ RlMgYW5kIElQTlMgcHJvdG9jb2wgc3VwcG9ydCB0aHJvdWdoIElQRlMgR2F0ZXdheS4KPiA+Pj4+ PiArICogQ29weXJpZ2h0IChjKSAyMDIyIE1hcmsgR2Fpc2VyCj4gPj4+Pj4gKyAqCj4gPj4+Pj4g KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiA+Pj4+PiArICoKPiA+Pj4+PiArICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ ID4+Pj4+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCj4gPj4+Pj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ID4+Pj4+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKPiB2ZXJzaW9uLgo+ID4+ Pj4+ICsgKgo+ID4+Pj4+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+Pj4+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+Pj4+PiArICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKPiA+Pj4+PiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KPiA+Pj4+PiArICoKPiA+Pj4+PiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4+Pj4+ICsgKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4g Pj4+Pj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEKPiA+Pj4+IDAyMTEwLTEzMDEgVVNBCj4gPj4+Pj4gKyAqLwo+ID4+Pj4+ ICsKPiA+Pj4+PiArI2luY2x1ZGUgImF2Zm9ybWF0LmgiCj4gPj4+Pj4gKyNpbmNsdWRlICJsaWJh dnV0aWwvYXZhc3NlcnQuaCIKPiA+Pj4+Cj4gPj4+PiBVbnVzZWQuCj4gPj4+Pgo+ID4+Pj4+ICsj aW5jbHVkZSAibGliYXZ1dGlsL2F2c3RyaW5nLmgiCj4gPj4+Pj4gKyNpbmNsdWRlICJsaWJhdnV0 aWwvaW50ZXJuYWwuaCIKPiA+Pj4+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiA+Pj4+ PiArI2luY2x1ZGUgImxpYmF2dXRpbC90cmVlLmgiCj4gPj4+Pgo+ID4+Pj4gPwo+ID4+Pj4KPiA+ Pj4KPiA+Pj4gVGhpcyB3aG9sZSBpbmNsdWRlIHBhcnQgY2FuIGJlIGNsZWFuZWQgdXAgbXVjaCBt b3JlLgo+ID4+PiBKdXN0IGhhdmluZyB0aGVzZToKPiA+Pj4gI2luY2x1ZGUgImxpYmF2dXRpbC9h dnN0cmluZy5oIgo+ID4+PiAjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+ID4+PiAjaW5jbHVk ZSAidXJsLmgiCj4gPj4+ICNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ID4+Pgo+ID4+PiBpcyBlbm91 Z2guCj4gPj4+Cj4gPj4+Cj4gPj4+Pj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ID4+Pj4+ICsjaWYg SEFWRV9JT19ICj4gPj4+Pj4gKyNpbmNsdWRlIDxpby5oPgo+ID4+Pj4+ICsjZW5kaWYKPiA+Pj4+ PiArI2lmIEhBVkVfVU5JU1REX0gKPiA+Pj4+PiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ID4+Pj4+ ICsjZW5kaWYKPiA+Pj4+PiArI2luY2x1ZGUgIm9zX3N1cHBvcnQuaCIKPiA+Pj4+PiArI2luY2x1 ZGUgInVybC5oIgo+ID4+Pj4+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gPj4+Pj4gKyNpbmNsdWRl IDxzeXMvc3RhdC5oPgo+ID4+Pj4+ICsKPiA+Pj4+PiArdHlwZWRlZiBzdHJ1Y3QgSVBGU0dhdGV3 YXlDb250ZXh0IHsKPiA+Pj4+PiArICAgIEFWQ2xhc3MgKmNsYXNzOwo+ID4+Pj4+ICsgICAgVVJM Q29udGV4dCAqaW5uZXI7Cj4gPj4+Pj4gKyAgICAvLyBJcyBmaWxsZWQgYnkgdGhlIC1nYXRld2F5 IGFyZ3VtZW50IGFuZCBub3QgY2hhbmdlZCBhZnRlci4KPiA+Pj4+PiArICAgIGNoYXIgKmdhdGV3 YXk7Cj4gPj4+Pj4gKyAgICAvLyBJZiB0aGUgYWJvdmUgZ2F0ZXdheSBpcyBub24gbnVsbCwgaXQg d2lsbCBiZSBjb3BpZWQgaW50byB0aGlzCj4gPj4+PiBidWZmZXIuCj4gPj4+Pj4gKyAgICAvLyBF bHNlIHRoaXMgYnVmZmVyIHdpbGwgY29udGFpbiB0aGUgYXV0byBkZXRlY3RlZCBnYXRld2F5Lgo+ ID4+Pj4+ICsgICAgLy8gSW4gZWl0aGVyIGNhc2UsIHRoZSBnYXRld2F5IHRvIHVzZSB3aWxsIGJl IGluIHRoaXMgYnVmZmVyLgo+ID4+Pj4+ICsgICAgY2hhciBnYXRld2F5X2J1ZmZlcltQQVRIX01B WF07Cj4gPj4+Pj4gK30gSVBGU0dhdGV3YXlDb250ZXh0Owo+ID4+Pj4+ICsKPiA+Pj4+PiArLy8g QSBiZXN0LWVmZm9ydCB3YXkgdG8gZmluZCB0aGUgSVBGUyBnYXRld2F5Lgo+ID4+Pj4+ICsvLyBP bmx5IHRoZSBtb3N0IGFwcHJvcGlhdGUgZ2F0ZXdheSBpcyBzZXQuIEl0J3Mgbm90IGFjdHVhbGx5 Cj4gPj4gcmVxdWVzdGVkCj4gPj4+Pj4gKy8vIChodHRwIGNhbGwpIHRvIHByZXZlbnQgYSBwb3Rl bnRpYWwgc2xvd2Rvd24gaW4gc3RhcnR1cC4gQQo+IHBvdGVudGlhbAo+ID4+Pj4gdGltZW91dAo+ ID4+Pj4+ICsvLyBpcyBoYW5kbGVkIGJ5IHRoZSBIVFRQIHByb3RvY29sLgo+ID4+Pj4+ICtzdGF0 aWMgaW50IHBvcHVsYXRlX2lwZnNfZ2F0ZXdheShVUkxDb250ZXh0ICpoKQo+ID4+Pj4+ICt7Cj4g Pj4+Pj4gKyAgICBJUEZTR2F0ZXdheUNvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7Cj4gPj4+Pj4g KyAgICBjaGFyIGlwZnNfZnVsbF9kYXRhX2ZvbGRlcltQQVRIX01BWF07Cj4gPj4+Pj4gKyAgICBj aGFyIGlwZnNfZ2F0ZXdheV9maWxlW1BBVEhfTUFYXTsKPiA+Pj4+PiArICAgIHN0cnVjdCBzdGF0 IHN0Owo+ID4+Pj4+ICsgICAgaW50IHN0YXRfcmV0ID0gMDsKPiA+Pj4+PiArICAgIGludCByZXQg PSBBVkVSUk9SKEVJTlZBTCk7Cj4gPj4+Pj4gKyAgICBGSUxFICpnYXRld2F5X2ZpbGUgPSBOVUxM Owo+ID4+Pj4+ICsKPiA+Pj4+PiArICAgIC8vIFRlc3QgJElQRlNfR0FURVdBWS4KPiA+Pj4+PiAr ICAgIGlmIChnZXRlbnYoIklQRlNfR0FURVdBWSIpICE9IE5VTEwpIHsKPiA+Pj4+PiArICAgICAg ICBpZiAoc25wcmludGYoYy0+Z2F0ZXdheV9idWZmZXIsIHNpemVvZihjLT5nYXRld2F5X2J1ZmZl ciksCj4gPj4gIiVzIiwKPiA+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgZ2V0ZW52KCJJUEZT X0dBVEVXQVkiKSkgPj0KPiA+Pj4+IHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikpIHsKPiA+Pj4+ PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIElQRlNfR0FURVdB WSBlbnZpcm9ubWVudAo+ID4+Pj4gdmFyaWFibGUgZXhjZWVkcyB0aGUgbWF4aW11bSBsZW5ndGgu IFdlIGFsbG93IGEgbWF4IG9mICV6dQo+ID4+IGNoYXJhY3RlcnNcbiIsCj4gPj4+PiBzaXplb2Yo Yy0+Z2F0ZXdheV9idWZmZXIpKTsKPiA+Pj4+PiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihF SU5WQUwpOwo+ID4+Pj4+ICsgICAgICAgICAgICBnb3RvIGVycjsKPiA+Pj4+PiArICAgICAgICB9 Cj4gPj4+Pj4gKwo+ID4+Pj4+ICsgICAgICAgIHJldCA9IDE7Cj4gPj4+Pj4gKyAgICAgICAgZ290 byBlcnI7Cj4gPj4+Pj4gKyAgICB9IGVsc2UKPiA+Pj4+PiArICAgICAgICBhdl9sb2coaCwgQVZf TE9HX0RFQlVHLCAiJElQRlNfR0FURVdBWSBpcyBlbXB0eS5cbiIpOwo+ID4+Pj4+ICsKPiA+Pj4+ PiArICAgIC8vIFdlIG5lZWQgdG8ga25vdyB0aGUgSVBGUyBmb2xkZXIgdG8gLSBldmVudHVhbGx5 IC0gcmVhZCB0aGUKPiA+Pj4+IGNvbnRlbnRzIG9mCj4gPj4+Pj4gKyAgICAvLyB0aGUgImdhdGV3 YXkiIGZpbGUgd2hpY2ggd291bGQgdGVsbCB1cyB0aGUgZ2F0ZXdheSB0byB1c2UuCj4gPj4+Pj4g KyAgICBpZiAoZ2V0ZW52KCJJUEZTX1BBVEgiKSA9PSBOVUxMKSB7Cj4gPj4+Pj4gKyAgICAgICAg YXZfbG9nKGgsIEFWX0xPR19ERUJVRywgIiRJUEZTX1BBVEggaXMgZW1wdHkuXG4iKTsKPiA+Pj4+ PiArCj4gPj4+Pj4gKyAgICAgICAgLy8gVHJ5IHZpYSB0aGUgaG9tZSBmb2xkZXIuCj4gPj4+Pj4g KyAgICAgICAgaWYgKGdldGVudigiSE9NRSIpID09IE5VTEwpIHsKPiA+Pj4+PiArICAgICAgICAg ICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiJEhPTUUgYXBwZWFycyB0byBiZQo+IGVtcHR5 LlxuIik7Cj4gPj4+Pj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiA+Pj4+ PiArICAgICAgICAgICAgZ290byBlcnI7Cj4gPj4+Pj4gKyAgICAgICAgfQo+ID4+Pj4+ICsKPiA+ Pj4+PiArICAgICAgICAvLyBWZXJpZnkgdGhlIGNvbXBvc2VkIHBhdGggZml0cy4KPiA+Pj4+PiAr ICAgICAgICBpZiAoc25wcmludGYoaXBmc19mdWxsX2RhdGFfZm9sZGVyLAo+ID4+Pj4gc2l6ZW9m KGlwZnNfZnVsbF9kYXRhX2ZvbGRlciksCj4gPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICIl cy8uaXBmcy8iLCBnZXRlbnYoIkhPTUUiKSkgPj0KPiA+Pj4+IHNpemVvZihpcGZzX2Z1bGxfZGF0 YV9mb2xkZXIpKSB7Cj4gPj4+Pj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklO RywgIlRoZSBJUEZTIGRhdGEgcGF0aCBleGNlZWRzCj4gdGhlCj4gPj4+PiBtYXggcGF0aCBsZW5n dGggKCV6dSlcbiIsIHNpemVvZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpKTsKPiA+Pj4+PiArICAg ICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ID4+Pj4+ICsgICAgICAgICAgICBnb3Rv IGVycjsKPiA+Pj4+PiArICAgICAgICB9Cj4gPj4+Pj4gKwo+ID4+Pj4+ICsgICAgICAgIC8vIFN0 YXQgdGhlIGZvbGRlci4KPiA+Pj4+PiArICAgICAgICAvLyBJdCBzaG91bGQgZXhpc3QgaW4gYSBk ZWZhdWx0IElQRlMgc2V0dXAgd2hlbiBydW4gYXMgbG9jYWwKPiA+Pj4+IHVzZXIuCj4gPj4+Pj4g KyNpZm5kZWYgX1dJTjMyCj4gPj4+Pj4gKyAgICAgICAgc3RhdF9yZXQgPSBzdGF0KGlwZnNfZnVs bF9kYXRhX2ZvbGRlciwgJnN0KTsKPiA+Pj4+PiArI2Vsc2UKPiA+Pj4+PiArICAgICAgICBzdGF0 X3JldCA9IHdpbjMyX3N0YXQoaXBmc19mdWxsX2RhdGFfZm9sZGVyLCAmc3QpOwo+ID4+Pj4+ICsj ZW5kaWYKPiA+Pj4+PiArICAgICAgICBpZiAoc3RhdF9yZXQgPCAwKSB7Cj4gPj4+Pj4gKyAgICAg ICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIlVuYWJsZSB0byBmaW5kIElQRlMgZm9sZGVy LiBXZQo+ID4+Pj4gdHJpZWQ6XG4iKTsKPiA+Pj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFW X0xPR19JTkZPLCAiLSAkSVBGU19QQVRILCB3aGljaCB3YXMKPiA+PiBlbXB0eS5cbiIpOwo+ID4+ Pj4+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0lORk8sICItICRIT01FLy5pcGZzIChm dWxsIHVyaTogJXMpCj4gd2hpY2gKPiA+Pj4+IGRvZXNuJ3QgZXhpc3QuXG4iLCBpcGZzX2Z1bGxf ZGF0YV9mb2xkZXIpOwo+ID4+Pj4+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT0VOVCk7 Cj4gPj4+Pj4gKyAgICAgICAgICAgIGdvdG8gZXJyOwo+ID4+Pj4+ICsgICAgICAgIH0KPiA+Pj4+ PiArICAgIH0gZWxzZSB7Cj4gPj4+Pj4gKyAgICAgICAgaWYgKHNucHJpbnRmKGlwZnNfZnVsbF9k YXRhX2ZvbGRlciwKPiA+Pj4+IHNpemVvZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpLCAiJXMiLAo+ ID4+Pj4+ICsgICAgICAgICAgICAgICAgIGdldGVudigiSVBGU19QQVRIIikpID49Cj4gPj4gc2l6 ZW9mKGlwZnNfZnVsbF9kYXRhX2ZvbGRlcikpCj4gPj4+PiB7Cj4gPj4+Pj4gKyAgICAgICAgICAg IGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlRoZSBJUEZTX1BBVEggZW52aXJvbm1lbnQKPiA+ Pj4+IHZhcmlhYmxlIGV4Y2VlZHMgdGhlIG1heGltdW0gbGVuZ3RoLiBXZSBhbGxvdyBhIG1heCBv ZiAlenUKPiA+PiBjaGFyYWN0ZXJzXG4iLAo+ID4+Pj4gc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVy KSk7Cj4gPj4+Pj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiA+Pj4+PiAr ICAgICAgICAgICAgZ290byBlcnI7Cj4gPj4+Pj4gKyAgICAgICAgfQo+ID4+Pj4+ICsKPiA+Pj4+ PiArICAgIH0KPiA+Pj4+PiArCj4gPj4+Pj4gKyAgICAvLyBDb3B5IHRoZSBmdWxseSBjb21wb3Nl ZCBnYXRld2F5IHBhdGggaW50byBpcGZzX2dhdGV3YXlfZmlsZS4KPiA+Pj4+PiArICAgIGlmIChz bnByaW50ZihpcGZzX2dhdGV3YXlfZmlsZSwgc2l6ZW9mKGlwZnNfZ2F0ZXdheV9maWxlKSwKPiA+ Pj4+ICIlc2dhdGV3YXkiLAo+ID4+Pj4+ICsgICAgICAgICAgICAgICAgIGlwZnNfZnVsbF9kYXRh X2ZvbGRlcikgPj0KPiBzaXplb2YoaXBmc19nYXRld2F5X2ZpbGUpKQo+ID4+IHsKPiA+Pj4+PiAr ICAgICAgICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJUaGUgSVBGUyBnYXRld2F5IGZpbGUg cGF0aAo+IGV4Y2VlZHMKPiA+Pj4+IHRoZSBtYXggcGF0aCBsZW5ndGggKCV6dSlcbiIsIHNpemVv ZihpcGZzX2dhdGV3YXlfZmlsZSkpOwo+ID4+Pj4+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRU5P RU5UKTsKPiA+Pj4+PiArICAgICAgICBnb3RvIGVycjsKPiA+Pj4+PiArICAgIH0KPiA+Pj4+PiAr Cj4gPj4+Pj4gKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBnYXRld2F5IGZpbGUuCj4g Pj4+Pj4gKyAgICBnYXRld2F5X2ZpbGUgPSBhdl9mb3Blbl91dGY4KGlwZnNfZ2F0ZXdheV9maWxl LCAiciIpOwo+ID4+Pj4+ICsgICAgaWYgKCFnYXRld2F5X2ZpbGUpIHsKPiA+Pj4+PiArICAgICAg ICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJUaGUgSVBGUyBnYXRld2F5IGZpbGUgKGZ1bGwg dXJpOgo+ID4+ICVzKQo+ID4+Pj4gZG9lc24ndCBleGlzdC4gSXMgdGhlIGdhdGV3YXkgZW5hYmxl ZD9cbiIsIGlwZnNfZ2F0ZXdheV9maWxlKTsKPiA+Pj4+PiArICAgICAgICByZXQgPSBBVkVSUk9S KEVOT0VOVCk7Cj4gPj4+Pj4gKyAgICAgICAgZ290byBlcnI7Cj4gPj4+Pj4gKyAgICB9Cj4gPj4+ Pj4gKwo+ID4+Pj4+ICsgICAgLy8gUmVhZCBhIHNpbmdsZSBsaW5lIChmZ2V0cyBzdG9wcyBhdCBu ZXcgbGluZSBtYXJrKS4KPiA+Pj4+PiArICAgIGZnZXRzKGMtPmdhdGV3YXlfYnVmZmVyLCBzaXpl b2YoYy0+Z2F0ZXdheV9idWZmZXIpIC0gMSwKPiA+Pj4+IGdhdGV3YXlfZmlsZSk7Cj4gPj4+Pj4g Kwo+ID4+Pj4+ICsgICAgLy8gUmVwbGFjZSB0aGUgbGFzdCBjaGFyIHdpdGggXDAKPiA+Pj4+PiAr ICAgIGMtPmdhdGV3YXlfYnVmZmVyW3NpemVvZihjLT5nYXRld2F5X2J1ZmZlcikgLSAxXSA9IDA7 Cj4KPiBCdHc6IGZnZXRzIG5vcm1hbGx5IHplcm8tdGVybWluYXRlcyB0aGUgYnVmZmVyIChpLmUu IGl0IHJlYWRzIGF0IG1vc3QKPiAoc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSAtIDEpIC0gMSBj aGFyYWN0ZXJzIGZyb20gdGhlIHN0cmVhbSBhbmQgYWRkcwo+IGEgXDAuIEJ1dCBvbiBhIHJlYWQg ZXJyb3IgaXQgZG9lc24ndCBkbyB0aGlzLCBpbnN0ZWFkIHRoZSBjb250ZW50cyBvZgo+IHRoZSBi dWZmZXIgYXJlIGluZGV0ZXJtaW5hdGUgYW5kIHNvIHNob3VsZCBub3QgYmUgdXNlZC4gQWRkaW5n IGEgemVybyBhdAo+IHRoZSB2ZXJ5IGVuZCBvZiBnYXRld2F5X2J1ZmZlciBkb2VzIG5vdCBoZWxw IHRvIGVuZm9yY2UgdGhpcy4KCgo+IGZnZXRzIHJldHVybnMgTlVMTCBvbiByZWFkIGVycm9yIGFu ZCBpZiBub3RoaW5nIGNvdWxkIGJlIHJlYWQgZHVlIHRvCj4gaW1tZWRpYXRlIEVPRjsgc28geW91 IHNob3VsZCBjaGVjayBmb3IgdGhhdC4KPiAoQnR3OiBBIHByb3RvY29sJ3MgY29udGV4dCBpcyB6 ZXJvZWQgaW5pdGlhbGx5LCBzbwo+IGMtPmdhdGV3YXlfYnVmZmVyW3NpemVvZihjLT5nYXRld2F5 X2J1ZmZlcikgLSAxXSBpcyBhbHJlYWR5IHplcm8sCj4gYmVjYXVzZSBubyBvbmUgZXZlciB3cm90 ZSBhbnl0aGluZyBlbHNlIHRoZXJlLikKPgoKTmljZSBvbmUhIE5vYm9keSBjYXVnaHQgdGhhdCBi ZWZvcmUuClNvIGNoZWNraW5nIG9uIE5VTEwgZm9yIGZnZXRzIGFuZCByZW1vdmluZyB0aGUgbGlu ZSB0byBhZGQgYSAwIGF0IHRoZSBlbmQKaXMgdGhlIGFwcHJvcHJpYXRlIGZpeCBoZXJlIEkgYXNz dW1lLgoKQ2hhbmdlZCB0byB3aGF0IEkgYXNzdW1lZC4gUGxlYXNlIGNvcnJlY3QgbWUgaWYgSSdt IHdyb25nLgoKCj4KPiA+Pj4+PiArCj4gPj4+Pj4gKyAgICAvLyBSZXBsYWNlIGZpcnN0IG9jY3Vy ZW5jZSBvZiBlbmQgb2YgbGluZSB3aXRoIFwwCj4gPj4+Pj4gKyAgICBjLT5nYXRld2F5X2J1ZmZl cltzdHJjc3BuKGMtPmdhdGV3YXlfYnVmZmVyLCAiXHIiKV0gPSAwOwo+ID4+Pj4+ICsgICAgYy0+ Z2F0ZXdheV9idWZmZXJbc3RyY3NwbihjLT5nYXRld2F5X2J1ZmZlciwgIlxuIildID0gMDsKPiA+ Pj4+Cj4gPj4+PiBJZiB0aGUgYnVmZmVyIGNvbnRhaW5zIGJvdGggXHIgYW5kIFxuIGFuZCB0aGUg Zmlyc3QgXG4gcHJlY2VkZXMgdGhlCj4gPj4+PiBmaXJzdCBcciwgdGhlbiB0aGUgYWJvdmUgemVy b2VzIGJvdGggdGhlIGZpcnN0IFxyIGFuZCB0aGUgZmlyc3QgXG4uIElmCj4gPj4+PiBpdCBpcyBl bm91Z2ggdG8gb25seSB6ZXJvIHRoZSBmaXJzdCBuZXdsaW5lLCB0aGVuIHRoaXMgY2FuIGJlCj4g c2ltcGxpZmllZAo+ID4+Pj4gdG8gImMtPmdhdGV3YXlfYnVmZmVyW3N0cmNzcG4oYy0+Z2F0ZXdh eV9idWZmZXIsICJcclxuIildID0gMDsiLgo+ID4+Pj4KPiA+Pj4KPiA+Pj4gSXQgdXNlZCB0byBi ZSBpbiB5b3VyIHN1Z2dlc3RlZCBzaW1wbGlmaWVkIGFwcHJvYWNoLgo+ID4+PiBJdCB3YXMgdGhl biBzdWdnZXN0ZWQgdG8gc3BsaXQgaXQgYmVjYXVzZSBvZiBuZXcgbGluZSBkaWZmZXJlbmNlcwo+ ID4+PiBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiBUaGlzIHdhcyBzdXBwb3NlZCB0byBjYXRjaCAi ZXZlcnl0aGluZyIuCj4gPj4+Cj4gPj4+IEkgcHJlZmVyIHRvIGtlZXAgdGhpcyBhcy1pcyBub3cu Cj4gPj4+Cj4gPj4KPiA+PiBJcyBpdCBpbnRlbmRlZCB0byB1c2Ugd2hhdCBpcyBiZXR3ZWVuIHRo ZSBmaXJzdCBcbiBhbmQgdGhlIGZpcnN0IFxyCj4gPj4gbGF0ZXJvbiBhbHRob3VnaCB0aGlzIGRh dGEgd2lsbCBiZSBhZnRlciB0aGUgJ1wwJyBhZnRlciB0aGlzPyBUaGF0IHdvdWxkCj4gPj4gYmUg dmVyeSB3ZWlyZC4KPiA+Pgo+ID4KPiA+IFlvdSBoYXZlIHRvIGVsYWJvcmF0ZSBvbiB0aGF0IGFz IHRoYXQgc291bmRzIHJlYWxseSB3cm9uZyB0byBtZS4KPiA+Cj4KPiBjLT5nYXRld2F5X2J1ZmZl cltzdHJjc3BuKGMtPmdhdGV3YXlfYnVmZmVyLCAiXHJcbiIpXSA9IDA7Cj4gb3ZlcndyaXRlcyB0 aGUgZmlyc3QgXHIgb3IgXG4gKHdoaWNoZXZlciBpcyBmaXJzdCkgd2l0aCAnXDAnIChpZiBhbnk7 Cj4gb3RoZXJ3aXNlIGl0IG92ZXJ3cml0ZXMgdGhlIHRlcm1pbmF0aW5nIFwwIHdpdGggXDAuCj4K PiBjLT5nYXRld2F5X2J1ZmZlcltzdHJjc3BuKGMtPmdhdGV3YXlfYnVmZmVyLCAiXHIiKV0gPSAw Owo+IGMtPmdhdGV3YXlfYnVmZmVyW3N0cmNzcG4oYy0+Z2F0ZXdheV9idWZmZXIsICJcbiIpXSA9 IDA7Cj4gYWxzbyBkb2VzIHRoaXMsIGJ1dCBpbiBjYXNlIHRoYXQgdGhlIHN0cmluZyBvcmlnaW5h bGx5IGNvbnRhaW5lZCBib3RoIGEKPiBcciBhbmQgYSBcbiB3aXRoIHRoZSBmaXJzdCBcbiBwcmVj ZWRpbmcgdGhlIGZpcnN0IFxyIGl0IHdvdWxkIGFsc28gemVybwo+IHRoZSBmaXJzdCBccjsgdGhp cyBwb3NpdGlvbiBpcyBhZnRlciB0aGUgZmlyc3QgdGVybWluYXRpbmcgXDAgKHRob3NlIGF0Cj4g dGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBmaXJzdCBcbiB3YXMpLCBzbyBpdCBhcHBlYXJlZCB0byBt ZSB0aGF0IHlvdQo+IGludGVuZGVkIHRvIHVzZSB3aGF0IGlzIGFmdGVyIHRoZSBmaXJzdCBcMC4g QmVjYXVzZSB0aGF0IGlzIHRoZSBvbmx5Cj4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBhcHByb2Fj aCB3aXRoIHR3byBjYWxscyB0byBzdHJjc3BuIGFuZCB0aGUgb25lCj4gd2l0aCBvbmUgY2FsbCB0 byBzdHJjc3BuLgo+Cj4gQnV0IHRoZW4gSSByZWFkIHRoYXQgdGhpcyBoYXMgYmVlbiBzdWdnZXN0 ZWQgdG8geW91IGFuZCBmb3VuZCB0aGUgbWFpbAo+IChodHRwczovL2ZmbXBlZy5vcmcvcGlwZXJt YWlsL2ZmbXBlZy1kZXZlbC8yMDIyLUZlYnJ1YXJ5LzI5MjU5MC5odG1sKQo+IHRoaXMgcmVmZXJy ZWQgdG8uIFRoZXJlIHNlZW1zIHRvIGJlIGEgbWlzdW5kZXJzdGFuZGluZyBpbiB0aGUgc2VtYW50 aWNzCj4gb2Ygc3RyY3NwbiAobW9zdCBsaWtlbHkgYSBjb25mdXNpb24gd2l0aCBzdHJzdHIpOgo+ IHN0cmNzcG4oYy0+Z2F0ZXdheV9idWZmZXIsICJcclxuIikgd29ya3Mgd2l0aCBzaW5nbGUgXHIg YW5kIHNpbmdsZSBcbiwKPiB0aGVyZSBuZWVkIG5vdCBiZSBhIHNpbmdsZSAiXHJcbiIgc3Vic3Ry aW5nLiBCb3RoIG1ldGhvZHMgd291bGQgcHJvZHVjZQo+IHN0cmluZ3MgdGhhdCBjb21wYXJlIGVx dWFsIGFjY29yZGluZyB0byBzdHJjbXAoKS4KPgo+ClRoYW5rIHlvdSBmb3IgeW91ciBlbGFib3Jh dGUgZXhwbGFuYXRpb24gaGVyZSEKQnV0IG5vdyBJJ20gbm90IHN1cmUgd2hhdCB0aGUgcmVzb2x1 dGlvbiAtIGlmIGFueSAtIHNob3VsZCBiZT8KCgo+ID4gSWYgSSdtIGNvcnJlY3QgYSBmaWxlIGRv ZXNuJ3Qgc3RhcnQgd2l0aCBlaXRoZXIgXHIgb3IgXG4uIFVubGVzcyB5b3UgaGF2ZQo+ID4gaW50 ZW50aW9uYWwgbGluZSBicmVha3MuCj4gPiBJdCBlbmRzIHdpdGggdGhvc2UsIG5vdCBzdGFydHMu IEknbSBqdXN0IGdvaW5nIHRvIGlnbm9yZSBcciBmb3Igbm93IGZvcgo+ID4gYnJldml0eS4KPiA+ Cj4gPiBTbyBpZiB5b3UgaGF2ZToKPiA+IFxuPHlvdXIgZ2F0ZXdheT5cbgo+ID4KPiA+IFdvdWxk IGJlIHRyYW5zbGF0ZWQgdG86Cj4gPiBcMDx5b3VyIGdhdGV3YXk+XG4KPiA+Cj4gPiBUaGVuIGlu ZGVlZCB5b3Ugd29uJ3QgZ2V0IGEgZ2F0ZXdheSBiZWNhdXNlIGl0J3MgaW50ZW5kZWQgdGhhdCB5 b3VyIGZpcnN0Cj4gPiBsaW5lIGlzIHRoYXQgZ2F0ZXdheS4KPiA+Cj4gPiBJdCBtdXN0IGJlIGlu IHRoaXMgZm9ybWF0Ogo+ID4gPHlvdXIgZ2F0ZXdheT5cbgo+ID4KPiA+IG9yIHdpdGhvdXQgYSBu ZXdsaW5lCj4gPiA8eW91ciBnYXRld2F5Pgo+ID4KPiA+IFRoZXJlIGlzIG5vIGJsYW5rIGxpbmUg dHJpbW1pbmcgdG8gZml4IHVzZXIgc2NyZXd1cHMuCj4gPiBVc2VycyBhcmUgbm90IGludGVuZGVk IHRvIHRvdWNoIHRoYXQgZmlsZSBhbnlob3cuIEl0J3MgYXV0by1nZW5lcmF0ZWQgYnkKPiA+IElQ RlMgYW5kIHJlbW92ZWQgb25jZSBpdCBzaHV0cyBkb3duLgo+ID4KPiA+Cj4gPj4+Cj4gPj4+Pj4g Kwo+ID4+Pj4+ICsgICAgLy8gSWYgc3RybGVuIGZpbmRzIGFueXRoaW5nIGxvbmdlciB0aGVuIDAg Y2hhcmFjdGVycyB0aGVuIHdlCj4gaGF2ZQo+ID4+IGEKPiA+Pj4+PiArICAgIC8vIHBvdGVudGlh bCBnYXRld2F5IHVybC4KPiA+Pj4+PiArICAgIGlmIChzdHJsZW4oYy0+Z2F0ZXdheV9idWZmZXIp IDwgMSkgewo+ID4+Pj4KPiA+Pj4+IGlmICgqYy0+Z2F0ZXdheV9idWZmZXIgPT0gJ1wwJykKPiA+ Pj4+Cj4gPj4+Cj4gPj4+IElzIHRoYXQgYSBzdHlsZSBkaWZmZXJlbmNlIG9yIGFuIGFjdHVhbCBi ZWhhdmlvciBkaWZmZXJlbmNlPwo+ID4+Pgo+ID4+Cj4gPj4gVGhlIGZvcm1lciB3b3VsZCBjYWxs IHN0cmxlbiB0byBjaGVjayB3aGV0aGVyIGEgc3RyaW5nIGlzIGVtcHR5ICh1bmxlc3MKPiA+PiB0 aGUgY29tcGlsZXIgb3B0aW1pemVzIGl0IGF3YXkpLiBObyBhY3R1YWwgYmVoYXZpb3VyIGRpZmZl cmVuY2UgZXhpc3RzLgo+ID4+IEJ1dCBpdCBpcyBuZXZlcnRoZWxlc3MgbW9yZSB0aGFuIGEgc3R5 bGUgZGlmZmVyZW5jZS4KPiA+Pgo+ID4KPiA+IEZpeGVkIGxvY2FsbHkuCj4gPgo+ID4+Cj4gPj4+ Cj4gPj4+Pgo+ID4+Pj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlRoZSBJ UEZTIGdhdGV3YXkgZmlsZSAoZnVsbCB1cmk6Cj4gPj4gJXMpCj4gPj4+PiBhcHBlYXJzIHRvIGJl IGVtcHR5LiBJcyB0aGUgZ2F0ZXdheSBzdGFydGVkP1xuIiwgaXBmc19nYXRld2F5X2ZpbGUpOwo+ ID4+Pj4+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRUlMU0VRKTsKPiA+Pj4+PiArICAgICAgICBn b3RvIGVycjsKPiA+Pj4+PiArICAgIH0gZWxzZSB7Cj4gPj4+Pj4gKyAgICAgICAgLy8gV2UncmUg ZG9uZSwgdGhlIGMtPmdhdGV3YXlfYnVmZmVyIGhhcyBzb21ldGhpbmcgdGhhdAo+IGxvb2tzCj4g Pj4+PiB2YWxpZC4KPiA+Pj4+PiArICAgICAgICByZXQgPSAxOwo+ID4+Pj4+ICsgICAgICAgIGdv dG8gZXJyOwo+ID4+Pj4+ICsgICAgfQo+ID4+Pj4+ICsKPiA+Pj4+PiArZXJyOgo+ID4+Pj4+ICsg ICAgaWYgKGdhdGV3YXlfZmlsZSkKPiA+Pj4+PiArICAgICAgICBmY2xvc2UoZ2F0ZXdheV9maWxl KTsKPiA+Pj4+PiArCj4gPj4+Pj4gKyAgICByZXR1cm4gcmV0Owo+ID4+Pj4+ICt9Cj4gPj4+Pj4g Kwo+ID4+Pj4+ICtzdGF0aWMgaW50IHRyYW5zbGF0ZV9pcGZzX3RvX2h0dHAoVVJMQ29udGV4dCAq aCwgY29uc3QgY2hhciAqdXJpLAo+ID4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGZsYWdzLCBBVkRpY3Rpb25hcnkgKipvcHRpb25zKQo+ID4+Pj4+ICt7Cj4gPj4+ Pj4gKyAgICBjb25zdCBjaGFyICppcGZzX2NpZDsKPiA+Pj4+PiArICAgIGNoYXIgKmZ1bGx1cmkg PSBOVUxMOwo+ID4+Pj4+ICsgICAgaW50IHJldDsKPiA+Pj4+PiArICAgIElQRlNHYXRld2F5Q29u dGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPiA+Pj4+PiArCj4gPj4+Pj4gKyAgICAvLyBUZXN0IGZv ciBpcGZzOi8vLCBpcGZzOiwgaXBuczovLyBhbmQgaXBuczouIFRoaXMgcHJlZml4IGlzCj4gPj4+ PiBzdHJpcHBlZCBmcm9tCj4gPj4+Pj4gKyAgICAvLyB0aGUgc3RyaW5nIGxlYXZpbmcganVzdCB0 aGUgQ0lEIGluIGlwZnNfY2lkLgo+ID4+Pj4+ICsgICAgaW50IGlzX2lwZnMgPSBhdl9zdHJpc3Rh cnQodXJpLCAiaXBmczovLyIsICZpcGZzX2NpZCk7Cj4gPj4+Pj4gKyAgICBpbnQgaXNfaXBucyA9 IGF2X3N0cmlzdGFydCh1cmksICJpcG5zOi8vIiwgJmlwZnNfY2lkKTsKPiA+Pj4+PiArCj4gPj4+ Pj4gKyAgICAvLyBXZSBtdXN0IGhhdmUgZWl0aGVyIGlwbnMgb3IgaXBmcy4KPiA+Pj4+PiArICAg IGlmICghaXNfaXBmcyAmJiAhaXNfaXBucykgewo+ID4+Pj4+ICsgICAgICAgIHJldCA9IEFWRVJS T1IoRUlOVkFMKTsKPiA+Pj4+PiArICAgICAgICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJV bnN1cHBvcnRlZCB1cmwgJXNcbiIsIHVyaSk7Cj4gPj4+Pj4gKyAgICAgICAgZ290byBlcnI7Cj4g Pj4+Pj4gKyAgICB9Cj4gPj4+Pj4gKwo+ID4+Pj4+ICsgICAgLy8gSWYgdGhlIENJRCBoYXMgYSBs ZW5ndGggZ3JlYXRlciB0aGVuIDAgdGhlbiB3ZSBhc3N1bWUgd2UKPiBoYXZlIGEKPiA+Pj4+IHBy b3BlciB3b3JraW5nIG9uZS4KPiA+Pj4+PiArICAgIC8vIEl0IGNvdWxkIHN0aWxsIGJlIHdyb25n IGJ1dCBpbiB0aGF0IGNhc2UgdGhlIGdhdGV3YXkgc2hvdWxkCj4gPj4gc2F2ZQo+ID4+Pj4gdXMg YW5kCj4gPj4+Pj4gKyAgICAvLyBydXR1cm4gYSA0MDMgZXJyb3IuIFRoZSBodHRwIHByb3RvY29s IGhhbmRsZXMgdGhpcy4KPiA+Pj4+PiArICAgIGlmIChzdHJsZW4oaXBmc19jaWQpIDwgMSkgewo+ ID4+Pj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIkEgQ0lEIG11c3QgYmUg cHJvdmlkZWQuXG4iKTsKPiA+Pj4+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTFNFUSk7Cj4g Pj4+Pj4gKyAgICAgICAgZ290byBlcnI7Cj4gPj4+Pj4gKyAgICB9Cj4gPj4+Pj4gKwo+ID4+Pj4+ ICsgICAgLy8gUG9wdWxhdGUgYy0+Z2F0ZXdheV9idWZmZXIgd2l0aCB3aGF0ZXZlciBpcyBpbiBj LT5nYXRld2F5Cj4gPj4+Pj4gKyAgICBpZiAoYy0+Z2F0ZXdheSAhPSBOVUxMKSB7Cj4gPj4+Pj4g KyAgICAgICAgaWYgKHNucHJpbnRmKGMtPmdhdGV3YXlfYnVmZmVyLCBzaXplb2YoYy0+Z2F0ZXdh eV9idWZmZXIpLAo+ID4+ICIlcyIsCj4gPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGMtPmdh dGV3YXkpID49IHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikpIHsKPiA+Pj4+PiArICAgICAgICAg ICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIC1nYXRld2F5IHBhcmFtZXRlciBpcyB0 b28KPiA+Pj4+IGxvbmcuIFdlIGFsbG93IGEgbWF4IG9mICV6dSBjaGFyYWN0ZXJzXG4iLCBzaXpl b2YoYy0+Z2F0ZXdheV9idWZmZXIpKTsKPiA+Pj4+Cj4gPj4+PiBXZSB0eXBpY2FsbHkgdXNlIFNJ WkVfU1BFQ0lGSUVSIGluc3RlYWQgb2YgeiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCj4gPj4+PiBh bmNpZW50IHZlcnNpb25zIG9mIE1TVkMuCj4gPj4+PiAoSSBkb24ndCBrbm93IHdoZXRoZXIgdGhl cmUgaXMgYW55IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIE1TVkMgdGhhdAo+ID4+Pj4gZG9lc24ndCBz dXBwb3J0IHo7IEkgZG9uJ3QgdXNlIE1TVkMgbXlzZWxmLikKPiA+Pj4+Cj4gPj4+Cj4gPj4+IEhl cmUgdG9vIEkgd2FzIGV4cGxpY2l0bHkgc3VnZ2VzdGVkIHRvIHVzZSAlenUgKHdoZW4gSSB3YXMg dXNpbmcgLSBJCj4gPj4gdGhpbmsKPiA+Pj4gLSAlbHUgYmVmb3JlKS4KPiA+Pj4gU28gSSBhc3N1 bWUgdGhhdCB0aGUgYW5jaWVudCBNU1ZDIHZlcnNpb24geW91J3JlIHJlZmVycmluZyB0byBpcwo+ IHByb2JhYmx5Cj4gPj4+IG5vdCBzdXBwb3J0ZWQgYW55bW9yZSBmcm9tIGFuIGZmbXBlZyBjb21w aWxlciByZXF1aXJlbWVudCBwb2ludCBvZgo+IHZpZXc/Cj4gPj4+Cj4gPj4+IFNob3VsZCBpIG5v dyBjaGFuZ2UgYWxsICIlenUiIHRvICIlIlNJWkVfU1BFQ0lGSUVSICh0aGlzIGRvZXMgbm90IG1h a2UKPiBpdAo+ID4+PiBuZWF0ZXIgbm9yIHNob3J0ZXIgd2l0aCB0aGUgODAgY2hhciBsaW5lIGxp bWl0KS4KPiA+Pj4gSXMgdGhpcyBjaGFuZ2UgcmVxdWlyZWQ/Cj4gPj4KPiA+PiBBcyBzYWlkOiBJ dCBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFuY2llbnQgdmVyc2lvbnMgb2YgTVNWQy4gQnV0 IEkKPiA+PiBkb24ndCBrbm93IHdoZXRoZXIgYW55IG9mIHRoZSBhY3R1YWxseSBzdXBwb3J0ZWQg dmVyc2lvbnMgb2YgTVNWQyBzdGlsbAo+ID4+IG5lZWQgaXQuCj4gPj4KPiA+Pj4KPiA+Pj4gSWYg aXQgaXMsIHdoYXQgX2V4YWN0bHlfIGRvIGkgbmVlZCB0byBjaGFuZ2UgaXQgaW4/IEkgc2VlIGEK PiA+Pj4gY291cGxlIGRpZmZlcmVudCBTSVpFX1NQRUNJRklFUiBwcmVmaXhlcy4gSSBoYXZlIG5v IGNsdWUgd2hhdCB0byB1c2UKPiA+PiBoZXJlLgo+ID4+Cj4gPj4gVGhlcmUgaXMgb25seSBvbmUg U0laRV9TUEVDSUZJRVIsIG5hbWVseSBTSVpFX1NQRUNJRklFUjsgdGhlCj4gPj4gUFRSRElGRl9T UEVDSUZJRVIgKG9yIHdoYXRldmVyIHlvdSBzZWUpIGlzIG9idmlvdXNseSBub3QgdGhlIHRoaW5n IHRvCj4gPj4gdXNlIGZvciBzaXplX3QuCj4gPj4KPiA+PiBJIHNlZSBzb21lOgo+ID4gJSJTSVpF X1NQRUNJRklFUiIKPiA+Cj4gPiBCdXQgYWxzbyBsaWtlIHRoaXM6Cj4gPiAlOCJTSVpFX1NQRUNJ RklFUgo+ID4gJTUiU0laRV9TUEVDSUZJRVIKPiA+Cj4gPiBJJ20gYXNzdW1pbmcgdGhleSBhcmUg Zm9yIGNsaXBwaW5nPwo+Cj4gcHJpbnRmIHNwZWNpZmllcnMgY29uc2lzdCBvZiBmbGFncywgbWlu aW11bSBmaWVsZCB3aWR0aCwgcHJlY2lzaW9uCj4gKGluZGljYXRlZCBieSAnLicpLCBsZW5ndGgg bW9kaWZpZXIgYW5kIGNvbnZlcnNpb24gc3BlY2lmaWVyIChpbiB0aGF0Cj4gb3JkZXIpLiBMaWtl IHRoZSBtYWNyb3MgaW4gaW50dHlwZXMuaCBTSVpFX1NQRUNJRklFUiBleHBhbmRzIHRvIGEKPiBj aGFyYWN0ZXIgc3RyaW5nIGxpdGVyYWwgdGhhdCBpbmNsdWRlcyBhIGxlbmd0aCBtb2RpZmllciBh bmQgYQo+IGNvbnZlcnNpb24gc3BlY2lmaWVyLCBzbyB0aGF0IG9uZSBjYW4gdXNlIHRoaXMgdG9n ZXRoZXIgd2l0aCB0aGUgZm9ybWVyCj4gdGhyZWUgcG9zc2liaWxpdGllcy4KPiBPZiBjb3Vyc2Us IGl0IHdvdWxkIG1ha2Ugbm8gc2Vuc2UgdG8gdXNlIGFueSBvZiB0aGVzZSB0aHJlZSBoZXJlLCBz byBpdAo+IHdvdWxkIGp1c3QgYmUgJSJTSVpFX1NQRUNJRklFUiIuCj4KPiA+Cj4gPiBJIHJlYWxs eSBkb24ndCBsaWtlIGhhdmluZyB0byBjaGFuZ2UgaXQgdG8gdGhpcyBhcyBpdDoKPiA+IC0gVWds aWZpZXMgdGhlIGNvZGUgKGFuZCBpIGRvdWJ0IGlmIGl0J3MgZXZlbiBuZWVkZWQpCj4KPiBJIGFn cmVlIHRvIGJvdGggcG9pbnRzLiBXaGljaCBpcyB3aHkgSSBhbSBub3QgZm9yY2luZyB5b3UgdG8g ZG8gdGhpcy4gSXQKPiBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYXQgbGVhc3Qgb25lIGNv bW1vbmx5IGNvbXBpbGVkIGluc3RhbmNlCj4gd2hlcmUgaXQgaXMgbm90IHVzZWQgYXQgYWxsIChs aWJhdmZvcm1hdC9hcmdvX2N2Zy5jKS4KPgoKU28gaSBsZWF2ZSBpdCBhcyAiJXp1Ii4gQ2hlY2su CkkgZGlkIGFsc28gZ3JlcCBvbiB0aGUgZW50aXJlIGZmbXBlZyBzb3VyY2UgZm9yIHRoaXMuIEJv dGggc2VlbXMgdG8gYmUgdXNlZAppbiB2YXJpb3VzIHBsYWNlcyB0aG91Z2ggZ3JhbnRlZCwgU0la RV9TUEVDSUZJRVIgaXMgdXNlZCBtb3JlLgoKPgo+ID4gLSBEaXJlY3RseSBjb250cmFkaWN0cyBl YXJsaWVyIGZlZWRiYWNrCj4KPiBJIGRvbid0IGFncmVlIHdpdGggdGhhdCBnaXZlbiB0aGF0IFNJ WkVfU1BFQ0lGSUVSIGlzIGJhc2ljYWxseSBqdXN0IGEKPiB3cmFwcGVyIGFyb3VuZCB6dS4KPgoK TXkgbWlzdGFrZSwgaXQgZG9lc24ndCBjb250cmFkaWN0IGl0LiBTb3JyeSBmb3IgdGhhdC4KCj4K PiA+IC0gQW5kIGR1ZSB0byB0aGUgYWJvdmUgZ2l2ZXMgbWUgYSBmZWVsaW5nIG9mIHdhc3Rpbmcg dGltZQo+ID4gLSBGaW5lIHRvIGNoYW5nZSBpdCBidXQgSSBob3BlIHRoZXJlIGlzbid0IGFub3Ro ZXIgcGVyc29uIHBvcHBpbmcgdXAKPiB3aXRoIGEKPiA+IHF1ZXN0aW9uIHRvIGNoYW5nZSBpdCB5 ZXQgYWdhaW4uLi4uCj4gPgo+ID4KPiA+Pj4KPiA+Pj4KPiA+Pj4+PiArICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUihFSU5WQUwpOwo+ID4+Pj4+ICsgICAgICAgICAgICBnb3RvIGVycjsKPiA+Pj4+ PiArICAgICAgICB9Cj4gPj4+Pj4gKyAgICB9IGVsc2Ugewo+ID4+Pj4+ICsgICAgICAgIC8vIFBv cHVsYXRlIHRoZSBJUEZTIGdhdGV3YXkgaWYgd2UgaGF2ZSBhbnkuCj4gPj4+Pj4gKyAgICAgICAg Ly8gSWYgbm90LCBpbmZvcm0gdGhlIHVzZXIgaG93IHRvIHByb3Blcmx5IHNldCBvbmUuCj4gPj4+ Pj4gKyAgICAgICAgcmV0ID0gcG9wdWxhdGVfaXBmc19nYXRld2F5KGgpOwo+ID4+Pj4+ICsKPiA+ Pj4+PiArICAgICAgICBpZiAocmV0IDwgMSkgewo+ID4+Pj4+ICsgICAgICAgICAgICAvLyBXZSBm YWxsYmFjayBvbiBkd2ViLmxpbmsgKG1hbmFnZWQgYnkgUHJvdG9jb2wgTGFicykuCj4gPj4+Pj4g KyAgICAgICAgICAgIHNucHJpbnRmKGMtPmdhdGV3YXlfYnVmZmVyLCBzaXplb2YoYy0+Z2F0ZXdh eV9idWZmZXIpLCAiCj4gPj4+PiBodHRwczovL2R3ZWIubGluayIpOwo+ID4+Pj4+ICsKPiA+Pj4+ PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiSVBGUyBkb2VzIG5vdCBh cHBlYXIgdG8gYmUKPiA+Pj4+IHJ1bm5pbmcuIFlvdeKAmXJlIG5vdyB1c2luZyB0aGUgcHVibGlj IGdhdGV3YXkgYXQgZHdlYi5saW5rLlxuIik7Cj4gPj4+Pj4gKyAgICAgICAgICAgIGF2X2xvZyho LCBBVl9MT0dfSU5GTywgIkluc3RhbGxpbmcgSVBGUyBsb2NhbGx5IGlzCj4gPj4+PiByZWNvbW1l bmRlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSwgYW5kIG5vdCBzaGFy ZSBhbGwKPiA+PiB5b3VyCj4gPj4+PiBhY3Rpdml0eSB3aXRoIGEgc2luZ2xlIElQRlMgZ2F0ZXdh eS5cbiIpOwo+ID4+Pj4+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0lORk8sICJUaGVy ZSBhcmUgbXVsdGlwbGUgb3B0aW9ucyB0bwo+ID4+Pj4gZGVmaW5lIHRoaXMgZ2F0ZXdheS5cbiIp Owo+ID4+Pj4+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0lORk8sICIxLiBDYWxsIGZm bXBlZyB3aXRoIGEgZ2F0ZXdheQo+ID4+Pj4gcGFyYW0sIHdpdGhvdXQgYSB0cmFpbGluZyBzbGFz aDogLWdhdGV3YXkgPHVybD4uXG4iKTsKPiA+Pj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFW X0xPR19JTkZPLCAiMi4gRGVmaW5lIGFuICRJUEZTX0dBVEVXQVkKPiA+Pj4+IGVudmlyb25tZW50 IHZhcmlhYmxlIHdpdGggdGhlIGZ1bGwgSFRUUCBVUkwgdG8gdGhlIGdhdGV3YXkgd2l0aG91dAo+ ID4+IHRyYWlsaW5nCj4gPj4+PiBmb3J3YXJkIHNsYXNoLlxuIik7Cj4gPj4+Pj4gKyAgICAgICAg ICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIjMuIERlZmluZSBhbiAkSVBGU19QQVRICj4gPj4g ZW52aXJvbm1lbnQKPiA+Pj4+IHZhcmlhYmxlIGFuZCBwb2ludCBpdCB0byB0aGUgSVBGUyBkYXRh IHBhdGggLSB0aGlzIGlzIHR5cGljYWxseQo+ID4+IH4vLmlwZnNcbiIpOwo+ID4+Pj4KPiA+Pj4+ IEFsbCB0aG9zZSBBVl9MT0dfSU5GTyBjYW4gYmUgY29tYmluZWQgd2hpY2ggaGFzIHRoZSBhZHZh bnRhZ2UgdGhhdCB0aGUKPiA+Pj4+IGxvZ3MgY2FuJ3QgYmUgdGVhcmVkIGFwYXJ0ICh3aGljaCB0 aGV5IGNhbiBub3cgaWYgc29tZXRoaW5nIGVsc2UgbG9ncwo+IGF0Cj4gPj4+PiB0aGUgc2FtZSB0 aW1lKTsgZnVydGhlcm1vcmUsIHRoaXMgd291bGQgYWxzbyBkZWNyZWFzZSBjb2Rlc2l6ZS4KPiA+ Pj4+Cj4gPj4+Cj4gPj4+IERvIHlvdSBoYXZlIGFuIGV4YW1wbGUgb2Ygd2hlcmUgdGhhdCdzIGhh cHBlbmluZz8KPiA+Pj4KPiA+Pgo+ID4+IEl0IGNhbiBoYXBwZW4gYW55IHRpbWUgeW91IGhhdmUg bXVsdGlwbGUgdGhyZWFkcyB1c2luZyBhdl9sb2cgYXQgdGhlCj4gPj4gc2FtZSB0aW1lLiBHaXZl biB0aGF0IHlvdXIgc3RhdGVtZW50cyBhcmUgc3VwcG9zZWQgdG8gYmUgZnVsbCBsaW5lcywgaXQK PiA+PiBpcyBub3QgdGhhdCBiYWQgaWYgaXQgaGFwcGVucyBoZXJlLCBidXQgaXQgaXMgbmV2ZXJ0 aGVsZXNzIHN1Ym9wdGltYWwuCj4gPj4KPiA+Cj4gPiBJIG1lYW50IGEgbXVsdGktbGluZSBhdl9s b2cgZXhhbXBsZSA7KSBCdXQgeWVhaCwgSSBnZXQgaG93IHRocmVhZGluZwo+IGNvdWxkCj4gPiBz Y3JldyB0aGlzIHVwLgo+ID4KPgo+IEkgbWVhbnQgc29tZXRoaW5nIGxpa2U6Cj4gYXZfbG9nKGgs IEFWX0xPR19JTkZPLCAiSW5zdGFsbGluZyBJUEZTIGxvY2FsbHkgaXMgcmVjb21tZW5kZWQgdG8K PiBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSwgYW5kIG5vdCBzaGFyZSBhbGwg eW91ciBhY3Rpdml0eQo+IHdpdGggYSBzaW5nbGUgSVBGUyBnYXRld2F5LlxuIgo+ICAgICAgICAi VGhlcmUgYXJlIG11bHRpcGxlIG9wdGlvbnMgdG8gZGVmaW5lIHRoaXMgZ2F0ZXdheS5cbiIKPiAg ICAgICAgIjEuIENhbGwgZmZtcGVnIHdpdGggYSBnYXRld2F5IHBhcmFtLCB3aXRob3V0IGEgdHJh aWxpbmcgc2xhc2g6Cj4gLWdhdGV3YXkgPHVybD4uXG4iCj4gICAgICAgICIyLiBEZWZpbmUgYW4g JElQRlNfR0FURVdBWSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIHRoZSBmdWxsCj4gSFRUUCBV UkwgdG8gdGhlIGdhdGV3YXkgd2l0aG91dCB0cmFpbGluZyBmb3J3YXJkIHNsYXNoLlxuIgo+ICAg ICAgICAiMy4gRGVmaW5lIGFuICRJUEZTX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHBv aW50IGl0IHRvIHRoZQo+IElQRlMgZGF0YSBwYXRoIC0gdGhpcyBpcyB0eXBpY2FsbHkgfi8uaXBm c1xuIik7Cj4KPiAoVGhlc2UgbGluZXMgYXJlIGFjdHVhbGx5IHdheSB0b28gbG9uZy4pCj4KCkZp eGVkIGFzIG11bHRpbGluZS4KSSBkbyBsaWtlIHRvIGtlZXAgdGhlIGNvbnRlbnQgb2YgdGhlIGxp bmVzIHRob3VnaC4KSSBhbHNvIGNoZWNrZWQgdGhpcyB3aXRoIElQRlMgZm9sa3MgdG8gYmUgYXMg Y29ycmVjdCBhbmQgY2xlYXIgYXMgd2UgY291bGQKbWFrZSBpdC4KCj4KPiAtIEFuZHJlYXMKPgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2 ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxp bmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBz dWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==