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 85FEC427FC for ; Thu, 31 Mar 2022 23:57:52 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3779868B1F5; Fri, 1 Apr 2022 02:57:49 +0300 (EEST) Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DC4B868AE4E for ; Fri, 1 Apr 2022 02:57:42 +0300 (EEST) Received: by mail-wm1-f51.google.com with SMTP id n35so711651wms.5 for ; Thu, 31 Mar 2022 16:57:42 -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=1eg8sjk5glWvtSuN7XW91WcT9d13DMo8LXPqejmHVak=; b=aUMXU8ORtQytSkVHjy3CtKM+hHk8XdgeLOHtYCQkbeNnijAklEGFARiwD4foDSEloK EDEQpP2PjwsyGkEnW1hRKqwbzm0OwO/6ZHacZN4h+THpPnZNtAdcpdJi7FrSXcO5ydn/ wsEhaYxvvwQoT7pYAzR6Ga/8GYnyd3FOyzO6+xRfrN6QA4rWVXsaXB6Ecmk6xTUdRwZb Ju6LkXTlDecDvWvIMuHYDzIL4g7Ee3e/xjC4TxXBVWA5wpBOakyL1dpCLkOUGQB0XSF1 YrSHFfgJC+duARNI6SIU9go3qc3X1LUfqSjnJv3cOAAmV7NGu6CXL6FpMrHO/Bx578hX ae2w== 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=1eg8sjk5glWvtSuN7XW91WcT9d13DMo8LXPqejmHVak=; b=mQuNab4lJwG7Flnazi7RiqGiCuS5HLZ5LoMQNq0y/RF4+C4nA0VpiFZWYgWUrrmQJ+ wlYwoZtrMIV/D9I1XIIo2my5m4or8CE4JMBb4GFESIChQVLQ8rI91b8rKqpCEUhHDcQk DYrqOS0rca1B9t2KsyCXMrWTl2kSSXTXiSqv2qxohCchlz+654fgDeRRLj3N7Lxql0yX /eVbiVn15J+lpebNrQzq4mPyqIYItm4IdMUeNke9VMY5LWS6ZcKC1ZusrD+29RQEnYIy vLtHtTWMhgyV3c+o6Y5nrOukztTIfKu6xryEjZWuHR5YBL0nMdSDxe/tPM6tsjGFeSru vcTw== X-Gm-Message-State: AOAM530Hktby0S8QEIK98PhbedbgALQsFnvafLiBffK5LKgXtIsFZEa+ bxMARHDg3ZCtVR2tJh9kGCFmssghvDUaqJbDtSk= X-Google-Smtp-Source: ABdhPJwxwXHvOVOy6zJQmflEQ2y+1/uAUFTQh0PcNFlYsxTk8bFM5WviehCxaPeXERczXP02mXdHSiQiipzmSFT8OjQ= X-Received: by 2002:a7b:c841:0:b0:389:864c:e715 with SMTP id c1-20020a7bc841000000b00389864ce715mr6344040wml.72.1648771061865; Thu, 31 Mar 2022 16:57:41 -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 01:56:33 +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: T24gRnJpLCBBcHIgMSwgMjAyMiBhdCAxOjAxIEFNIEFuZHJlYXMgUmhlaW5oYXJkdCA8CmFuZHJl YXMucmhlaW5oYXJkdEBvdXRsb29rLmNvbT4gd3JvdGU6Cgo+IE1hcmsgR2Fpc2VyOgo+ID4gT24g VGh1LCBNYXIgMzEsIDIwMjIgYXQgMTE6NDQgUE0gQW5kcmVhcyBSaGVpbmhhcmR0IDwKPiA+IGFu ZHJlYXMucmhlaW5oYXJkdEBvdXRsb29rLmNvbT4gd3JvdGU6Cj4gPgo+ID4+IE1hcmsgR2Fpc2Vy Ogo+ID4+PiBPbiBXZWQsIE1hciAzMCwgMjAyMiBhdCAzOjU3IFBNIEFuZHJlYXMgUmhlaW5oYXJk dCA8Cj4gPj4+IGFuZHJlYXMucmhlaW5oYXJkdEBvdXRsb29rLmNvbT4gd3JvdGU6Cj4gPj4+Cj4g Pj4+PiBNYXJrIEdhaXNlcjoKPiA+Pj4+PiBPbiBXZWQsIE1hciAzMCwgMjAyMiBhdCAyOjIxIFBN IEFuZHJlYXMgUmhlaW5oYXJkdCA8Cj4gPj4+Pj4gYW5kcmVhcy5yaGVpbmhhcmR0QG91dGxvb2su Y29tPiB3cm90ZToKPiA+Pj4+Pgo+ID4+Pj4+PiBNYXJrIEdhaXNlcjoKPiA+Pj4+Pj4+IFRoaXMg cGF0Y2ggYWRkcyBzdXBwb3J0IGZvcjoKPiA+Pj4+Pj4+IC0gZmZwbGF5IGlwZnM6Ly88Y2lkPgo+ ID4+Pj4+Pj4gLSBmZnBsYXkgaXBuczovLzxjaWQ+Cj4gPj4+Pj4+Pgo+ID4+Pj4+Pj4gSVBGUyBk YXRhIGNhbiBiZSBwbGF5ZWQgZnJvbSBzbyBjYWxsZWQgImlwZnMgZ2F0ZXdheXMiLgo+ID4+Pj4+ Pj4gQSBnYXRld2F5IGlzIGVzc2VudGlhbGx5IGEgd2Vic2VydmVyIHRoYXQgZ2l2ZXMgYWNjZXNz IHRvIHRoZQo+ID4+Pj4+Pj4gZGlzdHJpYnV0ZWQgSVBGUyBuZXR3b3JrLgo+ID4+Pj4+Pj4KPiA+ Pj4+Pj4+IFRoaXMgcHJvdG9jb2wgc3VwcG9ydCAoaXBmcyBhbmQgaXBucykgdGhlcmVmb3JlIHRy YW5zbGF0ZXMKPiA+Pj4+Pj4+IGlwZnM6Ly8gYW5kIGlwbnM6Ly8gdG8gYSBodHRwOi8vIHVybC4g VGhpcyByZXN1bHRpbmcgdXJsIGlzCj4gPj4+Pj4+PiB0aGVuIGhhbmRsZWQgYnkgdGhlIGh0dHAg cHJvdG9jb2wuIEl0IGNvdWxkIGFsc28gYmUgaHR0cHMKPiA+Pj4+Pj4+IGRlcGVuZGluZyBvbiB0 aGUgZ2F0ZXdheSBwcm92aWRlZC4KPiA+Pj4+Pj4+Cj4gPj4+Pj4+PiBUbyB1c2UgdGhpcyBwcm90 b2NvbCwgYSBnYXRld2F5IG11c3QgYmUgcHJvdmlkZWQuCj4gPj4+Pj4+PiBJZiB5b3UgZG8gbm90 aGluZyBpdCB3aWxsIHRyeSB0byBmaW5kIGl0IGluIHlvdXIKPiA+Pj4+Pj4+ICRIT01FLy5pcGZz L2dhdGV3YXkgZmlsZS4gVGhlIHdheXMgdG8gc2V0IGl0IG1hbnVhbGx5IGFyZToKPiA+Pj4+Pj4+ IDEuIERlZmluZSBhIC1nYXRld2F5IDx1cmw+IHRvIHRoZSBnYXRld2F5Lgo+ID4+Pj4+Pj4gMi4g RGVmaW5lICRJUEZTX0dBVEVXQVkgd2l0aCB0aGUgZnVsbCBodHRwIGxpbmsgdG8gdGhlIGdhdGV3 YXkuCj4gPj4+Pj4+PiAzLiBEZWZpbmUgJElQRlNfUEFUSCBhbmQgcG9pbnQgaXQgdG8gdGhlIElQ RlMgZGF0YSBwYXRoLgo+ID4+Pj4+Pj4gNC4gSGF2ZSBJUEZTIHJ1bm5pbmcgaW4geW91ciBsb2Nh bCB1c2VyIGZvbGRlciAodW5kZXIgJEhPTUUvLmlwZnMpLgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IFNp Z25lZC1vZmYtYnk6IE1hcmsgR2Fpc2VyIDxtYXJrZzg1QGdtYWlsLmNvbT4KPiA+Pj4+Pj4+IC0t LQo+ID4+Pj4+Pj4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgfCAgIDIgKwo+ID4+Pj4+Pj4g IGRvYy9wcm90b2NvbHMudGV4aSAgICAgICAgfCAgMzAgKysrKwo+ID4+Pj4+Pj4gIGxpYmF2Zm9y bWF0L01ha2VmaWxlICAgICAgfCAgIDIgKwo+ID4+Pj4+Pj4gIGxpYmF2Zm9ybWF0L2lwZnNnYXRl d2F5LmMgfCAzMDkKPiA+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ID4+Pj4+Pj4gIGxpYmF2Zm9ybWF0L3Byb3RvY29scy5jICAgfCAgIDIgKwo+ID4+Pj4+Pj4gIDUg ZmlsZXMgY2hhbmdlZCwgMzQ1IGluc2VydGlvbnMoKykKPiA+Pj4+Pj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYwo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IGRpZmYg LS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPiA+Pj4+Pj4+IGluZGV4IGU0ZDM2YWE2Mzku LjU1YWY5MDk1N2EgMTAwNzU1Cj4gPj4+Pj4+PiAtLS0gYS9jb25maWd1cmUKPiA+Pj4+Pj4+ICsr KyBiL2NvbmZpZ3VyZQo+ID4+Pj4+Pj4gQEAgLTM1NzksNiArMzU3OSw4IEBAIHVkcF9wcm90b2Nv bF9zZWxlY3Q9Im5ldHdvcmsiCj4gPj4+Pj4+PiAgdWRwbGl0ZV9wcm90b2NvbF9zZWxlY3Q9Im5l dHdvcmsiCj4gPj4+Pj4+PiAgdW5peF9wcm90b2NvbF9kZXBzPSJzeXNfdW5faCIKPiA+Pj4+Pj4+ ICB1bml4X3Byb3RvY29sX3NlbGVjdD0ibmV0d29yayIKPiA+Pj4+Pj4+ICtpcGZzX3Byb3RvY29s X3NlbGVjdD0iaHR0cHNfcHJvdG9jb2wiCj4gPj4+Pj4+PiAraXBuc19wcm90b2NvbF9zZWxlY3Q9 Imh0dHBzX3Byb3RvY29sIgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+ICAjIGV4dGVybmFsIGxpYnJhcnkg cHJvdG9jb2xzCj4gPj4+Pj4+PiAgbGliYW1xcF9wcm90b2NvbF9kZXBzPSJsaWJyYWJiaXRtcSIK PiA+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kb2MvcHJvdG9jb2xzLnRleGkgYi9kb2MvcHJvdG9jb2xz LnRleGkKPiA+Pj4+Pj4+IGluZGV4IGQyMDdkZjBiNTIuLjdjOWMwYTQ4MDggMTAwNjQ0Cj4gPj4+ Pj4+PiAtLS0gYS9kb2MvcHJvdG9jb2xzLnRleGkKPiA+Pj4+Pj4+ICsrKyBiL2RvYy9wcm90b2Nv bHMudGV4aQo+ID4+Pj4+Pj4gQEAgLTIwMjUsNSArMjAyNSwzNSBAQCBkZWNvZGluZyBlcnJvcnMu Cj4gPj4+Pj4+Pgo+ID4+Pj4+Pj4gIEBlbmQgdGFibGUKPiA+Pj4+Pj4+Cj4gPj4+Pj4+PiArQHNl Y3Rpb24gaXBmcwo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gK0ludGVyUGxhbmV0YXJ5IEZpbGUgU3lz dGVtIChJUEZTKSBwcm90b2NvbCBzdXBwb3J0LiBPbmUgY2FuIGFjY2Vzcwo+ID4+Pj4+PiBmaWxl cyBzdG9yZWQKPiA+Pj4+Pj4+ICtvbiB0aGUgSVBGUyBuZXR3b3JrIHRocm91Z2ggc28gY2FsbGVk IGdhdGV3YXlzLiBUaG9zZSBhcmUgaHR0cChzKQo+ID4+Pj4+PiBlbmRwb2ludHMuCj4gPj4+Pj4+ PiArVGhpcyBwcm90b2NvbCB3cmFwcyB0aGUgSVBGUyBuYXRpdmUgcHJvdG9jb2xzIChpcGZzOi8v IGFuZAo+IGlwbnM6Ly8pCj4gPj4gdG8KPiA+Pj4+Pj4gYmUgc2VuZAo+ID4+Pj4+Pj4gK3RvIHN1 Y2ggYSBnYXRld2F5LiBVc2VycyBjYW4gKGFuZCBzaG91bGQpIGhvc3QgdGhlaXIgb3duIG5vZGUK PiB3aGljaAo+ID4+Pj4+PiBtZWFucyB0aGlzCj4gPj4+Pj4+PiArcHJvdG9jb2wgd2lsbCB1c2Ug eW91ciBsb2NhbCBtYWNoaW5lIGdhdGV3YXkgdG8gYWNjZXNzIGZpbGVzIG9uCj4gdGhlCj4gPj4+ Pj4+IElQRlMgbmV0d29yay4KPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICtJZiBhIHVzZXIgZG9lc24n dCBoYXZlIGEgbm9kZSBvZiB0aGVpciBvd24gdGhlbiB0aGUgcHVibGljIGdhdGV3YXkKPiA+Pj4+ Pj4gZHdlYi5saW5rIGlzCj4gPj4+Pj4+PiArdXNlZCBieSBkZWZhdWx0Lgo+ID4+Pj4+Pj4gKwo+ ID4+Pj4+Pj4gK1lvdSBjYW4gdXNlIHRoaXMgcHJvdG9jb2wgaW4gMiB3YXlzLiBVc2luZyBJUEZT Ogo+ID4+Pj4+Pj4gK0BleGFtcGxlCj4gPj4+Pj4+PiArZmZwbGF5IGlwZnM6Ly9RbWJHdEpnMjNz a2h2Rm11OW1KaWVQVkJ5aGZ6dTVyd283NE1Fa1ZEWUFtRjVUCj4gPj4+Pj4+PiArQGVuZCBleGFt cGxlCj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiArT3IgdGhlIElQTlMgcHJvdG9jb2wgKElQTlMgaXMg bXV0YWJsZSBJUEZTKToKPiA+Pj4+Pj4+ICtAZXhhbXBsZQo+ID4+Pj4+Pj4gK2ZmcGxheSBpcG5z Oi8vUW1iR3RKZzIzc2todkZtdTltSmllUFZCeWhmenU1cndvNzRNRWtWRFlBbUY1VAo+ID4+Pj4+ Pj4gK0BlbmQgZXhhbXBsZQo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gK1lvdSBjYW4gYWxzbyBjaGFu Z2UgdGhlIGdhdGV3YXkgdG8gYmUgdXNlZDoKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICtAdGFibGUg QG9wdGlvbgo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gK0BpdGVtIGdhdGV3YXkKPiA+Pj4+Pj4+ICtE ZWZpbmVzIHRoZSBnYXRld2F5IHRvIHVzZS4gV2hlbiBub3RoaW5nIGlzIHByb3ZpZGVkIHRoZSBw cm90b2NvbAo+ID4+IHdpbGwKPiA+Pj4+Pj4gZmlyc3QgdHJ5Cj4gPj4+Pj4+PiAreW91ciBsb2Nh bCBnYXRld2F5LiBJZiB0aGF0IGZhaWxzIGR3ZWIubGluayB3aWxsIGJlIHVzZWQuCj4gPj4+Pj4+ PiArCj4gPj4+Pj4+PiArQGVuZCB0YWJsZQo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+ICBAYyBtYW4gZW5k IFBST1RPQ09MUwo+ID4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlIGIv bGliYXZmb3JtYXQvTWFrZWZpbGUKPiA+Pj4+Pj4+IGluZGV4IGQ3MTgyZDZiZDguLmUzMjMzZmQ3 YWMgMTAwNjQ0Cj4gPj4+Pj4+PiAtLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQo+ID4+Pj4+Pj4g KysrIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiA+Pj4+Pj4+IEBAIC02NjAsNiArNjYwLDggQEAg T0JKUy0kKENPTkZJR19TUlRQX1BST1RPQ09MKSAgICAgICAgICAgICArPQo+ID4+Pj4+PiBzcnRw cHJvdG8ubyBzcnRwLm8KPiA+Pj4+Pj4+ICBPQkpTLSQoQ09ORklHX1NVQkZJTEVfUFJPVE9DT0wp ICAgICAgICAgICs9IHN1YmZpbGUubwo+ID4+Pj4+Pj4gIE9CSlMtJChDT05GSUdfVEVFX1BST1RP Q09MKSAgICAgICAgICAgICAgKz0gdGVlcHJvdG8ubwo+IHRlZV9jb21tb24ubwo+ID4+Pj4+Pj4g IE9CSlMtJChDT05GSUdfVENQX1BST1RPQ09MKSAgICAgICAgICAgICAgKz0gdGNwLm8KPiA+Pj4+ Pj4+ICtPQkpTLSQoQ09ORklHX0lQRlNfUFJPVE9DT0wpICAgICAgICAgICAgICs9IGlwZnNnYXRl d2F5Lm8KPiA+Pj4+Pj4+ICtPQkpTLSQoQ09ORklHX0lQTlNfUFJPVE9DT0wpICAgICAgICAgICAg ICs9IGlwZnNnYXRld2F5Lm8KPiA+Pj4+Pj4+ICBUTFMtT0JKUy0kKENPTkZJR19HTlVUTFMpICAg ICAgICAgICAgICAgICs9IHRsc19nbnV0bHMubwo+ID4+Pj4+Pj4gIFRMUy1PQkpTLSQoQ09ORklH X0xJQlRMUykgICAgICAgICAgICAgICAgKz0gdGxzX2xpYnRscy5vCj4gPj4+Pj4+PiAgVExTLU9C SlMtJChDT05GSUdfTUJFRFRMUykgICAgICAgICAgICAgICArPSB0bHNfbWJlZHRscy5vCj4gPj4+ Pj4+PiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYyBiL2xpYmF2Zm9ybWF0 L2lwZnNnYXRld2F5LmMKPiA+Pj4+Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4+Pj4+PiBp bmRleCAwMDAwMDAwMDAwLi4xYTAzOTU4OWMwCj4gPj4+Pj4+PiAtLS0gL2Rldi9udWxsCj4gPj4+ Pj4+PiArKysgYi9saWJhdmZvcm1hdC9pcGZzZ2F0ZXdheS5jCj4gPj4+Pj4+PiBAQCAtMCwwICsx LDMwOSBAQAo+ID4+Pj4+Pj4gKy8qCj4gPj4+Pj4+PiArICogSVBGUyBhbmQgSVBOUyBwcm90b2Nv bCBzdXBwb3J0IHRocm91Z2ggSVBGUyBHYXRld2F5Lgo+ID4+Pj4+Pj4gKyAqIENvcHlyaWdodCAo YykgMjAyMiBNYXJrIEdhaXNlcgo+ID4+Pj4+Pj4gKyAqCj4gPj4+Pj4+PiArICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgo+ID4+Pj4+Pj4gKyAqCj4gPj4+Pj4+PiArICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ID4+Pj4+Pj4g KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKPiA+Pj4+Pj4+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiA+Pj4+Pj4+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKPiA+PiB2ZXJzaW9uLgo+ID4+ Pj4+Pj4gKyAqCj4gPj4+Pj4+PiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPj4+Pj4+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+Pj4+Pj4+ICsg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCj4gR05VCj4gPj4+Pj4+PiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KPiA+Pj4+Pj4+ICsgKgo+ID4+Pj4+Pj4gKyAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAo+IFB1YmxpYwo+ ID4+Pj4+Pj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKPiA+Pj4+Pj4+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCj4gPj4+Pj4+IDAyMTEwLTEzMDEg VVNBCj4gPj4+Pj4+PiArICovCj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiArI2luY2x1ZGUgImF2Zm9y bWF0LmgiCj4gPj4+Pj4+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgo+ID4+Pj4+ Pgo+ID4+Pj4+PiBVbnVzZWQuCj4gPj4+Pj4+Cj4gPj4+Pj4+PiArI2luY2x1ZGUgImxpYmF2dXRp bC9hdnN0cmluZy5oIgo+ID4+Pj4+Pj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCIK PiA+Pj4+Pj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+ID4+Pj4+Pj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvdHJlZS5oIgo+ID4+Pj4+Pgo+ID4+Pj4+PiA/Cj4gPj4+Pj4+Cj4gPj4+Pj4K PiA+Pj4+PiBUaGlzIHdob2xlIGluY2x1ZGUgcGFydCBjYW4gYmUgY2xlYW5lZCB1cCBtdWNoIG1v cmUuCj4gPj4+Pj4gSnVzdCBoYXZpbmcgdGhlc2U6Cj4gPj4+Pj4gI2luY2x1ZGUgImxpYmF2dXRp bC9hdnN0cmluZy5oIgo+ID4+Pj4+ICNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4gPj4+Pj4g I2luY2x1ZGUgInVybC5oIgo+ID4+Pj4+ICNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ID4+Pj4+Cj4g Pj4+Pj4gaXMgZW5vdWdoLgo+ID4+Pj4+Cj4gPj4+Pj4KPiA+Pj4+Pj4+ICsjaW5jbHVkZSA8ZmNu dGwuaD4KPiA+Pj4+Pj4+ICsjaWYgSEFWRV9JT19ICj4gPj4+Pj4+PiArI2luY2x1ZGUgPGlvLmg+ Cj4gPj4+Pj4+PiArI2VuZGlmCj4gPj4+Pj4+PiArI2lmIEhBVkVfVU5JU1REX0gKPiA+Pj4+Pj4+ ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gPj4+Pj4+PiArI2VuZGlmCj4gPj4+Pj4+PiArI2luY2x1 ZGUgIm9zX3N1cHBvcnQuaCIKPiA+Pj4+Pj4+ICsjaW5jbHVkZSAidXJsLmgiCj4gPj4+Pj4+PiAr I2luY2x1ZGUgPHN0ZGxpYi5oPgo+ID4+Pj4+Pj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ID4+ Pj4+Pj4gKwo+ID4+Pj4+Pj4gK3R5cGVkZWYgc3RydWN0IElQRlNHYXRld2F5Q29udGV4dCB7Cj4g Pj4+Pj4+PiArICAgIEFWQ2xhc3MgKmNsYXNzOwo+ID4+Pj4+Pj4gKyAgICBVUkxDb250ZXh0ICpp bm5lcjsKPiA+Pj4+Pj4+ICsgICAgLy8gSXMgZmlsbGVkIGJ5IHRoZSAtZ2F0ZXdheSBhcmd1bWVu dCBhbmQgbm90IGNoYW5nZWQgYWZ0ZXIuCj4gPj4+Pj4+PiArICAgIGNoYXIgKmdhdGV3YXk7Cj4g Pj4+Pj4+PiArICAgIC8vIElmIHRoZSBhYm92ZSBnYXRld2F5IGlzIG5vbiBudWxsLCBpdCB3aWxs IGJlIGNvcGllZCBpbnRvCj4gdGhpcwo+ID4+Pj4+PiBidWZmZXIuCj4gPj4+Pj4+PiArICAgIC8v IEVsc2UgdGhpcyBidWZmZXIgd2lsbCBjb250YWluIHRoZSBhdXRvIGRldGVjdGVkIGdhdGV3YXku Cj4gPj4+Pj4+PiArICAgIC8vIEluIGVpdGhlciBjYXNlLCB0aGUgZ2F0ZXdheSB0byB1c2Ugd2ls bCBiZSBpbiB0aGlzIGJ1ZmZlci4KPiA+Pj4+Pj4+ICsgICAgY2hhciBnYXRld2F5X2J1ZmZlcltQ QVRIX01BWF07Cj4gPj4+Pj4+PiArfSBJUEZTR2F0ZXdheUNvbnRleHQ7Cj4gPj4+Pj4+PiArCj4g Pj4+Pj4+PiArLy8gQSBiZXN0LWVmZm9ydCB3YXkgdG8gZmluZCB0aGUgSVBGUyBnYXRld2F5Lgo+ ID4+Pj4+Pj4gKy8vIE9ubHkgdGhlIG1vc3QgYXBwcm9waWF0ZSBnYXRld2F5IGlzIHNldC4gSXQn cyBub3QgYWN0dWFsbHkKPiA+Pj4+IHJlcXVlc3RlZAo+ID4+Pj4+Pj4gKy8vIChodHRwIGNhbGwp IHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgc2xvd2Rvd24gaW4gc3RhcnR1cC4gQQo+ID4+IHBvdGVu dGlhbAo+ID4+Pj4+PiB0aW1lb3V0Cj4gPj4+Pj4+PiArLy8gaXMgaGFuZGxlZCBieSB0aGUgSFRU UCBwcm90b2NvbC4KPiA+Pj4+Pj4+ICtzdGF0aWMgaW50IHBvcHVsYXRlX2lwZnNfZ2F0ZXdheShV UkxDb250ZXh0ICpoKQo+ID4+Pj4+Pj4gK3sKPiA+Pj4+Pj4+ICsgICAgSVBGU0dhdGV3YXlDb250 ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwo+ID4+Pj4+Pj4gKyAgICBjaGFyIGlwZnNfZnVsbF9kYXRh X2ZvbGRlcltQQVRIX01BWF07Cj4gPj4+Pj4+PiArICAgIGNoYXIgaXBmc19nYXRld2F5X2ZpbGVb UEFUSF9NQVhdOwo+ID4+Pj4+Pj4gKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKPiA+Pj4+Pj4+ICsgICAg aW50IHN0YXRfcmV0ID0gMDsKPiA+Pj4+Pj4+ICsgICAgaW50IHJldCA9IEFWRVJST1IoRUlOVkFM KTsKPiA+Pj4+Pj4+ICsgICAgRklMRSAqZ2F0ZXdheV9maWxlID0gTlVMTDsKPiA+Pj4+Pj4+ICsK PiA+Pj4+Pj4+ICsgICAgLy8gVGVzdCAkSVBGU19HQVRFV0FZLgo+ID4+Pj4+Pj4gKyAgICBpZiAo Z2V0ZW52KCJJUEZTX0dBVEVXQVkiKSAhPSBOVUxMKSB7Cj4gPj4+Pj4+PiArICAgICAgICBpZiAo c25wcmludGYoYy0+Z2F0ZXdheV9idWZmZXIsIHNpemVvZihjLT5nYXRld2F5X2J1ZmZlciksCj4g Pj4+PiAiJXMiLAo+ID4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGdldGVudigiSVBGU19H QVRFV0FZIikpID49Cj4gPj4+Pj4+IHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikpIHsKPiA+Pj4+ Pj4+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJUaGUgSVBGU19HQVRF V0FZCj4gZW52aXJvbm1lbnQKPiA+Pj4+Pj4gdmFyaWFibGUgZXhjZWVkcyB0aGUgbWF4aW11bSBs ZW5ndGguIFdlIGFsbG93IGEgbWF4IG9mICV6dQo+ID4+Pj4gY2hhcmFjdGVyc1xuIiwKPiA+Pj4+ Pj4gc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSk7Cj4gPj4+Pj4+PiArICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUihFSU5WQUwpOwo+ID4+Pj4+Pj4gKyAgICAgICAgICAgIGdvdG8gZXJyOwo+ID4+ Pj4+Pj4gKyAgICAgICAgfQo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gKyAgICAgICAgcmV0ID0gMTsK PiA+Pj4+Pj4+ICsgICAgICAgIGdvdG8gZXJyOwo+ID4+Pj4+Pj4gKyAgICB9IGVsc2UKPiA+Pj4+ Pj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfREVCVUcsICIkSVBGU19HQVRFV0FZIGlzIGVt cHR5LlxuIik7Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiArICAgIC8vIFdlIG5lZWQgdG8ga25vdyB0 aGUgSVBGUyBmb2xkZXIgdG8gLSBldmVudHVhbGx5IC0gcmVhZCB0aGUKPiA+Pj4+Pj4gY29udGVu dHMgb2YKPiA+Pj4+Pj4+ICsgICAgLy8gdGhlICJnYXRld2F5IiBmaWxlIHdoaWNoIHdvdWxkIHRl bGwgdXMgdGhlIGdhdGV3YXkgdG8gdXNlLgo+ID4+Pj4+Pj4gKyAgICBpZiAoZ2V0ZW52KCJJUEZT X1BBVEgiKSA9PSBOVUxMKSB7Cj4gPj4+Pj4+PiArICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0RF QlVHLCAiJElQRlNfUEFUSCBpcyBlbXB0eS5cbiIpOwo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gKyAg ICAgICAgLy8gVHJ5IHZpYSB0aGUgaG9tZSBmb2xkZXIuCj4gPj4+Pj4+PiArICAgICAgICBpZiAo Z2V0ZW52KCJIT01FIikgPT0gTlVMTCkgewo+ID4+Pj4+Pj4gKyAgICAgICAgICAgIGF2X2xvZyho LCBBVl9MT0dfV0FSTklORywgIiRIT01FIGFwcGVhcnMgdG8gYmUKPiA+PiBlbXB0eS5cbiIpOwo+ ID4+Pj4+Pj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiA+Pj4+Pj4+ICsg ICAgICAgICAgICBnb3RvIGVycjsKPiA+Pj4+Pj4+ICsgICAgICAgIH0KPiA+Pj4+Pj4+ICsKPiA+ Pj4+Pj4+ICsgICAgICAgIC8vIFZlcmlmeSB0aGUgY29tcG9zZWQgcGF0aCBmaXRzLgo+ID4+Pj4+ Pj4gKyAgICAgICAgaWYgKHNucHJpbnRmKGlwZnNfZnVsbF9kYXRhX2ZvbGRlciwKPiA+Pj4+Pj4g c2l6ZW9mKGlwZnNfZnVsbF9kYXRhX2ZvbGRlciksCj4gPj4+Pj4+PiArICAgICAgICAgICAgICAg ICAgICAgIiVzLy5pcGZzLyIsIGdldGVudigiSE9NRSIpKSA+PQo+ID4+Pj4+PiBzaXplb2YoaXBm c19mdWxsX2RhdGFfZm9sZGVyKSkgewo+ID4+Pj4+Pj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBB Vl9MT0dfV0FSTklORywgIlRoZSBJUEZTIGRhdGEgcGF0aCBleGNlZWRzCj4gPj4gdGhlCj4gPj4+ Pj4+IG1heCBwYXRoIGxlbmd0aCAoJXp1KVxuIiwgc2l6ZW9mKGlwZnNfZnVsbF9kYXRhX2ZvbGRl cikpOwo+ID4+Pj4+Pj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiA+Pj4+ Pj4+ICsgICAgICAgICAgICBnb3RvIGVycjsKPiA+Pj4+Pj4+ICsgICAgICAgIH0KPiA+Pj4+Pj4+ ICsKPiA+Pj4+Pj4+ICsgICAgICAgIC8vIFN0YXQgdGhlIGZvbGRlci4KPiA+Pj4+Pj4+ICsgICAg ICAgIC8vIEl0IHNob3VsZCBleGlzdCBpbiBhIGRlZmF1bHQgSVBGUyBzZXR1cCB3aGVuIHJ1biBh cwo+IGxvY2FsCj4gPj4+Pj4+IHVzZXIuCj4gPj4+Pj4+PiArI2lmbmRlZiBfV0lOMzIKPiA+Pj4+ Pj4+ICsgICAgICAgIHN0YXRfcmV0ID0gc3RhdChpcGZzX2Z1bGxfZGF0YV9mb2xkZXIsICZzdCk7 Cj4gPj4+Pj4+PiArI2Vsc2UKPiA+Pj4+Pj4+ICsgICAgICAgIHN0YXRfcmV0ID0gd2luMzJfc3Rh dChpcGZzX2Z1bGxfZGF0YV9mb2xkZXIsICZzdCk7Cj4gPj4+Pj4+PiArI2VuZGlmCj4gPj4+Pj4+ PiArICAgICAgICBpZiAoc3RhdF9yZXQgPCAwKSB7Cj4gPj4+Pj4+PiArICAgICAgICAgICAgYXZf bG9nKGgsIEFWX0xPR19JTkZPLCAiVW5hYmxlIHRvIGZpbmQgSVBGUyBmb2xkZXIuIFdlCj4gPj4+ Pj4+IHRyaWVkOlxuIik7Cj4gPj4+Pj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19J TkZPLCAiLSAkSVBGU19QQVRILCB3aGljaCB3YXMKPiA+Pj4+IGVtcHR5LlxuIik7Cj4gPj4+Pj4+ PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZPLCAiLSAkSE9NRS8uaXBmcyAoZnVs bCB1cmk6ICVzKQo+ID4+IHdoaWNoCj4gPj4+Pj4+IGRvZXNuJ3QgZXhpc3QuXG4iLCBpcGZzX2Z1 bGxfZGF0YV9mb2xkZXIpOwo+ID4+Pj4+Pj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5P RU5UKTsKPiA+Pj4+Pj4+ICsgICAgICAgICAgICBnb3RvIGVycjsKPiA+Pj4+Pj4+ICsgICAgICAg IH0KPiA+Pj4+Pj4+ICsgICAgfSBlbHNlIHsKPiA+Pj4+Pj4+ICsgICAgICAgIGlmIChzbnByaW50 ZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIsCj4gPj4+Pj4+IHNpemVvZihpcGZzX2Z1bGxfZGF0YV9m b2xkZXIpLCAiJXMiLAo+ID4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgZ2V0ZW52KCJJUEZTX1BB VEgiKSkgPj0KPiA+Pj4+IHNpemVvZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpKQo+ID4+Pj4+PiB7 Cj4gPj4+Pj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIElQ RlNfUEFUSCBlbnZpcm9ubWVudAo+ID4+Pj4+PiB2YXJpYWJsZSBleGNlZWRzIHRoZSBtYXhpbXVt IGxlbmd0aC4gV2UgYWxsb3cgYSBtYXggb2YgJXp1Cj4gPj4+PiBjaGFyYWN0ZXJzXG4iLAo+ID4+ Pj4+PiBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpKTsKPiA+Pj4+Pj4+ICsgICAgICAgICAgICBy ZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4gPj4+Pj4+PiArICAgICAgICAgICAgZ290byBlcnI7Cj4g Pj4+Pj4+PiArICAgICAgICB9Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiArICAgIH0KPiA+Pj4+Pj4+ ICsKPiA+Pj4+Pj4+ICsgICAgLy8gQ29weSB0aGUgZnVsbHkgY29tcG9zZWQgZ2F0ZXdheSBwYXRo IGludG8KPiBpcGZzX2dhdGV3YXlfZmlsZS4KPiA+Pj4+Pj4+ICsgICAgaWYgKHNucHJpbnRmKGlw ZnNfZ2F0ZXdheV9maWxlLCBzaXplb2YoaXBmc19nYXRld2F5X2ZpbGUpLAo+ID4+Pj4+PiAiJXNn YXRld2F5IiwKPiA+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgIGlwZnNfZnVsbF9kYXRhX2ZvbGRl cikgPj0KPiA+PiBzaXplb2YoaXBmc19nYXRld2F5X2ZpbGUpKQo+ID4+Pj4gewo+ID4+Pj4+Pj4g KyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIElQRlMgZ2F0ZXdheSBmaWxl IHBhdGgKPiA+PiBleGNlZWRzCj4gPj4+Pj4+IHRoZSBtYXggcGF0aCBsZW5ndGggKCV6dSlcbiIs IHNpemVvZihpcGZzX2dhdGV3YXlfZmlsZSkpOwo+ID4+Pj4+Pj4gKyAgICAgICAgcmV0ID0gQVZF UlJPUihFTk9FTlQpOwo+ID4+Pj4+Pj4gKyAgICAgICAgZ290byBlcnI7Cj4gPj4+Pj4+PiArICAg IH0KPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICsgICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUg Z2F0ZXdheSBmaWxlLgo+ID4+Pj4+Pj4gKyAgICBnYXRld2F5X2ZpbGUgPSBhdl9mb3Blbl91dGY4 KGlwZnNfZ2F0ZXdheV9maWxlLCAiciIpOwo+ID4+Pj4+Pj4gKyAgICBpZiAoIWdhdGV3YXlfZmls ZSkgewo+ID4+Pj4+Pj4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIElQ RlMgZ2F0ZXdheSBmaWxlIChmdWxsCj4gdXJpOgo+ID4+Pj4gJXMpCj4gPj4+Pj4+IGRvZXNuJ3Qg ZXhpc3QuIElzIHRoZSBnYXRld2F5IGVuYWJsZWQ/XG4iLCBpcGZzX2dhdGV3YXlfZmlsZSk7Cj4g Pj4+Pj4+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT0VOVCk7Cj4gPj4+Pj4+PiArICAgICAg ICBnb3RvIGVycjsKPiA+Pj4+Pj4+ICsgICAgfQo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gKyAgICAv LyBSZWFkIGEgc2luZ2xlIGxpbmUgKGZnZXRzIHN0b3BzIGF0IG5ldyBsaW5lIG1hcmspLgo+ID4+ Pj4+Pj4gKyAgICBmZ2V0cyhjLT5nYXRld2F5X2J1ZmZlciwgc2l6ZW9mKGMtPmdhdGV3YXlfYnVm ZmVyKSAtIDEsCj4gPj4+Pj4+IGdhdGV3YXlfZmlsZSk7Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiAr ICAgIC8vIFJlcGxhY2UgdGhlIGxhc3QgY2hhciB3aXRoIFwwCj4gPj4+Pj4+PiArICAgIGMtPmdh dGV3YXlfYnVmZmVyW3NpemVvZihjLT5nYXRld2F5X2J1ZmZlcikgLSAxXSA9IDA7Cj4gPj4KPiA+ PiBCdHc6IGZnZXRzIG5vcm1hbGx5IHplcm8tdGVybWluYXRlcyB0aGUgYnVmZmVyIChpLmUuIGl0 IHJlYWRzIGF0IG1vc3QKPiA+PiAoc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSAtIDEpIC0gMSBj aGFyYWN0ZXJzIGZyb20gdGhlIHN0cmVhbSBhbmQgYWRkcwo+ID4+IGEgXDAuIEJ1dCBvbiBhIHJl YWQgZXJyb3IgaXQgZG9lc24ndCBkbyB0aGlzLCBpbnN0ZWFkIHRoZSBjb250ZW50cyBvZgo+ID4+ IHRoZSBidWZmZXIgYXJlIGluZGV0ZXJtaW5hdGUgYW5kIHNvIHNob3VsZCBub3QgYmUgdXNlZC4g QWRkaW5nIGEgemVybyBhdAo+ID4+IHRoZSB2ZXJ5IGVuZCBvZiBnYXRld2F5X2J1ZmZlciBkb2Vz IG5vdCBoZWxwIHRvIGVuZm9yY2UgdGhpcy4KPiA+Cj4gPgo+ID4+IGZnZXRzIHJldHVybnMgTlVM TCBvbiByZWFkIGVycm9yIGFuZCBpZiBub3RoaW5nIGNvdWxkIGJlIHJlYWQgZHVlIHRvCj4gPj4g aW1tZWRpYXRlIEVPRjsgc28geW91IHNob3VsZCBjaGVjayBmb3IgdGhhdC4KPiA+PiAoQnR3OiBB IHByb3RvY29sJ3MgY29udGV4dCBpcyB6ZXJvZWQgaW5pdGlhbGx5LCBzbwo+ID4+IGMtPmdhdGV3 YXlfYnVmZmVyW3NpemVvZihjLT5nYXRld2F5X2J1ZmZlcikgLSAxXSBpcyBhbHJlYWR5IHplcm8s Cj4gPj4gYmVjYXVzZSBubyBvbmUgZXZlciB3cm90ZSBhbnl0aGluZyBlbHNlIHRoZXJlLikKPiA+ Pgo+ID4KPiA+IE5pY2Ugb25lISBOb2JvZHkgY2F1Z2h0IHRoYXQgYmVmb3JlLgo+ID4gU28gY2hl Y2tpbmcgb24gTlVMTCBmb3IgZmdldHMgYW5kIHJlbW92aW5nIHRoZSBsaW5lIHRvIGFkZCBhIDAg YXQgdGhlIGVuZAo+ID4gaXMgdGhlIGFwcHJvcHJpYXRlIGZpeCBoZXJlIEkgYXNzdW1lLgo+ID4K Pgo+IFllcy4KPgo+ID4gQ2hhbmdlZCB0byB3aGF0IEkgYXNzdW1lZC4gUGxlYXNlIGNvcnJlY3Qg bWUgaWYgSSdtIHdyb25nLgo+ID4KPiA+Cj4gPj4KPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICsgICAg Ly8gUmVwbGFjZSBmaXJzdCBvY2N1cmVuY2Ugb2YgZW5kIG9mIGxpbmUgd2l0aCBcMAo+ID4+Pj4+ Pj4gKyAgICBjLT5nYXRld2F5X2J1ZmZlcltzdHJjc3BuKGMtPmdhdGV3YXlfYnVmZmVyLCAiXHIi KV0gPSAwOwo+ID4+Pj4+Pj4gKyAgICBjLT5nYXRld2F5X2J1ZmZlcltzdHJjc3BuKGMtPmdhdGV3 YXlfYnVmZmVyLCAiXG4iKV0gPSAwOwo+ID4+Pj4+Pgo+ID4+Pj4+PiBJZiB0aGUgYnVmZmVyIGNv bnRhaW5zIGJvdGggXHIgYW5kIFxuIGFuZCB0aGUgZmlyc3QgXG4gcHJlY2VkZXMgdGhlCj4gPj4+ Pj4+IGZpcnN0IFxyLCB0aGVuIHRoZSBhYm92ZSB6ZXJvZXMgYm90aCB0aGUgZmlyc3QgXHIgYW5k IHRoZSBmaXJzdCBcbi4KPiBJZgo+ID4+Pj4+PiBpdCBpcyBlbm91Z2ggdG8gb25seSB6ZXJvIHRo ZSBmaXJzdCBuZXdsaW5lLCB0aGVuIHRoaXMgY2FuIGJlCj4gPj4gc2ltcGxpZmllZAo+ID4+Pj4+ PiB0byAiYy0+Z2F0ZXdheV9idWZmZXJbc3RyY3NwbihjLT5nYXRld2F5X2J1ZmZlciwgIlxyXG4i KV0gPSAwOyIuCj4gPj4+Pj4+Cj4gPj4+Pj4KPiA+Pj4+PiBJdCB1c2VkIHRvIGJlIGluIHlvdXIg c3VnZ2VzdGVkIHNpbXBsaWZpZWQgYXBwcm9hY2guCj4gPj4+Pj4gSXQgd2FzIHRoZW4gc3VnZ2Vz dGVkIHRvIHNwbGl0IGl0IGJlY2F1c2Ugb2YgbmV3IGxpbmUgZGlmZmVyZW5jZXMKPiA+Pj4+PiBv biBkaWZmZXJlbnQgcGxhdGZvcm1zLiBUaGlzIHdhcyBzdXBwb3NlZCB0byBjYXRjaCAiZXZlcnl0 aGluZyIuCj4gPj4+Pj4KPiA+Pj4+PiBJIHByZWZlciB0byBrZWVwIHRoaXMgYXMtaXMgbm93Lgo+ ID4+Pj4+Cj4gPj4+Pgo+ID4+Pj4gSXMgaXQgaW50ZW5kZWQgdG8gdXNlIHdoYXQgaXMgYmV0d2Vl biB0aGUgZmlyc3QgXG4gYW5kIHRoZSBmaXJzdCBccgo+ID4+Pj4gbGF0ZXJvbiBhbHRob3VnaCB0 aGlzIGRhdGEgd2lsbCBiZSBhZnRlciB0aGUgJ1wwJyBhZnRlciB0aGlzPyBUaGF0Cj4gd291bGQK PiA+Pj4+IGJlIHZlcnkgd2VpcmQuCj4gPj4+Pgo+ID4+Pgo+ID4+PiBZb3UgaGF2ZSB0byBlbGFi b3JhdGUgb24gdGhhdCBhcyB0aGF0IHNvdW5kcyByZWFsbHkgd3JvbmcgdG8gbWUuCj4gPj4+Cj4g Pj4KPiA+PiBjLT5nYXRld2F5X2J1ZmZlcltzdHJjc3BuKGMtPmdhdGV3YXlfYnVmZmVyLCAiXHJc biIpXSA9IDA7Cj4gPj4gb3ZlcndyaXRlcyB0aGUgZmlyc3QgXHIgb3IgXG4gKHdoaWNoZXZlciBp cyBmaXJzdCkgd2l0aCAnXDAnIChpZiBhbnk7Cj4gPj4gb3RoZXJ3aXNlIGl0IG92ZXJ3cml0ZXMg dGhlIHRlcm1pbmF0aW5nIFwwIHdpdGggXDAuCj4gPj4KPiA+PiBjLT5nYXRld2F5X2J1ZmZlcltz dHJjc3BuKGMtPmdhdGV3YXlfYnVmZmVyLCAiXHIiKV0gPSAwOwo+ID4+IGMtPmdhdGV3YXlfYnVm ZmVyW3N0cmNzcG4oYy0+Z2F0ZXdheV9idWZmZXIsICJcbiIpXSA9IDA7Cj4gPj4gYWxzbyBkb2Vz IHRoaXMsIGJ1dCBpbiBjYXNlIHRoYXQgdGhlIHN0cmluZyBvcmlnaW5hbGx5IGNvbnRhaW5lZCBi b3RoIGEKPiA+PiBcciBhbmQgYSBcbiB3aXRoIHRoZSBmaXJzdCBcbiBwcmVjZWRpbmcgdGhlIGZp cnN0IFxyIGl0IHdvdWxkIGFsc28gemVybwo+ID4+IHRoZSBmaXJzdCBccjsgdGhpcyBwb3NpdGlv biBpcyBhZnRlciB0aGUgZmlyc3QgdGVybWluYXRpbmcgXDAgKHRob3NlIGF0Cj4gPj4gdGhlIHBv c2l0aW9uIHdoZXJlIHRoZSBmaXJzdCBcbiB3YXMpLCBzbyBpdCBhcHBlYXJlZCB0byBtZSB0aGF0 IHlvdQo+ID4+IGludGVuZGVkIHRvIHVzZSB3aGF0IGlzIGFmdGVyIHRoZSBmaXJzdCBcMC4gQmVj YXVzZSB0aGF0IGlzIHRoZSBvbmx5Cj4gPj4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBhcHByb2Fj aCB3aXRoIHR3byBjYWxscyB0byBzdHJjc3BuIGFuZCB0aGUgb25lCj4gPj4gd2l0aCBvbmUgY2Fs bCB0byBzdHJjc3BuLgo+ID4+Cj4gPj4gQnV0IHRoZW4gSSByZWFkIHRoYXQgdGhpcyBoYXMgYmVl biBzdWdnZXN0ZWQgdG8geW91IGFuZCBmb3VuZCB0aGUgbWFpbAo+ID4+IChodHRwczovL2ZmbXBl Zy5vcmcvcGlwZXJtYWlsL2ZmbXBlZy1kZXZlbC8yMDIyLUZlYnJ1YXJ5LzI5MjU5MC5odG1sKQo+ ID4+IHRoaXMgcmVmZXJyZWQgdG8uIFRoZXJlIHNlZW1zIHRvIGJlIGEgbWlzdW5kZXJzdGFuZGlu ZyBpbiB0aGUgc2VtYW50aWNzCj4gPj4gb2Ygc3RyY3NwbiAobW9zdCBsaWtlbHkgYSBjb25mdXNp b24gd2l0aCBzdHJzdHIpOgo+ID4+IHN0cmNzcG4oYy0+Z2F0ZXdheV9idWZmZXIsICJcclxuIikg d29ya3Mgd2l0aCBzaW5nbGUgXHIgYW5kIHNpbmdsZSBcbiwKPiA+PiB0aGVyZSBuZWVkIG5vdCBi ZSBhIHNpbmdsZSAiXHJcbiIgc3Vic3RyaW5nLiBCb3RoIG1ldGhvZHMgd291bGQgcHJvZHVjZQo+ ID4+IHN0cmluZ3MgdGhhdCBjb21wYXJlIGVxdWFsIGFjY29yZGluZyB0byBzdHJjbXAoKS4KPiA+ Pgo+ID4+Cj4gPiBUaGFuayB5b3UgZm9yIHlvdXIgZWxhYm9yYXRlIGV4cGxhbmF0aW9uIGhlcmUh Cj4gPiBCdXQgbm93IEknbSBub3Qgc3VyZSB3aGF0IHRoZSByZXNvbHV0aW9uIC0gaWYgYW55IC0g c2hvdWxkIGJlPwo+ID4KPgo+IEp1c3QgdXNlIHN0cmNzcG4oYy0+Z2F0ZXdheV9idWZmZXIsICJc clxuIikuIEl0IHdvcmtzLgo+Cj4gPgo+ID4gU28gaSBsZWF2ZSBpdCBhcyAiJXp1Ii4gQ2hlY2su Cj4gPiBJIGRpZCBhbHNvIGdyZXAgb24gdGhlIGVudGlyZSBmZm1wZWcgc291cmNlIGZvciB0aGlz LiBCb3RoIHNlZW1zIHRvIGJlCj4gdXNlZAo+ID4gaW4gdmFyaW91cyBwbGFjZXMgdGhvdWdoIGdy YW50ZWQsIFNJWkVfU1BFQ0lGSUVSIGlzIHVzZWQgbW9yZS4KPiA+Cj4KPiBCdHc6ICV6dSB1c2Fn ZSBpbiB0aGUgdmFhcGkgZmlsZXMgaXMgZmluZSBnaXZlbiB0aGF0IHRoaXMgQVBJIGlzIG5vdAo+ IGF2YWlsYWJsZSBvbiBXaW5kb3dzIHNvIHRoYXQgbGltaXRhdGlvbnMgb2YgV2luZG93cycgbGli YyBhcmUKPiBpcnJlbGV2YW50LiBJZiB3ZSBkaXNjb3VudCB0aGVzZSwgdXNhZ2UgYmVjb21lcyB2 ZXJ5IGxvb3BzaWRlZC4KPgo+ID4+Cj4gPj4+IC0gRGlyZWN0bHkgY29udHJhZGljdHMgZWFybGll ciBmZWVkYmFjawo+ID4+Cj4gPj4gSSBkb24ndCBhZ3JlZSB3aXRoIHRoYXQgZ2l2ZW4gdGhhdCBT SVpFX1NQRUNJRklFUiBpcyBiYXNpY2FsbHkganVzdCBhCj4gPj4gd3JhcHBlciBhcm91bmQgenUu Cj4gPj4KPiA+Cj4gPiBNeSBtaXN0YWtlLCBpdCBkb2Vzbid0IGNvbnRyYWRpY3QgaXQuIFNvcnJ5 IGZvciB0aGF0Lgo+ID4KPiA+Pgo+ID4+PiAtIEFuZCBkdWUgdG8gdGhlIGFib3ZlIGdpdmVzIG1l IGEgZmVlbGluZyBvZiB3YXN0aW5nIHRpbWUKPiA+Pj4gLSBGaW5lIHRvIGNoYW5nZSBpdCBidXQg SSBob3BlIHRoZXJlIGlzbid0IGFub3RoZXIgcGVyc29uIHBvcHBpbmcgdXAKPiA+PiB3aXRoIGEK PiA+Pj4gcXVlc3Rpb24gdG8gY2hhbmdlIGl0IHlldCBhZ2Fpbi4uLi4KPiA+Pj4KPiA+Pj4KPiA+ Pj4+Pgo+ID4+Pj4+Cj4gPj4+Pj4+PiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwp Owo+ID4+Pj4+Pj4gKyAgICAgICAgICAgIGdvdG8gZXJyOwo+ID4+Pj4+Pj4gKyAgICAgICAgfQo+ ID4+Pj4+Pj4gKyAgICB9IGVsc2Ugewo+ID4+Pj4+Pj4gKyAgICAgICAgLy8gUG9wdWxhdGUgdGhl IElQRlMgZ2F0ZXdheSBpZiB3ZSBoYXZlIGFueS4KPiA+Pj4+Pj4+ICsgICAgICAgIC8vIElmIG5v dCwgaW5mb3JtIHRoZSB1c2VyIGhvdyB0byBwcm9wZXJseSBzZXQgb25lLgo+ID4+Pj4+Pj4gKyAg ICAgICAgcmV0ID0gcG9wdWxhdGVfaXBmc19nYXRld2F5KGgpOwo+ID4+Pj4+Pj4gKwo+ID4+Pj4+ Pj4gKyAgICAgICAgaWYgKHJldCA8IDEpIHsKPiA+Pj4+Pj4+ICsgICAgICAgICAgICAvLyBXZSBm YWxsYmFjayBvbiBkd2ViLmxpbmsgKG1hbmFnZWQgYnkgUHJvdG9jb2wKPiBMYWJzKS4KPiA+Pj4+ Pj4+ICsgICAgICAgICAgICBzbnByaW50ZihjLT5nYXRld2F5X2J1ZmZlciwKPiBzaXplb2YoYy0+ Z2F0ZXdheV9idWZmZXIpLCAiCj4gPj4+Pj4+IGh0dHBzOi8vZHdlYi5saW5rIik7Cj4gPj4+Pj4+ PiArCj4gPj4+Pj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiSVBG UyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUKPiA+Pj4+Pj4gcnVubmluZy4gWW914oCZcmUgbm93IHVz aW5nIHRoZSBwdWJsaWMgZ2F0ZXdheSBhdCBkd2ViLmxpbmsuXG4iKTsKPiA+Pj4+Pj4+ICsgICAg ICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0lORk8sICJJbnN0YWxsaW5nIElQRlMgbG9jYWxseSBp cwo+ID4+Pj4+PiByZWNvbW1lbmRlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJp bGl0eSwgYW5kIG5vdCBzaGFyZQo+IGFsbAo+ID4+Pj4geW91cgo+ID4+Pj4+PiBhY3Rpdml0eSB3 aXRoIGEgc2luZ2xlIElQRlMgZ2F0ZXdheS5cbiIpOwo+ID4+Pj4+Pj4gKyAgICAgICAgICAgIGF2 X2xvZyhoLCBBVl9MT0dfSU5GTywgIlRoZXJlIGFyZSBtdWx0aXBsZSBvcHRpb25zIHRvCj4gPj4+ Pj4+IGRlZmluZSB0aGlzIGdhdGV3YXkuXG4iKTsKPiA+Pj4+Pj4+ICsgICAgICAgICAgICBhdl9s b2coaCwgQVZfTE9HX0lORk8sICIxLiBDYWxsIGZmbXBlZyB3aXRoIGEgZ2F0ZXdheQo+ID4+Pj4+ PiBwYXJhbSwgd2l0aG91dCBhIHRyYWlsaW5nIHNsYXNoOiAtZ2F0ZXdheSA8dXJsPi5cbiIpOwo+ ID4+Pj4+Pj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIjIuIERlZmluZSBh biAkSVBGU19HQVRFV0FZCj4gPj4+Pj4+IGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggdGhlIGZ1 bGwgSFRUUCBVUkwgdG8gdGhlIGdhdGV3YXkgd2l0aG91dAo+ID4+Pj4gdHJhaWxpbmcKPiA+Pj4+ Pj4gZm9yd2FyZCBzbGFzaC5cbiIpOwo+ID4+Pj4+Pj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBB Vl9MT0dfSU5GTywgIjMuIERlZmluZSBhbiAkSVBGU19QQVRICj4gPj4+PiBlbnZpcm9ubWVudAo+ ID4+Pj4+PiB2YXJpYWJsZSBhbmQgcG9pbnQgaXQgdG8gdGhlIElQRlMgZGF0YSBwYXRoIC0gdGhp cyBpcyB0eXBpY2FsbHkKPiA+Pj4+IH4vLmlwZnNcbiIpOwo+ID4+Pj4+Pgo+ID4+Pj4+PiBBbGwg dGhvc2UgQVZfTE9HX0lORk8gY2FuIGJlIGNvbWJpbmVkIHdoaWNoIGhhcyB0aGUgYWR2YW50YWdl IHRoYXQKPiB0aGUKPiA+Pj4+Pj4gbG9ncyBjYW4ndCBiZSB0ZWFyZWQgYXBhcnQgKHdoaWNoIHRo ZXkgY2FuIG5vdyBpZiBzb21ldGhpbmcgZWxzZQo+IGxvZ3MKPiA+PiBhdAo+ID4+Pj4+PiB0aGUg c2FtZSB0aW1lKTsgZnVydGhlcm1vcmUsIHRoaXMgd291bGQgYWxzbyBkZWNyZWFzZSBjb2Rlc2l6 ZS4KPiA+Pj4+Pj4KPiA+Pj4+Pgo+ID4+Pj4+IERvIHlvdSBoYXZlIGFuIGV4YW1wbGUgb2Ygd2hl cmUgdGhhdCdzIGhhcHBlbmluZz8KPiA+Pj4+Pgo+ID4+Pj4KPiA+Pj4+IEl0IGNhbiBoYXBwZW4g YW55IHRpbWUgeW91IGhhdmUgbXVsdGlwbGUgdGhyZWFkcyB1c2luZyBhdl9sb2cgYXQgdGhlCj4g Pj4+PiBzYW1lIHRpbWUuIEdpdmVuIHRoYXQgeW91ciBzdGF0ZW1lbnRzIGFyZSBzdXBwb3NlZCB0 byBiZSBmdWxsIGxpbmVzLAo+IGl0Cj4gPj4+PiBpcyBub3QgdGhhdCBiYWQgaWYgaXQgaGFwcGVu cyBoZXJlLCBidXQgaXQgaXMgbmV2ZXJ0aGVsZXNzIHN1Ym9wdGltYWwuCj4gPj4+Pgo+ID4+Pgo+ ID4+PiBJIG1lYW50IGEgbXVsdGktbGluZSBhdl9sb2cgZXhhbXBsZSA7KSBCdXQgeWVhaCwgSSBn ZXQgaG93IHRocmVhZGluZwo+ID4+IGNvdWxkCj4gPj4+IHNjcmV3IHRoaXMgdXAuCj4gPj4+Cj4g Pj4KPiA+PiBJIG1lYW50IHNvbWV0aGluZyBsaWtlOgo+ID4+IGF2X2xvZyhoLCBBVl9MT0dfSU5G TywgIkluc3RhbGxpbmcgSVBGUyBsb2NhbGx5IGlzIHJlY29tbWVuZGVkIHRvCj4gPj4gaW1wcm92 ZSBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGFuZCBub3Qgc2hhcmUgYWxsIHlvdXIgYWN0 aXZpdHkKPiA+PiB3aXRoIGEgc2luZ2xlIElQRlMgZ2F0ZXdheS5cbiIKPiA+PiAgICAgICAgIlRo ZXJlIGFyZSBtdWx0aXBsZSBvcHRpb25zIHRvIGRlZmluZSB0aGlzIGdhdGV3YXkuXG4iCj4gPj4g ICAgICAgICIxLiBDYWxsIGZmbXBlZyB3aXRoIGEgZ2F0ZXdheSBwYXJhbSwgd2l0aG91dCBhIHRy YWlsaW5nIHNsYXNoOgo+ID4+IC1nYXRld2F5IDx1cmw+LlxuIgo+ID4+ICAgICAgICAiMi4gRGVm aW5lIGFuICRJUEZTX0dBVEVXQVkgZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCB0aGUgZnVsbAo+ ID4+IEhUVFAgVVJMIHRvIHRoZSBnYXRld2F5IHdpdGhvdXQgdHJhaWxpbmcgZm9yd2FyZCBzbGFz aC5cbiIKPiA+PiAgICAgICAgIjMuIERlZmluZSBhbiAkSVBGU19QQVRIIGVudmlyb25tZW50IHZh cmlhYmxlIGFuZCBwb2ludCBpdCB0byB0aGUKPiA+PiBJUEZTIGRhdGEgcGF0aCAtIHRoaXMgaXMg dHlwaWNhbGx5IH4vLmlwZnNcbiIpOwo+ID4+Cj4gPj4gKFRoZXNlIGxpbmVzIGFyZSBhY3R1YWxs eSB3YXkgdG9vIGxvbmcuKQo+ID4+Cj4gPgo+ID4gRml4ZWQgYXMgbXVsdGlsaW5lLgo+ID4gSSBk byBsaWtlIHRvIGtlZXAgdGhlIGNvbnRlbnQgb2YgdGhlIGxpbmVzIHRob3VnaC4KPgo+IEkgZGlk IG5vdCBzYXkgdGhhdCB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIGFjdHVhbCBjb250ZW50IG9mIHRo ZSBsaW5lczsKPiB5b3UganVzdCBzaG91bGQgc3BsaXQgaXQgaW50byBtb3JlIGxpbmVzIGluIHRo ZSBzb3VyY2UgY29kZSAobm8gbmVlZCB0bwo+IGFkZCBhbnkgbW9yZSBuZXdsaW5lcyBpbiB0aGUg YWN0dWFsIHN0cmluZyEpIGluIG9yZGVyIHRvIG1vcmUgYWRoZXJlIHRvCj4gdGhlIChzb2Z0KSA4 MCBjaGFyYWN0ZXIgbGluZSBsaW1pdC4KPgoKOykKCkkgY2hhbmdlZCBpdCB0byBiZSBtb3JlIGlu IGxpbmUgd2l0aCB0aGUgODAgY2hhcmFjdGVyIGxpbWl0LiBTb21lIGxpbmVzIGFyZQpzdGlsbCBv dXRzaWRlIGl0IHRob3VnaC4KQWdhaW4gZm9yIHJlYWRhYmlsaXR5LCB0aGlzIGlzbid0IHdvcmtp bmcgaW4gaXRzIGZhdm9yLi4uIEJ1dCB0aGVuIGFnYWluLAppdCdzIG9ubHkgYW5ub3lpbmcgd2hl biB5b3UgY2hhbmdlIHRoZSB0ZXh0LgpTb21ldGhpbmcgdGhhdCBzaG91bGRuJ3QgYmUgbmVlZGVk IGFueW1vcmUgYXMgdGhhdCdzIGFib3V0IGZpbmFsLgoKVGhhbmsgeW91IHNvIG11Y2ggZm9yIHlv dXIgdGltZSBhbmQgaGVscCEKSSdsbCBzZW5kIFYxMSBvZiB0aGlzIHBhdGNoIHJvdW5kIHNob3J0 bHkhCgoKPgo+IC0gQW5kcmVhcwo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBl Zy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpU byB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJl cXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K