From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <ffmpeg-devel-bounces@ffmpeg.org> Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 2C30C4CECB for <ffmpegdev@gitmailbox.com>; Tue, 15 Apr 2025 03:20:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 32718687CF5; Tue, 15 Apr 2025 06:20:06 +0300 (EEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11olkn2093.outbound.protection.outlook.com [40.92.19.93]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0E18A687A17 for <ffmpeg-devel@ffmpeg.org>; Tue, 15 Apr 2025 06:19:59 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=q1Kh2xvMkK8M6x60KT2FZCJ2ZOuymY41M+IEDPMY6tL7MAtLmu0qHhUj5hycchI+OJit60iaqvNevZg7osWnlXh66w2GNMgfauztu4BiC0HL8YSCNjgOwlVk3bpPaYd7JdWxBmTeaCopBnak73UwQcBTTwij/DGz8ggr00fNPVruH8XOcUChKFTQbKvmt5Xs0dNHPifWo5ctHiOLfGdCQGFSoMMB2MdT2t4ZoVGVwI6pK4WkAIl+xyunBPlHSga/Ldk89eHbai1MAlFxX+Tji7fQVlVeXMrbXtNyyQ7oUOpsi9A1pj3z+mHw8qn62gC6KX28w1Cr7M8fjm56C2a7sQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=dguMVLOxTHnLik4miilxAQZaXNuPf7oxhbnt430kmQE=; b=DTATalWvpmiKHqroiHSBOGcH8Bf2AilC6DfF6JMwKKY/chkmHxBpO5v4sxks+S2oscmqa3pthpjTFu8zieSUvWjT3K8E9RuyD8qWi88FYHTaApJ6qQZDlt3R2cnq0IkcLiQCTruxt6D3JQZbs51tr6zXWwsf2fECw56aPILdb81MYpZ5AO95XnZT7v7fRb0bhYUUildTbvaoBF+iNOWnWNwiqIG4uRVW2Ef7mt+nzRaPzjt+Z/Skk2gRA3RTNmE6ZN1xDukt2HFKNsBh5SFLjGK+9UXoI3mJyjN01af/Y3m0PCA5lCDXkMu2JzJWR6j/PnWIp/AcnxD32OrPhVEjXw== 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=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dguMVLOxTHnLik4miilxAQZaXNuPf7oxhbnt430kmQE=; b=QXaswRTuKRXl/BFvz1JpXz+WFzLVlKJzsaqzU4PSCkVcJVVAWsvC5spT8/zvLFdPg2jRkU+wnHMvRMk5Zuxn2iKYvtMaXj4WX+WkqZuhP1qABIbpIf9ceqddjxpULRsIZsuQFscCuDbXHny5qWxyyqkGk3gHzy1hUQTuU524kBB8utleQcqAK4c/2i/vdDF6n28mAmXUummH+exzkR76ImXCQgy9hblD4CIY/4HJRvDIwEY6+C7q18ESb/LWKUf+pMhY4S/U7iTfUryxe7pYmBHypK7NSQyc3bFdCF2v0GZWkKVamaNCscNq20Ismjcp+ya9hVLHvyNhYNLJVejmwQ== Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM (2603:10b6:8:b::20) by BL3P223MB0067.NAMP223.PROD.OUTLOOK.COM (2603:10b6:208:348::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.36; Tue, 15 Apr 2025 03:19:55 +0000 Received: from DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::bf09:8e9:b07f:98a7]) by DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM ([fe80::bf09:8e9:b07f:98a7%4]) with mapi id 15.20.8632.030; Tue, 15 Apr 2025 03:19:54 +0000 From: "softworkz ." <softworkz-at-hotmail.com@ffmpeg.org> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Thread-Topic: [FFmpeg-devel] [PATCH 2/9] fftools/textformat: Quality improvements Thread-Index: AQHbrTth1w+2rYOrWU2mhQ1ZN1rSQ7Oj6pAAgAALFfA= Date: Tue, 15 Apr 2025 03:19:54 +0000 Message-ID: <DM8P223MB03659AF3483E00EC43597670BAB22@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> References: <pull.66.ffstaging.FFmpeg.1744634826.ffmpegagent@gmail.com> <04cce9150062afbe63fcf54af0f8480c386f4286.1744634827.git.ffmpegagent@gmail.com> <GV1P250MB073708D33D46AB881810F1728FB22@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> In-Reply-To: <GV1P250MB073708D33D46AB881810F1728FB22@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM8P223MB0365:EE_|BL3P223MB0067:EE_ x-ms-office365-filtering-correlation-id: ee68dc49-0494-4a3e-3caa-08dd7bcc649d x-ms-exchange-slblob-mailprops: 9IecXKUgicA7+VuJlYgio7csxP7RAb93mBgDLhfhuW+GXapu0MUacqACVr0gNDb55gskbSRSRJbkrBAKKNaH9zLvaHvlres1BtOJ9p4sFFnIZ3DY9HwZai8qLpJ9O5cc9sgLbkjL5iFkSDFd1K6e7CuiYTI32yVrOBvAOkcIudVgNA5YfSiPJyxIOq61O+mkYt0Di5BWmHnnodj7WyeCXWjXRvM1h86ZVr6aNPKSY990zC0O0uOEm/QoNQr0eYfFo3F5rRz2fxmxGMN37Ki3YNdgCcFRBNJ76UFwwinPF8lkzrR+XvBRqNKVIF2mi0EcrL8CNpQgVut/e2Madsw+G0suvN5U9UoysJPaqJ4AICCZxPX8eXJFeLGYR2sKlCcithuh1lP9JBaPv7dreg9kfl85zgBVlqnUiBdTsvWBDPsFt74Q82uLBtZwlMBCD1y1ajB/zss7beR6buhM9mCj8iP2uN2uFWAPk2gL3Yl4/65uEz0Qs9K2tzdm0HmPTwktz9fgfMPwZoS9VkbKLRkSDbKv93B9CnBrdZZd+cpcua9lXK4WuE5xT194++hymnUNkSdCRdnw4JUEu3RccoLnmaOh35gxvUpGW7/ViHwF9rJ+CP+JZlxaB+zdiCHzGtcmHtOKxpq+HyP0JEDVr/TeZWn5vWOfRJdZWQCrGElcJ9Uy1PfOcurIKODRj1sZHgLlK+R+QOSqZu35D/lOq14axdyKY6xGwq3wX53JRYo1seKZm9q2Us44qw== x-microsoft-antispam: BCL:0; ARA:14566002|15080799006|8062599003|7092599003|8060799006|19110799003|461199028|3412199025|440099028|102099032|41001999003|18061999006; x-microsoft-antispam-message-info: =?utf-8?B?dXRsNFpOM1d5Mk9XeTZvSWtnbDFiWTV0Rkl1eXRpK3hla0s3ZktNUCtLdW5H?= =?utf-8?B?QmRQaDJYdk82UUFyR0xXTWRGTzVCelBRVGV1MGlldCtCbTN4RWlXVERQM3F5?= =?utf-8?B?VG9pc2VCZFF0eEsrQ1lPcDV4VTNqa1dwcUQ4R2V2TmpvZlNQdkVSa3ZVaTRW?= =?utf-8?B?UndYUjMwTkdaeko4RldUY3NIVENjZFhZeWphaE8vdGcxWHNOUzV3ZHZjZDZx?= =?utf-8?B?WHZYL2FTY1V1U0x3dXV6cmtiUnIvUERuRU1DZGNOVEFzQ2NXV01XVlNmeTVv?= =?utf-8?B?dEhWcllER05Sc2x6TnJ2Tk9xVDRKeVNPbm8rYURIUzRmRnNsRjNWay92VHNr?= =?utf-8?B?em9EbVBQYUZvZ1NQOUprSUdNcUsxaTZCMmRMWGEvNmE0Uk1Zb0NiYlZDYmpP?= =?utf-8?B?Tm8wR0pMNFhTSGpFQTh4cFN5b2hJTndYeFc3c1hRek1CeE8yQ2JzTXFSRXVC?= =?utf-8?B?MWsrZzI0S3kyMmNVcGtZbmpUbXpITzNKd1pXd3B4U1doZlRDTmcyUnNDYldB?= =?utf-8?B?cHFrQ0VVR3VkcHl4U2FzYlhkQnpTNDZINVhXNlQrbnBVS0NGeGw2ZTVldkRR?= =?utf-8?B?U0VkUEt6MWxSRWRYa25iaFE3Tm1lOVBEMnpJMHY3ZFArR25DR1NDU3VjcmVj?= =?utf-8?B?ZlZ2bmQzVVluMkZ5cU1rU0FNTXBqWmd1ZW1UQkd1aE1WOUxVcklLUkhyYndk?= =?utf-8?B?K0JGK0lyVlpkVE84WktIei9OMG8rTHEwSU5UWHNDRno1ci9SZktIWmNxbk83?= =?utf-8?B?c21xcFF6NXFXNFpDaDFyOE04Z1IwR1llYTNtdFFSbG5VU3dFREk2YVVFejQv?= =?utf-8?B?MDRIZHZhQ1E4ZEZ0bG0xTkxNVEFIbGhZM2pVb0lJZFZyTFRiMWdyalBRWjB0?= =?utf-8?B?eEMrN2RVUnRXOEN5SitSTmVBbDUrNnJSakNOQ09CL2NnMWZsZ0YxYzczc09J?= =?utf-8?B?TnkwN0N1SUZGQXNGUEdCcWFCc09NaVdYTzlCaGhsaTRwMVYzZzBHb0xNWXpu?= =?utf-8?B?Z1NYNCtlYUsxZDVUL0tYeEpUT3kzb2JXQm56bEhpTFUybWtkZjFGc1pqZ3Y5?= =?utf-8?B?YUVBY0NGblpkQWp0VjgrblU1UjZDaTNPd2ppZUgyVnZ6bmM1RlFjL0wxaURs?= =?utf-8?B?K3lDOVgwSVVYOVVqVVZSWVZGd3JWWXBhUGRTNXQwZVhLMi9NeDhRQng0Y2hG?= =?utf-8?B?eUY3Nk13eFkweXJ4bDVScVRlcllrMzBlNTRVRHNxem53R0pJQjB4U3JHS3lE?= =?utf-8?B?YUNnNU8xbnJ2K1NWdW1qamc0ODVEblNwcm1BZnRuK3hvU3hHeW1wQ1RiSTIz?= =?utf-8?B?bWkxRUQ3Yk5pUWNrekRUNElWcHVZKzFDRjM5VkN1YVFDRlVjQ1BQVjcvNE5H?= =?utf-8?B?czNyUDFidjVOTjM3b3gxM3lmckZQMzdnemJ5Z09nMGhZcWVjdzNqTEJteE1H?= =?utf-8?B?ZVpZY0hHS3RSVTNXTVJCT0VyZW1JdlhpeVpqbG5KeHhmUmk2bTl1TlQ0N3p6?= =?utf-8?B?bWR2bUg4Q3NCRVA0QVhiaE1IRTZqc0xsMlkzTTFTbm5yQlBJcXlhT0Rxdmh0?= =?utf-8?Q?sx+0ekt2K6zC4Mos/S8Nk/hK0=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cGpqQUREMUllNW1tZ3RKa210V05pZE5MUzF2TjFXSEY2RlRKbFBkM2hNMSt5?= =?utf-8?B?TStLUlJXOHZKeENON1pWRVY2c09pLzJ0QnNqbzAvV1hCTzVKRFpUZmJudzJv?= =?utf-8?B?cVJ4bHYwaFdxai9YMjVRRlBqbFI5ZCs3VHZvZnkxSVBkMXVwQ2ZTOUdBUFlI?= =?utf-8?B?MWhRUVFSUk9FNFRpZTgzTk9rbjJqWHF2SkhDSnB1VnR3eGppZXFqMzNVeTJu?= =?utf-8?B?SWRYSDc0SVFIZ1dMOWMvZVQ5TXNBeDA0bTQrcTRKOGgwZnNLT3g4K2U0ZVlh?= =?utf-8?B?UXc1TzFxTE1PVklscmgvc0tyQnI5ZjBCcmJBSUJXT2lMdk1Cb1lUTzV5VmtV?= =?utf-8?B?cFFZeTg4bFN0Vkdlcy9xYStld3RiNVhmVnJ0MGI5ZFZzYVEzZEtvS056cWpu?= =?utf-8?B?U25EdFF6a1Rwd1RrWnNraHNKZjYvNG9nd3RZOVBIaEVuSHJwdHJabWx1em84?= =?utf-8?B?cFpFSVJBcXpRUXBNaDRlY3VvaFJyU1RtbGpPSU1rb24wVklYVHZBNUxlNDh0?= =?utf-8?B?RGJDRGdHK3hKVzI0ZlNmekNIcmsrUHF3ZlkzK3JiVG54RTVITS9wdCtvYUw3?= =?utf-8?B?bzlNb0RJNDlWYmZ1ejZLY0orc2tMSWZCRUlJZlVwanA5L044QjZEbGpISE41?= =?utf-8?B?U0xSdFVDd2lEeFVWSURJeFdkdjIrQnZUYjkvR0NBeklBM0hGKzFEMzdNNEJi?= =?utf-8?B?b0JSVy9GdnNITmdRcDRsRW43eEJGMllkWDBGZnNyRjB1ZnlkNWRCMGIxVGNr?= =?utf-8?B?eXdYMTk1UnlrZWZVdUY3WUhKTUJUN3VZcGRxUDlma3JKc2JjaHl4S3A2VDda?= =?utf-8?B?VWZCc2hDcVFDWjRZUEVEYjZaVjJsNFIrdXhVcUJ0cytOU0pHZmNvQTEzZTZJ?= =?utf-8?B?RHJxcjZPMFpITUVocE1qQnBENEtvRGhZcGhHT1F3NnIyTFVWa3hNc3VIQjBJ?= =?utf-8?B?LzVPUm0rT3B1ZURnMjFUWDBGT3dnNnl4QlBlcHFiY3hzd01kTkpGdWM3eXh0?= =?utf-8?B?MUNYL1pibkM4VjlBRTdVTE0zZDU2blpBL0w2Szg2TjhDbGNHWm50WDVUTWZl?= =?utf-8?B?cVp0Wmo4RTh0dWhUTlBBbTlIQUFvUUd5YnF3a3JxclhHQTIrbFNwZ21CUm5r?= =?utf-8?B?Tm1EVWo0Wk54bmlBeXcySGxtM0VQZnE5a3gvczFZdlZxbUVRUndadUFTbjBZ?= =?utf-8?B?R0pJTnJFYXlnenUzbElHeWlXODljTDNnN2lVS0JoNWlrS2hnR0l4dHB3Q0l2?= =?utf-8?B?dmNiUXVVN1RCNmJoMzdDQXhyV0FjUDZXbERRTEpaRjVQd3A2aDlWTDJvam9m?= =?utf-8?B?Q1l6eGp5Mm1vWHF3dFlxc1FydVFLekxwUEJnL0VjVFBRR1JwNHpYdFZwRnBJ?= =?utf-8?B?NzJVL0M0dVhhcVV1ZGRRUkZMY3NXY2RCYklKK29tMHg3WDBVWnNKaDRvMGRl?= =?utf-8?B?aGZmMldPQ2ZpUTRDUUhZWUorSlZzWkxpd1VtSmFzTW93dDRBd3VwVXZleG9w?= =?utf-8?B?RW05ZEFacG12Zm5OakRwbGhVRjRKRUJHem05SldESFhJaEg0YUhPYTB5dnFE?= =?utf-8?B?QWRFZUNhV2RBVUgzSlpMV1FPU01nRUtXSTFEK01sMGlYRmJyTGpqSUJCK3Vq?= =?utf-8?Q?bBr5tttFoPj4oUCeou0faCfNy6BhYBw/PY5/YzWijEgg=3D?= MIME-Version: 1.0 X-OriginatorOrg: sct-15-20-7719-20-msonline-outlook-92255.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: ee68dc49-0494-4a3e-3caa-08dd7bcc649d X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Apr 2025 03:19:54.7598 (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: BL3P223MB0067 Subject: Re: [FFmpeg-devel] [PATCH 2/9] fftools/textformat: Quality improvements X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org> List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe> List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel> List-Post: <mailto:ffmpeg-devel@ffmpeg.org> List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help> List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe> Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org> Archived-At: <https://master.gitmailbox.com/ffmpegdev/DM8P223MB03659AF3483E00EC43597670BAB22@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZmZtcGVnLWRldmVsIDxm Zm1wZWctZGV2ZWwtYm91bmNlc0BmZm1wZWcub3JnPiBPbiBCZWhhbGYgT2YNCj4gQW5kcmVhcyBS aGVpbmhhcmR0DQo+IFNlbnQ6IERpZW5zdGFnLCAxNS4gQXByaWwgMjAyNSAwMzowNg0KPiBUbzog ZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcNCj4gU3ViamVjdDogUmU6IFtGRm1wZWctZGV2ZWxdIFtQ QVRDSCAyLzldIGZmdG9vbHMvdGV4dGZvcm1hdDogUXVhbGl0eQ0KPiBpbXByb3ZlbWVudHMNCj4g DQo+IHNvZnR3b3JrejoNCj4gPiBGcm9tOiBzb2Z0d29ya3ogPHNvZnR3b3JrekBob3RtYWlsLmNv bT4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IHNvZnR3b3JreiA8c29mdHdvcmt6QGhvdG1haWwu Y29tPg0KPiA+IC0tLQ0KPiA+ICBmZnRvb2xzL3RleHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmMgfCAx MjEgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tDQo+IC0tLQ0KPiA+ICBmZnRvb2xzL3RleHRm b3JtYXQvYXZ0ZXh0Zm9ybWF0LmggfCAgIDYgKy0NCj4gPiAgZmZ0b29scy90ZXh0Zm9ybWF0L3Rm X2RlZmF1bHQuYyAgIHwgICA4ICstDQo+ID4gIGZmdG9vbHMvdGV4dGZvcm1hdC90Zl9pbmkuYyAg ICAgICB8ICAgMiArLQ0KPiA+ICBmZnRvb2xzL3RleHRmb3JtYXQvdGZfanNvbi5jICAgICAgfCAg IDggKy0NCj4gPiAgZmZ0b29scy90ZXh0Zm9ybWF0L3RmX3htbC5jICAgICAgIHwgICAzIC0NCj4g PiAgZmZ0b29scy90ZXh0Zm9ybWF0L3R3X2F2aW8uYyAgICAgIHwgICA5ICsrLQ0KPiA+ICA3IGZp bGVzIGNoYW5nZWQsIDEwMSBpbnNlcnRpb25zKCspLCA1NiBkZWxldGlvbnMoLSkNCj4gPg0KPiA+ IGRpZmYgLS1naXQgYS9mZnRvb2xzL3RleHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmMNCj4gYi9mZnRv b2xzL3RleHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmMNCj4gPiBpbmRleCAxY2U1MWQxMWUyLi40MDYw MjVkMTlkIDEwMDY0NA0KPiA+IC0tLSBhL2ZmdG9vbHMvdGV4dGZvcm1hdC9hdnRleHRmb3JtYXQu Yw0KPiA+ICsrKyBiL2ZmdG9vbHMvdGV4dGZvcm1hdC9hdnRleHRmb3JtYXQuYw0KPiA+IEBAIC05 Myw5ICs5Myw4IEBAIHN0YXRpYyBjb25zdCBBVkNsYXNzIHRleHRjb250ZXh0X2NsYXNzID0gew0K PiA+DQo+ID4gIHN0YXRpYyB2b2lkIGJwcmludF9ieXRlcyhBVkJQcmludCAqYnAsIGNvbnN0IHVp bnQ4X3QgKnVidWYsIHNpemVfdA0KPiB1YnVmX3NpemUpDQo+ID4gIHsNCj4gPiAtICAgIGludCBp Ow0KPiA+ICAgICAgYXZfYnByaW50ZihicCwgIjBYIik7DQo+ID4gLSAgICBmb3IgKGkgPSAwOyBp IDwgdWJ1Zl9zaXplOyBpKyspDQo+ID4gKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdWJ1 Zl9zaXplOyBpKyspDQo+IA0KPiBXaHkgbm90IHNpemVfdD8NCg0KQmVjYXVzZSBpdCBjcmVhdGVz IG1vcmUgd2FybmluZ3MgYWJvdXQgbmFycm93aW5nIGNvbnZlcnNpb25zLg0KDQoNCg0KPiA+ICAg ICAgICAgIGF2X2JwcmludGYoYnAsICIlMDJYIiwgdWJ1ZltpXSk7DQo+ID4gIH0NCj4gPg0KPiA+ IEBAIC0xMTAsOCArMTA5LDYgQEAgaW50IGF2dGV4dF9jb250ZXh0X2Nsb3NlKEFWVGV4dEZvcm1h dENvbnRleHQNCj4gKipwdGN0eCkNCj4gPg0KPiA+ICAgICAgYXZfaGFzaF9mcmVlcCgmdGN0eC0+ aGFzaCk7DQo+ID4NCj4gPiAtICAgIGF2X2hhc2hfZnJlZXAoJnRjdHgtPmhhc2gpOw0KPiA+IC0N Cj4gPiAgICAgIGlmICh0Y3R4LT5mb3JtYXR0ZXItPnVuaW5pdCkNCj4gPiAgICAgICAgICB0Y3R4 LT5mb3JtYXR0ZXItPnVuaW5pdCh0Y3R4KTsNCj4gPiAgICAgIGZvciAoaSA9IDA7IGkgPCBTRUNU SU9OX01BWF9OQl9MRVZFTFM7IGkrKykNCj4gPiBAQCAtMTQxLDEyICsxMzgsMTggQEAgaW50IGF2 dGV4dF9jb250ZXh0X29wZW4oQVZUZXh0Rm9ybWF0Q29udGV4dA0KPiAqKnB0Y3R4LA0KPiA+ICAg ICAgQVZUZXh0Rm9ybWF0Q29udGV4dCAqdGN0eDsNCj4gPiAgICAgIGludCBpLCByZXQgPSAwOw0K PiA+DQo+ID4gLSAgICBpZiAoISh0Y3R4ID0gYXZfbWFsbG9jeihzaXplb2YoQVZUZXh0Rm9ybWF0 Q29udGV4dCkpKSkgew0KPiA+ICsgICAgaWYgKCFwdGN0eCB8fCAhZm9ybWF0dGVyKQ0KPiA+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQo+IA0KPiBDYW4gdGhpcyBoYXBwZW4/DQoN CnNlZSBiZWxvdw0KDQo+ID4gKw0KPiA+ICsgICAgaWYgKCFmb3JtYXR0ZXItPnByaXZfc2l6ZSAm JiBmb3JtYXR0ZXItPnByaXZfY2xhc3MpDQo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsNCj4gDQo+IFN0dWZmIGxpa2UgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGFuZCBzaG91 bGQgbm90IGJlIGNoZWNrZWQgKG9yDQo+IGFjdHVhbGx5OiB0aGUgcHJvcGVyIHBsYWNlIHRvIGNo ZWNrIHN0dWZmIGxpa2UgdGhpcyBpcyBpbiB0ZXN0IHRvb2xzDQo+IGxpa2UgbGF2Yy90ZXN0cy9h dmNvZGVjLmMsIGJ1dCBJIGRvbid0IHRoaW5rIGl0IGlzIHdvcnRoIGl0IGZvcg0KPiBmZnRvb2xz KS4NCg0KSSBwcm9iYWJseSBvdmVyZGlkIGl0IGEgYml0IHdpdGggY2hlY2tzLCBidXQgdGhlIGdv YWwgZm9yIHRoaXMgQVBJIA0KaXMgc3RpbGwgdG8gYmVjb21lIHB1YmxpYyBhdCBzb21lIHBvaW50 IChsaWtlIGluIGF2dXRpbCksIHNvIEkgDQp0cmllZCB0byBtb3ZlIHRvd2FyZHMgdGhhdCBkaXJl Y3Rpb24gYWxyZWFkeS4NCg0KDQoNCg0KPiA+ICsNCj4gPiArICAgIGlmICghKCh0Y3R4ID0gYXZf bWFsbG9jeihzaXplb2YoQVZUZXh0Rm9ybWF0Q29udGV4dCkpKSkpIHsNCj4gPiAgICAgICAgICBy ZXQgPSBBVkVSUk9SKEVOT01FTSk7DQo+ID4gICAgICAgICAgZ290byBmYWlsOw0KPiA+ICAgICAg fQ0KPiA+DQo+ID4gLSAgICBpZiAoISh0Y3R4LT5wcml2ID0gYXZfbWFsbG9jeihmb3JtYXR0ZXIt PnByaXZfc2l6ZSkpKSB7DQo+ID4gKyAgICBpZiAoZm9ybWF0dGVyLT5wcml2X3NpemUgJiYgISgo dGN0eC0+cHJpdiA9DQo+IGF2X21hbGxvY3ooZm9ybWF0dGVyLT5wcml2X3NpemUpKSkpIHsNCj4g PiAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7DQo+ID4gICAgICAgICAgZ290byBmYWls Ow0KPiA+ICAgICAgfQ0KPiA+IEBAIC0yMTUsMTUgKzIxOCwxNSBAQCBpbnQgYXZ0ZXh0X2NvbnRl eHRfb3BlbihBVlRleHRGb3JtYXRDb250ZXh0DQo+ICoqcHRjdHgsDQo+ID4NCj4gPiAgICAgIC8q IHZhbGlkYXRlIHJlcGxhY2Ugc3RyaW5nICovDQo+ID4gICAgICB7DQo+ID4gLSAgICAgICAgY29u c3QgdWludDhfdCAqcCA9IHRjdHgtPnN0cmluZ192YWxpZGF0aW9uX3JlcGxhY2VtZW50Ow0KPiA+ IC0gICAgICAgIGNvbnN0IHVpbnQ4X3QgKmVuZHAgPSBwICsgc3RybGVuKHApOw0KPiA+ICsgICAg ICAgIGNvbnN0IHVpbnQ4X3QgKnAgPSAodWludDhfdCAqKXRjdHgtDQo+ID5zdHJpbmdfdmFsaWRh dGlvbl9yZXBsYWNlbWVudDsNCj4gPiArICAgICAgICBjb25zdCB1aW50OF90ICplbmRwID0gcCAr IHN0cmxlbigoY29uc3QgY2hhciAqKXApOw0KPiA+ICAgICAgICAgIHdoaWxlICgqcCkgew0KPiA+ ICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwMCA9IHA7DQo+ID4gICAgICAgICAgICAgIGlu dDMyX3QgY29kZTsNCj4gPiAgICAgICAgICAgICAgcmV0ID0gYXZfdXRmOF9kZWNvZGUoJmNvZGUs ICZwLCBlbmRwLCB0Y3R4LQ0KPiA+c3RyaW5nX3ZhbGlkYXRpb25fdXRmOF9mbGFncyk7DQo+ID4g ICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7DQo+ID4gICAgICAgICAgICAgICAgICBBVkJQcmlu dCBicDsNCj4gPiAtICAgICAgICAgICAgICAgIGF2X2JwcmludF9pbml0KCZicCwgMCwgQVZfQlBS SU5UX1NJWkVfQVVUT01BVElDKTsNCj4gPiArICAgICAgICAgICAgICAgIGF2X2JwcmludF9pbml0 KCZicCwgMCwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsNCj4gDQo+IFRoaXMgYWRkcyBhIG1l bWxlYWsgb24gZGF0YSB3aGVyZSBpdCBtYWtlcyBhIGRpZmZlcmVuY2UuDQoNCldoeT8gVGhlIHN0 cmluZ192YWxpZGF0aW9uX3JlcGxhY2VtZW50IHN0cmluZyBzaG91bGQgYmUgc2hvcnQgZW5vdWdo DQp0byBmaXQgaW50byB0aGUgc3RhY2stYWxsb2NhdGVkIG1lbW9yeSwgbm8/DQoNCg0KPiA+ICAg ICAgICAgICAgICAgICAgYnByaW50X2J5dGVzKCZicCwgcDAsIHAgLSBwMCksDQo+ID4gICAgICAg ICAgICAgICAgICAgICAgYXZfbG9nKHRjdHgsIEFWX0xPR19FUlJPUiwNCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkludmFsaWQgVVRGOCBzZXF1ZW5jZSAlcyBmb3VuZCBpbg0KPiBz dHJpbmcgdmFsaWRhdGlvbiByZXBsYWNlICclcydcbiIsDQo+ID4gQEAgLTI1OSw2ICsyNjIsOSBA QCBzdGF0aWMgY29uc3QgY2hhciB1bml0X2JpdF9wZXJfc2Vjb25kX3N0cltdID0NCj4gImJpdC9z IjsNCj4gPg0KPiA+ICB2b2lkIGF2dGV4dF9wcmludF9zZWN0aW9uX2hlYWRlcihBVlRleHRGb3Jt YXRDb250ZXh0ICp0Y3R4LCBjb25zdA0KPiB2b2lkICpkYXRhLCBpbnQgc2VjdGlvbl9pZCkNCj4g PiAgew0KPiA+ICsgICAgaWYgKCF0Y3R4IHx8IHNlY3Rpb25faWQgPCAwIHx8IHNlY3Rpb25faWQg Pj0gdGN0eC0+bmJfc2VjdGlvbnMpDQo+ID4gKyAgICAgICAgcmV0dXJuOw0KPiANCj4gQ2FuIHRo aXMgaGFwcGVuPw0KDQpGb3IgYSBwdWJsaWMgQVBJIC0gbWFueSB0aGluZ3MgY2FuIGhhcHBlbi4u Lg0KDQoNCj4gPiAgICAgIHRjdHgtPmxldmVsKys7DQo+ID4gICAgICBhdl9hc3NlcnQwKHRjdHgt PmxldmVsIDwgU0VDVElPTl9NQVhfTkJfTEVWRUxTKTsNCj4gPg0KPiA+IEBAIC0yNzIsNiArMjc4 LDkgQEAgdm9pZA0KPiBhdnRleHRfcHJpbnRfc2VjdGlvbl9oZWFkZXIoQVZUZXh0Rm9ybWF0Q29u dGV4dCAqdGN0eCwgY29uc3Qgdm9pZA0KPiAqZGF0YSwgaW4NCj4gPg0KPiA+ICB2b2lkIGF2dGV4 dF9wcmludF9zZWN0aW9uX2Zvb3RlcihBVlRleHRGb3JtYXRDb250ZXh0ICp0Y3R4KQ0KPiA+ICB7 DQo+ID4gKyAgICBpZiAoIXRjdHggfHwgdGN0eC0+bGV2ZWwgPCAwIHx8IHRjdHgtPmxldmVsID49 DQo+IFNFQ1RJT05fTUFYX05CX0xFVkVMUykNCj4gPiArICAgICAgICByZXR1cm47DQo+IA0KPiBD YW4gdGhpcyBoYXBwZW4/DQoNClllcyAtIHdoZW4gc29tZXdoZXJlIGluIEZGbXBlZyBzb21lIG91 dHB1dCBpcyBjaGFuZ2VkIHdpdGhvdXQgdGhpbmtpbmcNCmFib3V0IHRoYXQgdGhlcmUncyBhIG5l c3RpbmcgbGltaXQgb2YgU0VDVElPTl9NQVhfTkJfTEVWRUxTLg0KRXZlbiB3aGVuIG9ubHkgMiBv ciAzIHNlY3Rpb24gdHlwZXMgYXJlIGRlZmluZWQsIHRoZSBsZXZlbCBjYW4gZ28gYmV5b25kDQp0 aGF0IHZhbHVlLg0KDQoNCj4gDQo+ID4gKw0KPiA+ICAgICAgaW50IHNlY3Rpb25faWQgPSB0Y3R4 LT5zZWN0aW9uW3RjdHgtPmxldmVsXS0+aWQ7DQo+ID4gICAgICBpbnQgcGFyZW50X3NlY3Rpb25f aWQgPSB0Y3R4LT5sZXZlbA0KPiA+ICAgICAgICAgID8gdGN0eC0+c2VjdGlvblt0Y3R4LT5sZXZl bCAtIDFdLT5pZA0KPiA+IEBAIC0yODksNyArMjk4LDEyIEBAIHZvaWQNCj4gYXZ0ZXh0X3ByaW50 X3NlY3Rpb25fZm9vdGVyKEFWVGV4dEZvcm1hdENvbnRleHQgKnRjdHgpDQo+ID4NCj4gPiAgdm9p ZCBhdnRleHRfcHJpbnRfaW50ZWdlcihBVlRleHRGb3JtYXRDb250ZXh0ICp0Y3R4LCBjb25zdCBj aGFyDQo+ICprZXksIGludDY0X3QgdmFsKQ0KPiA+ICB7DQo+ID4gLSAgICBjb25zdCBzdHJ1Y3Qg QVZUZXh0Rm9ybWF0U2VjdGlvbiAqc2VjdGlvbiA9IHRjdHgtPnNlY3Rpb25bdGN0eC0NCj4gPmxl dmVsXTsNCj4gPiArICAgIGNvbnN0IEFWVGV4dEZvcm1hdFNlY3Rpb24gKnNlY3Rpb247DQo+ID4g Kw0KPiA+ICsgICAgaWYgKCF0Y3R4IHx8ICFrZXkgfHwgdGN0eC0+bGV2ZWwgPCAwIHx8IHRjdHgt PmxldmVsID49DQo+IFNFQ1RJT05fTUFYX05CX0xFVkVMUykNCj4gPiArICAgICAgICByZXR1cm47 DQo+IA0KPiBDYW4gdGhpcyBoYXBwZW4/DQoNCg0Kc2VlIGFib3ZlDQoNCg0KPiANCj4gPiArDQo+ ID4gKyAgICBzZWN0aW9uID0gdGN0eC0+c2VjdGlvblt0Y3R4LT5sZXZlbF07DQo+ID4NCj4gPiAg ICAgIGlmIChzZWN0aW9uLT5zaG93X2FsbF9lbnRyaWVzIHx8IGF2X2RpY3RfZ2V0KHNlY3Rpb24t DQo+ID5lbnRyaWVzX3RvX3Nob3csIGtleSwgTlVMTCwgMCkpIHsNCj4gPiAgICAgICAgICB0Y3R4 LT5mb3JtYXR0ZXItPnByaW50X2ludGVnZXIodGN0eCwga2V5LCB2YWwpOw0KPiA+IEBAIC0yOTks MjQgKzMxMywyOCBAQCB2b2lkIGF2dGV4dF9wcmludF9pbnRlZ2VyKEFWVGV4dEZvcm1hdENvbnRl eHQNCj4gKnRjdHgsIGNvbnN0IGNoYXIgKmtleSwgaW50NjRfdCB2YQ0KPiA+DQo+ID4gIHN0YXRp YyBpbmxpbmUgaW50IHZhbGlkYXRlX3N0cmluZyhBVlRleHRGb3JtYXRDb250ZXh0ICp0Y3R4LCBj aGFyDQo+ICoqZHN0cCwgY29uc3QgY2hhciAqc3JjKQ0KPiA+ICB7DQo+ID4gLSAgICBjb25zdCB1 aW50OF90ICpwLCAqZW5kcDsNCj4gPiArICAgIGNvbnN0IHVpbnQ4X3QgKnAsICplbmRwLCAqc3Jj cCA9IChjb25zdCB1aW50OF90ICopc3JjOw0KPiA+ICAgICAgQVZCUHJpbnQgZHN0YnVmOw0KPiA+ ICsgICAgQVZCUHJpbnQgYnA7DQo+ID4gICAgICBpbnQgaW52YWxpZF9jaGFyc19uYiA9IDAsIHJl dCA9IDA7DQo+ID4NCj4gPiArICAgIGlmICghdGN0eCB8fCAhZHN0cCB8fCAhc3JjKQ0KPiA+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQo+ID4gKw0KPiANCj4gQ2FuIHRoaXMgaGFw cGVuPw0KPiANCj4gPiArICAgICpkc3RwID0gTlVMTDsNCj4gPiAgICAgIGF2X2JwcmludF9pbml0 KCZkc3RidWYsIDAsIEFWX0JQUklOVF9TSVpFX1VOTElNSVRFRCk7DQo+ID4gKyAgICBhdl9icHJp bnRfaW5pdCgmYnAsIDAsIEFWX0JQUklOVF9TSVpFX1VOTElNSVRFRCk7DQo+ID4NCj4gPiAtICAg IGVuZHAgPSBzcmMgKyBzdHJsZW4oc3JjKTsNCj4gPiAtICAgIGZvciAocCA9IHNyYzsgKnA7KSB7 DQo+ID4gLSAgICAgICAgdWludDMyX3QgY29kZTsNCj4gPiArICAgIGVuZHAgPSBzcmNwICsgc3Ry bGVuKHNyYyk7DQo+ID4gKyAgICBmb3IgKHAgPSBzcmNwOyAqcDspIHsNCj4gPiArICAgICAgICBp bnQzMl90IGNvZGU7DQo+ID4gICAgICAgICAgaW50IGludmFsaWQgPSAwOw0KPiA+ICAgICAgICAg IGNvbnN0IHVpbnQ4X3QgKnAwID0gcDsNCj4gPg0KPiA+ICAgICAgICAgIGlmIChhdl91dGY4X2Rl Y29kZSgmY29kZSwgJnAsIGVuZHAsIHRjdHgtDQo+ID5zdHJpbmdfdmFsaWRhdGlvbl91dGY4X2Zs YWdzKSA8IDApIHsNCj4gPiAtICAgICAgICAgICAgQVZCUHJpbnQgYnA7DQo+ID4gLSAgICAgICAg ICAgIGF2X2JwcmludF9pbml0KCZicCwgMCwgQVZfQlBSSU5UX1NJWkVfQVVUT01BVElDKTsNCj4g PiAtICAgICAgICAgICAgYnByaW50X2J5dGVzKCZicCwgcDAsIHAtcDApOw0KPiA+IC0gICAgICAg ICAgICBhdl9sb2codGN0eCwgQVZfTE9HX0RFQlVHLA0KPiA+IC0gICAgICAgICAgICAgICAgICAg IkludmFsaWQgVVRGLTggc2VxdWVuY2UgJXMgZm91bmQgaW4gc3RyaW5nDQo+ICclcydcbiIsIGJw LnN0ciwgc3JjKTsNCj4gPiArICAgICAgICAgICAgYXZfYnByaW50X2NsZWFyKCZicCk7DQo+ID4g KyAgICAgICAgICAgIGJwcmludF9ieXRlcygmYnAsIHAwLCBwIC0gcDApOw0KPiA+ICsgICAgICAg ICAgICBhdl9sb2codGN0eCwgQVZfTE9HX0RFQlVHLCAiSW52YWxpZCBVVEYtOCBzZXF1ZW5jZSAl cw0KPiBmb3VuZCBpbiBzdHJpbmcgJyVzJ1xuIiwgYnAuc3RyLCBzcmMpOw0KPiA+ICAgICAgICAg ICAgICBpbnZhbGlkID0gMTsNCj4gPiAgICAgICAgICB9DQo+ID4NCj4gPiBAQCAtMzM2LDcgKzM1 NCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50DQo+IHZhbGlkYXRlX3N0cmluZyhBVlRleHRGb3JtYXRD b250ZXh0ICp0Y3R4LCBjaGFyICoqZHN0cCwgY29uc3QNCj4gPiAgICAgICAgICB9DQo+ID4NCj4g PiAgICAgICAgICBpZiAoIWludmFsaWQgfHwgdGN0eC0+c3RyaW5nX3ZhbGlkYXRpb24gPT0NCj4g QVZfVEVYVEZPUk1BVF9TVFJJTkdfVkFMSURBVElPTl9JR05PUkUpDQo+ID4gLSAgICAgICAgICAg IGF2X2JwcmludF9hcHBlbmRfZGF0YSgmZHN0YnVmLCBwMCwgcC1wMCk7DQo+ID4gKyAgICAgICAg ICAgIGF2X2JwcmludF9hcHBlbmRfZGF0YSgmZHN0YnVmLCAoY29uc3QgY2hhciAqKXAwLCBwIC0N Cj4gcDApOw0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gICAgICBpZiAoaW52YWxpZF9jaGFyc19uYiAm JiB0Y3R4LT5zdHJpbmdfdmFsaWRhdGlvbiA9PQ0KPiBBVl9URVhURk9STUFUX1NUUklOR19WQUxJ REFUSU9OX1JFUExBQ0UpDQo+ID4gQEAgLTM0Niw2ICszNjQsNyBAQCBzdGF0aWMgaW5saW5lIGlu dA0KPiB2YWxpZGF0ZV9zdHJpbmcoQVZUZXh0Rm9ybWF0Q29udGV4dCAqdGN0eCwgY2hhciAqKmRz dHAsIGNvbnN0DQo+ID4NCj4gPiAgZW5kOg0KPiA+ICAgICAgYXZfYnByaW50X2ZpbmFsaXplKCZk c3RidWYsIGRzdHApOw0KPiA+ICsgICAgYXZfYnByaW50X2ZpbmFsaXplKCZicCwgTlVMTCk7DQo+ ID4gICAgICByZXR1cm4gcmV0Ow0KPiA+ICB9DQo+ID4NCj4gPiBAQCAtMzU4LDE3ICszNzcsMTgg QEAgc3RydWN0IHVuaXRfdmFsdWUgew0KPiA+ICAgICAgY29uc3QgY2hhciAqdW5pdDsNCj4gPiAg fTsNCj4gPg0KPiA+IC1zdGF0aWMgY2hhciAqdmFsdWVfc3RyaW5nKEFWVGV4dEZvcm1hdENvbnRl eHQgKnRjdHgsIGNoYXIgKmJ1ZiwgaW50DQo+IGJ1Zl9zaXplLCBzdHJ1Y3QgdW5pdF92YWx1ZSB1 dikNCj4gPiArc3RhdGljIGNoYXIgKnZhbHVlX3N0cmluZyhjb25zdCBBVlRleHRGb3JtYXRDb250 ZXh0ICp0Y3R4LCBjaGFyDQo+ICpidWYsIGludCBidWZfc2l6ZSwgc3RydWN0IHVuaXRfdmFsdWUg dXYpDQo+ID4gIHsNCj4gPiAgICAgIGRvdWJsZSB2YWxkOw0KPiA+IC0gICAgaW50NjRfdCB2YWxp Ow0KPiA+ICsgICAgaW50NjRfdCB2YWxpID0gMDsNCj4gPiAgICAgIGludCBzaG93X2Zsb2F0ID0g MDsNCj4gPg0KPiA+ICAgICAgaWYgKHV2LnVuaXQgPT0gdW5pdF9zZWNvbmRfc3RyKSB7DQo+ID4g ICAgICAgICAgdmFsZCA9IHV2LnZhbC5kOw0KPiA+ICAgICAgICAgIHNob3dfZmxvYXQgPSAxOw0K PiA+ICAgICAgfSBlbHNlIHsNCj4gPiAtICAgICAgICB2YWxkID0gdmFsaSA9IHV2LnZhbC5pOw0K PiA+ICsgICAgICAgIHZhbGQgPSAoZG91YmxlKXV2LnZhbC5pOw0KPiA+ICsgICAgICAgIHZhbGkg PSB1di52YWwuaTsNCj4gPiAgICAgIH0NCj4gPg0KPiA+ICAgICAgaWYgKHV2LnVuaXQgPT0gdW5p dF9zZWNvbmRfc3RyICYmIHRjdHgtDQo+ID51c2VfdmFsdWVfc2V4YWdlc2ltYWxfZm9ybWF0KSB7 DQo+ID4gQEAgLTM4NywxNyArNDA3LDE3IEBAIHN0YXRpYyBjaGFyICp2YWx1ZV9zdHJpbmcoQVZU ZXh0Rm9ybWF0Q29udGV4dA0KPiAqdGN0eCwgY2hhciAqYnVmLCBpbnQgYnVmX3NpemUsIHN0DQo+ ID4gICAgICAgICAgICAgIGludDY0X3QgaW5kZXg7DQo+ID4NCj4gPiAgICAgICAgICAgICAgaWYg KHV2LnVuaXQgPT0gdW5pdF9ieXRlX3N0ciAmJiB0Y3R4LQ0KPiA+dXNlX2J5dGVfdmFsdWVfYmlu YXJ5X3ByZWZpeCkgew0KPiA+IC0gICAgICAgICAgICAgICAgaW5kZXggPSAoaW50NjRfdCkgKGxv ZzIodmFsZCkpIC8gMTA7DQo+ID4gLSAgICAgICAgICAgICAgICBpbmRleCA9IGF2X2NsaXAoaW5k ZXgsIDAsDQo+IEZGX0FSUkFZX0VMRU1TKHNpX3ByZWZpeGVzKSAtIDEpOw0KPiA+ICsgICAgICAg ICAgICAgICAgaW5kZXggPSAoaW50NjRfdCkobG9nMih2YWxkKSAvIDEwKTsNCj4gPiArICAgICAg ICAgICAgICAgIGluZGV4ID0gYXZfY2xpcDY0KGluZGV4LCAwLA0KPiBGRl9BUlJBWV9FTEVNUyhz aV9wcmVmaXhlcykgLSAxKTsNCj4gPiAgICAgICAgICAgICAgICAgIHZhbGQgLz0gc2lfcHJlZml4 ZXNbaW5kZXhdLmJpbl92YWw7DQo+ID4gICAgICAgICAgICAgICAgICBwcmVmaXhfc3RyaW5nID0g c2lfcHJlZml4ZXNbaW5kZXhdLmJpbl9zdHI7DQo+ID4gICAgICAgICAgICAgIH0gZWxzZSB7DQo+ ID4gLSAgICAgICAgICAgICAgICBpbmRleCA9IChpbnQ2NF90KSAobG9nMTAodmFsZCkpIC8gMzsN Cj4gPiAtICAgICAgICAgICAgICAgIGluZGV4ID0gYXZfY2xpcChpbmRleCwgMCwNCj4gRkZfQVJS QVlfRUxFTVMoc2lfcHJlZml4ZXMpIC0gMSk7DQo+ID4gKyAgICAgICAgICAgICAgICBpbmRleCA9 IChpbnQ2NF90KShsb2cxMCh2YWxkKSAvIDMpOw0KPiA+ICsgICAgICAgICAgICAgICAgaW5kZXgg PSBhdl9jbGlwNjQoaW5kZXgsIDAsDQo+IEZGX0FSUkFZX0VMRU1TKHNpX3ByZWZpeGVzKSAtIDEp Ow0KPiA+ICAgICAgICAgICAgICAgICAgdmFsZCAvPSBzaV9wcmVmaXhlc1tpbmRleF0uZGVjX3Zh bDsNCj4gPiAgICAgICAgICAgICAgICAgIHByZWZpeF9zdHJpbmcgPSBzaV9wcmVmaXhlc1tpbmRl eF0uZGVjX3N0cjsNCj4gPiAgICAgICAgICAgICAgfQ0KPiA+IC0gICAgICAgICAgICB2YWxpID0g dmFsZDsNCj4gPiArICAgICAgICAgICAgdmFsaSA9IChpbnQ2NF90KXZhbGQ7DQo+ID4gICAgICAg ICAgfQ0KPiA+DQo+ID4gICAgICAgICAgaWYgKHNob3dfZmxvYXQgfHwgKHRjdHgtPnVzZV92YWx1 ZV9wcmVmaXggJiYgdmFsZCAhPQ0KPiAoaW50NjRfdCl2YWxkKSkNCj4gPiBAQCAtNDI1LDkgKzQ0 NSwxNCBAQCB2b2lkIGF2dGV4dF9wcmludF91bml0X2ludChBVlRleHRGb3JtYXRDb250ZXh0DQo+ ICp0Y3R4LCBjb25zdCBjaGFyICprZXksIGludCB2YWx1ZQ0KPiA+DQo+ID4gIGludCBhdnRleHRf cHJpbnRfc3RyaW5nKEFWVGV4dEZvcm1hdENvbnRleHQgKnRjdHgsIGNvbnN0IGNoYXIgKmtleSwN Cj4gY29uc3QgY2hhciAqdmFsLCBpbnQgZmxhZ3MpDQo+ID4gIHsNCj4gPiAtICAgIGNvbnN0IHN0 cnVjdCBBVlRleHRGb3JtYXRTZWN0aW9uICpzZWN0aW9uID0gdGN0eC0+c2VjdGlvblt0Y3R4LQ0K PiA+bGV2ZWxdOw0KPiA+ICsgICAgY29uc3QgQVZUZXh0Rm9ybWF0U2VjdGlvbiAqc2VjdGlvbjsN Cj4gPiAgICAgIGludCByZXQgPSAwOw0KPiA+DQo+ID4gKyAgICBpZiAoIXRjdHggfHwgIWtleSB8 fCAhdmFsIHx8IHRjdHgtPmxldmVsIDwgMCB8fCB0Y3R4LT5sZXZlbCA+PQ0KPiBTRUNUSU9OX01B WF9OQl9MRVZFTFMpDQo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4gDQo+ IENhbiB0aGlzIGhhcHBlbj8NCj4gDQo+ID4gKw0KPiA+ICsgICAgc2VjdGlvbiA9IHRjdHgtPnNl Y3Rpb25bdGN0eC0+bGV2ZWxdOw0KPiA+ICsNCj4gPiAgICAgIGlmICh0Y3R4LT5zaG93X29wdGlv bmFsX2ZpZWxkcyA9PSBTSE9XX09QVElPTkFMX0ZJRUxEU19ORVZFUiB8fA0KPiA+ICAgICAgICAg ICh0Y3R4LT5zaG93X29wdGlvbmFsX2ZpZWxkcyA9PSBTSE9XX09QVElPTkFMX0ZJRUxEU19BVVRP DQo+ID4gICAgICAgICAgICAgICYmIChmbGFncyAmIEFWX1RFWFRGT1JNQVRfUFJJTlRfU1RSSU5H X09QVElPTkFMKQ0KPiA+IEBAIC00NjIsNyArNDg3LDcgQEAgaW50IGF2dGV4dF9wcmludF9zdHJp bmcoQVZUZXh0Rm9ybWF0Q29udGV4dA0KPiAqdGN0eCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBj aGFyICoNCj4gPiAgdm9pZCBhdnRleHRfcHJpbnRfcmF0aW9uYWwoQVZUZXh0Rm9ybWF0Q29udGV4 dCAqdGN0eCwgY29uc3QgY2hhcg0KPiAqa2V5LCBBVlJhdGlvbmFsIHEsIGNoYXIgc2VwKQ0KPiA+ ICB7DQo+ID4gICAgICBBVkJQcmludCBidWY7DQo+ID4gLSAgICBhdl9icHJpbnRfaW5pdCgmYnVm LCAwLCBBVl9CUFJJTlRfU0laRV9BVVRPTUFUSUMpOw0KPiA+ICsgICAgYXZfYnByaW50X2luaXQo JmJ1ZiwgMCwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsNCj4gDQo+IFRoaXMgaXMgc3RyaWN0 bHkgd29yc2UgdGhhbiB3aGF0IHdhcyBoZXJlIGJlZm9yZTogV2l0aCBVTkxJTUlURUQgeW91DQo+ IHdvdWxkIGhhdmUgYSBtZW1sZWFrIGluIGNhc2UgdGhlIGludGVybmFsIGJ1ZmZlciB3b3VsZG4n dCBzdWZmaWNlLg0KPiAoQnV0IGFueXdheSwgdGhpcyBzaG91bGQgdXNlIHNucHJpbnRmLiBJIGp1 c3Qgc2VudCBhIHBhdGNoIGZvciB0aGlzLikNCg0KVG8gYmUgaG9uZXN0LCBJIGRvbid0IHNlZSBt dWNoIHZhbHVlIGluIEFWX0JQUklOVF9TSVpFX0FVVE9NQVRJQy4NCldoZW4gSSB3b3VsZCBuZWVk IHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWVzIG9mIGFsbCBicHJpbnQgb3BlcmF0aW9ucywNCmFs bCB0aGUgY29udmVuaWVuY2Ugd291bGQgZ28gb3ZlciBib2FyZCBpbnN0YW50bHkuIFVzaW5nIA0K QVZfQlBSSU5UX1NJWkVfQVVUT01BVElDIHdpdGhvdXQgcmV0dXJuIHZhbHVlIGNoZWNraW5nIGlz IGVycm9yLXByb25lDQphbmQgY2FuIGNhdXNlIGVycm9ycyB3aGljaCBtaWdodCBiZSBoYXJkIHRv IGlkZW50aWZ5Lg0KT24gdGhlIG90aGVyIHNpZGUsIGlkZW50aWZ5aW5nIHBsYWNlcyBpbiBjb2Rl IHdoZXJlIEFWX0JQUklOVF9TSVpFX1VOTElNSVRFRA0KaXMgdXNlZCBhbmQgZmluYWxpemUgaXMg bmVlZGVkIGlzIGEgbG90IGVhc2llciBhbmQgZG9lc24ndCBldmVuIG5lZWQNCmEgc3BlY2lmaWMg Y2FzZSBhbmQvb3IgZGVidWdnaW5nIHRvIGZpbmQgb3V0Lg0KDQpJbiB0aGUgd29yc3QgY2FzZSwg SSdkIHN0aWxsIHByZWZlciBhIG1lbW9yeSBsZWFrIG92ZXIgaW5jb3JyZWN0IA0KYmVoYXZpb3Ig KG9yIHdlbGwgLSBhbHdheXMgZGVwZW5kcyBvbiB0aGUgY2FzZSkuIEJ5IHRoYXQgSSBkb24ndCBt ZWFuIA0KZXJyb3JzIHRoYXQgYXJlIHJlcG9ydGVkIGFuZCBjYXVzaW5nIGZhaWx1cmUgYnV0IHRo b3NlIHRoaW5ncyB0aGF0IGFyZQ0KZmFpbGluZyBzaWxlbnRseSBhbmQgYXJlIGhhcmQgdG8gbm90 aWNlIG9yIHRyYWNlIGJhY2sgd2hlbiBub3RpY2luZy4NCg0KU3VyZWx5IG90aGVycyBtYXkgc2Vl IGl0IGRpZmZlcmVudGx5Lg0KDQoNCg0KPiANCj4gPiAgICAgIGF2X2JwcmludGYoJmJ1ZiwgIiVk JWMlZCIsIHEubnVtLCBzZXAsIHEuZGVuKTsNCj4gPiAgICAgIGF2dGV4dF9wcmludF9zdHJpbmco dGN0eCwga2V5LCBidWYuc3RyLCAwKTsNCj4gPiAgfQ0KPiA+IEBAIC00NzAsMTIgKzQ5NSwxMSBA QCB2b2lkIGF2dGV4dF9wcmludF9yYXRpb25hbChBVlRleHRGb3JtYXRDb250ZXh0DQo+ICp0Y3R4 LCBjb25zdCBjaGFyICprZXksIEFWUmF0aW9uYQ0KPiA+ICB2b2lkIGF2dGV4dF9wcmludF90aW1l KEFWVGV4dEZvcm1hdENvbnRleHQgKnRjdHgsIGNvbnN0IGNoYXIgKmtleSwNCj4gPiAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQ2NF90IHRzLCBjb25zdCBBVlJhdGlvbmFsICp0aW1lX2Jhc2Us IGludA0KPiBpc19kdXJhdGlvbikNCj4gPiAgew0KPiA+IC0gICAgY2hhciBidWZbMTI4XTsNCj4g PiAtDQo+ID4gICAgICBpZiAoKCFpc19kdXJhdGlvbiAmJiB0cyA9PSBBVl9OT1BUU19WQUxVRSkg fHwgKGlzX2R1cmF0aW9uICYmDQo+IHRzID09IDApKSB7DQo+ID4gICAgICAgICAgYXZ0ZXh0X3By aW50X3N0cmluZyh0Y3R4LCBrZXksICJOL0EiLA0KPiBBVl9URVhURk9STUFUX1BSSU5UX1NUUklO R19PUFRJT05BTCk7DQo+ID4gICAgICB9IGVsc2Ugew0KPiA+IC0gICAgICAgIGRvdWJsZSBkID0g dHMgKiBhdl9xMmQoKnRpbWVfYmFzZSk7DQo+ID4gKyAgICAgICAgY2hhciBidWZbMTI4XTsNCj4g PiArICAgICAgICBkb3VibGUgZCA9IGF2X3EyZCgqdGltZV9iYXNlKSAqIChkb3VibGUpdHM7DQo+ IA0KPiBXZSBhY3R1YWxseSB0cnkgdG8gYXZvaWQgZXhwbGljaXQgY2FzdHMgd2hlcmUgcG9zc2li bGUuDQoNCg0KSSdsbCBhbnN3ZXIgdGhhdCBzZXBhcmF0ZWx5Lg0KDQoNCg0KPiA+ICAgICAgICAg IHN0cnVjdCB1bml0X3ZhbHVlIHV2Ow0KPiA+ICAgICAgICAgIHV2LnZhbC5kID0gZDsNCj4gPiAg ICAgICAgICB1di51bml0ID0gdW5pdF9zZWNvbmRfc3RyOw0KPiA+IEBAIC00OTYsNyArNTIwLDgg QEAgdm9pZCBhdnRleHRfcHJpbnRfZGF0YShBVlRleHRGb3JtYXRDb250ZXh0DQo+ICp0Y3R4LCBj b25zdCBjaGFyICpuYW1lLA0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4 X3QgKmRhdGEsIGludCBzaXplKQ0KPiA+ICB7DQo+ID4gICAgICBBVkJQcmludCBicDsNCj4gPiAt ICAgIGludCBvZmZzZXQgPSAwLCBsLCBpOw0KPiA+ICsgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsN Cj4gPiArICAgIGludCBsLCBpOw0KPiA+DQo+ID4gICAgICBhdl9icHJpbnRfaW5pdCgmYnAsIDAs IEFWX0JQUklOVF9TSVpFX1VOTElNSVRFRCk7DQo+ID4gICAgICBhdl9icHJpbnRmKCZicCwgIlxu Iik7DQo+ID4gQEAgLTUyMywyNSArNTQ4LDI5IEBAIHZvaWQgYXZ0ZXh0X3ByaW50X2RhdGEoQVZU ZXh0Rm9ybWF0Q29udGV4dA0KPiAqdGN0eCwgY29uc3QgY2hhciAqbmFtZSwNCj4gPiAgdm9pZCBh dnRleHRfcHJpbnRfZGF0YV9oYXNoKEFWVGV4dEZvcm1hdENvbnRleHQgKnRjdHgsIGNvbnN0IGNo YXINCj4gKm5hbWUsDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50 OF90ICpkYXRhLCBpbnQgc2l6ZSkNCj4gPiAgew0KPiA+IC0gICAgY2hhciAqcCwgYnVmW0FWX0hB U0hfTUFYX1NJWkUgKiAyICsgNjRdID0geyAwIH07DQo+ID4gKyAgICBjaGFyIGJ1ZltBVl9IQVNI X01BWF9TSVpFICogMiArIDY0XSA9IHsgMCB9Ow0KPiA+ICsgICAgaW50IGxlbjsNCj4gPg0KPiA+ ICAgICAgaWYgKCF0Y3R4LT5oYXNoKQ0KPiA+ICAgICAgICAgIHJldHVybjsNCj4gPg0KPiA+ICAg ICAgYXZfaGFzaF9pbml0KHRjdHgtPmhhc2gpOw0KPiA+ICAgICAgYXZfaGFzaF91cGRhdGUodGN0 eC0+aGFzaCwgZGF0YSwgc2l6ZSk7DQo+ID4gLSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYp LCAiJXM6IiwgYXZfaGFzaF9nZXRfbmFtZSh0Y3R4LQ0KPiA+aGFzaCkpOw0KPiA+IC0gICAgcCA9 IGJ1ZiArIHN0cmxlbihidWYpOw0KPiA+IC0gICAgYXZfaGFzaF9maW5hbF9oZXgodGN0eC0+aGFz aCwgcCwgYnVmICsgc2l6ZW9mKGJ1ZikgLSBwKTsNCj4gPiArICAgIGxlbiA9IHNucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksICIlczoiLCBhdl9oYXNoX2dldF9uYW1lKHRjdHgtDQo+ID5oYXNoKSk7 DQo+ID4gKyAgICBhdl9oYXNoX2ZpbmFsX2hleCh0Y3R4LT5oYXNoLCAodWludDhfdCAqKSZidWZb bGVuXSwNCj4gKGludClzaXplb2YoYnVmKSAtIGxlbik7DQo+IA0KPiBJcyBpdCBndWFyYW50ZWVk IHRoYXQgdGhlIG91dHB1dCBvZiBzbnByaW50ZigpIGlzIG5vdCB0cnVuY2F0ZWQ/DQoNCk1BWF9I QVNIX05BTUVfU0laRSBpcyAxMSBhbmQgQVZfSEFTSF9NQVhfU0laRSA2NCwgbWFrZSAxOTIgLSAx MSA+IDANCg0KDQo+IA0KPiA+ICAgICAgYXZ0ZXh0X3ByaW50X3N0cmluZyh0Y3R4LCBuYW1lLCBi dWYsIDApOw0KPiA+ICB9DQo+ID4NCj4gPiAgdm9pZCBhdnRleHRfcHJpbnRfaW50ZWdlcnMoQVZU ZXh0Rm9ybWF0Q29udGV4dCAqdGN0eCwgY29uc3QgY2hhcg0KPiAqbmFtZSwNCj4gPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGEsIGludCBzaXplLCBjb25z dA0KPiBjaGFyICpmb3JtYXQsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgY29sdW1ucywgaW50IGJ5dGVzLCBpbnQNCj4gb2Zmc2V0X2FkZCkNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgaW50IHNpemUsIGNvbnN0IGNoYXIN Cj4gKmZvcm1hdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbnMs IGludCBieXRlcywgaW50IG9mZnNldF9hZGQpDQo+ID4gIHsNCj4gPiAgICAgIEFWQlByaW50IGJw Ow0KPiA+IC0gICAgaW50IG9mZnNldCA9IDAsIGwsIGk7DQo+ID4gKyAgICB1bnNpZ25lZCBvZmZz ZXQgPSAwOw0KPiA+ICsgICAgaW50IGwsIGk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKCFuYW1lIHx8 ICFkYXRhIHx8ICFmb3JtYXQgfHwgY29sdW1ucyA8PSAwIHx8IGJ5dGVzIDw9IDApDQo+ID4gKyAg ICAgICAgcmV0dXJuOw0KPiANCj4gQ2FuIHRoaXMgaGFwcGVuPw0KDQpTdXJlLCBhcyBhIHB1Ymxp YyBBUEkuIE9mIGNvdXJzZSwgb25lIGNhbiBzcGVuZCB0aW1lLCB0cnlpbmcgdG8gZGV0ZXJtaW5l DQp3aGljaCBjb25kaXRpb25zIGFyZSByZWFsaXN0aWNhbGx5IHBvc3NpYmxlIG9yIG5vdC4gQnV0 IHRoYXQgaW50cm9kdWNlcw0KcG90ZW50aWFsIG9mIGh1bWFuIGVycm9yLCBzbyAtIHVubGVzcyBp dCdzIGEgcmVhbGx5IGhvdCBwYXRoLCBvbmUgY2hlY2sNCnRvIG1hbnkgaXMgYmV0dGVyIHRoYW4g b25lIHRvbyBsZXNzLg0KDQoNCj4gDQo+ID4NCj4gPiAgICAgIGF2X2JwcmludF9pbml0KCZicCwg MCwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsNCj4gPiAgICAgIGF2X2JwcmludGYoJmJwLCAi XG4iKTsNCj4gPiBAQCAtNjA3LDEyICs2MzYsMTggQEAgaW50DQo+IGF2dGV4dHdyaXRlcl9jb250 ZXh0X29wZW4oQVZUZXh0V3JpdGVyQ29udGV4dCAqKnB3Y3R4LCBjb25zdA0KPiBBVlRleHRXcml0 ZXIgKncNCj4gPiAgICAgIEFWVGV4dFdyaXRlckNvbnRleHQgKndjdHg7DQo+ID4gICAgICBpbnQg cmV0ID0gMDsNCj4gPg0KPiA+IC0gICAgaWYgKCEod2N0eCA9IGF2X21hbGxvY3ooc2l6ZW9mKEFW VGV4dFdyaXRlckNvbnRleHQpKSkpIHsNCj4gPiArICAgIGlmICghcHdjdHggfHwgIXdyaXRlcikN Cj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPiA+ICsNCj4gPiArICAgIGlm ICghd3JpdGVyLT5wcml2X3NpemUgJiYgd3JpdGVyLT5wcml2X2NsYXNzKQ0KPiANCj4gU3R1ZmYg bGlrZSB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gYW5kIHNob3VsZCB0aGVyZWZvcmUgbm90IGJl DQo+IGNoZWNrZWQuDQoNCk9LLg0KDQo+IA0KPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKCEoKHdjdHggPSBhdl9tYWxsb2N6KHNpemVvZihB VlRleHRXcml0ZXJDb250ZXh0KSkpKSkgew0KPiA+ICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5P TUVNKTsNCj4gPiAgICAgICAgICBnb3RvIGZhaWw7DQo+ID4gICAgICB9DQo+ID4NCj4gPiAtICAg IGlmICghKHdjdHgtPnByaXYgPSBhdl9tYWxsb2N6KHdyaXRlci0+cHJpdl9zaXplKSkpIHsNCj4g PiArICAgIGlmICh3cml0ZXItPnByaXZfc2l6ZSAmJiAhKCh3Y3R4LT5wcml2ID0gYXZfbWFsbG9j eih3cml0ZXItDQo+ID5wcml2X3NpemUpKSkpIHsNCj4gPiAgICAgICAgICByZXQgPSBBVkVSUk9S KEVOT01FTSk7DQo+ID4gICAgICAgICAgZ290byBmYWlsOw0KPiA+ICAgICAgfQ0KPiA+IGRpZmYg LS1naXQgYS9mZnRvb2xzL3RleHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmgNCj4gYi9mZnRvb2xzL3Rl eHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmgNCj4gPiBpbmRleCAwMzU2NGQxNGE3Li5lNTE5MDk0ZjRm IDEwMDY0NA0KPiA+IC0tLSBhL2ZmdG9vbHMvdGV4dGZvcm1hdC9hdnRleHRmb3JtYXQuaA0KPiA+ ICsrKyBiL2ZmdG9vbHMvdGV4dGZvcm1hdC9hdnRleHRmb3JtYXQuaA0KPiA+IEBAIC0yMSw5ICsy MSw3IEBADQo+ID4gICNpZm5kZWYgRkZUT09MU19URVhURk9STUFUX0FWVEVYVEZPUk1BVF9IDQo+ ID4gICNkZWZpbmUgRkZUT09MU19URVhURk9STUFUX0FWVEVYVEZPUk1BVF9IDQo+ID4NCj4gPiAt I2luY2x1ZGUgPHN0ZGRlZi5oPg0KPiA+ICAjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gLSNpbmNs dWRlICJsaWJhdnV0aWwvYXR0cmlidXRlcy5oIg0KPiA+ICAjaW5jbHVkZSAibGliYXZ1dGlsL2Rp Y3QuaCINCj4gPiAgI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2aW8uaCINCj4gPiAgI2luY2x1ZGUg ImxpYmF2dXRpbC9icHJpbnQuaCINCj4gPiBAQCAtMTAzLDcgKzEwMSw3IEBAIHN0cnVjdCBBVlRl eHRGb3JtYXRDb250ZXh0IHsNCj4gPiAgICAgIHVuc2lnbmVkIGludA0KPiBuYl9pdGVtX3R5cGVb U0VDVElPTl9NQVhfTkJfTEVWRUxTXVtTRUNUSU9OX01BWF9OQl9TRUNUSU9OU107DQo+ID4NCj4g PiAgICAgIC8qKiBzZWN0aW9uIHBlciBlYWNoIGxldmVsICovDQo+ID4gLSAgICBjb25zdCBzdHJ1 Y3QgQVZUZXh0Rm9ybWF0U2VjdGlvbg0KPiAqc2VjdGlvbltTRUNUSU9OX01BWF9OQl9MRVZFTFNd Ow0KPiA+ICsgICAgY29uc3QgQVZUZXh0Rm9ybWF0U2VjdGlvbiAqc2VjdGlvbltTRUNUSU9OX01B WF9OQl9MRVZFTFNdOw0KPiA+ICAgICAgQVZCUHJpbnQgc2VjdGlvbl9wYnVmW1NFQ1RJT05fTUFY X05CX0xFVkVMU107IC8vLzwgZ2VuZXJpYw0KPiBwcmludCBidWZmZXIgZGVkaWNhdGVkIHRvIGVh Y2ggc2VjdGlvbiwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLy8gIHVzZWQgYnkNCj4gdmFyaW91cyBmb3JtYXR0ZXJzDQo+ID4NCj4gPiBA QCAtMTI0LDcgKzEyMiw3IEBAIHN0cnVjdCBBVlRleHRGb3JtYXRDb250ZXh0IHsNCj4gPiAgI2Rl ZmluZSBBVl9URVhURk9STUFUX1BSSU5UX1NUUklOR19WQUxJREFURSAyDQo+ID4NCj4gPiAgaW50 IGF2dGV4dF9jb250ZXh0X29wZW4oQVZUZXh0Rm9ybWF0Q29udGV4dCAqKnB0Y3R4LCBjb25zdA0K PiBBVlRleHRGb3JtYXR0ZXIgKmZvcm1hdHRlciwgQVZUZXh0V3JpdGVyQ29udGV4dCAqd3JpdGVy X2NvbnRleHQsIGNvbnN0DQo+IGNoYXIgKmFyZ3MsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN0cnVjdCBBVlRleHRGb3JtYXRTZWN0aW9uICpzZWN0aW9ucywNCj4gaW50IG5i X3NlY3Rpb25zLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVlRleHRGb3Jt YXRTZWN0aW9uICpzZWN0aW9ucywgaW50DQo+IG5iX3NlY3Rpb25zLA0KPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgc2hvd192YWx1ZV91bml0LA0KPiA+ICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgdXNlX3ZhbHVlX3ByZWZpeCwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHVzZV9ieXRlX3ZhbHVlX2JpbmFyeV9wcmVmaXgsDQo+ID4gZGlmZiAtLWdpdCBhL2Zm dG9vbHMvdGV4dGZvcm1hdC90Zl9kZWZhdWx0LmMNCj4gYi9mZnRvb2xzL3RleHRmb3JtYXQvdGZf ZGVmYXVsdC5jDQo+ID4gaW5kZXggMTRlZjlmZThmOS4uM2IwNWQyNWYzNiAxMDA2NDQNCj4gPiAt LS0gYS9mZnRvb2xzL3RleHRmb3JtYXQvdGZfZGVmYXVsdC5jDQo+ID4gKysrIGIvZmZ0b29scy90 ZXh0Zm9ybWF0L3RmX2RlZmF1bHQuYw0KPiA+IEBAIC03MCw5ICs3MCwxMCBAQCBERUZJTkVfRk9S TUFUVEVSX0NMQVNTKGRlZmF1bHQpOw0KPiA+ICAvKiBsYW1lIHVwcGVyY2FzaW5nIHJvdXRpbmUs IGFzc3VtZXMgdGhlIHN0cmluZyBpcyBsb3dlciBjYXNlIEFTQ0lJDQo+ICovDQo+ID4gIHN0YXRp YyBpbmxpbmUgY2hhciAqdXBjYXNlX3N0cmluZyhjaGFyICpkc3QsIHNpemVfdCBkc3Rfc2l6ZSwg Y29uc3QNCj4gY2hhciAqc3JjKQ0KPiA+ICB7DQo+ID4gLSAgICBpbnQgaTsNCj4gPiArICAgIHVu c2lnbmVkIGk7DQo+ID4gKw0KPiANCj4gV2h5IG5vdCBzaXplX3Q/DQoNCnNlZSBhYm92ZS4NCg0K PiANCj4gPiAgICAgIGZvciAoaSA9IDA7IHNyY1tpXSAmJiBpIDwgZHN0X3NpemUgLSAxOyBpKysp DQo+ID4gLSAgICAgICAgZHN0W2ldID0gYXZfdG91cHBlcihzcmNbaV0pOw0KPiA+ICsgICAgICAg IGRzdFtpXSA9IChjaGFyKWF2X3RvdXBwZXIoc3JjW2ldKTsNCj4gPiAgICAgIGRzdFtpXSA9IDA7 DQo+ID4gICAgICByZXR1cm4gZHN0Ow0KPiA+ICB9DQo+ID4gQEAgLTEwOCw2ICsxMDksOSBAQCBz dGF0aWMgdm9pZA0KPiBkZWZhdWx0X3ByaW50X3NlY3Rpb25fZm9vdGVyKEFWVGV4dEZvcm1hdENv bnRleHQgKndjdHgpDQo+ID4gICAgICBjb25zdCBzdHJ1Y3QgQVZUZXh0Rm9ybWF0U2VjdGlvbiAq c2VjdGlvbiA9IHdjdHgtPnNlY3Rpb25bd2N0eC0NCj4gPmxldmVsXTsNCj4gPiAgICAgIGNoYXIg YnVmWzMyXTsNCj4gPg0KPiA+ICsgICAgaWYgKCFzZWN0aW9uKQ0KPiA+ICsgICAgICAgIHJldHVy bjsNCj4gDQo+IENhbiB0aGlzIGhhcHBlbj8NCg0KTm8sIGJ1dCBoZXJlIGl0IHNob3VsZCBhY3R1 YWxseSBjYWxsIHRoZSBmdW5jdGlvbiBpbiB0Zl9pbnRlcm5hbCBhbmQgd2l0aA0KdGhhdCBpdCBj YW4gaGFwcGVuLiBUaGlzIG11c3QgaGF2ZSBnb3R0ZW4gbG9zdCBmcm9tIHJlYmFzaW5nLg0KDQoN Cj4gPiArDQo+ID4gICAgICBpZiAoZGVmLT5ub3ByaW50X3dyYXBwZXJzIHx8IGRlZi0+bmVzdGVk X3NlY3Rpb25bd2N0eC0+bGV2ZWxdKQ0KPiA+ICAgICAgICAgIHJldHVybjsNCj4gPg0KPiA+IGRp ZmYgLS1naXQgYS9mZnRvb2xzL3RleHRmb3JtYXQvdGZfaW5pLmMNCj4gYi9mZnRvb2xzL3RleHRm b3JtYXQvdGZfaW5pLmMNCj4gPiBpbmRleCA5ZTFhYTYwZTA5Li5lYzQ3MWZkNDgwIDEwMDY0NA0K PiA+IC0tLSBhL2ZmdG9vbHMvdGV4dGZvcm1hdC90Zl9pbmkuYw0KPiA+ICsrKyBiL2ZmdG9vbHMv dGV4dGZvcm1hdC90Zl9pbmkuYw0KPiA+IEBAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyBjaGFyICpp bmlfZXNjYXBlX3N0cihBVkJQcmludCAqZHN0LCBjb25zdA0KPiBjaGFyICpzcmMpDQo+ID4gICAg ICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovDQo+ID4gICAgICAgICAgZGVmYXVsdDoNCj4gPiAg ICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBjaGFyKWMgPCAzMikNCj4gPiAtICAgICAgICAgICAg ICAgIGF2X2JwcmludGYoZHN0LCAiXFx4MDAlMDJ4IiwgYyAmIDB4ZmYpOw0KPiA+ICsgICAgICAg ICAgICAgICAgYXZfYnByaW50Zihkc3QsICJcXHgwMCUwMngiLCAodW5zaWduZWQgY2hhciljKTsN Cj4gPiAgICAgICAgICAgICAgZWxzZQ0KPiA+ICAgICAgICAgICAgICAgICAgYXZfYnByaW50X2No YXJzKGRzdCwgYywgMSk7DQo+ID4gICAgICAgICAgICAgIGJyZWFrOw0KPiA+IGRpZmYgLS1naXQg YS9mZnRvb2xzL3RleHRmb3JtYXQvdGZfanNvbi5jDQo+IGIvZmZ0b29scy90ZXh0Zm9ybWF0L3Rm X2pzb24uYw0KPiA+IGluZGV4IDI0ODM4YjM1ZWMuLmYyODY4MzhkM2MgMTAwNjQ0DQo+ID4gLS0t IGEvZmZ0b29scy90ZXh0Zm9ybWF0L3RmX2pzb24uYw0KPiA+ICsrKyBiL2ZmdG9vbHMvdGV4dGZv cm1hdC90Zl9qc29uLmMNCj4gPiBAQCAtODIsMTMgKzgyLDE4IEBAIHN0YXRpYyBjb25zdCBjaGFy ICpqc29uX2VzY2FwZV9zdHIoQVZCUHJpbnQNCj4gKmRzdCwgY29uc3QgY2hhciAqc3JjLCB2b2lk ICpsb2dfY3R4DQo+ID4gICAgICBzdGF0aWMgY29uc3QgY2hhciBqc29uX3N1YnN0W10gID0geyAn IicsICdcXCcsICAnYicsICAnZicsDQo+ICduJywgICdyJywgICd0JywgMCB9Ow0KPiA+ICAgICAg Y29uc3QgY2hhciAqcDsNCj4gPg0KPiA+ICsgICAgaWYgKCFzcmMpIHsNCj4gPiArICAgICAgICBh dl9sb2cobG9nX2N0eCwgQVZfTE9HX0VSUk9SLCAianNvbl9lc2NhcGVfc3RyOiBOVUxMIHNvdXJj ZQ0KPiBzdHJpbmdcbiIpOw0KPiA+ICsgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAgfQ0K PiANCj4gQ2FuIHRoaXMgZXZlbiBoYXBwZW4/DQo+IA0KPiA+ICsNCj4gPiAgICAgIGZvciAocCA9 IHNyYzsgKnA7IHArKykgew0KPiA+ICAgICAgICAgIGNoYXIgKnMgPSBzdHJjaHIoanNvbl9lc2Nh cGUsICpwKTsNCj4gPiAgICAgICAgICBpZiAocykgew0KPiA+ICAgICAgICAgICAgICBhdl9icHJp bnRfY2hhcnMoZHN0LCAnXFwnLCAxKTsNCj4gPiAgICAgICAgICAgICAgYXZfYnByaW50X2NoYXJz KGRzdCwganNvbl9zdWJzdFtzIC0ganNvbl9lc2NhcGVdLCAxKTsNCj4gPiAgICAgICAgICB9IGVs c2UgaWYgKCh1bnNpZ25lZCBjaGFyKSpwIDwgMzIpIHsNCj4gPiAtICAgICAgICAgICAgYXZfYnBy aW50Zihkc3QsICJcXHUwMCUwMngiLCAqcCAmIDB4ZmYpOw0KPiA+ICsgICAgICAgICAgICBhdl9i cHJpbnRmKGRzdCwgIlxcdTAwJTAyeCIsICh1bnNpZ25lZCBjaGFyKSpwKTsNCj4gPiAgICAgICAg ICB9IGVsc2Ugew0KPiA+ICAgICAgICAgICAgICBhdl9icHJpbnRfY2hhcnMoZHN0LCAqcCwgMSk7 DQo+ID4gICAgICAgICAgfQ0KPiA+IEBAIC0xMDcsNiArMTEyLDcgQEAgc3RhdGljIHZvaWQNCj4g anNvbl9wcmludF9zZWN0aW9uX2hlYWRlcihBVlRleHRGb3JtYXRDb250ZXh0ICp3Y3R4LCBjb25z dCB2b2lkICpkYXQNCj4gPiAgICAgICAgICB3Y3R4LT5zZWN0aW9uW3djdHgtPmxldmVsLTFdIDog TlVMTDsNCj4gPg0KPiA+ICAgICAgaWYgKHdjdHgtPmxldmVsICYmIHdjdHgtPm5iX2l0ZW1bd2N0 eC0+bGV2ZWwtMV0pDQo+ID4gKyAgICBpZiAod2N0eC0+bGV2ZWwgJiYgd2N0eC0+bmJfaXRlbVt3 Y3R4LT5sZXZlbCAtIDFdKQ0KPiA+ICAgICAgICAgIHdyaXRlcl9wdXRfc3RyKHdjdHgsICIsXG4i KTsNCj4gPg0KPiA+ICAgICAgaWYgKHNlY3Rpb24tPmZsYWdzICYgQVZfVEVYVEZPUk1BVF9TRUNU SU9OX0ZMQUdfSVNfV1JBUFBFUikgew0KPiA+IGRpZmYgLS1naXQgYS9mZnRvb2xzL3RleHRmb3Jt YXQvdGZfeG1sLmMNCj4gYi9mZnRvb2xzL3RleHRmb3JtYXQvdGZfeG1sLmMNCj4gPiBpbmRleCA3 NjI3MWRiYWE2Li5lY2VlZGE4MWU1IDEwMDY0NA0KPiA+IC0tLSBhL2ZmdG9vbHMvdGV4dGZvcm1h dC90Zl94bWwuYw0KPiA+ICsrKyBiL2ZmdG9vbHMvdGV4dGZvcm1hdC90Zl94bWwuYw0KPiA+IEBA IC0xOCwxMCArMTgsNyBAQA0KPiA+ICAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BDQo+IDAyMTEwLTEzMDEgVVNBDQo+ID4gICAq Lw0KPiA+DQo+ID4gLSNpbmNsdWRlIDxsaW1pdHMuaD4NCj4gPiAtI2luY2x1ZGUgPHN0ZGFyZy5o Pg0KPiA+ICAjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gLSNpbmNsdWRlIDxzdGRpby5oPg0KPiA+ ICAjaW5jbHVkZSA8c3RyaW5nLmg+DQo+ID4NCj4gPiAgI2luY2x1ZGUgImF2dGV4dGZvcm1hdC5o Ig0KPiA+IGRpZmYgLS1naXQgYS9mZnRvb2xzL3RleHRmb3JtYXQvdHdfYXZpby5jDQo+IGIvZmZ0 b29scy90ZXh0Zm9ybWF0L3R3X2F2aW8uYw0KPiA+IGluZGV4IGQzMzVkMzVhNTYuLjNjNzQ5MmFh MDYgMTAwNjQ0DQo+ID4gLS0tIGEvZmZ0b29scy90ZXh0Zm9ybWF0L3R3X2F2aW8uYw0KPiA+ICsr KyBiL2ZmdG9vbHMvdGV4dGZvcm1hdC90d19hdmlvLmMNCj4gPiBAQCAtNjMsNyArNjMsNyBAQCBz dGF0aWMgdm9pZCBpb193OChBVlRleHRXcml0ZXJDb250ZXh0ICp3Y3R4LCBpbnQNCj4gYikNCj4g PiAgc3RhdGljIHZvaWQgaW9fcHV0X3N0cihBVlRleHRXcml0ZXJDb250ZXh0ICp3Y3R4LCBjb25z dCBjaGFyICpzdHIpDQo+ID4gIHsNCj4gPiAgICAgIElPV3JpdGVyQ29udGV4dCAqY3R4ID0gd2N0 eC0+cHJpdjsNCj4gPiAtICAgIGF2aW9fd3JpdGUoY3R4LT5hdmlvX2NvbnRleHQsIHN0ciwgc3Ry bGVuKHN0cikpOw0KPiA+ICsgICAgYXZpb193cml0ZShjdHgtPmF2aW9fY29udGV4dCwgKGNvbnN0 IHVuc2lnbmVkIGNoYXIgKilzdHIsDQo+IChpbnQpc3RybGVuKHN0cikpOw0KPiA+ICB9DQo+ID4N Cj4gPiAgc3RhdGljIHZvaWQgaW9fcHJpbnRmKEFWVGV4dFdyaXRlckNvbnRleHQgKndjdHgsIGNv bnN0IGNoYXIgKmZtdCwNCj4gLi4uKQ0KPiA+IEBAIC04OSwxMCArODksMTIgQEAgY29uc3QgQVZU ZXh0V3JpdGVyIGF2dGV4dHdyaXRlcl9hdmlvID0gew0KPiA+DQo+ID4gIGludCBhdnRleHR3cml0 ZXJfY3JlYXRlX2ZpbGUoQVZUZXh0V3JpdGVyQ29udGV4dCAqKnB3Y3R4LCBjb25zdA0KPiBjaGFy ICpvdXRwdXRfZmlsZW5hbWUsIGludCBjbG9zZV9vbl91bmluaXQpDQo+ID4gIHsNCj4gPiArICAg IGlmICghcHdjdHggfHwgIW91dHB1dF9maWxlbmFtZSB8fCAhb3V0cHV0X2ZpbGVuYW1lWzBdKQ0K PiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQo+IA0KPiBDYW4gdGhpcyBoYXBw ZW4/DQoNCldoZW4gcHVibGljIC0geWVzLg0KDQoNCkdlbmVyYWxseSwgSSB3b25kZXI6IGRvbid0 IHlvdSBmaW5kIGl0IHJpc2t5IHRvIG1ha2UgZGVjaXNpb25zIGFib3V0DQpmdW5jdGlvbiBpbXBs ZW1lbnRhdGlvbnMgdGhhdCBhcmUgYmFzZWQgb24ga25vd2xlZGdlIGFib3V0IHRoZSBjYWxsaW5n DQpjb2RlPyAoImNhbiB0aGlzIGhhcHBlbj8iKQ0KSSBtZWFuLCB0aGUgY2FsbGluZyBjb2RlIGRv ZXNuJ3Qga25vdyBhYm91dCB0aGUgYXNzdW1wdGlvbnMgeW91IA0Kd2VyZSBtYWtpbmcgYW5kIG9u IHdoaWNoIGJlaGF2aW9yIHRoZSBpbXBsZW1lbnRhdGlvbiBtaWdodCBiZSByZWx5aW5nIG9uLg0K DQpGb3IgdGhpcyBwYXRjaHNldCAtIG1vc3QgaW1wb3J0YW50bHkgZm9yIGV2ZXJ5dGhpbmcgaW4g Z3JhcGhwcmludC5jLA0KSSBoYWQgd29ya2VkIHdpdGggdGhlIGRlbGliZXJhdGUgaW50ZW50aW9u IGZvciBjaGVja2luZyBldmVyeXRoaW5nIHRoYXQNCmNhbiBiZSBjaGVja2VkLiBUaGUgbW90aXZh dGlvbiBoZXJlIGlzIHRoZSBmYWN0IHRoYXQgZ3JhcGgtcHJpbnRpbmcNCmlzIGFsd2F5cyBydW4g KHdoZW4gY29uZmlndXJlZCksIGV2ZW4gd2hlbiB0aGUgRkZtcGVnIHJ1biBoYXMgZmFpbGVkDQpv ciBlcnJvcmVkLCBiZWNhdXNlIHRob3NlIGFyZSBvZnRlbiB0aGUgbW9zdCBpbnRlcmVzdGluZyBj YXNlcyBmb3IgDQp2aWV3aW5nIHRoZSBncmFwaCBvciBnZXR0aW5nIHRoZSBkYXRhLiANCkJ1dCBp biBjYXNlIG9mIGVycm9ycyBhbmQgYWJvcnRpb24sIHdlIGNhbm5vdCBtYWtlIGFueSBhc3N1bXB0 aW9ucyANCmFueW1vcmUgYW5kIHRoZSBhbnN3ZXIgdG8gImNhbiB0aGlzIGhhcHBlbj8iIG1pZ2h0 IGJlIG1vcmUgb2Z0ZW4gInllcyINCnRoYW4gdXN1YWwuDQoNCkkgaG9wZSB5b3UgZG9uJ3QgbWlu ZCB0byBwb3N0cG9uZSB0aGUgcmVtb3ZhbCBvZiBjaGVja3MgYSBsaXR0bGUgYml0Lg0KSXQgZG9l c24ndCBmZWVsIHJpZ2h0IHRvIG1lIG5vdywgdG8gZ28gb3ZlciBhbmQganVzdCBibGluZGx5IHJl bW92ZQ0KYWxsIG9mIHRoZW0uIEkgd291bGQgcmF0aGVyIGxpa2UgdG8gZGlzY3VzcyBhIHN0cmF0 ZWd5L3BhdHRlcm4gaW4gdGhpcw0KcmVnYXJkIGFib3V0IHdoaWNoIGNoZWNrcyBzaG91bGQgYmUg bWFkZSBhdCB3aGljaCBwbGFjZXMgYW5kIHdoZXJlDQpub3QsIGFsc28gaW4gdGhlIGxpZ2h0IG9m IHBvc3NpYmx5IGJlaW5nIHByb21vdGVkIHRvIGEgcHVibGljIEFQSS4NCkZpbmFsbHksIEknZCBh bHNvIGxpa2UgdG8gaGVhciBTdGVmYW5vcyBvcGluaW9uIC0gaXQncyBtb3N0bHkgaGlzIA0KY29k ZSB0aGF0IHdlJ3JlIG1vdmluZyBhcm91bmQgaGVyZSDwn5iKDQoNCg0KVGhhbmtzDQpzdw0KX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVs IG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcv bWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5r IGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLgo=