From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 8EDWEfl05mPdRy8AWB0awg (envelope-from ) for ; Fri, 10 Feb 2023 11:46:49 -0500 Received: by simark.ca (Postfix, from userid 112) id 44DB31E221; Fri, 10 Feb 2023 11:46:49 -0500 (EST) Authentication-Results: simark.ca; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=uxYXYbGh; dkim-atps=neutral X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-8.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 0AB331E110 for ; Fri, 10 Feb 2023 11:46:48 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 86555385841A for ; Fri, 10 Feb 2023 16:46:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 86555385841A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1676047607; bh=3gOgcCw7lXMoZDNlImFKbwAVdTCjH5e402c/ZJVey1Q=; h=To:CC:Subject:Date:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=uxYXYbGhT7Wo4H58ld4wYNUQlTcjelNytIgCs01minsTEU2n0inea2GO7aPyO3oGJ tGrXNd1QyLM7jFKQyDvBp3/VKd8VwnxrYugSmEU8gIrbApeGrmoFBLpI+5Ss6K0DVb qAGBio0UBaqn7Hb58ItxQdQbHkJoXphjJAsiGbgU= Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 8C6DA385840D for ; Fri, 10 Feb 2023 16:46:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8C6DA385840D Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31AGiGtF014424; Fri, 10 Feb 2023 16:46:20 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2103.outbound.protection.outlook.com [104.47.58.103]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3nnspyg1tn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Feb 2023 16:46:19 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QbMfdGmpldknxi+LSRi7e/6fM2lFdZDIQ65Yu6uaTMvdTbQD/Sx9egEn9Z+Kv6gBD/lAiu+TcFUDsc9S6wlXEJhuc+ube+MHZ+OVkSfGUkJ2HlJzUxzKReSGGX1/CS5BLlbNggFJUp1JrbhY85Ef2c69ouziB7JKDuN5VptYtLTrMrHyZbft/o/8JYBo/rLYonqVuQ4EEZ6qjEQgXVhEVozI8kHY9Qypn+kg3rnSU0uf6nUskENWBYbVxFu1NLUm4brcby2h6v6GlGF9o+J23+CUdvzQ7IXdQoH2PhJ/3XpH3ScVCbxeVMBE3Eolmsy/+TYuH0iW794mpgbAwSFh5A== 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=V2ScMz3RY8NAKOCOPAVrkP25jUT1CdRZzOqasGeCviY=; b=ChiaJ9ESroNrxnzpUUp6StB2CXO1K7mgi/h2axFKgcL0mjWoUWP6szO5rD53VGkgT+1eukH0qTkQBs3rYGXG/74knSquTZ2cjXkOG/1X9deCkCnD2FULHlwHhI88eNax1FK8aDZN5zwWDGym9izWxk40eeKoMHSJhGenWnMlqXLIUa0bHY2vBJAUt2qR/RNTG5JsDoRNhofnqtu5bNwrbMvmnW+F3Y0YjJIjW8aVRk1Ro7Tq2pa0/wfwaQVTlu60qzXzr9zPhQxsPCksJhGCrwZW7gaPYQYItxIESUMNgVfYa8Pp3T/0q5xLeDfS+/irnMuYjMsZW9f0MJnBCUZMYA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ibm.com; dmarc=pass action=none header.from=ibm.com; dkim=pass header.d=ibm.com; arc=none Received: from DM6PR15MB3545.namprd15.prod.outlook.com (2603:10b6:5:1f6::27) by BLAPR15MB3746.namprd15.prod.outlook.com (2603:10b6:208:27e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.21; Fri, 10 Feb 2023 16:46:13 +0000 Received: from DM6PR15MB3545.namprd15.prod.outlook.com ([fe80::c5e6:712b:9f50:b51d]) by DM6PR15MB3545.namprd15.prod.outlook.com ([fe80::c5e6:712b:9f50:b51d%3]) with mapi id 15.20.6086.021; Fri, 10 Feb 2023 16:46:13 +0000 To: Ulrich Weigand , "simark@simark.ca" , "gdb-patches@sourceware.org" CC: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Topic: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Thread-Index: AQHY6DximDPpCqTL9kGyFvcEZokFBq4jlIiAgBFljYeAAA2HgIAIORaygAMrdQCACMPAdYADi8KAgAAbf+aAABUYgIAADhDtgAjHItiAAgYnAIACq/WKgAVsGwCABC6K8oAAZcYAgAq8WQ+AADoMgIAFnB/fgAUxEICABkBkK4AWHiQAgAFvY+iAAawUgIADF3ySgAshzACACvn7HoAI6B4pgAADGXOAALszAIABIz5JgAU9kgCAARgy1IACBimAgAL6kLSAAAcDtw== Date: Fri, 10 Feb 2023 16:46:13 +0000 Message-ID: References: <09f2433177505899c9bd31347af9b43118e4f890.camel@de.ibm.com> <8b7c91369d53c1ace668ff03f4d819a66f5e64e6.camel@de.ibm.com> In-Reply-To: Accept-Language: en-IN, en-US Content-Language: en-IN X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR15MB3545:EE_|BLAPR15MB3746:EE_ x-ms-office365-filtering-correlation-id: e85e765c-fca6-42f0-52c1-08db0b865225 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: UeQ2ucva5i12WCNNeFrJ02B9axMzvaHn2FALKNqVux860JB3nQQOVHukBfo3vK8tKFAxo6FczeEMA9UueroWumlNPs4GONVc4YP5HMdC7jOiI3u0Z89DBdLB5/PTrP6MTWaIHPsXL04LbBn2hK7hFmGmIZQBarANrsLkAcTPi76YN049U3bdwC2ovG1Vm2nqNkCRGU4+xOwtR7/bdjBX5+/VP0xus7VtFy1A1CvvJkMlB29bka0rnia/BrBtv5rxSK6JYYmQ8GzIbe1kVaREeTq/3uMvAZlK7Nn8IQTCkmzjHWSXqn0LgjCPg8Y4AVBGyvv/FgBnzOy9mu0ccbhGo877XnMqcDC7C9qQFNSUdNaMKpRGq2VH0p+Pj+6c2crpx2aUuO68bXhkFkbVo3MoSKnh1vz7EOyBXKt10kLF6vvSFct6arWdb+Jc4MbtoVk7jgZQpNWPnknjKKGruvZTVD9MRKYOcxuXXhKkyaazfR9zh/etFKhxXBE/h6jsfEFF2QKO4LJLqLLCWt0OkieXqsV9Ry3z4iOKL+v1gkgC+cqd+Aa1g2DPwxZ9pXXPxGc4ev05Kov3peV6uL1VmBax3acRlQChThU7yqColjXDpXcLQ4p3/PflfdhUr2iuUhR/XbhGpN7it2prVkvPNwSY8ChMlUHjD2aBNzS3yd2H2ZKzEgmdx2bJZF2Le9Z+lN61/WJKwdw7mqrzZjXoipaayA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR15MB3545.namprd15.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(136003)(39860400002)(396003)(346002)(366004)(376002)(451199018)(86362001)(33656002)(38070700005)(99936003)(122000001)(38100700002)(52536014)(66556008)(64756008)(66476007)(66946007)(66446008)(41300700001)(8936002)(316002)(110136005)(8676002)(4326008)(76116006)(91956017)(5660300002)(55016003)(30864003)(83380400001)(2906002)(478600001)(71200400001)(7696005)(186003)(2940100002)(53546011)(6506007)(9686003)(19627405001)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?LFfUS1AvEPgSFqNfnrjnQEc6kn3VzmI/AtcFNM8iuxkLJBYGWSDuPVHEbr63?= =?us-ascii?Q?Prami4a/b4MDTomhddw4OpQ6zZ1F2WryGp+wT6px2pET9RztloEbG3gh/r6F?= =?us-ascii?Q?CKCuCoi6do7ZWnRqOewlpTtLwHRBQg2llVBAnQYA0VQkJCJWpuMMSfiSgF1p?= =?us-ascii?Q?IioiUwWOFwq1kEMYWteGMHfQgf+T9LeEYlp1HEqMpKQqIxAfoSsPdD3q/v19?= =?us-ascii?Q?CaaMdlN8f6CT8ivBEclVGS7Fw/BO11E+0l5vPqyoQq6Gs9FS5njW/a0+GoVC?= =?us-ascii?Q?6qiQfYH/Q3MMvGxfu+SEsSUWCLX6deg61Ar0i8Lpn8TBbYV4Y0ccqJYRaz5a?= =?us-ascii?Q?hMshXM922Od/NhfJE2GVR3BnW743IBzym9psfUsnBDDVFa1sXuimol+Jmm8U?= =?us-ascii?Q?F29m1RkT3tLES3ZKa3MW/DDqPQiG3alERf8K35gjUsDwm3SnL9PYTRq7kxiZ?= =?us-ascii?Q?nowoLBEsYyfEFtw7SHWBIfnVEdwoaze5pVqoeJFg4Fk6bNflSyQCk8luuATj?= =?us-ascii?Q?MS/Xd2JZXyGVl1rfI49PTQ7/nF7CIoTPWeVUzfJ/zjNS/WbqEUBKnX+ICscf?= =?us-ascii?Q?6FVMyQ7CO52R5ylzKCKc+RdFiy6RxvjdI3b3rrdRRnLnTNQTnBV+U5hRgdtQ?= =?us-ascii?Q?9AXHRs5VF7jYBsLxzT36WQVCqMW/Dt8HlS7+2V4+M80LJM96s4YVYcw5d1Zr?= =?us-ascii?Q?rIY4RoaQaIx1LZdNuobNsHlHG5bJBUXeG4iOQSkQAuywYdLqnxrsiBntU0HQ?= =?us-ascii?Q?VEMRoVguGNMt7UBgAjNZvF4ZHd1Zq0ThmywfhC9vkao/yUG0bkLZmD9r8OyH?= =?us-ascii?Q?lXARVEU2xiT8v9ctJZuZ9vfc+s2hHxOrOtdjGF+f2vtyfDHB1db2Py+5kjEC?= =?us-ascii?Q?N2WUU+pMljIApuEsYpRgZpo02LsSUslkmiCey9lw7NeXqc7u46XM5YMFPYPp?= =?us-ascii?Q?DWHUKuISI/FtG+iYOuPJBBQD2XhDFVB7+oplzp8Ih5ggKedVU/GV0cnDmIZL?= =?us-ascii?Q?xvpKaoI1yTcGjoltFsvRagcR2d+fUmAKAv6KHlJUaiIKERJlAFNetAxjn6wK?= =?us-ascii?Q?eblSVF8nYMpoKhld5HZZHqo6DobBRS2tUxzNqA+GBPIr3iZC5Fn7ZXFhdZfs?= =?us-ascii?Q?3LitWBE3fFpyTVo/JaYFW6EWJUXrdY3FBUiDsrTBJYa+K2EDSzs0EBD8n+8b?= =?us-ascii?Q?J5vD5Q5uefxofhM0O1l2Ky7mLte6Kz/ILNgsRblaG2DQzCuk9ORGdH7ouk0m?= =?us-ascii?Q?ncWd8FN0PcSs2G//Cmk0cxYyOtcjUkO+gc7+HTbEiKeqpdeuh83zTwlB7qIB?= =?us-ascii?Q?rMLWq6ttcmymtzoennbC9yn1zFUfLtlYKbSMZgzFBEX2lKd7TnDh6x4VNHwc?= =?us-ascii?Q?UbRUqCw3lrKYjqQeriqKg03KHvZpZVwyeLs+qVHcfgFXsQYcYfztuFE5wuAx?= =?us-ascii?Q?5/myikCYAJd+uJ01zCMl60qwS406FgMA20D1cT0vC6H7jLfynvjl/mw1EeCL?= =?us-ascii?Q?c8WqMPLeFlPlfr7KqApgEB4b5QfE0EhPTlbGdkBbmb8n96X2LjwhE2dQTp0Z?= =?us-ascii?Q?39Q1qglnCKTgWGTNyysNfvrYQpnr/H7oHp5uSDLpBAEElfbuw0z4tKRdWc/y?= =?us-ascii?Q?PIm9vrB1sIGyRgUpKJEtdOUK+M9iyDiiTo9A7/nyJiup?= Content-Type: multipart/mixed; boundary="_004_DM6PR15MB35452A06EF382E9262DBB9EAD6DE9DM6PR15MB3545namp_" MIME-Version: 1.0 X-OriginatorOrg: ibm.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR15MB3545.namprd15.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e85e765c-fca6-42f0-52c1-08db0b865225 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Feb 2023 16:46:13.4289 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: fcf67057-50c9-4ad4-98f3-ffca64add9e9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: KEPYvvTcEh75L14fWTn2vRVJMInv/L7t4jyMijIpopjdOsHug7+MsZsThX0N5VZMLx5htOab3juhhnB/jy5kiQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR15MB3746 X-Proofpoint-GUID: gnhWf7VZsWLCMcj7fLCN5vwTPIaYIo5_ X-Proofpoint-ORIG-GUID: gnhWf7VZsWLCMcj7fLCN5vwTPIaYIo5_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-10_11,2023-02-09_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 adultscore=0 mlxlogscore=999 impostorscore=0 bulkscore=0 phishscore=0 spamscore=0 mlxscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302100138 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Aditya Kamath1 via Gdb-patches Reply-To: Aditya Kamath1 Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" --_004_DM6PR15MB35452A06EF382E9262DBB9EAD6DE9DM6PR15MB3545namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Ulrich, Tom and community, Please find attached the patch. {See: 0001-Fix-multi-thread-debug-bug-in-AI= X.patch} The previous email could not get to the community mailing list as it had a = size constraint. So, the bug is fixed, and outputs are the same as pasted below in this emai= l. In the patch commit message I have provided specific and detailed explainat= ion of every change as much as possible. So honestly there was a bug left to fix in the previous email of the patch = while we followed the child in particular. I figured it out as I was testin= g more deeply. Kindly see section "Solution Part 1: - " in the patch commit= message where I have explained the same. Kindly suggest me for changes if needed. Otherwise kindly let me know if th= is is ready for commit. >Now if the application is >theraded and we only pass ptid_t (user_current_pid) to switch_to_thread () >it will crash as main thread looks different or is ptid_t (pid, 0, tid). > This part I don't quite understand yet - how/why does it crash? Kindly check the section "Solution Part 2: - " of the patch, where I have e= xplained this. >Similarly, I agree that everything may currently "work" without >adding the equivalent change to pdc_write_memory, but most likely >this is simply because that callback may just not be used very much. Yes, I agree. We have the changed user_current_pid variable to thread so t= hat we always switch in the right context. Kindly let me know if it is alri= ght and any changes are necessary here. >Can you come up with a >message that maybe starts out with the high-level change >and goes from there into the specific >details.... Thanks! Sure, so this patch has it. Kindly suggest me if we can do this better. Have a nice day ahead. Thanks and regards, Aditya. ---------------------------------------------------------------------------= ----- Code:- #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else { child =3D fork (); if (child > 0) printf ("I am child \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; pthread_t thread[NUM_THREADS]; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { int res; res =3D pthread_create (&thread[i], NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) { sleep (15); } return 0; } ------------------------------------------------- Output with patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [New inferior 2 (process 15335754)] [New inferior 3 (process 8061404)] I am parent I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. [Switching to Thread 1] 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info sharedlibrary >From To Syms Read Shared Object Library 0xd05bc124 0xd05bf194 Yes (*) /usr/lib/libpthreads.a(shr_comm.o) 0xd05bb240 0xd05bb9a1 Yes (*) /usr/lib/libcrypt.a(shr.o) 0xd0576180 0xd05ba731 Yes (*) /usr/lib/libpthread.a(shr_xpg5.o) 0xd0100e00 0xd0575123 Yes (*) /usr/lib/libc.a(shr.o) (*): Shared library is missing debugging information. (gdb) info threads Id Target Id Frame * 1.1 Thread 1 (tid 30671243, running) 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 Thread 258 (tid 34406781, running) thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 1.3 Thread 515 (tid 36307315, running) thread_function (arg=3Dwarning: (= Internal error: pc 0x0 in read in psymtab, but not in symtab.) 0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 2.1 process 15335754 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) 3.1 process 8061404 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 15335754] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 15335754)] #0 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) ----------------------------------------------------------------------- Output without patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 1] [New Thread 258] [New Thread 515] [New inferior 2 (process 11731200)] I am parent [New inferior 3 (process 16843200)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 11731200] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 11731200)] #0 0xd0594fc8 in ?? () (gdb) info threads Id Target Id Frame 1.1 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.3 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.4 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) * 2.1 process 11731200 0xd0594fc8 in ?? () 3.1 process 16843200 0xd0594fc8 in ?? () (gdb) info sharedlibrary warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? >From To Syms Read Shared Object Library No /usr/lib/libpthreads.a(shr_comm.o) No /usr/lib/libcrypt.a(shr.o) No /usr/lib/libpthread.a(shr_xpg5.o) No /usr/lib/libc.a(shr.o) (gdb) ________________________________ From: Aditya Kamath1 Sent: 10 February 2023 22:03 To: Ulrich Weigand ; simark@simark.ca ; gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Hi Ulrich, Tom and community, Please find attached the patch. {See: 0001-Fix-multi-thread-debug-bug-in-AI= X.patch} Also find attached a document that I have proposed as a commit message. {Se= e: Fix Multi Thread debug fix for AIX.pdf}.. This same document is used in = the commit message of this patch. So the bug is fixed and test cases run alright. Kindly check the sample out= put of the same pasted below this email. In the document I have provided specific and detailed explaination of every= change as much as possible. So honestly there was a bug left to fix in the previous email of the patch = while we followed the child in particular. I figured it out as I was testin= g more deeply. Kindly see section "Solution Part 1: - " where I have explai= ned the same. Kindly suggest me for changes if needed. Otherwise kindly let me know if th= is is ready for commit. >Previously we used switch_to_thread ().. Now if the application is >theraded and we only pass ptid_t (user_current_pid) to switch_to_thread () >it will crash as main thread looks different or is ptid_t (pid, 0, tid). > This part I don't quite understand yet - how/why does it crash? Kindly check "Solution Part 2: - " of the document, where I have explained = this. >Similarly, I agree that everything may currently "work" without >adding the equivalent change to pdc_write_memory, but most likely >this is simply because that callback may just not be used very much. Yes, I agree. We have the changed user_current_pid variable to thread so t= hat we always switch in the right context. Kindly let me know if it is alri= ght and any changes are necessary here. >Can you come up with a >message that maybe starts out with the high-level change >(along the lines of "update aix-thread.c to handle threads in >multiple inferiors"), and goes from there into the specific >details (aix_thread_variables structure, handling only a >single inferior per sync_threadlists invocation, solib fixes >for multiple inferiors, ...)? Thanks! Sure, so the pdf attached in this email has it. Kindly suggest me if we can= do this better. Have a nice day ahead. Thanks and regards, Aditya. ---------------------------------------------------------------------------= ----- Code:- #include #include #include #include #include pthread_barrier_t barrier; #define NUM_THREADS 2 void * thread_function (void *arg) { /* This ensures that the breakpoint is only hit after both threads are created, so the test can always switch to the non-event thread when the breakpoint triggers. */ pthread_barrier_wait (&barrier); pid_t child; child =3D fork (); if (child > 0) printf ("I am parent \n"); else { child =3D fork (); if (child > 0) printf ("I am child \n"); else printf ("I am grandchild \n"); } while (1); /* break here */ } int main (void) { int i; pthread_t thread[NUM_THREADS]; alarm (300); pthread_barrier_init (&barrier, NULL, NUM_THREADS); for (i =3D 0; i < NUM_THREADS; i++) { int res; res =3D pthread_create (&thread[i], NULL, thread_function, NULL); assert (res =3D=3D 0); } while (1) { sleep (15); } return 0; } ------------------------------------------------- Output with patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 258] [New Thread 515] [New inferior 2 (process 15335754)] [New inferior 3 (process 8061404)] I am parent I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. [Switching to Thread 1] 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) info sharedlibrary >From To Syms Read Shared Object Library 0xd05bc124 0xd05bf194 Yes (*) /usr/lib/libpthreads.a(shr_comm.o) 0xd05bb240 0xd05bb9a1 Yes (*) /usr/lib/libcrypt.a(shr.o) 0xd0576180 0xd05ba731 Yes (*) /usr/lib/libpthread.a(shr_xpg5.o) 0xd0100e00 0xd0575123 Yes (*) /usr/lib/libc.a(shr.o) (*): Shared library is missing debugging information. (gdb) info threads Id Target Id Frame * 1.1 Thread 1 (tid 30671243, running) 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 Thread 258 (tid 34406781, running) thread_function (arg=3D0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 1.3 Thread 515 (tid 36307315, running) thread_function (arg=3Dwarning: (= Internal error: pc 0x0 in read in psymtab, but not in symtab.) 0x0) at /home/aditya/gdb_tests/ultimate-multi-thread-fork.c:32 2.1 process 15335754 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) 3.1 process 8061404 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 15335754] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 15335754)] #0 0xd0594fc8 in _sigsetmask () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) ----------------------------------------------------------------------- Output without patch:- Reading symbols from /home/aditya/gdb_tests/ultimate-multi-thread-fork... (gdb) set detach-on-fork off (gdb) r Starting program: /home/aditya/gdb_tests/ultimate-multi-thread-fork [New Thread 1] [New Thread 258] [New Thread 515] [New inferior 2 (process 11731200)] I am parent [New inferior 3 (process 16843200)] I am parent ^C Thread 1.1 received signal SIGINT, Interrupt. 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) (gdb) inferior 2 [Switching to inferior 2 [process 11731200] (/home/aditya/gdb_tests/ultimat= e-multi-thread-fork)] [Switching to thread 2.1 (process 11731200)] #0 0xd0594fc8 in ?? () (gdb) info threads Id Target Id Frame 1.1 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.2 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.3 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) 1.4 process 15270316 0xd0595fb0 in _p_nsleep () from /usr/lib/libpthread.a(shr_xpg5.o) * 2.1 process 11731200 0xd0594fc8 in ?? () 3.1 process 16843200 0xd0594fc8 in ?? () (gdb) info sharedlibrary warning: "/usr/lib/libpthreads.a": member "shr_comm.o" missing. warning: "/usr/lib/libcrypt.a": member "shr.o" missing. warning: "/usr/lib/libpthread.a": member "shr_xpg5.o" missing. warning: "/usr/lib/libc.a": member "shr.o" missing. warning: Could not load shared library symbols for 4 libraries, e.g. /usr/l= ib/libpthreads.a(shr_comm.o). Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? >From To Syms Read Shared Object Library No /usr/lib/libpthreads.a(shr_comm.o) No /usr/lib/libcrypt.a(shr.o) No /usr/lib/libpthread.a(shr_xpg5.o) No /usr/lib/libc.a(shr.o) (gdb) ________________________________ From: Ulrich Weigand Sent: 09 February 2023 00:14 To: simark@simark.ca ; Aditya Kamath1 ; gdb-patches@sourceware.org Cc: Sangamesh Mallayya Subject: Re: [PATCH] 0001-Fix-multi-thread-debug-bug-in-AIX.patch Aditya Kamath1 wrote: >>This seems unrelated to the rest of the changes at first glance. >>Why is this necessary? > >So, when we need to be in the right context when we read memory. Before >coming into the target wait, we switch_to_no_thread () due to which our >inferior_ptid is set to null. Our target_memory needs the correct >inferior_ptid. Also, in case we don't have a ptid_t (pid) and the >application is threaded we need the inferior_ptid to be set correctly >like shown in the patch. Understood. >Previously we used switch_to_thread ().. Now if the application is >theraded and we only pass ptid_t (user_current_pid) to switch_to_thread () >it will crash as main thread looks different or is ptid_t (pid, 0, tid). This part I don't quite understand yet - how/why does it crash? >>By comparison, the Linux version of this in proc-service.c also >>switches the current inferior and address space: > > scoped_restore_current_inferior restore_inferior; > > set_current_inferior (ph->thread->inf); > > scoped_restore_current_program_space restore_current_progspace; > > set_current_program_space (ph->thread->inf->pspace); > > scoped_restore save_inferior_ptid =3D make_scoped_restore (&inferior_pt= id); > > inferior_ptid =3D ph->thread->ptid; >> so we should probably do the same for consistency. >So, kindly allow me to disagree with you on this. What is happening is in >inferior.c in do_target_wait1 () we call switch_to_inferior_no_thread ().. [snip] >Here we already set the correct current inferior and program space to >the same thing as that if we set in pdc_read_memory like linux. >So, it does not make any difference to add the changes like linux does Well, it does look like if you entered the callback in this particular context, the inferior may have already been set up correctly. However, in theory the callback could also be called in different contexts, and just as a precaution it would be preferable to have it always work correctly. The semantics of the callback is to read memory of a particular process as identified via the pthdb_user_t argument, and we should write the routine so that it always does what's needed to implement that semantics correctly. >Secondly, things work if we do not do the same for pdc_write_memory. >I have not seen anything not work. So, I don't think it is good to >add it there. What say?? Similarly, I agree that everything may currently "work" without adding the equivalent change to pdc_write_memory, but most likely this is simply because that callback may just not be used very much. But as a precaution, and to accommodate potential future changes e.g. in the libpthdebug.a library, if would be preferable to implement the semantics correctly. (Also, it just looks surprising to see the read and write implementation differ when there is no apparent reason why that should be the case.) >>This looks unnecessarily complicated. Isn't this just > > *g++ =3D tp; > >This I have changed. The code now looks like: >+ for (thread_info *tp : all_threads (proc_target, ptid_t (pid))) >+ { >+ *g =3D tp; >+ *g++; >+ } Which is weird, as *g++ dereferences g for no reason. This should simply be: for (thread_info *tp : all_threads (proc_target, ptid_t (pid))) *g++ =3D tp; >As far as the check gptid.is_pid () is concerned, I will suggest we >keep it there. If cmp_result is > 0 and we have a main process swap >to create a thread. Rest is same in the loop. The reason being handling >pi and gi variables becomes complex otherwise. When this swap happens, >we need to increment both pi and gi.. Because we have taken care of the >main threads in both pthread library and GDB. And this for loop is >executed only once. So, the first event is main process being >pthreaded. Once the swap happens pi and gi become one and since >gcount =3D pcount =3D 1 we exit the for loop. Thread addition events comes >after this. Hmm, handling the initial switch of a single PID-only thread to the PID/TID-style ptid_t separately before still seems a bit clearer to me. But in the end your proposed code looks correct now so I'd be fine with it as is, if you prefer. Except for the few things mentioned above, this now looks ready to be committed to me. However, I'm not sure the commit message fully describes the latest version of the patch, after we've gone through all those iterations ... Can you come up with a message that maybe starts out with the high-level change (along the lines of "update aix-thread.c to handle threads in multiple inferiors"), and goes from there into the specific details (aix_thread_variables structure, handling only a single inferior per sync_threadlists invocation, solib fixes for multiple inferiors, ...)? Thanks! Bye, Ulrich --_004_DM6PR15MB35452A06EF382E9262DBB9EAD6DE9DM6PR15MB3545namp_ Content-Type: application/octet-stream; name="0001-Fix-multi-thread-debug-bug-in-AIX.patch" Content-Description: 0001-Fix-multi-thread-debug-bug-in-AIX.patch Content-Disposition: attachment; filename="0001-Fix-multi-thread-debug-bug-in-AIX.patch"; size=44777; creation-date="Fri, 10 Feb 2023 16:42:50 GMT"; modification-date="Fri, 10 Feb 2023 16:43:48 GMT" Content-Transfer-Encoding: base64 RnJvbSBhZTJmNDgxMmQ1Y2Y1NjFhYzI0YmJkNTFjZmRhYTUzMmM3M2VhOTAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGl0eWEgVmlkeWFkaGFyIEthbWF0aCA8QWRpdHlhLkthbWF0 aDFAaWJtLmNvbT4KRGF0ZTogRnJpLCAxMCBGZWIgMjAyMyAwOTozNjoxMSAtMDYwMApTdWJqZWN0 OiBbUEFUQ0hdIEZpeCBNdWx0aSBUaHJlYWQgZGVidWcgZml4IGZvciBBSVgKTUlNRS1WZXJzaW9u OiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJh bnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoZSBidWc6LSBJbiB0aGUgcmVjZW50IGNvbW1pdCA5OGVk MjRmYjM1ZDg5ZWIyMDE3OWVkZjZjMTJmNTk5YzdhOWUyMjhlIHRoZXJlIGlzIGEgY2hhbmdlIGlu IGFpeC10aHJlYWQuYyBmaWxlIHRoYXQgY2hhbmdlcyDigKjigKgKCnN0YXRpY19jYXN0PGFpeF90 aHJlYWRfaW5mbyAqPiBpbiBnZGIgdG8gZ2RiOjpjaGVja2VkX3N0YXRpY19jYXN0PGFpeF90aHJl YWRfaW5mbyAqPuKAqOKAqAoKQUlYIGZvbGtzIHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiB0aHVz IHdpbGwgbm90IGJlIGFibGUgdG8gZGVidWcgbXVsdGkgdGhyZWFkIHByb2dyYW1zIGFzIGEgcmVz dWx0IG9mIGl0LiDigKjigKhUaGUgZXJyb3IgaW4gQUlYIGlzIGFzIGZvbGxvd3M6IC0g4oCo4oCo aW50ZXJuYWwgZXJyb3I6IGNoZWNrZWRfc3RhdGljX2Nhc3Q6IEFzc2VydGlvbiBgcmVzdWx0ISA9 IG51bGxwdHInIGZhaWxlZC4KClRoZSByb290IGNhdXNlIG9mIHRoZSBpc3N1ZTotICBUaGUgcHJp dmF0ZSBkYXRhIHdhcyBub3Qgc2V0IGZvciB0aGUgZmlyc3QgdGhyZWFkIG9yIHRoZSBtYWluIHRo cmVhZCBvZiBhIHByb2Nlc3MuIEluIEFJWCB3aGVuIHdlIHJ1biBhbiDigJxpbmZvIHRocmVhZHPi gJ0gY29tbWFuZCwgd2Ugc2hvd2VkIG1haW4gcHJvY2VzcyBhcyDigJxwcm9jZXNzIDxwaWQ+4oCd IHdpdGhvdXQgcHJpdmF0ZSBkYXRhIHNldCBhbmQgYWRkZWQgYSBuZXcgdGhyZWFkIFRocmVhZDxU aWQ+IHJlcHJlc2VudGluZyB0aGUgc2FtZSB3aXRoIHByaXZhdGUgc2V0LiBXaGVuIHdlIGl0ZXJh dGVfb3Zlcl90aHJlYWRzICgpIHdlIGNhbGwgZ2V0X2FpeF90aHJlYWRfaW5mbyAoKS4gVGhpcyBs ZWFkcyB0byB0aGUgY3Jhc2ggYXMgd2UgaGFkIHRoZSBtYWluIHByb2Nlc3MgdGhyZWFkIOKAnHBy b2Nlc3MgPHBpZD7igJ0gd2l0aCBubyBwcml2YXRlIGRhdGEuIEhlbmNlIHRoZSBjaGVja2VkIHN0 YXRpYyBjYXN0IHdpbGwgbm90IGFsbG93IHVzIHRvIGRlYnVnIGFueSBmdXJ0aGVyIHdoaWNoIGlz IHJpZ2h0bHkgc28gYXMgd2UgaGFkIGEgdGhyZWFkIHdpdGggbm8gcHJpdmF0ZSBkYXRhLgoKV2hh dCBzaG91bGQgYmUgdGhlIGZpeDogLSBSZW1vdmluZyB0aGUgbWFpbiBwcm9jZXNzIHRocmVhZCBp LmUuIOKAnHByb2Nlc3MgPHBpZD4g4oCcd2FzIHRoZSBmaXJzdCBwcm9wb3NlZCBzb2x1dGlvbiBh cyB0aGUg4oCcVGhyZWFkIDx0aWQ+4oCdIHJlcHJlc2VudGluZyB0aGUgc2FtZSBhbHJlYWR5IGV4 aXN0cyB3aXRoIHByaXZhdGUgZGF0YSBzZXQuIFRoaXMgd2FzIGhhcHBlbmluZyBpbiB0aGUgc3lu Y190aHJlYWRsaXN0cyAoKSBjb2RlIG9mIEFJWC4KClNvbHV0aW9uIFBhcnQgMTogLQoKV2h5IHRo ZSBjaGFuZ2U/CgpUaGUgZGVsZXRlX3RocmVhZCAoKSB3aXRoIHRoZSBjbXBfcmVzdWx0ID4gMCBi bG9jayBvZiB0aGUgZm9yIGxvb3AgaW4gdGhlIHN5bmNfdGhyZWFkbGlzdHMgKCkgZnVuY3Rpb24g d2hpY2ggYXBwbGllcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwdGhyZWFkIGFuZCBHREIg dGhyZWFkbGlzdCwgd2lsbCBmYWlsIHRvIGRlbGV0ZSB0aGUgbWFpbiBwcm9jZXNzIHRocmVhZC4g VGhlIHJlYXNvbiBpcyB0aGF0IGl0IOKAnHByb2Nlc3MgPHBpZD7igJ0gaXMgdGhlIGN1cnJlbnQg cHJvY2VzcyBhbmQgdGh1cyBHREIgY29yZSB3aWxsIG5vdCBkZWxldGUgaXQgZGVzcGl0ZSB3ZSBh cmUgY2FsbGluZyBpdC4gSGVuY2UgZXZlbiBpZiB3ZSBhZGQgdGhlIOKAnHRocmVhZCA8dGlkPuKA nSByZXByZXNlbnRpbmcgdGhlIHNhbWUg4oCccHJvY2VzcyA8cGlkPuKAnSBpbiB0aGUgbmV4dCBp dGVyYXRpb24gb2YgdGhlIGZvciBsb29wIHdlIHdpbGwgbm90IGJlIHN1Y2Nlc3NmdWwuCgpIZW5j ZSB0aGlzIGZvcmNlcyB1cyB0byBjaGFuZ2UgdGhlIG1haW4gcHJvY2VzcyB0aHJlYWQg4oCccHJv Y2VzcyA8cGlkPuKAnSB0byDigJx0aHJlYWQgPHRpZD7igJ0gdmlhIHRoZSB0aHJlYWRfY2hhbmdl X3B0aWQgKCkgYW5kIHRoZSBwcml2YXRlIGRhdGEgc2V0LiBUaGVzZSBjaGFuZ2VzIGNhbiBiZSBz ZWVuIGluIHRoZSBzeW5jX3RocmVhZGxpc3RzICgpIHBhcnQuCgpIb3dldmVyLCB3ZSBhbHNvIG5l ZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYmVmb3JlIHdlIHRoaW5rIHRoaXMgd2lsbCB3b3JrLCBv dXIgbGlicHRocmVhZCBsaWJyYXJ5IGlzIG9ubHkgcmVhZHkgd2hlbiB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbiBpbiB0aGUgd2FpdCAoKSBvZiBhaXgtdGhyZWFkLmMgaXMgc2F0aXNmaWVkLgoKLyog Q2hlY2sgd2hldGhlciBsaWJwdGhkZWJ1ZyBtaWdodCBiZSByZWFkeSB0byBiZSBpbml0aWFsaXpl ZC4gICovCiAgaWYgKCFkYXRhLT5wZF9hY3RpdmUgJiYgc3RhdHVzLT5raW5kICgpID09IFRBUkdF VF9XQUlUS0lORF9TVE9QUEVECiAgICAgICYmIHN0YXR1cy0+c2lnICgpID09IEdEQl9TSUdOQUxf VFJBUCkKClVudGlsIHRoZW4gY2hhbmdpbmcgdGhlIOKAnHByb2Nlc3MgPHBpZD7igJ0gdG8g4oCc dGhyZWFkIDx0aWQ+4oCdIGlzIGluY29ycmVjdC4gRXZlbiB0aG91Z2ggdGhlIHNlc3Npb24gaXMg cmVhZHkgYW5kIGluaXRhbGlzZWQgdmlhIHBkX2VuYWJsZSAoKSBhbmQgcGRfYWN0aXZhdGUgKCkg ZnVuY3Rpb25zIHJlc3BlY3RpdmVseS4gVGhlcmZvcmUgdGhpcyBtYWRlIHVzIHRvIGtlZXAgYSB2 YXJpYWJsZSBwdGhkZWJ1Z3JlYWR5IGluIGFsbCBmdW5jdGlvbnMgdGhhdCBsZWFkIHRvIHN5bmNf dGhyZWFkbGlzdHMgKCkgc28gdGhhdCB3ZSBjaGFuZ2UgdGhlIHByb2Nlc3MgdGhyZWFkIHRvIGEg dGhyZWFkIHdpdGggcHJpdmF0ZSBkYXRhIG9ubHkgd2hlbiBsaWJwdGhkZWJ1ZyBpcyBpbml0aWFs aXNlZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2Nlc3MuCgpUaGUgZmlyc3QgaWYgY29uZGl0aW9uIGJl bG93IHRoaXMgcGFyYWdyYXBoIGNoYW5nZSBpbiB0aGUgc3luY190aHJlYWRsaXN0cyAoKSBhcyBz aG93biBiZWxvdyBtZWFucyB0aGUgcHRocmVhZCBkZWJ1ZyBsaWJyYXJ5IGlzIG5vdCBpbnRpYWxp c2VkLiBUaGlzIGlzIGp1c3QgdG8gc2V0IHByaXYgdG8gbWFpbiBwcm9jZXNzIHRocmVhZC4KCmlm IChnYnVmWzBdLT5wdGlkLmlzX3BpZCAoKSAmJiAhcHRoZGVidWdyZWFkeSkKICAgIHsKICAgICAg YWl4X3RocmVhZF9pbmZvICpwcml2ID0gbmV3IGFpeF90aHJlYWRfaW5mbzsKICAgICAgdHAtPnBy aXYucmVzZXQgKHByaXYpOwogICAgfQoKVGhlIHNlY29uZCBpZiBjb25kaXRpb24gYmVsb3cgdGhp cyBwYXJhZ3JhcGggY2hhbmdlIGlzIGZvciBjaGFuZ2luZyDigJxwcm9jZXNzIDxwaWQ+4oCdIHRv IOKAnHRocmVhZCA8dGlkPuKAnSBhcyB0aGUgcHRocmVhZCBkZWJ1ZyBsaWJyYXJ5IGlzIGludGlh bGlzZWQuCgppZiAoZ3B0aWQuaXNfcGlkICgpICYmIHB0aGRlYnVncmVhZHkpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgIHRocmVhZF9jaGFuZ2VfcHRpZCAocHJvY190YXJnZXQs IGdwdGlkLCBwcHRpZCk7CiAgICAgICAgICAgICAgICAgIGFpeF90aHJlYWRfaW5mbyAqcHJpdiA9 IG5ldyBhaXhfdGhyZWFkX2luZm87CiAgICAgICAgICAgICAgICAgIHByaXYtPnBkdGlkID0gcGJ1 ZltwaV0ucGR0aWQ7CiAgICAgICAgICAgICAgICAgIHByaXYtPnRpZCA9IHBidWZbcGldLnRpZDsK ICAgICAgICAgICAgICAgICAgdHAtPnByaXYucmVzZXQgKHByaXYpOwogICAgICAgICAgICAgICAg ICBnaSsrOwogICAgICAgICAgICAgICAgICBwaSsrOwogICAgICAgICAgICAgICAgfQoKRmFpbGlu ZyB0byBkbyBzbyBsZWFkcyB1cyB0byB0d28gcHJvYmxlbXMuIE9uZSB3aGlsZSB3ZSBmZXRjaF9y ZWdpc3RlcnMgKCkgb3VyIHJlZ2NhY2hlLT4gcHRpZCB0aG91Z2ggY2hhbmdlZCB0byBwdGlkX3Qg KHBpZCwgMCwgdGlkKSB3aWxsIG5vdCBiZSBhYmxlIHRvIGdldCB0aGUgcHJpdmF0ZSBkYXRhIGlu IGEgY2FzZSB3aGVyZSB3ZSBzd2l0Y2ggdG8gYSBjaGlsZCBwcm9jZXNzIGZyb20gdGhlIHBhcmVu dCBwcm9jZXNzIHZpYSDigJxpbmZlcmlvciAy4oCdIGNvbW1hbmQgbGVhZGluZyB0byB0aGUgY3Jh c2ggdGhhdCBwcml2YXRlIGRhdGEgd2FzIG5vdCBzZXQgZm9yIGEgdGhyZWFkLiBCZWNhdXNlIHdl IGluY29ycmVjdGx5IGNoYW5nZWQgdGhlIOKAnHByb2Nlc3MgPHBpZD7igJ0gdG8g4oCcdGhyZWFk IDx0aWQ+4oCdIGJlZm9yZSB0aGUgcHJvY2VzcyBpdHNlbGYgY291bGQgcmFpc2UgYSB0cmFwIGFu ZCB0ZWxsIHRoZSBkZWJ1Z2dlciB3ZSBhcmUgbm93IHJlYWR5IHRvIGRlYnVnIHRocmVhZHMuCgpF eGFtcGxlIG9mIHRoZSBjcmFzaDotCihnZGIpIHNldCBkZXRhY2gtb24tZm9yayBvZmYKKGdkYikg cgpTdGFydGluZyBwcm9ncmFtOgpbTmV3IFRocmVhZCAyNThdCltOZXcgVGhyZWFkIDUxNV0KW05l dyBpbmZlcmlvciAyIChwcm9jZXNzIDIxNjI3Mzg2KV0KSSBhbSBwYXJlbnQKW05ldyBpbmZlcmlv ciAzIChwcm9jZXNzIDkzNzIwNjQpXQpJIGFtIHBhcmVudApeQwpUaHJlYWQgMS4xIHJlY2VpdmVk IHNpZ25hbCBTSUdJTlQsIEludGVycnVwdC4KW1N3aXRjaGluZyB0byBUaHJlYWQgMV0KMHhkMDU5 NWZiMCBpbiBfcF9uc2xlZXAgKCkgZnJvbSAvdXNyL2xpYi9saWJwdGhyZWFkLmEoc2hyX3hwZzUu bykKKGdkYikgaW5mZXJpb3IgMgpbU3dpdGNoaW5nIHRvIGluZmVyaW9yIDIgW3Byb2Nlc3MgMjE2 MjczODZdICgvaG9tZSAvZ2RiX3Rlc3RzL3VsdGltYXRlLW11bHRpLXRocmVhZC1mb3JrKV0KW1N3 aXRjaGluZyB0byB0aHJlYWQgMi4xIChUaHJlYWQgNTE1KV0KKGdkYikgYwpDb250aW51aW5nLgou Ly4uL2dkYnN1cHBvcnQvZ2RiLWNoZWNrZWQtc3RhdGljLWNhc3QuaDo1ODogaW50ZXJuYWwtZXJy b3I6IGNoZWNrZWRfc3RhdGljX2Nhc3Q6IEFzc2VydGlvbiBgcmVzdWx0ICE9IG51bGxwdHInIGZh aWxlZC4KClRoZSBwcm9jZXNzIHN0YWNrIG9mIHRoZSBjcmFzaCBkdWUgdG8gdGhlIGlzIGFzIGJl bG93OiAtCgoweDAwMDAwMDAxMDA1OWVmNjAgIGFpeF90aHJlYWRfaW5mbyogZ2RiOjpjaGVja2Vk X3N0YXRpY19jYXN0PGFpeF90aHJlYWRfaW5mbyosIHByaXZhdGVfdGhyZWFkX2luZm8+KHByaXZh dGVfdGhyZWFkX2luZm8qKSgweDApICsgMHg3YwoweDAwMDAwMDAxMDA1OTZlYTAgIGdldF9haXhf dGhyZWFkX2luZm8odGhyZWFkX2luZm8qKSgweDApICsgMHgzNAoweDAwMDAwMDAxMDA1OWI3Nzgg IGFpeF90aHJlYWRfdGFyZ2V0OjpmZXRjaF9yZWdpc3RlcnMocmVnY2FjaGUqLCBpbnQpKDB4MTEw MDFmM2Y4LCAweDExMDdjNTAzMCwgMHg0MDAwMDAwMDAwKSArIDB4ZjgKMHgwMDAwMDAwMTAwMzY3 NWYwICB0YXJnZXRfZmV0Y2hfcmVnaXN0ZXJzKHJlZ2NhY2hlKiwgaW50KSgweDExMDdjNTAzMCwg MHg0MGUwZGRmMDBkKSArIDB4NmMKMHgwMDAwMDAwMTAwNTgxN2MwICByZWdjYWNoZTo6cmF3X3Vw ZGF0ZShpbnQpKDB4MTEwN2M1MDMwLCAweDQwMTAwMWYzZjgpICsgMHg5NAoweDAwMDAwMDAxMDA1 ODE5MDQgIHJlYWRhYmxlX3JlZ2NhY2hlOjpyYXdfcmVhZChpbnQsIHVuc2lnbmVkIGNoYXIqKSgw eDExMDdjNTAzMCwgMHg0MDAwMDAwMjAzLCAweGZmZmZmZmZmZmZmZWJjMCkgKyAweDhjCjB4MDAw MDAwMDEwMDU4MWY1NCAgcmVhZGFibGVfcmVnY2FjaGU6OmNvb2tlZF9yZWFkKGludCwgdW5zaWdu ZWQgY2hhciopKDB4MTEwN2M1MDMwLCAweDQwZmZmZmViOTAsIDB4ZmZmZmZmZmZmZmZlYmMwKSAr IDB4ZWMKMHgwMDAwMDAwMTAwZGFiYTEwICByZWdpc3Rlcl9zdGF0dXMgcmVhZGFibGVfcmVnY2Fj aGU6OmNvb2tlZF9yZWFkPHVuc2lnbmVkIGxvbmcsIHZvaWQ+KGludCwgdW5zaWduZWQgbG9uZyop KDB4MTEwN2M1MDMwLCAweDQwZmZmZmVjNTAsIDB4ZmZmZmZmZmZmZmZlZDEwKSArIDB4ZDQKMHgw MDAwMDAwMTAwNTgyNmEwICByZWdjYWNoZV9jb29rZWRfcmVhZF91bnNpZ25lZChyZWdjYWNoZSos IGludCwgdW5zaWduZWQgbG9uZyopKDB4MTEwN2M1MDMwLCAweDQwZmZmZmVjZDAsIDB4ZmZmZmZm ZmZmZmZlZDEwKSArIDB4NzAKMHgwMDAwMDAwMTAwNTg0ZTJjICByZWdjYWNoZV9yZWFkX3BjKHJl Z2NhY2hlKikoMHgxMTA3YzUwMzApICsgMHhhNAoweDAwMDAwMDAxMDAzODc2MTQgIGhhbmRsZV9z aWduYWxfc3RvcChleGVjdXRpb25fY29udHJvbF9zdGF0ZSopKDB4ZmZmZmZmZmZmZmZmM2E4KSAr IDB4MTU4CjB4MDAwMDAwMDEwMDM4NjRlNAoKU2Vjb25kbHkgaW4gYSBjYXNlIHdoZXJlLCBpZiB3 ZSBmb2xsb3cgdGhlIGNoaWxkIGluc3RlYWQgb2YgdGhlIHBhcmVudCBhbmQgd2UgZW5kIHVwIGNo YW5naW5nIG91ciDigJxwcm9jZXNzIDxwaWQ+4oCdIHRvIOKAnHRocmVhZCA8dGlkPuKAnSBiZWZv cmUgdGhlIHByb2Nlc3MgaXRzZWxmIHJhaXNlcyBhIHRyYXAgYW5kIHRlbGxzIHRoZSBkZWJ1Z2dl ciDigJxJIGFtIHJlYWR5IGZvciB0aHJlYWRz4oCdLCB0aGVuIHdoZW4gd2Ugc3dpdGNoX3RvX3Ro cmVhZCBpbiB0aGUgZm9sbG93X2ZvcmsgKCkgd2UgZW5kIHVwIG5vdCBmaW5kaW5nIHRoZSDigJxw cm9jZXNzIDxwaWQ+4oCdIGFuZCB0aHVzIGxlYWRpbmcgdG8gYW4gYXNzZXJ0aW9uIGZhaWx1cmUg YXMgc2hvd24gYmVsb3cgYW5kIHJpZ2h0bHkgc28sIGJlY2F1c2Ugd2UgY2hhbmdlZCB0aHJlYWRz IHdpdGhvdXQgdGhlIGxpYnJhcnkgYmVpbmcgaW5pdGlhbGlzZWQuIFRoaXMgaGFwcGVucyB3aGVu IHRoZSBmb2xsb3dfZm9yayAoKSBpcyBjYWxsZWQsIGFuZCB3ZSBzd2l0Y2ggdG8gdGhlIGNoaWxk IHRocmVhZCB0aGVyZS4KCihnZGIpIHNldCBkZXRhY2gtb24tZm9yayBvZmYKKGdkYikgc2V0IGZv bGxvdy1mb3JrLW1vZGUgY2hpbGQKKGdkYikgcgpTdGFydGluZyBwcm9ncmFtOgpbTmV3IFRocmVh ZCAyNThdCltOZXcgVGhyZWFkIDUxNV0KW0F0dGFjaGluZyBhZnRlciBUaHJlYWQgNTE1IGZvcmsg dG8gY2hpbGQgcHJvY2VzcyAxODgwOTA5OF0KW05ldyBpbmZlcmlvciAyIChwcm9jZXNzIDE4ODA5 MDk4KV0KdGhyZWFkLmM6MTMzNzogaW50ZXJuYWwtZXJyb3I6IHN3aXRjaF90b190aHJlYWQ6IEFz c2VydGlvbiBgdGhyICE9IE5VTEwnIGZhaWxlZC4KClRoZSBwcm9jZXNzIHN0YWNrIGlzIGFzIGZv bGxvd3M6LQoweDAwMDAwMDAxMDAwMzY1OTAgIGludGVybmFsX2Vycm9yX2xvYyhjaGFyIGNvbnN0 KiwgaW50LCBjaGFyIGNvbnN0KiwgLi4uKSgweDEwMTkyYmE3MCwgMHg1MzkwMDAwMDAwMCwgMHgx MDE5MmI5NzApICsgMHg1OAoweDAwMDAwMDAxMDA2MTk5MTggIHN3aXRjaF90b190aHJlYWQodGhy ZWFkX2luZm8qKSgweDApICsgMHg0OAoweDAwMDAwMDAxMDAzNzYzNWMgIGZvbGxvd19mb3JrKCko KSArIDB4NGM4CjB4MDAwMDAwMDEwMDM4NWFmOCAgaGFuZGxlX2luZmVyaW9yX2V2ZW50KGV4ZWN1 dGlvbl9jb250cm9sX3N0YXRlKikoMHhmZmZmZmZmZmZmZmYzYTgpICsgMHhkYTgKMHgwMDAwMDAw MTAwMzgwOWQwICBmZXRjaF9pbmZlcmlvcl9ldmVudCgpKCkgKyAweDJmOAoweDAwMDAwMDAxMDA3 MTlhMGMgIGluZmVyaW9yX2V2ZW50X2hhbmRsZXIoaW5mZXJpb3JfZXZlbnRfdHlwZSkoMHgxMDIw N2E1MCkgKyAweDM4CjB4MDAwMDAwMDEwMDM5MjI4YyAgaW5mcnVuX2FzeW5jX2luZmVyaW9yX2V2 ZW50X2hhbmRsZXIodm9pZCopKDB4MCkgKyAweDMwCjB4MDAwMDAwMDEwMDY3MWQxOCAgY2hlY2tf YXN5bmNfZXZlbnRfaGFuZGxlcnMoKSgpICsgMHg5NAoweDAwMDAwMDAxMDA2NmUzMmMgIGdkYl9k b19vbmVfZXZlbnQoaW50KSgweGZmZmZmZmZmZmZmZmY4NDApICsgMHhiNAoweDAwMDAwMDAxMDAw MDFkY2MgIHN0YXJ0X2V2ZW50X2xvb3AoKSgpICsgMHgyOAoweDAwMDAwMDAxMDAwMDFmZDQgIGNh cHR1cmVkX2NvbW1hbmRfbG9vcCgpKCkgKyAweDU4CjB4MDAwMDAwMDEwMDAwNDE0YyAgY2FwdHVy ZWRfbWFpbih2b2lkKikoMHhmZmZmZmZmZmZmZmZhNjApICsgMHgyYwoweDAwMDAwMDAxMDAwMDQy MjAgIGdkYl9tYWluKGNhcHR1cmVkX21haW5fYXJncyopKDB4ZmZmZmZmZmZmZmZmYTYwKSArIDB4 MjAKClNvLCB0aGUgY2hhbmdlcyBpbiB0aGUgc3luY190aHJlYWRsaXN0cyAoKSB3aXRoIHBhcmFt ZXRlciBhbmQgdGhlIGZvciBsb29wIGp1c3RpZmllcyB0aGUgc2FtZS4KCkFsc28sIHdlIG5vdyBk byBub3QgdXNlIGl0ZXJhdGVfb3Zlcl90aHJlYWRzIHRvIGNvdW50IG91ciBHREIgdGhyZWFkcy4g V2UgaW5zdGVhZCBkbyBpdCB2aWEgZm9yICh0aHJlYWRfaW5mbyAqdHAgOiBhbGxfdGhyZWFkcyAo cHJvY190YXJnZXQsIHB0aWRfdCAocGlkKSkpIGlubGluZS4KClNvbHV0aW9uIFBhcnQgMjogLQoK U2luY2Ugd2Ugc3dpdGNoX3RvX25vX3RocmVhZCBiZWZvcmUgYSB3YWl0ICgpLCBvbiBhbiBldmVu dCBvZiBhIHRocmVhZCBkZXRlY3Rpb24gb3IgYW55IG90aGVyIGV2ZW50IHdoaWNoIG1ha2VzIHVz IHVzZSB0aGUgdGhyZWFkIGNhbGwtYmFja3MsIHdlIG5lZWQgdG8gYmUgaW4gdGhlIHJpZ2h0IGNv bnRleHQgd2hpbGUgd2UgcmVhZCBhbmQgd3JpdGUgZGF0YSBmb3IgdGhyZWFkcy4gVGhhdCBpcyB3 aHkgd2Ugc3dpdGNoIG91ciBpbmZlcmlvcl9wdGlkLCBjdXJyZW50X2luZmVyaW9yIGFuZCBwcm9n cmFtIHNwYWNlIGluIHBkY19yZWFkX2RhdGEgKCkgYW5kIHBkY193cml0ZV9kYXRhIGFuZCBub3cg cGRjX3dyaXRlX2RhdGEuCgpTbyB3aHkgZGlkIHdlIG1ha2UgdGhpcyBjaGFuZ2UKLSAgICBpZiAo dXNlcl9jdXJyZW50X3BpZCAhPSAwKQotICAgICAgc3dpdGNoX3RvX3RocmVhZCAoY3VycmVudF9p bmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCksCi0gICAgICAgICAgICAgICAgICAgICAgIHB0 aWRfdCAodXNlcl9jdXJyZW50X3BpZCkpOwogaW4gcGRjX3JlYWRfZGF0YSBhbmQgY2hhbmdlIG91 ciB1c2VyIHZhcmlhYmxlIHdoaWNoIHdhcyB0aGUgcHJvY2VzcyBJRCB0byBhIHRocmVhZD8gV2Fz buKAmXQgaXQgYWxyZWFkeSBkb2luZyB0aGUgam9iPwoKQ29uc2lkZXIgYW4gZXZlbnQgd2hlcmUg dGhlIHBhcmVudCBwcm9jZXNzIGlzIHRocmVhZGVkLCBhbmQgd2UgaGF2ZSBhIGZvcmsgKCkuIFdo ZW4gd2UgZG8gYSBwZF91cGRhdGUgKCkgYWZ0ZXIgdGhlIGJlbmVhdGgtPndhaXQgKCkgaW4gdGhy ZWFkIHdhaXQgKCkgd2UgY2FsbCBzeW5jX3RocmVhZGxpc3RzICgpIGFzIHdlbGwuIE92ZXIgdGhl cmUgd2UgY2FsbCBwdGhkYl9wdGhyZWFkIChkYXRhLT5wZF9zZXNzaW9uLCAmcGR0aWQsIGNtZCk7 CgpUaGlzIG5vdyB3aWxsIHVzZSB0aGUgcHRpZF90ICh1c2VyX2N1cnJlbnRfcGlkKSB0byBzd2l0 Y2ggdGhlIHRocmVhZCAoKS4gSG93ZXZlciwgb3VyIHBhcmVudCBwcm9jZXNzIG9yIG1haW4gdGhy ZWFkIG9mIGl0LCBpcyB0aHJlYWRlZCBpLmUgaXMgcHRpZF90ICh1c2VyX2N1cnJlbnRfcGlkLCAw LCB0aWQpLiBIZW5jZSwgd2Ugd2lsbCBjcmFzaCB3aXRoIGFuIGFzc2VydGlvbiBmYWlsdXJlIHRo YXQgdGhyZWFkIHB0aWRfdCAodXNlcl9jdXJyZW50X3BpZAopIGhhcyBub3QgYmVlbiBmb3VuZC4K CkluIG9yZGVyIHRvIGF2b2lkIHRoZSBzYW1lLCB3ZSBub3cgcGFzcyB0aGUgdGhyZWFkIGRpcmVj dGx5LiBTbywgb24gYW55IGV2ZW50IGFmdGVyIHRoZSBtYWluIHByb2Nlc3MgbG9va3MgbGlrZSBh IG1haW4gdGhyZWFkLCB0aGVyZSB3aWxsIGJlIG5vIGNvbmZ1c2lvbiBvbiB3aGljaCB0aHJlYWQg c3BhY2Ugb3IgaW5mZXJpb3JfcHRpZCBvciBwcm9ncmFtIHNwYWNlIHRvIHN3aXRjaCwgZXNwZWNp YWxseSB3aGVuIGEgcHJvY2VzcyBpcyBtdWx0aS10aHJlYWRlZC4KClNvbHV0aW9uIFBhcnQgMzog LSBJbiBBSVggd2UgdXNlIGEgbG90IG9mIHZhcmlhYmxlcyBmb3IgZGlmZmVyZW50IHB1cnBvc2Vz IGxpa2UgcGRfYWN0aXZlLCBwZF9hYmxlLCBhcmNoNjQsIHBkX2Jya19hZGRyIGFuZCBwZF9zZXNz aW9uLiBUaGVzZSB2YXJpYWJsZXMgYXJlIHVuaXF1ZSBwZXIgaW5mZXJpb3IuIEhlbmNlLCB3ZSBu ZWVkIHRvIGtlZXAgdGhlbSBpbiBhIG1hcCA8aW5mZXJpb3IsIHN0cnVjdHVyZT4gd2hlcmUgc3Ry dWN0dXJlIGNhbiBob2xkIGFsbCB0aGVzZSB2YXJpYWJsZXMgcGVyIGluZmVyaW9yLiBUaGlzIGlz IHdoZXJlIHdlIHVzZSB0aGUgaW5idWlsdCBHREIgcmVnaXN0cnkgZm9yIGV2ZXJ5IGluZmVyaW9y LiBUaGlzIGNoYW5nZSBleGlzdHMgaW4gdGhpcyBwYXRjaC4KClNvbHV0aW9uIFBhcnQgNDogLQoK V2UgZmlndXJlZCBvdXQgdGhhdCB0aGUgdG9wIHRhcmdldCBmb3IgYSBuZXcgaW5mZXJpb3IgYm9y biBhZnRlciB0aGUgbWFpbiBpbmZlcmlvciB3YXMgaW5jb3JyZWN0IHBvc3QgdGhlIHByb2Nlc3Mg YmVpbmcgdGhyZWFkZWQuCgpUaGUgcm9vdCBjYXVzZSB3YXMgdGhhdCB0aGUgc2hhcmVkIGxpYnJh cnkgd2FzIG5vdCBiZWluZyBsb2FkZWQgZm9yIG5ldyBwcm9jZXNzLiBUaGUgcmVhc29uIGJlaW5n IHdlIGNoYW5nZSBvdXIgc2hhcmVkIGxpYnJhcnkgZmlsZSBuYW1lIGluIHRoZSBCRkQgcmVnaXN0 cnkgZnJvbSBtZW1iZXIgbmFtZSB0byBwYXRoKG1lbWJlcl9uYW1lKS4KCkhlbmNlIHRoZSBjaGFu Z2VzIGluIHNvbGliLWFpeCB0YWtlcyBjYXJlIG9mIHRoZSBuZXcgcGF0dGVybiBzbyB0aGF0IHRo ZSBzaGFyZWQgbGlicmFyeSBjYW4gYmUgbG9hZGVkIGNvcnJlY3RseSBmb3IgZXZlcnkgbmV3IGlu ZmVyaW9yIGJvcm4gYXMgd2VsbCB2aWEgcGF0dGVybiBtYXRjaGluZyB0aGUg4oCYKOKAmGNoYXJh Y3RlciBhbmQgY2hlY2tpbmcgaWYgdGhlIG1lbWJlcl9uYW1lIGV4aXN0cyBhZnRlciB0aGF0IGlu IHRoZSBuZXcgcGF0dGVybiByZWdpc3RlcmVkIGluIHRoZSBCRkQgcmVnaXN0cnkgYXMgc2hvd24g aW4gc29saWItYWl4LmMgY2hhbmdlcyBpbiB0aGlzIHBhdGNoLgoKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZXNlIDQgc29sdXRpb24g cGFydHMgdG9nZXRoZXIgZml4ZXMgdGhlIGJ1Zy4KLS0tCiBnZGIvYWl4LXRocmVhZC5jIHwgNDMx ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiBnZGIvc29s aWItYWl4LmMgIHwgIDE0ICsrCiAyIGZpbGVzIGNoYW5nZWQsIDI3MSBpbnNlcnRpb25zKCspLCAx NzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2RiL2FpeC10aHJlYWQuYyBiL2dkYi9haXgt dGhyZWFkLmMKaW5kZXggZTU1NmMxNTM1NzYuLmY4NmQ5NDI5ZjcxIDEwMDY0NAotLS0gYS9nZGIv YWl4LXRocmVhZC5jCisrKyBiL2dkYi9haXgtdGhyZWFkLmMKQEAgLTY4LDEwICs2OCw2IEBAIHN0 YXRpYyBib29sIGRlYnVnX2FpeF90aHJlYWQ7CiAjZGVmaW5lIHB0aGRiX3RpZF90CXRpZF90CiAj ZW5kaWYKIAotLyogUmV0dXJuIHdoZXRoZXIgdG8gdHJlYXQgUElEIGFzIGEgZGVidWdnYWJsZSB0 aHJlYWQgaWQuICAqLwotCi0jZGVmaW5lIFBEX1RJRChwdGlkKQkocGRfYWN0aXZlICYmIHB0aWQu dGlkICgpICE9IDApCi0KIC8qIFN1Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWVzIHJldHVybmVkIGJ5 IHB0aGRiIGNhbGxiYWNrcy4gICovCiAKICNkZWZpbmUgUERDX1NVQ0NFU1MJUFRIREJfU1VDQ0VT UwpAQCAtMTQ0LDM4ICsxNDAsMjAgQEAgY2xhc3MgYWl4X3RocmVhZF90YXJnZXQgZmluYWwgOiBw dWJsaWMgdGFyZ2V0X29wcwogCiBzdGF0aWMgYWl4X3RocmVhZF90YXJnZXQgYWl4X3RocmVhZF9v cHM7CiAKLS8qIEFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgbGlicHRocmVhZCB3aWxsIGNh bGwgd2hlbiBsaWJwdGhkZWJ1ZwotICAgaXMgcmVhZHkgdG8gYmUgaW5pdGlhbGl6ZWQuICAqLwot Ci1zdGF0aWMgQ09SRV9BRERSIHBkX2Jya19hZGRyOwotCi0vKiBXaGV0aGVyIHRoZSBjdXJyZW50 IGFwcGxpY2F0aW9uIGlzIGRlYnVnZ2FibGUgYnkgcHRoZGIuICAqLwotCi1zdGF0aWMgaW50IHBk X2FibGUgPSAwOwotCi0vKiBXaGV0aGVyIGEgdGhyZWFkZWQgYXBwbGljYXRpb24gaXMgYmVpbmcg ZGVidWdnZWQuICAqLwotCi1zdGF0aWMgaW50IHBkX2FjdGl2ZSA9IDA7Ci0KLS8qIFdoZXRoZXIg dGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIGlzIDY0LWJpdC4gIAotICAgT25seSB2YWxpZCB3aGVu IHBkX2FibGUgaXMgdHJ1ZS4gICovCi0KLXN0YXRpYyBpbnQgYXJjaDY0OwotCiAvKiBGb3J3YXJk IGRlY2xhcmF0aW9ucyBmb3IgcHRoZGIgY2FsbGJhY2tzLiAgKi8KIAotc3RhdGljIGludCBwZGNf c3ltYm9sX2FkZHJzIChwdGhkYl91c2VyX3QsIHB0aGRiX3N5bWJvbF90ICosIGludCk7Ci1zdGF0 aWMgaW50IHBkY19yZWFkX2RhdGEgKHB0aGRiX3VzZXJfdCwgdm9pZCAqLCBwdGhkYl9hZGRyX3Qs IHNpemVfdCk7Ci1zdGF0aWMgaW50IHBkY193cml0ZV9kYXRhIChwdGhkYl91c2VyX3QsIHZvaWQg KiwgcHRoZGJfYWRkcl90LCBzaXplX3QpOwotc3RhdGljIGludCBwZGNfcmVhZF9yZWdzIChwdGhk Yl91c2VyX3QgdXNlciwgcHRoZGJfdGlkX3QgdGlkLAorc3RhdGljIGludCBwZGNfc3ltYm9sX2Fk ZHJzICh0aHJlYWRfaW5mbyosIHB0aGRiX3N5bWJvbF90ICosIGludCk7CitzdGF0aWMgaW50IHBk Y19yZWFkX2RhdGEgKHRocmVhZF9pbmZvKiwgdm9pZCAqLCBwdGhkYl9hZGRyX3QsIHNpemVfdCk7 CitzdGF0aWMgaW50IHBkY193cml0ZV9kYXRhICh0aHJlYWRfaW5mbyosIHZvaWQgKiwgcHRoZGJf YWRkcl90LCBzaXplX3QpOworc3RhdGljIGludCBwZGNfcmVhZF9yZWdzICh0aHJlYWRfaW5mbyog dXNlciwgcHRoZGJfdGlkX3QgdGlkLAogCQkJICB1bnNpZ25lZCBsb25nIGxvbmcgZmxhZ3MsIAog CQkJICBwdGhkYl9jb250ZXh0X3QgKmNvbnRleHQpOwotc3RhdGljIGludCBwZGNfd3JpdGVfcmVn cyAocHRoZGJfdXNlcl90IHVzZXIsIHB0aGRiX3RpZF90IHRpZCwKK3N0YXRpYyBpbnQgcGRjX3dy aXRlX3JlZ3MgKHRocmVhZF9pbmZvKiB1c2VyLCBwdGhkYl90aWRfdCB0aWQsCiAJCQkgICB1bnNp Z25lZCBsb25nIGxvbmcgZmxhZ3MsIAogCQkJICAgcHRoZGJfY29udGV4dF90ICpjb250ZXh0KTsK LXN0YXRpYyBpbnQgcGRjX2FsbG9jIChwdGhkYl91c2VyX3QsIHNpemVfdCwgdm9pZCAqKik7Ci1z dGF0aWMgaW50IHBkY19yZWFsbG9jIChwdGhkYl91c2VyX3QsIHZvaWQgKiwgc2l6ZV90LCB2b2lk ICoqKTsKLXN0YXRpYyBpbnQgcGRjX2RlYWxsb2MgKHB0aGRiX3VzZXJfdCwgdm9pZCAqKTsKK3N0 YXRpYyBpbnQgcGRjX2FsbG9jICh0aHJlYWRfaW5mbyosIHNpemVfdCwgdm9pZCAqKik7CitzdGF0 aWMgaW50IHBkY19yZWFsbG9jICh0aHJlYWRfaW5mbyosIHZvaWQgKiwgc2l6ZV90LCB2b2lkICoq KTsKK3N0YXRpYyBpbnQgcGRjX2RlYWxsb2MgKHRocmVhZF9pbmZvKiwgdm9pZCAqKTsKIAogLyog cHRoZGIgY2FsbGJhY2tzLiAgKi8KIApAQCAtMTkxLDkgKzE2OSw2NiBAQCBzdGF0aWMgcHRoZGJf Y2FsbGJhY2tzX3QgcGRfY2FsbGJhY2tzID0gewogICBOVUxMCiB9OwogCi0vKiBDdXJyZW50IHB0 aGRiIHNlc3Npb24uICAqLworLyogQWl4IHZhcmlhYmxlIHN0cnVjdHVyZS4gICovCitzdHJ1Y3Qg YWl4X3RocmVhZF92YXJpYWJsZXMgCit7CisgIC8qIFdoZXRoZXIgdGhlIGN1cnJlbnQgYXBwbGlj YXRpb24gaXMgZGVidWdnYWJsZSBieSBwdGhkYi4gICovCisgIGludCBwZF9hYmxlOworCisgIC8q IFdoZXRoZXIgYSB0aHJlYWRlZCBhcHBsaWNhdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZC4gICovCisg IGludCBwZF9hY3RpdmU7CisKKyAgLyogQ3VycmVudCBwdGhkYiBzZXNzaW9uLiAgKi8KKyAgcHRo ZGJfc2Vzc2lvbl90IHBkX3Nlc3Npb247CisKKyAgLyogQWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24g dGhhdCBsaWJwdGhyZWFkIHdpbGwgY2FsbCB3aGVuIGxpYnB0aGRlYnVnCisgICBpcyByZWFkeSB0 byBiZSBpbml0aWFsaXplZC4gICovCisgIENPUkVfQUREUiBwZF9icmtfYWRkcjsKKworICAvKiBX aGV0aGVyIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBpcyA2NC1iaXQuCisgICBPbmx5IHZhbGlk IHdoZW4gcGRfYWJsZSBpcyB0cnVlLiAgKi8KKyAgaW50IGFyY2g2NDsKK307CisKKy8qIEtleSB0 byBvdXIgcGVyLWluZmVyaW9yIGRhdGEuICAqLworc3RhdGljIGNvbnN0IHJlZ2lzdHJ5PGluZmVy aW9yPjo6a2V5PGFpeF90aHJlYWRfdmFyaWFibGVzPgorICBhaXhfdGhyZWFkX3ZhcmlhYmxlc19o YW5kbGU7CisKKy8qIEZ1bmN0aW9uIHRvIEdldCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyBkYXRhLiAg Ki8KK3N0YXRpYyBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMqCitnZXRfYWl4X3RocmVhZF92 YXJpYWJsZXNfZGF0YSAoc3RydWN0IGluZmVyaW9yICppbmYpCit7CisgIGlmIChpbmYgPT0gTlVM TCkKKyAgICByZXR1cm4gTlVMTDsKKworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMqIGRh dGE7CisKKyAgZGF0YSA9IGFpeF90aHJlYWRfdmFyaWFibGVzX2hhbmRsZS5nZXQgKGluZik7Cisg IGlmIChkYXRhID09IE5VTEwpCisgICAgZGF0YSA9IGFpeF90aHJlYWRfdmFyaWFibGVzX2hhbmRs ZS5lbXBsYWNlIChpbmYpOworCisgIHJldHVybiBkYXRhOworfQorCisvKiBIZWxwZXIgdG8gZ2V0 IGRhdGEgZm9yIHB0aWQgaW4gYSBmdW5jdGlvbi4gICovCiAKLXN0YXRpYyBwdGhkYl9zZXNzaW9u X3QgcGRfc2Vzc2lvbjsKK3N0YXRpYyBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMqCitnZXRf dGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChwdGlkX3QgcHRpZCkKK3sKKyAgaW5mZXJpb3Ig KmluZiA9IGZpbmRfaW5mZXJpb3JfcHRpZCAoY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190 YXJnZXQgKCksCisJCQkJCXB0aWQpOworICByZXR1cm4gZ2V0X2FpeF90aHJlYWRfdmFyaWFibGVz X2RhdGEgKGluZik7Cit9CisKKy8qIEhlbHBlciB0byBnZXQgZGF0YSBmb3IgcGlkIGluIGEgZnVu Y3Rpb24uICAqLworCitzdGF0aWMgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzKgorZ2V0X3Ro cmVhZF9kYXRhX2hlbHBlcl9mb3JfcGlkIChwaWRfdCBwaWQpCit7CisgIGluZmVyaW9yICppbmYg PSBmaW5kX2luZmVyaW9yX3BpZCAoY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQg KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkKTsKKyAgcmV0 dXJuIGdldF9haXhfdGhyZWFkX3ZhcmlhYmxlc19kYXRhIChpbmYpOworfQogCiAvKiBSZXR1cm4g YSBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgcHRoZGVidWcgZnVuY3Rpb24gcmV0dXJuCiAg ICBTVEFUVVMuICAqLwpAQCAtMzE4LDcgKzM1Myw3IEBAIHBpZF90b19wcmMgKHB0aWRfdCAqcHRp ZHApCiAgIHB0aWRfdCBwdGlkOwogCiAgIHB0aWQgPSAqcHRpZHA7Ci0gIGlmIChQRF9USUQgKHB0 aWQpKQorICBpZiAocHRpZC50aWQgKCkgIT0gMCkKICAgICAqcHRpZHAgPSBwdGlkX3QgKHB0aWQu cGlkICgpKTsKIH0KIApAQCAtMzI2LDcgKzM2MSw3IEBAIHBpZF90b19wcmMgKHB0aWRfdCAqcHRp ZHApCiAgICB0aGUgYWRkcmVzcyBvZiBTWU1CT0xTWzxpPl0ubmFtZS4gICovCiAKIHN0YXRpYyBp bnQKLXBkY19zeW1ib2xfYWRkcnMgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLCBwdGhk Yl9zeW1ib2xfdCAqc3ltYm9scywgaW50IGNvdW50KQorcGRjX3N5bWJvbF9hZGRycyAodGhyZWFk X2luZm8gKnVzZXJfY3VycmVudF90aHJlYWQsIHB0aGRiX3N5bWJvbF90ICpzeW1ib2xzLCBpbnQg Y291bnQpCiB7CiAgIHN0cnVjdCBib3VuZF9taW5pbWFsX3N5bWJvbCBtczsKICAgaW50IGk7CkBA IC0zMzQsOCArMzY5LDggQEAgcGRjX3N5bWJvbF9hZGRycyAocHRoZGJfdXNlcl90IHVzZXJfY3Vy cmVudF9waWQsIHB0aGRiX3N5bWJvbF90ICpzeW1ib2xzLCBpbnQgY28KIAogICBpZiAoZGVidWdf YWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAotCQkicGRjX3N5bWJvbF9h ZGRycyAodXNlcl9jdXJyZW50X3BpZCA9ICVsZCwgc3ltYm9scyA9IDB4JWx4LCBjb3VudCA9ICVk KVxuIiwKLQkJdXNlcl9jdXJyZW50X3BpZCwgKGxvbmcpIHN5bWJvbHMsIGNvdW50KTsKKwkJInBk Y19zeW1ib2xfYWRkcnMgKHVzZXJfY3VycmVudF9waWQgPSAlZCwgc3ltYm9scyA9IDB4JWx4LCBj b3VudCA9ICVkKVxuIiwKKwkJdXNlcl9jdXJyZW50X3RocmVhZC0+cHRpZC5waWQgKCksIChsb25n KSBzeW1ib2xzLCBjb3VudCk7CiAKICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAg ewpAQCAtMzczLDcgKzQwOCw3IEBAIHBkY19zeW1ib2xfYWRkcnMgKHB0aGRiX3VzZXJfdCB1c2Vy X2N1cnJlbnRfcGlkLCBwdGhkYl9zeW1ib2xfdCAqc3ltYm9scywgaW50IGNvCiAgICBJZiBzdWNj ZXNzZnVsIHJldHVybiAwLCBlbHNlIG5vbi16ZXJvIGlzIHJldHVybmVkLiAgKi8KIAogc3RhdGlj IGludAotcGRjX3JlYWRfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCitwZGNf cmVhZF9yZWdzICh0aHJlYWRfaW5mbyAqdXNlcl9jdXJyZW50X3RocmVhZCwKIAkgICAgICAgcHRo ZGJfdGlkX3QgdGlkLAogCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZmxhZ3MsCiAJICAgICAg IHB0aGRiX2NvbnRleHRfdCAqY29udGV4dCkKQEAgLTM4OSw2ICs0MjQsOSBAQCBwZGNfcmVhZF9y ZWdzIChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwKICAgZG91YmxlIGZwcnNbcHBjX251 bV9mcHJzXTsKICAgc3RydWN0IHB0eHNwcnMgc3ByczY0OwogICBzdHJ1Y3QgcHRzcHJzIHNwcnMz MjsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICAKKyAgZGF0YSA9IGdl dF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3BpZCAodXNlcl9jdXJyZW50X3RocmVhZC0+cHRpZC5w aWQgKCkpOwogICAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2Ri X3N0ZGxvZywgInBkY19yZWFkX3JlZ3MgdGlkPSVkIGZsYWdzPSVzXG4iLApAQCAtMzk3LDcgKzQz NSw3IEBAIHBkY19yZWFkX3JlZ3MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAogICAv KiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KICAgaWYgKGZsYWdzICYgUFRIREJfRkxB R19HUFJTKQogICAgIHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0 KQogCXsKIAkgIGlmICghcHRyYWNlNjRhaXggKFBUVF9SRUFEX0dQUlMsIHRpZCwgCiAJCQkgICAg KHVuc2lnbmVkIGxvbmcpIGdwcnM2NCwgMCwgTlVMTCkpCkBAIC00MjMsNyArNDYxLDcgQEAgcGRj X3JlYWRfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAgIC8qIFNwZWNpYWwt cHVycG9zZSByZWdpc3RlcnMuICAqLwogICBpZiAoZmxhZ3MgJiBQVEhEQl9GTEFHX1NQUlMpCiAg ICAgewotICAgICAgaWYgKGFyY2g2NCkKKyAgICAgIGlmIChkYXRhLT5hcmNoNjQpCiAJewogCSAg aWYgKCFwdHJhY2U2NGFpeCAoUFRUX1JFQURfU1BSUywgdGlkLCAKIAkJCSAgICAodW5zaWduZWQg bG9uZykgJnNwcnM2NCwgMCwgTlVMTCkpCkBAIC00NDUsNyArNDgzLDcgQEAgcGRjX3JlYWRfcmVn cyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAgICBJZiBzdWNjZXNzZnVsIHJldHVy biAwLCBlbHNlIG5vbi16ZXJvIGlzIHJldHVybmVkLiAgKi8KIAogc3RhdGljIGludAotcGRjX3dy aXRlX3JlZ3MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAorcGRjX3dyaXRlX3JlZ3Mg KHRocmVhZF9pbmZvICp1c2VyX2N1cnJlbnRfdGhyZWFkLAogCQlwdGhkYl90aWRfdCB0aWQsCiAJ CXVuc2lnbmVkIGxvbmcgbG9uZyBmbGFncywKIAkJcHRoZGJfY29udGV4dF90ICpjb250ZXh0KQpA QCAtNDU2LDYgKzQ5NCwxMCBAQCBwZGNfd3JpdGVfcmVncyAocHRoZGJfdXNlcl90IHVzZXJfY3Vy cmVudF9waWQsCiAgICAgIHRoaXMgaXMgbmVlZGVkLCBJIGhhdmUgaW1wbGVtZW50ZWQgd2hhdCBJ IHRoaW5rIGl0IHNob3VsZCBkbywKICAgICAgaG93ZXZlciB0aGlzIGNvZGUgaXMgdW50ZXN0ZWQu ICAqLwogCisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgCisgIGRhdGEg PSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9waWQgKHVzZXJfY3VycmVudF90aHJlYWQtPnB0 aWQucGlkICgpKTsKKwogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChn ZGJfc3RkbG9nLCAicGRjX3dyaXRlX3JlZ3MgdGlkPSVkIGZsYWdzPSVzXG4iLAogCQkoaW50KSB0 aWQsIGhleF9zdHJpbmcgKGZsYWdzKSk7CkBAIC00NjMsNyArNTA1LDcgQEAgcGRjX3dyaXRlX3Jl Z3MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAogICAvKiBHZW5lcmFsLXB1cnBvc2Ug cmVnaXN0ZXJzLiAgKi8KICAgaWYgKGZsYWdzICYgUFRIREJfRkxBR19HUFJTKQogICAgIHsKLSAg ICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXB0cmFjZTY0YWl4IChQ VFRfV1JJVEVfR1BSUywgdGlkLCAKIAkJICAgICAodW5zaWduZWQgbG9uZykgY29udGV4dC0+Z3By LCAwLCBOVUxMKTsKICAgICAgIGVsc2UKQEAgLTQ3OSw3ICs1MjEsNyBAQCBwZGNfd3JpdGVfcmVn cyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsCiAgIC8qIFNwZWNpYWwtcHVycG9zZSBy ZWdpc3RlcnMuICAqLwogICBpZiAoZmxhZ3MgJiBQVEhEQl9GTEFHX1NQUlMpCiAgICAgewotICAg ICAgaWYgKGFyY2g2NCkKKyAgICAgIGlmIChkYXRhLT5hcmNoNjQpCiAJewogCSAgcHRyYWNlNjRh aXggKFBUVF9XUklURV9TUFJTLCB0aWQsIAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpICZjb250 ZXh0LT5tc3IsIDAsIE5VTEwpOwpAQCAtNDk1LDI3ICs1MzcsMzAgQEAgcGRjX3dyaXRlX3JlZ3Mg KHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLAogLyogcHRoZGIgY2FsbGJhY2s6IHJlYWQg TEVOIGJ5dGVzIGZyb20gcHJvY2VzcyBBRERSIGludG8gQlVGLiAgKi8KIAogc3RhdGljIGludAot cGRjX3JlYWRfZGF0YSAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsIHZvaWQgKmJ1ZiwK K3BkY19yZWFkX2RhdGEgKHRocmVhZF9pbmZvICp1c2VyX2N1cnJlbnRfdGhyZWFkLCB2b2lkICpi dWYsCiAJICAgICAgIHB0aGRiX2FkZHJfdCBhZGRyLCBzaXplX3QgbGVuKQogewogICBpbnQgc3Rh dHVzLCByZXQ7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2Ri X3N0ZGxvZywKLQkJInBkY19yZWFkX2RhdGEgKHVzZXJfY3VycmVudF9waWQgPSAlbGQsIGJ1ZiA9 IDB4JWx4LCBhZGRyID0gJXMsIGxlbiA9ICVsZClcbiIsCi0JCXVzZXJfY3VycmVudF9waWQsIChs b25nKSBidWYsIGhleF9zdHJpbmcgKGFkZHIpLCBsZW4pOworCQkicGRjX3JlYWRfZGF0YSAodXNl cl9jdXJyZW50X3BpZCA9ICVkLCBidWYgPSAweCVseCwgYWRkciA9ICVzLCBsZW4gPSAlbGQpXG4i LAorCQl1c2VyX2N1cnJlbnRfdGhyZWFkLT5wdGlkLnBpZCAoKSwgKGxvbmcpIGJ1ZiwgaGV4X3N0 cmluZyAoYWRkciksIGxlbik7CiAKICAgLyogVGhpcyBpcyBuZWVkZWQgdG8gZWxpbWluYXRlIHRo ZSBkZXBlbmRlbmN5IG9mIGN1cnJlbnQgdGhyZWFkCiAgICAgIHdoaWNoIGlzIG51bGwgc28gdGhh dCB0aHJlYWQgcmVhZHMgdGhlIGNvcnJlY3QgdGFyZ2V0IG1lbW9yeS4gICovCiAgIHsKLSAgICBz Y29wZWRfcmVzdG9yZV9jdXJyZW50X3RocmVhZCByZXN0b3JlX2N1cnJlbnRfdGhyZWFkOworICAg IHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5mZXJpb3JfcHRpZCA9IG1ha2Vfc2NvcGVkX3Jlc3RvcmUg KCZpbmZlcmlvcl9wdGlkKTsKICAgICAvKiBCZWZvcmUgdGhlIGZpcnN0IGluZmVyaW9yIGlzIGFk ZGVkLCB3ZSBwYXNzIGluZmVyaW9yX3B0aWQucGlkICgpCiAgICAgICAgZnJvbSBwZF9lbmFibGUg KCkgd2hpY2ggaXMgMC4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3dpdGNoIHRocmVhZHMKICAgICAg ICBkdXJpbmcgZmlyc3QgaW5pdGlhbGlzYXRpb24uICBJbiB0aGUgcmVzdCBvZiB0aGUgY2FsbGJh Y2tzIHRoZQogICAgICAgIGN1cnJlbnQgdGhyZWFkIG5lZWRzIHRvIGJlIGNvcnJlY3QuICAqLwot ICAgIGlmICh1c2VyX2N1cnJlbnRfcGlkICE9IDApCi0gICAgICBzd2l0Y2hfdG9fdGhyZWFkIChj dXJyZW50X2luZmVyaW9yICgpLT5wcm9jZXNzX3RhcmdldCAoKSwKLQkJCXB0aWRfdCAodXNlcl9j dXJyZW50X3BpZCkpOworICAgIGluZmVyaW9yX3B0aWQgPSB1c2VyX2N1cnJlbnRfdGhyZWFkLT5w dGlkOworICAgIHNjb3BlZF9yZXN0b3JlX2N1cnJlbnRfaW5mZXJpb3IgcmVzdG9yZV9pbmZlcmlv cjsKKyAgICBzZXRfY3VycmVudF9pbmZlcmlvciAodXNlcl9jdXJyZW50X3RocmVhZC0+aW5mKTsK KworICAgIHNjb3BlZF9yZXN0b3JlX2N1cnJlbnRfcHJvZ3JhbV9zcGFjZSByZXN0b3JlX2N1cnJl bnRfcHJvZ3NwYWNlOworICAgIHNldF9jdXJyZW50X3Byb2dyYW1fc3BhY2UgKHVzZXJfY3VycmVu dF90aHJlYWQtPmluZi0+cHNwYWNlKTsKICAgICBzdGF0dXMgPSB0YXJnZXRfcmVhZF9tZW1vcnkg KGFkZHIsIChnZGJfYnl0ZSAqKSBidWYsIGxlbik7CiAgIH0KICAgcmV0ID0gc3RhdHVzID09IDAg PyBQRENfU1VDQ0VTUyA6IFBEQ19GQUlMVVJFOwpAQCAtNTI5LDE3ICs1NzQsMjcgQEAgcGRjX3Jl YWRfZGF0YSAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9waWQsIHZvaWQgKmJ1ZiwKIC8qIHB0 aGRiIGNhbGxiYWNrOiB3cml0ZSBMRU4gYnl0ZXMgZnJvbSBCVUYgdG8gcHJvY2VzcyBBRERSLiAg Ki8KIAogc3RhdGljIGludAotcGRjX3dyaXRlX2RhdGEgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJl bnRfcGlkLCB2b2lkICpidWYsCitwZGNfd3JpdGVfZGF0YSAodGhyZWFkX2luZm8gKnVzZXJfY3Vy cmVudF90aHJlYWQsIHZvaWQgKmJ1ZiwKIAkJcHRoZGJfYWRkcl90IGFkZHIsIHNpemVfdCBsZW4p CiB7CiAgIGludCBzdGF0dXMsIHJldDsKIAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBn ZGJfcHJpbnRmIChnZGJfc3RkbG9nLAotCQkicGRjX3dyaXRlX2RhdGEgKHVzZXJfY3VycmVudF9w aWQgPSAlbGQsIGJ1ZiA9IDB4JWx4LCBhZGRyID0gJXMsIGxlbiA9ICVsZClcbiIsCi0JCXVzZXJf Y3VycmVudF9waWQsIChsb25nKSBidWYsIGhleF9zdHJpbmcgKGFkZHIpLCBsZW4pOworCQkicGRj X3dyaXRlX2RhdGEgKHVzZXJfY3VycmVudF9waWQgPSAlZCwgYnVmID0gMHglbHgsIGFkZHIgPSAl cywgbGVuID0gJWxkKVxuIiwKKwkJdXNlcl9jdXJyZW50X3RocmVhZC0+cHRpZC5waWQgKCksIChs b25nKSBidWYsIGhleF9zdHJpbmcgKGFkZHIpLCBsZW4pOworCisgIHsKKyAgICBzY29wZWRfcmVz dG9yZSBzYXZlX2luZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9yZXN0b3JlICgmaW5mZXJpb3Jf cHRpZCk7CisgICAgaW5mZXJpb3JfcHRpZCA9IHVzZXJfY3VycmVudF90aHJlYWQtPnB0aWQ7Cisg ICAgc2NvcGVkX3Jlc3RvcmVfY3VycmVudF9pbmZlcmlvciByZXN0b3JlX2luZmVyaW9yOworICAg IHNldF9jdXJyZW50X2luZmVyaW9yICh1c2VyX2N1cnJlbnRfdGhyZWFkLT5pbmYpOworCisgICAg c2NvcGVkX3Jlc3RvcmVfY3VycmVudF9wcm9ncmFtX3NwYWNlIHJlc3RvcmVfY3VycmVudF9wcm9n c3BhY2U7CisgICAgc2V0X2N1cnJlbnRfcHJvZ3JhbV9zcGFjZSAodXNlcl9jdXJyZW50X3RocmVh ZC0+aW5mLT5wc3BhY2UpOworICAgIHN0YXR1cyA9IHRhcmdldF93cml0ZV9tZW1vcnkgKGFkZHIs IChnZGJfYnl0ZSAqKSBidWYsIGxlbik7CisgIH0KIAotICBzdGF0dXMgPSB0YXJnZXRfd3JpdGVf bWVtb3J5IChhZGRyLCAoZ2RiX2J5dGUgKikgYnVmLCBsZW4pOwogICByZXQgPSBzdGF0dXMgPT0g MCA/IFBEQ19TVUNDRVNTIDogUERDX0ZBSUxVUkU7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQp CkBAIC01NTIsMTIgKzYwNywxMiBAQCBwZGNfd3JpdGVfZGF0YSAocHRoZGJfdXNlcl90IHVzZXJf Y3VycmVudF9waWQsIHZvaWQgKmJ1ZiwKICAgIGluIEJVRlAuICAqLwogCiBzdGF0aWMgaW50Ci1w ZGNfYWxsb2MgKHB0aGRiX3VzZXJfdCB1c2VyX2N1cnJlbnRfcGlkLCBzaXplX3QgbGVuLCB2b2lk ICoqYnVmcCkKK3BkY19hbGxvYyAodGhyZWFkX2luZm8gKnVzZXJfY3VycmVudF90aHJlYWQsIHNp emVfdCBsZW4sIHZvaWQgKipidWZwKQogewogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBn ZGJfcHJpbnRmIChnZGJfc3RkbG9nLAotCQkicGRjX2FsbG9jICh1c2VyX2N1cnJlbnRfcGlkID0g JWxkLCBsZW4gPSAlbGQsIGJ1ZnAgPSAweCVseClcbiIsCi0JCXVzZXJfY3VycmVudF9waWQsIGxl biwgKGxvbmcpIGJ1ZnApOworCQkicGRjX2FsbG9jICh1c2VyX2N1cnJlbnRfcGlkID0gJWQsIGxl biA9ICVsZCwgYnVmcCA9IDB4JWx4KVxuIiwKKwkJdXNlcl9jdXJyZW50X3RocmVhZC0+cHRpZC5w aWQgKCksIGxlbiwgKGxvbmcpIGJ1ZnApOwogICAqYnVmcCA9IHhtYWxsb2MgKGxlbik7CiAgIGlm IChkZWJ1Z19haXhfdGhyZWFkKQogICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csIApAQCAtNTc0 LDEyICs2MjksMTIgQEAgcGRjX2FsbG9jIChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwg c2l6ZV90IGxlbiwgdm9pZCAqKmJ1ZnApCiAgICBwb2ludGVyIHRvIHRoZSByZXN1bHQgaW4gQlVG UC4gICovCiAKIHN0YXRpYyBpbnQKLXBkY19yZWFsbG9jIChwdGhkYl91c2VyX3QgdXNlcl9jdXJy ZW50X3BpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCB2b2lkICoqYnVmcCkKK3BkY19yZWFsbG9j ICh0aHJlYWRfaW5mbyAqdXNlcl9jdXJyZW50X3RocmVhZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVu LCB2b2lkICoqYnVmcCkKIHsKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50 ZiAoZ2RiX3N0ZGxvZywKLQkJInBkY19yZWFsbG9jICh1c2VyX2N1cnJlbnRfcGlkID0gJWxkLCBi dWYgPSAweCVseCwgbGVuID0gJWxkLCBidWZwID0gMHglbHgpXG4iLAotCQl1c2VyX2N1cnJlbnRf cGlkLCAobG9uZykgYnVmLCBsZW4sIChsb25nKSBidWZwKTsKKwkJInBkY19yZWFsbG9jICh1c2Vy X2N1cnJlbnRfcGlkID0gJWQsIGJ1ZiA9IDB4JWx4LCBsZW4gPSAlbGQsIGJ1ZnAgPSAweCVseClc biIsCisJCXVzZXJfY3VycmVudF90aHJlYWQtPnB0aWQucGlkICgpLCAobG9uZykgYnVmLCBsZW4s IChsb25nKSBidWZwKTsKICAgKmJ1ZnAgPSB4cmVhbGxvYyAoYnVmLCBsZW4pOwogICBpZiAoZGVi dWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLCAKQEAgLTU5MSwxMSAr NjQ2LDExIEBAIHBkY19yZWFsbG9jIChwdGhkYl91c2VyX3QgdXNlcl9jdXJyZW50X3BpZCwgdm9p ZCAqYnVmLCBzaXplX3QgbGVuLCB2b2lkICoqYnVmcCkKICAgIHJlYWxsb2MgY2FsbGJhY2suICAq LwogCiBzdGF0aWMgaW50Ci1wZGNfZGVhbGxvYyAocHRoZGJfdXNlcl90IHVzZXJfY3VycmVudF9w aWQsIHZvaWQgKmJ1ZikKK3BkY19kZWFsbG9jICh0aHJlYWRfaW5mbyAqdXNlcl9jdXJyZW50X3Ro cmVhZCwgdm9pZCAqYnVmKQogewogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJp bnRmIChnZGJfc3RkbG9nLCAKLQkJInBkY19mcmVlICh1c2VyX2N1cnJlbnRfcGlkID0gJWxkLCBi dWYgPSAweCVseClcbiIsIHVzZXJfY3VycmVudF9waWQsCisJCSJwZGNfZnJlZSAodXNlcl9jdXJy ZW50X3BpZCA9ICVkLCBidWYgPSAweCVseClcbiIsIHVzZXJfY3VycmVudF90aHJlYWQtPnB0aWQu cGlkICgpLAogCQkobG9uZykgYnVmKTsKICAgeGZyZWUgKGJ1Zik7CiAgIHJldHVybiBQRENfU1VD Q0VTUzsKQEAgLTYzOSwzOSArNjk0LDYgQEAgcGNtcCAoY29uc3Qgdm9pZCAqcDF2LCBjb25zdCB2 b2lkICpwMnYpCiAgIHJldHVybiBwMS0+cHRoaWQgPCBwMi0+cHRoaWQgPyAtMSA6IHAxLT5wdGhp ZCA+IHAyLT5wdGhpZDsKIH0KIAotLyogaXRlcmF0ZV9vdmVyX3RocmVhZHMoKSBjYWxsYmFjayBm b3IgY291bnRpbmcgR0RCIHRocmVhZHMuCi0KLSAgIERvIG5vdCBjb3VudCB0aGUgbWFpbiB0aHJl YWQgKHdob3NlIHRpZCBpcyB6ZXJvKS4gIFRoaXMgbWF0Y2hlcwotICAgdGhlIGxpc3Qgb2YgdGhy ZWFkcyBwcm92aWRlZCBieSB0aGUgcHRocmVhZGRlYnVnIGxpYnJhcnksIHdoaWNoCi0gICBkb2Vz IG5vdCBpbmNsdWRlIHRoYXQgbWFpbiB0aHJlYWQgZWl0aGVyLCBhbmQgdGh1cyBhbGxvd3MgdXMK LSAgIHRvIGNvbXBhcmUgdGhlIHR3byBsaXN0cy4gICovCi0KLXN0YXRpYyBpbnQKLWdpdGVyX2Nv dW50IChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCwgdm9pZCAqY291bnRwKQotewotICBpZiAo UERfVElEICh0aHJlYWQtPnB0aWQpKQotICAgICgqKGludCAqKSBjb3VudHApKys7Ci0gIHJldHVy biAwOwotfQotCi0vKiBpdGVyYXRlX292ZXJfdGhyZWFkcygpIGNhbGxiYWNrIGZvciBhY2N1bXVs YXRpbmcgR0RCIHRocmVhZCBwaWRzLgotCi0gICBEbyBub3QgaW5jbHVkZSB0aGUgbWFpbiB0aHJl YWQgKHdob3NlIHRpZCBpcyB6ZXJvKS4gIFRoaXMgbWF0Y2hlcwotICAgdGhlIGxpc3Qgb2YgdGhy ZWFkcyBwcm92aWRlZCBieSB0aGUgcHRocmVhZGRlYnVnIGxpYnJhcnksIHdoaWNoCi0gICBkb2Vz IG5vdCBpbmNsdWRlIHRoYXQgbWFpbiB0aHJlYWQgZWl0aGVyLCBhbmQgdGh1cyBhbGxvd3MgdXMK LSAgIHRvIGNvbXBhcmUgdGhlIHR3byBsaXN0cy4gICovCi0KLXN0YXRpYyBpbnQKLWdpdGVyX2Fj Y3VtIChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCwgdm9pZCAqYnVmcCkKLXsKLSAgaWYgKFBE X1RJRCAodGhyZWFkLT5wdGlkKSkKLSAgICB7Ci0gICAgICAqKihzdHJ1Y3QgdGhyZWFkX2luZm8g KioqKSBidWZwID0gdGhyZWFkOwotICAgICAgKCooc3RydWN0IHRocmVhZF9pbmZvICoqKikgYnVm cCkrKzsKLSAgICB9Ci0gIHJldHVybiAwOwotfQotCiAvKiBwdGlkIGNvbXBhcmlzb24gZnVuY3Rp b24gKi8KIAogc3RhdGljIGludApAQCAtNzE5LDcgKzc0MSwxMCBAQCBnZXRfc2lnbmFsZWRfdGhy ZWFkIChpbnQgcGlkKQogCQkgICAgc2l6ZW9mICh0aHJpbmYpLCAma3RpZCwgMSkgIT0gMSkKIAli cmVhazsKIAotICAgICAgaWYgKHRocmluZi50aV9jdXJzaWcgPT0gU0lHVFJBUCkKKyAgICAgIC8q IFdlIGFsc28gbmVlZCB0byBrZWVwIGluIG1pbmQgVHJhcCBhbmQgaW50ZXJydXB0IG9yIGFueQor ICAgICAgICAgc2lnbmFsIHRoYXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBpbiBwZF91cGRhdGUgKCku ICAqLworCisgICAgICBpZiAodGhyaW5mLnRpX2N1cnNpZykKIAlyZXR1cm4gdGhyaW5mLnRpX3Rp ZDsKICAgICB9CiAKQEAgLTc0MSw3ICs3NjYsNyBAQCBnZXRfc2lnbmFsZWRfdGhyZWFkIChpbnQg cGlkKQogICAgICAgIGhhdmUgZGlmZmljdWx0eSB3aXRoIGNlcnRhaW4gY2FsbCBwYXR0ZXJucyAq LwogCiBzdGF0aWMgdm9pZAotc3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKK3N5bmNfdGhyZWFk bGlzdHMgKHBpZF90IHBpZCwgaW50IHB0aGRlYnVncmVhZHkpCiB7CiAgIGludCBjbWQsIHN0YXR1 czsKICAgaW50IHBjb3VudCwgcHNpemUsIHBpLCBnY291bnQsIGdpOwpAQCAtNzUwLDYgKzc3NSwx MSBAQCBzeW5jX3RocmVhZGxpc3RzIChpbnQgcGlkKQogICBwdGhkYl9wdGhyZWFkX3QgcGR0aWQ7 CiAgIHB0aHJlYWRfdCBwdGhpZDsKICAgcHRoZGJfdGlkX3QgdGlkOworICBwcm9jZXNzX3N0cmF0 dW1fdGFyZ2V0ICpwcm9jX3RhcmdldAorICAgICAgICAgICAgPSBjdXJyZW50X2luZmVyaW9yICgp LT5wcm9jZXNzX3RhcmdldCAoKTsKKyAgdGhyZWFkX2luZm8gICp0cDsKKyAgc3RydWN0IGFpeF90 aHJlYWRfdmFyaWFibGVzICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9m b3JfcGlkIChwaWQpOwogCiAgIC8qIEFjY3VtdWxhdGUgYW4gYXJyYXkgb2YgbGlicHRoZGVidWcg dGhyZWFkcyBzb3J0ZWQgYnkgcHRocmVhZCBpZC4gICovCiAKQEAgLTc1OSwxMSArNzg5LDExIEBA IHN5bmNfdGhyZWFkbGlzdHMgKGludCBwaWQpCiAKICAgZm9yIChjbWQgPSBQVEhEQl9MSVNUX0ZJ UlNUOzsgY21kID0gUFRIREJfTElTVF9ORVhUKQogICAgIHsKLSAgICAgIHN0YXR1cyA9IHB0aGRi X3B0aHJlYWQgKHBkX3Nlc3Npb24sICZwZHRpZCwgY21kKTsKKyAgICAgIHN0YXR1cyA9IHB0aGRi X3B0aHJlYWQgKGRhdGEtPnBkX3Nlc3Npb24sICZwZHRpZCwgY21kKTsKICAgICAgIGlmIChzdGF0 dXMgIT0gUFRIREJfU1VDQ0VTUyB8fCBwZHRpZCA9PSBQVEhEQl9JTlZBTElEX1BUSFJFQUQpCiAJ YnJlYWs7CiAKLSAgICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfcHRpZCAocGRfc2Vzc2lvbiwg cGR0aWQsICZwdGhpZCk7CisgICAgICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX3B0aWQgKGRhdGEt PnBkX3Nlc3Npb24sIHBkdGlkLCAmcHRoaWQpOwogICAgICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9T VUNDRVNTIHx8IHB0aGlkID09IFBUSERCX0lOVkFMSURfUFRJRCkKIAljb250aW51ZTsKIApAQCAt NzgwLDcgKzgxMCw3IEBAIHN5bmNfdGhyZWFkbGlzdHMgKGludCBwaWQpCiAKICAgZm9yIChwaSA9 IDA7IHBpIDwgcGNvdW50OyBwaSsrKQogICAgIHsKLSAgICAgIHN0YXR1cyA9IHB0aGRiX3B0aHJl YWRfdGlkIChwZF9zZXNzaW9uLCBwYnVmW3BpXS5wZHRpZCwgJnRpZCk7CisgICAgICBzdGF0dXMg PSBwdGhkYl9wdGhyZWFkX3RpZCAoZGF0YS0+cGRfc2Vzc2lvbiwgcGJ1ZltwaV0ucGR0aWQsICZ0 aWQpOwogICAgICAgaWYgKHN0YXR1cyAhPSBQVEhEQl9TVUNDRVNTKQogCXRpZCA9IFBUSERCX0lO VkFMSURfVElEOwogICAgICAgcGJ1ZltwaV0udGlkID0gdGlkOwpAQCAtNzkwLDEzICs4MjAsMzIg QEAgc3luY190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAogICAvKiBBY2N1bXVsYXRlIGFuIGFycmF5 IG9mIEdEQiB0aHJlYWRzIHNvcnRlZCBieSBwaWQuICAqLwogCisgIC8qIGdjb3VudCBpcyBHREIg dGhyZWFkIGNvdW50IGFuZCBwY291bnQgaXMgcHRocmVhZGxpYiB0aHJlYWQgY291bnQuICAqLwor CiAgIGdjb3VudCA9IDA7Ci0gIGl0ZXJhdGVfb3Zlcl90aHJlYWRzIChnaXRlcl9jb3VudCwgJmdj b3VudCk7CisgIGZvciAodGhyZWFkX2luZm8gKnRwIDogYWxsX3RocmVhZHMgKHByb2NfdGFyZ2V0 LCBwdGlkX3QgKHBpZCkpKQorICAgIGdjb3VudCsrOwogICBnID0gZ2J1ZiA9IFhORVdWRUMgKHN0 cnVjdCB0aHJlYWRfaW5mbyAqLCBnY291bnQpOwotICBpdGVyYXRlX292ZXJfdGhyZWFkcyAoZ2l0 ZXJfYWNjdW0sICZnKTsKKyAgZm9yICh0aHJlYWRfaW5mbyAqdHAgOiBhbGxfdGhyZWFkcyAocHJv Y190YXJnZXQsIHB0aWRfdCAocGlkKSkpCisgICAgKmcrKyA9IHRwOwogICBxc29ydCAoZ2J1Ziwg Z2NvdW50LCBzaXplb2YgKmdidWYsIGdjbXApOwogCisgIHRwID0gZmluZF90aHJlYWRfcHRpZCAo cHJvY190YXJnZXQsIHB0aWRfdCAocGlkKSk7CisKKyAgLyogSWYgdGhlIHB0aHJlYWRsaWJyYXJ5 IGlzIG5vdCByZWFkeSB0byBkZWJ1ZyAKKyAgICAgdGhlbiB0aGlzIGlzIGp1c3QgYSBtYWluIHBy b2Nlc3Mgd2hpY2ggbmVlZHMgCisgICAgIGEgcHJpdiB0byBiZSBzZXQuICBUaGUgaWYgY29uZGl0 aW9uIGJlbG93IGRvZXMgCisgICAgIHRoZSBzYW1lLiAgT3RoZXJ3aXNlIHdlIGdvIHRvIHRoZSBm b3IgbG9vcCB0byAKKyAgICAgc3luYyB0aGUgcHRocmVhZCBhbmQgR0RCIHRocmVhZCBsaXN0cy4g ICovCisKKyAgaWYgKGdidWZbMF0tPnB0aWQuaXNfcGlkICgpICYmICFwdGhkZWJ1Z3JlYWR5KQor ICAgIHsKKyAgICAgIGFpeF90aHJlYWRfaW5mbyAqcHJpdiA9IG5ldyBhaXhfdGhyZWFkX2luZm87 CisgICAgICB0cC0+cHJpdi5yZXNldCAocHJpdik7CisgICAgfQorCiAgIC8qIEFwcGx5IGRpZmZl cmVuY2VzIGJldHdlZW4gdGhlIHR3byBhcnJheXMgdG8gR0RCJ3MgdGhyZWFkIGxpc3QuICAqLwor ICBlbHNlICAKICAgZm9yIChwaSA9IGdpID0gMDsgcGkgPCBwY291bnQgfHwgZ2kgPCBnY291bnQ7 KQogICAgIHsKICAgICAgIGlmIChwaSA9PSBwY291bnQpCkBAIC04MTAsOCArODU5LDYgQEAgc3lu Y190aHJlYWRsaXN0cyAoaW50IHBpZCkKIAkgIHByaXYtPnBkdGlkID0gcGJ1ZltwaV0ucGR0aWQ7 CiAJICBwcml2LT50aWQgPSBwYnVmW3BpXS50aWQ7CiAKLQkgIHByb2Nlc3Nfc3RyYXR1bV90YXJn ZXQgKnByb2NfdGFyZ2V0Ci0JICAgID0gY3VycmVudF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJn ZXQgKCk7CiAJICB0aHJlYWQgPSBhZGRfdGhyZWFkX3dpdGhfaW5mbyAocHJvY190YXJnZXQsCiAJ CQkJCSBwdGlkX3QgKHBpZCwgMCwgcGJ1ZltwaV0ucHRoaWQpLAogCQkJCQkgcHJpdik7CkBAIC04 NDEsMTMgKzg4OCwyNyBAQCBzeW5jX3RocmVhZGxpc3RzIChpbnQgcGlkKQogCSAgICB9CiAJICBl bHNlIGlmIChjbXBfcmVzdWx0ID4gMCkKIAkgICAgewotCSAgICAgIGRlbGV0ZV90aHJlYWQgKGdi dWZbZ2ldKTsKLQkgICAgICBnaSsrOworCSAgICAgIC8qIFRoaXMgaXMgdG8gbWFrZSB0aGUgbWFp biBwcm9jZXNzIHRocmVhZCBub3cgbG9vaworICAgICAgICAgICAgICAgICBsaWtlIGEgdGhyZWFk LiAgKi8KKworCSAgICAgIGlmIChncHRpZC5pc19waWQgKCkgJiYgcHRoZGVidWdyZWFkeSkKKwkJ eworCQkgIHRocmVhZF9jaGFuZ2VfcHRpZCAocHJvY190YXJnZXQsIGdwdGlkLCBwcHRpZCk7CisJ CSAgYWl4X3RocmVhZF9pbmZvICpwcml2ID0gbmV3IGFpeF90aHJlYWRfaW5mbzsKKyAgICAgICAg ICAgICAgICAgIHByaXYtPnBkdGlkID0gcGJ1ZltwaV0ucGR0aWQ7CisgICAgICAgICAgICAgICAg ICBwcml2LT50aWQgPSBwYnVmW3BpXS50aWQ7CisJCSAgdHAtPnByaXYucmVzZXQgKHByaXYpOwor CQkgIGdpKys7CisJCSAgcGkrKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGRlbGV0ZV90 aHJlYWQgKGdidWZbZ2ldKTsKKwkJICBnaSsrOworCQl9CiAJICAgIH0KIAkgIGVsc2UKIAkgICAg ewotCSAgICAgIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQgKnByb2NfdGFyZ2V0Ci0JCT0gY3VycmVu dF9pbmZlcmlvciAoKS0+cHJvY2Vzc190YXJnZXQgKCk7CiAJICAgICAgdGhyZWFkID0gYWRkX3Ro cmVhZCAocHJvY190YXJnZXQsIHBwdGlkKTsKIAogCSAgICAgIGFpeF90aHJlYWRfaW5mbyAqcHJp diA9IG5ldyBhaXhfdGhyZWFkX2luZm87CkBAIC04ODEsMjEgKzk0MiwyNCBAQCBpdGVyX3RpZCAo c3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIHZvaWQgKnRpZHApCiAgICByZXR1cm4gYSBwaWQt b25seSBwdGlkIHdpdGggUElELiAgKi8KIAogc3RhdGljIHB0aWRfdAotcGRfdXBkYXRlIChpbnQg cGlkKQorcGRfdXBkYXRlIChwaWRfdCBwaWQsIGludCBwdGhkZWJ1Z3JlYWR5KQogewogICBpbnQg c3RhdHVzOwogICBwdGlkX3QgcHRpZDsKICAgcHRoZGJfdGlkX3QgdGlkOwogICBzdHJ1Y3QgdGhy ZWFkX2luZm8gKnRocmVhZCA9IE5VTEw7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAq ZGF0YTsKIAotICBpZiAoIXBkX2FjdGl2ZSkKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxw ZXJfZm9yX3BpZCAocGlkKTsKKworICBpZiAoIWRhdGEtPnBkX2FjdGl2ZSkKICAgICByZXR1cm4g cHRpZF90IChwaWQpOwogCi0gIHN0YXR1cyA9IHB0aGRiX3Nlc3Npb25fdXBkYXRlIChwZF9zZXNz aW9uKTsKKyAgc3RhdHVzID0gcHRoZGJfc2Vzc2lvbl91cGRhdGUgKGRhdGEtPnBkX3Nlc3Npb24p OwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgcmV0dXJuIHB0aWRfdCAocGlk KTsKIAotICBzeW5jX3RocmVhZGxpc3RzIChwaWQpOworICBzeW5jX3RocmVhZGxpc3RzIChwaWQs IHB0aGRlYnVncmVhZHkpOwogCiAgIC8qIERlZmluZSAiY3VycmVudCB0aHJlYWQiIGFzIG9uZSB0 aGF0IGp1c3QgcmVjZWl2ZWQgYSB0cmFwIHNpZ25hbC4gICovCiAKQEAgLTkxNSwzMiArOTc5LDIy IEBAIHBkX3VwZGF0ZSAoaW50IHBpZCkKICAgIGZvciB0aGF0IHRocmVhZC4gIE90aGVyd2lzZSwg cmV0dXJuIGEgcHRpZC1vbmx5IHB0aWQgdXNpbmcgUElELiAgKi8KIAogc3RhdGljIHB0aWRfdAot cGRfYWN0aXZhdGUgKGludCBwaWQpCitwZF9hY3RpdmF0ZSAocGlkX3QgcGlkLCBpbnQgcHRoZGVi dWdyZWFkeSkKIHsKICAgaW50IHN0YXR1czsKLQkJCi0gIHN0YXR1cyA9IHB0aGRiX3Nlc3Npb25f aW5pdCAocGlkLCBhcmNoNjQgPyBQRU1fNjRCSVQgOiBQRU1fMzJCSVQsCisgIHN0cnVjdCBhaXhf dGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKKyAgZGF0YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJf Zm9yX3BpZCAocGlkKTsKKyAgdGhyZWFkX2luZm8gKnRocmVhZCA9IGZpbmRfdGhyZWFkX3B0aWQg KGN1cnJlbnRfaW5mZXJpb3IgKCksIHB0aWRfdCAocGlkKSk7CisgIAorICBzdGF0dXMgPSBwdGhk Yl9zZXNzaW9uX2luaXQgKHRocmVhZCwgZGF0YS0+YXJjaDY0ID8gUEVNXzY0QklUIDogUEVNXzMy QklULAogCQkJICAgICAgIFBUSERCX0ZMQUdfUkVHUywgJnBkX2NhbGxiYWNrcywgCi0JCQkgICAg ICAgJnBkX3Nlc3Npb24pOworCQkJICAgICAgICZkYXRhLT5wZF9zZXNzaW9uKTsKICAgaWYgKHN0 YXR1cyAhPSBQVEhEQl9TVUNDRVNTKQogICAgIHsKICAgICAgIHJldHVybiBwdGlkX3QgKHBpZCk7 CiAgICAgfQotICBwZF9hY3RpdmUgPSAxOwotICByZXR1cm4gcGRfdXBkYXRlIChwaWQpOwotfQot Ci0vKiBVbmRvIHRoZSBlZmZlY3RzIG9mIHBkX2FjdGl2YXRlKCkuICAqLwotCi1zdGF0aWMgdm9p ZAotcGRfZGVhY3RpdmF0ZSAodm9pZCkKLXsKLSAgaWYgKCFwZF9hY3RpdmUpCi0gICAgcmV0dXJu OwotICBwdGhkYl9zZXNzaW9uX2Rlc3Ryb3kgKHBkX3Nlc3Npb24pOwotICAKLSAgcGlkX3RvX3By YyAoJmluZmVyaW9yX3B0aWQpOwotICBwZF9hY3RpdmUgPSAwOworICBkYXRhLT5wZF9hY3RpdmUg PSAxOworICByZXR1cm4gcGRfdXBkYXRlIChwaWQsIHB0aGRlYnVncmVhZHkpOwogfQogCiAvKiBB biBvYmplY3QgZmlsZSBoYXMganVzdCBiZWVuIGxvYWRlZC4gIENoZWNrIHdoZXRoZXIgdGhlIGN1 cnJlbnQKQEAgLTk1MiwxNyArMTAwNiwyNCBAQCBwZF9lbmFibGUgKHZvaWQpCiAgIGludCBzdGF0 dXM7CiAgIGNoYXIgKnN0dWJfbmFtZTsKICAgc3RydWN0IGJvdW5kX21pbmltYWxfc3ltYm9sIG1z OworICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisKKyAgaWYgKCFpbmZlcmlv cl9wdGlkLnBpZCAoKSkKKyAgICByZXR1cm47CisgIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRh X2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRpZCk7CiAKICAgLyogRG9uJ3QgaW5pdGlhbGl6 ZSB0d2ljZS4gICovCi0gIGlmIChwZF9hYmxlKQorICBpZiAoZGF0YS0+cGRfYWJsZSkKICAgICBy ZXR1cm47CiAKICAgLyogQ2hlY2sgYXBwbGljYXRpb24gd29yZCBzaXplLiAgKi8KLSAgYXJjaDY0 ID0gcmVnaXN0ZXJfc2l6ZSAodGFyZ2V0X2dkYmFyY2ggKCksIDApID09IDg7CisgIGRhdGEtPmFy Y2g2NCA9IHJlZ2lzdGVyX3NpemUgKHRhcmdldF9nZGJhcmNoICgpLCAwKSA9PSA4OwogCiAgIC8q IENoZWNrIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIGlzIHB0aHJlYWRlZC4gICovCiAgIHN0dWJf bmFtZSA9IE5VTEw7Ci0gIHN0YXR1cyA9IHB0aGRiX3Nlc3Npb25fcHRocmVhZGVkIChpbmZlcmlv cl9wdGlkLnBpZCAoKSwgUFRIREJfRkxBR19SRUdTLAorICB0aHJlYWRfaW5mbyAqdGhyZWFkID0g ZmluZF90aHJlYWRfcHRpZCAoY3VycmVudF9pbmZlcmlvciAoKSwgaW5mZXJpb3JfcHRpZCk7Cisg IHN0YXR1cyA9IHB0aGRiX3Nlc3Npb25fcHRocmVhZGVkICh0aHJlYWQsIFBUSERCX0ZMQUdfUkVH UywKIAkJCQkgICAgJnBkX2NhbGxiYWNrcywgJnN0dWJfbmFtZSk7CiAgIGlmICgoc3RhdHVzICE9 IFBUSERCX1NVQ0NFU1MKICAgICAgICAmJiBzdGF0dXMgIT0gUFRIREJfTk9UX1BUSFJFQURFRCkg fHwgIXN0dWJfbmFtZSkKQEAgLTk3MiwxOCArMTAzMywxOCBAQCBwZF9lbmFibGUgKHZvaWQpCiAg IG1zID0gbG9va3VwX21pbmltYWxfc3ltYm9sIChzdHViX25hbWUsIE5VTEwsIE5VTEwpOwogICBp ZiAobXMubWluc3ltID09IE5VTEwpCiAgICAgcmV0dXJuOwotICBwZF9icmtfYWRkciA9IG1zLnZh bHVlX2FkZHJlc3MgKCk7Ci0gIGlmICghY3JlYXRlX3RocmVhZF9ldmVudF9icmVha3BvaW50ICh0 YXJnZXRfZ2RiYXJjaCAoKSwgcGRfYnJrX2FkZHIpKQorICBkYXRhLT5wZF9icmtfYWRkciA9IG1z LnZhbHVlX2FkZHJlc3MgKCk7CisgIGlmICghY3JlYXRlX3RocmVhZF9ldmVudF9icmVha3BvaW50 ICh0YXJnZXRfZ2RiYXJjaCAoKSwgZGF0YS0+cGRfYnJrX2FkZHIpKQogICAgIHJldHVybjsKIAog ICAvKiBQcmVwYXJlIGZvciB0aHJlYWQgZGVidWdnaW5nLiAgKi8KICAgY3VycmVudF9pbmZlcmlv ciAoKS0+cHVzaF90YXJnZXQgKCZhaXhfdGhyZWFkX29wcyk7Ci0gIHBkX2FibGUgPSAxOworICBk YXRhLT5wZF9hYmxlID0gMTsgCiAKICAgLyogSWYgd2UncmUgZGVidWdnaW5nIGEgY29yZSBmaWxl IG9yIGFuIGF0dGFjaGVkIGluZmVyaW9yLCB0aGUKICAgICAgcHRocmVhZCBsaWJyYXJ5IG1heSBh bHJlYWR5IGhhdmUgYmVlbiBpbml0aWFsaXplZCwgc28gdHJ5IHRvCiAgICAgIGFjdGl2YXRlIHRo cmVhZCBkZWJ1Z2dpbmcuICAqLwotICBwZF9hY3RpdmF0ZSAoaW5mZXJpb3JfcHRpZC5waWQgKCkp OworICBwZF9hY3RpdmF0ZSAoaW5mZXJpb3JfcHRpZC5waWQgKCksIDApOwogfQogCiAvKiBVbmRv IHRoZSBlZmZlY3RzIG9mIHBkX2VuYWJsZSgpLiAgKi8KQEAgLTk5MSwyOCArMTA1MiwzMSBAQCBw ZF9lbmFibGUgKHZvaWQpCiBzdGF0aWMgdm9pZAogcGRfZGlzYWJsZSAodm9pZCkKIHsKLSAgaWYg KCFwZF9hYmxlKQorICBzdHJ1Y3QgYWl4X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIGRhdGEg PSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChpbmZlcmlvcl9wdGlkKTsKKworICBp ZiAoIWRhdGEtPnBkX2FibGUpCisgICAgcmV0dXJuOworICBpZiAoIWRhdGEtPnBkX2FjdGl2ZSkK ICAgICByZXR1cm47Ci0gIGlmIChwZF9hY3RpdmUpCi0gICAgcGRfZGVhY3RpdmF0ZSAoKTsKLSAg cGRfYWJsZSA9IDA7CisgIHB0aGRiX3Nlc3Npb25fZGVzdHJveSAoZGF0YS0+cGRfc2Vzc2lvbik7 CisgCisgIHBpZF90b19wcmMgKCZpbmZlcmlvcl9wdGlkKTsKKyAgZGF0YS0+cGRfYWN0aXZlID0g MDsKKyAgZGF0YS0+cGRfYWJsZSA9IDA7CiAgIGN1cnJlbnRfaW5mZXJpb3IgKCktPnVucHVzaF90 YXJnZXQgKCZhaXhfdGhyZWFkX29wcyk7CiB9CiAKIC8qIG5ld19vYmpmaWxlIG9ic2VydmVyIGNh bGxiYWNrLgogCiAgICBJZiBPQkpGSUxFIGlzIG5vbi1udWxsLCBjaGVjayB3aGV0aGVyIGEgdGhy ZWFkZWQgYXBwbGljYXRpb24gaXMKLSAgIGJlaW5nIGRlYnVnZ2VkLCBhbmQgaWYgc28sIHByZXBh cmUgZm9yIHRocmVhZCBkZWJ1Z2dpbmcuCi0KLSAgIElmIE9CSkZJTEUgaXMgbnVsbCwgc3RvcCBk ZWJ1Z2dpbmcgdGhyZWFkcy4gICovCisgICBiZWluZyBkZWJ1Z2dlZCwgYW5kIGlmIHNvLCBwcmVw YXJlIGZvciB0aHJlYWQgZGVidWdnaW5nLiAgKi8KIAogc3RhdGljIHZvaWQKIG5ld19vYmpmaWxl IChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSkKIHsKICAgaWYgKG9iamZpbGUpCiAgICAgcGRfZW5h YmxlICgpOwotICBlbHNlCi0gICAgcGRfZGlzYWJsZSAoKTsKIH0KIAogLyogQXR0YWNoIHRvIHBy b2Nlc3Mgc3BlY2lmaWVkIGJ5IEFSR1MuICAqLwpAQCAtMTA0Miw4ICsxMTA2LDExIEBAIGFpeF90 aHJlYWRfdGFyZ2V0OjpyZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSBnZGJfc2ln bmFsIHNpZykKIHsKICAgc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQ7CiAgIHB0aGRiX3RpZF90 IHRpZFsyXTsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICAKKyAgZGF0 YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKHB0aWQpOwogCi0gIGlmICghUERf VElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlkICgpID09IDApCiAgICAgewogICAgICAgc2NvcGVk X3Jlc3RvcmUgc2F2ZV9pbmZlcmlvcl9wdGlkID0gbWFrZV9zY29wZWRfcmVzdG9yZSAoJmluZmVy aW9yX3B0aWQpOwogICAgICAgCkBAIC0xMDY1LDcgKzExMzIsNyBAQCBhaXhfdGhyZWFkX3Rhcmdl dDo6cmVzdW1lIChwdGlkX3QgcHRpZCwgaW50IHN0ZXAsIGVudW0gZ2RiX3NpZ25hbCBzaWcpCiAJ ICAgICAgIHB0aWQubHdwICgpKTsKICAgICAgIHRpZFsxXSA9IDA7CiAKLSAgICAgIGlmIChhcmNo NjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXB0cmFjZTY0YWl4IChQVFRfQ09OVElOVUUs IHRpZFswXSwgKGxvbmcgbG9uZykgMSwKIAkJICAgICBnZGJfc2lnbmFsX3RvX2hvc3QgKHNpZyks IChQVFJBQ0VfVFlQRV9BUkc1KSB0aWQpOwogICAgICAgZWxzZQpAQCAtMTA4Miw2ICsxMTQ5LDcg QEAgcHRpZF90CiBhaXhfdGhyZWFkX3RhcmdldDo6d2FpdCAocHRpZF90IHB0aWQsIHN0cnVjdCB0 YXJnZXRfd2FpdHN0YXR1cyAqc3RhdHVzLAogCQkJIHRhcmdldF93YWl0X2ZsYWdzIG9wdGlvbnMp CiB7CisgIHN0cnVjdCBhaXhfdGhyZWFkX3ZhcmlhYmxlcyAqZGF0YTsKICAgewogICAgIHBpZF90 b19wcmMgKCZwdGlkKTsKIApAQCAtMTA5NSw4ICsxMTYzLDEwIEBAIGFpeF90aHJlYWRfdGFyZ2V0 Ojp3YWl0IChwdGlkX3QgcHRpZCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICpzdGF0dXMsCiAg ICAgIHBpZC1vbmx5IHB0aWRzLiAgKi8KICAgZ2RiX2Fzc2VydCAocHRpZC5pc19waWQgKCkpOwog CisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zvcl9wdGlkIChwdGlkKTsKKwogICAv KiBDaGVjayB3aGV0aGVyIGxpYnB0aGRlYnVnIG1pZ2h0IGJlIHJlYWR5IHRvIGJlIGluaXRpYWxp emVkLiAgKi8KLSAgaWYgKCFwZF9hY3RpdmUgJiYgc3RhdHVzLT5raW5kICgpID09IFRBUkdFVF9X QUlUS0lORF9TVE9QUEVECisgIGlmICghZGF0YS0+cGRfYWN0aXZlICYmIHN0YXR1cy0+a2luZCAo KSA9PSBUQVJHRVRfV0FJVEtJTkRfU1RPUFBFRAogICAgICAgJiYgc3RhdHVzLT5zaWcgKCkgPT0g R0RCX1NJR05BTF9UUkFQKQogICAgIHsKICAgICAgIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQgKnBy b2NfdGFyZ2V0CkBAIC0xMTA1LDExICsxMTc1LDExIEBAIGFpeF90aHJlYWRfdGFyZ2V0Ojp3YWl0 IChwdGlkX3QgcHRpZCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICpzdGF0dXMsCiAgICAgICBz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOwogCiAgICAgICBpZiAo cmVnY2FjaGVfcmVhZF9wYyAocmVnY2FjaGUpCi0JICAtIGdkYmFyY2hfZGVjcl9wY19hZnRlcl9i cmVhayAoZ2RiYXJjaCkgPT0gcGRfYnJrX2FkZHIpCi0JcmV0dXJuIHBkX2FjdGl2YXRlIChwdGlk LnBpZCAoKSk7CisJICAtIGdkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhayAoZ2RiYXJjaCkgPT0g ZGF0YS0+cGRfYnJrX2FkZHIpCisJcmV0dXJuIHBkX2FjdGl2YXRlIChwdGlkLnBpZCAoKSwgMSk7 CiAgICAgfQogCi0gIHJldHVybiBwZF91cGRhdGUgKHB0aWQucGlkICgpKTsKKyAgcmV0dXJuIHBk X3VwZGF0ZSAocHRpZC5waWQgKCksIDApOwogfQogCiAvKiBSZWNvcmQgdGhhdCB0aGUgNjQtYml0 IGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgY29udGFpbiBWQUxTLiAgKi8KQEAgLTEyMjksMTgg KzEyOTksMjAgQEAgZmV0Y2hfcmVnc191c2VyX3RocmVhZCAoc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogICBwcGNfZ2RiYXJjaF90ZGVwICp0ZGVwID0g Z2RiYXJjaF90ZGVwPHBwY19nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKICAgaW50IHN0YXR1cywg aTsKICAgcHRoZGJfY29udGV4dF90IGN0eDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVz ICpkYXRhOworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJp b3JfcHRpZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2Ri X3N0ZGxvZywgCiAJCSJmZXRjaF9yZWdzX3VzZXJfdGhyZWFkICVseFxuIiwgKGxvbmcpIHBkdGlk KTsKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0IChwZF9zZXNzaW9uLCBwZHRpZCwg JmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfY29udGV4dCAoZGF0YS0+cGRfc2Vzc2lv biwgcGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NFU1MpCiAgICAgZXJy b3IgKF8oImFpeC10aHJlYWQ6IGZldGNoX3JlZ2lzdGVyczogcHRoZGJfcHRocmVhZF9jb250ZXh0 IHJldHVybmVkICVzIiksCiAJICAgcGRfc3RhdHVzMnN0ciAoc3RhdHVzKSk7CiAKICAgLyogR2Vu ZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAKLSAgaWYgKGFyY2g2NCkKKyAgaWYgKGRhdGEt PmFyY2g2NCkKICAgICBzdXBwbHlfZ3ByczY0IChyZWdjYWNoZSwgY3R4Lmdwcik7CiAgIGVsc2UK ICAgICBmb3IgKGkgPSAwOyBpIDwgcHBjX251bV9ncHJzOyBpKyspCkBAIC0xMjUzLDcgKzEzMjUs NyBAQCBmZXRjaF9yZWdzX3VzZXJfdGhyZWFkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBw dGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAgLyogU3BlY2lhbCByZWdpc3RlcnMuICAqLwogCi0g IGlmIChhcmNoNjQpCisgIGlmIChkYXRhLT5hcmNoNjQpCiAgICAgc3VwcGx5X3NwcnM2NCAocmVn Y2FjaGUsIGN0eC5pYXIsIGN0eC5tc3IsIGN0eC5jciwgY3R4LmxyLCBjdHguY3RyLAogCQkJICAg ICBjdHgueGVyLCBjdHguZnBzY3IpOwogICBlbHNlCkBAIC0xMjg4LDE4ICsxMzYwLDIxIEBAIGZl dGNoX3JlZ3Nfa2VybmVsX3RocmVhZCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJl Z25vLAogICBzdHJ1Y3QgcHR4c3BycyBzcHJzNjQ7CiAgIHN0cnVjdCBwdHNwcnMgc3ByczMyOwog ICBpbnQgaTsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRhOworICAKKyAgZGF0 YSA9IGdldF90aHJlYWRfZGF0YV9oZWxwZXJfZm9yX3B0aWQgKHJlZ2NhY2hlLT5wdGlkICgpKTsK IAogICBpZiAoZGVidWdfYWl4X3RocmVhZCkKICAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAog CQkiZmV0Y2hfcmVnc19rZXJuZWxfdGhyZWFkIHRpZD0lbHggcmVnbm89JWQgYXJjaDY0PSVkXG4i LAotCQkobG9uZykgdGlkLCByZWdubywgYXJjaDY0KTsKKwkJKGxvbmcpIHRpZCwgcmVnbm8sIGRh dGEtPmFyY2g2NCk7CiAKICAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4gICovCiAgIGlm IChyZWdubyA9PSAtMQogICAgICAgfHwgKHRkZXAtPnBwY19ncDBfcmVnbnVtIDw9IHJlZ25vCiAJ ICAmJiByZWdubyA8IHRkZXAtPnBwY19ncDBfcmVnbnVtICsgcHBjX251bV9ncHJzKSkKICAgICB7 Ci0gICAgICBpZiAoYXJjaDY0KQorICAgICAgaWYgKGRhdGEtPmFyY2g2NCkKIAl7CiAJICBpZiAo IXB0cmFjZTY0YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQsIAogCQkJICAgICh1bnNpZ25lZCBsb25n KSBncHJzNjQsIDAsIE5VTEwpKQpAQCAtMTMzMSw3ICsxNDA2LDcgQEAgZmV0Y2hfcmVnc19rZXJu ZWxfdGhyZWFkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAKICAgaWYg KHJlZ25vID09IC0xIHx8IHNwZWNpYWxfcmVnaXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8pKQogICAg IHsKLSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIGlm ICghcHRyYWNlNjRhaXggKFBUVF9SRUFEX1NQUlMsIHRpZCwgCiAJCQkgICAgKHVuc2lnbmVkIGxv bmcpICZzcHJzNjQsIDAsIE5VTEwpKQpAQCAtMTM2Myw3ICsxNDM4LDcgQEAgYWl4X3RocmVhZF90 YXJnZXQ6OmZldGNoX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJl Z25vKQogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAgcHRoZGJfdGlkX3QgdGlkOwog Ci0gIGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAoKSkpCisgIGlmIChyZWdjYWNoZS0+cHRp ZCAoKS50aWQgKCkgPT0gMCkKICAgICBiZW5lYXRoICgpLT5mZXRjaF9yZWdpc3RlcnMgKHJlZ2Nh Y2hlLCByZWdubyk7CiAgIGVsc2UKICAgICB7CkBAIC0xNTExLDYgKzE1ODYsOCBAQCBzdG9yZV9y ZWdzX3VzZXJfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9w dGhyZWFkX3QgcGR0aWQpCiAgIHB0aGRiX2NvbnRleHRfdCBjdHg7CiAgIHVpbnQzMl90IGludDMy OwogICB1aW50NjRfdCBpbnQ2NDsKKyAgc3RydWN0IGFpeF90aHJlYWRfdmFyaWFibGVzICpkYXRh OworICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hlbHBlcl9mb3JfcHRpZCAoaW5mZXJpb3JfcHRp ZCk7CiAKICAgaWYgKGRlYnVnX2FpeF90aHJlYWQpCiAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxv ZywgCkBAIC0xNTE4LDcgKzE1OTUsNyBAQCBzdG9yZV9yZWdzX3VzZXJfdGhyZWFkIChjb25zdCBz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBwdGhkYl9wdGhyZWFkX3QgcGR0aWQpCiAKICAgLyog UmV0cmlldmUgdGhlIHRocmVhZCdzIGN1cnJlbnQgY29udGV4dCBmb3IgaXRzIG5vbi1yZWdpc3Rl cgogICAgICB2YWx1ZXMuICAqLwotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFkX2NvbnRleHQgKHBk X3Nlc3Npb24sIHBkdGlkLCAmY3R4KTsKKyAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9jb250ZXh0 IChkYXRhLT5wZF9zZXNzaW9uLCBwZHRpZCwgJmN0eCk7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJf U1VDQ0VTUykKICAgICBlcnJvciAoXygiYWl4LXRocmVhZDogc3RvcmVfcmVnaXN0ZXJzOiBwdGhk Yl9wdGhyZWFkX2NvbnRleHQgcmV0dXJuZWQgJXMiKSwKIAkgICBwZF9zdGF0dXMyc3RyIChzdGF0 dXMpKTsKQEAgLTE1MjgsNyArMTYwNSw3IEBAIHN0b3JlX3JlZ3NfdXNlcl90aHJlYWQgKGNvbnN0 IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIHB0aGRiX3B0aHJlYWRfdCBwZHRpZCkKICAgZm9y IChpID0gMDsgaSA8IHBwY19udW1fZ3ByczsgaSsrKQogICAgIGlmIChSRUdfVkFMSUQgPT0gcmVn Y2FjaGUtPmdldF9yZWdpc3Rlcl9zdGF0dXMgKHRkZXAtPnBwY19ncDBfcmVnbnVtICsgaSkpCiAg ICAgICB7Ci0JaWYgKGFyY2g2NCkKKwlpZiAoZGF0YS0+YXJjaDY0KQogCSAgewogCSAgICByZWdj YWNoZS0+cmF3X2NvbGxlY3QgKHRkZXAtPnBwY19ncDBfcmVnbnVtICsgaSwgKHZvaWQgKikgJmlu dDY0KTsKIAkgICAgY3R4LmdwcltpXSA9IGludDY0OwpAQCAtMTU0NSw3ICsxNjIyLDcgQEAgc3Rv cmVfcmVnc191c2VyX3RocmVhZCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgcHRo ZGJfcHRocmVhZF90IHBkdGlkKQogICAgIGZpbGxfZnBycyAocmVnY2FjaGUsIGN0eC5mcHIpOwog CiAgIC8qIFNwZWNpYWwgcmVnaXN0ZXJzIChhbHdheXMga2VwdCBpbiBjdHggYXMgNjQgYml0cyku ICAqLwotICBpZiAoYXJjaDY0KQorICBpZiAoZGF0YS0+YXJjaDY0KQogICAgIHsKICAgICAgIGZp bGxfc3ByczY0IChyZWdjYWNoZSwgJmN0eC5pYXIsICZjdHgubXNyLCAmY3R4LmNyLCAmY3R4Lmxy LCAmY3R4LmN0ciwKIAkJCSAgICAgJmN0eC54ZXIsICZjdHguZnBzY3IpOwpAQCAtMTU3Niw3ICsx NjUzLDcgQEAgc3RvcmVfcmVnc191c2VyX3RocmVhZCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwgcHRoZGJfcHRocmVhZF90IHBkdGlkKQogCWN0eC5mcHNjciA9IHRtcF9mcHNjcjsK ICAgICB9CiAKLSAgc3RhdHVzID0gcHRoZGJfcHRocmVhZF9zZXRjb250ZXh0IChwZF9zZXNzaW9u LCBwZHRpZCwgJmN0eCk7CisgIHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc2V0Y29udGV4dCAoZGF0 YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZjdHgpOwogICBpZiAoc3RhdHVzICE9IFBUSERCX1NVQ0NF U1MpCiAgICAgZXJyb3IgKF8oImFpeC10aHJlYWQ6IHN0b3JlX3JlZ2lzdGVyczogIgogCSAgICAg InB0aGRiX3B0aHJlYWRfc2V0Y29udGV4dCByZXR1cm5lZCAlcyIpLApAQCAtMTYwMiw2ICsxNjc5 LDkgQEAgc3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLCBpbnQgcmVnbm8sCiAgIGRvdWJsZSBmcHJzW3BwY19udW1fZnByc107CiAgIHN0cnVj dCBwdHhzcHJzIHNwcnM2NDsKICAgc3RydWN0IHB0c3BycyAgc3ByczMyOworICBzdHJ1Y3QgYWl4 X3RocmVhZF92YXJpYWJsZXMgKmRhdGE7CisgIAorICBkYXRhID0gZ2V0X3RocmVhZF9kYXRhX2hl bHBlcl9mb3JfcHRpZCAocmVnY2FjaGUtPnB0aWQgKCkpOwogCiAgIGlmIChkZWJ1Z19haXhfdGhy ZWFkKQogICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csIApAQCAtMTYxMyw3ICsxNjkzLDcgQEAg c3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hl LCBpbnQgcmVnbm8sCiAgICAgICB8fCAodGRlcC0+cHBjX2dwMF9yZWdudW0gPD0gcmVnbm8KIAkg ICYmIHJlZ25vIDwgdGRlcC0+cHBjX2dwMF9yZWdudW0gKyBwcGNfbnVtX2ZwcnMpKQogICAgIHsK LSAgICAgIGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIC8qIFBy ZS1mZXRjaDogc29tZSByZWdzIG1heSBub3QgYmUgaW4gdGhlIGNhY2hlLiAgKi8KIAkgIHB0cmFj ZTY0YWl4IChQVFRfUkVBRF9HUFJTLCB0aWQsICh1bnNpZ25lZCBsb25nKSBncHJzNjQsIDAsIE5V TEwpOwpAQCAtMTY0Niw3ICsxNzI2LDcgQEAgc3RvcmVfcmVnc19rZXJuZWxfdGhyZWFkIChjb25z dCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8sCiAKICAgaWYgKHJlZ25vID09 IC0xIHx8IHNwZWNpYWxfcmVnaXN0ZXJfcCAoZ2RiYXJjaCwgcmVnbm8pKQogICAgIHsKLSAgICAg IGlmIChhcmNoNjQpCisgICAgICBpZiAoZGF0YS0+YXJjaDY0KQogCXsKIAkgIC8qIFByZS1mZXRj aDogc29tZSByZWdpc3RlcnMgd29uJ3QgYmUgaW4gdGhlIGNhY2hlLiAgKi8KIAkgIHB0cmFjZTY0 YWl4IChQVFRfUkVBRF9TUFJTLCB0aWQsIApAQCAtMTcwMyw3ICsxNzgzLDcgQEAgYWl4X3RocmVh ZF90YXJnZXQ6OnN0b3JlX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50 IHJlZ25vKQogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZDsKICAgcHRoZGJfdGlkX3QgdGlk OwogCi0gIGlmICghUERfVElEIChyZWdjYWNoZS0+cHRpZCAoKSkpCisgIGlmIChyZWdjYWNoZS0+ cHRpZCAoKS50aWQgKCkgPT0gMCkKICAgICBiZW5lYXRoICgpLT5zdG9yZV9yZWdpc3RlcnMgKHJl Z2NhY2hlLCByZWdubyk7CiAgIGVsc2UKICAgICB7CkBAIC0xNzQxLDcgKzE4MjEsNyBAQCBhaXhf dGhyZWFkX3RhcmdldDo6bW91cm5faW5mZXJpb3IgKCkKIHsKICAgdGFyZ2V0X29wcyAqYmVuZWF0 aCA9IHRoaXMtPmJlbmVhdGggKCk7CiAKLSAgcGRfZGVhY3RpdmF0ZSAoKTsKKyAgcGRfZGlzYWJs ZSAoKTsKICAgYmVuZWF0aC0+bW91cm5faW5mZXJpb3IgKCk7CiB9CiAKQEAgLTE3NTAsNyArMTgz MCw3IEBAIGFpeF90aHJlYWRfdGFyZ2V0Ojptb3Vybl9pbmZlcmlvciAoKQogYm9vbAogYWl4X3Ro cmVhZF90YXJnZXQ6OnRocmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCiB7Ci0gIGlmICghUERfVElE IChwdGlkKSkKKyAgaWYgKHB0aWQudGlkICgpID09IDApCiAgICAgcmV0dXJuIGJlbmVhdGggKCkt PnRocmVhZF9hbGl2ZSAocHRpZCk7CiAKICAgLyogV2UgdXBkYXRlIHRoZSB0aHJlYWQgbGlzdCBl dmVyeSB0aW1lIHRoZSBjaGlsZCBzdG9wcywgc28gYWxsCkBAIC0xNzY2LDcgKzE4NDYsNyBAQCBh aXhfdGhyZWFkX3RhcmdldDo6dGhyZWFkX2FsaXZlIChwdGlkX3QgcHRpZCkKIHN0ZDo6c3RyaW5n CiBhaXhfdGhyZWFkX3RhcmdldDo6cGlkX3RvX3N0ciAocHRpZF90IHB0aWQpCiB7Ci0gIGlmICgh UERfVElEIChwdGlkKSkKKyAgaWYgKHB0aWQudGlkICgpID09IDApCiAgICAgcmV0dXJuIGJlbmVh dGggKCktPnBpZF90b19zdHIgKHB0aWQpOwogCiAgIHJldHVybiBzdHJpbmdfcHJpbnRmIChfKCJU aHJlYWQgJXMiKSwgcHVsb25nZXN0IChwdGlkLnRpZCAoKSkpOwpAQCAtMTc4Niw4ICsxODY2LDEx IEBAIGFpeF90aHJlYWRfdGFyZ2V0OjpleHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9p bmZvICp0aHJlYWQpCiAgIHB0aGRiX2RldGFjaHN0YXRlX3QgZGV0YWNoc3RhdGU7CiAgIGludCBj YW5jZWxwZW5kOwogICBzdGF0aWMgY2hhciAqcmV0ID0gTlVMTDsKKyAgc3RydWN0IGFpeF90aHJl YWRfdmFyaWFibGVzICpkYXRhOworCisgIGRhdGEgPSBnZXRfdGhyZWFkX2RhdGFfaGVscGVyX2Zv cl9wdGlkICh0aHJlYWQtPnB0aWQpOwogCi0gIGlmICghUERfVElEICh0aHJlYWQtPnB0aWQpKQor ICBpZiAodGhyZWFkLT5wdGlkLnRpZCAoKSA9PSAwKQogICAgIHJldHVybiBOVUxMOwogCiAgIHN0 cmluZ19maWxlIGJ1ZjsKQEAgLTE4MDAsMjQgKzE4ODMsMjQgQEAgYWl4X3RocmVhZF90YXJnZXQ6 OmV4dHJhX3RocmVhZF9pbmZvIChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKICAgICAvKiBp MThuOiBMaWtlICJ0aHJlYWQtaWRlbnRpZmllciAlZCwgW3N0YXRlXSBydW5uaW5nLCBzdXNwZW5k ZWQiICovCiAgICAgYnVmLnByaW50ZiAoXygidGlkICVkIiksIChpbnQpdGlkKTsKIAotICBzdGF0 dXMgPSBwdGhkYl9wdGhyZWFkX3N0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgJnN0YXRlKTsKKyAg c3RhdHVzID0gcHRoZGJfcHRocmVhZF9zdGF0ZSAoZGF0YS0+cGRfc2Vzc2lvbiwgcGR0aWQsICZz dGF0ZSk7CiAgIGlmIChzdGF0dXMgIT0gUFRIREJfU1VDQ0VTUykKICAgICBzdGF0ZSA9IFBTVF9O T1RTVVA7CiAgIGJ1Zi5wcmludGYgKCIsICVzIiwgc3RhdGUyc3RyIChzdGF0ZSkpOwogCi0gIHN0 YXR1cyA9IHB0aGRiX3B0aHJlYWRfc3VzcGVuZHN0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgCisg IHN0YXR1cyA9IHB0aGRiX3B0aHJlYWRfc3VzcGVuZHN0YXRlIChkYXRhLT5wZF9zZXNzaW9uLCBw ZHRpZCwgCiAJCQkJICAgICAgICZzdXNwZW5kc3RhdGUpOwogICBpZiAoc3RhdHVzID09IFBUSERC X1NVQ0NFU1MgJiYgc3VzcGVuZHN0YXRlID09IFBTU19TVVNQRU5ERUQpCiAgICAgLyogaTE4bjog TGlrZSAiVGhyZWFkLUlkICVkLCBbc3RhdGVdIHJ1bm5pbmcsIHN1c3BlbmRlZCIgKi8KICAgICBi dWYucHJpbnRmIChfKCIsIHN1c3BlbmRlZCIpKTsKIAotICBzdGF0dXMgPSBwdGhkYl9wdGhyZWFk X2RldGFjaHN0YXRlIChwZF9zZXNzaW9uLCBwZHRpZCwgCisgIHN0YXR1cyA9IHB0aGRiX3B0aHJl YWRfZGV0YWNoc3RhdGUgKGRhdGEtPnBkX3Nlc3Npb24sIHBkdGlkLCAKIAkJCQkgICAgICAmZGV0 YWNoc3RhdGUpOwogICBpZiAoc3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYgZGV0YWNoc3RhdGUg PT0gUERTX0RFVEFDSEVEKQogICAgIC8qIGkxOG46IExpa2UgIlRocmVhZC1JZCAlZCwgW3N0YXRl XSBydW5uaW5nLCBkZXRhY2hlZCIgKi8KICAgICBidWYucHJpbnRmIChfKCIsIGRldGFjaGVkIikp OwogCi0gIHB0aGRiX3B0aHJlYWRfY2FuY2VscGVuZCAocGRfc2Vzc2lvbiwgcGR0aWQsICZjYW5j ZWxwZW5kKTsKKyAgcHRoZGJfcHRocmVhZF9jYW5jZWxwZW5kIChkYXRhLT5wZF9zZXNzaW9uLCBw ZHRpZCwgJmNhbmNlbHBlbmQpOwogICBpZiAoc3RhdHVzID09IFBUSERCX1NVQ0NFU1MgJiYgY2Fu Y2VscGVuZCkKICAgICAvKiBpMThuOiBMaWtlICJUaHJlYWQtSWQgJWQsIFtzdGF0ZV0gcnVubmlu ZywgY2FuY2VsIHBlbmRpbmciICovCiAgICAgYnVmLnByaW50ZiAoXygiLCBjYW5jZWwgcGVuZGlu ZyIpKTsKZGlmZiAtLWdpdCBhL2dkYi9zb2xpYi1haXguYyBiL2dkYi9zb2xpYi1haXguYwppbmRl eCBmNDgzZjU0ZGUxMy4uNmJlODEwNjRlYmQgMTAwNjQ0Ci0tLSBhL2dkYi9zb2xpYi1haXguYwor KysgYi9nZGIvc29saWItYWl4LmMKQEAgLTYxOCw2ICs2MTgsMjAgQEAgc29saWJfYWl4X2JmZF9v cGVuIChjb25zdCBjaGFyICpwYXRobmFtZSkKICAgICAgIGlmIChtZW1iZXJfbmFtZSA9PSBiZmRf Z2V0X2ZpbGVuYW1lIChvYmplY3RfYmZkLmdldCAoKSkpCiAJYnJlYWs7CiAKKyAgICAgIHN0ZDo6 c3RyaW5nIHMgPSBiZmRfZ2V0X2ZpbGVuYW1lIChvYmplY3RfYmZkLmdldCAoKSk7CisKKyAgICAg IC8qIEZvciBldmVyeSBpbmZlcmlvciBhZnRlciBmaXJzdCBpbnQgYmZkIHN5c3RlbSB3ZSAKKwkg d2lsbCBoYXZlIHRoZSBwYXRobmFtZSBpbnN0ZWFkIG9mIHRoZSBtZW1iZXIgbmFtZQorCSByZWdp c3RlcmVkLiBIZW5jZSB0aGUgYmVsb3cgY29uZGl0aW9uIGV4aXN0cy4gICovCisKKyAgICAgIGlm IChzLmZpbmQgKCcoJykgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisJeworCSAgaW50IHBvcyA9IHMu ZmluZCAoJygnKTsKKwkgIGludCBsZW4gPSBzLmZpbmQgKCcpJykgLSBzLmZpbmQgKCcoJyk7CisJ ICBpZiAocy5zdWJzdHIgKHBvcysxLCBsZW4tMSkgPT0gbWVtYmVyX25hbWUpIAorCSAgICByZXR1 cm4gb2JqZWN0X2JmZDsKKwl9CisKICAgICAgIG9iamVjdF9iZmQgPSBnZGJfYmZkX29wZW5yX25l eHRfYXJjaGl2ZWRfZmlsZSAoYXJjaGl2ZV9iZmQuZ2V0ICgpLAogCQkJCQkJICAgICBvYmplY3Rf YmZkLmdldCAoKSk7CiAgICAgfQotLSAKMi4zMS4xCgo= --_004_DM6PR15MB35452A06EF382E9262DBB9EAD6DE9DM6PR15MB3545namp_--