Received: by 2002:a25:5b86:0:0:0:0:0 with SMTP id p128csp548449ybb; Thu, 28 Mar 2019 07:36:26 -0700 (PDT) X-Google-Smtp-Source: APXvYqzlXjJonK3re433JtVpiVbqwX0WgwfupUlu8E9T45PaK1mfbKGzq3Dcqtv/bs5OHe8aK27K X-Received: by 2002:a63:195f:: with SMTP id 31mr29875550pgz.116.1553783786760; Thu, 28 Mar 2019 07:36:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553783786; cv=none; d=google.com; s=arc-20160816; b=EbE4xke/drs6iZMj+s19YEunmlkisc+TePZWcGX9ZSs3OqXYSRURngqfjAn61/q7Ci lQo7Q3MbSBSDe3OITOwZFwFJABbUlGjW+CaDEmwMjgNndIcpV43rFEzPAouk7LFiERt1 14FnsuxbDUqGtdwZAdFi0X1BYxJjFAa/HpRIremYwxYQYsyYyU8ttOGHeK7TYBUKuK42 VD8wIjC1pYbNVkUt3SWxlVBIliERlrT18ApXBOi5T8aX5I45jVMGg3/n/Xd2OEzalILV 6g8U/n9QLmNVoC0wN6SUQ3kvU8QQkut9MXdh1tWjh2wIXVI97RrfZzqXois/1qLDQoi+ 91fQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=zapvIoP17IhE8G9W1YU/9GSk+5zGuU2LkBzMgIYo4Sc=; b=KsiHfvQ4cjCHhjfzrdAz0ER/yLXmFwUhyNpw5YL1zvm/BKAgrl1opwwVuXcgyTptdn g02uqcuMd1WmnbSu15UyQ5cKsRsUmk3NqHoppEgC0n+6VGbH9WIcGU/bheWjRaEMXc6y LUoVNw5STbN2cCNKG/z4Jn0p4jtFxq1KX0atE880XdWETIbxkCTLpK4sE7rJqMfHxfIv E6xUOjnanDdnikhkOqM4+i38KynL/s3IWTIUWfZ7hBT240wXsfXAiU8lmWndlfPFTh+j aANrC20+vmnFi8Rmqavp7rYSzaAgOQS7eTbIO7f55fk22inw/+340432fk/NS05A2CKm FkYA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@garyguo.net header.s=selector1 header.b=APj55UM2; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p65si21033114pfa.27.2019.03.28.07.36.10; Thu, 28 Mar 2019 07:36:26 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@garyguo.net header.s=selector1 header.b=APj55UM2; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726185AbfC1OeH (ORCPT + 99 others); Thu, 28 Mar 2019 10:34:07 -0400 Received: from mail-eopbgr110135.outbound.protection.outlook.com ([40.107.11.135]:43171 "EHLO GBR01-CWL-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725849AbfC1OeH (ORCPT ); Thu, 28 Mar 2019 10:34:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zapvIoP17IhE8G9W1YU/9GSk+5zGuU2LkBzMgIYo4Sc=; b=APj55UM2j/7/chmADdiFwuYL54W2TATjvxO9hB2TSlJlhtcFp5gTG/73iupBqTSkJZasim4kNkrGre/bDbPu0qwYF5a7mz2iIL8gVm6LWOXQlDCwl3xMH/W6gu0iGM3xzWsi4sV/L1kGSO22ou8064KPRmvscN2fcs6llOXMusk= Received: from LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM (20.176.139.20) by LO2P265MB0493.GBRP265.PROD.OUTLOOK.COM (10.166.105.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.16; Thu, 28 Mar 2019 14:33:49 +0000 Received: from LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM ([fe80::ed34:1290:4306:3157]) by LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM ([fe80::ed34:1290:4306:3157%3]) with mapi id 15.20.1750.017; Thu, 28 Mar 2019 14:33:49 +0000 From: Gary Guo To: Anup Patel CC: Anup Patel , Palmer Dabbelt , Albert Ou , Atish Patra , Paul Walmsley , Christoph Hellwig , Mike Rapoport , "linux-riscv@lists.infradead.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v2] RISC-V: Implement ASID allocator Thread-Topic: [PATCH v2] RISC-V: Implement ASID allocator Thread-Index: AQHU5TAIKaRDCttA7UazIjpcDaomMKYhDFQAgAAKGwCAAAWygA== Date: Thu, 28 Mar 2019 14:33:49 +0000 Message-ID: <449f865a-f224-776a-3a5e-04c4c212e682@garyguo.net> References: <20190328063211.13052-1-anup.patel@wdc.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: LO2P265CA0451.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:e::31) To LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:8c::20) authentication-results: spf=none (sender IP is ) smtp.mailfrom=gary@garyguo.net; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2001:630:212:238:3697:f6ff:fe55:55b1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1c897be9-4c6b-4cf0-63ee-08d6b38a6494 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7027125)(7023125)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020);SRVR:LO2P265MB0493; x-ms-traffictypediagnostic: LO2P265MB0493: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 0990C54589 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(396003)(39830400003)(366004)(136003)(346002)(376002)(189003)(199004)(55674003)(46003)(186003)(14444005)(966005)(36756003)(508600001)(6512007)(11346002)(53936002)(6116002)(6246003)(316002)(106356001)(256004)(6916009)(54906003)(31686004)(31696002)(25786009)(2616005)(30864003)(446003)(53546011)(7736002)(105586002)(486006)(2906002)(102836004)(386003)(68736007)(5660300002)(6306002)(8936002)(86362001)(6486002)(476003)(53946003)(97736004)(99286004)(305945005)(14454004)(71200400001)(7416002)(71190400001)(6506007)(81156014)(81166006)(8676002)(52116002)(4326008)(76176011)(6436002)(229853002);DIR:OUT;SFP:1102;SCL:1;SRVR:LO2P265MB0493;H:LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: garyguo.net does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: rNWeuW64QPmHvljzYtuW7flZzFOqjmoQBxhsNPFlXiAx6xd3JVQWdy2MDqX28GnpX9eOnllmTyA+6qL9Ft1P+9ShqIv1kyTL8xtM2duO6x+qLIC+JkiIFPJF6p/QofRq5kKmipV1P/T1cZhwJE8nSO+vff7dywLMVTn3akbHe+OQW9DW9BFI5oD5eQ+QVXkN9ijl5UZXdzJ5cB3lxPDrPtBE4YtMYAFWnbAKYUmYWBubo6vN149bYm/bjy8dYVJ3js/nEtCMiH9+9QxupVrZ4TKvRgV4ifUXamAcbdiS4JBrTjAPfZPZRdfedDjiP/cRD5ROuzwfZ/g6b6meZqhqOzk2jELe7PhewV+nArPBUygZ5rwIaLw6Exg0YmeJjMvSGMZ0LMQW7HR/8LNr18mGqt6JW0OE5MrqERRv0B20pfM= Content-Type: text/plain; charset="utf-8" Content-ID: <80AF79314FFE024997509E9EC34DEAAC@GBRP265.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 1c897be9-4c6b-4cf0-63ee-08d6b38a6494 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Mar 2019 14:33:49.6350 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: bbc898ad-b10f-4e10-8552-d9377b823d45 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P265MB0493 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCk9uIDI4LzAzLzIwMTkgMTQ6MTMsIEFudXAgUGF0ZWwgd3JvdGU6DQo+IE9uIFRodSwgTWFy IDI4LCAyMDE5IGF0IDc6MDcgUE0gR2FyeSBHdW8gPGdhcnlAZ2FyeWd1by5uZXQ+IHdyb3RlOg0K Pj4NCj4+IEhpIEFudXAsDQo+Pg0KPj4gVGhlIGNvZGUgc3RpbGwgZG9lcyBub3QgdXNlIEFTSUQg aW4gVExCIGZsdXNoIHJvdXRpbmVzLiBXaXRob3V0IHRoaXMNCj4+IGFkZGVkIHRoZSBjb2RlIGRv ZXMgbm90IGJvb3Qgb24gc3lzdGVtcyB3aXRoIHRydWUgQVNJRCBzdXBwb3J0Lg0KPj4NCj4+IFdl IGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgY2FzZSBvZiBDT05URVhUSUQgb3ZlcmZsb3cgb24g MzItYml0DQo+PiBzeXN0ZW1zLiAzMi1iaXQgQ09OVEVYVElEIG1heSBvdmVyZmxvdyBpbiBhIG1v bnRoIHRpbWUuDQo+Pg0KPj4gUGxlYXNlIGFsbCBzZWUgbXkgaW5saW5lIGNvbW1lbnRzLg0KPj4N Cj4+IEJlc3QsDQo+PiBHYXJ5DQo+Pg0KPj4gT24gMjgvMDMvMjAxOSAwNjozMiwgQW51cCBQYXRl bCB3cm90ZToNCj4+PiBDdXJyZW50bHksIHdlIGRvIGxvY2FsIFRMQiBmbHVzaCBvbiBldmVyeSBN TSBzd2l0Y2guIFRoaXMgaXMgdmVyeSBoYXJzaA0KPj4+IG9uIHBlcmZvcm1hbmNlIGJlY2F1c2Ug d2UgYXJlIGZvcmNpbmcgcGFnZSB0YWJsZSB3YWxrcyBhZnRlciBldmVyeSBNTQ0KPj4+IHN3aXRj aC4NCj4+Pg0KPj4+IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBBU0lEIGFsbG9jYXRvciBmb3IgYXNz aWduaW5nIGFuIEFTSUQgdG8gZXZlcnkgTU0NCj4+PiBjb250ZXh0LiBUaGUgbnVtYmVyIG9mIEFT SURzIGFyZSBsaW1pdGVkIGluIEhXIHNvIHdlIGNyZWF0ZSBhIGxvZ2ljYWwNCj4+PiBlbnRpdHkg bmFtZWQgQ09OVEVYVElEIGZvciBhc3NpZ25pbmcgdG8gTU0gY29udGV4dC4gVGhlIGxvd2VyIGJp dHMgb2YNCj4+PiBDT05URVhUSUQgYXJlIEFTSUQgYW5kIHVwcGVyIGJpdHMgYXJlIFZFUlNJT04g bnVtYmVyLiBUaGUgbnVtYmVyIG9mDQo+Pj4gdXNhYmxlIEFTSUQgYml0cyBzdXBwb3J0ZWQgYnkg SFcgYXJlIGRldGVjdGVkIGF0IGJvb3QtdGltZSBieSB3cml0aW5nDQo+Pj4gMXMgdG8gQVNJRCBi aXRzIGluIFNBVFAgQ1NSLiBUaGlzIG1lYW5zIGxhc3QgQVNJRCBpcyBhbHdheXMgcmVzZXJ2ZWQN Cj4+PiBiZWNhdXNlIGl0IGlzIHVzZWQgZm9yIGluaXRpYWwgTU0gY29udGV4dC4NCj4+Pg0KPj4+ IFdlIGFsbG9jYXRlIG5ldyBDT05URVhUSUQgb24gZmlyc3QgTU0gc3dpdGNoIGZvciBhIE1NIGNv bnRleHQgd2hlcmUNCj4+PiB0aGUgQVNJRCBpcyBhbGxvY2F0ZWQgZnJvbSBhbiBBU0lEIGJpdG1h cCBhbmQgVkVSU0lPTiBpcyBwcm92aWRlIGJ5DQo+Pj4gYW4gYXRvbWljIGNvdW50ZXIuIEF0IHRp bWUgb2YgYWxsb2NhdGluZyBuZXcgQ09OVEVYVElELCBpZiB3ZSBydW4gb3V0DQo+Pj4gb2YgYXZh aWxhYmxlIEFTSURzIHRoZW46DQo+Pj4gMS4gV2UgZmx1c2ggdGhlIEFTSUQgYml0bWFwDQo+Pj4g Mi4gSW5jcmVtZW50IGN1cnJlbnQgVkVSU0lPTiBhdG9taWMgY291bnRlcg0KPj4+IDMuIFJlLWFs bG9jYXRlIEFTSUQgZnJvbSBBU0lEIGJpdG1hcA0KPj4+IDQuIEZsdXNoIFRMQiBvbiBhbGwgQ1BV cw0KPj4+IDUuIFRyeSBDT05URVhUSUQgcmUtYXNzaWdubWVudCBvbiBhbGwgQ1BVcw0KPj4+DQo+ Pj4gVXNpbmcgYWJvdmUgYXBwcm9hY2gsIHdlIGhhdmUgdmlydHVhbGx5IGluZmluaXRlIENPTlRF WFRJRHMgb24tdG9wLW9mDQo+Pj4gbGltaXRlZCBudW1iZXIgb2YgSFcgQVNJRHMuIFRoaXMgYXBw cm9hY2ggaXMgaW5zcGlyZWQgZnJvbSBBU0lEIGFsbG9jYXRvcg0KPj4+IHVzZWQgZm9yIExpbnV4 IEFSTS9BUk02NCBidXQgd2UgaGF2ZSBhZGFwdGVkIGl0IGZvciBSSVNDLVYuIE92ZXJhbGwsDQo+ Pj4gdGhpcyBBU0lEIGFsbG9jYXRvciBoZWxwcyB1cyByZWR1Y2UgcmF0ZSBvZiBsb2NhbCBUTEIg Zmx1c2hlcyBvbiBldmVyeQ0KPj4+IENQVSB0aGVyZWJ5IGluY3JlYXNpbmcgcGVyZm9ybWFuY2Uu DQo+Pj4NCj4+PiBUaGlzIHBhdGNoIGlzIHRlc3RlZCBvbiBRRU1VL3ZpcnQgbWFjaGluZSBhbmQg U2lGaXZlIFVubGVhc2hlZCBib2FyZC4NCj4+PiBPbiBRRU1VL3ZpcnQgbWFjaGluZSwgd2Ugc2Vl IDEwJSAoYXBwcm94KSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB3aXRoDQo+Pj4gU1cgZW11bGF0 ZWQgVExCcyBwcm92aWRlZCBieSBRRU1VLiBVbmZvcnR1bmF0ZWx5LCBBU0lEIGJpdHMgb2YgU0FU UCBDU1INCj4+PiBhcmUgbm90IGltcGxlbWVudGVkIG9uIFNpRml2ZSBVbmxlYXNoZWQgYm9hcmQg c28gd2UgZG9uJ3Qgc2VlIGFueSBjaGFuZ2UNCj4+PiBpbiBwZXJmb3JtYW5jZS4NCj4+Pg0KPj4+ IFNpZ25lZC1vZmYtYnk6IEdhcnkgR3VvIDxnYXJ5QGdhcnlndW8ubmV0Pg0KPj4gQ291bGQgeW91 IGFkZCBhIENvLWRldmVsb3BlZC1ieSBsaW5lIGluIGFkZGl0aW9uIHRvIFNpZ25lZC1vZmYtYnkg YXMNCj4+IHdlbGw/IFRoYW5rcy4NCj4+PiBTaWduZWQtb2ZmLWJ5OiBBbnVwIFBhdGVsIDxhbnVw LnBhdGVsQHdkYy5jb20+DQo+Pj4gLS0tDQo+Pj4gQ2hhbmdlcyBzaW5jZSB2MToNCj4+PiAtIFdl IGFkYXB0IGdvb2QgYXNwZWN0cyBmcm9tIEdhcnkgR3VvJ3MgQVNJRCBhbGxvY2F0b3IgaW1wbGVt ZW50YXRpb24NCj4+PiAgICAgYW5kIHByb3ZpZGUgZHVlIGNyZWRpdCB0byBoaW0gYnkgYWRkaW5n IGhpcyBTb0IuDQo+Pj4gLSBUcmFjayBBU0lEcyBhY3RpdmUgZHVyaW5nIGNvbnRleHQgZmx1c2gg YW5kIG1hcmsgdGhlbSBhcyByZXNlcnZlZA0KPj4+IC0gU2V0IEFTSUQgYml0cyB0byBhbGwgMXMg dG8gc2ltcGxpZnkgbnVtYmVyIG9mIEFTSUQgYml0IGRldGVjdGlvbg0KPj4+IC0gVXNlIGF0b21p Y19sb25nX3QgaW5zdGVhZCBvZiBhdG9taWM2NF90IGZvciBiZWluZyAzMmJpdCBmcmllbmRseQ0K Pj4+IC0gVXNlIHVuc2lnbmVkIGxvbmcgaW5zdGVhZCBvZiB1NjQgZm9yIGJlaW5nIDMyYml0IGZy aWVuZGx5DQo+Pj4gLSBVc2UgZmx1c2hfdGxiX2FsbCgpIGluc3RlYWQgb2YgbGF6eSBsb2NhbF90 bGJfZmx1c2hfYWxsKCkgYXQgdGltZQ0KPj4+ICAgICBvZiBjb250ZXh0IGZsdXNoDQo+Pj4NCj4+ PiBUaGlzIHBhdGNoIGlzIGJhc2VkIG9uIExpbnV4LTUuMS1yYzIgYW5kIFRMQiBmbHVzaCBjbGVh bnVwIHBhdGNoZXMgdjQNCj4+PiBmcm9tIEdhcnkgR3VvLiBJdCBjYW4gYmUgYWxzbyBmb3VuZCBp biByaXNjdl9hc2lkX2FsbG9jYXRvcl92MiBicmFuY2gNCj4+PiBvZiBodHRwczovL2dpdGh1Yi5j b20vYXZwYXRlbC9saW51eC5naXQNCj4+PiAtLS0NCj4+PiAgICBhcmNoL3Jpc2N2L2luY2x1ZGUv YXNtL2Nzci5oICAgICAgICAgfCAgIDYgKw0KPj4+ICAgIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20v bW11LmggICAgICAgICB8ICAgMSArDQo+Pj4gICAgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9tbXVf Y29udGV4dC5oIHwgICAxICsNCj4+PiAgICBhcmNoL3Jpc2N2L2tlcm5lbC9oZWFkLlMgICAgICAg ICAgICAgfCAgIDIgKw0KPj4+ICAgIGFyY2gvcmlzY3YvbW0vY29udGV4dC5jICAgICAgICAgICAg ICB8IDI0OSArKysrKysrKysrKysrKysrKysrKysrKysrLS0NCj4+PiAgICA1IGZpbGVzIGNoYW5n ZWQsIDI0NyBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkNCj4+Pg0KPj4+IGRpZmYgLS1n aXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2Nzci5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2Fz bS9jc3IuaA0KPj4+IGluZGV4IDI4YTBkMWNiMzc0Yy4uY2UxOGFiOGY1M2VkIDEwMDY0NA0KPj4+ IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3NyLmgNCj4+PiArKysgYi9hcmNoL3Jpc2N2 L2luY2x1ZGUvYXNtL2Nzci5oDQo+Pj4gQEAgLTQ1LDEwICs0NSwxNiBAQA0KPj4+ICAgICNkZWZp bmUgU0FUUF9QUE4gICAgIF9BQygweDAwM0ZGRkZGLCBVTCkNCj4+PiAgICAjZGVmaW5lIFNBVFBf TU9ERV8zMiBfQUMoMHg4MDAwMDAwMCwgVUwpDQo+Pj4gICAgI2RlZmluZSBTQVRQX01PREUgICAg U0FUUF9NT0RFXzMyDQo+Pj4gKyNkZWZpbmUgU0FUUF9BU0lEX0JJVFMgICAgICAgOQ0KPj4+ICsj ZGVmaW5lIFNBVFBfQVNJRF9TSElGVCAgICAgIDIyDQo+Pj4gKyNkZWZpbmUgU0FUUF9BU0lEX01B U0sgICAgICAgX0FDKDB4MUZGLCBVTCkNCj4+PiAgICAjZWxzZQ0KPj4+ICAgICNkZWZpbmUgU0FU UF9QUE4gICAgIF9BQygweDAwMDAwRkZGRkZGRkZGRkYsIFVMKQ0KPj4+ICAgICNkZWZpbmUgU0FU UF9NT0RFXzM5IF9BQygweDgwMDAwMDAwMDAwMDAwMDAsIFVMKQ0KPj4+ICAgICNkZWZpbmUgU0FU UF9NT0RFICAgIFNBVFBfTU9ERV8zOQ0KPj4+ICsjZGVmaW5lIFNBVFBfQVNJRF9CSVRTICAgICAg IDE2DQo+Pj4gKyNkZWZpbmUgU0FUUF9BU0lEX1NISUZUICAgICAgNDQNCj4+PiArI2RlZmluZSBT QVRQX0FTSURfTUFTSyAgICAgICBfQUMoMHhGRkZGLCBVTCkNCj4+PiAgICAjZW5kaWYNCj4+Pg0K Pj4+ICAgIC8qIEludGVycnVwdCBFbmFibGUgYW5kIEludGVycnVwdCBQZW5kaW5nIGZsYWdzICov DQo+Pj4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL3Jp c2N2L2luY2x1ZGUvYXNtL21tdS5oDQo+Pj4gaW5kZXggNWRmMmRjY2RiYTEyLi40MmE5Y2EwZmUx ZmIgMTAwNjQ0DQo+Pj4gLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9tbXUuaA0KPj4+ICsr KyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11LmgNCj4+PiBAQCAtMTgsNiArMTgsNyBAQA0K Pj4+ICAgICNpZm5kZWYgX19BU1NFTUJMWV9fDQo+Pj4NCj4+PiAgICB0eXBlZGVmIHN0cnVjdCB7 DQo+Pj4gKyAgICAgYXRvbWljX2xvbmdfdCBpZDsNCj4+PiAgICAgICAgdm9pZCAqdmRzbzsNCj4+ PiAgICAjaWZkZWYgQ09ORklHX1NNUA0KPj4+ICAgICAgICAvKiBBIGxvY2FsIGljYWNoZSBmbHVz aCBpcyBuZWVkZWQgYmVmb3JlIHVzZXIgZXhlY3V0aW9uIGNhbiByZXN1bWUuICovDQo+Pj4gZGlm ZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvcmlz Y3YvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaA0KPj4+IGluZGV4IGJmNGYwOTdhOTA1MS4uYmE2 YWIzNWMxOGRjIDEwMDY0NA0KPj4+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11X2Nv bnRleHQuaA0KPj4+ICsrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaA0K Pj4+IEBAIC0zMCw2ICszMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihz dHJ1Y3QgbW1fc3RydWN0ICptbSwNCj4+PiAgICBzdGF0aWMgaW5saW5lIGludCBpbml0X25ld19j b250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywNCj4+PiAgICAgICAgc3RydWN0IG1tX3N0 cnVjdCAqbW0pDQo+Pj4gICAgew0KPj4+ICsgICAgIGF0b21pY19sb25nX3NldCgmKG1tKS0+Y29u dGV4dC5pZCwgMCk7DQo+PiBQYXJlbnRoZXNpcyBhcm91bmQgbW0gaXNuJ3QgbmVjZXNzYXJ5DQo+ Pj4gICAgICAgIHJldHVybiAwOw0KPj4+ICAgIH0NCj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9hcmNo L3Jpc2N2L2tlcm5lbC9oZWFkLlMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9oZWFkLlMNCj4+PiBpbmRl eCBmZTg4NGNkNjlhYmQuLmMzZjlhZGMwZDA1NCAxMDA2NDQNCj4+PiAtLS0gYS9hcmNoL3Jpc2N2 L2tlcm5lbC9oZWFkLlMNCj4+PiArKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9oZWFkLlMNCj4+PiBA QCAtOTUsNiArOTUsOCBAQCByZWxvY2F0ZToNCj4+PiAgICAgICAgbGEgYTIsIHN3YXBwZXJfcGdf ZGlyDQo+Pj4gICAgICAgIHNybCBhMiwgYTIsIFBBR0VfU0hJRlQNCj4+PiAgICAgICAgbGkgYTEs IFNBVFBfTU9ERQ0KPj4+ICsgICAgIGxpIGEwLCAoU0FUUF9BU0lEX01BU0sgPDwgU0FUUF9BU0lE X1NISUZUKQ0KPj4+ICsgICAgIG9yIGExLCBhMSwgYTANCj4+PiAgICAgICAgb3IgYTIsIGEyLCBh MQ0KPj4+DQo+Pj4gICAgICAgIC8qDQo+Pj4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbW0vY29u dGV4dC5jIGIvYXJjaC9yaXNjdi9tbS9jb250ZXh0LmMNCj4+PiBpbmRleCAwZjc4N2JjZDNhN2Eu LjEyMDVkMzNkMWIxYiAxMDA2NDQNCj4+PiAtLS0gYS9hcmNoL3Jpc2N2L21tL2NvbnRleHQuYw0K Pj4+ICsrKyBiL2FyY2gvcmlzY3YvbW0vY29udGV4dC5jDQo+Pj4gQEAgLTIsMTMgKzIsMjA5IEBA DQo+Pj4gICAgLyoNCj4+PiAgICAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhDQo+Pj4gICAgICogQ29weXJpZ2h0IChDKSAyMDE3IFNp Rml2ZQ0KPj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgV2VzdGVybiBEaWdpdGFsIENvcnBvcmF0 aW9uIG9yIGl0cyBhZmZpbGlhdGVzLg0KPj4+ICAgICAqLw0KPj4+DQo+Pj4gKyNpbmNsdWRlIDxs aW51eC9iaXRvcHMuaD4NCj4+PiAgICAjaW5jbHVkZSA8bGludXgvbW0uaD4NCj4+PiArI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4NCj4+Pg0KPj4+ICAgICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4N Cj4+PiAgICAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4NCj4+Pg0KPj4+ICtzdGF0aWMgYm9v bCB1c2VfYXNpZF9hbGxvY2F0b3I7DQo+Pj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFzaWRfYml0 czsNCj4+PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgbnVtX2FzaWRzOw0KPj4+ICtzdGF0aWMgdW5z aWduZWQgbG9uZyBhc2lkX21hc2s7DQo+Pj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpcnN0X3Zl cnNpb247DQo+Pj4gKw0KPj4+ICtzdGF0aWMgYXRvbWljX2xvbmdfdCBjdXJyZW50X3ZlcnNpb247 DQo+Pj4gKw0KPj4+ICtzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhjb250ZXh0X2xvY2spOw0K Pj4+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyAqY29udGV4dF9hc2lkX21hcDsNCj4+PiArDQo+Pj4g K3N0YXRpYyBERUZJTkVfUEVSX0NQVShhdG9taWNfbG9uZ190LCBhY3RpdmVfY29udGV4dCk7DQo+ Pj4gK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCByZXNlcnZlZF9jb250ZXh0 KTsNCj4+PiArDQo+Pj4gK3N0YXRpYyBib29sIGNoZWNrX3VwZGF0ZV9yZXNlcnZlZF9jb250ZXh0 KHVuc2lnbmVkIGxvbmcgY250eCwNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBuZXdjbnR4KQ0KPj4+ICt7DQo+Pj4gKyAgICAgaW50IGNw dTsNCj4+PiArICAgICBib29sIGhpdCA9IGZhbHNlOw0KPj4+ICsNCj4+PiArICAgICAvKg0KPj4+ ICsgICAgICAqIEl0ZXJhdGUgb3ZlciB0aGUgc2V0IG9mIHJlc2VydmVkIENPTlRFWFQgbG9va2lu ZyBmb3IgYSBtYXRjaC4NCj4+PiArICAgICAgKiBJZiB3ZSBmaW5kIG9uZSwgdGhlbiB3ZSBjYW4g dXBkYXRlIG91ciBtbSB0byB1c2UgbmV3IENPTlRFWFQNCj4+PiArICAgICAgKiAoaS5lLiB0aGUg c2FtZSBDT05URVhUIGluIHRoZSBjdXJyZW50X3ZlcnNpb24pIGJ1dCB3ZSBjYW4ndA0KPj4+ICsg ICAgICAqIGV4aXQgdGhlIGxvb3AgZWFybHksIHNpbmNlIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQg YWxsIGNvcGllcw0KPj4+ICsgICAgICAqIG9mIHRoZSBvbGQgQ09OVEVYVCBhcmUgdXBkYXRlZCB0 byByZWZsZWN0IHRoZSBtbS4gRmFpbHVyZSB0byBkbw0KPj4+ICsgICAgICAqIHNvIGNvdWxkIHJl c3VsdCBpbiB1cyBtaXNzaW5nIHRoZSByZXNlcnZlZCBDT05URVhUIGluIGEgZnV0dXJlDQo+Pj4g KyAgICAgICogdmVyc2lvbi4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBmb3JfZWFjaF9wb3Nz aWJsZV9jcHUoY3B1KSB7DQo+Pj4gKyAgICAgICAgICAgICBpZiAocGVyX2NwdShyZXNlcnZlZF9j b250ZXh0LCBjcHUpID09IGNudHgpIHsNCj4+PiArICAgICAgICAgICAgICAgICAgICAgaGl0ID0g dHJ1ZTsNCj4+PiArICAgICAgICAgICAgICAgICAgICAgcGVyX2NwdShyZXNlcnZlZF9jb250ZXh0 LCBjcHUpID0gbmV3Y250eDsNCj4+PiArICAgICAgICAgICAgIH0NCj4+PiArICAgICB9DQo+Pj4g Kw0KPj4+ICsgICAgIHJldHVybiBoaXQ7DQo+Pj4gK30NCj4+PiArDQo+Pj4gKy8qIE5vdGU6IG11 c3QgYmUgY2FsbGVkIHdpdGggY29udGV4dF9sb2NrIGhlbGQgKi8NCj4+PiArc3RhdGljIHZvaWQg X19mbHVzaF9jb250ZXh0KHZvaWQpDQo+Pj4gK3sNCj4+PiArICAgICBpbnQgaTsNCj4+PiArICAg ICB1bnNpZ25lZCBsb25nIGNudHg7DQo+Pj4gKw0KPj4+ICsgICAgIC8qIFVwZGF0ZSB0aGUgbGlz dCBvZiByZXNlcnZlZCBBU0lEcyBhbmQgdGhlIEFTSUQgYml0bWFwLiAqLw0KPj4+ICsgICAgIGJp dG1hcF9jbGVhcihjb250ZXh0X2FzaWRfbWFwLCAwLCBudW1fYXNpZHMpOw0KPj4+ICsNCj4+PiAr ICAgICAvKiBNYXJrIGFscmVhZHkgYWNpdHZlIEFTSURzIGFzIHVzZWQgKi8NCj4+PiArICAgICBm b3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgew0KPj4+ICsgICAgICAgICAgICAgY250eCA9IGF0b21p Y19sb25nX3hjaGdfcmVsYXhlZCgmcGVyX2NwdShhY3RpdmVfY29udGV4dCwgaSksIDApOw0KPj4+ ICsgICAgICAgICAgICAgLyoNCj4+PiArICAgICAgICAgICAgICAqIElmIHRoaXMgQ1BVIGhhcyBh bHJlYWR5IGJlZW4gdGhyb3VnaCBhIHJvbGxvdmVyLCBidXQNCj4+PiArICAgICAgICAgICAgICAq IGhhc24ndCBydW4gYW5vdGhlciB0YXNrIGluIHRoZSBtZWFudGltZSwgd2UgbXVzdCBwcmVzZXJ2 ZQ0KPj4+ICsgICAgICAgICAgICAgICogaXRzIHJlc2VydmVkIENPTlRFWFQsIGFzIHRoaXMgaXMg dGhlIG9ubHkgdHJhY2Ugd2UgaGF2ZSBvZg0KPj4+ICsgICAgICAgICAgICAgICogdGhlIHByb2Nl c3MgaXQgaXMgc3RpbGwgcnVubmluZy4NCj4+PiArICAgICAgICAgICAgICAqLw0KPj4+ICsgICAg ICAgICAgICAgaWYgKGNudHggPT0gMCkNCj4+PiArICAgICAgICAgICAgICAgICAgICAgY250eCA9 IHBlcl9jcHUocmVzZXJ2ZWRfY29udGV4dCwgaSk7DQo+Pj4gKw0KPj4+ICsgICAgICAgICAgICAg X19zZXRfYml0KGNudHggJiBhc2lkX21hc2ssIGNvbnRleHRfYXNpZF9tYXApOw0KPj4+ICsgICAg ICAgICAgICAgcGVyX2NwdShyZXNlcnZlZF9jb250ZXh0LCBpKSA9IGNudHg7DQo+Pj4gKyAgICAg fQ0KPj4+ICsNCj4+PiArICAgICAvKiBNYXJrIGxhc3QgQVNJRCBhcyB1c2VkIGJlY2F1c2UgaXQg aXMgdXNlZCBhdCBib290LXRpbWUgKi8NCj4+PiArICAgICBfX3NldF9iaXQoYXNpZF9tYXNrLCBj b250ZXh0X2FzaWRfbWFwKTsNCj4+IExvb2tzIHVubmVjZXNzYXJ5IGFzIHdlIGFsd2F5cyBzdGFy dCBmaW5kX25leHRfemVyb19iaXQgZnJvbSBpZHggMS4NCj4+PiArfQ0KPj4+ICsNCj4+PiArLyog Tm90ZTogbXVzdCBiZSBjYWxsZWQgd2l0aCBjb250ZXh0X2xvY2sgaGVsZCAqLw0KPj4+ICtzdGF0 aWMgdW5zaWduZWQgbG9uZyBfX25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLA0KPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKm5lZWRfdGxiX2ZsdXNoKQ0K Pj4+ICt7DQo+Pj4gKyAgICAgc3RhdGljIHUzMiBjdXJfaWR4ID0gMTsNCj4+PiArICAgICB1bnNp Z25lZCBsb25nIGNudHggPSBhdG9taWNfbG9uZ19yZWFkKCZtbS0+Y29udGV4dC5pZCk7DQo+Pj4g KyAgICAgdW5zaWduZWQgbG9uZyBhc2lkLCB2ZXIgPSBhdG9taWNfbG9uZ19yZWFkKCZjdXJyZW50 X3ZlcnNpb24pOw0KPj4+ICsNCj4+PiArICAgICBpZiAoY250eCAhPSAwKSB7DQo+Pj4gKyAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIG5ld2NudHggPSB2ZXIgfCAoY250eCAmIH5hc2lkX21hc2sp Ow0KPj4gU2hvdWxkbid0IHRoaXMgYmUgY250eCAmIGFzaWRfbWFzayA/DQo+Pj4gKw0KPj4+ICsg ICAgICAgICAgICAgLyoNCj4+PiArICAgICAgICAgICAgICAqIElmIG91ciBjdXJyZW50IENPTlRF WFQgd2FzIGFjdGl2ZSBkdXJpbmcgYSByb2xsb3Zlciwgd2UNCj4+PiArICAgICAgICAgICAgICAq IGNhbiBjb250aW51ZSB0byB1c2UgaXQgYW5kIHRoaXMgd2FzIGp1c3QgYSBmYWxzZSBhbGFybS4N Cj4+PiArICAgICAgICAgICAgICAqLw0KPj4+ICsgICAgICAgICAgICAgaWYgKGNoZWNrX3VwZGF0 ZV9yZXNlcnZlZF9jb250ZXh0KGNudHgsIG5ld2NudHgpKQ0KPj4+ICsgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gbmV3Y250eDsNCj4+PiArDQo+Pj4gKyAgICAgICAgICAgICAvKg0KPj4+ICsg ICAgICAgICAgICAgICogV2UgaGFkIGEgdmFsaWQgQ09OVEVYVCBpbiBhIHByZXZpb3VzIGxpZmUs IHNvIHRyeSB0bw0KPj4+ICsgICAgICAgICAgICAgICogcmUtdXNlIGl0IGlmIHBvc3NpYmxlLg0K Pj4+ICsgICAgICAgICAgICAgICovDQo+Pj4gKyAgICAgICAgICAgICBpZiAoIV9fdGVzdF9hbmRf c2V0X2JpdChjbnR4ICYgYXNpZF9tYXNrLCBjb250ZXh0X2FzaWRfbWFwKSkNCj4+PiArICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIG5ld2NudHg7DQo+Pj4gKyAgICAgfQ0KPj4+ICsNCj4+PiAr ICAgICAvKg0KPj4+ICsgICAgICAqIEFsbG9jYXRlIGEgZnJlZSBBU0lELiBJZiB3ZSBjYW4ndCBm aW5kIG9uZSB0aGVuIGluY3JlbWVudA0KPj4+ICsgICAgICAqIGN1cnJlbnRfdmVyc2lvbiBhbmQg Zmx1c2ggYWxsIEFTSURzLg0KPj4+ICsgICAgICAqLw0KPj4+ICsgICAgIGFzaWQgPSBmaW5kX25l eHRfemVyb19iaXQoY29udGV4dF9hc2lkX21hcCwgbnVtX2FzaWRzLCBjdXJfaWR4KTsNCj4+PiAr ICAgICBpZiAoYXNpZCAhPSBudW1fYXNpZHMpDQo+Pj4gKyAgICAgICAgICAgICBnb3RvIHNldF9h c2lkOw0KPj4+ICsNCj4+PiArICAgICAvKiBXZSdyZSBvdXQgb2YgQVNJRHMsIHNvIGluY3JlbWVu dCBjdXJyZW50X3ZlcnNpb24gKi8NCj4+PiArICAgICB2ZXIgPSBhdG9taWNfbG9uZ19hZGRfcmV0 dXJuX3JlbGF4ZWQoZmlyc3RfdmVyc2lvbiwgJmN1cnJlbnRfdmVyc2lvbik7DQo+Pj4gKw0KPj4+ ICsgICAgIC8qIEZsdXNoIGV2ZXJ5dGhpbmcgICovDQo+Pj4gKyAgICAgX19mbHVzaF9jb250ZXh0 KCk7DQo+Pj4gKyAgICAgKm5lZWRfdGxiX2ZsdXNoID0gdHJ1ZTsNCj4+PiArDQo+Pj4gKyAgICAg LyogV2UgaGF2ZSBtb3JlIEFTSURzIHRoYW4gQ1BVcywgc28gdGhpcyB3aWxsIGFsd2F5cyBzdWNj ZWVkICovDQo+Pj4gKyAgICAgYXNpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChjb250ZXh0X2FzaWRf bWFwLCBudW1fYXNpZHMsIDEpOw0KPj4+ICsNCj4+PiArc2V0X2FzaWQ6DQo+Pj4gKyAgICAgX19z ZXRfYml0KGFzaWQsIGNvbnRleHRfYXNpZF9tYXApOw0KPj4+ICsgICAgIGN1cl9pZHggPSBhc2lk Ow0KPj4+ICsgICAgIHJldHVybiBhc2lkIHwgdmVyOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0 aWMgdm9pZCBzZXRfbW1fYXNpZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGNw dSkNCj4+PiArew0KPj4+ICsgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+Pj4gKyAgICAgYm9v bCBuZWVkX3RsYl9mbHVzaCA9IGZhbHNlOw0KPj4+ICsgICAgIHVuc2lnbmVkIGxvbmcgY250eCwg b2xkX2FjdGl2ZV9jbnR4Ow0KPj4+ICsNCj4+PiArICAgICBjbnR4ID0gYXRvbWljX2xvbmdfcmVh ZCgmbW0tPmNvbnRleHQuaWQpOw0KPj4+ICsNCj4+PiArICAgICAvKg0KPj4+ICsgICAgICAqIElm IG91ciBhY3RpdmVfY29udGV4dCBpcyBub24temVybyBhbmQgdGhlIGNvbnRleHQgbWF0Y2hlcyB0 aGUNCj4+PiArICAgICAgKiBjdXJyZW50X3ZlcnNpb24sIHRoZW4gd2UgdXBkYXRlIHRoZSBhY3Rp dmVfY29udGV4dCBlbnRyeSB3aXRoIGENCj4+PiArICAgICAgKiByZWxheGVkIGNtcHhjaGcuDQo+ Pj4gKyAgICAgICoNCj4+PiArICAgICAgKiBGb2xsb3dpbmcgaXMgaG93IHdlIGhhbmRsZSByYWNp bmcgd2l0aCBhIGNvbmN1cnJlbnQgcm9sbG92ZXI6DQo+Pj4gKyAgICAgICoNCj4+PiArICAgICAg KiAtIFdlIGdldCBhIHplcm8gYmFjayBmcm9tIHRoZSBjbXB4Y2hnIGFuZCBlbmQgdXAgd2FpdGlu ZyBvbiB0aGUNCj4+PiArICAgICAgKiAgIGxvY2suIFRha2luZyB0aGUgbG9jayBzeW5jaHJvbmlz ZXMgd2l0aCB0aGUgcm9sbG92ZXIgYW5kIHNvDQo+Pj4gKyAgICAgICogICB3ZSBhcmUgZm9yY2Vk IHRvIHNlZSB0aGUgdXBkYXRlZCB2ZXJpb24uDQo+Pj4gKyAgICAgICoNCj4+PiArICAgICAgKiAt IFdlIGdldCBhIHZhbGlkIGNvbnRleHQgYmFjayBmcm9tIHRoZSBjbXB4Y2hnIHRoZW4gd2UgY29u dGludWUNCj4+PiArICAgICAgKiAgIHVzaW5nIG9sZCBBU0lEIGJlY2F1c2UgX19mbHVzaF9jb250 ZXh0KCkgd291bGQgaGF2ZSBtYXJrZWQgQVNJRA0KPj4+ICsgICAgICAqICAgb2YgYWN0aXZlX2Nv bnRleHQgYXMgdXNlZCBhbmQgbmV4dCBjb250ZXh0IHN3aXRjaCB3ZSB3aWxsIGFsbG9jYXRlDQo+ Pj4gKyAgICAgICogICBuZXcgY29udGV4dC4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBvbGRf YWN0aXZlX2NudHggPSBhdG9taWNfbG9uZ19yZWFkKCZwZXJfY3B1KGFjdGl2ZV9jb250ZXh0LCBj cHUpKTsNCj4+PiArICAgICBpZiAob2xkX2FjdGl2ZV9jbnR4ICYmDQo+Pj4gKyAgICAgICAgICEo KGNudHggXiBhdG9taWNfbG9uZ19yZWFkKCZjdXJyZW50X3ZlcnNpb24pKSA+PiBhc2lkX2JpdHMp ICYmDQo+PiBUaGlzIGxvb2tzIGhhcmQgdG8gcmVhZC4gUHJvYmFibHkNCj4+IChjbnR4ICZ+IGFz aWRfbWFzaykgPT0gYXRvbWljX2xvbmdfcmVhZCgmY3VycmVudF92ZXJzaW9uKQ0KPj4gaXMgY2xl YXJlci4NCj4+PiArICAgICAgICAgYXRvbWljX2xvbmdfY21weGNoZ19yZWxheGVkKCZwZXJfY3B1 KGFjdGl2ZV9jb250ZXh0LCBjcHUpLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb2xkX2FjdGl2ZV9jbnR4LCBjbnR4KSkNCj4+PiArICAgICAgICAgICAgIGdvdG8g c3dpdGNoX21tX2Zhc3Q7DQo+Pj4gKw0KPj4+ICsgICAgIHJhd19zcGluX2xvY2tfaXJxc2F2ZSgm Y29udGV4dF9sb2NrLCBmbGFncyk7DQo+PiBBbnkgcmVhc29uIHRoYXQgd2UgcHJlZmVyIHJhd18g aGVyZT8NCj4+PiArDQo+Pj4gKyAgICAgLyogQ2hlY2sgdGhhdCBvdXIgQVNJRCBiZWxvbmdzIHRv IHRoZSBjdXJyZW50X3ZlcnNpb24uICovDQo+Pj4gKyAgICAgY250eCA9IGF0b21pY19sb25nX3Jl YWQoJm1tLT5jb250ZXh0LmlkKTsNCj4+PiArICAgICBpZiAoKGNudHggXiBhdG9taWNfbG9uZ19y ZWFkKCZjdXJyZW50X3ZlcnNpb24pKSA+PiBhc2lkX2JpdHMpIHsNCj4+IFNhbWUgYXMgYWJvdmUs IHByb2JhYmx5DQo+PiAoY250eCAmfiBhc2lkX21hc2spICE9IGF0b21pY19sb25nX3JlYWQoJmN1 cnJlbnRfdmVyc2lvbikNCj4+IG1ha2VzIG1vcmUgc2Vuc2UuDQo+Pj4gKyAgICAgICAgICAgICBj bnR4ID0gX19uZXdfY29udGV4dChtbSwgJm5lZWRfdGxiX2ZsdXNoKTsNCj4+PiArICAgICAgICAg ICAgIGF0b21pY19sb25nX3NldCgmbW0tPmNvbnRleHQuaWQsIGNudHgpOw0KPj4+ICsgICAgIH0N Cj4+PiArDQo+Pj4gKyAgICAgYXRvbWljX2xvbmdfc2V0KCZwZXJfY3B1KGFjdGl2ZV9jb250ZXh0 LCBjcHUpLCBjbnR4KTsNCj4+PiArDQo+Pj4gKyAgICAgcmF3X3NwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmNvbnRleHRfbG9jaywgZmxhZ3MpOw0KPj4+ICsNCj4+PiArc3dpdGNoX21tX2Zhc3Q6DQo+ Pj4gKyAgICAgLyoNCj4+PiArICAgICAgKiBVc2UgdGhlIG9sZCBzcGJ0ciBuYW1lIGluc3RlYWQg b2YgdXNpbmcgdGhlIGN1cnJlbnQgc2F0cA0KPj4+ICsgICAgICAqIG5hbWUgdG8gc3VwcG9ydCBi aW51dGlscyAyLjI5IHdoaWNoIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUNCj4+PiArICAgICAgKiBw cml2aWxlZ2VkIElTQSAxLjEwIHlldC4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBjc3Jfd3Jp dGUoc3B0YnIsIHZpcnRfdG9fcGZuKG1tLT5wZ2QpIHwNCj4+PiArICAgICAgICAgICAgICAgKChj bnR4ICYgYXNpZF9tYXNrKSA8PCBTQVRQX0FTSURfU0hJRlQpIHwNCj4+PiArICAgICAgICAgICAg ICAgU0FUUF9NT0RFKTsNCj4+PiArDQo+Pj4gKyAgICAgaWYgKG5lZWRfdGxiX2ZsdXNoKQ0KPj4+ ICsgICAgICAgICAgICAgZmx1c2hfdGxiX2FsbCgpOw0KPj4gSSB0aGluayB5b3VyIGludGVudGlv biBoZXJlIGlzIHRvIGF2b2lkIGNhbGxpbmcgZmx1c2hfdGxiX2FsbCB3aGVuIElSUXMNCj4+IGFy ZSBvZmYgaW4gdGhlIGNyaXRpY2FsIHJlZ2lvbi4gSG93ZXZlciwgc3dpdGNoX21tIHdpbGwgYmUg Y2FsbGVkIGZyb20NCj4+IHNjaGVkdWxlciBhcyB3ZWxsIHdoaWNoIGFsc28gdHVybiBpcnFzIG9m Ziwgc28gdGhpcyBzdGlsbCBjYXVzZSBpc3N1ZS4gSQ0KPj4gdGhpbmsgYSBiZXR0ZXIgd2F5IGlz IHRvIGZvcmNlIGZsdXNoX3RsYl9hbGwgdG8gdXNlIFNCSSB3aGVuIElSUXMgYXJlDQo+PiBvZmYu IFdoYXQgZG8geW91IHRoaW5rPw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0aWMgdm9pZCBzZXRf bW1fbm9hc2lkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQ0KPj4+ICt7DQo+Pj4gKyAgICAgLyoNCj4+ PiArICAgICAgKiBVc2UgdGhlIG9sZCBzcGJ0ciBuYW1lIGluc3RlYWQgb2YgdXNpbmcgdGhlIGN1 cnJlbnQgc2F0cA0KPj4+ICsgICAgICAqIG5hbWUgdG8gc3VwcG9ydCBiaW51dGlscyAyLjI5IHdo aWNoIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUNCj4+PiArICAgICAgKiBwcml2aWxlZ2VkIElTQSAx LjEwIHlldC4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBjc3Jfd3JpdGUoc3B0YnIsIHZpcnRf dG9fcGZuKG1tLT5wZ2QpIHwgU0FUUF9NT0RFKTsNCj4+PiArDQo+Pj4gKyAgICAgLyoNCj4+PiAr ICAgICAgKiBzZmVuY2Uudm1hIGFmdGVyIFNBVFAgd3JpdGUuIFdlIGNhbGwgaXQgb24gTU0gY29u dGV4dCBpbnN0ZWFkIG9mDQo+Pj4gKyAgICAgICogY2FsbGluZyBsb2NhbF9mbHVzaF90bGJfYWxs IHRvIHByZXZlbnQgZ2xvYmFsIG1hcHBpbmdzIGZyb20gYmVpbmcNCj4+PiArICAgICAgKiBhZmZl Y3RlZC4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBsb2NhbF9mbHVzaF90bGJfbW0obW0pOw0K Pj4+ICt9DQo+Pj4gKw0KPj4+ICAgIC8qDQo+Pj4gICAgICogV2hlbiBuZWNlc3NhcnksIHBlcmZv cm1zIGEgZGVmZXJyZWQgaWNhY2hlIGZsdXNoIGZvciB0aGUgZ2l2ZW4gTU0gY29udGV4dCwNCj4+ PiAgICAgKiBvbiB0aGUgbG9jYWwgQ1BVLiAgUklTQy1WIGhhcyBubyBkaXJlY3QgbWVjaGFuaXNt IGZvciBpbnN0cnVjdGlvbiBjYWNoZQ0KPj4+IEBAIC01OCwyMCArMjU0LDQ5IEBAIHZvaWQgc3dp dGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsDQo+ Pj4gICAgICAgIGNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhwcmV2KSk7DQo+Pj4g ICAgICAgIGNwdW1hc2tfc2V0X2NwdShjcHUsIG1tX2NwdW1hc2sobmV4dCkpOw0KPj4+DQo+Pj4g LSAgICAgLyoNCj4+PiAtICAgICAgKiBVc2UgdGhlIG9sZCBzcGJ0ciBuYW1lIGluc3RlYWQgb2Yg dXNpbmcgdGhlIGN1cnJlbnQgc2F0cA0KPj4+IC0gICAgICAqIG5hbWUgdG8gc3VwcG9ydCBiaW51 dGlscyAyLjI5IHdoaWNoIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUNCj4+PiAtICAgICAgKiBwcml2 aWxlZ2VkIElTQSAxLjEwIHlldC4NCj4+PiAtICAgICAgKi8NCj4+PiAtICAgICBjc3Jfd3JpdGUo c3B0YnIsIHZpcnRfdG9fcGZuKG5leHQtPnBnZCkgfCBTQVRQX01PREUpOw0KPj4+ICsgICAgIGlm ICh1c2VfYXNpZF9hbGxvY2F0b3IpDQo+Pj4gKyAgICAgICAgICAgICBzZXRfbW1fYXNpZChuZXh0 LCBjcHUpOw0KPj4+ICsgICAgIGVsc2UNCj4+PiArICAgICAgICAgICAgIHNldF9tbV9ub2FzaWQo bmV4dCk7DQo+Pj4gKw0KPj4+ICsgICAgIGZsdXNoX2ljYWNoZV9kZWZlcnJlZChuZXh0KTsNCj4+ PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGludCBhc2lkc19pbml0KHZvaWQpDQo+Pj4gK3sNCj4+ PiArICAgICAvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBBU0lEIGJpdHMgaW4gSFcgKi8NCj4+PiAr ICAgICBhc2lkX2JpdHMgPSAoY3NyX3JlYWQoc3B0YnIpID4+IFNBVFBfQVNJRF9TSElGVCkgJiBT QVRQX0FTSURfTUFTSzsNCj4+PiArICAgICBhc2lkX2JpdHMgPSBmbHNfbG9uZyhhc2lkX2JpdHMp Ow0KPj4+ICsNCj4+PiArICAgICAvKiBQcmUtY29tcHV0ZSBBU0lEIGRldGFpbHMgKi8NCj4+PiAr ICAgICBudW1fYXNpZHMgPSAxIDw8IGFzaWRfYml0czsNCj4+PiArICAgICBhc2lkX21hc2sgPSBu dW1fYXNpZHMgLSAxOw0KPj4+ICsgICAgIGZpcnN0X3ZlcnNpb24gPSBudW1fYXNpZHM7DQo+PiBJ cyB0aGVyZSBhbnkgcmVhc29uIHdlIHdhbnQgdG8gaGF2ZSB0d28gc2V0LW9uY2UgdmFyaWFibGVz IHdpdGggc2FtZSB2YWx1ZT8NCj4+Pg0KPj4+ICAgICAgICAvKg0KPj4+IC0gICAgICAqIHNmZW5j ZS52bWEgYWZ0ZXIgU0FUUCB3cml0ZS4gV2UgY2FsbCBpdCBvbiBNTSBjb250ZXh0IGluc3RlYWQg b2YNCj4+PiAtICAgICAgKiBjYWxsaW5nIGxvY2FsX2ZsdXNoX3RsYl9hbGwgdG8gcHJldmVudCBn bG9iYWwgbWFwcGluZ3MgZnJvbSBiZWluZw0KPj4+IC0gICAgICAqIGFmZmVjdGVkLg0KPj4+ICsg ICAgICAqIFVzZSBBU0lEIGFsbG9jYXRvciBvbmx5IGlmIG51bWJlciBvZiBIVyBBU0lEcyBhcmUN Cj4+PiArICAgICAgKiBhdC1sZWFzdCB0d2ljZSBtb3JlIHRoYW4gQ1BVcw0KPj4+ICAgICAgICAg Ki8NCj4+PiAtICAgICBsb2NhbF9mbHVzaF90bGJfbW0obmV4dCk7DQo+Pj4gKyAgICAgdXNlX2Fz aWRfYWxsb2NhdG9yID0NCj4+PiArICAgICAgICAgICAgIChudW1fYXNpZHMgPD0gKDIgKiBudW1f cG9zc2libGVfY3B1cygpKSkgPyBmYWxzZSA6IHRydWU7DQo+Pj4NCj4+PiAtICAgICBmbHVzaF9p Y2FjaGVfZGVmZXJyZWQobmV4dCk7DQo+Pj4gLX0NCj4+PiArICAgICAvKiBTZXR1cCBBU0lEIGFs bG9jYXRvciBpZiBhdmFpbGFibGUgKi8NCj4+PiArICAgICBpZiAodXNlX2FzaWRfYWxsb2NhdG9y KSB7DQo+Pj4gKyAgICAgICAgICAgICBhdG9taWNfbG9uZ19zZXQoJmN1cnJlbnRfdmVyc2lvbiwg Zmlyc3RfdmVyc2lvbik7DQo+Pj4NCj4+PiArICAgICAgICAgICAgIGNvbnRleHRfYXNpZF9tYXAg PSBrY2FsbG9jKEJJVFNfVE9fTE9OR1MobnVtX2FzaWRzKSwNCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YoKmNvbnRleHRfYXNpZF9tYXApLCBHRlBfS0VSTkVMKTsN Cj4+PiArICAgICAgICAgICAgIGlmICghY29udGV4dF9hc2lkX21hcCkNCj4+PiArICAgICAgICAg ICAgICAgICAgICAgcGFuaWMoIkZhaWxlZCB0byBhbGxvY2F0ZSBiaXRtYXAgZm9yICVsdSBBU0lE c1xuIiwNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2FzaWRzKTsNCj4+PiAr DQo+Pj4gKyAgICAgICAgICAgICBfX3NldF9iaXQoYXNpZF9tYXNrLCBjb250ZXh0X2FzaWRfbWFw KTsNCj4+PiArDQo+Pj4gKyAgICAgICAgICAgICBwcl9pbmZvKCJBU0lEIGFsbG9jYXRvciB1c2lu ZyAlbHUgZW50cmllc1xuIiwgbnVtX2FzaWRzKTsNCj4+PiArICAgICB9IGVsc2Ugew0KPj4gSWYg d2UgZGVjaWRlIG5vdCB0byB1c2UgQVNJRCBhbGxvY2F0b3IsIHdlIHdpbGwgbmVlZCB0byBzZXQg QVNJRCBmaWVsZA0KPj4gdG8gemVybyBvbiAqYWxsIGhhcnRzKiBiZWZvcmUgd2UgZG8gb3VyIGZp cnN0IHN3aXRjaF9tbS4gT3RoZXJ3aXNlIHdlDQo+PiB3aWxsIGVuZCB1cCBhIGhhcnQgcnVubmlu ZyBub24temVybyBBU0lEIGFuZCBhbm90aGVyIHJ1bm5pbmcgemVybyBBU0lEDQo+PiB3aXRoIGRp ZmZlcmVudCBwYWdlIHRhYmxlLg0KPiANCj4gSSBmb3Jnb3QgdG8gYWRkcmVzcyB0aGlzIG9uZS4N Cj4gDQo+IEhvdyBhYm91dCB1c2luZyBTQVRQX0FTSURfTUFTSyBhcyBBU0lEIHdoZW4gd2UgYXJl IG5vdA0KPiB1c2luZyBBU0lEIGFsbG9jYXRvci4NCldlIGNhbid0LiBBU0lEIDAgaGFzIGEgc3Bl Y2lhbCBtZWFuaW5nIHdoaWNoIG1lYW5zIHRoYXQgd2UgZG9uJ3QgdXNlIA0KQVNJRC4gSWYgYW4g aW1wbGVtZW50YXRpb24gc3VwcG9ydHMgQVNJRCBidXQgaXQgZG9lcyBub3QgcHJvdmlkZSANCnN1 ZmZpY2llbnQgYml0cywgaWYgd2UgdXNlIHRoZSBsYXN0IEFTSUQgdGhlbiBpdCBjYXVzZXMgZGlm ZmVyZW50IGhhcnRzIA0KdG8gcnVuIGRpZmZlcmVudCBNTXMgd2l0aCB0aGUgc2FtZSBBU0lELCB2 aW9sYXRpbmcgdGhlIHNwZWMgd2hpY2ggc3RhdGVzIA0Kbm9uLXplcm8gQVNJRHMgbXVzdCBoYXZl IGNvbnNpc3RlbnQgbWVhbmluZyBhY3Jvc3MgaGFydHMuDQo+IA0KPiBVbmZvcnR1bmF0ZWx5LCB5 b3UgaGF2ZSBoYXJkY29kZWQgQVNJRCAjMCBpbiB5b3VyDQo+IGxvY2FsX3RsYl9mbHVzaF9tbSgp LiBXZSBuZWVkIGEgYmV0dGVyIEFQSSBzdWNoIGFzDQo+IGxvY2FsX3RsYl9mbHVzaF9hc2lkKCku DQo+IA0KV2VsbCwgdGhpcyBpcyB0aGUgQVBJIHJlcXVpcmVkIGJ5IExpbnV4LiBJZiB3ZSBjaGVj a291dCBteSBjb2RlIG9yIEFSTSdzIA0KY29kZSB5b3Ugd2lsbCBzZWUgdGhhdCB3ZSBuZWVkIGdl dCB0aGUgQVNJRCB3aXRoaW4gbG9jYWxfdGxiX2ZsdXNoX21tIA0KYW5kIGZsdXNoIHVzaW5nIHRo YXQgQVNJRC4NCj4+PiArICAgICAgICAgICAgIHByX2luZm8oIkFTSUQgYWxsb2NhdG9yIGRpc2Fi bGVkXG4iKTsNCj4+PiArICAgICB9DQo+Pj4gKw0KPj4+ICsgICAgIHJldHVybiAwOw0KPj4+ICt9 DQo+Pj4gK2Vhcmx5X2luaXRjYWxsKGFzaWRzX2luaXQpOw0KPj4+DQo=