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 2BE0848D38 for ; Thu, 25 Jan 2024 12:26:56 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B77A868D0E9; Thu, 25 Jan 2024 14:26:42 +0200 (EET) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2103.outbound.protection.outlook.com [40.92.52.103]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4E5D368D09E for ; Thu, 25 Jan 2024 14:26:36 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jHPs/iKHKJAfXuhCfW4m1cLkZ2FLxdqL0M8ZSxh6g/JyHz7gDZAK4CYgFms2lqXD1qXrR8QKCnjdpNrKY4v+V81hXlnNx3NcDvhurjmkq2XcTIE6ir/VvfAIfZznLcyaY4ULwYVHKbM4wKbe8q1b2NYv6yGWyHQpvA3xs3pQA32hmTXmKzas01NcaQsq4cPTdM28lve87WvzZFpELxDKxNh3TKvHFL7C1+K5F6SjaHg7zCFDBKfcQXKcaYD3DpN93/crK6dhTZSMqgo70m8hba5szFYxUR75hmium5RDhcibBSCndqYRwdN4BQ6qsKq1/OKPqQK9kXzxLxu6A5rLRA== 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=QuTlaoaZjvubqDz/54J/RbVpoIcNrHusf3u0DbTMq3A=; b=kcqsNSE8DotuOl4QZ7zueMu7AiImvDmXV+ophsHgDZdTGBokODpRimnw/IcZipS7JTERnxEh2NUxdE3FDqKyo4drVbeitSwJzRzFwCAufrZXXfSHWuBtK1dIg71MqkEIidQbbF54uxgWXfcX6vxAjUHu/gkGGXKQfpF9DEAF4vTlsHx69MN0L64Guh6m5Ddz8je+kDEhHiIPrmTxy4WFpKGFDUqjq0k2PMh2ZrrdQiMA1EDKWLFDx0/4svpQnyK5jHsu1RO+1ptudPto6VaT819xjZ3XUVAqaCgqzw5qxG8rWUjjrt7b+fUkgDFW+jXbshLNF/5j1FgHVBPLnC4irw== 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=QuTlaoaZjvubqDz/54J/RbVpoIcNrHusf3u0DbTMq3A=; b=N00oIkp3mppFvJmkjC5CyXpv1T7XnxB6MGl1PsKWnFli8egXJSVoCxhNOyj9n4sx3xZg1HKnszVs5KGrkQ0M79EsxBBmCm9wW8YlU/nNcgIEo6PzGL+dwXiH2mlnKLS5p7n/31TNLTATvPqMTWykVq7nQivQ9RvmDJg35rHseuGnBusTqqnfk46y8Bc6sDqwbuJDbHYiRHqVH2cIB11leyOUX1ViFk/YCyu9zDIvaCBr2ZpNUEwb4uA2F74sudM4fhfQ8gDMBmCoqow7Urom/911paywSla1Y6T6+CPYEU0EswlLWt3L4Za3suD60C4mzRe4umzmba+Q8PCDbh1t7w== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYSPR06MB6292.apcprd06.prod.outlook.com (2603:1096:400:42d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.22; Thu, 25 Jan 2024 12:26:20 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7%7]) with mapi id 15.20.7228.022; Thu, 25 Jan 2024 12:26:20 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Thu, 25 Jan 2024 20:26:00 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240125122601.5473-1-nuomi2021@gmail.com> References: <20240125122601.5473-1-nuomi2021@gmail.com> X-TMN: [N41sEbpyEFMN9Et39hbwXXLFgC8rsDNO] X-ClientProxiedBy: TY2PR02CA0003.apcprd02.prod.outlook.com (2603:1096:404:56::15) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240125122601.5473-2-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYSPR06MB6292:EE_ X-MS-Office365-Filtering-Correlation-Id: 5400112e-0f3c-46b3-e706-08dc1da0d5a3 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OXR9s6O7kdMQATl0HWllFKhq4ZTY07va7bgzZ4WCVsebJmELIASwA5vj77zmkajWyo5zg1ig4Y+WAizSHg78O6d1CVnLxay8VKdLxI8aRpFtQmgNnlPLzkXDWNL9cGYgV/HhU6MH8FTXCqjdQGtCTM4i2fSCemJFOJNrbdKk/tnXzzXjtVbOW70M99TXpcpyygv4zQ0b++dJk0RqAmHQBAG0ZyEyZeObsp8r98wMRVFuIPq0/3yUtz4leQvjfT+9+0lKyoTJLa5Gc6UnYF+cXRDmhFx6H7Z1VcE0grED9tP9gRomSwyPWhMHKPT8o6qEj6IG+s8QNh2lkYj+rSG+oRu0gOcPr8vksQAmd//uJkGKPOt0Ee7DhFwR6a1eYTa695Whez2slwBiCbdEQgw0rIJwuyJ244O8JAwoCoQ6euzvpV+WJsgQJWqbWKXWwY/J+iuVBMkbjfJV8l5KpvvFQYaNkqiDZ7YGn+357uVO0579qzI22rJpLk79Ecy0Dn87IOmd3ZJMT9i3tT2LD6XbwtV2Y8qYK43UssbxJ3veoVoNCe6Xkm5YhOn5nwZVt3gbpx0WLIQueyQpUmfn/8AF4i/rE4GVJRm/enQi0a+1rLKwNB42EWtdUeIgHUQEqa2H X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?am9WUzRvV05ha3gxLzVnOVdqZ3lXQnBHbTFURVQyRFJsUHZBUVdnOU9TR0E3?= =?utf-8?B?NmhDMmVCRWJpVHRoQUZndEhOYjZNdUVMcUVEdlVYcGUxT1lpb2ZjOVd1MEFZ?= =?utf-8?B?SlJZUGYxakZhSVJMVk1hVXN3VTJDTVNEWUJGM3VSOUw5Yzcxd3dxR0owdmdq?= =?utf-8?B?ZHk5dlcwY0N3R25ZU01GMUxleTFPTnl3RS9LZ1JzamsrS0FnMkdvYXdoN3dL?= =?utf-8?B?K3hkMk9HZ0xNTW9LQzNDUW1ueCszdTZ5eXBHM3dsY3F4Um1LczA2ZXhQS052?= =?utf-8?B?U0JKVW1iVnc4ZEp4YTFiY3FFSjlRbmpIUmQwZjA0cUVuc2tYRUUxanBhYTJ2?= =?utf-8?B?d3N6MGc0S1dCVjBrY1FFOUsycExyTTdrWE1wVjJBOHhqNERVc1lNLzFyRzc2?= =?utf-8?B?bGNKWjVwRzJrVXA3dEd6c0pKbDVrdVU3RERydmthTDMvWmVvQTlCZVdpazN5?= =?utf-8?B?V2lybXBMbnZ5UjZlakVEWCtqNEdZQWRPdGVsTjdNZ2VjRG5LRVBPbFVIWHFk?= =?utf-8?B?MG5TNXZVbjNkLy9XWFVMYnUrczlGMmJ1R1pqelpWUXpZSEhlU3NCc25UcldT?= =?utf-8?B?Q2xtbUdEazNCMVpsRG51dTlXV0JjUmMyRHZlNjdHTHY5UkxmZHBKdmFuV2hM?= =?utf-8?B?TXgrY1N6YUhxOXphaDhtTEs3Z1pNellWVk5xcnA1NkVobTFEa0h6NWNkT0Zv?= =?utf-8?B?VXhVYXVGaUt3M1J5STVFV2FLaVo2aUJ0SWhhVVVRWit4VTFPVTAzQWwyNXBh?= =?utf-8?B?YUZyeGpYQU9sN1BIL1JUeUUweWpCdVhudmFUaUhaVUNnQ1FoRGdPWjlNK1NW?= =?utf-8?B?anJlTjJKWmhzcGdMM0lKTW0zOGpLVUNtT3FEMEd2aVJwSDdGS1E4cXpWeHdj?= =?utf-8?B?VzFFYWZUQks2QzdxSk9JdFdkN05KUnVBc1MzUUttRmhaZDllYldZbnF6bUt0?= =?utf-8?B?ZlJuZVF0WWJFTWhjdzNnL2lVN2lackFHbnAzQ2VraGdYWlhMa2kxaG01Qkww?= =?utf-8?B?cFF4c09XVG5la2VCZjN3dUZvbTQ5Vlk1M01UTGNaRWhBMDhha3pVaWYxb0xZ?= =?utf-8?B?dmo1M3grSlJpTUFPU1lLdlR4ZWpEWWM1UTEvd3ZkM1h3WWIrVVM1UW9tLytV?= =?utf-8?B?aFdPcWlxK0UwbmlGaVF2Z2s5b1M3UHpEelU4TVdUTmZiN25HT2oyR3dLOXdn?= =?utf-8?B?cUQ3dng0d2hUZk83elJGRm1JWjV4QW9hdXpveWhjRzNYaEF0aTY5OXBZWEgy?= =?utf-8?B?bEFrZGtBREJHZEVWMjYvVU5ZTm41Mis5cFJhUnl5NmN6ZUg5NjBON0xGU0dM?= =?utf-8?B?R28rbEJJQ285UnBCYTNNbGtieVEzdHVLemR3VGFRYzdSSVBRam1CQUlHTFc2?= =?utf-8?B?OU5zd0VnN3pINFZyRHpkYU5YS0NsRXRXa2ZYcUNLb1lXaHp2QTdGaDRBekNP?= =?utf-8?B?aUU1L2Q3aVgwVHJRak1YdktjN3BxZTZOVnpOUjV1b0hjb1lvZUUxWHdDUGx4?= =?utf-8?B?YlBJcHk4VVBkL3Z5WFEveWV2QUd3Z2E2WTlYRlBVLzVKL1JYa2drYzlQY1Fa?= =?utf-8?B?ak1Jb1o1WGo3SkcrRU5QR2M4dVR0TkVENzdMM0hpL2hBYjM2WWc4aDRnaUN1?= =?utf-8?B?ZDRUOER4Z3g3TlJvckxIODdUL2RHcEZSUVVNNEdMNVNSRDFxbStMTmFLOS8w?= =?utf-8?Q?KgM1VaKca2vmLI0QEnOq?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5400112e-0f3c-46b3-e706-08dc1da0d5a3 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jan 2024 12:26:20.0952 (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: TYSPR06MB6292 Subject: [FFmpeg-devel] [PATCH v2 1/2] avformat: add muxer support for H266/VVC 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: Nuo Mi , Thomas Siedel 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: RnJvbTogVGhvbWFzIFNpZWRlbCA8dGhvbWFzLmZmQHNwaW4tZGlnaXRhbC5jb20+CgpBZGQgbXV4 ZXIgZm9yIHZ2Y2MgYnl0ZSBzdHJlYW0gZm9ybWF0LgpBZGQgQVZfQ09ERUNfSURfVlZDIHRvIGZm X21wNF9vYmpfdHlwZS4KQWRkIEFWX0NPREVDX0lEX1ZWQyB0byBJU08gTWVkaWEgY29kZWMgKFZ2 Y0NvbmZpZ3VyYXRpb25Cb3ggdnZpMSwKdnZjMSBkZWZpbmVkIGluIElTTy9JRUMgMTQ0OTYtMTU6 MjAyMSkuCkFkZCBWdmNDb25maWd1cmF0aW9uQm94IHZ2Y0Mgd2hpY2ggZXh0ZW5kcyBGdWxsQm94 IHR5cGUgaW4KSVNPL0lFQyAxNDQ5Ni0xNToyMDIxLgpBZGQgZmZfdnZjX211eGVyIHRvIFJBVyBt dXhlcnMuCgpUZXN0ZWQgd2l0aDoKICAgIGZmbXBlZyAtaSBOb3Zvc29ib3JuYXlhU3F1YXJlXzE5 MjB4MTA4MC5tcDQgLWM6diBsaWJ2dmVuYyB0ZXN0Lm1wNCAmJiBmZm1wZWcgLWkgdGVzdC5tcDQg LWYgbnVsbCAtCiAgICBmZm1wZWcgLWkgTm92b3NvYm9ybmF5YVNxdWFyZV8xOTIweDEwODAubXA0 IC1jOnYgY29weSB0ZXN0Lm1wNCAgICAgJiYgZmZtcGVnIC1pIHRlc3QubXA0IC1mIG1kNSAtCgpT aWduZWQtb2ZmLWJ5OiBUaG9tYXMgU2llZGVsIDx0aG9tYXMuZmZAc3Bpbi1kaWdpdGFsLmNvbT4K Q28tQXV0aG9yZWQtQnk6IE51byBNaSA8bnVvbWkyMDIxQGdtYWlsLmNvbT4KLS0tCiBsaWJhdmZv cm1hdC9NYWtlZmlsZSAgICB8ICAgNiArLQogbGliYXZmb3JtYXQvaXNvbS5jICAgICAgfCAgIDEg KwogbGliYXZmb3JtYXQvaXNvbV90YWdzLmMgfCAgIDMgKwogbGliYXZmb3JtYXQvbW92LmMgICAg ICAgfCAgIDYgKwogbGliYXZmb3JtYXQvbW92ZW5jLmMgICAgfCAgNDEgKy0KIGxpYmF2Zm9ybWF0 L3Z2Yy5jICAgICAgIHwgOTcxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIGxpYmF2Zm9ybWF0L3Z2Yy5oICAgICAgIHwgIDk5ICsrKysKIDcgZmlsZXMgY2hhbmdlZCwg MTEyMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxp YmF2Zm9ybWF0L3Z2Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvdnZjLmgKCmRp ZmYgLS1naXQgYS9saWJhdmZvcm1hdC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCmlu ZGV4IGRjYzk5ZWVhYzQuLjA1YjliOGExMTUgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L01ha2Vm aWxlCisrKyBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCkBAIC0zNDMsNyArMzQzLDcgQEAgT0JKUy0k KENPTkZJR19NQVRST1NLQV9ERU1VWEVSKSAgICAgICAgICArPSBtYXRyb3NrYWRlYy5vIG1hdHJv c2thLm8gIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2dn cGFyc2V2b3JiaXMubyB2b3JiaXNjb21tZW50Lm8gXAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBxdHBhbGV0dGUubyByZXBsYXlnYWluLm8gZG92aV9pc29tLm8K IE9CSlMtJChDT05GSUdfTUFUUk9TS0FfTVVYRVIpICAgICAgICAgICAgKz0gbWF0cm9za2FlbmMu byBtYXRyb3NrYS5vIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXYxLm8gYXZjLm8gaGV2Yy5vIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXYxLm8gYXZjLm8gaGV2Yy5vIHZ2Yy5vXAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFjZW5jX2hlYWRlci5vIGF2bGFuZ3VhZ2UubyBc CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvcmJpc2NvbW1l bnQubyB3di5vIGRvdmlfaXNvbS5vCiBPQkpTLSQoQ09ORklHX01DQV9ERU1VWEVSKSAgICAgICAg ICAgICAgICs9IG1jYS5vCkBAIC0zNjUsNyArMzY1LDcgQEAgT0JKUy0kKENPTkZJR19NT0RTX0RF TVVYRVIpICAgICAgICAgICAgICArPSBtb2RzLm8KIE9CSlMtJChDT05GSUdfTU9GTEVYX0RFTVVY RVIpICAgICAgICAgICAgKz0gbW9mbGV4Lm8KIE9CSlMtJChDT05GSUdfTU9WX0RFTVVYRVIpICAg ICAgICAgICAgICAgKz0gbW92Lm8gbW92X2NoYW4ubyBtb3ZfZXNkcy5vIFwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXRwYWxldHRlLm8gcmVwbGF5Z2Fpbi5v IGRvdmlfaXNvbS5vCi1PQkpTLSQoQ09ORklHX01PVl9NVVhFUikgICAgICAgICAgICAgICAgICs9 IG1vdmVuYy5vIGF2MS5vIGF2Yy5vIGhldmMubyB2cGNjLm8gXAorT0JKUy0kKENPTkZJR19NT1Zf TVVYRVIpICAgICAgICAgICAgICAgICArPSBtb3ZlbmMubyBhdjEubyBhdmMubyBoZXZjLm8gdnZj Lm8gdnBjYy5vIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bW92ZW5jaGludC5vIG1vdl9jaGFuLm8gcnRwLm8gXAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtb3ZlbmNjZW5jLm8gbW92ZW5jX3R0bWwubyByYXd1dGlscy5v IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG92aV9pc29t Lm8gZXZjLm8KQEAgLTUyMCw3ICs1MjAsNyBAQCBPQkpTLSQoQ09ORklHX1JUUF9NVVhFUikgICAg ICAgICAgICAgICAgICs9IHJ0cC5vICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBydHBlbmNfdnA4Lm8gIFwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcnRwZW5jX3ZwOS5vICAgICAgICAgICAgICAgIFwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwZW5jX3hpcGgubyBc Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Yy5vIGhldmMu bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmMubyBoZXZj Lm8gdnZjLm8KIE9CSlMtJChDT05GSUdfUlRTUF9ERU1VWEVSKSAgICAgICAgICAgICAgKz0gcnRz cC5vIHJ0c3BkZWMubyBodHRwYXV0aC5vIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdXJsZGVjb2RlLm8KIE9CSlMtJChDT05GSUdfUlRTUF9NVVhFUikgICAg ICAgICAgICAgICAgKz0gcnRzcC5vIHJ0c3BlbmMubyBodHRwYXV0aC5vIFwKZGlmZiAtLWdpdCBh L2xpYmF2Zm9ybWF0L2lzb20uYyBiL2xpYmF2Zm9ybWF0L2lzb20uYwppbmRleCA2ZDAxOTg4MWU1 Li45ZmJjY2Q0NDM3IDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9pc29tLmMKKysrIGIvbGliYXZm b3JtYXQvaXNvbS5jCkBAIC0zNiw2ICszNiw3IEBAIGNvbnN0IEFWQ29kZWNUYWcgZmZfbXA0X29i al90eXBlW10gPSB7CiAgICAgeyBBVl9DT0RFQ19JRF9NUEVHNCAgICAgICAsIDB4MjAgfSwKICAg ICB7IEFWX0NPREVDX0lEX0gyNjQgICAgICAgICwgMHgyMSB9LAogICAgIHsgQVZfQ09ERUNfSURf SEVWQyAgICAgICAgLCAweDIzIH0sCisgICAgeyBBVl9DT0RFQ19JRF9WVkMgICAgICAgICAsIDB4 MzMgfSwKICAgICB7IEFWX0NPREVDX0lEX0FBQyAgICAgICAgICwgMHg0MCB9LAogICAgIHsgQVZf Q09ERUNfSURfTVA0QUxTICAgICAgLCAweDQwIH0sIC8qIDE0NDk2LTMgQUxTICovCiAgICAgeyBB Vl9DT0RFQ19JRF9NUEVHMlZJREVPICAsIDB4NjEgfSwgLyogTVBFRy0yIE1haW4gKi8KZGlmZiAt LWdpdCBhL2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jIGIvbGliYXZmb3JtYXQvaXNvbV90YWdzLmMK aW5kZXggYTU3NWI3YzE2MC4uNzA1ODExZTk1MCAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvaXNv bV90YWdzLmMKKysrIGIvbGliYXZmb3JtYXQvaXNvbV90YWdzLmMKQEAgLTEyMyw2ICsxMjMsOSBA QCBjb25zdCBBVkNvZGVjVGFnIGZmX2NvZGVjX21vdnZpZGVvX3RhZ3NbXSA9IHsKICAgICB7IEFW X0NPREVDX0lEX0hFVkMsIE1LVEFHKCdkJywgJ3YnLCAnaCcsICdlJykgfSwgLyogSEVWQy1iYXNl ZCBEb2xieSBWaXNpb24gZGVyaXZlZCBmcm9tIGhldjEgKi8KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZHZoMSBpcyBoYW5kbGVkIHdpdGhp biBtb3YuYyAqLwogCisgICAgeyBBVl9DT0RFQ19JRF9WVkMsIE1LVEFHKCd2JywgJ3YnLCAnaScs ICcxJykgfSwgIC8qIFZWQy9ILjI2NiB3aGljaCBpbmRpY2F0ZXMgcGFyYW1ldGVyIHNldHMgbWF5 IGJlIGluIEVTICovCisgICAgeyBBVl9DT0RFQ19JRF9WVkMsIE1LVEFHKCd2JywgJ3YnLCAnYycs ICcxJykgfSwgIC8qIFZWQy9ILjI2NiB3aGljaCBpbmRpY2F0ZXMgcGFyYW1ldGVyIHNoYWxsIG5v dCBiZSBpbiBFUyAqLworCiAgICAgeyBBVl9DT0RFQ19JRF9IMjY0LCBNS1RBRygnYScsICd2Jywg J2MnLCAnMScpIH0sIC8qIEFWQy0xL0guMjY0ICovCiAgICAgeyBBVl9DT0RFQ19JRF9IMjY0LCBN S1RBRygnYScsICd2JywgJ2MnLCAnMicpIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9IMjY0LCBNS1RB RygnYScsICd2JywgJ2MnLCAnMycpIH0sCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tb3YuYyBi L2xpYmF2Zm9ybWF0L21vdi5jCmluZGV4IDRjZmZkNmM3ZGIuLmNmOTMxZDQ1OTQgMTAwNjQ0Ci0t LSBhL2xpYmF2Zm9ybWF0L21vdi5jCisrKyBiL2xpYmF2Zm9ybWF0L21vdi5jCkBAIC0yMTIzLDYg KzIxMjMsMTEgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9nbGJsKE1PVkNvbnRleHQgKmMsIEFWSU9D b250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIGlmICgodWludDY0X3QpYXRvbS5zaXplID4g KDE8PDMwKSkKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAKKyAgICBpZiAo YXRvbS50eXBlID09IE1LVEFHKCd2JywndicsJ2MnLCdDJykpIHsKKyAgICAgICAgYXZpb19za2lw KHBiLCA0KTsKKyAgICAgICAgYXRvbS5zaXplIC09IDQ7CisgICAgfQorCiAgICAgaWYgKGF0b20u c2l6ZSA+PSAxMCkgewogICAgICAgICAvLyBCcm9rZW4gZmlsZXMgY3JlYXRlZCBieSBsZWdhY3kg dmVyc2lvbnMgb2YgbGliYXZmb3JtYXQgd2lsbAogICAgICAgICAvLyB3cmFwIGEgd2hvbGUgZmll bCBhdG9tIGluc2lkZSBvZiBhIGdsYmwgYXRvbS4KQEAgLTgxMjksNiArODEzNCw3IEBAIHN0YXRp YyBjb25zdCBNT1ZQYXJzZVRhYmxlRW50cnkgbW92X2RlZmF1bHRfcGFyc2VfdGFibGVbXSA9IHsK IHsgTUtUQUcoJ3MnLCdnJywncCcsJ2QnKSwgbW92X3JlYWRfc2dwZCB9LAogeyBNS1RBRygncycs J2InLCdnJywncCcpLCBtb3ZfcmVhZF9zYmdwIH0sCiB7IE1LVEFHKCdoJywndicsJ2MnLCdDJyks IG1vdl9yZWFkX2dsYmwgfSwKK3sgTUtUQUcoJ3YnLCd2JywnYycsJ0MnKSwgbW92X3JlYWRfZ2xi bCB9LAogeyBNS1RBRygndScsJ3UnLCdpJywnZCcpLCBtb3ZfcmVhZF91dWlkIH0sCiB7IE1LVEFH KCdDJywnaScsJ24nLCAweDhlKSwgbW92X3JlYWRfdGFyZ2FfeTIxNiB9LAogeyBNS1RBRygnZics J3InLCdlJywnZScpLCBtb3ZfcmVhZF9mcmVlIH0sCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9t b3ZlbmMuYyBiL2xpYmF2Zm9ybWF0L21vdmVuYy5jCmluZGV4IDhhMjdhZmJjNTcuLjQwYmU3MWYz ZTAgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L21vdmVuYy5jCisrKyBiL2xpYmF2Zm9ybWF0L21v dmVuYy5jCkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAidHRtbGVuYy5oIgogI2luY2x1ZGUg InZlcnNpb24uaCIKICNpbmNsdWRlICJ2cGNjLmgiCisjaW5jbHVkZSAidnZjLmgiCiAKIHN0YXRp YyBjb25zdCBBVk9wdGlvbiBvcHRpb25zW10gPSB7CiAgICAgeyAiYnJhbmQiLCAgICAiT3ZlcnJp ZGUgbWFqb3IgYnJhbmQiLCBvZmZzZXRvZihNT1ZNdXhDb250ZXh0LCBtYWpvcl9icmFuZCksICAg QVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAuZmxhZ3MgPSBBVl9PUFRfRkxBR19F TkNPRElOR19QQVJBTSB9LApAQCAtMTQ3Myw2ICsxNDc0LDIzIEBAIHN0YXRpYyBpbnQgbW92X3dy aXRlX2V2Y2NfdGFnKEFWSU9Db250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQogICAgIHJldHVy biB1cGRhdGVfc2l6ZShwYiwgcG9zKTsKIH0KIAorc3RhdGljIGludCBtb3Zfd3JpdGVfdnZjY190 YWcoQVZJT0NvbnRleHQgKnBiLCBNT1ZUcmFjayAqdHJhY2spCit7CisgICAgaW50NjRfdCBwb3Mg PSBhdmlvX3RlbGwocGIpOworCisgICAgYXZpb193YjMyKHBiLCAwKTsKKyAgICBmZmlvX3dmb3Vy Y2MocGIsICJ2dmNDIik7CisKKyAgICBhdmlvX3c4ICAocGIsIDApOyAvKiB2ZXJzaW9uICovCisg ICAgYXZpb193YjI0KHBiLCAwKTsgLyogZmxhZ3MgKi8KKworICAgIGlmICh0cmFjay0+dGFnID09 IE1LVEFHKCd2JywndicsJ2MnLCcxJykpCisgICAgICAgIGZmX2lzb21fd3JpdGVfdnZjYyhwYiwg dHJhY2stPnZvc19kYXRhLCB0cmFjay0+dm9zX2xlbiwgMSk7CisgICAgZWxzZQorICAgICAgICBm Zl9pc29tX3dyaXRlX3Z2Y2MocGIsIHRyYWNrLT52b3NfZGF0YSwgdHJhY2stPnZvc19sZW4sIDAp OworICAgIHJldHVybiB1cGRhdGVfc2l6ZShwYiwgcG9zKTsKK30KKwogLyogYWxzbyB1c2VkIGJ5 IGFsbCBhdmlkIGNvZGVjcyAoZHYsIGlteCwgbWVyaWRpZW4pIGFuZCB0aGVpciB2YXJpYW50cyAq Lwogc3RhdGljIGludCBtb3Zfd3JpdGVfYXZpZF90YWcoQVZJT0NvbnRleHQgKnBiLCBNT1ZUcmFj ayAqdHJhY2spCiB7CkBAIC0yMzgyLDYgKzI0MDAsOCBAQCBzdGF0aWMgaW50IG1vdl93cml0ZV92 aWRlb190YWcoQVZGb3JtYXRDb250ZXh0ICpzLCBBVklPQ29udGV4dCAqcGIsIE1PVk11eENvbnRl eAogICAgICAgICBhdmlkID0gMTsKICAgICB9IGVsc2UgaWYgKHRyYWNrLT5wYXItPmNvZGVjX2lk ID09IEFWX0NPREVDX0lEX0hFVkMpCiAgICAgICAgIG1vdl93cml0ZV9odmNjX3RhZyhwYiwgdHJh Y2spOworICAgIGVsc2UgaWYgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1ZW QykKKyAgICAgICAgbW92X3dyaXRlX3Z2Y2NfdGFnKHBiLCB0cmFjayk7CiAgICAgZWxzZSBpZiAo dHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCAmJiAhVEFHX0lTX0FWQ0ko dHJhY2stPnRhZykpIHsKICAgICAgICAgbW92X3dyaXRlX2F2Y2NfdGFnKHBiLCB0cmFjayk7CiAg ICAgICAgIGlmICh0cmFjay0+bW9kZSA9PSBNT0RFX0lQT0QpCkBAIC02MTcwLDYgKzYxOTAsNyBA QCBpbnQgZmZfbW92X3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpw a3QpCiAgICAgaWYgKChwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0ROWEhEIHx8CiAgICAg ICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQgfHwKICAgICAgICAgIHBhci0+ Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSEVWQyB8fAorICAgICAgICAgcGFyLT5jb2RlY19pZCA9 PSBBVl9DT0RFQ19JRF9WVkMgfHwKICAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNf SURfVlA5IHx8CiAgICAgICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0VWQyB8fAog ICAgICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9UUlVFSEQpICYmICF0cmstPnZv c19sZW4gJiYKQEAgLTYyMzUsNiArNjI1NiwxOCBAQCBpbnQgZmZfbW92X3dyaXRlX3BhY2tldChB VkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCiAgICAgICAgICAgICAgICAgc2l6ZSA9 IGZmX2hldmNfYW5uZXhiMm1wNChwYiwgcGt0LT5kYXRhLCBwa3QtPnNpemUsIDAsIE5VTEwpOwog ICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfSBlbHNlIGlmIChwYXItPmNvZGVjX2lkID09 IEFWX0NPREVDX0lEX1ZWQyAmJiB0cmstPnZvc19sZW4gPiA2ICYmCisgICAgICAgICAgICAgKEFW X1JCMjQodHJrLT52b3NfZGF0YSkgPT0gMSB8fCBBVl9SQjMyKHRyay0+dm9zX2RhdGEpID09IDEp KSB7CisgICAgICAvKiBleHRyYWRhdGEgaXMgQW5uZXggQiwgYXNzdW1lIHRoZSBiaXRzdHJlYW0g aXMgdG9vIGFuZCBjb252ZXJ0IGl0ICovCisgICAgICBpZiAodHJrLT5oaW50X3RyYWNrID49IDAg JiYgdHJrLT5oaW50X3RyYWNrIDwgbW92LT5uYl90cmFja3MpIHsKKyAgICAgICAgICAgIHJldCA9 IGZmX3Z2Y19hbm5leGIybXA0X2J1Zihwa3QtPmRhdGEsICZyZWZvcm1hdHRlZF9kYXRhLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSwgMCwgTlVMTCk7Cisg ICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAg ICAgICAgICAgYXZpb193cml0ZShwYiwgcmVmb3JtYXR0ZWRfZGF0YSwgc2l6ZSk7CisgICAgICB9 IGVsc2UgeworICAgICAgICAgIHNpemUgPSBmZl92dmNfYW5uZXhiMm1wNChwYiwgcGt0LT5kYXRh LCBwa3QtPnNpemUsIDAsIE5VTEwpOworICAgICAgfQogICAgIH0gZWxzZSBpZiAocGFyLT5jb2Rl Y19pZCA9PSBBVl9DT0RFQ19JRF9BVjEpIHsKICAgICAgICAgaWYgKHRyay0+aGludF90cmFjayA+ PSAwICYmIHRyay0+aGludF90cmFjayA8IG1vdi0+bmJfdHJhY2tzKSB7CiAgICAgICAgICAgICBy ZXQgPSBmZl9hdjFfZmlsdGVyX29idXNfYnVmKHBrdC0+ZGF0YSwgJnJlZm9ybWF0dGVkX2RhdGEs CkBAIC02MjgxLDYgKzYzMTQsOSBAQCBpbnQgZmZfbW92X3dyaXRlX3BhY2tldChBVkZvcm1hdENv bnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCiAgICAgICAgICAgICB9IGVsc2UgaWYocGFyLT5jb2Rl Y19pZCA9PSBBVl9DT0RFQ19JRF9IRVZDICYmIHBhci0+ZXh0cmFkYXRhX3NpemUgPiAyMSkgewog ICAgICAgICAgICAgICAgIGludCBuYWxfc2l6ZV9sZW5ndGggPSAocGFyLT5leHRyYWRhdGFbMjFd ICYgMHgzKSArIDE7CiAgICAgICAgICAgICAgICAgcmV0ID0gZmZfbW92X2NlbmNfYXZjX3dyaXRl X25hbF91bml0cyhzLCAmdHJrLT5jZW5jLCBuYWxfc2l6ZV9sZW5ndGgsIHBiLCBwa3QtPmRhdGEs IHNpemUpOworICAgICAgICAgICAgfSBlbHNlIGlmKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNf SURfVlZDICYmIHBhci0+ZXh0cmFkYXRhX3NpemUgPiAyMSkgeworICAgICAgICAgICAgICAgIGlu dCBuYWxfc2l6ZV9sZW5ndGggPSAocGFyLT5leHRyYWRhdGFbMjFdICYgMHgzKSArIDE7CisgICAg ICAgICAgICAgICAgcmV0ID0gZmZfbW92X2NlbmNfYXZjX3dyaXRlX25hbF91bml0cyhzLCAmdHJr LT5jZW5jLCBuYWxfc2l6ZV9sZW5ndGgsIHBiLCBwa3QtPmRhdGEsIHNpemUpOwogICAgICAgICAg ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXQgPSBmZl9tb3ZfY2VuY193cml0ZV9wYWNr ZXQoJnRyay0+Y2VuYywgcGIsIHBrdC0+ZGF0YSwgc2l6ZSk7CiAgICAgICAgICAgICB9CkBAIC03 MzYzLDcgKzczOTksOCBAQCBzdGF0aWMgaW50IG1vdl9pbml0KEFWRm9ybWF0Q29udGV4dCAqcykK IAogICAgICAgICBpZiAobW92LT5lbmNyeXB0aW9uX3NjaGVtZSA9PSBNT1ZfRU5DX0NFTkNfQUVT X0NUUikgewogICAgICAgICAgICAgcmV0ID0gZmZfbW92X2NlbmNfaW5pdCgmdHJhY2stPmNlbmMs IG1vdi0+ZW5jcnlwdGlvbl9rZXksCi0gICAgICAgICAgICAgICAgKHRyYWNrLT5wYXItPmNvZGVj X2lkID09IEFWX0NPREVDX0lEX0gyNjQgfHwgdHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09E RUNfSURfSEVWQyksCisgICAgICAgICAgICAgICAgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFW X0NPREVDX0lEX0gyNjQgfHwgdHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSEVW QyB8fAorICAgICAgICAgICAgICAgICB0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19J RF9WVkMpLAogICAgICAgICAgICAgICAgIHMtPmZsYWdzICYgQVZGTVRfRkxBR19CSVRFWEFDVCk7 CiAgICAgICAgICAgICBpZiAocmV0KQogICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CkBAIC03 ODMyLDYgKzc4NjksOCBAQCBzdGF0aWMgY29uc3QgQVZDb2RlY1RhZyBjb2RlY19tcDRfdGFnc1td ID0gewogICAgIHsgQVZfQ09ERUNfSURfSEVWQywgICAgICAgICAgICBNS1RBRygnaCcsICdlJywg J3YnLCAnMScpIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9IRVZDLCAgICAgICAgICAgIE1LVEFHKCdo JywgJ3YnLCAnYycsICcxJykgfSwKICAgICB7IEFWX0NPREVDX0lEX0hFVkMsICAgICAgICAgICAg TUtUQUcoJ2QnLCAndicsICdoJywgJzEnKSB9LAorICAgIHsgQVZfQ09ERUNfSURfVlZDLCAgICAg ICAgICAgICBNS1RBRygndicsICd2JywgJ2MnLCAnMScpIH0sCisgICAgeyBBVl9DT0RFQ19JRF9W VkMsICAgICAgICAgICAgIE1LVEFHKCd2JywgJ3YnLCAnaScsICcxJykgfSwKICAgICB7IEFWX0NP REVDX0lEX0VWQywgICAgICAgICAgICAgTUtUQUcoJ2UnLCAndicsICdjJywgJzEnKSB9LAogICAg IHsgQVZfQ09ERUNfSURfTVBFRzJWSURFTywgICAgICBNS1RBRygnbScsICdwJywgJzQnLCAndicp IH0sCiAgICAgeyBBVl9DT0RFQ19JRF9NUEVHMVZJREVPLCAgICAgIE1LVEFHKCdtJywgJ3AnLCAn NCcsICd2JykgfSwKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Z2Yy5jIGIvbGliYXZmb3JtYXQv dnZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTRhNGMwYTJmMwot LS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L3Z2Yy5jCkBAIC0wLDAgKzEsOTcxIEBACisv KgorICogSC4yNjYvVlZDIGhlbHBlciBmdW5jdGlvbnMgZm9yIG11eGVycworICoKKyAqIENvcHly aWdodCAoQykgMjAyMiwgVGhvbWFzIFNpZWRlbAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBl ZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1w ZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MSBVU0EKKyAqLworCisjaW5jbHVkZSAibGliYXZjb2RlYy9nZXRfYml0cy5oIgorI2luY2x1ZGUg ImxpYmF2Y29kZWMvZ29sb21iLmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy92dmMuaCIKKyNpbmNs dWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCisjaW5jbHVkZSAiYXZjLmgiCisjaW5jbHVk ZSAiYXZpby5oIgorI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ2dmMuaCIK KwordHlwZWRlZiBzdHJ1Y3QgVlZDQ05BTFVuaXRBcnJheSB7CisgICAgdWludDhfdCBhcnJheV9j b21wbGV0ZW5lc3M7CisgICAgdWludDhfdCBOQUxfdW5pdF90eXBlOworICAgIHVpbnQxNl90IG51 bV9uYWx1czsKKyAgICB1aW50MTZfdCAqbmFsX3VuaXRfbGVuZ3RoOworICAgIHVpbnQ4X3QgKipu YWxfdW5pdDsKK30gVlZDQ05BTFVuaXRBcnJheTsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDUFRMUmVj b3JkIHsKKyAgICB1aW50OF90IG51bV9ieXRlc19jb25zdHJhaW50X2luZm87CisgICAgdWludDhf dCBnZW5lcmFsX3Byb2ZpbGVfaWRjOworICAgIHVpbnQ4X3QgZ2VuZXJhbF90aWVyX2ZsYWc7Cisg ICAgdWludDhfdCBnZW5lcmFsX2xldmVsX2lkYzsKKyAgICB1aW50OF90IHB0bF9mcmFtZV9vbmx5 X2NvbnN0cmFpbnRfZmxhZzsKKyAgICB1aW50OF90IHB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxh ZzsKKyAgICB1aW50OF90IGdlbmVyYWxfY29uc3RyYWludF9pbmZvWzldOworICAgIHVpbnQ4X3Qg cHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tWVkNfTUFYX1NVQkxBWUVSUyAtIDFdOwor ICAgIHVpbnQ4X3Qgc3VibGF5ZXJfbGV2ZWxfaWRjW1ZWQ19NQVhfU1VCTEFZRVJTIC0gMV07Cisg ICAgdWludDhfdCBwdGxfbnVtX3N1Yl9wcm9maWxlczsKKyAgICB1aW50MzJfdCBnZW5lcmFsX3N1 Yl9wcm9maWxlX2lkY1tWVkNfTUFYX1NVQl9QUk9GSUxFU107Cit9IFZWQ1BUTFJlY29yZDsKKwor dHlwZWRlZiBzdHJ1Y3QgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgeworICAgIHVpbnQ4 X3QgbGVuZ3RoU2l6ZU1pbnVzT25lOworICAgIHVpbnQ4X3QgcHRsX3ByZXNlbnRfZmxhZzsKKyAg ICB1aW50MTZfdCBvbHNfaWR4OworICAgIHVpbnQ4X3QgbnVtX3N1YmxheWVyczsKKyAgICB1aW50 OF90IGNvbnN0YW50X2ZyYW1lX3JhdGU7CisgICAgdWludDhfdCBjaHJvbWFfZm9ybWF0X2lkYzsK KyAgICB1aW50OF90IGJpdF9kZXB0aF9taW51czg7CisgICAgVlZDUFRMUmVjb3JkIHB0bDsKKyAg ICB1aW50MTZfdCBtYXhfcGljdHVyZV93aWR0aDsKKyAgICB1aW50MTZfdCBtYXhfcGljdHVyZV9o ZWlnaHQ7CisgICAgdWludDE2X3QgYXZnX2ZyYW1lX3JhdGU7CisgICAgdWludDhfdCBudW1fb2Zf YXJyYXlzOworICAgIFZWQ0NOQUxVbml0QXJyYXkgKmFycmF5OworfSBWVkNEZWNvZGVyQ29uZmln dXJhdGlvblJlY29yZDsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDQ1Byb2ZpbGVUaWVyTGV2ZWwgewor ICAgIHVpbnQ4X3QgcHJvZmlsZV9pZGM7CisgICAgdWludDhfdCB0aWVyX2ZsYWc7CisgICAgdWlu dDhfdCBnZW5lcmFsX2xldmVsX2lkYzsKKyAgICB1aW50OF90IHB0bF9mcmFtZV9vbmx5X2NvbnN0 cmFpbnRfZmxhZzsKKyAgICB1aW50OF90IHB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZzsKKy8v IGdlbmVyYWxfY29uc3RyYWludF9pbmZvCisgICAgdWludDhfdCBnY2lfcHJlc2VudF9mbGFnOwor ICAgIHVpbnQ4X3QgZ2NpX2dlbmVyYWxfY29uc3RyYWludHNbOV07CisgICAgdWludDhfdCBnY2lf bnVtX3Jlc2VydmVkX2JpdHM7CisvLyBlbmQgZ2VuZXJhbF9jb25zdHJhaW50X2luZm8KKyAgICB1 aW50OF90IHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbVlZDX01BWF9TVUJMQVlFUlMg LSAxXTsKKyAgICB1aW50OF90IHN1YmxheWVyX2xldmVsX2lkY1tWVkNfTUFYX1NVQkxBWUVSUyAt IDFdOworICAgIHVpbnQ4X3QgcHRsX251bV9zdWJfcHJvZmlsZXM7CisgICAgdWludDMyX3QgZ2Vu ZXJhbF9zdWJfcHJvZmlsZV9pZGNbVlZDX01BWF9TVUJfUFJPRklMRVNdOworfSBWVkNDUHJvZmls ZVRpZXJMZXZlbDsKKworc3RhdGljIHZvaWQgdnZjY191cGRhdGVfcHRsKFZWQ0RlY29kZXJDb25m aWd1cmF0aW9uUmVjb3JkICp2dmNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0NQ cm9maWxlVGllckxldmVsICpwdGwpCit7CisgICAgLyoKKyAgICAgKiBUaGUgbGV2ZWwgaW5kaWNh dGlvbiBnZW5lcmFsX2xldmVsX2lkYyBtdXN0IGluZGljYXRlIGEgbGV2ZWwgb2YKKyAgICAgKiBj YXBhYmlsaXR5IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgaGlnaGVzdCBsZXZlbCBpbmRp Y2F0ZWQgZm9yIHRoZQorICAgICAqIGhpZ2hlc3QgdGllciBpbiBhbGwgdGhlIHBhcmFtZXRlciBz ZXRzLgorICAgICAqLworICAgIGlmICh2dmNjLT5wdGwuZ2VuZXJhbF90aWVyX2ZsYWcgPCBwdGwt PnRpZXJfZmxhZykKKyAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjID0gcHRsLT5n ZW5lcmFsX2xldmVsX2lkYzsKKyAgICBlbHNlCisgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2xl dmVsX2lkYyA9CisgICAgICAgICAgICBGRk1BWCh2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMs IHB0bC0+Z2VuZXJhbF9sZXZlbF9pZGMpOworCisgICAgLyoKKyAgICAgKiBUaGUgdGllciBpbmRp Y2F0aW9uIGdlbmVyYWxfdGllcl9mbGFnIG11c3QgaW5kaWNhdGUgYSB0aWVyIGVxdWFsIHRvIG9y CisgICAgICogZ3JlYXRlciB0aGFuIHRoZSBoaWdoZXN0IHRpZXIgaW5kaWNhdGVkIGluIGFsbCB0 aGUgcGFyYW1ldGVyIHNldHMuCisgICAgICovCisgICAgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9m bGFnID0KKyAgICAgICAgRkZNQVgodnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnLCBwdGwtPnRp ZXJfZmxhZyk7CisKKyAgICAvKgorICAgICAqIFRoZSBwcm9maWxlIGluZGljYXRpb24gZ2VuZXJh bF9wcm9maWxlX2lkYyBtdXN0IGluZGljYXRlIGEgcHJvZmlsZSB0bworICAgICAqIHdoaWNoIHRo ZSBzdHJlYW0gYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiByZWNvcmQgY29uZm9y bXMuCisgICAgICoKKyAgICAgKiBJZiB0aGUgc2VxdWVuY2UgcGFyYW1ldGVyIHNldHMgYXJlIG1h cmtlZCB3aXRoIGRpZmZlcmVudCBwcm9maWxlcywgdGhlbgorICAgICAqIHRoZSBzdHJlYW0gbWF5 IG5lZWQgZXhhbWluYXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIHByb2ZpbGUsIGlmIGFueSwgdGhl CisgICAgICogZW50aXJlIHN0cmVhbSBjb25mb3JtcyB0by4gSWYgdGhlIGVudGlyZSBzdHJlYW0g aXMgbm90IGV4YW1pbmVkLCBvciB0aGUKKyAgICAgKiBleGFtaW5hdGlvbiByZXZlYWxzIHRoYXQg dGhlcmUgaXMgbm8gcHJvZmlsZSB0byB3aGljaCB0aGUgZW50aXJlIHN0cmVhbQorICAgICAqIGNv bmZvcm1zLCB0aGVuIHRoZSBlbnRpcmUgc3RyZWFtIG11c3QgYmUgc3BsaXQgaW50byB0d28gb3Ig bW9yZQorICAgICAqIHN1Yi1zdHJlYW1zIHdpdGggc2VwYXJhdGUgY29uZmlndXJhdGlvbiByZWNv cmRzIGluIHdoaWNoIHRoZXNlIHJ1bGVzIGNhbgorICAgICAqIGJlIG1ldC4KKyAgICAgKgorICAg ICAqIE5vdGU6IHNldCB0aGUgcHJvZmlsZSB0byB0aGUgaGlnaGVzdCB2YWx1ZSBmb3IgdGhlIHNh a2Ugb2Ygc2ltcGxpY2l0eS4KKyAgICAgKi8KKyAgICB2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxl X2lkYyA9CisgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjLCBwdGwt PnByb2ZpbGVfaWRjKTsKKworICAgIC8qCisgICAgICogRWFjaCBiaXQgaW4gZmxhZ3MgbWF5IG9u bHkgYmUgc2V0IGlmIGFsbAorICAgICAqIHRoZSBwYXJhbWV0ZXIgc2V0cyBzZXQgdGhhdCBiaXQu CisgICAgICovCisgICAgdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyAm PQorICAgICAgICBwdGwtPnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsKKyAgICB2dmNj LT5wdGwucHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnICY9IHB0bC0+cHRsX211bHRpbGF5ZXJf ZW5hYmxlZF9mbGFnOworCisgICAgLyoKKyAgICAgKiBDb25zdHJhaW50cyBJbmZvCisgICAgICov CisgICAgaWYgKHB0bC0+Z2NpX3ByZXNlbnRfZmxhZykgeworICAgICAgICB2dmNjLT5wdGwubnVt X2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9IDk7CisgICAgICAgIG1lbWNweSgmdnZjYy0+cHRsLmdl bmVyYWxfY29uc3RyYWludF9pbmZvWzBdLAorICAgICAgICAgICAgICAgJnB0bC0+Z2NpX2dlbmVy YWxfY29uc3RyYWludHNbMF0sIHNpemVvZih1aW50OF90KSAqIDkpOworCisgICAgfSBlbHNlIHsK KyAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8gPSAxOworICAgICAg ICBtZW1zZXQoJnZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1swXSwgMCwgc2l6ZW9m KHVpbnQ4X3QpICogOSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBFYWNoIGJpdCBpbiBmbGFn cyBtYXkgb25seSBiZSBzZXQgaWYgb25lIG9mCisgICAgICogdGhlIHBhcmFtZXRlciBzZXRzIHNl dCB0aGF0IGJpdC4KKyAgICAgKi8KKyAgICBtZW1zZXQodnZjYy0+cHRsLnB0bF9zdWJsYXllcl9s ZXZlbF9wcmVzZW50X2ZsYWcsIDAsCisgICAgICAgICAgIHNpemVvZih1aW50OF90KSAqIHZ2Y2Mt Pm51bV9zdWJsYXllcnMgLSAxKTsKKyAgICBtZW1zZXQodnZjYy0+cHRsLnN1YmxheWVyX2xldmVs X2lkYywgMCwKKyAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpICogdnZjYy0+bnVtX3N1YmxheWVy cyAtIDEpOworCisgICAgZm9yIChpbnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAyOyBpID49 IDA7IGktLSkgeworICAgICAgICB2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRf ZmxhZ1tpXSB8PQorICAgICAgICAgICAgcHRsLT5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9m bGFnW2ldOworICAgICAgICBpZiAodnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50 X2ZsYWdbaV0pIHsKKyAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0g PQorICAgICAgICAgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0s CisgICAgICAgICAgICAgICAgICAgICAgcHRsLT5zdWJsYXllcl9sZXZlbF9pZGNbaV0pOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGkgPT0gdnZjYy0+bnVtX3N1YmxheWVycyAt IDEpIHsKKyAgICAgICAgICAgICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0g dnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0KKyAgICAgICAgICAg ICAgICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpICsgMV07CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmls ZXMgPQorICAgICAgICBGRk1BWCh2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMsIHB0bC0+ cHRsX251bV9zdWJfcHJvZmlsZXMpOworICAgIGlmICh2dmNjLT5wdGwucHRsX251bV9zdWJfcHJv ZmlsZXMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2dmNjLT5wdGwucHRsX251bV9z dWJfcHJvZmlsZXM7IGkrKykgeworICAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfc3ViX3By b2ZpbGVfaWRjW2ldID0KKyAgICAgICAgICAgICAgICBwdGwtPmdlbmVyYWxfc3ViX3Byb2ZpbGVf aWRjW2ldOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2dmNjX3BhcnNlX3B0 bChHZXRCaXRDb250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29k ZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IHByb2ZpbGVUaWVyUHJlc2VudEZsYWcsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3N1Yl9sYXllcnNfbWludXMxKQoreworICAgIFZWQ0NQ cm9maWxlVGllckxldmVsIGdlbmVyYWxfcHRsOworICAgIGludCBqOworCisgICAgaWYgKHByb2Zp bGVUaWVyUHJlc2VudEZsYWcpIHsKKyAgICAgICAgZ2VuZXJhbF9wdGwucHJvZmlsZV9pZGMgPSBn ZXRfYml0cyhnYiwgNyk7CisgICAgICAgIGdlbmVyYWxfcHRsLnRpZXJfZmxhZyA9IGdldF9iaXRz MShnYik7CisgICAgfQorICAgIGdlbmVyYWxfcHRsLmdlbmVyYWxfbGV2ZWxfaWRjID0gZ2V0X2Jp dHMoZ2IsIDgpOworCisgICAgZ2VuZXJhbF9wdGwucHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9m bGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBnZW5lcmFsX3B0bC5wdGxfbXVsdGlsYXllcl9lbmFi bGVkX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgIGlmIChwcm9maWxlVGllclByZXNlbnRGbGFn KSB7ICAgICAgIC8vIHBhcnNlIGNvbnN0cmFpbnQgaW5mbworICAgICAgICBnZW5lcmFsX3B0bC5n Y2lfcHJlc2VudF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgaWYgKGdlbmVyYWxfcHRs LmdjaV9wcmVzZW50X2ZsYWcpIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA4OyBqKysp CisgICAgICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX2dlbmVyYWxfY29uc3RyYWludHNbal0g PSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgICAgICBnZW5lcmFsX3B0bC5nY2lfZ2VuZXJhbF9j b25zdHJhaW50c1s4XSA9IGdldF9iaXRzKGdiLCA3KTsKKworICAgICAgICAgICAgZ2VuZXJhbF9w dGwuZ2NpX251bV9yZXNlcnZlZF9iaXRzID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICAgICAg c2tpcF9iaXRzKGdiLCBnZW5lcmFsX3B0bC5nY2lfbnVtX3Jlc2VydmVkX2JpdHMpOworICAgICAg ICB9CisgICAgICAgIHdoaWxlIChnYi0+aW5kZXggJSA4ICE9IDApCisgICAgICAgICAgICBza2lw X2JpdHMxKGdiKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gbWF4X3N1Yl9sYXllcnNfbWlu dXMxIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgICAgIGdlbmVyYWxfcHRsLnB0bF9zdWJsYXllcl9s ZXZlbF9wcmVzZW50X2ZsYWdbaV0gPSBnZXRfYml0czEoZ2IpOworCisgICAgd2hpbGUgKGdiLT5p bmRleCAlIDggIT0gMCkKKyAgICAgICAgc2tpcF9iaXRzMShnYik7CisKKyAgICBmb3IgKGludCBp ID0gbWF4X3N1Yl9sYXllcnNfbWludXMxIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaWYg KGdlbmVyYWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pCisgICAgICAg ICAgICBnZW5lcmFsX3B0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPSBnZXRfYml0cyhnYiwgOCk7 CisgICAgfQorCisgICAgaWYgKHByb2ZpbGVUaWVyUHJlc2VudEZsYWcpIHsKKyAgICAgICAgZ2Vu ZXJhbF9wdGwucHRsX251bV9zdWJfcHJvZmlsZXMgPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAg IGlmIChnZW5lcmFsX3B0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcykgeworICAgICAgICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBnZW5lcmFsX3B0bC5wdGxfbnVtX3N1Yl9wcm9maWxlczsgaSsrKQor ICAgICAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldID0g Z2V0X2JpdHNfbG9uZyhnYiwgMzIpOworICAgICAgICB9CisgICAgfQorCisgICAgdnZjY191cGRh dGVfcHRsKHZ2Y2MsICZnZW5lcmFsX3B0bCk7Cit9CisKK3N0YXRpYyBpbnQgdnZjY19wYXJzZV92 cHMoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29k ZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIHVuc2lnbmVkIGludCB2cHNfbWF4 X2xheWVyc19taW51czE7CisgICAgdW5zaWduZWQgaW50IHZwc19tYXhfc3VibGF5ZXJzX21pbnVz MTsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFn OworICAgIHVuc2lnbmVkIGludCB2cHNfYWxsX2luZGVwZW5kZW50X2xheWVyc19mbGFnOworICAg IHVuc2lnbmVkIGludCB2cHNfZWFjaF9sYXllcl9pc19hbl9vbHNfZmxhZzsKKyAgICB1bnNpZ25l ZCBpbnQgdnBzX29sc19tb2RlX2lkYzsKKworICAgIHVuc2lnbmVkIGludCB2cHNfcHRfcHJlc2Vu dF9mbGFnW1ZWQ19NQVhfUFRMU107CisgICAgdW5zaWduZWQgaW50IHZwc19wdGxfbWF4X3RpZFtW VkNfTUFYX1BUTFNdOworICAgIHVuc2lnbmVkIGludCB2cHNfbnVtX3B0bHNfbWludXMxID0gMDsK KworICAgIC8qCisgICAgICogdnBzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQgdSg0KQorICAgICAq LworICAgIHNraXBfYml0cyhnYiwgNCk7CisKKyAgICB2cHNfbWF4X2xheWVyc19taW51czEgPSBn ZXRfYml0cyhnYiwgNik7CisgICAgdnBzX21heF9zdWJsYXllcnNfbWludXMxID0gZ2V0X2JpdHMo Z2IsIDMpOworCisgICAgLyoKKyAgICAgKiBudW1UZW1wb3JhbExheWVycyBncmVhdGVyIHRoYW4g MSBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIHRvIHdoaWNoIHRoaXMKKyAgICAgKiBjb25maWd1 cmF0aW9uIHJlY29yZCBhcHBsaWVzIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUgYW5kIHRoZSBjb250 YWluZWQKKyAgICAgKiBudW1iZXIgb2YgdGVtcG9yYWwgbGF5ZXJzIChhbHNvIHJlZmVycmVkIHRv IGFzIHRlbXBvcmFsIHN1Yi1sYXllciBvcgorICAgICAqIHN1Yi1sYXllciBpbiBJU08vSUVDIDIz MDA4LTIpIGlzIGVxdWFsIHRvIG51bVRlbXBvcmFsTGF5ZXJzLiBWYWx1ZSAxCisgICAgICogaW5k aWNhdGVzIHRoYXQgdGhlIHN0cmVhbSBpcyBub3QgdGVtcG9yYWxseSBzY2FsYWJsZS4gVmFsdWUg MCBpbmRpY2F0ZXMKKyAgICAgKiB0aGF0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGUgc3RyZWFt IGlzIHRlbXBvcmFsbHkgc2NhbGFibGUuCisgICAgICovCisgICAgdnZjYy0+bnVtX3N1YmxheWVy cyA9IEZGTUFYKHZ2Y2MtPm51bV9zdWJsYXllcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZwc19tYXhfc3VibGF5ZXJzX21pbnVzMSArIDEpOworCisgICAgaWYgKHZwc19tYXhf bGF5ZXJzX21pbnVzMSA+IDAgJiYgdnBzX21heF9zdWJsYXllcnNfbWludXMxID4gMCkKKyAgICAg ICAgdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsK KyAgICBpZiAodnBzX21heF9sYXllcnNfbWludXMxID4gMCkKKyAgICAgICAgdnBzX2FsbF9pbmRl cGVuZGVudF9sYXllcnNfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgZWxzZQorICAgICAgICB2 cHNfYWxsX2luZGVwZW5kZW50X2xheWVyc19mbGFnID0gMTsKKworICAgIGZvciAoaW50IGkgPSAw OyBpIDw9IHZwc19tYXhfbGF5ZXJzX21pbnVzMTsgaSsrKSB7CisgICAgICAgIHNraXBfYml0cyhn YiwgNik7ICAgIC8vdnBzX2xheWVyX2lkW2ldCisgICAgICAgIGlmIChpID4gMCAmJiAhdnBzX2Fs bF9pbmRlcGVuZGVudF9sYXllcnNfZmxhZykgeworICAgICAgICAgICAgaWYgKGdldF9iaXRzMShn YikpIHsgICAgLy8gdnBzX2luZGVwZW5kZW50X2xheWVyX2ZsYWdbaV0KKyAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgdnBzX21heF90aWRfcmVmX3ByZXNlbnRfZmxhZyA9IGdldF9iaXRzMShn Yik7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspIHsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKHZwc19tYXhfdGlkX3JlZl9wcmVzZW50X2ZsYWcgJiYgZ2V0X2Jp dHMxKGdiKSkgIC8vIHZwc19kaXJlY3RfcmVmX2xheWVyX2ZsYWdbaV1bal0KKyAgICAgICAgICAg ICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgMyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIHZwc19tYXhfdGlkX2lsX3JlZl9waWNzX3BsdXMxCisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHZwc19tYXhfbGF5ZXJz X21pbnVzMSA+IDApIHsKKyAgICAgICAgaWYgKHZwc19hbGxfaW5kZXBlbmRlbnRfbGF5ZXJzX2Zs YWcpCisgICAgICAgICAgICB2cHNfZWFjaF9sYXllcl9pc19hbl9vbHNfZmxhZyA9IGdldF9iaXRz MShnYik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZwc19lYWNoX2xheWVyX2lzX2FuX29s c19mbGFnID0gMDsKKyAgICAgICAgaWYgKCF2cHNfZWFjaF9sYXllcl9pc19hbl9vbHNfZmxhZykg eworICAgICAgICAgICAgaWYgKCF2cHNfYWxsX2luZGVwZW5kZW50X2xheWVyc19mbGFnKQorICAg ICAgICAgICAgICAgIHZwc19vbHNfbW9kZV9pZGMgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgdnBzX29sc19tb2RlX2lkYyA9IDI7CisgICAgICAg ICAgICBpZiAodnBzX29sc19tb2RlX2lkYyA9PSAyKSB7CisgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IHZwc19udW1fb3V0cHV0X2xheWVyX3NldHNfbWludXMyID0gZ2V0X2JpdHMoZ2IsIDgp OworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHZwc19udW1fb3V0cHV0X2xh eWVyX3NldHNfbWludXMyICsgMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50 IGogPSAwOyBqIDw9IHZwc19tYXhfbGF5ZXJzX21pbnVzMTsgaisrKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBza2lwX2JpdHMxKGdiKTsgLy8gdnBzX29sc19vdXRwdXRfbGF5ZXJfZmxhZ1tp XVtqXQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIHZwc19udW1fcHRsc19taW51czEgPSBnZXRfYml0cyhn YiwgOCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xzX2Zs YWcgPSAwOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHZwc19udW1fcHRsc19t aW51czE7IGkrKykgeworICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICB2cHNfcHRfcHJl c2VudF9mbGFnW2ldID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg dnBzX3B0X3ByZXNlbnRfZmxhZ1tpXSA9IDE7CisKKyAgICAgICAgaWYgKCF2cHNfZGVmYXVsdF9w dGxfZHBiX2hyZF9tYXhfdGlkX2ZsYWcpCisgICAgICAgICAgICB2cHNfcHRsX21heF90aWRbaV0g PSBnZXRfYml0cyhnYiwgMyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZwc19wdGxfbWF4 X3RpZFtpXSA9IHZwc19tYXhfc3VibGF5ZXJzX21pbnVzMTsKKyAgICB9CisKKyAgICB3aGlsZSAo Z2ItPmluZGV4ICUgOCAhPSAwKQorICAgICAgICBza2lwX2JpdHMxKGdiKTsKKworICAgIGZvciAo aW50IGkgPSAwOyBpIDw9IHZwc19udW1fcHRsc19taW51czE7IGkrKykKKyAgICAgICAgdnZjY19w YXJzZV9wdGwoZ2IsIHZ2Y2MsIHZwc19wdF9wcmVzZW50X2ZsYWdbaV0sIHZwc19wdGxfbWF4X3Rp ZFtpXSk7CisKKyAgICAvKiBub3RoaW5nIHVzZWZ1bCBmb3IgdnZjYyBwYXN0IHRoaXMgcG9pbnQg Ki8KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dmNjX3BhcnNlX3NwcyhHZXRCaXRD b250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3Vy YXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdW5zaWduZWQgaW50IHNwc19tYXhfc3VibGF5ZXJz X21pbnVzMSwgc3BzX2xvZzJfY3R1X3NpemVfbWludXM1OworICAgIHVuc2lnbmVkIGludCBzcHNf c3VicGljX3NhbWVfc2l6ZV9mbGFnLCBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGVz LAorICAgICAgICBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZXM7CisgICAgdW5zaWdu ZWQgaW50IHNwc19pbmRlcGVuZGVudF9zdWJwaWNzX2ZsYWc7CisKKyAgICBza2lwX2JpdHMoZ2Is IDgpOyAgLy8gc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkICYmIHNwc192aWRlb19wYXJhbWV0ZXJf c2V0X2lkCisgICAgc3BzX21heF9zdWJsYXllcnNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDMpOwor CisgICAgLyoKKyAgICAgKiBudW1UZW1wb3JhbExheWVycyBncmVhdGVyIHRoYW4gMSBpbmRpY2F0 ZXMgdGhhdCB0aGUgc3RyZWFtIHRvIHdoaWNoIHRoaXMKKyAgICAgKiBjb25maWd1cmF0aW9uIHJl Y29yZCBhcHBsaWVzIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUgYW5kIHRoZSBjb250YWluZWQKKyAg ICAgKiBudW1iZXIgb2YgdGVtcG9yYWwgbGF5ZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzIHRlbXBv cmFsIHN1Yi1sYXllciBvcgorICAgICAqIHN1Yi1sYXllciBpbiBJU08vSUVDIDIzMDA4LTIpIGlz IGVxdWFsIHRvIG51bVRlbXBvcmFsTGF5ZXJzLiBWYWx1ZSAxCisgICAgICogaW5kaWNhdGVzIHRo YXQgdGhlIHN0cmVhbSBpcyBub3QgdGVtcG9yYWxseSBzY2FsYWJsZS4gVmFsdWUgMCBpbmRpY2F0 ZXMKKyAgICAgKiB0aGF0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGUgc3RyZWFtIGlzIHRlbXBv cmFsbHkgc2NhbGFibGUuCisgICAgICovCisgICAgdnZjYy0+bnVtX3N1YmxheWVycyA9IEZGTUFY KHZ2Y2MtPm51bV9zdWJsYXllcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNw c19tYXhfc3VibGF5ZXJzX21pbnVzMSArIDEpOworCisgICAgdnZjYy0+Y2hyb21hX2Zvcm1hdF9p ZGMgPSBnZXRfYml0cyhnYiwgMik7CisgICAgc3BzX2xvZzJfY3R1X3NpemVfbWludXM1ID0gZ2V0 X2JpdHMoZ2IsIDIpOworCisgICAgaWYgKGdldF9iaXRzMShnYikpICAgICAgICAgIC8vIHNwc19w dGxfZHBiX2hyZF9wYXJhbXNfcHJlc2VudF9mbGFnCisgICAgICAgIHZ2Y2NfcGFyc2VfcHRsKGdi LCB2dmNjLCAxLCBzcHNfbWF4X3N1YmxheWVyc19taW51czEpOworCisgICAgc2tpcF9iaXRzMShn Yik7ICAgICAgICAgICAgIC8vIHNwc19nZHJfZW5hYmxlZF9mbGFnCisgICAgaWYgKGdldF9iaXRz KGdiLCAxKSkgICAgICAgIC8vIHNwc19yZWZfcGljX3Jlc2FtcGxpbmdfZW5hYmxlZF9mbGFnCisg ICAgICAgIHNraXBfYml0czEoZ2IpOyAgICAgICAgIC8vIHNwc19yZXNfY2hhbmdlX2luX2NsdnNf YWxsb3dlZF9mbGFnCisKKyAgICBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZXMgPSBn ZXRfdWVfZ29sb21iX2xvbmcoZ2IpOworICAgIHZ2Y2MtPm1heF9waWN0dXJlX3dpZHRoID0KKyAg ICAgICAgRkZNQVgodnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgsIHNwc19waWNfd2lkdGhfbWF4X2lu X2x1bWFfc2FtcGxlcyk7CisgICAgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlcyA9 IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7CisgICAgdnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0ID0K KyAgICAgICAgRkZNQVgodnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0LCBzcHNfcGljX2hlaWdodF9t YXhfaW5fbHVtYV9zYW1wbGVzKTsKKworICAgIGlmIChnZXRfYml0czEoZ2IpKSB7CisgICAgICAg IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19jb25mX3dpbl9sZWZ0X29mZnNldAorICAg ICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5fcmlnaHRfb2Zmc2V0 CisgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19jb25mX3dpbl90b3Bfb2Zm c2V0CisgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19jb25mX3dpbl9ib3R0 b21fb2Zmc2V0CisgICAgfQorCisgICAgaWYgKGdldF9iaXRzMShnYikpIHsgICAgICAgIC8vIHNw c19zdWJwaWNfaW5mb19wcmVzZW50X2ZsYWcKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNw c19udW1fc3VicGljc19taW51czEgPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOworICAgICAgICBj b25zdCBpbnQgY3RiX2xvZzJfc2l6ZV95ID0gc3BzX2xvZzJfY3R1X3NpemVfbWludXM1ICsgNTsK KyAgICAgICAgY29uc3QgaW50IGN0Yl9zaXplX3kgICAgICA9IDEgPDwgY3RiX2xvZzJfc2l6ZV95 OworICAgICAgICBjb25zdCBpbnQgdG1wX3dpZHRoX3ZhbCAgID0gQVZfQ0VJTF9SU0hJRlQoc3Bz X3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGVzLCAgY3RiX2xvZzJfc2l6ZV95KTsKKyAgICAg ICAgY29uc3QgaW50IHRtcF9oZWlnaHRfdmFsICA9IEFWX0NFSUxfUlNISUZUKHNwc19waWNfaGVp Z2h0X21heF9pbl9sdW1hX3NhbXBsZXMsIGN0Yl9sb2cyX3NpemVfeSk7CisgICAgICAgIGNvbnN0 IGludCB3bGVuICAgICAgICAgICAgPSBhdl9jZWlsX2xvZzIodG1wX3dpZHRoX3ZhbCk7CisgICAg ICAgIGNvbnN0IGludCBobGVuICAgICAgICAgICAgPSBhdl9jZWlsX2xvZzIodG1wX2hlaWdodF92 YWwpOworICAgICAgICBpZiAoc3BzX251bV9zdWJwaWNzX21pbnVzMSA+IDApIHsgICAgICAgLy8g c3BzX251bV9zdWJwaWNzX21pbnVzMQorICAgICAgICAgICAgc3BzX2luZGVwZW5kZW50X3N1YnBp Y3NfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgICAgICBzcHNfc3VicGljX3NhbWVfc2l6 ZV9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0g MDsgc3BzX251bV9zdWJwaWNzX21pbnVzMSA+IDAgJiYgaSA8PSBzcHNfbnVtX3N1YnBpY3NfbWlu dXMxOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghc3BzX3N1YnBpY19zYW1lX3NpemVfZmxhZyB8 fCBpID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgc3BzX3BpY193aWR0aF9t YXhfaW5fbHVtYV9zYW1wbGVzID4gY3RiX3NpemVfeSkKKyAgICAgICAgICAgICAgICAgICAgc2tp cF9iaXRzKGdiLCB3bGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgc3BzX3BpY19o ZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlcyA+IGN0Yl9zaXplX3kpCisgICAgICAgICAgICAgICAg ICAgIHNraXBfYml0cyhnYiwgaGxlbik7CisgICAgICAgICAgICAgICAgaWYgKGkgPCBzcHNfbnVt X3N1YnBpY3NfbWludXMxICYmIHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlcyA+IGN0 Yl9zaXplX3kpCisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgd2xlbik7CisgICAg ICAgICAgICAgICAgaWYgKGkgPCBzcHNfbnVtX3N1YnBpY3NfbWludXMxICYmIHNwc19waWNfaGVp Z2h0X21heF9pbl9sdW1hX3NhbXBsZXMgPiBjdGJfc2l6ZV95KQorICAgICAgICAgICAgICAgICAg ICBza2lwX2JpdHMoZ2IsIGhsZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFz cHNfaW5kZXBlbmRlbnRfc3VicGljc19mbGFnKSB7CisgICAgICAgICAgICAgICAgc2tpcF9iaXRz KGdiLCAyKTsgICAgICAgLy8gc3BzX3N1YnBpY190cmVhdGVkX2FzX3BpY19mbGFnICYmIHNwc19s b29wX2ZpbHRlcl9hY3Jvc3Nfc3VicGljX2VuYWJsZWRfZmxhZworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19zdWJwaWNfaWRf bGVuX21pbnVzMQorICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgeyAgICAvLyBzcHNfc3VicGlj X2lkX21hcHBpbmdfZXhwbGljaXRseV9zaWduYWxsZWRfZmxhZworICAgICAgICAgICAgaWYgKGdl dF9iaXRzMShnYikpICAvLyBzcHNfc3VicGljX2lkX21hcHBpbmdfcHJlc2VudF9mbGFnCisgICAg ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3BzX251bV9zdWJwaWNzX21pbnVzMTsg aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0czEoZ2IpOyAgICAgLy8gc3BzX3N1 YnBpY19pZFtpXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB2dmNj LT5iaXRfZGVwdGhfbWludXM4ID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKworICAgIC8qIG5v dGhpbmcgdXNlZnVsIGZvciB2dmNjIHBhc3QgdGhpcyBwb2ludCAqLworICAgIHJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHZ2Y2NfcGFyc2VfcHBzKEdldEJpdENvbnRleHQgKmdiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykK K3sKKworICAgIC8vIE5vdGhpbmcgb2YgaW1wb3J0YW5jZSB0byBwYXJzZSBpbiBQUFMKKyAgICAv KiBub3RoaW5nIHVzZWZ1bCBmb3IgdnZjYyBwYXN0IHRoaXMgcG9pbnQgKi8KKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgbmFsX3VuaXRfcGFyc2VfaGVhZGVyKEdldEJpdENvbnRleHQg KmdiLCB1aW50OF90ICpuYWxfdHlwZSkKK3sKKyAgICAvKgorICAgICAqIGZvcmJpZGRlbl96ZXJv X2JpdCAgICB1KDEpCisgICAgICogbnVoX3Jlc2VydmVkX3plcm9fYml0IHUoMSkKKyAgICAgKiBu dWhfbGF5ZXJfaWQgICAgICAgICAgdSg2KQorICAgICAqLworICAgIHNraXBfYml0cyhnYiwgOCk7 CisgICAgKm5hbF90eXBlID0gZ2V0X2JpdHMoZ2IsIDUpOworCisgICAgLyoKKyAgICAgKiBudWhf dGVtcG9yYWxfaWRfcGx1czEgdSgzKQorICAgICAqLworICAgIHNraXBfYml0cyhnYiwgMyk7Cit9 CisKK3N0YXRpYyBpbnQgdnZjY19hcnJheV9hZGRfbmFsX3VuaXQodWludDhfdCAqbmFsX2J1Ziwg dWludDMyX3QgbmFsX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QgbmFsX3R5cGUsIGludCBwc19hcnJheV9jb21wbGV0ZW5lc3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNj KQoreworICAgIGludCByZXQ7CisgICAgdWludDhfdCBpbmRleDsKKyAgICB1aW50MTZfdCBudW1f bmFsdXM7CisgICAgVlZDQ05BTFVuaXRBcnJheSAqYXJyYXk7CisKKyAgICBmb3IgKGluZGV4ID0g MDsgaW5kZXggPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpbmRleCsrKQorICAgICAgICBpZiAodnZj Yy0+YXJyYXlbaW5kZXhdLk5BTF91bml0X3R5cGUgPT0gbmFsX3R5cGUpCisgICAgICAgICAgICBi cmVhazsKKworICAgIGlmIChpbmRleCA+PSB2dmNjLT5udW1fb2ZfYXJyYXlzKSB7CisgICAgICAg IHVpbnQ4X3QgaTsKKworICAgICAgICByZXQgPQorICAgICAgICAgICAgYXZfcmVhbGxvY3BfYXJy YXkoJnZ2Y2MtPmFycmF5LCBpbmRleCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplb2YoVlZDQ05BTFVuaXRBcnJheSkpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAg ICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgZm9yIChpID0gdnZjYy0+bnVtX29mX2FycmF5 czsgaSA8PSBpbmRleDsgaSsrKQorICAgICAgICAgICAgbWVtc2V0KCZ2dmNjLT5hcnJheVtpXSwg MCwgc2l6ZW9mKFZWQ0NOQUxVbml0QXJyYXkpKTsKKyAgICAgICAgdnZjYy0+bnVtX29mX2FycmF5 cyA9IGluZGV4ICsgMTsKKyAgICB9CisKKyAgICBhcnJheSA9ICZ2dmNjLT5hcnJheVtpbmRleF07 CisgICAgbnVtX25hbHVzID0gYXJyYXktPm51bV9uYWx1czsKKworICAgIHJldCA9IGF2X3JlYWxs b2NwX2FycmF5KCZhcnJheS0+bmFsX3VuaXQsIG51bV9uYWx1cyArIDEsIHNpemVvZih1aW50OF90 ICopKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCA9 CisgICAgICAgIGF2X3JlYWxsb2NwX2FycmF5KCZhcnJheS0+bmFsX3VuaXRfbGVuZ3RoLCBudW1f bmFsdXMgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodWludDE2X3QpKTsK KyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGFycmF5LT5uYWxf dW5pdFtudW1fbmFsdXNdID0gbmFsX2J1ZjsKKyAgICBhcnJheS0+bmFsX3VuaXRfbGVuZ3RoW251 bV9uYWx1c10gPSBuYWxfc2l6ZTsKKyAgICBhcnJheS0+TkFMX3VuaXRfdHlwZSA9IG5hbF90eXBl OworICAgIGFycmF5LT5udW1fbmFsdXMrKzsKKworICAgIC8qCisgICAgKiBXaGVuIHRoZSBzYW1w bGUgZW50cnkgbmFtZSBpcyAndnZjMScsIHRoZSBmb2xsb3dpbmcgYXBwbGllczoKKyAgICAqIOKA oiBUaGUgdmFsdWUgb2YgYXJyYXlfY29tcGxldGVuZXNzIHNoYWxsIGJlIGVxdWFsIHRvIDEgZm9y IGFycmF5cyBvZiBTUFMsCisgICAgKiAgIGFuZCBQUFMgTkFMIHVuaXRzLgorICAgICog4oCiIElm IGEgVlZDIGJpdHN0cmVhbSBpbmNsdWRlcyBEQ0kgTkFMIHVuaXQocyksIHRoZSB2YWx1ZSBvZgor ICAgICogICBhcnJheV9jb21wbGV0ZW5lc3Mgc2hhbGwgYmUgZXF1YWwgdG8gMSBmb3IgdGhlIGFy cmF5IG9mIERDSSB1bml0cy4KKyAgICAqICAgT3RoZXJ3aXNlLCBOQUxfdW5pdF90eXBlIHNoYWxs IG5vdCBpbmRpY2F0ZSBEQ0kgTkFMIHVuaXRzLgorICAgICog4oCiIElmIGEgVlZDIGJpdHN0cmVh bSBpbmNsdWRlcyBWUFMgTkFMIHVuaXQocyksIHRoZSB2YWx1ZSBvZgorICAgICogICBhcnJheV9j b21wbGV0ZW5lc3Mgc2hhbGwgYmUgZXF1YWwgdG8gMSBmb3IgdGhlIGFycmF5IG9mIFZQUyBOQUwg dW5pdHMuCisgICAgKiAgIE90aGVyd2lzZSwgTkFMX3VuaXRfdHlwZSBzaGFsbCBub3QgaW5kaWNh dGUgVlBTIE5BTCB1bml0cy4KKyAgICAqIFdoZW4gdGhlIHZhbHVlIG9mIGFycmF5X2NvbXBsZXRl bmVzcyBpcyBlcXVhbCB0byAxIGZvciBhbiBhcnJheSBvZiBhCisgICAgKiBwYXJ0aWN1bGFyIE5B TF91bml0X3R5cGUgdmFsdWUsIE5BTCB1bml0cyBvZiB0aGF0IE5BTF91bml0X3R5cGUgdmFsdWUK KyAgICAqIGNhbm5vdCBiZSB1cGRhdGVkIHdpdGhvdXQgY2F1c2luZyBhIGRpZmZlcmVudCBzYW1w bGUgZW50cnkgdG8gYmUgdXNlZC4KKyAgICAqIFdoZW4gdGhlIHNhbXBsZSBlbnRyeSBuYW1lIGlz ICd2dmkxJywgdGhlIHZhbHVlIG9mIGFycmF5X2NvbXBsZXRlbmVzcworICAgICogb2YgYXQgbGVh c3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgYXJyYXlzIHNoYWxsIGJlIGVxdWFsIHRvIDA6CisgICAg ICDigKIgVGhlIGFycmF5IG9mIERDSSBOQUwgdW5pdHMsIGlmIHByZXNlbnQuCisgICAgICDigKIg VGhlIGFycmF5IG9mIFZQUyBOQUwgdW5pdHMsIGlmIHByZXNlbnQuCisgICAgICDigKIgVGhlIGFy cmF5IG9mIFNQUyBOQUwgdW5pdHMKKyAgICAgIOKAoiBUaGUgYXJyYXkgb2YgUFBTIE5BTCB1bml0 cy4KKyAgICAqLworICAgIGlmIChuYWxfdHlwZSA9PSBWVkNfVlBTX05VVCB8fCBuYWxfdHlwZSA9 PSBWVkNfU1BTX05VVCB8fAorICAgICAgICBuYWxfdHlwZSA9PSBWVkNfUFBTX05VVCB8fCBuYWxf dHlwZSA9PSBWVkNfRENJX05VVCApCisgICAgICAgIGFycmF5LT5hcnJheV9jb21wbGV0ZW5lc3Mg PSBwc19hcnJheV9jb21wbGV0ZW5lc3M7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCB2dmNjX2FkZF9uYWxfdW5pdCh1aW50OF90ICpuYWxfYnVmLCB1aW50MzJfdCBuYWxfc2l6ZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNv cmQgKnZ2Y2MpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgR2V0Qml0Q29udGV4dCBnYmM7Cisg ICAgdWludDhfdCBuYWxfdHlwZTsKKyAgICB1aW50OF90ICpyYnNwX2J1ZjsKKyAgICB1aW50MzJf dCByYnNwX3NpemU7CisKKyAgICByYnNwX2J1ZiA9IGZmX25hbF91bml0X2V4dHJhY3RfcmJzcChu YWxfYnVmLCBuYWxfc2l6ZSwgJnJic3Bfc2l6ZSwgMik7CisgICAgaWYgKCFyYnNwX2J1Zikgewor ICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0K KworICAgIHJldCA9IGluaXRfZ2V0X2JpdHM4KCZnYmMsIHJic3BfYnVmLCByYnNwX3NpemUpOwor ICAgIGlmIChyZXQgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKworICAgIG5hbF91bml0X3BhcnNl X2hlYWRlcigmZ2JjLCAmbmFsX3R5cGUpOworCisgICAgLyoKKyAgICAgKiBOb3RlOiBvbmx5ICdk ZWNsYXJhdGl2ZScgU0VJIG1lc3NhZ2VzIGFyZSBhbGxvd2VkIGluCisgICAgICogdnZjYy4gUGVy aGFwcyB0aGUgU0VJIHBsYXlsb2FkIHR5cGUgc2hvdWxkIGJlIGNoZWNrZWQKKyAgICAgKiBhbmQg bm9uLWRlY2xhcmF0aXZlIFNFSSBtZXNzYWdlcyBkaXNjYXJkZWQ/CisgICAgICovCisgICAgc3dp dGNoIChuYWxfdHlwZSkgeworICAgIGNhc2UgVlZDX09QSV9OVVQ6CisgICAgY2FzZSBWVkNfVlBT X05VVDoKKyAgICBjYXNlIFZWQ19TUFNfTlVUOgorICAgIGNhc2UgVlZDX1BQU19OVVQ6CisgICAg Y2FzZSBWVkNfUFJFRklYX1NFSV9OVVQ6CisgICAgY2FzZSBWVkNfU1VGRklYX1NFSV9OVVQ6Cisg ICAgICAgIHJldCA9IHZ2Y2NfYXJyYXlfYWRkX25hbF91bml0KG5hbF9idWYsIG5hbF9zaXplLCBu YWxfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNfYXJyYXlf Y29tcGxldGVuZXNzLCB2dmNjKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICBn b3RvIGVuZDsKKyAgICAgICAgZWxzZSBpZiAobmFsX3R5cGUgPT0gVlZDX1ZQU19OVVQpCisgICAg ICAgICAgICByZXQgPSB2dmNjX3BhcnNlX3ZwcygmZ2JjLCB2dmNjKTsKKyAgICAgICAgZWxzZSBp ZiAobmFsX3R5cGUgPT0gVlZDX1NQU19OVVQpCisgICAgICAgICAgICByZXQgPSB2dmNjX3BhcnNl X3NwcygmZ2JjLCB2dmNjKTsKKyAgICAgICAgZWxzZSBpZiAobmFsX3R5cGUgPT0gVlZDX1BQU19O VVQpCisgICAgICAgICAgICByZXQgPSB2dmNjX3BhcnNlX3BwcygmZ2JjLCB2dmNjKTsKKyAgICAg ICAgZWxzZSBpZiAobmFsX3R5cGUgPT0gVlZDX09QSV9OVVQpIHsKKyAgICAgICAgICAgIC8vIG5v dCB5ZXQgc3VwcG9ydGVkCisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAg ICAgICBnb3RvIGVuZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0 ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgIGVu ZDoKKyAgICBhdl9mcmVlKHJic3BfYnVmKTsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMg dm9pZCB2dmNjX2luaXQoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7Cisg ICAgbWVtc2V0KHZ2Y2MsIDAsIHNpemVvZihWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCkp OworICAgIHZ2Y2MtPmxlbmd0aFNpemVNaW51c09uZSA9IDM7ICAgICAgIC8vIDQgYnl0ZXMKKwor ICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvID0gMTsKKworICAgIHZ2Y2Mt PnB0bF9wcmVzZW50X2ZsYWcgPSAxOworfQorCitzdGF0aWMgdm9pZCB2dmNjX2Nsb3NlKFZWQ0Rl Y29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIHVpbnQ4X3QgaTsKKworICAg IGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpKyspIHsKKyAgICAgICAgdnZj Yy0+YXJyYXlbaV0ubnVtX25hbHVzID0gMDsKKyAgICAgICAgYXZfZnJlZXAoJnZ2Y2MtPmFycmF5 W2ldLm5hbF91bml0KTsKKyAgICAgICAgYXZfZnJlZXAoJnZ2Y2MtPmFycmF5W2ldLm5hbF91bml0 X2xlbmd0aCk7CisgICAgfQorCisgICAgdnZjYy0+bnVtX29mX2FycmF5cyA9IDA7CisgICAgYXZf ZnJlZXAoJnZ2Y2MtPmFycmF5KTsKK30KKworc3RhdGljIGludCB2dmNjX3dyaXRlKEFWSU9Db250 ZXh0ICpwYiwgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdWlu dDhfdCBpOworICAgIHVpbnQxNl90IGosIHZwc19jb3VudCA9IDAsIHNwc19jb3VudCA9IDAsIHBw c19jb3VudCA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKyAgICAvKgorICAg ICAqIEl0J3MgdW5jbGVhciBob3cgdG8gcHJvcGVybHkgY29tcHV0ZSB0aGVzZSBmaWVsZHMsIHNv CisgICAgICogbGV0J3MgYWx3YXlzIHNldCB0aGVtIHRvIHZhbHVlcyBtZWFuaW5nICd1bnNwZWNp ZmllZCcuCisgICAgICovCisgICAgdnZjYy0+YXZnX2ZyYW1lX3JhdGUgPSAwOworICAgIHZ2Y2Mt PmNvbnN0YW50X2ZyYW1lX3JhdGUgPSAxOworCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFD RSwKKyAgICAgICAgICAgImxlbmd0aFNpemVNaW51c09uZTogICAgICAgICAgICAgICAgICAlIiBQ Ukl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUpOworICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJwdGxfcHJlc2VudF9mbGFnOiAg ICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsX3By ZXNlbnRfZmxhZyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAg Im9sc19pZHg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwgdnZj Yy0+b2xzX2lkeCk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAg Im51bV9zdWJsYXllcnM6ICAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAg ICAgICAgICB2dmNjLT5udW1fc3VibGF5ZXJzKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RS QUNFLAorICAgICAgICAgICAiY29uc3RhbnRfZnJhbWVfcmF0ZTogICAgICAgICAgICAgICAgICUi IFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPmNvbnN0YW50X2ZyYW1lX3JhdGUpOworICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJjaHJvbWFfZm9ybWF0X2lk YzogICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+Y2hy b21hX2Zvcm1hdF9pZGMpOworCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAg ICAgICAgImJpdF9kZXB0aF9taW51czg6ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4i LAorICAgICAgICAgICB2dmNjLT5iaXRfZGVwdGhfbWludXM4KTsKKyAgICBhdl9sb2coTlVMTCwg QVZfTE9HX1RSQUNFLAorICAgICAgICAgICAibnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbzogICAg ICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29u c3RyYWludF9pbmZvKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAg ICAiZ2VuZXJhbF9wcm9maWxlX2lkYzogICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisg ICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjKTsKKyAgICBhdl9sb2coTlVM TCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAiZ2VuZXJhbF90aWVyX2ZsYWc6ICAgICAgICAg ICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3Rp ZXJfZmxhZyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImdl bmVyYWxfbGV2ZWxfaWRjOiAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAg ICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMpOworICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfVFJBQ0UsCisgICAgICAgICAgICJwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc6ICAg ICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5X2Nv bnN0cmFpbnRfZmxhZyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAg ICAgInB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZzogICAgICAgICAlIiBQUkl1OCAiXG4iLAor ICAgICAgICAgICB2dmNjLT5wdGwucHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnKTsKKyAgICBm b3IgKGkgPSAwOyBpIDwgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm87IGkrKykg eworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAgImdl bmVyYWxfY29uc3RyYWludF9pbmZvWyVkXTogICAgICAgICAgJSIgUFJJdTggIlxuIiwgaSwKKyAg ICAgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1tpXSk7CisgICAg fQorCisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxOyBpKyspIHsK KyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJwdGxf c3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnWyUiIFBSSXU4ICJdOiAgJSIgUFJJdTggIlxuIiwg aSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9m bGFnW2ldKTsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAg ICAgICJzdWJsYXllcl9sZXZlbF9pZGNbJSIgUFJJdTggIl06ICUiIFBSSXU4ICJcbiIsIGksCisg ICAgICAgICAgICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKKyAgICB9CisK KyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAibnVtX3N1Yl9wcm9m aWxlczogICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2Mt PnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+ cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBpKyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJnZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1slIiBQ Ukl1OCAiXTogICAgICAgICAlIiBQUkl4MzIgIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2Mt PnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXSk7CisgICAgfQorCisgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm1heF9waWN0dXJlX3dpZHRoOiAgICAgICAg ICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwKKyAgICAgICAgICAgdnZjYy0+bWF4X3BpY3R1cmVf d2lkdGgpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJtYXhf cGljdHVyZV9oZWlnaHQ6ICAgICAgICAgICAgICAgICAgJSIgUFJJdTE2ICJcbiIsCisgICAgICAg ICAgIHZ2Y2MtPm1heF9waWN0dXJlX2hlaWdodCk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19U UkFDRSwKKyAgICAgICAgICAgImF2Z19mcmFtZV9yYXRlOiAgICAgICAgICAgICAgICAgICAgICAl IiBQUkl1MTYgIlxuIiwKKyAgICAgICAgICAgdnZjYy0+YXZnX2ZyYW1lX3JhdGUpOworCisgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm51bV9vZl9hcnJheXM6ICAg ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5udW1f b2ZfYXJyYXlzKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsr KSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAi YXJyYXlfY29tcGxldGVuZXNzWyUiIFBSSXU4ICJdOiAgICAgICAgICAgICAgICUiIFBSSXU4ICJc biIsIGksCisgICAgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5hcnJheV9jb21wbGV0ZW5lc3Mp OworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAgIk5B TF91bml0X3R5cGVbJSIgUFJJdTggIl06ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4i LCBpLAorICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSk7CisgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAibnVtX25hbHVz WyUiIFBSSXU4ICJdOiAgICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLCBpLAor ICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzKTsKKyAgICAgICAgZm9yIChq ID0gMDsgaiA8IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsgaisrKQorICAgICAgICAgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICAgICAibmFsX3VuaXRfbGVu Z3RoWyUiIFBSSXU4ICJdWyUiIFBSSXUxNiAiXTogICAgICAgICAgICAgICAlIgorICAgICAgICAg ICAgICAgICAgIFBSSXUxNiAiXG4iLCBpLCBqLCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9sZW5n dGhbal0pOworICAgIH0KKworICAgIC8qCisgICAgICogV2UgbmVlZCBhdCBsZWFzdCBvbmUgb2Yg ZWFjaDogVlBTIGFuZCBTUFMuCisgICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51 bV9vZl9hcnJheXM7IGkrKykKKyAgICAgICAgc3dpdGNoICh2dmNjLT5hcnJheVtpXS5OQUxfdW5p dF90eXBlKSB7CisgICAgICAgIGNhc2UgVlZDX1ZQU19OVVQ6CisgICAgICAgICAgICB2cHNfY291 bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGNhc2UgVlZDX1NQU19OVVQ6CisgICAgICAgICAgICBzcHNfY291bnQgKz0gdnZjYy0+YXJy YXlbaV0ubnVtX25hbHVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVlZDX1BQ U19OVVQ6CisgICAgICAgICAgICBwcHNfY291bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVz OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorCisgICAgaWYgKHZwc19jb3VudCA+IFZWQ19NQVhfVlBTX0NPVU5UKQor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoIXNwc19jb3VudCB8 fCBzcHNfY291bnQgPiBWVkNfTUFYX1NQU19DT1VOVCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7CisgICAgaWYgKCFwcHNfY291bnQgfHwgcHBzX2NvdW50ID4gVlZDX01BWF9Q UFNfQ09VTlQpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgLyog Yml0KDUpIHJlc2VydmVkID0g4oCYMTExMTHigJliOworICAgICAgIHVuc2lnbmVkIGludCAoMikg TGVuZ3RoU2l6ZU1pbnVzT25lCisgICAgICAgdW5zaWduZWQgaW50ICgxKSBwdGxfcHJlc2VudF9m bGFnICovCisgICAgYXZpb193OChwYiwgdnZjYy0+bGVuZ3RoU2l6ZU1pbnVzT25lIDw8IDEgfCB2 dmNjLT5wdGxfcHJlc2VudF9mbGFnIHwgMHhmOCk7CisKKyAgICBpZiAodnZjYy0+cHRsX3ByZXNl bnRfZmxhZykgeworICAgICAgICAvKgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoOSkgb2xzX2lk eDsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDMpIG51bV9zdWJsYXllcnM7CisgICAgICAgICAq IHVuc2lnbmVkIGludCgyKSBjb25zdGFudF9mcmFtZV9yYXRlOworICAgICAgICAgKiB1bnNpZ25l ZCBpbnQoMikgY2hyb21hX2Zvcm1hdF9pZGM7ICAgICAqLworICAgICAgICBhdmlvX3diMTYocGIs CisgICAgICAgICAgICAgICAgICB2dmNjLT5vbHNfaWR4IDw8IDcgfCB2dmNjLT5udW1fc3VibGF5 ZXJzIDw8IDQgfCB2dmNjLT4KKyAgICAgICAgICAgICAgICAgIGNvbnN0YW50X2ZyYW1lX3JhdGUg PDwgMiB8IHZ2Y2MtPmNocm9tYV9mb3JtYXRfaWRjKTsKKworICAgICAgICAvKiB1bnNpZ25lZCBp bnQoMykgYml0X2RlcHRoX21pbnVzODsKKyAgICAgICAgICAgYml0KDUpIHJlc2VydmVkID0g4oCY MTExMTHigJliOyAqLworICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5iaXRfZGVwdGhfbWludXM4 IDw8IDUgfCAweDFmKTsKKworICAgICAgICAvL1ZWQ1BUTFJlY29yZAorCisgICAgICAgIC8qIGJp dCgyKSByZXNlcnZlZCA9IOKAmDAw4oCZYjsKKyAgICAgICAgICAgdW5zaWduZWQgaW50ICg2KSBu dW1fYnl0ZXNfY29uc3RyYWludF9pbmZvICovCisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0 bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvICYgMHgzZik7CisKKyAgICAgICAgLyogdW5zaWdu ZWQgaW50ICg3KSBnZW5lcmFsX3Byb2ZpbGVfaWRjCisgICAgICAgICAgIHVuc2lnbmVkIGludCAo MSkgZ2VuZXJhbF90aWVyX2ZsYWcgKi8KKyAgICAgICAgYXZpb193OChwYiwKKyAgICAgICAgICAg ICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYyA8PCAxIHwgdnZjYy0+cHRsLmdlbmVy YWxfdGllcl9mbGFnKTsKKworICAgICAgICAvKiB1bnNpZ25lZCBpbnQgKDgpIGdlbmVyYWxfbGV2 ZWxfaWRjICovCisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lk Yyk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdW5zaWduZWQgaW50ICgxKSBwdGxfZnJhbWVf b25seV9jb25zdHJhaW50X2ZsYWcKKyAgICAgICAgICogdW5zaWduZWQgaW50ICgxKSBwdGxfbXVs dGlsYXllcl9lbmFibGVkX2ZsYWcKKyAgICAgICAgICogdW5zaWduZWQgaW50ICg4Km51bV9ieXRl c19jb25zdHJhaW50X2luZm8gLTIpIGdlbmVyYWxfY29uc3RyYWludF9pbmZvICovCisgICAgICAg IGJ1ZiA9CisgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSBtYWxsb2Moc2l6ZW9mKHVuc2ln bmVkIGNoYXIpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmNjLT5w dGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyk7CisgICAgICAgICpidWYgPSB2dmNjLT5wdGwu cHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnIDw8IHZ2Y2MtPnB0bC4KKyAgICAgICAgICAg IG51bV9ieXRlc19jb25zdHJhaW50X2luZm8gKiA4IC0gMSB8IHZ2Y2MtPnB0bC4KKyAgICAgICAg ICAgIHB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZyA8PCB2dmNjLT5wdGwubnVtX2J5dGVzX2Nv bnN0cmFpbnRfaW5mbyAqCisgICAgICAgICAgICA4IC0gMiB8ICp2dmNjLT5wdGwuZ2VuZXJhbF9j b25zdHJhaW50X2luZm8gPj4gMjsKKyAgICAgICAgYXZpb193cml0ZShwYiwgYnVmLCB2dmNjLT5w dGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyk7CisgICAgICAgIGZyZWUoYnVmKTsKKworICAg ICAgICBpZiAodnZjYy0+bnVtX3N1YmxheWVycyA+IDEpIHsKKyAgICAgICAgICAgIHVpbnQ4X3Qg cHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ3MgPSAwOworICAgICAgICAgICAgZm9yIChp bnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAyOyBpID49IDA7IGktLSkgeworICAgICAgICAg ICAgICAgIHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdzID0KKyAgICAgICAgICAgICAg ICAgICAgKHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdzIDw8IDEgfCB2dmNjLT5wdGwu CisgICAgICAgICAgICAgICAgICAgICBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ld KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF2aW9fdzgocGIsIHB0bF9zdWJsYXllcl9s ZXZlbF9wcmVzZW50X2ZsYWdzKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSB2 dmNjLT5udW1fc3VibGF5ZXJzIC0gMjsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlmICh2 dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSkKKyAgICAgICAgICAg ICAgICBhdmlvX3c4KHBiLCB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKKyAgICAg ICAgfQorCisgICAgICAgIC8qIHVuc2lnbmVkIGludCg4KSBudW1fc3ViX3Byb2ZpbGVzOyAqLwor ICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpOworCisg ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVz OyBqKyspIHsKKyAgICAgICAgICAgIC8qIHVuc2lnbmVkIGludCgzMikgZ2VuZXJhbF9zdWJfcHJv ZmlsZV9pZGNbal07ICovCisgICAgICAgICAgICBhdmlvX3diMzIocGIsIHZ2Y2MtPnB0bC5nZW5l cmFsX3N1Yl9wcm9maWxlX2lkY1tqXSk7CisgICAgICAgIH0KKworICAgICAgICAvL0VuZCBvZiBW dmNQVExSZWNvcmQKKworICAgICAgICAvKgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMTYpIG1h eF9waWN0dXJlX3dpZHRoOyovCisgICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+bWF4X3BpY3R1 cmVfd2lkdGgpOworCisgICAgICAgIC8qCisgICAgICAgICAqIHVuc2lnbmVkIGludCgxNikgbWF4 X3BpY3R1cmVfaGVpZ2h0OyovCisgICAgICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+bWF4X3BpY3R1 cmVfaGVpZ2h0KTsKKworICAgICAgICAvKgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMTYpIGF2 Z19mcmFtZV9yYXRlOyAqLworICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmF2Z19mcmFtZV9y YXRlKTsKKyAgICB9CisKKyAgICAvKiB1bnNpZ25lZCBpbnQoOCkgbnVtX29mX2FycmF5czsgKi8K KyAgICBhdmlvX3c4KHBiLCB2dmNjLT5udW1fb2ZfYXJyYXlzKTsKKworICAgIGZvciAoaSA9IDA7 IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpKyspIHsKKyAgICAgICAgLyoKKyAgICAgICAgICog Yml0KDEpIGFycmF5X2NvbXBsZXRlbmVzczsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDIpIHJl c2VydmVkID0gMDsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDUpIE5BTF91bml0X3R5cGU7Cisg ICAgICAgICAqLworICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5hcnJheVtpXS5hcnJheV9jb21w bGV0ZW5lc3MgPDwgNyB8CisgICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRf dHlwZSAmIDB4MWYpOworICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMTYpIG51bV9uYWx1czsgKi8K KyAgICAgICAgaWYgKHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUgIT0gVlZDX0RDSV9OVVQg JiYKKyAgICAgICAgICAgIHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUgIT0gVlZDX09QSV9O VVQpCisgICAgICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1cyk7 CisgICAgICAgIGZvciAoaiA9IDA7IGogPCB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7IGorKykg eworICAgICAgICAgICAgLyogdW5zaWduZWQgaW50KDE2KSBuYWxfdW5pdF9sZW5ndGg7ICovCisg ICAgICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0X2xlbmd0aFtq XSk7CisKKyAgICAgICAgICAgIC8qIGJpdCg4Km5hbF91bml0X2xlbmd0aCkgbmFsX3VuaXQ7ICov CisgICAgICAgICAgICBhdmlvX3dyaXRlKHBiLCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdFtqXSwK KyAgICAgICAgICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoW2pd KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgZmZfdnZjX2Fu bmV4YjJtcDQoQVZJT0NvbnRleHQgKnBiLCBjb25zdCB1aW50OF90ICpidWZfaW4sCisgICAgICAg ICAgICAgICAgICAgICAgaW50IHNpemUsIGludCBmaWx0ZXJfcHMsIGludCAqcHNfY291bnQpCit7 CisgICAgaW50IG51bV9wcyA9IDAsIHJldCA9IDA7CisgICAgdWludDhfdCAqYnVmLCAqZW5kLCAq c3RhcnQgPSBOVUxMOworCisgICAgaWYgKCFmaWx0ZXJfcHMpIHsKKyAgICAgICAgcmV0ID0gZmZf YXZjX3BhcnNlX25hbF91bml0cyhwYiwgYnVmX2luLCBzaXplKTsKKyAgICAgICAgZ290byBlbmQ7 CisgICAgfQorCisgICAgcmV0ID0gZmZfYXZjX3BhcnNlX25hbF91bml0c19idWYoYnVmX2luLCAm c3RhcnQsICZzaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisKKyAg ICByZXQgPSAwOworICAgIGJ1ZiA9IHN0YXJ0OworICAgIGVuZCA9IHN0YXJ0ICsgc2l6ZTsKKwor ICAgIHdoaWxlIChlbmQgLSBidWYgPiA0KSB7CisgICAgICAgIHVpbnQzMl90IGxlbiA9IEZGTUlO KEFWX1JCMzIoYnVmKSwgZW5kIC0gYnVmIC0gNCk7CisgICAgICAgIHVpbnQ4X3QgdHlwZSA9IChi dWZbNV0gPj4gMyk7CisKKyAgICAgICAgYnVmICs9IDQ7CisKKyAgICAgICAgc3dpdGNoICh0eXBl KSB7CisgICAgICAgIGNhc2UgVlZDX1ZQU19OVVQ6CisgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6 CisgICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6CisgICAgICAgICAgICBudW1fcHMrKzsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ICs9IDQgKyBs ZW47CisgICAgICAgICAgICBhdmlvX3diMzIocGIsIGxlbik7CisgICAgICAgICAgICBhdmlvX3dy aXRlKHBiLCBidWYsIGxlbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg ICAgIGJ1ZiArPSBsZW47CisgICAgfQorCisgIGVuZDoKKyAgICBhdl9mcmVlKHN0YXJ0KTsKKyAg ICBpZiAocHNfY291bnQpCisgICAgICAgICpwc19jb3VudCA9IG51bV9wczsKKyAgICByZXR1cm4g cmV0OworfQorCitpbnQgZmZfdnZjX2FubmV4YjJtcDRfYnVmKGNvbnN0IHVpbnQ4X3QgKmJ1Zl9p biwgdWludDhfdCAqKmJ1Zl9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc2l6 ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19jb3VudCkKK3sKKyAgICBBVklPQ29udGV4dCAqcGI7 CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGF2aW9fb3Blbl9keW5fYnVmKCZwYik7CisgICAg aWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXQgPSBmZl92dmNfYW5u ZXhiMm1wNChwYiwgYnVmX2luLCAqc2l6ZSwgZmlsdGVyX3BzLCBwc19jb3VudCk7CisgICAgaWYg KHJldCA8IDApIHsKKyAgICAgICAgZmZpb19mcmVlX2R5bl9idWYoJnBiKTsKKyAgICAgICAgcmV0 dXJuIHJldDsKKyAgICB9CisKKyAgICAqc2l6ZSA9IGF2aW9fY2xvc2VfZHluX2J1ZihwYiwgYnVm X291dCk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX2lzb21fd3JpdGVfdnZjYyhBVklP Q29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAg IGludCBzaXplLCBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzKQoreworICAgIFZWQ0RlY29kZXJD b25maWd1cmF0aW9uUmVjb3JkIHZ2Y2M7CisgICAgdWludDhfdCAqYnVmLCAqZW5kLCAqc3RhcnQ7 CisgICAgaW50IHJldDsKKworICAgIGlmIChzaXplIDwgNikgeworICAgICAgICAvKiBXZSBjYW4n dCB3cml0ZSBhIHZhbGlkIHZ2Y2MgZnJvbSB0aGUgcHJvdmlkZWQgZGF0YSAqLworICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9IGVsc2UgaWYgKCgqZGF0YSAmIDB4Zjgp ID09IDB4ZjgpIHsKKyAgICAgICAgLyogRGF0YSBpcyBhbHJlYWR5IHZ2Y2MtZm9ybWF0dGVkICov CisgICAgICAgIGF2aW9fd3JpdGUocGIsIGRhdGEsIHNpemUpOworICAgICAgICByZXR1cm4gMDsK KyAgICB9IGVsc2UgaWYgKCEoQVZfUkIyNChkYXRhKSA9PSAxIHx8IEFWX1JCMzIoZGF0YSkgPT0g MSkpIHsKKyAgICAgICAgLyogTm90IGEgdmFsaWQgQW5uZXggQiBzdGFydCBjb2RlIHByZWZpeCAq LworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICByZXQg PSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzX2J1ZihkYXRhLCAmc3RhcnQsICZzaXplKTsKKyAgICBp ZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHZ2Y2NfaW5pdCgmdnZjYyk7 CisKKyAgICBidWYgPSBzdGFydDsKKyAgICBlbmQgPSBzdGFydCArIHNpemU7CisKKyAgICB3aGls ZSAoZW5kIC0gYnVmID4gNCkgeworICAgICAgICB1aW50MzJfdCBsZW4gPSBGRk1JTihBVl9SQjMy KGJ1ZiksIGVuZCAtIGJ1ZiAtIDQpOworICAgICAgICB1aW50OF90IHR5cGUgPSAoYnVmWzVdID4+ IDMpOworCisgICAgICAgIGJ1ZiArPSA0OworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg ICAgICBjYXNlIFZWQ19PUElfTlVUOgorICAgICAgICBjYXNlIFZWQ19WUFNfTlVUOgorICAgICAg ICBjYXNlIFZWQ19TUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19QUFNfTlVUOgorICAgICAgICBj YXNlIFZWQ19QUkVGSVhfU0VJX05VVDoKKyAgICAgICAgY2FzZSBWVkNfU1VGRklYX1NFSV9OVVQ6 CisgICAgICAgICAgICByZXQgPSB2dmNjX2FkZF9uYWxfdW5pdChidWYsIGxlbiwgcHNfYXJyYXlf Y29tcGxldGVuZXNzLCAmdnZjYyk7CisgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAg ICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBidWYgKz0gbGVuOworICAg IH0KKworICAgIHJldCA9IHZ2Y2Nfd3JpdGUocGIsICZ2dmNjKTsKKworICBlbmQ6CisgICAgdnZj Y19jbG9zZSgmdnZjYyk7CisgICAgYXZfZnJlZShzdGFydCk7CisgICAgcmV0dXJuIHJldDsKK30K ZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Z2Yy5oIGIvbGliYXZmb3JtYXQvdnZjLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTFjNzAwNTQwZgotLS0gL2Rldi9udWxs CisrKyBiL2xpYmF2Zm9ybWF0L3Z2Yy5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBILjI2NiAv IFZWQyBoZWxwZXIgZnVuY3Rpb25zIGZvciBtdXhlcnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogaW50ZXJuYWwgaGVhZGVyIGZvciBI LjI2Ni9WVkMgKGRlKW11eGVyIHV0aWxpdGllcworICovCisKKyNpZm5kZWYgQVZGT1JNQVRfVlZD X0gKKyNkZWZpbmUgQVZGT1JNQVRfVlZDX0gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1 ZGUgImF2aW8uaCIKKworLyoqCisgKiBXcml0ZXMgQW5uZXggQiBmb3JtYXR0ZWQgSC4yNjYvVlZD IE5BTCB1bml0cyB0byB0aGUgcHJvdmlkZWQgQVZJT0NvbnRleHQuCisgKgorICogVGhlIE5BTCB1 bml0cyBhcmUgY29udmVydGVkIHRvIGFuIE1QNC1jb21wYXRpYmxlIGZvcm1hdCAoc3RhcnQgY29k ZSBwcmVmaXhlcworICogYXJlIHJlcGxhY2VkIGJ5IDQtYnl0ZSBzaXplIGZpZWxkcywgYXMgcGVy IElTTy9JRUMgMTQ0OTYtMTUpLgorICoKKyAqIElmIGZpbHRlcl9wcyBpcyBub24temVybywgYW55 IFZWQyBwYXJhbWV0ZXIgc2V0cyBmb3VuZCBpbiB0aGUgaW5wdXQgd2lsbCBiZQorICogZGlzY2Fy ZGVkLCBhbmQgKnBzX2NvdW50IHdpbGwgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVk IFBTIE5BTCB1bml0cy4KKyAqCisgKiBAcGFyYW0gcGIgYWRkcmVzcyBvZiB0aGUgQVZJT0NvbnRl eHQgd2hlcmUgdGhlIGRhdGEgc2hhbGwgYmUgd3JpdHRlbgorICogQHBhcmFtIGJ1Zl9pbiBhZGRy ZXNzIG9mIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogQHBhcmFtIHNpemUg c2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBpbnB1dCBidWZmZXIKKyAqIEBwYXJhbSBmaWx0ZXJfcHMg d2hldGhlciB0byB3cml0ZSBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyB0byB0aGUgb3V0cHV0ICgw KQorICogICAgICAgIG9yIHRvIGRpc2NhcmQgdGhlbSAobm9uLXplcm8pCisgKiBAcGFyYW0gcHNf Y291bnQgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgd2hlcmUgdGhlIG51bWJlciBvZiBkaXNjYXJk ZWQKKyAqICAgICAgICBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyBzaGFsbCBiZSB3cml0dGVuLCBt YXkgYmUgTlVMTAorICogQHJldHVybiB0aGUgYW1vdW50IChpbiBieXRlcykgb2YgZGF0YSB3cml0 dGVuIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZQorICogICAgICAgICB2YWx1ZSBjb3Jy ZXNwb25kaW5nIHRvIGFuIEFWRVJST1IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqLworaW50 IGZmX3Z2Y19hbm5leGIybXA0KEFWSU9Db250ZXh0ICpwYiwgY29uc3QgdWludDhfdCAqYnVmX2lu LAorICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBz X2NvdW50KTsKKworLyoqCisgKiBXcml0ZXMgQW5uZXggQiBmb3JtYXR0ZWQgSC4yNjYvVlZDIE5B TCB1bml0cyB0byBhIGRhdGEgYnVmZmVyLgorICoKKyAqIFRoZSBOQUwgdW5pdHMgYXJlIGNvbnZl cnRlZCB0byBhbiBNUDQtY29tcGF0aWJsZSBmb3JtYXQgKHN0YXJ0IGNvZGUgcHJlZml4ZXMKKyAq IGFyZSByZXBsYWNlZCBieSA0LWJ5dGUgc2l6ZSBmaWVsZHMsIGFzIHBlciBJU08vSUVDIDE0NDk2 LTE1KS4KKyAqCisgKiBJZiBmaWx0ZXJfcHMgaXMgbm9uLXplcm8sIGFueSBWVkMgcGFyYW1ldGVy IHNldHMgZm91bmQgaW4gdGhlIGlucHV0IHdpbGwgYmUKKyAqIGRpc2NhcmRlZCwgYW5kICpwc19j b3VudCB3aWxsIGJlIHNldCB0byB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZCBQUyBOQUwgdW5pdHMu CisgKgorICogT24gc3VjY2VzcywgKnNpemUgaG9sZHMgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0 aGUgb3V0cHV0IGRhdGEgYnVmZmVyLgorICoKKyAqIEBwYXJhbSBidWZfaW4gYWRkcmVzcyBvZiB0 aGUgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIEBwYXJhbSBzaXplIGFkZHJlc3Mg b2YgdGhlIHZhcmlhYmxlIGhvbGRpbmcgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgaW5wdXQK KyAqICAgICAgICBidWZmZXIgKG9uIGlucHV0KSBhbmQgb2YgdGhlIG91dHB1dCBidWZmZXIgKG9u IHN1Y2Nlc3MpCisgKiBAcGFyYW0gYnVmX291dCBvbiBzdWNjZXNzLCBhZGRyZXNzIG9mIHRoZSB2 YXJpYWJsZSBob2xkaW5nIHRoZSBhZGRyZXNzIG9mCisgKiAgICAgICAgdGhlIG91dHB1dCBidWZm ZXIKKyAqIEBwYXJhbSBmaWx0ZXJfcHMgd2hldGhlciB0byB3cml0ZSBwYXJhbWV0ZXIgc2V0IE5B TCB1bml0cyB0byB0aGUgb3V0cHV0ICgwKQorICogICAgICAgIG9yIHRvIGRpc2NhcmQgdGhlbSAo bm9uLXplcm8pCisgKiBAcGFyYW0gcHNfY291bnQgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgd2hl cmUgdGhlIG51bWJlciBvZiBkaXNjYXJkZWQKKyAqICAgICAgICBwYXJhbWV0ZXIgc2V0IE5BTCB1 bml0cyBzaGFsbCBiZSB3cml0dGVuLCBtYXkgYmUgTlVMTAorICogQHJldHVybiAwIGluIGNhc2Ug b2Ygc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IK KyAqICAgICAgICAgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqIEBub3RlICpidWZfb3V0IHdp bGwgYmUgdHJlYXRlZCBhcyB1bmluaXRpYWxpemVkIG9uIGlucHV0IGFuZCB3b24ndCBiZSBmcmVl ZC4KKyAqLworaW50IGZmX3Z2Y19hbm5leGIybXA0X2J1Zihjb25zdCB1aW50OF90ICpidWZfaW4s IHVpbnQ4X3QgKipidWZfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNpemUs IGludCBmaWx0ZXJfcHMsIGludCAqcHNfY291bnQpOworCisvKioKKyAqIFdyaXRlcyBILjI2Ni9W VkMgZXh0cmFkYXRhIChwYXJhbWV0ZXIgc2V0cywgZGVjbGFyYXRpdmUgU0VJIE5BTCB1bml0cykg dG8KKyAqIHRoZSBwcm92aWRlZCBBVklPQ29udGV4dC4KKyAqCisgKiBJZiB0aGUgZXh0cmFkYXRh IGlzIEFubmV4IEIgZm9ybWF0LCBpdCBnZXRzIGNvbnZlcnRlZCB0byB2dmNDIGZvcm1hdCBiZWZv cmUKKyAqIHdyaXRpbmcuCisgKgorICogQHBhcmFtIHBiIGFkZHJlc3Mgb2YgdGhlIEFWSU9Db250 ZXh0IHdoZXJlIHRoZSB2dmNDIHNoYWxsIGJlIHdyaXR0ZW4KKyAqIEBwYXJhbSBkYXRhIGFkZHJl c3Mgb2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBkYXRhIG5lZWRlZCB0byB3cml0ZSB0aGUgdnZj QworICogQHBhcmFtIHNpemUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIGJ1ZmZlcgorICog QHBhcmFtIHBzX2FycmF5X2NvbXBsZXRlbmVzcyB3aGV0aGVyIGFsbCBwYXJhbWV0ZXIgc2V0cyBh cmUgaW4gdGhlIHZ2Y0MgKDEpCisgKiAgICAgICAgb3IgdGhlcmUgbWF5IGJlIGFkZGl0aW9uYWwg cGFyYW1ldGVyIHNldHMgaW4gdGhlIGJpdHN0cmVhbSAoMCkKKyAqIEByZXR1cm4gPj0wIGluIGNh c2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIEFWRVJS T1IKKyAqICAgICAgICAgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqLworaW50IGZmX2lzb21f d3JpdGVfdnZjYyhBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCisgICAgICAg ICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzKTsKKwor I2VuZGlmIC8qIEFWRk9STUFUX1ZWQ19IICovCi0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QK ZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGlu Zm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1h aWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2Ny aWJlIi4K