From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 23156A2F63 for ; Fri, 4 Oct 2019 08:07:24 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D467E1C1B7; Fri, 4 Oct 2019 08:07:22 +0200 (CEST) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr150042.outbound.protection.outlook.com [40.107.15.42]) by dpdk.org (Postfix) with ESMTP id 1B26C1C1B7 for ; Fri, 4 Oct 2019 08:07:22 +0200 (CEST) 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=KwbabzQpKDZSGOFnQbZAgUvrI2IzyC74f4WyKoOQU9M=; b=g+XjyvDmVxi8uQAMKVl5qwV7b0T0qbyQLV2FAkUA/h68RbbuHe+1dswE2y2aJCg3Jx4G0oew9gXEthIAD9238WWtFYJwVDZbI+9IZA/MhyzAZSfIrfZKhWIp0Ie5pj4fmRTbS3FiLYyCLL7n+817HClkteCvnOMbu7XRXykZg2s= Received: from DB7PR08CA0026.eurprd08.prod.outlook.com (2603:10a6:5:16::39) by VE1PR08MB5088.eurprd08.prod.outlook.com (2603:10a6:803:110::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.20; Fri, 4 Oct 2019 06:07:18 +0000 Received: from VE1EUR03FT013.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e09::209) by DB7PR08CA0026.outlook.office365.com (2603:10a6:5:16::39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2284.20 via Frontend Transport; Fri, 4 Oct 2019 06:07:18 +0000 Authentication-Results: spf=temperror (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dpdk.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dpdk.org; dmarc=none action=none header.from=arm.com; Received-SPF: TempError (protection.outlook.com: error in processing during lookup of arm.com: DNS Timeout) Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT013.mail.protection.outlook.com (10.152.19.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2305.15 via Frontend Transport; Fri, 4 Oct 2019 06:07:16 +0000 Received: ("Tessian outbound 0cf06bf5c60e:v33"); Fri, 04 Oct 2019 06:07:12 +0000 X-CR-MTA-TID: 64aa7808 Received: from 2b1b1782be66.1 (ip-172-16-0-2.eu-west-1.compute.internal [104.47.10.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id 99261C0F-7EB7-44A1-8763-1F9F113C82DE.1; Fri, 04 Oct 2019 06:07:07 +0000 Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-db5eur03lp2054.outbound.protection.outlook.com [104.47.10.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 2b1b1782be66.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384); Fri, 04 Oct 2019 06:07:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VXhF6zidABqQ7/Y7LZqYrYgz8u5A+auTgAWqfyP0Oxay984mEPRjy0ToHbUrruxhrcoyzjFX26yJdeqV36IhrCtIq4kArvQfDuyLIiRTmIwefJUtcenYw1rWR5E4Jt1c5VBKJypvFEHkVBfbN2KnAdO/QwTItFgi2EgVi6qYBYIQqUbdL6SyLxsM+RYHS+P+On0WtSrCvsVlHc4GDRLC8vr2uTUa+UkikcPRtK2vie3AoCLzKUjkzZJybamcX6uzSpN979tIWh8Gn99bJRtVcxSC7gue4BGaKMBTCChVcIq/0yON3OyCYVihpc9jljDH2Wdwv25JCr7uOIhZnewhcA== 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-SenderADCheck; bh=KwbabzQpKDZSGOFnQbZAgUvrI2IzyC74f4WyKoOQU9M=; b=mSz9Qlf456WpIi51vrlZ1PYE2gtxLnb3sjF7mRqNc0UvkMC8kqYlkdHdGo2vENNMA4pDnz1C8l1GJhY6E7mTJF/oqY/g01o76+M2vJbzCYMiUDCLkHSIUFuvuyOyEi0IosFvJZreIFECQHywS/nCo4ngKaQeBndxet81LFUZQpFip1ohA4msA38NlejJgunNWr4dwvdP1usHpjE6HdxYRLKyeJGy57BtPll1Xa+Zge9S3flwnj3VpAqh5HRYFPPTCEaIb11KlxTCNIKlPkpjMm5ymHZxJ0EODXSSmrHqsJe1WqPWScGxCWPG9axqf9O5rEN9BjH8x6lnS+b2J8Zn9w== 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=KwbabzQpKDZSGOFnQbZAgUvrI2IzyC74f4WyKoOQU9M=; b=g+XjyvDmVxi8uQAMKVl5qwV7b0T0qbyQLV2FAkUA/h68RbbuHe+1dswE2y2aJCg3Jx4G0oew9gXEthIAD9238WWtFYJwVDZbI+9IZA/MhyzAZSfIrfZKhWIp0Ie5pj4fmRTbS3FiLYyCLL7n+817HClkteCvnOMbu7XRXykZg2s= Received: from VE1PR08MB5149.eurprd08.prod.outlook.com (20.179.30.27) by VE1SPR01MB0007.eurprd08.prod.outlook.com (20.179.193.160) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.20; Fri, 4 Oct 2019 06:07:03 +0000 Received: from VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::8c82:8d9c:c78d:22a6]) by VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::8c82:8d9c:c78d:22a6%7]) with mapi id 15.20.2305.023; Fri, 4 Oct 2019 06:07:03 +0000 From: Honnappa Nagarahalli To: "Ananyev, Konstantin" , "stephen@networkplumber.org" , "paulmck@linux.ibm.com" CC: "Wang, Yipeng1" , "Medvedkin, Vladimir" , "Ruifeng Wang (Arm Technology China)" , Dharmik Thakkar , "dev@dpdk.org" , nd , nd , nd Thread-Topic: [PATCH v3 2/3] lib/rcu: add resource reclamation APIs Thread-Index: AQHVeUhlHoJ4LCRP6EyrG0pYBVGBKKdIZEYQgAB0zICAAHvAMA== Date: Fri, 4 Oct 2019 06:07:03 +0000 Message-ID: References: <20190906094534.36060-1-ruifeng.wang@arm.com> <20191001062917.35578-1-honnappa.nagarahalli@arm.com> <20191001062917.35578-3-honnappa.nagarahalli@arm.com> <2601191342CEEE43887BDE71AB977258019196FF8E@irsmsx105.ger.corp.intel.com> <2601191342CEEE43887BDE71AB977258019197083A@irsmsx105.ger.corp.intel.com> In-Reply-To: <2601191342CEEE43887BDE71AB977258019197083A@irsmsx105.ger.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 39666b32-e9f9-49ec-ab71-4d44331aa0d8.0 x-checkrecipientchecked: true Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email X-MS-Office365-Filtering-Correlation-Id: 2893f110-76d2-4b9d-f7ef-08d748911bba X-MS-Office365-Filtering-HT: Tenant X-MS-TrafficTypeDiagnostic: VE1SPR01MB0007:|VE1SPR01MB0007:|VE1PR08MB5088: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:6108;OLM:6108; x-forefront-prvs: 018093A9B5 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM; SFS:(10009020)(4636009)(376002)(366004)(396003)(346002)(136003)(39860400002)(52314003)(199004)(189003)(110136005)(54906003)(316002)(86362001)(8936002)(305945005)(7736002)(55016002)(9686003)(6436002)(66476007)(2906002)(6116002)(66946007)(66556008)(5660300002)(3846002)(71200400001)(71190400001)(52536014)(76116006)(74316002)(64756008)(66446008)(4326008)(446003)(11346002)(14454004)(7696005)(25786009)(486006)(476003)(76176011)(30864003)(229853002)(14444005)(81166006)(81156014)(2501003)(8676002)(102836004)(33656002)(186003)(99286004)(478600001)(26005)(6506007)(2201001)(6246003)(256004)(66066001)(69594002)(559001)(579004)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1SPR01MB0007; H:VE1PR08MB5149.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: SdgJrq6nRW8LKJy3gQqVCn9o/jlYBNu7YpPZd7I7lqw6DrI6mKkls5s7ED/BxuOMvsRkTr8ugIoGEje15AAJassM4y1IkDbLD33xvC39Ex0Jz2OKjoOhLq+Ka9Nis96zvILoMx7g+spWDpvWYdShqiFSl0zg+vAWiEnbvWoSC2hTHv9eQP0LbKg+vawz/o3p0bElZHe8FN9+Lbo7UnTx2vt12sPREs6ypNEK8km84hG6vyc73KoZqBN3EbU5FfR+qwrdr3yHJ6e1j57G7hgEPV3Q7x7dKqTSAWzkshwx+WvJxC0OhirgAeeYCFefhdxzVUicAvDTh1zbU1Q2VJSF5P1k4J/hwj2xBHLa9bgI+6fv6annnAODrGHXgXtwSleDfJB11VWY0Nytg9i7lVdUbvbGiMVtvR/hvtv26zbHnfE= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1SPR01MB0007 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT013.eop-EUR03.prod.protection.outlook.com X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(136003)(39860400002)(346002)(376002)(396003)(199004)(189003)(52314003)(22756006)(478600001)(6246003)(8936002)(33656002)(8676002)(6116002)(55016002)(229853002)(81156014)(81166006)(3846002)(26826003)(76130400001)(2906002)(66066001)(70206006)(356004)(70586007)(47776003)(4326008)(9686003)(52536014)(30864003)(7696005)(23676004)(126002)(5660300002)(50466002)(2501003)(2486003)(486006)(2201001)(76176011)(99286004)(11346002)(26005)(186003)(336012)(446003)(102836004)(63350400001)(6506007)(14454004)(14444005)(436003)(36906005)(74316002)(316002)(110136005)(7736002)(305945005)(25786009)(54906003)(86362001)(476003)(69594002); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR08MB5088; H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; X-MS-Office365-Filtering-Correlation-Id-Prvs: 09fd0b38-a4de-4645-8b76-08d7489113da NoDisclaimer: True X-Forefront-PRVS: 018093A9B5 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RsYsk5E4cxAF6o8VoPoVOiqJutrubZT13sZomFaPVkZ9a9ip6qj0QGk89T4aqKwKKAzxR1dgVdlZ3hrMzvCjQ9UJ3oUPbmeLoTcu/3W9EEgK+wIYzVPAvJ6vxlBHF3J6JmFhtUJWHIcJ6pBfxadDAWueH1+f+Mnyh7Ae9mjSOGeoG3EwckBBWkxp9sfqTfYTf17YCw/RThnSsraexwImq+aT3qakX4avWPoyAf4qOa2eHHs4s+MYG1HRpUvikZuE2w6OfZSV5VTdh0AtNOw+Cip+VoUdlOnn925nS9VJ3NGcSN9CT0plQUeAVTMLos5ahh7eqmu0jt4RMh0hqmPggztPzhWxfMhxB2kuNu6jzQWSBnZBWTbzRHk4NWXjmtwYMG9i15yltLxpTwVGkeIsBqhlXvbMawoqOrhmu71wb7I= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Oct 2019 06:07:16.7529 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2893f110-76d2-4b9d-f7ef-08d748911bba 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-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5088 Subject: Re: [dpdk-dev] [PATCH v3 2/3] lib/rcu: add resource reclamation APIs X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" PiANCj4gSGkgSG9ubmFwcGEsDQo+IA0KPiA+ID4gPiBBZGQgcmVzb3VyY2UgcmVjbGFtYXRpb24g QVBJcyB0byBtYWtlIGl0IHNpbXBsZSBmb3IgYXBwbGljYXRpb25zDQo+ID4gPiA+IGFuZCBsaWJy YXJpZXMgdG8gaW50ZWdyYXRlIHJ0ZV9yY3UgbGlicmFyeS4NCj4gPiA+ID4NCj4gPiA+ID4gU2ln bmVkLW9mZi1ieTogSG9ubmFwcGEgTmFnYXJhaGFsbGkgPGhvbm5hcHBhLm5hZ2FyYWhhbGxpQGFy bS5jb20+DQo+ID4gPiA+IFJldmlld2VkLWJ5OiBPbGEgTGlsamVkaGFsIDxvbGEubGlsamVkaGFs QGFybS5jb20+DQo+ID4gPiA+IFJldmlld2VkLWJ5OiBSdWlmZW5nIFdhbmcgPHJ1aWZlbmcud2Fu Z0Bhcm0uY29tPg0KPiA+ID4gPiAtLS0NCj4gPiA+ID4gIGFwcC90ZXN0L3Rlc3RfcmN1X3FzYnIu YyAgICAgICAgICAgfCAyOTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gPiA+ID4g IGxpYi9saWJydGVfcmN1L21lc29uLmJ1aWxkICAgICAgICAgfCAgIDIgKw0KPiA+ID4gPiAgbGli L2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmMgICAgICB8IDE4NSArKysrKysrKysrKysrKysrKysN Cj4gPiA+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5oICAgICAgfCAxNjkgKysrKysr KysrKysrKysrKysNCj4gPiA+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNicl9wdnQuaCAg fCAgNDYgKysrKysNCj4gPiA+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9yY3VfdmVyc2lvbi5tYXAg fCAgIDQgKw0KPiA+ID4gPiAgbGliL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICB8ICAg NiArLQ0KPiA+ID4gPiAgNyBmaWxlcyBjaGFuZ2VkLCA3MDAgaW5zZXJ0aW9ucygrKSwgMyBkZWxl dGlvbnMoLSkgIGNyZWF0ZSBtb2RlDQo+ID4gPiA+IDEwMDY0NCBsaWIvbGlicnRlX3JjdS9ydGVf cmN1X3FzYnJfcHZ0LmgNCj4gPiA+ID4NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVf cmN1L3J0ZV9yY3VfcXNici5jDQo+ID4gPiA+IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2Jy LmMgaW5kZXggY2U3ZjkzZGQzLi43NjgxNGY1MGIgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2xpYi9s aWJydGVfcmN1L3J0ZV9yY3VfcXNici5jDQo+ID4gPiA+ICsrKyBiL2xpYi9saWJydGVfcmN1L3J0 ZV9yY3VfcXNici5jDQo+ID4gPiA+IEBAIC0yMSw2ICsyMSw3IEBADQo+ID4gPiA+ICAjaW5jbHVk ZSA8cnRlX2Vycm5vLmg+DQo+ID4gPiA+DQo+ID4gPiA+ICAjaW5jbHVkZSAicnRlX3JjdV9xc2Jy LmgiDQo+ID4gPiA+ICsjaW5jbHVkZSAicnRlX3JjdV9xc2JyX3B2dC5oIg0KPiA+ID4gPg0KPiA+ ID4gPiAgLyogR2V0IHRoZSBtZW1vcnkgc2l6ZSBvZiBRU0JSIHZhcmlhYmxlICovICBzaXplX3Qg QEAgLTI2Nyw2DQo+ID4gPiA+ICsyNjgsMTkwIEBAIHJ0ZV9yY3VfcXNicl9kdW1wKEZJTEUgKmYs IHN0cnVjdCBydGVfcmN1X3FzYnIgKnYpDQo+ID4gPiA+ICAJcmV0dXJuIDA7DQo+ID4gPiA+ICB9 DQo+ID4gPiA+DQo+ID4gPiA+ICsvKiBDcmVhdGUgYSBxdWV1ZSB1c2VkIHRvIHN0b3JlIHRoZSBk YXRhIHN0cnVjdHVyZSBlbGVtZW50cyB0aGF0DQo+ID4gPiA+ICtjYW4NCj4gPiA+ID4gKyAqIGJl IGZyZWVkIGxhdGVyLiBUaGlzIHF1ZXVlIGlzIHJlZmVycmVkIHRvIGFzICdkZWZlciBxdWV1ZScu DQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0cnVjdCBydGVfcmN1X3FzYnJfZHEgKg0KPiA+ID4g PiArcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZShjb25zdCBzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxX3Bh cmFtZXRlcnMNCj4gPiA+ID4gKypwYXJhbXMpIHsNCj4gPiA+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9x c2JyX2RxICpkcTsNCj4gPiA+ID4gKwl1aW50MzJfdCBxc19maWZvX3NpemU7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKwlpZiAocGFyYW1zID09IE5VTEwgfHwgcGFyYW1zLT5mID09IE5VTEwgfHwNCj4g PiA+ID4gKwkJcGFyYW1zLT52ID09IE5VTEwgfHwgcGFyYW1zLT5uYW1lID09IE5VTEwgfHwNCj4g PiA+ID4gKwkJcGFyYW1zLT5zaXplID09IDAgfHwgcGFyYW1zLT5lc2l6ZSA9PSAwIHx8DQo+ID4g PiA+ICsJCShwYXJhbXMtPmVzaXplICUgOCAhPSAwKSkgew0KPiA+ID4gPiArCQlydGVfbG9nKFJU RV9MT0dfRVJSLCBydGVfcmN1X2xvZ190eXBlLA0KPiA+ID4gPiArCQkJIiVzKCk6IEludmFsaWQg aW5wdXQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiA+ICsJCXJ0ZV9lcnJubyA9IEVJ TlZBTDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiA+ID4gKwl9DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKwlkcSA9IHJ0ZV96bWFsbG9jKE5VTEwsDQo+ID4gPiA+ICsJCShz aXplb2Yoc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSkgKyBwYXJhbXMtPmVzaXplKSwNCj4gPiA+ID4g KwkJUlRFX0NBQ0hFX0xJTkVfU0laRSk7DQo+ID4gPiA+ICsJaWYgKGRxID09IE5VTEwpIHsNCj4g PiA+ID4gKwkJcnRlX2Vycm5vID0gRU5PTUVNOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCXJldHVy biBOVUxMOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIHJvdW5kIHVwIHFz X2ZpZm9fc2l6ZSB0byBuZXh0IHBvd2VyIG9mIHR3byB0aGF0IGlzIG5vdCBsZXNzIHRoYW4NCj4g PiA+ID4gKwkgKiBtYXhfc2l6ZS4NCj4gPiA+ID4gKwkgKi8NCj4gPiA+ID4gKwlxc19maWZvX3Np emUgPSBydGVfYWxpZ24zMnBvdzIoKCgocGFyYW1zLT5lc2l6ZS84KSArIDEpDQo+ID4gPiA+ICsJ CQkJCSogcGFyYW1zLT5zaXplKSArIDEpOw0KPiA+ID4gPiArCWRxLT5yID0gcnRlX3JpbmdfY3Jl YXRlKHBhcmFtcy0+bmFtZSwgcXNfZmlmb19zaXplLA0KPiA+ID4gPiArCQkJCQlTT0NLRVRfSURf QU5ZLCAwKTsNCj4gPiA+DQo+ID4gPiBJZiBpdCBpcyBnb2luZyB0byBiZSBub3QgTVQgc2FmZSwg dGhlbiB3aHkgbm90IHRvIGNyZWF0ZSB0aGUgcmluZw0KPiA+ID4gd2l0aCAoUklOR19GX1NQX0VO USB8IFJJTkdfRl9TQ19ERVEpIGZsYWdzIHNldD8NCj4gPiBBZ3JlZS4NCj4gPg0KPiA+ID4gVGhv dWdoIEkgdGhpbmsgaXQgY291bGQgYmUgY2hhbmdlZCB0byBhbGxvdyBNVCBzYWZlIG11bHRpcGxl DQo+ID4gPiBlbnFldWUvc2luZ2xlIGRlcXVldWUsIHNlZSBiZWxvdy4NCj4gPiBUaGUgTVQgc2Fm ZSBpc3N1ZSBpcyBkdWUgdG8gcmVjbGFpbSBjb2RlLiBUaGUgcmVjbGFpbSBjb2RlIGhhcyB0aGUg Zm9sbG93aW5nDQo+IHNlcXVlbmNlOg0KPiA+DQo+ID4gcnRlX3JpbmdfcGVlaw0KPiA+IHJ0ZV9y Y3VfcXNicl9jaGVjaw0KPiA+IHJ0ZV9yaW5nX2RlcXVldWUNCj4gPg0KPiA+IFRoaXMgZW50aXJl IHNlcXVlbmNlIG5lZWRzIHRvIGJlIGF0b21pYyBhcyB0aGUgZW50cnkgY2Fubm90IGJlIGRlcXVl dWVkDQo+IHdpdGhvdXQga25vd2luZyB0aGF0IHRoZSBncmFjZSBwZXJpb2QgZm9yIHRoYXQgZW50 cnkgaXMgb3Zlci4NCj4gDQo+IEkgdW5kZXJzdGFuZCB0aGF0LCB0aG91Z2ggSSBiZWxpZXZlIGF0 IGxlYXN0IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBzdXBwb3J0DQo+IG11bHRpcGxlLWVucXVl dWUvc2luZ2xlIGRlcXVldWVyIGFuZCByZWNsYWltIG1vZGUuDQo+IFdpdGggc2VyaWFsaXplZCBk ZXF1ZXVlKCkgZXZlbiBtdWx0aXBsZSBkZXF1ZXVlIHNob3VsZCBiZSBwb3NzaWJsZS4NCkFncmVl ZC4gUGxlYXNlIHNlZSB0aGUgcmVzcG9uc2Ugb24gdGhlIG90aGVyIHRocmVhZC4NCg0KPiANCj4g PiBOb3RlIHRoYXQgZHVlIHRvIG9wdGltaXphdGlvbnMgaW4gcnRlX3JjdV9xc2JyX2NoZWNrIEFQ SSwgdGhpcw0KPiA+IHNlcXVlbmNlIHNob3VsZCBub3QgYmUgbGFyZ2UgaW4gbW9zdCBjYXNlcy4g SSBkbyBub3QgaGF2ZSBpZGVhcyBvbiBob3cgdG8NCj4gbWFrZSB0aGlzIHNlcXVlbmNlIGxvY2st ZnJlZS4NCj4gPg0KPiA+IElmIHRoZSB3cml0ZXIgaXMgb24gdGhlIGNvbnRyb2wgcGxhbmUsIG1v c3QgdXNlIGNhc2VzIHdpbGwgdXNlIG11dGV4DQo+ID4gbG9ja3MgZm9yIHN5bmNocm9uaXphdGlv biBpZiB0aGV5IGFyZSBtdWx0aS10aHJlYWRlZC4gVGhhdCBsb2NrIHNob3VsZCBiZQ0KPiBlbm91 Z2ggdG8gcHJvdmlkZSB0aGUgdGhyZWFkIHNhZmV0eSBmb3IgdGhlc2UgQVBJcy4NCj4gDQo+IElu IHRoYXQgaXMgY2FzZSwgd2h5IGRvIHdlIG5lZWQgcmluZyBhdCBhbGw/DQo+IEZvciBzdXJlIHBl b3BsZSBjYW4gY3JlYXRlIHRoZWlyIG93biBxdWV1ZSBxdWl0ZSBlYXNpbHkgd2l0aCBtdXRleCBh bmQgVEFJTFEuDQo+IElmIHBlcmZvcm1hbmNlIGlzIG5vdCBhbiBpc3N1ZSwgdGhleSBjYW4gZXZl biBhZGQgcHRocmVhZF9jb25kIHRvIGl0LCBhbmQgaGF2ZQ0KPiBhbiBhYmlsaXR5IGZvciB0aGUg Y29uc3VtZXIgdG8gc2xlZXAvd2FrZXVwIG9uIGVtcHR5L2Z1bGwgcXVldWUuDQo+IA0KPiA+DQo+ ID4gSWYgdGhlIHdyaXRlciBpcyBtdWx0aS10aHJlYWRlZCBhbmQgbG9jay1mcmVlLCB0aGVuIG9u ZSBzaG91bGQgdXNlIHBlciB0aHJlYWQNCj4gZGVmZXIgcXVldWUuDQo+IA0KPiBJZiB0aGF0J3Mg dGhlIG9ubHkgd29ya2luZyBtb2RlbCwgdGhlbiB0aGUgcXVlc3Rpb24gaXMgd2h5IGRvIHdlIG5l ZWQgdGhhdCBBUEkNCj4gYXQgYWxsPw0KPiBKdXN0IHNpbXBsZSBhcnJheSB3aXRoIGNvdW50ZXIg b3IgbGlua2VkLWxpc3Qgc2hvdWxkIGRvIGZvciBtYWpvcml0eSBvZiBjYXNlcy4NClBsZWFzZSBz ZWUgdGhlIG90aGVyIHRocmVhZC4NCg0KPiANCj4gPg0KPiA+ID4NCj4gPiA+ID4gKwlpZiAoZHEt PnIgPT0gTlVMTCkgew0KPiA+ID4gPiArCQlydGVfbG9nKFJURV9MT0dfRVJSLCBydGVfcmN1X2xv Z190eXBlLA0KPiA+ID4gPiArCQkJIiVzKCk6IGRlZmVyIHF1ZXVlIGNyZWF0ZSBmYWlsZWRcbiIs IF9fZnVuY19fKTsNCj4gPiA+ID4gKwkJcnRlX2ZyZWUoZHEpOw0KPiA+ID4gPiArCQlyZXR1cm4g TlVMTDsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlkcS0+diA9IHBhcmFtcy0+ djsNCj4gPiA+ID4gKwlkcS0+c2l6ZSA9IHBhcmFtcy0+c2l6ZTsNCj4gPiA+ID4gKwlkcS0+ZXNp emUgPSBwYXJhbXMtPmVzaXplOw0KPiA+ID4gPiArCWRxLT5mID0gcGFyYW1zLT5mOw0KPiA+ID4g PiArCWRxLT5wID0gcGFyYW1zLT5wOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmV0dXJuIGRxOw0K PiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiBFbnF1ZXVlIG9uZSByZXNvdXJjZSB0 byB0aGUgZGVmZXIgcXVldWUgdG8gZnJlZSBhZnRlciB0aGUNCj4gPiA+ID4gK2dyYWNlDQo+ID4g PiA+ICsgKiBwZXJpb2QgaXMgb3Zlci4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiAraW50IHJ0ZV9y Y3VfcXNicl9kcV9lbnF1ZXVlKHN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRxLCB2b2lkICplKSB7 DQo+ID4gPiA+ICsJdWludDY0X3QgdG9rZW47DQo+ID4gPiA+ICsJdWludDY0X3QgKnRtcDsNCj4g PiA+ID4gKwl1aW50MzJfdCBpOw0KPiA+ID4gPiArCXVpbnQzMl90IGN1cl9zaXplLCBmcmVlX3Np emU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiAoZHEgPT0gTlVMTCB8fCBlID09IE5VTEwpIHsN Cj4gPiA+ID4gKwkJcnRlX2xvZyhSVEVfTE9HX0VSUiwgcnRlX3JjdV9sb2dfdHlwZSwNCj4gPiA+ ID4gKwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ ID4gPiArCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJcmV0dXJu IDE7DQo+ID4gPg0KPiA+ID4gV2h5IGp1c3Qgbm90IHRvIHJldHVybiAtRUlOVkFMIHN0cmFpZ2h0 d2F5Pw0KPiA+ID4gSSB0aGluayB0aGVyZSBpcyBubyBtdWNoIHBvaW50IHRvIHNldCBydGVfZXJy bm8gaW4gdGhhdCBmdW5jdGlvbiBhdA0KPiA+ID4gYWxsLCBqdXN0IHJldHVybiB2YWx1ZSBzaG91 bGQgZG8uDQo+ID4gSSBhbSB0cnlpbmcgdG8ga2VlcCB0aGVzZSBjb25zaXN0ZW50IHdpdGggdGhl IGV4aXN0aW5nIEFQSXMuIFRoZXkgcmV0dXJuIDAgb3IgMQ0KPiBhbmQgc2V0IHRoZSBydGVfZXJy bm8uDQo+IA0KPiBBIGxvdCBvZiBwdWJsaWMgRFBESyBBUEkgZnVuY3Rpb25zIGRvIHVzZSByZXR1 cm4gdmFsdWUgdG8gcmV0dXJuIHN0YXR1cyBjb2RlICgwLA0KPiBvciBzb21lIHBvc2l0aXZlIG51 bWJlcnMgb2Ygc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gdmFsdWVzIG9uIGZhaWx1cmUpLCBJIGFt DQo+IG5vdCBpbnZlbnRpbmcgYW55dGhpbmcgbmV3IGhlcmUuDQpBZ3JlZSwgeW91IGFyZSBub3Qg cHJvcG9zaW5nIGEgbmV3IHRoaW5nIGhlcmUuIE1heSBiZSBJIHdhcyBub3QgY2xlYXIuIEkgcmVh bGx5IGRvIG5vdCBoYXZlIGFuIG9waW5pb24gb24gaG93IHRoaXMgc2hvdWxkIGJlIGRvbmUuIEJ1 dCwgSSBkbyBoYXZlIGFuIG9waW5pb24gb24gY29uc2lzdGVuY3kuIFRoZXNlIG5ldyBBUElzIGZv bGxvdyB3aGF0IGhhcyBiZWVuIGRvbmUgaW4gdGhlIGV4aXN0aW5nIFJDVSBBUElzLiBJIHRoaW5r IHdlIGhhdmUgMiBvcHRpb25zIGhlcmUuDQoxKSBFaXRoZXIgd2UgY2hhbmdlIGV4aXN0aW5nIFJD VSBBUElzIHRvIGdldCByaWQgb2YgcnRlX2Vycm5vIChpcyBpdCBhbiBBQkkgY2hhbmdlPykgb3IN CjIpIFRoZSBuZXcgQVBJcyBmb2xsb3cgd2hhdCBoYXMgYmVlbiBkb25lIGluIHRoZSBleGlzdGlu ZyBSQ1UgQVBJcy4NCkkgd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGNvbnNpc3RlbnQgYXQgbGVh c3Qgd2l0aGluIFJDVSBBUElzLg0KDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4gPiArCX0NCj4gPiA+ ID4gKw0KPiA+ID4gPiArCS8qIFN0YXJ0IHRoZSBncmFjZSBwZXJpb2QgKi8NCj4gPiA+ID4gKwl0 b2tlbiA9IHJ0ZV9yY3VfcXNicl9zdGFydChkcS0+dik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkv KiBSZWNsYWltIHJlc291cmNlcyBpZiB0aGUgcXVldWUgaXMgMS84dGggZnVsbC4gVGhpcyBoZWxw cw0KPiA+ID4gPiArCSAqIHRoZSBxdWV1ZSBmcm9tIGdyb3dpbmcgdG9vIGxhcmdlIGFuZCBhbGxv d3MgdGltZSBmb3IgcmVhZGVyDQo+ID4gPiA+ICsJICogdGhyZWFkcyB0byByZXBvcnQgdGhlaXIg cXVpZXNjZW50IHN0YXRlLg0KPiA+ID4gPiArCSAqLw0KPiA+ID4gPiArCWN1cl9zaXplID0gcnRl X3JpbmdfY291bnQoZHEtPnIpIC8gKGRxLT5lc2l6ZS84ICsgMSk7DQo+ID4gPg0KPiA+ID4gUHJv YmFibHkgd291bGQgYmUgYSBiaXQgZWFzaWVyIGlmIHlvdSBqdXN0IHN0b3JlIGluIGRxLT5lc2l6 ZSAoZWx0DQo+ID4gPiBzaXplICsgdG9rZW4NCj4gPiA+IHNpemUpIC8gOC4NCj4gPiBBZ3JlZQ0K PiA+DQo+ID4gPg0KPiA+ID4gPiArCWlmIChjdXJfc2l6ZSA+IChkcS0+c2l6ZSA+PiBSVEVfUkNV X1FTQlJfQVVUT19SRUNMQUlNX0xJTUlUKSkgew0KPiA+ID4NCj4gPiA+IFdoeSB0byBtYWtlIHRo aXMgdGhyZXNob2xkIHZhbHVlIGhhcmQtY29kZWQ/DQo+ID4gPiBXaHkgZWl0aGVyIG5vdCB0byBw dXQgaXQgaW50byBjcmVhdGUgcGFyYW1ldGVyLCBvciBqdXN0IHJldHVybiBhDQo+ID4gPiBzcGVj aWFsIHJldHVybiB2YWx1ZSwgdG8gaW5kaWNhdGUgdGhhdCB0aHJlc2hvbGQgaXMgcmVhY2hlZD8N Cj4gPiBNeSB0aGlua2luZyB3YXMgdG8ga2VlcCB0aGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGVh c3kgdG8gdXNlLiBUaGUNCj4gPiBtb3JlIHRoZSBwYXJhbWV0ZXJzLCB0aGUgbW9yZSBwYWluZnVs IGl0IGlzIGZvciB0aGUgdXNlci4gSU1PLCB0aGUNCj4gPiBjb25zdGFudHMgY2hvc2VuIHNob3Vs ZCBiZSBnb29kIGVub3VnaCBmb3IgbW9zdCBjYXNlcy4gTW9yZSBhZHZhbmNlZA0KPiB1c2VycyBj b3VsZCBtb2RpZnkgdGhlIGNvbnN0YW50cy4gSG93ZXZlciwgd2UgY291bGQgbWFrZSB0aGVzZSBh cyBwYXJ0IG9mIHRoZQ0KPiBwYXJhbWV0ZXJzLCBidXQgbWFrZSB0aGVtIG9wdGlvbmFsIGZvciB0 aGUgdXNlci4gRm9yIGV4OiBpZiB0aGV5IHNldCB0aGVtIHRvIDAsDQo+IGRlZmF1bHQgdmFsdWVz IGNhbiBiZSB1c2VkLg0KPiA+DQo+ID4gPiBPciBldmVuIHJldHVybiBudW1iZXIgb2YgZmlsbGVk L2ZyZWUgZW50cm9lcyBvbiBzdWNjZXNzLCBzbyBjYWxsZXINCj4gPiA+IGNhbiBkZWNpZGUgdG8g cmVjbGFpbSBvciBub3QgYmFzZWQgb24gdGhhdCBpbmZvcm1hdGlvbiBvbiBoaXMgb3duPw0KPiA+ IFRoaXMgbWVhbnMgbW9yZSBjb2RlIG9uIHRoZSB1c2VyIHNpZGUuDQo+IA0KPiBJIHBlcnNvbmFs bHkgdGhpbmsgaXQgaXQgcmVhbGx5IHdvdWxkbid0IGJlIHRoYXQgYmlnIHByb2JsZW0gdG8gdGhl IHVzZXIgdG8gcGFzcw0KPiBleHRyYSBwYXJhbWV0ZXIgdG8gdGhlIGZ1bmN0aW9uLg0KSSB3aWxs IGNvbnZlcnQgdGhlIDIgY29uc3RhbnRzIGludG8gb3B0aW9uYWwgcGFyYW1ldGVycyAodXNlciBj YW4gc2V0IHRoZW0gdG8gMCB0byBtYWtlIHRoZSBhbGdvcml0aG0gdXNlIGRlZmF1bHQgdmFsdWVz KQ0KDQo+IEFnYWluIHdoYXQgaWYgdXNlciBkb2Vzbid0IHdhbnQgdG8gcmVjbGFpbSgpIGluIGVu cXVldWUoKSB0aHJlYWQgYXQgYWxsPw0KJ2VucXVldWUnIGhhcyB0byBkbyByZWNsYW1hdGlvbiBp ZiB0aGUgZGVmZXIgcXVldWUgaXMgZnVsbC4gSSBkbyBub3QgdGhpbmsgdGhpcyBpcyB0cml2aWFs Lg0KDQpJbiB0aGUgY3VycmVudCBkZXNpZ24sIHJlY2xhbWF0aW9uIGluIGVucXVldWUgaXMgYWxz byBkb25lIG9uIHJlZ3VsYXIgYmFzaXMgKGF1dG9tYXRpYyB0cmlnZ2VyaW5nIG9mIHJlY2xhbWF0 aW9uIHdoZW4gdGhlIHF1ZXVlIHJlYWNoZXMgY2VydGFpbiBsaW1pdCkgdG8ga2VlcCB0aGUgcXVl dWUgZnJvbSBncm93aW5nIHRvbyBsYXJnZS4gVGhpcyBpcyByZXF1aXJlZCB3aGVuIHdlIGltcGxl bWVudCBhIGR5bmFtaWNhbGx5IGFkanVzdGluZyBkZWZlciBxdWV1ZS4gVGhlIGN1cnJlbnQgYWxn b3JpdGhtIGtlZXBzIHRoZSBjb3N0IG9mIHJlY2xhbWF0aW9uIHNwcmVhZCBhY3Jvc3MgbXVsdGlw bGUgY2FsbHMgYW5kIHB1dHMgYW4gdXBwZXIgYm91bmQgb24gY3ljbGVzIGZvciBkZWxldGUgQVBJ IGJ5IHJlY2xhaW1pbmcgYSBmaXhlZCBudW1iZXIgb2YgZW50cmllcy4NCg0KVGhpcyBhbGdvcml0 aG0gaXMgcHJvdmVuIHRvIHdvcmsgaW4gdGhlIExQTSBpbnRlZ3JhdGlvbiBwZXJmb3JtYW5jZSB0 ZXN0cyBhdCBhIHZlcnkgbG93IHBlcmZvcm1hbmNlIG92ZXIgaGVhZCAofjElKS4gU28sIEkgZG8g bm90IGtub3cgd2h5IGEgdXNlciB3b3VsZCBub3Qgd2FudCB0byB1c2UgdGhpcy4gVGhlIDIgYWRk aXRpb25hbCBwYXJhbWV0ZXJzIHNob3VsZCBnaXZlIHRoZSB1c2VyIG1vcmUgZmxleGliaWxpdHku DQoNCkhvd2V2ZXIsIGlmIHRoZSB1c2VyIHdhbnRzIGhpcyBvd24gYWxnb3JpdGhtLCBoZSBjYW4g Y3JlYXRlIG9uZSB3aXRoIHRoZSBiYXNlIEFQSXMgcHJvdmlkZWQuDQoNCj4gDQo+ID4gSSB0aGlu ayBhZGRpbmcgdGhlc2UgdG8gcGFyYW1ldGVycyBzZWVtcyBsaWtlIGEgYmV0dGVyIG9wdGlvbi4N Cj4gPg0KPiA+ID4NCj4gPiA+ID4gKwkJcnRlX2xvZyhSVEVfTE9HX0lORk8sIHJ0ZV9yY3VfbG9n X3R5cGUsDQo+ID4gPiA+ICsJCQkiJXMoKTogVHJpZ2dlcmluZyByZWNsYW1hdGlvblxuIiwgX19m dW5jX18pOw0KPiA+ID4gPiArCQlydGVfcmN1X3FzYnJfZHFfcmVjbGFpbShkcSk7DQo+ID4gPiA+ ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogQ2hlY2sgaWYgdGhlcmUgaXMgc3BhY2UgZm9y IGF0bGVhc3QgZm9yIDEgcmVzb3VyY2UgKi8NCj4gPiA+ID4gKwlmcmVlX3NpemUgPSBydGVfcmlu Z19mcmVlX2NvdW50KGRxLT5yKSAvIChkcS0+ZXNpemUvOCArIDEpOw0KPiA+ID4gPiArCWlmICgh ZnJlZV9zaXplKSB7DQo+ID4gPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19FUlIsIHJ0ZV9yY3VfbG9n X3R5cGUsDQo+ID4gPiA+ICsJCQkiJXMoKTogRGVmZXIgcXVldWUgaXMgZnVsbFxuIiwgX19mdW5j X18pOw0KPiA+ID4gPiArCQlydGVfZXJybm8gPSBFTk9TUEM7DQo+ID4gPiA+ICsJCXJldHVybiAx Ow0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIEVucXVldWUgdGhlIHJlc291 cmNlICovDQo+ID4gPiA+ICsJcnRlX3Jpbmdfc3BfZW5xdWV1ZShkcS0+ciwgKHZvaWQgKikodWlu dHB0cl90KXRva2VuKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIFRoZSByZXNvdXJjZSB0byBl bnF1ZXVlIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNjRiDQo+ID4gPiA+ICsJICogZHVlIHRv IHRoZSBsaW1pdGF0aW9uIG9mIHRoZSBydGVfcmluZyBpbXBsZW1lbnRhdGlvbi4NCj4gPiA+ID4g KwkgKi8NCj4gPiA+ID4gKwlmb3IgKGkgPSAwLCB0bXAgPSAodWludDY0X3QgKillOyBpIDwgZHEt PmVzaXplLzg7IGkrKywgdG1wKyspDQo+ID4gPiA+ICsJCXJ0ZV9yaW5nX3NwX2VucXVldWUoZHEt PnIsICh2b2lkICopKHVpbnRwdHJfdCkqdG1wKTsNCj4gPiA+DQo+ID4gPg0KPiA+ID4gVGhhdCB3 aG9sZSBjb25zdHJ1Y3Rpb24gYWJvdmUgbG9va3MgYSBiaXQgY2x1bXN5IGFuZCBlcnJvciBwcm9u ZS4uLg0KPiA+ID4gSSBzdXBwb3NlIGp1c3Q6DQo+ID4gPg0KPiA+ID4gY29uc3QgdWludDMyX3Qg bmJfZWx0ID0gIGRxLT5lbHRfc2l6ZS84ICsgMTsgdWludDMyX3QgZnJlZSwgbjsgLi4uDQo+ID4g PiBuID0gcnRlX3JpbmdfZW5xdWV1ZV9idWxrKGRxLT5yLCBlLCBuYl9lbHQsICZmcmVlKTsgaWYg KG4gPT0gMCkNCj4gPiBZZXMsIGJ1bGsgZW5xdWV1ZSBjYW4gYmUgdXNlZC4gQnV0IG5vdGUgdGhh dCBvbmNlIHRoZSBmbGV4aWJsZSBlbGVtZW50IHNpemUNCj4gcmluZyBwYXRjaCBpcyBkb25lLCB0 aGlzIGNvZGUgd2lsbCB1c2UgdGhhdC4NCj4gDQo+IFdlbGwsIHdoZW4gaXQgd2lsbCBiZSBpbiB0 aGUgbWFpbmxpbmUsIGFuZCBpdCB3b3VsZCBwcm92aWRlIGEgYmV0dGVyIHdheSwgZm9yIHN1cmUN Cj4gdGhpcyBjb2RlIGNhbiBiZSB1cGRhdGVkIHRvIHVzZSBuZXcgQVBJIChpZiBpdCBpcyBwcm92 aWRlIHNvbWUgaW1wcm92ZW1lbnRzKS4NCj4gQnV0IGFzIEkgdWRlbnJzdGFuZCwgcmlnaHQgbm93 IGl0IGlzIG5vdCB0aGVyZSwgd2hpbGUgYnVsayBlbnF1ZXVlL2RlcXVldWUgYXJlLg0KQXBvbG9n aWVzLCBJIHdhcyBub3QgY2xlYXIuIEkgYWdyZWUgd2UgY2FuIGdvIHdpdGggYnVsayBBUElzIGZv ciBub3cuDQoNCj4gDQo+ID4NCj4gPiA+ICAgcmV0dXJuIC1FTk9TUEM7DQo+ID4gPiByZXR1cm4g ZnJlZTsNCj4gPiA+DQo+ID4gPiBUaGF0IHdheSBJIHRoaW5rIHlvdSBjYW4gaGF2ZSBNVC1zYWZl IHZlcnNpb24gb2YgdGhhdCBmdW5jdGlvbi4NCj4gPiBQbGVhc2Ugc2VlIHRoZSBkZXNjcmlwdGlv biBvZiBNVCBzYWZlIGlzc3VlIGFib3ZlLg0KPiA+DQo+ID4gPg0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJcmV0dXJuIDA7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIFJlY2xhaW0g cmVzb3VyY2VzIGZyb20gdGhlIGRlZmVyIHF1ZXVlLiAqLyBpbnQNCj4gPiA+ID4gK3J0ZV9yY3Vf cXNicl9kcV9yZWNsYWltKHN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRxKSB7DQo+ID4gPiA+ICsJ dWludDMyX3QgbWF4X2NudDsNCj4gPiA+ID4gKwl1aW50MzJfdCBjbnQ7DQo+ID4gPiA+ICsJdm9p ZCAqdG9rZW47DQo+ID4gPiA+ICsJdWludDY0X3QgKnRtcDsNCj4gPiA+ID4gKwl1aW50MzJfdCBp Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJaWYgKGRxID09IE5VTEwpIHsNCj4gPiA+ID4gKwkJcnRl X2xvZyhSVEVfTE9HX0VSUiwgcnRlX3JjdV9sb2dfdHlwZSwNCj4gPiA+ID4gKwkJCSIlcygpOiBJ bnZhbGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ID4gPiArCQlydGVfZXJy bm8gPSBFSU5WQUw7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJcmV0dXJuIDE7DQo+ID4gPg0KPiA+ ID4gU2FtZSBzdG9yeSBhcyBhYm92ZSAtIEkgdGhpbmsgcnRlX2Vycm5vIGlzIGV4Y2Vzc2l2ZSBp biB0aGlzIGZ1bmN0aW9uLg0KPiA+ID4gSnVzdCByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIGVub3Vn aC4NCj4gPiA+DQo+ID4gPg0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIEFu eXRoaW5nIHRvIHJlY2xhaW0/ICovDQo+ID4gPiA+ICsJaWYgKHJ0ZV9yaW5nX2NvdW50KGRxLT5y KSA9PSAwKQ0KPiA+ID4gPiArCQlyZXR1cm4gMDsNCj4gPiA+DQo+ID4gPiBOb3Qgc3VyZSB5b3Ug bmVlZCB0aGF0LCBzZWUgYmVsb3cuDQo+ID4gPg0KPiA+ID4gPiArDQo+ID4gPiA+ICsJLyogUmVj bGFpbSBhdCB0aGUgbWF4IDEvMTZ0aCB0aGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMuICovDQo+ ID4gPiA+ICsJbWF4X2NudCA9IGRxLT5zaXplID4+IFJURV9SQ1VfUVNCUl9NQVhfUkVDTEFJTV9M SU1JVDsNCj4gPiA+ID4gKwltYXhfY250ID0gKG1heF9jbnQgPT0gMCkgPyBkcS0+c2l6ZSA6IG1h eF9jbnQ7DQo+ID4gPg0KPiA+ID4gQWdhaW4gd2h5IG5vdCB0byBtYWtlIG1heF9jbnQgYSBjb25m aWd1cmFibGUgYXQgY3JlYXRlKCkgcGFyYW1ldGVyPw0KPiA+IEkgdGhpbmsgbWFraW5nIHRoaXMg YXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIGZvciBjcmVhdGluZyBkZWZlciBxdWV1ZSBpcyBhDQo+ IGJldHRlciBvcHRpb24uDQo+ID4NCj4gPiA+IE9yIGV2ZW4gYSBwYXJhbWV0ZXIgZm9yIHRoYXQg ZnVuY3Rpb24/DQo+ID4gPg0KPiA+ID4gPiArCWNudCA9IDA7DQo+ID4gPiA+ICsNCj4gPiA+ID4g KwkvKiBDaGVjayByZWFkZXIgdGhyZWFkcyBxdWllc2NlbnQgc3RhdGUgYW5kIHJlY2xhaW0gcmVz b3VyY2VzICovDQo+ID4gPiA+ICsJd2hpbGUgKChjbnQgPCBtYXhfY250KSAmJiAocnRlX3Jpbmdf cGVlayhkcS0+ciwgJnRva2VuKSA9PSAwKSAmJg0KPiA+ID4gPiArCQkocnRlX3JjdV9xc2JyX2No ZWNrKGRxLT52LCAodWludDY0X3QpKCh1aW50cHRyX3QpdG9rZW4pLCBmYWxzZSkNCj4gPiA+ID4g KwkJCT09IDEpKSB7DQo+ID4gPg0KPiA+ID4NCj4gPiA+ID4gKwkJKHZvaWQpcnRlX3Jpbmdfc2Nf ZGVxdWV1ZShkcS0+ciwgJnRva2VuKTsNCj4gPiA+ID4gKwkJLyogVGhlIHJlc291cmNlIHRvIGRl cXVldWUgbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA2NGINCj4gPiA+ID4gKwkJICogZHVlIHRv IHRoZSBsaW1pdGF0aW9uIG9mIHRoZSBydGVfcmluZyBpbXBsZW1lbnRhdGlvbi4NCj4gPiA+ID4g KwkJICovDQo+ID4gPiA+ICsJCWZvciAoaSA9IDAsIHRtcCA9ICh1aW50NjRfdCAqKWRxLT5lOyBp IDwgZHEtPmVzaXplLzg7DQo+ID4gPiA+ICsJCQlpKyssIHRtcCsrKQ0KPiA+ID4gPiArCQkJKHZv aWQpcnRlX3Jpbmdfc2NfZGVxdWV1ZShkcS0+ciwNCj4gPiA+ID4gKwkJCQkJKHZvaWQgKikodWlu dHB0cl90KXRtcCk7DQo+ID4gPg0KPiA+ID4gQWdhaW4sIG5vIG5lZWQgZm9yIHN1Y2ggY29uc3Ry dWN0cyB3aXRoIG11bHRpcGxlIGRlcXVldWVyIEkgYmVsaWV2ZS4NCj4gPiA+IEp1c3Q6DQo+ID4g Pg0KPiA+ID4gY29uc3QgdWludDMyX3QgbmJfZWx0ID0gIGRxLT5lbHRfc2l6ZS84ICsgMTsgdWlu dDMyX3QgbjsgdWludHB0cl90DQo+ID4gPiBlbHRbbmJfZWx0XTsgLi4uDQo+ID4gPiBuID0gcnRl X3JpbmdfZGVxdWV1ZV9idWxrKGRxLT5yLCBlbHQsIG5iX2VsdCwgTlVMTCk7IGlmIChuICE9IDAp DQo+ID4gPiB7ZHEtPmYoZHEtPnAsIGVsdCk7fQ0KPiA+IEFncmVlIG9uIGJ1bGsgQVBJIHVzZS4N Cj4gPg0KPiA+ID4NCj4gPiA+IFNlZW1zIGVub3VnaC4NCj4gPiA+IEFnYWluIGluIHRoYXQgY2Fz ZSB5b3UgY2FuIGhhdmUgZW5xdWV1ZS9yZWNsYWltIHJ1bm5pbmcgaW4gZGlmZmVyZW50DQo+ID4g PiB0aHJlYWRzIHNpbXVsdGFuZW91c2x5LCBwbHVzIHlvdSBkb24ndCBuZWVkIGRxLT5lIGF0IGFs bC4NCj4gPiBXaWxsIGNoZWNrIG9uIGRxLT5lDQo+ID4NCj4gPiA+DQo+ID4gPiA+ICsJCWRxLT5m KGRxLT5wLCBkcS0+ZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkJY250Kys7DQo+ID4gPiA+ICsJ fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcnRlX2xvZyhSVEVfTE9HX0lORk8sIHJ0ZV9yY3VfbG9n X3R5cGUsDQo+ID4gPiA+ICsJCSIlcygpOiBSZWNsYWltZWQgJXUgcmVzb3VyY2VzXG4iLCBfX2Z1 bmNfXywgY250KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWlmIChjbnQgPT0gMCkgew0KPiA+ID4g PiArCQkvKiBObyByZXNvdXJjZXMgd2VyZSByZWNsYWltZWQgKi8NCj4gPiA+ID4gKwkJcnRlX2Vy cm5vID0gRUFHQUlOOw0KPiA+ID4gPiArCQlyZXR1cm4gMTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+DQo+ID4gPiBJJ2Qgc3VnZ2VzdCB0byByZXR1 cm4gY250IG9uIHN1Y2Nlc3MuDQo+ID4gSSBhbSB0cnlpbmcgdG8ga2VlcCB0aGUgQVBJcyBzaW1w bGUuIEkgZG8gbm90IHNlZSBtdWNoIHVzZSBmb3IgJ2NudCcNCj4gPiBhcyByZXR1cm4gdmFsdWUg dG8gdGhlIHVzZXIuIEl0IGV4cG9zZXMgbW9yZSBkZXRhaWxzIHdoaWNoIEkgdGhpbmsgYXJlIGlu dGVybmFsDQo+IHRvIHRoZSBsaWJyYXJ5Lg0KPiANCj4gTm90IHN1cmUgd2hhdCBpcyB0aGUgaGFz c2xlIHRvIHJldHVybiBudW1iZXIgb2YgY29tcGxldGVkIHJlY2xhbWFpdGlvbnM/DQo+IElmIHVz ZXIgZG9lc24ndCBuZWVkIHRoYXQgaW5mb3JtYXRpb24sIGhlIHNpbXBseSB3b3VsZG4ndCB1c2Ug aXQuDQo+IEJ1dCBtaWdodCBiZSBpdCB3b3VsZCBiZSB1c2VmdWxsIC0gaGUgY2FuIGRlY2lkZSBz aG91bGQgaGUgdHJ5IGFub3RoZXIgYXR0ZW1wdA0KPiBvZiByZWNsYWltKCkgaW1tZWRpYXRlbHkg b3IgaXMgaXQgb2sgdG8gZG8gc29tZXRoaW5nIGVsc2UuDQpUaGVyZSBpcyBubyBoYXNzbGUgdG8g cmV0dXJuIHRoYXQgaW5mb3JtYXRpb24uDQoNCkFzIHBlciB0aGUgY3VycmVudCBkZXNpZ24sIHVz ZXIgY2FsbHMgJ3JlY2xhaW0nIHdoZW4gaXQgaXMgb3V0IG9mIHJlc291cmNlcyB3aGlsZSBhZGRp bmcgYW4gZW50cnkgdG8gdGhlIGRhdGEgc3RydWN0dXJlLiBBdCB0aGF0IHBvaW50IHRoZSB1c2Vy IHdhbnRzIHRvIGtub3cgaWYgYXQgbGVhc3QgMSByZXNvdXJjZSB3YXMgcmVjbGFpbWVkIGJlY2F1 c2UgdGhlIHVzZXIgaGFzIHRvIGFsbG9jYXRlIDEgcmVzb3VyY2UuIEhlIGRvZXMgbm90IGhhdmUg YSB1c2UgZm9yIHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHJlY2xhaW1lZC4NCg0KSWYgdGhpcyBB UEkgcmV0dXJucyAwLCB0aGVuIHRoZSB1c2VyIGNhbiBkZWNpZGUgdG8gcmVwZWF0IHRoZSBjYWxs IG9yIHJldHVybiBmYWlsdXJlLiBCdXQgdGhhdCBkZWNpc2lvbiBkZXBlbmRzIG9uIHRoZSBsZW5n dGggb2YgdGhlIGdyYWNlIHBlcmlvZCB3aGljaCBpcyB1bmRlciB1c2VyJ3MgY29udHJvbC4NCg0K PiANCj4gPg0KPiA+ID4NCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogRGVsZXRl IGEgZGVmZXIgcXVldWUuICovDQo+ID4gPiA+ICtpbnQNCj4gPiA+ID4gK3J0ZV9yY3VfcXNicl9k cV9kZWxldGUoc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSAqZHEpIHsNCj4gPiA+ID4gKwlpZiAoZHEg PT0gTlVMTCkgew0KPiA+ID4gPiArCQlydGVfbG9nKFJURV9MT0dfRVJSLCBydGVfcmN1X2xvZ190 eXBlLA0KPiA+ID4gPiArCQkJIiVzKCk6IEludmFsaWQgaW5wdXQgcGFyYW1ldGVyXG4iLCBfX2Z1 bmNfXyk7DQo+ID4gPiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gPiA+ID4gKw0KPiA+ID4g PiArCQlyZXR1cm4gMTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBSZWNs YWltIGFsbCB0aGUgcmVzb3VyY2VzICovDQo+ID4gPiA+ICsJaWYgKHJ0ZV9yY3VfcXNicl9kcV9y ZWNsYWltKGRxKSAhPSAwKQ0KPiA+ID4gPiArCQkvKiBFcnJvciBudW1iZXIgaXMgYWxyZWFkeSBz ZXQgYnkgdGhlIHJlY2xhaW0gQVBJICovDQo+ID4gPiA+ICsJCXJldHVybiAxOw0KPiA+ID4NCj4g PiA+IEhvdyBkbyB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHJlY2xhaW1lZCBldmVyeXRoaW5nPw0K PiA+IEdvb2QgcG9pbnQsIHdpbGwgY29tZSBiYWNrIHdpdGggYSBkaWZmZXJlbnQgc29sdXRpb24u DQo+ID4NCj4gPiA+DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlydGVfcmluZ19mcmVlKGRxLT5yKTsN Cj4gPiA+ID4gKwlydGVfZnJlZShkcSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXR1cm4gMDsN Cj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiAgaW50IHJ0ZV9yY3VfbG9nX3R5cGU7DQo+ ID4gPiA+DQo+ID4gPiA+ICBSVEVfSU5JVChydGVfcmN1X3JlZ2lzdGVyKQ0KPiA+ID4gPiBkaWZm IC0tZ2l0IGEvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmgNCj4gPiA+ID4gYi9saWIvbGli cnRlX3JjdS9ydGVfcmN1X3FzYnIuaCBpbmRleCBjODBmMTVjMDAuLjE4NWQ0YjUwYSAxMDA2NDQN Cj4gPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmgNCj4gPiA+ID4gKysr IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmgNCj4gPiA+ID4gQEAgLTM0LDYgKzM0LDcg QEAgZXh0ZXJuICJDIiB7DQo+ID4gPiA+ICAjaW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+ID4gPiA+ ICAjaW5jbHVkZSA8cnRlX2RlYnVnLmg+DQo+ID4gPiA+ICAjaW5jbHVkZSA8cnRlX2F0b21pYy5o Pg0KPiA+ID4gPiArI2luY2x1ZGUgPHJ0ZV9yaW5nLmg+DQo+ID4gPiA+DQo+ID4gPiA+ICBleHRl cm4gaW50IHJ0ZV9yY3VfbG9nX3R5cGU7DQo+ID4gPiA+DQo+ID4gPiA+IEBAIC0xMDksNiArMTEw LDY3IEBAIHN0cnVjdCBydGVfcmN1X3FzYnIgew0KPiA+ID4gPiAgCSAqLw0KPiA+ID4gPiAgfSBf X3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4gPg0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiBD YWxsIGJhY2sgZnVuY3Rpb24gY2FsbGVkIHRvIGZyZWUgdGhlIHJlc291cmNlcy4NCj4gPiA+ID4g KyAqDQo+ID4gPiA+ICsgKiBAcGFyYW0gcA0KPiA+ID4gPiArICogICBQb2ludGVyIHByb3ZpZGVk IHdoaWxlIGNyZWF0aW5nIHRoZSBkZWZlciBxdWV1ZQ0KPiA+ID4gPiArICogQHBhcmFtIGUNCj4g PiA+ID4gKyAqICAgUG9pbnRlciB0byB0aGUgcmVzb3VyY2UgZGF0YSBzdG9yZWQgb24gdGhlIGRl ZmVyIHF1ZXVlDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiArICog ICBOb25lDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3R5cGVkZWYgdm9pZCAoKnJ0ZV9yY3VfcXNi cl9mcmVlX3Jlc291cmNlKSh2b2lkICpwLCB2b2lkICplKTsNCj4gPiA+DQo+ID4gPiBTdHlsaXNo IHRoaW5nIC0gdXN1YWxseSBpbiBEUERLIHdlIGhhdmUgdHlwZWRmIG5ld3R5cGVfdCAuLi4NCj4g PiA+IFRob3VnaCBJIGFtIG5vdCBzdXJlIHlvdSBuZWVkIGEgbmV3IHR5cGVkZWYgYXQgYWxsIC0g anVzdCBhIGZ1bmN0aW9uDQo+ID4gPiBwb2ludGVyIGluc2lkZSB0aGUgc3RydWN0IHNlZW1zIGVu b3VnaC4NCj4gPiBPdGhlciBsaWJyYXJpZXMgKGZvciBleDogcnRlX2hhc2gpIHVzZSB0aGlzIGFw cHJvYWNoLiBJIHRoaW5rIGl0IGlzIGJldHRlciB0byBrZWVwDQo+IGl0IG91dCBvZiB0aGUgc3Ry dWN0dXJlIHRvIGFsbG93IGZvciBiZXR0ZXIgY29tbWVudGluZy4NCj4gDQo+IEkgYW0gc2F5aW5n IG1ham9yaXR5IG9mIERQREsgY29kZSB1c2UgX3Qgc3VmZml4IGZvciB0eXBlZGVmOg0KPiB0eXBl ZGVmIHZvaWQgKCpydGVfcmN1X3FzYnJfZnJlZV9yZXNvdXJjZV90KSh2b2lkICpwLCB2b2lkICpl KTsNCkFwb2xvZ2llcywgZ290IGl0LCB3aWxsIGNoYW5nZS4NCg0KPiANCj4gPg0KPiA+ID4NCj4g PiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBSVEVfUkNVX1FTQlJfRFFfTkFNRVNJWkUgUlRFX1JJ TkdfTkFNRVNJWkUNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiAgVHJpZ2dl ciBhdXRvbWF0aWMgcmVjbGFtYXRpb24gYWZ0ZXIgMS84dGggdGhlIGRlZmVyIHF1ZXVlIGlzIGZ1 bGwuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gKyNkZWZpbmUgUlRFX1JDVV9RU0JSX0FVVE9fUkVD TEFJTV9MSU1JVCAzDQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogIFJlY2xh aW0gYXQgdGhlIG1heCAxLzE2dGggdGhlIHRvdGFsIG51bWJlciBvZiByZXNvdXJjZXMuDQo+ID4g PiA+ICsgKi8NCj4gPiA+ID4gKyNkZWZpbmUgUlRFX1JDVV9RU0JSX01BWF9SRUNMQUlNX0xJTUlU IDQNCj4gPiA+DQo+ID4gPg0KPiA+ID4gQXMgSSBzYWlkIGFib3ZlLCBJIGRvbid0IHRoaW5rIHRo ZXNlIHRocmVzaG9sZHMgbmVlZCB0byBiZSBoYXJkY29kZWQuDQo+ID4gPiBJbiBhbnkgY2FzZSwg dGhlcmUgc2VlbXMgbm90IG11Y2ggcG9pbnQgdG8gcHV0IHRoZW0gaW4gdGhlIHB1YmxpYyBoZWFk ZXINCj4gZmlsZS4NCj4gPiA+DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICog UGFyYW1ldGVycyB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIGRlZmVyIHF1ZXVlLg0KPiA+ID4gPiAr ICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxX3BhcmFtZXRlcnMgew0KPiA+ID4g PiArCWNvbnN0IGNoYXIgKm5hbWU7DQo+ID4gPiA+ICsJLyoqPCBOYW1lIG9mIHRoZSBxdWV1ZS4g Ki8NCj4gPiA+ID4gKwl1aW50MzJfdCBzaXplOw0KPiA+ID4gPiArCS8qKjwgTnVtYmVyIG9mIGVu dHJpZXMgaW4gcXVldWUuIFR5cGljYWxseSwgdGhpcyB3aWxsIGJlDQo+ID4gPiA+ICsJICogICB0 aGUgc2FtZSBhcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBzdXBwb3J0ZWQgaW4gdGhl DQo+ID4gPiA+ICsJICogICBsb2NrIGZyZWUgZGF0YSBzdHJ1Y3R1cmUuDQo+ID4gPiA+ICsJICog ICBEYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmJvdW5kZWQgbnVtYmVyIG9mIGVudHJpZXMgaXMgbm90 DQo+ID4gPiA+ICsJICogICBzdXBwb3J0ZWQgY3VycmVudGx5Lg0KPiA+ID4gPiArCSAqLw0KPiA+ ID4gPiArCXVpbnQzMl90IGVzaXplOw0KPiA+ID4gPiArCS8qKjwgU2l6ZSAoaW4gYnl0ZXMpIG9m IGVhY2ggZWxlbWVudCBpbiB0aGUgZGVmZXIgcXVldWUuDQo+ID4gPiA+ICsJICogICBUaGlzIGhh cyB0byBiZSBtdWx0aXBsZSBvZiA4QiBhcyB0aGUgcnRlX3JpbmcgQVBJcw0KPiA+ID4gPiArCSAq ICAgc3VwcG9ydCA4QiBlbGVtZW50IHNpemVzIG9ubHkuDQo+ID4gPiA+ICsJICovDQo+ID4gPiA+ ICsJcnRlX3JjdV9xc2JyX2ZyZWVfcmVzb3VyY2UgZjsNCj4gPiA+ID4gKwkvKio8IEZ1bmN0aW9u IHRvIGNhbGwgdG8gZnJlZSB0aGUgcmVzb3VyY2UuICovDQo+ID4gPiA+ICsJdm9pZCAqcDsNCj4g PiA+DQo+ID4gPiBTdHlsZSBuaXQgYWdhaW4gLSBJIGxpa2Ugc2hvcnQgbmFtZXMgbXlzZWxmLCBi dXQgdGhhdCBzZWVtcyBhIGJpdA0KPiA+ID4gZXh0cmVtZS4uLiA6KSBNaWdodCBiZSBhdCBsZWFz dDoNCj4gPiA+IHZvaWQgKCpyZWNsYWltKSh2b2lkICosIHZvaWQgKik7DQo+ID4gTWF5IGJlICdm cmVlX2ZuJz8NCj4gPg0KPiA+ID4gdm9pZCAqIHJlY2xhaW1fZGF0YTsNCj4gPiA+ID8NCj4gPiBU aGlzIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIHN0cnVjdHVyZSB0byBmcmVlIHRoZSByZXNv dXJjZSBpbnRvLiBGb3IgZXg6IEluDQo+IExQTSBkYXRhIHN0cnVjdHVyZSwgaXQgd2lsbCBiZSBw b2ludGVyIHRvIExQTS4gJ3JlY2xhaW1fZGF0YScNCj4gPiBkb2VzIG5vdCBjb252ZXkgdGhlIG1l YW5pbmcgY29ycmVjdGx5Lg0KPiANCj4gT2ssIHBsZWFzZSBmcmVlIHRvIGNvbWV1cCB3aXRoIHlv dXIgb3duIG5hbWVzLg0KPiBJIGp1c3Qgd2FudGVkIHRvIHNheSB0aGF0ICdmJyBhbmQgJ3AnIGFy ZSBhIGJpdCBhbiBleHRyZW1lIGZvciBwdWJsaWMgQVBJLg0Kb2ssIHRoaXMgaXMgdGhlIGhhcmRl c3QgdGhpbmcgdG8gZG8g8J+Yig0KDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4gPiArCS8qKjwgUG9p bnRlciBwYXNzZWQgdG8gdGhlIGZyZWUgZnVuY3Rpb24uIFR5cGljYWxseSwgdGhpcyBpcyB0aGUN Cj4gPiA+ID4gKwkgKiAgIHBvaW50ZXIgdG8gdGhlIGRhdGEgc3RydWN0dXJlIHRvIHdoaWNoIHRo ZSByZXNvdXJjZSB0byBmcmVlDQo+ID4gPiA+ICsJICogICBiZWxvbmdzLiBUaGlzIGNhbiBiZSBO VUxMLg0KPiA+ID4gPiArCSAqLw0KPiA+ID4gPiArCXN0cnVjdCBydGVfcmN1X3FzYnIgKnY7DQo+ ID4gPg0KPiA+ID4gRG9lcyBpdCBuZWVkIHRvIGJlIGluc2lkZSB0aGF0IHN0cnVjdD8NCj4gPiA+ IE1pZ2h0IGJlIGJldHRlcjoNCj4gPiA+IHJ0ZV9yY3VfcXNicl9kcV9jcmVhdGUoc3RydWN0IHJ0 ZV9yY3VfcXNiciAqdiwgY29uc3Qgc3RydWN0DQo+ID4gPiBydGVfcmN1X3FzYnJfZHFfcGFyYW1l dGVycyAqcGFyYW1zKTsNCj4gPiBUaGUgQVBJIHRha2VzIGEgcGFyYW1ldGVyIHN0cnVjdHVyZSBh cyBpbnB1dCBhbnl3YXksIHdoeSB0byBhZGQNCj4gPiBhbm90aGVyIGFyZ3VtZW50IHRvIHRoZSBm dW5jdGlvbj8gUVNCUiB2YXJpYWJsZSBpcyBhbHNvIGFub3RoZXIgcGFyYW1ldGVyLg0KPiA+DQo+ ID4gPg0KPiA+ID4gQW5vdGhlciBhbHRlcm5hdGl2ZTogbWFrZSBib3RoIHJlY2xhaW0oKSBhbmQg ZW5xdWV1ZSgpIHRvIHRha2UgdiBhcw0KPiA+ID4gYSBwYXJhbWV0ZXIuDQo+ID4gQnV0IGJvdGgg b2YgdGhlbSBuZWVkIGFjY2VzcyB0byBzb21lIG9mIHRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGlu DQo+ID4gcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZSBBUEkuIFdlIHdvdWxkIGVuZCB1cCBwYXNzaW5n IDIgYXJndW1lbnRzIHRvIHRoZQ0KPiBmdW5jdGlvbnMuDQo+IA0KPiBQdXJlIHN0eWxpc2ggdGhp bmcuDQo+IEZyb20gbXkgcGVyc3BlY3RpdmUgaXQganVzdCBwcm92aWRlcyBiZXR0ZXIgdmlzaWJp bGl0eSB3aGF0IGlzIGdvaW5nIGluIHRoZSBjb2RlOg0KPiBGb3IgUVNCUiB2YXIgJ3YnIGNyZWF0 ZSBhIG5ldyBkZWZlcnJlZCBxdWV1ZS4NCj4gQnV0IG5vIHN0cm9uZyBvcGluaW9uIGhlcmUuDQo+ IA0KPiA+DQo+ID4gPg0KPiA+ID4gPiArCS8qKjwgUkNVIFFTQlIgdmFyaWFibGUgdG8gdXNlIGZv ciB0aGlzIGRlZmVyIHF1ZXVlICovIH07DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIFJURSBkZWZl ciBxdWV1ZSBzdHJ1Y3R1cmUuDQo+ID4gPiA+ICsgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUg ZGVmZXIgcXVldWUuIFRoZSBkZWZlciBxdWV1ZSBpcyB1c2VkDQo+ID4gPiA+ICt0bw0KPiA+ID4g PiArICogaG9sZCB0aGUgZGVsZXRlZCBlbnRyaWVzIGZyb20gdGhlIGRhdGEgc3RydWN0dXJlIHRo YXQgYXJlIG5vdA0KPiA+ID4gPiArICogeWV0IGZyZWVkLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxOw0KPiA+ID4gPiArDQo+ID4gPiA+ICAvKioNCj4gPiA+ ID4gICAqIEB3YXJuaW5nDQo+ID4gPiA+ICAgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1h eSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UgQEANCj4gPiA+ID4gLTY0OCw2ICs3MTAsMTEz IEBAIF9fcnRlX2V4cGVyaW1lbnRhbCAgaW50ICBydGVfcmN1X3FzYnJfZHVtcChGSUxFDQo+ID4g PiA+ICpmLCBzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2KTsNCj4gPiA+ID4NCj4gPiA+ID4gKy8qKg0K PiA+ID4gPiArICogQHdhcm5pbmcNCj4gPiA+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBB UEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ID4gPiArICoNCj4gPiA+ID4g KyAqIENyZWF0ZSBhIHF1ZXVlIHVzZWQgdG8gc3RvcmUgdGhlIGRhdGEgc3RydWN0dXJlIGVsZW1l bnRzIHRoYXQNCj4gPiA+ID4gK2Nhbg0KPiA+ID4gPiArICogYmUgZnJlZWQgbGF0ZXIuIFRoaXMg cXVldWUgaXMgcmVmZXJyZWQgdG8gYXMgJ2RlZmVyIHF1ZXVlJy4NCj4gPiA+ID4gKyAqDQo+ID4g PiA+ICsgKiBAcGFyYW0gcGFyYW1zDQo+ID4gPiA+ICsgKiAgIFBhcmFtZXRlcnMgdG8gY3JlYXRl IGEgZGVmZXIgcXVldWUuDQo+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ICsgKiAgIE9uIHN1 Y2Nlc3MgLSBWYWxpZCBwb2ludGVyIHRvIGRlZmVyIHF1ZXVlDQo+ID4gPiA+ICsgKiAgIE9uIGVy cm9yIC0gTlVMTA0KPiA+ID4gPiArICogICBQb3NzaWJsZSBydGVfZXJybm8gY29kZXMgYXJlOg0K PiA+ID4gPiArICogICAtIEVJTlZBTCAtIE5VTEwgcGFyYW1ldGVycyBhcmUgcGFzc2VkDQo+ID4g PiA+ICsgKiAgIC0gRU5PTUVNIC0gTm90IGVub3VnaCBtZW1vcnkNCj4gPiA+ID4gKyAqLw0KPiA+ ID4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2Rx ICoNCj4gPiA+ID4gK3J0ZV9yY3VfcXNicl9kcV9jcmVhdGUoY29uc3Qgc3RydWN0IHJ0ZV9yY3Vf cXNicl9kcV9wYXJhbWV0ZXJzDQo+ID4gPiA+ICsqcGFyYW1zKTsNCj4gPiA+ID4gKw0KPiA+ID4g PiArLyoqDQo+ID4gPiA+ICsgKiBAd2FybmluZw0KPiA+ID4gPiArICogQGIgRVhQRVJJTUVOVEFM OiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gPiA+ICsgKg0K PiA+ID4gPiArICogRW5xdWV1ZSBvbmUgcmVzb3VyY2UgdG8gdGhlIGRlZmVyIHF1ZXVlIGFuZCBz dGFydCB0aGUgZ3JhY2UgcGVyaW9kLg0KPiA+ID4gPiArICogVGhlIHJlc291cmNlIHdpbGwgYmUg ZnJlZWQgbGF0ZXIgYWZ0ZXIgYXQgbGVhc3Qgb25lIGdyYWNlDQo+ID4gPiA+ICtwZXJpb2QNCj4g PiA+ID4gKyAqIGlzIG92ZXIuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogSWYgdGhlIGRlZmVy IHF1ZXVlIGlzIGZ1bGwsIGl0IHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIHJlc291cmNlcy4NCj4g PiA+ID4gKyAqIEl0IHdpbGwgYWxzbyByZWNsYWltIHJlc291cmNlcyBhdCByZWd1bGFyIGludGVy dmFscyB0byBhdm9pZA0KPiA+ID4gPiArICogdGhlIGRlZmVyIHF1ZXVlIGZyb20gZ3Jvd2luZyB0 b28gYmlnLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFRoaXMgQVBJIGlzIG5vdCBtdWx0aS10 aHJlYWQgc2FmZS4gSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUNCj4gPiA+ID4gK2NhbGxlcg0KPiA+ ID4gPiArICogcHJvdmlkZXMgbXVsdGktdGhyZWFkIHNhZmV0eSBieSBsb2NraW5nIGEgbXV0ZXgg b3Igc29tZSBvdGhlciBtZWFucy4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBBIGxvY2sgZnJl ZSBtdWx0aS10aHJlYWQgd3JpdGVyIGFsZ29yaXRobSBjb3VsZCBhY2hpZXZlDQo+ID4gPiA+ICtt dWx0aS10aHJlYWQNCj4gPiA+ID4gKyAqIHNhZmV0eSBieSBjcmVhdGluZyBhbmQgdXNpbmcgb25l IGRlZmVyIHF1ZXVlIHBlciB0aHJlYWQuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFt IGRxDQo+ID4gPiA+ICsgKiAgIERlZmVyIHF1ZXVlIHRvIGFsbG9jYXRlIGFuIGVudHJ5IGZyb20u DQo+ID4gPiA+ICsgKiBAcGFyYW0gZQ0KPiA+ID4gPiArICogICBQb2ludGVyIHRvIHJlc291cmNl IGRhdGEgdG8gY29weSB0byB0aGUgZGVmZXIgcXVldWUuIFRoZSBzaXplIG9mDQo+ID4gPiA+ICsg KiAgIHRoZSBkYXRhIHRvIGNvcHkgaXMgZXF1YWwgdG8gdGhlIGVsZW1lbnQgc2l6ZSBwcm92aWRl ZCB3aGVuIHRoZQ0KPiA+ID4gPiArICogICBkZWZlciBxdWV1ZSB3YXMgY3JlYXRlZC4NCj4gPiA+ ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gKyAqICAgT24gc3VjY2VzcyAtIDANCj4gPiA+ID4gKyAq ICAgT24gZXJyb3IgLSAxIHdpdGggcnRlX2Vycm5vIHNldCB0bw0KPiA+ID4gPiArICogICAtIEVJ TlZBTCAtIE5VTEwgcGFyYW1ldGVycyBhcmUgcGFzc2VkDQo+ID4gPiA+ICsgKiAgIC0gRU5PU1BD IC0gRGVmZXIgcXVldWUgaXMgZnVsbC4gVGhpcyBjb25kaXRpb24gY2FuIG5vdCBoYXBwZW4NCj4g PiA+ID4gKyAqCQlpZiB0aGUgZGVmZXIgcXVldWUgc2l6ZSBpcyBlcXVhbCAob3IgbGFyZ2VyKSB0 aGFuIHRoZQ0KPiA+ID4gPiArICoJCW51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGF0YSBzdHJ1 Y3R1cmUuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ID4g PiAraW50DQo+ID4gPiA+ICtydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZShzdHJ1Y3QgcnRlX3JjdV9x c2JyX2RxICpkcSwgdm9pZCAqZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiAr ICogQHdhcm5pbmcNCj4gPiA+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNo YW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFJlY2xh aW0gcmVzb3VyY2VzIGZyb20gdGhlIGRlZmVyIHF1ZXVlLg0KPiA+ID4gPiArICoNCj4gPiA+ID4g KyAqIFRoaXMgQVBJIGlzIG5vdCBtdWx0aS10aHJlYWQgc2FmZS4gSXQgaXMgZXhwZWN0ZWQgdGhh dCB0aGUNCj4gPiA+ID4gK2NhbGxlcg0KPiA+ID4gPiArICogcHJvdmlkZXMgbXVsdGktdGhyZWFk IHNhZmV0eSBieSBsb2NraW5nIGEgbXV0ZXggb3Igc29tZSBvdGhlciBtZWFucy4NCj4gPiA+ID4g KyAqDQo+ID4gPiA+ICsgKiBBIGxvY2sgZnJlZSBtdWx0aS10aHJlYWQgd3JpdGVyIGFsZ29yaXRo bSBjb3VsZCBhY2hpZXZlDQo+ID4gPiA+ICttdWx0aS10aHJlYWQNCj4gPiA+ID4gKyAqIHNhZmV0 eSBieSBjcmVhdGluZyBhbmQgdXNpbmcgb25lIGRlZmVyIHF1ZXVlIHBlciB0aHJlYWQuDQo+ID4g PiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFtIGRxDQo+ID4gPiA+ICsgKiAgIERlZmVyIHF1ZXVl IHRvIHJlY2xhaW0gYW4gZW50cnkgZnJvbS4NCj4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4g KyAqICAgT24gc3VjY2Vzc2Z1bCByZWNsYW1hdGlvbiBvZiBhdCBsZWFzdCAxIHJlc291cmNlIC0g MA0KPiA+ID4gPiArICogICBPbiBlcnJvciAtIDEgd2l0aCBydGVfZXJybm8gc2V0IHRvDQo+ID4g PiA+ICsgKiAgIC0gRUlOVkFMIC0gTlVMTCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQNCj4gPiA+ID4g KyAqICAgLSBFQUdBSU4gLSBOb25lIG9mIHRoZSByZXNvdXJjZXMgaGF2ZSBjb21wbGV0ZWQgYXQg bGVhc3QgMSBncmFjZQ0KPiA+ID4gcGVyaW9kLA0KPiA+ID4gPiArICoJCXRyeSBhZ2Fpbi4NCj4g PiA+ID4gKyAqLw0KPiA+ID4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ICtpbnQNCj4g PiA+ID4gK3J0ZV9yY3VfcXNicl9kcV9yZWNsYWltKHN0cnVjdCBydGVfcmN1X3FzYnJfZHEgKmRx KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiBAd2FybmluZw0KPiA+ID4g PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Ig bm90aWNlDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogRGVsZXRlIGEgZGVmZXIgcXVldWUuDQo+ ID4gPiA+ICsgKg0KPiA+ID4gPiArICogSXQgdHJpZXMgdG8gcmVjbGFpbSBhbGwgdGhlIHJlc291 cmNlcyBvbiB0aGUgZGVmZXIgcXVldWUuDQo+ID4gPiA+ICsgKiBJZiBhbnkgb2YgdGhlIHJlc291 cmNlcyBoYXZlIG5vdCBjb21wbGV0ZWQgdGhlIGdyYWNlIHBlcmlvZA0KPiA+ID4gPiArICogdGhl IHJlY2xhbWF0aW9uIHN0b3BzIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiBUaGUgcmVzdCBvZg0K PiA+ID4gPiArICogdGhlIHJlc291cmNlcyBhcmUgbm90IHJlY2xhaW1lZCBhbmQgdGhlIGRlZmVy IHF1ZXVlIGlzIG5vdA0KPiA+ID4gPiArICogZnJlZWQuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiAr ICogQHBhcmFtIGRxDQo+ID4gPiA+ICsgKiAgIERlZmVyIHF1ZXVlIHRvIGRlbGV0ZS4NCj4gPiA+ ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gKyAqICAgT24gc3VjY2VzcyAtIDANCj4gPiA+ID4gKyAq ICAgT24gZXJyb3IgLSAxDQo+ID4gPiA+ICsgKiAgIFBvc3NpYmxlIHJ0ZV9lcnJubyBjb2RlcyBh cmU6DQo+ID4gPiA+ICsgKiAgIC0gRUlOVkFMIC0gTlVMTCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQN Cj4gPiA+ID4gKyAqICAgLSBFQUdBSU4gLSBTb21lIG9mIHRoZSByZXNvdXJjZXMgaGF2ZSBub3Qg Y29tcGxldGVkIGF0IGxlYXN0IDENCj4gZ3JhY2UNCj4gPiA+ID4gKyAqCQlwZXJpb2QsIHRyeSBh Z2Fpbi4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ ICtpbnQNCj4gPiA+ID4gK3J0ZV9yY3VfcXNicl9kcV9kZWxldGUoc3RydWN0IHJ0ZV9yY3VfcXNi cl9kcSAqZHEpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICAjaWZkZWYgX19jcGx1c3BsdXMNCj4gPiA+ ID4gIH0NCj4gPiA+ID4gICNlbmRpZg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9y Y3UvcnRlX3JjdV9xc2JyX3B2dC5oDQo+ID4gPiA+IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9x c2JyX3B2dC5oDQo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAw MDAwMDAwMC4uMjEyMmJjMzZhDQo+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gKysrIGIv bGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyX3B2dC5oDQo+ID4gPg0KPiA+ID4gQWdhaW4gc3R5 bGUgc3VnZ2VzdGlvbjogYXMgaXQgaXMgbm90IHB1YmxpYyBoZWFkZXIgLSBkb24ndCB1c2UgcnRl Xw0KPiA+ID4gcHJlZml4IGZvciBuYW1pbmcuDQo+ID4gPiBGcm9tIG15IHBlcnNwZWN0aXZlIC0g ZWFzaWVyIHRvIHJlbGFsaXplIGZvciByZWFkZXIgd2hhdCBpcyBwdWJsaWMNCj4gPiA+IGhlYWRl ciwgd2hhdCBpcyBub3QuDQo+ID4gTG9va3MgbGlrZSB0aGUgZ3VpZGVsaW5lcyBhcmUgbm90IGRl ZmluZWQgdmVyeSB3ZWxsLiBJIHNlZSBvbmUgcHJpdmF0ZQ0KPiA+IGZpbGUgd2l0aCBydGVfIHBy ZWZpeC4gSSBzZWUgU3RlcGhlbiBub3QgdXNpbmcgcnRlXyBwcmVmaXguIEkgZG8gbm90IGhhdmUg YW55DQo+IHByZWZlcmVuY2UuIEJ1dCwgYSBjb25zaXN0ZW50IGFwcHJvYWNoIGlzIHJlcXVpcmVk Lg0KPiANCj4gVGhhdCdzIGp1c3QgYSBzdWdnZXN0aW9uLg0KPiBGb3IgbWUgKGFuZCBJIGhvcGUg Zm9yIG90aGVycykgaXQgd291bGQgYmUgYSBiaXQgZWFzaWVyLg0KPiBXaGVuIGxvb2tpbmcgYXQg dGhlIGNvZGUgZm9yIGZpcnN0IHRpbWUgSSBoYWQgdG8gbG9vayBhIHQgbWVzb24uYnVpbGQgdG8g Y2hlY2sgaXMNCj4gaXQgYSBwdWJsaWMgaGVhZGVyIG9yIG5vdC4NCj4gSWYgdGhlIGZpbGUgZG9l c24ndCBoYXZlICdydGVfJyBwcmVmaXgsIEkgYXNzdW1lIHRoYXQgaXQgaXMgYW4gaW50ZXJuYWwg b25lDQo+IHN0cmFpZ2h0d2F5Lg0KPiBCdXQgLCBhcyB5b3Ugc2FpZCwgdGhlcmUgaXMgbm8gZXhh Y3QgZ3VpZGVsaW5lcyBoZXJlLCBzbyB1cCB0byB5b3UgdG8gZGVjaWRlLg0KSSB0aGluayBpdCBt YWtlcyBzZW5zZSB0byByZW1vdmUgJ3J0ZV8nIHByZWZpeC4gSSB3aWxsIGFsc28gY2hhbmdlIHRo ZSBmaWxlIG5hbWUgdG8gaGF2ZSAnX3ByaXZhdGUnIHN1ZmZpeC4NClRoZXJlIGFyZSBzb21lIGlu Y29uc2lzdGVuY2llcyBpbiB0aGUgZXhpc3RpbmcgY29kZSwgd2lsbCBzZW5kIGEgcGF0Y2ggdG8g Y29ycmVjdCB0aGVtIHRvIGZvbGxvdyB0aGlzIGFwcHJvYWNoLg0KDQo+IA0KPiA+DQo+ID4gPg0K PiA+ID4gPiBAQCAtMCwwICsxLDQ2IEBADQo+ID4gPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTMtQ2xhdXNlDQo+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTkgQXJtIExp bWl0ZWQgICovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpZm5kZWYgX1JURV9SQ1VfUVNCUl9QVlRf SF8NCj4gPiA+ID4gKyNkZWZpbmUgX1JURV9SQ1VfUVNCUl9QVlRfSF8NCj4gPiA+ID4gKw0KPiA+ ID4gPiArLyoqDQo+ID4gPiA+ICsgKiBUaGlzIGZpbGUgaXMgcHJpdmF0ZSB0byB0aGUgUkNVIGxp YnJhcnkuIEl0IHNob3VsZCBub3QgYmUNCj4gPiA+ID4gK2luY2x1ZGVkDQo+ID4gPiA+ICsgKiBi eSB0aGUgdXNlciBvZiB0aGlzIGxpYnJhcnkuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gKw0KPiA+ ID4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gPiA+ICtleHRlcm4gIkMiIHsNCj4gPiA+ID4g KyNlbmRpZg0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaW5jbHVkZSAicnRlX3JjdV9xc2JyLmgiDQo+ ID4gPiA+ICsNCj4gPiA+ID4gKy8qIFJURSBkZWZlciBxdWV1ZSBzdHJ1Y3R1cmUuDQo+ID4gPiA+ ICsgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgZGVmZXIgcXVldWUuIFRoZSBkZWZlciBxdWV1 ZSBpcyB1c2VkDQo+ID4gPiA+ICt0bw0KPiA+ID4gPiArICogaG9sZCB0aGUgZGVsZXRlZCBlbnRy aWVzIGZyb20gdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgYXJlIG5vdA0KPiA+ID4gPiArICogeWV0 IGZyZWVkLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxIHsN Cj4gPiA+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2OyAvKio8IFJDVSBRU0JSIHZhcmlhYmxl IHVzZWQgYnkgdGhpcyBxdWV1ZS4qLw0KPiA+ID4gPiArCXN0cnVjdCBydGVfcmluZyAqcjsgICAg IC8qKjwgUkNVIFFTQlIgZGVmZXIgcXVldWUuICovDQo+ID4gPiA+ICsJdWludDMyX3Qgc2l6ZTsN Cj4gPiA+ID4gKwkvKio8IE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGVmZXIgcXVldWUgKi8N Cj4gPiA+ID4gKwl1aW50MzJfdCBlc2l6ZTsNCj4gPiA+ID4gKwkvKio8IFNpemUgKGluIGJ5dGVz KSBvZiBkYXRhIHN0b3JlZCBvbiB0aGUgZGVmZXIgcXVldWUgKi8NCj4gPiA+ID4gKwlydGVfcmN1 X3FzYnJfZnJlZV9yZXNvdXJjZSBmOw0KPiA+ID4gPiArCS8qKjwgRnVuY3Rpb24gdG8gY2FsbCB0 byBmcmVlIHRoZSByZXNvdXJjZS4gKi8NCj4gPiA+ID4gKwl2b2lkICpwOw0KPiA+ID4gPiArCS8q KjwgUG9pbnRlciBwYXNzZWQgdG8gdGhlIGZyZWUgZnVuY3Rpb24uIFR5cGljYWxseSwgdGhpcyBp cyB0aGUNCj4gPiA+ID4gKwkgKiAgIHBvaW50ZXIgdG8gdGhlIGRhdGEgc3RydWN0dXJlIHRvIHdo aWNoIHRoZSByZXNvdXJjZSB0byBmcmVlDQo+ID4gPiA+ICsJICogICBiZWxvbmdzLg0KPiA+ID4g PiArCSAqLw0KPiA+ID4gPiArCWNoYXIgZVswXTsNCj4gPiA+ID4gKwkvKio8IFRlbXBvcmFyeSBz dG9yYWdlIHRvIGNvcHkgdGhlIGRlZmVyIHF1ZXVlIGVsZW1lbnQuICovDQo+ID4gPg0KPiA+ID4g RG8geW91IHJlYWxseSBuZWVkICdlJyBhdCBhbGw/DQo+ID4gPiBDYW4ndCBpdCBiZSBqdXN0IHRl bXBvcmFyeSBzdGFjayB2YXJpYWJsZT8NCj4gPiBPaywgd2lsbCBjaGVjay4NCj4gPg0KPiA+ID4N Cj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+ ID4gPiArfQ0KPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNlbmRpZiAvKiBf UlRFX1JDVV9RU0JSX1BWVF9IXyAqLw0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9y Y3UvcnRlX3JjdV92ZXJzaW9uLm1hcA0KPiA+ID4gPiBiL2xpYi9saWJydGVfcmN1L3J0ZV9yY3Vf dmVyc2lvbi5tYXANCj4gPiA+ID4gaW5kZXggZjhiOWVmMmFiLi5kZmFjODhhMzcgMTAwNjQ0DQo+ ID4gPiA+IC0tLSBhL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfdmVyc2lvbi5tYXANCj4gPiA+ID4g KysrIGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV92ZXJzaW9uLm1hcA0KPiA+ID4gPiBAQCAtOCw2 ICs4LDEwIEBAIEVYUEVSSU1FTlRBTCB7DQo+ID4gPiA+ICAJcnRlX3JjdV9xc2JyX3N5bmNocm9u aXplOw0KPiA+ID4gPiAgCXJ0ZV9yY3VfcXNicl90aHJlYWRfcmVnaXN0ZXI7DQo+ID4gPiA+ICAJ cnRlX3JjdV9xc2JyX3RocmVhZF91bnJlZ2lzdGVyOw0KPiA+ID4gPiArCXJ0ZV9yY3VfcXNicl9k cV9jcmVhdGU7DQo+ID4gPiA+ICsJcnRlX3JjdV9xc2JyX2RxX2VucXVldWU7DQo+ID4gPiA+ICsJ cnRlX3JjdV9xc2JyX2RxX3JlY2xhaW07DQo+ID4gPiA+ICsJcnRlX3JjdV9xc2JyX2RxX2RlbGV0 ZTsNCj4gPiA+ID4NCj4gPiA+ID4gIAlsb2NhbDogKjsNCj4gPiA+ID4gIH07DQo+ID4gPiA+IGRp ZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQgaW5kZXgNCj4gPiA+ ID4gZTVmZjgzODkzLi4wZTFiZTg0MDcgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2xpYi9tZXNvbi5i dWlsZA0KPiA+ID4gPiArKysgYi9saWIvbWVzb24uYnVpbGQNCj4gPiA+ID4gQEAgLTExLDcgKzEx LDkgQEANCj4gPiA+ID4gIGxpYnJhcmllcyA9IFsNCj4gPiA+ID4gIAkna3ZhcmdzJywgIyBlYWwg ZGVwZW5kcyBvbiBrdmFyZ3MNCj4gPiA+ID4gIAknZWFsJywgIyBldmVyeXRoaW5nIGRlcGVuZHMg b24gZWFsDQo+ID4gPiA+IC0JJ3JpbmcnLCAnbWVtcG9vbCcsICdtYnVmJywgJ25ldCcsICdtZXRl cicsICdldGhkZXYnLCAncGNpJywgIyBjb3JlDQo+ID4gPiA+ICsJJ3JpbmcnLA0KPiA+ID4gPiAr CSdyY3UnLCAjIHJjdSBkZXBlbmRzIG9uIHJpbmcNCj4gPiA+ID4gKwknbWVtcG9vbCcsICdtYnVm JywgJ25ldCcsICdtZXRlcicsICdldGhkZXYnLCAncGNpJywgIyBjb3JlDQo+ID4gPiA+ICAJJ2Nt ZGxpbmUnLA0KPiA+ID4gPiAgCSdtZXRyaWNzJywgIyBiaXRyYXRlL2xhdGVuY3kgc3RhdHMgZGVw ZW5kcyBvbiB0aGlzDQo+ID4gPiA+ICAJJ2hhc2gnLCAgICAjIGVmZCBkZXBlbmRzIG9uIHRoaXMN Cj4gPiA+ID4gQEAgLTIyLDcgKzI0LDcgQEAgbGlicmFyaWVzID0gWw0KPiA+ID4gPiAgCSdncm8n LCAnZ3NvJywgJ2lwX2ZyYWcnLCAnam9ic3RhdHMnLA0KPiA+ID4gPiAgCSdrbmknLCAnbGF0ZW5j eXN0YXRzJywgJ2xwbScsICdtZW1iZXInLA0KPiA+ID4gPiAgCSdwb3dlcicsICdwZHVtcCcsICdy YXdkZXYnLA0KPiA+ID4gPiAtCSdyY3UnLCAncmVvcmRlcicsICdzY2hlZCcsICdzZWN1cml0eScs ICdzdGFjaycsICd2aG9zdCcsDQo+ID4gPiA+ICsJJ3Jlb3JkZXInLCAnc2NoZWQnLCAnc2VjdXJp dHknLCAnc3RhY2snLCAndmhvc3QnLA0KPiA+ID4gPiAgCSMgaXBzZWMgbGliIGRlcGVuZHMgb24g bmV0LCBjcnlwdG8gYW5kIHNlY3VyaXR5DQo+ID4gPiA+ICAJJ2lwc2VjJywNCj4gPiA+ID4gIAkj IGFkZCBwa3QgZnJhbWV3b3JrIGxpYnMgd2hpY2ggdXNlIG90aGVyIGxpYnMgZnJvbSBhYm92ZQ0K PiA+ID4gPiAtLQ0KPiA+ID4gPiAyLjE3LjENCg0K