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 E1D5F485C4 for ; Fri, 8 Dec 2023 12:25:17 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EEF2268D004; Fri, 8 Dec 2023 14:25:14 +0200 (EET) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2074.outbound.protection.outlook.com [40.92.91.74]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9A4BB68CFED for ; Fri, 8 Dec 2023 14:25:08 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZGztfPI3frW1UkHqTVFZd7P0QSYjGHwj7kobLQhPenBlXGPF7u5soItnXEPNG8U92vh34f6Lkmok8MoXv++ajxjOmyIXnrHL7/LAfy5TbfpA5eEBZbKvKD/SPDCGRt4xrFDcR1O6CPX07WoHc/SY70/1D9Q7XMcaKff1011GZnClRy32CoGSJ7K8BdDESQnknvWE20VENaCr7nQHjAVPJX97EB3ISGwE9XzAWoixJAwWwdLifvaRf/CtIDebmFkdPGYlZE3uHxn1iqF4Y8J7hjHGQj9kr5SqGLHO9aiZJRHauyOS5LC0Nhfov+St9tiZCp6NaoJ9gfvMHlHQKc8MSw== 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=z2YLdoWHHh9gUpGqxrmX+lRAbv1qiOhqrzJQHsPJNSE=; b=RyNSgfxR26n6SiUid/11ZPrRfN2Al3uTIEu1qdk+jWS1lV0jhabRbpnZrk0MW/MIHglZ3S4ybl+HBd1BKlHv90pUWKKpKU2VQwT/4LN1TedQtBA1qX88FGDAiWJv+WcU0DPaQpvWq0Aizi07t45FRQr8RvLH/AfXyP/yhVWmzm8frEyo6aruBnmBMaHC3Fdc6RavtLhUv9g3AKlujh6efRBbdGqrRB7Gndv9w7DMh/mh07OS6qVWC3tivWo7pJLVge8yPVKrzSx756uHoMk3BERxEYjHYmTAdvv5OK3qzoKTr8taMOqqIeZAW5zX6Tx/4wLiRTHHM3wOzFUUHdoNPw== 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=z2YLdoWHHh9gUpGqxrmX+lRAbv1qiOhqrzJQHsPJNSE=; b=FDbEVwYfLuG6dW2KCfmyHvwtytsxKWLOCRvJRDVtaeKHXQwfGlLPMTsA9pXUG1jvIu4sKKVP2CRBw2C01TgyilTvSaG8/uoboqFtcUGXE0j9olTFWQxg59F5/f60/nF5JQr9k8wRb2a07V8q2LgiK9O1YxCpEFmGHwE3MoJSDY6IxduxODaRqf+iiEtdRGM2PBKTXqXEWBJJULI2ZWmPgHyrVpSfFrGlsY0nGxWGpZqhXT5C/hhpqcKXSlBqWgwfVqR/rmgMJiaMqD+87nI8/cgTU9+2FwNC779UNTlWAn0c/eUJc7HCC0PlIJmC0fuAjVA8/3PURPTYDEZFM0dnRw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by PR3P250MB0132.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:177::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.28; Fri, 8 Dec 2023 12:25:06 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::f59c:9cff:a42d:bde]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::f59c:9cff:a42d:bde%3]) with mapi id 15.20.7068.028; Fri, 8 Dec 2023 12:25:06 +0000 Message-ID: Date: Fri, 8 Dec 2023 13:26:38 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20231205144519.7334-1-nuomi2021@gmail.com> From: Andreas Rheinhardt In-Reply-To: X-TMN: [x2RvJyBab5WFdKVLUMpJbWQCe0UZ1q90wSpB9NRAXV0=] X-ClientProxiedBy: ZR0P278CA0194.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::21) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <226eb60d-3b38-4585-822a-60137a62bba8@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|PR3P250MB0132:EE_ X-MS-Office365-Filtering-Correlation-Id: 754ba4c2-ca8c-45b8-9fdc-08dbf7e8b5d3 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BG1Bn6KMJgbzb17J8QeK/S9IIBV0wNK4z/z6OLlwuNKDPLwhRdeXsWRrvwq6g1BQKPBEGWUSHkg7HPpuwZeNmBbpQ6oc2u1FtVzbR2dQ7zNpHd2waTtIYf3PUGq0YZMCt8YX6+TO/DnsCdCUR3fsBoJayLOQKxO4fpwS0rbCoPCmdXNlMkklapp+pKK4vPUpS9djs0tBLNm4KgouhAN8PBDISEZm8ECIdvCHJiF/bcjD2Ky30Z8NZMFaah3tH2vCuE0v6KFbwWI/VZ/qGVN76Pn6MpB0Oi/Zu7BFmDtw19FZdPTDsQ/7U5N5L/qY7Er7DEOJRZCuxQwNMVovXQHUbZ3hkNepHpu7c7gaF9TpKgn0FdN4cuVaRhpqYZSLT20hPs/T8m3YvaqJkHqXWPs4stmr4Zf8jXgRwZgW4WfWYT2d76sOwkNaSftj49xi50rHUvQ5fcDcsZ/mjFhHGrL3g0FFocVtLhNEC9zGhJMqHxOwFEDqx0L5QE7yQ1wiz5ao2amuetTSZqyFmmxOBNJPrAmTuAqBXOJ3SKn6dgvAm1Ty9nqoSJJQ32Fv3ceZ14Pe X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZElyUzdZT2dFU1hTSUZ2aWkxanNtU3luclF2N3BuY0NweGFzYXpFemRSdmZm?= =?utf-8?B?RVY1OUhRZFQ1Z21Bb1pjMmUvUU1hc0dyS0c2NndMOWpubjJycEdOMkVCZldo?= =?utf-8?B?RnJONnR1eENMcm5BVUZhaDFQRHA5M3JzaUVxNTVyQWc0TGl2bTZkTlRMUjFQ?= =?utf-8?B?TnZBeVE2MkNGRHpsVlROdjg2RDdORFZOZk9VZnZBVnhoYTM0N2ZrS1ZENnRF?= =?utf-8?B?TDl3UUJWaE5wb2FNQ3BaWFdsOG81TGUyS296S0pVNE01U0lCd1ZWYzhhamRH?= =?utf-8?B?ZWVRSDVxTEw2djh2LzJRSnRDaE5sWC9vRHVCc09lL2VkSzMwU1ZCcEdMekY2?= =?utf-8?B?UW0zZUhNbEZHRjZaL01JakVhaFhkYnd2QWxoaHpia1R5dVhjNUVuNEtFQlk2?= =?utf-8?B?YVJid1FKbElCZWNndmk5aVdheUFFdGJwQTFLZHlESDJ0dGFnMTRRdjdUeWV5?= =?utf-8?B?UThNUTE0M25TSUcvOEJyS013MG11UVlUa1V0N205eS90eGZPWS91NDdQaGda?= =?utf-8?B?NjlwMDcyZW1nWjJmU1VNMlZ3Y1pPdkNCc2dTQU5jWVJDdTMvclppMDY2dTRW?= =?utf-8?B?WThxbUEzVkUvc3FVNGZKTDhWZDMzQ25SZWpnM0k0U1VIaU9wQ1B3Z0pobnFY?= =?utf-8?B?Y3BNQ2E4WmJONHZOa1dMb1NlK1NEcUV6ODN5U2crM2l0aDhyVmJ3dE91d2c1?= =?utf-8?B?R0pzTVlXQVZzcUpHd1ZzQXMxNHpWNmJuSDFnSUpPaEVMTTBJQ3IvSWtlM2pP?= =?utf-8?B?cisvdFFBa0RJcitDd0owQWhXZWs1RVZLS1haWmxRS2k3WXU1UjRhZEhiSWN6?= =?utf-8?B?bTU5Y0ovSmhieExCckpBT3hJV3VPNkFSeFpRdG96MDFnWExJdERMNG5panAz?= =?utf-8?B?WFJwNUVNMDF2MHp4WEFHYzNta2NiZStBekYrY3FKa0RRWC9uSVpRRXl2V0Fz?= =?utf-8?B?dHRrUTNIeW02b1RJenI0UjZVdWRWT3BodklodFYrRzdZS2ZRZ210R2hHL29P?= =?utf-8?B?LzBwWkJLalJvRTF1NFJXNWltdk5xa2RxQVZUaWl0VlFnSm1TU2JLYnRaVGxX?= =?utf-8?B?Nk91NkF2bG8xRG8ydGZJQkZ6bkVtY2Z1dUJTT3FPME1kOURQOTZqd3QyUUpo?= =?utf-8?B?WXlhSitnQmZMMDdza2drZmNKY2ZYT3RnY2ovMDNSZHFxVjBEMEQ4YXRpZTY5?= =?utf-8?B?bWh4dWpORXdSUWJjRzhvRVd4Q2xlcTB2d3ErNnNtdFpXSGU2UnBKbU10SERU?= =?utf-8?B?RmNDQTN0TmEvQUg4RXVyODlrUmRKUVRVTC9LMTY3cXhONElZanBMYjMraEMv?= =?utf-8?B?dGRSNDlHd3hrMjFTL3hLbXlFMnhZQVk4ZTY1aFVqb3UwMEVENWdPL2xNaGtW?= =?utf-8?B?c0IwclRLZmZuaTNiMkJNZEJXVXpKNzdUd2NzY2d2cmVKbHJQMUFJVTJtdmlO?= =?utf-8?B?TWJBdDBIY0hzZVpPS3F1ZXJTcS91djdOR1ppb3NPbFlTRlcrVzVWeHl1Lzcz?= =?utf-8?B?Ry8vWHBPSWExY1doZHFqM3J6ZVNyTi8wVnp0cGZHQk5oVWVUL0hlZGU4RHYr?= =?utf-8?B?aDBlcE9qYTVQaFc3aVppS3NNL2phbkhVNFdCOWg5M1Y5cklnRU9maXhVenVL?= =?utf-8?B?UXVRRUV2TUgwUGRUb09tSmlaTUY4MHh3eFhsL2picFdJM202czVtT1lRZmts?= =?utf-8?Q?MZhU4rSLNAPqIiFalqvC?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 754ba4c2-ca8c-45b8-9fdc-08dbf7e8b5d3 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Dec 2023 12:25:06.1297 (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: PR3P250MB0132 Subject: Re: [FFmpeg-devel] [PATCH v6 03/14] vvcdec: add parameter parser for sps, pps, ph, sh X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: TnVvIE1pOgo+IC0tLQo+ICBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSB8ICAgIDEgKwo+ICBsaWJh dmNvZGVjL3Z2Yy92dmNfcHMuYyB8IDExNDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gIGxpYmF2Y29kZWMvdnZjL3Z2Y19wcy5oIHwgIDI2MyArKysrKysrKysKPiAg bGliYXZjb2RlYy92dmMvdnZjZGVjLmggfCAgICA3ICsKPiAgNCBmaWxlcyBjaGFuZ2VkLCAxNDIw IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZjL3Z2Y19w cy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z2Yy92dmNfcHMuaAo+IAo+IGRp ZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMvdnZjL01ha2Vm aWxlCj4gaW5kZXggOGE1YzY2YWIxMy4uYjJiMTg3YWM2ZiAxMDA2NDQKPiAtLS0gYS9saWJhdmNv ZGVjL3Z2Yy9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2Y29kZWMvdnZjL01ha2VmaWxlCj4gQEAgLTMs MyArMyw0IEBAIGNsZWFuOjoKPiAgCj4gIE9CSlMtJChDT05GSUdfVlZDX0RFQ09ERVIpICAgICAg ICAgICs9ICB2dmMvdnZjZGVjLm8gICAgICAgICAgICBcCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2RhdGEubyAgICAgICAgICBcCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX3BzLm8gICAgICAgICAgICBc Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19wcy5jIGIvbGliYXZjb2RlYy92dmMv dnZjX3BzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLjI4NGU3 NDA2YzIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX3BzLmMKPiBA QCAtMCwwICsxLDExNDkgQEAKPiArLyoKPiArICogVlZDIHBhcmFtZXRlciBzZXQgcGFyc2VyCj4g KyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMyBOdW8gTWkKPiArICogQ29weXJpZ2h0IChDKSAy MDIyIFh1IE11Cj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoK PiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9u ZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9jYnNfaDI2 Ni5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxzLmgiCj4gKyNpbmNsdWRlICJsaWJh dmNvZGVjL3JlZnN0cnVjdC5oIgo+ICsjaW5jbHVkZSAidnZjX2RhdGEuaCIKPiArI2luY2x1ZGUg InZ2Y19wcy5oIgo+ICsjaW5jbHVkZSAidnZjZGVjLmgiCj4gKwo+ICtzdGF0aWMgaW50IHNwc19t YXBfcGl4ZWxfZm9ybWF0KFZWQ1NQUyAqc3BzLCB2b2lkICpsb2dfY3R4KQo+ICt7Cj4gKyAgICBj b25zdCBIMjY2UmF3U1BTICpyID0gc3BzLT5yOwo+ICsgICAgY29uc3QgQVZQaXhGbXREZXNjcmlw dG9yICpkZXNjOwo+ICsKPiArICAgIHN3aXRjaCAoc3BzLT5iaXRfZGVwdGgpIHsKPiArICAgIGNh c2UgODoKPiArICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDApIHNwcy0+ cGl4X2ZtdCA9IEFWX1BJWF9GTVRfR1JBWTg7Cj4gKyAgICAgICAgaWYgKHItPnNwc19jaHJvbWFf Zm9ybWF0X2lkYyA9PSAxKSBzcHMtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMFA7Cj4gKyAg ICAgICAgaWYgKHItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA9PSAyKSBzcHMtPnBpeF9mbXQgPSBB Vl9QSVhfRk1UX1lVVjQyMlA7Cj4gKyAgICAgICAgaWYgKHItPnNwc19jaHJvbWFfZm9ybWF0X2lk YyA9PSAzKSBzcHMtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQ0NFA7Cj4gKyAgICAgICBicmVh azsKPiArICAgIGNhc2UgMTA6Cj4gKyAgICAgICAgaWYgKHItPnNwc19jaHJvbWFfZm9ybWF0X2lk YyA9PSAwKSBzcHMtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX0dSQVkxMDsKPiArICAgICAgICBpZiAo ci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDEpIHNwcy0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRf WVVWNDIwUDEwOwo+ICsgICAgICAgIGlmIChyLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPT0gMikg c3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQMTA7Cj4gKyAgICAgICAgaWYgKHItPnNw c19jaHJvbWFfZm9ybWF0X2lkYyA9PSAzKSBzcHMtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQ0 NFAxMDsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgMTI6Cj4gKyAgICAgICAgaWYgKHIt PnNwc19jaHJvbWFfZm9ybWF0X2lkYyA9PSAwKSBzcHMtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX0dS QVkxMjsKPiArICAgICAgICBpZiAoci0+c3BzX2Nocm9tYV9mb3JtYXRfaWRjID09IDEpIHNwcy0+ cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEyOwo+ICsgICAgICAgIGlmIChyLT5zcHNfY2hy b21hX2Zvcm1hdF9pZGMgPT0gMikgc3BzLT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQMTI7 Cj4gKyAgICAgICAgaWYgKHItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA9PSAzKSBzcHMtPnBpeF9m bXQgPSBBVl9QSVhfRk1UX1lVVjQ0NFAxMjsKPiArICAgICAgICBicmVhazsKPiArICAgIGRlZmF1 bHQ6Cj4gKyAgICAgICAgYXZfbG9nKGxvZ19jdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAg ICAgICAgIlRoZSBmb2xsb3dpbmcgYml0LWRlcHRocyBhcmUgY3VycmVudGx5IHNwZWNpZmllZDog OCwgMTAsIDEyIGJpdHMsICIKPiArICAgICAgICAgICAgICAgImNocm9tYV9mb3JtYXRfaWRjIGlz ICVkLCBkZXB0aCBpcyAlZFxuIiwKPiArICAgICAgICAgICAgICAgci0+c3BzX2Nocm9tYV9mb3Jt YXRfaWRjLCBzcHMtPmJpdF9kZXB0aCk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoc3Bz LT5waXhfZm10KTsKPiArICAgIGlmICghZGVzYykKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihF SU5WQUwpOwo+ICsKPiArICAgIHNwcy0+aHNoaWZ0WzBdID0gc3BzLT52c2hpZnRbMF0gPSAwOwo+ ICsgICAgc3BzLT5oc2hpZnRbMl0gPSBzcHMtPmhzaGlmdFsxXSA9IGRlc2MtPmxvZzJfY2hyb21h X3c7Cj4gKyAgICBzcHMtPnZzaGlmdFsyXSA9IHNwcy0+dnNoaWZ0WzFdID0gZGVzYy0+bG9nMl9j aHJvbWFfaDsKPiArCj4gKyAgICBzcHMtPnBpeGVsX3NoaWZ0ID0gc3BzLT5iaXRfZGVwdGggPiA4 Owo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNwc19iaXRfZGVw dGgoVlZDU1BTICpzcHMsIHZvaWQgKmxvZ19jdHgpCj4gK3sKPiArICAgIGNvbnN0IEgyNjZSYXdT UFMgKnIgPSBzcHMtPnI7Cj4gKwo+ICsgICAgc3BzLT5iaXRfZGVwdGggPSByLT5zcHNfYml0ZGVw dGhfbWludXM4ICsgODsKPiArICAgIHNwcy0+cXBfYmRfb2Zmc2V0ID0gNiAqIChzcHMtPmJpdF9k ZXB0aCAtIDgpOwo+ICsgICAgc3BzLT5sb2cyX3RyYW5zZm9ybV9yYW5nZSA9Cj4gKyAgICAgICAg ci0+c3BzX2V4dGVuZGVkX3ByZWNpc2lvbl9mbGFnID8gRkZNQVgoMTUsIEZGTUlOKDIwLCBzcHMt PmJpdF9kZXB0aCArIDYpKSA6IDE1Owo+ICsgICAgcmV0dXJuIHNwc19tYXBfcGl4ZWxfZm9ybWF0 KHNwcywgbG9nX2N0eCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc3BzX2Nocm9tYV9xcF90YWJs ZShWVkNTUFMgKnNwcykKPiArewo+ICsgICAgY29uc3QgSDI2NlJhd1NQUyAqciA9IHNwcy0+cjsK PiArICAgIGNvbnN0IGludCBudW1fcXBfdGFibGVzID0gci0+c3BzX3NhbWVfcXBfdGFibGVfZm9y X2Nocm9tYV9mbGFnID8KPiArICAgICAgICAxIDogKHItPnNwc19qb2ludF9jYmNyX2VuYWJsZWRf ZmxhZyA/IDMgOiAyKTsKPiArCj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9xcF90YWJs ZXM7IGkrKykgewo+ICsgICAgICAgIGludCBudW1fcG9pbnRzX2luX3FwX3RhYmxlOwo+ICsgICAg ICAgIGludDhfdCBxcF9pbltWVkNfTUFYX1BPSU5UU19JTl9RUF9UQUJMRV0sIHFwX291dFtWVkNf TUFYX1BPSU5UU19JTl9RUF9UQUJMRV07Cj4gKyAgICAgICAgdW5zaWduZWQgaW50IGRlbHRhX3Fw X2luW1ZWQ19NQVhfUE9JTlRTX0lOX1FQX1RBQkxFXTsKPiArICAgICAgICBpbnQgb2ZmID0gc3Bz LT5xcF9iZF9vZmZzZXQ7Cj4gKwo+ICsgICAgICAgIG51bV9wb2ludHNfaW5fcXBfdGFibGUgPSBy LT5zcHNfbnVtX3BvaW50c19pbl9xcF90YWJsZV9taW51czFbaV0gKyAxOwo+ICsKPiArICAgICAg ICBxcF9vdXRbMF0gPSBxcF9pblswXSA9IHItPnNwc19xcF90YWJsZV9zdGFydF9taW51czI2W2ld ICsgMjY7Cj4gKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1fcG9pbnRzX2luX3FwX3Rh YmxlOyBqKysgKSB7Cj4gKyAgICAgICAgICAgIGRlbHRhX3FwX2luW2pdID0gci0+c3BzX2RlbHRh X3FwX2luX3ZhbF9taW51czFbaV1bal0gKyAxOwo+ICsgICAgICAgICAgICBxcF9pbltqKzFdID0g cXBfaW5bal0gKyBkZWx0YV9xcF9pbltqXTsKPiArICAgICAgICAgICAgcXBfb3V0W2orMV0gPSBx cF9vdXRbal0gKyAoci0+c3BzX2RlbHRhX3FwX2luX3ZhbF9taW51czFbaV1bal0gXiByLT5zcHNf ZGVsdGFfcXBfZGlmZl92YWxbaV1bal0pOwo+ICsgICAgICAgIH0KPiArICAgICAgICBzcHMtPmNo cm9tYV9xcF90YWJsZVtpXVtxcF9pblswXSArIG9mZl0gPSBxcF9vdXRbMF07Cj4gKyAgICAgICAg Zm9yIChpbnQgayA9IHFwX2luWzBdIC0gMSArIG9mZjsgayA+PSAwOyBrLS0pCj4gKyAgICAgICAg ICAgIHNwcy0+Y2hyb21hX3FwX3RhYmxlW2ldW2tdID0gYXZfY2xpcChzcHMtPmNocm9tYV9xcF90 YWJsZVtpXVtrKzFdLTEsIC1vZmYsIDYzKTsKPiArCj4gKyAgICAgICAgZm9yIChpbnQgaiAgPSAw OyBqIDwgbnVtX3BvaW50c19pbl9xcF90YWJsZTsgaisrKSB7Cj4gKyAgICAgICAgICAgIGludCBz aCA9IGRlbHRhX3FwX2luW2pdID4+IDE7Cj4gKyAgICAgICAgICAgIGZvciAoaW50IGsgPSBxcF9p bltqXSArIDEgKyBvZmYsIG0gPSAxOyBrIDw9IHFwX2luW2orMV0gKyBvZmY7IGsrKywgbSsrKSB7 Cj4gKyAgICAgICAgICAgICAgICBzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrXSA9IHNwcy0+Y2hy b21hX3FwX3RhYmxlW2ldW3FwX2luW2pdICsgb2ZmXSArCj4gKyAgICAgICAgICAgICAgICAgICAg KChxcF9vdXRbaisxXSAtIHFwX291dFtqXSkgKiBtICsgc2gpIC8gZGVsdGFfcXBfaW5bal07Cj4g KyAgICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICAgICAgZm9yIChpbnQgayA9IHFwX2lu W251bV9wb2ludHNfaW5fcXBfdGFibGVdICsgMSArIG9mZjsgayA8PSA2MyArIG9mZjsgaysrKQo+ ICsgICAgICAgICAgICBzcHMtPmNocm9tYV9xcF90YWJsZVtpXVtrXSAgPSBhdl9jbGlwKHNwcy0+ Y2hyb21hX3FwX3RhYmxlW2ldW2stMV0gKyAxLCAtc3BzLT5xcF9iZF9vZmZzZXQsIDYzKTsKPiAr ICAgIH0KPiArICAgIGlmIChyLT5zcHNfc2FtZV9xcF90YWJsZV9mb3JfY2hyb21hX2ZsYWcpIHsK PiArICAgICAgICBtZW1jcHkoJnNwcy0+Y2hyb21hX3FwX3RhYmxlWzFdLCAmc3BzLT5jaHJvbWFf cXBfdGFibGVbMF0sIHNpemVvZihzcHMtPmNocm9tYV9xcF90YWJsZVswXSkpOwo+ICsgICAgICAg IG1lbWNweSgmc3BzLT5jaHJvbWFfcXBfdGFibGVbMl0sICZzcHMtPmNocm9tYV9xcF90YWJsZVsw XSwgc2l6ZW9mKHNwcy0+Y2hyb21hX3FwX3RhYmxlWzBdKSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAg cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNwc19wb2MoVlZDU1BTICpzcHMpCj4g K3sKPiArICAgIHNwcy0+bWF4X3BpY19vcmRlcl9jbnRfbHNiID0gMSA8PCAoc3BzLT5yLT5zcHNf bG9nMl9tYXhfcGljX29yZGVyX2NudF9sc2JfbWludXM0ICsgNCk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHNwc19pbnRlcihWVkNTUFMgKnNwcykKPiArewo+ICsgICAgY29uc3QgSDI2NlJhd1NQ UyAqciA9IHNwcy0+cjsKPiArCj4gKyAgICBzcHMtPm1heF9udW1fbWVyZ2VfY2FuZCAgICAgPSA2 IC0gci0+c3BzX3NpeF9taW51c19tYXhfbnVtX21lcmdlX2NhbmQ7Cj4gKyAgICBzcHMtPm1heF9u dW1faWJjX21lcmdlX2NhbmQgPSA2IC0gci0+c3BzX3NpeF9taW51c19tYXhfbnVtX2liY19tZXJn ZV9jYW5kOwo+ICsKPiArICAgIGlmIChzcHMtPnItPnNwc19ncG1fZW5hYmxlZF9mbGFnKSB7Cj4g KyAgICAgICAgc3BzLT5tYXhfbnVtX2dwbV9tZXJnZV9jYW5kID0gMjsKPiArICAgICAgICBpZiAo c3BzLT5tYXhfbnVtX21lcmdlX2NhbmQgPj0gMykKPiArICAgICAgICAgICAgc3BzLT5tYXhfbnVt X2dwbV9tZXJnZV9jYW5kID0gc3BzLT5tYXhfbnVtX21lcmdlX2NhbmQgLSByLT5zcHNfbWF4X251 bV9tZXJnZV9jYW5kX21pbnVzX21heF9udW1fZ3BtX2NhbmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAg c3BzLT5sb2cyX3BhcmFsbGVsX21lcmdlX2xldmVsID0gci0+c3BzX2xvZzJfcGFyYWxsZWxfbWVy Z2VfbGV2ZWxfbWludXMyICsgMjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3BzX3BhcnRpdGlv bl9jb25zdHJhaW50cyhWVkNTUFMqIHNwcykKPiArewo+ICsgICAgY29uc3QgSDI2NlJhd1NQUyAq ciA9IHNwcy0+cjsKPiArCj4gKyAgICBzcHMtPmN0Yl9sb2cyX3NpemVfeSAgICA9IHItPnNwc19s b2cyX2N0dV9zaXplX21pbnVzNSArIDU7Cj4gKyAgICBzcHMtPmN0Yl9zaXplX3kgICAgICAgICA9 IDEgPDwgc3BzLT5jdGJfbG9nMl9zaXplX3k7Cj4gKyAgICBzcHMtPm1pbl9jYl9sb2cyX3NpemVf eSA9IHItPnNwc19sb2cyX21pbl9sdW1hX2NvZGluZ19ibG9ja19zaXplX21pbnVzMiArIDI7Cj4g KyAgICBzcHMtPm1pbl9jYl9zaXplX3kgICAgICA9IDEgPDwgc3BzLT5taW5fY2JfbG9nMl9zaXpl X3k7Cj4gKyAgICBzcHMtPm1heF90Yl9zaXplX3kgICAgICA9IDEgPDwgKHItPnNwc19tYXhfbHVt YV90cmFuc2Zvcm1fc2l6ZV82NF9mbGFnID8gNiA6IDUpOwo+ICsgICAgc3BzLT5tYXhfdHNfc2l6 ZSAgICAgICAgPSAxIDw8IChyLT5zcHNfbG9nMl90cmFuc2Zvcm1fc2tpcF9tYXhfc2l6ZV9taW51 czIgKyAyKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3BzX2xhZGYoVlZDU1BTKiBzcHMpCj4g K3sKPiArICAgIGNvbnN0IEgyNjZSYXdTUFMgKnIgPSBzcHMtPnI7Cj4gKwo+ICsgICAgaWYgKHIt PnNwc19sYWRmX2VuYWJsZWRfZmxhZykgewo+ICsgICAgICAgIHNwcy0+bnVtX2xhZGZfaW50ZXJ2 YWxzID0gci0+c3BzX251bV9sYWRmX2ludGVydmFsc19taW51czIgKyAyOwo+ICsgICAgICAgIHNw cy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFswXSA9IDA7Cj4gKyAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBzcHMtPm51bV9sYWRmX2ludGVydmFscyAtIDE7IGkrKykgewo+ICsgICAgICAg ICAgICBzcHMtPmxhZGZfaW50ZXJ2YWxfbG93ZXJfYm91bmRbaSArIDFdID0KPiArICAgICAgICAg ICAgICAgIHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFtpXSArIHItPnNwc19sYWRmX2Rl bHRhX3RocmVzaG9sZF9taW51czFbaV0gKyAxOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArfQo+ ICsKPiArc3RhdGljIGludCBzcHNfZGVyaXZlKFZWQ1NQUyAqc3BzLCB2b2lkICpsb2dfY3R4KQo+ ICt7Cj4gKyAgICBpbnQgcmV0Owo+ICsgICAgY29uc3QgSDI2NlJhd1NQUyAqciA9IHNwcy0+cjsK PiArCj4gKyAgICBzcHMtPndpZHRoICA9IHItPnNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2Ft cGxlczsKPiArICAgIHNwcy0+aGVpZ2h0ID0gci0+c3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFf c2FtcGxlczsKPiArCj4gKyAgICByZXQgPSBzcHNfYml0X2RlcHRoKHNwcywgbG9nX2N0eCk7Cj4g KyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgc3BzX3BvYyhz cHMpOwo+ICsgICAgc3BzX2ludGVyKHNwcyk7Cj4gKyAgICBzcHNfcGFydGl0aW9uX2NvbnN0cmFp bnRzKHNwcyk7Cj4gKyAgICBzcHNfbGFkZihzcHMpOwo+ICsgICAgaWYgKHItPnNwc19jaHJvbWFf Zm9ybWF0X2lkYyAhPSAwKQo+ICsgICAgICAgIHNwc19jaHJvbWFfcXBfdGFibGUoc3BzKTsKPiAr Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3BzX2ZyZWUoRkZSZWZT dHJ1Y3RPcGFxdWUgb3BhcXVlLCB2b2lkICpvYmopCj4gK3sKPiArICAgIFZWQ1NQUyAqc3BzID0g KFZWQ1NQUyopb2JqOwo+ICsgICAgZmZfcmVmc3RydWN0X3VucmVmKCZzcHMtPnIpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3QgVlZDU1BTICpzcHNfYWxsb2MoY29uc3QgSDI2NlJhd1NQUyAqcnNw cywgdm9pZCAqbG9nX2N0eCkKPiArewo+ICsgICAgaW50IHJldDsKPiArICAgIFZWQ1NQUyAqc3Bz ID0gZmZfcmVmc3RydWN0X2FsbG9jX2V4dChzaXplb2YoKnNwcyksIDAsIE5VTEwsIHNwc19mcmVl KTsKCk1pc3NpbmcgYWxsb2NhdGlvbiBjaGVjay4KCj4gKwo+ICsgICAgZmZfcmVmc3RydWN0X3Jl cGxhY2UoJnNwcy0+ciwgcnNwcyk7Cj4gKwo+ICsgICAgcmV0ID0gc3BzX2Rlcml2ZShzcHMsIGxv Z19jdHgpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsKPiAr ICAgIHJldHVybiBzcHM7Cj4gKwo+ICtmYWlsOgo+ICsgICAgZmZfcmVmc3RydWN0X3VucmVmKCZz cHMpOwo+ICsgICAgcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZGVjb2RlX3Nw cyhWVkNQYXJhbVNldHMgKnBzLCBjb25zdCBIMjY2UmF3U1BTICpyc3BzLCB2b2lkICpsb2dfY3R4 KQo+ICt7Cj4gKyAgICBjb25zdCBpbnQgc3BzX2lkICAgICAgICA9IHJzcHMtPnNwc19zZXFfcGFy YW1ldGVyX3NldF9pZDsKPiArICAgIGNvbnN0IFZWQ1NQUyAqb2xkX3NwcyAgID0gcHMtPnNwc19s aXN0W3Nwc19pZF07Cj4gKyAgICBjb25zdCBWVkNTUFMgKnNwczsKPiArCj4gKyAgICBpZiAob2xk X3NwcyAmJiBvbGRfc3BzLT5yID09IHJzcHMpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsg ICAgc3BzID0gc3BzX2FsbG9jKHJzcHMsIGxvZ19jdHgpOwo+ICsgICAgaWYgKCFzcHMpCj4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gKyAgICBmZl9yZWZzdHJ1Y3RfcmVw bGFjZSgmcHMtPnNwc19saXN0W3Nwc19pZF0sIHNwcyk7Cj4gKyAgICBmZl9yZWZzdHJ1Y3RfdW5y ZWYoJnNwcyk7CgpXZSBrbm93IHRoYXQgc3BzIGFuZCBwcy0+c3BzX2xpc3Rbc3BzX2lkXSBkb24n dCBjb2luY2lkZSwgc28gdGhlIGxhdHRlcgp3aWxsIGFsd2F5cyBiZSB1bnJlZmVyZW5jZWQuIFNv IHlvdSBtaWdodCBqdXN0IGFzIHdlbGwgdXNlIG9uZSBvZiB0aGVzZToKCiAgICBmZl9yZWZzdHJ1 Y3RfdW5yZWYoJnBzLT5zcHNfbGlzdFtzcHNfaWRdKTsKICAgIHBzLT5zcHNfbGlzdFtzcHNfaWRd ID0gc3BzOwoKT3I6CiAgICBGRlNXQVAoY29uc3QgVlZDU1BTICosIHNwcywgcHMtPnNwc19saXN0 W3Nwc19pZF0pOwogICAgZmZfcmVmc3RydWN0X3VucmVmKCZzcHMpOwoKPiArCj4gKyAgICByZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcHBzX2Nocm9tYV9xcF9vZmZzZXQoVlZDUFBT ICpwcHMpCj4gK3sKPiArICAgIHBwcy0+Y2hyb21hX3FwX29mZnNldFtDQiAtIDFdICAgPSBwcHMt PnItPnBwc19jYl9xcF9vZmZzZXQ7Cj4gKyAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRbQ1IgLSAx XSAgID0gcHBzLT5yLT5wcHNfY3JfcXBfb2Zmc2V0Owo+ICsgICAgcHBzLT5jaHJvbWFfcXBfb2Zm c2V0W0pDQkNSIC0gMV09IHBwcy0+ci0+cHBzX2pvaW50X2NiY3JfcXBfb2Zmc2V0X3ZhbHVlOwo+ ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspIHsKPiArICAgICAgICBwcHMtPmNocm9t YV9xcF9vZmZzZXRfbGlzdFtpXVtDQiAtIDFdICAgPSBwcHMtPnItPnBwc19jYl9xcF9vZmZzZXRf bGlzdFtpXTsKPiArICAgICAgICBwcHMtPmNocm9tYV9xcF9vZmZzZXRfbGlzdFtpXVtDUiAtIDFd ICAgPSBwcHMtPnItPnBwc19jcl9xcF9vZmZzZXRfbGlzdFtpXTsKPiArICAgICAgICBwcHMtPmNo cm9tYV9xcF9vZmZzZXRfbGlzdFtpXVtKQ0JDUiAtIDFdPSBwcHMtPnItPnBwc19qb2ludF9jYmNy X3FwX29mZnNldF9saXN0W2ldOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwcHNf d2lkdGhfaGVpZ2h0KFZWQ1BQUyAqcHBzLCBjb25zdCBWVkNTUFMgKnNwcykKPiArewo+ICsgICAg Y29uc3QgSDI2NlJhd1BQUyAqciA9IHBwcy0+cjsKPiArCj4gKyAgICBwcHMtPndpZHRoICAgICAg ICAgID0gci0+cHBzX3BpY193aWR0aF9pbl9sdW1hX3NhbXBsZXM7Cj4gKyAgICBwcHMtPmhlaWdo dCAgICAgICAgID0gci0+cHBzX3BpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzOwo+ICsKPiArICAg IHBwcy0+Y3RiX3dpZHRoICAgICAgPSBBVl9DRUlMX1JTSElGVChwcHMtPndpZHRoLCAgc3BzLT5j dGJfbG9nMl9zaXplX3kpOwo+ICsgICAgcHBzLT5jdGJfaGVpZ2h0ICAgICA9IEFWX0NFSUxfUlNI SUZUKHBwcy0+aGVpZ2h0LCBzcHMtPmN0Yl9sb2cyX3NpemVfeSk7Cj4gKyAgICBwcHMtPmN0Yl9j b3VudCAgICAgID0gcHBzLT5jdGJfd2lkdGggKiBwcHMtPmN0Yl9oZWlnaHQ7Cj4gKwo+ICsgICAg cHBzLT5taW5fY2Jfd2lkdGggICA9IHBwcy0+d2lkdGggID4+IHNwcy0+bWluX2NiX2xvZzJfc2l6 ZV95Owo+ICsgICAgcHBzLT5taW5fY2JfaGVpZ2h0ICA9IHBwcy0+aGVpZ2h0ID4+IHNwcy0+bWlu X2NiX2xvZzJfc2l6ZV95Owo+ICsKPiArICAgIHBwcy0+bWluX3B1X3dpZHRoICAgPSBwcHMtPndp ZHRoICA+PiBNSU5fUFVfTE9HMjsKPiArICAgIHBwcy0+bWluX3B1X2hlaWdodCAgPSBwcHMtPmhl aWdodCA+PiBNSU5fUFVfTE9HMjsKPiArICAgIHBwcy0+bWluX3R1X3dpZHRoICAgPSBwcHMtPndp ZHRoICA+PiBNSU5fVFVfTE9HMjsKPiArICAgIHBwcy0+bWluX3R1X2hlaWdodCAgPSBwcHMtPmhl aWdodCA+PiBNSU5fVFVfTE9HMjsKPiArCj4gKyAgICBwcHMtPndpZHRoMzIgICAgICAgID0gQVZf Q0VJTF9SU0hJRlQocHBzLT53aWR0aCwgIDUpOwo+ICsgICAgcHBzLT5oZWlnaHQzMiAgICAgICA9 IEFWX0NFSUxfUlNISUZUKHBwcy0+aGVpZ2h0LCA1KTsKPiArICAgIHBwcy0+d2lkdGg2NCAgICAg ICAgPSBBVl9DRUlMX1JTSElGVChwcHMtPndpZHRoLCAgNik7Cj4gKyAgICBwcHMtPmhlaWdodDY0 ICAgICAgID0gQVZfQ0VJTF9SU0hJRlQocHBzLT5oZWlnaHQsIDYpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IHBwc19iZChWVkNQUFMgKnBwcykKPiArewo+ICsgICAgY29uc3QgSDI2NlJhd1BQUyAq ciA9IHBwcy0+cjsKPiArCj4gKyAgICBwcHMtPmNvbF9iZCAgICAgICAgPSBhdl9jYWxsb2Moci0+ bnVtX3RpbGVfY29sdW1ucyAgKyAxLCBzaXplb2YoKnBwcy0+Y29sX2JkKSk7Cj4gKyAgICBwcHMt PnJvd19iZCAgICAgICAgPSBhdl9jYWxsb2Moci0+bnVtX3RpbGVfcm93cyAgKyAxLCAgICBzaXpl b2YoKnBwcy0+cm93X2JkKSk7Cj4gKyAgICBwcHMtPmN0Yl90b19jb2xfYmQgPSBhdl9jYWxsb2Mo cHBzLT5jdGJfd2lkdGggICsgMSwgICAgICBzaXplb2YoKnBwcy0+Y3RiX3RvX2NvbF9iZCkpOwo+ ICsgICAgcHBzLT5jdGJfdG9fcm93X2JkID0gYXZfY2FsbG9jKHBwcy0+Y3RiX2hlaWdodCArIDEs ICAgICAgc2l6ZW9mKCpwcHMtPmN0Yl90b19jb2xfYmQpKTsKPiArICAgIGlmICghcHBzLT5jb2xf YmQgfHwgIXBwcy0+cm93X2JkIHx8ICFwcHMtPmN0Yl90b19jb2xfYmQgfHwgIXBwcy0+Y3RiX3Rv X3Jvd19iZCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsKPiArICAgIGZv ciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IHItPm51bV90aWxlX2NvbHVtbnM7IGkrKykgewo+ICsg ICAgICAgIHBwcy0+Y29sX2JkW2ldID0gajsKPiArICAgICAgICBqICs9IHItPmNvbF93aWR0aF92 YWxbaV07Cj4gKyAgICAgICAgZm9yIChpbnQgayA9IHBwcy0+Y29sX2JkW2ldOyBrIDwgajsgaysr KQo+ICsgICAgICAgICAgICBwcHMtPmN0Yl90b19jb2xfYmRba10gPSBwcHMtPmNvbF9iZFtpXTsK PiArICAgIH0KPiArCj4gKyAgICBmb3IgKGludCBpID0gMCwgaiA9IDA7IGkgPCByLT5udW1fdGls ZV9yb3dzOyBpKyspIHsKPiArICAgICAgICBwcHMtPnJvd19iZFtpXSA9IGo7Cj4gKyAgICAgICAg aiArPSByLT5yb3dfaGVpZ2h0X3ZhbFtpXTsKPiArICAgICAgICBmb3IgKGludCBrID0gcHBzLT5y b3dfYmRbaV07IGsgPCBqOyBrKyspCj4gKyAgICAgICAgICAgIHBwcy0+Y3RiX3RvX3Jvd19iZFtr XSA9IHBwcy0+cm93X2JkW2ldOwo+ICsgICAgfQo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4g Kwo+ICtzdGF0aWMgaW50IG5leHRfdGlsZV9pZHgoaW50IHRpbGVfaWR4LCBjb25zdCBpbnQgaSwg Y29uc3QgSDI2NlJhd1BQUyAqcikKPiArewo+ICsgICAgaWYgKHItPnBwc190aWxlX2lkeF9kZWx0 YV9wcmVzZW50X2ZsYWcpIHsKPiArICAgICAgICB0aWxlX2lkeCArPSByLT5wcHNfdGlsZV9pZHhf ZGVsdGFfdmFsW2ldOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICB0aWxlX2lkeCArPSByLT5w cHNfc2xpY2Vfd2lkdGhfaW5fdGlsZXNfbWludXMxW2ldICsgMTsKPiArICAgICAgICBpZiAodGls ZV9pZHggJSByLT5udW1fdGlsZV9jb2x1bW5zID09IDApCj4gKyAgICAgICAgICAgIHRpbGVfaWR4 ICs9IChyLT5wcHNfc2xpY2VfaGVpZ2h0X2luX3RpbGVzX21pbnVzMVtpXSkgKiByLT5udW1fdGls ZV9jb2x1bW5zOwo+ICsgICAgfQo+ICsgICAgcmV0dXJuIHRpbGVfaWR4Owo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCB0aWxlX3h5KGludCAqdGlsZV94LCBpbnQgKnRpbGVfeSwgY29uc3QgaW50IHRp bGVfaWR4LCBjb25zdCBWVkNQUFMgKnBwcykKPiArewo+ICsgICAgKnRpbGVfeCA9IHRpbGVfaWR4 ICUgcHBzLT5yLT5udW1fdGlsZV9jb2x1bW5zOwo+ICsgICAgKnRpbGVfeSA9IHRpbGVfaWR4IC8g cHBzLT5yLT5udW1fdGlsZV9jb2x1bW5zOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjdHVfeHko aW50ICpjdHVfeCwgaW50ICpjdHVfeSwgY29uc3QgaW50IHRpbGVfeCwgY29uc3QgaW50IHRpbGVf eSwgY29uc3QgVlZDUFBTICpwcHMpCj4gK3sKPiArICAgICpjdHVfeCA9IHBwcy0+Y29sX2JkW3Rp bGVfeF07Cj4gKyAgICAqY3R1X3kgPSBwcHMtPnJvd19iZFt0aWxlX3ldOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGN0dV9ycyhjb25zdCBpbnQgY3R1X3gsIGNvbnN0IGludCBjdHVfeSwgY29uc3Qg VlZDUFBTICpwcHMpCj4gK3sKPiArICAgIHJldHVybiBwcHMtPmN0Yl93aWR0aCAqIGN0dV95ICsg Y3R1X3g7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcHBzX2FkZF9jdHVzKFZWQ1BQUyAqcHBzLCBp bnQgKm9mZiwgY29uc3QgaW50IGN0dV94LCBjb25zdCBpbnQgY3R1X3ksCj4gKyAgICBjb25zdCBp bnQgdywgY29uc3QgaW50IGgpCj4gK3sKPiArICAgIGludCBzdGFydCA9ICpvZmY7Cj4gKyAgICBm b3IgKGludCB5ID0gMDsgeSA8IGg7IHkrKykgewo+ICsgICAgICAgIGZvciAoaW50IHggPSAwOyB4 IDwgdzsgeCsrKSB7Cj4gKyAgICAgICAgICAgIHBwcy0+Y3RiX2FkZHJfaW5fc2xpY2VbKm9mZl0g PSBjdHVfcnMoY3R1X3ggKyB4LCBjdHVfeSArIHksIHBwcyk7Cj4gKyAgICAgICAgICAgICgqb2Zm KSsrOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIHJldHVybiAqb2ZmIC0gc3RhcnQ7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgcHBzX29uZV90aWxlX3NsaWNlcyhWVkNQUFMgKnBwcywgY29u c3QgaW50IHRpbGVfaWR4LCBpbnQgaSwgaW50ICpvZmYpCj4gK3sKPiArICAgIGNvbnN0IEgyNjZS YXdQUFMgKnIgPSBwcHMtPnI7Cj4gKyAgICBpbnQgY3R1X3gsIGN0dV95LCBjdHVfeV9lbmQsIHRp bGVfeCwgdGlsZV95Owo+ICsKPiArICAgIHRpbGVfeHkoJnRpbGVfeCwgJnRpbGVfeSwgdGlsZV9p ZHgsIHBwcyk7Cj4gKyAgICBjdHVfeHkoJmN0dV94LCAmY3R1X3ksIHRpbGVfeCwgdGlsZV95LCBw cHMpOwo+ICsgICAgY3R1X3lfZW5kID0gY3R1X3kgKyByLT5yb3dfaGVpZ2h0X3ZhbFt0aWxlX3ld Owo+ICsgICAgd2hpbGUgKGN0dV95IDwgY3R1X3lfZW5kKSB7Cj4gKyAgICAgICAgcHBzLT5zbGlj ZV9zdGFydF9vZmZzZXRbaV0gPSAqb2ZmOwo+ICsgICAgICAgIHBwcy0+bnVtX2N0dXNfaW5fc2xp Y2VbaV0gPSBwcHNfYWRkX2N0dXMocHBzLCBvZmYsIGN0dV94LCBjdHVfeSwKPiArICAgICAgICAg ICAgci0+Y29sX3dpZHRoX3ZhbFt0aWxlX3hdLCByLT5zbGljZV9oZWlnaHRfaW5fY3R1c1tpXSk7 Cj4gKyAgICAgICAgY3R1X3kgKz0gci0+c2xpY2VfaGVpZ2h0X2luX2N0dXNbaSsrXTsKPiArICAg IH0KPiArICAgIGktLTsKPiArICAgIHJldHVybiBpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBw cHNfbXVsdGlfdGlsZXNfc2xpY2UoVlZDUFBTICpwcHMsIGNvbnN0IGludCB0aWxlX2lkeCwgY29u c3QgaW50IGksIGludCAqb2ZmKQo+ICt7Cj4gKyAgICBjb25zdCBIMjY2UmF3UFBTICpyID0gcHBz LT5yOwo+ICsgICAgaW50IGN0dV94LCBjdHVfeSx0aWxlX3gsIHRpbGVfeTsKPiArCj4gKyAgICB0 aWxlX3h5KCZ0aWxlX3gsICZ0aWxlX3ksIHRpbGVfaWR4LCBwcHMpOwo+ICsgICAgcHBzLT5zbGlj ZV9zdGFydF9vZmZzZXRbaV0gPSAqb2ZmOwo+ICsgICAgcHBzLT5udW1fY3R1c19pbl9zbGljZVtp XSA9IDA7Cj4gKyAgICBmb3IgKGludCB0eSA9IHRpbGVfeTsgdHkgPD0gdGlsZV95ICsgci0+cHBz X3NsaWNlX2hlaWdodF9pbl90aWxlc19taW51czFbaV07IHR5KyspIHsKPiArICAgICAgICBmb3Ig KGludCB0eCA9IHRpbGVfeDsgdHggPD0gdGlsZV94ICsgci0+cHBzX3NsaWNlX3dpZHRoX2luX3Rp bGVzX21pbnVzMVtpXTsgdHgrKykgewo+ICsgICAgICAgICAgICBjdHVfeHkoJmN0dV94LCAmY3R1 X3ksIHR4LCB0eSwgcHBzKTsKPiArICAgICAgICAgICAgcHBzLT5udW1fY3R1c19pbl9zbGljZVtp XSArPSBwcHNfYWRkX2N0dXMocHBzLCBvZmYsIGN0dV94LCBjdHVfeSwKPiArICAgICAgICAgICAg ICAgIHItPmNvbF93aWR0aF92YWxbdHhdLCByLT5yb3dfaGVpZ2h0X3ZhbFt0eV0pOwo+ICsgICAg ICAgIH0KPiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcHBzX3JlY3Rfc2xpY2UoVlZD UFBTKiBwcHMpCj4gK3sKPiArICAgIGNvbnN0IEgyNjZSYXdQUFMqIHIgPSBwcHMtPnI7Cj4gKyAg ICBpbnQgdGlsZV9pZHggPSAwLCBvZmYgPSAwOwo+ICsKPiArICAgIGZvciAoaW50IGkgPSAwOyBp IDwgci0+cHBzX251bV9zbGljZXNfaW5fcGljX21pbnVzMSArIDE7IGkrKykgewo+ICsgICAgICAg IGlmICghci0+cHBzX3NsaWNlX3dpZHRoX2luX3RpbGVzX21pbnVzMVtpXSAmJgo+ICsgICAgICAg ICAgICAhci0+cHBzX3NsaWNlX2hlaWdodF9pbl90aWxlc19taW51czFbaV0pIHsKPiArICAgICAg ICAgICAgaSA9IHBwc19vbmVfdGlsZV9zbGljZXMocHBzLCB0aWxlX2lkeCwgaSwgJm9mZik7Cj4g KyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgcHBzX211bHRpX3RpbGVzX3NsaWNlKHBw cywgdGlsZV9pZHgsIGksICZvZmYpOwo+ICsKPiArICAgICAgICB9Cj4gKyAgICAgICAgdGlsZV9p ZHggPSBuZXh0X3RpbGVfaWR4KHRpbGVfaWR4LCBpLCByKTsKPiArICAgIH0KPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgcHBzX25vX3JlY3Rfc2xpY2UoVlZDUFBTKiBwcHMpCj4gK3sKPiArICAgIGNv bnN0IEgyNjZSYXdQUFMqIHIgPSBwcHMtPnI7Cj4gKyAgICBpbnQgY3R1X3gsIGN0dV95LCBvZmYg PSAwOwo+ICsKPiArICAgIGZvciAoaW50IHRpbGVfeSA9IDA7IHRpbGVfeSA8IHItPm51bV90aWxl X3Jvd3M7IHRpbGVfeSsrKSB7Cj4gKyAgICAgICAgZm9yIChpbnQgdGlsZV94ID0gMDsgdGlsZV94 IDwgci0+bnVtX3RpbGVfY29sdW1uczsgdGlsZV94KyspIHsKPiArICAgICAgICAgICAgY3R1X3h5 KCZjdHVfeCwgJmN0dV95LCB0aWxlX3gsIHRpbGVfeSwgcHBzKTsKPiArICAgICAgICAgICAgcHBz X2FkZF9jdHVzKHBwcywgJm9mZiwgY3R1X3gsIGN0dV95LCByLT5jb2xfd2lkdGhfdmFsW3RpbGVf eF0sIHItPnJvd19oZWlnaHRfdmFsW3RpbGVfeV0pOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiAr fQo+ICsKPiArc3RhdGljIGludCBwcHNfc2xpY2VfbWFwKFZWQ1BQUyAqcHBzKQo+ICt7Cj4gKyAg ICBwcHMtPmN0Yl9hZGRyX2luX3NsaWNlID0gYXZfY2FsbG9jKHBwcy0+Y3RiX2NvdW50LCBzaXpl b2YoKnBwcy0+Y3RiX2FkZHJfaW5fc2xpY2UpKTsKPiArICAgIGlmICghcHBzLT5jdGJfYWRkcl9p bl9zbGljZSkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsKPiArICAgIGlm IChwcHMtPnItPnBwc19yZWN0X3NsaWNlX2ZsYWcpCj4gKyAgICAgICAgcHBzX3JlY3Rfc2xpY2Uo cHBzKTsKPiArICAgIGVsc2UKPiArICAgICAgICBwcHNfbm9fcmVjdF9zbGljZShwcHMpOwo+ICsK PiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwcHNfcmVmX3dyYXBhcm91 bmRfb2Zmc2V0KFZWQ1BQUyAqcHBzLCBjb25zdCBWVkNTUFMgKnNwcykKPiArewo+ICsgICAgY29u c3QgSDI2NlJhd1BQUyAqciA9IHBwcy0+cjsKPiArCj4gKyAgICBpZiAoci0+cHBzX3JlZl93cmFw YXJvdW5kX2VuYWJsZWRfZmxhZykKPiArICAgICAgICBwcHMtPnJlZl93cmFwYXJvdW5kX29mZnNl dCA9IChwcHMtPndpZHRoIC8gc3BzLT5taW5fY2Jfc2l6ZV95KSAtIHItPnBwc19waWNfd2lkdGhf bWludXNfd3JhcGFyb3VuZF9vZmZzZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcHBzX2Rlcml2 ZShWVkNQUFMgKnBwcywgY29uc3QgVlZDU1BTICpzcHMpCj4gK3sKPiArICAgIGludCByZXQ7Cj4g Kwo+ICsgICAgcHBzX2Nocm9tYV9xcF9vZmZzZXQocHBzKTsKPiArICAgIHBwc193aWR0aF9oZWln aHQocHBzLCBzcHMpOwo+ICsKPiArICAgIHJldCA9IHBwc19iZChwcHMpOwo+ICsgICAgaWYgKHJl dCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICByZXQgPSBwcHNfc2xpY2Vf bWFwKHBwcyk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsK PiArICAgIHBwc19yZWZfd3JhcGFyb3VuZF9vZmZzZXQocHBzLCBzcHMpOwo+ICsKPiArICAgIHJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwcHNfZnJlZShGRlJlZlN0cnVjdE9wYXF1 ZSBvcGFxdWUsIHZvaWQgKm9iaikKPiArewo+ICsgICAgVlZDUFBTICpwcHMgPSAoVlZDUFBTICop b2JqOwo+ICsKPiArICAgIGZmX3JlZnN0cnVjdF91bnJlZigmcHBzLT5yKTsKPiArCj4gKyAgICBh dl9mcmVlcCgmcHBzLT5jb2xfYmQpOwo+ICsgICAgYXZfZnJlZXAoJnBwcy0+cm93X2JkKTsKPiAr ICAgIGF2X2ZyZWVwKCZwcHMtPmN0Yl90b19jb2xfYmQpOwo+ICsgICAgYXZfZnJlZXAoJnBwcy0+ Y3RiX3RvX3Jvd19iZCk7Cj4gKyAgICBhdl9mcmVlcCgmcHBzLT5jdGJfYWRkcl9pbl9zbGljZSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBWVkNQUFMgKnBwc19hbGxvYyhjb25zdCBIMjY2UmF3 UFBTICpycHBzLCBjb25zdCBWVkNTUFMgKnNwcykKPiArewo+ICsgICAgaW50IHJldDsKPiArICAg IFZWQ1BQUyAqcHBzID0gZmZfcmVmc3RydWN0X2FsbG9jX2V4dChzaXplb2YoKnBwcyksIDAsIE5V TEwsIHBwc19mcmVlKTsKPiArCj4gKyAgICBpZiAoIXBwcykKPiArICAgICAgICByZXR1cm4gTlVM TDsKPiArCj4gKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmcHBzLT5yLCBycHBzKTsKPiArCj4g KyAgICByZXQgPSBwcHNfZGVyaXZlKHBwcywgc3BzKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsg ICAgICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICByZXR1cm4gcHBzOwo+ICsKPiArZmFpbDoKPiAr ICAgIGZmX3JlZnN0cnVjdF91bnJlZigmcHBzKTsKPiArICAgIHJldHVybiBOVUxMOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGRlY29kZV9wcHMoVlZDUGFyYW1TZXRzICpwcywgY29uc3QgSDI2NlJh d1BQUyAqcnBwcykKPiArewo+ICsgICAgaW50IHJldCAgICAgICAgICAgICAgICAgPSAwOwo+ICsg ICAgY29uc3QgaW50IHBwc19pZCAgICAgICAgPSBycHBzLT5wcHNfcGljX3BhcmFtZXRlcl9zZXRf aWQ7Cj4gKyAgICBjb25zdCBpbnQgc3BzX2lkICAgICAgICA9IHJwcHMtPnBwc19zZXFfcGFyYW1l dGVyX3NldF9pZDsKPiArICAgIGNvbnN0IFZWQ1BQUyAqb2xkX3BwcyAgID0gcHMtPnBwc19saXN0 W3Bwc19pZF07Cj4gKyAgICBjb25zdCBWVkNQUFMgKnBwczsKPiArCj4gKyAgICBpZiAob2xkX3Bw cyAmJiBvbGRfcHBzLT5yID09IHJwcHMpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAg cHBzID0gcHBzX2FsbG9jKHJwcHMsIHBzLT5zcHNfbGlzdFtzcHNfaWRdKTsKPiArICAgIGlmICgh cHBzKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgZmZfcmVm c3RydWN0X3JlcGxhY2UoJnBzLT5wcHNfbGlzdFtwcHNfaWRdLCBwcHMpOwo+ICsgICAgZmZfcmVm c3RydWN0X3VucmVmKCZwcHMpOwo+ICsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZGVjb2RlX3BzKFZWQ1BhcmFtU2V0cyAqcHMsIGNvbnN0IENvZGVkQml0c3RyZWFt SDI2NkNvbnRleHQgKmgyNjYsIHZvaWQgKmxvZ19jdHgpCj4gK3sKPiArICAgIGNvbnN0IEgyNjZS YXdQaWN0dXJlSGVhZGVyICpwaCA9IGgyNjYtPnBoOwo+ICsgICAgY29uc3QgSDI2NlJhd1BQUyAq cnBwczsKPiArICAgIGNvbnN0IEgyNjZSYXdTUFMgKnJzcHM7Cj4gKyAgICBpbnQgcmV0Owo+ICsK PiArICAgIGlmICghcGgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4g Kwo+ICsgICAgcnBwcyA9IGgyNjYtPnBwc1twaC0+cGhfcGljX3BhcmFtZXRlcl9zZXRfaWRdOwo+ ICsgICAgaWYgKCFycHBzKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ ICsKPiArICAgIHJzcHMgPSBoMjY2LT5zcHNbcnBwcy0+cHBzX3NlcV9wYXJhbWV0ZXJfc2V0X2lk XTsKPiArICAgIGlmICghcnNwcykKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKPiArCj4gKyAgICByZXQgPSBkZWNvZGVfc3BzKHBzLCByc3BzLCBsb2dfY3R4KTsKPiArICAg IGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgcmV0ID0gZGVj b2RlX3BwcyhwcywgcnBwcyk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICByZXR1cm4g cmV0Owo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIFdFSUdIVF9UQUJM RSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIHctPm5iX3dlaWdodHNbTCMjeF0g PSByLT5udW1fd2VpZ2h0c19sIyN4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHctPm5i X3dlaWdodHNbTCMjeF07IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgIHctPndlaWdodF9mbGFnW0wjI3hdW0xVTUFd W2ldICAgICA9IHItPmx1bWFfd2VpZ2h0X2wjI3gjI19mbGFnW2ldOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiArICAgICAgICB3LT53ZWlnaHRfZmxhZ1tMIyN4XVtDSFJPTUFdW2ld ICAgPSByLT5jaHJvbWFfd2VpZ2h0X2wjI3gjI19mbGFnW2ldOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4gKyAgICAgICAgdy0+d2VpZ2h0W0wjI3hdW0xVTUFdW2ldICAgICAgICAgID0g ZGVub21bTFVNQV0gKyByLT5kZWx0YV9sdW1hX3dlaWdodF9sIyN4W2ldOyAgICAgICAgICAgICAg ICAgXAo+ICsgICAgICAgIHctPm9mZnNldFtMIyN4XVtMVU1BXVtpXSAgICAgICAgICA9IHItPmx1 bWFfb2Zmc2V0X2wjI3hbaV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiArICAgICAgICBmb3IgKGludCBqID0gQ0I7IGogPD0gQ1I7IGorKykgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAg ICAgICAgICAgIHctPndlaWdodFtMIyN4XVtqXVtpXSAgICAgICAgID0gZGVub21bQ0hST01BXSAr IHItPmRlbHRhX2Nocm9tYV93ZWlnaHRfbCMjeFtpXVtqIC0gMV07ICAgICAgXAo+ICsgICAgICAg ICAgICB3LT5vZmZzZXRbTCMjeF1bal1baV0gICAgICAgICA9IDEyOCArIHItPmRlbHRhX2Nocm9t YV9vZmZzZXRfbCMjeFtpXVtqIC0gMV07ICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAgICAg dy0+b2Zmc2V0W0wjI3hdW2pdW2ldICAgICAgICAtPSAoMTI4ICogdy0+d2VpZ2h0W0wjI3hdW2pd W2ldKSA+PiB3LT5sb2cyX2Rlbm9tW0NIUk9NQV07ICAgICBcCj4gKyAgICAgICAgICAgIHctPm9m ZnNldFtMIyN4XVtqXVtpXSAgICAgICAgID0gYXZfY2xpcF9pbnRwMih3LT5vZmZzZXRbTCMjeF1b al1baV0sIDcpOyAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4gKwo+ICtzdGF0aWMgdm9pZCBwcmVkX3dlaWdodF90YWJs ZShQcmVkV2VpZ2h0VGFibGUgKncsIGNvbnN0IEgyNjZSYXdQcmVkV2VpZ2h0VGFibGUgKnIpCj4g K3sKPiArICAgIGludCBkZW5vbVsyXTsKPiArCj4gKyAgICB3LT5sb2cyX2Rlbm9tW0xVTUFdID0g ci0+bHVtYV9sb2cyX3dlaWdodF9kZW5vbTsKPiArICAgIHctPmxvZzJfZGVub21bQ0hST01BXSA9 IHctPmxvZzJfZGVub21bTFVNQV0gKyByLT5kZWx0YV9jaHJvbWFfbG9nMl93ZWlnaHRfZGVub207 Cj4gKyAgICBkZW5vbVtMVU1BXSA9IDEgPDwgdy0+bG9nMl9kZW5vbVtMVU1BXTsKPiArICAgIGRl bm9tW0NIUk9NQV0gPSAxIDw8IHctPmxvZzJfZGVub21bQ0hST01BXTsKPiArICAgIFdFSUdIVF9U QUJMRSgwKQo+ICsgICAgV0VJR0hUX1RBQkxFKDEpCj4gK30KPiArCj4gKy8vIDguMy4xIERlY29k aW5nIHByb2Nlc3MgZm9yIHBpY3R1cmUgb3JkZXIgY291bnQKPiArc3RhdGljIGludCBwaF9jb21w dXRlX3BvYyhjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRlciAqcGgsIGNvbnN0IEgyNjZSYXdTUFMg KnNwcywgY29uc3QgaW50IHBvY190aWQwLCBjb25zdCBpbnQgaXNfY2x2c3MpCj4gK3sKPiArICAg IGNvbnN0IGludCBtYXhfcG9jX2xzYiAgICAgICA9IDEgPDwgKHNwcy0+c3BzX2xvZzJfbWF4X3Bp Y19vcmRlcl9jbnRfbHNiX21pbnVzNCArIDQpOwo+ICsgICAgY29uc3QgaW50IHByZXZfcG9jX2xz YiAgICAgID0gcG9jX3RpZDAgJSBtYXhfcG9jX2xzYjsKPiArICAgIGNvbnN0IGludCBwcmV2X3Bv Y19tc2IgICAgICA9IHBvY190aWQwIC0gcHJldl9wb2NfbHNiOwo+ICsgICAgY29uc3QgaW50IHBv Y19sc2IgICAgICAgICAgID0gcGgtPnBoX3BpY19vcmRlcl9jbnRfbHNiOwo+ICsgICAgaW50IHBv Y19tc2I7Cj4gKwo+ICsgICAgaWYgKHBoLT5waF9wb2NfbXNiX2N5Y2xlX3ByZXNlbnRfZmxhZykg ewo+ICsgICAgICAgIHBvY19tc2IgPSBwaC0+cGhfcG9jX21zYl9jeWNsZV92YWwgKiBtYXhfcG9j X2xzYjsKPiArICAgIH0gZWxzZSBpZiAoaXNfY2x2c3MpIHsKPiArICAgICAgICBwb2NfbXNiID0g MDsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgaWYgKHBvY19sc2IgPCBwcmV2X3BvY19sc2Ig JiYgcHJldl9wb2NfbHNiIC0gcG9jX2xzYiA+PSBtYXhfcG9jX2xzYiAvIDIpCj4gKyAgICAgICAg ICAgIHBvY19tc2IgPSBwcmV2X3BvY19tc2IgKyBtYXhfcG9jX2xzYjsKPiArICAgICAgICBlbHNl IGlmIChwb2NfbHNiID4gcHJldl9wb2NfbHNiICYmIHBvY19sc2IgLSBwcmV2X3BvY19sc2IgPiBt YXhfcG9jX2xzYiAvIDIpCj4gKyAgICAgICAgICAgIHBvY19tc2IgPSBwcmV2X3BvY19tc2IgLSBt YXhfcG9jX2xzYjsKPiArICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgIHBvY19tc2IgPSBwcmV2 X3BvY19tc2I7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHBvY19tc2IgKyBwb2NfbHNiOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYXZfYWx3YXlzX2lubGluZSB1aW50MTZfdCBsbWNzX2Rlcml2ZV9s dXRfc2FtcGxlKHVpbnQxNl90IHNhbXBsZSwKPiArICAgIHVpbnQxNl90ICpwaXZvdDEsIHVpbnQx Nl90ICpwaXZvdDIsIHVpbnQxNl90ICpzY2FsZV9jb2VmZiwgY29uc3QgaW50IGlkeCwgY29uc3Qg aW50IG1heCkKPiArewo+ICsgICAgY29uc3QgaW50IGx1dF9zYW1wbGUgPQo+ICsgICAgICAgIHBp dm90MVtpZHhdICsgKChzY2FsZV9jb2VmZltpZHhdICogKHNhbXBsZSAtIHBpdm90MltpZHhdKSAr ICgxPDwgMTApKSA+PiAxMSk7Cj4gKyAgICByZXR1cm4gYXZfY2xpcChsdXRfc2FtcGxlLCAwLCBt YXggLSAxKTsKPiArfQo+ICsKPiArLy84LjguMi4yIEludmVyc2UgbWFwcGluZyBwcm9jZXNzIGZv ciBhIGx1bWEgc2FtcGxlCj4gK3N0YXRpYyBpbnQgbG1jc19kZXJpdmVfbHV0KFZWQ0xNQ1MgKmxt Y3MsIGNvbnN0IEgyNjZSYXdBUFMgKnJsbWNzLCBjb25zdCBIMjY2UmF3U1BTICpzcHMpCj4gK3sK PiArICAgIGNvbnN0IGludCBiaXRfZGVwdGggPSAoc3BzLT5zcHNfYml0ZGVwdGhfbWludXM4ICsg OCk7Cj4gKyAgICBjb25zdCBpbnQgbWF4ICAgICAgID0gKDEgPDwgYml0X2RlcHRoKTsKPiArICAg IGNvbnN0IGludCBvcmdfY3cgICAgPSBtYXggLyBMTUNTX01BWF9CSU5fU0laRTsKPiArICAgIGNv bnN0IGludCBzaGlmdCAgICAgPSBhdl9sb2cyKG9yZ19jdyk7Cj4gKyAgICBjb25zdCBpbnQgb2Zm ICAgICAgID0gMSA8PCAoc2hpZnQgLSAxKTsKPiArICAgIGludCBjd1tMTUNTX01BWF9CSU5fU0la RV07Cj4gKyAgICB1aW50MTZfdCBpbnB1dF9waXZvdFtMTUNTX01BWF9CSU5fU0laRV07Cj4gKyAg ICB1aW50MTZfdCBzY2FsZV9jb2VmZltMTUNTX01BWF9CSU5fU0laRV07Cj4gKyAgICB1aW50MTZf dCBpbnZfc2NhbGVfY29lZmZbTE1DU19NQVhfQklOX1NJWkVdOwo+ICsgICAgaW50IGksIGRlbHRh X2NyczsKPiArICAgIGlmIChiaXRfZGVwdGggPiBMTUNTX01BWF9CSVRfREVQVEgpCj4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ICsKPiArICAgIGlmICghcmxtY3MpCj4g KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKwo+ICsgICAgbG1jcy0+bWlu X2Jpbl9pZHggPSBybG1jcy0+bG1jc19taW5fYmluX2lkeDsKPiArICAgIGxtY3MtPm1heF9iaW5f aWR4ID0gTE1DU19NQVhfQklOX1NJWkUgLSAxIC0gcmxtY3MtPmxtY3NfbWluX2Jpbl9pZHg7Cj4g Kwo+ICsgICAgbWVtc2V0KGN3LCAwLCBzaXplb2YoY3cpKTsKPiArICAgIGZvciAoaW50IGkgPSBs bWNzLT5taW5fYmluX2lkeDsgaSA8PSBsbWNzLT5tYXhfYmluX2lkeDsgaSsrKQo+ICsgICAgICAg IGN3W2ldID0gb3JnX2N3ICsgKDEgLSAyICogcmxtY3MtPmxtY3NfZGVsdGFfc2lnbl9jd19mbGFn W2ldKSAqIHJsbWNzLT5sbWNzX2RlbHRhX2Fic19jd1tpXTsKPiArCj4gKyAgICBkZWx0YV9jcnMg PSAoMSAtIDIgKiBybG1jcy0+bG1jc19kZWx0YV9zaWduX2Nyc19mbGFnKSAqIHJsbWNzLT5sbWNz X2RlbHRhX2Fic19jcnM7Cj4gKwo+ICsgICAgbG1jcy0+cGl2b3RbMF0gPSAwOwo+ICsgICAgZm9y IChpID0gMDsgaSA8IExNQ1NfTUFYX0JJTl9TSVpFOyBpKyspIHsKPiArICAgICAgICBpbnB1dF9w aXZvdFtpXSAgICAgICAgPSBpICogb3JnX2N3Owo+ICsgICAgICAgIGxtY3MtPnBpdm90W2kgKyAx XSA9IGxtY3MtPnBpdm90W2ldICsgY3dbaV07Cj4gKyAgICAgICAgc2NhbGVfY29lZmZbaV0gICAg ICAgID0gKGN3W2ldICogKDEgPDwgMTEpICsgIG9mZikgPj4gc2hpZnQ7Cj4gKyAgICAgICAgaWYg KGN3W2ldID09IDApIHsKPiArICAgICAgICAgICAgaW52X3NjYWxlX2NvZWZmW2ldID0gMDsKPiAr ICAgICAgICAgICAgbG1jcy0+Y2hyb21hX3NjYWxlX2NvZWZmW2ldID0gKDEgPDwgMTEpOwo+ICsg ICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgIGludl9zY2FsZV9jb2VmZltpXSA9IG9yZ19j dyAqICgxIDw8IDExKSAvIGN3W2ldOwo+ICsgICAgICAgICAgICBsbWNzLT5jaHJvbWFfc2NhbGVf Y29lZmZbaV0gPSBvcmdfY3cgKiAoMSA8PCAxMSkgLyAoY3dbaV0gKyBkZWx0YV9jcnMpOwo+ICsg ICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICAvL2Rlcml2ZSBsbWNzX2Z3ZF9sdXQKPiArICAg IGZvciAodWludDE2X3Qgc2FtcGxlID0gMDsgc2FtcGxlIDwgbWF4OyBzYW1wbGUrKykgewo+ICsg ICAgICAgIGNvbnN0IGludCBpZHhfeSA9IHNhbXBsZSAvIG9yZ19jdzsKPiArICAgICAgICBjb25z dCB1aW50MTZfdCBmd2Rfc2FtcGxlID0gbG1jc19kZXJpdmVfbHV0X3NhbXBsZShzYW1wbGUsIGxt Y3MtPnBpdm90LAo+ICsgICAgICAgICAgICBpbnB1dF9waXZvdCwgc2NhbGVfY29lZmYsIGlkeF95 LCBtYXgpOwo+ICsgICAgICAgIGlmIChiaXRfZGVwdGggPiA4KQo+ICsgICAgICAgICAgICAoKHVp bnQxNl90ICopbG1jcy0+ZndkX2x1dClbc2FtcGxlXSA9IGZ3ZF9zYW1wbGU7Cj4gKyAgICAgICAg ZWxzZQo+ICsgICAgICAgICAgICBsbWNzLT5md2RfbHV0W3NhbXBsZV0gPSBmd2Rfc2FtcGxlOwo+ ICsKPiArICAgIH0KPiArCj4gKyAgICAvL2Rlcml2ZSBsbWNzX2ludl9sdXQKPiArICAgIGkgPSBs bWNzLT5taW5fYmluX2lkeDsKPiArICAgIGZvciAodWludDE2X3Qgc2FtcGxlID0gMDsgc2FtcGxl IDwgbWF4OyBzYW1wbGUrKykgewo+ICsgICAgICAgIHVpbnQxNl90IGludl9zYW1wbGU7Cj4gKyAg ICAgICAgd2hpbGUgKHNhbXBsZSA+PSBsbWNzLT5waXZvdFtpICsgMV0gJiYgaSA8PSBsbWNzLT5t YXhfYmluX2lkeCkKPiArICAgICAgICAgICAgaSsrOwo+ICsKPiArICAgICAgICBpbnZfc2FtcGxl ID0gbG1jc19kZXJpdmVfbHV0X3NhbXBsZShzYW1wbGUsIGlucHV0X3Bpdm90LCBsbWNzLT5waXZv dCwKPiArICAgICAgICAgICAgaW52X3NjYWxlX2NvZWZmLCBpLCBtYXgpOwo+ICsKPiArICAgICAg ICBpZiAoYml0X2RlcHRoID4gOCkKPiArICAgICAgICAgICAgKCh1aW50MTZfdCAqKWxtY3MtPmlu dl9sdXQpW3NhbXBsZV0gPSBpbnZfc2FtcGxlOwo+ICsgICAgICAgIGVsc2UKPiArICAgICAgICAg ICAgbG1jcy0+aW52X2x1dFtzYW1wbGVdID0gaW52X3NhbXBsZTsKPiArICAgIH0KPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBwaF9tYXhfbnVtX3N1YmJsb2NrX21l cmdlX2NhbmQoY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRl ciAqcGgpCj4gK3sKPiArICAgIGlmIChzcHMtPnNwc19hZmZpbmVfZW5hYmxlZF9mbGFnKQo+ICsg ICAgICAgIHJldHVybiA1IC0gc3BzLT5zcHNfZml2ZV9taW51c19tYXhfbnVtX3N1YmJsb2NrX21l cmdlX2NhbmQ7Cj4gKyAgICByZXR1cm4gc3BzLT5zcHNfc2J0bXZwX2VuYWJsZWRfZmxhZyAmJiBw aC0+cGhfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZzsKPiArfQo+ICsKPiArc3RhdGljIGludCBw aF9kZXJpdmUoVlZDUEggKnBoLCBjb25zdCBIMjY2UmF3U1BTICpzcHMsIGNvbnN0IEgyNjZSYXdQ UFMgKnBwcywgY29uc3QgaW50IHBvY190aWQwLCBjb25zdCBpbnQgaXNfY2x2c3MpCj4gK3sKPiAr ICAgIHBoLT5tYXhfbnVtX3N1YmJsb2NrX21lcmdlX2NhbmQgPSBwaF9tYXhfbnVtX3N1YmJsb2Nr X21lcmdlX2NhbmQoc3BzLCBwaC0+cik7Cj4gKwo+ICsgICAgcGgtPnBvYyA9IHBoX2NvbXB1dGVf cG9jKHBoLT5yLCBzcHMsIHBvY190aWQwLCBpc19jbHZzcyk7Cj4gKwo+ICsgICAgaWYgKHBwcy0+ cHBzX3dwX2luZm9faW5fcGhfZmxhZykKPiArICAgICAgICBwcmVkX3dlaWdodF90YWJsZSgmcGgt PnB3dCwgJnBoLT5yLT5waF9wcmVkX3dlaWdodF90YWJsZSk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZGVjb2RlX3BoKFZWQ0ZyYW1lUGFyYW1TZXRzICpmcHMs IGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpycGgsIHZvaWQgKnJwaF9yZWYsCj4gKyAgICBj b25zdCBpbnQgcG9jX3RpZDAsIGNvbnN0IGludCBpc19jbHZzcykKPiArewo+ICsgICAgaW50IHJl dDsKPiArICAgIFZWQ1BIICpwaCA9ICZmcHMtPnBoOwo+ICsgICAgY29uc3QgSDI2NlJhd1NQUyAq c3BzID0gZnBzLT5zcHMtPnI7Cj4gKyAgICBjb25zdCBIMjY2UmF3UFBTICpwcHMgPSBmcHMtPnBw cy0+cjsKPiArCj4gKyAgICBwaC0+ciA9IHJwaDsKPiArICAgIGZmX3JlZnN0cnVjdF9yZXBsYWNl KCZwaC0+cnJlZiwgcnBoX3JlZik7Cj4gKyAgICByZXQgPSBwaF9kZXJpdmUocGgsIHNwcywgcHBz LCBwb2NfdGlkMCwgaXNfY2x2c3MpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0 dXJuIHJldDsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkZWNv ZGVfZnJhbWVfcHMoVlZDRnJhbWVQYXJhbVNldHMgKmZwcywgY29uc3QgVlZDUGFyYW1TZXRzICpw cywKPiArICAgIGNvbnN0IENvZGVkQml0c3RyZWFtSDI2NkNvbnRleHQgKmgyNjYsIGNvbnN0IGlu dCBwb2NfdGlkMCwgY29uc3QgaW50IGlzX2NsdnNzKQo+ICt7Cj4gKyAgICBjb25zdCBIMjY2UmF3 UGljdHVyZUhlYWRlciAqcGggPSBoMjY2LT5waDsKPiArICAgIGNvbnN0IEgyNjZSYXdQUFMgKnJw cHM7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAgIGlmICghcGgpCj4gKyAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKwo+ICsgICAgcnBwcyA9IGgyNjYtPnBwc1twaC0+cGhf cGljX3BhcmFtZXRlcl9zZXRfaWRdOwo+ICsgICAgaWYgKCFycHBzKQo+ICsgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsKPiArICAgIGZmX3JlZnN0cnVjdF9yZXBsYWNlKCZm cHMtPnNwcywgcHMtPnNwc19saXN0W3JwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZF0pOwo+ ICsgICAgZmZfcmVmc3RydWN0X3JlcGxhY2UoJmZwcy0+cHBzLCBwcy0+cHBzX2xpc3RbcnBwcy0+ cHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkXSk7Cj4gKwo+ICsgICAgcmV0ID0gZGVjb2RlX3BoKGZw cywgcGgsIGgyNjYtPnBoX3JlZiwgcG9jX3RpZDAsIGlzX2NsdnNzKTsKPiArICAgIGlmIChyZXQg PCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgaWYgKHBoLT5waF9leHBsaWNp dF9zY2FsaW5nX2xpc3RfZW5hYmxlZF9mbGFnKQo+ICsgICAgICAgIGZmX3JlZnN0cnVjdF9yZXBs YWNlKCZmcHMtPnNsLCBwcy0+c2NhbGluZ19saXN0W3BoLT5waF9zY2FsaW5nX2xpc3RfYXBzX2lk XSk7Cj4gKwo+ICsgICAgaWYgKHBoLT5waF9sbWNzX2VuYWJsZWRfZmxhZykgewo+ICsgICAgICAg IHJldCA9IGxtY3NfZGVyaXZlX2x1dCgmZnBzLT5sbWNzLCBwcy0+bG1jc19saXN0W3BoLT5waF9s bWNzX2Fwc19pZF0sIGZwcy0+c3BzLT5yKTsKPiArICAgICAgICBpZiAocmV0IDwgMCkKPiArICAg ICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIH0KPiArCj4gKyAgICBmb3IgKGludCBpID0gMDsg aSA8IEZGX0FSUkFZX0VMRU1TKGZwcy0+YWxmX2xpc3QpOyBpKyspCj4gKyAgICAgICAgZmZfcmVm c3RydWN0X3JlcGxhY2UoJmZwcy0+YWxmX2xpc3RbaV0sIHBzLT5hbGZfbGlzdFtpXSk7Cj4gKwo+ ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRlY29kZV9yZWNvdmVyeV9m bGFnKFZWQ0NvbnRleHQgKnMpCj4gK3sKPiArICAgIGlmIChJU19JRFIocykpCj4gKyAgICAgICAg cy0+bm9fb3V0cHV0X2JlZm9yZV9yZWNvdmVyeV9mbGFnID0gMDsKPiArICAgIGVsc2UgaWYgKElT X0NSQShzKSB8fCBJU19HRFIocykpCj4gKyAgICAgICAgcy0+bm9fb3V0cHV0X2JlZm9yZV9yZWNv dmVyeV9mbGFnID0gcy0+bGFzdF9lb3M7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRlY29kZV9y ZWNvdmVyeV9wb2MoVlZDQ29udGV4dCAqcywgY29uc3QgVlZDUEggKnBoKQo+ICt7Cj4gKyAgICBp ZiAocy0+bm9fb3V0cHV0X2JlZm9yZV9yZWNvdmVyeV9mbGFnKSB7Cj4gKyAgICAgICAgaWYgKElT X0dEUihzKSkKPiArICAgICAgICAgICAgcy0+Z2RyX3JlY292ZXJ5X3BvaW50X3BvYyA9IHBoLT5w b2MgKyBwaC0+ci0+cGhfcmVjb3ZlcnlfcG9jX2NudDsKPiArICAgICAgICBpZiAoIUdEUl9JU19S RUNPVkVSRUQocykgJiYgcy0+Z2RyX3JlY292ZXJ5X3BvaW50X3BvYyA8PSBwaC0+cG9jKQo+ICsg ICAgICAgICAgICBHRFJfU0VUX1JFQ09WRVJFRChzKTsKPiArICAgIH0KPiArfQo+ICsKPiAraW50 IGZmX3Z2Y19kZWNvZGVfZnJhbWVfcHMoVlZDRnJhbWVQYXJhbVNldHMgKmZwcywgc3RydWN0IFZW Q0NvbnRleHQgKnMpCj4gK3sKPiArICAgIGludCByZXQgPSAwOwo+ICsgICAgVlZDUGFyYW1TZXRz ICpwcyAgICAgICAgICAgICAgICAgICAgICAgID0gJnMtPnBzOwo+ICsgICAgY29uc3QgQ29kZWRC aXRzdHJlYW1IMjY2Q29udGV4dCAqaDI2NiAgID0gcy0+Y2JjLT5wcml2X2RhdGE7Cj4gKwo+ICsg ICAgcmV0ID0gZGVjb2RlX3BzKHBzLCBoMjY2LCBzLT5hdmN0eCk7Cj4gKyAgICBpZiAocmV0IDwg MCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIGRlY29kZV9yZWNvdmVyeV9mbGFn KHMpOwo+ICsgICAgcmV0ID0gZGVjb2RlX2ZyYW1lX3BzKGZwcywgcHMsIGgyNjYsIHMtPnBvY190 aWQwLCBJU19DTFZTUyhzKSk7Cj4gKyAgICBkZWNvZGVfcmVjb3ZlcnlfcG9jKHMsICZmcHMtPnBo KTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3ZvaWQgZmZfdnZjX2ZyYW1lX3BzX2Zy ZWUoVlZDRnJhbWVQYXJhbVNldHMgKmZwcykKPiArewo+ICsgICAgZmZfcmVmc3RydWN0X3VucmVm KCZmcHMtPnNwcyk7Cj4gKyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJmZwcy0+cHBzKTsKPiArICAg IGZmX3JlZnN0cnVjdF91bnJlZigmZnBzLT5waC5ycmVmKTsKPiArICAgIGZmX3JlZnN0cnVjdF91 bnJlZigmZnBzLT5zbCk7Cj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1T KGZwcy0+YWxmX2xpc3QpOyBpKyspCj4gKyAgICAgICAgZmZfcmVmc3RydWN0X3VucmVmKCZmcHMt PmFsZl9saXN0W2ldKTsKPiArfQo+ICsKPiArdm9pZCBmZl92dmNfcHNfdW5pbml0KFZWQ1BhcmFt U2V0cyAqcHMpCj4gK3sKPiArICAgIGludCBpOwo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgPCBG Rl9BUlJBWV9FTEVNUyhwcy0+c2NhbGluZ19saXN0KTsgaSsrKQo+ICsgICAgICAgIGZmX3JlZnN0 cnVjdF91bnJlZigmcHMtPnNjYWxpbmdfbGlzdFtpXSk7Cj4gKyAgICBmb3IgKGkgPSAwOyBpIDwg RkZfQVJSQVlfRUxFTVMocHMtPmxtY3NfbGlzdCk7IGkrKykKPiArICAgICAgICBmZl9yZWZzdHJ1 Y3RfdW5yZWYoJnBzLT5sbWNzX2xpc3RbaV0pOwo+ICsgICAgZm9yIChpID0gMDsgaSA8IEZGX0FS UkFZX0VMRU1TKHBzLT5hbGZfbGlzdCk7IGkrKykKPiArICAgICAgICBmZl9yZWZzdHJ1Y3RfdW5y ZWYoJnBzLT5hbGZfbGlzdFtpXSk7Cj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxF TVMocHMtPnNwc19saXN0KTsgaSsrKQo+ICsgICAgICAgIGZmX3JlZnN0cnVjdF91bnJlZigmcHMt PnNwc19saXN0W2ldKTsKPiArICAgIGZvciAoaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhwcy0+ cHBzX2xpc3QpOyBpKyspCj4gKyAgICAgICAgZmZfcmVmc3RydWN0X3VucmVmKCZwcy0+cHBzX2xp c3RbaV0pOwo+ICt9Cj4gKwo+ICtlbnVtIHsKPiArICAgIEFQU19BTEYsCj4gKyAgICBBUFNfTE1D UywKPiArICAgIEFQU19TQ0FMSU5HLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgYWxmX2NvZWZm KGludDE2X3QgKmNvZWZmLAo+ICsgICAgY29uc3QgdWludDhfdCAqYWJzLCBjb25zdCB1aW50OF90 ICpzaWduLCBjb25zdCBpbnQgc2l6ZSkKPiArewo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz aXplOyBpKyspCj4gKyAgICAgICAgY29lZmZbaV0gPSAoMSAtIDIgKiBzaWduW2ldKSAqIGFic1tp XTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWxmX2NvZWZmX2NjKGludDE2X3QgKmNvZWZmLAo+ ICsgICAgY29uc3QgdWludDhfdCAqbWFwcGVkX2FicywgY29uc3QgdWludDhfdCAqc2lnbikKPiAr ewo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfTlVNX0NPRUZGX0NDOyBpKyspIHsKPiAr ICAgICAgICBpbnQgYyA9IG1hcHBlZF9hYnNbaV07Owo+ICsgICAgICAgIGlmIChjKQo+ICsgICAg ICAgICAgICBjID0gKDEgLSAyICogc2lnbltpXSkgKiAoMSA8PCAoYyAtIDEpKTsKPiArICAgICAg ICBjb2VmZltpXSA9IGM7Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFsZl9sdW1h KFZWQ0FMRiAqYWxmLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCj4gK3sKPiArICAgIGlmICghYXBz LT5hbGZfbHVtYV9maWx0ZXJfc2lnbmFsX2ZsYWcpCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiAr ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQUxGX05VTV9GSUxURVJTX0xVTUE7IGkrKykgewo+ICsg ICAgICAgIGNvbnN0IGludCByZWYgICAgICAgPSBhcHMtPmFsZl9sdW1hX2NvZWZmX2RlbHRhX2lk eFtpXTsKPiArICAgICAgICBjb25zdCB1aW50OF90ICphYnMgID0gYXBzLT5hbGZfbHVtYV9jb2Vm Zl9hYnNbcmVmXTsKPiArICAgICAgICBjb25zdCB1aW50OF90ICpzaWduID0gYXBzLT5hbGZfbHVt YV9jb2VmZl9zaWduW3JlZl07Cj4gKwo+ICsgICAgICAgIGFsZl9jb2VmZihhbGYtPmx1bWFfY29l ZmZbaV0sIGFicywgc2lnbiwgQUxGX05VTV9DT0VGRl9MVU1BKTsKPiArICAgICAgICBtZW1jcHko YWxmLT5sdW1hX2NsaXBfaWR4W2ldLCBhcHMtPmFsZl9sdW1hX2NsaXBfaWR4W3JlZl0sCj4gKyAg ICAgICAgICAgIHNpemVvZihhbGYtPmx1bWFfY2xpcF9pZHhbaV0pKTsKPiArICAgIH0KPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgYWxmX2Nocm9tYShWVkNBTEYgKmFsZiwgY29uc3QgSDI2NlJhd0FQ UyAqYXBzKQo+ICt7Cj4gKyAgICBpZiAoIWFwcy0+YWxmX2Nocm9tYV9maWx0ZXJfc2lnbmFsX2Zs YWcpCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIGFsZi0+bnVtX2Nocm9tYV9maWx0ZXJz ICA9IGFwcy0+YWxmX2Nocm9tYV9udW1fYWx0X2ZpbHRlcnNfbWludXMxICsgMTsKPiArICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgYWxmLT5udW1fY2hyb21hX2ZpbHRlcnM7IGkrKykgewo+ICsgICAg ICAgIGNvbnN0IHVpbnQ4X3QgKmFicyAgPSBhcHMtPmFsZl9jaHJvbWFfY29lZmZfYWJzW2ldOwo+ ICsgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNpZ24gPSBhcHMtPmFsZl9jaHJvbWFfY29lZmZfc2ln bltpXTsKPiArCj4gKyAgICAgICAgYWxmX2NvZWZmKGFsZi0+Y2hyb21hX2NvZWZmW2ldLCBhYnMs IHNpZ24sIEFMRl9OVU1fQ09FRkZfQ0hST01BKTsKPiArICAgICAgICBtZW1jcHkoYWxmLT5jaHJv bWFfY2xpcF9pZHhbaV0sIGFwcy0+YWxmX2Nocm9tYV9jbGlwX2lkeFtpXSwKPiArICAgICAgICAg ICAgc2l6ZW9mKGFsZi0+Y2hyb21hX2NsaXBfaWR4W2ldKSk7Cj4gKyAgICB9Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGFsZl9jYyhWVkNBTEYgKmFsZiwgY29uc3QgSDI2NlJhd0FQUyAqYXBzKQo+ ICt7Cj4gKyAgICBjb25zdCB1aW50OF90ICgqYWJzW10pW0FMRl9OVU1fQ09FRkZfQ0NdID0KPiAr ICAgICAgICB7IGFwcy0+YWxmX2NjX2NiX21hcHBlZF9jb2VmZl9hYnMsIGFwcy0+YWxmX2NjX2Ny X21hcHBlZF9jb2VmZl9hYnMgfTsKPiArICAgIGNvbnN0IHVpbnQ4X3QgKCpzaWduW10pW0FMRl9O VU1fQ09FRkZfQ0NdID0KPiArICAgICAgICB7YXBzLT5hbGZfY2NfY2JfY29lZmZfc2lnbiwgYXBz LT5hbGZfY2NfY3JfY29lZmZfc2lnbiB9Owo+ICsgICAgY29uc3QgaW50IHNpZ25hbGVkW10gPSB7 IGFwcy0+YWxmX2NjX2NiX2ZpbHRlcl9zaWduYWxfZmxhZywgYXBzLT5hbGZfY2NfY3JfZmlsdGVy X3NpZ25hbF9mbGFnfTsKPiArCj4gKyAgICBhbGYtPm51bV9jY19maWx0ZXJzWzBdID0gYXBzLT5h bGZfY2NfY2JfZmlsdGVyc19zaWduYWxsZWRfbWludXMxICsgMTsKPiArICAgIGFsZi0+bnVtX2Nj X2ZpbHRlcnNbMV0gPSBhcHMtPmFsZl9jY19jcl9maWx0ZXJzX3NpZ25hbGxlZF9taW51czEgKyAx Owo+ICsKPiArICAgIGZvciAoaW50IGlkeCA9IDA7IGlkeCA8IDI7IGlkeCsrKSB7Cj4gKyAgICAg ICAgaWYgKHNpZ25hbGVkW2lkeF0pIHsKPiArICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBhbGYtPm51bV9jY19maWx0ZXJzW2lkeF07IGkrKykKPiArICAgICAgICAgICAgICAgIGFsZl9j b2VmZl9jYyhhbGYtPmNjX2NvZWZmW2lkeF1baV0sIGFic1tpZHhdW2ldLCBzaWduW2lkeF1baV0p Owo+ICsgICAgICAgIH0KPiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWxmX2Rlcml2 ZShWVkNBTEYgKmFsZiwgY29uc3QgSDI2NlJhd0FQUyAqYXBzKQo+ICt7Cj4gKyAgICBhbGZfbHVt YShhbGYsIGFwcyk7Cj4gKyAgICBhbGZfY2hyb21hKGFsZiwgYXBzKTsKPiArICAgIGFsZl9jYyhh bGYsIGFwcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXBzX2RlY29kZV9hbGYoY29uc3QgVlZD QUxGICoqYWxmLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCj4gK3sKPiArICAgIFZWQ0FMRiAqYSA9 IGZmX3JlZnN0cnVjdF9hbGxvY3ooc2l6ZW9mKCphKSk7Cj4gKyAgICBpZiAoIWEpCj4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gKyAgICBhbGZfZGVyaXZlKGEsIGFwcyk7 Cj4gKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZShhbGYsIGEpOwo+ICsgICAgZmZfcmVmc3RydWN0 X3VucmVmKCZhKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBp c19sdW1hX2xpc3QoY29uc3QgaW50IGlkKQo+ICt7Cj4gKyAgICByZXR1cm4gaWQgJSBWVkNfTUFY X1NBTVBMRV9BUlJBWVMgPT0gU0xfU1RBUlRfNHg0IHx8IGlkID09IFNMX1NUQVJUXzY0eDY0ICsg MTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkZXJpdmVfbWF0cml4X3NpemUoY29uc3QgaW50IGlk KQo+ICt7Cj4gKyAgICByZXR1cm4gaWQgPCBTTF9TVEFSVF80eDQgPyAyIDogKGlkIDwgU0xfU1RB UlRfOHg4ID8gNCA6IDgpOwo+ICt9Cj4gKwo+ICsvLyA3LjQuMy4yMCBTY2FsaW5nIGxpc3QgZGF0 YSBzZW1hbnRpY3MKPiArc3RhdGljIHZvaWQgc2NhbGluZ19kZXJpdmUoVlZDU2NhbGluZ0xpc3Qg KnNsLCBjb25zdCBIMjY2UmF3QVBTICphcHMpCj4gK3sKPiArICAgIGZvciAoaW50IGlkID0gMDsg aWQgPCBTTF9NQVhfSUQ7IGlkKyspIHsKPiArICAgICAgICBjb25zdCBpbnQgbWF0cml4X3NpemUg ICA9IGRlcml2ZV9tYXRyaXhfc2l6ZShpZCk7Cj4gKyAgICAgICAgY29uc3QgaW50IGxvZzJfc2l6 ZSAgICAgPSBsb2cyKG1hdHJpeF9zaXplKTsKPiArICAgICAgICBjb25zdCBpbnQgbGlzdF9zaXpl ICAgICA9IG1hdHJpeF9zaXplICogbWF0cml4X3NpemU7Cj4gKyAgICAgICAgaW50IGNvZWZmW1NM X01BWF9NQVRSSVhfU0laRSAqIFNMX01BWF9NQVRSSVhfU0laRV07Cj4gKyAgICAgICAgY29uc3Qg dWludDhfdCAqcHJlZDsKPiArICAgICAgICBjb25zdCBpbnQgKnNjYWxpbmdfbGlzdDsKPiArICAg ICAgICBpbnQgZGMgPSAwOwo+ICsKPiArICAgICAgICBpZiAoYXBzLT5hcHNfY2hyb21hX3ByZXNl bnRfZmxhZyB8fCBpc19sdW1hX2xpc3QoaWQpKSB7Cj4gKyAgICAgICAgICAgIGlmICghYXBzLT5z Y2FsaW5nX2xpc3RfY29weV9tb2RlX2ZsYWdbaWRdKSB7Cj4gKyAgICAgICAgICAgICAgICBpbnQg bmV4dF9jb2VmID0gMDsKPiArCj4gKyAgICAgICAgICAgICAgICBpZiAoaWQgPj0gU0xfU1RBUlRf MTZ4MTYpCj4gKyAgICAgICAgICAgICAgICAgICAgZGMgPSBuZXh0X2NvZWYgPSBhcHMtPnNjYWxp bmdfbGlzdF9kY19jb2VmW2lkIC0gU0xfU1RBUlRfMTZ4MTZdOwo+ICsKPiArICAgICAgICAgICAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdF9zaXplOyBpKyspIHsKPiArICAgICAgICAgICAg ICAgICAgICBjb25zdCBpbnQgeCA9IGZmX3Z2Y19kaWFnX3NjYW5feFszXVszXVtpXTsKPiArICAg ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgeSA9IGZmX3Z2Y19kaWFnX3NjYW5feVszXVszXVtp XTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoaWQgPj0gU0xfU1RBUlRfNjR4NjQg JiYgeCA+PSA0ICYmIHkgPj0gNCkpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfY29l ZiArPSBhcHMtPnNjYWxpbmdfbGlzdF9kZWx0YV9jb2VmW2lkXVtpXTsKPiArICAgICAgICAgICAg ICAgICAgICBjb2VmZltpXSA9IG5leHRfY29lZjsKPiArICAgICAgICAgICAgICAgIH0KPiArICAg ICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLy9kYwo+ICsgICAgICAgIGlm IChpZCA+PSBTTF9TVEFSVF8xNngxNikgewo+ICsgICAgICAgICAgICBpZiAoIWFwcy0+c2NhbGlu Z19saXN0X2NvcHlfbW9kZV9mbGFnW2lkXSAmJiAhYXBzLT5zY2FsaW5nX2xpc3RfcHJlZF9tb2Rl X2ZsYWdbaWRdKSB7Cj4gKyAgICAgICAgICAgICAgICBzbC0+c2NhbGluZ19tYXRyaXhfZGNfcmVj W2lkIC0gU0xfU1RBUlRfMTZ4MTZdID0gODsKPiArICAgICAgICAgICAgfSBlbHNlIGlmICghYXBz LT5zY2FsaW5nX2xpc3RfcHJlZF9pZF9kZWx0YVtpZF0pIHsKPiArICAgICAgICAgICAgICAgIHNs LT5zY2FsaW5nX21hdHJpeF9kY19yZWNbaWQgLSBTTF9TVEFSVF8xNngxNl0gPSAxNjsKPiArICAg ICAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgIGNvbnN0IGludCByZWZfaWQgPSBp ZCAtIGFwcy0+c2NhbGluZ19saXN0X3ByZWRfaWRfZGVsdGFbaWRdOwo+ICsgICAgICAgICAgICAg ICAgaWYgKHJlZl9pZCA+PSBTTF9TVEFSVF8xNngxNikKPiArICAgICAgICAgICAgICAgICAgICBk YyArPSBzbC0+c2NhbGluZ19tYXRyaXhfZGNfcmVjW3JlZl9pZCAtIFNMX1NUQVJUXzE2eDE2XTsK PiArICAgICAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgICAgICBkYyArPSBzbC0+ c2NhbGluZ19tYXRyaXhfcmVjW3JlZl9pZF1bMF07Cj4gKyAgICAgICAgICAgICAgICBzbC0+c2Nh bGluZ19tYXRyaXhfZGNfcmVjW2lkIC0gU0xfU1RBUlRfMTZ4MTZdID0gZGMgJiAyNTU7Cj4gKyAg ICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8vYWMKPiArICAgICAgICBz Y2FsaW5nX2xpc3QgPSBhcHMtPnNjYWxpbmdfbGlzdF9jb3B5X21vZGVfZmxhZ1tpZF0gPyBmZl92 dmNfc2NhbGluZ19saXN0MCA6IGNvZWZmOwo+ICsgICAgICAgIGlmICghYXBzLT5zY2FsaW5nX2xp c3RfY29weV9tb2RlX2ZsYWdbaWRdICYmICFhcHMtPnNjYWxpbmdfbGlzdF9wcmVkX21vZGVfZmxh Z1tpZF0pCj4gKyAgICAgICAgICAgIHByZWQgPSBmZl92dmNfc2NhbGluZ19wcmVkXzg7Cj4gKyAg ICAgICAgZWxzZSBpZiAoIWFwcy0+c2NhbGluZ19saXN0X3ByZWRfaWRfZGVsdGFbaWRdKQo+ICsg ICAgICAgICAgICBwcmVkID0gZmZfdnZjX3NjYWxpbmdfcHJlZF8xNjsKPiArICAgICAgICBlbHNl Cj4gKyAgICAgICAgICAgIHByZWQgPSBzbC0+c2NhbGluZ19tYXRyaXhfcmVjW2lkIC0gYXBzLT5z Y2FsaW5nX2xpc3RfcHJlZF9pZF9kZWx0YVtpZF1dOwo+ICsgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgbGlzdF9zaXplOyBpKyspIHsKPiArICAgICAgICAgICAgY29uc3QgaW50IHggPSBmZl92 dmNfZGlhZ19zY2FuX3hbbG9nMl9zaXplXVtsb2cyX3NpemVdW2ldOwo+ICsgICAgICAgICAgICBj b25zdCBpbnQgeSA9IGZmX3Z2Y19kaWFnX3NjYW5feVtsb2cyX3NpemVdW2xvZzJfc2l6ZV1baV07 Cj4gKyAgICAgICAgICAgIGNvbnN0IGludCBvZmYgPSB5ICogbWF0cml4X3NpemUgKyB4Owo+ICsg ICAgICAgICAgICBzbC0+c2NhbGluZ19tYXRyaXhfcmVjW2lkXVtvZmZdID0gKHByZWRbb2ZmXSAr IHNjYWxpbmdfbGlzdFtpXSkgJiAyNTU7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGFwc19kZWNvZGVfc2NhbGluZyhjb25zdCBWVkNTY2FsaW5nTGlzdCAqKnNj YWxpbmcsIGNvbnN0IEgyNjZSYXdBUFMgKmFwcykKPiArewo+ICsgICAgVlZDU2NhbGluZ0xpc3Qg KnNsID0gZmZfcmVmc3RydWN0X2FsbG9jeihzaXplb2YoKnNsKSk7Cj4gKyAgICBpZiAoIXNsKQo+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgc2NhbGluZ19kZXJp dmUoc2wsIGFwcyk7Cj4gKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZShzY2FsaW5nLCBzbCk7Cj4g KyAgICBmZl9yZWZzdHJ1Y3RfdW5yZWYoJnNsKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ ICsKPiAraW50IGZmX3Z2Y19kZWNvZGVfYXBzKFZWQ1BhcmFtU2V0cyAqcHMsIGNvbnN0IENvZGVk Qml0c3RyZWFtVW5pdCAqdW5pdCkKPiArewo+ICsgICAgY29uc3QgSDI2NlJhd0FQUyAqYXBzID0g dW5pdC0+Y29udGVudF9yZWY7Cj4gKyAgICBpbnQgcmV0ICAgICAgICAgICAgICAgPSAwOwo+ICsK PiArICAgIGlmICghYXBzKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ ICsKPiArICAgIHN3aXRjaCAoYXBzLT5hcHNfcGFyYW1zX3R5cGUpIHsKPiArICAgICAgICBjYXNl IEFQU19BTEY6Cj4gKyAgICAgICAgICAgIHJldCA9IGFwc19kZWNvZGVfYWxmKCZwcy0+YWxmX2xp c3RbYXBzLT5hcHNfYWRhcHRhdGlvbl9wYXJhbWV0ZXJfc2V0X2lkXSwgYXBzKTsKPiArICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBBUFNfTE1DUzoKPiArICAgICAgICAgICAgZmZf cmVmc3RydWN0X3JlcGxhY2UoJnBzLT5sbWNzX2xpc3RbYXBzLT5hcHNfYWRhcHRhdGlvbl9wYXJh bWV0ZXJfc2V0X2lkXSwgYXBzKTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2Fz ZSBBUFNfU0NBTElORzoKPiArICAgICAgICAgICAgcmV0ID0gYXBzX2RlY29kZV9zY2FsaW5nKCZw cy0+c2NhbGluZ19saXN0W2Fwcy0+YXBzX2FkYXB0YXRpb25fcGFyYW1ldGVyX3NldF9pZF0sIGFw cyk7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNoX3NsaWNlX2FkZHJlc3MoVlZDU0ggKnNoLCBjb25z dCBIMjY2UmF3U1BTICpzcHMsIGNvbnN0IFZWQ1BQUyAqcHBzKQo+ICt7Cj4gKyAgICBjb25zdCBp bnQgc2xpY2VfYWRkcmVzcyAgICAgPSBzaC0+ci0+c2hfc2xpY2VfYWRkcmVzczsKPiArCj4gKyAg ICBpZiAocHBzLT5yLT5wcHNfcmVjdF9zbGljZV9mbGFnKSB7Cj4gKyAgICAgICAgaW50IHBpY19s ZXZlbF9zbGljZV9pZHggPSBzbGljZV9hZGRyZXNzOwo+ICsgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgc2gtPnItPmN1cnJfc3VicGljX2lkeDsgaisrKQo+ICsgICAgICAgICAgICBwaWNfbGV2 ZWxfc2xpY2VfaWR4ICs9IHBwcy0+ci0+bnVtX3NsaWNlc19pbl9zdWJwaWNbal07Cj4gKyAgICAg ICAgc2gtPmN0Yl9hZGRyX2luX2N1cnJfc2xpY2UgPSBwcHMtPmN0Yl9hZGRyX2luX3NsaWNlICsg cHBzLT5zbGljZV9zdGFydF9vZmZzZXRbcGljX2xldmVsX3NsaWNlX2lkeF07Cj4gKyAgICAgICAg c2gtPm51bV9jdHVzX2luX2N1cnJfc2xpY2UgPSBwcHMtPm51bV9jdHVzX2luX3NsaWNlW3BpY19s ZXZlbF9zbGljZV9pZHhdOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBpbnQgdGlsZV94ID0g c2xpY2VfYWRkcmVzcyAlIHBwcy0+ci0+bnVtX3RpbGVfY29sdW1uczsKPiArICAgICAgICBpbnQg dGlsZV95ID0gc2xpY2VfYWRkcmVzcyAvIHBwcy0+ci0+bnVtX3RpbGVfY29sdW1uczsKPiArICAg ICAgICBjb25zdCBpbnQgc2xpY2Vfc3RhcnRfY3RiID0gcHBzLT5yb3dfYmRbdGlsZV95XSAqIHBw cy0+Y3RiX3dpZHRoICsgcHBzLT5jb2xfYmRbdGlsZV94XSAqIHBwcy0+ci0+cm93X2hlaWdodF92 YWxbdGlsZV95XTsKPiArCj4gKyAgICAgICAgc2gtPmN0Yl9hZGRyX2luX2N1cnJfc2xpY2UgPSBw cHMtPmN0Yl9hZGRyX2luX3NsaWNlICsgc2xpY2Vfc3RhcnRfY3RiOwo+ICsKPiArICAgICAgICBz aC0+bnVtX2N0dXNfaW5fY3Vycl9zbGljZSA9IDA7Cj4gKyAgICAgICAgZm9yIChpbnQgdGlsZV9p ZHggPSBzbGljZV9hZGRyZXNzOyB0aWxlX2lkeCA8PSBzbGljZV9hZGRyZXNzICsgc2gtPnItPnNo X251bV90aWxlc19pbl9zbGljZV9taW51czE7IHRpbGVfaWR4KyspIHsKPiArICAgICAgICAgICAg dGlsZV94ID0gdGlsZV9pZHggJSBwcHMtPnItPm51bV90aWxlX2NvbHVtbnM7Cj4gKyAgICAgICAg ICAgIHRpbGVfeSA9IHRpbGVfaWR4IC8gcHBzLT5yLT5udW1fdGlsZV9jb2x1bW5zOwo+ICsgICAg ICAgICAgICBzaC0+bnVtX2N0dXNfaW5fY3Vycl9zbGljZSArPSBwcHMtPnItPnJvd19oZWlnaHRf dmFsW3RpbGVfeV0gKiBwcHMtPnItPmNvbF93aWR0aF92YWxbdGlsZV94XTsKPiArICAgICAgICB9 Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNoX3FwX3koVlZDU0ggKnNoLCBjb25z dCBIMjY2UmF3UFBTICpwcHMsIGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCkKPiArewo+ ICsgICAgY29uc3QgaW50IGluaXRfcXAgPSBwcHMtPnBwc19pbml0X3FwX21pbnVzMjYgKyAyNjsK PiArCj4gKyAgICBpZiAoIXBwcy0+cHBzX3FwX2RlbHRhX2luZm9faW5fcGhfZmxhZykKPiArICAg ICAgICBzaC0+c2xpY2VfcXBfeSA9IGluaXRfcXAgKyBzaC0+ci0+c2hfcXBfZGVsdGE7Cj4gKyAg ICBlbHNlCj4gKyAgICAgICAgc2gtPnNsaWNlX3FwX3kgPSBpbml0X3FwICsgcGgtPnBoX3FwX2Rl bHRhOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzaF9pbnRlcihWVkNTSCAqc2gsIGNvbnN0IEgy NjZSYXdTUFMgKnNwcywgY29uc3QgSDI2NlJhd1BQUyAqcHBzKQo+ICt7Cj4gKyAgICBjb25zdCBI MjY2UmF3U2xpY2VIZWFkZXIgKnJzaCA9IHNoLT5yOwo+ICsKPiArICAgIGlmICghcHBzLT5wcHNf d3BfaW5mb19pbl9waF9mbGFnICYmCj4gKyAgICAgICAgKChwcHMtPnBwc193ZWlnaHRlZF9wcmVk X2ZsYWcgJiYgSVNfUChyc2gpKSB8fAo+ICsgICAgICAgICAocHBzLT5wcHNfd2VpZ2h0ZWRfYmlw cmVkX2ZsYWcgJiYgSVNfQihyc2gpKSkpCj4gKyAgICAgICAgcHJlZF93ZWlnaHRfdGFibGUoJnNo LT5wd3QsICZyc2gtPnNoX3ByZWRfd2VpZ2h0X3RhYmxlKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgc2hfZGVibG9ja19vZmZzZXRzKFZWQ1NIICpzaCkKPiArewo+ICsgICAgY29uc3QgSDI2NlJh d1NsaWNlSGVhZGVyICpyID0gc2gtPnI7Cj4gKwo+ICsgICAgaWYgKCFyLT5zaF9kZWJsb2NraW5n X2ZpbHRlcl9kaXNhYmxlZF9mbGFnKSB7Cj4gKyAgICAgICAgc2gtPmRlYmxvY2suYmV0YV9vZmZz ZXRbTFVNQV0gPSByLT5zaF9sdW1hX2JldGFfb2Zmc2V0X2RpdjIgPDwgMTsKPiArICAgICAgICBz aC0+ZGVibG9jay50Y19vZmZzZXRbTFVNQV0gICA9IHItPnNoX2x1bWFfdGNfb2Zmc2V0X2RpdjIg PDwgMTsKPiArICAgICAgICBzaC0+ZGVibG9jay5iZXRhX29mZnNldFtDQl0gICA9IHItPnNoX2Ni X2JldGFfb2Zmc2V0X2RpdjIgPDwgMTsKPiArICAgICAgICBzaC0+ZGVibG9jay50Y19vZmZzZXRb Q0JdICAgICA9IHItPnNoX2NiX3RjX29mZnNldF9kaXYyIDw8IDE7Cj4gKyAgICAgICAgc2gtPmRl YmxvY2suYmV0YV9vZmZzZXRbQ1JdICAgPSByLT5zaF9jcl9iZXRhX29mZnNldF9kaXYyIDw8IDE7 Cj4gKyAgICAgICAgc2gtPmRlYmxvY2sudGNfb2Zmc2V0W0NSXSAgICAgPSByLT5zaF9jcl90Y19v ZmZzZXRfZGl2MiA8PCAxOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzaF9wYXJ0 aXRpb25fY29uc3RyYWludHMoVlZDU0ggKnNoLCBjb25zdCBIMjY2UmF3U1BTICpzcHMsIGNvbnN0 IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpwaCkKPiArewo+ICsgICAgY29uc3QgaW50IG1pbl9jYl9s b2cyX3NpemVfeSA9IHNwcy0+c3BzX2xvZzJfbWluX2x1bWFfY29kaW5nX2Jsb2NrX3NpemVfbWlu dXMyICsgMjsKPiArICAgIGludCBtaW5fcXRfbG9nMl9zaXplX3lbMl07Cj4gKwo+ICsgICAgaWYg KElTX0koc2gtPnIpKSB7Cj4gKyAgICAgICAgbWluX3F0X2xvZzJfc2l6ZV95W0xVTUFdICAgICAg ICA9IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhfbG9nMl9kaWZmX21pbl9xdF9taW5fY2Jf aW50cmFfc2xpY2VfbHVtYSk7Cj4gKyAgICAgICAgbWluX3F0X2xvZzJfc2l6ZV95W0NIUk9NQV0g ICAgICA9IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhfbG9nMl9kaWZmX21pbl9xdF9taW5f Y2JfaW50cmFfc2xpY2VfY2hyb21hKTsKPiArCj4gKyAgICAgICAgc2gtPm1heF9idF9zaXplW0xV TUFdICAgICAgICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtMVU1BXSAgKyBwaC0+cGhf bG9nMl9kaWZmX21heF9idF9taW5fcXRfaW50cmFfc2xpY2VfbHVtYSk7Cj4gKyAgICAgICAgc2gt Pm1heF9idF9zaXplW0NIUk9NQV0gICAgICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtD SFJPTUFdKyBwaC0+cGhfbG9nMl9kaWZmX21heF9idF9taW5fcXRfaW50cmFfc2xpY2VfY2hyb21h KTsKPiArCj4gKyAgICAgICAgc2gtPm1heF90dF9zaXplW0xVTUFdICAgICAgICAgICA9IDEgPDwg KG1pbl9xdF9sb2cyX3NpemVfeVtMVU1BXSAgKyBwaC0+cGhfbG9nMl9kaWZmX21heF90dF9taW5f cXRfaW50cmFfc2xpY2VfbHVtYSk7Cj4gKyAgICAgICAgc2gtPm1heF90dF9zaXplW0NIUk9NQV0g ICAgICAgICA9IDEgPDwgKG1pbl9xdF9sb2cyX3NpemVfeVtDSFJPTUFdKyBwaC0+cGhfbG9nMl9k aWZmX21heF90dF9taW5fcXRfaW50cmFfc2xpY2VfY2hyb21hKTsKPiArCj4gKyAgICAgICAgc2gt Pm1heF9tdHRfZGVwdGhbTFVNQV0gICAgICAgICA9IHBoLT5waF9tYXhfbXR0X2hpZXJhcmNoeV9k ZXB0aF9pbnRyYV9zbGljZV9sdW1hOwo+ICsgICAgICAgIHNoLT5tYXhfbXR0X2RlcHRoW0NIUk9N QV0gICAgICAgPSBwaC0+cGhfbWF4X210dF9oaWVyYXJjaHlfZGVwdGhfaW50cmFfc2xpY2VfY2hy b21hOwo+ICsKPiArICAgICAgICBzaC0+Y3VfcXBfZGVsdGFfc3ViZGl2ICAgICAgICAgID0gcGgt PnBoX2N1X3FwX2RlbHRhX3N1YmRpdl9pbnRyYV9zbGljZTsKPiArICAgICAgICBzaC0+Y3VfY2hy b21hX3FwX29mZnNldF9zdWJkaXYgID0gcGgtPnBoX2N1X2Nocm9tYV9xcF9vZmZzZXRfc3ViZGl2 X2ludHJhX3NsaWNlOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBmb3IgKGludCBpID0gTFVN QTsgaSA8PSBDSFJPTUE7IGkrKykgIHsKPiArICAgICAgICAgICAgbWluX3F0X2xvZzJfc2l6ZV95 W2ldICAgICAgICA9IChtaW5fY2JfbG9nMl9zaXplX3kgKyBwaC0+cGhfbG9nMl9kaWZmX21pbl9x dF9taW5fY2JfaW50ZXJfc2xpY2UpOwo+ICsgICAgICAgICAgICBzaC0+bWF4X2J0X3NpemVbaV0g ICAgICAgICAgID0gMSA8PCAobWluX3F0X2xvZzJfc2l6ZV95W2ldICArIHBoLT5waF9sb2cyX2Rp ZmZfbWF4X2J0X21pbl9xdF9pbnRlcl9zbGljZSk7Cj4gKyAgICAgICAgICAgIHNoLT5tYXhfdHRf c2l6ZVtpXSAgICAgICAgICAgPSAxIDw8IChtaW5fcXRfbG9nMl9zaXplX3lbaV0gICsgcGgtPnBo X2xvZzJfZGlmZl9tYXhfdHRfbWluX3F0X2ludGVyX3NsaWNlKTsKPiArICAgICAgICAgICAgc2gt Pm1heF9tdHRfZGVwdGhbaV0gICAgICAgICA9IHBoLT5waF9tYXhfbXR0X2hpZXJhcmNoeV9kZXB0 aF9pbnRlcl9zbGljZTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHNoLT5jdV9xcF9kZWx0 YV9zdWJkaXYgICAgICAgICAgPSBwaC0+cGhfY3VfcXBfZGVsdGFfc3ViZGl2X2ludGVyX3NsaWNl Owo+ICsgICAgICAgIHNoLT5jdV9jaHJvbWFfcXBfb2Zmc2V0X3N1YmRpdiAgPSBwaC0+cGhfY3Vf Y2hyb21hX3FwX29mZnNldF9zdWJkaXZfaW50ZXJfc2xpY2U7Cj4gKyAgICB9Cj4gKwo+ICsgICAg c2gtPm1pbl9xdF9zaXplW0xVTUFdICAgPSAxIDw8IG1pbl9xdF9sb2cyX3NpemVfeVtMVU1BXTsK PiArICAgIHNoLT5taW5fcXRfc2l6ZVtDSFJPTUFdID0gMSA8PCBtaW5fcXRfbG9nMl9zaXplX3lb Q0hST01BXTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2hfZW50cnlfcG9pbnRzKFZWQ1NIICpz aCwgY29uc3QgSDI2NlJhd1NQUyAqc3BzLCBjb25zdCBWVkNQUFMgKnBwcykKPiArewo+ICsgICAg aWYgKHNwcy0+c3BzX2VudHJ5X3BvaW50X29mZnNldHNfcHJlc2VudF9mbGFnKSB7Cj4gKyAgICAg ICAgZm9yIChpbnQgaSA9IDEsIGogPSAwOyBpIDwgc2gtPm51bV9jdHVzX2luX2N1cnJfc2xpY2U7 IGkrKykgewo+ICsgICAgICAgICAgICBjb25zdCBpbnQgcHJlX2N0Yl9hZGRyX3ggPSBzaC0+Y3Ri X2FkZHJfaW5fY3Vycl9zbGljZVtpIC0gMV0gJSBwcHMtPmN0Yl93aWR0aDsKPiArICAgICAgICAg ICAgY29uc3QgaW50IHByZV9jdGJfYWRkcl95ID0gc2gtPmN0Yl9hZGRyX2luX2N1cnJfc2xpY2Vb aSAtIDFdIC8gcHBzLT5jdGJfd2lkdGg7Cj4gKyAgICAgICAgICAgIGNvbnN0IGludCBjdGJfYWRk cl94ICAgICA9IHNoLT5jdGJfYWRkcl9pbl9jdXJyX3NsaWNlW2ldICUgcHBzLT5jdGJfd2lkdGg7 Cj4gKyAgICAgICAgICAgIGNvbnN0IGludCBjdGJfYWRkcl95ICAgICA9IHNoLT5jdGJfYWRkcl9p bl9jdXJyX3NsaWNlW2ldIC8gcHBzLT5jdGJfd2lkdGg7Cj4gKyAgICAgICAgICAgIGlmIChwcHMt PmN0Yl90b19yb3dfYmRbY3RiX2FkZHJfeV0gIT0gcHBzLT5jdGJfdG9fcm93X2JkW3ByZV9jdGJf YWRkcl95XSB8fAo+ICsgICAgICAgICAgICAgICAgcHBzLT5jdGJfdG9fY29sX2JkW2N0Yl9hZGRy X3hdICE9IHBwcy0+Y3RiX3RvX2NvbF9iZFtwcmVfY3RiX2FkZHJfeF0gfHwKPiArICAgICAgICAg ICAgICAgIChjdGJfYWRkcl95ICE9IHByZV9jdGJfYWRkcl95ICYmIHNwcy0+c3BzX2VudHJvcHlf Y29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnKSkgewo+ICsgICAgICAgICAgICAgICAgc2gtPmVudHJ5 X3BvaW50X3N0YXJ0X2N0dVtqKytdID0gaTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0K PiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIGludCBzaF9kZXJpdmUoVlZDU0ggKnNoLCBjb25z dCBWVkNGcmFtZVBhcmFtU2V0cyAqZnBzKQo+ICt7Cj4gKyAgICBjb25zdCBIMjY2UmF3U1BTICpz cHMgICAgICAgICAgID0gZnBzLT5zcHMtPnI7Cj4gKyAgICBjb25zdCBIMjY2UmF3UFBTICpwcHMg ICAgICAgICAgID0gZnBzLT5wcHMtPnI7Cj4gKyAgICBjb25zdCBIMjY2UmF3UGljdHVyZUhlYWRl ciAqcGggID0gZnBzLT5waC5yOwo+ICsKPiArICAgIHNoX3NsaWNlX2FkZHJlc3Moc2gsIHNwcywg ZnBzLT5wcHMpOwo+ICsgICAgc2hfaW50ZXIoc2gsIHNwcywgcHBzKTsKPiArICAgIHNoX3FwX3ko c2gsIHBwcywgcGgpOwo+ICsgICAgc2hfZGVibG9ja19vZmZzZXRzKHNoKTsKPiArICAgIHNoX3Bh cnRpdGlvbl9jb25zdHJhaW50cyhzaCwgc3BzLCBwaCk7Cj4gKyAgICBzaF9lbnRyeV9wb2ludHMo c2gsIHNwcywgZnBzLT5wcHMpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQg ZmZfdnZjX2RlY29kZV9zaChWVkNTSCAqc2gsIGNvbnN0IFZWQ0ZyYW1lUGFyYW1TZXRzICpmcHMs IGNvbnN0IENvZGVkQml0c3RyZWFtVW5pdCAqdW5pdCkKPiArewo+ICsgICAgaW50IHJldDsKPiAr Cj4gKyAgICBpZiAoIWZwcy0+c3BzIHx8ICFmcHMtPnBwcykKPiArICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKPiArCj4gKyAgICBmZl9yZWZzdHJ1Y3RfcmVwbGFjZSgmc2gtPnIs IHVuaXQtPmNvbnRlbnRfcmVmKTsKPiArCj4gKyAgICByZXQgPSBzaF9kZXJpdmUoc2gsIGZwcyk7 Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIHJl dHVybiAwOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19wcy5oIGIvbGli YXZjb2RlYy92dmMvdnZjX3BzLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAuLmVkZTRlNzQwMDkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy92dmMv dnZjX3BzLmgKPiBAQCAtMCwwICsxLDI2MyBAQAo+ICsvKgo+ICsgKiBWVkMgcGFyYW1ldGVyIHNl dCBwYXJzZXIKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDIzIE51byBNaQo+ICsgKgo+ICsg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ ICsgKi8KPiArCj4gKyNpZm5kZWYgQVZDT0RFQ19WVkNfVlZDX1BTX0gKPiArI2RlZmluZSBBVkNP REVDX1ZWQ19WVkNfUFNfSAo+ICsKPiArI2luY2x1ZGUgImxpYmF2Y29kZWMvY2JzX2gyNjYuaCIK PiArI2luY2x1ZGUgImxpYmF2Y29kZWMvdnZjLmgiCj4gKwo+ICsjZGVmaW5lIElTX0lEUihzKSAg KChzKS0+dmNsX3VuaXRfdHlwZSA9PSBWVkNfSURSX1dfUkFETCB8fCAocyktPnZjbF91bml0X3R5 cGUgPT0gVlZDX0lEUl9OX0xQKQo+ICsjZGVmaW5lIElTX0NSQShzKSAgKChzKS0+dmNsX3VuaXRf dHlwZSA9PSBWVkNfQ1JBX05VVCkKPiArI2RlZmluZSBJU19JUkFQKHMpIChJU19JRFIocykgfHwg SVNfQ1JBKHMpKQo+ICsjZGVmaW5lIElTX0dEUihzKSAgKChzKS0+dmNsX3VuaXRfdHlwZSA9PSBW VkNfR0RSX05VVCkKPiArI2RlZmluZSBJU19DVlNTKHMpIChJU19JUkFQKHMpfHwgSVNfR0RSKHMp KQo+ICsjZGVmaW5lIElTX0NMVlNTKHMpIChJU19DVlNTKHMpICYmIHMtPm5vX291dHB1dF9iZWZv cmVfcmVjb3ZlcnlfZmxhZykKPiArI2RlZmluZSBJU19SQVNMKHMpICgocyktPnZjbF91bml0X3R5 cGUgPT0gVlZDX1JBU0xfTlVUKQo+ICsjZGVmaW5lIElTX1JBREwocykgKChzKS0+dmNsX3VuaXRf dHlwZSA9PSBWVkNfUkFETF9OVVQpCj4gKwo+ICsjZGVmaW5lIElTX0kocnNoKSAoKHJzaCktPnNo X3NsaWNlX3R5cGUgPT0gVlZDX1NMSUNFX1RZUEVfSSkKPiArI2RlZmluZSBJU19QKHJzaCkgKChy c2gpLT5zaF9zbGljZV90eXBlID09IFZWQ19TTElDRV9UWVBFX1ApCj4gKyNkZWZpbmUgSVNfQihy c2gpICgocnNoKS0+c2hfc2xpY2VfdHlwZSA9PSBWVkNfU0xJQ0VfVFlQRV9CKQo+ICsKPiArI2Rl ZmluZSBJTlZfUE9DIElOVF9NSU4KPiArI2RlZmluZSBHRFJfSVNfUkVDT1ZFUkVEKHMpICAocy0+ Z2RyX3JlY292ZXJ5X3BvaW50X3BvYyA9PSBJTlZfUE9DKQo+ICsjZGVmaW5lIEdEUl9TRVRfUkVD T1ZFUkVEKHMpIChzLT5nZHJfcmVjb3ZlcnlfcG9pbnRfcG9jID0gIElOVl9QT0MpCj4gKwo+ICsj ZGVmaW5lIExNQ1NfTUFYX0JJVF9ERVBUSCAgMTIKPiArI2RlZmluZSBMTUNTX01BWF9MVVRfU0la RSAgICgxIDw8IExNQ1NfTUFYX0JJVF9ERVBUSCkKPiArI2RlZmluZSBMTUNTX01BWF9CSU5fU0la RSAgIDE2Cj4gKyNkZWZpbmUgTEFERl9NQVhfSU5URVJWQUwgICA1Cj4gKwo+ICtlbnVtIHsKPiAr ICAgIENIUk9NQV9GT1JNQVRfTU9OTywKPiArICAgIENIUk9NQV9GT1JNQVRfNDIwLAo+ICsgICAg Q0hST01BX0ZPUk1BVF80MjIsCj4gKyAgICBDSFJPTUFfRk9STUFUXzQ0NCwKPiArfTsKPiArCj4g K3R5cGVkZWYgc3RydWN0IFZWQ1NQUyB7Cj4gKyAgICBjb25zdCBIMjY2UmF3U1BTICpyOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVm ZXJlbmNlCj4gKwo+ICsgICAgLy9kZXJpdmVkIHZhbHVlcwo+ICsgICAgdWludDE2X3QgICAgd2lk dGg7Cj4gKyAgICB1aW50MTZfdCAgICBoZWlnaHQ7Cj4gKyAgICB1aW50OF90ICAgICBoc2hpZnRb VlZDX01BWF9TQU1QTEVfQVJSQVlTXTsKPiArICAgIHVpbnQ4X3QgICAgIHZzaGlmdFtWVkNfTUFY X1NBTVBMRV9BUlJBWVNdOwo+ICsgICAgdWludDMyX3QgICAgbWF4X3BpY19vcmRlcl9jbnRfbHNi OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNYXhQaWNPcmRlckNudExzYgo+ICsK PiArICAgIHVpbnQ4X3QgICAgIHBpeGVsX3NoaWZ0Owo+ICsgICAgZW51bSBBVlBpeGVsRm9ybWF0 IHBpeF9mbXQ7Cj4gKwo+ICsgICAgdWludDhfdCAgICAgYml0X2RlcHRoOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgQml0RGVwdGgKPiArICAgIHVpbnQ4X3Qg ICAgIHFwX2JkX29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv Ly88IFFwQmRPZmZzZXQKPiArICAgIHVpbnQ4X3QgICAgIGN0Yl9sb2cyX3NpemVfeTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IEN0YkxvZzJTaXplWQo+ICsgICAgdWlu dDhfdCAgICAgY3RiX3NpemVfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vLzwgQ3RiU2l6ZVkKPiArICAgIHVpbnQ4X3QgICAgIG1pbl9jYl9sb2cyX3NpemVfeTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1pbkNiTG9nMlNpemVZCj4gKyAg ICB1aW50OF90ICAgICBtaW5fY2Jfc2l6ZV95OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8vPCBNaW5DYlNpemVZCj4gKyAgICB1aW50OF90ICAgICBtYXhfdGJfc2l6ZV95 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBNYXhUYlNpemVZCj4g KyAgICB1aW50OF90ICAgICBtYXhfdHNfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8vPCBNYXhUc1NpemUKPiArICAgIHVpbnQ4X3QgICAgIG1heF9udW1fbWVy Z2VfY2FuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heE51bU1lcmdl Q2FuZAo+ICsgICAgdWludDhfdCAgICAgbWF4X251bV9pYmNfbWVyZ2VfY2FuZDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4TnVtSWJjTWVyZ2VDYW5kCj4gKyAgICB1aW50OF90 ICAgICBtYXhfbnVtX2dwbV9tZXJnZV9jYW5kOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8vPCBNYXhOdW1HcG1NZXJnZUNhbmQKPiArICAgIHVpbnQ4X3QgICAgIG51bV9sYWRmX2ludGVy dmFsczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IHNwc19udW1fbGFkZl9p bnRlcnZhbHNfbWludXMyICsgMjsKPiArICAgIHVpbnQzMl90ICAgIGxhZGZfaW50ZXJ2YWxfbG93 ZXJfYm91bmRbTEFERl9NQVhfSU5URVJWQUxdOyAgICAgICAvLy88IFNwc0xhZGZJbnRlcnZhbExv d2VyQm91bmRbXQo+ICsgICAgdWludDhfdCAgICAgbG9nMl9wYXJhbGxlbF9tZXJnZV9sZXZlbDsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgc3BzX2xvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2 ZWxfbWludXMyICsgMjsKPiArICAgIHVpbnQ4X3QgICAgIGxvZzJfdHJhbnNmb3JtX3JhbmdlOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IExvZzJUcmFuc2Zvcm1SYW5nZQo+ICsg ICAgaW50OF90ICAgICAgY2hyb21hX3FwX3RhYmxlWzNdW1ZWQ19NQVhfUE9JTlRTX0lOX1FQX1RB QkxFXTsgICAgIC8vLzwgQ2hyb21hUXBUYWJsZQo+ICt9IFZWQ1NQUzsKPiArCj4gK3R5cGVkZWYg c3RydWN0IERCUGFyYW1zIHsKPiArICAgIGludDhfdCBiZXRhX29mZnNldFtWVkNfTUFYX1NBTVBM RV9BUlJBWVNdOwo+ICsgICAgaW50OF90IHRjX29mZnNldFtWVkNfTUFYX1NBTVBMRV9BUlJBWVNd Owo+ICt9IERCUGFyYW1zOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgVlZDUFBTIHsKPiArICAgIGNv bnN0IEgyNjZSYXdQUFMgKnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UKPiArCj4gKyAgICAvL2Rlcml2ZWQgdmFsdWU7 Cj4gKyAgICBpbnQ4X3QgICBjaHJvbWFfcXBfb2Zmc2V0WzNdOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8vPCBwcHNfY2JfcXBfb2Zmc2V0LCBwcHNfY3JfcXBfb2Zmc2V0LCBw cHNfam9pbnRfY2Jjcl9xcF9vZmZzZXRfdmFsdWUKPiArICAgIGludDhfdCAgIGNocm9tYV9xcF9v ZmZzZXRfbGlzdFs2XVszXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IHBwc19jYl9x cF9vZmZzZXRfbGlzdCwgcHBzX2NyX3FwX29mZnNldF9saXN0LCBwcHNfam9pbnRfY2Jjcl9xcF9v ZmZzZXRfbGlzdAo+ICsKPiArICAgIHVpbnQxNl90IHdpZHRoOwo+ICsgICAgdWludDE2X3QgaGVp Z2h0Owo+ICsKPiArICAgIHVpbnQxNl90IHNsaWNlX3N0YXJ0X29mZnNldFtWVkNfTUFYX1NMSUNF U107Cj4gKyAgICB1aW50MTZfdCBudW1fY3R1c19pbl9zbGljZSBbVlZDX01BWF9TTElDRVNdOwo+ ICsKPiArICAgIHVpbnQxNl90IG1pbl9jYl93aWR0aDsKPiArICAgIHVpbnQxNl90IG1pbl9jYl9o ZWlnaHQ7Cj4gKwo+ICsgICAgdWludDE2X3QgY3RiX3dpZHRoOwo+ICsgICAgdWludDE2X3QgY3Ri X2hlaWdodDsKPiArICAgIHVpbnQzMl90IGN0Yl9jb3VudDsKPiArCj4gKyAgICB1aW50MTZfdCBt aW5fcHVfd2lkdGg7Cj4gKyAgICB1aW50MTZfdCBtaW5fcHVfaGVpZ2h0Owo+ICsgICAgdWludDE2 X3QgbWluX3R1X3dpZHRoOwo+ICsgICAgdWludDE2X3QgbWluX3R1X2hlaWdodDsKPiArCj4gKyAg ICB1aW50MzJfdCAqY3RiX2FkZHJfaW5fc2xpY2U7ICAgICAgICAgICAgLy8vPCBDdGJBZGRySW5D dXJyU2xpY2UgZm9yIGVudGlyZSBwaWN0dXJlCj4gKyAgICB1aW50MTZfdCAqY29sX2JkOwo+ICsg ICAgdWludDE2X3QgKnJvd19iZDsKPiArICAgIHVpbnQxNl90ICpjdGJfdG9fY29sX2JkOwo+ICsg ICAgdWludDE2X3QgKmN0Yl90b19yb3dfYmQ7Cj4gKwo+ICsgICAgdWludDE2X3Qgd2lkdGgzMjsg ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgd2lkdGggIGluIDMyIHBpeGVscwo+ICsgICAgdWlu dDE2X3QgaGVpZ2h0MzI7ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgaGVpZ2h0IGluIDMyIHBp eGVscwo+ICsgICAgdWludDE2X3Qgd2lkdGg2NDsgICAgICAgICAgICAgICAgICAgICAgIC8vLzwg d2lkdGggIGluIDY0IHBpeGVscwo+ICsgICAgdWludDE2X3QgaGVpZ2h0NjQ7ICAgICAgICAgICAg ICAgICAgICAgIC8vLzwgaGVpZ2h0IGluIDY0IHBpeGVscwo+ICsKPiArICAgIHVpbnQxNl90IHJl Zl93cmFwYXJvdW5kX29mZnNldDsgICAgICAgICAvLy88IFBwc1JlZldyYXBhcm91bmRPZmZzZXQK PiArCj4gK30gVlZDUFBTOwo+ICsKPiArI2RlZmluZSBNQVhfV0VJR0hUUyAxNQo+ICt0eXBlZGVm IHN0cnVjdCBQcmVkV2VpZ2h0VGFibGUgewo+ICsgICAgdWludDhfdCBsb2cyX2Rlbm9tWzJdOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBsdW1hX2xvZzJfd2VpZ2h0 X2Rlbm9tLCBDaHJvbWFMb2cyV2VpZ2h0RGVub20KPiArCj4gKyAgICB1aW50OF90IG5iX3dlaWdo dHNbMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IG51bV9sMF93 ZWlnaHRzLCBudW1fbDFfd2VpZ2h0cwo+ICsgICAgdWludDhfdCB3ZWlnaHRfZmxhZ1syXVsyXVtN QVhfV0VJR0hUU107ICAgICAgICAgICAgICAgICAgICAgLy8vPCBsdW1hX3dlaWdodF9sMF9mbGFn LCBjaHJvbWFfd2VpZ2h0X2wwX2ZsYWcsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IGx1bWFfd2VpZ2h0X2wxX2Zs YWcsIGNocm9tYV93ZWlnaHRfbDFfZmxhZywKPiArICAgIGludDE2X3Qgd2VpZ2h0WzJdW1ZWQ19N QVhfU0FNUExFX0FSUkFZU11bTUFYX1dFSUdIVFNdOyAgICAgIC8vLzwgTHVtYVdlaWdodEwwLCBM dW1hV2VpZ2h0TDEsIENocm9tYVdlaWdodEwwLCBDaHJvbWFXZWlnaHRMMQo+ICsgICAgaW50MTZf dCBvZmZzZXRbMl1bVlZDX01BWF9TQU1QTEVfQVJSQVlTXVtNQVhfV0VJR0hUU107ICAgICAgLy8v PCBsdW1hX29mZnNldF9sMCwgbHVtYV9vZmZzZXRfbDEsIENocm9tYU9mZnNldEwwLCBDaHJvbWFP ZmZzZXRMMQo+ICt9IFByZWRXZWlnaHRUYWJsZTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZWQ1BI IHsKPiArICAgIGNvbnN0IEgyNjZSYXdQaWN0dXJlSGVhZGVyICpyOwo+ICsgICAgdm9pZCAqcnJl ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSZWZTdHJ1Y3QgcmVm ZXJlbmNlLCBiYWNraW5nIHBoIGFib3ZlCj4gKwo+ICsgICAgLy9kZXJpdmVkIHZhbHVlcwo+ICsg ICAgdWludDMyX3QgbWF4X251bV9zdWJibG9ja19tZXJnZV9jYW5kOyAgICAgICAgICAgLy8vPCBN YXhOdW1TdWJibG9ja01lcmdlQ2FuZAo+ICsgICAgaW50MzJfdCAgcG9jOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8vPCBQaWNPcmRlckNudFZhbAo+ICsgICAgUHJlZFdlaWdo dFRhYmxlIHB3dDsKPiArfSBWVkNQSDsKPiArCj4gKyNkZWZpbmUgQUxGX05VTV9GSUxURVJTX0xV TUEgICAgMjUKPiArI2RlZmluZSBBTEZfTlVNX0ZJTFRFUlNfQ0hST01BICAgOAo+ICsjZGVmaW5l IEFMRl9OVU1fRklMVEVSU19DQyAgICAgICA1Cj4gKwo+ICsjZGVmaW5lIEFMRl9OVU1fQ09FRkZf TFVNQSAgICAgIDEyCj4gKyNkZWZpbmUgQUxGX05VTV9DT0VGRl9DSFJPTUEgICAgIDYKPiArI2Rl ZmluZSBBTEZfTlVNX0NPRUZGX0NDICAgICAgICAgNwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgVlZD QUxGIHsKPiArICAgIGludDE2X3QgbHVtYV9jb2VmZiAgICAgW0FMRl9OVU1fRklMVEVSU19MVU1B XVtBTEZfTlVNX0NPRUZGX0xVTUFdOwo+ICsgICAgdWludDhfdCBsdW1hX2NsaXBfaWR4ICBbQUxG X05VTV9GSUxURVJTX0xVTUFdW0FMRl9OVU1fQ09FRkZfTFVNQV07Cj4gKwo+ICsgICAgdWludDhf dCBudW1fY2hyb21hX2ZpbHRlcnM7Cj4gKyAgICBpbnQxNl90IGNocm9tYV9jb2VmZiAgIFtBTEZf TlVNX0ZJTFRFUlNfQ0hST01BXVtBTEZfTlVNX0NPRUZGX0NIUk9NQV07Cj4gKyAgICB1aW50OF90 IGNocm9tYV9jbGlwX2lkeFtBTEZfTlVNX0ZJTFRFUlNfQ0hST01BXVtBTEZfTlVNX0NPRUZGX0NI Uk9NQV07Cj4gKwo+ICsgICAgdWludDhfdCBudW1fY2NfZmlsdGVyc1syXTsgICAgICAgIC8vLzwg YWxmX2NjX2NiX2ZpbHRlcnNfc2lnbmFsbGVkX21pbnVzMSArIDEsIGFsZl9jY19jcl9maWx0ZXJz X3NpZ25hbGxlZF9taW51czEgKyAxCj4gKyAgICBpbnQxNl90IGNjX2NvZWZmWzJdW0FMRl9OVU1f RklMVEVSU19DQ11bQUxGX05VTV9DT0VGRl9DQ107Cj4gK30gVlZDQUxGOwo+ICsKPiArZW51bSB7 Cj4gKyAgU0xfU1RBUlRfMngyICAgID0gMCwKPiArICBTTF9TVEFSVF80eDQgICAgPSAyLAo+ICsg IFNMX1NUQVJUXzh4OCAgICA9IDgsCj4gKyAgU0xfU1RBUlRfMTZ4MTYgID0gMTQsCj4gKyAgU0xf U1RBUlRfMzJ4MzIgID0gMjAsCj4gKyAgU0xfU1RBUlRfNjR4NjQgID0gMjYsCj4gKyAgU0xfTUFY X0lEICAgICAgID0gMjgsCj4gK307Cj4gKwo+ICsjZGVmaW5lIFNMX01BWF9NQVRSSVhfU0laRSA4 Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBWVkNTY2FsaW5nTGlzdCB7Cj4gKyAgICB1aW50OF90IHNj YWxpbmdfbWF0cml4X3JlY1tTTF9NQVhfSURdW1NMX01BWF9NQVRSSVhfU0laRSAqIFNMX01BWF9N QVRSSVhfU0laRV07ICAvLy88IFNjYWxpbmdNYXRyaXhSZWMKPiArICAgIHVpbnQ4X3Qgc2NhbGlu Z19tYXRyaXhfZGNfcmVjW1NMX01BWF9JRCAtIFNMX1NUQVJUXzE2eDE2XTsgICAgICAgICAgICAg ICAgICAgICAgIC8vLzwgU2NhbGluZ01hdHJpeERjUmVjW3JlZklkIOKIkiAxNF0KPiArfSBWVkNT Y2FsaW5nTGlzdDsKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZWQ0xNQ1Mgewo+ICsgICAgdWludDhf dCAgbWluX2Jpbl9pZHg7Cj4gKyAgICB1aW50OF90ICBtYXhfYmluX2lkeDsKPiArCj4gKyAgICAv LyoyIGZvciBoaWdoIGRlcHRoCj4gKyAgICB1aW50OF90ICBmd2RfbHV0W0xNQ1NfTUFYX0xVVF9T SVpFICogMl07Cj4gKyAgICB1aW50OF90ICBpbnZfbHV0W0xNQ1NfTUFYX0xVVF9TSVpFICogMl07 Cj4gKwo+ICsgICAgdWludDE2X3QgcGl2b3RbTE1DU19NQVhfQklOX1NJWkUgKyAxXTsKPiArICAg IHVpbnQxNl90IGNocm9tYV9zY2FsZV9jb2VmZltMTUNTX01BWF9CSU5fU0laRV07Cj4gK30gVlZD TE1DUzsKPiArCj4gKyNkZWZpbmUgVlZDX01BWF9BTEZfQ09VTlQgICAgICAgIDgKPiArI2RlZmlu ZSBWVkNfTUFYX0xNQ1NfQ09VTlQgICAgICAgNAo+ICsjZGVmaW5lIFZWQ19NQVhfU0xfQ09VTlQg ICAgICAgICA4Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBWVkNQYXJhbVNldHMgewo+ICsgICAgY29u c3QgVlZDU1BTICAgICAgICAgICAgKnNwc19saXN0W1ZWQ19NQVhfU1BTX0NPVU5UXTsgICAgICAg Ly8vPCBSZWZTdHJ1Y3QgcmVmZXJlbmNlCj4gKyAgICBjb25zdCBWVkNQUFMgICAgICAgICAgICAq cHBzX2xpc3RbVlZDX01BWF9QUFNfQ09VTlRdOyAgICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVu Y2UKPiArICAgIGNvbnN0IFZWQ0FMRiAgICAgICAgICAgICphbGZfbGlzdFtWVkNfTUFYX0FMRl9D T1VOVF07ICAgICAgIC8vLzwgUmVmU3RydWN0IHJlZmVyZW5jZQo+ICsgICAgY29uc3QgSDI2NlJh d0FQUyAgICAgICAgKmxtY3NfbGlzdFtWVkNfTUFYX0xNQ1NfQ09VTlRdOyAgICAgLy8vPCBSZWZT dHJ1Y3QgcmVmZXJlbmNlCj4gKyAgICBjb25zdCBWVkNTY2FsaW5nTGlzdCAgICAqc2NhbGluZ19s aXN0W1ZWQ19NQVhfU0xfQ09VTlRdOyAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UKPiArfSBW VkNQYXJhbVNldHM7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBWVkNGcmFtZVBhcmFtU2V0cyB7Cj4g KyAgICBjb25zdCBWVkNTUFMgICAgICAgICAgICpzcHM7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UKPiArICAgIGNvbnN0IFZWQ1BQUyAgICAg ICAgICAgKnBwczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgUmVmU3RydWN0 IHJlZmVyZW5jZQo+ICsgICAgVlZDUEggICAgICAgICAgICAgICAgICAgcGg7Cj4gKyAgICBjb25z dCBWVkNBTEYgICAgICAgICAgICphbGZfbGlzdFtWVkNfTUFYX0FMRl9DT1VOVF07ICAgICAgICAv Ly88IFJlZlN0cnVjdCByZWZlcmVuY2UKPiArICAgIFZWQ0xNQ1MgICAgICAgICAgICAgICAgIGxt Y3M7Cj4gKyAgICBjb25zdCBWVkNTY2FsaW5nTGlzdCAgICpzbDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvLy88IFJlZlN0cnVjdCByZWZlcmVuY2UKPiArfSBWVkNGcmFtZVBhcmFt U2V0czsKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZWQ1NIIHsKPiArICAgIGNvbnN0IEgyNjZSYXdT bGljZUhlYWRlciAqcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBSZWZTdHJ1Y3Qg cmVmZXJlbmNlCj4gKwo+ICsgICAgLy8gZGVyaXZlZCB2YWx1ZXMKPiArICAgIC8vIGN0dSBhZGRy ZXNzCj4gKyAgICB1aW50MzJfdCAgICAgICAgbnVtX2N0dXNfaW5fY3Vycl9zbGljZTsgICAgICAg ICAgICAgICAgIC8vLzwgTnVtQ3R1c0luQ3VyclNsaWNlCj4gKyAgICBjb25zdCB1aW50MzJfdCog Y3RiX2FkZHJfaW5fY3Vycl9zbGljZTsgICAgICAgICAgICAgICAgIC8vLzwgQ3RiQWRkckluQ3Vy clNsaWNlCj4gKwo+ICsgICAgLy8gaW50ZXIKPiArICAgIFByZWRXZWlnaHRUYWJsZSBwd3Q7Cj4g KyAgICBpbnQ4X3QgICByZWZfaWR4X3N5bVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vLzwgUmVmSWR4U3ltTDAsIFJlZklkeFN5bUwxCj4gKwo+ICsgICAgLy8gcXBfeQo+ICsg ICAgaW50OF90ICAgc2xpY2VfcXBfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLy88IFNsaWNlUXBZCj4gKwo+ICsgICAgLy8gZGVibG9ja19vZmZzZXRzCj4gKyAgICBEQlBh cmFtcyBkZWJsb2NrOwo+ICsKPiArICAgIC8vIHBhcnRpdGlvbiBjb25zdHJhaW5zCj4gKyAgICB1 aW50OF90ICBtaW5fcXRfc2l6ZVsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v LzwgTWluUXRTaXplWSwgTWluUXRTaXplQwo+ICsgICAgdWludDhfdCAgbWF4X2J0X3NpemVbMl07 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE1heEJ0U2l6ZVksIE1heEJ0U2l6 ZUMKPiArICAgIHVpbnQ4X3QgIG1heF90dF9zaXplWzJdOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8vPCBNYXhUdFNpemVZLCBNYXhUdFNpemVDCj4gKyAgICB1aW50OF90ICBtYXhf bXR0X2RlcHRoWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwgTWF4TXR0RGVw dGhZLCBNYXhNdHREZXB0aEMKPiArICAgIHVpbnQ4X3QgIGN1X3FwX2RlbHRhX3N1YmRpdjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBDdVFwRGVsdGFTdWJkaXYKPiArICAgIHVpbnQ4 X3QgIGN1X2Nocm9tYV9xcF9vZmZzZXRfc3ViZGl2OyAgICAgICAgICAgICAgICAgICAgLy8vPCBD dUNocm9tYVFwT2Zmc2V0U3ViZGl2Cj4gKwo+ICsgICAgLy8gZW50cmllcwo+ICsgICAgdWludDMy X3QgZW50cnlfcG9pbnRfc3RhcnRfY3R1W1ZWQ19NQVhfRU5UUllfUE9JTlRTXTsgICAvLy88IGVu dHJ5IHBvaW50IHN0YXJ0IGluIGN0dV9hZGRyCj4gK30gVlZDU0g7Cj4gKwo+ICtzdHJ1Y3QgVlZD Q29udGV4dDsKPiArCj4gK2ludCBmZl92dmNfZGVjb2RlX2ZyYW1lX3BzKFZWQ0ZyYW1lUGFyYW1T ZXRzICpmcHMsIHN0cnVjdCBWVkNDb250ZXh0ICpzKTsKPiAraW50IGZmX3Z2Y19kZWNvZGVfYXBz KFZWQ1BhcmFtU2V0cyAqcHMsIGNvbnN0IENvZGVkQml0c3RyZWFtVW5pdCAqdW5pdCk7Cj4gK2lu dCBmZl92dmNfZGVjb2RlX3NoKFZWQ1NIICpzaCwgY29uc3QgVlZDRnJhbWVQYXJhbVNldHMgKnBz LCBjb25zdCBDb2RlZEJpdHN0cmVhbVVuaXQgKnVuaXQpOwo+ICt2b2lkIGZmX3Z2Y19mcmFtZV9w c19mcmVlKFZWQ0ZyYW1lUGFyYW1TZXRzICpmcHMpOwo+ICt2b2lkIGZmX3Z2Y19wc191bmluaXQo VlZDUGFyYW1TZXRzICpwcyk7Cj4gKwo+ICsjZW5kaWYgLyogQVZDT0RFQ19WVkNfVlZDX1BTX0gg Ki8KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdnZjZGVjLmggYi9saWJhdmNvZGVjL3Z2 Yy92dmNkZWMuaAo+IGluZGV4IDcyMGQ1ODVmZDQuLjZiMTAyMWEzYmUgMTAwNjQ0Cj4gLS0tIGEv bGliYXZjb2RlYy92dmMvdnZjZGVjLmgKPiArKysgYi9saWJhdmNvZGVjL3Z2Yy92dmNkZWMuaAo+ IEBAIC0yNiw2ICsyNiw4IEBACj4gIAo+ICAjaW5jbHVkZSAibGliYXZjb2RlYy92dmMuaCIKPiAg Cj4gKyNpbmNsdWRlICJ2dmNfcHMuaCIKPiArCj4gICNkZWZpbmUgTFVNQSAgICAgICAgICAgICAg ICAgICAgMAo+ICAjZGVmaW5lIENIUk9NQSAgICAgICAgICAgICAgICAgIDEKPiAgI2RlZmluZSBD QiAgICAgICAgICAgICAgICAgICAgICAxCj4gQEAgLTE3NSw2ICsxNzcsMTEgQEAgdHlwZWRlZiBz dHJ1Y3QgVlZDRnJhbWVDb250ZXh0IHsKPiAgdHlwZWRlZiBzdHJ1Y3QgVlZDQ29udGV4dCB7Cj4g ICAgICBzdHJ1Y3QgQVZDb2RlY0NvbnRleHQgKmF2Y3R4Owo+ICAKPiArICAgIENvZGVkQml0c3Ry ZWFtQ29udGV4dCAqY2JjOwo+ICsgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCBjdXJyZW50X2Zy YW1lOwo+ICsKPiArICAgIFZWQ1BhcmFtU2V0cyBwczsKPiArCj4gICAgICBpbnQgdGVtcG9yYWxf aWQ7ICAgICAgICAvLy88IHRlbXBvcmFsX2lkX3BsdXMxIC0gMQo+ICAgICAgaW50IHBvY190aWQw Owo+ICAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZm bXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9m Zm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwg dmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9y ZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K