From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60047.outbound.protection.outlook.com [40.107.6.47]) by sourceware.org (Postfix) with ESMTPS id 463643858C2F for ; Mon, 7 Nov 2022 07:16:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 463643858C2F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=DW+YdWulwxL3Vpnon1OujESswbUEkV/+LoZKzeLcAJnOD0RMKYWapT1jszJh4NCZJHMhyag3/YKr+8l3kLO6NXOgauYPim3sTufSi0jIfuYviR5UNz9MP9xzAoI8ULh2Qkpmua/BB2P6g+nRqO5jMkdZHybdV4L+DDZllR+sZ5ZWjCUMIhf2GmrNBKDA8m3QHt8aERQ3AfcYwcbXLwQZlzukSuhIvcTxiIfVQkxqlpBwx7yp/WbsrE/jP/D3qm2ud3wA/1MN0+yvM9DEpvysJxXwSg1KTDpm+B7mzChEbhULJEjYY/bDy57li24hunk9TuMDziy7+YnL7WkjSSGYqQ== ARC-Message-Signature: i=2; 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=VPi8laTCk+AQ3dcZPbIJ7061QiuhjakMz1rTiT6CDDw=; b=aBmNNod3ImPlJE9x4H9pzfJm30Xj6U5oPFVpQwG5h4aS0bpIQHsdfnnC4D4arNtTXIS7NiNCj4pWKTc5OrZxN6OLi0aGmr3L/Bsv8zzCIzge+1SK7AiqI5gonoSo2MJXFskVWyodo0hJs2UoxJcQ2OHNPGHUIBI/50z7JkGT/Q5HgzEivHm7WLU72zKEo6v9UAAs6zySjq2wNEp1klTtUpvoEyxpRCu2WM5NTKOHkn2pUD3gXVEAYkHuzkGh+2A1JZaaSdye+efmbocGECVjnAKgJq432qLAWAYtl/46++FCWVffxdtOYSngLJrfZ1SMPUjnvCHRbVmH1l3+eqRg9A== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VPi8laTCk+AQ3dcZPbIJ7061QiuhjakMz1rTiT6CDDw=; b=cpmBR7Vl3LqBpxSeCydRFu+B7IzcPzr7D3MCJQ0V3n7uC4sDBQSMfrSIplXyXTRzJ+9NeqBjh4Flcj7IBiNUHC/T5mENiLNacjoh4YYmtobR1rgcsbFmdfAVfV11wSfswZn3RsO19PXOuYeLVrvYEsV0oiZT51oOFwJPS+3hjSE= Received: from DUZPR01CA0032.eurprd01.prod.exchangelabs.com (2603:10a6:10:468::11) by GV1PR08MB8084.eurprd08.prod.outlook.com (2603:10a6:150:94::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.9; Mon, 7 Nov 2022 07:16:27 +0000 Received: from DBAEUR03FT030.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:468:cafe::e8) by DUZPR01CA0032.outlook.office365.com (2603:10a6:10:468::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.21 via Frontend Transport; Mon, 7 Nov 2022 07:16:27 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT030.mail.protection.outlook.com (100.127.142.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.20 via Frontend Transport; Mon, 7 Nov 2022 07:16:27 +0000 Received: ("Tessian outbound 58faf9791229:v130"); Mon, 07 Nov 2022 07:16:27 +0000 X-CR-MTA-TID: 64aa7808 Received: from 56d288f2ca31.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 8674B44B-180D-4773-BE1E-7AC3E12DCF4A.1; Mon, 07 Nov 2022 07:16:21 +0000 Received: from EUR01-VE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 56d288f2ca31.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 07 Nov 2022 07:16:21 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OglCyLu3Fd/MIWa3ouR4fNdQJFcrO7xnktI5bXSMTx7BWqBpaMA90boqnLcqgBfVff+rnDFJ63+9GDMBx6yKc4KuFXAVKche3tfnG+FVjDKCBtOI8Lb/hbQ8/J4znvnaAT4w6N55Ts347c0Rd8Esmah1h3JU5kV0uE37YGo/XcGopqWENJv4Gsf5ITR8lV6gfswlmtmnU8cEAigG7ZCS7Zi9dUMcIiFovdnNbrkuTmOJ3frg78K0zMPFEih6zRvbY8kgxBmEfVguXSKrEaDGqcCJwzDgW7TC6Yfg6QSFeabSB7R9MI58SchqK/RHQGGEipWbLLEZ5HMqUZd1ekBQIQ== 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=VPi8laTCk+AQ3dcZPbIJ7061QiuhjakMz1rTiT6CDDw=; b=kCPjjdB0Ny+ZsFduBbncumOdFwENeryzqN9VRKBiSoomRDHyKOGBeTVmvQ6z0I2Ac9HHm2sDMWaC3J6Va8sZdI5cAH3uXdU4we9TkUH9CFlwXOFYB3kWk9Fj8kacP4QDI28Mr8jZwz+xB6uLTe2ljdLcilbECbbL3wXZGJvQpZ9XBP8sGaX5MT8SzwnLHkvL8FZTdEzszJMCKjyXb9mBHEQuYNBdAzogrRgFBNYpUCYhdqPVgNFAkUmNc6qcRubUJ/M57Vbbk7n7xmQnDZVwKbfxc6gXcfpn9X7/jNugLZrJul+YwqNua7mxjjTBZcMf2l5W44ICbkWCFvqzltbnJQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VPi8laTCk+AQ3dcZPbIJ7061QiuhjakMz1rTiT6CDDw=; b=cpmBR7Vl3LqBpxSeCydRFu+B7IzcPzr7D3MCJQ0V3n7uC4sDBQSMfrSIplXyXTRzJ+9NeqBjh4Flcj7IBiNUHC/T5mENiLNacjoh4YYmtobR1rgcsbFmdfAVfV11wSfswZn3RsO19PXOuYeLVrvYEsV0oiZT51oOFwJPS+3hjSE= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by PAXPR08MB6575.eurprd08.prod.outlook.com (2603:10a6:102:156::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.11; Mon, 7 Nov 2022 07:16:14 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7%4]) with mapi id 15.20.5813.011; Mon, 7 Nov 2022 07:16:14 +0000 From: Tamar Christina To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd , "rguenther@suse.de" Subject: RE: [PATCH 1/8]middle-end: Recognize scalar reductions from bitfields and array_refs Thread-Topic: [PATCH 1/8]middle-end: Recognize scalar reductions from bitfields and array_refs Thread-Index: AQHY7R/YJ6y2Qwxo8kur+QPMVvoT0K4wOnUAgALVNWA= Date: Mon, 7 Nov 2022 07:16:13 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 1B264D41A0E19441937E319D94244CA9.0 x-checkrecipientchecked: true Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|PAXPR08MB6575:EE_|DBAEUR03FT030:EE_|GV1PR08MB8084:EE_ X-MS-Office365-Filtering-Correlation-Id: 91cd61a2-eb85-43a1-ba81-08dac08ffc77 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: D1HCVBuaeG2zth4m/UDQXYRxjoGEM5TDOTLueG2am1pbvushu/dSzrH63fZvw30Q2vgRON5QMNYy6pyEV/KEgTn5PNw+ZdP32T1IZfufQPe/5kK8nNfenlOyQugp0Zt2F0poOnTLnlmdXGF3J1ycFLaeU6a6ncDNxSuVXMUOBUAKXQ7/0sa1OtqgpNuKdMpBpbNh33+FzrNUpuMVz5gen3EDfbeuNYIh8OVQ82rPO0V8S5BhksZbJL3NJ4WFwfa9ozzX8Iyf+7UupvguO8uVxM+7nqwLaJrtaYFkO+4z/siHyhniF7lNThzld19xFdH91geU68NmdM/UlGu/EHudi988wXNopuxOVgc+/s8eSW8WnWJB1woR0CP732AAwqMl9Avfr8h22x9LUxcTSsMe3nlfsq3cz8ODDQacNpXtRLk9TqcKC2j7JK2IROAmEDW/u5fB9+a9wtgRgxyg/DEfzTyQzapGE0ZpRrUMDa0ESaF3YVqDh5hQkGDYUtfm3l2DKYwyhukPY3wtGMDf4x/X+3XiTDRftYqnpYSL6ZpIzmhAHDwIl52n6jQEmqYx+f+9tgqkl6lUNr6iaFYDzVegYPeeTk8PEQvvJNrougIOMnSkX9YNctySoPHq/6i3S8TEkP/4iPi6HJ/c4glf6iCu1SfMEN5XRBHMcIrVIHx9d/5EaSaDsV8dwL+RvoD/4ra2nH7vop8+ZEZS1JXrQUJBqXqWy6h134MCzNIn70xBwYHU1/SBz9T0Q4gnpaxj+PhuFyeYHQ9YOz67ywMh4JQkrA== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(136003)(376002)(366004)(346002)(396003)(451199015)(7696005)(30864003)(122000001)(52536014)(41300700001)(66899015)(5660300002)(8936002)(6916009)(38100700002)(2906002)(4326008)(8676002)(316002)(66446008)(53546011)(76116006)(66476007)(64756008)(66556008)(66946007)(33656002)(54906003)(71200400001)(86362001)(478600001)(83380400001)(55016003)(6506007)(9686003)(26005)(186003)(38070700005);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6575 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT030.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 0f6776b0-c93d-4243-3611-08dac08ff45b X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mPQN/tgu2mvVNcPPdXcXeay7gqqV9jB86f//c81tD1bn9dHOELenoY4Y+qWk/5iy7wx+vX0AkTI58nHXksDGQ/V+R2kSXCvT81M4mcC/PpiJL9neVt8JQNCWA78sNTsXYPMabzZ710IZRXLX1OhS4jr1Q0EdfTZ0yAQAdm8S6rGmhol8z1bbbrqm7bWGT6UvLEWx80vskr5c/zIZjDw2Io2PUIZ/lISOqyE20XuKhBdDNqOA4Gdxm4O9BuX/b1BLbSCfplLdBPuy3+uDUhWHfK0I2tTD7sFGBIqmX43JKUC4TRNyfVV2hg/oAaLHdKkfW/p+9ulhupQMkKtwt28irdB8ZxVZEDm+WWADRFNBoh2VWXF8crOPwEtCkw8u4uMoLyL9GUSW9oCL4Ss9RaLWfWA9+8WQpaGBO49S5ONeigksEZ6VegzY9NpnJT1FSHF/GM0VWLvU0a5J9VE9j6SccN6KHhPrrD6WoYx4dMZfiQLIG4aXT3FirjhqJoDaj0JTKODXAtjFRb9tGhwJeD7ui+Uk+mKfabUjAHeqjasWLoBK49awYcEyZvndGemeVx7F33yGnUtwCrBXBMh6opH4uHfj8bO7D8XVEbCYinnCA85zqsA3q7j+Wm0S1U6ZWIxWhDTwUKI24is/ZyQ8UyJTl3YqQyvlSRNCJYuv+wxkoO+as7b8rDK3I9aCbGWrJc66fpb4S+ZiyHRCLp3JS5QIpLmLBYEwOU1b7Ma2C8+SRidVTakPEiHFzdZpSEztLaq4q1jU+cEHtpSREjgl37SvQw== X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230022)(4636009)(136003)(376002)(346002)(39860400002)(396003)(451199015)(36840700001)(40470700004)(46966006)(55016003)(81166007)(82740400003)(6506007)(356005)(33656002)(40480700001)(86362001)(40460700003)(54906003)(316002)(7696005)(26005)(478600001)(8936002)(4326008)(70586007)(41300700001)(6862004)(5660300002)(30864003)(52536014)(70206006)(8676002)(2906002)(9686003)(83380400001)(82310400005)(53546011)(107886003)(36860700001)(186003)(336012)(47076005)(66899015);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Nov 2022 07:16:27.4595 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 91cd61a2-eb85-43a1-ba81-08dac08ffc77 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT030.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB8084 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmlj aGFyZC5ndWVudGhlckBnbWFpbC5jb20+DQo+IFNlbnQ6IFNhdHVyZGF5LCBOb3ZlbWJlciA1LCAy MDIyIDExOjMzIEFNDQo+IFRvOiBUYW1hciBDaHJpc3RpbmEgPFRhbWFyLkNocmlzdGluYUBhcm0u Y29tPg0KPiBDYzogZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmc7IG5kIDxuZEBhcm0uY29tPjsgcmd1 ZW50aGVyQHN1c2UuZGUNCj4gU3ViamVjdDogUmU6IFtQQVRDSCAxLzhdbWlkZGxlLWVuZDogUmVj b2duaXplIHNjYWxhciByZWR1Y3Rpb25zIGZyb20NCj4gYml0ZmllbGRzIGFuZCBhcnJheV9yZWZz DQo+IA0KPiBPbiBNb24sIE9jdCAzMSwgMjAyMiBhdCAxOjAwIFBNIFRhbWFyIENocmlzdGluYSB2 aWEgR2NjLXBhdGNoZXMgPGdjYy0NCj4gcGF0Y2hlc0BnY2MuZ251Lm9yZz4gd3JvdGU6DQo+ID4N Cj4gPiBIaSBBbGwsDQo+ID4NCj4gPiBUaGlzIHBhdGNoIHNlcmllcyBpcyB0byBhZGQgcmVjb2du aXRpb24gb2YgcGFpcndpc2Ugb3BlcmF0aW9ucw0KPiA+IChyZWR1Y3Rpb25zKSBpbiBtYXRjaC5w ZCBzdWNoIHRoYXQgd2UgY2FuIGJlbmVmaXQgZnJvbSB0aGVtIGV2ZW4gYXQNCj4gPiAtTzEgd2hl biB0aGUgdmVjdG9yaXplciBpc24ndCBlbmFibGVkLg0KPiA+DQo+ID4gVGhzIHVzZSBvZiB0aGVz ZSBhbGxvdyBmb3IgYSBsb3Qgc2ltcGxlciBjb2RlZ2VuIGluIEFBcmNoNjQgYW5kIGFsbG93cw0K PiA+IHVzIHRvIGF2b2lkIHF1aXRlIGEgbG90IG9mIGNvZGVnZW4gd2FydHMuDQo+ID4NCj4gPiBB cyBhbiBleGFtcGxlIGEgc2ltcGxlOg0KPiA+DQo+ID4gdHlwZWRlZiBmbG9hdCB2NHNmIF9fYXR0 cmlidXRlX18oKHZlY3Rvcl9zaXplICgxNikpKTsNCj4gPg0KPiA+IGZsb2F0DQo+ID4gZm9vMyAo djRzZiB4KQ0KPiA+IHsNCj4gPiAgIHJldHVybiB4WzFdICsgeFsyXTsNCj4gPiB9DQo+ID4NCj4g PiBjdXJyZW50bHkgZ2VuZXJhdGVzOg0KPiA+DQo+ID4gZm9vMzoNCj4gPiAgICAgICAgIGR1cCAg ICAgczEsIHYwLnNbMV0NCj4gPiAgICAgICAgIGR1cCAgICAgczAsIHYwLnNbMl0NCj4gPiAgICAg ICAgIGZhZGQgICAgczAsIHMxLCBzMA0KPiA+ICAgICAgICAgcmV0DQo+ID4NCj4gPiB3aGlsZSB3 aXRoIHRoaXMgcGF0Y2ggc2VyaWVzIG5vdyBnZW5lcmF0ZXM6DQo+ID4NCj4gPiBmb28zOg0KPiA+ ICAgICAgICAgZXh0ICAgICB2MC4xNmIsIHYwLjE2YiwgdjAuMTZiLCAjNA0KPiA+ICAgICAgICAg ZmFkZHAgICBzMCwgdjAuMnMNCj4gPiAgICAgICAgIHJldA0KPiA+DQo+ID4gVGhpcyBwYXRjaCB3 aWxsIG5vdCBwZXJmb3JtIHRoZSBvcGVyYXRpb24gaWYgdGhlIHNvdXJjZSBpcyBub3QgYQ0KPiA+ IGdpbXBsZSByZWdpc3RlciBhbmQgbGVhdmVzIG1lbW9yeSBzb3VyY2VzIHRvIHRoZSB2ZWN0b3Jp emVyIGFzIGl0J3MNCj4gPiBhYmxlIHRvIGRlYWwgY29ycmVjdGx5IHdpdGggY2xvYmJlcnMuDQo+ IA0KPiBCdXQgdGhlIHZlY3Rvcml6ZXIgc2hvdWxkIGFsc28gYmUgYWJsZSB0byBjb3BlIHdpdGgg dGhlIGFib3ZlLiAgDQoNClRoZXJlIGFyZSBzZXZlcmFsIHByb2JsZW1zIHdpdGggbGVhdmluZyBp dCB1cCB0byB0aGUgdmVjdG9yaXplciB0byBkbzoNCg0KMS4gV2Ugb25seSBnZXQgaXQgYXQgLU8y IGFuZCBoaWdoZXIuDQoyLiBUaGUgd2F5IHRoZSB2ZWN0b3JpemVyIGNvc3RzIHRoZSByZWR1Y3Rp b24gbWFrZXMgdGhlIHJlc3VsdGluZyBjb3N0IGFsd2F5cyB0b28gaGlnaCBmb3IgQUFyY2g2NC4N Cg0KQXMgYW4gZXhhbXBsZSB0aGUgZm9sbG93aW5nOg0KDQp0eXBlZGVmIHVuc2lnbmVkIGludCB1 MzJ2NCBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNikpKTsNCnVuc2lnbmVkIGludCBmICh1 MzJ2NCBhLCB1MzJ2NCBiKQ0Kew0KICAgIHJldHVybiBhWzBdICsgYVsxXTsNCn0NCg0KRG9lc24n dCBnZXQgU0xQJ2VkIGJlY2F1c2UgdGhlIHZlY3Rvcml6ZXIgY29zdHMgaXQgYXM6DQoNCm5vZGUg MHg0ODVlYjMwIDAgdGltZXMgdmVjX3Blcm0gY29zdHMgMCBpbiBib2R5DQpfMSArIF8yIDEgdGlt ZXMgdmVjdG9yX3N0bXQgY29zdHMgMSBpbiBib2R5DQpfMSArIF8yIDEgdGltZXMgdmVjX3Blcm0g Y29zdHMgMiBpbiBib2R5DQpfMSArIF8yIDEgdGltZXMgdmVjX3RvX3NjYWxhciBjb3N0cyAyIGlu IGJvZHkNCg0KQW5kIHNvIHVsdGltYXRlbHkgeW91IGZhaWwgYmVjYXVzZToNCg0KL2FwcC9leGFt cGxlLmM6ODoxNzogbm90ZTogQ29zdCBtb2RlbCBhbmFseXNpcyBmb3IgcGFydCBpbiBsb29wIDA6 DQogIFZlY3RvciBjb3N0OiA1DQogIFNjYWxhciBjb3N0OiAzDQoNClRoaXMgbG9va3MgbGlrZSBp dCdzIGJlY2F1c2UgdGhlIHZlY3Rvcml6ZXIgY29zdHMgdGhlIG9wZXJhdGlvbiB0byBjcmVhdGUg dGhlIEJJVF9GSUVMRF9SRUYgPGFfMyhEKSwgNjQsIDA+Ow0KRm9yIHRoZSByZWR1Y3Rpb24gYXMg cmVxdWlyaW5nIHR3byBzY2FsYXIgZXh0cmFjdHMgYW5kIGEgcGVybXV0ZS4gV2hpbGUgaXQgdWx0 aW1hdGVseSBkb2VzIHByb2R1Y2UgYQ0KQklUX0ZJRUxEX1JFRiA8YV8zKEQpLCA2NCwgMD47IHRo YXQncyBub3Qgd2hhdCBpdCBjb3N0cy4NCg0KVGhpcyBjYXVzZXMgdGhlIHJlZHVjdGlvbiB0byBh bG1vc3QgYWx3YXlzIGJlIG1vcmUgZXhwZW5zaXZlLCBzbyB1bmxlc3MgdGhlIHJlc3Qgb2YgdGhl IFNMUCB0cmVlIGFtb3J0aXplcw0KdGhlIGNvc3Qgd2UgbmV2ZXIgZ2VuZXJhdGUgdGhlbS4NCg0K My4gVGhlIFNMUCBvbmx5IGhhcHBlbnMgb24gb3BlcmF0aW9uIHRoYXQgYXJlIFNMUCBzaGFwZWQg YW5kIHdoZXJlIFNMUCBkaWRuJ3QgZmFpbC4NCg0KQXMgYSBzaW1wbGUgZXhhbXBsZSwgdGhlIHZl Y3Rvcml6ZXIgY2FuJ3QgU0xQIHRoZSBmb2xsb3dpbmc6DQoNCnVuc2lnbmVkIGludCBmICh1MzJ2 NCBhLCB1MzJ2NCBiKQ0Kew0KICAgIGFbMF0gKz0gYlswXTsNCiAgICByZXR1cm4gYVswXSArIGFb MV07DQp9DQoNCkJlY2F1c2UgdGhlcmUncyBub3QgZW5vdWdoIFZGIGhlcmUgYW5kIGl0IGNhbid0 IHVucm9sbC4gVGhpcyBhbmQgbWFueSBvdGhlcnMgZmFpbCBiZWNhdXNlIHRoZXkncmUgbm90IGFu DQpTTFAtYWJsZSBvcGVyYXRpb24sIG9yIFNMUCBidWlsZCBmYWlscy4NCg0KVGhpcyBjYXVzZXMg dXMgdG8gZ2VuZXJhdGUgZm9yIGUuZy4gdGhpcyBleGFtcGxlOg0KDQpmOg0KICAgICAgICBkdXAg ICAgIHMyLCB2MC5zWzFdDQogICAgICAgIGZtb3YgICAgdzEsIHMxDQogICAgICAgIGFkZCAgICAg djAuMnMsIHYyLjJzLCB2MC4ycw0KICAgICAgICBmbW92ICAgIHcwLCBzMA0KICAgICAgICBhZGQg ICAgIHcwLCB3MCwgdzENCiAgICAgICAgcmV0DQoNCmluc3RlYWQgb2Ygd2l0aCBteSBwYXRjaDoN Cg0KZjoNCiAgICAgICAgYWRkcCAgICB2MC4ycywgdjAuMnMsIHYwLjJzDQogICAgICAgIGFkZCAg ICAgdjAuMnMsIHYwLjJzLCB2MS4ycw0KICAgICAgICBmbW92ICAgIHcwLCBzMA0KICAgICAgICBy ZXQNCg0Kd2hpY2ggaXMgc2lnbmlmaWNhbnRseSBiZXR0ZXIgY29kZS4gIFNvIEkgZG9uJ3QgdGhp bmsgdGhlIHZlY3Rvcml6ZXIgaXMgdGhlIHJpZ2h0IHNvbHV0aW9uIGZvciB0aGlzLg0KDQo+IEkg ZG9uJ3QgdGhpbmsNCj4gd2Ugd2FudCB0byBkbyB0aGlzIGFzIHBhcnQgb2YgZ2VuZXJhbCBmb2xk aW5nLiAgSWZmLCB0aGVuIHRoaXMgYmVsb25ncyBpbiBzcGVjaWZpYw0KPiBwb2ludHMgb2YgdGhl IHBhc3MgcGlwZWxpbmUsIG5vPw0KDQpUaGUgcmVhc29uIEkgY3VycmVudGx5IGhhdmUgaXQgYXMg c3VjaCBpcyBiZWNhdXNlIGluIGdlbmVyYWwgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgcmVhbGx5IGRl YWwgd2l0aA0KaG9yaXpvbnRhbCByZWR1Y3Rpb25zIGF0IGFsbC4gIEFsc28gc2luY2UgdGhlIHZl Y3Rvcml6ZXIgaXRzZWxmIGNhbiBpbnRyb2R1Y2UgcmVkdWN0aW9ucyBJIGZpZ3VyZWQgaXQncw0K YmV0dGVyIHRvIGhhdmUgb25lIHJlcHJlc2VudGF0aW9uIGZvciB0aGlzLiAgU28gYWRtaXR0ZWRs eSBwZXJoYXBzIHRoaXMgc2hvdWxkIG9ubHkgYmUgZG9uZSBhZnRlcg0KdmVjdG9yaXphdGlvbiBh cyB0aGF0J3Mgd2hlbiB0b2RheSB3ZSBleHBlY3QgcmVkdWN0aW9ucyB0byBiZSBpbiBHaW1wbGUu DQoNCkFzIGZvciBoYXZpbmcgaXQgaW4gYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgcGFzcyBwaXBl bGluZSwgSSBoYXZlIGl0IGFzIGEgZ2VuZXJhbCBvbmUgc2luY2UgYSBudW1iZXIgb2YNCnBhc3Nl cyBjb3VsZCBjcmVhdGUgdGhlIGZvcm0gZm9yIHRoZSByZWR1Y3Rpb24sIGZvciBpbnN0YW5jZSB2 ZWNfbG93ZXIgY291bGQgYnJlYWsgdXAgYW4gb3BlcmF0aW9uDQp0byBhbGxvdyB0aGlzIHRvIG1h dGNoLiAgVGhlIGJpZ2dlciBCSVRfRklFTERfRVhQUiBpdCBjcmVhdGVzIGNvdWxkIGFsc28gbGVh ZCB0byBvdGhlciBvcHRpbWl6YXRpb25zLg0KDQpBZGRpdGlvbmFsbHkgeW91IGhhZCBtZW50aW9u ZWQgbGFzdCB0aW1lIHRoYXQgQW5kcmV3IHdhcyB0cnlpbmcgdG8gbW92ZSBtaW4vbWF4IGRldGVj dGlvbiB0byBtYXRjaC5wZA0KU28gSSBoYWQgZmlndXJlZCB0aGlzIHdhcyB0aGUgY29ycmVjdCBw bGFjZSBmb3IgaXQuDQoNClRoYXQgc2FpZCBJIGhhdmUgbm8gaW50dWl0aW9uIGZvciB3aGF0IHdv dWxkIGJlIGJldHRlciBoZXJlLiBTaW5jZSB0aGUgY2hlY2sgaXMgcXVpdGUgY2hlYXAuICBCdXQg ZG8geW91IGhhdmUNCmEgcGFydGljdWxhciBwbGFjZSB5b3Ugd2FudCB0aGlzIG1vdmUgdG8gdGhl bj8gIElkZWFsbHkgSSdkIHdhbnQgaXQgYmVmb3JlIHRoZSBsYXN0IEZSRSBwYXNzLCBidXQgcGVy aGFwcw0KaXNlbD8NCg0KVGhhbmtzLA0KVGFtYXINCg0KPiANCj4gPiBUaGUgdXNlIG9mIHRoZXNl IGluc3RydWN0aW9uIG1ha2VzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBjb2RlZ2VuDQo+ ID4gcXVhbGl0eSBmb3IgQUFyY2g2NCBhbmQgQXJtLg0KPiA+DQo+ID4gTk9URTogVGhlIGxhc3Qg ZW50cnkgaW4gdGhlIHNlcmllcyBjb250YWlucyB0ZXN0cyBmb3IgYWxsIG9mIHRoZQ0KPiA+IHBy ZXZpb3VzIHBhdGNoZXMgYXMgaXQncyBhIGJpdCBvZiBhbiBhbGwgb3Igbm90aGluZyB0aGluZy4N Cj4gPg0KPiA+IEJvb3RzdHJhcHBlZCBSZWd0ZXN0ZWQgb24gYWFyY2g2NC1ub25lLWxpbnV4LWdu dSwgeDg2XzY0LXBjLWxpbnV4LWdudQ0KPiA+IGFuZCBubyBpc3N1ZXMuDQo+ID4NCj4gPiBPayBm b3IgbWFzdGVyPw0KPiA+DQo+ID4gVGhhbmtzLA0KPiA+IFRhbWFyDQo+ID4NCj4gPiBnY2MvQ2hh bmdlTG9nOg0KPiA+DQo+ID4gICAgICAgICAqIG1hdGNoLnBkIChhZGphY2VudF9kYXRhX2FjY2Vz c19wKTogSW1wb3J0Lg0KPiA+ICAgICAgICAgQWRkIG5ldyBwYXR0ZXJuIGZvciBiaXR3aXNlIHBs dXMsIG1pbiwgbWF4LCBmbWF4LCBmbWluLg0KPiA+ICAgICAgICAgKiB0cmVlLWNmZy5jYyAodmVy aWZ5X2dpbXBsZV9jYWxsKTogQWxsb3cgZnVuY3Rpb24gYXJndW1lbnRzIGluIElGTnMuDQo+ID4g ICAgICAgICAqIHRyZWUuY2MgKGFkamFjZW50X2RhdGFfYWNjZXNzX3ApOiBOZXcuDQo+ID4gICAg ICAgICAqIHRyZWUuaCAoYWRqYWNlbnRfZGF0YV9hY2Nlc3NfcCk6IE5ldy4NCj4gPg0KPiA+IC0t LSBpbmxpbmUgY29weSBvZiBwYXRjaCAtLQ0KPiA+IGRpZmYgLS1naXQgYS9nY2MvbWF0Y2gucGQg Yi9nY2MvbWF0Y2gucGQgaW5kZXgNCj4gPg0KPiAyNjE3ZDU2MDkxZGZiZDQxYWU0OWY5ODBlZTBh ZjM3NTdmNWVjMWNmLi5hZWNhYTM1MjBiMzZlNzcwZDExZWE5YTEwDQo+IGViMQ0KPiA+IDhkYjIz YzBjZDlmNyAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvbWF0Y2gucGQNCj4gPiArKysgYi9nY2MvbWF0 Y2gucGQNCj4gPiBAQCAtMzksNyArMzksOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQ0KPiA+ICAgICBIT05PUl9OQU5TDQo+ID4gICAgIHVuaWZv cm1fdmVjdG9yX3ANCj4gPiAgICAgZXhwYW5kX3ZlY19jbXBfZXhwcl9wDQo+ID4gLSAgIGJpdG1h c2tfaW52X2NzdF92ZWN0b3JfcCkNCj4gPiArICAgYml0bWFza19pbnZfY3N0X3ZlY3Rvcl9wDQo+ ID4gKyAgIGFkamFjZW50X2RhdGFfYWNjZXNzX3ApDQo+ID4NCj4gPiAgLyogT3BlcmF0b3IgbGlz dHMuICAqLw0KPiA+ICAoZGVmaW5lX29wZXJhdG9yX2xpc3QgdGNjX2NvbXBhcmlzb24NCj4gPiBA QCAtNzE5NSw2ICs3MTk2LDQ3IEBAIERFRklORV9JTlRfQU5EX0ZMT0FUX1JPVU5EX0ZOIChSSU5U KQ0KPiA+DQo+ID4gIC8qIENhbm9uaWNhbGl6YXRpb25zIG9mIEJJVF9GSUVMRF9SRUZzLiAgKi8N Cj4gPg0KPiA+ICsvKiBDYW5vbmljYWxpemUgQklUX0ZJRUxEX1JFRlMgdG8gcGFpcndpc2Ugb3Bl cmF0aW9ucy4gKi8gKGZvciBvcA0KPiA+ICsocGx1cyBtaW4gbWF4IEZNSU5fQUxMIEZNQVhfQUxM KQ0KPiA+ICsgICAgIGlmbiAoSUZOX1JFRFVDX1BMVVMgSUZOX1JFRFVDX01JTiBJRk5fUkVEVUNf TUFYDQo+ID4gKyAgICAgICAgIElGTl9SRURVQ19GTUlOIElGTl9SRURVQ19GTUFYKSAgKHNpbXBs aWZ5DQo+ID4gKyAgKG9wIEAwIEAxKQ0KPiA+ICsgICAoaWYgKElOVEVHUkFMX1RZUEVfUCAodHlw ZSkgfHwgU0NBTEFSX0ZMT0FUX1RZUEVfUCAodHlwZSkpDQo+ID4gKyAgICAod2l0aCB7IHBvbHlf dWludDY0IG5sb2MgPSAwOw0KPiA+ICsgICAgICAgICAgIHRyZWUgc3JjID0gYWRqYWNlbnRfZGF0 YV9hY2Nlc3NfcCAoQDAsIEAxLCAmbmxvYywgdHJ1ZSk7DQo+ID4gKyAgICAgICAgICAgdHJlZSBu dHlwZSA9IGJ1aWxkX3ZlY3Rvcl90eXBlICh0eXBlLCAyKTsNCj4gPiArICAgICAgICAgICB0cmVl IHNpemUgPSBUWVBFX1NJWkUgKG50eXBlKTsNCj4gPiArICAgICAgICAgICB0cmVlIHBvcyA9IGJ1 aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAoc2l6ZSksIG5sb2MpOw0KPiA+ICsgICAgICAgICAgIHBv bHlfdWludDY0IF9zejsNCj4gPiArICAgICAgICAgICBwb2x5X3VpbnQ2NCBfdG90YWw7IH0NCj4g PiArICAgICAoaWYgKHNyYyAmJiBpc19naW1wbGVfcmVnIChzcmMpICYmIG50eXBlDQo+ID4gKyAg ICAgICAgICYmIHBvbHlfaW50X3RyZWVfcCAoc2l6ZSwgJl9zeikNCj4gPiArICAgICAgICAgJiYg cG9seV9pbnRfdHJlZV9wIChUWVBFX1NJWkUgKFRSRUVfVFlQRSAoc3JjKSksICZfdG90YWwpDQo+ ID4gKyAgICAgICAgICYmIGtub3duX2dlIChfdG90YWwsIF9zeiArIG5sb2MpKQ0KPiA+ICsgICAg ICAoaWZuIChCSVRfRklFTERfUkVGOm50eXBlIHsgc3JjOyB9IHsgc2l6ZTsgfSB7IHBvczsgfSkp KSkpKSkNCj4gPiArDQo+ID4gKyhmb3Igb3AgKGx0IGd0KQ0KPiA+ICsgICAgIGlmbmkgKElGTl9S RURVQ19NSU4gSUZOX1JFRFVDX01BWCkNCj4gPiArICAgICBpZm5mIChJRk5fUkVEVUNfRk1JTiBJ Rk5fUkVEVUNfRk1BWCkgIChzaW1wbGlmeQ0KPiA+ICsgIChjb25kIChvcCBAMCBAMSkgQDAgQDEp DQo+ID4gKyAgIChpZiAoSU5URUdSQUxfVFlQRV9QICh0eXBlKSB8fCBTQ0FMQVJfRkxPQVRfVFlQ RV9QICh0eXBlKSkNCj4gPiArICAgICh3aXRoIHsgcG9seV91aW50NjQgbmxvYyA9IDA7DQo+ID4g KyAgICAgICAgICAgdHJlZSBzcmMgPSBhZGphY2VudF9kYXRhX2FjY2Vzc19wIChAMCwgQDEsICZu bG9jLCBmYWxzZSk7DQo+ID4gKyAgICAgICAgICAgdHJlZSBudHlwZSA9IGJ1aWxkX3ZlY3Rvcl90 eXBlICh0eXBlLCAyKTsNCj4gPiArICAgICAgICAgICB0cmVlIHNpemUgPSBUWVBFX1NJWkUgKG50 eXBlKTsNCj4gPiArICAgICAgICAgICB0cmVlIHBvcyA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQ RSAoc2l6ZSksIG5sb2MpOw0KPiA+ICsgICAgICAgICAgIHBvbHlfdWludDY0IF9zejsNCj4gPiAr ICAgICAgICAgICBwb2x5X3VpbnQ2NCBfdG90YWw7IH0NCj4gPiArICAgICAoaWYgKHNyYyAmJiBp c19naW1wbGVfcmVnIChzcmMpICYmIG50eXBlDQo+ID4gKyAgICAgICAgICYmIHBvbHlfaW50X3Ry ZWVfcCAoc2l6ZSwgJl9zeikNCj4gPiArICAgICAgICAgJiYgcG9seV9pbnRfdHJlZV9wIChUWVBF X1NJWkUgKFRSRUVfVFlQRSAoc3JjKSksICZfdG90YWwpDQo+ID4gKyAgICAgICAgICYmIGtub3du X2dlIChfdG90YWwsIF9zeiArIG5sb2MpKQ0KPiA+ICsgICAgICAoaWYgKFNDQUxBUl9GTE9BVF9N T0RFX1AgKFRZUEVfTU9ERSAodHlwZSkpKQ0KPiA+ICsgICAgICAgKGlmbmYgKEJJVF9GSUVMRF9S RUY6bnR5cGUgeyBzcmM7IH0geyBzaXplOyB9IHsgcG9zOyB9KSkNCj4gPiArICAgICAgIChpZm5p IChCSVRfRklFTERfUkVGOm50eXBlIHsgc3JjOyB9IHsgc2l6ZTsgfSB7IHBvczsgfSkpKSkpKSkp DQo+ID4gKw0KPiA+ICAoc2ltcGxpZnkNCj4gPiAgIChCSVRfRklFTERfUkVGIChCSVRfRklFTERf UkVGIEAwIEAxIEAyKSBAMyBANCkNCj4gPiAgIChCSVRfRklFTERfUkVGIEAwIEAzIHsgY29uc3Rf Ymlub3AgKFBMVVNfRVhQUiwgYml0c2l6ZXR5cGUsIEAyLCBANCk7DQo+ID4gfSkpIGRpZmYgLS1n aXQgYS9nY2MvdHJlZS1jZmcuY2MgYi9nY2MvdHJlZS1jZmcuY2MgaW5kZXgNCj4gPg0KPiA5MWVj MzNjODBhNDFlMWUwY2M2MjI0ZTEzN2RkNDIxNDQ3MjRhMTY4Li5iMTk3MTAzOTI5NDBjZjQ2OWRl NTJkMDA2DQo+IDYwMw0KPiA+IGFlMWUzZGViNmI3NiAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvdHJl ZS1jZmcuY2MNCj4gPiArKysgYi9nY2MvdHJlZS1jZmcuY2MNCj4gPiBAQCAtMzQ5Miw2ICszNDky LDcgQEAgdmVyaWZ5X2dpbXBsZV9jYWxsIChnY2FsbCAqc3RtdCkNCj4gPiAgICAgIHsNCj4gPiAg ICAgICAgdHJlZSBhcmcgPSBnaW1wbGVfY2FsbF9hcmcgKHN0bXQsIGkpOw0KPiA+ICAgICAgICBp ZiAoKGlzX2dpbXBsZV9yZWdfdHlwZSAoVFJFRV9UWVBFIChhcmcpKQ0KPiA+ICsgICAgICAgICAg JiYgIWlzX2dpbXBsZV92YXJpYWJsZSAoYXJnKQ0KPiA+ICAgICAgICAgICAgJiYgIWlzX2dpbXBs ZV92YWwgKGFyZykpDQo+ID4gICAgICAgICAgIHx8ICghaXNfZ2ltcGxlX3JlZ190eXBlIChUUkVF X1RZUEUgKGFyZykpDQo+ID4gICAgICAgICAgICAgICAmJiAhaXNfZ2ltcGxlX2x2YWx1ZSAoYXJn KSkpIGRpZmYgLS1naXQgYS9nY2MvdHJlZS5oDQo+ID4gYi9nY2MvdHJlZS5oIGluZGV4DQo+ID4N Cj4gZTY1NjRhYWNjYjdiNjljZDkzOGZmNjBiNjEyMWFlYzQxYjdlOGE1OS4uOGY4YTk2NjBjOWUw NjA1ZWI1MTZkZTE5NA0KPiA2NDANCj4gPiBiOGMxYjUzMWI3OTggMTAwNjQ0DQo+ID4gLS0tIGEv Z2NjL3RyZWUuaA0KPiA+ICsrKyBiL2djYy90cmVlLmgNCj4gPiBAQCAtNTAwNiw2ICs1MDA2LDEx IEBAIGV4dGVybiBib29sIGludGVnZXJfcG93MnAgKGNvbnN0X3RyZWUpOw0KPiA+DQo+ID4gIGV4 dGVybiB0cmVlIGJpdG1hc2tfaW52X2NzdF92ZWN0b3JfcCAodHJlZSk7DQo+ID4NCj4gPiArLyog VFJVRSBpZiB0aGUgdHdvIG9wZXJhbmRzIHJlcHJlc2VudCBhZGphY2VudCBhY2Nlc3Mgb2YgZGF0 YSBzdWNoIHRoYXQgYQ0KPiA+ICsgICBwYWlyd2lzZSBvcGVyYXRpb24gY2FuIGJlIHVzZWQuICAq Lw0KPiA+ICsNCj4gPiArZXh0ZXJuIHRyZWUgYWRqYWNlbnRfZGF0YV9hY2Nlc3NfcCAodHJlZSwg dHJlZSwgcG9seV91aW50NjQqLCBib29sKTsNCj4gPiArDQo+ID4gIC8qIGludGVnZXJfbm9uemVy b3AgKHRyZWUgeCkgaXMgbm9uemVybyBpZiBYIGlzIGFuIGludGVnZXIgY29uc3RhbnQNCj4gPiAg ICAgd2l0aCBhIG5vbnplcm8gdmFsdWUuICAqLw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90 cmVlLmNjIGIvZ2NjL3RyZWUuY2MgaW5kZXgNCj4gPg0KPiAwMDdjOTMyNWIxNzA3NmY0NzRlNjY4 MWM0OTk2NmM1OWNmNmI5MWM3Li41MzE1YWYzOGExZWFkODljYTVmNzVkYzRiMTkNCj4gZA0KPiA+ IGU5ODQxZTI5ZDMxMSAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvdHJlZS5jYw0KPiA+ICsrKyBiL2dj Yy90cmVlLmNjDQo+ID4gQEAgLTEwNDU3LDYgKzEwNDU3LDkwIEBAIGJpdG1hc2tfaW52X2NzdF92 ZWN0b3JfcCAodHJlZSB0KQ0KPiA+ICAgIHJldHVybiBidWlsZGVyLmJ1aWxkICgpOw0KPiA+ICB9 DQo+ID4NCj4gPiArLyogUmV0dXJucyBiYXNlIGFkZHJlc3MgaWYgdGhlIHR3byBvcGVyYW5kcyBy ZXByZXNlbnQgYWRqYWNlbnQgYWNjZXNzIG9mDQo+IGRhdGENCj4gPiArICAgc3VjaCB0aGF0IGEg cGFpcndpc2Ugb3BlcmF0aW9uIGNhbiBiZSB1c2VkLiAgT1AxIG11c3QgYmUgYSBsb3dlcg0KPiBz dWJwYXJ0DQo+ID4gKyAgIHRoYW4gT1AyLiAgSWYgUE9TIGlzIG5vdCBOVUxMIHRoZW4gb24gcmV0 dXJuIGlmIGEgdmFsdWUgaXMgcmV0dXJuZWQgUE9TDQo+ID4gKyAgIHdpbGwgaW5kaWNhdGUgdGhl IHBvc2l0aW9uIG9mIHRoZSBsb3dlciBhZGRyZXNzLiAgSWYgQ09NTVVUQVRJVkVfUA0KPiB0aGVu DQo+ID4gKyAgIHRoZSBvcGVyYXRpb24gaXMgYWxzbyB0cmllZCBieSBmbGlwcGluZyBvcDEgYW5k IG9wMi4gICovDQo+ID4gKw0KPiA+ICt0cmVlIGFkamFjZW50X2RhdGFfYWNjZXNzX3AgKHRyZWUg b3AxLCB0cmVlIG9wMiwgcG9seV91aW50NjQgKnBvcywNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb2wgY29tbXV0YXRpdmVfcCkgew0KPiA+ICsgIGdjY19hc3NlcnQgKG9wMSk7 DQo+ID4gKyAgZ2NjX2Fzc2VydCAob3AyKTsNCj4gPiArICBpZiAoVFJFRV9DT0RFIChvcDEpICE9 IFRSRUVfQ09ERSAob3AyKQ0KPiA+ICsgICAgICB8fCBUUkVFX1RZUEUgKG9wMSkgIT0gVFJFRV9U WVBFIChvcDIpKQ0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgIHRyZWUgdHlw ZSA9IFRSRUVfVFlQRSAob3AxKTsNCj4gPiArICBnaW1wbGUgKnN0bXQxID0gTlVMTCwgKnN0bXQy ID0gTlVMTDsgIHVuc2lnbmVkIGludCBiaXRzID0NCj4gPiArIEdFVF9NT0RFX0JJVFNJWkUgKEdF VF9NT0RFX0lOTkVSIChUWVBFX01PREUgKHR5cGUpKSk7DQo+ID4gKw0KPiA+ICsgIGlmIChUUkVF X0NPREUgKG9wMSkgPT0gQklUX0ZJRUxEX1JFRg0KPiA+ICsgICAgICAmJiBvcGVyYW5kX2VxdWFs X3AgKFRSRUVfT1BFUkFORCAob3AxLCAwKSwgVFJFRV9PUEVSQU5EIChvcDIsDQo+IDApLCAwKQ0K PiA+ICsgICAgICAmJiBvcGVyYW5kX2VxdWFsX3AgKFRSRUVfT1BFUkFORCAob3AxLCAxKSwgVFJF RV9PUEVSQU5EIChvcDIsDQo+IDEpLCAwKQ0KPiA+ICsgICAgICAmJiBrbm93bl9lcSAoYml0X2Zp ZWxkX3NpemUgKG9wMSksIGJpdHMpKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICBwb2x5X3VpbnQ2 NCBvZmZzZXQxID0gYml0X2ZpZWxkX29mZnNldCAob3AxKTsNCj4gPiArICAgICAgcG9seV91aW50 NjQgb2Zmc2V0MiA9IGJpdF9maWVsZF9vZmZzZXQgKG9wMik7DQo+ID4gKyAgICAgIGlmIChrbm93 bl9lcSAob2Zmc2V0MiAtIG9mZnNldDEsIGJpdHMpKQ0KPiA+ICsgICAgICAgew0KPiA+ICsgICAg ICAgICBpZiAocG9zKQ0KPiA+ICsgICAgICAgICAgICpwb3MgPSBvZmZzZXQxOw0KPiA+ICsgICAg ICAgICByZXR1cm4gVFJFRV9PUEVSQU5EIChvcDEsIDApOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsg ICAgICBlbHNlIGlmIChjb21tdXRhdGl2ZV9wICYmIGtub3duX2VxIChvZmZzZXQxIC0gb2Zmc2V0 MiwgYml0cykpDQo+ID4gKyAgICAgICB7DQo+ID4gKyAgICAgICAgIGlmIChwb3MpDQo+ID4gKyAg ICAgICAgICAgKnBvcyA9IG9mZnNldDI7DQo+ID4gKyAgICAgICAgIHJldHVybiBUUkVFX09QRVJB TkQgKG9wMSwgMCk7DQo+ID4gKyAgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAgZWxzZSBpZiAo VFJFRV9DT0RFIChvcDEpID09IEFSUkFZX1JFRg0KPiA+ICsgICAgICAgICAgJiYgb3BlcmFuZF9l cXVhbF9wIChnZXRfYmFzZV9hZGRyZXNzIChvcDEpLCBnZXRfYmFzZV9hZGRyZXNzDQo+IChvcDIp KSkNCj4gPiArICAgIHsNCj4gPiArICAgICAgd2lkZV9pbnQgc2l6ZTEgPSB3aTo6dG9fd2lkZSAo YXJyYXlfcmVmX2VsZW1lbnRfc2l6ZSAob3AxKSk7DQo+ID4gKyAgICAgIHdpZGVfaW50IHNpemUy ID0gd2k6OnRvX3dpZGUgKGFycmF5X3JlZl9lbGVtZW50X3NpemUgKG9wMikpOw0KPiA+ICsgICAg ICBpZiAod2k6Om5lX3AgKHNpemUxLCBzaXplMikgfHwgd2k6Om5lX3AgKHNpemUxLCBiaXRzIC8g OCkNCj4gPiArICAgICAgICAgfHwgIXRyZWVfZml0c19wb2x5X3VpbnQ2NF9wIChUUkVFX09QRVJB TkQgKG9wMSwgMSkpDQo+ID4gKyAgICAgICAgIHx8ICF0cmVlX2ZpdHNfcG9seV91aW50NjRfcCAo VFJFRV9PUEVSQU5EIChvcDIsIDEpKSkNCj4gPiArICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsN Cj4gPiArICAgICAgcG9seV91aW50NjQgb2Zmc2V0MSA9IHRyZWVfdG9fcG9seV91aW50NjQgKFRS RUVfT1BFUkFORCAob3AxLCAxKSk7DQo+ID4gKyAgICAgIHBvbHlfdWludDY0IG9mZnNldDIgPSB0 cmVlX3RvX3BvbHlfdWludDY0IChUUkVFX09QRVJBTkQgKG9wMiwgMSkpOw0KPiA+ICsgICAgICBp ZiAoa25vd25fZXEgKG9mZnNldDIgLSBvZmZzZXQxLCAxVUwpKQ0KPiA+ICsgICAgICAgew0KPiA+ ICsgICAgICAgICBpZiAocG9zKQ0KPiA+ICsgICAgICAgICAgICpwb3MgPSBvZmZzZXQxICogYml0 czsNCj4gPiArICAgICAgICAgcmV0dXJuIFRSRUVfT1BFUkFORCAob3AxLCAwKTsNCj4gPiArICAg ICAgIH0NCj4gPiArICAgICAgZWxzZSBpZiAoY29tbXV0YXRpdmVfcCAmJiBrbm93bl9lcSAob2Zm c2V0MSAtIG9mZnNldDIsIDFVTCkpDQo+ID4gKyAgICAgICB7DQo+ID4gKyAgICAgICAgIGlmIChw b3MpDQo+ID4gKyAgICAgICAgICAgKnBvcyA9IG9mZnNldDIgKiBiaXRzOw0KPiA+ICsgICAgICAg ICByZXR1cm4gVFJFRV9PUEVSQU5EIChvcDEsIDApOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAg fQ0KPiA+ICsgIGVsc2UgaWYgKFRSRUVfQ09ERSAob3AxKSA9PSBTU0FfTkFNRQ0KPiA+ICsgICAg ICAgICAgJiYgKHN0bXQxID0gU1NBX05BTUVfREVGX1NUTVQgKG9wMSkpICE9IE5VTEwNCj4gPiAr ICAgICAgICAgICYmIChzdG10MiA9IFNTQV9OQU1FX0RFRl9TVE1UIChvcDIpKSAhPSBOVUxMDQo+ ID4gKyAgICAgICAgICAmJiBpc19naW1wbGVfYXNzaWduIChzdG10MSkNCj4gPiArICAgICAgICAg ICYmIGlzX2dpbXBsZV9hc3NpZ24gKHN0bXQyKSkNCj4gPiArICAgIHsNCj4gPiArICAgICAgaWYg KGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0bXQxKSAhPSBBUlJBWV9SRUYNCj4gPiArICAgICAg ICAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoc3RtdDEpICE9IEJJVF9GSUVMRF9SRUYNCj4g PiArICAgICAgICAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoc3RtdDIpICE9IEFSUkFZX1JF Rg0KPiA+ICsgICAgICAgICAmJiBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChzdG10MikgIT0gQklU X0ZJRUxEX1JFRikNCj4gPiArICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsNCj4gPiArICAgICAg cmV0dXJuIGFkamFjZW50X2RhdGFfYWNjZXNzX3AgKGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdDEp LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW1wbGVfYXNzaWdu X3JoczEgKHN0bXQyKSwgcG9zLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb21tdXRhdGl2ZV9wKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIE5V TEw7DQo+ID4gK30NCj4gPiArDQo+ID4gIC8qIElmIFZFQ1RPUl9DU1QgVCBoYXMgYSBzaW5nbGUg bm9uemVybyBlbGVtZW50LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoYXQNCj4gPiAgICAgZWxlbWVu dCwgb3RoZXJ3aXNlIHJldHVybiAtMS4gICovDQo+ID4NCj4gPg0KPiA+DQo+ID4NCj4gPg0KPiA+ IC0tDQo=