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 8223A47EBC for ; Sun, 31 Dec 2023 08:21:19 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F1E3C68CE1C; Sun, 31 Dec 2023 10:20:17 +0200 (EET) Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2068.outbound.protection.outlook.com [40.92.52.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8224968CD4E for ; Sun, 31 Dec 2023 10:20:14 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YD+pZR3iFug3QCJkNfexY1iMllNF0H0pyQ+MSQDe/h1axKHNdvy7c/B7u+rjZYsZgeTe6BNfnPqhT6qMQj5m/jDDJAWpW+KzYN5ond4ohX1Fm/K2OhgFcP9ueMONHnuOanXa2tCOAY3Re9/pfJVAjhbVv0Swf74pVLRJW7fL2lMw6iA/2QLTh5Udf1GD/rg8sk7iXRkpjgOiuWUNbaNz9+QK8OWfH04xTmDBZNn5cV5LSnZtWZu4LVXvKC/oxPP9PR/XCgQ36QznFKDpR9hmlFTtwbjkxyONTTEek/4n+lMb7tmthN+1Dpkj2B/bbIEyFxvcXc8SZKQLM0w6lmTcaw== 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=EdCHHvKB9U/3LZdewILr6Ak4w1JItqLyao9xfbPZHfA=; b=Sjj46T0zllMWoeTLlV5STWFQifKqdY9qkBBImI8IvwtQ4DqIxdhuW34HF6ArcV7aoy+dGYUMJdeNlIJsHBJa+FO4YF4oPlf7zewfp81MhS5kcpZA/4ombKvIl2EFFnKUUzEnO1zWSTi/AmOoA6tIqgkRJqesnV0nBh/Q2926m0UPkxYAICgt+ULAhAJJAV/Bxg9U7qE6BMGXqmlHlb4Y5VEcp/uSj8myGChD/QbdbVVQJTs3v2ZmHvMGUrLyCA55sQ3JfxOQaw7W9609KRMocGEqmK6+Jovw9agorqs3SzTtedRR02nI/qNMaAsYHnS5WfpO0gNKoiGkxi+UBlq1iw== 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=EdCHHvKB9U/3LZdewILr6Ak4w1JItqLyao9xfbPZHfA=; b=nx3QCNcWQERaHMqkj/swtb7fZATzf2CEu9RBHOuj9ffl8kY54PNYfqd30MsPtUfZamQykn561XC400PuiIh/z2/8ys1zWCbfjeabWrWxNjZ7izXsWShiBVDzioSiijjGHHdBLtvP6bRo1HPwrnXeCMBhHWEUxPY2R7skdVkFRuw0moIcI/C/NVdLo2aYn3BLg9bsxKCClLbjHqzwwcbYOR2Ype2Exz2lW/zkKH/5gVCGiHJGf99eJ3XF+EotvHz71Zrt7u6d3hmWazvfNaRZFTSgUpFtPBnPKP+y55iL60A99glnmED0W8Xi8ALYhDMvM8GaCU5v95IlmE46eXZUYQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by JH0PR06MB6367.apcprd06.prod.outlook.com (2603:1096:990:c::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.21; Sun, 31 Dec 2023 08:19:52 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7%6]) with mapi id 15.20.7135.023; Sun, 31 Dec 2023 08:19:52 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 31 Dec 2023 16:18:54 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231231081858.1704-1-nuomi2021@gmail.com> References: <20231231081858.1704-1-nuomi2021@gmail.com> X-TMN: [92lJE/5+c530OdTzuo3oLzUjWOpz7Q+8] X-ClientProxiedBy: SI2PR02CA0039.apcprd02.prod.outlook.com (2603:1096:4:196::9) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20231231081858.1704-10-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|JH0PR06MB6367:EE_ X-MS-Office365-Filtering-Correlation-Id: 043bb826-d6a3-4800-a159-08dc09d94300 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: l/oUSe9fAuvBvowj9qGEZEaF+QfvckC+x6j6KYv12scjs/V+/UX/M+W/LE9Vabpe8tJ6hn/9cmJcFaCQKffQyQtHvI9J05yN+0HWyASpvWCoN86+IH07MMjVeJSAQgTG1vYjs4SF2+EDhekLzMALZgLNzTqNwUjsBvwj8FjDYcne5LvFJQ2+6iNymUt57RkYN32Ure0uQSsZ5MWtueckwLEdp/ltX/C46/b7RTtbgvr1onBYXit2g1/VYSiPGalSAUEbLZ8IgXRSwxP7jKzyjx0or2LF3DJ68+ZQRNN9usbahgqCWF0vXeGZFxtr6TXdAeLaeLzoPCjC8ruRigO0322n5/iqYG0oIw2IS0W4uA32ZTNxAxnsAR2G99N5K0s5LQdMTgwZzc2EwF08NnV+rH+4zgR/xvBAXySgP8xlFV6xe9ugDOvlXLpiWrcp7yVCXO5byfyWQg8zfEkqxjOkgiQc1eCkbI182cLZkKhawjJNMBlD0RFc9bRUMaIkUJxuzyxsf6Rf/668jCe4cpud7jxSx75d/UQScLnxkpIVXwuWhPD5DIsBMfRd5O6PmjAzdduNva9SKaMEOuBOE9wjym0OWNwmzA939ICeJDxPy/g= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RFJVbHdVUFc1K1JKUmNrWXM0TmxmZis0TDJjMkJoQzBPbnZmSk5BR0hHZXRL?= =?utf-8?B?Y2VFdldKeElwK1ZsVXE1ajlvWEY0ckF3U3FPWHpHOFNFYlhEa1JiQStVY1RU?= =?utf-8?B?UnVlT2dlaHhlVytuUXRmNVFqeTlkcCtlTytyeUZNNXVVRUY2d1U0YkZONExT?= =?utf-8?B?MFFwem5wN2hiNkh4YWtxSmtqWlRLeVJKcUR2MGZudSs1R0lrQW9OVFArVy93?= =?utf-8?B?VXNOUDZQRkw0cXk2a1FuYm9yeTQvU2E3emhVN0Q4WWpPOVVyazY5aGNkQjZ1?= =?utf-8?B?MmFFQktac2I5Y01LTEp1SXI1eDFNOUIyVExISEhwcEF1eE52MzIvdExkOEdr?= =?utf-8?B?ZVFkeHV3bjRkRE4xQ04wOGVRSVpHc2w1VHNSUGMwUnZaTm5KNjFRakVtUDFY?= =?utf-8?B?YUtnREZwYUdBa1VDeFVLNENmazRlUzBaK1BvUHFQRWZuYmhQVGd2R0J3UW52?= =?utf-8?B?YnZ4NStNRC9RT2s4QW5FYVNpWm53Wkp6MFVGL01nTDJ3OTUvdDQxRHl4ZU1L?= =?utf-8?B?RHRjUk9USTNwNTJuenF6WUlTcktLNk16TGYxSitta0JRQWxlbzRrMUppLzNJ?= =?utf-8?B?QjhOb1VRTHc0SzIwZ2NTVVgxbkt4TVVoQVlmd2hXdC9Kbi9iUS9xQXdtTGs3?= =?utf-8?B?T3FKRFgweVFoSnlzY2NyTmwrejQxbnBIT1JoS2VaV25qUU1YOENiK2dVblhL?= =?utf-8?B?YWllU1ZVYTRPY0lIenA2Z1dCWG9QaythTXBkYXZKTkxRNStUZ0pKVHhqVGRi?= =?utf-8?B?QWR1bDQ1MzVKNDhGTHpST3dNYWc0U3kyL2JER081MXpTaXUxeVVEb2lWMG94?= =?utf-8?B?Yk5LOTNxanAwYXVLWkd5dkRqSjNKaU9NODlvdWllQUpsUHdJcUo3eEdhVU1I?= =?utf-8?B?T2RxZ3BNTXM1b2dYN2pibllnVU9uV3FTMGZKZnQ4MmF5dENQajdrRWlGSnVR?= =?utf-8?B?RmZ3QUZZUXR6ejMzcUplek5FQTdxMGdOMTRHT1Z1NlFRVmdQUVJiZE1ialdu?= =?utf-8?B?SXozT0NFVXdmclE4SklVSW9TRWFRRFRzNzVQaUZ1M3dCbTYxdEU2SGwvbGtK?= =?utf-8?B?WXpEaWl6L3F4Q3hVeEhWMjRQVGtMTEZkWTNkWmlqMUFXQjdOOXAvYTQxNzkz?= =?utf-8?B?b0t2bDZpRjI4RzlmNTFRVnpPNU55R3Nobjd4M3hRaWJHd2crZFltVzhqbzEr?= =?utf-8?B?QzJSUXBSNmpVZGw1ZlBjQUYwa0w5WHpvRkNjcVBpbXZvTW11cWtFREVVWitU?= =?utf-8?B?MkxlaGFNOVh1bWVaUFBMbGFGNlFMaDVkaXhPaUJBVklrei9kQ0RJUVlZcFJS?= =?utf-8?B?cHdYZHI1Z2xmSWpPejFsano4MjhqZkZDZjNDcXpsYzhzYVBMWHJmYkRsY2Jh?= =?utf-8?B?NmZ1ZzM2a2pNRU1VdTREMlV1MzR5YThaZ0k0L2pPVmllMnVxNlVJUTlVZFp0?= =?utf-8?B?YmZlOTZIdlNuMmVSV3VlNm1PS01RUUxYTjJMTHJUcUJzaW1melFESFhha3ZR?= =?utf-8?B?cDd2cnJaOGZIeWx4Z1RBQWwvamJ0RE5odloxaGEwaFlrR1hhSlpmNmx5RUF3?= =?utf-8?B?QjhLVU0zM084RjJORDZZRzM3dURIVDc1TGtOOHlVQk1malV2Q1U5ZExhZVFH?= =?utf-8?B?eVdtbUp5ejUrc3A5M0x5OEdsT2REenFlZVBvWk4xV1RRUDRuWEFPM0ZzQjBO?= =?utf-8?Q?HcF2BJXqzdAL99lNQfFp?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 043bb826-d6a3-4800-a159-08dc09d94300 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2023 08:19:51.9017 (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: JH0PR06MB6367 Subject: [FFmpeg-devel] [PATCH v8 09/13] vvcdec: add LMCS, Deblocking, SAO, and ALF filters 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 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: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgICAxICsKIGxpYmF2 Y29kZWMvdnZjL3Z2Y19jdHUuaCAgICAgICAgICAgICB8ICAgIDEgKwogbGliYXZjb2RlYy92dmMv dnZjX2ZpbHRlci5jICAgICAgICAgIHwgMTMzMiArKysrKysrKysrKysrKysrKysrKysrKysrKwog bGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5oICAgICAgICAgIHwgICA3MSArKwogbGliYXZjb2Rl Yy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jIHwgMTEzNSArKysrKysrKysrKysrKysrKysrKysr CiA1IGZpbGVzIGNoYW5nZWQsIDI1NDAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29k ZWMvdnZjL3Z2Y19maWx0ZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnZjL3Z2 Y19maWx0ZXJfdGVtcGxhdGUuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL01ha2VmaWxl IGIvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKaW5kZXggODFkZjE1ZjZlOC4uOTA2YmVjMDU4ZiAx MDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2RlYy92dmMv TWFrZWZpbGUKQEAgLTMsNiArMyw3IEBAIGNsZWFuOjogICAgJChSTSkgJChDTEVBTlNVRkZJWEVT OiU9bGliYXZjb2RlYy92dmMvJSkKIE9CSlMtJChDT05GSUdfVlZDX0RFQ09ERVIpICAgICAgICAg ICs9ICB2dmMvdnZjX2NhYmFjLm8gICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdnZjL3Z2Y19jdHUubyAgICAgICAgICAgXAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfZGF0YS5vICAgICAgICAgIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2ZpbHRlci5vICAgICAg ICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZjL3Z2Y19pbnRl ci5vICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2 Yy92dmNfaW50cmEubyAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2dmMvdnZjX2l0eF8xZC5vICAgICAgICBcCmRpZmYgLS1naXQgYS9saWJhdmNvZGVj L3Z2Yy92dmNfY3R1LmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmgKaW5kZXggNDdjOWYxODFi Yi4uZjNiMWI0YjdlMyAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oCisrKyBi L2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuaApAQCAtNDYzLDYgKzQ2Myw3IEBAIHR5cGVkZWYgc3Ry dWN0IEFMRlBhcmFtcyB7CiB2b2lkIGZmX3Z2Y19zZXRfbmVpZ2hib3VyX2F2YWlsYWJsZShWVkNM b2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCwgaW50IHcsIGludCBoKTsKIHZvaWQgZmZf dnZjX2RlY29kZV9uZWlnaGJvdXIoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHhfY3RiLCBpbnQg eV9jdGIsIGludCByeCwgaW50IHJ5LCBpbnQgcnMpOwogdm9pZCBmZl92dmNfY3R1X2ZyZWVfY3Vz KENUVSAqY3R1KTsKK2ludCBmZl92dmNfZ2V0X3FQeShjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZj LCBpbnQgeGMsIGludCB5Yyk7CiB2b2lkIGZmX3Z2Y19lcF9pbml0X3N0YXRfY29lZmYoRW50cnlQ b2ludCAqZXAsIGludCBiaXRfZGVwdGgsIGludCBwZXJzaXN0ZW50X3JpY2VfYWRhcHRhdGlvbl9l bmFibGVkX2ZsYWcpOwogCiAjZW5kaWYgLy8gQVZDT0RFQ19WVkNfVlZDX0NUVV9ICmRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmMgYi9saWJhdmNvZGVjL3Z2Yy92dmNfZmls dGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTVjZDg5YjhhMwot LS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuYwpAQCAtMCwwICsx LDEzMzIgQEAKKy8qCisgKiBWVkMgZmlsdGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBO dW8gTWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVn IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKyNpbmNsdWRlICJs aWJhdnV0aWwvZnJhbWUuaCIKKworI2luY2x1ZGUgInZ2Y19jdHUuaCIKKyNpbmNsdWRlICJ2dmNf ZGF0YS5oIgorI2luY2x1ZGUgInZ2Y19maWx0ZXIuaCIKKyNpbmNsdWRlICJ2dmNfcmVmcy5oIgor CisjZGVmaW5lIExFRlQgICAgICAgIDAKKyNkZWZpbmUgVE9QICAgICAgICAgMQorI2RlZmluZSBS SUdIVCAgICAgICAyCisjZGVmaW5lIEJPVFRPTSAgICAgIDMKKyNkZWZpbmUgTUFYX0VER0VTICAg NAorCisjZGVmaW5lIERFRkFVTFRfSU5UUkFfVENfT0ZGU0VUIDIKKworLy9UYWJsZSA0MyBEZXJp dmF0aW9uIG9mIHRocmVzaG9sZCB2YXJpYWJsZXMgYmV0YScgYW5kIHRjJyBmcm9tIGlucHV0IFEK K3N0YXRpYyBjb25zdCB1aW50MTZfdCB0Y3RhYmxlWzY2XSA9IHsKKyAgICAgIDAsICAgMCwgICAw LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg ICAwLCAgIDAsCisgICAgICAwLCAgIDAsICAgMywgICA0LCAgIDQsICAgNCwgICA0LCAgIDUsICAg NSwgICA1LCAgIDUsICAgNywgICA3LCAgIDgsICAgOSwgIDEwLAorICAgICAxMCwgIDExLCAgMTMs ICAxNCwgIDE1LCAgMTcsICAxOSwgIDIxLCAgMjQsICAyNSwgIDI5LCAgMzMsICAzNiwgIDQxLCAg NDUsICA1MSwKKyAgICAgNTcsICA2NCwgIDcxLCAgODAsICA4OSwgMTAwLCAxMTIsIDEyNSwgMTQx LCAxNTcsIDE3NywgMTk4LCAyMjIsIDI1MCwgMjgwLCAzMTQsCisgICAgMzUyLCAzOTUsCit9Owor CisvL1RhYmxlIDQzIERlcml2YXRpb24gb2YgdGhyZXNob2xkIHZhcmlhYmxlcyBiZXRhJyBhbmQg dGMnIGZyb20gaW5wdXQgUQorc3RhdGljIGNvbnN0IHVpbnQ4X3QgYmV0YXRhYmxlWzY0XSA9IHsK KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgICA2LCAgIDcsICAgOCwgICA5LCAgMTAs ICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LCAgMTYsICAxNywgIDE4LCAgMjAsICAyMiwgIDI0LAor ICAgICAyNiwgIDI4LCAgMzAsICAzMiwgIDM0LCAgMzYsICAzOCwgIDQwLCAgNDIsICA0NCwgIDQ2 LCAgNDgsICA1MCwgIDUyLCAgNTQsICA1NiwKKyAgICAgNTgsICA2MCwgIDYyLCAgNjQsICA2Niwg IDY4LCAgNzAsICA3MiwgIDc0LCAgNzYsICA3OCwgIDgwLCAgODIsICA4NCwgIDg2LCAgODgsCit9 OworCitzdGF0aWMgaW50IGdldF9xUGMoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3Qg aW50IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCBjaHJvbWEpCit7CisgICAgY29uc3QgaW50 IHggICAgICAgICAgICA9IHgwID4+IE1JTl9UVV9MT0cyOworICAgIGNvbnN0IGludCB5ICAgICAg ICAgICAgPSB5MCA+PiBNSU5fVFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbWluX3R1X3dpZHRoID0g ZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoOworICAgIHJldHVybiBmYy0+dGFiLnFwW2Nocm9tYV1b eCArIHkgKiBtaW5fdHVfd2lkdGhdOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2N0Yih1aW50OF90 ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVp Z2h0LAorICAgIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3Jj X3N0cmlkZSkKK3sKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAg ICAgIG1lbWNweShkc3QsIHNyYywgd2lkdGgpOworCisgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRl OworICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNv cHlfcGl4ZWwodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IGludCBwaXhl bF9zaGlmdCkKK3sKKyAgICBpZiAocGl4ZWxfc2hpZnQpCisgICAgICAgICoodWludDE2X3QgKilk c3QgPSAqKHVpbnQxNl90ICopc3JjOworICAgIGVsc2UKKyAgICAgICAgKmRzdCA9ICpzcmM7Cit9 CisKK3N0YXRpYyB2b2lkIGNvcHlfdmVydCh1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNy YywgY29uc3QgaW50IHBpeGVsX3NoaWZ0LCBjb25zdCBpbnQgaGVpZ2h0LAorICAgIGNvbnN0IHB0 cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSkKK3sKKyAgICBp bnQgaTsKKyAgICBpZiAocGl4ZWxfc2hpZnQgPT0gMCkgeworICAgICAgICBmb3IgKGkgPSAwOyBp IDwgaGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgICpkc3QgPSAqc3JjOworICAgICAgICAgICAg ZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKKyAgICAg ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykg eworICAgICAgICAgICAgKih1aW50MTZfdCAqKWRzdCA9ICoodWludDE2X3QgKilzcmM7CisgICAg ICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICAgICAgICAgIHNyYyArPSBzcmNfc3RyaWRl OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb3B5X2N0Yl90b19odihWVkNG cmFtZUNvbnRleHQgKmZjLCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgY29uc3QgcHRyZGlmZl90 IHNyY19zdHJpZGUsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29uc3QgaW50IHdpZHRoLCBj b25zdCBpbnQgaGVpZ2h0LAorICAgIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50IHhfY3RiLCBj b25zdCBpbnQgeV9jdGIsIGNvbnN0IGludCB0b3ApCit7CisgICAgY29uc3QgaW50IHBzID0gZmMt PnBzLnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgY29uc3QgaW50IHcgID0gZmMtPnBzLnNwcy0+d2lk dGggPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgaCAgPSBmYy0+ cHMuc3BzLT5oZWlnaHQgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKworICAgIGlmICh0 b3ApIHsKKyAgICAgICAgLyogdG9wICovCisgICAgICAgIG1lbWNweShmYy0+dGFiLnNhb19waXhl bF9idWZmZXJfaFtjX2lkeF0gKyAoKCgyICogeV9jdGIpICogdyArIHgpIDw8IHBzKSwKKyAgICAg ICAgICAgIHNyYywgd2lkdGggPDwgcHMpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIGJvdHRv bSAqLworICAgICAgICBtZW1jcHkoZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX2hbY19pZHhdICsg KCgoMiAqIHlfY3RiICsgMSkgKiB3ICsgeCkgPDwgcHMpLAorICAgICAgICAgICAgc3JjICsgc3Jj X3N0cmlkZSAqIChoZWlnaHQgLSAxKSwgd2lkdGggPDwgcHMpOworCisgICAgICAgIC8qIGNvcHkg dmVydGljYWwgZWRnZXMgKi8KKyAgICAgICAgY29weV92ZXJ0KGZjLT50YWIuc2FvX3BpeGVsX2J1 ZmZlcl92W2NfaWR4XSArICgoKDIgKiB4X2N0YikgKiBoICsgeSkgPDwgcHMpLCBzcmMsIHBzLCBo ZWlnaHQsIDEgPDwgcHMsIHNyY19zdHJpZGUpOworICAgICAgICBjb3B5X3ZlcnQoZmMtPnRhYi5z YW9fcGl4ZWxfYnVmZmVyX3ZbY19pZHhdICsgKCgoMiAqIHhfY3RiICsgMSkgKiBoICsgeSkgPDwg cHMpLCBzcmMgKyAoKHdpZHRoIC0gMSkgPDwgcHMpLCBwcywgaGVpZ2h0LCAxIDw8IHBzLCBzcmNf c3RyaWRlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNhb19jb3B5X2N0Yl90b19odihWVkNM b2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgcngsIGNvbnN0IGludCByeSwgY29uc3QgaW50IHRv cCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICA9IGxjLT5mYzsKKyAgICBjb25zdCBpbnQg Y3RiX3NpemVfeSA9IGZjLT5wcy5zcHMtPmN0Yl9zaXplX3k7CisgICAgY29uc3QgaW50IHgwICAg ICAgICAgPSByeCA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50 IHkwICAgICAgICAgPSByeSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisKKyAgICBm b3IgKGludCBjX2lkeCA9IDA7IGNfaWR4IDwgKGZjLT5wcy5zcHMtPnItPnNwc19jaHJvbWFfZm9y bWF0X2lkYyA/IDMgOiAxKTsgY19pZHgrKykgeworICAgICAgICBjb25zdCBpbnQgeCAgICAgICAg ICAgICAgICA9IHgwID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0 IGludCB5ICAgICAgICAgICAgICAgID0geTAgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsK KyAgICAgICAgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXpl W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGN0Yl9zaXplX2ggICAgICAgPSBjdGJfc2l6ZV95 ID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0IGludCBjdGJfc2l6 ZV92ICAgICAgID0gY3RiX3NpemVfeSA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworICAg ICAgICBjb25zdCBpbnQgd2lkdGggICAgICAgICAgICA9IEZGTUlOKGN0Yl9zaXplX2gsIChmYy0+ cHMuc3BzLT53aWR0aCAgPj4gZmMtPnBzLnNwcy0+aHNoaWZ0W2NfaWR4XSkgLSB4KTsKKyAgICAg ICAgY29uc3QgaW50IGhlaWdodCAgICAgICAgICAgPSBGRk1JTihjdGJfc2l6ZV92LCAoZmMtPnBz LnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF0pIC0geSk7CisgICAgICAg IGNvbnN0IHVpbnQ4X3QgKnNyYyAgICAgICAgICA9ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhdW3kg KiBzcmNfc3RyaWRlICsgKHggPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsKKyAgICAgICAg Y29weV9jdGJfdG9faHYoZmMsIHNyYywgc3JjX3N0cmlkZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwg Y19pZHgsIHJ4LCByeSwgdG9wKTsKKyAgICB9Cit9CisKK3ZvaWQgZmZfdnZjX3Nhb19jb3B5X2N0 Yl90b19odihWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgcngsIGNvbnN0IGludCByeSwg Y29uc3QgaW50IGxhc3Rfcm93KQoreworICAgIGlmIChyeSkKKyAgICAgICAgc2FvX2NvcHlfY3Ri X3RvX2h2KGxjLCByeCwgcnkgLSAxLCAwKTsKKworICAgIHNhb19jb3B5X2N0Yl90b19odihsYywg cngsIHJ5LCAxKTsKKworICAgIGlmIChsYXN0X3JvdykKKyAgICAgICAgc2FvX2NvcHlfY3RiX3Rv X2h2KGxjLCByeCwgcnksIDApOworfQorCit2b2lkIGZmX3Z2Y19zYW9fZmlsdGVyKFZWQ0xvY2Fs Q29udGV4dCAqbGMsIGludCB4LCBpbnQgeSkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICA9 IGxjLT5mYzsKKyAgICBjb25zdCBpbnQgY3RiX3NpemVfeSA9IGZjLT5wcy5zcHMtPmN0Yl9zaXpl X3k7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2FvX3RhYlsxNl0gPSB7IDAsIDEsIDIsIDIs IDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDgsIDggfTsKKyAgICBpbnQgY19pZHg7Cisg ICAgaW50IGVkZ2VzWzRdOyAgLy8gMCBsZWZ0IDEgdG9wIDIgcmlnaHQgMyBib3R0b20KKyAgICBj b25zdCBpbnQgeF9jdGIgICAgICA9IHggPj4gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95Owor ICAgIGNvbnN0IGludCB5X2N0YiAgICAgID0geSA+PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXpl X3k7CisgICAgY29uc3QgU0FPUGFyYW1zICpzYW8gPSAmQ1RCKGZjLT50YWIuc2FvLCB4X2N0Yiwg eV9jdGIpOworICAgIC8vIGZsYWdzIGluZGljYXRpbmcgdW5maWx0ZXJhYmxlIGVkZ2VzCisgICAg dWludDhfdCB2ZXJ0X2VkZ2VbXSAgICAgICAgICA9IHsgMCwgMCB9OworICAgIHVpbnQ4X3QgaG9y aXpfZWRnZVtdICAgICAgICAgPSB7IDAsIDAgfTsKKyAgICB1aW50OF90IGRpYWdfZWRnZVtdICAg ICAgICAgID0geyAwLCAwLCAwLCAwIH07CisgICAgY29uc3QgdWludDhfdCBsZmFzZSAgICAgICAg ICA9IGZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRf ZmxhZzsKKyAgICBjb25zdCB1aW50OF90IG5vX3RpbGVfZmlsdGVyID0gZmMtPnBzLnBwcy0+ci0+ bnVtX3RpbGVzX2luX3BpYyA+IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAh ZmMtPnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWc7 CisgICAgY29uc3QgdWludDhfdCByZXN0b3JlICAgICAgICA9IG5vX3RpbGVfZmlsdGVyIHx8ICFs ZmFzZTsKKyAgICB1aW50OF90IGxlZnRfdGlsZV9lZGdlICAgPSAwOworICAgIHVpbnQ4X3Qgcmln aHRfdGlsZV9lZGdlICA9IDA7CisgICAgdWludDhfdCB1cF90aWxlX2VkZ2UgICAgID0gMDsKKyAg ICB1aW50OF90IGJvdHRvbV90aWxlX2VkZ2UgPSAwOworCisgICAgZWRnZXNbTEVGVF0gICA9IHhf Y3RiID09IDA7CisgICAgZWRnZXNbVE9QXSAgICA9IHlfY3RiID09IDA7CisgICAgZWRnZXNbUklH SFRdICA9IHhfY3RiID09IGZjLT5wcy5wcHMtPmN0Yl93aWR0aCAgLSAxOworICAgIGVkZ2VzW0JP VFRPTV0gPSB5X2N0YiA9PSBmYy0+cHMucHBzLT5jdGJfaGVpZ2h0IC0gMTsKKworICAgIGlmIChy ZXN0b3JlKSB7CisgICAgICAgIGlmICghZWRnZXNbTEVGVF0pIHsKKyAgICAgICAgICAgIGxlZnRf dGlsZV9lZGdlICA9IG5vX3RpbGVfZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0Yl90b19jb2xfYmRb eF9jdGJdID09IHhfY3RiOworICAgICAgICAgICAgdmVydF9lZGdlWzBdICAgID0gKCFsZmFzZSAm JiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xp Y2VfaWR4LCB4X2N0YiAtIDEsIHlfY3RiKSkgfHwgbGVmdF90aWxlX2VkZ2U7CisgICAgICAgIH0K KyAgICAgICAgaWYgKCFlZGdlc1tSSUdIVF0pIHsKKyAgICAgICAgICAgIHJpZ2h0X3RpbGVfZWRn ZSA9IG5vX3RpbGVfZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0Yl90b19jb2xfYmRbeF9jdGJdICE9 IGZjLT5wcy5wcHMtPmN0Yl90b19jb2xfYmRbeF9jdGIgKyAxXTsKKyAgICAgICAgICAgIHZlcnRf ZWRnZVsxXSAgICA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9j dGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgKyAxLCB5X2N0YikpIHx8IHJpZ2h0 X3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW1RPUF0pIHsKKyAgICAg ICAgICAgIHVwX3RpbGVfZWRnZSAgICAgPSBub190aWxlX2ZpbHRlciAmJiBmYy0+cHMucHBzLT5j dGJfdG9fcm93X2JkW3lfY3RiXSA9PSB5X2N0YjsKKyAgICAgICAgICAgIGhvcml6X2VkZ2VbMF0g ICAgPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBD VEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YiAtIDEpKSB8fCB1cF90aWxlX2VkZ2U7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFlZGdlc1tCT1RUT01dKSB7CisgICAgICAgICAgICBi b3R0b21fdGlsZV9lZGdlID0gbm9fdGlsZV9maWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3RvX3Jv d19iZFt5X2N0Yl0gIT0gZmMtPnBzLnBwcy0+Y3RiX3RvX3Jvd19iZFt5X2N0YiArIDFdOworICAg ICAgICAgICAgaG9yaXpfZWRnZVsxXSAgICA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2Vf aWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3Ri ICsgMSkpIHx8IGJvdHRvbV90aWxlX2VkZ2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFlZGdl c1tMRUZUXSAmJiAhZWRnZXNbVE9QXSkgeworICAgICAgICAgICAgZGlhZ19lZGdlWzBdID0gKCFs ZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50 YWIuc2xpY2VfaWR4LCB4X2N0YiAtIDEsIHlfY3RiIC0gMSkpIHx8IGxlZnRfdGlsZV9lZGdlIHx8 IHVwX3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW1RPUF0gJiYgIWVk Z2VzW1JJR0hUXSkgeworICAgICAgICAgICAgZGlhZ19lZGdlWzFdID0gKCFsZmFzZSAmJiBDVEIo ZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2VfaWR4 LCB4X2N0YiArIDEsIHlfY3RiIC0gMSkpIHx8IHJpZ2h0X3RpbGVfZWRnZSB8fCB1cF90aWxlX2Vk Z2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFlZGdlc1tSSUdIVF0gJiYgIWVkZ2VzW0JPVFRP TV0pIHsKKyAgICAgICAgICAgIGRpYWdfZWRnZVsyXSA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIu c2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIg KyAxLCB5X2N0YiArIDEpKSB8fCByaWdodF90aWxlX2VkZ2UgfHwgYm90dG9tX3RpbGVfZWRnZTsK KyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW0xFRlRdICYmICFlZGdlc1tCT1RUT01dKSB7 CisgICAgICAgICAgICBkaWFnX2VkZ2VbM10gPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNsaWNl X2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiIC0gMSwg eV9jdGIgKyAxKSkgfHwgbGVmdF90aWxlX2VkZ2UgfHwgYm90dG9tX3RpbGVfZWRnZTsKKyAgICAg ICAgfQorICAgIH0KKworICAgIGZvciAoY19pZHggPSAwOyBjX2lkeCA8IChmYy0+cHMuc3BzLT5y LT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMgPyAzIDogMSk7IGNfaWR4KyspIHsKKyAgICAgICAgaW50 IHgwICAgICAgID0geCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBpbnQg eTAgICAgICAgPSB5ID4+IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgIHB0cmRp ZmZfdCBzcmNfc3RyaWRlID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAgIGlu dCBjdGJfc2l6ZV9oID0gY3RiX3NpemVfeSA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOwor ICAgICAgICBpbnQgY3RiX3NpemVfdiA9IGN0Yl9zaXplX3kgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0 W2NfaWR4XTsKKyAgICAgICAgaW50IHdpZHRoICAgID0gRkZNSU4oY3RiX3NpemVfaCwgKGZjLT5w cy5zcHMtPndpZHRoICA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdKSAtIHgwKTsKKyAgICAg ICAgaW50IGhlaWdodCAgID0gRkZNSU4oY3RiX3NpemVfdiwgKGZjLT5wcy5zcHMtPmhlaWdodCA+ PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdKSAtIHkwKTsKKyAgICAgICAgaW50IHRhYiAgICAg ID0gc2FvX3RhYlsoRkZBTElHTih3aWR0aCwgOCkgPj4gMykgLSAxXTsKKyAgICAgICAgdWludDhf dCAqc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1beTAgKiBzcmNfc3RyaWRlICsgKHgwIDw8 IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0KV07CisgICAgICAgIHB0cmRpZmZfdCBkc3Rfc3RyaWRl OworICAgICAgICB1aW50OF90ICpkc3Q7CisKKyAgICAgICAgc3dpdGNoIChzYW8tPnR5cGVfaWR4 W2NfaWR4XSkgeworICAgICAgICBjYXNlIFNBT19CQU5EOgorICAgICAgICAgICAgZmMtPnZ2Y2Rz cC5zYW8uYmFuZF9maWx0ZXJbdGFiXShzcmMsIHNyYywgc3JjX3N0cmlkZSwgc3JjX3N0cmlkZSwK KyAgICAgICAgICAgICAgICBzYW8tPm9mZnNldF92YWxbY19pZHhdLCBzYW8tPmJhbmRfcG9zaXRp b25bY19pZHhdLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIFNBT19FREdFOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQgdyA9IGZjLT5w cy5zcHMtPndpZHRoID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgICAgICBj b25zdCBpbnQgaCA9IGZjLT5wcy5zcHMtPmhlaWdodCA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19p ZHhdOworICAgICAgICAgICAgY29uc3QgaW50IHNoID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7 CisKKyAgICAgICAgICAgIGRzdF9zdHJpZGUgPSAyKk1BWF9QQl9TSVpFICsgQVZfSU5QVVRfQlVG RkVSX1BBRERJTkdfU0laRTsKKyAgICAgICAgICAgIGRzdCA9IGxjLT5zYW9fYnVmZmVyICsgZHN0 X3N0cmlkZSArIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkU7CisKKyAgICAgICAgICAgIGlm ICghZWRnZXNbVE9QXSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZWZ0ID0gMSAtIGVk Z2VzW0xFRlRdOworICAgICAgICAgICAgICAgIGNvbnN0IGludCByaWdodCA9IDEgLSBlZGdlc1tS SUdIVF07CisgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjMTsKKyAgICAgICAgICAg ICAgICB1aW50OF90ICpkc3QxOworICAgICAgICAgICAgICAgIGludCBwb3MgPSAwOworCisgICAg ICAgICAgICAgICAgZHN0MSA9IGRzdCAtIGRzdF9zdHJpZGUgLSAobGVmdCA8PCBzaCk7CisgICAg ICAgICAgICAgICAgc3JjMSA9IGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XSArICgo KDIgKiB5X2N0YiAtIDEpICogdyArIHgwIC0gbGVmdCkgPDwgc2gpOworICAgICAgICAgICAgICAg IGlmIChsZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSwgc3JjMSwg c2gpOworICAgICAgICAgICAgICAgICAgICBwb3MgKz0gKDEgPDwgc2gpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBtZW1jcHkoZHN0MSArIHBvcywgc3JjMSArIHBvcywgd2lk dGggPDwgc2gpOworICAgICAgICAgICAgICAgIGlmIChyaWdodCkgeworICAgICAgICAgICAgICAg ICAgICBwb3MgKz0gd2lkdGggPDwgc2g7CisgICAgICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwo ZHN0MSArIHBvcywgc3JjMSArIHBvcywgc2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICghZWRnZXNbQk9UVE9NXSkgeworICAgICAgICAgICAgICAg IGNvbnN0IGludCBsZWZ0ID0gMSAtIGVkZ2VzW0xFRlRdOworICAgICAgICAgICAgICAgIGNvbnN0 IGludCByaWdodCA9IDEgLSBlZGdlc1tSSUdIVF07CisgICAgICAgICAgICAgICAgY29uc3QgdWlu dDhfdCAqc3JjMTsKKyAgICAgICAgICAgICAgICB1aW50OF90ICpkc3QxOworICAgICAgICAgICAg ICAgIGludCBwb3MgPSAwOworCisgICAgICAgICAgICAgICAgZHN0MSA9IGRzdCArIGhlaWdodCAq IGRzdF9zdHJpZGUgLSAobGVmdCA8PCBzaCk7CisgICAgICAgICAgICAgICAgc3JjMSA9IGZjLT50 YWIuc2FvX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XSArICgoKDIgKiB5X2N0YiArIDIpICogdyArIHgw IC0gbGVmdCkgPDwgc2gpOworICAgICAgICAgICAgICAgIGlmIChsZWZ0KSB7CisgICAgICAgICAg ICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSwgc3JjMSwgc2gpOworICAgICAgICAgICAgICAgICAg ICBwb3MgKz0gKDEgPDwgc2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBt ZW1jcHkoZHN0MSArIHBvcywgc3JjMSArIHBvcywgd2lkdGggPDwgc2gpOworICAgICAgICAgICAg ICAgIGlmIChyaWdodCkgeworICAgICAgICAgICAgICAgICAgICBwb3MgKz0gd2lkdGggPDwgc2g7 CisgICAgICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSArIHBvcywgc3JjMSArIHBvcywg c2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh ZWRnZXNbTEVGVF0pIHsKKyAgICAgICAgICAgICAgICBjb3B5X3ZlcnQoZHN0IC0gKDEgPDwgc2gp LAorICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnNhb19waXhlbF9idWZmZXJfdltjX2lkeF0g KyAoKCgyICogeF9jdGIgLSAxKSAqIGggKyB5MCkgPDwgc2gpLAorICAgICAgICAgICAgICAgICAg ICBzaCwgaGVpZ2h0LCBkc3Rfc3RyaWRlLCAxIDw8IHNoKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmICghZWRnZXNbUklHSFRdKSB7CisgICAgICAgICAgICAgICAgY29weV92ZXJ0KGRz dCArICh3aWR0aCA8PCBzaCksCisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIuc2FvX3BpeGVs X2J1ZmZlcl92W2NfaWR4XSArICgoKDIgKiB4X2N0YiArIDIpICogaCArIHkwKSA8PCBzaCksCisg ICAgICAgICAgICAgICAgICAgIHNoLCBoZWlnaHQsIGRzdF9zdHJpZGUsIDEgPDwgc2gpOworICAg ICAgICAgICAgfQorCisgICAgICAgICAgICBjb3B5X2N0Yihkc3QsIHNyYywgIHdpZHRoIDw8IHNo LCBoZWlnaHQsIGRzdF9zdHJpZGUsIHNyY19zdHJpZGUpOworICAgICAgICAgICAgZmMtPnZ2Y2Rz cC5zYW8uZWRnZV9maWx0ZXJbdGFiXShzcmMsIGRzdCwgc3JjX3N0cmlkZSwgc2FvLT5vZmZzZXRf dmFsW2NfaWR4XSwKKyAgICAgICAgICAgICAgICBzYW8tPmVvX2NsYXNzW2NfaWR4XSwgd2lkdGgs IGhlaWdodCk7CisgICAgICAgICAgICBmYy0+dnZjZHNwLnNhby5lZGdlX3Jlc3RvcmVbcmVzdG9y ZV0oc3JjLCBkc3QsIHNyY19zdHJpZGUsIGRzdF9zdHJpZGUsCisgICAgICAgICAgICAgICAgc2Fv LCBlZGdlcywgd2lkdGgsIGhlaWdodCwgY19pZHgsIHZlcnRfZWRnZSwgaG9yaXpfZWRnZSwgZGlh Z19lZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 Cit9CisKKyNkZWZpbmUgVEFCX0JTKHQsIHgsIHkpICAgICAgICh0KVsoKHkpID4+IDIpICogKGZj LT50YWIuc3ouYnNfd2lkdGgpICsgKCh4KSA+PiAyKV0KKyNkZWZpbmUgVEFCX01BWF9MRU4odCwg eCwgeSkgICh0KVsoKHkpID4+IDIpICogKGZjLT50YWIuc3ouYnNfd2lkdGgpICsgKCh4KSA+PiAy KV0KKworLy84IHNhbXBsZXMgYSB0aW1lCisjZGVmaW5lIERFQkxPQ0tfU1RFUCAgICAgICAgICAg IDgKKyNkZWZpbmUgTFVNQV9HUklEICAgICAgICAgICAgICAgNAorI2RlZmluZSBDSFJPTUFfR1JJ RCAgICAgICAgICAgICA4CisKK3N0YXRpYyBpbnQgYm91bmRhcnlfc3RyZW5ndGgoY29uc3QgVlZD TG9jYWxDb250ZXh0ICpsYywgY29uc3QgTXZGaWVsZCAqY3VyciwgY29uc3QgTXZGaWVsZCAqbmVp Z2gsCisgICAgY29uc3QgUmVmUGljTGlzdCAqbmVpZ2hfcnBsKQoreworICAgIFJlZlBpY0xpc3Qg KnJwbCA9IGxjLT5zYy0+cnBsOworICAgIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfQkkgJiYg IG5laWdoLT5wcmVkX2ZsYWcgPT0gUEZfQkkpIHsKKyAgICAgICAgLy8gc2FtZSBMMCBhbmQgTDEK KyAgICAgICAgaWYgKHJwbFswXS5saXN0W2N1cnItPnJlZl9pZHhbMF1dID09IG5laWdoX3JwbFsw XS5saXN0W25laWdoLT5yZWZfaWR4WzBdXSAgJiYKKyAgICAgICAgICAgIHJwbFswXS5saXN0W2N1 cnItPnJlZl9pZHhbMF1dID09IHJwbFsxXS5saXN0W2N1cnItPnJlZl9pZHhbMV1dICYmCisgICAg ICAgICAgICBuZWlnaF9ycGxbMF0ubGlzdFtuZWlnaC0+cmVmX2lkeFswXV0gPT0gbmVpZ2hfcnBs WzFdLmxpc3RbbmVpZ2gtPnJlZl9pZHhbMV1dKSB7CisgICAgICAgICAgICBpZiAoKEZGQUJTKG5l aWdoLT5tdlswXS54IC0gY3Vyci0+bXZbMF0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+bXZbMF0u eSAtIGN1cnItPm12WzBdLnkpID49IDggfHwKKyAgICAgICAgICAgICAgICAgRkZBQlMobmVpZ2gt Pm12WzFdLnggLSBjdXJyLT5tdlsxXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlsxXS55IC0g Y3Vyci0+bXZbMV0ueSkgPj0gOCkgJiYKKyAgICAgICAgICAgICAgICAoRkZBQlMobmVpZ2gtPm12 WzFdLnggLSBjdXJyLT5tdlswXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlsxXS55IC0gY3Vy ci0+bXZbMF0ueSkgPj0gOCB8fAorICAgICAgICAgICAgICAgICBGRkFCUyhuZWlnaC0+bXZbMF0u eCAtIGN1cnItPm12WzFdLngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzBdLnkgLSBjdXJyLT5t dlsxXS55KSA+PSA4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIGlmIChuZWlnaF9y cGxbMF0ubGlzdFtuZWlnaC0+cmVmX2lkeFswXV0gPT0gcnBsWzBdLmxpc3RbY3Vyci0+cmVmX2lk eFswXV0gJiYKKyAgICAgICAgICAgICAgICAgICBuZWlnaF9ycGxbMV0ubGlzdFtuZWlnaC0+cmVm X2lkeFsxXV0gPT0gcnBsWzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0pIHsKKyAgICAgICAgICAg IGlmIChGRkFCUyhuZWlnaC0+bXZbMF0ueCAtIGN1cnItPm12WzBdLngpID49IDggfHwgRkZBQlMo bmVpZ2gtPm12WzBdLnkgLSBjdXJyLT5tdlswXS55KSA+PSA4IHx8CisgICAgICAgICAgICAgICAg RkZBQlMobmVpZ2gtPm12WzFdLnggLSBjdXJyLT5tdlsxXS54KSA+PSA4IHx8IEZGQUJTKG5laWdo LT5tdlsxXS55IC0gY3Vyci0+bXZbMV0ueSkgPj0gOCkKKyAgICAgICAgICAgICAgICByZXR1cm4g MTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg fSBlbHNlIGlmIChuZWlnaF9ycGxbMV0ubGlzdFtuZWlnaC0+cmVmX2lkeFsxXV0gPT0gcnBsWzBd Lmxpc3RbY3Vyci0+cmVmX2lkeFswXV0gJiYKKyAgICAgICAgICAgICAgICAgICBuZWlnaF9ycGxb MF0ubGlzdFtuZWlnaC0+cmVmX2lkeFswXV0gPT0gcnBsWzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsx XV0pIHsKKyAgICAgICAgICAgIGlmIChGRkFCUyhuZWlnaC0+bXZbMV0ueCAtIGN1cnItPm12WzBd LngpID49IDggfHwgRkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5tdlswXS55KSA+PSA4IHx8 CisgICAgICAgICAgICAgICAgRkZBQlMobmVpZ2gtPm12WzBdLnggLSBjdXJyLT5tdlsxXS54KSA+ PSA4IHx8IEZGQUJTKG5laWdoLT5tdlswXS55IC0gY3Vyci0+bXZbMV0ueSkgPj0gOCkKKyAgICAg ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy ZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAg ICB9CisgICAgfSBlbHNlIGlmICgoY3Vyci0+cHJlZF9mbGFnICE9IFBGX0JJKSAmJiAobmVpZ2gt PnByZWRfZmxhZyAhPSBQRl9CSSkpeyAvLyAxIE1WCisgICAgICAgIE12IEEsIEI7CisgICAgICAg IGludCByZWZfQSwgcmVmX0I7CisKKyAgICAgICAgaWYgKGN1cnItPnByZWRfZmxhZyAmIDEpIHsK KyAgICAgICAgICAgIEEgICAgID0gY3Vyci0+bXZbMF07CisgICAgICAgICAgICByZWZfQSA9IHJw bFswXS5saXN0W2N1cnItPnJlZl9pZHhbMF1dOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgQSAgICAgPSBjdXJyLT5tdlsxXTsKKyAgICAgICAgICAgIHJlZl9BID0gcnBsWzFdLmxpc3Rb Y3Vyci0+cmVmX2lkeFsxXV07CisgICAgICAgIH0KKworICAgICAgICBpZiAobmVpZ2gtPnByZWRf ZmxhZyAmIDEpIHsKKyAgICAgICAgICAgIEIgICAgID0gbmVpZ2gtPm12WzBdOworICAgICAgICAg ICAgcmVmX0IgPSBuZWlnaF9ycGxbMF0ubGlzdFtuZWlnaC0+cmVmX2lkeFswXV07CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBCICAgICA9IG5laWdoLT5tdlsxXTsKKyAgICAgICAgICAg IHJlZl9CID0gbmVpZ2hfcnBsWzFdLmxpc3RbbmVpZ2gtPnJlZl9pZHhbMV1dOworICAgICAgICB9 CisKKyAgICAgICAgaWYgKHJlZl9BID09IHJlZl9CKSB7CisgICAgICAgICAgICBpZiAoRkZBQlMo QS54IC0gQi54KSA+PSA4IHx8IEZGQUJTKEEueSAtIEIueSkgPj0gOCkKKyAgICAgICAgICAgICAg ICByZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1 cm4gMTsKK30KKworLy9wYXJ0IG9mIDguOC4zLjMgRGVyaXZhdGlvbiBwcm9jZXNzIG9mIHRyYW5z Zm9ybSBibG9jayBib3VuZGFyeQorc3RhdGljIHZvaWQgZGVyaXZlX21heF9maWx0ZXJfbGVuZ3Ro X2x1bWEoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50IHF4LCBjb25zdCBpbnQg cXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQg aXNfaW50cmEsIGNvbnN0IGludCBoYXNfc3ViYmxvY2ssIGNvbnN0IGludCB2ZXJ0aWNhbCwgdWlu dDhfdCAqbWF4X2xlbl9wLCB1aW50OF90ICptYXhfbGVuX3EpCit7CisgICAgY29uc3QgaW50IHB4 ID0gIHZlcnRpY2FsID8gcXggLSAxIDogcXg7CisgICAgY29uc3QgaW50IHB5ID0gIXZlcnRpY2Fs ID8gcXkgLSAxIDogcXk7CisgICAgY29uc3QgdWludDhfdCAqdGJfc2l6ZSA9IHZlcnRpY2FsID8g ZmMtPnRhYi50Yl93aWR0aFtMVU1BXSA6IGZjLT50YWIudGJfaGVpZ2h0W0xVTUFdOworICAgIGNv bnN0IGludCBzaXplX3AgPSB0Yl9zaXplWyhweSA+PiBNSU5fVFVfTE9HMikgKiBmYy0+cHMucHBz LT5taW5fdHVfd2lkdGggKyAocHggPj4gTUlOX1RVX0xPRzIpXTsKKyAgICBjb25zdCBpbnQgc2l6 ZV9xID0gdGJfc2l6ZVsocXkgPj4gTUlOX1RVX0xPRzIpICogZmMtPnBzLnBwcy0+bWluX3R1X3dp ZHRoICsgKHF4ID4+IE1JTl9UVV9MT0cyKV07CisgICAgY29uc3QgaW50IG1pbl9jYl9sb2cyID0g ZmMtPnBzLnNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBvZmZfcCA9IChw eSA+PiBtaW5fY2JfbG9nMikgKiBmYy0+cHMucHBzLT5taW5fY2Jfd2lkdGggKyAocHggPj4gbWlu X2NiX2xvZzIpOworICAgIGlmIChzaXplX3AgPD0gNCB8fCBzaXplX3EgPD0gNCkgeworICAgICAg ICAqbWF4X2xlbl9wID0gKm1heF9sZW5fcSA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKm1h eF9sZW5fcCA9ICptYXhfbGVuX3EgPSAzOworICAgICAgICBpZiAoc2l6ZV9wID49IDMyKQorICAg ICAgICAgICAgKm1heF9sZW5fcCA9IDc7CisgICAgICAgIGlmIChzaXplX3EgPj0gMzIpCisgICAg ICAgICAgICAqbWF4X2xlbl9xID0gNzsKKyAgICB9CisgICAgaWYgKGhhc19zdWJibG9jaykKKyAg ICAgICAgKm1heF9sZW5fcSA9IEZGTUlOKDUsICptYXhfbGVuX3EpOworICAgIGlmIChmYy0+dGFi Lm1zZltvZmZfcF0gfHwgZmMtPnRhYi5pYWZbb2ZmX3BdKQorICAgICAgICAqbWF4X2xlbl9wID0g RkZNSU4oNSwgKm1heF9sZW5fcCk7Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2NrX3N1YmJs b2NrX2JzX3ZlcnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50 IGNiX3gsIGNvbnN0IGludCBjYl95LCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3Qg aW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4 dCAgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IE12RmllbGQgKnRhYl9tdmYgICAgID0gZmMtPnRh Yi5tdmY7CisgICAgY29uc3QgUmVmUGljTGlzdCAqcnBsICAgICAgPSBsYy0+c2MtPnJwbDsKKyAg ICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1pbl9wdV93aWR0aDsK KyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworCisgICAgLy8g YnMgZm9yIFRVIGludGVybmFsIHZlcnRpY2FsIFBVIGJvdW5kYXJpZXMKKyAgICBmb3IgKGludCBq ID0gMDsgaiA8IGhlaWdodDsgaiArPSA0KSB7CisgICAgICAgIGNvbnN0IGludCB5X3B1ID0gKHkw ICsgaikgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKworICAgICAgICBmb3IgKGludCBpID0gOCAtICgo eDAgLSBjYl94KSAlIDgpOyBpIDwgd2lkdGg7IGkgKz0gOCkgeworICAgICAgICAgICAgY29uc3Qg aW50IHhwX3B1ID0gKHgwICsgaSAtIDEpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAg ICBjb25zdCBpbnQgeHFfcHUgPSAoeDAgKyBpKSAgICAgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAg ICAgICAgICAgIGNvbnN0IE12RmllbGQgKmxlZnQgPSAmdGFiX212Zlt5X3B1ICogbWluX3B1X3dp ZHRoICsgeHBfcHVdOworICAgICAgICAgICAgY29uc3QgTXZGaWVsZCAqY3VyciA9ICZ0YWJfbXZm W3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cV9wdV07CisgICAgICAgICAgICBjb25zdCBpbnQgeCA9 IHgwICsgaTsKKyAgICAgICAgICAgIGNvbnN0IGludCB5ID0geTAgKyBqOworICAgICAgICAgICAg Y29uc3QgaW50IGJzID0gYm91bmRhcnlfc3RyZW5ndGgobGMsIGN1cnIsIGxlZnQsIHJwbCk7Cisg ICAgICAgICAgICB1aW50OF90IG1heF9sZW5fcCA9IDAsIG1heF9sZW5fcSA9IDA7CisKKyAgICAg ICAgICAgIFRBQl9CUyhmYy0+dGFiLnZlcnRpY2FsX2JzW0xVTUFdLCB4LCB5KSA9IGJzOworCisg ICAgICAgICAgICBpZiAoaSA9PSA0IHx8IGkgPT0gd2lkdGggLSA0KQorICAgICAgICAgICAgICAg IG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDE7CisgICAgICAgICAgICBlbHNlIGlmIChpID09IDgg fHwgaSA9PSB3aWR0aCAtIDgpCisgICAgICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9x ID0gMjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhf bGVuX3EgPSAzOworCisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLnZlcnRpY2FsX3As IHgsIHkpID0gbWF4X2xlbl9wOworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi52ZXJ0 aWNhbF9xLCB4LCB5KSA9IG1heF9sZW5fcTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGlj IHZvaWQgdnZjX2RlYmxvY2tfc3ViYmxvY2tfYnNfaG9yaXpvbnRhbChjb25zdCBWVkNMb2NhbENv bnRleHQgKmxjLAorICAgIGNvbnN0IGludCBjYl94LCBjb25zdCBpbnQgY2JfeSwgY29uc3QgaW50 IHgwLCBjb25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sK KyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBNdkZp ZWxkKiB0YWJfbXZmICAgICA9IGZjLT50YWIubXZmOworICAgIGNvbnN0IFJlZlBpY0xpc3QqIHJw bCAgICAgID0gbGMtPnNjLT5ycGw7CisgICAgY29uc3QgaW50IG1pbl9wdV93aWR0aCAgICAgPSBm Yy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1X3NpemUg PSBNSU5fUFVfTE9HMjsKKworICAgIC8vIGJzIGZvciBUVSBpbnRlcm5hbCBob3Jpem9udGFsIFBV IGJvdW5kYXJpZXMKKyAgICBmb3IgKGludCBqID0gOCAtICgoeTAgLSBjYl95KSAlIDgpOyBqIDwg aGVpZ2h0OyBqICs9IDgpIHsKKyAgICAgICAgaW50IHlwX3B1ID0gKHkwICsgaiAtIDEpID4+IGxv ZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB5cV9wdSA9ICh5MCArIGopICAgICA+PiBsb2cy X21pbl9wdV9zaXplOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg7IGkgKz0g NCkgeworICAgICAgICAgICAgY29uc3QgaW50IHhfcHUgPSAoeDAgKyBpKSA+PiBsb2cyX21pbl9w dV9zaXplOworICAgICAgICAgICAgY29uc3QgTXZGaWVsZCAqdG9wICA9ICZ0YWJfbXZmW3lwX3B1 ICogbWluX3B1X3dpZHRoICsgeF9wdV07CisgICAgICAgICAgICBjb25zdCBNdkZpZWxkICpjdXJy ID0gJnRhYl9tdmZbeXFfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsKKyAgICAgICAgICAgIGNv bnN0IGludCB4ID0geDAgKyBpOworICAgICAgICAgICAgY29uc3QgaW50IHkgPSB5MCArIGo7Cisg ICAgICAgICAgICBjb25zdCBpbnQgYnMgPSBib3VuZGFyeV9zdHJlbmd0aChsYywgY3VyciwgdG9w LCBycGwpOworICAgICAgICAgICAgdWludDhfdCBtYXhfbGVuX3AgPSAwLCBtYXhfbGVuX3EgPSAw OworCisgICAgICAgICAgICBUQUJfQlMoZmMtPnRhYi5ob3Jpem9udGFsX2JzW0xVTUFdLCB4LCB5 KSA9IGJzOworCisgICAgICAgICAgICAvL2ZpeG1lOgorICAgICAgICAgICAgLy9lZGdlVGJGbGFn c1sgeCDiiJIgc2JXIF1bIHkgXSBpcyBlcXVhbCB0byAxCisgICAgICAgICAgICAvL2VkZ2VUYkZs YWdzWyB4ICsgc2JXIF1bIHkgXSBpcyBlcXVhbCB0byAxCisgICAgICAgICAgICBpZiAoaiA9PSA0 IHx8IGogPT0gaGVpZ2h0IC0gNCkKKyAgICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVu X3EgPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoaiA9PSA4IHx8IGogPT0gaGVpZ2h0IC0gOCkK KyAgICAgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAyOworICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDM7CisgICAgICAg ICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLmhvcml6b250YWxfcCwgeCwgeSkgPSBtYXhfbGVuX3A7 CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLmhvcml6b250YWxfcSwgeCwgeSkgPSBt YXhfbGVuX3E7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2Nr X2JzX2x1bWFfdmVydGljYWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBp bnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQor eworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNvbnN0IE12 RmllbGQgKnRhYl9tdmYgICAgID0gZmMtPnRhYi5tdmY7CisgICAgY29uc3QgaW50IGxvZzJfbWlu X3B1X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fdHVfc2l6ZSA9 IE1JTl9UVV9MT0cyOworICAgIGNvbnN0IGludCBtaW5fcHVfd2lkdGggICAgID0gZmMtPnBzLnBw cy0+bWluX3B1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fdHVfd2lkdGggICAgID0gZmMtPnBz LnBwcy0+bWluX3R1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMiAgICAgID0gZmMt PnBzLnNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtaW5fY2Jfd2lkdGgg ICAgID0gZmMtPnBzLnBwcy0+bWluX2NiX3dpZHRoOworICAgIGNvbnN0IGludCBpc19pbnRyYSAg ICAgICAgID0gdGFiX212ZlsoeTAgPj4gbG9nMl9taW5fcHVfc2l6ZSkgKiBtaW5fcHVfd2lkdGgg KworICAgICAgICAoeDAgPj4gbG9nMl9taW5fcHVfc2l6ZSldLnByZWRfZmxhZyA9PSBQRl9JTlRS QTsKKyAgICBpbnQgYm91bmRhcnlfbGVmdDsKKyAgICBpbnQgaGFzX3ZlcnRpY2FsX3NiID0gMDsK KworICAgIGNvbnN0IGludCBvZmZfcSAgICAgICAgICAgID0gKHkwID4+IG1pbl9jYl9sb2cyKSAq IG1pbl9jYl93aWR0aCArICh4MCA+PiBtaW5fY2JfbG9nMik7CisgICAgY29uc3QgaW50IGNiX3gg ICAgICAgICAgICAgPSBmYy0+dGFiLmNiX3Bvc194W0xVTUFdW29mZl9xXTsKKyAgICBjb25zdCBp bnQgY2JfeSAgICAgICAgICAgICA9IGZjLT50YWIuY2JfcG9zX3lbTFVNQV1bb2ZmX3FdOworICAg IGNvbnN0IGludCBjYl93aWR0aCAgICAgICAgID0gZmMtPnRhYi5jYl93aWR0aFtMVU1BXVtvZmZf cV07CisKKyAgICBpZiAoIWlzX2ludHJhKSB7CisgICAgICAgIGlmIChmYy0+dGFiLm1zZltvZmZf cV0gfHwgZmMtPnRhYi5pYWZbb2ZmX3FdKQorICAgICAgICAgICAgaGFzX3ZlcnRpY2FsX3NiID0g Y2Jfd2lkdGggID4gODsKKyAgICB9CisKKyAgICAvLyBicyBmb3IgdmVydGljYWwgVFUgYm91bmRh cmllcworICAgIGJvdW5kYXJ5X2xlZnQgPSB4MCA+IDAgJiYgISh4MCAmIDMpOworICAgIGlmIChi b3VuZGFyeV9sZWZ0ICYmCisgICAgICAgICgoIWZjLT5wcy5wcHMtPnItPnBwc19sb29wX2ZpbHRl cl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5 X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9TTElDRSAmJgorICAgICAgICAgICAgKHgwICUgKDEgPDwg ZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkgfHwKKyAgICAgICAgICAgICghZmMt PnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWcgJiYK KyAgICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xFRlRfVElMRSAmJgor ICAgICAgICAgICAgKHgwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0g MCkpKQorICAgICAgICBib3VuZGFyeV9sZWZ0ID0gMDsKKworICAgIGlmIChib3VuZGFyeV9sZWZ0 KSB7CisgICAgICAgIGNvbnN0IFJlZlBpY0xpc3QgKnJwbF9sZWZ0ID0KKyAgICAgICAgICAgIChs Yy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1NMSUNFKSA/IGZmX3Z2Y19nZXRfcmVm X2xpc3QoZmMsIGZjLT5yZWYsIHgwIC0gMSwgeTApIDogbGMtPnNjLT5ycGw7CisgICAgICAgIGNv bnN0IGludCB4cF9wdSA9ICh4MCAtIDEpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGNv bnN0IGludCB4cV9wdSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGNv bnN0IGludCB4cF90dSA9ICh4MCAtIDEpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgIGNv bnN0IGludCB4cV90dSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3R1X3NpemU7CisKKyAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkgKz0gNCkgeworICAgICAgICAgICAgY29uc3Qg aW50IG9mZl94ID0gY2JfeCAtIHgwOworICAgICAgICAgICAgY29uc3QgaW50IHlfcHUgID0gKHkw ICsgaSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIGNvbnN0IGludCB5X3R1ICA9 ICh5MCArIGkpID4+IGxvZzJfbWluX3R1X3NpemU7CisgICAgICAgICAgICBjb25zdCBNdkZpZWxk ICpsZWZ0ID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCArIHhwX3B1XTsKKyAgICAgICAg ICAgIGNvbnN0IE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5X3B1ICogbWluX3B1X3dpZHRoICsg eHFfcHVdOworICAgICAgICAgICAgY29uc3QgdWludDhfdCBsZWZ0X2NiZl9sdW1hID0gZmMtPnRh Yi50dV9jb2RlZF9mbGFnW0xVTUFdW3lfdHUgKiBtaW5fdHVfd2lkdGggKyB4cF90dV07CisgICAg ICAgICAgICBjb25zdCB1aW50OF90IGN1cnJfY2JmX2x1bWEgPSBmYy0+dGFiLnR1X2NvZGVkX2Zs YWdbTFVNQV1beV90dSAqIG1pbl90dV93aWR0aCArIHhxX3R1XTsKKyAgICAgICAgICAgIGNvbnN0 IHVpbnQ4X3QgcGNtZiAgICAgICAgICA9IGZjLT50YWIucGNtZltMVU1BXVt5X3R1ICogbWluX3R1 X3dpZHRoICsgeHBfdHVdICYmCisgICAgICAgICAgICAgICAgZmMtPnRhYi5wY21mW0xVTUFdW3lf dHUgKiBtaW5fdHVfd2lkdGggKyB4cV90dV07CisgICAgICAgICAgICB1aW50OF90IG1heF9sZW5f cCwgbWF4X2xlbl9xOworICAgICAgICAgICAgaW50IGJzOworCisgICAgICAgICAgICBpZiAocGNt ZikKKyAgICAgICAgICAgICAgICBicyA9IDA7CisgICAgICAgICAgICBlbHNlIGlmIChjdXJyLT5w cmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgbGVmdC0+cHJlZF9mbGFnID09IFBGX0lOVFJBIHx8IGN1 cnItPmNpaXBfZmxhZyB8fCBsZWZ0LT5jaWlwX2ZsYWcpCisgICAgICAgICAgICAgICAgYnMgPSAy OworICAgICAgICAgICAgZWxzZSBpZiAoY3Vycl9jYmZfbHVtYSB8fCBsZWZ0X2NiZl9sdW1hKQor ICAgICAgICAgICAgICAgIGJzID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZl94ICYmICgo b2ZmX3ggJSA4KSB8fCAhaGFzX3ZlcnRpY2FsX3NiKSkKKyAgICAgICAgICAgICAgICBicyA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy9pbnNpZGUgYSBjdSwgbm90 IGFsaWduZWQgdG8gOCBvciB3aXRoIG5vIHN1YmJsb2NrcworICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICAgIGJzID0gYm91bmRhcnlfc3RyZW5ndGgobGMsIGN1cnIsIGxlZnQsIHJwbF9s ZWZ0KTsKKworICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIudmVydGljYWxfYnNbTFVNQV0sIHgw LCAoeTAgKyBpKSkgPSBiczsKKworICAgICAgICAgICAgZGVyaXZlX21heF9maWx0ZXJfbGVuZ3Ro X2x1bWEoZmMsIHgwLCB5MCArIGksIGlzX2ludHJhLCBoYXNfdmVydGljYWxfc2IsIDEsICZtYXhf bGVuX3AsICZtYXhfbGVuX3EpOworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi52ZXJ0 aWNhbF9wLCB4MCwgeTAgKyBpKSA9IG1heF9sZW5fcDsKKyAgICAgICAgICAgIFRBQl9NQVhfTEVO KGZjLT50YWIudmVydGljYWxfcSwgeDAsIHkwICsgaSkgPSBtYXhfbGVuX3E7CisgICAgICAgIH0K KyAgICB9CisKKyAgICBpZiAoIWlzX2ludHJhKSB7CisgICAgICAgIGlmIChmYy0+dGFiLm1zZltv ZmZfcV0gfHwgZmMtPnRhYi5pYWZbb2ZmX3FdKQorICAgICAgICAgICAgdnZjX2RlYmxvY2tfc3Vi YmxvY2tfYnNfdmVydGljYWwobGMsIGNiX3gsIGNiX3ksIHgwLCB5MCwgd2lkdGgsIGhlaWdodCk7 CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2dmNfZGVibG9ja19ic19sdW1hX2hvcml6b250YWwo Y29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5 MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IFZWQ0Zy YW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNvbnN0IE12RmllbGQgKnRhYl9tdmYgICAg ICAgICAgID0gZmMtPnRhYi5tdmY7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1X3NpemUgPSBN SU5fUFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fdHVfc2l6ZSA9IE1JTl9UVV9MT0cy OworICAgIGNvbnN0IGludCBtaW5fcHVfd2lkdGggICAgID0gZmMtPnBzLnBwcy0+bWluX3B1X3dp ZHRoOworICAgIGNvbnN0IGludCBtaW5fdHVfd2lkdGggICAgID0gZmMtPnBzLnBwcy0+bWluX3R1 X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMiAgICAgID0gZmMtPnBzLnNwcy0+bWlu X2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtaW5fY2Jfd2lkdGggICAgID0gZmMtPnBz LnBwcy0+bWluX2NiX3dpZHRoOworICAgIGNvbnN0IGludCBpc19pbnRyYSA9IHRhYl9tdmZbKHkw ID4+IGxvZzJfbWluX3B1X3NpemUpICogbWluX3B1X3dpZHRoICsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICh4MCA+PiBsb2cyX21pbl9wdV9zaXplKV0ucHJlZF9mbGFnID09IFBGX0lOVFJB OworICAgIGludCBib3VuZGFyeV91cHBlcjsKKyAgICBpbnQgaGFzX2hvcml6b250YWxfc2IgPSAw OworCisgICAgY29uc3QgaW50IG9mZl9xICAgICAgICAgICAgPSAoeTAgPj4gbWluX2NiX2xvZzIp ICogbWluX2NiX3dpZHRoICsgKHgwID4+IG1pbl9jYl9sb2cyKTsKKyAgICBjb25zdCBpbnQgY2Jf eCAgICAgICAgICAgICA9IGZjLT50YWIuY2JfcG9zX3hbTFVNQV1bb2ZmX3FdOworICAgIGNvbnN0 IGludCBjYl95ICAgICAgICAgICAgID0gZmMtPnRhYi5jYl9wb3NfeVtMVU1BXVtvZmZfcV07Cisg ICAgY29uc3QgaW50IGNiX2hlaWdodCAgICAgICAgPSBmYy0+dGFiLmNiX2hlaWdodFtMVU1BXVtv ZmZfcV07CisKKyAgICBpZiAoIWlzX2ludHJhKSB7CisgICAgICAgIGlmIChmYy0+dGFiLm1zZltv ZmZfcV0gfHwgZmMtPnRhYi5pYWZbb2ZmX3FdKQorICAgICAgICAgICAgaGFzX2hvcml6b250YWxf c2IgPSBjYl9oZWlnaHQgPiA4OworICAgIH0KKworICAgIGJvdW5kYXJ5X3VwcGVyID0geTAgPiAw ICYmICEoeTAgJiAzKTsKKyAgICBpZiAoYm91bmRhcnlfdXBwZXIgJiYKKyAgICAgICAgKCghZmMt PnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYm CisgICAgICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9TTElDRSAm JgorICAgICAgICAgICAgKHkwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkg PT0gMCkgfHwKKyAgICAgICAgICAgICghZmMtPnBzLnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fj cm9zc190aWxlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFn cyAmIEJPVU5EQVJZX1VQUEVSX1RJTEUgJiYKKyAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5w cy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApKSkKKyAgICAgICAgYm91bmRhcnlfdXBwZXIg PSAwOworCisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyKSB7CisgICAgICAgIGNvbnN0IFJlZlBpY0xp c3QgKnJwbF90b3AgPQorICAgICAgICAgICAgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZ X1VQUEVSX1NMSUNFKSA/IGZmX3Z2Y19nZXRfcmVmX2xpc3QoZmMsIGZjLT5yZWYsIHgwLCB5MCAt IDEpIDogbGMtPnNjLT5ycGw7CisgICAgICAgIGludCB5cF9wdSA9ICh5MCAtIDEpID4+IGxvZzJf bWluX3B1X3NpemU7CisgICAgICAgIGludCB5cV9wdSA9ICB5MCAgICAgID4+IGxvZzJfbWluX3B1 X3NpemU7CisgICAgICAgIGludCB5cF90dSA9ICh5MCAtIDEpID4+IGxvZzJfbWluX3R1X3NpemU7 CisgICAgICAgIGludCB5cV90dSA9ICB5MCAgICAgID4+IGxvZzJfbWluX3R1X3NpemU7CisKKyAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSArPSA0KSB7CisgICAgICAgICAgICBj b25zdCBpbnQgb2ZmX3kgPSB5MCAtIGNiX3k7CisgICAgICAgICAgICBjb25zdCBpbnQgeF9wdSAg PSAoeDAgKyBpKSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAgY29uc3QgaW50IHhf dHUgID0gKHgwICsgaSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAgICAgIGNvbnN0IE12 RmllbGQgKnRvcCAgPSAmdGFiX212Zlt5cF9wdSAqIG1pbl9wdV93aWR0aCArIHhfcHVdOworICAg ICAgICAgICAgY29uc3QgTXZGaWVsZCAqY3VyciA9ICZ0YWJfbXZmW3lxX3B1ICogbWluX3B1X3dp ZHRoICsgeF9wdV07CisgICAgICAgICAgICBjb25zdCB1aW50OF90IHRvcF9jYmZfbHVtYSAgPSBm Yy0+dGFiLnR1X2NvZGVkX2ZsYWdbTFVNQV1beXBfdHUgKiBtaW5fdHVfd2lkdGggKyB4X3R1XTsK KyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgY3Vycl9jYmZfbHVtYSA9IGZjLT50YWIudHVfY29k ZWRfZmxhZ1tMVU1BXVt5cV90dSAqIG1pbl90dV93aWR0aCArIHhfdHVdOworICAgICAgICAgICAg Y29uc3QgdWludDhfdCBwY21mICAgICAgICAgID0gZmMtPnRhYi5wY21mW0xVTUFdW3lwX3R1ICog bWluX3R1X3dpZHRoICsgeF90dV0gJiYKKyAgICAgICAgICAgICAgICBmYy0+dGFiLnBjbWZbTFVN QV1beXFfdHUgKiBtaW5fdHVfd2lkdGggKyB4X3R1XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbWF4 X2xlbl9wLCBtYXhfbGVuX3E7CisgICAgICAgICAgICBpbnQgYnM7CisKKyAgICAgICAgICAgIGlm IChwY21mKQorICAgICAgICAgICAgICAgIGJzID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1 cnItPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCB0b3AtPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8 fCBjdXJyLT5jaWlwX2ZsYWcgfHwgdG9wLT5jaWlwX2ZsYWcpCisgICAgICAgICAgICAgICAgYnMg PSAyOworICAgICAgICAgICAgZWxzZSBpZiAoY3Vycl9jYmZfbHVtYSB8fCB0b3BfY2JmX2x1bWEp CisgICAgICAgICAgICAgICAgYnMgPSAxOworICAgICAgICAgICAgZWxzZSBpZiAob2ZmX3kgJiYg KChvZmZfeSAlIDgpIHx8ICFoYXNfaG9yaXpvbnRhbF9zYikpCisgICAgICAgICAgICAgICAgYnMg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2luc2lkZSBhIGN1LCBu b3QgYWxpZ25lZCB0byA4IG9yIHdpdGggbm8gc3ViYmxvY2tzCisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgYnMgPSBib3VuZGFyeV9zdHJlbmd0aChsYywgY3VyciwgdG9wLCBycGxf dG9wKTsKKworICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIuaG9yaXpvbnRhbF9ic1tMVU1BXSwg eDAgKyBpLCB5MCkgPSBiczsKKworICAgICAgICAgICAgZGVyaXZlX21heF9maWx0ZXJfbGVuZ3Ro X2x1bWEoZmMsIHgwICsgaSwgeTAsIGlzX2ludHJhLCBoYXNfaG9yaXpvbnRhbF9zYiwgMCwgJm1h eF9sZW5fcCwgJm1heF9sZW5fcSk7CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLmhv cml6b250YWxfcCwgeDAgKyBpLCB5MCkgPSBtYXhfbGVuX3A7CisgICAgICAgICAgICBUQUJfTUFY X0xFTihmYy0+dGFiLmhvcml6b250YWxfcSwgeDAgKyBpLCB5MCkgPSBtYXhfbGVuX3E7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlzX2ludHJhKSB7CisgICAgICAgIGlmIChmYy0+dGFi Lm1zZltvZmZfcV0gfHwgZmMtPnRhYi5pYWZbb2ZmX3FdKQorICAgICAgICAgICAgdnZjX2RlYmxv Y2tfc3ViYmxvY2tfYnNfaG9yaXpvbnRhbChsYywgY2JfeCwgY2JfeSwgeDAsIHkwLCB3aWR0aCwg aGVpZ2h0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2NrX2JzX2Nocm9tYV92 ZXJ0aWNhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IGludCB4MCwgY29u c3QgaW50IHkwLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgY29u c3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgPSBsYy0+ZmM7CisgICAgY29uc3QgTXZGaWVsZCAqdGFi X212ZiAgICAgICAgICAgPSBmYy0+dGFiLm12ZjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVf c2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGludCBsb2cyX21pbl90dV9zaXplID0gTUlO X1BVX0xPRzI7CisgICAgY29uc3QgaW50IG1pbl9wdV93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5t aW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IG1pbl90dV93aWR0aCAgICAgPSBmYy0+cHMucHBz LT5taW5fdHVfd2lkdGg7CisgICAgaW50IGJvdW5kYXJ5X2xlZnQ7CisKKyAgICAvLyBicyBmb3Ig dmVydGljYWwgVFUgYm91bmRhcmllcworICAgIGJvdW5kYXJ5X2xlZnQgPSB4MCA+IDAgJiYgISh4 MCAmICgoQ0hST01BX0dSSUQgPDwgZmMtPnBzLnNwcy0+aHNoaWZ0WzFdKSAtIDEpKTsKKyAgICBp ZiAoYm91bmRhcnlfbGVmdCAmJgorICAgICAgICAoKCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9m aWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICBsYy0+Ym91bmRh cnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1NMSUNFICYmCisgICAgICAgICAgKHgwICUgKDEgPDwg ZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkgfHwKKyAgICAgICAgICghZmMtPnBz LnBwcy0+ci0+cHBzX2xvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWcgJiYKKyAg ICAgICAgICBsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1RJTEUgJiYKKyAgICAg ICAgICAoeDAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSkpCisg ICAgICAgIGJvdW5kYXJ5X2xlZnQgPSAwOworCisgICAgaWYgKGJvdW5kYXJ5X2xlZnQpIHsKKyAg ICAgICAgY29uc3QgaW50IHhwX3B1ID0gKHgwIC0gMSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAg ICAgICAgY29uc3QgaW50IHhxX3B1ID0gIHgwICAgICAgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAg ICAgICAgY29uc3QgaW50IHhwX3R1ID0gKHgwIC0gMSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAg ICAgICAgY29uc3QgaW50IHhxX3R1ID0gIHgwICAgICAgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKwor ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSArPSAyKSB7CisgICAgICAgICAg ICBjb25zdCBpbnQgeV9wdSAgICAgID0gKHkwICsgaSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAg ICAgICAgICAgIGNvbnN0IGludCB5X3R1ICAgICAgPSAoeTAgKyBpKSA+PiBsb2cyX21pbl90dV9z aXplOworICAgICAgICAgICAgY29uc3QgTXZGaWVsZCAqbGVmdCA9ICZ0YWJfbXZmW3lfcHUgKiBt aW5fcHVfd2lkdGggKyB4cF9wdV07CisgICAgICAgICAgICBjb25zdCBNdkZpZWxkICpjdXJyID0g JnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCArIHhxX3B1XTsKKyAgICAgICAgICAgIGNvbnN0 IGludCBsZWZ0X3R1ICAgPSB5X3R1ICogbWluX3R1X3dpZHRoICsgeHBfdHU7CisgICAgICAgICAg ICBjb25zdCBpbnQgY3Vycl90dSAgID0geV90dSAqIG1pbl90dV93aWR0aCArIHhxX3R1OworICAg ICAgICAgICAgY29uc3QgdWludDhfdCBwY21mICA9IGZjLT50YWIucGNtZltDSFJPTUFdW2xlZnRf dHVdICYmIGZjLT50YWIucGNtZltDSFJPTUFdW2N1cnJfdHVdOworCisgICAgICAgICAgICBmb3Ig KGludCBjID0gQ0I7IGMgPD0gQ1I7IGMrKykgeworICAgICAgICAgICAgICAgIHVpbnQ4X3QgY2Jm ID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW2NdW2xlZnRfdHVdIHwKKyAgICAgICAgICAgICAgICAg ICAgZmMtPnRhYi50dV9jb2RlZF9mbGFnW2NdW2N1cnJfdHVdIHwKKyAgICAgICAgICAgICAgICAg ICAgZmMtPnRhYi50dV9qb2ludF9jYmNyX3Jlc2lkdWFsX2ZsYWdbbGVmdF90dV0gfAorICAgICAg ICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50X2NiY3JfcmVzaWR1YWxfZmxhZ1tjdXJyX3R1 XTsKKyAgICAgICAgICAgICAgICBpbnQgYnMgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKHBj bWYpCisgICAgICAgICAgICAgICAgICAgIGJzID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIGlm IChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgbGVmdC0+cHJlZF9mbGFnID09IFBGX0lO VFJBIHx8IGN1cnItPmNpaXBfZmxhZyB8fCBsZWZ0LT5jaWlwX2ZsYWcpCisgICAgICAgICAgICAg ICAgICAgIGJzID0gMjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjYmYpCisgICAgICAgICAg ICAgICAgICAgIGJzID0gMTsKKyAgICAgICAgICAgICAgICBUQUJfQlMoZmMtPnRhYi52ZXJ0aWNh bF9ic1tjXSwgeDAsICh5MCArIGkpKSA9IGJzOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZCB2dmNfZGVibG9ja19ic19jaHJvbWFfaG9yaXpvbnRhbChj b25zdCBWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkw LCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgY29uc3QgVlZDRnJh bWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBNdkZpZWxkICp0YWJfbXZmID0gZmMtPnRhYi5t dmY7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBj b25zdCBpbnQgbG9nMl9taW5fdHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGludCBt aW5fcHVfd2lkdGggPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IG1p bl90dV93aWR0aCA9IGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aDsKKyAgICBpbnQgYm91bmRhcnlf dXBwZXI7CisKKyAgICBib3VuZGFyeV91cHBlciA9IHkwID4gMCAmJiAhKHkwICYgKChDSFJPTUFf R1JJRCA8PCBmYy0+cHMuc3BzLT52c2hpZnRbMV0pIC0gMSkpOworICAgIGlmIChib3VuZGFyeV91 cHBlciAmJgorICAgICAgICAoKCFmYy0+cHMucHBzLT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3Nz X3NsaWNlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAm IEJPVU5EQVJZX1VQUEVSX1NMSUNFICYmCisgICAgICAgICAgICAoeTAgJSAoMSA8PCBmYy0+cHMu c3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSB8fAorICAgICAgICAgICAgKCFmYy0+cHMucHBz LT5yLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZyAmJgorICAgICAg ICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX1VQUEVSX1RJTEUgJiYKKyAg ICAgICAgICAgICAgICAoeTAgJSAoMSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9 PSAwKSkpCisgICAgICAgIGJvdW5kYXJ5X3VwcGVyID0gMDsKKworICAgIGlmIChib3VuZGFyeV91 cHBlcikgeworICAgICAgICBpbnQgeXBfcHUgPSAoeTAgLSAxKSA+PiBsb2cyX21pbl9wdV9zaXpl OworICAgICAgICBpbnQgeXFfcHUgPSB5MCA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICBp bnQgeXBfdHUgPSAoeTAgLSAxKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICBpbnQgeXFf dHUgPSB5MCA+PiBsb2cyX21pbl90dV9zaXplOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgd2lkdGg7IGkgKz0gMikgeworICAgICAgICAgICAgY29uc3QgaW50IHhfcHUgPSAoeDAgKyBp KSA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAgY29uc3QgaW50IHhfdHUgPSAoeDAg KyBpKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICAgICAgY29uc3QgTXZGaWVsZCAqdG9w ICA9ICZ0YWJfbXZmW3lwX3B1ICogbWluX3B1X3dpZHRoICsgeF9wdV07CisgICAgICAgICAgICBj b25zdCBNdkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeXFfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1 XTsKKyAgICAgICAgICAgIGNvbnN0IGludCB0b3BfdHUgID0geXBfdHUgKiBtaW5fdHVfd2lkdGgg KyB4X3R1OworICAgICAgICAgICAgY29uc3QgaW50IGN1cnJfdHUgPSB5cV90dSAqIG1pbl90dV93 aWR0aCArIHhfdHU7CisgICAgICAgICAgICBjb25zdCB1aW50OF90IHBjbWYgPSBmYy0+dGFiLnBj bWZbQ0hST01BXVt0b3BfdHVdICYmIGZjLT50YWIucGNtZltDSFJPTUFdW2N1cnJfdHVdOworCisg ICAgICAgICAgICBmb3IgKGludCBjID0gQ0I7IGMgPD0gQ1I7IGMrKykgeworICAgICAgICAgICAg ICAgIHVpbnQ4X3QgY2JmID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW2NdW3RvcF90dV0gfAorICAg ICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2NvZGVkX2ZsYWdbY11bY3Vycl90dV0gfAorICAg ICAgICAgICAgICAgICAgICBmYy0+dGFiLnR1X2pvaW50X2NiY3JfcmVzaWR1YWxfZmxhZ1t0b3Bf dHVdIHwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9qb2ludF9jYmNyX3Jlc2lkdWFs X2ZsYWdbY3Vycl90dV07CisgICAgICAgICAgICAgICAgaW50IGJzID0gMDsKKworICAgICAgICAg ICAgICAgIGlmIChwY21mKQorICAgICAgICAgICAgICAgICAgICBicyA9IDA7CisgICAgICAgICAg ICAgICAgZWxzZSBpZiAoY3Vyci0+cHJlZF9mbGFnID09IFBGX0lOVFJBIHx8IHRvcC0+cHJlZF9m bGFnID09IFBGX0lOVFJBIHx8IGN1cnItPmNpaXBfZmxhZyB8fCB0b3AtPmNpaXBfZmxhZykKKyAg ICAgICAgICAgICAgICAgICAgYnMgPSAyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNiZikK KyAgICAgICAgICAgICAgICAgICAgYnMgPSAxOworICAgICAgICAgICAgICAgIFRBQl9CUyhmYy0+ dGFiLmhvcml6b250YWxfYnNbY10sIHgwICsgaSwgeTApID0gYnM7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9Cit9CisKK3R5cGVkZWYgdm9pZCAoKmRlYmxvY2tfYnNfZm4pKGNvbnN0 IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLAorICAgIGNv bnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCk7CisKK3N0YXRpYyB2b2lkIHZ2Y19kZWJs b2NrX2JzKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50 IHkwLCBjb25zdCBpbnQgdmVydGljYWwpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpm YyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTUFMgKnNwcyAgPSBmYy0+cHMuc3BzOworICAgIGNv bnN0IFZWQ1BQUyAqcHBzICA9IGZjLT5wcy5wcHM7CisgICAgY29uc3QgaW50IGN0Yl9zaXplID0g c3BzLT5jdGJfc2l6ZV95OworICAgIGNvbnN0IGludCB4X2VuZCAgICA9IEZGTUlOKHgwICsgY3Ri X3NpemUsIHBwcy0+d2lkdGgpID4+IE1JTl9UVV9MT0cyOworICAgIGNvbnN0IGludCB5X2VuZCAg ICA9IEZGTUlOKHkwICsgY3RiX3NpemUsIHBwcy0+aGVpZ2h0KSA+PiBNSU5fVFVfTE9HMjsKKyAg ICBkZWJsb2NrX2JzX2ZuIGRlYmxvY2tfYnNbMl1bMl0gPSB7CisgICAgICAgIHsgdnZjX2RlYmxv Y2tfYnNfbHVtYV9ob3Jpem9udGFsLCB2dmNfZGVibG9ja19ic19jaHJvbWFfaG9yaXpvbnRhbCB9 LAorICAgICAgICB7IHZ2Y19kZWJsb2NrX2JzX2x1bWFfdmVydGljYWwsICAgdnZjX2RlYmxvY2tf YnNfY2hyb21hX3ZlcnRpY2FsICAgfQorICAgIH07CisKKyAgICBmb3IgKGludCBpc19jaHJvbWEg PSAwOyBpc19jaHJvbWEgPD0gMTsgaXNfY2hyb21hKyspIHsKKyAgICAgICAgY29uc3QgaW50IGhz ID0gc3BzLT5oc2hpZnRbaXNfY2hyb21hXTsKKyAgICAgICAgY29uc3QgaW50IHZzID0gc3BzLT52 c2hpZnRbaXNfY2hyb21hXTsKKyAgICAgICAgZm9yIChpbnQgeSA9IHkwID4+IE1JTl9UVV9MT0cy OyB5IDwgeV9lbmQ7IHkrKykgeworICAgICAgICAgICAgZm9yIChpbnQgeCA9IHgwID4+IE1JTl9U VV9MT0cyOyB4IDwgeF9lbmQ7IHgrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBvZmYg PSB5ICogZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoICsgeDsKKyAgICAgICAgICAgICAgICBpZiAo KGZjLT50YWIudGJfcG9zX3gwW2lzX2Nocm9tYV1bb2ZmXSA+PiBNSU5fVFVfTE9HMikgPT0geCAm JiAoZmMtPnRhYi50Yl9wb3NfeTBbaXNfY2hyb21hXVtvZmZdID4+IE1JTl9UVV9MT0cyKSA9PSB5 KSB7CisgICAgICAgICAgICAgICAgICAgIGRlYmxvY2tfYnNbdmVydGljYWxdW2lzX2Nocm9tYV0o bGMsIHggPDwgTUlOX1RVX0xPRzIsIHkgPDwgTUlOX1RVX0xPRzIsCisgICAgICAgICAgICAgICAg ICAgICAgICBmYy0+dGFiLnRiX3dpZHRoW2lzX2Nocm9tYV1bb2ZmXSA8PCBocywgZmMtPnRhYi50 Yl9oZWlnaHRbaXNfY2hyb21hXVtvZmZdIDw8IHZzKTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vcGFydCBvZiA4LjguMy4zIERlcml2 YXRpb24gcHJvY2VzcyBvZiB0cmFuc2Zvcm0gYmxvY2sgYm91bmRhcnkKK3N0YXRpYyB2b2lkIG1h eF9maWx0ZXJfbGVuZ3RoX2x1bWEoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QgaW50 IHF4LCBjb25zdCBpbnQgcXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGludCB2ZXJ0aWNhbCwgdWludDhfdCAqbWF4X2xlbl9wLCB1aW50OF90ICptYXhfbGVuX3Ep Cit7CisgICAgY29uc3QgdWludDhfdCAqdGFiX2xlbl9wID0gdmVydGljYWwgPyBmYy0+dGFiLnZl cnRpY2FsX3AgOiBmYy0+dGFiLmhvcml6b250YWxfcDsKKyAgICBjb25zdCB1aW50OF90ICp0YWJf bGVuX3EgPSB2ZXJ0aWNhbCA/IGZjLT50YWIudmVydGljYWxfcSA6IGZjLT50YWIuaG9yaXpvbnRh bF9xOworICAgICptYXhfbGVuX3AgPSBUQUJfTUFYX0xFTih0YWJfbGVuX3AsIHF4LCBxeSk7Cisg ICAgKm1heF9sZW5fcSA9IFRBQl9NQVhfTEVOKHRhYl9sZW5fcSwgcXgsIHF5KTsKK30KKworLy9w YXJ0IG9mIDguOC4zLjMgRGVyaXZhdGlvbiBwcm9jZXNzIG9mIHRyYW5zZm9ybSBibG9jayBib3Vu ZGFyeQorc3RhdGljIHZvaWQgbWF4X2ZpbHRlcl9sZW5ndGhfY2hyb21hKGNvbnN0IFZWQ0ZyYW1l Q29udGV4dCAqZmMsIGNvbnN0IGludCBxeCwgY29uc3QgaW50IHF5LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB2ZXJ0aWNhbCwgY29uc3QgaW50IGhvcml6 b250YWxfY3R1X2VkZ2UsIGNvbnN0IGludCBicywgdWludDhfdCAqbWF4X2xlbl9wLCB1aW50OF90 ICptYXhfbGVuX3EpCit7CisgICAgY29uc3QgaW50IHB4ID0gIHZlcnRpY2FsID8gcXggLSAxIDog cXg7CisgICAgY29uc3QgaW50IHB5ID0gIXZlcnRpY2FsID8gcXkgLSAxIDogcXk7CisgICAgY29u c3QgdWludDhfdCAqdGJfc2l6ZSA9IHZlcnRpY2FsID8gZmMtPnRhYi50Yl93aWR0aFtDSFJPTUFd IDogZmMtPnRhYi50Yl9oZWlnaHRbQ0hST01BXTsKKworICAgIGNvbnN0IGludCBzaXplX3AgPSB0 Yl9zaXplWyhweSA+PiBNSU5fVFVfTE9HMikgKiBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGggKyAo cHggPj4gTUlOX1RVX0xPRzIpXTsKKyAgICBjb25zdCBpbnQgc2l6ZV9xID0gdGJfc2l6ZVsocXkg Pj4gTUlOX1RVX0xPRzIpICogZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoICsgKHF4ID4+IE1JTl9U VV9MT0cyKV07CisgICAgaWYgKHNpemVfcCA+PSA4ICYmIHNpemVfcSA+PSA4KSB7CisgICAgICAg ICptYXhfbGVuX3AgPSAqbWF4X2xlbl9xID0gMzsKKyAgICAgICAgaWYgKGhvcml6b250YWxfY3R1 X2VkZ2UpCisgICAgICAgICAgICAqbWF4X2xlbl9wID0gMTsKKyAgICB9IGVsc2UgeworICAgICAg ICAvL3BhcnQgb2YgOC44LjMuNi40IERlY2lzaW9uIHByb2Nlc3MgZm9yIGNocm9tYSBibG9jayBl ZGdlcworICAgICAgICAqbWF4X2xlbl9wID0gKm1heF9sZW5fcSA9IChicyA9PSAyKTsKKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIG1heF9maWx0ZXJfbGVuZ3RoKGNvbnN0IFZWQ0ZyYW1lQ29udGV4 dCAqZmMsIGNvbnN0IGludCBxeCwgY29uc3QgaW50IHF5LAorICAgIGNvbnN0IGludCBjX2lkeCwg Y29uc3QgaW50IHZlcnRpY2FsLCBjb25zdCBpbnQgaG9yaXpvbnRhbF9jdHVfZWRnZSwgY29uc3Qg aW50IGJzLCB1aW50OF90ICptYXhfbGVuX3AsIHVpbnQ4X3QgKm1heF9sZW5fcSkKK3sKKyAgICBp ZiAoIWNfaWR4KQorICAgICAgICBtYXhfZmlsdGVyX2xlbmd0aF9sdW1hKGZjLCBxeCwgcXksIHZl cnRpY2FsLCBtYXhfbGVuX3AsIG1heF9sZW5fcSk7CisgICAgZWxzZQorICAgICAgICBtYXhfZmls dGVyX2xlbmd0aF9jaHJvbWEoZmMsIHF4LCBxeSwgdmVydGljYWwsIGhvcml6b250YWxfY3R1X2Vk Z2UsIGJzLCBtYXhfbGVuX3AsIG1heF9sZW5fcSk7Cit9CisKKyNkZWZpbmUgVENfQ0FMQyhxcCwg YnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICB0Y3RhYmxlW2F2X2NsaXAoKHFwKSArIERFRkFVTFRfSU5UUkFfVENfT0ZGU0VUICogKChicykg LSAxKSArICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgKHRjX29mZnNldCAmIC0yKSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgMCwg TUFYX1FQICsgREVGQVVMVF9JTlRSQV9UQ19PRkZTRVQpXQorCisvLyBwYXJ0IG9mIDguOC4zLjYu MiBEZWNpc2lvbiBwcm9jZXNzIGZvciBsdW1hIGJsb2NrIGVkZ2VzCitzdGF0aWMgaW50IGdldF9x cF95KGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3Qg aW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgdmVydGljYWwpCit7CisgICAgY29uc3QgVlZD U1BTICpzcHMgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IGludCBxcCAgICAgID0gKGZmX3Z2Y19n ZXRfcVB5KGZjLCB4IC0gdmVydGljYWwsIHkgLSAhdmVydGljYWwpICsgZmZfdnZjX2dldF9xUHko ZmMsIHgsIHkpICsgMSkgPj4gMTsKKyAgICBpbnQgcXBfb2Zmc2V0ICAgICA9IDA7CisgICAgaW50 IGxldmVsOworCisgICAgaWYgKCFzcHMtPnItPnNwc19sYWRmX2VuYWJsZWRfZmxhZykKKyAgICAg ICAgcmV0dXJuIHFwOworCisgICAgbGV2ZWwgPSBmYy0+dnZjZHNwLmxmLmxhZGZfbGV2ZWxbdmVy dGljYWxdKHNyYywgZmMtPmZyYW1lLT5saW5lc2l6ZVtMVU1BXSk7CisgICAgcXBfb2Zmc2V0ID0g c3BzLT5yLT5zcHNfbGFkZl9sb3dlc3RfaW50ZXJ2YWxfcXBfb2Zmc2V0OworICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgc3BzLT5udW1fbGFkZl9pbnRlcnZhbHMgLSAxICYmIGxldmVsID4gc3BzLT5s YWRmX2ludGVydmFsX2xvd2VyX2JvdW5kW2kgKyAxXTsgaSsrKQorICAgICAgICBxcF9vZmZzZXQg PSBzcHMtPnItPnNwc19sYWRmX3FwX29mZnNldFtpXTsKKworICAgIHJldHVybiBxcCArIHFwX29m ZnNldDsKK30KKworLy8gcGFydCBvZiA4LjguMy42LjIgRGVjaXNpb24gcHJvY2VzcyBmb3IgbHVt YSBibG9jayBlZGdlcworc3RhdGljIGludCBnZXRfcXBfYyhjb25zdCBWVkNGcmFtZUNvbnRleHQg KmZjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50 IHZlcnRpY2FsKQoreworICAgIGNvbnN0IFZWQ1NQUyAqc3BzID0gZmMtPnBzLnNwczsKKyAgICBy ZXR1cm4gKGdldF9xUGMoZmMsIHggLSB2ZXJ0aWNhbCwgeSAtICF2ZXJ0aWNhbCwgY19pZHgpICsg Z2V0X3FQYyhmYywgeCwgeSwgY19pZHgpIC0gMiAqIHNwcy0+cXBfYmRfb2Zmc2V0ICsgMSkgPj4g MTsKK30KKworc3RhdGljIGludCBnZXRfcXAoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgY29u c3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCBjX2lk eCwgY29uc3QgaW50IHZlcnRpY2FsKQoreworICAgIGlmICghY19pZHgpCisgICAgICAgIHJldHVy biBnZXRfcXBfeShmYywgc3JjLCB4LCB5LCB2ZXJ0aWNhbCk7CisgICAgcmV0dXJuIGdldF9xcF9j KGZjLCB4LCB5LCBjX2lkeCwgdmVydGljYWwpOworfQorCit2b2lkIGZmX3Z2Y19kZWJsb2NrX3Zl cnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwKQoreworICAg IFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9 IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IGNfZW5kICAgICA9IHNwcy0+ci0+c3BzX2Nocm9t YV9mb3JtYXRfaWRjID8gVlZDX01BWF9TQU1QTEVfQVJSQVlTIDogMTsKKyAgICB1aW50OF90ICpz cmM7CisgICAgaW50IHgsIHksIHFwOworCisgICAgLy9ub3QgdXNlIHRoaXMgeWV0LCBtYXkgbmVl ZGVkIGJ5IHBsdC4KKyAgICBjb25zdCB1aW50OF90IG5vX3BbNF0gPSB7IDAgfTsKKyAgICBjb25z dCB1aW50OF90IG5vX3FbNF0gPSB7IDAgfSA7CisKKyAgICBjb25zdCBpbnQgY3RiX2xvZzJfc2l6 ZV95ID0gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGludCB4X2VuZCwgeV9lbmQ7 CisgICAgY29uc3QgaW50IGN0Yl9zaXplID0gMSA8PCBjdGJfbG9nMl9zaXplX3k7CisgICAgY29u c3QgaW50IGN0YiA9ICh4MCA+PiBjdGJfbG9nMl9zaXplX3kpICsKKyAgICAgICAgKHkwID4+IGN0 Yl9sb2cyX3NpemVfeSkgKiBmYy0+cHMucHBzLT5jdGJfd2lkdGg7CisgICAgY29uc3QgREJQYXJh bXMgICpwYXJhbXMgPSBmYy0+dGFiLmRlYmxvY2sgKyBjdGI7CisKKyAgICB2dmNfZGVibG9ja19i cyhsYywgeDAsIHkwLCAxKTsKKworICAgIHhfZW5kID0geDAgKyBjdGJfc2l6ZTsKKyAgICBpZiAo eF9lbmQgPiBmYy0+cHMuc3BzLT53aWR0aCkKKyAgICAgICAgeF9lbmQgPSBmYy0+cHMuc3BzLT53 aWR0aDsKKyAgICB5X2VuZCA9IHkwICsgY3RiX3NpemU7CisgICAgaWYgKHlfZW5kID4gZmMtPnBz LnNwcy0+aGVpZ2h0KQorICAgICAgICB5X2VuZCA9IGZjLT5wcy5zcHMtPmhlaWdodDsKKworICAg IGZvciAoaW50IGNfaWR4ID0gMDsgY19pZHggPCBjX2VuZDsgY19pZHgrKykgeworICAgICAgICBj b25zdCBpbnQgaHMgICAgICAgICAgPSBzcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0 IGludCB2cyAgICAgICAgICA9IHNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50 IGdyaWQgICAgICAgID0gY19pZHggPyAoQ0hST01BX0dSSUQgPDwgaHMpIDogTFVNQV9HUklEOwor ICAgICAgICBjb25zdCBpbnQgdGNfb2Zmc2V0ICAgPSBwYXJhbXMtPnRjX29mZnNldFtjX2lkeF07 CisgICAgICAgIGNvbnN0IGludCBiZXRhX29mZnNldCA9IHBhcmFtcy0+YmV0YV9vZmZzZXRbY19p ZHhdOworCisgICAgICAgIGZvciAoeSA9IHkwOyB5IDwgeV9lbmQ7IHkgKz0gKERFQkxPQ0tfU1RF UCA8PCB2cykpIHsKKyAgICAgICAgICAgIGZvciAoeCA9IHgwID8geDAgOiBncmlkOyB4IDwgeF9l bmQ7IHggKz0gZ3JpZCkgeworICAgICAgICAgICAgICAgIGludDMyX3QgYnNbNF0sIGJldGFbNF0s IHRjWzRdLCBhbGxfemVyb19icyA9IDE7CisgICAgICAgICAgICAgICAgdWludDhfdCBtYXhfbGVu X3BbNF0sIG1heF9sZW5fcVs0XTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgREVCTE9DS19TVEVQID4+ICgyIC0gdnMpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg Y29uc3QgaW50IGR5ID0gaSA8PCAyOworICAgICAgICAgICAgICAgICAgICBic1tpXSA9ICh5ICsg ZHkgPCB5X2VuZCkgPyBUQUJfQlMoZmMtPnRhYi52ZXJ0aWNhbF9ic1tjX2lkeF0sIHgsIHkgKyBk eSkgOiAwOworICAgICAgICAgICAgICAgICAgICBpZiAoYnNbaV0pIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhdWygoeSArIGR5KSA+PiB2cykg KiBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSArICgoeCA+PiBocykgPDwgZmMtPnBzLnNwcy0+ cGl4ZWxfc2hpZnQpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHFwID0gZ2V0X3FwKGZjLCBz cmMsIHgsIHkgKyBkeSwgY19pZHgsIDEpOworCisgICAgICAgICAgICAgICAgICAgICAgICBiZXRh W2ldID0gYmV0YXRhYmxlW2F2X2NsaXAocXAgKyBiZXRhX29mZnNldCwgMCwgTUFYX1FQKV07CisK KyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9maWx0ZXJfbGVuZ3RoKGZjLCB4LCB5ICsgZHks IGNfaWR4LCAxLCAwLCBic1tpXSwgJm1heF9sZW5fcFtpXSwgJm1heF9sZW5fcVtpXSk7CisgICAg ICAgICAgICAgICAgICAgICAgICBhbGxfemVyb19icyA9IDA7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgdGNbaV0gPSBic1tpXSA/IFRDX0NBTEMocXAsIGJzW2ld KSA6IDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFhbGxfemVy b19icykgeworICAgICAgICAgICAgICAgICAgICBzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4 XVsoeSA+PiB2cykgKiBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSArICgoeCA+PiBocykgPDwg ZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjX2lk eCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmMtPnZ2Y2RzcC5sZi5maWx0ZXJfbHVtYVsx XShzcmMsIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJldGEsIHRjLCBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgMCk7Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmYy0+ dnZjZHNwLmxmLmZpbHRlcl9jaHJvbWFbMV0oc3JjLCBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4 XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXRhLCB0Yywgbm9fcCwgbm9fcSwgbWF4 X2xlbl9wLCBtYXhfbGVuX3EsIHZzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBmZl92 dmNfZGVibG9ja19ob3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwg aW50IHkwKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3Qg VlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IGNfZW5kICAgICA9IGZj LT5wcy5zcHMtPnItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA/IFZWQ19NQVhfU0FNUExFX0FSUkFZ UyA6IDE7CisgICAgdWludDhfdCogc3JjOworICAgIGludCB4LCB5LCBxcDsKKworICAgIC8vbm90 IHVzZSB0aGlzIHlldCwgbWF5IG5lZWRlZCBieSBwbHQuCisgICAgY29uc3QgdWludDhfdCBub19w WzRdID0geyAwIH07CisgICAgY29uc3QgdWludDhfdCBub19xWzRdID0geyAwIH0gOworCisgICAg Y29uc3QgaW50IGN0Yl9sb2cyX3NpemVfeSA9IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsK KyAgICBpbnQgeF9lbmQsIHlfZW5kOworICAgIGNvbnN0IGludCBjdGJfc2l6ZSA9IDEgPDwgY3Ri X2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBjdGIgPSAoeDAgPj4gY3RiX2xvZzJfc2l6ZV95 KSArCisgICAgICAgICh5MCA+PiBjdGJfbG9nMl9zaXplX3kpICogZmMtPnBzLnBwcy0+Y3RiX3dp ZHRoOworICAgIGNvbnN0IERCUGFyYW1zICpwYXJhbXMgPSBmYy0+dGFiLmRlYmxvY2sgKyBjdGI7 CisKKyAgICB2dmNfZGVibG9ja19icyhsYywgeDAsIHkwLCAwKTsKKworICAgIHhfZW5kID0geDAg KyBjdGJfc2l6ZTsKKyAgICBpZiAoeF9lbmQgPiBmYy0+cHMuc3BzLT53aWR0aCkKKyAgICAgICAg eF9lbmQgPSBmYy0+cHMuc3BzLT53aWR0aDsKKyAgICB5X2VuZCA9IHkwICsgY3RiX3NpemU7Cisg ICAgaWYgKHlfZW5kID4gZmMtPnBzLnNwcy0+aGVpZ2h0KQorICAgICAgICB5X2VuZCA9IGZjLT5w cy5zcHMtPmhlaWdodDsKKworICAgIGZvciAoaW50IGNfaWR4ID0gMDsgY19pZHggPCBjX2VuZDsg Y19pZHgrKykgeworICAgICAgICBjb25zdCBpbnQgaHMgICAgICAgICAgPSBzcHMtPmhzaGlmdFtj X2lkeF07CisgICAgICAgIGNvbnN0IGludCB2cyAgICAgICAgICA9IHNwcy0+dnNoaWZ0W2NfaWR4 XTsKKyAgICAgICAgY29uc3QgaW50IGdyaWQgICAgICAgID0gY19pZHggPyAoQ0hST01BX0dSSUQg PDwgdnMpIDogTFVNQV9HUklEOworICAgICAgICBjb25zdCBpbnQgYmV0YV9vZmZzZXQgPSBwYXJh bXMtPmJldGFfb2Zmc2V0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IHRjX29mZnNldCAgID0g cGFyYW1zLT50Y19vZmZzZXRbY19pZHhdOworCisgICAgICAgIGZvciAoeSA9IHkwOyB5IDwgeV9l bmQ7IHkgKz0gZ3JpZCkgeworICAgICAgICAgICAgY29uc3QgdWludDhfdCBob3Jpem9udGFsX2N0 dV9lZGdlID0gISh5ICUgZmMtPnBzLnNwcy0+Y3RiX3NpemVfeSk7CisgICAgICAgICAgICBpZiAo IXkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGZvciAoeCA9IHgw ID8geDA6IDA7IHggPCB4X2VuZDsgeCArPSAoREVCTE9DS19TVEVQIDw8IGhzKSkgeworICAgICAg ICAgICAgICAgIGludDMyX3QgYnNbNF0sIGJldGFbNF0sIHRjWzRdLCBhbGxfemVyb19icyA9IDE7 CisgICAgICAgICAgICAgICAgdWludDhfdCBtYXhfbGVuX3BbNF0sIG1heF9sZW5fcVs0XTsKKwor ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgREVCTE9DS19TVEVQID4+ICgyIC0g aHMpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGR4ID0gaSA8PCAyOwor CisgICAgICAgICAgICAgICAgICAgIGJzW2ldID0gKHggKyBkeCA8IHhfZW5kKSA/IFRBQl9CUyhm Yy0+dGFiLmhvcml6b250YWxfYnNbY19pZHhdLCB4ICsgZHgsIHkpIDogMDsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKGJzW2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAmZmMt PmZyYW1lLT5kYXRhW2NfaWR4XVsoeSA+PiB2cykgKiBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4 XSArICgoKHggKyBkeCk+PiBocykgPDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHFwID0gZ2V0X3FwKGZjLCBzcmMsIHggKyBkeCwgeSwgY19pZHgs IDApOworCisgICAgICAgICAgICAgICAgICAgICAgICBiZXRhW2ldID0gYmV0YXRhYmxlW2F2X2Ns aXAocXAgKyBiZXRhX29mZnNldCwgMCwgTUFYX1FQKV07CisKKyAgICAgICAgICAgICAgICAgICAg ICAgIG1heF9maWx0ZXJfbGVuZ3RoKGZjLCB4ICsgZHgsIHksIGNfaWR4LCAwLCBob3Jpem9udGFs X2N0dV9lZGdlLCBic1tpXSwgJm1heF9sZW5fcFtpXSwgJm1heF9sZW5fcVtpXSk7CisgICAgICAg ICAgICAgICAgICAgICAgICBhbGxfemVyb19icyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgdGNbaV0gPSBic1tpXSA/IFRDX0NBTEMocXAsIGJzW2ldKSA6 IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghYWxsX3plcm9fYnMp IHsKKyAgICAgICAgICAgICAgICAgICAgc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1bKHkg Pj4gdnMpICogZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0gKyAoKHggPj4gaHMpIDw8IGZjLT5w cy5zcHMtPnBpeGVsX3NoaWZ0KV07CisgICAgICAgICAgICAgICAgICAgIGlmICghY19pZHgpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIGZjLT52dmNkc3AubGYuZmlsdGVyX2x1bWFbMF0oc3Jj LCBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBiZXRhLCB0Yywgbm9fcCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EsIGhvcml6b250YWxf Y3R1X2VkZ2UpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICAgICAgZmMtPnZ2Y2RzcC5sZi5maWx0ZXJfY2hyb21hWzBdKHNyYywgZmMtPmZyYW1lLT5s aW5lc2l6ZVtjX2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSwgdGMsIG5v X3AsIG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9xLCBocyk7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyB2b2lkIGFsZl9jb3B5X2JvcmRlcih1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4 X3QgKnNyYywKKyAgICBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGludCB3aWR0aCwgY29uc3QgaW50 IGhlaWdodCwgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNf c3RyaWRlKQoreworICAgIHdpZHRoIDw8PSBwaXhlbF9zaGlmdDsKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAgIG1lbWNweShkc3QsIHNyYywgd2lkdGgpOwor ICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZfZXh0ZW5kX3ZlcnQodWludDhfdCAqX2RzdCwgY29u c3QgdWludDhfdCAqX3NyYywKKyAgICBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGNvbnN0IGludCB3 aWR0aCwgY29uc3QgaW50IGhlaWdodCwgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICBpZiAocGl4 ZWxfc2hpZnQgPT0gMCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSsr KSB7CisgICAgICAgICAgICBtZW1zZXQoX2RzdCwgKl9zcmMsIHdpZHRoKTsKKyAgICAgICAgICAg IF9zcmMgKz0gc3RyaWRlOworICAgICAgICAgICAgX2RzdCArPSBzdHJpZGU7CisgICAgICAgIH0K KyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCB1aW50MTZfdCAqc3JjID0gKGNvbnN0IHVpbnQx Nl90ICopX3NyYzsKKyAgICAgICAgdWludDE2X3QgKmRzdCA9ICh1aW50MTZfdCAqKV9kc3Q7Cisg ICAgICAgIHN0cmlkZSA+Pj0gcGl4ZWxfc2hpZnQ7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB3aWR0 aDsgaisrKQorICAgICAgICAgICAgICAgIGRzdFtqXSA9ICpzcmM7CisgICAgICAgICAgICBzcmMg Kz0gc3RyaWRlOworICAgICAgICAgICAgZHN0ICs9IHN0cmlkZTsKKyAgICAgICAgfQorICAgIH0K K30KKworc3RhdGljIHZvaWQgYWxmX2V4dGVuZF9ob3J6KHVpbnQ4X3QgKmRzdCwgY29uc3QgdWlu dDhfdCAqc3JjLAorICAgIGNvbnN0IGludCBwaXhlbF9zaGlmdCwgaW50IHdpZHRoLCBjb25zdCBp bnQgaGVpZ2h0LCBjb25zdCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIHdpZHRoIDw8PSBwaXhl bF9zaGlmdDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAg IG1lbWNweShkc3QsIHNyYywgd2lkdGgpOworICAgICAgICBkc3QgKz0gc3RyaWRlOworICAgIH0K K30KKworc3RhdGljIHZvaWQgYWxmX2NvcHlfY3RiX3RvX2h2KFZWQ0ZyYW1lQ29udGV4dCAqZmMs IGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUsCisgICAgY29u c3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQs IGNvbnN0IGludCB4X2N0YiwgY29uc3QgaW50IHlfY3RiLCBjb25zdCBpbnQgY19pZHgpCit7Cisg ICAgY29uc3QgaW50IHBzICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAg ICBjb25zdCBpbnQgdyAgICAgICAgICAgICA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGZjLT5wcy5z cHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGggICAgICAgICAgICAgPSBmYy0+cHMu c3BzLT5oZWlnaHQgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQg Ym9yZGVyX3BpeGVscyA9IChjX2lkeCA9PSAwKSA/IEFMRl9CT1JERVJfTFVNQSA6IEFMRl9CT1JE RVJfQ0hST01BOworICAgIGNvbnN0IGludCBvZmZzZXRfaFtdICAgID0geyAwLCBoZWlnaHQgLSBi b3JkZXJfcGl4ZWxzIH07CisgICAgY29uc3QgaW50IG9mZnNldF92W10gICAgPSB7IDAsIHdpZHRo ICAtIGJvcmRlcl9waXhlbHMgfTsKKworICAgIC8qIGNvcHkgaG9yaXpvbnRhbCBlZGdlcyAqLwor ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMob2Zmc2V0X2gpOyBpKyspIHsK KyAgICAgICAgYWxmX2NvcHlfYm9yZGVyKGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl9oW2NfaWR4 XVtpXSArICgoYm9yZGVyX3BpeGVscyAqIHlfY3RiICogdyArIHgpPDwgcHMpLAorICAgICAgICAg ICAgc3JjICsgb2Zmc2V0X2hbaV0gKiBzcmNfc3RyaWRlLCBwcywgd2lkdGgsIGJvcmRlcl9waXhl bHMsIHcgPDwgcHMsIHNyY19zdHJpZGUpOworICAgIH0KKyAgICAvKiBjb3B5IHZlcnRpY2FsIGVk Z2VzICovCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhvZmZzZXRfdik7 IGkrKykgeworICAgICAgICBhbGZfY29weV9ib3JkZXIoZmMtPnRhYi5hbGZfcGl4ZWxfYnVmZmVy X3ZbY19pZHhdW2ldICsgKChoICogeF9jdGIgKyB5KSAqIChib3JkZXJfcGl4ZWxzIDw8IHBzKSks CisgICAgICAgICAgICBzcmMgKyAob2Zmc2V0X3ZbaV0gPDwgcHMpLCBwcywgYm9yZGVyX3BpeGVs cywgaGVpZ2h0LCBib3JkZXJfcGl4ZWxzIDw8IHBzLCBzcmNfc3RyaWRlKTsKKyAgICB9Cit9CisK K3N0YXRpYyB2b2lkIGFsZl9maWxsX2JvcmRlcl9oKHVpbnQ4X3QgKmRzdCwgY29uc3QgcHRyZGlm Zl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgcHRyZGlmZl90IHNyY19z dHJpZGUsCisgICAgY29uc3QgdWludDhfdCAqYm9yZGVyLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0 IGludCBib3JkZXJfcGl4ZWxzLCBjb25zdCBpbnQgcHMsIGNvbnN0IGludCBlZGdlKQoreworICAg IGlmIChlZGdlKQorICAgICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBib3JkZXIsIHBzLCB3aWR0 aCwgYm9yZGVyX3BpeGVscywgZHN0X3N0cmlkZSk7CisgICAgZWxzZQorICAgICAgICBhbGZfY29w eV9ib3JkZXIoZHN0LCBzcmMsIHBzLCB3aWR0aCwgYm9yZGVyX3BpeGVscywgZHN0X3N0cmlkZSwg c3JjX3N0cmlkZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9maWxsX2JvcmRlcl92KHVpbnQ4X3Qg KmRzdCwgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAg ICBjb25zdCB1aW50OF90ICpib3JkZXIsIGNvbnN0IGludCBib3JkZXJfcGl4ZWxzLCBjb25zdCBp bnQgaGVpZ2h0LCBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGNvbnN0IGludCAqZWRnZXMsIGNvbnN0 IGludCBlZGdlKQoreworICAgIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlID0gKGJvcmRlcl9w aXhlbHMgPDwgcGl4ZWxfc2hpZnQpOworCisgICAgaWYgKGVkZ2UpIHsKKyAgICAgICAgYWxmX2V4 dGVuZF92ZXJ0KGRzdCwgYm9yZGVyLCBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgaGVpZ2h0 ICsgMiAqIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJpZGUpOworICAgICAgICByZXR1cm47CisgICAg fQorCisgICAgLy9sZWZ0L3JpZ2h0CisgICAgYWxmX2NvcHlfYm9yZGVyKGRzdCArIGRzdF9zdHJp ZGUgKiBib3JkZXJfcGl4ZWxzICogZWRnZXNbVE9QXSwgc3JjICsgc3JjX3N0cmlkZSAqIGJvcmRl cl9waXhlbHMgKiBlZGdlc1tUT1BdLAorICAgICAgICBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVs cywgaGVpZ2h0ICsgKCFlZGdlc1tUT1BdICsgIWVkZ2VzW0JPVFRPTV0pICogYm9yZGVyX3BpeGVs cywgZHN0X3N0cmlkZSwgc3JjX3N0cmlkZSk7CisKKyAgICAvL3RvcCBsZWZ0L3JpZ2h0CisgICAg aWYgKGVkZ2VzW1RPUF0pCisgICAgICAgIGFsZl9leHRlbmRfaG9yeihkc3QsIGRzdCArIGRzdF9z dHJpZGUgKiBib3JkZXJfcGl4ZWxzLCBwaXhlbF9zaGlmdCwgYm9yZGVyX3BpeGVscywgYm9yZGVy X3BpeGVscywgZHN0X3N0cmlkZSk7CisKKyAgICAvL2JvdHRvbSBsZWZ0L3JpZ2h0CisgICAgaWYg KGVkZ2VzW0JPVFRPTV0pIHsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGUgKiAoYm9yZGVyX3Bp eGVscyArIGhlaWdodCk7CisgICAgICAgIGFsZl9leHRlbmRfaG9yeihkc3QsIGRzdCAtIGRzdF9z dHJpZGUsIHBpeGVsX3NoaWZ0LCBib3JkZXJfcGl4ZWxzLCBib3JkZXJfcGl4ZWxzLCBkc3Rfc3Ry aWRlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9wcmVwYXJlX2J1ZmZlcihWVkNGcmFt ZUNvbnRleHQgKmZjLCB1aW50OF90ICpfZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLCBjb25zdCBp bnQgeCwgY29uc3QgaW50IHksCisgICAgY29uc3QgaW50IHhfY3RiLCBjb25zdCBpbnQgeV9jdGIs IGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgcHRyZGlmZl90IGRzdF9z dHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludCBjX2lkeCwg Y29uc3QgaW50ICplZGdlcykKK3sKKyAgICBjb25zdCBpbnQgcHMgPSBmYy0+cHMuc3BzLT5waXhl bF9zaGlmdDsKKyAgICBjb25zdCBpbnQgdyA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGZjLT5wcy5z cHMtPmhzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGggPSBmYy0+cHMuc3BzLT5oZWlnaHQg Pj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICBjb25zdCBpbnQgYm9yZGVyX3BpeGVs cyA9IGNfaWR4ID09IDAgPyBBTEZfQk9SREVSX0xVTUEgOiBBTEZfQk9SREVSX0NIUk9NQTsKKyAg ICB1aW50OF90ICpkc3QsICpzcmM7CisKKyAgICBjb3B5X2N0YihfZHN0LCBfc3JjLCB3aWR0aCA8 PCBwcywgaGVpZ2h0LCBkc3Rfc3RyaWRlLCBzcmNfc3RyaWRlKTsKKworICAgIC8vdG9wCisgICAg c3JjID0gZmMtPnRhYi5hbGZfcGl4ZWxfYnVmZmVyX2hbY19pZHhdWzFdICsgKCgoYm9yZGVyX3Bp eGVscyAqICh5X2N0YiAtIDEpKSAqIHcgKyB4KSA8PCBwcyk7CisgICAgZHN0ID0gX2RzdCAtIGJv cmRlcl9waXhlbHMgKiBkc3Rfc3RyaWRlOworICAgIGFsZl9maWxsX2JvcmRlcl9oKGRzdCwgZHN0 X3N0cmlkZSwgc3JjLCB3ICA8PCBwcywgX2RzdCwgd2lkdGgsIGJvcmRlcl9waXhlbHMsIHBzLCBl ZGdlc1tUT1BdKTsKKworICAgIC8vYm90dG9tCisgICAgc3JjID0gZmMtPnRhYi5hbGZfcGl4ZWxf YnVmZmVyX2hbY19pZHhdWzBdICsgKChib3JkZXJfcGl4ZWxzICogKHlfY3RiICsgMSkgKiB3ICsg eCkgPDwgcHMpOworICAgIGRzdCA9IF9kc3QgKyBoZWlnaHQgKiBkc3Rfc3RyaWRlOworICAgIGFs Zl9maWxsX2JvcmRlcl9oKGRzdCwgZHN0X3N0cmlkZSwgc3JjLCB3ICA8PCBwcywgX2RzdCArICho ZWlnaHQgLSAxKSAqIGRzdF9zdHJpZGUsIHdpZHRoLCBib3JkZXJfcGl4ZWxzLCBwcywgZWRnZXNb Qk9UVE9NXSk7CisKKworICAgIC8vbGVmdAorICAgIHNyYyA9IGZjLT50YWIuYWxmX3BpeGVsX2J1 ZmZlcl92W2NfaWR4XVsxXSArIChoICogKHhfY3RiIC0gMSkgKyB5IC0gYm9yZGVyX3BpeGVscykg KiAoYm9yZGVyX3BpeGVscyA8PCBwcyk7CisgICAgZHN0ID0gX2RzdCAtIChib3JkZXJfcGl4ZWxz IDw8IHBzKSAtIGJvcmRlcl9waXhlbHMgKiBkc3Rfc3RyaWRlOworICAgIGFsZl9maWxsX2JvcmRl cl92KGRzdCwgZHN0X3N0cmlkZSwgc3JjLCAgZHN0ICsgKGJvcmRlcl9waXhlbHMgPDwgcHMpLCBi b3JkZXJfcGl4ZWxzLCBoZWlnaHQsIHBzLCBlZGdlcywgZWRnZXNbTEVGVF0pOworCisgICAgLy9y aWdodAorICAgIHNyYyA9IGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl92W2NfaWR4XVswXSArICho ICogKHhfY3RiICsgMSkgKyB5IC0gYm9yZGVyX3BpeGVscykgKiAoYm9yZGVyX3BpeGVscyA8PCBw cyk7CisgICAgZHN0ID0gX2RzdCArICh3aWR0aCA8PCBwcykgLSBib3JkZXJfcGl4ZWxzICogZHN0 X3N0cmlkZTsKKyAgICBhbGZfZmlsbF9ib3JkZXJfdihkc3QsIGRzdF9zdHJpZGUsIHNyYywgIGRz dCAtICgxIDw8IHBzKSwgYm9yZGVyX3BpeGVscywgaGVpZ2h0LCBwcywgZWRnZXMsIGVkZ2VzW1JJ R0hUXSk7Cit9CisKKyNkZWZpbmUgQUxGX01BWF9CTE9DS1NfSU5fQ1RVICAgKE1BWF9DVFVfU0la RSAqIE1BWF9DVFVfU0laRSAvIEFMRl9CTE9DS19TSVpFIC8gQUxGX0JMT0NLX1NJWkUpCisjZGVm aW5lIEFMRl9NQVhfRklMVEVSX1NJWkUgICAgIChBTEZfTUFYX0JMT0NLU19JTl9DVFUgKiBBTEZf TlVNX0NPRUZGX0xVTUEpCisKK3N0YXRpYyB2b2lkIGFsZl9nZXRfY29lZmZfYW5kX2NsaXAoVlZD TG9jYWxDb250ZXh0ICpsYywgaW50MTZfdCAqY29lZmYsIGludDE2X3QgKmNsaXAsCisgICAgY29u c3QgdWludDhfdCAqc3JjLCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgaW50IHdpZHRoLCBpbnQgaGVp Z2h0LCBpbnQgdmJfcG9zLCBBTEZQYXJhbXMgKmFsZikKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNv bnRleHQgKmZjICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBIMjY2UmF3U2xpY2VIZWFkZXIgKnJz aCA9IGxjLT5zYy0+c2gucjsKKyAgICB1aW50OF90IGZpeGVkX2NsaXBfc2V0W0FMRl9OVU1fRklM VEVSU19MVU1BXVtBTEZfTlVNX0NPRUZGX0xVTUFdID0geyAwIH07CisgICAgY29uc3QgaW50MTZf dCAqY29lZmZfc2V0OworICAgIGNvbnN0IHVpbnQ4X3QgKmNsaXBfaWR4X3NldDsKKyAgICBjb25z dCB1aW50OF90ICpjbGFzc190b19maWx0OworICAgIGNvbnN0IGludCBzaXplID0gd2lkdGggKiBo ZWlnaHQgLyBBTEZfQkxPQ0tfU0laRSAvIEFMRl9CTE9DS19TSVpFOworICAgIGludCBjbGFzc19p ZHhbQUxGX01BWF9CTE9DS1NfSU5fQ1RVXTsKKyAgICBpbnQgdHJhbnNwb3NlX2lkeFtBTEZfTUFY X0JMT0NLU19JTl9DVFVdOworCisgICAgaWYgKGFsZi0+Y3RiX2ZpbHRfc2V0X2lkeF95IDwgMTYp IHsKKyAgICAgICAgY29lZmZfc2V0ICAgICAgICAgPSAmZmZfdnZjX2FsZl9maXhfZmlsdF9jb2Vm ZlswXVswXTsKKyAgICAgICAgY2xpcF9pZHhfc2V0ICAgICAgPSAmZml4ZWRfY2xpcF9zZXRbMF1b MF07CisgICAgICAgIGNsYXNzX3RvX2ZpbHQgICAgID0gZmZfdnZjX2FsZl9jbGFzc190b19maWx0 X21hcFthbGYtPmN0Yl9maWx0X3NldF9pZHhfeV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29u c3QgaW50IGlkICAgICAgPSByc2gtPnNoX2FsZl9hcHNfaWRfbHVtYVthbGYtPmN0Yl9maWx0X3Nl dF9pZHhfeSAtIDE2XTsKKyAgICAgICAgY29uc3QgVlZDQUxGICphcHMgPSBmYy0+cHMuYWxmX2xp c3RbaWRdOworICAgICAgICBjb2VmZl9zZXQgICAgICAgICA9ICZhcHMtPmx1bWFfY29lZmZbMF1b MF07CisgICAgICAgIGNsaXBfaWR4X3NldCAgICAgID0gJmFwcy0+bHVtYV9jbGlwX2lkeFswXVsw XTsKKyAgICAgICAgY2xhc3NfdG9fZmlsdCAgICAgPSBmZl92dmNfYWxmX2Fwc19jbGFzc190b19m aWx0X21hcDsKKyAgICB9CisgICAgZmMtPnZ2Y2RzcC5hbGYuY2xhc3NpZnkoY2xhc3NfaWR4LCB0 cmFuc3Bvc2VfaWR4LCBzcmMsIHNyY19zdHJpZGUsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgIHZi X3BvcywgbGMtPmFsZl9ncmFkaWVudF90bXApOworICAgIGZjLT52dmNkc3AuYWxmLnJlY29uX2Nv ZWZmX2FuZF9jbGlwKGNvZWZmLCBjbGlwLCBjbGFzc19pZHgsIHRyYW5zcG9zZV9pZHgsIHNpemUs CisgICAgICAgIGNvZWZmX3NldCwgY2xpcF9pZHhfc2V0LCBjbGFzc190b19maWx0KTsKK30KKwor c3RhdGljIHZvaWQgYWxmX2ZpbHRlcl9sdW1hKFZWQ0xvY2FsQ29udGV4dCAqbGMsIHVpbnQ4X3Qg KmRzdCwgY29uc3QgdWludDhfdCAqc3JjLAorICAgIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRl LCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAs CisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQgX3ZiX3Bv cywgQUxGUGFyYW1zICphbGYpCit7CisgICAgY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxj LT5mYzsKKyAgICBpbnQgdmJfcG9zICAgICAgICAgICAgICAgID0gX3ZiX3BvcyAtIHkwOworICAg IGludDE2X3QgKmNvZWZmICAgICAgICAgICAgPSAoaW50MTZfdCopbGMtPnRtcDsKKyAgICBpbnQx Nl90ICpjbGlwICAgICAgICAgICAgID0gKGludDE2X3QgKilsYy0+dG1wMTsKKworICAgIGF2X2Fz c2VydDAoQUxGX01BWF9GSUxURVJfU0laRSA8PSBzaXplb2YobGMtPnRtcCkpOworICAgIGF2X2Fz c2VydDAoQUxGX01BWF9GSUxURVJfU0laRSAqIHNpemVvZihpbnQxNl90KSA8PSBzaXplb2YobGMt PnRtcDEpKTsKKworICAgIGFsZl9nZXRfY29lZmZfYW5kX2NsaXAobGMsIGNvZWZmLCBjbGlwLCBz cmMsIHNyY19zdHJpZGUsIHdpZHRoLCBoZWlnaHQsIHZiX3BvcywgYWxmKTsKKyAgICBmYy0+dnZj ZHNwLmFsZi5maWx0ZXJbTFVNQV0oZHN0LCBkc3Rfc3RyaWRlLCBzcmMsIHNyY19zdHJpZGUsIHdp ZHRoLCBoZWlnaHQsIGNvZWZmLCBjbGlwLCB2Yl9wb3MpOworfQorCitzdGF0aWMgaW50IGFsZl9j bGlwX2Zyb21faWR4KGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCBpZHgpCit7 CisgICAgY29uc3QgVlZDU1BTICpzcHMgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgb2Zm c2V0W10gPSB7MCwgMywgNSwgN307CisKKyAgICByZXR1cm4gMSA8PCAoc3BzLT5iaXRfZGVwdGgg LSBvZmZzZXRbaWR4XSk7Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9maWx0ZXJfY2hyb21hKFZWQ0xv Y2FsQ29udGV4dCAqbGMsIHVpbnQ4X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLAorICAgIGNv bnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgY29u c3QgaW50IGNfaWR4LAorICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29u c3QgaW50IHZiX3BvcywgQUxGUGFyYW1zICphbGYpCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpm YyAgICAgICAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2gg PSBsYy0+c2MtPnNoLnI7CisgICAgY29uc3QgVlZDQUxGICphcHMgICAgICAgICAgICAgPSBmYy0+ cHMuYWxmX2xpc3RbcnNoLT5zaF9hbGZfYXBzX2lkX2Nocm9tYV07CisgICAgY29uc3QgaW50IGlk eCAgICAgICAgICAgICAgICAgPSBhbGYtPmFsZl9jdGJfZmlsdGVyX2FsdF9pZHhbY19pZHggLSAx XTsKKyAgICBjb25zdCBpbnQxNl90ICpjb2VmZiAgICAgICAgICA9IGFwcy0+Y2hyb21hX2NvZWZm W2lkeF07CisgICAgaW50MTZfdCBjbGlwW0FMRl9OVU1fQ09FRkZfQ0hST01BXTsKKworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgQUxGX05VTV9DT0VGRl9DSFJPTUE7IGkrKykKKyAgICAgICAgY2xp cFtpXSA9IGFsZl9jbGlwX2Zyb21faWR4KGZjLCBhcHMtPmNocm9tYV9jbGlwX2lkeFtpZHhdW2ld KTsKKworICAgIGZjLT52dmNkc3AuYWxmLmZpbHRlcltDSFJPTUFdKGRzdCwgZHN0X3N0cmlkZSwg c3JjLCBzcmNfc3RyaWRlLCB3aWR0aCwgaGVpZ2h0LCBjb2VmZiwgY2xpcCwgdmJfcG9zKTsKK30K Kworc3RhdGljIHZvaWQgYWxmX2ZpbHRlcl9jYyhWVkNMb2NhbENvbnRleHQgKmxjLCB1aW50OF90 ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKmx1bWEsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJp ZGUsIGNvbnN0IHB0cmRpZmZfdCBsdW1hX3N0cmlkZSwgY29uc3QgaW50IGNfaWR4LAorICAgIGNv bnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3QgaW50IGhzLCBjb25zdCBpbnQg dnMsIGNvbnN0IGludCB2Yl9wb3MsIEFMRlBhcmFtcyAqYWxmKQoreworICAgIGNvbnN0IFZWQ0Zy YW1lQ29udGV4dCAqZmMgICAgID0gbGMtPmZjOworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhlYWRl ciAqcnNoID0gbGMtPnNjLT5zaC5yOworICAgIGNvbnN0IGludCBpZHggICAgICAgICAgICAgICAg ID0gY19pZHggLSAxOworICAgIGNvbnN0IGludCBjY19hcHNfaWQgICAgICAgICAgID0gY19pZHgg PT0gQ0IgPyByc2gtPnNoX2FsZl9jY19jYl9hcHNfaWQgOiByc2gtPnNoX2FsZl9jY19jcl9hcHNf aWQ7CisgICAgY29uc3QgVlZDQUxGICphcHMgICAgICAgICAgICAgPSBmYy0+cHMuYWxmX2xpc3Rb Y2NfYXBzX2lkXTsKKworICAgIGlmIChhcHMpIHsKKyAgICAgICAgY29uc3QgaW50MTZfdCAqY29l ZmYgPSBhcHMtPmNjX2NvZWZmW2lkeF1bYWxmLT5jdGJfY2NfaWRjW2lkeF0gLSAxXTsKKworICAg ICAgICBmYy0+dnZjZHNwLmFsZi5maWx0ZXJfY2MoZHN0LCBkc3Rfc3RyaWRlLCBsdW1hLCBsdW1h X3N0cmlkZSwgd2lkdGgsIGhlaWdodCwgaHMsIHZzLCBjb2VmZiwgdmJfcG9zKTsKKyAgICB9Cit9 CisKK3ZvaWQgZmZfdnZjX2FsZl9jb3B5X2N0dV90b19odihWVkNMb2NhbENvbnRleHQqIGxjLCBj b25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQgKmZjICA9 IGxjLT5mYzsKKyAgICBjb25zdCBpbnQgeF9jdGIgICAgICA9IHgwID4+IGZjLT5wcy5zcHMtPmN0 Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeV9jdGIgICAgICA9IHkwID4+IGZjLT5wcy5z cHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgY3RiX3NpemVfeSA9IGZjLT5wcy5z cHMtPmN0Yl9zaXplX3k7CisgICAgY29uc3QgaW50IHBzICAgICAgICAgPSBmYy0+cHMuc3BzLT5w aXhlbF9zaGlmdDsKKyAgICBjb25zdCBpbnQgY19lbmQgICAgICA9IGZjLT5wcy5zcHMtPnItPnNw c19jaHJvbWFfZm9ybWF0X2lkYyA/IFZWQ19NQVhfU0FNUExFX0FSUkFZUyA6IDE7CisKKyAgICBm b3IgKGludCBjX2lkeCA9IDA7IGNfaWR4IDwgY19lbmQ7IGNfaWR4KyspIHsKKyAgICAgICAgY29u c3QgaW50IGhzICAgICA9IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0 IGludCB2cyAgICAgPSBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBp bnQgeCAgICAgID0geDAgPj4gaHM7CisgICAgICAgIGNvbnN0IGludCB5ICAgICAgPSB5MCA+PiB2 czsKKyAgICAgICAgY29uc3QgaW50IHdpZHRoICA9IEZGTUlOKGZjLT5wcy5zcHMtPndpZHRoIC0g eDAsIGN0Yl9zaXplX3kpID4+IGhzOworICAgICAgICBjb25zdCBpbnQgaGVpZ2h0ID0gRkZNSU4o ZmMtPnBzLnNwcy0+aGVpZ2h0IC0geTAsIGN0Yl9zaXplX3kpID4+IHZzOworCisgICAgICAgIGNv bnN0IGludCBzcmNfc3RyaWRlID0gZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAg IHVpbnQ4X3QqIHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhdW3kgKiBzcmNfc3RyaWRlICsg KHggPDwgcHMpXTsKKworICAgICAgICBhbGZfY29weV9jdGJfdG9faHYoZmMsIHNyYywgc3JjX3N0 cmlkZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgeF9jdGIsIHlfY3RiLCBjX2lkeCk7CisgICAgfQor fQorCit2b2lkIGZmX3Z2Y19hbGZfZmlsdGVyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGlu dCB4MCwgY29uc3QgaW50IHkwKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgID0gbGMt PmZjOworICAgIGNvbnN0IFZWQ1BQUyAqcHBzICAgICAgID0gZmMtPnBzLnBwczsKKyAgICBjb25z dCBpbnQgeF9jdGIgICAgICAgICA9IHgwID4+IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsK KyAgICBjb25zdCBpbnQgeV9jdGIgICAgICAgICA9IHkwID4+IGZjLT5wcy5zcHMtPmN0Yl9sb2cy X3NpemVfeTsKKyAgICBjb25zdCBpbnQgY3RiX3NpemVfeSAgICA9IGZjLT5wcy5zcHMtPmN0Yl9z aXplX3k7CisgICAgY29uc3QgaW50IHBzICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT5waXhlbF9z aGlmdDsKKyAgICBjb25zdCBpbnQgcGFkZGVkX3N0cmlkZSA9IEVER0VfRU1VX0JVRkZFUl9TVFJJ REUgPDwgcHM7CisgICAgY29uc3QgaW50IHBhZGRlZF9vZmZzZXQgPSBwYWRkZWRfc3RyaWRlICog QUxGX1BBRERJTkdfU0laRSArIChBTEZfUEFERElOR19TSVpFIDw8IHBzKTsKKyAgICBjb25zdCBp bnQgY19lbmQgICAgICAgICA9IGZjLT5wcy5zcHMtPnItPnNwc19jaHJvbWFfZm9ybWF0X2lkYyA/ IFZWQ19NQVhfU0FNUExFX0FSUkFZUyA6IDE7CisgICAgQUxGUGFyYW1zICphbGYgICAgICAgICAg PSAmQ1RCKGZjLT50YWIuYWxmLCB4X2N0YiwgeV9jdGIpOworICAgIGludCBlZGdlc1tNQVhfRURH RVNdICAgID0geyB4X2N0YiA9PSAwLCB5X2N0YiA9PSAwLCB4X2N0YiA9PSBwcHMtPmN0Yl93aWR0 aCAtIDEsIHlfY3RiID09IHBwcy0+Y3RiX2hlaWdodCAtIDEgfTsKKworICAgIGlmICghcHBzLT5y LT5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZykgeworICAgICAgICBl ZGdlc1tMRUZUXSAgID0gZWRnZXNbTEVGVF0gfHwgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5E QVJZX0xFRlRfVElMRSk7CisgICAgICAgIGVkZ2VzW1RPUF0gICAgPSBlZGdlc1tUT1BdIHx8IChs Yy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9USUxFKTsKKyAgICAgICAgZWRnZXNb UklHSFRdICA9IGVkZ2VzW1JJR0hUXSB8fCBwcHMtPmN0Yl90b19jb2xfYmRbeF9jdGJdICE9IHBw cy0+Y3RiX3RvX2NvbF9iZFt4X2N0YiArIDFdOworICAgICAgICBlZGdlc1tCT1RUT01dID0gZWRn ZXNbQk9UVE9NXSB8fCBwcHMtPmN0Yl90b19yb3dfYmRbeV9jdGJdICE9IHBwcy0+Y3RiX3RvX3Jv d19iZFt5X2N0YiArIDFdOworICAgIH0KKworICAgIGlmICghcHBzLT5yLT5wcHNfbG9vcF9maWx0 ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcpIHsKKyAgICAgICAgZWRnZXNbTEVGVF0gICA9 IGVkZ2VzW0xFRlRdIHx8IChsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1NMSUNF KTsKKyAgICAgICAgZWRnZXNbVE9QXSAgICA9IGVkZ2VzW1RPUF0gfHwgKGxjLT5ib3VuZGFyeV9m bGFncyAmIEJPVU5EQVJZX1VQUEVSX1NMSUNFKTsKKyAgICAgICAgZWRnZXNbUklHSFRdICA9IGVk Z2VzW1JJR0hUXSB8fCBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RC KGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiArIDEsIHlfY3RiKTsKKyAgICAgICAgZWRnZXNbQk9U VE9NXSA9IGVkZ2VzW0JPVFRPTV0gfHwgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9j dGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiICsgMSk7CisgICAgfQor CisgICAgZm9yIChpbnQgY19pZHggPSAwOyBjX2lkeCA8IGNfZW5kOyBjX2lkeCsrKSB7CisgICAg ICAgIGNvbnN0IGludCBocyA9IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGNv bnN0IGludCB2cyA9IGZjLT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgIGNvbnN0IGlu dCBjdGJfc2l6ZV9oID0gY3RiX3NpemVfeSA+PiBoczsKKyAgICAgICAgY29uc3QgaW50IGN0Yl9z aXplX3YgPSBjdGJfc2l6ZV95ID4+IHZzOworICAgICAgICBjb25zdCBpbnQgeCA9IHgwID4+IGhz OworICAgICAgICBjb25zdCBpbnQgeSA9IHkwID4+IHZzOworICAgICAgICBjb25zdCBpbnQgcGlj X3dpZHRoID0gZmMtPnBzLnNwcy0+d2lkdGggPj4gaHM7CisgICAgICAgIGNvbnN0IGludCBwaWNf aGVpZ2h0ID0gZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IHZzOworICAgICAgICBjb25zdCBpbnQgd2lk dGggID0gRkZNSU4ocGljX3dpZHRoICAtIHgsIGN0Yl9zaXplX2gpOworICAgICAgICBjb25zdCBp bnQgaGVpZ2h0ID0gRkZNSU4ocGljX2hlaWdodCAtIHksIGN0Yl9zaXplX3YpOworICAgICAgICBj b25zdCBpbnQgc3JjX3N0cmlkZSA9IGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdOworICAgICAg ICB1aW50OF90ICpzcmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVt5ICogc3JjX3N0cmlkZSAr ICh4IDw8IHBzKV07CisgICAgICAgIHVpbnQ4X3QgKnBhZGRlZDsKKworICAgICAgICBpZiAoYWxm LT5jdGJfZmxhZ1tjX2lkeF0gfHwgKCFjX2lkeCAmJiAoYWxmLT5jdGJfY2NfaWRjWzBdIHx8IGFs Zi0+Y3RiX2NjX2lkY1sxXSkpKSB7CisgICAgICAgICAgICBwYWRkZWQgPSAoY19pZHggPyBsYy0+ YWxmX2J1ZmZlcl9jaHJvbWEgOiBsYy0+YWxmX2J1ZmZlcl9sdW1hKSArIHBhZGRlZF9vZmZzZXQ7 CisgICAgICAgICAgICBhbGZfcHJlcGFyZV9idWZmZXIoZmMsIHBhZGRlZCwgc3JjLCB4LCB5LCB4 X2N0YiwgeV9jdGIsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgcGFkZGVkX3N0cmlk ZSwgc3JjX3N0cmlkZSwgY19pZHgsIGVkZ2VzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYWxm LT5jdGJfZmxhZ1tjX2lkeF0pIHsKKyAgICAgICAgICAgIGlmICghY19pZHgpICB7CisgICAgICAg ICAgICAgICAgYWxmX2ZpbHRlcl9sdW1hKGxjLCBzcmMsIHBhZGRlZCwgc3JjX3N0cmlkZSwgcGFk ZGVkX3N0cmlkZSwgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgeSAr IGN0Yl9zaXplX3YgLSBBTEZfVkJfUE9TX0FCT1ZFX0xVTUEsIGFsZik7CisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIGFsZl9maWx0ZXJfY2hyb21hKGxjLCBzcmMsIHBhZGRl ZCwgc3JjX3N0cmlkZSwgcGFkZGVkX3N0cmlkZSwgY19pZHgsCisgICAgICAgICAgICAgICAgICAg IHdpZHRoLCBoZWlnaHQsIGN0Yl9zaXplX3YgLSBBTEZfVkJfUE9TX0FCT1ZFX0NIUk9NQSwgYWxm KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY19pZHggJiYgYWxmLT5j dGJfY2NfaWRjW2NfaWR4IC0gMV0pIHsKKyAgICAgICAgICAgIHBhZGRlZCA9IGxjLT5hbGZfYnVm ZmVyX2x1bWEgKyBwYWRkZWRfb2Zmc2V0OworICAgICAgICAgICAgYWxmX2ZpbHRlcl9jYyhsYywg c3JjLCBwYWRkZWQsIHNyY19zdHJpZGUsIHBhZGRlZF9zdHJpZGUsIGNfaWR4LAorICAgICAgICAg ICAgICAgIHdpZHRoLCBoZWlnaHQsIGhzLCB2cywgKGN0Yl9zaXplX3YgPDwgdnMpIC0gQUxGX1ZC X1BPU19BQk9WRV9MVU1BLCBhbGYpOworICAgICAgICB9CisKKyAgICAgICAgYWxmLT5hcHBsaWVk W2NfaWR4XSA9IDE7CisgICAgfQorfQorCisKK3ZvaWQgZmZfdnZjX2xtY3NfZmlsdGVyKGNvbnN0 IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSkKK3sKKyAgICBj b25zdCBTbGljZUNvbnRleHQgKnNjID0gbGMtPnNjOworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4 dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3QgaW50IGN0Yl9zaXplID0gZmMtPnBzLnNwcy0+Y3Ri X3NpemVfeTsKKyAgICBjb25zdCBpbnQgd2lkdGggICAgPSBGRk1JTihmYy0+cHMucHBzLT53aWR0 aCAgLSB4LCBjdGJfc2l6ZSk7CisgICAgY29uc3QgaW50IGhlaWdodCAgID0gRkZNSU4oZmMtPnBz LnBwcy0+aGVpZ2h0IC0geSwgY3RiX3NpemUpOworICAgIHVpbnQ4X3QgKmRhdGEgICAgICA9IGZj LT5mcmFtZS0+ZGF0YVtMVU1BXSArIHkgKiBmYy0+ZnJhbWUtPmxpbmVzaXplW0xVTUFdICsgKHgg PDwgZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQpOworICAgIGlmIChzYy0+c2guci0+c2hfbG1jc191 c2VkX2ZsYWcpCisgICAgICAgIGZjLT52dmNkc3AubG1jcy5maWx0ZXIoZGF0YSwgZmMtPmZyYW1l LT5saW5lc2l6ZVtMVU1BXSwgd2lkdGgsIGhlaWdodCwgZmMtPnBzLmxtY3MuaW52X2x1dCk7Cit9 CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmggYi9saWJhdmNvZGVjL3Z2 Yy92dmNfZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMmFl NGMzM2UyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuaApA QCAtMCwwICsxLDcxIEBACisvKgorICogVlZDIGZpbHRlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMp IDIwMjIgTnVvIE1pCisgKgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAq CisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLwor I2lmbmRlZiBBVkNPREVDX1ZWQ19WVkNfRklMVEVSX0gKKyNkZWZpbmUgQVZDT0RFQ19WVkNfVlZD X0ZJTFRFUl9ICisKKyNpbmNsdWRlICJ2dmNkZWMuaCIKKworLyoqCisgKiBsbWNzIGZpbHRlciBm b3IgdGhlIENUVQorICogQHBhcmFtIGxjIGxvY2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFt IHgwIHggcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0 aGUgQ1RVCisgKi8KK3ZvaWQgZmZfdnZjX2xtY3NfZmlsdGVyKGNvbnN0IFZWQ0xvY2FsQ29udGV4 dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwKTsKKworLyoqCisgKiB2ZXJ0aWNhbCBk ZWJsb2NrIGZpbHRlciBmb3IgdGhlIENUVQorICogQHBhcmFtIGxjIGxvY2FsIGNvbnRleHQgZm9y IENUVQorICogQHBhcmFtIHgwIHggcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSB5MCB5 IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKi8KK3ZvaWQgZmZfdnZjX2RlYmxvY2tfdmVydGljYWwo Y29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTApOworCisvKioKKyAqIGhv cml6b250YWwgZGVibG9jayBmaWx0ZXIgZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSBsYyBsb2NhbCBj b250ZXh0IGZvciBDVFUKKyAqIEBwYXJhbSB4MCB4IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKiBA cGFyYW0geTAgeSBwb3NpdGlvbiBmb3IgdGhlIENUVQorICovCit2b2lkIGZmX3Z2Y19kZWJsb2Nr X2hvcml6b250YWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTApOwor CisvKioKKyAqIHNhbyBmaWx0ZXIgZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSBsYyBsb2NhbCBjb250 ZXh0IGZvciBDVFUKKyAqIEBwYXJhbSB4MCB4IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKiBAcGFy YW0geTAgeSBwb3NpdGlvbiBmb3IgdGhlIENUVQorICovCit2b2lkIGZmX3Z2Y19zYW9fZmlsdGVy KFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwKTsKKwordm9p ZCBmZl92dmNfc2FvX2NvcHlfY3RiX3RvX2h2KFZWQ0xvY2FsQ29udGV4dCogbGMsIGludCByeCwg aW50IHJ5LCBpbnQgbGFzdF9yb3cpOwordm9pZCBmZl92dmNfYWxmX2NvcHlfY3R1X3RvX2h2KFZW Q0xvY2FsQ29udGV4dCogbGMsIGludCB4MCwgaW50IHkwKTsKKworLyoqCisgKiBhbGYgZmlsdGVy IGZvciB0aGUgQ1RVCisgKiBAcGFyYW0gbGMgbG9jYWwgY29udGV4dCBmb3IgQ1RVCisgKiBAcGFy YW0geDAgeCBwb3NpdGlvbiBmb3IgdGhlIENUVQorICogQHBhcmFtIHkwIHkgcG9zaXRpb24gZm9y IHRoZSBDVFUKKyAqLwordm9pZCBmZl92dmNfYWxmX2ZpbHRlcihWVkNMb2NhbENvbnRleHQgKmxj LCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCk7CisKKyNlbmRpZiAvLyBBVkNPREVDX1ZWQ19W VkNfQ1RVX0gKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXJfdGVtcGxhdGUu YyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXJfdGVtcGxhdGUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi5hNGYxNzkyZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGli YXZjb2RlYy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jCkBAIC0wLDAgKzEsMTEzNSBAQAorLyoK KyAqIFZWQyBmaWx0ZXJzIERTUAorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBOdW8gTWkKKyAq CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs b29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworc3RhdGljIHZvaWQgRlVOQyhs bWNzX2ZpbHRlcl9sdW1hKSh1aW50OF90ICpfZHN0LCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29u c3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCB1aW50OF90ICpfbHV0KQorewor ICAgIGNvbnN0IHBpeGVsICpsdXQgPSAoY29uc3QgcGl4ZWwgKilfbHV0OworICAgIHBpeGVsICpk c3QgPSAocGl4ZWwqKV9kc3Q7CisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisg ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICBmb3IgKGludCB4 ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICBkc3RbeF0gPSBsdXRbZHN0W3hdXTsK KyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5D KHNhb19iYW5kX2ZpbHRlcikodWludDhfdCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3NyYywgcHRy ZGlmZl90IGRzdF9zdHJpZGUsIHB0cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludDE2 X3QgKnNhb19vZmZzZXRfdmFsLCBjb25zdCBpbnQgc2FvX2xlZnRfY2xhc3MsIGNvbnN0IGludCB3 aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBwaXhlbCAqZHN0ICAgICAgID0gKHBpeGVs ICopX2RzdDsKKyAgICBjb25zdCBwaXhlbCAqc3JjID0gKHBpeGVsICopX3NyYzsKKyAgICBpbnQg b2Zmc2V0X3RhYmxlWzMyXSA9IHsgMCB9OworICAgIGludCBrLCB5LCB4OworICAgIGludCBzaGlm dCAgPSBCSVRfREVQVEggLSA1OworCisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOwor ICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAoayA9IDA7IGsgPCA0 OyBrKyspCisgICAgICAgIG9mZnNldF90YWJsZVsoayArIHNhb19sZWZ0X2NsYXNzKSAmIDMxXSA9 IHNhb19vZmZzZXRfdmFsW2sgKyAxXTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp IHsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICBkc3Rb eF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4XSArIG9mZnNldF90YWJsZVtzcmNbeF0gPj4gc2hpZnRd KTsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgIHNyYyArPSBzcmNfc3RyaWRl OworICAgIH0KK30KKworI2RlZmluZSBDTVAoYSwgYikgKCgoYSkgPiAoYikpIC0gKChhKSA8IChi KSkpCisKK3N0YXRpYyB2b2lkIEZVTkMoc2FvX2VkZ2VfZmlsdGVyKSh1aW50OF90ICpfZHN0LCBj b25zdCB1aW50OF90ICpfc3JjLCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwKKyAgICBjb25zdCBpbnQx Nl90ICpzYW9fb2Zmc2V0X3ZhbCwgY29uc3QgaW50IGVvLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0 IGludCBoZWlnaHQpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgZWRnZV9pZHhbXSA9IHsg MSwgMiwgMCwgMywgNCB9OworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgcG9zWzRdWzJdWzJdID0g eworICAgICAgICB7IHsgLTEsICAwIH0sIHsgIDEsIDAgfSB9LCAvLyBob3Jpem9udGFsCisgICAg ICAgIHsgeyAgMCwgLTEgfSwgeyAgMCwgMSB9IH0sIC8vIHZlcnRpY2FsCisgICAgICAgIHsgeyAt MSwgLTEgfSwgeyAgMSwgMSB9IH0sIC8vIDQ1IGRlZ3JlZQorICAgICAgICB7IHsgIDEsIC0xIH0s IHsgLTEsIDEgfSB9LCAvLyAxMzUgZGVncmVlCisgICAgfTsKKyAgICBwaXhlbCAqZHN0ICAgICAg ICAgID0gKHBpeGVsICopX2RzdDsKKyAgICBjb25zdCBwaXhlbCAqc3JjICAgID0gKHBpeGVsICop X3NyYzsKKyAgICBpbnQgYV9zdHJpZGUsIGJfc3RyaWRlOworICAgIGludCB4LCB5OworICAgIHB0 cmRpZmZfdCBzcmNfc3RyaWRlID0gKDIgKiBNQVhfUEJfU0laRSArIEFWX0lOUFVUX0JVRkZFUl9Q QURESU5HX1NJWkUpIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihw aXhlbCk7CisKKyAgICBhX3N0cmlkZSA9IHBvc1tlb11bMF1bMF0gKyBwb3NbZW9dWzBdWzFdICog c3JjX3N0cmlkZTsKKyAgICBiX3N0cmlkZSA9IHBvc1tlb11bMV1bMF0gKyBwb3NbZW9dWzFdWzFd ICogc3JjX3N0cmlkZTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAg ICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgIGludCBkaWZmMCA9 IENNUChzcmNbeF0sIHNyY1t4ICsgYV9zdHJpZGVdKTsKKyAgICAgICAgICAgIGludCBkaWZmMSA9 IENNUChzcmNbeF0sIHNyY1t4ICsgYl9zdHJpZGVdKTsKKyAgICAgICAgICAgIGludCBvZmZzZXRf dmFsICAgICAgICA9IGVkZ2VfaWR4WzIgKyBkaWZmMCArIGRpZmYxXTsKKyAgICAgICAgICAgIGRz dFt4XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3hdICsgc2FvX29mZnNldF92YWxbb2Zmc2V0X3ZhbF0p OworICAgICAgICB9CisgICAgICAgIHNyYyArPSBzcmNfc3RyaWRlOworICAgICAgICBkc3QgKz0g ZHN0X3N0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoc2FvX2VkZ2VfcmVzdG9y ZV8wKSh1aW50OF90ICpfZHN0LCBjb25zdCB1aW50OF90ICpfc3JjLAorICAgIHB0cmRpZmZfdCBk c3Rfc3RyaWRlLCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgY29uc3QgU0FPUGFyYW1zICpzYW8sCisg ICAgY29uc3QgaW50ICpib3JkZXJzLCBjb25zdCBpbnQgX3dpZHRoLCBjb25zdCBpbnQgX2hlaWdo dCwgY29uc3QgaW50IGNfaWR4LAorICAgIGNvbnN0IHVpbnQ4X3QgKnZlcnRfZWRnZSwgY29uc3Qg dWludDhfdCAqaG9yaXpfZWRnZSwgY29uc3QgdWludDhfdCAqZGlhZ19lZGdlKQoreworICAgIGlu dCB4LCB5OworICAgIHBpeGVsICpkc3QgICAgICAgICAgICAgICAgICAgICAgPSAocGl4ZWwgKilf ZHN0OworICAgIGNvbnN0IHBpeGVsICpzcmMgICAgICAgICAgICAgICAgPSAocGl4ZWwgKilfc3Jj OworICAgIGNvbnN0IGludDE2X3QgKnNhb19vZmZzZXRfdmFsICAgPSBzYW8tPm9mZnNldF92YWxb Y19pZHhdOworICAgIGNvbnN0IGludCBzYW9fZW9fY2xhc3MgICAgICAgICAgPSBzYW8tPmVvX2Ns YXNzW2NfaWR4XTsKKyAgICBpbnQgaW5pdF94ID0gMCwgd2lkdGggPSBfd2lkdGgsIGhlaWdodCA9 IF9oZWlnaHQ7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisgICAgc3JjX3N0 cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgaWYgKHNhb19lb19jbGFzcyAhPSBTQU9fRU9f VkVSVCkgeworICAgICAgICBpZiAoYm9yZGVyc1swXSkgeworICAgICAgICAgICAgaW50IG9mZnNl dF92YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBo ZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X3N0cmlkZV0gPSBhdl9j bGlwX3BpeGVsKHNyY1t5ICogc3JjX3N0cmlkZV0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGluaXRfeCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvcmRl cnNbMl0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsID0gc2FvX29mZnNldF92YWxbMF07 CisgICAgICAgICAgICBpbnQgb2Zmc2V0ICAgICA9IHdpZHRoIC0gMTsKKyAgICAgICAgICAgIGZv ciAoeCA9IDA7IHggPCBoZWlnaHQ7IHgrKykgeworICAgICAgICAgICAgICAgIGRzdFt4ICogZHN0 X3N0cmlkZSArIG9mZnNldF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4ICogc3JjX3N0cmlkZSArIG9m ZnNldF0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdpZHRoLS07 CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNhb19lb19jbGFzcyAhPSBTQU9fRU9fSE9SSVop IHsKKyAgICAgICAgaWYgKGJvcmRlcnNbMV0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFs ID0gc2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAgICBmb3IgKHggPSBpbml0X3g7IHggPCB3 aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgIGRzdFt4XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3hd ICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvcmRlcnNbM10pIHsKKyAg ICAgICAgICAgIGludCBvZmZzZXRfdmFsICAgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAg ICAgIHB0cmRpZmZfdCB5X2RzdF9zdHJpZGUgPSBkc3Rfc3RyaWRlICogKGhlaWdodCAtIDEpOwor ICAgICAgICAgICAgcHRyZGlmZl90IHlfc3JjX3N0cmlkZSA9IHNyY19zdHJpZGUgKiAoaGVpZ2h0 IC0gMSk7CisgICAgICAgICAgICBmb3IgKHggPSBpbml0X3g7IHggPCB3aWR0aDsgeCsrKQorICAg ICAgICAgICAgICAgIGRzdFt4ICsgeV9kc3Rfc3RyaWRlXSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3gg KyB5X3NyY19zdHJpZGVdICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICBoZWlnaHQtLTsKKyAg ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhzYW9fZWRnZV9yZXN0b3JlXzEp KHVpbnQ4X3QgKl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsCisgICAgcHRyZGlmZl90IGRzdF9z dHJpZGUsIHB0cmRpZmZfdCBzcmNfc3RyaWRlLCBjb25zdCBTQU9QYXJhbXMgKnNhbywKKyAgICBj b25zdCBpbnQgKmJvcmRlcnMsIGNvbnN0IGludCBfd2lkdGgsIGNvbnN0IGludCBfaGVpZ2h0LCBj b25zdCBpbnQgY19pZHgsCisgICAgY29uc3QgdWludDhfdCAqdmVydF9lZGdlLCBjb25zdCB1aW50 OF90ICpob3Jpel9lZGdlLCBjb25zdCB1aW50OF90ICpkaWFnX2VkZ2UpCit7CisgICAgaW50IHgs IHk7CisgICAgcGl4ZWwgKmRzdCAgICAgICAgICAgICAgICAgICAgICA9IChwaXhlbCAqKV9kc3Q7 CisgICAgY29uc3QgcGl4ZWwgKnNyYyAgICAgICAgICAgICAgICA9IChwaXhlbCAqKV9zcmM7Cisg ICAgY29uc3QgaW50MTZfdCAqc2FvX29mZnNldF92YWwgICA9IHNhby0+b2Zmc2V0X3ZhbFtjX2lk eF07CisgICAgY29uc3QgaW50IHNhb19lb19jbGFzcyAgICAgICAgICA9IHNhby0+ZW9fY2xhc3Nb Y19pZHhdOworICAgIGludCBpbml0X3ggPSAwLCBpbml0X3kgPSAwLCB3aWR0aCA9IF93aWR0aCwg aGVpZ2h0ID0gX2hlaWdodDsKKworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKyAg ICBzcmNfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBpZiAoc2FvX2VvX2NsYXNzICE9 IFNBT19FT19WRVJUKSB7CisgICAgICAgIGlmIChib3JkZXJzWzBdKSB7CisgICAgICAgICAgICBp bnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgZm9yICh5ID0g MDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgICAgICAgICAgZHN0W3kgKiBkc3Rfc3RyaWRl XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3kgKiBzcmNfc3RyaWRlXSArIG9mZnNldF92YWwpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaW5pdF94ID0gMTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoYm9yZGVyc1syXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgPSBzYW9fb2Zmc2V0 X3ZhbFswXTsKKyAgICAgICAgICAgIGludCBvZmZzZXQgICAgID0gd2lkdGggLSAxOworICAgICAg ICAgICAgZm9yICh4ID0gMDsgeCA8IGhlaWdodDsgeCsrKSB7CisgICAgICAgICAgICAgICAgZHN0 W3ggKiBkc3Rfc3RyaWRlICsgb2Zmc2V0XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3ggKiBzcmNfc3Ry aWRlICsgb2Zmc2V0XSArIG9mZnNldF92YWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg d2lkdGgtLTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc2FvX2VvX2NsYXNzICE9IFNBT19F T19IT1JJWikgeworICAgICAgICBpZiAoYm9yZGVyc1sxXSkgeworICAgICAgICAgICAgaW50IG9m ZnNldF92YWwgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIGZvciAoeCA9IGluaXRf eDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAgZHN0W3hdID0gYXZfY2xpcF9waXhl bChzcmNbeF0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAgICAgIGluaXRfeSA9IDE7CisgICAgICAg IH0KKyAgICAgICAgaWYgKGJvcmRlcnNbM10pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFs ICAgPSBzYW9fb2Zmc2V0X3ZhbFswXTsKKyAgICAgICAgICAgIHB0cmRpZmZfdCB5X2RzdF9zdHJp ZGUgPSBkc3Rfc3RyaWRlICogKGhlaWdodCAtIDEpOworICAgICAgICAgICAgcHRyZGlmZl90IHlf c3JjX3N0cmlkZSA9IHNyY19zdHJpZGUgKiAoaGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBmb3Ig KHggPSBpbml0X3g7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgIGRzdFt4ICsgeV9k c3Rfc3RyaWRlXSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3ggKyB5X3NyY19zdHJpZGVdICsgb2Zmc2V0 X3ZhbCk7CisgICAgICAgICAgICBoZWlnaHQtLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsK KyAgICAgICAgaW50IHNhdmVfdXBwZXJfbGVmdCAgPSAhZGlhZ19lZGdlWzBdICYmIHNhb19lb19j bGFzcyA9PSBTQU9fRU9fMTM1RCAmJiAhYm9yZGVyc1swXSAmJiAhYm9yZGVyc1sxXTsKKyAgICAg ICAgaW50IHNhdmVfdXBwZXJfcmlnaHQgPSAhZGlhZ19lZGdlWzFdICYmIHNhb19lb19jbGFzcyA9 PSBTQU9fRU9fNDVEICAmJiAhYm9yZGVyc1sxXSAmJiAhYm9yZGVyc1syXTsKKyAgICAgICAgaW50 IHNhdmVfbG93ZXJfcmlnaHQgPSAhZGlhZ19lZGdlWzJdICYmIHNhb19lb19jbGFzcyA9PSBTQU9f RU9fMTM1RCAmJiAhYm9yZGVyc1syXSAmJiAhYm9yZGVyc1szXTsKKyAgICAgICAgaW50IHNhdmVf bG93ZXJfbGVmdCAgPSAhZGlhZ19lZGdlWzNdICYmIHNhb19lb19jbGFzcyA9PSBTQU9fRU9fNDVE ICAmJiAhYm9yZGVyc1swXSAmJiAhYm9yZGVyc1szXTsKKworICAgICAgICAvLyBSZXN0b3JlIHBp eGVscyB0aGF0IGNhbid0IGJlIG1vZGlmaWVkCisgICAgICAgIGlmICh2ZXJ0X2VkZ2VbMF0gJiYg c2FvX2VvX2NsYXNzICE9IFNBT19FT19WRVJUKSB7CisgICAgICAgICAgICBmb3IgKHkgPSBpbml0 X3kgKyBzYXZlX3VwcGVyX2xlZnQ7IHkgPCBoZWlnaHQgLSBzYXZlX2xvd2VyX2xlZnQ7IHkrKykK KyAgICAgICAgICAgICAgICBkc3RbeSAqIGRzdF9zdHJpZGVdID0gc3JjW3kgKiBzcmNfc3RyaWRl XTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmVydF9lZGdlWzFdICYmIHNhb19lb19jbGFzcyAh PSBTQU9fRU9fVkVSVCkgeworICAgICAgICAgICAgZm9yICh5ID0gaW5pdF95ICsgc2F2ZV91cHBl cl9yaWdodDsgeSA8IGhlaWdodCAtIHNhdmVfbG93ZXJfcmlnaHQ7IHkrKykKKyAgICAgICAgICAg ICAgICBkc3RbeSAqIGRzdF9zdHJpZGUgKyB3aWR0aCAtIDFdID0gc3JjW3kgKiBzcmNfc3RyaWRl ICsgd2lkdGggLSAxXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChob3Jpel9lZGdlWzBdICYm IHNhb19lb19jbGFzcyAhPSBTQU9fRU9fSE9SSVopIHsKKyAgICAgICAgICAgIGZvciAoeCA9IGlu aXRfeCArIHNhdmVfdXBwZXJfbGVmdDsgeCA8IHdpZHRoIC0gc2F2ZV91cHBlcl9yaWdodDsgeCsr KQorICAgICAgICAgICAgICAgIGRzdFt4XSA9IHNyY1t4XTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoaG9yaXpfZWRnZVsxXSAmJiBzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX0hPUklaKSB7CisgICAg ICAgICAgICBmb3IgKHggPSBpbml0X3ggKyBzYXZlX2xvd2VyX2xlZnQ7IHggPCB3aWR0aCAtIHNh dmVfbG93ZXJfcmlnaHQ7IHgrKykKKyAgICAgICAgICAgICAgICBkc3RbKGhlaWdodCAtIDEpICog ZHN0X3N0cmlkZSArIHhdID0gc3JjWyhoZWlnaHQgLSAxKSAqIHNyY19zdHJpZGUgKyB4XTsKKyAg ICAgICAgfQorICAgICAgICBpZiAoZGlhZ19lZGdlWzBdICYmIHNhb19lb19jbGFzcyA9PSBTQU9f RU9fMTM1RCkKKyAgICAgICAgICAgIGRzdFswXSA9IHNyY1swXTsKKyAgICAgICAgaWYgKGRpYWdf ZWRnZVsxXSAmJiBzYW9fZW9fY2xhc3MgPT0gU0FPX0VPXzQ1RCkKKyAgICAgICAgICAgIGRzdFt3 aWR0aCAtIDFdID0gc3JjW3dpZHRoIC0gMV07CisgICAgICAgIGlmIChkaWFnX2VkZ2VbMl0gJiYg c2FvX2VvX2NsYXNzID09IFNBT19FT18xMzVEKQorICAgICAgICAgICAgZHN0W2RzdF9zdHJpZGUg KiAoaGVpZ2h0IC0gMSkgKyB3aWR0aCAtIDFdID0gc3JjW3NyY19zdHJpZGUgKiAoaGVpZ2h0IC0g MSkgKyB3aWR0aCAtIDFdOworICAgICAgICBpZiAoZGlhZ19lZGdlWzNdICYmIHNhb19lb19jbGFz cyA9PSBTQU9fRU9fNDVEKQorICAgICAgICAgICAgZHN0W2RzdF9zdHJpZGUgKiAoaGVpZ2h0IC0g MSldID0gc3JjW3NyY19zdHJpZGUgKiAoaGVpZ2h0IC0gMSldOworCisgICAgfQorfQorCisjdW5k ZWYgQ01QCisKK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludDE2X3QgRlVOQyhhbGZfY2xpcCko cGl4ZWwgY3VyciwgcGl4ZWwgdjAsIHBpeGVsIHYxLCBpbnQxNl90IGNsaXApCit7CisgICAgcmV0 dXJuIGF2X2NsaXAodjAgLSBjdXJyLCAtY2xpcCwgY2xpcCkgKyBhdl9jbGlwKHYxIC0gY3Vyciwg LWNsaXAsIGNsaXApOworfQorCitzdGF0aWMgdm9pZCBGVU5DKGFsZl9maWx0ZXJfbHVtYSkodWlu dDhfdCAqX2RzdCwgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QgKl9zcmMsIHB0 cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdo dCwgY29uc3QgaW50MTZfdCAqZmlsdGVyLCBjb25zdCBpbnQxNl90ICpjbGlwLCBjb25zdCBpbnQg dmJfcG9zKQoreworICAgIGNvbnN0IHBpeGVsICpzcmMgICAgPSAocGl4ZWwgKilfc3JjOworICAg IGNvbnN0IGludCBzaGlmdCAgICAgPSA3OworICAgIGNvbnN0IGludCBvZmZzZXQgICAgPSAxIDw8 ICggc2hpZnQgLSAxICk7CisgICAgY29uc3QgaW50IHZiX2Fib3ZlICA9IHZiX3BvcyAtIDQ7Cisg ICAgY29uc3QgaW50IHZiX2JlbG93ICA9IHZiX3BvcyArIDM7CisKKyAgICBkc3Rfc3RyaWRlIC89 IHNpemVvZihwaXhlbCk7CisgICAgc3JjX3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAg Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAg ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBBTEZfQkxPQ0tfU0laRSkgeworICAg ICAgICAgICAgY29uc3QgcGl4ZWwgKnMwID0gc3JjICsgeSAqIHNyY19zdHJpZGUgKyB4OworICAg ICAgICAgICAgY29uc3QgcGl4ZWwgKnMxID0gczAgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAg Y29uc3QgcGl4ZWwgKnMyID0gczAgLSBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4 ZWwgKnMzID0gczEgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM0ID0g czIgLSBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM1ID0gczMgKyBzcmNf c3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM2ID0gczQgLSBzcmNfc3RyaWRlOwor CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEFMRl9CTE9DS19TSVpFOyBpKyspIHsK KyAgICAgICAgICAgICAgICBwaXhlbCAqZHN0ID0gKHBpeGVsICopX2RzdCArICh5ICsgaSkgKiBk c3Rfc3RyaWRlICsgeDsKKworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMCA9IHMwICsg aSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAxID0gczEgKyBp ICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDIgPSBzMiArIGkg KiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMyA9IHMzICsgaSAq IHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA0ID0gczQgKyBpICog c3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDUgPSBzNSArIGkgKiBz cmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNiA9IHM2ICsgaSAqIHNy Y19zdHJpZGU7CisKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfbmVhcl92Yl9hYm92ZSA9 ICh5ICsgaSA8ICB2Yl9wb3MpICYmICh5ICsgaSA+PSB2Yl9wb3MgLSAxKTsKKyAgICAgICAgICAg ICAgICBjb25zdCBpbnQgaXNfbmVhcl92Yl9iZWxvdyA9ICh5ICsgaSA+PSB2Yl9wb3MpICYmICh5 ICsgaSA8PSB2Yl9wb3MpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFyX3ZiID0g aXNfbmVhcl92Yl9hYm92ZSB8fCBpc19uZWFyX3ZiX2JlbG93OworCisgICAgICAgICAgICAgICAg aWYgKCh5ICsgaSA8IHZiX3BvcykgJiYgKCh5ICsgaSkgPj0gdmJfYWJvdmUpKSB7CisgICAgICAg ICAgICAgICAgICAgIHAxID0gKHkgKyBpID09IHZiX3BvcyAtIDEpID8gcDAgOiBwMTsKKyAgICAg ICAgICAgICAgICAgICAgcDMgPSAoeSArIGkgPj0gdmJfcG9zIC0gMikgPyBwMSA6IHAzOworICAg ICAgICAgICAgICAgICAgICBwNSA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAzKSA/IHAzIDogcDU7CisK KyAgICAgICAgICAgICAgICAgICAgcDIgPSAoeSArIGkgPT0gdmJfcG9zIC0gMSkgPyBwMCA6IHAy OworICAgICAgICAgICAgICAgICAgICBwNCA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAyKSA/IHAyIDog cDQ7CisgICAgICAgICAgICAgICAgICAgIHA2ID0gKHkgKyBpID49IHZiX3BvcyAtIDMpID8gcDQg OiBwNjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh5ICsgaSA+PSB2Yl9wb3MpICYmICgo eSArIGkpIDw9IHZiX2JlbG93KSkgeworICAgICAgICAgICAgICAgICAgICBwMiA9ICh5ICsgaSA9 PSB2Yl9wb3MgICAgKSA/IHAwIDogcDI7CisgICAgICAgICAgICAgICAgICAgIHA0ID0gKHkgKyBp IDw9IHZiX3BvcyArIDEpID8gcDIgOiBwNDsKKyAgICAgICAgICAgICAgICAgICAgcDYgPSAoeSAr IGkgPD0gdmJfcG9zICsgMikgPyBwNCA6IHA2OworCisgICAgICAgICAgICAgICAgICAgIHAxID0g KHkgKyBpID09IHZiX3BvcyAgICApID8gcDAgOiBwMTsKKyAgICAgICAgICAgICAgICAgICAgcDMg PSAoeSArIGkgPD0gdmJfcG9zICsgMSkgPyBwMSA6IHAzOworICAgICAgICAgICAgICAgICAgICBw NSA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAyKSA/IHAzIDogcDU7CisgICAgICAgICAgICAgICAgfQor CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBBTEZfQkxPQ0tfU0laRTsgaisr KSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgICAgICAg ICBjb25zdCBwaXhlbCBjdXJyID0gKnAwOworCisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbMF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDVbKzBdLCBwNlsrMF0sIGNsaXBbMF0p OworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzFdICAqIEZVTkMoYWxmX2NsaXAp KGN1cnIsIHAzWysxXSwgcDRbLTFdLCBjbGlwWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt ICs9IGZpbHRlclsyXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwM1srMF0sIHA0WyswXSwgY2xp cFsyXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbM10gICogRlVOQyhhbGZf Y2xpcCkoY3VyciwgcDNbLTFdLCBwNFsrMV0sIGNsaXBbM10pOworICAgICAgICAgICAgICAgICAg ICBzdW0gKz0gZmlsdGVyWzRdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWysyXSwgcDJbLTJd LCBjbGlwWzRdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls1XSAgKiBGVU5D KGFsZl9jbGlwKShjdXJyLCBwMVsrMV0sIHAyWy0xXSwgY2xpcFs1XSk7CisgICAgICAgICAgICAg ICAgICAgIHN1bSArPSBmaWx0ZXJbNl0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFbKzBdLCBw MlsrMF0sIGNsaXBbNl0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzddICAq IEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWy0xXSwgcDJbKzFdLCBjbGlwWzddKTsKKyAgICAgICAg ICAgICAgICAgICAgc3VtICs9IGZpbHRlcls4XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVst Ml0sIHAyWysyXSwgY2xpcFs4XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJb OV0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzNdLCBwMFstM10sIGNsaXBbOV0pOworICAg ICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzEwXSAqIEZVTkMoYWxmX2NsaXApKGN1cnIs IHAwWysyXSwgcDBbLTJdLCBjbGlwWzEwXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbMTFdICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzFdLCBwMFstMV0sIGNsaXBbMTFd KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX25lYXJfdmIpCisgICAgICAgICAgICAg ICAgICAgICAgICBzdW0gPSAoc3VtICsgb2Zmc2V0KSA+PiBzaGlmdDsKKyAgICAgICAgICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3VtID0gKHN1bSArICgxIDw8ICgo c2hpZnQgKyAzKSAtIDEpKSkgPj4gKHNoaWZ0ICsgMyk7CisgICAgICAgICAgICAgICAgICAgIHN1 bSArPSBjdXJyOworICAgICAgICAgICAgICAgICAgICBkc3Rbal0gPSBDTElQKHN1bSk7CisKKyAg ICAgICAgICAgICAgICAgICAgcDArKzsKKyAgICAgICAgICAgICAgICAgICAgcDErKzsKKyAgICAg ICAgICAgICAgICAgICAgcDIrKzsKKyAgICAgICAgICAgICAgICAgICAgcDMrKzsKKyAgICAgICAg ICAgICAgICAgICAgcDQrKzsKKyAgICAgICAgICAgICAgICAgICAgcDUrKzsKKyAgICAgICAgICAg ICAgICAgICAgcDYrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBmaWx0ZXIgKz0gQUxGX05VTV9DT0VGRl9MVU1BOworICAgICAgICAgICAgY2xpcCArPSBB TEZfTlVNX0NPRUZGX0xVTUE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZV TkMoYWxmX2ZpbHRlcl9jaHJvbWEpKHVpbnQ4X3QqIF9kc3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRl LCBjb25zdCB1aW50OF90KiBfc3JjLCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBp bnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludDE2X3QqIGZpbHRlciwgY29uc3Qg aW50MTZfdCogY2xpcCwgY29uc3QgaW50IHZiX3BvcykKK3sKKyAgICBjb25zdCBwaXhlbCAqc3Jj ID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBpbnQgc2hpZnQgID0gNzsKKyAgICBjb25zdCBp bnQgb2Zmc2V0ID0gMSA8PCAoIHNoaWZ0IC0gMSApOworICAgIGNvbnN0IGludCB2Yl9hYm92ZSAg PSB2Yl9wb3MgLSAyOworICAgIGNvbnN0IGludCB2Yl9iZWxvdyAgPSB2Yl9wb3MgKyAxOworCisg ICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9m KHBpeGVsKTsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IEFMRl9CTE9D S19TSVpFKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gQUxGX0JM T0NLX1NJWkUpIHsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMCA9IHNyYyArIHkgKiBzcmNf c3RyaWRlICsgeDsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMSA9IHMwICsgc3JjX3N0cmlk ZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzMiA9IHMwIC0gc3JjX3N0cmlkZTsKKyAgICAg ICAgICAgIGNvbnN0IHBpeGVsICpzMyA9IHMxICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNv bnN0IHBpeGVsICpzNCA9IHMyIC0gc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVs ICpzNSA9IHMzICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNiA9IHM0 IC0gc3JjX3N0cmlkZTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfQkxP Q0tfU0laRTsgaSsrKSB7CisgICAgICAgICAgICAgICAgcGl4ZWwgKmRzdCA9IChwaXhlbCAqKV9k c3QgKyAoeSArIGkpICogZHN0X3N0cmlkZSArIHg7CisKKyAgICAgICAgICAgICAgICBjb25zdCBw aXhlbCAqcDAgPSBzMCArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBp eGVsICpwMSA9IHMxICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4 ZWwgKnAyID0gczIgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhl bCAqcDMgPSBzMyArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVs ICpwNCA9IHM0ICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwg KnA1ID0gczUgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAq cDYgPSBzNiArIGkgKiBzcmNfc3RyaWRlOworCisgICAgICAgICAgICAgICAgY29uc3QgaW50IGlz X25lYXJfdmJfYWJvdmUgPSAoeSArIGkgPCAgdmJfcG9zKSAmJiAoeSArIGkgPj0gdmJfcG9zIC0g MSk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGlzX25lYXJfdmJfYmVsb3cgPSAoeSArIGkg Pj0gdmJfcG9zKSAmJiAoeSArIGkgPD0gdmJfcG9zKTsKKyAgICAgICAgICAgICAgICBjb25zdCBp bnQgaXNfbmVhcl92YiA9IGlzX25lYXJfdmJfYWJvdmUgfHwgaXNfbmVhcl92Yl9iZWxvdzsKKwor ICAgICAgICAgICAgICAgIGlmICgoeSArIGkgPCB2Yl9wb3MpICYmICgoeSArIGkpID49IHZiX2Fi b3ZlKSkgeworICAgICAgICAgICAgICAgICAgICBwMSA9ICh5ICsgaSA9PSB2Yl9wb3MgLSAxKSA/ IHAwIDogcDE7CisgICAgICAgICAgICAgICAgICAgIHAzID0gKHkgKyBpID49IHZiX3BvcyAtIDIp ID8gcDEgOiBwMzsKKyAgICAgICAgICAgICAgICAgICAgcDUgPSAoeSArIGkgPj0gdmJfcG9zIC0g MykgPyBwMyA6IHA1OworCisgICAgICAgICAgICAgICAgICAgIHAyID0gKHkgKyBpID09IHZiX3Bv cyAtIDEpID8gcDAgOiBwMjsKKyAgICAgICAgICAgICAgICAgICAgcDQgPSAoeSArIGkgPj0gdmJf cG9zIC0gMikgPyBwMiA6IHA0OworICAgICAgICAgICAgICAgICAgICBwNiA9ICh5ICsgaSA+PSB2 Yl9wb3MgLSAzKSA/IHA0IDogcDY7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoeSArIGkg Pj0gdmJfcG9zKSAmJiAoKHkgKyBpKSA8PSB2Yl9iZWxvdykpIHsKKyAgICAgICAgICAgICAgICAg ICAgcDIgPSAoeSArIGkgPT0gdmJfcG9zICAgICkgPyBwMCA6IHAyOworICAgICAgICAgICAgICAg ICAgICBwNCA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAxKSA/IHAyIDogcDQ7CisgICAgICAgICAgICAg ICAgICAgIHA2ID0gKHkgKyBpIDw9IHZiX3BvcyArIDIpID8gcDQgOiBwNjsKKworICAgICAgICAg ICAgICAgICAgICBwMSA9ICh5ICsgaSA9PSB2Yl9wb3MgICAgKSA/IHAwIDogcDE7CisgICAgICAg ICAgICAgICAgICAgIHAzID0gKHkgKyBpIDw9IHZiX3BvcyArIDEpID8gcDEgOiBwMzsKKyAgICAg ICAgICAgICAgICAgICAgcDUgPSAoeSArIGkgPD0gdmJfcG9zICsgMikgPyBwMyA6IHA1OworICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgQUxG X0JMT0NLX1NJWkU7IGorKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAg ICAgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgY3VyciA9ICpwMDsKKworICAgICAgICAgICAg ICAgICAgICBzdW0gKz0gZmlsdGVyWzBdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAzWyswXSwg cDRbKzBdLCBjbGlwWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclsxXSAg KiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVsrMV0sIHAyWy0xXSwgY2xpcFsxXSk7CisgICAgICAg ICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMl0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFb KzBdLCBwMlsrMF0sIGNsaXBbMl0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVy WzNdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWy0xXSwgcDJbKzFdLCBjbGlwWzNdKTsKKyAg ICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls0XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJy LCBwMFsrMl0sIHAwWy0yXSwgY2xpcFs0XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbNV0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzFdLCBwMFstMV0sIGNsaXBbNV0p OworCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNfbmVhcl92YikKKyAgICAgICAgICAgICAg ICAgICAgICAgIHN1bSA9IChzdW0gKyBvZmZzZXQpID4+IHNoaWZ0OworICAgICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gPSAoc3VtICsgKDEgPDwgKChz aGlmdCArIDMpIC0gMSkpKSA+PiAoc2hpZnQgKyAzKTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt ICs9IGN1cnI7CisgICAgICAgICAgICAgICAgICAgIGRzdFtqXSA9IENMSVAoc3VtKTsKKworICAg ICAgICAgICAgICAgICAgICBwMCsrOworICAgICAgICAgICAgICAgICAgICBwMSsrOworICAgICAg ICAgICAgICAgICAgICBwMisrOworICAgICAgICAgICAgICAgICAgICBwMysrOworICAgICAgICAg ICAgICAgICAgICBwNCsrOworICAgICAgICAgICAgICAgICAgICBwNSsrOworICAgICAgICAgICAg ICAgICAgICBwNisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhhbGZfZmlsdGVyX2NjKSh1aW50OF90ICpf ZHN0LCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgdWludDhfdCAqX2x1bWEsIGNvbnN0IHB0 cmRpZmZfdCBsdW1hX3N0cmlkZSwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWln aHQsIGNvbnN0IGludCBocywgY29uc3QgaW50IHZzLCBjb25zdCBpbnQxNl90ICpmaWx0ZXIsIGNv bnN0IGludCB2Yl9wb3MpCit7CisgICAgY29uc3QgcHRyZGlmZl90IHN0cmlkZSA9IGx1bWFfc3Ry aWRlIC8gc2l6ZW9mKHBpeGVsKTsKKworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsK KworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZm9yIChp bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAg ICAgICAgICAgIHBpeGVsICpkc3QgID0gKHBpeGVsICopX2RzdCAgKyB5ICogZHN0X3N0cmlkZSAr IHg7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqc3JjICA9IChwaXhlbCAqKV9sdW1hICsgKHkg PDwgdnMpICogc3RyaWRlICsgKHggPDwgaHMpOworCisgICAgICAgICAgICBjb25zdCBwaXhlbCAq czAgPSBzcmMgLSBzdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczEgPSBzcmM7Cisg ICAgICAgICAgICBjb25zdCBwaXhlbCAqczIgPSBzcmMgKyBzdHJpZGU7CisgICAgICAgICAgICBj b25zdCBwaXhlbCAqczMgPSBzcmMgKyAyICogc3RyaWRlOworCisgICAgICAgICAgICBjb25zdCBp bnQgcG9zID0geSA8PCB2czsKKyAgICAgICAgICAgIGlmICghdnMgJiYgKHBvcyA9PSB2Yl9wb3Mg fHwgcG9zID09IHZiX3BvcyArIDEpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg ICAgICAgICBpZiAocG9zID09ICh2Yl9wb3MgLSAyKSB8fCBwb3MgPT0gKHZiX3BvcyArIDEpKQor ICAgICAgICAgICAgICAgIHMzID0gczI7CisgICAgICAgICAgICBlbHNlICBpZiAocG9zID09ICh2 Yl9wb3MgLSAxKSB8fCBwb3MgPT0gdmJfcG9zKQorICAgICAgICAgICAgICAgIHMzID0gczIgPSBz MCA9IHMxOworCisKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMF0gKiAoKnMwIC0gKnNyYyk7 CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzFdICogKCooczEgLSAxKSAtICpzcmMpOworICAg ICAgICAgICAgc3VtICs9IGZpbHRlclsyXSAqICgqKHMxICsgMSkgLSAqc3JjKTsKKyAgICAgICAg ICAgIHN1bSArPSBmaWx0ZXJbM10gKiAoKihzMiAtIDEpIC0gKnNyYyk7CisgICAgICAgICAgICBz dW0gKz0gZmlsdGVyWzRdICogKCpzMiAtICpzcmMpOworICAgICAgICAgICAgc3VtICs9IGZpbHRl cls1XSAqICgqKHMyICsgMSkgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNl0g KiAoKnMzIC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gPSBhdl9jbGlwKChzdW0gKyA2NCkgPj4g NywgLSgxIDw8IChCSVRfREVQVEggLSAxKSksICgxIDw8IChCSVRfREVQVEggLSAxKSkgLSAxKTsK KyAgICAgICAgICAgIHN1bSArPSAqZHN0OworICAgICAgICAgICAgKmRzdCA9IGF2X2NsaXBfcGl4 ZWwoc3VtKTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2RlZmluZSBBTEZfRElSX1ZFUlQgICAg ICAgIDAKKyNkZWZpbmUgQUxGX0RJUl9IT1JaICAgICAgICAxCisjZGVmaW5lIEFMRl9ESVJfRElH QTAgICAgICAgMgorI2RlZmluZSBBTEZfRElSX0RJR0ExICAgICAgIDMKKworc3RhdGljIHZvaWQg RlVOQyhhbGZfZ2V0X2lkeCkoaW50ICpjbGFzc19pZHgsIGludCAqdHJhbnNwb3NlX2lkeCwgY29u c3QgaW50ICpzdW0sIGNvbnN0IGludCBhYykKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IGFyZ192 YXJbXSA9IHswLCAxLCAyLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCA0IH07 CisKKyAgICBpbnQgaHYwLCBodjEsIGRpcl9odiwgZDAsIGQxLCBkaXJfZCwgaHZkMSwgaHZkMCwg c3VtX2h2LCBkaXIxOworCisgICAgZGlyX2h2ID0gc3VtW0FMRl9ESVJfVkVSVF0gPD0gc3VtW0FM Rl9ESVJfSE9SWl07CisgICAgaHYxICAgID0gRkZNQVgoc3VtW0FMRl9ESVJfVkVSVF0sIHN1bVtB TEZfRElSX0hPUlpdKTsKKyAgICBodjAgICAgPSBGRk1JTihzdW1bQUxGX0RJUl9WRVJUXSwgc3Vt W0FMRl9ESVJfSE9SWl0pOworCisgICAgZGlyX2QgID0gc3VtW0FMRl9ESVJfRElHQTBdIDw9IHN1 bVtBTEZfRElSX0RJR0ExXTsKKyAgICBkMSAgICAgPSBGRk1BWChzdW1bQUxGX0RJUl9ESUdBMF0s IHN1bVtBTEZfRElSX0RJR0ExXSk7CisgICAgZDAgICAgID0gRkZNSU4oc3VtW0FMRl9ESVJfRElH QTBdLCBzdW1bQUxGX0RJUl9ESUdBMV0pOworCisgICAgLy9wcm9tb3RlIHRvIGF2b2lkIG92ZXJm bG93CisgICAgZGlyMSA9ICh1aW50NjRfdClkMSAqIGh2MCA8PSAodWludDY0X3QpaHYxICogZDA7 CisgICAgaHZkMSA9IGRpcjEgPyBodjEgOiBkMTsKKyAgICBodmQwID0gZGlyMSA/IGh2MCA6IGQw OworCisgICAgc3VtX2h2ID0gc3VtW0FMRl9ESVJfSE9SWl0gKyBzdW1bQUxGX0RJUl9WRVJUXTsK KyAgICAqY2xhc3NfaWR4ID0gYXJnX3Zhclthdl9jbGlwX3VpbnRwMihzdW1faHYgKiBhYyA+PiAo QklUX0RFUFRIIC0gMSksIDQpXTsKKyAgICBpZiAoaHZkMSAqIDIgPiA5ICogaHZkMCkKKyAgICAg ICAgKmNsYXNzX2lkeCArPSAoKGRpcjEgPDwgMSkgKyAyKSAqIDU7CisgICAgZWxzZSBpZiAoaHZk MSA+IDIgKiBodmQwKQorICAgICAgICAqY2xhc3NfaWR4ICs9ICgoZGlyMSA8PCAxKSArIDEpICog NTsKKworICAgICp0cmFuc3Bvc2VfaWR4ID0gZGlyX2QgKiAyICsgZGlyX2h2OworfQorCitzdGF0 aWMgdm9pZCBGVU5DKGFsZl9jbGFzc2lmeSkoaW50ICpjbGFzc19pZHgsIGludCAqdHJhbnNwb3Nl X2lkeCwKKyAgICBjb25zdCB1aW50OF90ICpfc3JjLCBjb25zdCBwdHJkaWZmX3QgX3NyY19zdHJp ZGUsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwKKyAgICBjb25zdCBpbnQgdmJf cG9zLCBpbnQgKmdyYWRpZW50X3RtcCkKK3sKKyAgICBpbnQgKmdyYWQ7CisKKyAgICBjb25zdCBp bnQgaCA9IGhlaWdodCArIEFMRl9HUkFESUVOVF9CT1JERVIgKiAyOworICAgIGNvbnN0IGludCB3 ID0gd2lkdGggICsgQUxGX0dSQURJRU5UX0JPUkRFUiAqIDI7CisgICAgY29uc3QgaW50IHNpemUg PSAoQUxGX0JMT0NLX1NJWkUgKyBBTEZfR1JBRElFTlRfQk9SREVSICogMikgLyBBTEZfR1JBRElF TlRfU1RFUDsKKyAgICBjb25zdCBpbnQgZ3N0cmlkZSA9ICh3IC8gQUxGX0dSQURJRU5UX1NURVAp ICogQUxGX05VTV9ESVI7CisKKyAgICBjb25zdCBwaXhlbCAqc3JjICAgICAgICAgICA9IChjb25z dCBwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUgPSBfc3JjX3N0 cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgc3JjIC09IChBTEZfR1JBRElFTlRfQk9SREVSICsg MSkgKiBzcmNfc3RyaWRlICsgQUxGX0dSQURJRU5UX0JPUkRFUjsKKworICAgIGdyYWQgPSBncmFk aWVudF90bXA7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5ICs9IEFMRl9HUkFESUVOVF9T VEVQKSB7CisgICAgICAgIGNvbnN0IHBpeGVsICpzMCAgPSBzcmMgKyB5ICogc3JjX3N0cmlkZTsK KyAgICAgICAgY29uc3QgcGl4ZWwgKnMxICA9IHMwICsgc3JjX3N0cmlkZTsKKyAgICAgICAgY29u c3QgcGl4ZWwgKnMyICA9IHMxICsgc3JjX3N0cmlkZTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnMz ICA9IHMyICsgc3JjX3N0cmlkZTsKKworICAgICAgICBpZiAoeSA9PSB2Yl9wb3MpICAgICAgICAg IC8vYWJvdmUKKyAgICAgICAgICAgIHMzID0gczI7CisgICAgICAgIGVsc2UgaWYgKHkgPT0gdmJf cG9zICsgQUxGX0dSQURJRU5UX0JPUkRFUikKKyAgICAgICAgICAgIHMwID0gczE7CisKKyAgICAg ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4ICs9IEFMRl9HUkFESUVOVF9TVEVQKSB7CisgICAg ICAgICAgICAvL3R3byBwb2ludHMgYSB0aW1lCisgICAgICAgICAgICBjb25zdCBwaXhlbCAqYTAg ID0gczAgKyB4OworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAwICA9IHMxICsgeDsKKyAgICAg ICAgICAgIGNvbnN0IHBpeGVsICpiMCAgPSBzMiArIHg7CisgICAgICAgICAgICBjb25zdCBpbnQg dmFsMCAgID0gKCpwMCkgPDwgMTsKKworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKmExICA9IHMx ICsgeCArIDE7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDEgID0gczIgKyB4ICsgMTsKKyAg ICAgICAgICAgIGNvbnN0IHBpeGVsICpiMSAgPSBzMyArIHggKyAxOworICAgICAgICAgICAgY29u c3QgaW50IHZhbDEgICA9ICgqcDEpIDw8IDE7CisKKyAgICAgICAgICAgIGdyYWRbQUxGX0RJUl9W RVJUXSAgPSBGRkFCUyh2YWwwIC0gKmEwIC0gKmIwKSArIEZGQUJTKHZhbDEgLSAqYTEgLSAqYjEp OworICAgICAgICAgICAgZ3JhZFtBTEZfRElSX0hPUlpdICA9IEZGQUJTKHZhbDAgLSAqKHAwIC0g MSkgLSAqKHAwICsgMSkpICsgRkZBQlModmFsMSAtICoocDEgLSAxKSAtICoocDEgKyAxKSk7Cisg ICAgICAgICAgICBncmFkW0FMRl9ESVJfRElHQTBdID0gRkZBQlModmFsMCAtICooYTAgLSAxKSAt ICooYjAgKyAxKSkgKyBGRkFCUyh2YWwxIC0gKihhMSAtIDEpIC0gKihiMSArIDEpKTsKKyAgICAg ICAgICAgIGdyYWRbQUxGX0RJUl9ESUdBMV0gPSBGRkFCUyh2YWwwIC0gKihhMCArIDEpIC0gKihi MCAtIDEpKSArIEZGQUJTKHZhbDEgLSAqKGExICsgMSkgLSAqKGIxIC0gMSkpOworICAgICAgICAg ICAgZ3JhZCArPSBBTEZfTlVNX0RJUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50 IHkgPSAwOyB5IDwgaGVpZ2h0IDsgeSArPSBBTEZfQkxPQ0tfU0laRSApIHsKKyAgICAgICAgaW50 IHN0YXJ0ID0gMDsKKyAgICAgICAgaW50IGVuZCAgID0gKEFMRl9CTE9DS19TSVpFICsgQUxGX0dS QURJRU5UX0JPUkRFUiAqIDIpIC8gQUxGX0dSQURJRU5UX1NURVA7CisgICAgICAgIGludCBhYyAg ICA9IDI7CisgICAgICAgIGlmICh5ICsgQUxGX0JMT0NLX1NJWkUgPT0gdmJfcG9zKSB7CisgICAg ICAgICAgICBlbmQgLT0gQUxGX0dSQURJRU5UX0JPUkRFUiAvIEFMRl9HUkFESUVOVF9TVEVQOwor ICAgICAgICAgICAgYWMgPSAzOworICAgICAgICB9IGVsc2UgaWYgKHkgPT0gdmJfcG9zKSB7Cisg ICAgICAgICAgICBzdGFydCArPSBBTEZfR1JBRElFTlRfQk9SREVSIC8gQUxGX0dSQURJRU5UX1NU RVA7CisgICAgICAgICAgICBhYyA9IDM7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgeCA9 IDA7IHggPCB3aWR0aDsgeCArPSBBTEZfQkxPQ0tfU0laRSkgeworICAgICAgICAgICAgY29uc3Qg aW50IHhnID0geCAvIEFMRl9HUkFESUVOVF9TVEVQOworICAgICAgICAgICAgY29uc3QgaW50IHln ID0geSAvIEFMRl9HUkFESUVOVF9TVEVQOworICAgICAgICAgICAgaW50IHN1bVtBTEZfTlVNX0RJ Ul0gPSB7IDAgfTsKKworICAgICAgICAgICAgZ3JhZCA9IGdyYWRpZW50X3RtcCArICh5ZyArIHN0 YXJ0KSAqIGdzdHJpZGUgKyB4ZyAqIEFMRl9OVU1fRElSOworICAgICAgICAgICAgLy90b2RvOiBv cHRpbWl6ZSB0aGlzIGxvb3AKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVu ZDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKysp IHsKKyAgICAgICAgICAgICAgICAgICAgc3VtW0FMRl9ESVJfVkVSVF0gICs9IGdyYWRbQUxGX0RJ Ul9WRVJUXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtW0FMRl9ESVJfSE9SWl0gICs9IGdyYWRb QUxGX0RJUl9IT1JaXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtW0FMRl9ESVJfRElHQTBdICs9 IGdyYWRbQUxGX0RJUl9ESUdBMF07CisgICAgICAgICAgICAgICAgICAgIHN1bVtBTEZfRElSX0RJ R0ExXSArPSBncmFkW0FMRl9ESVJfRElHQTFdOworICAgICAgICAgICAgICAgICAgICBncmFkICs9 IEFMRl9OVU1fRElSOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBncmFkICs9 IGdzdHJpZGUgLSBzaXplICogQUxGX05VTV9ESVI7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBGVU5DKGFsZl9nZXRfaWR4KShjbGFzc19pZHgsIHRyYW5zcG9zZV9pZHgsIHN1bSwgYWMpOwor CisgICAgICAgICAgICBjbGFzc19pZHgrKzsKKyAgICAgICAgICAgIHRyYW5zcG9zZV9pZHgrKzsK KyAgICAgICAgfQorICAgIH0KKworfQorCitzdGF0aWMgdm9pZCBGVU5DKGFsZl9yZWNvbl9jb2Vm Zl9hbmRfY2xpcCkoaW50MTZfdCAqY29lZmYsIGludDE2X3QgKmNsaXAsCisgICAgY29uc3QgaW50 ICpjbGFzc19pZHgsIGNvbnN0IGludCAqdHJhbnNwb3NlX2lkeCwgY29uc3QgaW50IHNpemUsCisg ICAgY29uc3QgaW50MTZfdCAqY29lZmZfc2V0LCBjb25zdCB1aW50OF90ICpjbGlwX2lkeF9zZXQs IGNvbnN0IHVpbnQ4X3QgKmNsYXNzX3RvX2ZpbHQpCit7CisgICAgY29uc3Qgc3RhdGljIGludCBp bmRleFtdW0FMRl9OVU1fQ09FRkZfTFVNQV0gPSB7CisgICAgICAgIHsgMCwgMSwgMiwgMywgNCwg NSwgNiwgNywgOCwgOSwgMTAsIDExIH0sCisgICAgICAgIHsgOSwgNCwgMTAsIDgsIDEsIDUsIDEx LCA3LCAzLCAwLCAyLCA2IH0sCisgICAgICAgIHsgMCwgMywgMiwgMSwgOCwgNywgNiwgNSwgNCwg OSwgMTAsIDExIH0sCisgICAgICAgIHsgOSwgOCwgMTAsIDQsIDMsIDcsIDExLCA1LCAxLCAwLCAy LCA2IH0sCisgICAgfTsKKworICAgIGNvbnN0IGludDE2X3QgY2xpcF9zZXRbXSA9IHsKKyAgICAg ICAgMSA8PCBCSVRfREVQVEgsIDEgPDwgKEJJVF9ERVBUSCAtIDMpLCAxIDw8IChCSVRfREVQVEgg LSA1KSwgMSA8PCAoQklUX0RFUFRIIC0gNykKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgY29uc3QgaW50MTZfdCAgKnNyY19jb2VmZiA9IGNv ZWZmX3NldCArIGNsYXNzX3RvX2ZpbHRbY2xhc3NfaWR4W2ldXSAqIEFMRl9OVU1fQ09FRkZfTFVN QTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqY2xpcF9pZHggID0gY2xpcF9pZHhfc2V0ICsgY2xh c3NfaWR4W2ldICogQUxGX05VTV9DT0VGRl9MVU1BOworCisgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgQUxGX05VTV9DT0VGRl9MVU1BOyBqKyspIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBp ZHggPSBpbmRleFt0cmFuc3Bvc2VfaWR4W2ldXVtqXTsKKyAgICAgICAgICAgICpjb2VmZisrID0g c3JjX2NvZWZmW2lkeF07CisgICAgICAgICAgICAqY2xpcCsrICA9IGNsaXBfc2V0W2NsaXBfaWR4 W2lkeF1dOworICAgICAgICB9CisgICAgfQorfQorCisjdW5kZWYgQUxGX0RJUl9IT1JaCisjdW5k ZWYgQUxGX0RJUl9WRVJUCisjdW5kZWYgQUxGX0RJUl9ESUdBMAorI3VuZGVmIEFMRl9ESVJfRElH QTEKKworLy8gbGluZSB6ZXJvCisjZGVmaW5lIFA3IHBpeFstOCAqIHhzdHJpZGVdCisjZGVmaW5l IFA2IHBpeFstNyAqIHhzdHJpZGVdCisjZGVmaW5lIFA1IHBpeFstNiAqIHhzdHJpZGVdCisjZGVm aW5lIFA0IHBpeFstNSAqIHhzdHJpZGVdCisjZGVmaW5lIFAzIHBpeFstNCAqIHhzdHJpZGVdCisj ZGVmaW5lIFAyIHBpeFstMyAqIHhzdHJpZGVdCisjZGVmaW5lIFAxIHBpeFstMiAqIHhzdHJpZGVd CisjZGVmaW5lIFAwIHBpeFstMSAqIHhzdHJpZGVdCisjZGVmaW5lIFEwIHBpeFswICogeHN0cmlk ZV0KKyNkZWZpbmUgUTEgcGl4WzEgKiB4c3RyaWRlXQorI2RlZmluZSBRMiBwaXhbMiAqIHhzdHJp ZGVdCisjZGVmaW5lIFEzIHBpeFszICogeHN0cmlkZV0KKyNkZWZpbmUgUTQgcGl4WzQgKiB4c3Ry aWRlXQorI2RlZmluZSBRNSBwaXhbNSAqIHhzdHJpZGVdCisjZGVmaW5lIFE2IHBpeFs2ICogeHN0 cmlkZV0KKyNkZWZpbmUgUTcgcGl4WzcgKiB4c3RyaWRlXQorI2RlZmluZSBQKHgpIHBpeFsoLSh4 KS0xKSAqIHhzdHJpZGVdCisjZGVmaW5lIFEoeCkgcGl4Wyh4KSAgICAgICogeHN0cmlkZV0KKwor Ly8gbGluZSB0aHJlZS4gdXNlZCBvbmx5IGZvciBkZWJsb2NraW5nIGRlY2lzaW9uCisjZGVmaW5l IFRQNyBwaXhbLTggKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQNiBwaXhbLTcg KiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQNSBwaXhbLTYgKiB4c3RyaWRlICsg MyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQNCBwaXhbLTUgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVd CisjZGVmaW5lIFRQMyBwaXhbLTQgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQ MiBwaXhbLTMgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQMSBwaXhbLTIgKiB4 c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQMCBwaXhbLTEgKiB4c3RyaWRlICsgMyAq IHlzdHJpZGVdCisjZGVmaW5lIFRRMCBwaXhbMCAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisj ZGVmaW5lIFRRMSBwaXhbMSAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRMiBw aXhbMiAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRMyBwaXhbMyAgKiB4c3Ry aWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRNCBwaXhbNCAgKiB4c3RyaWRlICsgMyAqIHlz dHJpZGVdCisjZGVmaW5lIFRRNSBwaXhbNSAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVm aW5lIFRRNiBwaXhbNiAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRNyBwaXhb NyAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQKHgpIHBpeFsoLSh4KS0xKSAq IHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUgVFEoeCkgcGl4Wyh4KSAgICAgICogeHN0 cmlkZSArIDMgKiB5c3RyaWRlXQorCisjZGVmaW5lIEZQMyBwaXhbLTQgKiB4c3RyaWRlICsgMSAq IHlzdHJpZGVdCisjZGVmaW5lIEZQMiBwaXhbLTMgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisj ZGVmaW5lIEZQMSBwaXhbLTIgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZQMCBw aXhbLTEgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZRMCBwaXhbMCAgKiB4c3Ry aWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZRMSBwaXhbMSAgKiB4c3RyaWRlICsgMSAqIHlz dHJpZGVdCisjZGVmaW5lIEZRMiBwaXhbMiAgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVm aW5lIEZRMyBwaXhbMyAgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisKK3N0YXRpYyB2b2lkIEZV TkMobG9vcF9maWx0ZXJfbHVtYV9sYXJnZSkocGl4ZWwgKnBpeCwgY29uc3QgcHRyZGlmZl90IHhz dHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlLCBjb25zdCBpbnQzMl90IHRjLAorICAgIGNv bnN0IHVpbnQ4X3Qgbm9fcCwgY29uc3QgdWludDhfdCBub19xLCBjb25zdCB1aW50OF90IG1heF9s ZW5fcCwgY29uc3QgdWludDhfdCBtYXhfbGVuX3EpCit7CisgICAgZm9yIChpbnQgZCA9IDA7IGQg PCA0OyBkKyspIHsKKyAgICAgICAgY29uc3QgaW50IHA2ID0gUDY7CisgICAgICAgIGNvbnN0IGlu dCBwNSA9IFA1OworICAgICAgICBjb25zdCBpbnQgcDQgPSBQNDsKKyAgICAgICAgY29uc3QgaW50 IHAzID0gUDM7CisgICAgICAgIGNvbnN0IGludCBwMiA9IFAyOworICAgICAgICBjb25zdCBpbnQg cDEgPSBQMTsKKyAgICAgICAgY29uc3QgaW50IHAwID0gUDA7CisgICAgICAgIGNvbnN0IGludCBx MCA9IFEwOworICAgICAgICBjb25zdCBpbnQgcTEgPSBRMTsKKyAgICAgICAgY29uc3QgaW50IHEy ID0gUTI7CisgICAgICAgIGNvbnN0IGludCBxMyA9IFEzOworICAgICAgICBjb25zdCBpbnQgcTQg PSBRNDsKKyAgICAgICAgY29uc3QgaW50IHE1ID0gUTU7CisgICAgICAgIGNvbnN0IGludCBxNiA9 IFE2OworICAgICAgICBpbnQgbTsKKyAgICAgICAgaWYgKG1heF9sZW5fcCA9PSA1ICYmIG1heF9s ZW5fcSA9PSA1KQorICAgICAgICAgICAgbSA9IChwNCArIHAzICsgMiAqIChwMiArIHAxICsgcDAg KyBxMCArIHExICsgcTIpICsgcTMgKyBxNCArIDgpID4+IDQ7CisgICAgICAgIGVsc2UgaWYgKG1h eF9sZW5fcCA9PSBtYXhfbGVuX3EpCisgICAgICAgICAgICBtID0gKHA2ICsgcDUgKyBwNCArIHAz ICsgcDIgKyBwMSArIDIgKiAocDAgKyBxMCkgKyBxMSArIHEyICsgcTMgKyBxNCArIHE1ICsgcTYg KyA4KSA+PiA0OworICAgICAgICBlbHNlIGlmIChtYXhfbGVuX3AgKyBtYXhfbGVuX3EgPT0gMTIp CisgICAgICAgICAgICBtID0gKHA1ICsgcDQgKyBwMyArIHAyICsgMiAqIChwMSArIHAwICsgcTAg KyBxMSkgKyBxMiArIHEzICsgcTQgKyBxNSArIDgpID4+IDQ7CisgICAgICAgIGVsc2UgaWYgKG1h eF9sZW5fcCArIG1heF9sZW5fcSA9PSA4KQorICAgICAgICAgICAgbSA9IChwMyArIHAyICsgcDEg KyBwMCArIHEwICsgcTEgKyBxMiArIHEzICsgNCkgPj4gMzsKKyAgICAgICAgZWxzZSBpZiAobWF4 X2xlbl9xID09IDcpCisgICAgICAgICAgICBtID0gKDIgKiAocDIgKyBwMSArIHAwICsgcTApICsg cDAgKyBwMSArIHExICsgcTIgKyBxMyArIHE0ICsgcTUgKyBxNiArIDgpID4+IDQ7CisgICAgICAg IGVsc2UKKyAgICAgICAgICAgIG0gPSAocDYgKyBwNSArIHA0ICsgcDMgKyBwMiArIHAxICsgMiAq IChxMiArIHExICsgcTAgKyBwMCkgKyBxMCArIHExICsgOCkgPj4gNDsKKyAgICAgICAgaWYgKCFu b19wKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgcmVmcCA9IChQKG1heF9sZW5fcCkgKyBQKG1h eF9sZW5fcCAtIDEpICsgMSkgPj4gMTsKKyAgICAgICAgICAgIGlmIChtYXhfbGVuX3AgPT0gMykg eworICAgICAgICAgICAgICAgIFAwID0gcDAgKyBhdl9jbGlwKCgobSAqIDUzICsgcmVmcCAqIDEx ICsgMzIpID4+IDYpIC0gcDAsIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAg ICAgICAgICAgICBQMSA9IHAxICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnAgKiAzMiArIDMyKSA+ PiA2KSAtIHAxLCAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAg ICAgUDIgPSBwMiArIGF2X2NsaXAoKChtICogMTEgKyByZWZwICogNTMgKyAzMikgPj4gNikgLSBw MiwgLSh0YyAqIDIgPj4gMSksICh0YyAqIDIgPj4gMSkpOworICAgICAgICAgICAgfSBlbHNlIGlm IChtYXhfbGVuX3AgPT0gNSkgeworICAgICAgICAgICAgICAgIFAwID0gcDAgKyBhdl9jbGlwKCgo bSAqIDU4ICsgcmVmcCAqICA2ICsgMzIpID4+IDYpIC0gcDAsIC0odGMgKiA2ID4+IDEpLCAodGMg KiA2ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQMSA9IHAxICsgYXZfY2xpcCgoKG0gKiA0NSAr IHJlZnAgKiAxOSArIDMyKSA+PiA2KSAtIHAxLCAtKHRjICogNSA+PiAxKSwgKHRjICogNSA+PiAx KSk7CisgICAgICAgICAgICAgICAgUDIgPSBwMiArIGF2X2NsaXAoKChtICogMzIgKyByZWZwICog MzIgKyAzMikgPj4gNikgLSBwMiwgLSh0YyAqIDQgPj4gMSksICh0YyAqIDQgPj4gMSkpOworICAg ICAgICAgICAgICAgIFAzID0gcDMgKyBhdl9jbGlwKCgobSAqIDE5ICsgcmVmcCAqIDQ1ICsgMzIp ID4+IDYpIC0gcDMsIC0odGMgKiAzID4+IDEpLCAodGMgKiAzID4+IDEpKTsKKyAgICAgICAgICAg ICAgICBQNCA9IHA0ICsgYXZfY2xpcCgoKG0gKiAgNiArIHJlZnAgKiA1OCArIDMyKSA+PiA2KSAt IHA0LCAtKHRjICogMiA+PiAxKSwgKHRjICogMiA+PiAxKSk7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIFAwID0gcDAgKyBhdl9jbGlwKCgobSAqIDU5ICsgcmVmcCAqICA1 ICsgMzIpID4+IDYpIC0gcDAsIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAg ICAgICAgICAgICBQMSA9IHAxICsgYXZfY2xpcCgoKG0gKiA1MCArIHJlZnAgKiAxNCArIDMyKSA+ PiA2KSAtIHAxLCAtKHRjICogNSA+PiAxKSwgKHRjICogNSA+PiAxKSk7CisgICAgICAgICAgICAg ICAgUDIgPSBwMiArIGF2X2NsaXAoKChtICogNDEgKyByZWZwICogMjMgKyAzMikgPj4gNikgLSBw MiwgLSh0YyAqIDQgPj4gMSksICh0YyAqIDQgPj4gMSkpOworICAgICAgICAgICAgICAgIFAzID0g cDMgKyBhdl9jbGlwKCgobSAqIDMyICsgcmVmcCAqIDMyICsgMzIpID4+IDYpIC0gcDMsIC0odGMg KiAzID4+IDEpLCAodGMgKiAzID4+IDEpKTsKKyAgICAgICAgICAgICAgICBQNCA9IHA0ICsgYXZf Y2xpcCgoKG0gKiAyMyArIHJlZnAgKiA0MSArIDMyKSA+PiA2KSAtIHA0LCAtKHRjICogMiA+PiAx KSwgKHRjICogMiA+PiAxKSk7CisgICAgICAgICAgICAgICAgUDUgPSBwNSArIGF2X2NsaXAoKCht ICogMTQgKyByZWZwICogNTAgKyAzMikgPj4gNikgLSBwNSwgLSh0YyAqIDEgPj4gMSksICh0YyAq IDEgPj4gMSkpOworICAgICAgICAgICAgICAgIFA2ID0gcDYgKyBhdl9jbGlwKCgobSAqICA1ICsg cmVmcCAqIDU5ICsgMzIpID4+IDYpIC0gcDYsIC0odGMgKiAxID4+IDEpLCAodGMgKiAxID4+IDEp KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIW5vX3EpIHsKKyAgICAg ICAgICAgIGNvbnN0IGludCByZWZxID0gKFEobWF4X2xlbl9xKSArIFEobWF4X2xlbl9xIC0gMSkg KyAxKSA+PiAxOworICAgICAgICAgICAgaWYgKG1heF9sZW5fcSA9PSAzKSB7CisgICAgICAgICAg ICAgICAgUTAgPSBxMCArIGF2X2NsaXAoKChtICogNTMgKyByZWZxICogMTEgKyAzMikgPj4gNikg LSBxMCwgIC0odGMgKiA2ID4+IDEpLCAodGMgKiA2ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBR MSA9IHExICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnEgKiAzMiArIDMyKSA+PiA2KSAtIHExLCAg LSh0YyAqIDQgPj4gMSksICh0YyAqIDQgPj4gMSkpOworICAgICAgICAgICAgICAgIFEyID0gcTIg KyBhdl9jbGlwKCgobSAqIDExICsgcmVmcSAqIDUzICsgMzIpID4+IDYpIC0gcTIsICAtKHRjICog MiA+PiAxKSwgKHRjICogMiA+PiAxKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1heF9sZW5f cSA9PSA1KSB7CisgICAgICAgICAgICAgICAgUTAgPSBxMCArIGF2X2NsaXAoKChtICogNTggKyBy ZWZxICogIDYgKyAzMikgPj4gNikgLSBxMCwgLSh0YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkp OworICAgICAgICAgICAgICAgIFExID0gcTEgKyBhdl9jbGlwKCgobSAqIDQ1ICsgcmVmcSAqIDE5 ICsgMzIpID4+IDYpIC0gcTEsIC0odGMgKiA1ID4+IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAg ICAgICAgICAgICBRMiA9IHEyICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnEgKiAzMiArIDMyKSA+ PiA2KSAtIHEyLCAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAg ICAgUTMgPSBxMyArIGF2X2NsaXAoKChtICogMTkgKyByZWZxICogNDUgKyAzMikgPj4gNikgLSBx MywgLSh0YyAqIDMgPj4gMSksICh0YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAgIFE0ID0g cTQgKyBhdl9jbGlwKCgobSAqICA2ICsgcmVmcSAqIDU4ICsgMzIpID4+IDYpIC0gcTQsIC0odGMg KiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgUTAgPSBxMCArIGF2X2NsaXAoKChtICogNTkgKyByZWZxICogIDUgKyAzMikgPj4g NikgLSBxMCwgLSh0YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAg IFExID0gcTEgKyBhdl9jbGlwKCgobSAqIDUwICsgcmVmcSAqIDE0ICsgMzIpID4+IDYpIC0gcTEs IC0odGMgKiA1ID4+IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRMiA9IHEy ICsgYXZfY2xpcCgoKG0gKiA0MSArIHJlZnEgKiAyMyArIDMyKSA+PiA2KSAtIHEyLCAtKHRjICog NCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAgICAgUTMgPSBxMyArIGF2X2Ns aXAoKChtICogMzIgKyByZWZxICogMzIgKyAzMikgPj4gNikgLSBxMywgLSh0YyAqIDMgPj4gMSks ICh0YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAgIFE0ID0gcTQgKyBhdl9jbGlwKCgobSAq IDIzICsgcmVmcSAqIDQxICsgMzIpID4+IDYpIC0gcTQsIC0odGMgKiAyID4+IDEpLCAodGMgKiAy ID4+IDEpKTsKKyAgICAgICAgICAgICAgICBRNSA9IHE1ICsgYXZfY2xpcCgoKG0gKiAxNCArIHJl ZnEgKiA1MCArIDMyKSA+PiA2KSAtIHE1LCAtKHRjICogMSA+PiAxKSwgKHRjICogMSA+PiAxKSk7 CisgICAgICAgICAgICAgICAgUTYgPSBxNiArIGF2X2NsaXAoKChtICogIDUgKyByZWZxICogNTkg KyAzMikgPj4gNikgLSBxNiwgLSh0YyAqIDEgPj4gMSksICh0YyAqIDEgPj4gMSkpOworICAgICAg ICAgICAgfQorCisgICAgICAgIH0KKyAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgfQorfQor CitzdGF0aWMgdm9pZCBGVU5DKGxvb3BfZmlsdGVyX2x1bWFfc3Ryb25nKShwaXhlbCAqcGl4LCBj b25zdCBwdHJkaWZmX3QgeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUsIGNvbnN0IGlu dDMyX3QgdGMsCisgICAgY29uc3QgdWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5vX3EpCit7 CisgICAgY29uc3QgaW50IHRjMiA9IHRjIDw8IDE7CisgICAgY29uc3QgaW50IHRjMyA9IHRjICog MzsKKyAgICBmb3IgKGludCBkID0gMDsgZCA8IDQ7IGQrKykgeworICAgICAgICBjb25zdCBpbnQg cDMgPSBQMzsKKyAgICAgICAgY29uc3QgaW50IHAyID0gUDI7CisgICAgICAgIGNvbnN0IGludCBw MSA9IFAxOworICAgICAgICBjb25zdCBpbnQgcDAgPSBQMDsKKyAgICAgICAgY29uc3QgaW50IHEw ID0gUTA7CisgICAgICAgIGNvbnN0IGludCBxMSA9IFExOworICAgICAgICBjb25zdCBpbnQgcTIg PSBRMjsKKyAgICAgICAgY29uc3QgaW50IHEzID0gUTM7CisgICAgICAgIGlmICghbm9fcCkgewor ICAgICAgICAgICAgUDAgPSBwMCArIGF2X2NsaXAoKChwMiArIDIgKiBwMSArIDIgKiBwMCArIDIg KiBxMCArIHExICsgNCkgPj4gMykgLSBwMCwgLXRjMywgdGMzKTsKKyAgICAgICAgICAgIFAxID0g cDEgKyBhdl9jbGlwKCgocDIgKyBwMSArIHAwICsgcTAgKyAyKSA+PiAyKSAtIHAxLCAtdGMyLCB0 YzIpOworICAgICAgICAgICAgUDIgPSBwMiArIGF2X2NsaXAoKCgyICogcDMgKyAzICogcDIgKyBw MSArIHAwICsgcTAgKyA0KSA+PiAzKSAtIHAyLCAtdGMsIHRjKTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoIW5vX3EpIHsKKyAgICAgICAgICAgIFEwID0gcTAgKyBhdl9jbGlwKCgocDEgKyAyICog cDAgKyAyICogcTAgKyAyICogcTEgKyBxMiArIDQpID4+IDMpIC0gcTAsIC10YzMsIHRjMyk7Cisg ICAgICAgICAgICBRMSA9IHExICsgYXZfY2xpcCgoKHAwICsgcTAgKyBxMSArIHEyICsgMikgPj4g MikgLSBxMSwgLXRjMiwgdGMyKTsKKyAgICAgICAgICAgIFEyID0gcTIgKyBhdl9jbGlwKCgoMiAq IHEzICsgMyAqIHEyICsgcTEgKyBxMCArIHAwICsgNCkgPj4gMykgLSBxMiwgLXRjLCB0Yyk7Cisg ICAgICAgIH0KKyAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCBGVU5DKGxvb3BfZmlsdGVyX2x1bWFfd2VhaykocGl4ZWwgKnBpeCwgY29uc3QgcHRyZGlmZl90 IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlLAorICAgIGNvbnN0IGludDMyX3QgdGMs IGNvbnN0IGludDMyX3QgYmV0YSwgY29uc3QgdWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5v X3EsIGNvbnN0IGludCBuZF9wLCBjb25zdCBpbnQgbmRfcSkKK3sKKyAgICBjb25zdCBpbnQgdGNf MiA9IHRjID4+IDE7CisgICAgZm9yIChpbnQgZCA9IDA7IGQgPCA0OyBkKyspIHsKKyAgICAgICAg Y29uc3QgaW50IHAyID0gUDI7CisgICAgICAgIGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICBj b25zdCBpbnQgcDAgPSBQMDsKKyAgICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgIGNv bnN0IGludCBxMSA9IFExOworICAgICAgICBjb25zdCBpbnQgcTIgPSBRMjsKKyAgICAgICAgaW50 IGRlbHRhMCA9ICg5ICogKHEwIC0gcDApIC0gMyAqIChxMSAtIHAxKSArIDgpID4+IDQ7CisgICAg ICAgIGlmIChhYnMoZGVsdGEwKSA8IDEwICogdGMpIHsKKyAgICAgICAgICAgIGRlbHRhMCA9IGF2 X2NsaXAoZGVsdGEwLCAtdGMsIHRjKTsKKyAgICAgICAgICAgIGlmICghbm9fcCkKKyAgICAgICAg ICAgICAgICBQMCA9IGF2X2NsaXBfcGl4ZWwocDAgKyBkZWx0YTApOworICAgICAgICAgICAgaWYg KCFub19xKQorICAgICAgICAgICAgICAgIFEwID0gYXZfY2xpcF9waXhlbChxMCAtIGRlbHRhMCk7 CisgICAgICAgICAgICBpZiAoIW5vX3AgJiYgbmRfcCA+IDEpIHsKKyAgICAgICAgICAgICAgICBj b25zdCBpbnQgZGVsdGFwMSA9IGF2X2NsaXAoKCgocDIgKyBwMCArIDEpID4+IDEpIC0gcDEgKyBk ZWx0YTApID4+IDEsIC10Y18yLCB0Y18yKTsKKyAgICAgICAgICAgICAgICBQMSA9IGF2X2NsaXBf cGl4ZWwocDEgKyBkZWx0YXAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbm9f cSAmJiBuZF9xID4gMSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBkZWx0YXExID0gYXZf Y2xpcCgoKChxMiArIHEwICsgMSkgPj4gMSkgLSBxMSAtIGRlbHRhMCkgPj4gMSwgLXRjXzIsIHRj XzIpOworICAgICAgICAgICAgICAgIFExID0gYXZfY2xpcF9waXhlbChxMSArIGRlbHRhcTEpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBpeCArPSB5c3RyaWRlOworICAgIH0K KworfQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9sdW1hKSh1aW50OF90KiBf cGl4LCBwdHJkaWZmX3QgX3hzdHJpZGUsIHB0cmRpZmZfdCBfeXN0cmlkZSwKKyAgICBjb25zdCBp bnQzMl90ICpfYmV0YSwgY29uc3QgaW50MzJfdCAqX3RjLCBjb25zdCB1aW50OF90ICpfbm9fcCwg Y29uc3QgdWludDhfdCAqX25vX3EsCisgICAgY29uc3QgdWludDhfdCAqX21heF9sZW5fcCwgY29u c3QgdWludDhfdCAqX21heF9sZW5fcSwgaW50IGhvcl9jdHVfZWRnZSkKK3sKKyAgICBjb25zdCBw dHJkaWZmX3QgeHN0cmlkZSA9IF94c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICBjb25zdCBw dHJkaWZmX3QgeXN0cmlkZSA9IF95c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIHBpeGVsKiBwaXggICAgICA9IChwaXhl bCopX3BpeCArIGkgKiA0ICogeXN0cmlkZTsKKyAgICAgICAgY29uc3QgaW50IGRwMCAgID0gYWJz KFAyIC0gMiAqIFAxICsgUDApOworICAgICAgICBjb25zdCBpbnQgZHEwICAgPSBhYnMoUTIgLSAy ICogUTEgKyBRMCk7CisgICAgICAgIGNvbnN0IGludCBkcDMgICA9IGFicyhUUDIgLSAyICogVFAx ICsgVFAwKTsKKyAgICAgICAgY29uc3QgaW50IGRxMyAgID0gYWJzKFRRMiAtIDIgKiBUUTEgKyBU UTApOworICAgICAgICBjb25zdCBpbnQgZDAgICAgPSBkcDAgKyBkcTA7CisgICAgICAgIGNvbnN0 IGludCBkMyAgICA9IGRwMyArIGRxMzsKKyNpZiBCSVRfREVQVEggPCAxMAorICAgICAgICBjb25z dCBpbnQgdGMgICAgPSAoX3RjW2ldICsgKDEgPDwgKDkgLSBCSVRfREVQVEgpKSkgPj4gKDEwIC0g QklUX0RFUFRIKTsKKyNlbHNlCisgICAgICAgIGNvbnN0IGludCB0YyAgICA9IF90Y1tpXSA8PCAo QklUX0RFUFRIIC0gMTApOworI2VuZGlmCisgICAgICAgIGNvbnN0IGludCB0YzI1ICA9ICgodGMg KiA1ICsgMSkgPj4gMSk7CisKKyAgICAgICAgY29uc3QgaW50IG5vX3AgID0gX25vX3BbaV07Cisg ICAgICAgIGNvbnN0IGludCBub19xICA9IF9ub19xW2ldOworCisgICAgICAgIGludCBtYXhfbGVu X3AgICA9IF9tYXhfbGVuX3BbaV07CisgICAgICAgIGludCBtYXhfbGVuX3EgICA9IF9tYXhfbGVu X3FbaV07CisKKyAgICAgICAgY29uc3QgaW50IGxhcmdlX3AgPSAobWF4X2xlbl9wID4gMyAmJiAh aG9yX2N0dV9lZGdlKTsKKyAgICAgICAgY29uc3QgaW50IGxhcmdlX3EgPSBtYXhfbGVuX3EgPiAz OworICAgICAgICBjb25zdCBpbnQgYmV0YSA9IF9iZXRhW2ldIDw8IEJJVF9ERVBUSCAtIDg7CisK KyAgICAgICAgY29uc3QgaW50IGJldGFfMyA9IGJldGEgPj4gMzsKKyAgICAgICAgY29uc3QgaW50 IGJldGFfMiA9IGJldGEgPj4gMjsKKworICAgICAgICBpZiAoIXRjKQorICAgICAgICAgICAgY29u dGludWU7CisKKyAgICAgICAgaWYgKGxhcmdlX3AgfHwgbGFyZ2VfcSkgeworICAgICAgICAgICAg Y29uc3QgaW50IGRwMGwgPSBsYXJnZV9wID8gKChkcDAgKyBhYnMoUDUgLSAyICogUDQgKyBQMykg KyAxKSA+PiAxKSA6IGRwMDsKKyAgICAgICAgICAgIGNvbnN0IGludCBkcTBsID0gbGFyZ2VfcSA/ ICgoZHEwICsgYWJzKFE1IC0gMiAqIFE0ICsgUTMpICsgMSkgPj4gMSkgOiBkcTA7CisgICAgICAg ICAgICBjb25zdCBpbnQgZHAzbCA9IGxhcmdlX3AgPyAoKGRwMyArIGFicyhUUDUgLSAyICogVFA0 ICsgVFAzKSArIDEpID4+IDEpIDogZHAzOworICAgICAgICAgICAgY29uc3QgaW50IGRxM2wgPSBs YXJnZV9xID8gKChkcTMgKyBhYnMoVFE1IC0gMiAqIFRRNCArIFRRMykgKyAxKSA+PiAxKSA6IGRx MzsKKyAgICAgICAgICAgIGNvbnN0IGludCBkMGwgPSBkcDBsICsgZHEwbDsKKyAgICAgICAgICAg IGNvbnN0IGludCBkM2wgPSBkcDNsICsgZHEzbDsKKyAgICAgICAgICAgIGNvbnN0IGludCBiZXRh NTMgPSBiZXRhICogMyA+PiA1OworICAgICAgICAgICAgY29uc3QgaW50IGJldGFfNCA9IGJldGEg Pj4gNDsKKyAgICAgICAgICAgIG1heF9sZW5fcCA9IGxhcmdlX3AgPyBtYXhfbGVuX3AgOiAzOwor ICAgICAgICAgICAgbWF4X2xlbl9xID0gbGFyZ2VfcSA/IG1heF9sZW5fcSA6IDM7CisKKyAgICAg ICAgICAgIGlmIChkMGwgKyBkM2wgPCBiZXRhKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50 IHNwMGwgPSBhYnMoUDMgLSBQMCkgKyAobWF4X2xlbl9wID09IDcgPyBhYnMoUDcgLSBQNiAtIFA1 ICsgUDQpIDogMCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNxMGwgPSBhYnMoUTAgLSBR MykgKyAobWF4X2xlbl9xID09IDcgPyBhYnMoUTQgLSBRNSAtIFE2ICsgUTcpIDogMCk7CisgICAg ICAgICAgICAgICAgY29uc3QgaW50IHNwM2wgPSBhYnMoVFAzIC0gVFAwKSArIChtYXhfbGVuX3Ag PT0gNyA/IGFicyhUUDcgLSBUUDYgLSBUUDUgKyBUUDQpIDogMCk7CisgICAgICAgICAgICAgICAg Y29uc3QgaW50IHNxM2wgPSBhYnMoVFEwIC0gVFEzKSArIChtYXhfbGVuX3EgPT0gNyA/IGFicyhU UTQgLSBUUTUgLSBUUTYgKyBUUTcpIDogMCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNw MCA9IGxhcmdlX3AgPyAoKHNwMGwgKyBhYnMoUDMgLSAgIFAobWF4X2xlbl9wKSkgKyAxKSA+PiAx KSA6IHNwMGw7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNwMyA9IGxhcmdlX3AgPyAoKHNw M2wgKyBhYnMoVFAzIC0gVFAobWF4X2xlbl9wKSkgKyAxKSA+PiAxKSA6IHNwM2w7CisgICAgICAg ICAgICAgICAgY29uc3QgaW50IHNxMCA9IGxhcmdlX3EgPyAoKHNxMGwgKyBhYnMoUTMgLSAgIFEo bWF4X2xlbl9xKSkgKyAxKSA+PiAxKSA6IHNxMGw7CisgICAgICAgICAgICAgICAgY29uc3QgaW50 IHNxMyA9IGxhcmdlX3EgPyAoKHNxM2wgKyBhYnMoVFEzIC0gVFEobWF4X2xlbl9xKSkgKyAxKSA+ PiAxKSA6IHNxM2w7CisgICAgICAgICAgICAgICAgaWYgKHNwMCArIHNxMCA8IGJldGE1MyAmJiBh YnMoUDAgLSBRMCkgPCB0YzI1ICYmCisgICAgICAgICAgICAgICAgICAgIHNwMyArIHNxMyA8IGJl dGE1MyAmJiBhYnMoVFAwIC0gVFEwKSA8IHRjMjUgJiYKKyAgICAgICAgICAgICAgICAgICAgKGQw bCA8PCAxKSA8IGJldGFfNCAmJiAoZDNsIDw8IDEpIDwgYmV0YV80KSB7CisgICAgICAgICAgICAg ICAgICAgIEZVTkMobG9vcF9maWx0ZXJfbHVtYV9sYXJnZSkocGl4LCB4c3RyaWRlLCB5c3RyaWRl LCB0Yywgbm9fcCwgbm9fcSwgbWF4X2xlbl9wLCBtYXhfbGVuX3EpOworICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgaWYgKGQwICsgZDMgPCBiZXRhKSB7CisgICAgICAgICAgICBpZiAobWF4X2xl bl9wID4gMiAmJiBtYXhfbGVuX3EgPiAyICYmCisgICAgICAgICAgICAgICAgYWJzKFAzIC0gUDAp ICsgYWJzKFEzIC0gUTApIDwgYmV0YV8zICYmIGFicyhQMCAtIFEwKSA8IHRjMjUgJiYKKyAgICAg ICAgICAgICAgICBhYnMoVFAzIC0gVFAwKSArIGFicyhUUTMgLSBUUTApIDwgYmV0YV8zICYmIGFi cyhUUDAgLSBUUTApIDwgdGMyNSAmJgorICAgICAgICAgICAgICAgIChkMCA8PCAxKSA8IGJldGFf MiAmJiAoZDMgPDwgMSkgPCBiZXRhXzIpIHsKKyAgICAgICAgICAgICAgICBGVU5DKGxvb3BfZmls dGVyX2x1bWFfc3Ryb25nKShwaXgsIHhzdHJpZGUsIHlzdHJpZGUsIHRjLCBub19wLCBub19xKTsK KyAgICAgICAgICAgIH0gZWxzZSB7IC8vIHdlYWsgZmlsdGVyaW5nCisgICAgICAgICAgICAgICAg aW50IG5kX3AgPSAxOworICAgICAgICAgICAgICAgIGludCBuZF9xID0gMTsKKyAgICAgICAgICAg ICAgICBpZiAobWF4X2xlbl9wID4gMSAmJiBtYXhfbGVuX3EgPiAxKSB7CisgICAgICAgICAgICAg ICAgICAgIGlmIChkcDAgKyBkcDMgPCAoKGJldGEgKyAoYmV0YSA+PiAxKSkgPj4gMykpCisgICAg ICAgICAgICAgICAgICAgICAgICBuZF9wID0gMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRx MCArIGRxMyA8ICgoYmV0YSArIChiZXRhID4+IDEpKSA+PiAzKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgIG5kX3EgPSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGVU5D KGxvb3BfZmlsdGVyX2x1bWFfd2VhaykocGl4LCB4c3RyaWRlLCB5c3RyaWRlLCB0YywgYmV0YSwg bm9fcCwgbm9fcSwgbmRfcCwgbmRfcSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMobG9vcF9maWx0ZXJfY2hyb21hX3N0cm9uZykocGl4ZWwg KnBpeCwgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlLAor ICAgIGNvbnN0IGludCBzaXplLCBjb25zdCBpbnQzMl90IHRjLCBjb25zdCB1aW50OF90IG5vX3As IGNvbnN0IHVpbnQ4X3Qgbm9fcSkKK3sKKyAgICBmb3IgKGludCBkID0gMDsgZCA8IHNpemU7IGQr KykgeworICAgICAgICBjb25zdCBpbnQgcDMgPSBQMzsKKyAgICAgICAgY29uc3QgaW50IHAyID0g UDI7CisgICAgICAgIGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICBjb25zdCBpbnQgcDAgPSBQ MDsKKyAgICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgIGNvbnN0IGludCBxMSA9IFEx OworICAgICAgICBjb25zdCBpbnQgcTIgPSBRMjsKKyAgICAgICAgY29uc3QgaW50IHEzID0gUTM7 CisgICAgICAgIGlmICghbm9fcCkgeworICAgICAgICAgICAgUDAgPSBhdl9jbGlwKChwMyArIHAy ICsgcDEgKyAyICogcDAgKyBxMCArIHExICsgcTIgKyA0KSA+PiAzLCBwMCAtIHRjLCBwMCArIHRj KTsKKyAgICAgICAgICAgIFAxID0gYXZfY2xpcCgoMiAqIHAzICsgcDIgKyAyICogcDEgKyBwMCAr IHEwICsgcTEgKyA0KSA+PiAzLCBwMSAtIHRjLCBwMSArIHRjKTsKKyAgICAgICAgICAgIFAyID0g YXZfY2xpcCgoMyAqIHAzICsgMiAqIHAyICsgcDEgKyBwMCArIHEwICsgNCkgPj4gMywgcDIgLSB0 YywgcDIgKyB0YyApOworICAgICAgICB9CisgICAgICAgIGlmICghbm9fcSkgeworICAgICAgICAg ICAgUTAgPSBhdl9jbGlwKChwMiArIHAxICsgcDAgKyAyICogcTAgKyBxMSArIHEyICsgcTMgKyA0 KSA+PiAzLCBxMCAtIHRjLCBxMCArIHRjKTsKKyAgICAgICAgICAgIFExID0gYXZfY2xpcCgocDEg KyBwMCArIHEwICsgMiAqIHExICsgcTIgKyAyICogcTMgKyA0KSA+PiAzLCBxMSAtIHRjLCBxMSAr IHRjKTsKKyAgICAgICAgICAgIFEyID0gYXZfY2xpcCgocDAgKyBxMCArIHExICsgMiAqIHEyICsg MyAqIHEzICsgNCkgPj4gMywgcTIgLSB0YywgcTIgKyB0Yyk7CisgICAgICAgIH0KKyAgICAgICAg cGl4ICs9IHlzdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKGxvb3BfZmlsdGVy X2Nocm9tYV9zdHJvbmdfb25lX3NpZGUpKHBpeGVsICpwaXgsIGNvbnN0IHB0cmRpZmZfdCB4c3Ry aWRlLCBjb25zdCBwdHJkaWZmX3QgeXN0cmlkZSwKKyAgICBjb25zdCBpbnQgc2l6ZSwgY29uc3Qg aW50MzJfdCB0YywgY29uc3QgdWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5vX3EpCit7Cisg ICAgZm9yIChpbnQgZCA9IDA7IGQgPCBzaXplOyBkKyspIHsKKyAgICAgICAgY29uc3QgaW50IHAx ID0gUDE7CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAgICBjb25zdCBpbnQgcTAg PSBRMDsKKyAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAgIGNvbnN0IGludCBxMiA9 IFEyOworICAgICAgICBjb25zdCBpbnQgcTMgPSBRMzsKKyAgICAgICAgaWYgKCFub19wKSB7Cisg ICAgICAgICAgICBQMCA9IGF2X2NsaXAoKDMgKiBwMSArIDIgKiBwMCArIHEwICsgcTEgKyBxMiAr IDQpID4+IDMsIHAwIC0gdGMsIHAwICsgdGMpOworICAgICAgICB9CisgICAgICAgIGlmICghbm9f cSkgeworICAgICAgICAgICAgUTAgPSBhdl9jbGlwKCgyICogcDEgKyBwMCArIDIgKiBxMCArIHEx ICsgcTIgKyBxMyArIDQpID4+IDMsIHEwIC0gdGMsIHEwICsgdGMpOworICAgICAgICAgICAgUTEg PSBhdl9jbGlwKChwMSArIHAwICsgcTAgKyAyICogcTEgKyBxMiArIDIgKiBxMyArIDQpID4+IDMs IHExIC0gdGMsIHExICsgdGMpOworICAgICAgICAgICAgUTIgPSBhdl9jbGlwKChwMCArIHEwICsg cTEgKyAyICogcTIgKyAzICogcTMgKyA0KSA+PiAzLCBxMiAtIHRjLCBxMiArIHRjKTsKKyAgICAg ICAgfQorICAgICAgICBwaXggKz0geXN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZV TkMobG9vcF9maWx0ZXJfY2hyb21hX3dlYWspKHBpeGVsICpwaXgsIGNvbnN0IHB0cmRpZmZfdCB4 c3RyaWRlLCBjb25zdCBwdHJkaWZmX3QgeXN0cmlkZSwKKyAgICBjb25zdCBpbnQgc2l6ZSwgY29u c3QgaW50MzJfdCB0YywgY29uc3QgdWludDhfdCBub19wLCBjb25zdCB1aW50OF90IG5vX3EpCit7 CisgICAgZm9yIChpbnQgZCA9IDA7IGQgPCBzaXplOyBkKyspIHsKKyAgICAgICAgaW50IGRlbHRh MDsKKyAgICAgICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAgIGNvbnN0IGludCBwMCA9IFAw OworICAgICAgICBjb25zdCBpbnQgcTAgPSBRMDsKKyAgICAgICAgY29uc3QgaW50IHExID0gUTE7 CisgICAgICAgIGRlbHRhMCA9IGF2X2NsaXAoKCgocTAgLSBwMCkgKiA0KSArIHAxIC0gcTEgKyA0 KSA+PiAzLCAtdGMsIHRjKTsKKyAgICAgICAgaWYgKCFub19wKQorICAgICAgICAgICAgUDAgPSBh dl9jbGlwX3BpeGVsKHAwICsgZGVsdGEwKTsKKyAgICAgICAgaWYgKCFub19xKQorICAgICAgICAg ICAgUTAgPSBhdl9jbGlwX3BpeGVsKHEwIC0gZGVsdGEwKTsKKyAgICAgICAgcGl4ICs9IHlzdHJp ZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9jaHJvbWEp KHVpbnQ4X3QgKl9waXgsIGNvbnN0IHB0cmRpZmZfdCAgX3hzdHJpZGUsIGNvbnN0IHB0cmRpZmZf dCBfeXN0cmlkZSwKKyAgICBjb25zdCBpbnQzMl90ICpfYmV0YSwgY29uc3QgaW50MzJfdCAqX3Rj LCBjb25zdCB1aW50OF90ICpfbm9fcCwgY29uc3QgdWludDhfdCAqX25vX3EsCisgICAgY29uc3Qg dWludDhfdCAqX21heF9sZW5fcCwgY29uc3QgdWludDhfdCAqX21heF9sZW5fcSwgY29uc3QgaW50 IHNoaWZ0KQoreworICAgIGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlID0gX3hzdHJpZGUgLyBzaXpl b2YocGl4ZWwpOworICAgIGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlID0gX3lzdHJpZGUgLyBzaXpl b2YocGl4ZWwpOworICAgIGNvbnN0IGludCBzaXplICAgICAgICAgID0gc2hpZnQgPyAyIDogNDsK KyAgICBjb25zdCBpbnQgZW5kICAgICAgICAgICA9IDggLyBzaXplOyAgICAgICAgIC8vIDggc2Ft cGxlcyBhIGxvb3AKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW5kOyBpKyspIHsKKyAgICAg ICAgcGl4ZWwgKnBpeCAgICAgICAgICA9IChwaXhlbCAqKV9waXggKyBpICogc2l6ZSAqIHlzdHJp ZGU7CisgICAgICAgIGNvbnN0IHVpbnQ4X3Qgbm9fcCAgPSBfbm9fcFtpXTsKKyAgICAgICAgY29u c3QgdWludDhfdCBub19xICA9IF9ub19xW2ldOworICAgICAgICBjb25zdCBpbnQgYmV0YSAgICAg ID0gX2JldGFbaV0gPDwgKEJJVF9ERVBUSCAtIDgpOworICAgICAgICBjb25zdCBpbnQgYmV0YV8z ICAgID0gYmV0YSA+PiAzOworICAgICAgICBjb25zdCBpbnQgYmV0YV8yICAgID0gYmV0YSA+PiAy OworCisjaWYgQklUX0RFUFRIIDwgMTAKKyAgICAgICAgY29uc3QgaW50IHRjID0gKF90Y1tpXSAr ICgxIDw8ICg5IC0gQklUX0RFUFRIKSkpID4+ICgxMCAtIEJJVF9ERVBUSCk7CisjZWxzZQorICAg ICAgICBjb25zdCBpbnQgdGMgPSBfdGNbaV0gPDwgKEJJVF9ERVBUSCAtIDEwKTsKKyNlbmRpZgor ICAgICAgICBjb25zdCBpbnQgdGMyNSAgICAgID0gKCh0YyAqIDUgKyAxKSA+PiAxKTsKKworICAg ICAgICB1aW50OF90IG1heF9sZW5fcCAgID0gX21heF9sZW5fcFtpXTsKKyAgICAgICAgdWludDhf dCBtYXhfbGVuX3EgICA9IF9tYXhfbGVuX3FbaV07CisKKyAgICAgICAgaWYgKCFtYXhfbGVuX3Ag fHwgIW1heF9sZW5fcSB8fCAhdGMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBp ZiAobWF4X2xlbl9xID09IDMpeworICAgICAgICAgICAgY29uc3QgaW50IHAxbiAgPSBzaGlmdCA/ IEZQMSA6IFRQMTsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMm4gPSBtYXhfbGVuX3AgPT0gMSA/ IHAxbiA6IChzaGlmdCA/IEZQMiA6IFRQMik7CisgICAgICAgICAgICBjb25zdCBpbnQgcDBuICA9 IHNoaWZ0ID8gRlAwIDogVFAwOworICAgICAgICAgICAgY29uc3QgaW50IHEwbiAgPSBzaGlmdCA/ IEZRMCA6IFRRMDsKKyAgICAgICAgICAgIGNvbnN0IGludCBxMW4gID0gc2hpZnQgPyBGUTEgOiBU UTE7CisgICAgICAgICAgICBjb25zdCBpbnQgcTJuICA9IHNoaWZ0ID8gRlEyIDogVFEyOworICAg ICAgICAgICAgY29uc3QgaW50IHAzICAgPSBtYXhfbGVuX3AgPT0gMSA/IFAxIDogUDM7CisgICAg ICAgICAgICBjb25zdCBpbnQgcDIgICA9IG1heF9sZW5fcCA9PSAxID8gUDEgOiBQMjsKKyAgICAg ICAgICAgIGNvbnN0IGludCBwMSAgID0gUDE7CisgICAgICAgICAgICBjb25zdCBpbnQgcDAgICA9 IFAwOworICAgICAgICAgICAgY29uc3QgaW50IGRwMCAgPSBhYnMocDIgLSAyICogcDEgKyBwMCk7 CisgICAgICAgICAgICBjb25zdCBpbnQgZHEwICA9IGFicyhRMiAtIDIgKiBRMSArIFEwKTsKKwor ICAgICAgICAgICAgY29uc3QgaW50IGRwMSA9IGFicyhwMm4gLSAyICogcDFuICsgcDBuKTsKKyAg ICAgICAgICAgIGNvbnN0IGludCBkcTEgPSBhYnMocTJuIC0gMiAqIHExbiArIHEwbik7CisgICAg ICAgICAgICBjb25zdCBpbnQgZDAgID0gZHAwICsgZHEwOworICAgICAgICAgICAgY29uc3QgaW50 IGQxICA9IGRwMSArIGRxMTsKKworICAgICAgICAgICAgaWYgKGQwICsgZDEgPCBiZXRhKSB7Cisg ICAgICAgICAgICAgICAgY29uc3QgaW50IHAzbiA9IG1heF9sZW5fcCA9PSAxID8gcDFuIDogKHNo aWZ0ID8gRlAzIDogVFAzKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcTNuID0gc2hpZnQg PyBGUTMgOiBUUTM7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGRzYW0wID0gKGQwIDw8IDEp IDwgYmV0YV8yICYmIChhYnMocDMgLSBwMCkgKyBhYnMoUTAgLSBRMykgICAgIDwgYmV0YV8zKSAm JgorICAgICAgICAgICAgICAgICAgICBhYnMocDAgLSBRMCkgICA8IHRjMjU7CisgICAgICAgICAg ICAgICAgY29uc3QgaW50IGRzYW0xID0gKGQxIDw8IDEpIDwgYmV0YV8yICYmIChhYnMocDNuIC0g cDBuKSArIGFicyhxMG4gLSBxM24pIDwgYmV0YV8zKSAmJgorICAgICAgICAgICAgICAgICAgICBh YnMocDBuIC0gcTBuKSA8IHRjMjU7CisgICAgICAgICAgICAgICAgaWYgKCFkc2FtMCB8fCAhZHNh bTEpCisgICAgICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDE7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9 IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF4X2xlbl9wID09 IDMgJiYgbWF4X2xlbl9xID09IDMpCisgICAgICAgICAgICBGVU5DKGxvb3BfZmlsdGVyX2Nocm9t YV9zdHJvbmcpKHBpeCwgeHN0cmlkZSwgeXN0cmlkZSwgc2l6ZSwgdGMsIG5vX3AsIG5vX3EpOwor ICAgICAgICBlbHNlIGlmIChtYXhfbGVuX3EgPT0gMykKKyAgICAgICAgICAgIEZVTkMobG9vcF9m aWx0ZXJfY2hyb21hX3N0cm9uZ19vbmVfc2lkZSkocGl4LCB4c3RyaWRlLCB5c3RyaWRlLCBzaXpl LCB0Yywgbm9fcCwgbm9fcSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEZVTkMobG9vcF9m aWx0ZXJfY2hyb21hX3dlYWspKHBpeCwgeHN0cmlkZSwgeXN0cmlkZSwgc2l6ZSwgdGMsIG5vX3As IG5vX3EpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyh2dmNfaF9sb29wX2ZpbHRlcl9j aHJvbWEpKHVpbnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlkZSwKKyAgICBjb25zdCBpbnQzMl90 ICpiZXRhLCBjb25zdCBpbnQzMl90ICp0YywgY29uc3QgdWludDhfdCAqbm9fcCwgY29uc3QgdWlu dDhfdCAqbm9fcSwKKyAgICBjb25zdCB1aW50OF90ICptYXhfbGVuX3AsIGNvbnN0IHVpbnQ4X3Qg Km1heF9sZW5fcSwgaW50IHNoaWZ0KQoreworICAgIEZVTkModnZjX2xvb3BfZmlsdGVyX2Nocm9t YSkocGl4LCBzdHJpZGUsIHNpemVvZihwaXhlbCksIGJldGEsIHRjLAorICAgICAgICBub19wLCBu b19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgc2hpZnQpOworfQorCitzdGF0aWMgdm9pZCBGVU5D KHZ2Y192X2xvb3BfZmlsdGVyX2Nocm9tYSkodWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRl LAorICAgIGNvbnN0IGludDMyX3QgKmJldGEsIGNvbnN0IGludDMyX3QgKnRjLCBjb25zdCB1aW50 OF90ICpub19wLCBjb25zdCB1aW50OF90ICpub19xLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1heF9s ZW5fcCwgY29uc3QgdWludDhfdCAqbWF4X2xlbl9xLCBpbnQgc2hpZnQpCit7CisgICAgRlVOQyh2 dmNfbG9vcF9maWx0ZXJfY2hyb21hKShwaXgsIHNpemVvZihwaXhlbCksIHN0cmlkZSwgYmV0YSwg dGMsCisgICAgICAgIG5vX3AsIG5vX3EsICBtYXhfbGVuX3AsIG1heF9sZW5fcSwgc2hpZnQpOwor fQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y19oX2xvb3BfZmlsdGVyX2x1bWEpKHVpbnQ4X3QgKnBp eCwgcHRyZGlmZl90IHN0cmlkZSwKKyAgICBjb25zdCBpbnQzMl90ICpiZXRhLCBjb25zdCBpbnQz Ml90ICp0YywgY29uc3QgdWludDhfdCAqbm9fcCwgY29uc3QgdWludDhfdCAqbm9fcSwKKyAgICBj b25zdCB1aW50OF90ICptYXhfbGVuX3AsIGNvbnN0IHVpbnQ4X3QgKm1heF9sZW5fcSwgaW50IGhv cl9jdHVfZWRnZSkKK3sKKyAgICBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9sdW1hKShwaXgsIHN0cmlk ZSwgc2l6ZW9mKHBpeGVsKSwgYmV0YSwgdGMsCisgICAgICAgIG5vX3AsIG5vX3EsIG1heF9sZW5f cCwgbWF4X2xlbl9xLCBob3JfY3R1X2VkZ2UpOworfQorCitzdGF0aWMgdm9pZCBGVU5DKHZ2Y192 X2xvb3BfZmlsdGVyX2x1bWEpKHVpbnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlkZSwKKyAgICBj b25zdCBpbnQzMl90ICpiZXRhLCBjb25zdCBpbnQzMl90ICp0YywgY29uc3QgdWludDhfdCAqbm9f cCwgY29uc3QgdWludDhfdCAqbm9fcSwKKyAgICBjb25zdCB1aW50OF90ICptYXhfbGVuX3AsIGNv bnN0IHVpbnQ4X3QgKm1heF9sZW5fcSwgaW50IGhvcl9jdHVfZWRnZSkKK3sKKyAgICBGVU5DKHZ2 Y19sb29wX2ZpbHRlcl9sdW1hKShwaXgsIHNpemVvZihwaXhlbCksIHN0cmlkZSwgYmV0YSwgdGMs CisgICAgICAgIG5vX3AsIG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9xLCBob3JfY3R1X2VkZ2Up OworfQorCitzdGF0aWMgaW50IEZVTkModnZjX2xvb3BfbGFkZl9sZXZlbCkoY29uc3QgdWludDhf dCAqX3BpeCwgY29uc3QgcHRyZGlmZl90IF94c3RyaWRlLCBjb25zdCBwdHJkaWZmX3QgX3lzdHJp ZGUpCit7CisgICAgY29uc3QgcGl4ZWwgKnBpeCAgICAgICAgPSAocGl4ZWwgKilfcGl4OworICAg IGNvbnN0IHB0cmRpZmZfdCB4c3RyaWRlID0gX3hzdHJpZGUgLyBzaXplb2YocGl4ZWwpOworICAg IGNvbnN0IHB0cmRpZmZfdCB5c3RyaWRlID0gX3lzdHJpZGUgLyBzaXplb2YocGl4ZWwpOworICAg IHJldHVybiAoUDAgKyBUUDAgKyBRMCArIFRRMCkgPj4gMjsKK30KKworc3RhdGljIGludCBGVU5D KHZ2Y19oX2xvb3BfbGFkZl9sZXZlbCkoY29uc3QgdWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3Ry aWRlKQoreworICAgIHJldHVybiBGVU5DKHZ2Y19sb29wX2xhZGZfbGV2ZWwpKHBpeCwgc3RyaWRl LCBzaXplb2YocGl4ZWwpKTsKK30KKworc3RhdGljIGludCBGVU5DKHZ2Y192X2xvb3BfbGFkZl9s ZXZlbCkoY29uc3QgdWludDhfdCAqcGl4LCBwdHJkaWZmX3Qgc3RyaWRlKQoreworICAgIHJldHVy biBGVU5DKHZ2Y19sb29wX2xhZGZfbGV2ZWwpKHBpeCwgc2l6ZW9mKHBpeGVsKSwgc3RyaWRlKTsK K30KKworI3VuZGVmIFA3CisjdW5kZWYgUDYKKyN1bmRlZiBQNQorI3VuZGVmIFA0CisjdW5kZWYg UDMKKyN1bmRlZiBQMgorI3VuZGVmIFAxCisjdW5kZWYgUDAKKyN1bmRlZiBRMAorI3VuZGVmIFEx CisjdW5kZWYgUTIKKyN1bmRlZiBRMworI3VuZGVmIFE0CisjdW5kZWYgUTUKKyN1bmRlZiBRNgor I3VuZGVmIFE3CisKKyN1bmRlZiBUUDcKKyN1bmRlZiBUUDYKKyN1bmRlZiBUUDUKKyN1bmRlZiBU UDQKKyN1bmRlZiBUUDMKKyN1bmRlZiBUUDIKKyN1bmRlZiBUUDEKKyN1bmRlZiBUUDAKKyN1bmRl ZiBUUTAKKyN1bmRlZiBUUTEKKyN1bmRlZiBUUTIKKyN1bmRlZiBUUTMKKyN1bmRlZiBUUTQKKyN1 bmRlZiBUUTUKKyN1bmRlZiBUUTYKKyN1bmRlZiBUUTcKKworc3RhdGljIHZvaWQgRlVOQyhmZl92 dmNfbG1jc19kc3BfaW5pdCkoVlZDTE1DU0RTUENvbnRleHQgKmNvbnN0IGxtY3MpCit7CisgICAg bG1jcy0+ZmlsdGVyID0gRlVOQyhsbWNzX2ZpbHRlcl9sdW1hKTsKK30KKworc3RhdGljIHZvaWQg RlVOQyhmZl92dmNfbGZfZHNwX2luaXQpKFZWQ0xGRFNQQ29udGV4dCAqY29uc3QgbGYpCit7Cisg ICAgbGYtPmxhZGZfbGV2ZWxbMF0gICAgICA9IEZVTkModnZjX2hfbG9vcF9sYWRmX2xldmVsKTsK KyAgICBsZi0+bGFkZl9sZXZlbFsxXSAgICAgID0gRlVOQyh2dmNfdl9sb29wX2xhZGZfbGV2ZWwp OworICAgIGxmLT5maWx0ZXJfbHVtYVswXSAgICAgPSBGVU5DKHZ2Y19oX2xvb3BfZmlsdGVyX2x1 bWEpOworICAgIGxmLT5maWx0ZXJfbHVtYVsxXSAgICAgPSBGVU5DKHZ2Y192X2xvb3BfZmlsdGVy X2x1bWEpOworICAgIGxmLT5maWx0ZXJfY2hyb21hWzBdICAgPSBGVU5DKHZ2Y19oX2xvb3BfZmls dGVyX2Nocm9tYSk7CisgICAgbGYtPmZpbHRlcl9jaHJvbWFbMV0gICA9IEZVTkModnZjX3ZfbG9v cF9maWx0ZXJfY2hyb21hKTsKK30KKworc3RhdGljIHZvaWQgRlVOQyhmZl92dmNfc2FvX2RzcF9p bml0KShWVkNTQU9EU1BDb250ZXh0ICpjb25zdCBzYW8pCit7CisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBGRl9BUlJBWV9FTEVNUyhzYW8tPmJhbmRfZmlsdGVyKTsgaSsrKQorICAgICAgICBzYW8t PmJhbmRfZmlsdGVyW2ldID0gRlVOQyhzYW9fYmFuZF9maWx0ZXIpOworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoc2FvLT5lZGdlX2ZpbHRlcik7IGkrKykKKyAgICAgICAg c2FvLT5lZGdlX2ZpbHRlcltpXSA9IEZVTkMoc2FvX2VkZ2VfZmlsdGVyKTsKKyAgICBzYW8tPmVk Z2VfcmVzdG9yZVswXSA9IEZVTkMoc2FvX2VkZ2VfcmVzdG9yZV8wKTsKKyAgICBzYW8tPmVkZ2Vf cmVzdG9yZVsxXSA9IEZVTkMoc2FvX2VkZ2VfcmVzdG9yZV8xKTsKK30KKworc3RhdGljIHZvaWQg RlVOQyhmZl92dmNfYWxmX2RzcF9pbml0KShWVkNBTEZEU1BDb250ZXh0ICpjb25zdCBhbGYpCit7 CisgICAgYWxmLT5maWx0ZXJbTFVNQV0gICAgPSBGVU5DKGFsZl9maWx0ZXJfbHVtYSk7CisgICAg YWxmLT5maWx0ZXJbQ0hST01BXSAgPSBGVU5DKGFsZl9maWx0ZXJfY2hyb21hKTsKKyAgICBhbGYt PmZpbHRlcl9jYyAgICAgICA9IEZVTkMoYWxmX2ZpbHRlcl9jYyk7CisgICAgYWxmLT5jbGFzc2lm eSAgICAgICAgPSBGVU5DKGFsZl9jbGFzc2lmeSk7CisgICAgYWxmLT5yZWNvbl9jb2VmZl9hbmRf Y2xpcCA9IEZVTkMoYWxmX3JlY29uX2NvZWZmX2FuZF9jbGlwKTsKK30KLS0gCjIuMjUuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVs IG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcv bWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5r IGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLgo=