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 A7598427AA for ; Wed, 30 Mar 2022 13:57:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 30B1668B24B; Wed, 30 Mar 2022 16:57:37 +0300 (EEST) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-oln040092070072.outbound.protection.outlook.com [40.92.70.72]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D2AEB68A464 for ; Wed, 30 Mar 2022 16:57:30 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KmvKBV36EAO+3RVUY4c6AARAQd2IUwwU9DkyX3hkSajF0Byy6NenlnN4DfwCx113p1q2IB36lnFs/uFxzUg6Wz3pSbZSjDu5w1okYOmIT40AVnElWqPAo799Hw0jVieT/Ad7fzszMahDt/cc5sx6PN/7N+KXusculXf16cCOkVkpkrOQgPtBLUuZyqrgP1s9hW87OP8TQiz1Pf2n9qqCaBmpsHfEO36//RjwAaKd9dHicI5I4cA769fLnU9zGrpbz0EHl3cBMB2TdEpz77x6em/jRbW/BF/HTMVJRvsaSI9NmJm9ZopAgR2b5i6dFoaATjsAGqr+QPJebvAsQN+ONw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=na+y85/er9VCiq2Kc2Cf1fLoY2yDVDLcrjE5tqlgbDE=; b=Ti+ls4FXc8D9WZ8/H8BMemI1OGwkawtrZKjpgDNiHE0yaqjdt0hUz9ptZWNzuDqzjorZ8QPxotJZ88RZC8ecO/KqMLJvGDj8rGm16CbshhRYh+yYhFj4ARJQwA8LaI+p9ikiIB6TWcTia0nLsZVgThOUP3Hh4XeekMSJ2Y2S19OKCqPKapE3aBT+RKFXXSDBSPT3puTnILzBxnXjgmXB/9r7VcpHXRNU8CLSFdGOpbhGuCNogyB/Scpe4HqDJ8et0gJwhMl5rOudhFqcCwQPexqA/OAV0P5mfrvmug+6mTEi/VPggV87ebigssXKa3Vvma89gpRqEdfl3zoOrRyPXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=na+y85/er9VCiq2Kc2Cf1fLoY2yDVDLcrjE5tqlgbDE=; b=NKzHTLZ7mdcPQr+qBjGLtBP7/BV67ly9d3jmpXmAhG8hGlZ/z0SbzsCqgrPU7vankVy18q5OI3xm+yGRz9O5kLXgDYR43beqLbA4Cvds9KGdMvxKbm8VgkHxJwr2jaMD56MZ6jpJSm2uwlFHPXJaA7ckLt+A+VK7DROLEeuN4dCZEXRRhe3V0l6PQ3IJFXpeURL4x8sL93uydWzCpiNy/3jKituCLMS/B8TzeO/ShNRZMRv1C7uobLDt54O6jUCgw6zQuQFHJI5AoxBpVMCUud2xehZLofjdd9ZtLT42l25mA4T4O3R+s/db8uM49qzYp8iqr2w33jmwQsNlt/JRsg== Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) by DB8PR01MB5913.eurprd01.prod.exchangelabs.com (2603:10a6:10:e2::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.22; Wed, 30 Mar 2022 13:57:20 +0000 Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8]) by AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8%3]) with mapi id 15.20.5102.022; Wed, 30 Mar 2022 13:57:20 +0000 Message-ID: Date: Wed, 30 Mar 2022 15:57:19 +0200 Content-Language: en-US To: Mark Gaiser , FFmpeg development discussions and patches References: <20220330114039.69510-1-markg85@gmail.com> <20220330114039.69510-2-markg85@gmail.com> From: Andreas Rheinhardt In-Reply-To: X-TMN: [/BpbfJwf00iZqou0abKZmeL+sVBhVrzL] X-ClientProxiedBy: AM6P193CA0078.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:88::19) To AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 646e6ce0-c4c3-45c4-95a5-08da12553560 X-MS-TrafficTypeDiagnostic: DB8PR01MB5913:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: f7Ct/BpAoPcjQ6eObMTaeywQvo67mii/RxYYuwQko/XGqChzqYQjieEeNbGSI6ESqRK8QUCexqX41tLxRe9snkam/ZxP/s81Y3KrWvBfsQJ5LWGrWwIE7W5W1AyKhIDZjIZaHDYcGdVSM49s6YMIY0EoRI/KQavi4Z7pxULO4000IkxhpNQryvW0UM48b/dCEpzoxGVx7Qoxj5NHmNYXJsuehnTFK4m5s3CZCeLksNmNBQzriLsZTgNFoLc2trBr85JwzXBOtv3/70G/ABDHSAVAb6pdscJa/F8OsgQHmRTRGlU/pmnsoKBYSZmhzcnQWLl7020MNEz4CNrPeKUEpIDNS0zBX4Sr9ZK1UV7c5RX0BU4S8rXAFpHyCtq9gK2gwKjnxRDCjEvQnr+FZ5QZrwbJkAr7YwfnIwhaAw8+cQqYx2+nUqg9Kfw+tCozpCQnjRcAVL/lIS+KwOT38JmajemrsyNE0TDM9dJmqONs+cfAiLC31IQKrXeTnrL/kwppA8eAV7BUAC2eNE5CiNZUYRrUYYOF4WA4xLFBajDP36x5tnLER5r3xxD2Mq9xGxhdzIQfXfVMcQOhXMbEmSnFQFDHejj+PtbI8thIv/UnYRUnTwYPkiLRfWHl8GzTm7Yd X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QVZQc1hYTUV4aXFKNzhxVmVrd0o2M2g0Z1dJNlFQcndSSW1ZZjJ2VHlvUWRE?= =?utf-8?B?VE9JZ1dRMzkrYXdnWGV1bUxGTVhoSDZnanJHNHhlRVNiQlhlNWgwa2lTYTZn?= =?utf-8?B?cXpDNklFcWVEWndEbUk1ekpESGF0NGtIRGFiYVRDTWpzeS9YcWJONGQ3S3ZO?= =?utf-8?B?VmdaSFhRbEFQakV1YUJtQUZUdk05RmFUV1EwL3FzU3RKT1BPemJVeG9PY0gv?= =?utf-8?B?TlhYelFmcXg1TDJGcUFXS25ldmN6Z3ZnN3FtNnd6Ym5iUTRhWVlQWDR3YTFG?= =?utf-8?B?eTNTY1ZUY25Qc29oMXBKMEZPTW95dzhEU2VCWVo4dU1TUTl0TmdTTGpNekVz?= =?utf-8?B?UktEV3NPc1lPVGp4Y1JsVWs1bWdaRmp5QUE4TWZFb0E1VTVHUklCTkxBdW8y?= =?utf-8?B?YlJhYnovN3JleGw5d09iSkVQNG43UEJGaGthdngzZnNVK0R2ODQ1VCs2U0tJ?= =?utf-8?B?bGlDWVpybHVnUlk3YjZ3eENZSFk0TFNyZ2krWVFXZlZjcytKcjF0RjBudGtr?= =?utf-8?B?ckdPY0w5UGZ1RVlpR3lEbEZSNFA2ZlNYak0zUUFSMS8yQkZmWjlWajVRUlVr?= =?utf-8?B?c1V0VUU5VW9KN1NOcXY5K0NZRmFHZmtneGUzeVpmUjFtWUJsL1loY1V4MlJX?= =?utf-8?B?NmIrK3dGbUEzZjVoajVGSHp5ZzZySE5PQkFySGR4djBtK1hyMWViZEhqRkRB?= =?utf-8?B?RUZjSFk5UktIMjF3cDduM2RqUlhBRUVjMTRueVBFVTB1clFRQ0EyQmRSRDlX?= =?utf-8?B?VHdRVy80WDJKVW04YW9sWDF0VDlOeHR4eDJtY0FPTzFHR0ZGdnlheG1zTkhT?= =?utf-8?B?dXRMWHY1Vzk3VGJkS0FZdGo4aFhNTjVscTJYWW9HNjA4eXRkMVR1UUt4eGpr?= =?utf-8?B?MXgyME0vT3h1STMyQkxrc1pRM1VLcExodS92aXlXWTV1dkpoMEJDY2RHNlBa?= =?utf-8?B?T0tiakJmRzBkR2pHSGc1ditsR2RLS0E4aXlxWFFNbFowZGNhOVBQUWk0YUlM?= =?utf-8?B?YnFIdlhCdmoyalZBMWtlQXVWeTBnUG8zYmluTHVGaklEWTgyRld3NEtGc3Bq?= =?utf-8?B?OXFLN1FUUGlMUWpMZHdRZ1J3a2RKaUFodWhrY3R2TkFRdG80UTlRS0N6Y0dh?= =?utf-8?B?ZnNkcEt3TVRBSXZIWkNoWTJMK3lLSGtseEx1TC9MZWlVWFlaMUE0ZGt5Vlhx?= =?utf-8?B?ZFY1WmxoL2NubEIrclNDQkovSHgvRVZjRzdaUm8rMDZNcDR4TWphU1ZST0FL?= =?utf-8?B?aUMzdk5mRjRFV1k5c2QxM2luYkZTNTM5RGJSL2NQZ2Z3RldlamFaMUg4bmZm?= =?utf-8?B?b1lKSHFYSFZ4ZzRKQmR5WEVqUTNRdVg1ZHFCdFdTTEgrVEJQMWh3NEJQdGE5?= =?utf-8?B?bTE3U1lWM0xva1dzcEY1TnZMZlJYM0NGRG5yM3BGUFQ0KzUrNkZvOG5nRGFx?= =?utf-8?B?ZXlrNXlLQlNKSWNjOHpCVjlGZDFhQ3o2blpiV2ZKeGd3SVZwSzQyNDZtWTRI?= =?utf-8?B?aUcyMEVTc0QxcUpKL3JycXlxV2lybFByMkNQTWZ2aDBQWkd1cnBFVmQ4dkRN?= =?utf-8?B?VzV3TjEwZkNKNWw1YkF4Y3E0dzFyK3IrWkFxS1pPMHVIa09CeVRUWmhyTHhJ?= =?utf-8?B?MEFtNjNGRXJVRkt6M1MrWnV4K28vYVd0N0daRlR2MG91b0JNK05BYmY5WXlQ?= =?utf-8?B?Y0VEazZlVVlrYUNZNFpzTXBjVEdEM0ZCWHJkZy9ZSUFFbFl4RmhTK1l4dUU3?= =?utf-8?B?MlFoWXJ1T1VzU0crbUhYQXFWR0JlU1BpVmhQdWpEdVBpNW1wNm1Mc3MvZVJR?= =?utf-8?B?QUN2WFZGS085TElPb3hJOUxla2hSZ1pCUk9ERDM1Ti9aREQxVnV4NEJDa0lo?= =?utf-8?B?UkRVb3Y5UmlncDNod1NxL3hCZ1RiWHJiSndhZ3VpRFRsNEtGazNkdDRLbXpW?= =?utf-8?Q?e8CfSe4+H4yyjiD8imE4dLYzi/yip821?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 646e6ce0-c4c3-45c4-95a5-08da12553560 X-MS-Exchange-CrossTenant-AuthSource: AS1PR01MB9564.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Mar 2022 13:57:20.5419 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR01MB5913 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 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: TWFyayBHYWlzZXI6Cj4gT24gV2VkLCBNYXIgMzAsIDIwMjIgYXQgMjoyMSBQTSBBbmRyZWFzIFJo ZWluaGFyZHQgPAo+IGFuZHJlYXMucmhlaW5oYXJkdEBvdXRsb29rLmNvbT4gd3JvdGU6Cj4gCj4+ IE1hcmsgR2Fpc2VyOgo+Pj4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yOgo+Pj4gLSBmZnBs YXkgaXBmczovLzxjaWQ+Cj4+PiAtIGZmcGxheSBpcG5zOi8vPGNpZD4KPj4+Cj4+PiBJUEZTIGRh dGEgY2FuIGJlIHBsYXllZCBmcm9tIHNvIGNhbGxlZCAiaXBmcyBnYXRld2F5cyIuCj4+PiBBIGdh dGV3YXkgaXMgZXNzZW50aWFsbHkgYSB3ZWJzZXJ2ZXIgdGhhdCBnaXZlcyBhY2Nlc3MgdG8gdGhl Cj4+PiBkaXN0cmlidXRlZCBJUEZTIG5ldHdvcmsuCj4+Pgo+Pj4gVGhpcyBwcm90b2NvbCBzdXBw b3J0IChpcGZzIGFuZCBpcG5zKSB0aGVyZWZvcmUgdHJhbnNsYXRlcwo+Pj4gaXBmczovLyBhbmQg aXBuczovLyB0byBhIGh0dHA6Ly8gdXJsLiBUaGlzIHJlc3VsdGluZyB1cmwgaXMKPj4+IHRoZW4g aGFuZGxlZCBieSB0aGUgaHR0cCBwcm90b2NvbC4gSXQgY291bGQgYWxzbyBiZSBodHRwcwo+Pj4g ZGVwZW5kaW5nIG9uIHRoZSBnYXRld2F5IHByb3ZpZGVkLgo+Pj4KPj4+IFRvIHVzZSB0aGlzIHBy b3RvY29sLCBhIGdhdGV3YXkgbXVzdCBiZSBwcm92aWRlZC4KPj4+IElmIHlvdSBkbyBub3RoaW5n IGl0IHdpbGwgdHJ5IHRvIGZpbmQgaXQgaW4geW91cgo+Pj4gJEhPTUUvLmlwZnMvZ2F0ZXdheSBm aWxlLiBUaGUgd2F5cyB0byBzZXQgaXQgbWFudWFsbHkgYXJlOgo+Pj4gMS4gRGVmaW5lIGEgLWdh dGV3YXkgPHVybD4gdG8gdGhlIGdhdGV3YXkuCj4+PiAyLiBEZWZpbmUgJElQRlNfR0FURVdBWSB3 aXRoIHRoZSBmdWxsIGh0dHAgbGluayB0byB0aGUgZ2F0ZXdheS4KPj4+IDMuIERlZmluZSAkSVBG U19QQVRIIGFuZCBwb2ludCBpdCB0byB0aGUgSVBGUyBkYXRhIHBhdGguCj4+PiA0LiBIYXZlIElQ RlMgcnVubmluZyBpbiB5b3VyIGxvY2FsIHVzZXIgZm9sZGVyICh1bmRlciAkSE9NRS8uaXBmcyku Cj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogTWFyayBHYWlzZXIgPG1hcmtnODVAZ21haWwuY29tPgo+ Pj4gLS0tCj4+PiAgY29uZmlndXJlICAgICAgICAgICAgICAgICB8ICAgMiArCj4+PiAgZG9jL3By b3RvY29scy50ZXhpICAgICAgICB8ICAzMCArKysrCj4+PiAgbGliYXZmb3JtYXQvTWFrZWZpbGUg ICAgICB8ICAgMiArCj4+PiAgbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYyB8IDMwOSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4gIGxpYmF2Zm9ybWF0L3Byb3RvY29s cy5jICAgfCAgIDIgKwo+Pj4gIDUgZmlsZXMgY2hhbmdlZCwgMzQ1IGluc2VydGlvbnMoKykKPj4+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYwo+Pj4KPj4+IGRp ZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPj4+IGluZGV4IGU0ZDM2YWE2MzkuLjU1 YWY5MDk1N2EgMTAwNzU1Cj4+PiAtLS0gYS9jb25maWd1cmUKPj4+ICsrKyBiL2NvbmZpZ3VyZQo+ Pj4gQEAgLTM1NzksNiArMzU3OSw4IEBAIHVkcF9wcm90b2NvbF9zZWxlY3Q9Im5ldHdvcmsiCj4+ PiAgdWRwbGl0ZV9wcm90b2NvbF9zZWxlY3Q9Im5ldHdvcmsiCj4+PiAgdW5peF9wcm90b2NvbF9k ZXBzPSJzeXNfdW5faCIKPj4+ICB1bml4X3Byb3RvY29sX3NlbGVjdD0ibmV0d29yayIKPj4+ICtp cGZzX3Byb3RvY29sX3NlbGVjdD0iaHR0cHNfcHJvdG9jb2wiCj4+PiAraXBuc19wcm90b2NvbF9z ZWxlY3Q9Imh0dHBzX3Byb3RvY29sIgo+Pj4KPj4+ICAjIGV4dGVybmFsIGxpYnJhcnkgcHJvdG9j b2xzCj4+PiAgbGliYW1xcF9wcm90b2NvbF9kZXBzPSJsaWJyYWJiaXRtcSIKPj4+IGRpZmYgLS1n aXQgYS9kb2MvcHJvdG9jb2xzLnRleGkgYi9kb2MvcHJvdG9jb2xzLnRleGkKPj4+IGluZGV4IGQy MDdkZjBiNTIuLjdjOWMwYTQ4MDggMTAwNjQ0Cj4+PiAtLS0gYS9kb2MvcHJvdG9jb2xzLnRleGkK Pj4+ICsrKyBiL2RvYy9wcm90b2NvbHMudGV4aQo+Pj4gQEAgLTIwMjUsNSArMjAyNSwzNSBAQCBk ZWNvZGluZyBlcnJvcnMuCj4+Pgo+Pj4gIEBlbmQgdGFibGUKPj4+Cj4+PiArQHNlY3Rpb24gaXBm cwo+Pj4gKwo+Pj4gK0ludGVyUGxhbmV0YXJ5IEZpbGUgU3lzdGVtIChJUEZTKSBwcm90b2NvbCBz dXBwb3J0LiBPbmUgY2FuIGFjY2Vzcwo+PiBmaWxlcyBzdG9yZWQKPj4+ICtvbiB0aGUgSVBGUyBu ZXR3b3JrIHRocm91Z2ggc28gY2FsbGVkIGdhdGV3YXlzLiBUaG9zZSBhcmUgaHR0cChzKQo+PiBl bmRwb2ludHMuCj4+PiArVGhpcyBwcm90b2NvbCB3cmFwcyB0aGUgSVBGUyBuYXRpdmUgcHJvdG9j b2xzIChpcGZzOi8vIGFuZCBpcG5zOi8vKSB0bwo+PiBiZSBzZW5kCj4+PiArdG8gc3VjaCBhIGdh dGV3YXkuIFVzZXJzIGNhbiAoYW5kIHNob3VsZCkgaG9zdCB0aGVpciBvd24gbm9kZSB3aGljaAo+ PiBtZWFucyB0aGlzCj4+PiArcHJvdG9jb2wgd2lsbCB1c2UgeW91ciBsb2NhbCBtYWNoaW5lIGdh dGV3YXkgdG8gYWNjZXNzIGZpbGVzIG9uIHRoZQo+PiBJUEZTIG5ldHdvcmsuCj4+PiArCj4+PiAr SWYgYSB1c2VyIGRvZXNuJ3QgaGF2ZSBhIG5vZGUgb2YgdGhlaXIgb3duIHRoZW4gdGhlIHB1Ymxp YyBnYXRld2F5Cj4+IGR3ZWIubGluayBpcwo+Pj4gK3VzZWQgYnkgZGVmYXVsdC4KPj4+ICsKPj4+ ICtZb3UgY2FuIHVzZSB0aGlzIHByb3RvY29sIGluIDIgd2F5cy4gVXNpbmcgSVBGUzoKPj4+ICtA ZXhhbXBsZQo+Pj4gK2ZmcGxheSBpcGZzOi8vUW1iR3RKZzIzc2todkZtdTltSmllUFZCeWhmenU1 cndvNzRNRWtWRFlBbUY1VAo+Pj4gK0BlbmQgZXhhbXBsZQo+Pj4gKwo+Pj4gK09yIHRoZSBJUE5T IHByb3RvY29sIChJUE5TIGlzIG11dGFibGUgSVBGUyk6Cj4+PiArQGV4YW1wbGUKPj4+ICtmZnBs YXkgaXBuczovL1FtYkd0SmcyM3NraHZGbXU5bUppZVBWQnloZnp1NXJ3bzc0TUVrVkRZQW1GNVQK Pj4+ICtAZW5kIGV4YW1wbGUKPj4+ICsKPj4+ICtZb3UgY2FuIGFsc28gY2hhbmdlIHRoZSBnYXRl d2F5IHRvIGJlIHVzZWQ6Cj4+PiArCj4+PiArQHRhYmxlIEBvcHRpb24KPj4+ICsKPj4+ICtAaXRl bSBnYXRld2F5Cj4+PiArRGVmaW5lcyB0aGUgZ2F0ZXdheSB0byB1c2UuIFdoZW4gbm90aGluZyBp cyBwcm92aWRlZCB0aGUgcHJvdG9jb2wgd2lsbAo+PiBmaXJzdCB0cnkKPj4+ICt5b3VyIGxvY2Fs IGdhdGV3YXkuIElmIHRoYXQgZmFpbHMgZHdlYi5saW5rIHdpbGwgYmUgdXNlZC4KPj4+ICsKPj4+ ICtAZW5kIHRhYmxlCj4+Pgo+Pj4gIEBjIG1hbiBlbmQgUFJPVE9DT0xTCj4+PiBkaWZmIC0tZ2l0 IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQo+Pj4gaW5kZXgg ZDcxODJkNmJkOC4uZTMyMzNmZDdhYyAxMDA2NDQKPj4+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2Vm aWxlCj4+PiArKysgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQo+Pj4gQEAgLTY2MCw2ICs2NjAsOCBA QCBPQkpTLSQoQ09ORklHX1NSVFBfUFJPVE9DT0wpICAgICAgICAgICAgICs9Cj4+IHNydHBwcm90 by5vIHNydHAubwo+Pj4gIE9CSlMtJChDT05GSUdfU1VCRklMRV9QUk9UT0NPTCkgICAgICAgICAg Kz0gc3ViZmlsZS5vCj4+PiAgT0JKUy0kKENPTkZJR19URUVfUFJPVE9DT0wpICAgICAgICAgICAg ICArPSB0ZWVwcm90by5vIHRlZV9jb21tb24ubwo+Pj4gIE9CSlMtJChDT05GSUdfVENQX1BST1RP Q09MKSAgICAgICAgICAgICAgKz0gdGNwLm8KPj4+ICtPQkpTLSQoQ09ORklHX0lQRlNfUFJPVE9D T0wpICAgICAgICAgICAgICs9IGlwZnNnYXRld2F5Lm8KPj4+ICtPQkpTLSQoQ09ORklHX0lQTlNf UFJPVE9DT0wpICAgICAgICAgICAgICs9IGlwZnNnYXRld2F5Lm8KPj4+ICBUTFMtT0JKUy0kKENP TkZJR19HTlVUTFMpICAgICAgICAgICAgICAgICs9IHRsc19nbnV0bHMubwo+Pj4gIFRMUy1PQkpT LSQoQ09ORklHX0xJQlRMUykgICAgICAgICAgICAgICAgKz0gdGxzX2xpYnRscy5vCj4+PiAgVExT LU9CSlMtJChDT05GSUdfTUJFRFRMUykgICAgICAgICAgICAgICArPSB0bHNfbWJlZHRscy5vCj4+ PiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaXBmc2dhdGV3YXkuYyBiL2xpYmF2Zm9ybWF0L2lw ZnNnYXRld2F5LmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwMDAw Li4xYTAzOTU4OWMwCj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9saWJhdmZvcm1hdC9pcGZz Z2F0ZXdheS5jCj4+PiBAQCAtMCwwICsxLDMwOSBAQAo+Pj4gKy8qCj4+PiArICogSVBGUyBhbmQg SVBOUyBwcm90b2NvbCBzdXBwb3J0IHRocm91Z2ggSVBGUyBHYXRld2F5Lgo+Pj4gKyAqIENvcHly aWdodCAoYykgMjAyMiBNYXJrIEdhaXNlcgo+Pj4gKyAqCj4+PiArICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgo+Pj4gKyAqCj4+PiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+Pj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4+ICsgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPj4+ICsg KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KPj4+ICsgKgo+Pj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+Pj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+PiArICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKPj4+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lgo+Pj4gKyAqCj4+PiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+Pj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1w ZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPj4+ICsgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCj4+IDAy MTEwLTEzMDEgVVNBCj4+PiArICovCj4+PiArCj4+PiArI2luY2x1ZGUgImF2Zm9ybWF0LmgiCj4+ PiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgo+Pgo+PiBVbnVzZWQuCj4+Cj4+PiAr I2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+Pj4gKyNpbmNsdWRlICJsaWJhdnV0aWwv aW50ZXJuYWwuaCIKPj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+Pj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvdHJlZS5oIgo+Pgo+PiA/Cj4+Cj4gCj4gVGhpcyB3aG9sZSBpbmNsdWRlIHBh cnQgY2FuIGJlIGNsZWFuZWQgdXAgbXVjaCBtb3JlLgo+IEp1c3QgaGF2aW5nIHRoZXNlOgo+ICNp bmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKPiAjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5o Igo+ICNpbmNsdWRlICJ1cmwuaCIKPiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiAKPiBpcyBlbm91 Z2guCj4gCj4gCj4+PiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4+PiArI2lmIEhBVkVfSU9fSAo+Pj4g KyNpbmNsdWRlIDxpby5oPgo+Pj4gKyNlbmRpZgo+Pj4gKyNpZiBIQVZFX1VOSVNURF9ICj4+PiAr I2luY2x1ZGUgPHVuaXN0ZC5oPgo+Pj4gKyNlbmRpZgo+Pj4gKyNpbmNsdWRlICJvc19zdXBwb3J0 LmgiCj4+PiArI2luY2x1ZGUgInVybC5oIgo+Pj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPj4+ICsj aW5jbHVkZSA8c3lzL3N0YXQuaD4KPj4+ICsKPj4+ICt0eXBlZGVmIHN0cnVjdCBJUEZTR2F0ZXdh eUNvbnRleHQgewo+Pj4gKyAgICBBVkNsYXNzICpjbGFzczsKPj4+ICsgICAgVVJMQ29udGV4dCAq aW5uZXI7Cj4+PiArICAgIC8vIElzIGZpbGxlZCBieSB0aGUgLWdhdGV3YXkgYXJndW1lbnQgYW5k IG5vdCBjaGFuZ2VkIGFmdGVyLgo+Pj4gKyAgICBjaGFyICpnYXRld2F5Owo+Pj4gKyAgICAvLyBJ ZiB0aGUgYWJvdmUgZ2F0ZXdheSBpcyBub24gbnVsbCwgaXQgd2lsbCBiZSBjb3BpZWQgaW50byB0 aGlzCj4+IGJ1ZmZlci4KPj4+ICsgICAgLy8gRWxzZSB0aGlzIGJ1ZmZlciB3aWxsIGNvbnRhaW4g dGhlIGF1dG8gZGV0ZWN0ZWQgZ2F0ZXdheS4KPj4+ICsgICAgLy8gSW4gZWl0aGVyIGNhc2UsIHRo ZSBnYXRld2F5IHRvIHVzZSB3aWxsIGJlIGluIHRoaXMgYnVmZmVyLgo+Pj4gKyAgICBjaGFyIGdh dGV3YXlfYnVmZmVyW1BBVEhfTUFYXTsKPj4+ICt9IElQRlNHYXRld2F5Q29udGV4dDsKPj4+ICsK Pj4+ICsvLyBBIGJlc3QtZWZmb3J0IHdheSB0byBmaW5kIHRoZSBJUEZTIGdhdGV3YXkuCj4+PiAr Ly8gT25seSB0aGUgbW9zdCBhcHByb3BpYXRlIGdhdGV3YXkgaXMgc2V0LiBJdCdzIG5vdCBhY3R1 YWxseSByZXF1ZXN0ZWQKPj4+ICsvLyAoaHR0cCBjYWxsKSB0byBwcmV2ZW50IGEgcG90ZW50aWFs IHNsb3dkb3duIGluIHN0YXJ0dXAuIEEgcG90ZW50aWFsCj4+IHRpbWVvdXQKPj4+ICsvLyBpcyBo YW5kbGVkIGJ5IHRoZSBIVFRQIHByb3RvY29sLgo+Pj4gK3N0YXRpYyBpbnQgcG9wdWxhdGVfaXBm c19nYXRld2F5KFVSTENvbnRleHQgKmgpCj4+PiArewo+Pj4gKyAgICBJUEZTR2F0ZXdheUNvbnRl eHQgKmMgPSBoLT5wcml2X2RhdGE7Cj4+PiArICAgIGNoYXIgaXBmc19mdWxsX2RhdGFfZm9sZGVy W1BBVEhfTUFYXTsKPj4+ICsgICAgY2hhciBpcGZzX2dhdGV3YXlfZmlsZVtQQVRIX01BWF07Cj4+ PiArICAgIHN0cnVjdCBzdGF0IHN0Owo+Pj4gKyAgICBpbnQgc3RhdF9yZXQgPSAwOwo+Pj4gKyAg ICBpbnQgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+Pj4gKyAgICBGSUxFICpnYXRld2F5X2ZpbGUg PSBOVUxMOwo+Pj4gKwo+Pj4gKyAgICAvLyBUZXN0ICRJUEZTX0dBVEVXQVkuCj4+PiArICAgIGlm IChnZXRlbnYoIklQRlNfR0FURVdBWSIpICE9IE5VTEwpIHsKPj4+ICsgICAgICAgIGlmIChzbnBy aW50ZihjLT5nYXRld2F5X2J1ZmZlciwgc2l6ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSwgIiVzIiwK Pj4+ICsgICAgICAgICAgICAgICAgICAgICBnZXRlbnYoIklQRlNfR0FURVdBWSIpKSA+PQo+PiBz aXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpKSB7Cj4+PiArICAgICAgICAgICAgYXZfbG9nKGgsIEFW X0xPR19XQVJOSU5HLCAiVGhlIElQRlNfR0FURVdBWSBlbnZpcm9ubWVudAo+PiB2YXJpYWJsZSBl eGNlZWRzIHRoZSBtYXhpbXVtIGxlbmd0aC4gV2UgYWxsb3cgYSBtYXggb2YgJXp1IGNoYXJhY3Rl cnNcbiIsCj4+IHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikpOwo+Pj4gKyAgICAgICAgICAgIHJl dCA9IEFWRVJST1IoRUlOVkFMKTsKPj4+ICsgICAgICAgICAgICBnb3RvIGVycjsKPj4+ICsgICAg ICAgIH0KPj4+ICsKPj4+ICsgICAgICAgIHJldCA9IDE7Cj4+PiArICAgICAgICBnb3RvIGVycjsK Pj4+ICsgICAgfSBlbHNlCj4+PiArICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0RFQlVHLCAiJElQ RlNfR0FURVdBWSBpcyBlbXB0eS5cbiIpOwo+Pj4gKwo+Pj4gKyAgICAvLyBXZSBuZWVkIHRvIGtu b3cgdGhlIElQRlMgZm9sZGVyIHRvIC0gZXZlbnR1YWxseSAtIHJlYWQgdGhlCj4+IGNvbnRlbnRz IG9mCj4+PiArICAgIC8vIHRoZSAiZ2F0ZXdheSIgZmlsZSB3aGljaCB3b3VsZCB0ZWxsIHVzIHRo ZSBnYXRld2F5IHRvIHVzZS4KPj4+ICsgICAgaWYgKGdldGVudigiSVBGU19QQVRIIikgPT0gTlVM TCkgewo+Pj4gKyAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19ERUJVRywgIiRJUEZTX1BBVEggaXMg ZW1wdHkuXG4iKTsKPj4+ICsKPj4+ICsgICAgICAgIC8vIFRyeSB2aWEgdGhlIGhvbWUgZm9sZGVy Lgo+Pj4gKyAgICAgICAgaWYgKGdldGVudigiSE9NRSIpID09IE5VTEwpIHsKPj4+ICsgICAgICAg ICAgICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICIkSE9NRSBhcHBlYXJzIHRvIGJlIGVtcHR5 LlxuIik7Cj4+PiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+Pj4gKyAgICAg ICAgICAgIGdvdG8gZXJyOwo+Pj4gKyAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgLy8gVmVy aWZ5IHRoZSBjb21wb3NlZCBwYXRoIGZpdHMuCj4+PiArICAgICAgICBpZiAoc25wcmludGYoaXBm c19mdWxsX2RhdGFfZm9sZGVyLAo+PiBzaXplb2YoaXBmc19mdWxsX2RhdGFfZm9sZGVyKSwKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAiJXMvLmlwZnMvIiwgZ2V0ZW52KCJIT01FIikpID49Cj4+ IHNpemVvZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpKSB7Cj4+PiArICAgICAgICAgICAgYXZfbG9n KGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIElQRlMgZGF0YSBwYXRoIGV4Y2VlZHMgdGhlCj4+IG1h eCBwYXRoIGxlbmd0aCAoJXp1KVxuIiwgc2l6ZW9mKGlwZnNfZnVsbF9kYXRhX2ZvbGRlcikpOwo+ Pj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPj4+ICsgICAgICAgICAgICBn b3RvIGVycjsKPj4+ICsgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgIC8vIFN0YXQgdGhlIGZv bGRlci4KPj4+ICsgICAgICAgIC8vIEl0IHNob3VsZCBleGlzdCBpbiBhIGRlZmF1bHQgSVBGUyBz ZXR1cCB3aGVuIHJ1biBhcyBsb2NhbAo+PiB1c2VyLgo+Pj4gKyNpZm5kZWYgX1dJTjMyCj4+PiAr ICAgICAgICBzdGF0X3JldCA9IHN0YXQoaXBmc19mdWxsX2RhdGFfZm9sZGVyLCAmc3QpOwo+Pj4g KyNlbHNlCj4+PiArICAgICAgICBzdGF0X3JldCA9IHdpbjMyX3N0YXQoaXBmc19mdWxsX2RhdGFf Zm9sZGVyLCAmc3QpOwo+Pj4gKyNlbmRpZgo+Pj4gKyAgICAgICAgaWYgKHN0YXRfcmV0IDwgMCkg ewo+Pj4gKyAgICAgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfSU5GTywgIlVuYWJsZSB0byBmaW5k IElQRlMgZm9sZGVyLiBXZQo+PiB0cmllZDpcbiIpOwo+Pj4gKyAgICAgICAgICAgIGF2X2xvZyho LCBBVl9MT0dfSU5GTywgIi0gJElQRlNfUEFUSCwgd2hpY2ggd2FzIGVtcHR5LlxuIik7Cj4+PiAr ICAgICAgICAgICAgYXZfbG9nKGgsIEFWX0xPR19JTkZPLCAiLSAkSE9NRS8uaXBmcyAoZnVsbCB1 cmk6ICVzKSB3aGljaAo+PiBkb2Vzbid0IGV4aXN0LlxuIiwgaXBmc19mdWxsX2RhdGFfZm9sZGVy KTsKPj4+ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT0VOVCk7Cj4+PiArICAgICAgICAg ICAgZ290byBlcnI7Cj4+PiArICAgICAgICB9Cj4+PiArICAgIH0gZWxzZSB7Cj4+PiArICAgICAg ICBpZiAoc25wcmludGYoaXBmc19mdWxsX2RhdGFfZm9sZGVyLAo+PiBzaXplb2YoaXBmc19mdWxs X2RhdGFfZm9sZGVyKSwgIiVzIiwKPj4+ICsgICAgICAgICAgICAgICAgIGdldGVudigiSVBGU19Q QVRIIikpID49IHNpemVvZihpcGZzX2Z1bGxfZGF0YV9mb2xkZXIpKQo+PiB7Cj4+PiArICAgICAg ICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIElQRlNfUEFUSCBlbnZpcm9ubWVu dAo+PiB2YXJpYWJsZSBleGNlZWRzIHRoZSBtYXhpbXVtIGxlbmd0aC4gV2UgYWxsb3cgYSBtYXgg b2YgJXp1IGNoYXJhY3RlcnNcbiIsCj4+IHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikpOwo+Pj4g KyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPj4+ICsgICAgICAgICAgICBnb3Rv IGVycjsKPj4+ICsgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICAvLyBD b3B5IHRoZSBmdWxseSBjb21wb3NlZCBnYXRld2F5IHBhdGggaW50byBpcGZzX2dhdGV3YXlfZmls ZS4KPj4+ICsgICAgaWYgKHNucHJpbnRmKGlwZnNfZ2F0ZXdheV9maWxlLCBzaXplb2YoaXBmc19n YXRld2F5X2ZpbGUpLAo+PiAiJXNnYXRld2F5IiwKPj4+ICsgICAgICAgICAgICAgICAgIGlwZnNf ZnVsbF9kYXRhX2ZvbGRlcikgPj0gc2l6ZW9mKGlwZnNfZ2F0ZXdheV9maWxlKSkgewo+Pj4gKyAg ICAgICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiVGhlIElQRlMgZ2F0ZXdheSBmaWxlIHBh dGggZXhjZWVkcwo+PiB0aGUgbWF4IHBhdGggbGVuZ3RoICglenUpXG4iLCBzaXplb2YoaXBmc19n YXRld2F5X2ZpbGUpKTsKPj4+ICsgICAgICAgIHJldCA9IEFWRVJST1IoRU5PRU5UKTsKPj4+ICsg ICAgICAgIGdvdG8gZXJyOwo+Pj4gKyAgICB9Cj4+PiArCj4+PiArICAgIC8vIEdldCB0aGUgY29u dGVudHMgb2YgdGhlIGdhdGV3YXkgZmlsZS4KPj4+ICsgICAgZ2F0ZXdheV9maWxlID0gYXZfZm9w ZW5fdXRmOChpcGZzX2dhdGV3YXlfZmlsZSwgInIiKTsKPj4+ICsgICAgaWYgKCFnYXRld2F5X2Zp bGUpIHsKPj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlRoZSBJUEZTIGdh dGV3YXkgZmlsZSAoZnVsbCB1cmk6ICVzKQo+PiBkb2Vzbid0IGV4aXN0LiBJcyB0aGUgZ2F0ZXdh eSBlbmFibGVkP1xuIiwgaXBmc19nYXRld2F5X2ZpbGUpOwo+Pj4gKyAgICAgICAgcmV0ID0gQVZF UlJPUihFTk9FTlQpOwo+Pj4gKyAgICAgICAgZ290byBlcnI7Cj4+PiArICAgIH0KPj4+ICsKPj4+ ICsgICAgLy8gUmVhZCBhIHNpbmdsZSBsaW5lIChmZ2V0cyBzdG9wcyBhdCBuZXcgbGluZSBtYXJr KS4KPj4+ICsgICAgZmdldHMoYy0+Z2F0ZXdheV9idWZmZXIsIHNpemVvZihjLT5nYXRld2F5X2J1 ZmZlcikgLSAxLAo+PiBnYXRld2F5X2ZpbGUpOwo+Pj4gKwo+Pj4gKyAgICAvLyBSZXBsYWNlIHRo ZSBsYXN0IGNoYXIgd2l0aCBcMAo+Pj4gKyAgICBjLT5nYXRld2F5X2J1ZmZlcltzaXplb2YoYy0+ Z2F0ZXdheV9idWZmZXIpIC0gMV0gPSAwOwo+Pj4gKwo+Pj4gKyAgICAvLyBSZXBsYWNlIGZpcnN0 IG9jY3VyZW5jZSBvZiBlbmQgb2YgbGluZSB3aXRoIFwwCj4+PiArICAgIGMtPmdhdGV3YXlfYnVm ZmVyW3N0cmNzcG4oYy0+Z2F0ZXdheV9idWZmZXIsICJcciIpXSA9IDA7Cj4+PiArICAgIGMtPmdh dGV3YXlfYnVmZmVyW3N0cmNzcG4oYy0+Z2F0ZXdheV9idWZmZXIsICJcbiIpXSA9IDA7Cj4+Cj4+ IElmIHRoZSBidWZmZXIgY29udGFpbnMgYm90aCBcciBhbmQgXG4gYW5kIHRoZSBmaXJzdCBcbiBw cmVjZWRlcyB0aGUKPj4gZmlyc3QgXHIsIHRoZW4gdGhlIGFib3ZlIHplcm9lcyBib3RoIHRoZSBm aXJzdCBcciBhbmQgdGhlIGZpcnN0IFxuLiBJZgo+PiBpdCBpcyBlbm91Z2ggdG8gb25seSB6ZXJv IHRoZSBmaXJzdCBuZXdsaW5lLCB0aGVuIHRoaXMgY2FuIGJlIHNpbXBsaWZpZWQKPj4gdG8gImMt PmdhdGV3YXlfYnVmZmVyW3N0cmNzcG4oYy0+Z2F0ZXdheV9idWZmZXIsICJcclxuIildID0gMDsi Lgo+Pgo+IAo+IEl0IHVzZWQgdG8gYmUgaW4geW91ciBzdWdnZXN0ZWQgc2ltcGxpZmllZCBhcHBy b2FjaC4KPiBJdCB3YXMgdGhlbiBzdWdnZXN0ZWQgdG8gc3BsaXQgaXQgYmVjYXVzZSBvZiBuZXcg bGluZSBkaWZmZXJlbmNlcwo+IG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuIFRoaXMgd2FzIHN1cHBv c2VkIHRvIGNhdGNoICJldmVyeXRoaW5nIi4KPiAKPiBJIHByZWZlciB0byBrZWVwIHRoaXMgYXMt aXMgbm93Lgo+IAoKSXMgaXQgaW50ZW5kZWQgdG8gdXNlIHdoYXQgaXMgYmV0d2VlbiB0aGUgZmly c3QgXG4gYW5kIHRoZSBmaXJzdCBccgpsYXRlcm9uIGFsdGhvdWdoIHRoaXMgZGF0YSB3aWxsIGJl IGFmdGVyIHRoZSAnXDAnIGFmdGVyIHRoaXM/IFRoYXQgd291bGQKYmUgdmVyeSB3ZWlyZC4KCj4g Cj4+PiArCj4+PiArICAgIC8vIElmIHN0cmxlbiBmaW5kcyBhbnl0aGluZyBsb25nZXIgdGhlbiAw IGNoYXJhY3RlcnMgdGhlbiB3ZSBoYXZlIGEKPj4+ICsgICAgLy8gcG90ZW50aWFsIGdhdGV3YXkg dXJsLgo+Pj4gKyAgICBpZiAoc3RybGVuKGMtPmdhdGV3YXlfYnVmZmVyKSA8IDEpIHsKPj4KPj4g aWYgKCpjLT5nYXRld2F5X2J1ZmZlciA9PSAnXDAnKQo+Pgo+IAo+IElzIHRoYXQgYSBzdHlsZSBk aWZmZXJlbmNlIG9yIGFuIGFjdHVhbCBiZWhhdmlvciBkaWZmZXJlbmNlPwo+IAoKVGhlIGZvcm1l ciB3b3VsZCBjYWxsIHN0cmxlbiB0byBjaGVjayB3aGV0aGVyIGEgc3RyaW5nIGlzIGVtcHR5ICh1 bmxlc3MKdGhlIGNvbXBpbGVyIG9wdGltaXplcyBpdCBhd2F5KS4gTm8gYWN0dWFsIGJlaGF2aW91 ciBkaWZmZXJlbmNlIGV4aXN0cy4KQnV0IGl0IGlzIG5ldmVydGhlbGVzcyBtb3JlIHRoYW4gYSBz dHlsZSBkaWZmZXJlbmNlLgoKPiAKPj4KPj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FS TklORywgIlRoZSBJUEZTIGdhdGV3YXkgZmlsZSAoZnVsbCB1cmk6ICVzKQo+PiBhcHBlYXJzIHRv IGJlIGVtcHR5LiBJcyB0aGUgZ2F0ZXdheSBzdGFydGVkP1xuIiwgaXBmc19nYXRld2F5X2ZpbGUp Owo+Pj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFSUxTRVEpOwo+Pj4gKyAgICAgICAgZ290byBl cnI7Cj4+PiArICAgIH0gZWxzZSB7Cj4+PiArICAgICAgICAvLyBXZSdyZSBkb25lLCB0aGUgYy0+ Z2F0ZXdheV9idWZmZXIgaGFzIHNvbWV0aGluZyB0aGF0IGxvb2tzCj4+IHZhbGlkLgo+Pj4gKyAg ICAgICAgcmV0ID0gMTsKPj4+ICsgICAgICAgIGdvdG8gZXJyOwo+Pj4gKyAgICB9Cj4+PiArCj4+ PiArZXJyOgo+Pj4gKyAgICBpZiAoZ2F0ZXdheV9maWxlKQo+Pj4gKyAgICAgICAgZmNsb3NlKGdh dGV3YXlfZmlsZSk7Cj4+PiArCj4+PiArICAgIHJldHVybiByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyBpbnQgdHJhbnNsYXRlX2lwZnNfdG9faHR0cChVUkxDb250ZXh0ICpoLCBjb25zdCBj aGFyICp1cmksCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFn cywgQVZEaWN0aW9uYXJ5ICoqb3B0aW9ucykKPj4+ICt7Cj4+PiArICAgIGNvbnN0IGNoYXIgKmlw ZnNfY2lkOwo+Pj4gKyAgICBjaGFyICpmdWxsdXJpID0gTlVMTDsKPj4+ICsgICAgaW50IHJldDsK Pj4+ICsgICAgSVBGU0dhdGV3YXlDb250ZXh0ICpjID0gaC0+cHJpdl9kYXRhOwo+Pj4gKwo+Pj4g KyAgICAvLyBUZXN0IGZvciBpcGZzOi8vLCBpcGZzOiwgaXBuczovLyBhbmQgaXBuczouIFRoaXMg cHJlZml4IGlzCj4+IHN0cmlwcGVkIGZyb20KPj4+ICsgICAgLy8gdGhlIHN0cmluZyBsZWF2aW5n IGp1c3QgdGhlIENJRCBpbiBpcGZzX2NpZC4KPj4+ICsgICAgaW50IGlzX2lwZnMgPSBhdl9zdHJp c3RhcnQodXJpLCAiaXBmczovLyIsICZpcGZzX2NpZCk7Cj4+PiArICAgIGludCBpc19pcG5zID0g YXZfc3RyaXN0YXJ0KHVyaSwgImlwbnM6Ly8iLCAmaXBmc19jaWQpOwo+Pj4gKwo+Pj4gKyAgICAv LyBXZSBtdXN0IGhhdmUgZWl0aGVyIGlwbnMgb3IgaXBmcy4KPj4+ICsgICAgaWYgKCFpc19pcGZz ICYmICFpc19pcG5zKSB7Cj4+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTlZBTCk7Cj4+PiAr ICAgICAgICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJVbnN1cHBvcnRlZCB1cmwgJXNcbiIs IHVyaSk7Cj4+PiArICAgICAgICBnb3RvIGVycjsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICAv LyBJZiB0aGUgQ0lEIGhhcyBhIGxlbmd0aCBncmVhdGVyIHRoZW4gMCB0aGVuIHdlIGFzc3VtZSB3 ZSBoYXZlIGEKPj4gcHJvcGVyIHdvcmtpbmcgb25lLgo+Pj4gKyAgICAvLyBJdCBjb3VsZCBzdGls bCBiZSB3cm9uZyBidXQgaW4gdGhhdCBjYXNlIHRoZSBnYXRld2F5IHNob3VsZCBzYXZlCj4+IHVz IGFuZAo+Pj4gKyAgICAvLyBydXR1cm4gYSA0MDMgZXJyb3IuIFRoZSBodHRwIHByb3RvY29sIGhh bmRsZXMgdGhpcy4KPj4+ICsgICAgaWYgKHN0cmxlbihpcGZzX2NpZCkgPCAxKSB7Cj4+PiArICAg ICAgICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJBIENJRCBtdXN0IGJlIHByb3ZpZGVkLlxu Iik7Cj4+PiArICAgICAgICByZXQgPSBBVkVSUk9SKEVJTFNFUSk7Cj4+PiArICAgICAgICBnb3Rv IGVycjsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICAvLyBQb3B1bGF0ZSBjLT5nYXRld2F5X2J1 ZmZlciB3aXRoIHdoYXRldmVyIGlzIGluIGMtPmdhdGV3YXkKPj4+ICsgICAgaWYgKGMtPmdhdGV3 YXkgIT0gTlVMTCkgewo+Pj4gKyAgICAgICAgaWYgKHNucHJpbnRmKGMtPmdhdGV3YXlfYnVmZmVy LCBzaXplb2YoYy0+Z2F0ZXdheV9idWZmZXIpLCAiJXMiLAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIGMtPmdhdGV3YXkpID49IHNpemVvZihjLT5nYXRld2F5X2J1ZmZlcikpIHsKPj4+ICsgICAg ICAgICAgICBhdl9sb2coaCwgQVZfTE9HX1dBUk5JTkcsICJUaGUgLWdhdGV3YXkgcGFyYW1ldGVy IGlzIHRvbwo+PiBsb25nLiBXZSBhbGxvdyBhIG1heCBvZiAlenUgY2hhcmFjdGVyc1xuIiwgc2l6 ZW9mKGMtPmdhdGV3YXlfYnVmZmVyKSk7Cj4+Cj4+IFdlIHR5cGljYWxseSB1c2UgU0laRV9TUEVD SUZJRVIgaW5zdGVhZCBvZiB6IGZvciBjb21wYXRpYmlsaXR5IHdpdGgKPj4gYW5jaWVudCB2ZXJz aW9ucyBvZiBNU1ZDLgo+PiAoSSBkb24ndCBrbm93IHdoZXRoZXIgdGhlcmUgaXMgYW55IHN1cHBv cnRlZCB2ZXJzaW9uIG9mIE1TVkMgdGhhdAo+PiBkb2Vzbid0IHN1cHBvcnQgejsgSSBkb24ndCB1 c2UgTVNWQyBteXNlbGYuKQo+Pgo+IAo+IEhlcmUgdG9vIEkgd2FzIGV4cGxpY2l0bHkgc3VnZ2Vz dGVkIHRvIHVzZSAlenUgKHdoZW4gSSB3YXMgdXNpbmcgLSBJIHRoaW5rCj4gLSAlbHUgYmVmb3Jl KS4KPiBTbyBJIGFzc3VtZSB0aGF0IHRoZSBhbmNpZW50IE1TVkMgdmVyc2lvbiB5b3UncmUgcmVm ZXJyaW5nIHRvIGlzIHByb2JhYmx5Cj4gbm90IHN1cHBvcnRlZCBhbnltb3JlIGZyb20gYW4gZmZt cGVnIGNvbXBpbGVyIHJlcXVpcmVtZW50IHBvaW50IG9mIHZpZXc/Cj4gCj4gU2hvdWxkIGkgbm93 IGNoYW5nZSBhbGwgIiV6dSIgdG8gIiUiU0laRV9TUEVDSUZJRVIgKHRoaXMgZG9lcyBub3QgbWFr ZSBpdAo+IG5lYXRlciBub3Igc2hvcnRlciB3aXRoIHRoZSA4MCBjaGFyIGxpbmUgbGltaXQpLgo+ IElzIHRoaXMgY2hhbmdlIHJlcXVpcmVkPwoKQXMgc2FpZDogSXQgaXMgZm9yIGNvbXBhdGliaWxp dHkgd2l0aCBhbmNpZW50IHZlcnNpb25zIG9mIE1TVkMuIEJ1dCBJCmRvbid0IGtub3cgd2hldGhl ciBhbnkgb2YgdGhlIGFjdHVhbGx5IHN1cHBvcnRlZCB2ZXJzaW9ucyBvZiBNU1ZDIHN0aWxsCm5l ZWQgaXQuCgo+IAo+IElmIGl0IGlzLCB3aGF0IF9leGFjdGx5XyBkbyBpIG5lZWQgdG8gY2hhbmdl IGl0IGluPyBJIHNlZSBhCj4gY291cGxlIGRpZmZlcmVudCBTSVpFX1NQRUNJRklFUiBwcmVmaXhl cy4gSSBoYXZlIG5vIGNsdWUgd2hhdCB0byB1c2UgaGVyZS4KClRoZXJlIGlzIG9ubHkgb25lIFNJ WkVfU1BFQ0lGSUVSLCBuYW1lbHkgU0laRV9TUEVDSUZJRVI7IHRoZQpQVFJESUZGX1NQRUNJRklF UiAob3Igd2hhdGV2ZXIgeW91IHNlZSkgaXMgb2J2aW91c2x5IG5vdCB0aGUgdGhpbmcgdG8KdXNl IGZvciBzaXplX3QuCgo+IAo+IAo+Pj4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRUlOVkFM KTsKPj4+ICsgICAgICAgICAgICBnb3RvIGVycjsKPj4+ICsgICAgICAgIH0KPj4+ICsgICAgfSBl bHNlIHsKPj4+ICsgICAgICAgIC8vIFBvcHVsYXRlIHRoZSBJUEZTIGdhdGV3YXkgaWYgd2UgaGF2 ZSBhbnkuCj4+PiArICAgICAgICAvLyBJZiBub3QsIGluZm9ybSB0aGUgdXNlciBob3cgdG8gcHJv cGVybHkgc2V0IG9uZS4KPj4+ICsgICAgICAgIHJldCA9IHBvcHVsYXRlX2lwZnNfZ2F0ZXdheSho KTsKPj4+ICsKPj4+ICsgICAgICAgIGlmIChyZXQgPCAxKSB7Cj4+PiArICAgICAgICAgICAgLy8g V2UgZmFsbGJhY2sgb24gZHdlYi5saW5rIChtYW5hZ2VkIGJ5IFByb3RvY29sIExhYnMpLgo+Pj4g KyAgICAgICAgICAgIHNucHJpbnRmKGMtPmdhdGV3YXlfYnVmZmVyLCBzaXplb2YoYy0+Z2F0ZXdh eV9idWZmZXIpLCAiCj4+IGh0dHBzOi8vZHdlYi5saW5rIik7Cj4+PiArCj4+PiArICAgICAgICAg ICAgYXZfbG9nKGgsIEFWX0xPR19XQVJOSU5HLCAiSVBGUyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUK Pj4gcnVubmluZy4gWW914oCZcmUgbm93IHVzaW5nIHRoZSBwdWJsaWMgZ2F0ZXdheSBhdCBkd2Vi LmxpbmsuXG4iKTsKPj4+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0lORk8sICJJbnN0 YWxsaW5nIElQRlMgbG9jYWxseSBpcwo+PiByZWNvbW1lbmRlZCB0byBpbXByb3ZlIHBlcmZvcm1h bmNlIGFuZCByZWxpYWJpbGl0eSwgYW5kIG5vdCBzaGFyZSBhbGwgeW91cgo+PiBhY3Rpdml0eSB3 aXRoIGEgc2luZ2xlIElQRlMgZ2F0ZXdheS5cbiIpOwo+Pj4gKyAgICAgICAgICAgIGF2X2xvZyho LCBBVl9MT0dfSU5GTywgIlRoZXJlIGFyZSBtdWx0aXBsZSBvcHRpb25zIHRvCj4+IGRlZmluZSB0 aGlzIGdhdGV3YXkuXG4iKTsKPj4+ICsgICAgICAgICAgICBhdl9sb2coaCwgQVZfTE9HX0lORk8s ICIxLiBDYWxsIGZmbXBlZyB3aXRoIGEgZ2F0ZXdheQo+PiBwYXJhbSwgd2l0aG91dCBhIHRyYWls aW5nIHNsYXNoOiAtZ2F0ZXdheSA8dXJsPi5cbiIpOwo+Pj4gKyAgICAgICAgICAgIGF2X2xvZyho LCBBVl9MT0dfSU5GTywgIjIuIERlZmluZSBhbiAkSVBGU19HQVRFV0FZCj4+IGVudmlyb25tZW50 IHZhcmlhYmxlIHdpdGggdGhlIGZ1bGwgSFRUUCBVUkwgdG8gdGhlIGdhdGV3YXkgd2l0aG91dCB0 cmFpbGluZwo+PiBmb3J3YXJkIHNsYXNoLlxuIik7Cj4+PiArICAgICAgICAgICAgYXZfbG9nKGgs IEFWX0xPR19JTkZPLCAiMy4gRGVmaW5lIGFuICRJUEZTX1BBVEggZW52aXJvbm1lbnQKPj4gdmFy aWFibGUgYW5kIHBvaW50IGl0IHRvIHRoZSBJUEZTIGRhdGEgcGF0aCAtIHRoaXMgaXMgdHlwaWNh bGx5IH4vLmlwZnNcbiIpOwo+Pgo+PiBBbGwgdGhvc2UgQVZfTE9HX0lORk8gY2FuIGJlIGNvbWJp bmVkIHdoaWNoIGhhcyB0aGUgYWR2YW50YWdlIHRoYXQgdGhlCj4+IGxvZ3MgY2FuJ3QgYmUgdGVh cmVkIGFwYXJ0ICh3aGljaCB0aGV5IGNhbiBub3cgaWYgc29tZXRoaW5nIGVsc2UgbG9ncyBhdAo+ PiB0aGUgc2FtZSB0aW1lKTsgZnVydGhlcm1vcmUsIHRoaXMgd291bGQgYWxzbyBkZWNyZWFzZSBj b2Rlc2l6ZS4KPj4KPiAKPiBEbyB5b3UgaGF2ZSBhbiBleGFtcGxlIG9mIHdoZXJlIHRoYXQncyBo YXBwZW5pbmc/Cj4gCgpJdCBjYW4gaGFwcGVuIGFueSB0aW1lIHlvdSBoYXZlIG11bHRpcGxlIHRo cmVhZHMgdXNpbmcgYXZfbG9nIGF0IHRoZQpzYW1lIHRpbWUuIEdpdmVuIHRoYXQgeW91ciBzdGF0 ZW1lbnRzIGFyZSBzdXBwb3NlZCB0byBiZSBmdWxsIGxpbmVzLCBpdAppcyBub3QgdGhhdCBiYWQg aWYgaXQgaGFwcGVucyBoZXJlLCBidXQgaXQgaXMgbmV2ZXJ0aGVsZXNzIHN1Ym9wdGltYWwuCgo+ Pgo+Pj4gKyAgICAgICAgfQo+Pj4gKyAgICB9Cj4+PiArCj4+PiArICAgIC8vIFRlc3QgaWYgdGhl IGdhdGV3YXkgc3RhcnRzIHdpdGggZWl0aGVyIGh0dHA6Ly8gb3IgaHR0cHM6Ly8KPj4+ICsgICAg aWYgKGF2X3N0cmlzdGFydChjLT5nYXRld2F5X2J1ZmZlciwgImh0dHA6Ly8iLCBOVUxMKSA9PSAw Cj4+PiArICAgICAgICAmJiBhdl9zdHJpc3RhcnQoYy0+Z2F0ZXdheV9idWZmZXIsICJodHRwczov LyIsIE5VTEwpID09IDApIHsKPj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywg IlRoZSBnYXRld2F5IFVSTCBkaWRuJ3Qgc3RhcnQgd2l0aAo+PiBodHRwOi8vIG9yIGh0dHBzOi8v IGFuZCBpcyB0aGVyZWZvcmUgaW52YWxpZC5cbiIpOwo+Pj4gKyAgICAgICAgcmV0ID0gQVZFUlJP UihFSUxTRVEpOwo+Pj4gKyAgICAgICAgZ290byBlcnI7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsg ICAgLy8gQ29uY2F0ZW5hdGUgdGhlIHVybC4KPj4+ICsgICAgLy8gVGhpcyBlbmRzIHVwIHdpdGgg c29tZXRoaW5nIGxpa2U6Cj4+IGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9pcGZzL1FtLi4uLi4KPj4+ ICsgICAgLy8gVGhlIGZvcm1hdCBvZiAiJXMlcyVzJXMiIGlzIHRoZSBmb2xsb3dpbmc6Cj4+PiAr ICAgIC8vIDFzdCAlcyA9IFRoZSBnYXRld2F5Lgo+Pj4gKyAgICAvLyAybmQgJXMgPSBJZiB0aGUg Z2F0ZXdheSBkaWRuJ3QgZW5kIGluIGEgc2xhc2gsIGFkZCBhICIvIi4KPj4gT3RoZXJ3aXNlIGl0 J3MgYW4gZW1wdHkgc3RyaW5nCj4+PiArICAgIC8vIDNyZCAlcyA9IEVpdGhlciBpcG5zLyBvciBp cGZzLy4KPj4+ICsgICAgLy8gNHRoICVzID0gVGhlIElQRlMgQ0lEIChRbS4uLiwgYmFmeS4uLiwg Li4uKS4KPj4+ICsgICAgZnVsbHVyaSA9IGF2X2FzcHJpbnRmKCIlcyVzJXMlcyIsCj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICBjLT5nYXRld2F5X2J1ZmZlciwKPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgIChjLT5nYXRld2F5X2J1ZmZlcltzdHJsZW4oYy0+Z2F0ZXdheV9idWZm ZXIpCj4+IC0gMV0gPT0gJy8nKSA/ICIiIDogIi8iLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgKGlzX2lwbnMpID8gImlwbnMvIiA6ICJpcGZzLyIsCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICBpcGZzX2NpZCk7Cj4+Cj4+IE1pc3NpbmcgYWxsb2NhdGlvbiBjaGVjay4KPj4K PiAKPiBBaAo+IEZpeGVkIGl0IGxvY2FsbHkuCj4gCj4gCj4+Cj4+PiArCj4+PiArICAgIC8vIFBh c3MgdGhlIFVSTCBiYWNrIHRvIEZGTXBlZydzIHByb3RvY29sIGhhbmRsZXIuCj4+PiArICAgIGlm ICgocmV0ID0gZmZ1cmxfb3Blbl93aGl0ZWxpc3QoJmMtPmlubmVyLCBmdWxsdXJpLCBmbGFncywK Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaC0+aW50ZXJydXB0X2Nh bGxiYWNrLCBvcHRpb25zLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGgtPnByb3RvY29sX3doaXRlbGlzdCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBoLT5wcm90b2NvbF9ibGFja2xpc3QsIGgpKQo+Pj4gKyAgICAgICAgPCAwKSB7Cj4+ Cj4+IFdlaXJkIGZvcm1hdHRpbmc7IHdoeSBkb24ndCB5b3UganVzdCB1c2UKPj4gcmV0ID0gZmZ1 cmxfb3Blbl93aGl0ZWxpc3QoLi4uKTsKPj4gaWYgKHJldCA8IDApIHsKPj4KPiAKPiBGaXhlZC4K PiAKPiAKPj4KPj4+ICsgICAgICAgIGF2X2xvZyhoLCBBVl9MT0dfV0FSTklORywgIlVuYWJsZSB0 byBvcGVuIHJlc291cmNlOiAlc1xuIiwKPj4gZnVsbHVyaSk7Cj4+PiArICAgICAgICBnb3RvIGVy cjsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gK2VycjoKPj4+ICsgICAgYXZfZnJlZShmdWxsdXJpKTsK Pj4+ICsgICAgcmV0dXJuIHJldDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBpcGZzX3Jl YWQoVVJMQ29udGV4dCAqaCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc2l6ZSkKPj4+ICt7Cj4+ PiArICAgIElQRlNHYXRld2F5Q29udGV4dCAqYyA9IGgtPnByaXZfZGF0YTsKPj4+ICsgICAgcmV0 dXJuIGZmdXJsX3JlYWQoYy0+aW5uZXIsIGJ1Ziwgc2l6ZSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0 YXRpYyBpbnQ2NF90IGlwZnNfc2VlayhVUkxDb250ZXh0ICpoLCBpbnQ2NF90IHBvcywgaW50IHdo ZW5jZSkKPj4+ICt7Cj4+PiArICAgIElQRlNHYXRld2F5Q29udGV4dCAqYyA9IGgtPnByaXZfZGF0 YTsKPj4+ICsgICAgcmV0dXJuIGZmdXJsX3NlZWsoYy0+aW5uZXIsIHBvcywgd2hlbmNlKTsKPj4+ ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBpcGZzX2Nsb3NlKFVSTENvbnRleHQgKmgpCj4+PiAr ewo+Pj4gKyAgICBJUEZTR2F0ZXdheUNvbnRleHQgKmMgPSBoLT5wcml2X2RhdGE7Cj4+PiArICAg IHJldHVybiBmZnVybF9jbG9zZXAoJmMtPmlubmVyKTsKPj4+ICt9Cj4+PiArCj4+PiArI2RlZmlu ZSBPRkZTRVQoeCkgb2Zmc2V0b2YoSVBGU0dhdGV3YXlDb250ZXh0LCB4KQo+Pj4gKwo+Pj4gK3N0 YXRpYyBjb25zdCBBVk9wdGlvbiBvcHRpb25zW10gPSB7Cj4+PiArICAgIHsiZ2F0ZXdheSIsICJU aGUgZ2F0ZXdheSB0byBhc2sgZm9yIElQRlMgZGF0YS4iLCBPRkZTRVQoZ2F0ZXdheSksCj4+IEFW X09QVF9UWVBFX1NUUklORywgey5zdHIgPSBOVUxMfSwgMCwgMCwgQVZfT1BUX0ZMQUdfREVDT0RJ TkdfUEFSQU19LAo+Pj4gKyAgICB7TlVMTH0sCj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgY29u c3QgQVZDbGFzcyBpcGZzX2NvbnRleHRfY2xhc3MgPSB7Cj4+PiArICAgIC5jbGFzc19uYW1lICAg PSAiSVBGUyIsCj4+PiArICAgIC5pdGVtX25hbWUgICAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwK Pj4+ICsgICAgLm9wdGlvbiAgICAgICA9IG9wdGlvbnMsCj4+PiArICAgIC52ZXJzaW9uICAgICAg PSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQsCj4+PiArfTsKPj4+ICsKPj4+ICtjb25zdCBVUkxQcm90 b2NvbCBmZl9pcGZzX3Byb3RvY29sID0gewo+Pj4gKyAgICAubmFtZSAgICAgICAgICAgICA9ICJp cGZzIiwKPj4+ICsgICAgLnVybF9vcGVuMiAgICAgICAgPSB0cmFuc2xhdGVfaXBmc190b19odHRw LAo+Pj4gKyAgICAudXJsX3JlYWQgICAgICAgICA9IGlwZnNfcmVhZCwKPj4+ICsgICAgLnVybF9z ZWVrICAgICAgICAgPSBpcGZzX3NlZWssCj4+PiArICAgIC51cmxfY2xvc2UgICAgICAgID0gaXBm c19jbG9zZSwKPj4+ICsgICAgLnByaXZfZGF0YV9zaXplICAgPSBzaXplb2YoSVBGU0dhdGV3YXlD b250ZXh0KSwKPj4+ICsgICAgLnByaXZfZGF0YV9jbGFzcyAgPSAmaXBmc19jb250ZXh0X2NsYXNz LAo+Pj4gK307Cj4+PiArCj4+PiArY29uc3QgVVJMUHJvdG9jb2wgZmZfaXBuc19wcm90b2NvbCA9 IHsKPj4+ICsgICAgLm5hbWUgICAgICAgICAgICAgPSAiaXBucyIsCj4+PiArICAgIC51cmxfb3Bl bjIgICAgICAgID0gdHJhbnNsYXRlX2lwZnNfdG9faHR0cCwKPj4+ICsgICAgLnVybF9yZWFkICAg ICAgICAgPSBpcGZzX3JlYWQsCj4+PiArICAgIC51cmxfc2VlayAgICAgICAgID0gaXBmc19zZWVr LAo+Pj4gKyAgICAudXJsX2Nsb3NlICAgICAgICA9IGlwZnNfY2xvc2UsCj4+PiArICAgIC5wcml2 X2RhdGFfc2l6ZSAgID0gc2l6ZW9mKElQRlNHYXRld2F5Q29udGV4dCksCj4+PiArICAgIC5wcml2 X2RhdGFfY2xhc3MgID0gJmlwZnNfY29udGV4dF9jbGFzcywKPj4+ICt9Owo+Pj4gZGlmZiAtLWdp dCBhL2xpYmF2Zm9ybWF0L3Byb3RvY29scy5jIGIvbGliYXZmb3JtYXQvcHJvdG9jb2xzLmMKPj4+ IGluZGV4IGQwNzU2M2NkMGMuLjZlZTYyYTU5OGEgMTAwNjQ0Cj4+PiAtLS0gYS9saWJhdmZvcm1h dC9wcm90b2NvbHMuYwo+Pj4gKysrIGIvbGliYXZmb3JtYXQvcHJvdG9jb2xzLmMKPj4+IEBAIC03 MSw2ICs3MSw4IEBAIGV4dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl9saWJzcnRfcHJvdG9jb2w7 Cj4+PiAgZXh0ZXJuIGNvbnN0IFVSTFByb3RvY29sIGZmX2xpYnNzaF9wcm90b2NvbDsKPj4+ICBl eHRlcm4gY29uc3QgVVJMUHJvdG9jb2wgZmZfbGlic21iY2xpZW50X3Byb3RvY29sOwo+Pj4gIGV4 dGVybiBjb25zdCBVUkxQcm90b2NvbCBmZl9saWJ6bXFfcHJvdG9jb2w7Cj4+PiArZXh0ZXJuIGNv bnN0IFVSTFByb3RvY29sIGZmX2lwZnNfcHJvdG9jb2w7Cj4+PiArZXh0ZXJuIGNvbnN0IFVSTFBy b3RvY29sIGZmX2lwbnNfcHJvdG9jb2w7Cj4+Pgo+Pj4gICNpbmNsdWRlICJsaWJhdmZvcm1hdC9w cm90b2NvbF9saXN0LmMiCj4+Pgo+Pgo+Pgo+IFRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIHlvdXIg cmV2aWV3IQo+IFBsZWFzZSBkbyBoaXQgbWUgYmFjayB3aXRoIGEgcmVwbHkgb24gdGhlIHF1ZXN0 aW9ucyBJIGhhdmUgc3RpbGwgb3Blbi4KPiAKPiBJJ20gaG9uZXN0bHkgcXVpdGUgZG9uZSB3aXRo IHBhdGNoaW5nIHRoaXMgb3ZlciBhbmQgb3ZlciBhZ2FpbiAoaXQncyBvcGVuCj4gZm9yIG1vbnRo cyBub3cpIHNvIEknZCBsaWtlIHRvIHB1dCB0aGUgcGFjZSBpbiB0aGVzZSBmaXhlcyBhbmQgc2Vu ZCBhbgo+IHVwZGF0ZWQgdmVyc2lvbiB0b2RheS4KPiAKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVn LWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZt cGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZt cGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K