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 3381A48E60 for ; Mon, 29 Jan 2024 14:55:23 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3AF8368D20C; Mon, 29 Jan 2024 16:55:10 +0200 (EET) Received: from APC01-TYZ-obe.outbound.protection.outlook.com (mail-tyzapc01olkn2108.outbound.protection.outlook.com [40.92.107.108]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B3E6468D206 for ; Mon, 29 Jan 2024 16:55:03 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X+q0ETFT2fvkA/1L41Y/8jyBs2q9S2ViFuikdjatRRQgjLGR96+7PTztYtQnxHHO4eAGGyxk7PnwfnGk9QVnRX8AZOhtwyBLDHPBu8J2kHO0w3LAQSOxY0d6W5aOYF4iEd2cHAGaXvrME6fjHxp+UDumpdP1w203TF3t7gEoSYp4M3eTxu8YjP1H4xfu7KZ+LhAMGdKjJCj6Y9psLaeoLPVM22pUkFeCdPnAxM8Wi3uLZVYSLegUYrno1rh4A/L1S14aHTptW1AwPDaglj+axiSwKB6rk78cqCurikjXIM/KxvMtuJNH8USkmdaZP7jxLfTetjG39MtzRNLE2sOD8g== 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=4QZQll0UwbbN4YMul52Jo/+Pv9BiT1G+pk4kBCJH4Eg=; b=L6yrHTBfLl99uSLwVYbr/Fzv4ZBO6ENTTZQ2f58OolSdqphVajIrlnaA8beULuuESlyJCStfx1nq9/Spn2lcsoUaCVkcCH69kE4quddX4ptQ/Pw8KpqUW8cSiA/ZvpGCu4tLjfIaoG+bygXn5lGe7gIF+Hjz9pMhe4I8chUa0YLdbHByDORoZ7KC1v4itlP4oCNoU5I/XqABltWS4EG2rUL8HBmIDnZw3yhXQKFBeWLgF+p4TntdXv5DYODuxBSJO9XJyyYP4ADplEL8zTw8lY/Qfvo/RAAs04Jt3FKl8GlInekmNIckv6m6F7QMad1i2FAt7xr6Vtx0q7JuphG7yw== 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=4QZQll0UwbbN4YMul52Jo/+Pv9BiT1G+pk4kBCJH4Eg=; b=BUd9QIrnmEEBR8mzX9jaJ3NChtCqlqbrC0Ykm6Q9WsQore371HjOca5+JD6CIWk0SDbhSor4IcyHSc0I/a4brHy2U/e1YZsVMw0yTZS4I8cMa2Dyi+ZWODt2C4xwhQeHAuNvmDKfiPDNKAN17M0Q8ZFGiYfTZ3IeqSj5EdkHozV9buWrPMikeQ3ONoyd4yn3hmYBw3Ca6W84vOYyJks1VM+I6Vwi92oI4EnaM+iZgQR0xl1vtQ5VlXHRQfEvV7wbzSan2Mi4Ze5i9DctXkrSs/3GxIenneNm/kBE9ljmker1+5Zj0ATbotyhvSTyE1a13nSypBEcBFXJ4B20h3avPw== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by SEZPR06MB6383.apcprd06.prod.outlook.com (2603:1096:101:12c::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.32; Mon, 29 Jan 2024 14:54:51 +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.029; Mon, 29 Jan 2024 14:54:51 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Jan 2024 22:54:27 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240129145432.9053-1-nuomi2021@gmail.com> References: <20240129145432.9053-1-nuomi2021@gmail.com> X-TMN: [/NkMSP4Dxi0nL6HrfyAwO3XCzSzt/IrO] X-ClientProxiedBy: TYCP286CA0232.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c7::18) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240129145432.9053-2-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|SEZPR06MB6383:EE_ X-MS-Office365-Filtering-Correlation-Id: 3cd37e6b-b04b-40e1-b841-08dc20da3f1a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KRXJAU2ImZH1c5PPIdg0O8drZBokBlfR8rgtdv9YUGC/ZERy9cG1TvF2orzxFfbiNZDsLHYEtf+faeP9SdqVtiPO3mrd8TXCtWy3e/1db12zYC5vFN7tdZdshqEyVczBqY5c6LN5dlBaZwaLVaXyIAVHxlGveOscePRc2ge35Sr5aEdz3P+KTY3xCwrK3cJeLWlEus+LBVPa+pAmu/omTcIy4Y4Bgk0GOKcHH43KTil3zoPTLTnqlvRAnWeep458yHhHfx1NoRd9TCe9h+f84qtA5PWVboi8OJV/5Prbw4Kd+oxtWJwkXatWHcaaBlZf/FsJv3ihz9kCW7MXVGhCx0T1fA+UE/M4FXL3cim2O/d87coIeKdrGUQMSkk9Qb4EqTJroPG47kdgK7GhP1hIk/ic+OEXjPK77lkrfBJlZUW8h1sb9Dmd/4LfP3jj/9zAOG8m3ZptIsAfkbvdC9B2WILCSrrbMDiSZSI+REfSZ7ymNzEPO6rBIC89eYmr+JHVXkWAzTpxOahIn2OZAA6xBti+0WpyRuOVwV4h+wDwJMeOyrvV5YWpmA4DI6r2CkNAn/gwpYkFaYSB3DoXYPFtg9q6niwNB5vvrR9JD8GiAyYeLuDkQfmW3nTXx12A6IfO X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UWFKNzFKNHRtL3RoUkFDWmN5eVJaZitJR2YrckNrNmtyK0J0czFkSE81NjB2?= =?utf-8?B?Y1k0OW1YY3RLaHE5V0d4OXoyWGZEdy9RVjE2THYwUjVuaWxiaXZCQ0F5ZklR?= =?utf-8?B?YWJSTmdrMzg3OFR0VXphMWZYTDRxSjF3Umt5Q01rVWFsNy9YZnBMcGFkL1J3?= =?utf-8?B?R2tHdEV2UEo1NkUrcTg0SlZqV2N3dHlJWnd2T3FSZFdjVFNFNDRURUJPQWls?= =?utf-8?B?d0FXSkY1RjVXMy9iUnJaajR4eW5RRCtjeU94RFIrb1c1enhyMXVybUFLRzBM?= =?utf-8?B?anZLOTNBZnY1MlpTU0lXZFFVek41RGlZMzYvaVNBaFYxWWJKbHFVdmpkMnFP?= =?utf-8?B?d1hDM2FZcUFYTTZPMXhvTXJjK0doWUovSC9nOG84bzhuaWhDc0g2S2VpS081?= =?utf-8?B?SGxYVWcvb1VJVE9ZaE5FRkxxTDNBS3V6d295Zytwalh1UVdUc1N3Q2h2OXo2?= =?utf-8?B?cjhMYnRjRTBGSDdWWlNrb3lEV3krOWpYeGRXc0N0Wk8xcUpvb0l3VG9TbCtT?= =?utf-8?B?akx5RFkxZkoyQjVJcTlvUUtLQ3FKZmhpZkF2M0pxMUR3NFdNTk44M01HRHRG?= =?utf-8?B?SDQxZFhOR1ZoOGV5cjQ5UGwzaDBRZVFLZVV4UkFDMUZBdHArOUVvTkdmRmNh?= =?utf-8?B?QjZ5WkpTNTdXdVVjWFFlaXZYQURUTEQyUSt0UG9SRzUwNFVvaWxmQkU0OHh0?= =?utf-8?B?N0w5eXR3R3BLU0s5d3BMczBSN294d1ZPY3pCTXBxdHRmZEprN09ldkNMT3Rk?= =?utf-8?B?Z3VXTG1odSttcHErbllKeVlYeHg0VXY4NmpmQlJzSkFNcC9COTFlY3R1ZXlC?= =?utf-8?B?QzBMOVdsSVNDL0NRNU5jSDM2UGlrM0dhR0l2YzY3ZXhyaW5kWXNpeTNXV1M5?= =?utf-8?B?SVg0THJsbG4zeVJBUU41RTdJMFZydUlSMXhyQlVEaHp4a0s1TzdHZmU1eU1V?= =?utf-8?B?UkxSVFFOSTdBOHBoNXVKc2JSaFlTUlB4VzN0aHQwYWZTcXVOd0xQVzRKYTVn?= =?utf-8?B?VUhYKzhpNXM4V2lTM1docEY3c3FEbVpsb0xET0pxcTdLSzRGait3K1ZtVzNS?= =?utf-8?B?MXZzbWQyUHY4TnJkcktZanRBTFM2L2tkckkzVFNsZWdxT00xOHExcWpYWFJO?= =?utf-8?B?TVBPeHc5Tlhuei8xOEpUbXVHbUxwNml0U3JETDNlZ05IM0l6OVE4R3M0MVFp?= =?utf-8?B?QzlLRTliUmtkcHNJOVQwL2tOWmRMYldQS2d6bnF5V0lXWjlEZzlXaU5Wdkcy?= =?utf-8?B?MGdiWHdFQ29EWVJwWWZQMzlZVlNZd21QTWZwWGxPMFZLSmc3WkdGVlNTVXRC?= =?utf-8?B?NVdTZHM5S3VNbGphbGRCWlFBeGViSzdjdnNtV2hTKzNGYmF6OTFqWjRVTDVU?= =?utf-8?B?cVIySEZkZVRBd2ZoR0FkMFBUbXJDMlFzbXQrcVM5azduanpFTFJDQ3d5LzVq?= =?utf-8?B?Z0dKRFBsWTRMc2gzR20wTFVMZTRxVmtEdko1L2JrWTNCV3VLRkJoa1hQckIr?= =?utf-8?B?R2dYbit1TzJKR1lxbDI5L2pxM21VSlZvckZrSklVYUgwVWZFbXpZeVBUNTZz?= =?utf-8?B?OEFndEx5RUZ3eGZabThTOEhhVmhiSkJmK00vWVIyVU91SEhnVnd1emgxd3ND?= =?utf-8?B?TWoyWGlEalArZENNYXBNRjlPOVpTR1Rab0Q2SndTRFdoaTdRa014dTVjanEw?= =?utf-8?Q?K8lylGHANlfQtFRxoYhn?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3cd37e6b-b04b-40e1-b841-08dc20da3f1a X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jan 2024 14:54:51.7650 (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: SEZPR06MB6383 Subject: [FFmpeg-devel] [PATCH v4 1/6] avformat/mp4: 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 IHR5cGUgaW4KSVNPL0lFQyAxNDQ5Ni0xNToyMDIxLgoKVGVzdGVkIHdpdGg6CiAgICBmZm1wZWcg LWkgTm92b3NvYm9ybmF5YVNxdWFyZV8xOTIweDEwODAubXA0IC1jOnYgbGlidnZlbmMgdGVzdC5t cDQgJiYgZmZtcGVnIC1pIHRlc3QubXA0IC1mIG51bGwgLQogICAgZmZtcGVnIC1pIE5vdm9zb2Jv cm5heWFTcXVhcmVfMTkyMHgxMDgwLm1wNCAtYzp2IGNvcHkgdGVzdC5tcDQgICAgICYmIGZmbXBl ZyAtaSB0ZXN0Lm1wNCAtZiBtZDUgLQoKU2lnbmVkLW9mZi1ieTogVGhvbWFzIFNpZWRlbCA8dGhv bWFzLmZmQHNwaW4tZGlnaXRhbC5jb20+CkNvLUF1dGhvcmVkLUJ5OiBOdW8gTWkgPG51b21pMjAy MUBnbWFpbC5jb20+Ci0tLQogbGliYXZmb3JtYXQvTWFrZWZpbGUgfCAgIDYgKy0KIGxpYmF2Zm9y bWF0L2lzb20uYyAgIHwgICAxICsKIGxpYmF2Zm9ybWF0L21vdi5jICAgIHwgICA2ICsKIGxpYmF2 Zm9ybWF0L21vdmVuYy5jIHwgIDQxICstCiBsaWJhdmZvcm1hdC92dmMuYyAgICB8IDk3MSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWJhdmZvcm1hdC92dmMu aCAgICB8ICA5OSArKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMTIwIGluc2VydGlvbnMoKyksIDQg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvdnZjLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC92dmMuaAoKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L01ha2VmaWxlIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKaW5kZXggZGNjOTllZWFjNC4uMDViOWI4 YTExNSAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvTWFrZWZpbGUKKysrIGIvbGliYXZmb3JtYXQv TWFrZWZpbGUKQEAgLTM0Myw3ICszNDMsNyBAQCBPQkpTLSQoQ09ORklHX01BVFJPU0tBX0RFTVVY RVIpICAgICAgICAgICs9IG1hdHJvc2thZGVjLm8gbWF0cm9za2EubyAgXAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZ2dwYXJzZXZvcmJpcy5vIHZvcmJpc2Nv bW1lbnQubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF0 cGFsZXR0ZS5vIHJlcGxheWdhaW4ubyBkb3ZpX2lzb20ubwogT0JKUy0kKENPTkZJR19NQVRST1NL QV9NVVhFUikgICAgICAgICAgICArPSBtYXRyb3NrYWVuYy5vIG1hdHJvc2thLm8gXAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdjEubyBhdmMubyBoZXZjLm8g XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdjEubyBhdmMu byBoZXZjLm8gdnZjLm9cCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZsYWNlbmNfaGVhZGVyLm8gYXZsYW5ndWFnZS5vIFwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9yYmlzY29tbWVudC5vIHd2Lm8gZG92aV9pc29tLm8K IE9CSlMtJChDT05GSUdfTUNBX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gbWNhLm8KQEAgLTM2 NSw3ICszNjUsNyBAQCBPQkpTLSQoQ09ORklHX01PRFNfREVNVVhFUikgICAgICAgICAgICAgICs9 IG1vZHMubwogT0JKUy0kKENPTkZJR19NT0ZMRVhfREVNVVhFUikgICAgICAgICAgICArPSBtb2Zs ZXgubwogT0JKUy0kKENPTkZJR19NT1ZfREVNVVhFUikgICAgICAgICAgICAgICArPSBtb3YubyBt b3ZfY2hhbi5vIG1vdl9lc2RzLm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBxdHBhbGV0dGUubyByZXBsYXlnYWluLm8gZG92aV9pc29tLm8KLU9CSlMtJChD T05GSUdfTU9WX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gbW92ZW5jLm8gYXYxLm8gYXZjLm8g aGV2Yy5vIHZwY2MubyBcCitPQkpTLSQoQ09ORklHX01PVl9NVVhFUikgICAgICAgICAgICAgICAg ICs9IG1vdmVuYy5vIGF2MS5vIGF2Yy5vIGhldmMubyB2dmMubyB2cGNjLm8gXAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlbmNoaW50Lm8gbW92X2NoYW4u byBydHAubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1v dmVuY2NlbmMubyBtb3ZlbmNfdHRtbC5vIHJhd3V0aWxzLm8gXAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3ZpX2lzb20ubyBldmMubwpAQCAtNTIwLDcgKzUy MCw3IEBAIE9CSlMtJChDT05GSUdfUlRQX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gcnRwLm8g ICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0 cGVuY192cDgubyAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBydHBlbmNfdnA5Lm8gICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBydHBlbmNfeGlwaC5vIFwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXZjLm8gaGV2Yy5vCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGF2Yy5vIGhldmMubyB2dmMubwogT0JKUy0kKENPTkZJ R19SVFNQX0RFTVVYRVIpICAgICAgICAgICAgICArPSBydHNwLm8gcnRzcGRlYy5vIGh0dHBhdXRo Lm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxkZWNv ZGUubwogT0JKUy0kKENPTkZJR19SVFNQX01VWEVSKSAgICAgICAgICAgICAgICArPSBydHNwLm8g cnRzcGVuYy5vIGh0dHBhdXRoLm8gXApkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaXNvbS5jIGIv bGliYXZmb3JtYXQvaXNvbS5jCmluZGV4IDZkMDE5ODgxZTUuLjlmYmNjZDQ0MzcgMTAwNjQ0Ci0t LSBhL2xpYmF2Zm9ybWF0L2lzb20uYworKysgYi9saWJhdmZvcm1hdC9pc29tLmMKQEAgLTM2LDYg KzM2LDcgQEAgY29uc3QgQVZDb2RlY1RhZyBmZl9tcDRfb2JqX3R5cGVbXSA9IHsKICAgICB7IEFW X0NPREVDX0lEX01QRUc0ICAgICAgICwgMHgyMCB9LAogICAgIHsgQVZfQ09ERUNfSURfSDI2NCAg ICAgICAgLCAweDIxIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9IRVZDICAgICAgICAsIDB4MjMgfSwK KyAgICB7IEFWX0NPREVDX0lEX1ZWQyAgICAgICAgICwgMHgzMyB9LAogICAgIHsgQVZfQ09ERUNf SURfQUFDICAgICAgICAgLCAweDQwIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9NUDRBTFMgICAgICAs IDB4NDAgfSwgLyogMTQ0OTYtMyBBTFMgKi8KICAgICB7IEFWX0NPREVDX0lEX01QRUcyVklERU8g ICwgMHg2MSB9LCAvKiBNUEVHLTIgTWFpbiAqLwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW92 LmMgYi9saWJhdmZvcm1hdC9tb3YuYwppbmRleCA0Y2ZmZDZjN2RiLi5jZjkzMWQ0NTk0IDEwMDY0 NAotLS0gYS9saWJhdmZvcm1hdC9tb3YuYworKysgYi9saWJhdmZvcm1hdC9tb3YuYwpAQCAtMjEy Myw2ICsyMTIzLDExIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZ2xibChNT1ZDb250ZXh0ICpjLCBB VklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBpZiAoKHVpbnQ2NF90KWF0b20uc2l6 ZSA+ICgxPDwzMCkpCiAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogCisgICAg aWYgKGF0b20udHlwZSA9PSBNS1RBRygndicsJ3YnLCdjJywnQycpKSB7CisgICAgICAgIGF2aW9f c2tpcChwYiwgNCk7CisgICAgICAgIGF0b20uc2l6ZSAtPSA0OworICAgIH0KKwogICAgIGlmIChh dG9tLnNpemUgPj0gMTApIHsKICAgICAgICAgLy8gQnJva2VuIGZpbGVzIGNyZWF0ZWQgYnkgbGVn YWN5IHZlcnNpb25zIG9mIGxpYmF2Zm9ybWF0IHdpbGwKICAgICAgICAgLy8gd3JhcCBhIHdob2xl IGZpZWwgYXRvbSBpbnNpZGUgb2YgYSBnbGJsIGF0b20uCkBAIC04MTI5LDYgKzgxMzQsNyBAQCBz dGF0aWMgY29uc3QgTU9WUGFyc2VUYWJsZUVudHJ5IG1vdl9kZWZhdWx0X3BhcnNlX3RhYmxlW10g PSB7CiB7IE1LVEFHKCdzJywnZycsJ3AnLCdkJyksIG1vdl9yZWFkX3NncGQgfSwKIHsgTUtUQUco J3MnLCdiJywnZycsJ3AnKSwgbW92X3JlYWRfc2JncCB9LAogeyBNS1RBRygnaCcsJ3YnLCdjJywn QycpLCBtb3ZfcmVhZF9nbGJsIH0sCit7IE1LVEFHKCd2JywndicsJ2MnLCdDJyksIG1vdl9yZWFk X2dsYmwgfSwKIHsgTUtUQUcoJ3UnLCd1JywnaScsJ2QnKSwgbW92X3JlYWRfdXVpZCB9LAogeyBN S1RBRygnQycsJ2knLCduJywgMHg4ZSksIG1vdl9yZWFkX3RhcmdhX3kyMTYgfSwKIHsgTUtUQUco J2YnLCdyJywnZScsJ2UnKSwgbW92X3JlYWRfZnJlZSB9LApkaWZmIC0tZ2l0IGEvbGliYXZmb3Jt YXQvbW92ZW5jLmMgYi9saWJhdmZvcm1hdC9tb3ZlbmMuYwppbmRleCA4YTI3YWZiYzU3Li42MTFh MmEyNmY1IDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9tb3ZlbmMuYworKysgYi9saWJhdmZvcm1h dC9tb3ZlbmMuYwpAQCAtNjgsNiArNjgsNyBAQAogI2luY2x1ZGUgInR0bWxlbmMuaCIKICNpbmNs dWRlICJ2ZXJzaW9uLmgiCiAjaW5jbHVkZSAidnBjYy5oIgorI2luY2x1ZGUgInZ2Yy5oIgogCiBz dGF0aWMgY29uc3QgQVZPcHRpb24gb3B0aW9uc1tdID0gewogICAgIHsgImJyYW5kIiwgICAgIk92 ZXJyaWRlIG1ham9yIGJyYW5kIiwgb2Zmc2V0b2YoTU9WTXV4Q29udGV4dCwgbWFqb3JfYnJhbmQp LCAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIgPSBOVUxMfSwgLmZsYWdzID0gQVZfT1BUX0ZM QUdfRU5DT0RJTkdfUEFSQU0gfSwKQEAgLTE0NzMsNiArMTQ3NCwyMyBAQCBzdGF0aWMgaW50IG1v dl93cml0ZV9ldmNjX3RhZyhBVklPQ29udGV4dCAqcGIsIE1PVlRyYWNrICp0cmFjaykKICAgICBy ZXR1cm4gdXBkYXRlX3NpemUocGIsIHBvcyk7CiB9CiAKK3N0YXRpYyBpbnQgbW92X3dyaXRlX3Z2 Y2NfdGFnKEFWSU9Db250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQoreworICAgIGludDY0X3Qg cG9zID0gYXZpb190ZWxsKHBiKTsKKworICAgIGF2aW9fd2IzMihwYiwgMCk7CisgICAgZmZpb193 Zm91cmNjKHBiLCAidnZjQyIpOworCisgICAgYXZpb193OCAgKHBiLCAwKTsgLyogdmVyc2lvbiAq LworICAgIGF2aW9fd2IyNChwYiwgMCk7IC8qIGZsYWdzICovCisKKyAgICBpZiAodHJhY2stPnRh ZyA9PSBNS1RBRygndicsJ3YnLCdjJywnMScpKQorICAgICAgICBmZl9pc29tX3dyaXRlX3Z2Y2Mo cGIsIHRyYWNrLT52b3NfZGF0YSwgdHJhY2stPnZvc19sZW4sIDEpOworICAgIGVsc2UKKyAgICAg ICAgZmZfaXNvbV93cml0ZV92dmNjKHBiLCB0cmFjay0+dm9zX2RhdGEsIHRyYWNrLT52b3NfbGVu LCAwKTsKKyAgICByZXR1cm4gdXBkYXRlX3NpemUocGIsIHBvcyk7Cit9CisKIC8qIGFsc28gdXNl ZCBieSBhbGwgYXZpZCBjb2RlY3MgKGR2LCBpbXgsIG1lcmlkaWVuKSBhbmQgdGhlaXIgdmFyaWFu dHMgKi8KIHN0YXRpYyBpbnQgbW92X3dyaXRlX2F2aWRfdGFnKEFWSU9Db250ZXh0ICpwYiwgTU9W VHJhY2sgKnRyYWNrKQogewpAQCAtMjM4Miw2ICsyNDAwLDggQEAgc3RhdGljIGludCBtb3Zfd3Jp dGVfdmlkZW9fdGFnKEFWRm9ybWF0Q29udGV4dCAqcywgQVZJT0NvbnRleHQgKnBiLCBNT1ZNdXhD b250ZXgKICAgICAgICAgYXZpZCA9IDE7CiAgICAgfSBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2Rl Y19pZCA9PSBBVl9DT0RFQ19JRF9IRVZDKQogICAgICAgICBtb3Zfd3JpdGVfaHZjY190YWcocGIs IHRyYWNrKTsKKyAgICBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19J RF9WVkMpCisgICAgICAgIG1vdl93cml0ZV92dmNjX3RhZyhwYiwgdHJhY2spOwogICAgIGVsc2Ug aWYgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQgJiYgIVRBR19JU19B VkNJKHRyYWNrLT50YWcpKSB7CiAgICAgICAgIG1vdl93cml0ZV9hdmNjX3RhZyhwYiwgdHJhY2sp OwogICAgICAgICBpZiAodHJhY2stPm1vZGUgPT0gTU9ERV9JUE9EKQpAQCAtNjE3MCw2ICs2MTkw LDcgQEAgaW50IGZmX21vdl93cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tl dCAqcGt0KQogICAgIGlmICgocGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9ETlhIRCB8fAog ICAgICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0IHx8CiAgICAgICAgICBw YXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0hFVkMgfHwKKyAgICAgICAgIHBhci0+Y29kZWNf aWQgPT0gQVZfQ09ERUNfSURfVlZDIHx8CiAgICAgICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NP REVDX0lEX1ZQOSB8fAogICAgICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9FVkMg fHwKICAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVFJVRUhEKSAmJiAhdHJr LT52b3NfbGVuICYmCkBAIC02MjM1LDYgKzYyNTYsMTggQEAgaW50IGZmX21vdl93cml0ZV9wYWNr ZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQogICAgICAgICAgICAgICAgIHNp emUgPSBmZl9oZXZjX2FubmV4YjJtcDQocGIsIHBrdC0+ZGF0YSwgcGt0LT5zaXplLCAwLCBOVUxM KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0gZWxzZSBpZiAocGFyLT5jb2RlY19p ZCA9PSBBVl9DT0RFQ19JRF9WVkMgJiYgdHJrLT52b3NfbGVuID4gNiAmJgorICAgICAgICAgICAg IChBVl9SQjI0KHRyay0+dm9zX2RhdGEpID09IDEgfHwgQVZfUkIzMih0cmstPnZvc19kYXRhKSA9 PSAxKSkgeworICAgICAgICAvKiBleHRyYWRhdGEgaXMgQW5uZXggQiwgYXNzdW1lIHRoZSBiaXRz dHJlYW0gaXMgdG9vIGFuZCBjb252ZXJ0IGl0ICovCisgICAgICAgIGlmICh0cmstPmhpbnRfdHJh Y2sgPj0gMCAmJiB0cmstPmhpbnRfdHJhY2sgPCBtb3YtPm5iX3RyYWNrcykgeworICAgICAgICAg ICAgcmV0ID0gZmZfdnZjX2FubmV4YjJtcDRfYnVmKHBrdC0+ZGF0YSwgJnJlZm9ybWF0dGVkX2Rh dGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpemUsIDAsIE5V TEwpOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKKyAgICAgICAgICAgIGF2aW9fd3JpdGUocGIsIHJlZm9ybWF0dGVkX2RhdGEsIHNpemUpOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2l6ZSA9IGZmX3Z2Y19hbm5leGIybXA0KHBi LCBwa3QtPmRhdGEsIHBrdC0+c2l6ZSwgMCwgTlVMTCk7CisgICAgICAgIH0KICAgICB9IGVsc2Ug aWYgKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7CiAgICAgICAgIGlmICh0cmst PmhpbnRfdHJhY2sgPj0gMCAmJiB0cmstPmhpbnRfdHJhY2sgPCBtb3YtPm5iX3RyYWNrcykgewog ICAgICAgICAgICAgcmV0ID0gZmZfYXYxX2ZpbHRlcl9vYnVzX2J1Zihwa3QtPmRhdGEsICZyZWZv cm1hdHRlZF9kYXRhLApAQCAtNjI4MSw2ICs2MzE0LDkgQEAgaW50IGZmX21vdl93cml0ZV9wYWNr ZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQogICAgICAgICAgICAgfSBlbHNl IGlmKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSEVWQyAmJiBwYXItPmV4dHJhZGF0YV9z aXplID4gMjEpIHsKICAgICAgICAgICAgICAgICBpbnQgbmFsX3NpemVfbGVuZ3RoID0gKHBhci0+ ZXh0cmFkYXRhWzIxXSAmIDB4MykgKyAxOwogICAgICAgICAgICAgICAgIHJldCA9IGZmX21vdl9j ZW5jX2F2Y193cml0ZV9uYWxfdW5pdHMocywgJnRyay0+Y2VuYywgbmFsX3NpemVfbGVuZ3RoLCBw YiwgcGt0LT5kYXRhLCBzaXplKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZihwYXItPmNvZGVjX2lk ID09IEFWX0NPREVDX0lEX1ZWQyAmJiBwYXItPmV4dHJhZGF0YV9zaXplID4gNCkgeworICAgICAg ICAgICAgICAgIGludCBuYWxfc2l6ZV9sZW5ndGggPSAoKHBhci0+ZXh0cmFkYXRhWzRdID4+IDEp ICYgMHgzKSArIDE7CisgICAgICAgICAgICAgICAgcmV0ID0gZmZfbW92X2NlbmNfYXZjX3dyaXRl X25hbF91bml0cyhzLCAmdHJrLT5jZW5jLCBuYWxfc2l6ZV9sZW5ndGgsIHBiLCBwa3QtPmRhdGEs IHNpemUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXQgPSBmZl9t b3ZfY2VuY193cml0ZV9wYWNrZXQoJnRyay0+Y2VuYywgcGIsIHBrdC0+ZGF0YSwgc2l6ZSk7CiAg ICAgICAgICAgICB9CkBAIC03MzYzLDcgKzczOTksOCBAQCBzdGF0aWMgaW50IG1vdl9pbml0KEFW Rm9ybWF0Q29udGV4dCAqcykKIAogICAgICAgICBpZiAobW92LT5lbmNyeXB0aW9uX3NjaGVtZSA9 PSBNT1ZfRU5DX0NFTkNfQUVTX0NUUikgewogICAgICAgICAgICAgcmV0ID0gZmZfbW92X2NlbmNf aW5pdCgmdHJhY2stPmNlbmMsIG1vdi0+ZW5jcnlwdGlvbl9rZXksCi0gICAgICAgICAgICAgICAg KHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQgfHwgdHJhY2stPnBhci0+ Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSEVWQyksCisgICAgICAgICAgICAgICAgKHRyYWNrLT5w YXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQgfHwgdHJhY2stPnBhci0+Y29kZWNfaWQg PT0gQVZfQ09ERUNfSURfSEVWQyB8fAorICAgICAgICAgICAgICAgICB0cmFjay0+cGFyLT5jb2Rl Y19pZCA9PSBBVl9DT0RFQ19JRF9WVkMpLAogICAgICAgICAgICAgICAgIHMtPmZsYWdzICYgQVZG TVRfRkxBR19CSVRFWEFDVCk7CiAgICAgICAgICAgICBpZiAocmV0KQogICAgICAgICAgICAgICAg IHJldHVybiByZXQ7CkBAIC03ODMyLDYgKzc4NjksOCBAQCBzdGF0aWMgY29uc3QgQVZDb2RlY1Rh ZyBjb2RlY19tcDRfdGFnc1tdID0gewogICAgIHsgQVZfQ09ERUNfSURfSEVWQywgICAgICAgICAg ICBNS1RBRygnaCcsICdlJywgJ3YnLCAnMScpIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9IRVZDLCAg ICAgICAgICAgIE1LVEFHKCdoJywgJ3YnLCAnYycsICcxJykgfSwKICAgICB7IEFWX0NPREVDX0lE X0hFVkMsICAgICAgICAgICAgTUtUQUcoJ2QnLCAndicsICdoJywgJzEnKSB9LAorICAgIHsgQVZf Q09ERUNfSURfVlZDLCAgICAgICAgICAgICBNS1RBRygndicsICd2JywgJ2MnLCAnMScpIH0sCisg ICAgeyBBVl9DT0RFQ19JRF9WVkMsICAgICAgICAgICAgIE1LVEFHKCd2JywgJ3YnLCAnaScsICcx JykgfSwKICAgICB7IEFWX0NPREVDX0lEX0VWQywgICAgICAgICAgICAgTUtUQUcoJ2UnLCAndics ICdjJywgJzEnKSB9LAogICAgIHsgQVZfQ09ERUNfSURfTVBFRzJWSURFTywgICAgICBNS1RBRygn bScsICdwJywgJzQnLCAndicpIH0sCiAgICAgeyBBVl9DT0RFQ19JRF9NUEVHMVZJREVPLCAgICAg IE1LVEFHKCdtJywgJ3AnLCAnNCcsICd2JykgfSwKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Z2 Yy5jIGIvbGliYXZmb3JtYXQvdnZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uMTRhNGMwYTJmMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L3Z2Yy5jCkBA IC0wLDAgKzEsOTcxIEBACisvKgorICogSC4yNjYvVlZDIGhlbHBlciBmdW5jdGlvbnMgZm9yIG11 eGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAyMiwgVGhvbWFzIFNpZWRlbAorICoKKyAqIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu c2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK KyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAibGliYXZjb2RlYy9nZXRf Yml0cy5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvZ29sb21iLmgiCisjaW5jbHVkZSAibGliYXZj b2RlYy92dmMuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCisjaW5jbHVk ZSAiYXZjLmgiCisjaW5jbHVkZSAiYXZpby5oIgorI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIK KyNpbmNsdWRlICJ2dmMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgVlZDQ05BTFVuaXRBcnJheSB7Cisg ICAgdWludDhfdCBhcnJheV9jb21wbGV0ZW5lc3M7CisgICAgdWludDhfdCBOQUxfdW5pdF90eXBl OworICAgIHVpbnQxNl90IG51bV9uYWx1czsKKyAgICB1aW50MTZfdCAqbmFsX3VuaXRfbGVuZ3Ro OworICAgIHVpbnQ4X3QgKipuYWxfdW5pdDsKK30gVlZDQ05BTFVuaXRBcnJheTsKKwordHlwZWRl ZiBzdHJ1Y3QgVlZDUFRMUmVjb3JkIHsKKyAgICB1aW50OF90IG51bV9ieXRlc19jb25zdHJhaW50 X2luZm87CisgICAgdWludDhfdCBnZW5lcmFsX3Byb2ZpbGVfaWRjOworICAgIHVpbnQ4X3QgZ2Vu ZXJhbF90aWVyX2ZsYWc7CisgICAgdWludDhfdCBnZW5lcmFsX2xldmVsX2lkYzsKKyAgICB1aW50 OF90IHB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsKKyAgICB1aW50OF90IHB0bF9tdWx0 aWxheWVyX2VuYWJsZWRfZmxhZzsKKyAgICB1aW50OF90IGdlbmVyYWxfY29uc3RyYWludF9pbmZv WzldOworICAgIHVpbnQ4X3QgcHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tWVkNfTUFY X1NVQkxBWUVSUyAtIDFdOworICAgIHVpbnQ4X3Qgc3VibGF5ZXJfbGV2ZWxfaWRjW1ZWQ19NQVhf U1VCTEFZRVJTIC0gMV07CisgICAgdWludDhfdCBwdGxfbnVtX3N1Yl9wcm9maWxlczsKKyAgICB1 aW50MzJfdCBnZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tWVkNfTUFYX1NVQl9QUk9GSUxFU107Cit9 IFZWQ1BUTFJlY29yZDsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25S ZWNvcmQgeworICAgIHVpbnQ4X3QgbGVuZ3RoU2l6ZU1pbnVzT25lOworICAgIHVpbnQ4X3QgcHRs X3ByZXNlbnRfZmxhZzsKKyAgICB1aW50MTZfdCBvbHNfaWR4OworICAgIHVpbnQ4X3QgbnVtX3N1 YmxheWVyczsKKyAgICB1aW50OF90IGNvbnN0YW50X2ZyYW1lX3JhdGU7CisgICAgdWludDhfdCBj aHJvbWFfZm9ybWF0X2lkYzsKKyAgICB1aW50OF90IGJpdF9kZXB0aF9taW51czg7CisgICAgVlZD UFRMUmVjb3JkIHB0bDsKKyAgICB1aW50MTZfdCBtYXhfcGljdHVyZV93aWR0aDsKKyAgICB1aW50 MTZfdCBtYXhfcGljdHVyZV9oZWlnaHQ7CisgICAgdWludDE2X3QgYXZnX2ZyYW1lX3JhdGU7Cisg ICAgdWludDhfdCBudW1fb2ZfYXJyYXlzOworICAgIFZWQ0NOQUxVbml0QXJyYXkgKmFycmF5Owor fSBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZDsKKwordHlwZWRlZiBzdHJ1Y3QgVlZDQ1By b2ZpbGVUaWVyTGV2ZWwgeworICAgIHVpbnQ4X3QgcHJvZmlsZV9pZGM7CisgICAgdWludDhfdCB0 aWVyX2ZsYWc7CisgICAgdWludDhfdCBnZW5lcmFsX2xldmVsX2lkYzsKKyAgICB1aW50OF90IHB0 bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsKKyAgICB1aW50OF90IHB0bF9tdWx0aWxheWVy X2VuYWJsZWRfZmxhZzsKKy8vIGdlbmVyYWxfY29uc3RyYWludF9pbmZvCisgICAgdWludDhfdCBn Y2lfcHJlc2VudF9mbGFnOworICAgIHVpbnQ4X3QgZ2NpX2dlbmVyYWxfY29uc3RyYWludHNbOV07 CisgICAgdWludDhfdCBnY2lfbnVtX3Jlc2VydmVkX2JpdHM7CisvLyBlbmQgZ2VuZXJhbF9jb25z dHJhaW50X2luZm8KKyAgICB1aW50OF90IHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdb VlZDX01BWF9TVUJMQVlFUlMgLSAxXTsKKyAgICB1aW50OF90IHN1YmxheWVyX2xldmVsX2lkY1tW VkNfTUFYX1NVQkxBWUVSUyAtIDFdOworICAgIHVpbnQ4X3QgcHRsX251bV9zdWJfcHJvZmlsZXM7 CisgICAgdWludDMyX3QgZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbVlZDX01BWF9TVUJfUFJPRklM RVNdOworfSBWVkNDUHJvZmlsZVRpZXJMZXZlbDsKKworc3RhdGljIHZvaWQgdnZjY191cGRhdGVf cHRsKFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZWQ0NQcm9maWxlVGllckxldmVsICpwdGwpCit7CisgICAgLyoKKyAgICAg KiBUaGUgbGV2ZWwgaW5kaWNhdGlvbiBnZW5lcmFsX2xldmVsX2lkYyBtdXN0IGluZGljYXRlIGEg bGV2ZWwgb2YKKyAgICAgKiBjYXBhYmlsaXR5IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUg aGlnaGVzdCBsZXZlbCBpbmRpY2F0ZWQgZm9yIHRoZQorICAgICAqIGhpZ2hlc3QgdGllciBpbiBh bGwgdGhlIHBhcmFtZXRlciBzZXRzLgorICAgICAqLworICAgIGlmICh2dmNjLT5wdGwuZ2VuZXJh bF90aWVyX2ZsYWcgPCBwdGwtPnRpZXJfZmxhZykKKyAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxf bGV2ZWxfaWRjID0gcHRsLT5nZW5lcmFsX2xldmVsX2lkYzsKKyAgICBlbHNlCisgICAgICAgIHZ2 Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyA9CisgICAgICAgICAgICBGRk1BWCh2dmNjLT5wdGwu Z2VuZXJhbF9sZXZlbF9pZGMsIHB0bC0+Z2VuZXJhbF9sZXZlbF9pZGMpOworCisgICAgLyoKKyAg ICAgKiBUaGUgdGllciBpbmRpY2F0aW9uIGdlbmVyYWxfdGllcl9mbGFnIG11c3QgaW5kaWNhdGUg YSB0aWVyIGVxdWFsIHRvIG9yCisgICAgICogZ3JlYXRlciB0aGFuIHRoZSBoaWdoZXN0IHRpZXIg aW5kaWNhdGVkIGluIGFsbCB0aGUgcGFyYW1ldGVyIHNldHMuCisgICAgICovCisgICAgdnZjYy0+ cHRsLmdlbmVyYWxfdGllcl9mbGFnID0KKyAgICAgICAgRkZNQVgodnZjYy0+cHRsLmdlbmVyYWxf dGllcl9mbGFnLCBwdGwtPnRpZXJfZmxhZyk7CisKKyAgICAvKgorICAgICAqIFRoZSBwcm9maWxl IGluZGljYXRpb24gZ2VuZXJhbF9wcm9maWxlX2lkYyBtdXN0IGluZGljYXRlIGEgcHJvZmlsZSB0 bworICAgICAqIHdoaWNoIHRoZSBzdHJlYW0gYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJh dGlvbiByZWNvcmQgY29uZm9ybXMuCisgICAgICoKKyAgICAgKiBJZiB0aGUgc2VxdWVuY2UgcGFy YW1ldGVyIHNldHMgYXJlIG1hcmtlZCB3aXRoIGRpZmZlcmVudCBwcm9maWxlcywgdGhlbgorICAg ICAqIHRoZSBzdHJlYW0gbWF5IG5lZWQgZXhhbWluYXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIHBy b2ZpbGUsIGlmIGFueSwgdGhlCisgICAgICogZW50aXJlIHN0cmVhbSBjb25mb3JtcyB0by4gSWYg dGhlIGVudGlyZSBzdHJlYW0gaXMgbm90IGV4YW1pbmVkLCBvciB0aGUKKyAgICAgKiBleGFtaW5h dGlvbiByZXZlYWxzIHRoYXQgdGhlcmUgaXMgbm8gcHJvZmlsZSB0byB3aGljaCB0aGUgZW50aXJl IHN0cmVhbQorICAgICAqIGNvbmZvcm1zLCB0aGVuIHRoZSBlbnRpcmUgc3RyZWFtIG11c3QgYmUg c3BsaXQgaW50byB0d28gb3IgbW9yZQorICAgICAqIHN1Yi1zdHJlYW1zIHdpdGggc2VwYXJhdGUg Y29uZmlndXJhdGlvbiByZWNvcmRzIGluIHdoaWNoIHRoZXNlIHJ1bGVzIGNhbgorICAgICAqIGJl IG1ldC4KKyAgICAgKgorICAgICAqIE5vdGU6IHNldCB0aGUgcHJvZmlsZSB0byB0aGUgaGlnaGVz dCB2YWx1ZSBmb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eS4KKyAgICAgKi8KKyAgICB2dmNjLT5w dGwuZ2VuZXJhbF9wcm9maWxlX2lkYyA9CisgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5nZW5lcmFs X3Byb2ZpbGVfaWRjLCBwdGwtPnByb2ZpbGVfaWRjKTsKKworICAgIC8qCisgICAgICogRWFjaCBi aXQgaW4gZmxhZ3MgbWF5IG9ubHkgYmUgc2V0IGlmIGFsbAorICAgICAqIHRoZSBwYXJhbWV0ZXIg c2V0cyBzZXQgdGhhdCBiaXQuCisgICAgICovCisgICAgdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5 X2NvbnN0cmFpbnRfZmxhZyAmPQorICAgICAgICBwdGwtPnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFp bnRfZmxhZzsKKyAgICB2dmNjLT5wdGwucHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnICY9IHB0 bC0+cHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOworCisgICAgLyoKKyAgICAgKiBDb25zdHJh aW50cyBJbmZvCisgICAgICovCisgICAgaWYgKHB0bC0+Z2NpX3ByZXNlbnRfZmxhZykgeworICAg ICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9IDk7CisgICAgICAgIG1l bWNweSgmdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZvWzBdLAorICAgICAgICAgICAg ICAgJnB0bC0+Z2NpX2dlbmVyYWxfY29uc3RyYWludHNbMF0sIHNpemVvZih1aW50OF90KSAqIDkp OworCisgICAgfSBlbHNlIHsKKyAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50 X2luZm8gPSAxOworICAgICAgICBtZW1zZXQoJnZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRf aW5mb1swXSwgMCwgc2l6ZW9mKHVpbnQ4X3QpICogOSk7CisgICAgfQorCisgICAgLyoKKyAgICAg KiBFYWNoIGJpdCBpbiBmbGFncyBtYXkgb25seSBiZSBzZXQgaWYgb25lIG9mCisgICAgICogdGhl IHBhcmFtZXRlciBzZXRzIHNldCB0aGF0IGJpdC4KKyAgICAgKi8KKyAgICBtZW1zZXQodnZjYy0+ cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcsIDAsCisgICAgICAgICAgIHNpemVv Zih1aW50OF90KSAqIHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxKTsKKyAgICBtZW1zZXQodnZjYy0+ cHRsLnN1YmxheWVyX2xldmVsX2lkYywgMCwKKyAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpICog dnZjYy0+bnVtX3N1YmxheWVycyAtIDEpOworCisgICAgZm9yIChpbnQgaSA9IHZ2Y2MtPm51bV9z dWJsYXllcnMgLSAyOyBpID49IDA7IGktLSkgeworICAgICAgICB2dmNjLT5wdGwucHRsX3N1Ymxh eWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSB8PQorICAgICAgICAgICAgcHRsLT5wdGxfc3VibGF5 ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldOworICAgICAgICBpZiAodnZjYy0+cHRsLnB0bF9zdWJs YXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pIHsKKyAgICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJs YXllcl9sZXZlbF9pZGNbaV0gPQorICAgICAgICAgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5zdWJs YXllcl9sZXZlbF9pZGNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgcHRsLT5zdWJsYXllcl9s ZXZlbF9pZGNbaV0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGkgPT0gdnZj Yy0+bnVtX3N1YmxheWVycyAtIDEpIHsKKyAgICAgICAgICAgICAgICB2dmNjLT5wdGwuc3VibGF5 ZXJfbGV2ZWxfaWRjW2ldID0gdnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRj W2ldID0KKyAgICAgICAgICAgICAgICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tp ICsgMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2dmNjLT5wdGwu cHRsX251bV9zdWJfcHJvZmlsZXMgPQorICAgICAgICBGRk1BWCh2dmNjLT5wdGwucHRsX251bV9z dWJfcHJvZmlsZXMsIHB0bC0+cHRsX251bV9zdWJfcHJvZmlsZXMpOworICAgIGlmICh2dmNjLT5w dGwucHRsX251bV9zdWJfcHJvZmlsZXMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2 dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXM7IGkrKykgeworICAgICAgICAgICAgdnZjYy0+ cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldID0KKyAgICAgICAgICAgICAgICBwdGwtPmdl bmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMg dm9pZCB2dmNjX3BhcnNlX3B0bChHZXRCaXRDb250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHByb2ZpbGVUaWVyUHJlc2VudEZsYWcsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3N1Yl9sYXllcnNfbWlu dXMxKQoreworICAgIFZWQ0NQcm9maWxlVGllckxldmVsIGdlbmVyYWxfcHRsOworICAgIGludCBq OworCisgICAgaWYgKHByb2ZpbGVUaWVyUHJlc2VudEZsYWcpIHsKKyAgICAgICAgZ2VuZXJhbF9w dGwucHJvZmlsZV9pZGMgPSBnZXRfYml0cyhnYiwgNyk7CisgICAgICAgIGdlbmVyYWxfcHRsLnRp ZXJfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgfQorICAgIGdlbmVyYWxfcHRsLmdlbmVyYWxf bGV2ZWxfaWRjID0gZ2V0X2JpdHMoZ2IsIDgpOworCisgICAgZ2VuZXJhbF9wdGwucHRsX2ZyYW1l X29ubHlfY29uc3RyYWludF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBnZW5lcmFsX3B0bC5w dGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgIGlmIChwcm9m aWxlVGllclByZXNlbnRGbGFnKSB7ICAgICAgIC8vIHBhcnNlIGNvbnN0cmFpbnQgaW5mbworICAg ICAgICBnZW5lcmFsX3B0bC5nY2lfcHJlc2VudF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAg ICAgaWYgKGdlbmVyYWxfcHRsLmdjaV9wcmVzZW50X2ZsYWcpIHsKKyAgICAgICAgICAgIGZvciAo aiA9IDA7IGogPCA4OyBqKyspCisgICAgICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX2dlbmVy YWxfY29uc3RyYWludHNbal0gPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgICAgICBnZW5lcmFs X3B0bC5nY2lfZ2VuZXJhbF9jb25zdHJhaW50c1s4XSA9IGdldF9iaXRzKGdiLCA3KTsKKworICAg ICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX251bV9yZXNlcnZlZF9iaXRzID0gZ2V0X2JpdHMoZ2Is IDgpOworICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBnZW5lcmFsX3B0bC5nY2lfbnVtX3Jlc2Vy dmVkX2JpdHMpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChnYi0+aW5kZXggJSA4ICE9IDAp CisgICAgICAgICAgICBza2lwX2JpdHMxKGdiKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0g bWF4X3N1Yl9sYXllcnNfbWludXMxIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgICAgIGdlbmVyYWxf cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0gPSBnZXRfYml0czEoZ2IpOwor CisgICAgd2hpbGUgKGdiLT5pbmRleCAlIDggIT0gMCkKKyAgICAgICAgc2tpcF9iaXRzMShnYik7 CisKKyAgICBmb3IgKGludCBpID0gbWF4X3N1Yl9sYXllcnNfbWludXMxIC0gMTsgaSA+PSAwOyBp LS0pIHsKKyAgICAgICAgaWYgKGdlbmVyYWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50 X2ZsYWdbaV0pCisgICAgICAgICAgICBnZW5lcmFsX3B0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0g PSBnZXRfYml0cyhnYiwgOCk7CisgICAgfQorCisgICAgaWYgKHByb2ZpbGVUaWVyUHJlc2VudEZs YWcpIHsKKyAgICAgICAgZ2VuZXJhbF9wdGwucHRsX251bV9zdWJfcHJvZmlsZXMgPSBnZXRfYml0 cyhnYiwgOCk7CisgICAgICAgIGlmIChnZW5lcmFsX3B0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcykg eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnZW5lcmFsX3B0bC5wdGxfbnVtX3N1 Yl9wcm9maWxlczsgaSsrKQorICAgICAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdlbmVyYWxfc3Vi X3Byb2ZpbGVfaWRjW2ldID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIpOworICAgICAgICB9CisgICAg fQorCisgICAgdnZjY191cGRhdGVfcHRsKHZ2Y2MsICZnZW5lcmFsX3B0bCk7Cit9CisKK3N0YXRp YyBpbnQgdnZjY19wYXJzZV92cHMoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIHVu c2lnbmVkIGludCB2cHNfbWF4X2xheWVyc19taW51czE7CisgICAgdW5zaWduZWQgaW50IHZwc19t YXhfc3VibGF5ZXJzX21pbnVzMTsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX2RlZmF1bHRfcHRsX2Rw Yl9ocmRfbWF4X3RpZF9mbGFnOworICAgIHVuc2lnbmVkIGludCB2cHNfYWxsX2luZGVwZW5kZW50 X2xheWVyc19mbGFnOworICAgIHVuc2lnbmVkIGludCB2cHNfZWFjaF9sYXllcl9pc19hbl9vbHNf ZmxhZzsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX29sc19tb2RlX2lkYzsKKworICAgIHVuc2lnbmVk IGludCB2cHNfcHRfcHJlc2VudF9mbGFnW1ZWQ19NQVhfUFRMU107CisgICAgdW5zaWduZWQgaW50 IHZwc19wdGxfbWF4X3RpZFtWVkNfTUFYX1BUTFNdOworICAgIHVuc2lnbmVkIGludCB2cHNfbnVt X3B0bHNfbWludXMxID0gMDsKKworICAgIC8qCisgICAgICogdnBzX3ZpZGVvX3BhcmFtZXRlcl9z ZXRfaWQgdSg0KQorICAgICAqLworICAgIHNraXBfYml0cyhnYiwgNCk7CisKKyAgICB2cHNfbWF4 X2xheWVyc19taW51czEgPSBnZXRfYml0cyhnYiwgNik7CisgICAgdnBzX21heF9zdWJsYXllcnNf bWludXMxID0gZ2V0X2JpdHMoZ2IsIDMpOworCisgICAgLyoKKyAgICAgKiBudW1UZW1wb3JhbExh eWVycyBncmVhdGVyIHRoYW4gMSBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIHRvIHdoaWNoIHRo aXMKKyAgICAgKiBjb25maWd1cmF0aW9uIHJlY29yZCBhcHBsaWVzIGlzIHRlbXBvcmFsbHkgc2Nh bGFibGUgYW5kIHRoZSBjb250YWluZWQKKyAgICAgKiBudW1iZXIgb2YgdGVtcG9yYWwgbGF5ZXJz IChhbHNvIHJlZmVycmVkIHRvIGFzIHRlbXBvcmFsIHN1Yi1sYXllciBvcgorICAgICAqIHN1Yi1s YXllciBpbiBJU08vSUVDIDIzMDA4LTIpIGlzIGVxdWFsIHRvIG51bVRlbXBvcmFsTGF5ZXJzLiBW YWx1ZSAxCisgICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSBpcyBub3QgdGVtcG9yYWxs eSBzY2FsYWJsZS4gVmFsdWUgMCBpbmRpY2F0ZXMKKyAgICAgKiB0aGF0IGl0IGlzIHVua25vd24g d2hldGhlciB0aGUgc3RyZWFtIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUuCisgICAgICovCisgICAg dnZjYy0+bnVtX3N1YmxheWVycyA9IEZGTUFYKHZ2Y2MtPm51bV9zdWJsYXllcnMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZwc19tYXhfc3VibGF5ZXJzX21pbnVzMSArIDEpOwor CisgICAgaWYgKHZwc19tYXhfbGF5ZXJzX21pbnVzMSA+IDAgJiYgdnBzX21heF9zdWJsYXllcnNf bWludXMxID4gMCkKKyAgICAgICAgdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFn ID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBpZiAodnBzX21heF9sYXllcnNfbWludXMxID4gMCkKKyAg ICAgICAgdnBzX2FsbF9pbmRlcGVuZGVudF9sYXllcnNfZmxhZyA9IGdldF9iaXRzMShnYik7Cisg ICAgZWxzZQorICAgICAgICB2cHNfYWxsX2luZGVwZW5kZW50X2xheWVyc19mbGFnID0gMTsKKwor ICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHZwc19tYXhfbGF5ZXJzX21pbnVzMTsgaSsrKSB7Cisg ICAgICAgIHNraXBfYml0cyhnYiwgNik7ICAgIC8vdnBzX2xheWVyX2lkW2ldCisgICAgICAgIGlm IChpID4gMCAmJiAhdnBzX2FsbF9pbmRlcGVuZGVudF9sYXllcnNfZmxhZykgeworICAgICAgICAg ICAgaWYgKGdldF9iaXRzMShnYikpIHsgICAgLy8gdnBzX2luZGVwZW5kZW50X2xheWVyX2ZsYWdb aV0KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdnBzX21heF90aWRfcmVmX3ByZXNlbnRf ZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog PCBpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZwc19tYXhfdGlkX3JlZl9wcmVz ZW50X2ZsYWcgJiYgZ2V0X2JpdHMxKGdiKSkgIC8vIHZwc19kaXJlY3RfcmVmX2xheWVyX2ZsYWdb aV1bal0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgMyk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIHZwc19tYXhfdGlkX2lsX3JlZl9waWNzX3BsdXMxCisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg aWYgKHZwc19tYXhfbGF5ZXJzX21pbnVzMSA+IDApIHsKKyAgICAgICAgaWYgKHZwc19hbGxfaW5k ZXBlbmRlbnRfbGF5ZXJzX2ZsYWcpCisgICAgICAgICAgICB2cHNfZWFjaF9sYXllcl9pc19hbl9v bHNfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZwc19l YWNoX2xheWVyX2lzX2FuX29sc19mbGFnID0gMDsKKyAgICAgICAgaWYgKCF2cHNfZWFjaF9sYXll cl9pc19hbl9vbHNfZmxhZykgeworICAgICAgICAgICAgaWYgKCF2cHNfYWxsX2luZGVwZW5kZW50 X2xheWVyc19mbGFnKQorICAgICAgICAgICAgICAgIHZwc19vbHNfbW9kZV9pZGMgPSBnZXRfYml0 cyhnYiwgMik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdnBzX29sc19tb2Rl X2lkYyA9IDI7CisgICAgICAgICAgICBpZiAodnBzX29sc19tb2RlX2lkYyA9PSAyKSB7CisgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHZwc19udW1fb3V0cHV0X2xheWVyX3NldHNfbWludXMy ID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9 IHZwc19udW1fb3V0cHV0X2xheWVyX3NldHNfbWludXMyICsgMTsgaSsrKSB7CisgICAgICAgICAg ICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHZwc19tYXhfbGF5ZXJzX21pbnVzMTsgaisr KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMxKGdiKTsgLy8gdnBzX29sc19v dXRwdXRfbGF5ZXJfZmxhZ1tpXVtqXQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZwc19udW1fcHRsc19t aW51czEgPSBnZXRfYml0cyhnYiwgOCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdnBzX2VhY2hf bGF5ZXJfaXNfYW5fb2xzX2ZsYWcgPSAwOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBp IDw9IHZwc19udW1fcHRsc19taW51czE7IGkrKykgeworICAgICAgICBpZiAoaSA+IDApCisgICAg ICAgICAgICB2cHNfcHRfcHJlc2VudF9mbGFnW2ldID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgICAgdnBzX3B0X3ByZXNlbnRfZmxhZ1tpXSA9IDE7CisKKyAgICAgICAg aWYgKCF2cHNfZGVmYXVsdF9wdGxfZHBiX2hyZF9tYXhfdGlkX2ZsYWcpCisgICAgICAgICAgICB2 cHNfcHRsX21heF90aWRbaV0gPSBnZXRfYml0cyhnYiwgMyk7CisgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIHZwc19wdGxfbWF4X3RpZFtpXSA9IHZwc19tYXhfc3VibGF5ZXJzX21pbnVzMTsKKyAg ICB9CisKKyAgICB3aGlsZSAoZ2ItPmluZGV4ICUgOCAhPSAwKQorICAgICAgICBza2lwX2JpdHMx KGdiKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHZwc19udW1fcHRsc19taW51czE7IGkr KykKKyAgICAgICAgdnZjY19wYXJzZV9wdGwoZ2IsIHZ2Y2MsIHZwc19wdF9wcmVzZW50X2ZsYWdb aV0sIHZwc19wdGxfbWF4X3RpZFtpXSk7CisKKyAgICAvKiBub3RoaW5nIHVzZWZ1bCBmb3IgdnZj YyBwYXN0IHRoaXMgcG9pbnQgKi8KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dmNj X3BhcnNlX3NwcyhHZXRCaXRDb250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg VlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdW5zaWduZWQgaW50 IHNwc19tYXhfc3VibGF5ZXJzX21pbnVzMSwgc3BzX2xvZzJfY3R1X3NpemVfbWludXM1OworICAg IHVuc2lnbmVkIGludCBzcHNfc3VicGljX3NhbWVfc2l6ZV9mbGFnLCBzcHNfcGljX2hlaWdodF9t YXhfaW5fbHVtYV9zYW1wbGVzLAorICAgICAgICBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3Nh bXBsZXM7CisgICAgdW5zaWduZWQgaW50IHNwc19pbmRlcGVuZGVudF9zdWJwaWNzX2ZsYWc7CisK KyAgICBza2lwX2JpdHMoZ2IsIDgpOyAgLy8gc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkICYmIHNw c192aWRlb19wYXJhbWV0ZXJfc2V0X2lkCisgICAgc3BzX21heF9zdWJsYXllcnNfbWludXMxID0g Z2V0X2JpdHMoZ2IsIDMpOworCisgICAgLyoKKyAgICAgKiBudW1UZW1wb3JhbExheWVycyBncmVh dGVyIHRoYW4gMSBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIHRvIHdoaWNoIHRoaXMKKyAgICAg KiBjb25maWd1cmF0aW9uIHJlY29yZCBhcHBsaWVzIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUgYW5k IHRoZSBjb250YWluZWQKKyAgICAgKiBudW1iZXIgb2YgdGVtcG9yYWwgbGF5ZXJzIChhbHNvIHJl ZmVycmVkIHRvIGFzIHRlbXBvcmFsIHN1Yi1sYXllciBvcgorICAgICAqIHN1Yi1sYXllciBpbiBJ U08vSUVDIDIzMDA4LTIpIGlzIGVxdWFsIHRvIG51bVRlbXBvcmFsTGF5ZXJzLiBWYWx1ZSAxCisg ICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSBpcyBub3QgdGVtcG9yYWxseSBzY2FsYWJs ZS4gVmFsdWUgMCBpbmRpY2F0ZXMKKyAgICAgKiB0aGF0IGl0IGlzIHVua25vd24gd2hldGhlciB0 aGUgc3RyZWFtIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUuCisgICAgICovCisgICAgdnZjYy0+bnVt X3N1YmxheWVycyA9IEZGTUFYKHZ2Y2MtPm51bV9zdWJsYXllcnMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNwc19tYXhfc3VibGF5ZXJzX21pbnVzMSArIDEpOworCisgICAgdnZj Yy0+Y2hyb21hX2Zvcm1hdF9pZGMgPSBnZXRfYml0cyhnYiwgMik7CisgICAgc3BzX2xvZzJfY3R1 X3NpemVfbWludXM1ID0gZ2V0X2JpdHMoZ2IsIDIpOworCisgICAgaWYgKGdldF9iaXRzMShnYikp ICAgICAgICAgIC8vIHNwc19wdGxfZHBiX2hyZF9wYXJhbXNfcHJlc2VudF9mbGFnCisgICAgICAg IHZ2Y2NfcGFyc2VfcHRsKGdiLCB2dmNjLCAxLCBzcHNfbWF4X3N1YmxheWVyc19taW51czEpOwor CisgICAgc2tpcF9iaXRzMShnYik7ICAgICAgICAgICAgIC8vIHNwc19nZHJfZW5hYmxlZF9mbGFn CisgICAgaWYgKGdldF9iaXRzKGdiLCAxKSkgICAgICAgIC8vIHNwc19yZWZfcGljX3Jlc2FtcGxp bmdfZW5hYmxlZF9mbGFnCisgICAgICAgIHNraXBfYml0czEoZ2IpOyAgICAgICAgIC8vIHNwc19y ZXNfY2hhbmdlX2luX2NsdnNfYWxsb3dlZF9mbGFnCisKKyAgICBzcHNfcGljX3dpZHRoX21heF9p bl9sdW1hX3NhbXBsZXMgPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOworICAgIHZ2Y2MtPm1heF9w aWN0dXJlX3dpZHRoID0KKyAgICAgICAgRkZNQVgodnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgsIHNw c19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlcyk7CisgICAgc3BzX3BpY19oZWlnaHRfbWF4 X2luX2x1bWFfc2FtcGxlcyA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7CisgICAgdnZjYy0+bWF4 X3BpY3R1cmVfaGVpZ2h0ID0KKyAgICAgICAgRkZNQVgodnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0 LCBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGVzKTsKKworICAgIGlmIChnZXRfYml0 czEoZ2IpKSB7CisgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19jb25mX3dp bl9sZWZ0X29mZnNldAorICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29u Zl93aW5fcmlnaHRfb2Zmc2V0CisgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNw c19jb25mX3dpbl90b3Bfb2Zmc2V0CisgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8v IHNwc19jb25mX3dpbl9ib3R0b21fb2Zmc2V0CisgICAgfQorCisgICAgaWYgKGdldF9iaXRzMShn YikpIHsgICAgICAgIC8vIHNwc19zdWJwaWNfaW5mb19wcmVzZW50X2ZsYWcKKyAgICAgICAgY29u c3QgdW5zaWduZWQgaW50IHNwc19udW1fc3VicGljc19taW51czEgPSBnZXRfdWVfZ29sb21iX2xv bmcoZ2IpOworICAgICAgICBjb25zdCBpbnQgY3RiX2xvZzJfc2l6ZV95ID0gc3BzX2xvZzJfY3R1 X3NpemVfbWludXM1ICsgNTsKKyAgICAgICAgY29uc3QgaW50IGN0Yl9zaXplX3kgICAgICA9IDEg PDwgY3RiX2xvZzJfc2l6ZV95OworICAgICAgICBjb25zdCBpbnQgdG1wX3dpZHRoX3ZhbCAgID0g QVZfQ0VJTF9SU0hJRlQoc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGVzLCAgY3RiX2xv ZzJfc2l6ZV95KTsKKyAgICAgICAgY29uc3QgaW50IHRtcF9oZWlnaHRfdmFsICA9IEFWX0NFSUxf UlNISUZUKHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZXMsIGN0Yl9sb2cyX3NpemVf eSk7CisgICAgICAgIGNvbnN0IGludCB3bGVuICAgICAgICAgICAgPSBhdl9jZWlsX2xvZzIodG1w X3dpZHRoX3ZhbCk7CisgICAgICAgIGNvbnN0IGludCBobGVuICAgICAgICAgICAgPSBhdl9jZWls X2xvZzIodG1wX2hlaWdodF92YWwpOworICAgICAgICBpZiAoc3BzX251bV9zdWJwaWNzX21pbnVz MSA+IDApIHsgICAgICAgLy8gc3BzX251bV9zdWJwaWNzX21pbnVzMQorICAgICAgICAgICAgc3Bz X2luZGVwZW5kZW50X3N1YnBpY3NfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgICAgICBz cHNfc3VicGljX3NhbWVfc2l6ZV9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgfQorICAg ICAgICBmb3IgKGludCBpID0gMDsgc3BzX251bV9zdWJwaWNzX21pbnVzMSA+IDAgJiYgaSA8PSBz cHNfbnVtX3N1YnBpY3NfbWludXMxOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghc3BzX3N1YnBp Y19zYW1lX3NpemVfZmxhZyB8fCBpID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAg JiYgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGVzID4gY3RiX3NpemVfeSkKKyAgICAg ICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCB3bGVuKTsKKyAgICAgICAgICAgICAgICBpZiAo aSA+IDAgJiYgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlcyA+IGN0Yl9zaXplX3kp CisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgaGxlbik7CisgICAgICAgICAgICAg ICAgaWYgKGkgPCBzcHNfbnVtX3N1YnBpY3NfbWludXMxICYmIHNwc19waWNfd2lkdGhfbWF4X2lu X2x1bWFfc2FtcGxlcyA+IGN0Yl9zaXplX3kpCisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0 cyhnYiwgd2xlbik7CisgICAgICAgICAgICAgICAgaWYgKGkgPCBzcHNfbnVtX3N1YnBpY3NfbWlu dXMxICYmIHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZXMgPiBjdGJfc2l6ZV95KQor ICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIGhsZW4pOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKCFzcHNfaW5kZXBlbmRlbnRfc3VicGljc19mbGFnKSB7CisgICAgICAg ICAgICAgICAgc2tpcF9iaXRzKGdiLCAyKTsgICAgICAgLy8gc3BzX3N1YnBpY190cmVhdGVkX2Fz X3BpY19mbGFnICYmIHNwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc3VicGljX2VuYWJsZWRfZmxhZwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7 IC8vIHNwc19zdWJwaWNfaWRfbGVuX21pbnVzMQorICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkg eyAgICAvLyBzcHNfc3VicGljX2lkX21hcHBpbmdfZXhwbGljaXRseV9zaWduYWxsZWRfZmxhZwor ICAgICAgICAgICAgaWYgKGdldF9iaXRzMShnYikpICAvLyBzcHNfc3VicGljX2lkX21hcHBpbmdf cHJlc2VudF9mbGFnCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3BzX251 bV9zdWJwaWNzX21pbnVzMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0czEo Z2IpOyAgICAgLy8gc3BzX3N1YnBpY19pZFtpXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KKyAgICB2dmNjLT5iaXRfZGVwdGhfbWludXM4ID0gZ2V0X3VlX2dvbG9tYl9sb25n KGdiKTsKKworICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2dmNjIHBhc3QgdGhpcyBwb2ludCAq LworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ2Y2NfcGFyc2VfcHBzKEdldEJpdENv bnRleHQgKmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJh dGlvblJlY29yZCAqdnZjYykKK3sKKworICAgIC8vIE5vdGhpbmcgb2YgaW1wb3J0YW5jZSB0byBw YXJzZSBpbiBQUFMKKyAgICAvKiBub3RoaW5nIHVzZWZ1bCBmb3IgdnZjYyBwYXN0IHRoaXMgcG9p bnQgKi8KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmFsX3VuaXRfcGFyc2VfaGVh ZGVyKEdldEJpdENvbnRleHQgKmdiLCB1aW50OF90ICpuYWxfdHlwZSkKK3sKKyAgICAvKgorICAg ICAqIGZvcmJpZGRlbl96ZXJvX2JpdCAgICB1KDEpCisgICAgICogbnVoX3Jlc2VydmVkX3plcm9f Yml0IHUoMSkKKyAgICAgKiBudWhfbGF5ZXJfaWQgICAgICAgICAgdSg2KQorICAgICAqLworICAg IHNraXBfYml0cyhnYiwgOCk7CisgICAgKm5hbF90eXBlID0gZ2V0X2JpdHMoZ2IsIDUpOworCisg ICAgLyoKKyAgICAgKiBudWhfdGVtcG9yYWxfaWRfcGx1czEgdSgzKQorICAgICAqLworICAgIHNr aXBfYml0cyhnYiwgMyk7Cit9CisKK3N0YXRpYyBpbnQgdnZjY19hcnJheV9hZGRfbmFsX3VuaXQo dWludDhfdCAqbmFsX2J1ZiwgdWludDMyX3QgbmFsX3NpemUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQ4X3QgbmFsX3R5cGUsIGludCBwc19hcnJheV9jb21wbGV0ZW5l c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1 cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIGludCByZXQ7CisgICAgdWludDhfdCBpbmRleDsK KyAgICB1aW50MTZfdCBudW1fbmFsdXM7CisgICAgVlZDQ05BTFVuaXRBcnJheSAqYXJyYXk7CisK KyAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpbmRleCsr KQorICAgICAgICBpZiAodnZjYy0+YXJyYXlbaW5kZXhdLk5BTF91bml0X3R5cGUgPT0gbmFsX3R5 cGUpCisgICAgICAgICAgICBicmVhazsKKworICAgIGlmIChpbmRleCA+PSB2dmNjLT5udW1fb2Zf YXJyYXlzKSB7CisgICAgICAgIHVpbnQ4X3QgaTsKKworICAgICAgICByZXQgPQorICAgICAgICAg ICAgYXZfcmVhbGxvY3BfYXJyYXkoJnZ2Y2MtPmFycmF5LCBpbmRleCArIDEsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YoVlZDQ05BTFVuaXRBcnJheSkpOworICAgICAgICBp ZiAocmV0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgZm9yIChpID0g dnZjYy0+bnVtX29mX2FycmF5czsgaSA8PSBpbmRleDsgaSsrKQorICAgICAgICAgICAgbWVtc2V0 KCZ2dmNjLT5hcnJheVtpXSwgMCwgc2l6ZW9mKFZWQ0NOQUxVbml0QXJyYXkpKTsKKyAgICAgICAg dnZjYy0+bnVtX29mX2FycmF5cyA9IGluZGV4ICsgMTsKKyAgICB9CisKKyAgICBhcnJheSA9ICZ2 dmNjLT5hcnJheVtpbmRleF07CisgICAgbnVtX25hbHVzID0gYXJyYXktPm51bV9uYWx1czsKKwor ICAgIHJldCA9IGF2X3JlYWxsb2NwX2FycmF5KCZhcnJheS0+bmFsX3VuaXQsIG51bV9uYWx1cyAr IDEsIHNpemVvZih1aW50OF90ICopKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJu IHJldDsKKworICAgIHJldCA9CisgICAgICAgIGF2X3JlYWxsb2NwX2FycmF5KCZhcnJheS0+bmFs X3VuaXRfbGVuZ3RoLCBudW1fbmFsdXMgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplb2YodWludDE2X3QpKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsK KworICAgIGFycmF5LT5uYWxfdW5pdFtudW1fbmFsdXNdID0gbmFsX2J1ZjsKKyAgICBhcnJheS0+ bmFsX3VuaXRfbGVuZ3RoW251bV9uYWx1c10gPSBuYWxfc2l6ZTsKKyAgICBhcnJheS0+TkFMX3Vu aXRfdHlwZSA9IG5hbF90eXBlOworICAgIGFycmF5LT5udW1fbmFsdXMrKzsKKworICAgIC8qCisg ICAgKiBXaGVuIHRoZSBzYW1wbGUgZW50cnkgbmFtZSBpcyAndnZjMScsIHRoZSBmb2xsb3dpbmcg YXBwbGllczoKKyAgICAqIOKAoiBUaGUgdmFsdWUgb2YgYXJyYXlfY29tcGxldGVuZXNzIHNoYWxs IGJlIGVxdWFsIHRvIDEgZm9yIGFycmF5cyBvZiBTUFMsCisgICAgKiAgIGFuZCBQUFMgTkFMIHVu aXRzLgorICAgICog4oCiIElmIGEgVlZDIGJpdHN0cmVhbSBpbmNsdWRlcyBEQ0kgTkFMIHVuaXQo cyksIHRoZSB2YWx1ZSBvZgorICAgICogICBhcnJheV9jb21wbGV0ZW5lc3Mgc2hhbGwgYmUgZXF1 YWwgdG8gMSBmb3IgdGhlIGFycmF5IG9mIERDSSB1bml0cy4KKyAgICAqICAgT3RoZXJ3aXNlLCBO QUxfdW5pdF90eXBlIHNoYWxsIG5vdCBpbmRpY2F0ZSBEQ0kgTkFMIHVuaXRzLgorICAgICog4oCi IElmIGEgVlZDIGJpdHN0cmVhbSBpbmNsdWRlcyBWUFMgTkFMIHVuaXQocyksIHRoZSB2YWx1ZSBv ZgorICAgICogICBhcnJheV9jb21wbGV0ZW5lc3Mgc2hhbGwgYmUgZXF1YWwgdG8gMSBmb3IgdGhl IGFycmF5IG9mIFZQUyBOQUwgdW5pdHMuCisgICAgKiAgIE90aGVyd2lzZSwgTkFMX3VuaXRfdHlw ZSBzaGFsbCBub3QgaW5kaWNhdGUgVlBTIE5BTCB1bml0cy4KKyAgICAqIFdoZW4gdGhlIHZhbHVl IG9mIGFycmF5X2NvbXBsZXRlbmVzcyBpcyBlcXVhbCB0byAxIGZvciBhbiBhcnJheSBvZiBhCisg ICAgKiBwYXJ0aWN1bGFyIE5BTF91bml0X3R5cGUgdmFsdWUsIE5BTCB1bml0cyBvZiB0aGF0IE5B TF91bml0X3R5cGUgdmFsdWUKKyAgICAqIGNhbm5vdCBiZSB1cGRhdGVkIHdpdGhvdXQgY2F1c2lu ZyBhIGRpZmZlcmVudCBzYW1wbGUgZW50cnkgdG8gYmUgdXNlZC4KKyAgICAqIFdoZW4gdGhlIHNh bXBsZSBlbnRyeSBuYW1lIGlzICd2dmkxJywgdGhlIHZhbHVlIG9mIGFycmF5X2NvbXBsZXRlbmVz cworICAgICogb2YgYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgYXJyYXlzIHNoYWxsIGJl IGVxdWFsIHRvIDA6CisgICAgICDigKIgVGhlIGFycmF5IG9mIERDSSBOQUwgdW5pdHMsIGlmIHBy ZXNlbnQuCisgICAgICDigKIgVGhlIGFycmF5IG9mIFZQUyBOQUwgdW5pdHMsIGlmIHByZXNlbnQu CisgICAgICDigKIgVGhlIGFycmF5IG9mIFNQUyBOQUwgdW5pdHMKKyAgICAgIOKAoiBUaGUgYXJy YXkgb2YgUFBTIE5BTCB1bml0cy4KKyAgICAqLworICAgIGlmIChuYWxfdHlwZSA9PSBWVkNfVlBT X05VVCB8fCBuYWxfdHlwZSA9PSBWVkNfU1BTX05VVCB8fAorICAgICAgICBuYWxfdHlwZSA9PSBW VkNfUFBTX05VVCB8fCBuYWxfdHlwZSA9PSBWVkNfRENJX05VVCApCisgICAgICAgIGFycmF5LT5h cnJheV9jb21wbGV0ZW5lc3MgPSBwc19hcnJheV9jb21wbGV0ZW5lc3M7CisKKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGludCB2dmNjX2FkZF9uYWxfdW5pdCh1aW50OF90ICpuYWxfYnVmLCB1 aW50MzJfdCBuYWxfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBzX2Fy cmF5X2NvbXBsZXRlbmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2Rl ckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgR2V0 Qml0Q29udGV4dCBnYmM7CisgICAgdWludDhfdCBuYWxfdHlwZTsKKyAgICB1aW50OF90ICpyYnNw X2J1ZjsKKyAgICB1aW50MzJfdCByYnNwX3NpemU7CisKKyAgICByYnNwX2J1ZiA9IGZmX25hbF91 bml0X2V4dHJhY3RfcmJzcChuYWxfYnVmLCBuYWxfc2l6ZSwgJnJic3Bfc2l6ZSwgMik7CisgICAg aWYgKCFyYnNwX2J1ZikgeworICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAg IGdvdG8gZW5kOworICAgIH0KKworICAgIHJldCA9IGluaXRfZ2V0X2JpdHM4KCZnYmMsIHJic3Bf YnVmLCByYnNwX3NpemUpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKwor ICAgIG5hbF91bml0X3BhcnNlX2hlYWRlcigmZ2JjLCAmbmFsX3R5cGUpOworCisgICAgLyoKKyAg ICAgKiBOb3RlOiBvbmx5ICdkZWNsYXJhdGl2ZScgU0VJIG1lc3NhZ2VzIGFyZSBhbGxvd2VkIGlu CisgICAgICogdnZjYy4gUGVyaGFwcyB0aGUgU0VJIHBsYXlsb2FkIHR5cGUgc2hvdWxkIGJlIGNo ZWNrZWQKKyAgICAgKiBhbmQgbm9uLWRlY2xhcmF0aXZlIFNFSSBtZXNzYWdlcyBkaXNjYXJkZWQ/ CisgICAgICovCisgICAgc3dpdGNoIChuYWxfdHlwZSkgeworICAgIGNhc2UgVlZDX09QSV9OVVQ6 CisgICAgY2FzZSBWVkNfVlBTX05VVDoKKyAgICBjYXNlIFZWQ19TUFNfTlVUOgorICAgIGNhc2Ug VlZDX1BQU19OVVQ6CisgICAgY2FzZSBWVkNfUFJFRklYX1NFSV9OVVQ6CisgICAgY2FzZSBWVkNf U1VGRklYX1NFSV9OVVQ6CisgICAgICAgIHJldCA9IHZ2Y2NfYXJyYXlfYWRkX25hbF91bml0KG5h bF9idWYsIG5hbF9zaXplLCBuYWxfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHNfYXJyYXlfY29tcGxldGVuZXNzLCB2dmNjKTsKKyAgICAgICAgaWYgKHJldCA8 IDApCisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgZWxzZSBpZiAobmFsX3R5cGUgPT0g VlZDX1ZQU19OVVQpCisgICAgICAgICAgICByZXQgPSB2dmNjX3BhcnNlX3ZwcygmZ2JjLCB2dmNj KTsKKyAgICAgICAgZWxzZSBpZiAobmFsX3R5cGUgPT0gVlZDX1NQU19OVVQpCisgICAgICAgICAg ICByZXQgPSB2dmNjX3BhcnNlX3NwcygmZ2JjLCB2dmNjKTsKKyAgICAgICAgZWxzZSBpZiAobmFs X3R5cGUgPT0gVlZDX1BQU19OVVQpCisgICAgICAgICAgICByZXQgPSB2dmNjX3BhcnNlX3Bwcygm Z2JjLCB2dmNjKTsKKyAgICAgICAgZWxzZSBpZiAobmFsX3R5cGUgPT0gVlZDX09QSV9OVVQpIHsK KyAgICAgICAgICAgIC8vIG5vdCB5ZXQgc3VwcG9ydGVkCisgICAgICAgIH0KKyAgICAgICAgaWYg KHJldCA8IDApCisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm YXVsdDoKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgZ290byBl bmQ7CisgICAgfQorCisgIGVuZDoKKyAgICBhdl9mcmVlKHJic3BfYnVmKTsKKyAgICByZXR1cm4g cmV0OworfQorCitzdGF0aWMgdm9pZCB2dmNjX2luaXQoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25S ZWNvcmQgKnZ2Y2MpCit7CisgICAgbWVtc2V0KHZ2Y2MsIDAsIHNpemVvZihWVkNEZWNvZGVyQ29u ZmlndXJhdGlvblJlY29yZCkpOworICAgIHZ2Y2MtPmxlbmd0aFNpemVNaW51c09uZSA9IDM7ICAg ICAgIC8vIDQgYnl0ZXMKKworICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZv ID0gMTsKKworICAgIHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcgPSAxOworfQorCitzdGF0aWMgdm9p ZCB2dmNjX2Nsb3NlKFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAg IHVpbnQ4X3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBp KyspIHsKKyAgICAgICAgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzID0gMDsKKyAgICAgICAgYXZf ZnJlZXAoJnZ2Y2MtPmFycmF5W2ldLm5hbF91bml0KTsKKyAgICAgICAgYXZfZnJlZXAoJnZ2Y2Mt PmFycmF5W2ldLm5hbF91bml0X2xlbmd0aCk7CisgICAgfQorCisgICAgdnZjYy0+bnVtX29mX2Fy cmF5cyA9IDA7CisgICAgYXZfZnJlZXAoJnZ2Y2MtPmFycmF5KTsKK30KKworc3RhdGljIGludCB2 dmNjX3dyaXRlKEFWSU9Db250ZXh0ICpwYiwgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQg KnZ2Y2MpCit7CisgICAgdWludDhfdCBpOworICAgIHVpbnQxNl90IGosIHZwc19jb3VudCA9IDAs IHNwc19jb3VudCA9IDAsIHBwc19jb3VudCA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqYnVmID0g TlVMTDsKKyAgICAvKgorICAgICAqIEl0J3MgdW5jbGVhciBob3cgdG8gcHJvcGVybHkgY29tcHV0 ZSB0aGVzZSBmaWVsZHMsIHNvCisgICAgICogbGV0J3MgYWx3YXlzIHNldCB0aGVtIHRvIHZhbHVl cyBtZWFuaW5nICd1bnNwZWNpZmllZCcuCisgICAgICovCisgICAgdnZjYy0+YXZnX2ZyYW1lX3Jh dGUgPSAwOworICAgIHZ2Y2MtPmNvbnN0YW50X2ZyYW1lX3JhdGUgPSAxOworCisgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImxlbmd0aFNpemVNaW51c09uZTogICAg ICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5sZW5ndGhTaXpl TWludXNPbmUpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJw dGxfcHJlc2VudF9mbGFnOiAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAg ICAgICAgdnZjYy0+cHRsX3ByZXNlbnRfZmxhZyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19U UkFDRSwKKyAgICAgICAgICAgIm9sc19pZHg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAl IiBQUkl1MTYgIlxuIiwgdnZjYy0+b2xzX2lkeCk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19U UkFDRSwKKyAgICAgICAgICAgIm51bV9zdWJsYXllcnM6ICAgICAgICAgICAgICAgICAgICAgICAl IiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5udW1fc3VibGF5ZXJzKTsKKyAgICBhdl9s b2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAiY29uc3RhbnRfZnJhbWVfcmF0ZTog ICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPmNvbnN0YW50 X2ZyYW1lX3JhdGUpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAg ICJjaHJvbWFfZm9ybWF0X2lkYzogICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAg ICAgICAgICAgdnZjYy0+Y2hyb21hX2Zvcm1hdF9pZGMpOworCisgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19UUkFDRSwKKyAgICAgICAgICAgImJpdF9kZXB0aF9taW51czg6ICAgICAgICAgICAgICAg ICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5iaXRfZGVwdGhfbWludXM4KTsK KyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAibnVtX2J5dGVzX2Nv bnN0cmFpbnRfaW5mbzogICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2Mt PnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9H X1RSQUNFLAorICAgICAgICAgICAiZ2VuZXJhbF9wcm9maWxlX2lkYzogICAgICAgICAgICAgICAg ICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRj KTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAiZ2VuZXJhbF90 aWVyX2ZsYWc6ICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2 Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFD RSwKKyAgICAgICAgICAgImdlbmVyYWxfbGV2ZWxfaWRjOiAgICAgICAgICAgICAgICAgICAlIiBQ Ukl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMpOworICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJwdGxfZnJhbWVfb25seV9j b25zdHJhaW50X2ZsYWc6ICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRs LnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19UUkFDRSwKKyAgICAgICAgICAgInB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZzogICAgICAg ICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5wdGwucHRsX211bHRpbGF5ZXJfZW5h YmxlZF9mbGFnKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+cHRsLm51bV9ieXRlc19jb25z dHJhaW50X2luZm87IGkrKykgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAor ICAgICAgICAgICAgICAgImdlbmVyYWxfY29uc3RyYWludF9pbmZvWyVkXTogICAgICAgICAgJSIg UFJJdTggIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFp bnRfaW5mb1tpXSk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9zdWJs YXllcnMgLSAxOyBpKyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAg ICAgICAgICAgICAgICJwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnWyUiIFBSSXU4ICJd OiAgJSIgUFJJdTggIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfc3VibGF5 ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKTsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19U UkFDRSwKKyAgICAgICAgICAgICAgICJzdWJsYXllcl9sZXZlbF9pZGNbJSIgUFJJdTggIl06ICUi IFBSSXU4ICJcbiIsIGksCisgICAgICAgICAgICAgICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxf aWRjW2ldKTsKKyAgICB9CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAg ICAgICAibnVtX3N1Yl9wcm9maWxlczogICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIs CisgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBpKyspIHsKKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJnZW5lcmFsX3N1 Yl9wcm9maWxlX2lkY1slIiBQUkl1OCAiXTogICAgICAgICAlIiBQUkl4MzIgIlxuIiwgaSwKKyAg ICAgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXSk7CisgICAg fQorCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm1heF9waWN0 dXJlX3dpZHRoOiAgICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwKKyAgICAgICAgICAg dnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0Us CisgICAgICAgICAgICJtYXhfcGljdHVyZV9oZWlnaHQ6ICAgICAgICAgICAgICAgICAgJSIgUFJJ dTE2ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPm1heF9waWN0dXJlX2hlaWdodCk7CisgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImF2Z19mcmFtZV9yYXRlOiAgICAg ICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwKKyAgICAgICAgICAgdnZjYy0+YXZnX2Zy YW1lX3JhdGUpOworCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAg Im51bV9vZl9hcnJheXM6ICAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAg ICAgICAgICB2dmNjLT5udW1fb2ZfYXJyYXlzKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+ bnVtX29mX2FycmF5czsgaSsrKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0Us CisgICAgICAgICAgICAgICAiYXJyYXlfY29tcGxldGVuZXNzWyUiIFBSSXU4ICJdOiAgICAgICAg ICAgICAgICUiIFBSSXU4ICJcbiIsIGksCisgICAgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5h cnJheV9jb21wbGV0ZW5lc3MpOworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAor ICAgICAgICAgICAgICAgIk5BTF91bml0X3R5cGVbJSIgUFJJdTggIl06ICAgICAgICAgICAgICAg ICAgICAlIiBQUkl1OCAiXG4iLCBpLAorICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0uTkFM X3VuaXRfdHlwZSk7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAg ICAgICAgICAibnVtX25hbHVzWyUiIFBSSXU4ICJdOiAgICAgICAgICAgICAgICAgICAgICAgICUi IFBSSXUxNiAiXG4iLCBpLAorICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVz KTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsgaisr KQorICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAg ICAgICAibmFsX3VuaXRfbGVuZ3RoWyUiIFBSSXU4ICJdWyUiIFBSSXUxNiAiXTogICAgICAgICAg ICAgICAlIgorICAgICAgICAgICAgICAgICAgIFBSSXUxNiAiXG4iLCBpLCBqLCB2dmNjLT5hcnJh eVtpXS5uYWxfdW5pdF9sZW5ndGhbal0pOworICAgIH0KKworICAgIC8qCisgICAgICogV2UgbmVl ZCBhdCBsZWFzdCBvbmUgb2YgZWFjaDogVlBTIGFuZCBTUFMuCisgICAgICovCisgICAgZm9yIChp ID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkrKykKKyAgICAgICAgc3dpdGNoICh2dmNj LT5hcnJheVtpXS5OQUxfdW5pdF90eXBlKSB7CisgICAgICAgIGNhc2UgVlZDX1ZQU19OVVQ6Cisg ICAgICAgICAgICB2cHNfY291bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6CisgICAgICAgICAgICBzcHNf Y291bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6CisgICAgICAgICAgICBwcHNfY291bnQgKz0gdnZjYy0+ YXJyYXlbaV0ubnVtX25hbHVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgaWYgKHZwc19jb3VudCA+IFZW Q19NQVhfVlBTX0NPVU5UKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICBpZiAoIXNwc19jb3VudCB8fCBzcHNfY291bnQgPiBWVkNfTUFYX1NQU19DT1VOVCkKKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgaWYgKCFwcHNfY291bnQgfHwgcHBz X2NvdW50ID4gVlZDX01BWF9QUFNfQ09VTlQpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworCisgICAgLyogYml0KDUpIHJlc2VydmVkID0g4oCYMTExMTHigJliOworICAgICAg IHVuc2lnbmVkIGludCAoMikgTGVuZ3RoU2l6ZU1pbnVzT25lCisgICAgICAgdW5zaWduZWQgaW50 ICgxKSBwdGxfcHJlc2VudF9mbGFnICovCisgICAgYXZpb193OChwYiwgdnZjYy0+bGVuZ3RoU2l6 ZU1pbnVzT25lIDw8IDEgfCB2dmNjLT5wdGxfcHJlc2VudF9mbGFnIHwgMHhmOCk7CisKKyAgICBp ZiAodnZjYy0+cHRsX3ByZXNlbnRfZmxhZykgeworICAgICAgICAvKgorICAgICAgICAgKiB1bnNp Z25lZCBpbnQoOSkgb2xzX2lkeDsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDMpIG51bV9zdWJs YXllcnM7CisgICAgICAgICAqIHVuc2lnbmVkIGludCgyKSBjb25zdGFudF9mcmFtZV9yYXRlOwor ICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMikgY2hyb21hX2Zvcm1hdF9pZGM7ICAgICAqLworICAg ICAgICBhdmlvX3diMTYocGIsCisgICAgICAgICAgICAgICAgICB2dmNjLT5vbHNfaWR4IDw8IDcg fCB2dmNjLT5udW1fc3VibGF5ZXJzIDw8IDQgfCB2dmNjLT4KKyAgICAgICAgICAgICAgICAgIGNv bnN0YW50X2ZyYW1lX3JhdGUgPDwgMiB8IHZ2Y2MtPmNocm9tYV9mb3JtYXRfaWRjKTsKKworICAg ICAgICAvKiB1bnNpZ25lZCBpbnQoMykgYml0X2RlcHRoX21pbnVzODsKKyAgICAgICAgICAgYml0 KDUpIHJlc2VydmVkID0g4oCYMTExMTHigJliOyAqLworICAgICAgICBhdmlvX3c4KHBiLCB2dmNj LT5iaXRfZGVwdGhfbWludXM4IDw8IDUgfCAweDFmKTsKKworICAgICAgICAvL1ZWQ1BUTFJlY29y ZAorCisgICAgICAgIC8qIGJpdCgyKSByZXNlcnZlZCA9IOKAmDAw4oCZYjsKKyAgICAgICAgICAg dW5zaWduZWQgaW50ICg2KSBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvICovCisgICAgICAgIGF2 aW9fdzgocGIsIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvICYgMHgzZik7CisK KyAgICAgICAgLyogdW5zaWduZWQgaW50ICg3KSBnZW5lcmFsX3Byb2ZpbGVfaWRjCisgICAgICAg ICAgIHVuc2lnbmVkIGludCAoMSkgZ2VuZXJhbF90aWVyX2ZsYWcgKi8KKyAgICAgICAgYXZpb193 OChwYiwKKyAgICAgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYyA8PCAx IHwgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnKTsKKworICAgICAgICAvKiB1bnNpZ25lZCBp bnQgKDgpIGdlbmVyYWxfbGV2ZWxfaWRjICovCisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0 bC5nZW5lcmFsX2xldmVsX2lkYyk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdW5zaWduZWQg aW50ICgxKSBwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcKKyAgICAgICAgICogdW5zaWdu ZWQgaW50ICgxKSBwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcKKyAgICAgICAgICogdW5zaWdu ZWQgaW50ICg4Km51bV9ieXRlc19jb25zdHJhaW50X2luZm8gLTIpIGdlbmVyYWxfY29uc3RyYWlu dF9pbmZvICovCisgICAgICAgIGJ1ZiA9CisgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSBt YWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyk7CisgICAgICAg ICpidWYgPSB2dmNjLT5wdGwucHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnIDw8IHZ2Y2Mt PnB0bC4KKyAgICAgICAgICAgIG51bV9ieXRlc19jb25zdHJhaW50X2luZm8gKiA4IC0gMSB8IHZ2 Y2MtPnB0bC4KKyAgICAgICAgICAgIHB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZyA8PCB2dmNj LT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAqCisgICAgICAgICAgICA4IC0gMiB8ICp2 dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm8gPj4gMjsKKyAgICAgICAgYXZpb193cml0 ZShwYiwgYnVmLCB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyk7CisgICAgICAg IGZyZWUoYnVmKTsKKworICAgICAgICBpZiAodnZjYy0+bnVtX3N1YmxheWVycyA+IDEpIHsKKyAg ICAgICAgICAgIHVpbnQ4X3QgcHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ3MgPSAwOwor ICAgICAgICAgICAgZm9yIChpbnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAyOyBpID49IDA7 IGktLSkgeworICAgICAgICAgICAgICAgIHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdz ID0KKyAgICAgICAgICAgICAgICAgICAgKHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdz IDw8IDEgfCB2dmNjLT5wdGwuCisgICAgICAgICAgICAgICAgICAgICBwdGxfc3VibGF5ZXJfbGV2 ZWxfcHJlc2VudF9mbGFnW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF2aW9fdzgo cGIsIHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdzKTsKKyAgICAgICAgfQorCisgICAg ICAgIGZvciAoaW50IGkgPSB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMjsgaSA+PSAwOyBpLS0pIHsK KyAgICAgICAgICAgIGlmICh2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxh Z1tpXSkKKyAgICAgICAgICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2 ZWxfaWRjW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHVuc2lnbmVkIGludCg4KSBudW1f c3ViX3Byb2ZpbGVzOyAqLworICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5wdGwucHRsX251bV9z dWJfcHJvZmlsZXMpOworCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdnZjYy0+cHRsLnB0 bF9udW1fc3ViX3Byb2ZpbGVzOyBqKyspIHsKKyAgICAgICAgICAgIC8qIHVuc2lnbmVkIGludCgz MikgZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbal07ICovCisgICAgICAgICAgICBhdmlvX3diMzIo cGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tqXSk7CisgICAgICAgIH0KKwor ICAgICAgICAvL0VuZCBvZiBWdmNQVExSZWNvcmQKKworICAgICAgICAvKgorICAgICAgICAgKiB1 bnNpZ25lZCBpbnQoMTYpIG1heF9waWN0dXJlX3dpZHRoOyovCisgICAgICAgIGF2aW9fd2IxNihw YiwgdnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgpOworCisgICAgICAgIC8qCisgICAgICAgICAqIHVu c2lnbmVkIGludCgxNikgbWF4X3BpY3R1cmVfaGVpZ2h0OyovCisgICAgICAgIGF2aW9fd2IxNihw YiwgdnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0KTsKKworICAgICAgICAvKgorICAgICAgICAgKiB1 bnNpZ25lZCBpbnQoMTYpIGF2Z19mcmFtZV9yYXRlOyAqLworICAgICAgICBhdmlvX3diMTYocGIs IHZ2Y2MtPmF2Z19mcmFtZV9yYXRlKTsKKyAgICB9CisKKyAgICAvKiB1bnNpZ25lZCBpbnQoOCkg bnVtX29mX2FycmF5czsgKi8KKyAgICBhdmlvX3c4KHBiLCB2dmNjLT5udW1fb2ZfYXJyYXlzKTsK KworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpKyspIHsKKyAgICAg ICAgLyoKKyAgICAgICAgICogYml0KDEpIGFycmF5X2NvbXBsZXRlbmVzczsKKyAgICAgICAgICog dW5zaWduZWQgaW50KDIpIHJlc2VydmVkID0gMDsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDUp IE5BTF91bml0X3R5cGU7CisgICAgICAgICAqLworICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5h cnJheVtpXS5hcnJheV9jb21wbGV0ZW5lc3MgPDwgNyB8CisgICAgICAgICAgICAgICAgdnZjYy0+ YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSAmIDB4MWYpOworICAgICAgICAvKiB1bnNpZ25lZCBpbnQo MTYpIG51bV9uYWx1czsgKi8KKyAgICAgICAgaWYgKHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5 cGUgIT0gVlZDX0RDSV9OVVQgJiYKKyAgICAgICAgICAgIHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0 X3R5cGUgIT0gVlZDX09QSV9OVVQpCisgICAgICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmFy cmF5W2ldLm51bV9uYWx1cyk7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCB2dmNjLT5hcnJheVtp XS5udW1fbmFsdXM7IGorKykgeworICAgICAgICAgICAgLyogdW5zaWduZWQgaW50KDE2KSBuYWxf dW5pdF9sZW5ndGg7ICovCisgICAgICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmFycmF5W2ld Lm5hbF91bml0X2xlbmd0aFtqXSk7CisKKyAgICAgICAgICAgIC8qIGJpdCg4Km5hbF91bml0X2xl bmd0aCkgbmFsX3VuaXQ7ICovCisgICAgICAgICAgICBhdmlvX3dyaXRlKHBiLCB2dmNjLT5hcnJh eVtpXS5uYWxfdW5pdFtqXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0u bmFsX3VuaXRfbGVuZ3RoW2pdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOwor fQorCitpbnQgZmZfdnZjX2FubmV4YjJtcDQoQVZJT0NvbnRleHQgKnBiLCBjb25zdCB1aW50OF90 ICpidWZfaW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUsIGludCBmaWx0ZXJfcHMs IGludCAqcHNfY291bnQpCit7CisgICAgaW50IG51bV9wcyA9IDAsIHJldCA9IDA7CisgICAgdWlu dDhfdCAqYnVmLCAqZW5kLCAqc3RhcnQgPSBOVUxMOworCisgICAgaWYgKCFmaWx0ZXJfcHMpIHsK KyAgICAgICAgcmV0ID0gZmZfYXZjX3BhcnNlX25hbF91bml0cyhwYiwgYnVmX2luLCBzaXplKTsK KyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgcmV0ID0gZmZfYXZjX3BhcnNlX25hbF91 bml0c19idWYoYnVmX2luLCAmc3RhcnQsICZzaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAg ICAgZ290byBlbmQ7CisKKyAgICByZXQgPSAwOworICAgIGJ1ZiA9IHN0YXJ0OworICAgIGVuZCA9 IHN0YXJ0ICsgc2l6ZTsKKworICAgIHdoaWxlIChlbmQgLSBidWYgPiA0KSB7CisgICAgICAgIHVp bnQzMl90IGxlbiA9IEZGTUlOKEFWX1JCMzIoYnVmKSwgZW5kIC0gYnVmIC0gNCk7CisgICAgICAg IHVpbnQ4X3QgdHlwZSA9IChidWZbNV0gPj4gMyk7CisKKyAgICAgICAgYnVmICs9IDQ7CisKKyAg ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVlZDX1ZQU19OVVQ6CisgICAgICAg IGNhc2UgVlZDX1NQU19OVVQ6CisgICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6CisgICAgICAgICAg ICBudW1fcHMrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg ICAgICAgcmV0ICs9IDQgKyBsZW47CisgICAgICAgICAgICBhdmlvX3diMzIocGIsIGxlbik7Cisg ICAgICAgICAgICBhdmlvX3dyaXRlKHBiLCBidWYsIGxlbik7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgICAgICAgIGJ1ZiArPSBsZW47CisgICAgfQorCisgIGVuZDoKKyAgICBh dl9mcmVlKHN0YXJ0KTsKKyAgICBpZiAocHNfY291bnQpCisgICAgICAgICpwc19jb3VudCA9IG51 bV9wczsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgZmZfdnZjX2FubmV4YjJtcDRfYnVmKGNv bnN0IHVpbnQ4X3QgKmJ1Zl9pbiwgdWludDhfdCAqKmJ1Zl9vdXQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAqc2l6ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19jb3VudCkKK3sKKyAg ICBBVklPQ29udGV4dCAqcGI7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGF2aW9fb3Blbl9k eW5fYnVmKCZwYik7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAg ICByZXQgPSBmZl92dmNfYW5uZXhiMm1wNChwYiwgYnVmX2luLCAqc2l6ZSwgZmlsdGVyX3BzLCBw c19jb3VudCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgZmZpb19mcmVlX2R5bl9idWYo JnBiKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAqc2l6ZSA9IGF2aW9fY2xv c2VfZHluX2J1ZihwYiwgYnVmX291dCk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX2lz b21fd3JpdGVfdnZjYyhBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCisgICAg ICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzKQor eworICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIHZ2Y2M7CisgICAgdWludDhfdCAq YnVmLCAqZW5kLCAqc3RhcnQ7CisgICAgaW50IHJldDsKKworICAgIGlmIChzaXplIDwgNikgewor ICAgICAgICAvKiBXZSBjYW4ndCB3cml0ZSBhIHZhbGlkIHZ2Y2MgZnJvbSB0aGUgcHJvdmlkZWQg ZGF0YSAqLworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9IGVsc2Ug aWYgKCgqZGF0YSAmIDB4ZjgpID09IDB4ZjgpIHsKKyAgICAgICAgLyogRGF0YSBpcyBhbHJlYWR5 IHZ2Y2MtZm9ybWF0dGVkICovCisgICAgICAgIGF2aW9fd3JpdGUocGIsIGRhdGEsIHNpemUpOwor ICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKCEoQVZfUkIyNChkYXRhKSA9PSAxIHx8 IEFWX1JCMzIoZGF0YSkgPT0gMSkpIHsKKyAgICAgICAgLyogTm90IGEgdmFsaWQgQW5uZXggQiBz dGFydCBjb2RlIHByZWZpeCAqLworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK KyAgICB9CisKKyAgICByZXQgPSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzX2J1ZihkYXRhLCAmc3Rh cnQsICZzaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAg IHZ2Y2NfaW5pdCgmdnZjYyk7CisKKyAgICBidWYgPSBzdGFydDsKKyAgICBlbmQgPSBzdGFydCAr IHNpemU7CisKKyAgICB3aGlsZSAoZW5kIC0gYnVmID4gNCkgeworICAgICAgICB1aW50MzJfdCBs ZW4gPSBGRk1JTihBVl9SQjMyKGJ1ZiksIGVuZCAtIGJ1ZiAtIDQpOworICAgICAgICB1aW50OF90 IHR5cGUgPSAoYnVmWzVdID4+IDMpOworCisgICAgICAgIGJ1ZiArPSA0OworCisgICAgICAgIHN3 aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZWQ19PUElfTlVUOgorICAgICAgICBjYXNlIFZW Q19WUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19TUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19Q UFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19QUkVGSVhfU0VJX05VVDoKKyAgICAgICAgY2FzZSBW VkNfU1VGRklYX1NFSV9OVVQ6CisgICAgICAgICAgICByZXQgPSB2dmNjX2FkZF9uYWxfdW5pdChi dWYsIGxlbiwgcHNfYXJyYXlfY29tcGxldGVuZXNzLCAmdnZjYyk7CisgICAgICAgICAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg ICBidWYgKz0gbGVuOworICAgIH0KKworICAgIHJldCA9IHZ2Y2Nfd3JpdGUocGIsICZ2dmNjKTsK KworICBlbmQ6CisgICAgdnZjY19jbG9zZSgmdnZjYyk7CisgICAgYXZfZnJlZShzdGFydCk7Cisg ICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Z2Yy5oIGIvbGliYXZm b3JtYXQvdnZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTFjNzAw NTQwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L3Z2Yy5oCkBAIC0wLDAgKzEsOTkg QEAKKy8qCisgKiBILjI2NiAvIFZWQyBoZWxwZXIgZnVuY3Rpb25zIGZvciBtdXhlcnMKKyAqCisg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogaW50 ZXJuYWwgaGVhZGVyIGZvciBILjI2Ni9WVkMgKGRlKW11eGVyIHV0aWxpdGllcworICovCisKKyNp Zm5kZWYgQVZGT1JNQVRfVlZDX0gKKyNkZWZpbmUgQVZGT1JNQVRfVlZDX0gKKworI2luY2x1ZGUg PHN0ZGludC5oPgorI2luY2x1ZGUgImF2aW8uaCIKKworLyoqCisgKiBXcml0ZXMgQW5uZXggQiBm b3JtYXR0ZWQgSC4yNjYvVlZDIE5BTCB1bml0cyB0byB0aGUgcHJvdmlkZWQgQVZJT0NvbnRleHQu CisgKgorICogVGhlIE5BTCB1bml0cyBhcmUgY29udmVydGVkIHRvIGFuIE1QNC1jb21wYXRpYmxl IGZvcm1hdCAoc3RhcnQgY29kZSBwcmVmaXhlcworICogYXJlIHJlcGxhY2VkIGJ5IDQtYnl0ZSBz aXplIGZpZWxkcywgYXMgcGVyIElTTy9JRUMgMTQ0OTYtMTUpLgorICoKKyAqIElmIGZpbHRlcl9w cyBpcyBub24temVybywgYW55IFZWQyBwYXJhbWV0ZXIgc2V0cyBmb3VuZCBpbiB0aGUgaW5wdXQg d2lsbCBiZQorICogZGlzY2FyZGVkLCBhbmQgKnBzX2NvdW50IHdpbGwgYmUgc2V0IHRvIHRoZSBu dW1iZXIgb2YgZGlzY2FyZGVkIFBTIE5BTCB1bml0cy4KKyAqCisgKiBAcGFyYW0gcGIgYWRkcmVz cyBvZiB0aGUgQVZJT0NvbnRleHQgd2hlcmUgdGhlIGRhdGEgc2hhbGwgYmUgd3JpdHRlbgorICog QHBhcmFtIGJ1Zl9pbiBhZGRyZXNzIG9mIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0 YQorICogQHBhcmFtIHNpemUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBpbnB1dCBidWZmZXIKKyAq IEBwYXJhbSBmaWx0ZXJfcHMgd2hldGhlciB0byB3cml0ZSBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0 cyB0byB0aGUgb3V0cHV0ICgwKQorICogICAgICAgIG9yIHRvIGRpc2NhcmQgdGhlbSAobm9uLXpl cm8pCisgKiBAcGFyYW0gcHNfY291bnQgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgd2hlcmUgdGhl IG51bWJlciBvZiBkaXNjYXJkZWQKKyAqICAgICAgICBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyBz aGFsbCBiZSB3cml0dGVuLCBtYXkgYmUgTlVMTAorICogQHJldHVybiB0aGUgYW1vdW50IChpbiBi eXRlcykgb2YgZGF0YSB3cml0dGVuIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZQorICog ICAgICAgICB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IgY29kZSBpbiBjYXNlIG9m IGZhaWx1cmUKKyAqLworaW50IGZmX3Z2Y19hbm5leGIybXA0KEFWSU9Db250ZXh0ICpwYiwgY29u c3QgdWludDhfdCAqYnVmX2luLAorICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQg ZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KTsKKworLyoqCisgKiBXcml0ZXMgQW5uZXggQiBmb3Jt YXR0ZWQgSC4yNjYvVlZDIE5BTCB1bml0cyB0byBhIGRhdGEgYnVmZmVyLgorICoKKyAqIFRoZSBO QUwgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBhbiBNUDQtY29tcGF0aWJsZSBmb3JtYXQgKHN0YXJ0 IGNvZGUgcHJlZml4ZXMKKyAqIGFyZSByZXBsYWNlZCBieSA0LWJ5dGUgc2l6ZSBmaWVsZHMsIGFz IHBlciBJU08vSUVDIDE0NDk2LTE1KS4KKyAqCisgKiBJZiBmaWx0ZXJfcHMgaXMgbm9uLXplcm8s IGFueSBWVkMgcGFyYW1ldGVyIHNldHMgZm91bmQgaW4gdGhlIGlucHV0IHdpbGwgYmUKKyAqIGRp c2NhcmRlZCwgYW5kICpwc19jb3VudCB3aWxsIGJlIHNldCB0byB0aGUgbnVtYmVyIG9mIGRpc2Nh cmRlZCBQUyBOQUwgdW5pdHMuCisgKgorICogT24gc3VjY2VzcywgKnNpemUgaG9sZHMgdGhlIHNp emUgKGluIGJ5dGVzKSBvZiB0aGUgb3V0cHV0IGRhdGEgYnVmZmVyLgorICoKKyAqIEBwYXJhbSBi dWZfaW4gYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAqIEBw YXJhbSBzaXplIGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIGhvbGRpbmcgdGhlIHNpemUgKGluIGJ5 dGVzKSBvZiB0aGUgaW5wdXQKKyAqICAgICAgICBidWZmZXIgKG9uIGlucHV0KSBhbmQgb2YgdGhl IG91dHB1dCBidWZmZXIgKG9uIHN1Y2Nlc3MpCisgKiBAcGFyYW0gYnVmX291dCBvbiBzdWNjZXNz LCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBhZGRyZXNzIG9mCisgKiAgICAg ICAgdGhlIG91dHB1dCBidWZmZXIKKyAqIEBwYXJhbSBmaWx0ZXJfcHMgd2hldGhlciB0byB3cml0 ZSBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyB0byB0aGUgb3V0cHV0ICgwKQorICogICAgICAgIG9y IHRvIGRpc2NhcmQgdGhlbSAobm9uLXplcm8pCisgKiBAcGFyYW0gcHNfY291bnQgYWRkcmVzcyBv ZiB0aGUgdmFyaWFibGUgd2hlcmUgdGhlIG51bWJlciBvZiBkaXNjYXJkZWQKKyAqICAgICAgICBw YXJhbWV0ZXIgc2V0IE5BTCB1bml0cyBzaGFsbCBiZSB3cml0dGVuLCBtYXkgYmUgTlVMTAorICog QHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25k aW5nIHRvIGFuIEFWRVJST1IKKyAqICAgICAgICAgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAq IEBub3RlICpidWZfb3V0IHdpbGwgYmUgdHJlYXRlZCBhcyB1bmluaXRpYWxpemVkIG9uIGlucHV0 IGFuZCB3b24ndCBiZSBmcmVlZC4KKyAqLworaW50IGZmX3Z2Y19hbm5leGIybXA0X2J1Zihjb25z dCB1aW50OF90ICpidWZfaW4sIHVpbnQ4X3QgKipidWZfb3V0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKnNpemUsIGludCBmaWx0ZXJfcHMsIGludCAqcHNfY291bnQpOworCisvKioK KyAqIFdyaXRlcyBILjI2Ni9WVkMgZXh0cmFkYXRhIChwYXJhbWV0ZXIgc2V0cywgZGVjbGFyYXRp dmUgU0VJIE5BTCB1bml0cykgdG8KKyAqIHRoZSBwcm92aWRlZCBBVklPQ29udGV4dC4KKyAqCisg KiBJZiB0aGUgZXh0cmFkYXRhIGlzIEFubmV4IEIgZm9ybWF0LCBpdCBnZXRzIGNvbnZlcnRlZCB0 byB2dmNDIGZvcm1hdCBiZWZvcmUKKyAqIHdyaXRpbmcuCisgKgorICogQHBhcmFtIHBiIGFkZHJl c3Mgb2YgdGhlIEFWSU9Db250ZXh0IHdoZXJlIHRoZSB2dmNDIHNoYWxsIGJlIHdyaXR0ZW4KKyAq IEBwYXJhbSBkYXRhIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBkYXRhIG5lZWRl ZCB0byB3cml0ZSB0aGUgdnZjQworICogQHBhcmFtIHNpemUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRo ZSBkYXRhIGJ1ZmZlcgorICogQHBhcmFtIHBzX2FycmF5X2NvbXBsZXRlbmVzcyB3aGV0aGVyIGFs bCBwYXJhbWV0ZXIgc2V0cyBhcmUgaW4gdGhlIHZ2Y0MgKDEpCisgKiAgICAgICAgb3IgdGhlcmUg bWF5IGJlIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHNldHMgaW4gdGhlIGJpdHN0cmVhbSAoMCkKKyAq IEByZXR1cm4gPj0wIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNw b25kaW5nIHRvIGFuIEFWRVJST1IKKyAqICAgICAgICAgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUK KyAqLworaW50IGZmX2lzb21fd3JpdGVfdnZjYyhBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4 X3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQgcHNfYXJyYXlf Y29tcGxldGVuZXNzKTsKKworI2VuZGlmIC8qIEFWRk9STUFUX1ZWQ19IICovCi0tIAoyLjI1LjEK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1k ZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcu b3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQg bGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRo IHN1YmplY3QgInVuc3Vic2NyaWJlIi4K