From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A46BEC4CECE for ; Thu, 19 Sep 2019 14:26:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 249762053B for ; Thu, 19 Sep 2019 14:26:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="nZQ5aBDs" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387768AbfISO0Z (ORCPT ); Thu, 19 Sep 2019 10:26:25 -0400 Received: from mail-eopbgr810073.outbound.protection.outlook.com ([40.107.81.73]:42736 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732501AbfISO0V (ORCPT ); Thu, 19 Sep 2019 10:26:21 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X/JtAHSzI/f8mIPuKI5ZsMk0uaV82rbJlrBwak434+ZdXUcP64c+V4PiRW4uEgTcy8Fk+hHXYr1xM/930z5zmZ2sWg6H8Ow3S0zSLbHVGVcbXjMArsbN9tJWvK0KyJUuc9/bDXQSBMvLiW+qwy803shVEXkY5JJz0ijwa5IACl1ig9S7FzCzxVXZ/Z4zygV0pDsaHET/r6cxEJIYwvaLZCfJFGFqN6SpzjA7erHzmoMzxAnnTpaZl0OCH0wI/ufc/RBF0UDQfvhee9KrxHw4lFIXuduW64Txkskwt14zBmmCUkvgvSxenHGZ+07p5i75zM5XuPCJGnZIhaorDjoZQQ== 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=RyOlZ5spJy9bQ8yeunRYPL8i2P4OFgGLiT3JROfMFlU=; b=Aw4Khd9JTIcKAUhA3JMCtlXgVQ79VMcRIGdOtUUFyzMXxF0tm2ikoNGzrMQn0eWNkwz3qtK+KOJosmicIJtgHomf+BIRrj2zNCIGvh32MQgHBkMsWC7yOsEex+e6J4JJZZIzE7A895MngWNzEB9Ul4+0lQp8VasxikCX8OJsFaP8IbTM3JVN710j9qUxQQw9ned54gMKHFh4rdS4Nuh9O/o5t0wgU37ZMNazGwG8b3zF9obxLSAFr0ELmYVVmLuKYHwCqSp98jeDIdm4aWX8yAqNTXZvq9GqAb+3Q+4rDH7SgsD2u3y3J58GwevbS6bugXEtXb8F0UFz98Dumn+2Vw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RyOlZ5spJy9bQ8yeunRYPL8i2P4OFgGLiT3JROfMFlU=; b=nZQ5aBDsLLvp2fZJ8iqxSiUzE73jLrq2VIl5h04giNIVs+C3Z8BtT1eAWG3BlEq1QcZOjzII7nn+xMB91fG9W9067KXGTttVqnWwPtdFsX8kzkhTbgPGQZffEihwdErMN9wVN8OOmVt5iRijPOCPiG7Ie7iaj7BuESCqeTBWLJs= Received: from MN2PR11MB4063.namprd11.prod.outlook.com (20.179.149.217) by MN2PR11MB3807.namprd11.prod.outlook.com (20.178.254.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.18; Thu, 19 Sep 2019 14:25:49 +0000 Received: from MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8]) by MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8%3]) with mapi id 15.20.2263.023; Thu, 19 Sep 2019 14:25:49 +0000 From: Jerome Pouiller To: "devel@driverdev.osuosl.org" , "linux-wireless@vger.kernel.org" CC: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , David Le Goff , Jerome Pouiller Subject: [PATCH v3 20/20] staging: wfx: implement the rest of mac80211 API Thread-Topic: [PATCH v3 20/20] staging: wfx: implement the rest of mac80211 API Thread-Index: AQHVbvYhDOBJQRM2cEiISMXcCWNVQQ== Date: Thu, 19 Sep 2019 14:25:48 +0000 Message-ID: <20190919142527.31797-21-Jerome.Pouiller@silabs.com> References: <20190919142527.31797-1-Jerome.Pouiller@silabs.com> In-Reply-To: <20190919142527.31797-1-Jerome.Pouiller@silabs.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Jerome.Pouiller@silabs.com; x-originating-ip: [37.71.187.125] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4c8e2c79-c739-4459-7af5-08d73d0d4504 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600167)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:MN2PR11MB3807; x-ms-traffictypediagnostic: MN2PR11MB3807: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:117; x-forefront-prvs: 016572D96D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(366004)(396003)(346002)(39850400004)(376002)(199004)(189003)(486006)(30864003)(76176011)(66066001)(66946007)(66556008)(91956017)(66476007)(2906002)(5660300002)(71200400001)(76116006)(8936002)(36756003)(476003)(110136005)(54906003)(2616005)(25786009)(316002)(11346002)(81166006)(81156014)(8676002)(446003)(102836004)(6506007)(2501003)(14444005)(256004)(6116002)(3846002)(107886003)(26005)(6486002)(66574012)(64756008)(71190400001)(6436002)(6512007)(66446008)(1076003)(7736002)(86362001)(186003)(99286004)(4326008)(14454004)(478600001)(305945005)(579004)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:MN2PR11MB3807;H:MN2PR11MB4063.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: silabs.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: /cZsooR31kdMkQattaw3fW/b3EcUWqWERm63iRQTUaBG27FP/unes2OSL8qzNpHMbP9xzBCiXqk0sC9Jo3IG830VIYSbQm1HLYcrYa1tozHSZtrJvQevQC/2j4WhgdRM53yZyPAuLd/plS050CZzBAWG2cdOjImEx33HtlCxY6eJseSLrJfPr5G5zQZN2mxc0saJKLqr8bmmH5CSBtPLEavMQeQrXQBkZdvb5qlhZXfVFELdt54bgjDufWweiHaIt4Pvrxt7g4RKEA/flEX/iDweo0+3G58LmGOF3A9xnCYq6e47MrweabeOEGxL9x5ntC/LNhvU2O0gn+tEauzF3QcPlcCUDq4TD7vDKiT9oys+Jpt1TonMxxB+EHvlmJd/r46a0tRmcCMkksQFe6Qpxw+9iCPyQ/kwD4DW0E2Tp5I= Content-Type: text/plain; charset="utf-8" Content-ID: <597335DE2DC5984E98C9498B783C9E6D@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4c8e2c79-c739-4459-7af5-08d73d0d4504 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 14:25:48.1774 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: wgqXiOgXUA7INXdwEpXciIp1V+rtbeM1z57jtjy9wRyCEgEinJiQ+yBJDDtEb1WddwtNXMZZUBwEqWRwi6mVgg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB3807 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPg0KDQpG aW5pc2ggdG8gZmlsbCBzdHJ1Y3QgaWVlZTgwMjExX29wcyB3aXRoIG5lY2Vzc2FyeSBjYWxsYmFj a3MuIERyaXZlciBpcw0Kbm93IHJlYWR5IHRvIGJlIHJlZ2lzdGVyZWQgdG8gbWFjODAyMTEuDQoN ClNpZ25lZC1vZmYtYnk6IErDqXLDtG1lIFBvdWlsbGVyIDxqZXJvbWUucG91aWxsZXJAc2lsYWJz LmNvbT4NCi0tLQ0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jIHwgICAyNiArDQogZHJp dmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMgfCAgIDE2ICsNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4 L2RlYnVnLmMgICB8ICAgIDIgKw0KIGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMgIHwgICA1 MyArKw0KIGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmMgIHwgICAgMSArDQogZHJpdmVycy9z dGFnaW5nL3dmeC9tYWluLmMgICAgfCAgMTMzICsrKw0KIGRyaXZlcnMvc3RhZ2luZy93ZngvcXVl dWUuYyAgIHwgICA4MCArKw0KIGRyaXZlcnMvc3RhZ2luZy93Zngvc2Nhbi5jICAgIHwgICA0MCAr DQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYyAgICAgfCAxNDQzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLQ0KIGRyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmggICAgIHwgICA2NSAr Kw0KIGRyaXZlcnMvc3RhZ2luZy93Zngvd2Z4LmggICAgIHwgICA1MSArKw0KIDExIGZpbGVzIGNo YW5nZWQsIDE5MDcgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRh X3J4LmMNCmluZGV4IDNiMzExN2IyZWRhYy4uM2E3OTA4OWM4NTAxIDEwMDY0NA0KLS0tIGEvZHJp dmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmMNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0 YV9yeC5jDQpAQCAtMjEsNiArMjEsOCBAQCBzdGF0aWMgaW50IHdmeF9oYW5kbGVfcHNwb2xsKHN0 cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KIAl1MzIgcHNwb2xsX21h c2sgPSAwOw0KIAlpbnQgaTsNCiANCisJaWYgKHd2aWYtPnN0YXRlICE9IFdGWF9TVEFURV9BUCkN CisJCXJldHVybiAxOw0KIAlpZiAoIWV0aGVyX2FkZHJfZXF1YWwod3ZpZi0+dmlmLT5hZGRyLCBw c3BvbGwtPmJzc2lkKSkNCiAJCXJldHVybiAxOw0KIA0KQEAgLTE2Miw2ICsxNjQsMzAgQEAgdm9p ZCB3ZnhfcnhfY2Ioc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBoaWZfaW5kX3J4ICphcmcs IHN0cnVjdCBza19idWZmICpza2INCiAJICAgICYmIGFyZy0+cnhfZmxhZ3MubWF0Y2hfdWNfYWRk cg0KIAkgICAgJiYgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9CQUNL KQ0KIAkJZ290byBkcm9wOw0KKwlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmcmFtZS0+ZnJhbWVf Y29udHJvbCkNCisJICAgICYmICFhcmctPnN0YXR1cyAmJiB3dmlmLT52aWYNCisJICAgICYmIGV0 aGVyX2FkZHJfZXF1YWwoaWVlZTgwMjExX2dldF9TQShmcmFtZSksIHd2aWYtPnZpZi0+YnNzX2Nv bmYuYnNzaWQpKSB7DQorCQljb25zdCB1OCAqdGltX2llOw0KKwkJdTggKmllcyA9IG1nbXQtPnUu YmVhY29uLnZhcmlhYmxlOw0KKwkJc2l6ZV90IGllc19sZW4gPSBza2ItPmxlbiAtIChpZXMgLSBz a2ItPmRhdGEpOw0KKw0KKwkJdGltX2llID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9USU0s IGllcywgaWVzX2xlbik7DQorCQlpZiAodGltX2llKSB7DQorCQkJc3RydWN0IGllZWU4MDIxMV90 aW1faWUgKnRpbSA9IChzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqKSAmdGltX2llWzJdOw0KKw0K KwkJCWlmICh3dmlmLT5kdGltX3BlcmlvZCAhPSB0aW0tPmR0aW1fcGVyaW9kKSB7DQorCQkJCXd2 aWYtPmR0aW1fcGVyaW9kID0gdGltLT5kdGltX3BlcmlvZDsNCisJCQkJc2NoZWR1bGVfd29yaygm d3ZpZi0+c2V0X2JlYWNvbl93YWtldXBfcGVyaW9kX3dvcmspOw0KKwkJCX0NCisJCX0NCisNCisJ CS8qIERpc2FibGUgYmVhY29uIGZpbHRlciBvbmNlIHdlJ3JlIGFzc29jaWF0ZWQuLi4gKi8NCisJ CWlmICh3dmlmLT5kaXNhYmxlX2JlYWNvbl9maWx0ZXIgJiYNCisJCSAgICAod3ZpZi0+dmlmLT5i c3NfY29uZi5hc3NvYyB8fCB3dmlmLT52aWYtPmJzc19jb25mLmlic3Nfam9pbmVkKSkgew0KKwkJ CXd2aWYtPmRpc2FibGVfYmVhY29uX2ZpbHRlciA9IGZhbHNlOw0KKwkJCXNjaGVkdWxlX3dvcmso Jnd2aWYtPnVwZGF0ZV9maWx0ZXJpbmdfd29yayk7DQorCQl9DQorCX0NCiANCiAJaWYgKGVhcmx5 X2RhdGEpIHsNCiAJCXNwaW5fbG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4 L2RhdGFfdHguYw0KaW5kZXggMjE3ZDNjMjcwNzA2Li43ZjI3OTlmYmRhZmUgMTAwNjQ0DQotLS0g YS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dm eC9kYXRhX3R4LmMNCkBAIC0xMCw2ICsxMCw3IEBADQogI2luY2x1ZGUgImRhdGFfdHguaCINCiAj aW5jbHVkZSAid2Z4LmgiDQogI2luY2x1ZGUgImJoLmgiDQorI2luY2x1ZGUgInN0YS5oIg0KICNp bmNsdWRlICJxdWV1ZS5oIg0KICNpbmNsdWRlICJkZWJ1Zy5oIg0KICNpbmNsdWRlICJ0cmFjZXMu aCINCkBAIC0zNTksNiArMzYwLDkgQEAgdm9pZCB3ZnhfbGlua19pZF9nY193b3JrKHN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yaykNCiAJdTMyIG1hc2s7DQogCWludCBpOw0KIA0KKwlpZiAod3ZpZi0+ c3RhdGUgIT0gV0ZYX1NUQVRFX0FQKQ0KKwkJcmV0dXJuOw0KKw0KIAl3ZnhfdHhfbG9ja19mbHVz aCh3dmlmLT53ZGV2KTsNCiAJc3Bpbl9sb2NrX2JoKCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCiAJ Zm9yIChpID0gMDsgaSA8IFdGWF9NQVhfU1RBX0lOX0FQX01PREU7ICsraSkgew0KQEAgLTcyOSwx NCArNzMzLDI2IEBAIHZvaWQgd2Z4X3R4X2NvbmZpcm1fY2Ioc3RydWN0IHdmeF92aWYgKnd2aWYs IHN0cnVjdCBoaWZfY25mX3R4ICphcmcpDQogCW1lbXNldCh0eF9pbmZvLT5wYWQsIDAsIHNpemVv Zih0eF9pbmZvLT5wYWQpKTsNCiANCiAJaWYgKCFhcmctPnN0YXR1cykgew0KKwkJaWYgKHd2aWYt PmJzc19sb3NzX3N0YXRlICYmIGFyZy0+cGFja2V0X2lkID09IHd2aWYtPmJzc19sb3NzX2NvbmZp cm1faWQpDQorCQkJd2Z4X2NxbV9ic3Nsb3NzX3NtKHd2aWYsIDAsIDEsIDApOw0KIAkJdHhfaW5m by0+c3RhdHVzLnR4X3RpbWUgPSBhcmctPm1lZGlhX2RlbGF5IC0gYXJnLT50eF9xdWV1ZV9kZWxh eTsNCiAJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQ0KIAkJ CXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX05PQUNLX1RSQU5TTUlUVEVEOw0K IAkJZWxzZQ0KIAkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsNCiAJ fSBlbHNlIGlmIChhcmctPnN0YXR1cyA9PSBISUZfUkVRVUVVRSkgew0KKwkJLyogIlJFUVVFVUUi IG1lYW5zICJpbXBsaWNpdCBzdXNwZW5kIiAqLw0KKwkJc3RydWN0IGhpZl9pbmRfc3VzcGVuZF9y ZXN1bWVfdHggc3VzcGVuZCA9IHsNCisJCQkuc3VzcGVuZF9yZXN1bWVfZmxhZ3MucmVzdW1lID0g MCwNCisJCQkuc3VzcGVuZF9yZXN1bWVfZmxhZ3MuYmNfbWNfb25seSA9IDEsDQorCQl9Ow0KKw0K IAkJV0FSTighYXJnLT50eF9yZXN1bHRfZmxhZ3MucmVxdWV1ZSwgImluY29oZXJlbnQgc3RhdHVz IGFuZCByZXN1bHRfZmxhZ3MiKTsNCisJCXdmeF9zdXNwZW5kX3Jlc3VtZSh3dmlmLCAmc3VzcGVu ZCk7DQogCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsN CisJfSBlbHNlIHsNCisJCWlmICh3dmlmLT5ic3NfbG9zc19zdGF0ZSAmJiBhcmctPnBhY2tldF9p ZCA9PSB3dmlmLT5ic3NfbG9zc19jb25maXJtX2lkKQ0KKwkJCXdmeF9jcW1fYnNzbG9zc19zbSh3 dmlmLCAwLCAwLCAxKTsNCiAJfQ0KIAl3ZnhfcGVuZGluZ19yZW1vdmUod3ZpZi0+d2Rldiwgc2ti KTsNCiB9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5jIGIvZHJpdmVy cy9zdGFnaW5nL3dmeC9kZWJ1Zy5jDQppbmRleCAxZTIzYmI1YmRlM2UuLjMyNjFiMjY3YzM4NSAx MDA2NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvZGVidWcuYw0KKysrIGIvZHJpdmVycy9z dGFnaW5nL3dmeC9kZWJ1Zy5jDQpAQCAtMTEsNyArMTEsOSBAQA0KIA0KICNpbmNsdWRlICJkZWJ1 Zy5oIg0KICNpbmNsdWRlICJ3ZnguaCINCisjaW5jbHVkZSAic3RhLmgiDQogI2luY2x1ZGUgIm1h aW4uaCINCisjaW5jbHVkZSAiaGlmX3R4LmgiDQogI2luY2x1ZGUgImhpZl90eF9taWIuaCINCiAN CiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L2hpZl9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguYw0KaW5kZXggZDM4 NmZhYjBhOTBmLi41MmRiMDJkM2FhNDEgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4 L2hpZl9yeC5jDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9yeC5jDQpAQCAtMTIsNiAr MTIsOCBAQA0KICNpbmNsdWRlICJoaWZfcnguaCINCiAjaW5jbHVkZSAid2Z4LmgiDQogI2luY2x1 ZGUgInNjYW4uaCINCisjaW5jbHVkZSAiYmguaCINCisjaW5jbHVkZSAic3RhLmgiDQogI2luY2x1 ZGUgImRhdGFfcnguaCINCiAjaW5jbHVkZSAic2VjdXJlX2xpbmsuaCINCiAjaW5jbHVkZSAiaGlm X2FwaV9jbWQuaCINCkBAIC0xNDQsNiArMTQ2LDQzIEBAIHN0YXRpYyBpbnQgaGlmX3JlY2VpdmVf aW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKmhpZiwgdm9p DQogCXJldHVybiAwOw0KIH0NCiANCitzdGF0aWMgaW50IGhpZl9ldmVudF9pbmRpY2F0aW9uKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCB2b2lkICpidWYpDQorew0K KwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFj ZSk7DQorCXN0cnVjdCBoaWZfaW5kX2V2ZW50ICpib2R5ID0gYnVmOw0KKwlzdHJ1Y3Qgd2Z4X2hp Zl9ldmVudCAqZXZlbnQ7DQorCWludCBmaXJzdDsNCisNCisJV0FSTl9PTighd3ZpZik7DQorCWlm ICghd3ZpZikNCisJCXJldHVybiAwOw0KKw0KKwlldmVudCA9IGt6YWxsb2Moc2l6ZW9mKCpldmVu dCksIEdGUF9LRVJORUwpOw0KKwlpZiAoIWV2ZW50KQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQor CW1lbWNweSgmZXZlbnQtPmV2dCwgYm9keSwgc2l6ZW9mKHN0cnVjdCBoaWZfaW5kX2V2ZW50KSk7 DQorCXNwaW5fbG9jaygmd3ZpZi0+ZXZlbnRfcXVldWVfbG9jayk7DQorCWZpcnN0ID0gbGlzdF9l bXB0eSgmd3ZpZi0+ZXZlbnRfcXVldWUpOw0KKwlsaXN0X2FkZF90YWlsKCZldmVudC0+bGluaywg Jnd2aWYtPmV2ZW50X3F1ZXVlKTsNCisJc3Bpbl91bmxvY2soJnd2aWYtPmV2ZW50X3F1ZXVlX2xv Y2spOw0KKw0KKwlpZiAoZmlyc3QpDQorCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT5ldmVudF9oYW5k bGVyX3dvcmspOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBoaWZfcG1fbW9k ZV9jb21wbGV0ZV9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21z ZyAqaGlmLCB2b2lkICpidWYpDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9f d3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7DQorDQorCVdBUk5fT04oIXd2aWYpOw0KKwljb21w bGV0ZSgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQogc3RhdGljIGludCBoaWZfc2Nhbl9jb21wbGV0ZV9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCB2b2lkICpidWYpDQogew0KIAlzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7DQpAQCAtMTY1 LDYgKzIwNCwxNyBAQCBzdGF0aWMgaW50IGhpZl9qb2luX2NvbXBsZXRlX2luZGljYXRpb24oc3Ry dWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBoaWZfbXNnICpoaQ0KIAlyZXR1cm4gMDsNCiB9DQog DQorc3RhdGljIGludCBoaWZfc3VzcGVuZF9yZXN1bWVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2Rl diAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKmhpZiwgdm9pZCAqYnVmKQ0KK3sNCisJc3RydWN0IHdm eF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOw0KKwlzdHJ1 Y3QgaGlmX2luZF9zdXNwZW5kX3Jlc3VtZV90eCAqYm9keSA9IGJ1ZjsNCisNCisJV0FSTl9PTigh d3ZpZik7DQorCXdmeF9zdXNwZW5kX3Jlc3VtZSh3dmlmLCBib2R5KTsNCisNCisJcmV0dXJuIDA7 DQorfQ0KKw0KIHN0YXRpYyBpbnQgaGlmX2Vycm9yX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYg KndkZXYsIHN0cnVjdCBoaWZfbXNnICpoaWYsIHZvaWQgKmJ1ZikNCiB7DQogCXN0cnVjdCBoaWZf aW5kX2Vycm9yICpib2R5ID0gYnVmOw0KQEAgLTI0Miw4ICsyOTIsMTEgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCB7DQogCXsgSElGX0lORF9JRF9TVEFSVFVQLCAgICAgICAgICAgICAgaGlmX3N0YXJ0 dXBfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfV0FLRVVQLCAgICAgICAgICAgICAgIGhp Zl93YWtldXBfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfSk9JTl9DT01QTEVURSwgICAg ICAgIGhpZl9qb2luX2NvbXBsZXRlX2luZGljYXRpb24gfSwNCisJeyBISUZfSU5EX0lEX1NFVF9Q TV9NT0RFX0NNUEwsICAgICBoaWZfcG1fbW9kZV9jb21wbGV0ZV9pbmRpY2F0aW9uIH0sDQogCXsg SElGX0lORF9JRF9TQ0FOX0NNUEwsICAgICAgICAgICAgaGlmX3NjYW5fY29tcGxldGVfaW5kaWNh dGlvbiB9LA0KKwl7IEhJRl9JTkRfSURfU1VTUEVORF9SRVNVTUVfVFgsICAgIGhpZl9zdXNwZW5k X3Jlc3VtZV9pbmRpY2F0aW9uIH0sDQogCXsgSElGX0lORF9JRF9TTF9FWENIQU5HRV9QVUJfS0VZ UywgaGlmX2tleXNfaW5kaWNhdGlvbiB9LA0KKwl7IEhJRl9JTkRfSURfRVZFTlQsICAgICAgICAg ICAgICAgIGhpZl9ldmVudF9pbmRpY2F0aW9uIH0sDQogCXsgSElGX0lORF9JRF9HRU5FUklDLCAg ICAgICAgICAgICAgaGlmX2dlbmVyaWNfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfRVJS T1IsICAgICAgICAgICAgICAgIGhpZl9lcnJvcl9pbmRpY2F0aW9uIH0sDQogCXsgSElGX0lORF9J RF9FWENFUFRJT04sICAgICAgICAgICAgaGlmX2V4Y2VwdGlvbl9pbmRpY2F0aW9uIH0sDQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy93 ZngvaGlmX3R4LmMNCmluZGV4IDE1N2FiMTc3YjczZi4uMmQ0MDIyNWEwZmNlIDEwMDY0NA0KLS0t IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHguYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dm eC9oaWZfdHguYw0KQEAgLTE0LDYgKzE0LDcgQEANCiAjaW5jbHVkZSAiYmguaCINCiAjaW5jbHVk ZSAiaHdpby5oIg0KICNpbmNsdWRlICJkZWJ1Zy5oIg0KKyNpbmNsdWRlICJzdGEuaCINCiANCiB2 b2lkIHdmeF9pbml0X2hpZl9jbWQoc3RydWN0IHdmeF9oaWZfY21kICpoaWZfY21kKQ0KIHsNCmRp ZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy93 ZngvbWFpbi5jDQppbmRleCBlN2JiYTI0YWFlMGIuLmZlOWE4OTcwMzg5NyAxMDA2NDQNCi0tLSBh L2RyaXZlcnMvc3RhZ2luZy93ZngvbWFpbi5jDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L21h aW4uYw0KQEAgLTUwLDE0ICs1MCwxMTIgQEAgc3RhdGljIGNoYXIgKnNsa19rZXk7DQogbW9kdWxl X3BhcmFtKHNsa19rZXksIGNoYXJwLCAwNjAwKTsNCiBNT0RVTEVfUEFSTV9ERVNDKHNsa19rZXks ICJzZWNyZXQga2V5IGZvciBzZWN1cmUgbGluayAoZXhwZWN0IDY0IGhleGRlY2ltYWwgZGlnaXRz KS4iKTsNCiANCisjZGVmaW5lIFJBVEVUQUJfRU5UKF9yYXRlLCBfcmF0ZWlkLCBfZmxhZ3MpIHsg XA0KKwkuYml0cmF0ZSAgPSAoX3JhdGUpLCAgIFwNCisJLmh3X3ZhbHVlID0gKF9yYXRlaWQpLCBc DQorCS5mbGFncyAgICA9IChfZmxhZ3MpLCAgXA0KK30NCisNCitzdGF0aWMgc3RydWN0IGllZWU4 MDIxMV9yYXRlIHdmeF9yYXRlc1tdID0gew0KKwlSQVRFVEFCX0VOVCgxMCwgIDAsICAwKSwNCisJ UkFURVRBQl9FTlQoMjAsICAxLCAgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLA0KKwlS QVRFVEFCX0VOVCg1NSwgIDIsICBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksDQorCVJB VEVUQUJfRU5UKDExMCwgMywgIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwNCisJUkFU RVRBQl9FTlQoNjAsICA2LCAgMCksDQorCVJBVEVUQUJfRU5UKDkwLCAgNywgIDApLA0KKwlSQVRF VEFCX0VOVCgxMjAsIDgsICAwKSwNCisJUkFURVRBQl9FTlQoMTgwLCA5LCAgMCksDQorCVJBVEVU QUJfRU5UKDI0MCwgMTAsIDApLA0KKwlSQVRFVEFCX0VOVCgzNjAsIDExLCAwKSwNCisJUkFURVRB Ql9FTlQoNDgwLCAxMiwgMCksDQorCVJBVEVUQUJfRU5UKDU0MCwgMTMsIDApLA0KK307DQorDQor I2RlZmluZSBDSEFOMkcoX2NoYW5uZWwsIF9mcmVxLCBfZmxhZ3MpIHsgXA0KKwkuYmFuZCA9IE5M ODAyMTFfQkFORF8yR0haLCBcDQorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksICAgIFwNCisJLmh3 X3ZhbHVlID0gKF9jaGFubmVsKSwgICAgXA0KKwkuZmxhZ3MgPSAoX2ZsYWdzKSwgICAgICAgICBc DQorCS5tYXhfYW50ZW5uYV9nYWluID0gMCwgICAgIFwNCisJLm1heF9wb3dlciA9IDMwLCAgICAg ICAgICAgXA0KK30NCisNCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHdmeF8yZ2h6 X2NoYW50YWJsZVtdID0gew0KKwlDSEFOMkcoMSwgIDI0MTIsIDApLA0KKwlDSEFOMkcoMiwgIDI0 MTcsIDApLA0KKwlDSEFOMkcoMywgIDI0MjIsIDApLA0KKwlDSEFOMkcoNCwgIDI0MjcsIDApLA0K KwlDSEFOMkcoNSwgIDI0MzIsIDApLA0KKwlDSEFOMkcoNiwgIDI0MzcsIDApLA0KKwlDSEFOMkco NywgIDI0NDIsIDApLA0KKwlDSEFOMkcoOCwgIDI0NDcsIDApLA0KKwlDSEFOMkcoOSwgIDI0NTIs IDApLA0KKwlDSEFOMkcoMTAsIDI0NTcsIDApLA0KKwlDSEFOMkcoMTEsIDI0NjIsIDApLA0KKwlD SEFOMkcoMTIsIDI0NjcsIDApLA0KKwlDSEFOMkcoMTMsIDI0NzIsIDApLA0KKwlDSEFOMkcoMTQs IDI0ODQsIDApLA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9y dGVkX2JhbmQgd2Z4X2JhbmRfMmdoeiA9IHsNCisJLmNoYW5uZWxzID0gd2Z4XzJnaHpfY2hhbnRh YmxlLA0KKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUod2Z4XzJnaHpfY2hhbnRhYmxlKSwNCisJ LmJpdHJhdGVzID0gd2Z4X3JhdGVzLA0KKwkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUod2Z4X3Jh dGVzKSwNCisJLmh0X2NhcCA9IHsNCisJCS8vIFJlY2VpdmUgY2Fwcw0KKwkJLmNhcCA9IElFRUU4 MDIxMV9IVF9DQVBfR1JOX0ZMRCB8IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwIHwNCisJCSAgICAg ICBJRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVSB8ICgxIDw8IElFRUU4MDIxMV9IVF9DQVBfUlhf U1RCQ19TSElGVCksDQorCQkuaHRfc3VwcG9ydGVkID0gMSwNCisJCS5hbXBkdV9mYWN0b3IgPSBJ RUVFODAyMTFfSFRfTUFYX0FNUERVXzE2SywNCisJCS5hbXBkdV9kZW5zaXR5ID0gSUVFRTgwMjEx X0hUX01QRFVfREVOU0lUWV9OT05FLA0KKwkJLm1jcyA9IHsNCisJCQkucnhfbWFzayA9IHsgMHhG RiB9LCAvLyBNQ1MwIHRvIE1DUzcNCisJCQkucnhfaGlnaGVzdCA9IDY1LA0KKwkJCS50eF9wYXJh bXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQsDQorCQl9LA0KKwl9LA0KK307DQorDQor c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgd2Rldl9pZmFjZV9saW1p dHNbXSA9IHsNCisJeyAubWF4ID0gMSwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJ T04pIH0sDQorCXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfSwN Cit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9u IHdmeF9pZmFjZV9jb21iaW5hdGlvbnNbXSA9IHsNCisJew0KKwkJLm51bV9kaWZmZXJlbnRfY2hh bm5lbHMgPSAyLA0KKwkJLm1heF9pbnRlcmZhY2VzID0gMiwNCisJCS5saW1pdHMgPSB3ZGV2X2lm YWNlX2xpbWl0cywNCisJCS5uX2xpbWl0cyA9IEFSUkFZX1NJWkUod2Rldl9pZmFjZV9saW1pdHMp LA0KKwl9DQorfTsNCisNCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2Z4X29w cyA9IHsNCiAJLnN0YXJ0CQkJPSB3Znhfc3RhcnQsDQogCS5zdG9wCQkJPSB3Znhfc3RvcCwNCiAJ LmFkZF9pbnRlcmZhY2UJCT0gd2Z4X2FkZF9pbnRlcmZhY2UsDQogCS5yZW1vdmVfaW50ZXJmYWNl CT0gd2Z4X3JlbW92ZV9pbnRlcmZhY2UsDQorCS5jb25maWcJCQk9IHdmeF9jb25maWcsDQogCS50 eAkJCT0gd2Z4X3R4LA0KKwkuY29uZl90eAkJPSB3ZnhfY29uZl90eCwNCiAJLmh3X3NjYW4JCT0g d2Z4X2h3X3NjYW4sDQorCS5zdGFfYWRkCQk9IHdmeF9zdGFfYWRkLA0KKwkuc3RhX3JlbW92ZQkJ PSB3Znhfc3RhX3JlbW92ZSwNCisJLnN0YV9ub3RpZnkJCT0gd2Z4X3N0YV9ub3RpZnksDQorCS5z ZXRfdGltCQk9IHdmeF9zZXRfdGltLA0KIAkuc2V0X2tleQkJPSB3Znhfc2V0X2tleSwNCisJLnNl dF9ydHNfdGhyZXNob2xkCT0gd2Z4X3NldF9ydHNfdGhyZXNob2xkLA0KKwkuYnNzX2luZm9fY2hh bmdlZAk9IHdmeF9ic3NfaW5mb19jaGFuZ2VkLA0KKwkucHJlcGFyZV9tdWx0aWNhc3QJPSB3Znhf cHJlcGFyZV9tdWx0aWNhc3QsDQorCS5jb25maWd1cmVfZmlsdGVyCT0gd2Z4X2NvbmZpZ3VyZV9m aWx0ZXIsDQorCS5hbXBkdV9hY3Rpb24JCT0gd2Z4X2FtcGR1X2FjdGlvbiwNCisJLmZsdXNoCQkJ PSB3ZnhfZmx1c2gsDQorCS5hZGRfY2hhbmN0eAkJPSB3ZnhfYWRkX2NoYW5jdHgsDQorCS5yZW1v dmVfY2hhbmN0eAkJPSB3ZnhfcmVtb3ZlX2NoYW5jdHgsDQorCS5jaGFuZ2VfY2hhbmN0eAkJPSB3 ZnhfY2hhbmdlX2NoYW5jdHgsDQorCS5hc3NpZ25fdmlmX2NoYW5jdHgJPSB3ZnhfYXNzaWduX3Zp Zl9jaGFuY3R4LA0KKwkudW5hc3NpZ25fdmlmX2NoYW5jdHgJPSB3ZnhfdW5hc3NpZ25fdmlmX2No YW5jdHgsDQogfTsNCiANCiBib29sIHdmeF9hcGlfb2xkZXJfdGhhbihzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwgaW50IG1ham9yLCBpbnQgbWlub3IpDQpAQCAtMTk4LDYgKzI5NiwxNiBAQCBzdHJ1Y3Qg d2Z4X2RldiAqd2Z4X2luaXRfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwNCiANCiAJU0VUX0lF RUU4MDIxMV9ERVYoaHcsIGRldik7DQogDQorCWllZWU4MDIxMV9od19zZXQoaHcsIE5FRURfRFRJ TV9CRUZPUkVfQVNTT0MpOw0KKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBUWF9BTVBEVV9TRVRVUF9J Tl9IVyk7DQorCWllZWU4MDIxMV9od19zZXQoaHcsIEFNUERVX0FHR1JFR0FUSU9OKTsNCisJaWVl ZTgwMjExX2h3X3NldChodywgQ09OTkVDVElPTl9NT05JVE9SKTsNCisJaWVlZTgwMjExX2h3X3Nl dChodywgUkVQT1JUU19UWF9BQ0tfU1RBVFVTKTsNCisJaWVlZTgwMjExX2h3X3NldChodywgU1VQ UE9SVFNfRFlOQU1JQ19QUyk7DQorCWllZWU4MDIxMV9od19zZXQoaHcsIFNJR05BTF9EQk0pOw0K KwlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19QUyk7DQorCWllZWU4MDIxMV9od19zZXQo aHcsIE1GUF9DQVBBQkxFKTsNCisNCiAJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0 IHdmeF92aWYpOw0KIAlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgd2Z4X3N0YV9w cml2KTsNCiAJaHctPnF1ZXVlcyA9IDQ7DQpAQCAtMjA2LDggKzMxNCwxOSBAQCBzdHJ1Y3Qgd2Z4 X2RldiAqd2Z4X2luaXRfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwNCiAJaHctPmV4dHJhX3R4 X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBoaWZfc2xfbXNnX2hkcikgKyBzaXplb2Yoc3RydWN0 IGhpZl9tc2cpDQogCQkJCSsgc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3R4KQ0KIAkJCQkrIDQgLyog YWxpZ25tZW50ICovICsgOCAvKiBUS0lQIElWICovOw0KKwlody0+d2lwaHktPmludGVyZmFjZV9t b2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8DQorCQkJCSAgICAgQklUKE5MODAy MTFfSUZUWVBFX0FESE9DKSB8DQorCQkJCSAgICAgQklUKE5MODAyMTFfSUZUWVBFX0FQKTsNCisJ aHctPndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0FQX1VBUFNEOw0KKwlody0+d2lwaHktPmZs YWdzICY9IH5XSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ7DQorCWh3LT53aXBoeS0+bWF4X2Fw X2Fzc29jX3N0YSA9IFdGWF9NQVhfU1RBX0lOX0FQX01PREU7DQogCWh3LT53aXBoeS0+bWF4X3Nj YW5fc3NpZHMgPSAyOw0KIAlody0+d2lwaHktPm1heF9zY2FuX2llX2xlbiA9IElFRUU4MDIxMV9N QVhfREFUQV9MRU47DQorCWh3LT53aXBoeS0+bl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9T SVpFKHdmeF9pZmFjZV9jb21iaW5hdGlvbnMpOw0KKwlody0+d2lwaHktPmlmYWNlX2NvbWJpbmF0 aW9ucyA9IHdmeF9pZmFjZV9jb21iaW5hdGlvbnM7DQorCWh3LT53aXBoeS0+YmFuZHNbTkw4MDIx MV9CQU5EXzJHSFpdID0gZGV2bV9rbWFsbG9jKGRldiwgc2l6ZW9mKHdmeF9iYW5kXzJnaHopLCBH RlBfS0VSTkVMKTsNCisJLy8gRklYTUU6IGFsc28gY29weSB3ZnhfcmF0ZXMgYW5kIHdmeF8yZ2h6 X2NoYW50YWJsZQ0KKwltZW1jcHkoaHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0s ICZ3ZnhfYmFuZF8yZ2h6LCBzaXplb2Yod2Z4X2JhbmRfMmdoeikpOw0KIA0KIAl3ZGV2ID0gaHct PnByaXY7DQogCXdkZXYtPmh3ID0gaHc7DQpAQCAtMjkwLDYgKzQwOSwxMiBAQCBpbnQgd2Z4X3By b2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KIAkJZ290byBlcnIxOw0KIAl9DQogDQorCWlmICh3 ZGV2LT5od19jYXBzLnJlZ3VsX3NlbF9tb2RlX2luZm8ucmVnaW9uX3NlbF9tb2RlKSB7DQorCQl3 ZGV2LT5ody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXS0+Y2hhbm5lbHNbMTFdLmZs YWdzIHw9IElFRUU4MDIxMV9DSEFOX05PX0lSOw0KKwkJd2Rldi0+aHctPndpcGh5LT5iYW5kc1tO TDgwMjExX0JBTkRfMkdIWl0tPmNoYW5uZWxzWzEyXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9O T19JUjsNCisJCXdkZXYtPmh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLT5jaGFu bmVsc1sxM10uZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7DQorCX0NCisNCiAJZGV2 X2RiZyh3ZGV2LT5kZXYsICJzZW5kaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSAlc1xuIiwgd2Rldi0+ cGRhdGEuZmlsZV9wZHMpOw0KIAllcnIgPSB3Znhfc2VuZF9wZGF0YV9wZHMod2Rldik7DQogCWlm IChlcnIgPCAwKQ0KQEAgLTMyMiw2ICs0NDcsMTIgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4 X2RldiAqd2RldikNCiAJCX0NCiAJCWRldl9pbmZvKHdkZXYtPmRldiwgIk1BQyBhZGRyZXNzICVk OiAlcE1cbiIsIGksIHdkZXYtPmFkZHJlc3Nlc1tpXS5hZGRyKTsNCiAJfQ0KKwl3ZGV2LT5ody0+ d2lwaHktPm5fYWRkcmVzc2VzID0gQVJSQVlfU0laRSh3ZGV2LT5hZGRyZXNzZXMpOw0KKwl3ZGV2 LT5ody0+d2lwaHktPmFkZHJlc3NlcyA9IHdkZXYtPmFkZHJlc3NlczsNCisNCisJZXJyID0gaWVl ZTgwMjExX3JlZ2lzdGVyX2h3KHdkZXYtPmh3KTsNCisJaWYgKGVycikNCisJCWdvdG8gZXJyMTsN CiANCiAJZXJyID0gd2Z4X2RlYnVnX2luaXQod2Rldik7DQogCWlmIChlcnIpDQpAQCAtMzMwLDYg KzQ2MSw3IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpDQogCXJldHVybiAw Ow0KIA0KIGVycjI6DQorCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdkZXYtPmh3KTsNCiAJaWVl ZTgwMjExX2ZyZWVfaHcod2Rldi0+aHcpOw0KIGVycjE6DQogCXdmeF9iaF91bnJlZ2lzdGVyKHdk ZXYpOw0KQEAgLTMzOCw2ICs0NzAsNyBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2KQ0KIA0KIHZvaWQgd2Z4X3JlbGVhc2Uoc3RydWN0IHdmeF9kZXYgKndkZXYpDQogew0KKwlp ZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3ZGV2LT5odyk7DQogCWhpZl9zaHV0ZG93bih3ZGV2KTsN CiAJd2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7DQogCXdmeF9zbF9kZWluaXQod2Rldik7DQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3dm eC9xdWV1ZS5jDQppbmRleCBhYTQzOGJlMjFkMzcuLjZmMWJlNGY2ZjQ2MyAxMDA2NDQNCi0tLSBh L2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9x dWV1ZS5jDQpAQCAtMzUxLDYgKzM1MSw4MyBAQCBib29sIHdmeF90eF9xdWV1ZXNfaXNfZW1wdHko c3RydWN0IHdmeF9kZXYgKndkZXYpDQogCXJldHVybiByZXQ7DQogfQ0KIA0KK3N0YXRpYyBib29s IGhpZl9oYW5kbGVfdHhfZGF0YShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHNrX2J1ZmYg KnNrYiwNCisJCQkgICAgICAgc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUpDQorew0KKwlib29sIGhh bmRsZWQgPSBmYWxzZTsNCisJc3RydWN0IHdmeF90eF9wcml2ICp0eF9wcml2ID0gd2Z4X3NrYl90 eF9wcml2KHNrYik7DQorCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXEgPSB3Znhfc2tiX3R4cmVxKHNr Yik7DQorCXN0cnVjdCBpZWVlODAyMTFfaGRyICpmcmFtZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2hk ciAqKSAocmVxLT5mcmFtZSArIHJlcS0+ZGF0YV9mbGFncy5mY19vZmZzZXQpOw0KKw0KKwllbnVt IHsNCisJCWRvX3Byb2JlLA0KKwkJZG9fZHJvcCwNCisJCWRvX3dlcCwNCisJCWRvX3R4LA0KKwl9 IGFjdGlvbiA9IGRvX3R4Ow0KKw0KKwlzd2l0Y2ggKHd2aWYtPnZpZi0+dHlwZSkgew0KKwljYXNl IE5MODAyMTFfSUZUWVBFX1NUQVRJT046DQorCQlpZiAod3ZpZi0+c3RhdGUgPCBXRlhfU1RBVEVf UFJFX1NUQSkNCisJCQlhY3Rpb24gPSBkb19kcm9wOw0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIx MV9JRlRZUEVfQVA6DQorCQlpZiAoIXd2aWYtPnN0YXRlKSB7DQorCQkJYWN0aW9uID0gZG9fZHJv cDsNCisJCX0gZWxzZSBpZiAoIShCSVQodHhfcHJpdi0+cmF3X2xpbmtfaWQpICYgKEJJVCgwKSB8 IHd2aWYtPmxpbmtfaWRfbWFwKSkpIHsNCisJCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsICJh IGZyYW1lIHdpdGggZXhwaXJlZCBsaW5rLWlkIGlzIGRyb3BwZWRcbiIpOw0KKwkJCWFjdGlvbiA9 IGRvX2Ryb3A7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoN CisJCWlmICh3dmlmLT5zdGF0ZSAhPSBXRlhfU1RBVEVfSUJTUykNCisJCQlhY3Rpb24gPSBkb19k cm9wOw0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoNCisJZGVmYXVs dDoNCisJCWFjdGlvbiA9IGRvX2Ryb3A7DQorCQlicmVhazsNCisJfQ0KKw0KKwlpZiAoYWN0aW9u ID09IGRvX3R4KSB7DQorCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZyYW1lLT5mcmFtZV9j b250cm9sKSkgew0KKwkJCW11dGV4X2xvY2soJnd2aWYtPmJzc19sb3NzX2xvY2spOw0KKwkJCWlm ICh3dmlmLT5ic3NfbG9zc19zdGF0ZSkgew0KKwkJCQl3dmlmLT5ic3NfbG9zc19jb25maXJtX2lk ID0gcmVxLT5wYWNrZXRfaWQ7DQorCQkJCXJlcS0+cXVldWVfaWQucXVldWVfaWQgPSBISUZfUVVF VUVfSURfVk9JQ0U7DQorCQkJfQ0KKwkJCW11dGV4X3VubG9jaygmd3ZpZi0+YnNzX2xvc3NfbG9j ayk7DQorCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGZyYW1lLT5mcmFtZV9j b250cm9sKSAmJg0KKwkJCSAgIHR4X3ByaXYtPmh3X2tleSAmJg0KKwkJCSAgIHR4X3ByaXYtPmh3 X2tleS0+a2V5aWR4ICE9IHd2aWYtPndlcF9kZWZhdWx0X2tleV9pZCAmJg0KKwkJCSAgICh0eF9w cml2LT5od19rZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fA0KKwkJCSAg ICB0eF9wcml2LT5od19rZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpKSB7 DQorCQkJYWN0aW9uID0gZG9fd2VwOw0KKwkJfQ0KKwl9DQorDQorCXN3aXRjaCAoYWN0aW9uKSB7 DQorCWNhc2UgZG9fZHJvcDoNCisJCUJVR19PTih3ZnhfcGVuZGluZ19yZW1vdmUod3ZpZi0+d2Rl diwgc2tiKSk7DQorCQloYW5kbGVkID0gdHJ1ZTsNCisJCWJyZWFrOw0KKwljYXNlIGRvX3dlcDoN CisJCXdmeF90eF9sb2NrKHd2aWYtPndkZXYpOw0KKwkJd3ZpZi0+d2VwX2RlZmF1bHRfa2V5X2lk ID0gdHhfcHJpdi0+aHdfa2V5LT5rZXlpZHg7DQorCQl3dmlmLT53ZXBfcGVuZGluZ19za2IgPSBz a2I7DQorCQlpZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPndlcF9rZXlfd29yaykpDQorCQkJd2Z4 X3R4X3VubG9jayh3dmlmLT53ZGV2KTsNCisJCWhhbmRsZWQgPSB0cnVlOw0KKwkJYnJlYWs7DQor CWNhc2UgZG9fdHg6DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCS8qIERvIG5vdGhpbmcgKi8N CisJCWJyZWFrOw0KKwl9DQorCXJldHVybiBoYW5kbGVkOw0KK30NCisNCiBzdGF0aWMgaW50IHdm eF9nZXRfcHJpb19xdWV1ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCiAJCQkJIHUzMiB0eF9hbGxv d2VkX21hc2ssIGludCAqdG90YWwpDQogew0KQEAgLTQ5OCw2ICs1NzUsOSBAQCBzdHJ1Y3QgaGlm X21zZyAqd2Z4X3R4X3F1ZXVlc19nZXQoc3RydWN0IHdmeF9kZXYgKndkZXYpDQogCQl3dmlmID0g d2Rldl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsNCiAJCVdBUk5fT04oIXd2aWYpOw0K IA0KKwkJaWYgKGhpZl9oYW5kbGVfdHhfZGF0YSh3dmlmLCBza2IsIHF1ZXVlKSkNCisJCQljb250 aW51ZTsgIC8qIEhhbmRsZWQgYnkgV1NNICovDQorDQogCQl3dmlmLT5wc3BvbGxfbWFzayAmPSB+ QklUKHR4X3ByaXYtPnJhd19saW5rX2lkKTsNCiANCiAJCS8qIGFsbG93IGJ1cnN0aW5nIGlmIHR4 b3AgaXMgc2V0ICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9zY2FuLmMgYi9k cml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYw0KaW5kZXggMjA3YjI2ZWJjOWZkLi5lYTUwMDFjOTE1 ZjYgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYw0KKysrIGIvZHJpdmVy cy9zdGFnaW5nL3dmeC9zY2FuLmMNCkBAIC0yMSwxMSArMjEsMjYgQEAgc3RhdGljIHZvaWQgX19p ZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWRfY29tcGF0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBi b29sIGFib3INCiAJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKGh3LCAmaW5mbyk7DQogfQ0KIA0K K3N0YXRpYyB2b2lkIHdmeF9zY2FuX3Jlc3RhcnRfZGVsYXllZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZikNCit7DQorCWlmICh3dmlmLT5kZWxheWVkX3Vuam9pbikgew0KKwkJd3ZpZi0+ZGVsYXllZF91 bmpvaW4gPSBmYWxzZTsNCisJCWlmICghc2NoZWR1bGVfd29yaygmd3ZpZi0+dW5qb2luX3dvcmsp KQ0KKwkJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCX0gZWxzZSBpZiAod3ZpZi0+ZGVs YXllZF9saW5rX2xvc3MpIHsNCisJCXd2aWYtPmRlbGF5ZWRfbGlua19sb3NzID0gMDsNCisJCXdm eF9jcW1fYnNzbG9zc19zbSh3dmlmLCAxLCAwLCAwKTsNCisJfQ0KK30NCisNCiBzdGF0aWMgaW50 IHdmeF9zY2FuX3N0YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgd2Z4X3NjYW5fcGFy YW1zICpzY2FuKQ0KIHsNCiAJaW50IHJldDsNCiAJaW50IHRtbyA9IDUwMDsNCiANCisJaWYgKHd2 aWYtPnN0YXRlID09IFdGWF9TVEFURV9QUkVfU1RBKQ0KKwkJcmV0dXJuIC1FQlVTWTsNCisNCiAJ dG1vICs9IHNjYW4tPnNjYW5fcmVxLm51bV9vZl9jaGFubmVscyAqDQogCSAgICAgICAoKDIwICog KHNjYW4tPnNjYW5fcmVxLm1heF9jaGFubmVsX3RpbWUpKSArIDEwKTsNCiAJYXRvbWljX3NldCgm d3ZpZi0+c2Nhbi5pbl9wcm9ncmVzcywgMSk7DQpAQCAtMzgsNiArNTMsNyBAQCBzdGF0aWMgaW50 IHdmeF9zY2FuX3N0YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgd2Z4X3NjYW5fcGFy YW1zICpzY2FuKQ0KIAkJYXRvbWljX3NldCgmd3ZpZi0+c2Nhbi5pbl9wcm9ncmVzcywgMCk7DQog CQlhdG9taWNfc2V0KCZ3dmlmLT53ZGV2LT5zY2FuX2luX3Byb2dyZXNzLCAwKTsNCiAJCWNhbmNl bF9kZWxheWVkX3dvcmtfc3luYygmd3ZpZi0+c2Nhbi50aW1lb3V0KTsNCisJCXdmeF9zY2FuX3Jl c3RhcnRfZGVsYXllZCh3dmlmKTsNCiAJfQ0KIAlyZXR1cm4gcmV0Ow0KIH0NCkBAIC01Niw2ICs3 Miw5IEBAIGludCB3ZnhfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCiAJaWYgKCF3 dmlmKQ0KIAkJcmV0dXJuIC1FSU5WQUw7DQogDQorCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RB VEVfQVApDQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQorDQogCWlmIChyZXEtPm5fc3NpZHMgPT0g MSAmJiAhcmVxLT5zc2lkc1swXS5zc2lkX2xlbikNCiAJCXJlcS0+bl9zc2lkcyA9IDA7DQogDQpA QCAtMTIxLDExICsxNDAsMjMgQEAgdm9pZCB3Znhfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykNCiAJCS5zY2FuX3JlcS5zY2FuX3R5cGUudHlwZSA9IDAsICAgIC8qIEZvcmVncm91 bmQgKi8NCiAJfTsNCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpmaXJzdDsNCisJYm9vbCBm aXJzdF9ydW4gPSAod3ZpZi0+c2Nhbi5iZWdpbiA9PSB3dmlmLT5zY2FuLmN1cnIgJiYNCisJCQkg IHd2aWYtPnNjYW4uYmVnaW4gIT0gd3ZpZi0+c2Nhbi5lbmQpOw0KIAlpbnQgaTsNCiANCiAJZG93 bigmd3ZpZi0+c2Nhbi5sb2NrKTsNCiAJbXV0ZXhfbG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRl eCk7DQogDQorCWlmIChmaXJzdF9ydW4pIHsNCisJCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RB VEVfU1RBICYmDQorCQkgICAgISh3dmlmLT5wb3dlcnNhdmVfbW9kZS5wbV9tb2RlLmVudGVyX3Bz bSkpIHsNCisJCQlzdHJ1Y3QgaGlmX3JlcV9zZXRfcG1fbW9kZSBwbSA9IHd2aWYtPnBvd2Vyc2F2 ZV9tb2RlOw0KKw0KKwkJCXBtLnBtX21vZGUuZW50ZXJfcHNtID0gMTsNCisJCQl3Znhfc2V0X3Bt KHd2aWYsICZwbSk7DQorCQl9DQorCX0NCisNCiAJaWYgKCF3dmlmLT5zY2FuLnJlcSB8fCB3dmlm LT5zY2FuLmN1cnIgPT0gd3ZpZi0+c2Nhbi5lbmQpIHsNCiAJCWlmICh3dmlmLT5zY2FuLm91dHB1 dF9wb3dlciAhPSB3dmlmLT53ZGV2LT5vdXRwdXRfcG93ZXIpDQogCQkJaGlmX3NldF9vdXRwdXRf cG93ZXIod3ZpZiwgd3ZpZi0+d2Rldi0+b3V0cHV0X3Bvd2VyICogMTApOw0KQEAgLTEzOCwxMCAr MTY5LDE0IEBAIHZvaWQgd2Z4X3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQog CQkJZGV2X2RiZyh3dmlmLT53ZGV2LT5kZXYsICJzY2FuIGNhbmNlbGVkXG4iKTsNCiANCiAJCXd2 aWYtPnNjYW4ucmVxID0gTlVMTDsNCisJCXdmeF9zY2FuX3Jlc3RhcnRfZGVsYXllZCh3dmlmKTsN CiAJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQogCQltdXRleF91bmxvY2soJnd2aWYtPndk ZXYtPmNvbmZfbXV0ZXgpOw0KIAkJX19pZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWRfY29tcGF0KHd2 aWYtPndkZXYtPmh3LCB3dmlmLT5zY2FuLnN0YXR1cyA/IDEgOiAwKTsNCiAJCXVwKCZ3dmlmLT5z Y2FuLmxvY2spOw0KKwkJaWYgKHd2aWYtPnN0YXRlID09IFdGWF9TVEFURV9TVEEgJiYNCisJCSAg ICAhKHd2aWYtPnBvd2Vyc2F2ZV9tb2RlLnBtX21vZGUuZW50ZXJfcHNtKSkNCisJCQl3Znhfc2V0 X3BtKHd2aWYsICZ3dmlmLT5wb3dlcnNhdmVfbW9kZSk7DQogCQlyZXR1cm47DQogCX0NCiAJZmly c3QgPSAqd3ZpZi0+c2Nhbi5jdXJyOw0KQEAgLTE3MCw2ICsyMDUsMTEgQEAgdm9pZCB3Znhfc2Nh bl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCiAJc2Nhbi5zc2lkcyA9ICZ3dmlmLT5z Y2FuLnNzaWRzWzBdOw0KIAlzY2FuLnNjYW5fcmVxLm51bV9vZl9jaGFubmVscyA9IGl0IC0gd3Zp Zi0+c2Nhbi5jdXJyOw0KIAlzY2FuLnNjYW5fcmVxLnByb2JlX2RlbGF5ID0gMTAwOw0KKwkvLyBG SVhNRTogQ2hlY2sgaWYgRlcgY2FuIGRvIGFjdGl2ZSBzY2FuIHdoaWxlIGpvaW5lZC4NCisJaWYg KHd2aWYtPnN0YXRlID09IFdGWF9TVEFURV9TVEEpIHsNCisJCXNjYW4uc2Nhbl9yZXEuc2Nhbl90 eXBlLnR5cGUgPSAxOw0KKwkJc2Nhbi5zY2FuX3JlcS5zY2FuX2ZsYWdzLmZiZyA9IDE7DQorCX0N CiANCiAJc2Nhbi5jaCA9IGtjYWxsb2Moc2Nhbi5zY2FuX3JlcS5udW1fb2ZfY2hhbm5lbHMsIHNp emVvZih1OCksIEdGUF9LRVJORUwpOw0KIA0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93 Zngvc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jDQppbmRleCAyZTcwOWI4YTNiZjQu LjI4NTVkMTRhNzA5YyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMNCisr KyBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMNCkBAIC05LDExICs5LDE0OCBAQA0KIA0KICNp bmNsdWRlICJzdGEuaCINCiAjaW5jbHVkZSAid2Z4LmgiDQorI2luY2x1ZGUgImZ3aW8uaCINCisj aW5jbHVkZSAiYmguaCINCiAjaW5jbHVkZSAia2V5LmgiDQogI2luY2x1ZGUgInNjYW4uaCINCisj aW5jbHVkZSAiZGVidWcuaCINCisjaW5jbHVkZSAiaGlmX3R4LmgiDQogI2luY2x1ZGUgImhpZl90 eF9taWIuaCINCiANCiAjZGVmaW5lIFRYT1BfVU5JVCAzMg0KKyNkZWZpbmUgSElGX01BWF9BUlBf SVBfQUREUlRBQkxFX0VOVFJJRVMgMg0KKw0KK3N0YXRpYyB1MzIgd2Z4X3JhdGVfbWFza190b19o dyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIHJhdGVzKQ0KK3sNCisJaW50IGk7DQorCXUzMiBy ZXQgPSAwOw0KKwkvLyBXRnggb25seSBzdXBwb3J0IDJHSHoNCisJc3RydWN0IGllZWU4MDIxMV9z dXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSB3ZGV2LT5ody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFO RF8yR0haXTsNCisNCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsN CisJCWlmIChyYXRlcyAmIEJJVChpKSkgew0KKwkJCWlmIChpID49IHNiYW5kLT5uX2JpdHJhdGVz KQ0KKwkJCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBiYXNpYyByYXRlXG4iKTsN CisJCQllbHNlDQorCQkJCXJldCB8PSBCSVQoc2JhbmQtPmJpdHJhdGVzW2ldLmh3X3ZhbHVlKTsN CisJCX0NCisJfQ0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgdm9pZCBfX3dmeF9mcmVl X2V2ZW50X3F1ZXVlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpDQorew0KKwlzdHJ1Y3Qgd2Z4X2hp Zl9ldmVudCAqZXZlbnQsICp0bXA7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVu dCwgdG1wLCBsaXN0LCBsaW5rKSB7DQorCQlsaXN0X2RlbCgmZXZlbnQtPmxpbmspOw0KKwkJa2Zy ZWUoZXZlbnQpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHdmeF9mcmVlX2V2ZW50X3F1ZXVl KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQ0KK3sNCisJTElTVF9IRUFEKGxpc3QpOw0KKw0KKwlzcGlu X2xvY2soJnd2aWYtPmV2ZW50X3F1ZXVlX2xvY2spOw0KKwlsaXN0X3NwbGljZV9pbml0KCZ3dmlm LT5ldmVudF9xdWV1ZSwgJmxpc3QpOw0KKwlzcGluX3VubG9jaygmd3ZpZi0+ZXZlbnRfcXVldWVf bG9jayk7DQorDQorCV9fd2Z4X2ZyZWVfZXZlbnRfcXVldWUoJmxpc3QpOw0KK30NCisNCit2b2lk IHdmeF9jcW1fYnNzbG9zc19zbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGluaXQsIGludCBn b29kLCBpbnQgYmFkKQ0KK3sNCisJaW50IHR4ID0gMDsNCisNCisJbXV0ZXhfbG9jaygmd3ZpZi0+ YnNzX2xvc3NfbG9jayk7DQorCXd2aWYtPmRlbGF5ZWRfbGlua19sb3NzID0gMDsNCisJY2FuY2Vs X3dvcmtfc3luYygmd3ZpZi0+YnNzX3BhcmFtc193b3JrKTsNCisNCisJLyogSWYgd2UgaGF2ZSBh IHBlbmRpbmcgdW5qb2luICovDQorCWlmICh3dmlmLT5kZWxheWVkX3Vuam9pbikNCisJCWdvdG8g ZW5kOw0KKw0KKwlpZiAoaW5pdCkgew0KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ3dmlmLT5i c3NfbG9zc193b3JrLCBIWik7DQorCQl3dmlmLT5ic3NfbG9zc19zdGF0ZSA9IDA7DQorDQorCQlp ZiAoIWF0b21pY19yZWFkKCZ3dmlmLT53ZGV2LT50eF9sb2NrKSkNCisJCQl0eCA9IDE7DQorCX0g ZWxzZSBpZiAoZ29vZCkgew0KKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3dmlmLT5ic3Nf bG9zc193b3JrKTsNCisJCXd2aWYtPmJzc19sb3NzX3N0YXRlID0gMDsNCisJCXNjaGVkdWxlX3dv cmsoJnd2aWYtPmJzc19wYXJhbXNfd29yayk7DQorCX0gZWxzZSBpZiAoYmFkKSB7DQorCQkvKiBG SVhNRSBTaG91bGQgd2UganVzdCBrZWVwIGdvaW5nIHVudGlsIHdlIHRpbWUgb3V0PyAqLw0KKwkJ aWYgKHd2aWYtPmJzc19sb3NzX3N0YXRlIDwgMykNCisJCQl0eCA9IDE7DQorCX0gZWxzZSB7DQor CQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnd2aWYtPmJzc19sb3NzX3dvcmspOw0KKwkJd3Zp Zi0+YnNzX2xvc3Nfc3RhdGUgPSAwOw0KKwl9DQorDQorCS8qIFNwaXQgb3V0IGEgTlVMTCBwYWNr ZXQgdG8gb3VyIEFQIGlmIG5lY2Vzc2FyeSAqLw0KKwkvLyBGSVhNRTogY2FsbCBpZWVlODAyMTFf YmVhY29uX2xvc3MvaWVlZTgwMjExX2Nvbm5lY3Rpb25fbG9zcyBpbnN0ZWFkDQorCWlmICh0eCkg ew0KKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisNCisJCXd2aWYtPmJzc19sb3NzX3N0YXRlKys7 DQorDQorCQlza2IgPSBpZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KHd2aWYtPndkZXYtPmh3LCB3dmlm LT52aWYsIGZhbHNlKTsNCisJCWlmICghc2tiKQ0KKwkJCWdvdG8gZW5kOw0KKwkJbWVtc2V0KElF RUU4MDIxMV9TS0JfQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJRUVFODAyMTFfU0tCX0NCKHNrYikpKTsN CisJCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+Y29udHJvbC52aWYgPSB3dmlmLT52aWY7DQorCQlJ RUVFODAyMTFfU0tCX0NCKHNrYiktPmRyaXZlcl9yYXRlc1swXS5pZHggPSAwOw0KKwkJSUVFRTgw MjExX1NLQl9DQihza2IpLT5kcml2ZXJfcmF0ZXNbMF0uY291bnQgPSAxOw0KKwkJSUVFRTgwMjEx X1NLQl9DQihza2IpLT5kcml2ZXJfcmF0ZXNbMV0uaWR4ID0gLTE7DQorCQl3ZnhfdHgod3ZpZi0+ d2Rldi0+aHcsIE5VTEwsIHNrYik7DQorCX0NCitlbmQ6DQorCW11dGV4X3VubG9jaygmd3ZpZi0+ YnNzX2xvc3NfbG9jayk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgd2Z4X3NldF91YXBzZF9wYXJhbShz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCQkgICBjb25zdCBzdHJ1Y3Qgd2Z4X2VkY2FfcGFyYW1z ICphcmcpDQorew0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBIZXJlJ3MgdGhlIG1hcHBpbmcgQUMgW3F1 ZXVlLCBiaXRdDQorCSAqICBWTyBbMCwzXSwgVkkgWzEsIDJdLCBCRSBbMiwgMV0sIEJLIFszLCAw XQ0KKwkgKi8NCisNCisJaWYgKGFyZy0+dWFwc2RfZW5hYmxlW0lFRUU4MDIxMV9BQ19WT10pDQor CQl3dmlmLT51YXBzZF9pbmZvLnRyaWdfdm9pY2UgPSAxOw0KKwllbHNlDQorCQl3dmlmLT51YXBz ZF9pbmZvLnRyaWdfdm9pY2UgPSAwOw0KKw0KKwlpZiAoYXJnLT51YXBzZF9lbmFibGVbSUVFRTgw MjExX0FDX1ZJXSkNCisJCXd2aWYtPnVhcHNkX2luZm8udHJpZ192aWRlbyA9IDE7DQorCWVsc2UN CisJCXd2aWYtPnVhcHNkX2luZm8udHJpZ192aWRlbyA9IDA7DQorDQorCWlmIChhcmctPnVhcHNk X2VuYWJsZVtJRUVFODAyMTFfQUNfQkVdKQ0KKwkJd3ZpZi0+dWFwc2RfaW5mby50cmlnX2JlID0g MTsNCisJZWxzZQ0KKwkJd3ZpZi0+dWFwc2RfaW5mby50cmlnX2JlID0gMDsNCisNCisJaWYgKGFy Zy0+dWFwc2RfZW5hYmxlW0lFRUU4MDIxMV9BQ19CS10pDQorCQl3dmlmLT51YXBzZF9pbmZvLnRy aWdfYmNrZ3JuZCA9IDE7DQorCWVsc2UNCisJCXd2aWYtPnVhcHNkX2luZm8udHJpZ19iY2tncm5k ID0gMDsNCisNCisJLyogQ3VycmVudGx5IHBzZXVkbyBVLUFQU0Qgb3BlcmF0aW9uIGlzIG5vdCBz dXBwb3J0ZWQsIHNvIHNldHRpbmcNCisJICogTWluQXV0b1RyaWdnZXJJbnRlcnZhbCwgTWF4QXV0 b1RyaWdnZXJJbnRlcnZhbCBhbmQNCisJICogQXV0b1RyaWdnZXJTdGVwIHRvIDANCisJICovDQor CXd2aWYtPnVhcHNkX2luZm8ubWluX2F1dG9fdHJpZ2dlcl9pbnRlcnZhbCA9IDA7DQorCXd2aWYt PnVhcHNkX2luZm8ubWF4X2F1dG9fdHJpZ2dlcl9pbnRlcnZhbCA9IDA7DQorCXd2aWYtPnVhcHNk X2luZm8uYXV0b190cmlnZ2VyX3N0ZXAgPSAwOw0KKw0KKwlyZXQgPSBoaWZfc2V0X3VhcHNkX2lu Zm8od3ZpZiwgJnd2aWYtPnVhcHNkX2luZm8pOw0KKwlyZXR1cm4gcmV0Ow0KK30NCiANCiBpbnQg d2Z4X2Z3ZF9wcm9iZV9yZXEoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKQ0KIHsN CkBAIC0yMiw2ICsxNTksMTA0NCBAQCBpbnQgd2Z4X2Z3ZF9wcm9iZV9yZXEoc3RydWN0IHdmeF92 aWYgKnd2aWYsIGJvb2wgZW5hYmxlKQ0KIAkJCQkgd3ZpZi0+ZndkX3Byb2JlX3JlcSk7DQogfQ0K IA0KK3N0YXRpYyBpbnQgd2Z4X3NldF9tY2FzdF9maWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYs DQorCQkJCSAgICBzdHJ1Y3Qgd2Z4X2dycF9hZGRyX3RhYmxlICpmcCkNCit7DQorCWludCBpLCBy ZXQ7DQorCXN0cnVjdCBoaWZfbWliX2NvbmZpZ19kYXRhX2ZpbHRlciBjb25maWcgPSB7IH07DQor CXN0cnVjdCBoaWZfbWliX3NldF9kYXRhX2ZpbHRlcmluZyBmaWx0ZXJfZGF0YSA9IHsgfTsNCisJ c3RydWN0IGhpZl9taWJfbWFjX2FkZHJfZGF0YV9mcmFtZV9jb25kaXRpb24gZmlsdGVyX2FkZHJf dmFsID0geyB9Ow0KKwlzdHJ1Y3QgaGlmX21pYl91Y19tY19iY19kYXRhX2ZyYW1lX2NvbmRpdGlv biBmaWx0ZXJfYWRkcl90eXBlID0geyB9Ow0KKw0KKwkvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBm b3IgZmlsdGVycw0KKwlyZXR1cm4gaGlmX3NldF9kYXRhX2ZpbHRlcmluZyh3dmlmLCAmZmlsdGVy X2RhdGEpOw0KKw0KKwlpZiAoIWZwLT5lbmFibGUpIHsNCisJCWZpbHRlcl9kYXRhLmVuYWJsZSA9 IDA7DQorCQlyZXR1cm4gaGlmX3NldF9kYXRhX2ZpbHRlcmluZyh3dmlmLCAmZmlsdGVyX2RhdGEp Ow0KKwl9DQorDQorCS8vIEExIEFkZHJlc3MgbWF0Y2ggb24gbGlzdA0KKwlmb3IgKGkgPSAwOyBp IDwgZnAtPm51bV9hZGRyZXNzZXM7IGkrKykgew0KKwkJZmlsdGVyX2FkZHJfdmFsLmNvbmRpdGlv bl9pZHggPSBpOw0KKwkJZmlsdGVyX2FkZHJfdmFsLmFkZHJlc3NfdHlwZSA9IEhJRl9NQUNfQURE Ul9BMTsNCisJCWV0aGVyX2FkZHJfY29weShmaWx0ZXJfYWRkcl92YWwubWFjX2FkZHJlc3MsIGZw LT5hZGRyZXNzX2xpc3RbaV0pOw0KKwkJcmV0ID0gaGlmX3NldF9tYWNfYWRkcl9jb25kaXRpb24o d3ZpZiwgJmZpbHRlcl9hZGRyX3ZhbCk7DQorCQlpZiAocmV0KQ0KKwkJCXJldHVybiByZXQ7DQor CQljb25maWcubWFjX2NvbmQgfD0gMSA8PCBpOw0KKwl9DQorDQorCS8vIEFjY2VwdCB1bmljYXN0 IGFuZCBicm9hZGNhc3QNCisJZmlsdGVyX2FkZHJfdHlwZS5jb25kaXRpb25faWR4ID0gMDsNCisJ ZmlsdGVyX2FkZHJfdHlwZS5wYXJhbS5iaXRzLnR5cGVfdW5pY2FzdCA9IDE7DQorCWZpbHRlcl9h ZGRyX3R5cGUucGFyYW0uYml0cy50eXBlX2Jyb2FkY2FzdCA9IDE7DQorCXJldCA9IGhpZl9zZXRf dWNfbWNfYmNfY29uZGl0aW9uKHd2aWYsICZmaWx0ZXJfYWRkcl90eXBlKTsNCisJaWYgKHJldCkN CisJCXJldHVybiByZXQ7DQorDQorCWNvbmZpZy51Y19tY19iY19jb25kID0gMTsNCisJY29uZmln LmZpbHRlcl9pZHggPSAwOyAvLyBUT0RPICNkZWZpbmUgTVVMVElDQVNUX0ZJTFRFUklORyAwDQor CWNvbmZpZy5lbmFibGUgPSAxOw0KKwlyZXQgPSBoaWZfc2V0X2NvbmZpZ19kYXRhX2ZpbHRlcih3 dmlmLCAmY29uZmlnKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCS8vIGRpc2Nh cmQgYWxsIGRhdGEgZnJhbWVzIGV4Y2VwdCBtYXRjaCBmaWx0ZXINCisJZmlsdGVyX2RhdGEuZW5h YmxlID0gMTsNCisJZmlsdGVyX2RhdGEuZGVmYXVsdF9maWx0ZXIgPSAxOyAvLyBkaXNjYXJkIGFs bA0KKwlyZXQgPSBoaWZfc2V0X2RhdGFfZmlsdGVyaW5nKHd2aWYsICZmaWx0ZXJfZGF0YSk7DQor DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3ZvaWQgd2Z4X3VwZGF0ZV9maWx0ZXJpbmcoc3RydWN0 IHdmeF92aWYgKnd2aWYpDQorew0KKwlpbnQgcmV0Ow0KKwlib29sIGlzX3N0YSA9IHd2aWYtPnZp ZiAmJiBOTDgwMjExX0lGVFlQRV9TVEFUSU9OID09IHd2aWYtPnZpZi0+dHlwZTsNCisJYm9vbCBm aWx0ZXJfYnNzaWQgPSB3dmlmLT5maWx0ZXJfYnNzaWQ7DQorCWJvb2wgZndkX3Byb2JlX3JlcSA9 IHd2aWYtPmZ3ZF9wcm9iZV9yZXE7DQorCXN0cnVjdCBoaWZfbWliX2Jjbl9maWx0ZXJfZW5hYmxl IGJmX2N0cmw7DQorCXN0cnVjdCBoaWZfbWliX2Jjbl9maWx0ZXJfdGFibGUgKmJmX3RibDsNCisJ c3RydWN0IGhpZl9pZV90YWJsZV9lbnRyeSBpZV90YmxbXSA9IHsNCisJCXsNCisJCQkuaWVfaWQg ICAgICAgID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLA0KKwkJCS5oYXNfY2hhbmdlZCAgPSAx LA0KKwkJCS5ub19sb25nZXIgICAgPSAxLA0KKwkJCS5oYXNfYXBwZWFyZWQgPSAxLA0KKwkJCS5v dWkgICAgICAgICA9IHsgMHg1MCwgMHg2RiwgMHg5QX0sDQorCQl9LCB7DQorCQkJLmllX2lkICAg ICAgICA9IFdMQU5fRUlEX0hUX09QRVJBVElPTiwNCisJCQkuaGFzX2NoYW5nZWQgID0gMSwNCisJ CQkubm9fbG9uZ2VyICAgID0gMSwNCisJCQkuaGFzX2FwcGVhcmVkID0gMSwNCisJCX0sIHsNCisJ CQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURfRVJQX0lORk8sDQorCQkJLmhhc19jaGFuZ2VkICA9 IDEsDQorCQkJLm5vX2xvbmdlciAgICA9IDEsDQorCQkJLmhhc19hcHBlYXJlZCA9IDEsDQorCQl9 DQorCX07DQorDQorCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RBVEVfUEFTU0lWRSkNCisJCXJl dHVybjsNCisNCisJYmZfdGJsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZl9taWJfYmNuX2Zp bHRlcl90YWJsZSkgKyBzaXplb2YoaWVfdGJsKSwgR0ZQX0tFUk5FTCk7DQorCW1lbWNweShiZl90 YmwtPmllX3RhYmxlLCBpZV90YmwsIHNpemVvZihpZV90YmwpKTsNCisJaWYgKHd2aWYtPmRpc2Fi bGVfYmVhY29uX2ZpbHRlcikgew0KKwkJYmZfY3RybC5lbmFibGUgPSAwOw0KKwkJYmZfY3RybC5i Y25fY291bnQgPSAxOw0KKwkJYmZfdGJsLT5udW1fb2ZfaW5mb19lbG10cyA9IDA7DQorCX0gZWxz ZSBpZiAoIWlzX3N0YSkgew0KKwkJYmZfY3RybC5lbmFibGUgPSBISUZfQkVBQ09OX0ZJTFRFUl9F TkFCTEUgfCBISUZfQkVBQ09OX0ZJTFRFUl9BVVRPX0VSUDsNCisJCWJmX2N0cmwuYmNuX2NvdW50 ID0gMDsNCisJCWJmX3RibC0+bnVtX29mX2luZm9fZWxtdHMgPSAyOw0KKwl9IGVsc2Ugew0KKwkJ YmZfY3RybC5lbmFibGUgPSBISUZfQkVBQ09OX0ZJTFRFUl9FTkFCTEU7DQorCQliZl9jdHJsLmJj bl9jb3VudCA9IDA7DQorCQliZl90YmwtPm51bV9vZl9pbmZvX2VsbXRzID0gMzsNCisJfQ0KKw0K KwlyZXQgPSBoaWZfc2V0X3J4X2ZpbHRlcih3dmlmLCBmaWx0ZXJfYnNzaWQsIGZ3ZF9wcm9iZV9y ZXEpOw0KKwlpZiAoIXJldCkNCisJCXJldCA9IGhpZl9zZXRfYmVhY29uX2ZpbHRlcl90YWJsZSh3 dmlmLCBiZl90YmwpOw0KKwlpZiAoIXJldCkNCisJCXJldCA9IGhpZl9iZWFjb25fZmlsdGVyX2Nv bnRyb2wod3ZpZiwgYmZfY3RybC5lbmFibGUsIGJmX2N0cmwuYmNuX2NvdW50KTsNCisJaWYgKCFy ZXQpDQorCQlyZXQgPSB3Znhfc2V0X21jYXN0X2ZpbHRlcih3dmlmLCAmd3ZpZi0+bWNhc3RfZmls dGVyKTsNCisJaWYgKHJldCkNCisJCWRldl9lcnIod3ZpZi0+d2Rldi0+ZGV2LCAidXBkYXRlIGZp bHRlcmluZyBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KKwlrZnJlZShiZl90YmwpOw0KK30NCisNCit2 b2lkIHdmeF91cGRhdGVfZmlsdGVyaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0K K3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdm eF92aWYsIHVwZGF0ZV9maWx0ZXJpbmdfd29yayk7DQorDQorCXdmeF91cGRhdGVfZmlsdGVyaW5n KHd2aWYpOw0KK30NCisNCit1NjQgd2Z4X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWNfbGlzdCkNCit7DQorCWlu dCBpOw0KKwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOw0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9IE5VTEw7DQorCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQorCWludCBjb3Vu dCA9IG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobWNfbGlzdCk7DQorDQorCXdoaWxlICgod3Zp ZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgew0KKwkJbWVtc2V0KCZ3dmlm LT5tY2FzdF9maWx0ZXIsIDB4MDAsIHNpemVvZih3dmlmLT5tY2FzdF9maWx0ZXIpKTsNCisJCWlm ICghY291bnQgfHwgY291bnQgPiBBUlJBWV9TSVpFKHd2aWYtPm1jYXN0X2ZpbHRlci5hZGRyZXNz X2xpc3QpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJaSA9IDA7DQorCQluZXRkZXZfaHdfYWRkcl9s aXN0X2Zvcl9lYWNoKGhhLCBtY19saXN0KSB7DQorCQkJZXRoZXJfYWRkcl9jb3B5KHd2aWYtPm1j YXN0X2ZpbHRlci5hZGRyZXNzX2xpc3RbaV0sIGhhLT5hZGRyKTsNCisJCQlpKys7DQorCQl9DQor CQl3dmlmLT5tY2FzdF9maWx0ZXIuZW5hYmxlID0gMTsNCisJCXd2aWYtPm1jYXN0X2ZpbHRlci5u dW1fYWRkcmVzc2VzID0gY291bnQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQg d2Z4X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJICAgICB1 bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywNCisJCQkgICAgIHVuc2lnbmVkIGludCAqdG90YWxf ZmxhZ3MsDQorCQkJICAgICB1NjQgdW51c2VkKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYg PSBOVUxMOw0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Ow0KKw0KKwkqdG90YWxf ZmxhZ3MgJj0gRklGX09USEVSX0JTUyB8IEZJRl9GQ1NGQUlMIHwgRklGX1BST0JFX1JFUTsNCisN CisJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7DQor CQlkb3duKCZ3dmlmLT5zY2FuLmxvY2spOw0KKwkJd3ZpZi0+ZmlsdGVyX2Jzc2lkID0gKCp0b3Rh bF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST0JFX1JFUSkpID8gMCA6IDE7DQorCQl3 dmlmLT5kaXNhYmxlX2JlYWNvbl9maWx0ZXIgPSAhKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9CRV9S RVEpOw0KKwkJd2Z4X2Z3ZF9wcm9iZV9yZXEod3ZpZiwgdHJ1ZSk7DQorCQl3ZnhfdXBkYXRlX2Zp bHRlcmluZyh3dmlmKTsNCisJCXVwKCZ3dmlmLT5zY2FuLmxvY2spOw0KKwl9DQorfQ0KKw0KK2lu dCB3ZnhfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwNCisJCSAgIHUxNiBxdWV1ZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1 ZV9wYXJhbXMgKnBhcmFtcykNCit7DQorCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7 DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3By aXY7DQorCWludCByZXQgPSAwOw0KKwkvKiBUbyBwcmV2ZW50IHJlLWFwcGx5aW5nIFBNIHJlcXVl c3QgT0lEIGFnYWluIGFuZCBhZ2FpbiovDQorCXUxNiBvbGRfdWFwc2RfZmxhZ3MsIG5ld191YXBz ZF9mbGFnczsNCisJc3RydWN0IGhpZl9yZXFfZWRjYV9xdWV1ZV9wYXJhbXMgKmVkY2E7DQorDQor CW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOw0KKw0KKwlpZiAocXVldWUgPCBody0+cXVl dWVzKSB7DQorCQlvbGRfdWFwc2RfZmxhZ3MgPSAqKCh1MTYgKikgJnd2aWYtPnVhcHNkX2luZm8p Ow0KKwkJZWRjYSA9ICZ3dmlmLT5lZGNhLnBhcmFtc1txdWV1ZV07DQorDQorCQl3dmlmLT5lZGNh LnVhcHNkX2VuYWJsZVtxdWV1ZV0gPSBwYXJhbXMtPnVhcHNkOw0KKwkJZWRjYS0+YWlmc24gPSBw YXJhbXMtPmFpZnM7DQorCQllZGNhLT5jd19taW4gPSBwYXJhbXMtPmN3X21pbjsNCisJCWVkY2Et PmN3X21heCA9IHBhcmFtcy0+Y3dfbWF4Ow0KKwkJZWRjYS0+dHhfb3BfbGltaXQgPSBwYXJhbXMt PnR4b3AgKiBUWE9QX1VOSVQ7DQorCQllZGNhLT5hbGxvd2VkX21lZGl1bV90aW1lID0gMDsNCisJ CXJldCA9IGhpZl9zZXRfZWRjYV9xdWV1ZV9wYXJhbXMod3ZpZiwgZWRjYSk7DQorCQlpZiAocmV0 KSB7DQorCQkJcmV0ID0gLUVJTlZBTDsNCisJCQlnb3RvIG91dDsNCisJCX0NCisNCisJCWlmICh3 dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgew0KKwkJCXJldCA9IHdm eF9zZXRfdWFwc2RfcGFyYW0od3ZpZiwgJnd2aWYtPmVkY2EpOw0KKwkJCW5ld191YXBzZF9mbGFn cyA9ICooKHUxNiAqKSAmd3ZpZi0+dWFwc2RfaW5mbyk7DQorCQkJaWYgKCFyZXQgJiYgd3ZpZi0+ c2V0YnNzcGFyYW1zX2RvbmUgJiYNCisJCQkgICAgd3ZpZi0+c3RhdGUgPT0gV0ZYX1NUQVRFX1NU QSAmJg0KKwkJCSAgICBvbGRfdWFwc2RfZmxhZ3MgIT0gbmV3X3VhcHNkX2ZsYWdzKQ0KKwkJCQly ZXQgPSB3Znhfc2V0X3BtKHd2aWYsICZ3dmlmLT5wb3dlcnNhdmVfbW9kZSk7DQorCQl9DQorCX0g ZWxzZSB7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwl9DQorDQorb3V0Og0KKwltdXRleF91bmxvY2so JndkZXYtPmNvbmZfbXV0ZXgpOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgd2Z4X3NldF9w bShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3RydWN0IGhpZl9yZXFfc2V0X3BtX21vZGUg KmFyZykNCit7DQorCXN0cnVjdCBoaWZfcmVxX3NldF9wbV9tb2RlIHBtID0gKmFyZzsNCisJdTE2 IHVhcHNkX2ZsYWdzOw0KKwlpbnQgcmV0Ow0KKw0KKwlpZiAod3ZpZi0+c3RhdGUgIT0gV0ZYX1NU QVRFX1NUQSB8fCAhd3ZpZi0+YnNzX3BhcmFtcy5haWQpDQorCQlyZXR1cm4gMDsNCisNCisJbWVt Y3B5KCZ1YXBzZF9mbGFncywgJnd2aWYtPnVhcHNkX2luZm8sIHNpemVvZih1YXBzZF9mbGFncykp Ow0KKw0KKwlpZiAodWFwc2RfZmxhZ3MgIT0gMCkNCisJCXBtLnBtX21vZGUuZmFzdF9wc20gPSAw Ow0KKw0KKwkvLyBLZXJuZWwgZGlzYWJsZSBQb3dlclNhdmUgd2hlbiBtdWx0aXBsZSB2aWZzIGFy ZSBpbiB1c2UuIEluIGNvbnRyYXJ5LA0KKwkvLyBpdCBpcyBhYnNvbHV0bHkgbmVjZXNzYXJ5IHRv IGVuYWJsZSBQb3dlclNhdmUgZm9yIFdGMjAwDQorCWlmICh3dmlmX2NvdW50KHd2aWYtPndkZXYp ID4gMSkgew0KKwkJcG0ucG1fbW9kZS5lbnRlcl9wc20gPSAxOw0KKwkJcG0ucG1fbW9kZS5mYXN0 X3BzbSA9IDA7DQorCX0NCisNCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnd2 aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlLCBtc2Vjc190b19qaWZmaWVzKDMwMCkpKQ0KKwkJZGV2 X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LCAidGltZW91dCB3aGlsZSB3YWl0aW5nIG9mIHNldF9wbV9t b2RlX2NvbXBsZXRlXG4iKTsNCisJcmV0ID0gaGlmX3NldF9wbSh3dmlmLCAmcG0pOw0KKwkvLyBG SVhNRTogd2h5ID8NCisJaWYgKC1FVElNRURPVVQgPT0gd3ZpZi0+c2Nhbi5zdGF0dXMpDQorCQl3 dmlmLT5zY2FuLnN0YXR1cyA9IDE7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK2ludCB3Znhfc2V0 X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkNCit7DQor CXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlm ID0gTlVMTDsNCisNCisJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAh PSBOVUxMKQ0KKwkJaGlmX3J0c190aHJlc2hvbGQod3ZpZiwgdmFsdWUpOw0KKwlyZXR1cm4gMDsN Cit9DQorDQorLyogSWYgc3VjY2Vzc2Z1bCwgTE9DS1MgdGhlIFRYIHF1ZXVlISAqLw0KK3N0YXRp YyBpbnQgX193ZnhfZmx1c2goc3RydWN0IHdmeF9kZXYgKndkZXYsIGJvb2wgZHJvcCkNCit7DQor CWludCByZXQ7DQorDQorCWZvciAoOzspIHsNCisJCWlmIChkcm9wKSB7DQorCQkJd2Z4X3R4X3F1 ZXVlc19jbGVhcih3ZGV2KTsNCisJCX0gZWxzZSB7DQorCQkJcmV0ID0gd2FpdF9ldmVudF90aW1l b3V0KA0KKwkJCQl3ZGV2LT50eF9xdWV1ZV9zdGF0cy53YWl0X2xpbmtfaWRfZW1wdHksDQorCQkJ CXdmeF90eF9xdWV1ZXNfaXNfZW1wdHkod2RldiksDQorCQkJCTIgKiBIWik7DQorCQl9DQorDQor CQlpZiAoIWRyb3AgJiYgcmV0IDw9IDApIHsNCisJCQlyZXQgPSAtRVRJTUVET1VUOw0KKwkJCWJy ZWFrOw0KKwkJfQ0KKwkJcmV0ID0gMDsNCisNCisJCXdmeF90eF9sb2NrX2ZsdXNoKHdkZXYpOw0K KwkJaWYgKCF3ZnhfdHhfcXVldWVzX2lzX2VtcHR5KHdkZXYpKSB7DQorCQkJLyogSGlnaGx5IHVu bGlrZWx5OiBXU00gcmVxdWV1ZWQgZnJhbWVzLiAqLw0KKwkJCXdmeF90eF91bmxvY2sod2Rldik7 DQorCQkJY29udGludWU7DQorCQl9DQorCQlicmVhazsNCisJfQ0KKwlyZXR1cm4gcmV0Ow0KK30N CisNCit2b2lkIHdmeF9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwNCisJCSAgdTMyIHF1ZXVlcywgYm9vbCBkcm9wKQ0KK3sNCisJc3RydWN0 IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsNCisJc3RydWN0IHdmeF92aWYgKnd2aWY7DQorDQor CWlmICh2aWYpIHsNCisJCXd2aWYgPSAoc3RydWN0IHdmeF92aWYgKikgdmlmLT5kcnZfcHJpdjsN CisJCWlmICh3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikNCisJCQlk cm9wID0gdHJ1ZTsNCisJCWlmICh3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAg JiYgIXd2aWYtPmVuYWJsZV9iZWFjb24pDQorCQkJZHJvcCA9IHRydWU7DQorCX0NCisNCisJLy8g RklYTUU6IG9ubHkgZmx1c2ggcmVxdWVzdGVkIHZpZg0KKwlpZiAoIV9fd2Z4X2ZsdXNoKHdkZXYs IGRyb3ApKQ0KKwkJd2Z4X3R4X3VubG9jayh3ZGV2KTsNCit9DQorDQorLyogV1NNIGNhbGxiYWNr cyAqLw0KKw0KK3N0YXRpYyB2b2lkIHdmeF9ldmVudF9yZXBvcnRfcnNzaShzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgdWludDhfdCByYXdfcmNwaV9yc3NpKQ0KK3sNCisJLyogUlNTSTogc2lnbmVkIFE4 LjAsIFJDUEk6IHVuc2lnbmVkIFE3LjENCisJICogUlNTSSA9IFJDUEkgLyAyIC0gMTEwDQorCSAq Lw0KKwlpbnQgcmNwaV9yc3NpOw0KKwlpbnQgY3FtX2V2dDsNCisNCisJcmNwaV9yc3NpID0gcmF3 X3JjcGlfcnNzaSAvIDIgLSAxMTA7DQorCWlmIChyY3BpX3Jzc2kgPD0gd3ZpZi0+Y3FtX3Jzc2lf dGhvbGQpDQorCQljcW1fZXZ0ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfTE9X Ow0KKwllbHNlDQorCQljcW1fZXZ0ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRf SElHSDsNCisJaWVlZTgwMjExX2NxbV9yc3NpX25vdGlmeSh3dmlmLT52aWYsIGNxbV9ldnQsIHJj cGlfcnNzaSwgR0ZQX0tFUk5FTCk7DQorfQ0KKw0KK3ZvaWQgd2Z4X2V2ZW50X2hhbmRsZXJfd29y ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9 DQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIGV2ZW50X2hhbmRsZXJfd29y ayk7DQorCXN0cnVjdCB3ZnhfaGlmX2V2ZW50ICpldmVudDsNCisNCisJTElTVF9IRUFEKGxpc3Qp Ow0KKw0KKwlzcGluX2xvY2soJnd2aWYtPmV2ZW50X3F1ZXVlX2xvY2spOw0KKwlsaXN0X3NwbGlj ZV9pbml0KCZ3dmlmLT5ldmVudF9xdWV1ZSwgJmxpc3QpOw0KKwlzcGluX3VubG9jaygmd3ZpZi0+ ZXZlbnRfcXVldWVfbG9jayk7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZsaXN0 LCBsaW5rKSB7DQorCQlzd2l0Y2ggKGV2ZW50LT5ldnQuZXZlbnRfaWQpIHsNCisJCWNhc2UgSElG X0VWRU5UX0lORF9CU1NMT1NUOg0KKwkJCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPnVuam9pbl93 b3JrKTsNCisJCQlpZiAoIWRvd25fdHJ5bG9jaygmd3ZpZi0+c2Nhbi5sb2NrKSkgew0KKwkJCQl3 ZnhfY3FtX2Jzc2xvc3Nfc20od3ZpZiwgMSwgMCwgMCk7DQorCQkJCXVwKCZ3dmlmLT5zY2FuLmxv Y2spOw0KKwkJCX0gZWxzZSB7DQorCQkJCS8qIFNjYW4gaXMgaW4gcHJvZ3Jlc3MuIERlbGF5IHJl cG9ydGluZy4NCisJCQkJICogU2NhbiBjb21wbGV0ZSB3aWxsIHRyaWdnZXIgYnNzX2xvc3Nfd29y aw0KKwkJCQkgKi8NCisJCQkJd3ZpZi0+ZGVsYXllZF9saW5rX2xvc3MgPSAxOw0KKwkJCQkvKiBB bHNvIHN0YXJ0IGEgd2F0Y2hkb2cuICovDQorCQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmd3Zp Zi0+YnNzX2xvc3Nfd29yaywgNSAqIEhaKTsNCisJCQl9DQorCQkJYnJlYWs7DQorCQljYXNlIEhJ Rl9FVkVOVF9JTkRfQlNTUkVHQUlORUQ6DQorCQkJd2Z4X2NxbV9ic3Nsb3NzX3NtKHd2aWYsIDAs IDAsIDApOw0KKwkJCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPnVuam9pbl93b3JrKTsNCisJCQli cmVhazsNCisJCWNhc2UgSElGX0VWRU5UX0lORF9SQ1BJX1JTU0k6DQorCQkJd2Z4X2V2ZW50X3Jl cG9ydF9yc3NpKHd2aWYsIGV2ZW50LT5ldnQuZXZlbnRfZGF0YS5yY3BpX3Jzc2kpOw0KKwkJCWJy ZWFrOw0KKwkJY2FzZSBISUZfRVZFTlRfSU5EX1BTX01PREVfRVJST1I6DQorCQkJZGV2X3dhcm4o d3ZpZi0+d2Rldi0+ZGV2LCAiZXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBwb3dlciBzYXZlIHJlcXVl c3RcbiIpOw0KKwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlkZXZfd2Fybih3dmlmLT53ZGV2 LT5kZXYsICJ1bmhhbmRsZWQgZXZlbnQgaW5kaWNhdGlvbjogJS4yeFxuIiwgZXZlbnQtPmV2dC5l dmVudF9pZCk7DQorCQkJYnJlYWs7DQorCQl9DQorCX0NCisJX193ZnhfZnJlZV9ldmVudF9xdWV1 ZSgmbGlzdCk7DQorfQ0KKw0KK3ZvaWQgd2Z4X2Jzc19sb3NzX3dvcmsoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29y aywgc3RydWN0IHdmeF92aWYsIGJzc19sb3NzX3dvcmsud29yayk7DQorDQorCWllZWU4MDIxMV9j b25uZWN0aW9uX2xvc3Mod3ZpZi0+dmlmKTsNCit9DQorDQordm9pZCB3ZnhfYnNzX3BhcmFtc193 b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlm ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCBic3NfcGFyYW1zX3dvcmspOw0K Kw0KKwltdXRleF9sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsNCisJd3ZpZi0+YnNzX3Bh cmFtcy5ic3NfZmxhZ3MubG9zdF9jb3VudF9vbmx5ID0gMTsNCisJaGlmX3NldF9ic3NfcGFyYW1z KHd2aWYsICZ3dmlmLT5ic3NfcGFyYW1zKTsNCisJd3ZpZi0+YnNzX3BhcmFtcy5ic3NfZmxhZ3Mu bG9zdF9jb3VudF9vbmx5ID0gMDsNCisJbXV0ZXhfdW5sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211 dGV4KTsNCit9DQorDQordm9pZCB3Znhfc2V0X2JlYWNvbl93YWtldXBfcGVyaW9kX3dvcmsoc3Ry dWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250 YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIHNldF9iZWFjb25fd2FrZXVwX3BlcmlvZF93 b3JrKTsNCisNCisJaGlmX3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZCh3dmlmLCB3dmlmLT5kdGlt X3BlcmlvZCwgd3ZpZi0+ZHRpbV9wZXJpb2QpOw0KK30NCisNCitzdGF0aWMgdm9pZCB3ZnhfZG9f dW5qb2luKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQ0KK3sNCisJbXV0ZXhfbG9jaygmd3ZpZi0+d2Rl di0+Y29uZl9tdXRleCk7DQorDQorCWlmIChhdG9taWNfcmVhZCgmd3ZpZi0+c2Nhbi5pbl9wcm9n cmVzcykpIHsNCisJCWlmICh3dmlmLT5kZWxheWVkX3Vuam9pbikNCisJCQlkZXZfZGJnKHd2aWYt PndkZXYtPmRldiwgImRlbGF5ZWQgdW5qb2luIGlzIGFscmVhZHkgc2NoZWR1bGVkXG4iKTsNCisJ CWVsc2UNCisJCQl3dmlmLT5kZWxheWVkX3Vuam9pbiA9IHRydWU7DQorCQlnb3RvIGRvbmU7DQor CX0NCisNCisJd3ZpZi0+ZGVsYXllZF9saW5rX2xvc3MgPSBmYWxzZTsNCisNCisJaWYgKCF3dmlm LT5zdGF0ZSkNCisJCWdvdG8gZG9uZTsNCisNCisJaWYgKHd2aWYtPnN0YXRlID09IFdGWF9TVEFU RV9BUCkNCisJCWdvdG8gZG9uZTsNCisNCisJY2FuY2VsX3dvcmtfc3luYygmd3ZpZi0+dXBkYXRl X2ZpbHRlcmluZ193b3JrKTsNCisJY2FuY2VsX3dvcmtfc3luYygmd3ZpZi0+c2V0X2JlYWNvbl93 YWtldXBfcGVyaW9kX3dvcmspOw0KKwl3dmlmLT5zdGF0ZSA9IFdGWF9TVEFURV9QQVNTSVZFOw0K Kw0KKwkvKiBVbmpvaW4gaXMgYSByZXNldC4gKi8NCisJd2Z4X3R4X2ZsdXNoKHd2aWYtPndkZXYp Ow0KKwloaWZfa2VlcF9hbGl2ZV9wZXJpb2Qod3ZpZiwgMCk7DQorCWhpZl9yZXNldCh3dmlmLCBm YWxzZSk7DQorCWhpZl9zZXRfb3V0cHV0X3Bvd2VyKHd2aWYsIHd2aWYtPndkZXYtPm91dHB1dF9w b3dlciAqIDEwKTsNCisJd3ZpZi0+ZHRpbV9wZXJpb2QgPSAwOw0KKwloaWZfc2V0X21hY2FkZHIo d3ZpZiwgd3ZpZi0+dmlmLT5hZGRyKTsNCisJd2Z4X2ZyZWVfZXZlbnRfcXVldWUod3ZpZik7DQor CWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPmV2ZW50X2hhbmRsZXJfd29yayk7DQorCXdmeF9jcW1f YnNzbG9zc19zbSh3dmlmLCAwLCAwLCAwKTsNCisNCisJLyogRGlzYWJsZSBCbG9jayBBQ0tzICov DQorCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAwLCAwKTsNCisNCisJd3ZpZi0+ZGlz YWJsZV9iZWFjb25fZmlsdGVyID0gZmFsc2U7DQorCXdmeF91cGRhdGVfZmlsdGVyaW5nKHd2aWYp Ow0KKwltZW1zZXQoJnd2aWYtPmJzc19wYXJhbXMsIDAsIHNpemVvZih3dmlmLT5ic3NfcGFyYW1z KSk7DQorCXd2aWYtPnNldGJzc3BhcmFtc19kb25lID0gZmFsc2U7DQorCW1lbXNldCgmd3ZpZi0+ aHRfaW5mbywgMCwgc2l6ZW9mKHd2aWYtPmh0X2luZm8pKTsNCisNCitkb25lOg0KKwltdXRleF91 bmxvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOw0KK30NCisNCitzdGF0aWMgdm9pZCB3Znhf c2V0X21mcChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKQ0K K3sNCisJY29uc3QgaW50IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9jb3VudF9vZmZzZXQgPSA4IC8g c2l6ZW9mKHVpbnQxNl90KTsNCisJY29uc3QgaW50IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9zaXpl ID0gNCAvIHNpemVvZih1aW50MTZfdCk7DQorCWNvbnN0IGludCBha21fc3VpdGVfc2l6ZSA9IDQg LyBzaXplb2YodWludDE2X3QpOw0KKwljb25zdCB1aW50MTZfdCAqcHRyID0gTlVMTDsNCisJYm9v bCBtZnBjID0gZmFsc2U7DQorCWJvb2wgbWZwciA9IGZhbHNlOw0KKw0KKwkvKiA4MDIuMTF3IHBy b3RlY3RlZCBtZ210IGZyYW1lcyAqLw0KKw0KKwkvKiByZXRyaWV2ZSBNRlBDIGFuZCBNRlBSIGZs YWdzIGZyb20gYmVhY29uIG9yIFBCUlNQICovDQorDQorCXJjdV9yZWFkX2xvY2soKTsNCisJaWYg KGJzcykNCisJCXB0ciA9IChjb25zdCB1aW50MTZfdCAqKSBpZWVlODAyMTFfYnNzX2dldF9pZShi c3MsIFdMQU5fRUlEX1JTTik7DQorDQorCWlmIChwdHIpIHsNCisJCXB0ciArPSBwYWlyd2lzZV9j aXBoZXJfc3VpdGVfY291bnRfb2Zmc2V0Ow0KKwkJcHRyICs9IDEgKyBwYWlyd2lzZV9jaXBoZXJf c3VpdGVfc2l6ZSAqICpwdHI7DQorCQlwdHIgKz0gMSArIGFrbV9zdWl0ZV9zaXplICogKnB0cjsN CisJCW1mcHIgPSAqcHRyICYgQklUKDYpOw0KKwkJbWZwYyA9ICpwdHIgJiBCSVQoNyk7DQorCX0N CisJcmN1X3JlYWRfdW5sb2NrKCk7DQorDQorCWhpZl9zZXRfbWZwKHd2aWYsIG1mcGMsIG1mcHIp Ow0KK30NCisNCisvKiBNVVNUIGJlIGNhbGxlZCB3aXRoIHR4X2xvY2sgaGVsZCEgIEl0IHdpbGwg YmUgdW5sb2NrZWQgZm9yIHVzLiAqLw0KK3N0YXRpYyB2b2lkIHdmeF9kb19qb2luKHN0cnVjdCB3 ZnhfdmlmICp3dmlmKQ0KK3sNCisJY29uc3QgdTggKmJzc2lkOw0KKwlzdHJ1Y3QgaWVlZTgwMjEx X2Jzc19jb25mICpjb25mID0gJnd2aWYtPnZpZi0+YnNzX2NvbmY7DQorCXN0cnVjdCBjZmc4MDIx MV9ic3MgKmJzcyA9IE5VTEw7DQorCXN0cnVjdCBoaWZfcmVxX2pvaW4gam9pbiA9IHsNCisJCS5t b2RlID0gY29uZi0+aWJzc19qb2luZWQgPyBISUZfTU9ERV9JQlNTIDogSElGX01PREVfQlNTLA0K KwkJLnByZWFtYmxlX3R5cGUgPSBjb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUgPyBISUZfUFJFQU1C TEVfU0hPUlQgOiBISUZfUFJFQU1CTEVfTE9ORywNCisJCS5wcm9iZV9mb3Jfam9pbiA9IDEsDQor CQkuYXRpbV93aW5kb3cgPSAwLA0KKwkJLmJhc2ljX3JhdGVfc2V0ID0gd2Z4X3JhdGVfbWFza190 b19odyh3dmlmLT53ZGV2LCBjb25mLT5iYXNpY19yYXRlcyksDQorCX07DQorDQorCWlmICh3dmlm LT5jaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0lSKQ0KKwkJam9pbi5wcm9iZV9m b3Jfam9pbiA9IDA7DQorDQorCWlmICh3dmlmLT5zdGF0ZSkNCisJCXdmeF9kb191bmpvaW4od3Zp Zik7DQorDQorCWJzc2lkID0gd3ZpZi0+dmlmLT5ic3NfY29uZi5ic3NpZDsNCisNCisJYnNzID0g Y2ZnODAyMTFfZ2V0X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHksIHd2aWYtPmNoYW5uZWwsIGJz c2lkLCBOVUxMLCAwLA0KKwkJCSAgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLCBJRUVFODAy MTFfUFJJVkFDWV9BTlkpOw0KKw0KKwlpZiAoIWJzcyAmJiAhY29uZi0+aWJzc19qb2luZWQpIHsN CisJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCQlyZXR1cm47DQorCX0NCisNCisJbXV0 ZXhfbG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRleCk7DQorDQorCS8qIFVuZGVyIHRoZSBjb25m IGxvY2s6IGNoZWNrIHNjYW4gc3RhdHVzIGFuZA0KKwkgKiBiYWlsIG91dCBpZiBpdCBpcyBpbiBw cm9ncmVzcy4NCisJICovDQorCWlmIChhdG9taWNfcmVhZCgmd3ZpZi0+c2Nhbi5pbl9wcm9ncmVz cykpIHsNCisJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCQlnb3RvIGRvbmVfcHV0Ow0K Kwl9DQorDQorCS8qIFNhbml0eSBjaGVjayBiYXNpYyByYXRlcyAqLw0KKwlpZiAoIWpvaW4uYmFz aWNfcmF0ZV9zZXQpDQorCQlqb2luLmJhc2ljX3JhdGVfc2V0ID0gNzsNCisNCisJLyogU2FuaXR5 IGNoZWNrIGJlYWNvbiBpbnRlcnZhbCAqLw0KKwlpZiAoIXd2aWYtPmJlYWNvbl9pbnQpDQorCQl3 dmlmLT5iZWFjb25faW50ID0gMTsNCisNCisJam9pbi5iZWFjb25faW50ZXJ2YWwgPSB3dmlmLT5i ZWFjb25faW50Ow0KKw0KKwkvLyBEVElNIHBlcmlvZCB3aWxsIGJlIHNldCBvbiBmaXJzdCBCZWFj b24NCisJd3ZpZi0+ZHRpbV9wZXJpb2QgPSAwOw0KKw0KKwlqb2luLmNoYW5uZWxfbnVtYmVyID0g d3ZpZi0+Y2hhbm5lbC0+aHdfdmFsdWU7DQorCW1lbWNweShqb2luLmJzc2lkLCBic3NpZCwgc2l6 ZW9mKGpvaW4uYnNzaWQpKTsNCisNCisJaWYgKCFjb25mLT5pYnNzX2pvaW5lZCkgew0KKwkJY29u c3QgdTggKnNzaWRpZTsNCisNCisJCXJjdV9yZWFkX2xvY2soKTsNCisJCXNzaWRpZSA9IGllZWU4 MDIxMV9ic3NfZ2V0X2llKGJzcywgV0xBTl9FSURfU1NJRCk7DQorCQlpZiAoc3NpZGllKSB7DQor CQkJam9pbi5zc2lkX2xlbmd0aCA9IHNzaWRpZVsxXTsNCisJCQltZW1jcHkoam9pbi5zc2lkLCAm c3NpZGllWzJdLCBqb2luLnNzaWRfbGVuZ3RoKTsNCisJCX0NCisJCXJjdV9yZWFkX3VubG9jaygp Ow0KKwl9DQorDQorCXdmeF90eF9mbHVzaCh3dmlmLT53ZGV2KTsNCisNCisJaWYgKHd2aWZfY291 bnQod3ZpZi0+d2RldikgPD0gMSkNCisJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAw eEZGLCAweEZGKTsNCisNCisJd2Z4X3NldF9tZnAod3ZpZiwgYnNzKTsNCisNCisJLyogUGVyZm9y bSBhY3R1YWwgam9pbiAqLw0KKwl3dmlmLT53ZGV2LT50eF9idXJzdF9pZHggPSAtMTsNCisJaWYg KGhpZl9qb2luKHd2aWYsICZqb2luKSkgew0KKwkJaWVlZTgwMjExX2Nvbm5lY3Rpb25fbG9zcyh3 dmlmLT52aWYpOw0KKwkJd3ZpZi0+am9pbl9jb21wbGV0ZV9zdGF0dXMgPSAtMTsNCisJCS8qIFR4 IGxvY2sgc3RpbGwgaGVsZCwgdW5qb2luIHdpbGwgY2xlYXIgaXQuICovDQorCQlpZiAoIXNjaGVk dWxlX3dvcmsoJnd2aWYtPnVuam9pbl93b3JrKSkNCisJCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndk ZXYpOw0KKwl9IGVsc2Ugew0KKwkJd3ZpZi0+am9pbl9jb21wbGV0ZV9zdGF0dXMgPSAwOw0KKwkJ aWYgKHd2aWYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykNCisJCQl3dmlmLT5z dGF0ZSA9IFdGWF9TVEFURV9JQlNTOw0KKwkJZWxzZQ0KKwkJCXd2aWYtPnN0YXRlID0gV0ZYX1NU QVRFX1BSRV9TVEE7DQorCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOw0KKw0KKwkJLyogVXBs b2FkIGtleXMgKi8NCisJCXdmeF91cGxvYWRfa2V5cyh3dmlmKTsNCisNCisJCS8qIER1ZSB0byBi ZWFjb24gZmlsdGVyaW5nIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlDQorCQkgKiBBUCdzIGJlYWNv biBpcyBub3Qga25vd24gZm9yIHRoZSBtYWM4MDIxMSBzdGFjay4NCisJCSAqIERpc2FibGUgZmls dGVyaW5nIHRlbXBvcmFyeSB0byBtYWtlIHN1cmUgdGhlIHN0YWNrDQorCQkgKiByZWNlaXZlcyBh dCBsZWFzdCBvbmUNCisJCSAqLw0KKwkJd3ZpZi0+ZGlzYWJsZV9iZWFjb25fZmlsdGVyID0gdHJ1 ZTsNCisJfQ0KKwl3ZnhfdXBkYXRlX2ZpbHRlcmluZyh3dmlmKTsNCisNCitkb25lX3B1dDoNCisJ bXV0ZXhfdW5sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsNCisJaWYgKGJzcykNCisJCWNm ZzgwMjExX3B1dF9ic3Mod3ZpZi0+d2Rldi0+aHctPndpcGh5LCBic3MpOw0KK30NCisNCit2b2lk IHdmeF91bmpvaW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgdW5qb2lu X3dvcmspOw0KKw0KKwl3ZnhfZG9fdW5qb2luKHd2aWYpOw0KKwl3ZnhfdHhfdW5sb2NrKHd2aWYt PndkZXYpOw0KK30NCisNCitpbnQgd2Z4X3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3Rh KQ0KK3sNCisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsNCisJc3RydWN0IHdmeF92 aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKikgdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IHdm eF9zdGFfcHJpdiAqc3RhX3ByaXYgPSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSAmc3RhLT5kcnZf cHJpdjsNCisJc3RydWN0IHdmeF9saW5rX2VudHJ5ICplbnRyeTsNCisJc3RydWN0IHNrX2J1ZmYg KnNrYjsNCisNCisJaWYgKHd2aWYtPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkNCisJ CXJldHVybiAwOw0KKw0KKwlzdGFfcHJpdi0+dmlmX2lkID0gd3ZpZi0+aWQ7DQorCXN0YV9wcml2 LT5saW5rX2lkID0gd2Z4X2ZpbmRfbGlua19pZCh3dmlmLCBzdGEtPmFkZHIpOw0KKwlpZiAoIXN0 YV9wcml2LT5saW5rX2lkKSB7DQorCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJtbyBtb3JlIGxpbmst aWQgYXZhaWxhYmxlXG4iKTsNCisJCXJldHVybiAtRU5PRU5UOw0KKwl9DQorDQorCWVudHJ5ID0g Jnd2aWYtPmxpbmtfaWRfZGJbc3RhX3ByaXYtPmxpbmtfaWQgLSAxXTsNCisJc3Bpbl9sb2NrX2Jo KCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisJaWYgKChzdGEtPnVhcHNkX3F1ZXVlcyAmIElFRUU4 MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fQUNfTUFTSykgPT0NCisJCQkJCUlFRUU4MDIxMV9XTU1f SUVfU1RBX1FPU0lORk9fQUNfTUFTSykNCisJCXd2aWYtPnN0YV9hc2xlZXBfbWFzayB8PSBCSVQo c3RhX3ByaXYtPmxpbmtfaWQpOw0KKwllbnRyeS0+c3RhdHVzID0gV0ZYX0xJTktfSEFSRDsNCisJ d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZW50cnktPnJ4X3F1ZXVlKSkpDQorCQlpZWVlODAy MTFfcnhfaXJxc2FmZSh3ZGV2LT5odywgc2tiKTsNCisJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBz X3N0YXRlX2xvY2spOw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IHdmeF9zdGFfcmVtb3ZlKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAg c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0g aHctPnByaXY7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopIHZp Zi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCB3Znhfc3RhX3ByaXYgKnN0YV9wcml2ID0gKHN0cnVjdCB3 Znhfc3RhX3ByaXYgKikgJnN0YS0+ZHJ2X3ByaXY7DQorCXN0cnVjdCB3ZnhfbGlua19lbnRyeSAq ZW50cnk7DQorDQorCWlmICh3dmlmLT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwg IXN0YV9wcml2LT5saW5rX2lkKQ0KKwkJcmV0dXJuIDA7DQorDQorCWVudHJ5ID0gJnd2aWYtPmxp bmtfaWRfZGJbc3RhX3ByaXYtPmxpbmtfaWQgLSAxXTsNCisJc3Bpbl9sb2NrX2JoKCZ3dmlmLT5w c19zdGF0ZV9sb2NrKTsNCisJZW50cnktPnN0YXR1cyA9IFdGWF9MSU5LX1JFU0VSVkU7DQorCWVu dHJ5LT50aW1lc3RhbXAgPSBqaWZmaWVzOw0KKwl3ZnhfdHhfbG9jayh3ZGV2KTsNCisJaWYgKCFz Y2hlZHVsZV93b3JrKCZ3dmlmLT5saW5rX2lkX3dvcmspKQ0KKwkJd2Z4X3R4X3VubG9jayh3ZGV2 KTsNCisJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwlmbHVzaF93b3Jr KCZ3dmlmLT5saW5rX2lkX3dvcmspOw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCB3Znhfc2V0 X2N0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCB3Znhfdmlm ICp3dmlmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCBzZXRfY3RzX3dvcmsp Ow0KKwl1OCBlcnBfaWVbM10gPSB7IFdMQU5fRUlEX0VSUF9JTkZPLCAxLCAwIH07DQorCXN0cnVj dCBoaWZfaWVfZmxhZ3MgdGFyZ2V0X2ZyYW1lID0gew0KKwkJLmJlYWNvbiA9IDEsDQorCX07DQor DQorCW11dGV4X2xvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOw0KKwllcnBfaWVbMl0gPSB3 dmlmLT5lcnBfaW5mbzsNCisJbXV0ZXhfdW5sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsN CisNCisJaGlmX2VycF91c2VfcHJvdGVjdGlvbih3dmlmLCBlcnBfaWVbMl0gJiBXTEFOX0VSUF9V U0VfUFJPVEVDVElPTik7DQorDQorCWlmICh3dmlmLT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZ UEVfU1RBVElPTikNCisJCWhpZl91cGRhdGVfaWUod3ZpZiwgJnRhcmdldF9mcmFtZSwgZXJwX2ll LCBzaXplb2YoZXJwX2llKSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgd2Z4X3N0YXJ0X2FwKHN0cnVj dCB3ZnhfdmlmICp3dmlmKQ0KK3sNCisJaW50IHJldDsNCisJc3RydWN0IGllZWU4MDIxMV9ic3Nf Y29uZiAqY29uZiA9ICZ3dmlmLT52aWYtPmJzc19jb25mOw0KKwlzdHJ1Y3QgaGlmX3JlcV9zdGFy dCBzdGFydCA9IHsNCisJCS5jaGFubmVsX251bWJlciA9IHd2aWYtPmNoYW5uZWwtPmh3X3ZhbHVl LA0KKwkJLmJlYWNvbl9pbnRlcnZhbCA9IGNvbmYtPmJlYWNvbl9pbnQsDQorCQkuZHRpbV9wZXJp b2QgPSBjb25mLT5kdGltX3BlcmlvZCwNCisJCS5wcmVhbWJsZV90eXBlID0gY29uZi0+dXNlX3No b3J0X3ByZWFtYmxlID8gSElGX1BSRUFNQkxFX1NIT1JUIDogSElGX1BSRUFNQkxFX0xPTkcsDQor CQkuYmFzaWNfcmF0ZV9zZXQgPSB3ZnhfcmF0ZV9tYXNrX3RvX2h3KHd2aWYtPndkZXYsIGNvbmYt PmJhc2ljX3JhdGVzKSwNCisJfTsNCisNCisJbWVtc2V0KHN0YXJ0LnNzaWQsIDAsIHNpemVvZihz dGFydC5zc2lkKSk7DQorCWlmICghY29uZi0+aGlkZGVuX3NzaWQpIHsNCisJCXN0YXJ0LnNzaWRf bGVuZ3RoID0gY29uZi0+c3NpZF9sZW47DQorCQltZW1jcHkoc3RhcnQuc3NpZCwgY29uZi0+c3Np ZCwgc3RhcnQuc3NpZF9sZW5ndGgpOw0KKwl9DQorDQorCXd2aWYtPmJlYWNvbl9pbnQgPSBjb25m LT5iZWFjb25faW50Ow0KKwl3dmlmLT5kdGltX3BlcmlvZCA9IGNvbmYtPmR0aW1fcGVyaW9kOw0K Kw0KKwltZW1zZXQoJnd2aWYtPmxpbmtfaWRfZGIsIDAsIHNpemVvZih3dmlmLT5saW5rX2lkX2Ri KSk7DQorDQorCXd2aWYtPndkZXYtPnR4X2J1cnN0X2lkeCA9IC0xOw0KKwlyZXQgPSBoaWZfc3Rh cnQod3ZpZiwgJnN0YXJ0KTsNCisJaWYgKCFyZXQpDQorCQlyZXQgPSB3ZnhfdXBsb2FkX2tleXMo d3ZpZik7DQorCWlmICghcmV0KSB7DQorCQlpZiAod3ZpZl9jb3VudCh3dmlmLT53ZGV2KSA8PSAx KQ0KKwkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweEZGLCAweEZGKTsNCisJCXd2 aWYtPnN0YXRlID0gV0ZYX1NUQVRFX0FQOw0KKwkJd2Z4X3VwZGF0ZV9maWx0ZXJpbmcod3ZpZik7 DQorCX0NCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCB3ZnhfdXBkYXRlX2JlYWNv bmluZyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfYnNzX2Nv bmYgKmNvbmYgPSAmd3ZpZi0+dmlmLT5ic3NfY29uZjsNCisNCisJaWYgKHd2aWYtPnZpZi0+dHlw ZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgew0KKwkJLyogVE9ETzogY2hlY2sgaWYgY2hhbmdlZCBj aGFubmVsLCBiYW5kICovDQorCQlpZiAod3ZpZi0+c3RhdGUgIT0gV0ZYX1NUQVRFX0FQIHx8DQor CQkgICAgd3ZpZi0+YmVhY29uX2ludCAhPSBjb25mLT5iZWFjb25faW50KSB7DQorCQkJd2Z4X3R4 X2xvY2tfZmx1c2god3ZpZi0+d2Rldik7DQorCQkJaWYgKHd2aWYtPnN0YXRlICE9IFdGWF9TVEFU RV9QQVNTSVZFKQ0KKwkJCQloaWZfcmVzZXQod3ZpZiwgZmFsc2UpOw0KKwkJCXd2aWYtPnN0YXRl ID0gV0ZYX1NUQVRFX1BBU1NJVkU7DQorCQkJd2Z4X3N0YXJ0X2FwKHd2aWYpOw0KKwkJCXdmeF90 eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCQl9IGVsc2Ugew0KKwkJfQ0KKwl9DQorCXJldHVybiAw Ow0KK30NCisNCitzdGF0aWMgaW50IHdmeF91cGxvYWRfYmVhY29uKHN0cnVjdCB3ZnhfdmlmICp3 dmlmKQ0KK3sNCisJaW50IHJldCA9IDA7DQorCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOw0K KwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7DQorCXN0cnVjdCBoaWZfbWliX3RlbXBsYXRl X2ZyYW1lICpwOw0KKw0KKwlpZiAod3ZpZi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NU QVRJT04gfHwNCisJICAgIHd2aWYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9S IHx8DQorCSAgICB3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQp DQorCQlnb3RvIGRvbmU7DQorDQorCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHd2aWYtPndk ZXYtPmh3LCB3dmlmLT52aWYpOw0KKw0KKwlpZiAoIXNrYikNCisJCXJldHVybiAtRU5PTUVNOw0K Kw0KKwlwID0gKHN0cnVjdCBoaWZfbWliX3RlbXBsYXRlX2ZyYW1lICopIHNrYl9wdXNoKHNrYiwg NCk7DQorCXAtPmZyYW1lX3R5cGUgPSBISUZfVE1QTFRfQkNOOw0KKwlwLT5pbml0X3JhdGUgPSBB UElfUkFURV9JTkRFWF9CXzFNQlBTOyAvKiAxTWJwcyBEU1NTICovDQorCXAtPmZyYW1lX2xlbmd0 aCA9IGNwdV90b19sZTE2KHNrYi0+bGVuIC0gNCk7DQorDQorCXJldCA9IGhpZl9zZXRfdGVtcGxh dGVfZnJhbWUod3ZpZiwgcCk7DQorDQorCXNrYl9wdWxsKHNrYiwgNCk7DQorDQorCWlmIChyZXQp DQorCQlnb3RvIGRvbmU7DQorCS8qIFRPRE86IERpc3RpbGwgcHJvYmUgcmVzcDsgcmVtb3ZlIFRJ TSBhbmQgYW55IG90aGVyIGJlYWNvbi1zcGVjaWZpYw0KKwkgKiBJRXMNCisJICovDQorCW1nbXQg PSAodm9pZCAqKXNrYi0+ZGF0YTsNCisJbWdtdC0+ZnJhbWVfY29udHJvbCA9DQorCQljcHVfdG9f bGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsN CisNCisJcC0+ZnJhbWVfdHlwZSA9IEhJRl9UTVBMVF9QUkJSRVM7DQorDQorCXJldCA9IGhpZl9z ZXRfdGVtcGxhdGVfZnJhbWUod3ZpZiwgcCk7DQorCXdmeF9md2RfcHJvYmVfcmVxKHd2aWYsIGZh bHNlKTsNCisNCitkb25lOg0KKwlpZiAoIXNrYikNCisJCWRldl9rZnJlZV9za2Ioc2tiKTsNCisJ cmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCB3ZnhfaXNfaHQoY29uc3Qgc3RydWN0IHdm eF9odF9pbmZvICpodF9pbmZvKQ0KK3sNCisJcmV0dXJuIGh0X2luZm8tPmNoYW5uZWxfdHlwZSAh PSBOTDgwMjExX0NIQU5fTk9fSFQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgd2Z4X2h0X2dyZWVuZmll bGQoY29uc3Qgc3RydWN0IHdmeF9odF9pbmZvICpodF9pbmZvKQ0KK3sNCisJcmV0dXJuIHdmeF9p c19odChodF9pbmZvKSAmJg0KKwkJKGh0X2luZm8tPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRf Q0FQX0dSTl9GTEQpICYmDQorCQkhKGh0X2luZm8tPm9wZXJhdGlvbl9tb2RlICYNCisJCSAgSUVF RTgwMjExX0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQg d2Z4X2h0X2FtcGR1X2RlbnNpdHkoY29uc3Qgc3RydWN0IHdmeF9odF9pbmZvICpodF9pbmZvKQ0K K3sNCisJaWYgKCF3ZnhfaXNfaHQoaHRfaW5mbykpDQorCQlyZXR1cm4gMDsNCisJcmV0dXJuIGh0 X2luZm8tPmh0X2NhcC5hbXBkdV9kZW5zaXR5Ow0KK30NCisNCitzdGF0aWMgdm9pZCB3Znhfam9p bl9maW5hbGl6ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4MDIxMV9ic3NfY29u ZiAqaW5mbykNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOw0KKwlzdHJ1 Y3QgaGlmX21pYl9zZXRfYXNzb2NpYXRpb25fbW9kZSBhc3NvY2lhdGlvbl9tb2RlID0geyB9Ow0K Kw0KKwlpZiAoaW5mby0+ZHRpbV9wZXJpb2QpDQorCQl3dmlmLT5kdGltX3BlcmlvZCA9IGluZm8t PmR0aW1fcGVyaW9kOw0KKwl3dmlmLT5iZWFjb25faW50ID0gaW5mby0+YmVhY29uX2ludDsNCisN CisJcmN1X3JlYWRfbG9jaygpOw0KKwlpZiAoaW5mby0+YnNzaWQgJiYgIWluZm8tPmlic3Nfam9p bmVkKQ0KKwkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHd2aWYtPnZpZiwgaW5mby0+YnNzaWQp Ow0KKwlpZiAoc3RhKSB7DQorCQl3dmlmLT5odF9pbmZvLmh0X2NhcCA9IHN0YS0+aHRfY2FwOw0K KwkJd3ZpZi0+YnNzX3BhcmFtcy5vcGVyYXRpb25hbF9yYXRlX3NldCA9DQorCQkJd2Z4X3JhdGVf bWFza190b19odyh3dmlmLT53ZGV2LCBzdGEtPnN1cHBfcmF0ZXNbd3ZpZi0+Y2hhbm5lbC0+YmFu ZF0pOw0KKwkJd3ZpZi0+aHRfaW5mby5vcGVyYXRpb25fbW9kZSA9IGluZm8tPmh0X29wZXJhdGlv bl9tb2RlOw0KKwl9IGVsc2Ugew0KKwkJbWVtc2V0KCZ3dmlmLT5odF9pbmZvLCAwLCBzaXplb2Yo d3ZpZi0+aHRfaW5mbykpOw0KKwkJd3ZpZi0+YnNzX3BhcmFtcy5vcGVyYXRpb25hbF9yYXRlX3Nl dCA9IC0xOw0KKwl9DQorCXJjdV9yZWFkX3VubG9jaygpOw0KKw0KKwkvKiBOb24gR3JlZW5maWVs ZCBzdGF0aW9ucyBwcmVzZW50ICovDQorCWlmICh3dmlmLT5odF9pbmZvLm9wZXJhdGlvbl9tb2Rl ICYgSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVCkNCisJCWhpZl9kdWFsX2N0 c19wcm90ZWN0aW9uKHd2aWYsIHRydWUpOw0KKwllbHNlDQorCQloaWZfZHVhbF9jdHNfcHJvdGVj dGlvbih3dmlmLCBmYWxzZSk7DQorDQorCWFzc29jaWF0aW9uX21vZGUucHJlYW1idHlwZV91c2Ug PSAxOw0KKwlhc3NvY2lhdGlvbl9tb2RlLm1vZGUgPSAxOw0KKwlhc3NvY2lhdGlvbl9tb2RlLnJh dGVzZXQgPSAxOw0KKwlhc3NvY2lhdGlvbl9tb2RlLnNwYWNpbmcgPSAxOw0KKwlhc3NvY2lhdGlv bl9tb2RlLnByZWFtYmxlX3R5cGUgPSBpbmZvLT51c2Vfc2hvcnRfcHJlYW1ibGUgPyBISUZfUFJF QU1CTEVfU0hPUlQgOiBISUZfUFJFQU1CTEVfTE9ORzsNCisJYXNzb2NpYXRpb25fbW9kZS5iYXNp Y19yYXRlX3NldCA9IGNwdV90b19sZTMyKHdmeF9yYXRlX21hc2tfdG9faHcod3ZpZi0+d2Rldiwg aW5mby0+YmFzaWNfcmF0ZXMpKTsNCisJYXNzb2NpYXRpb25fbW9kZS5taXhlZF9vcl9ncmVlbmZp ZWxkX3R5cGUgPSB3ZnhfaHRfZ3JlZW5maWVsZCgmd3ZpZi0+aHRfaW5mbyk7DQorCWFzc29jaWF0 aW9uX21vZGUubXBkdV9zdGFydF9zcGFjaW5nID0gd2Z4X2h0X2FtcGR1X2RlbnNpdHkoJnd2aWYt Pmh0X2luZm8pOw0KKw0KKwl3ZnhfY3FtX2Jzc2xvc3Nfc20od3ZpZiwgMCwgMCwgMCk7DQorCWNh bmNlbF93b3JrX3N5bmMoJnd2aWYtPnVuam9pbl93b3JrKTsNCisNCisJd3ZpZi0+YnNzX3BhcmFt cy5iZWFjb25fbG9zdF9jb3VudCA9IDIwOw0KKwl3dmlmLT5ic3NfcGFyYW1zLmFpZCA9IGluZm8t PmFpZDsNCisNCisJaWYgKHd2aWYtPmR0aW1fcGVyaW9kIDwgMSkNCisJCXd2aWYtPmR0aW1fcGVy aW9kID0gMTsNCisNCisJaGlmX3NldF9hc3NvY2lhdGlvbl9tb2RlKHd2aWYsICZhc3NvY2lhdGlv bl9tb2RlKTsNCisNCisJaWYgKCFpbmZvLT5pYnNzX2pvaW5lZCkgew0KKwkJaGlmX2tlZXBfYWxp dmVfcGVyaW9kKHd2aWYsIDMwIC8qIHNlYyAqLyk7DQorCQloaWZfc2V0X2Jzc19wYXJhbXMod3Zp ZiwgJnd2aWYtPmJzc19wYXJhbXMpOw0KKwkJd3ZpZi0+c2V0YnNzcGFyYW1zX2RvbmUgPSB0cnVl Ow0KKwkJd2Z4X3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZF93b3JrKCZ3dmlmLT5zZXRfYmVhY29u X3dha2V1cF9wZXJpb2Rfd29yayk7DQorCQl3Znhfc2V0X3BtKHd2aWYsICZ3dmlmLT5wb3dlcnNh dmVfbW9kZSk7DQorCX0NCit9DQorDQordm9pZCB3ZnhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywNCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQor CQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLA0KKwkJCSAgICAgdTMyIGNo YW5nZWQpDQorew0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB2aWYtPmRydl9wcml2Ow0KKwlib29s IGRvX2pvaW4gPSBmYWxzZTsNCisJaW50IGk7DQorCWludCBuYl9hcnBfYWRkcjsNCisNCisJbXV0 ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRleCk7DQorDQorCS8qIFRPRE86IEJTU19DSEFOR0VEX1FP UyAqLw0KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FSUF9GSUxURVIpIHsNCisJCXN0cnVj dCBoaWZfbWliX2FycF9pcF9hZGRyX3RhYmxlIGZpbHRlciA9IHsgfTsNCisNCisJCW5iX2FycF9h ZGRyID0gaW5mby0+YXJwX2FkZHJfY250Ow0KKwkJaWYgKG5iX2FycF9hZGRyIDw9IDAgfHwgbmJf YXJwX2FkZHIgPiBISUZfTUFYX0FSUF9JUF9BRERSVEFCTEVfRU5UUklFUykNCisJCQluYl9hcnBf YWRkciA9IDA7DQorDQorCQlmb3IgKGkgPSAwOyBpIDwgSElGX01BWF9BUlBfSVBfQUREUlRBQkxF X0VOVFJJRVM7IGkrKykgew0KKwkJCWZpbHRlci5jb25kaXRpb25faWR4ID0gaTsNCisJCQlpZiAo aSA8IG5iX2FycF9hZGRyKSB7DQorCQkJCS8vIENhdXRpb246IHR5cGUgb2YgYXJwX2FkZHJfbGlz dFtpXSBpcyBfX2JlMzINCisJCQkJbWVtY3B5KGZpbHRlci5pcHY0X2FkZHJlc3MsICZpbmZvLT5h cnBfYWRkcl9saXN0W2ldLCBzaXplb2YoZmlsdGVyLmlwdjRfYWRkcmVzcykpOw0KKwkJCQlmaWx0 ZXIuYXJwX2VuYWJsZSA9IEhJRl9BUlBfTlNfRklMVEVSSU5HX0VOQUJMRTsNCisJCQl9IGVsc2Ug ew0KKwkJCQlmaWx0ZXIuYXJwX2VuYWJsZSA9IEhJRl9BUlBfTlNfRklMVEVSSU5HX0RJU0FCTEU7 DQorCQkJfQ0KKwkJCWhpZl9zZXRfYXJwX2lwdjRfZmlsdGVyKHd2aWYsICZmaWx0ZXIpOw0KKwkJ fQ0KKwl9DQorDQorCWlmIChjaGFuZ2VkICYNCisJICAgIChCU1NfQ0hBTkdFRF9CRUFDT04gfCBC U1NfQ0hBTkdFRF9BUF9QUk9CRV9SRVNQIHwNCisJICAgICBCU1NfQ0hBTkdFRF9CU1NJRCB8IEJT U19DSEFOR0VEX1NTSUQgfCBCU1NfQ0hBTkdFRF9JQlNTKSkgew0KKwkJd3ZpZi0+YmVhY29uX2lu dCA9IGluZm8tPmJlYWNvbl9pbnQ7DQorCQl3ZnhfdXBkYXRlX2JlYWNvbmluZyh3dmlmKTsNCisJ CXdmeF91cGxvYWRfYmVhY29uKHd2aWYpOw0KKwl9DQorDQorCWlmIChjaGFuZ2VkICYgQlNTX0NI QU5HRURfQkVBQ09OX0VOQUJMRUQgJiYgd3ZpZi0+c3RhdGUgIT0gV0ZYX1NUQVRFX0lCU1MpIHsN CisJCWlmICh3dmlmLT5lbmFibGVfYmVhY29uICE9IGluZm8tPmVuYWJsZV9iZWFjb24pIHsNCisJ CQloaWZfYmVhY29uX3RyYW5zbWl0KHd2aWYsIGluZm8tPmVuYWJsZV9iZWFjb24pOw0KKwkJCXd2 aWYtPmVuYWJsZV9iZWFjb24gPSBpbmZvLT5lbmFibGVfYmVhY29uOw0KKwkJfQ0KKwl9DQorDQor CS8qIGFzc29jL2Rpc2Fzc29jLCBvciBtYXliZSBBSUQgY2hhbmdlZCAqLw0KKwlpZiAoY2hhbmdl ZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7DQorCQl3ZnhfdHhfbG9ja19mbHVzaCh3ZGV2KTsNCisJ CXd2aWYtPndlcF9kZWZhdWx0X2tleV9pZCA9IC0xOw0KKwkJd2Z4X3R4X3VubG9jayh3ZGV2KTsN CisJfQ0KKw0KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DICYmICFpbmZvLT5hc3Nv YyAmJg0KKwkgICAgKHd2aWYtPnN0YXRlID09IFdGWF9TVEFURV9TVEEgfHwgd3ZpZi0+c3RhdGUg PT0gV0ZYX1NUQVRFX0lCU1MpKSB7DQorCQkvKiBTaGVkdWxlIHVuam9pbiB3b3JrICovDQorCQl3 ZnhfdHhfbG9jayh3ZGV2KTsNCisJCWlmICghc2NoZWR1bGVfd29yaygmd3ZpZi0+dW5qb2luX3dv cmspKQ0KKwkJCXdmeF90eF91bmxvY2sod2Rldik7DQorCX0gZWxzZSB7DQorCQlpZiAoY2hhbmdl ZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpIHsNCisJCQlpZiAoaW5mby0+aWJzc19qb2luZWQp DQorCQkJCWRvX2pvaW4gPSB0cnVlOw0KKwkJCWVsc2UgaWYgKHd2aWYtPnN0YXRlID09IFdGWF9T VEFURV9BUCkNCisJCQkJd2Z4X3VwZGF0ZV9iZWFjb25pbmcod3ZpZik7DQorCQl9DQorDQorCQlp ZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKQ0KKwkJCWRvX2pvaW4gPSB0cnVlOw0KKw0K KwkJaWYgKGNoYW5nZWQgJg0KKwkJICAgIChCU1NfQ0hBTkdFRF9BU1NPQyB8IEJTU19DSEFOR0VE X0JTU0lEIHwNCisJCSAgICAgQlNTX0NIQU5HRURfSUJTUyB8IEJTU19DSEFOR0VEX0JBU0lDX1JB VEVTIHwgQlNTX0NIQU5HRURfSFQpKSB7DQorCQkJaWYgKGluZm8tPmFzc29jKSB7DQorCQkJCWlm ICh3dmlmLT5zdGF0ZSA8IFdGWF9TVEFURV9QUkVfU1RBKSB7DQorCQkJCQlpZWVlODAyMTFfY29u bmVjdGlvbl9sb3NzKHZpZik7DQorCQkJCQltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgp Ow0KKwkJCQkJcmV0dXJuOw0KKwkJCQl9IGVsc2UgaWYgKHd2aWYtPnN0YXRlID09IFdGWF9TVEFU RV9QUkVfU1RBKSB7DQorCQkJCQl3dmlmLT5zdGF0ZSA9IFdGWF9TVEFURV9TVEE7DQorCQkJCX0N CisJCQl9IGVsc2Ugew0KKwkJCQlkb19qb2luID0gdHJ1ZTsNCisJCQl9DQorDQorCQkJaWYgKGlu Zm8tPmFzc29jIHx8IGluZm8tPmlic3Nfam9pbmVkKQ0KKwkJCQl3Znhfam9pbl9maW5hbGl6ZSh3 dmlmLCBpbmZvKTsNCisJCQllbHNlDQorCQkJCW1lbXNldCgmd3ZpZi0+YnNzX3BhcmFtcywgMCwg c2l6ZW9mKHd2aWYtPmJzc19wYXJhbXMpKTsNCisJCX0NCisJfQ0KKw0KKwkvKiBFUlAgUHJvdGVj dGlvbiAqLw0KKwlpZiAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9BU1NPQyB8DQorCQkgICAgICAg QlNTX0NIQU5HRURfRVJQX0NUU19QUk9UIHwNCisJCSAgICAgICBCU1NfQ0hBTkdFRF9FUlBfUFJF QU1CTEUpKSB7DQorCQl1MzIgcHJldl9lcnBfaW5mbyA9IHd2aWYtPmVycF9pbmZvOw0KKw0KKwkJ aWYgKGluZm8tPnVzZV9jdHNfcHJvdCkNCisJCQl3dmlmLT5lcnBfaW5mbyB8PSBXTEFOX0VSUF9V U0VfUFJPVEVDVElPTjsNCisJCWVsc2UgaWYgKCEocHJldl9lcnBfaW5mbyAmIFdMQU5fRVJQX05P Tl9FUlBfUFJFU0VOVCkpDQorCQkJd3ZpZi0+ZXJwX2luZm8gJj0gfldMQU5fRVJQX1VTRV9QUk9U RUNUSU9OOw0KKw0KKwkJaWYgKGluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSkNCisJCQl3dmlmLT5l cnBfaW5mbyB8PSBXTEFOX0VSUF9CQVJLRVJfUFJFQU1CTEU7DQorCQllbHNlDQorCQkJd3ZpZi0+ ZXJwX2luZm8gJj0gfldMQU5fRVJQX0JBUktFUl9QUkVBTUJMRTsNCisNCisJCWlmIChwcmV2X2Vy cF9pbmZvICE9IHd2aWYtPmVycF9pbmZvKQ0KKwkJCXNjaGVkdWxlX3dvcmsoJnd2aWYtPnNldF9j dHNfd29yayk7DQorCX0NCisNCisJaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfQVNTT0MgfCBC U1NfQ0hBTkdFRF9FUlBfU0xPVCkpDQorCQloaWZfc2xvdF90aW1lKHd2aWYsIGluZm8tPnVzZV9z aG9ydF9zbG90ID8gOSA6IDIwKTsNCisNCisJaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfQVNT T0MgfCBCU1NfQ0hBTkdFRF9DUU0pKSB7DQorCQlzdHJ1Y3QgaGlmX21pYl9yY3BpX3Jzc2lfdGhy ZXNob2xkIHRoID0gew0KKwkJCS5yb2xsaW5nX2F2ZXJhZ2VfY291bnQgPSA4LA0KKwkJCS5kZXRl Y3Rpb24gPSAxLA0KKwkJfTsNCisNCisJCXd2aWYtPmNxbV9yc3NpX3Rob2xkID0gaW5mby0+Y3Ft X3Jzc2lfdGhvbGQ7DQorDQorCQlpZiAoIWluZm8tPmNxbV9yc3NpX3Rob2xkICYmICFpbmZvLT5j cW1fcnNzaV9oeXN0KSB7DQorCQkJdGgudXBwZXJ0aHJlc2ggPSAxOw0KKwkJCXRoLmxvd2VydGhy ZXNoID0gMTsNCisJCX0gZWxzZSB7DQorCQkJLyogRklYTUUgSXQncyBub3QgYSBjb3JyZWN0IHdh eSBvZiBzZXR0aW5nIHRocmVzaG9sZC4NCisJCQkgKiBVcHBlciBhbmQgbG93ZXIgbXVzdCBiZSBz ZXQgZXF1YWwgaGVyZSBhbmQgYWRqdXN0ZWQNCisJCQkgKiBpbiBjYWxsYmFjay4gSG93ZXZlciBj dXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG11Y2gNCisJCQkgKiBtb3JlIHJlbGlhYmxlIGFuZCBz dGFibGUuDQorCQkJICovDQorCQkJLyogUlNTSTogc2lnbmVkIFE4LjAsIFJDUEk6IHVuc2lnbmVk IFE3LjENCisJCQkgKiBSU1NJID0gUkNQSSAvIDIgLSAxMTANCisJCQkgKi8NCisJCQl0aC51cHBl cl90aHJlc2hvbGQgPSBpbmZvLT5jcW1fcnNzaV90aG9sZCArIGluZm8tPmNxbV9yc3NpX2h5c3Q7 DQorCQkJdGgudXBwZXJfdGhyZXNob2xkID0gKHRoLnVwcGVyX3RocmVzaG9sZCArIDExMCkgKiAy Ow0KKwkJCXRoLmxvd2VyX3RocmVzaG9sZCA9IGluZm8tPmNxbV9yc3NpX3Rob2xkOw0KKwkJCXRo Lmxvd2VyX3RocmVzaG9sZCA9ICh0aC5sb3dlcl90aHJlc2hvbGQgKyAxMTApICogMjsNCisJCX0N CisJCWhpZl9zZXRfcmNwaV9yc3NpX3RocmVzaG9sZCh3dmlmLCAmdGgpOw0KKwl9DQorDQorCWlm IChjaGFuZ2VkICYgQlNTX0NIQU5HRURfVFhQT1dFUiAmJiBpbmZvLT50eHBvd2VyICE9IHdkZXYt Pm91dHB1dF9wb3dlcikgew0KKwkJd2Rldi0+b3V0cHV0X3Bvd2VyID0gaW5mby0+dHhwb3dlcjsN CisJCWhpZl9zZXRfb3V0cHV0X3Bvd2VyKHd2aWYsIHdkZXYtPm91dHB1dF9wb3dlciAqIDEwKTsN CisJfQ0KKwltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOw0KKw0KKwlpZiAoZG9fam9p bikgew0KKwkJd2Z4X3R4X2xvY2tfZmx1c2god2Rldik7DQorCQl3ZnhfZG9fam9pbih3dmlmKTsg LyogV2lsbCB1bmxvY2sgaXQgZm9yIHVzICovDQorCX0NCit9DQorDQorc3RhdGljIHZvaWQgd2Z4 X3BzX25vdGlmeShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgZW51bSBzdGFfbm90aWZ5X2NtZCBub3Rp ZnlfY21kLA0KKwkJCSAgaW50IGxpbmtfaWQpDQorew0KKwl1MzIgYml0LCBwcmV2Ow0KKw0KKwlz cGluX2xvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwkvKiBaZXJvIGxpbmsgaWQgbWVh bnMgImZvciBhbGwgbGluayBJRHMiICovDQorCWlmIChsaW5rX2lkKSB7DQorCQliaXQgPSBCSVQo bGlua19pZCk7DQorCX0gZWxzZSBpZiAobm90aWZ5X2NtZCAhPSBTVEFfTk9USUZZX0FXQUtFKSB7 DQorCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBub3RpZnkgY29tbWFu ZFxuIik7DQorCQliaXQgPSAwOw0KKwl9IGVsc2Ugew0KKwkJYml0ID0gd3ZpZi0+bGlua19pZF9t YXA7DQorCX0NCisJcHJldiA9IHd2aWYtPnN0YV9hc2xlZXBfbWFzayAmIGJpdDsNCisNCisJc3dp dGNoIChub3RpZnlfY21kKSB7DQorCWNhc2UgU1RBX05PVElGWV9TTEVFUDoNCisJCWlmICghcHJl dikgew0KKwkJCWlmICh3dmlmLT5tY2FzdF9idWZmZXJlZCAmJiAhd3ZpZi0+c3RhX2FzbGVlcF9t YXNrKQ0KKwkJCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT5tY2FzdF9zdGFydF93b3JrKTsNCisJCQl3 dmlmLT5zdGFfYXNsZWVwX21hc2sgfD0gYml0Ow0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2UgU1RB X05PVElGWV9BV0FLRToNCisJCWlmIChwcmV2KSB7DQorCQkJd3ZpZi0+c3RhX2FzbGVlcF9tYXNr ICY9IH5iaXQ7DQorCQkJd3ZpZi0+cHNwb2xsX21hc2sgJj0gfmJpdDsNCisJCQlpZiAobGlua19p ZCAmJiAhd3ZpZi0+c3RhX2FzbGVlcF9tYXNrKQ0KKwkJCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT5t Y2FzdF9zdG9wX3dvcmspOw0KKwkJCXdmeF9iaF9yZXF1ZXN0X3R4KHd2aWYtPndkZXYpOw0KKwkJ fQ0KKwkJYnJlYWs7DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2sp Ow0KK30NCisNCit2b2lkIHdmeF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBz dHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAgIGVudW0gc3RhX25vdGlmeV9jbWQgbm90 aWZ5X2NtZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCB3Znhfdmlm ICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCB3Znhf c3RhX3ByaXYgKnN0YV9wcml2ID0gKHN0cnVjdCB3Znhfc3RhX3ByaXYgKikgJnN0YS0+ZHJ2X3By aXY7DQorDQorCXdmeF9wc19ub3RpZnkod3ZpZiwgbm90aWZ5X2NtZCwgc3RhX3ByaXYtPmxpbmtf aWQpOw0KK30NCisNCiBzdGF0aWMgaW50IHdmeF9zZXRfdGltX2ltcGwoc3RydWN0IHdmeF92aWYg Knd2aWYsIGJvb2wgYWlkMF9iaXRfc2V0KQ0KIHsNCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCkBA IC0zMyw4ICsxMjA4LDExIEBAIHN0YXRpYyBpbnQgd2Z4X3NldF90aW1faW1wbChzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgYm9vbCBhaWQwX2JpdF9zZXQpDQogDQogCXNrYiA9IGllZWU4MDIxMV9iZWFj b25fZ2V0X3RpbSh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmLA0KIAkJCQkgICAgICAgJnRpbV9v ZmZzZXQsICZ0aW1fbGVuZ3RoKTsNCi0JaWYgKCFza2IpDQorCWlmICghc2tiKSB7DQorCQlpZiAo IV9fd2Z4X2ZsdXNoKHd2aWYtPndkZXYsIHRydWUpKQ0KKwkJCXdmeF90eF91bmxvY2sod3ZpZi0+ d2Rldik7DQogCQlyZXR1cm4gLUVOT0VOVDsNCisJfQ0KIAl0aW1fcHRyID0gc2tiLT5kYXRhICsg dGltX29mZnNldDsNCiANCiAJaWYgKHRpbV9vZmZzZXQgJiYgdGltX2xlbmd0aCA+PSA2KSB7DQpA QCAtNTYsMTYgKzEyMzQsMzQgQEAgc3RhdGljIGludCB3Znhfc2V0X3RpbV9pbXBsKHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBib29sIGFpZDBfYml0X3NldCkNCiAJcmV0dXJuIDA7DQogfQ0KIA0KK3Zv aWQgd2Z4X3NldF90aW1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgc2V0 X3RpbV93b3JrKTsNCisNCisJd2Z4X3NldF90aW1faW1wbCh3dmlmLCB3dmlmLT5haWQwX2JpdF9z ZXQpOw0KK30NCisNCitpbnQgd2Z4X3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0 cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0KQ0KK3sNCisJc3RydWN0IHdmeF9kZXYg KndkZXYgPSBody0+cHJpdjsNCisJc3RydWN0IHdmeF9zdGFfcHJpdiAqc3RhX2RldiA9IChzdHJ1 Y3Qgd2Z4X3N0YV9wcml2ICopICZzdGEtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBzdGFfZGV2LT52aWZfaWQpOw0KKw0KKwlzY2hlZHVsZV93 b3JrKCZ3dmlmLT5zZXRfdGltX3dvcmspOw0KKwlyZXR1cm4gMDsNCit9DQorDQogc3RhdGljIHZv aWQgd2Z4X21jYXN0X3N0YXJ0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KIHsNCiAJ c3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYs IG1jYXN0X3N0YXJ0X3dvcmspOw0KKwlsb25nIHRtbyA9IHd2aWYtPmR0aW1fcGVyaW9kICogVFVf VE9fSklGRklFUyh3dmlmLT5iZWFjb25faW50ICsgMjApOw0KIA0KIAljYW5jZWxfd29ya19zeW5j KCZ3dmlmLT5tY2FzdF9zdG9wX3dvcmspOw0KIAlpZiAoIXd2aWYtPmFpZDBfYml0X3NldCkgew0K IAkJd2Z4X3R4X2xvY2tfZmx1c2god3ZpZi0+d2Rldik7DQogCQl3Znhfc2V0X3RpbV9pbXBsKHd2 aWYsIHRydWUpOw0KIAkJd3ZpZi0+YWlkMF9iaXRfc2V0ID0gdHJ1ZTsNCi0JCW1vZF90aW1lcigm d3ZpZi0+bWNhc3RfdGltZW91dCwgVFVfVE9fSklGRklFUygxMDAwKSk7DQorCQltb2RfdGltZXIo Jnd2aWYtPm1jYXN0X3RpbWVvdXQsIGppZmZpZXMgKyB0bW8pOw0KIAkJd2Z4X3R4X3VubG9jayh3 dmlmLT53ZGV2KTsNCiAJfQ0KIH0NCkBAIC05NSw2ICsxMjkxLDEzNCBAQCBzdGF0aWMgdm9pZCB3 ZnhfbWNhc3RfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkNCiAJc3Bpbl91bmxvY2tfYmgo Jnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KIH0NCiANCitpbnQgd2Z4X2FtcGR1X2FjdGlvbihzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwN CisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcykNCit7DQorCS8q IEFnZ3JlZ2F0aW9uIGlzIGltcGxlbWVudGVkIGZ1bGx5IGluIGZpcm13YXJlLA0KKwkgKiBpbmNs dWRpbmcgYmxvY2sgYWNrIG5lZ290aWF0aW9uLiBEbyBub3QgYWxsb3cNCisJICogbWFjODAyMTEg c3RhY2sgdG8gZG8gYW55dGhpbmc6IGl0IGludGVyZmVyZXMgd2l0aA0KKwkgKiB0aGUgZmlybXdh cmUuDQorCSAqLw0KKw0KKwkvKiBOb3RlIHRoYXQgd2Ugc3RpbGwgbmVlZCB0aGlzIGZ1bmN0aW9u IHN0dWJiZWQuICovDQorDQorCXJldHVybiAtRU5PVFNVUFA7DQorfQ0KKw0KK3ZvaWQgd2Z4X3N1 c3BlbmRfcmVzdW1lKHN0cnVjdCB3ZnhfdmlmICp3dmlmLA0KKwkJCXN0cnVjdCBoaWZfaW5kX3N1 c3BlbmRfcmVzdW1lX3R4ICphcmcpDQorew0KKwlpZiAoYXJnLT5zdXNwZW5kX3Jlc3VtZV9mbGFn cy5iY19tY19vbmx5KSB7DQorCQlib29sIGNhbmNlbF90bW8gPSBmYWxzZTsNCisNCisJCXNwaW5f bG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorCQlpZiAoIWFyZy0+c3VzcGVuZF9yZXN1 bWVfZmxhZ3MucmVzdW1lKQ0KKwkJCXd2aWYtPm1jYXN0X3R4ID0gZmFsc2U7DQorCQllbHNlDQor CQkJd3ZpZi0+bWNhc3RfdHggPSB3dmlmLT5haWQwX2JpdF9zZXQgJiYgd3ZpZi0+bWNhc3RfYnVm ZmVyZWQ7DQorCQlpZiAod3ZpZi0+bWNhc3RfdHgpIHsNCisJCQljYW5jZWxfdG1vID0gdHJ1ZTsN CisJCQl3ZnhfYmhfcmVxdWVzdF90eCh3dmlmLT53ZGV2KTsNCisJCX0NCisJCXNwaW5fdW5sb2Nr X2JoKCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisJCWlmIChjYW5jZWxfdG1vKQ0KKwkJCWRlbF90 aW1lcl9zeW5jKCZ3dmlmLT5tY2FzdF90aW1lb3V0KTsNCisJfSBlbHNlIGlmIChhcmctPnN1c3Bl bmRfcmVzdW1lX2ZsYWdzLnJlc3VtZSkgew0KKwkJLy8gRklYTUU6IHNob3VsZCBjaGFuZ2UgZWFj aCBzdGF0aW9uIHN0YXR1cyBpbmRlcGVuZGVudGx5DQorCQl3ZnhfcHNfbm90aWZ5KHd2aWYsIFNU QV9OT1RJRllfQVdBS0UsIDApOw0KKwkJd2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7DQor CX0gZWxzZSB7DQorCQkvLyBGSVhNRTogc2hvdWxkIGNoYW5nZSBlYWNoIHN0YXRpb24gc3RhdHVz IGluZGVwZW5kZW50bHkNCisJCXdmeF9wc19ub3RpZnkod3ZpZiwgU1RBX05PVElGWV9TTEVFUCwg MCk7DQorCX0NCit9DQorDQoraW50IHdmeF9hZGRfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodywNCisJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZikNCit7DQor CXJldHVybiAwOw0KK30NCisNCit2b2lkIHdmeF9yZW1vdmVfY2hhbmN0eChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywNCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZikNCit7 DQorfQ0KKw0KK3ZvaWQgd2Z4X2NoYW5nZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LA0KKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mLA0KKwkJCXUzMiBjaGFu Z2VkKQ0KK3sNCit9DQorDQoraW50IHdmeF9hc3NpZ25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkJICAgc3RydWN0IGll ZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9 IChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX2No YW5uZWwgKmNoID0gY29uZi0+ZGVmLmNoYW47DQorDQorCVdBUk4od3ZpZi0+Y2hhbm5lbCwgImNo YW5uZWwgb3ZlcndyaXRlIik7DQorCXd2aWYtPmNoYW5uZWwgPSBjaDsNCisJd3ZpZi0+aHRfaW5m by5jaGFubmVsX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKCZjb25mLT5kZWYpOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCB3ZnhfdW5hc3NpZ25fdmlmX2NoYW5jdHgoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkJICAg ICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpDQorew0KKwlzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qg aWVlZTgwMjExX2NoYW5uZWwgKmNoID0gY29uZi0+ZGVmLmNoYW47DQorDQorCVdBUk4od3ZpZi0+ Y2hhbm5lbCAhPSBjaCwgImNoYW5uZWwgbWlzbWF0Y2giKTsNCisJd3ZpZi0+Y2hhbm5lbCA9IE5V TEw7DQorfQ0KKw0KK2ludCB3ZnhfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIg Y2hhbmdlZCkNCit7DQorCWludCByZXQgPSAwOw0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3 LT5wcml2Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7DQorCXN0 cnVjdCB3ZnhfdmlmICp3dmlmOw0KKw0KKwkvLyBGSVhNRTogSW50ZXJmYWNlIGlkIHNob3VsZCBu b3QgYmVlbiBoYXJkY29kZWQNCisJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCAwKTsNCisJaWYg KCF3dmlmKSB7DQorCQlXQVJOKDEsICJpbnRlcmZhY2UgMCBkb2VzIG5vdCBleGlzdCBhbnltb3Jl Iik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlkb3duKCZ3dmlmLT5zY2FuLmxvY2spOw0KKwlt dXRleF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFf Q09ORl9DSEFOR0VfUE9XRVIpIHsNCisJCXdkZXYtPm91dHB1dF9wb3dlciA9IGNvbmYtPnBvd2Vy X2xldmVsOw0KKwkJaGlmX3NldF9vdXRwdXRfcG93ZXIod3ZpZiwgd2Rldi0+b3V0cHV0X3Bvd2Vy ICogMTApOw0KKwl9DQorDQorCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BT KSB7DQorCQl3dmlmID0gTlVMTDsNCisJCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2 LCB3dmlmKSkgIT0gTlVMTCkgew0KKwkJCW1lbXNldCgmd3ZpZi0+cG93ZXJzYXZlX21vZGUsIDAs IHNpemVvZih3dmlmLT5wb3dlcnNhdmVfbW9kZSkpOw0KKwkJCWlmIChjb25mLT5mbGFncyAmIElF RUU4MDIxMV9DT05GX1BTKSB7DQorCQkJCXd2aWYtPnBvd2Vyc2F2ZV9tb2RlLnBtX21vZGUuZW50 ZXJfcHNtID0gMTsNCisJCQkJaWYgKGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsNCisJ CQkJCXd2aWYtPnBvd2Vyc2F2ZV9tb2RlLnBtX21vZGUuZmFzdF9wc20gPSAxOw0KKwkJCQkJLy8g RmlybXdhcmUgZG9lcyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gMTI4bXMNCisJCQkJCXd2aWYtPnBv d2Vyc2F2ZV9tb2RlLmZhc3RfcHNtX2lkbGVfcGVyaW9kID0NCisJCQkJCQltaW4oY29uZi0+ZHlu YW1pY19wc190aW1lb3V0ICogMiwgMjU1KTsNCisJCQkJfQ0KKwkJCX0NCisJCQlpZiAod3ZpZi0+ c3RhdGUgPT0gV0ZYX1NUQVRFX1NUQSAmJiB3dmlmLT5ic3NfcGFyYW1zLmFpZCkNCisJCQkJd2Z4 X3NldF9wbSh3dmlmLCAmd3ZpZi0+cG93ZXJzYXZlX21vZGUpOw0KKwkJfQ0KKwkJd3ZpZiA9IHdk ZXZfdG9fd3ZpZih3ZGV2LCAwKTsNCisJfQ0KKw0KKwltdXRleF91bmxvY2soJndkZXYtPmNvbmZf bXV0ZXgpOw0KKwl1cCgmd3ZpZi0+c2Nhbi5sb2NrKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQog aW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmKQ0KIHsNCiAJaW50IGk7DQpAQCAtMTM4LDggKzE0NjIsMjIgQEAgaW50 IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgw MjExX3ZpZiAqdmlmKQ0KIAkJZGVmYXVsdF9lZGNhX3BhcmFtc1tJRUVFODAyMTFfQUNfQktdLnF1 ZXVlX2lkID0gSElGX1FVRVVFX0lEX0JFU1RFRkZPUlQ7DQogCX0NCiANCisJdmlmLT5kcml2ZXJf ZmxhZ3MgfD0gSUVFRTgwMjExX1ZJRl9CRUFDT05fRklMVEVSIHwNCisJCQkgICAgIElFRUU4MDIx MV9WSUZfU1VQUE9SVFNfVUFQU0QgfA0KKwkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19D UU1fUlNTSTsNCisNCiAJbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRleCk7DQogDQorCXN3aXRj aCAodmlmLT50eXBlKSB7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoNCisJY2FzZSBO TDgwMjExX0lGVFlQRV9BREhPQzoNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoNCisJCWJyZWFr Ow0KKwlkZWZhdWx0Og0KKwkJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCisJCXJl dHVybiAtRU9QTk9UU1VQUDsNCisJfQ0KKw0KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3 ZGV2LT52aWYpOyBpKyspIHsNCiAJCWlmICghd2Rldi0+dmlmW2ldKSB7DQogCQkJd2Rldi0+dmlm W2ldID0gdmlmOw0KQEAgLTE1MSw2ICsxNDg5LDcgQEAgaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KIAkJbXV0 ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCiAJCXJldHVybiAtRU9QTk9UU1VQUDsNCiAJ fQ0KKwkvLyBGSVhNRTogcHJlZmVyIHVzZSBvZiBjb250YWluZXJfb2YoKSB0byBnZXQgdmlmDQog CXd2aWYtPnZpZiA9IHZpZjsNCiAJd3ZpZi0+d2RldiA9IHdkZXY7DQogDQpAQCAtMTU4LDExICsx NDk3LDE2IEBAIGludCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikNCiAJSU5JVF9ERUxBWUVEX1dPUksoJnd2aWYtPmxp bmtfaWRfZ2Nfd29yaywgd2Z4X2xpbmtfaWRfZ2Nfd29yayk7DQogDQogCXNwaW5fbG9ja19pbml0 KCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisJSU5JVF9XT1JLKCZ3dmlmLT5zZXRfdGltX3dvcmss IHdmeF9zZXRfdGltX3dvcmspOw0KIA0KIAlJTklUX1dPUksoJnd2aWYtPm1jYXN0X3N0YXJ0X3dv cmssIHdmeF9tY2FzdF9zdGFydF93b3JrKTsNCiAJSU5JVF9XT1JLKCZ3dmlmLT5tY2FzdF9zdG9w X3dvcmssIHdmeF9tY2FzdF9zdG9wX3dvcmspOw0KIAl0aW1lcl9zZXR1cCgmd3ZpZi0+bWNhc3Rf dGltZW91dCwgd2Z4X21jYXN0X3RpbWVvdXQsIDApOw0KIA0KKwl3dmlmLT5zZXRic3NwYXJhbXNf ZG9uZSA9IGZhbHNlOw0KKwltdXRleF9pbml0KCZ3dmlmLT5ic3NfbG9zc19sb2NrKTsNCisJSU5J VF9ERUxBWUVEX1dPUksoJnd2aWYtPmJzc19sb3NzX3dvcmssIHdmeF9ic3NfbG9zc193b3JrKTsN CisNCiAJd3ZpZi0+d2VwX2RlZmF1bHRfa2V5X2lkID0gLTE7DQogCUlOSVRfV09SSygmd3ZpZi0+ d2VwX2tleV93b3JrLCB3Znhfd2VwX2tleV93b3JrKTsNCiANCkBAIC0xNzAsMjIgKzE1MTQsMTE1 IEBAIGludCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZikNCiAJSU5JVF9XT1JLKCZ3dmlmLT5zY2FuLndvcmssIHdmeF9z Y2FuX3dvcmspOw0KIAlJTklUX0RFTEFZRURfV09SSygmd3ZpZi0+c2Nhbi50aW1lb3V0LCB3Znhf c2Nhbl90aW1lb3V0KTsNCiANCisJc3Bpbl9sb2NrX2luaXQoJnd2aWYtPmV2ZW50X3F1ZXVlX2xv Y2spOw0KKwlJTklUX0xJU1RfSEVBRCgmd3ZpZi0+ZXZlbnRfcXVldWUpOw0KKwlJTklUX1dPUkso Jnd2aWYtPmV2ZW50X2hhbmRsZXJfd29yaywgd2Z4X2V2ZW50X2hhbmRsZXJfd29yayk7DQorDQor CWluaXRfY29tcGxldGlvbigmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOw0KKwljb21wbGV0 ZSgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOw0KKwlJTklUX1dPUksoJnd2aWYtPnNldF9i ZWFjb25fd2FrZXVwX3BlcmlvZF93b3JrLCB3Znhfc2V0X2JlYWNvbl93YWtldXBfcGVyaW9kX3dv cmspOw0KKwlJTklUX1dPUksoJnd2aWYtPnVwZGF0ZV9maWx0ZXJpbmdfd29yaywgd2Z4X3VwZGF0 ZV9maWx0ZXJpbmdfd29yayk7DQorCUlOSVRfV09SSygmd3ZpZi0+YnNzX3BhcmFtc193b3JrLCB3 ZnhfYnNzX3BhcmFtc193b3JrKTsNCisJSU5JVF9XT1JLKCZ3dmlmLT5zZXRfY3RzX3dvcmssIHdm eF9zZXRfY3RzX3dvcmspOw0KKwlJTklUX1dPUksoJnd2aWYtPnVuam9pbl93b3JrLCB3ZnhfdW5q b2luX3dvcmspOw0KKw0KIAltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOw0KKw0KKwlo aWZfc2V0X21hY2FkZHIod3ZpZiwgdmlmLT5hZGRyKTsNCiAJQlVHX09OKEFSUkFZX1NJWkUoZGVm YXVsdF9lZGNhX3BhcmFtcykgIT0gQVJSQVlfU0laRSh3dmlmLT5lZGNhLnBhcmFtcykpOw0KLQlm b3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykNCisJZm9yIChpID0gMDsgaSA8 IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspIHsNCiAJCW1lbWNweSgmd3ZpZi0+ZWRjYS5wYXJhbXNb aV0sICZkZWZhdWx0X2VkY2FfcGFyYW1zW2ldLCBzaXplb2YoZGVmYXVsdF9lZGNhX3BhcmFtc1tp XSkpOw0KKwkJd3ZpZi0+ZWRjYS51YXBzZF9lbmFibGVbaV0gPSBmYWxzZTsNCisJCWhpZl9zZXRf ZWRjYV9xdWV1ZV9wYXJhbXMod3ZpZiwgJnd2aWYtPmVkY2EucGFyYW1zW2ldKTsNCisJfQ0KKwl3 Znhfc2V0X3VhcHNkX3BhcmFtKHd2aWYsICZ3dmlmLT5lZGNhKTsNCisNCiAJdHhfcG9saWN5X2lu aXQod3ZpZik7DQorCXd2aWYgPSBOVUxMOw0KKwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUo d2Rldiwgd3ZpZikpICE9IE5VTEwpIHsNCisJCS8vIENvbWJvIG1vZGUgZG9lcyBub3Qgc3VwcG9y dCBCbG9jayBBY2tzLiBXZSBjYW4gcmUtZW5hYmxlIHRoZW0NCisJCWlmICh3dmlmX2NvdW50KHdk ZXYpID09IDEpDQorCQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYp Ow0KKwkJZWxzZQ0KKwkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweDAwLCAweDAw KTsNCisJCS8vIENvbWJvIGZvcmNlIHBvd2Vyc2F2ZSBtb2RlLiBXZSBjYW4gcmUtZW5hYmxlIGl0 IG5vdw0KKwkJd2Z4X3NldF9wbSh3dmlmLCAmd3ZpZi0+cG93ZXJzYXZlX21vZGUpOw0KKwl9DQog CXJldHVybiAwOw0KIH0NCiANCiB2b2lkIHdmeF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LA0KIAkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikNCiB7DQorCXN0 cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQogCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0g KHN0cnVjdCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3ByaXY7DQorCWludCBpOw0KIA0KKwkvLyBJZiBz Y2FuIGlzIGluIHByb2dyZXNzLCBzdG9wIGl0DQorCXdoaWxlIChkb3duX3RyeWxvY2soJnd2aWYt PnNjYW4ubG9jaykpDQorCQlzY2hlZHVsZSgpOw0KKwl1cCgmd3ZpZi0+c2Nhbi5sb2NrKTsNCisJ d2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSwg bXNlY3NfdG9famlmZmllcygzMDApKTsNCisNCisJbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRl eCk7DQorCXN3aXRjaCAod3ZpZi0+c3RhdGUpIHsNCisJY2FzZSBXRlhfU1RBVEVfUFJFX1NUQToN CisJY2FzZSBXRlhfU1RBVEVfU1RBOg0KKwljYXNlIFdGWF9TVEFURV9JQlNTOg0KKwkJd2Z4X3R4 X2xvY2tfZmx1c2god2Rldik7DQorCQlpZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPnVuam9pbl93 b3JrKSkNCisJCQl3ZnhfdHhfdW5sb2NrKHdkZXYpOw0KKwkJYnJlYWs7DQorCWNhc2UgV0ZYX1NU QVRFX0FQOg0KKwkJZm9yIChpID0gMDsgd3ZpZi0+bGlua19pZF9tYXA7ICsraSkgew0KKwkJCWlm ICh3dmlmLT5saW5rX2lkX21hcCAmIEJJVChpKSkgew0KKwkJCQl3ZnhfdW5tYXBfbGluayh3dmlm LCBpKTsNCisJCQkJd3ZpZi0+bGlua19pZF9tYXAgJj0gfkJJVChpKTsNCisJCQl9DQorCQl9DQor CQltZW1zZXQod3ZpZi0+bGlua19pZF9kYiwgMCwgc2l6ZW9mKHd2aWYtPmxpbmtfaWRfZGIpKTsN CisJCXd2aWYtPnN0YV9hc2xlZXBfbWFzayA9IDA7DQorCQl3dmlmLT5lbmFibGVfYmVhY29uID0g ZmFsc2U7DQorCQl3dmlmLT5tY2FzdF90eCA9IGZhbHNlOw0KKwkJd3ZpZi0+YWlkMF9iaXRfc2V0 ID0gZmFsc2U7DQorCQl3dmlmLT5tY2FzdF9idWZmZXJlZCA9IGZhbHNlOw0KKwkJd3ZpZi0+cHNw b2xsX21hc2sgPSAwOw0KKwkJLyogcmVzZXQubGlua19pZCA9IDA7ICovDQorCQloaWZfcmVzZXQo d3ZpZiwgZmFsc2UpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlicmVhazsNCisJfQ0KKw0K Kwl3dmlmLT5zdGF0ZSA9IFdGWF9TVEFURV9QQVNTSVZFOw0KIAl3ZnhfdHhfcXVldWVzX3dhaXRf ZW1wdHlfdmlmKHd2aWYpOw0KKwl3ZnhfdHhfdW5sb2NrKHdkZXYpOw0KKw0KKwkvKiBGSVhNRTog SW4gYWRkIHRvIHJlc2V0IE1BQyBhZGRyZXNzLCB0cnkgdG8gcmVzZXQgaW50ZXJmYWNlICovDQor CWhpZl9zZXRfbWFjYWRkcih3dmlmLCBOVUxMKTsNCisNCisJY2FuY2VsX2RlbGF5ZWRfd29ya19z eW5jKCZ3dmlmLT5zY2FuLnRpbWVvdXQpOw0KKw0KKwl3ZnhfY3FtX2Jzc2xvc3Nfc20od3ZpZiwg MCwgMCwgMCk7DQorCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPnVuam9pbl93b3JrKTsNCiAJY2Fu Y2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3dmlmLT5saW5rX2lkX2djX3dvcmspOw0KIAlkZWxfdGlt ZXJfc3luYygmd3ZpZi0+bWNhc3RfdGltZW91dCk7DQorCXdmeF9mcmVlX2V2ZW50X3F1ZXVlKHd2 aWYpOw0KKw0KKwl3ZGV2LT52aWZbd3ZpZi0+aWRdID0gTlVMTDsNCisJd3ZpZi0+dmlmID0gTlVM TDsNCisNCisJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCisJd3ZpZiA9IE5VTEw7 DQorCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgew0K KwkJLy8gQ29tYm8gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IEJsb2NrIEFja3MuIFdlIGNhbiByZS1l bmFibGUgdGhlbQ0KKwkJaWYgKHd2aWZfY291bnQod2RldikgPT0gMSkNCisJCQloaWZfc2V0X2Js b2NrX2Fja19wb2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7DQorCQllbHNlDQorCQkJaGlmX3NldF9i bG9ja19hY2tfcG9saWN5KHd2aWYsIDB4MDAsIDB4MDApOw0KKwkJLy8gQ29tYm8gZm9yY2UgcG93 ZXJzYXZlIG1vZGUuIFdlIGNhbiByZS1lbmFibGUgaXQgbm93DQorCQl3Znhfc2V0X3BtKHd2aWYs ICZ3dmlmLT5wb3dlcnNhdmVfbW9kZSk7DQorCX0NCiB9DQogDQogaW50IHdmeF9zdGFydChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodykNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0 YS5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaA0KaW5kZXggZGQxYjZiM2ZjMmYxLi4zMDdl ZDAxOTYxMTAgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oDQorKysgYi9k cml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oDQpAQCAtMTIsMTQgKzEyLDQwIEBADQogDQogI2luY2x1 ZGUgImhpZl9hcGlfY21kLmgiDQogDQorc3RydWN0IHdmeF9kZXY7DQogc3RydWN0IHdmeF92aWY7 DQogDQorZW51bSB3Znhfc3RhdGUgew0KKwlXRlhfU1RBVEVfUEFTU0lWRSA9IDAsDQorCVdGWF9T VEFURV9QUkVfU1RBLA0KKwlXRlhfU1RBVEVfU1RBLA0KKwlXRlhfU1RBVEVfSUJTUywNCisJV0ZY X1NUQVRFX0FQLA0KK307DQorDQorc3RydWN0IHdmeF9odF9pbmZvIHsNCisJc3RydWN0IGllZWU4 MDIxMV9zdGFfaHRfY2FwIGh0X2NhcDsNCisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFu bmVsX3R5cGU7DQorCXVpbnQxNl90IG9wZXJhdGlvbl9tb2RlOw0KK307DQorDQorc3RydWN0IHdm eF9oaWZfZXZlbnQgew0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7DQorCXN0cnVjdCBoaWZfaW5k X2V2ZW50IGV2dDsNCit9Ow0KKw0KIHN0cnVjdCB3ZnhfZWRjYV9wYXJhbXMgew0KIAkvKiBOT1RF OiBpbmRleCBpcyBhIGxpbnV4IHF1ZXVlIGlkLiAqLw0KIAlzdHJ1Y3QgaGlmX3JlcV9lZGNhX3F1 ZXVlX3BhcmFtcyBwYXJhbXNbSUVFRTgwMjExX05VTV9BQ1NdOw0KIAlib29sIHVhcHNkX2VuYWJs ZVtJRUVFODAyMTFfTlVNX0FDU107DQogfTsNCiANCitzdHJ1Y3Qgd2Z4X2dycF9hZGRyX3RhYmxl IHsNCisJYm9vbCBlbmFibGU7DQorCWludCBudW1fYWRkcmVzc2VzOw0KKwl1OCBhZGRyZXNzX2xp c3RbOF1bRVRIX0FMRU5dOw0KK307DQorDQogc3RydWN0IHdmeF9zdGFfcHJpdiB7DQogCWludCBs aW5rX2lkOw0KIAlpbnQgdmlmX2lkOw0KQEAgLTI4LDkgKzU0LDQ4IEBAIHN0cnVjdCB3Znhfc3Rh X3ByaXYgew0KIC8vIG1hYzgwMjExIGludGVyZmFjZQ0KIGludCB3Znhfc3RhcnQoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcpOw0KIHZvaWQgd2Z4X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcp Ow0KK2ludCB3ZnhfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7 DQoraW50IHdmeF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMy IHZhbHVlKTsNCit1NjQgd2Z4X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LA0KKwkJCSAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jX2xpc3QpOw0KK3ZvaWQg d2Z4X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHVuc2lnbmVkIGlu dCBjaGFuZ2VkX2ZsYWdzLA0KKwkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IHVu dXNlZCk7DQorDQogaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsNCiB2b2lkIHdmeF9yZW1vdmVfaW50ZXJmYWNl KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsNCit2 b2lkIHdmeF9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwNCisJICAgICAgIHUzMiBxdWV1ZXMsIGJvb2wgZHJvcCk7DQoraW50IHdmeF9jb25m X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0K KwkJdTE2IHF1ZXVlLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFy YW1zKTsNCit2b2lkIHdmeF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3Nf Y29uZiAqaW5mbywgdTMyIGNoYW5nZWQpOw0KK2ludCB3Znhfc3RhX2FkZChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCXN0cnVjdCBpZWVlODAy MTFfc3RhICpzdGEpOw0KK2ludCB3Znhfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3Rh ICpzdGEpOw0KK3ZvaWQgd2Z4X3N0YV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0 cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICAgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQs IHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOw0KK2ludCB3Znhfc2V0X3RpbShzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBzZXQpOw0KK2lu dCB3ZnhfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgw MjExX3ZpZiAqdmlmLA0KKwkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2FtcGR1X3BhcmFtcyAqcGFy YW1zKTsNCitpbnQgd2Z4X2FkZF9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJ ICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKTsNCit2b2lkIHdmeF9yZW1v dmVfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQlzdHJ1Y3QgaWVlZTgwMjEx X2NoYW5jdHhfY29uZiAqY29uZik7DQordm9pZCB3ZnhfY2hhbmdlX2NoYW5jdHgoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsDQorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYs IHUzMiBjaGFuZ2VkKTsNCitpbnQgd2Z4X2Fzc2lnbl92aWZfY2hhbmN0eChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgICBzdHJ1Y3QgaWVl ZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZik7DQordm9pZCB3ZnhfdW5hc3NpZ25fdmlmX2NoYW5j dHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQor CQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpOw0KIA0KKy8vIFdT TSBDYWxsYmFja3MNCit2b2lkIHdmeF9zdXNwZW5kX3Jlc3VtZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp Ziwgc3RydWN0IGhpZl9pbmRfc3VzcGVuZF9yZXN1bWVfdHggKmFyZyk7DQorDQorLy8gT3RoZXIg SGVscGVycw0KK3ZvaWQgd2Z4X2NxbV9ic3Nsb3NzX3NtKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBp bnQgaW5pdCwgaW50IGdvb2QsIGludCBiYWQpOw0KK3ZvaWQgd2Z4X3VwZGF0ZV9maWx0ZXJpbmco c3RydWN0IHdmeF92aWYgKnd2aWYpOw0KK2ludCB3Znhfc2V0X3BtKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBjb25zdCBzdHJ1Y3QgaGlmX3JlcV9zZXRfcG1fbW9kZSAqYXJnKTsNCiBpbnQgd2Z4X2Z3 ZF9wcm9iZV9yZXEoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKTsNCiANCiAjZW5k aWYgLyogV0ZYX1NUQV9IICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC93Zngu aCBiL2RyaXZlcnMvc3RhZ2luZy93Zngvd2Z4LmgNCmluZGV4IGE4NmRkZmFlZDgyNS4uNDg5ODM2 ODM3YjBhIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC93ZnguaA0KKysrIGIvZHJp dmVycy9zdGFnaW5nL3dmeC93ZnguaA0KQEAgLTExLDYgKzExLDggQEANCiAjZGVmaW5lIFdGWF9I DQogDQogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4NCisjaW5jbHVkZSA8bGludXgvd29y a3F1ZXVlLmg+DQorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+DQogI2luY2x1ZGUgPG5ldC9tYWM4 MDIxMS5oPg0KIA0KICNpbmNsdWRlICJiaC5oIg0KQEAgLTYxLDggKzYzLDE1IEBAIHN0cnVjdCB3 ZnhfZGV2IHsNCiBzdHJ1Y3Qgd2Z4X3ZpZiB7DQogCXN0cnVjdCB3ZnhfZGV2CQkqd2RldjsNCiAJ c3RydWN0IGllZWU4MDIxMV92aWYJKnZpZjsNCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpj aGFubmVsOw0KIAlpbnQJCQlpZDsNCisJZW51bSB3Znhfc3RhdGUJCXN0YXRlOw0KIA0KKwlpbnQJ CQlkZWxheWVkX2xpbmtfbG9zczsNCisJaW50CQkJYnNzX2xvc3Nfc3RhdGU7DQorCXUzMgkJCWJz c19sb3NzX2NvbmZpcm1faWQ7DQorCXN0cnVjdCBtdXRleAkJYnNzX2xvc3NfbG9jazsNCisJc3Ry dWN0IGRlbGF5ZWRfd29yawlic3NfbG9zc193b3JrOw0KIA0KIAl1MzIJCQlsaW5rX2lkX21hcDsN CiAJc3RydWN0IHdmeF9saW5rX2VudHJ5CWxpbmtfaWRfZGJbV0ZYX01BWF9TVEFfSU5fQVBfTU9E RV07DQpAQCAtNzIsNiArODEsNyBAQCBzdHJ1Y3Qgd2Z4X3ZpZiB7DQogCWJvb2wJCQlhaWQwX2Jp dF9zZXQ7DQogCWJvb2wJCQltY2FzdF90eDsNCiAJYm9vbAkJCW1jYXN0X2J1ZmZlcmVkOw0KKwlz dHJ1Y3Qgd2Z4X2dycF9hZGRyX3RhYmxlIG1jYXN0X2ZpbHRlcjsNCiAJc3RydWN0IHRpbWVyX2xp c3QJbWNhc3RfdGltZW91dDsNCiAJc3RydWN0IHdvcmtfc3RydWN0CW1jYXN0X3N0YXJ0X3dvcms7 DQogCXN0cnVjdCB3b3JrX3N0cnVjdAltY2FzdF9zdG9wX3dvcms7DQpAQCAtODYsMTMgKzk2LDQw IEBAIHN0cnVjdCB3ZnhfdmlmIHsNCiAJdTMyCQkJc3RhX2FzbGVlcF9tYXNrOw0KIAl1MzIJCQlw c3BvbGxfbWFzazsNCiAJc3BpbmxvY2tfdAkJcHNfc3RhdGVfbG9jazsNCisJc3RydWN0IHdvcmtf c3RydWN0CXNldF90aW1fd29yazsNCisNCisJaW50CQkJZHRpbV9wZXJpb2Q7DQorCWludAkJCWJl YWNvbl9pbnQ7DQorCWJvb2wJCQllbmFibGVfYmVhY29uOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJ c2V0X2JlYWNvbl93YWtldXBfcGVyaW9kX3dvcms7DQogDQogCWJvb2wJCQlmaWx0ZXJfYnNzaWQ7 DQogCWJvb2wJCQlmd2RfcHJvYmVfcmVxOw0KKwlib29sCQkJZGlzYWJsZV9iZWFjb25fZmlsdGVy Ow0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdXBkYXRlX2ZpbHRlcmluZ193b3JrOw0KIA0KKwl1MzIJ CQllcnBfaW5mbzsNCisJaW50CQkJY3FtX3Jzc2lfdGhvbGQ7DQorCWJvb2wJCQlzZXRic3NwYXJh bXNfZG9uZTsNCisJc3RydWN0IHdmeF9odF9pbmZvCWh0X2luZm87DQogCXN0cnVjdCB3ZnhfZWRj YV9wYXJhbXMJZWRjYTsNCisJc3RydWN0IGhpZl9taWJfc2V0X3VhcHNkX2luZm9ybWF0aW9uIHVh cHNkX2luZm87DQorCXN0cnVjdCBoaWZfcmVxX3NldF9ic3NfcGFyYW1zIGJzc19wYXJhbXM7DQor CXN0cnVjdCB3b3JrX3N0cnVjdAlic3NfcGFyYW1zX3dvcms7DQorCXN0cnVjdCB3b3JrX3N0cnVj dAlzZXRfY3RzX3dvcms7DQorDQorCWludAkJCWpvaW5fY29tcGxldGVfc3RhdHVzOw0KKwlib29s CQkJZGVsYXllZF91bmpvaW47DQorCXN0cnVjdCB3b3JrX3N0cnVjdAl1bmpvaW5fd29yazsNCiAN CiAJc3RydWN0IHdmeF9zY2FuCQlzY2FuOw0KKw0KKwlzdHJ1Y3QgaGlmX3JlcV9zZXRfcG1fbW9k ZSBwb3dlcnNhdmVfbW9kZTsNCisJc3RydWN0IGNvbXBsZXRpb24Jc2V0X3BtX21vZGVfY29tcGxl dGU7DQorDQorCXN0cnVjdCBsaXN0X2hlYWQJZXZlbnRfcXVldWU7DQorCXNwaW5sb2NrX3QJCWV2 ZW50X3F1ZXVlX2xvY2s7DQorCXN0cnVjdCB3b3JrX3N0cnVjdAlldmVudF9oYW5kbGVyX3dvcms7 DQogfTsNCiANCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB3ZnhfdmlmICp3ZGV2X3RvX3d2aWYoc3Ry dWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQpDQpAQCAtMTI2LDYgKzE2MywyMCBAQCBzdGF0 aWMgaW5saW5lIHN0cnVjdCB3ZnhfdmlmICp3dmlmX2l0ZXJhdGUoc3RydWN0IHdmeF9kZXYgKndk ZXYsIHN0cnVjdCB3ZnhfdmlmDQogCXJldHVybiBOVUxMOw0KIH0NCiANCitzdGF0aWMgaW5saW5l IGludCB3dmlmX2NvdW50KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KK3sNCisJaW50IGk7DQorCWlu dCByZXQgPSAwOw0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsNCisNCisJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUod2Rldi0+dmlmKTsgaSsrKSB7DQorCQl3dmlmID0gd2Rldl90b193dmlmKHdk ZXYsIGkpOw0KKwkJaWYgKHd2aWYpDQorCQkJcmV0Kys7DQorCX0NCisJcmV0dXJuIHJldDsNCit9 DQorDQogc3RhdGljIGlubGluZSB2b2lkIG1lbXJldmVyc2UodWludDhfdCAqc3JjLCB1aW50OF90 IGxlbmd0aCkNCiB7DQogCXVpbnQ4X3QgKmxvID0gc3JjOw0KLS0gDQoyLjIwLjENCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5D14BC4CEC4 for ; Thu, 19 Sep 2019 14:26:19 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2A0FA20882 for ; Thu, 19 Sep 2019 14:26:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="nZQ5aBDs" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2A0FA20882 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=silabs.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=driverdev-devel-bounces@linuxdriverproject.org Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id E98E885F8C; Thu, 19 Sep 2019 14:26:18 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id cgHg-FZBhOGU; Thu, 19 Sep 2019 14:26:05 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by fraxinus.osuosl.org (Postfix) with ESMTP id D13CD85FAD; Thu, 19 Sep 2019 14:26:02 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by ash.osuosl.org (Postfix) with ESMTP id C69541BF23C for ; Thu, 19 Sep 2019 14:25:56 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id B4D4387D9E for ; Thu, 19 Sep 2019 14:25:56 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ObH3pQiRs0TR for ; Thu, 19 Sep 2019 14:25:52 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-eopbgr810041.outbound.protection.outlook.com [40.107.81.41]) by hemlock.osuosl.org (Postfix) with ESMTPS id 4105387D94 for ; Thu, 19 Sep 2019 14:25:52 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X/JtAHSzI/f8mIPuKI5ZsMk0uaV82rbJlrBwak434+ZdXUcP64c+V4PiRW4uEgTcy8Fk+hHXYr1xM/930z5zmZ2sWg6H8Ow3S0zSLbHVGVcbXjMArsbN9tJWvK0KyJUuc9/bDXQSBMvLiW+qwy803shVEXkY5JJz0ijwa5IACl1ig9S7FzCzxVXZ/Z4zygV0pDsaHET/r6cxEJIYwvaLZCfJFGFqN6SpzjA7erHzmoMzxAnnTpaZl0OCH0wI/ufc/RBF0UDQfvhee9KrxHw4lFIXuduW64Txkskwt14zBmmCUkvgvSxenHGZ+07p5i75zM5XuPCJGnZIhaorDjoZQQ== 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=RyOlZ5spJy9bQ8yeunRYPL8i2P4OFgGLiT3JROfMFlU=; b=Aw4Khd9JTIcKAUhA3JMCtlXgVQ79VMcRIGdOtUUFyzMXxF0tm2ikoNGzrMQn0eWNkwz3qtK+KOJosmicIJtgHomf+BIRrj2zNCIGvh32MQgHBkMsWC7yOsEex+e6J4JJZZIzE7A895MngWNzEB9Ul4+0lQp8VasxikCX8OJsFaP8IbTM3JVN710j9qUxQQw9ned54gMKHFh4rdS4Nuh9O/o5t0wgU37ZMNazGwG8b3zF9obxLSAFr0ELmYVVmLuKYHwCqSp98jeDIdm4aWX8yAqNTXZvq9GqAb+3Q+4rDH7SgsD2u3y3J58GwevbS6bugXEtXb8F0UFz98Dumn+2Vw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RyOlZ5spJy9bQ8yeunRYPL8i2P4OFgGLiT3JROfMFlU=; b=nZQ5aBDsLLvp2fZJ8iqxSiUzE73jLrq2VIl5h04giNIVs+C3Z8BtT1eAWG3BlEq1QcZOjzII7nn+xMB91fG9W9067KXGTttVqnWwPtdFsX8kzkhTbgPGQZffEihwdErMN9wVN8OOmVt5iRijPOCPiG7Ie7iaj7BuESCqeTBWLJs= Received: from MN2PR11MB4063.namprd11.prod.outlook.com (20.179.149.217) by MN2PR11MB3807.namprd11.prod.outlook.com (20.178.254.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.18; Thu, 19 Sep 2019 14:25:49 +0000 Received: from MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8]) by MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8%3]) with mapi id 15.20.2263.023; Thu, 19 Sep 2019 14:25:49 +0000 From: Jerome Pouiller To: "devel@driverdev.osuosl.org" , "linux-wireless@vger.kernel.org" Subject: [PATCH v3 20/20] staging: wfx: implement the rest of mac80211 API Thread-Topic: [PATCH v3 20/20] staging: wfx: implement the rest of mac80211 API Thread-Index: AQHVbvYhDOBJQRM2cEiISMXcCWNVQQ== Date: Thu, 19 Sep 2019 14:25:48 +0000 Message-ID: <20190919142527.31797-21-Jerome.Pouiller@silabs.com> References: <20190919142527.31797-1-Jerome.Pouiller@silabs.com> In-Reply-To: <20190919142527.31797-1-Jerome.Pouiller@silabs.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Jerome.Pouiller@silabs.com; x-originating-ip: [37.71.187.125] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4c8e2c79-c739-4459-7af5-08d73d0d4504 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600167)(711020)(4605104)(1401327)(2017052603328)(7193020); SRVR:MN2PR11MB3807; x-ms-traffictypediagnostic: MN2PR11MB3807: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:117; x-forefront-prvs: 016572D96D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(366004)(396003)(346002)(39850400004)(376002)(199004)(189003)(486006)(30864003)(76176011)(66066001)(66946007)(66556008)(91956017)(66476007)(2906002)(5660300002)(71200400001)(76116006)(8936002)(36756003)(476003)(110136005)(54906003)(2616005)(25786009)(316002)(11346002)(81166006)(81156014)(8676002)(446003)(102836004)(6506007)(2501003)(14444005)(256004)(6116002)(3846002)(107886003)(26005)(6486002)(66574012)(64756008)(71190400001)(6436002)(6512007)(66446008)(1076003)(7736002)(86362001)(186003)(99286004)(4326008)(14454004)(478600001)(305945005)(579004)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR11MB3807; H:MN2PR11MB4063.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: silabs.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: /cZsooR31kdMkQattaw3fW/b3EcUWqWERm63iRQTUaBG27FP/unes2OSL8qzNpHMbP9xzBCiXqk0sC9Jo3IG830VIYSbQm1HLYcrYa1tozHSZtrJvQevQC/2j4WhgdRM53yZyPAuLd/plS050CZzBAWG2cdOjImEx33HtlCxY6eJseSLrJfPr5G5zQZN2mxc0saJKLqr8bmmH5CSBtPLEavMQeQrXQBkZdvb5qlhZXfVFELdt54bgjDufWweiHaIt4Pvrxt7g4RKEA/flEX/iDweo0+3G58LmGOF3A9xnCYq6e47MrweabeOEGxL9x5ntC/LNhvU2O0gn+tEauzF3QcPlcCUDq4TD7vDKiT9oys+Jpt1TonMxxB+EHvlmJd/r46a0tRmcCMkksQFe6Qpxw+9iCPyQ/kwD4DW0E2Tp5I= Content-ID: <597335DE2DC5984E98C9498B783C9E6D@namprd11.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4c8e2c79-c739-4459-7af5-08d73d0d4504 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 14:25:48.1774 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: wgqXiOgXUA7INXdwEpXciIp1V+rtbeM1z57jtjy9wRyCEgEinJiQ+yBJDDtEb1WddwtNXMZZUBwEqWRwi6mVgg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB3807 X-BeenThere: driverdev-devel@linuxdriverproject.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Driver Project Developer List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Greg Kroah-Hartman , David Le Goff , "David S . Miller" , Kalle Valo Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPg0KDQpG aW5pc2ggdG8gZmlsbCBzdHJ1Y3QgaWVlZTgwMjExX29wcyB3aXRoIG5lY2Vzc2FyeSBjYWxsYmFj a3MuIERyaXZlciBpcw0Kbm93IHJlYWR5IHRvIGJlIHJlZ2lzdGVyZWQgdG8gbWFjODAyMTEuDQoN ClNpZ25lZC1vZmYtYnk6IErDqXLDtG1lIFBvdWlsbGVyIDxqZXJvbWUucG91aWxsZXJAc2lsYWJz LmNvbT4NCi0tLQ0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jIHwgICAyNiArDQogZHJp dmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMgfCAgIDE2ICsNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4 L2RlYnVnLmMgICB8ICAgIDIgKw0KIGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMgIHwgICA1 MyArKw0KIGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmMgIHwgICAgMSArDQogZHJpdmVycy9z dGFnaW5nL3dmeC9tYWluLmMgICAgfCAgMTMzICsrKw0KIGRyaXZlcnMvc3RhZ2luZy93ZngvcXVl dWUuYyAgIHwgICA4MCArKw0KIGRyaXZlcnMvc3RhZ2luZy93Zngvc2Nhbi5jICAgIHwgICA0MCAr DQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYyAgICAgfCAxNDQzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLQ0KIGRyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmggICAgIHwgICA2NSAr Kw0KIGRyaXZlcnMvc3RhZ2luZy93Zngvd2Z4LmggICAgIHwgICA1MSArKw0KIDExIGZpbGVzIGNo YW5nZWQsIDE5MDcgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRh X3J4LmMNCmluZGV4IDNiMzExN2IyZWRhYy4uM2E3OTA4OWM4NTAxIDEwMDY0NA0KLS0tIGEvZHJp dmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmMNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0 YV9yeC5jDQpAQCAtMjEsNiArMjEsOCBAQCBzdGF0aWMgaW50IHdmeF9oYW5kbGVfcHNwb2xsKHN0 cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KIAl1MzIgcHNwb2xsX21h c2sgPSAwOw0KIAlpbnQgaTsNCiANCisJaWYgKHd2aWYtPnN0YXRlICE9IFdGWF9TVEFURV9BUCkN CisJCXJldHVybiAxOw0KIAlpZiAoIWV0aGVyX2FkZHJfZXF1YWwod3ZpZi0+dmlmLT5hZGRyLCBw c3BvbGwtPmJzc2lkKSkNCiAJCXJldHVybiAxOw0KIA0KQEAgLTE2Miw2ICsxNjQsMzAgQEAgdm9p ZCB3ZnhfcnhfY2Ioc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBoaWZfaW5kX3J4ICphcmcs IHN0cnVjdCBza19idWZmICpza2INCiAJICAgICYmIGFyZy0+cnhfZmxhZ3MubWF0Y2hfdWNfYWRk cg0KIAkgICAgJiYgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9CQUNL KQ0KIAkJZ290byBkcm9wOw0KKwlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmcmFtZS0+ZnJhbWVf Y29udHJvbCkNCisJICAgICYmICFhcmctPnN0YXR1cyAmJiB3dmlmLT52aWYNCisJICAgICYmIGV0 aGVyX2FkZHJfZXF1YWwoaWVlZTgwMjExX2dldF9TQShmcmFtZSksIHd2aWYtPnZpZi0+YnNzX2Nv bmYuYnNzaWQpKSB7DQorCQljb25zdCB1OCAqdGltX2llOw0KKwkJdTggKmllcyA9IG1nbXQtPnUu YmVhY29uLnZhcmlhYmxlOw0KKwkJc2l6ZV90IGllc19sZW4gPSBza2ItPmxlbiAtIChpZXMgLSBz a2ItPmRhdGEpOw0KKw0KKwkJdGltX2llID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9USU0s IGllcywgaWVzX2xlbik7DQorCQlpZiAodGltX2llKSB7DQorCQkJc3RydWN0IGllZWU4MDIxMV90 aW1faWUgKnRpbSA9IChzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqKSAmdGltX2llWzJdOw0KKw0K KwkJCWlmICh3dmlmLT5kdGltX3BlcmlvZCAhPSB0aW0tPmR0aW1fcGVyaW9kKSB7DQorCQkJCXd2 aWYtPmR0aW1fcGVyaW9kID0gdGltLT5kdGltX3BlcmlvZDsNCisJCQkJc2NoZWR1bGVfd29yaygm d3ZpZi0+c2V0X2JlYWNvbl93YWtldXBfcGVyaW9kX3dvcmspOw0KKwkJCX0NCisJCX0NCisNCisJ CS8qIERpc2FibGUgYmVhY29uIGZpbHRlciBvbmNlIHdlJ3JlIGFzc29jaWF0ZWQuLi4gKi8NCisJ CWlmICh3dmlmLT5kaXNhYmxlX2JlYWNvbl9maWx0ZXIgJiYNCisJCSAgICAod3ZpZi0+dmlmLT5i c3NfY29uZi5hc3NvYyB8fCB3dmlmLT52aWYtPmJzc19jb25mLmlic3Nfam9pbmVkKSkgew0KKwkJ CXd2aWYtPmRpc2FibGVfYmVhY29uX2ZpbHRlciA9IGZhbHNlOw0KKwkJCXNjaGVkdWxlX3dvcmso Jnd2aWYtPnVwZGF0ZV9maWx0ZXJpbmdfd29yayk7DQorCQl9DQorCX0NCiANCiAJaWYgKGVhcmx5 X2RhdGEpIHsNCiAJCXNwaW5fbG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4 L2RhdGFfdHguYw0KaW5kZXggMjE3ZDNjMjcwNzA2Li43ZjI3OTlmYmRhZmUgMTAwNjQ0DQotLS0g YS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dm eC9kYXRhX3R4LmMNCkBAIC0xMCw2ICsxMCw3IEBADQogI2luY2x1ZGUgImRhdGFfdHguaCINCiAj aW5jbHVkZSAid2Z4LmgiDQogI2luY2x1ZGUgImJoLmgiDQorI2luY2x1ZGUgInN0YS5oIg0KICNp bmNsdWRlICJxdWV1ZS5oIg0KICNpbmNsdWRlICJkZWJ1Zy5oIg0KICNpbmNsdWRlICJ0cmFjZXMu aCINCkBAIC0zNTksNiArMzYwLDkgQEAgdm9pZCB3ZnhfbGlua19pZF9nY193b3JrKHN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yaykNCiAJdTMyIG1hc2s7DQogCWludCBpOw0KIA0KKwlpZiAod3ZpZi0+ c3RhdGUgIT0gV0ZYX1NUQVRFX0FQKQ0KKwkJcmV0dXJuOw0KKw0KIAl3ZnhfdHhfbG9ja19mbHVz aCh3dmlmLT53ZGV2KTsNCiAJc3Bpbl9sb2NrX2JoKCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCiAJ Zm9yIChpID0gMDsgaSA8IFdGWF9NQVhfU1RBX0lOX0FQX01PREU7ICsraSkgew0KQEAgLTcyOSwx NCArNzMzLDI2IEBAIHZvaWQgd2Z4X3R4X2NvbmZpcm1fY2Ioc3RydWN0IHdmeF92aWYgKnd2aWYs IHN0cnVjdCBoaWZfY25mX3R4ICphcmcpDQogCW1lbXNldCh0eF9pbmZvLT5wYWQsIDAsIHNpemVv Zih0eF9pbmZvLT5wYWQpKTsNCiANCiAJaWYgKCFhcmctPnN0YXR1cykgew0KKwkJaWYgKHd2aWYt PmJzc19sb3NzX3N0YXRlICYmIGFyZy0+cGFja2V0X2lkID09IHd2aWYtPmJzc19sb3NzX2NvbmZp cm1faWQpDQorCQkJd2Z4X2NxbV9ic3Nsb3NzX3NtKHd2aWYsIDAsIDEsIDApOw0KIAkJdHhfaW5m by0+c3RhdHVzLnR4X3RpbWUgPSBhcmctPm1lZGlhX2RlbGF5IC0gYXJnLT50eF9xdWV1ZV9kZWxh eTsNCiAJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQ0KIAkJ CXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX05PQUNLX1RSQU5TTUlUVEVEOw0K IAkJZWxzZQ0KIAkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsNCiAJ fSBlbHNlIGlmIChhcmctPnN0YXR1cyA9PSBISUZfUkVRVUVVRSkgew0KKwkJLyogIlJFUVVFVUUi IG1lYW5zICJpbXBsaWNpdCBzdXNwZW5kIiAqLw0KKwkJc3RydWN0IGhpZl9pbmRfc3VzcGVuZF9y ZXN1bWVfdHggc3VzcGVuZCA9IHsNCisJCQkuc3VzcGVuZF9yZXN1bWVfZmxhZ3MucmVzdW1lID0g MCwNCisJCQkuc3VzcGVuZF9yZXN1bWVfZmxhZ3MuYmNfbWNfb25seSA9IDEsDQorCQl9Ow0KKw0K IAkJV0FSTighYXJnLT50eF9yZXN1bHRfZmxhZ3MucmVxdWV1ZSwgImluY29oZXJlbnQgc3RhdHVz IGFuZCByZXN1bHRfZmxhZ3MiKTsNCisJCXdmeF9zdXNwZW5kX3Jlc3VtZSh3dmlmLCAmc3VzcGVu ZCk7DQogCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsN CisJfSBlbHNlIHsNCisJCWlmICh3dmlmLT5ic3NfbG9zc19zdGF0ZSAmJiBhcmctPnBhY2tldF9p ZCA9PSB3dmlmLT5ic3NfbG9zc19jb25maXJtX2lkKQ0KKwkJCXdmeF9jcW1fYnNzbG9zc19zbSh3 dmlmLCAwLCAwLCAxKTsNCiAJfQ0KIAl3ZnhfcGVuZGluZ19yZW1vdmUod3ZpZi0+d2Rldiwgc2ti KTsNCiB9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5jIGIvZHJpdmVy cy9zdGFnaW5nL3dmeC9kZWJ1Zy5jDQppbmRleCAxZTIzYmI1YmRlM2UuLjMyNjFiMjY3YzM4NSAx MDA2NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvZGVidWcuYw0KKysrIGIvZHJpdmVycy9z dGFnaW5nL3dmeC9kZWJ1Zy5jDQpAQCAtMTEsNyArMTEsOSBAQA0KIA0KICNpbmNsdWRlICJkZWJ1 Zy5oIg0KICNpbmNsdWRlICJ3ZnguaCINCisjaW5jbHVkZSAic3RhLmgiDQogI2luY2x1ZGUgIm1h aW4uaCINCisjaW5jbHVkZSAiaGlmX3R4LmgiDQogI2luY2x1ZGUgImhpZl90eF9taWIuaCINCiAN CiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L2hpZl9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguYw0KaW5kZXggZDM4 NmZhYjBhOTBmLi41MmRiMDJkM2FhNDEgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4 L2hpZl9yeC5jDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9yeC5jDQpAQCAtMTIsNiAr MTIsOCBAQA0KICNpbmNsdWRlICJoaWZfcnguaCINCiAjaW5jbHVkZSAid2Z4LmgiDQogI2luY2x1 ZGUgInNjYW4uaCINCisjaW5jbHVkZSAiYmguaCINCisjaW5jbHVkZSAic3RhLmgiDQogI2luY2x1 ZGUgImRhdGFfcnguaCINCiAjaW5jbHVkZSAic2VjdXJlX2xpbmsuaCINCiAjaW5jbHVkZSAiaGlm X2FwaV9jbWQuaCINCkBAIC0xNDQsNiArMTQ2LDQzIEBAIHN0YXRpYyBpbnQgaGlmX3JlY2VpdmVf aW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKmhpZiwgdm9p DQogCXJldHVybiAwOw0KIH0NCiANCitzdGF0aWMgaW50IGhpZl9ldmVudF9pbmRpY2F0aW9uKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCB2b2lkICpidWYpDQorew0K KwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFj ZSk7DQorCXN0cnVjdCBoaWZfaW5kX2V2ZW50ICpib2R5ID0gYnVmOw0KKwlzdHJ1Y3Qgd2Z4X2hp Zl9ldmVudCAqZXZlbnQ7DQorCWludCBmaXJzdDsNCisNCisJV0FSTl9PTighd3ZpZik7DQorCWlm ICghd3ZpZikNCisJCXJldHVybiAwOw0KKw0KKwlldmVudCA9IGt6YWxsb2Moc2l6ZW9mKCpldmVu dCksIEdGUF9LRVJORUwpOw0KKwlpZiAoIWV2ZW50KQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQor CW1lbWNweSgmZXZlbnQtPmV2dCwgYm9keSwgc2l6ZW9mKHN0cnVjdCBoaWZfaW5kX2V2ZW50KSk7 DQorCXNwaW5fbG9jaygmd3ZpZi0+ZXZlbnRfcXVldWVfbG9jayk7DQorCWZpcnN0ID0gbGlzdF9l bXB0eSgmd3ZpZi0+ZXZlbnRfcXVldWUpOw0KKwlsaXN0X2FkZF90YWlsKCZldmVudC0+bGluaywg Jnd2aWYtPmV2ZW50X3F1ZXVlKTsNCisJc3Bpbl91bmxvY2soJnd2aWYtPmV2ZW50X3F1ZXVlX2xv Y2spOw0KKw0KKwlpZiAoZmlyc3QpDQorCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT5ldmVudF9oYW5k bGVyX3dvcmspOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBoaWZfcG1fbW9k ZV9jb21wbGV0ZV9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21z ZyAqaGlmLCB2b2lkICpidWYpDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9f d3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7DQorDQorCVdBUk5fT04oIXd2aWYpOw0KKwljb21w bGV0ZSgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQogc3RhdGljIGludCBoaWZfc2Nhbl9jb21wbGV0ZV9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCB2b2lkICpidWYpDQogew0KIAlzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7DQpAQCAtMTY1 LDYgKzIwNCwxNyBAQCBzdGF0aWMgaW50IGhpZl9qb2luX2NvbXBsZXRlX2luZGljYXRpb24oc3Ry dWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBoaWZfbXNnICpoaQ0KIAlyZXR1cm4gMDsNCiB9DQog DQorc3RhdGljIGludCBoaWZfc3VzcGVuZF9yZXN1bWVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2Rl diAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKmhpZiwgdm9pZCAqYnVmKQ0KK3sNCisJc3RydWN0IHdm eF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOw0KKwlzdHJ1 Y3QgaGlmX2luZF9zdXNwZW5kX3Jlc3VtZV90eCAqYm9keSA9IGJ1ZjsNCisNCisJV0FSTl9PTigh d3ZpZik7DQorCXdmeF9zdXNwZW5kX3Jlc3VtZSh3dmlmLCBib2R5KTsNCisNCisJcmV0dXJuIDA7 DQorfQ0KKw0KIHN0YXRpYyBpbnQgaGlmX2Vycm9yX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYg KndkZXYsIHN0cnVjdCBoaWZfbXNnICpoaWYsIHZvaWQgKmJ1ZikNCiB7DQogCXN0cnVjdCBoaWZf aW5kX2Vycm9yICpib2R5ID0gYnVmOw0KQEAgLTI0Miw4ICsyOTIsMTEgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCB7DQogCXsgSElGX0lORF9JRF9TVEFSVFVQLCAgICAgICAgICAgICAgaGlmX3N0YXJ0 dXBfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfV0FLRVVQLCAgICAgICAgICAgICAgIGhp Zl93YWtldXBfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfSk9JTl9DT01QTEVURSwgICAg ICAgIGhpZl9qb2luX2NvbXBsZXRlX2luZGljYXRpb24gfSwNCisJeyBISUZfSU5EX0lEX1NFVF9Q TV9NT0RFX0NNUEwsICAgICBoaWZfcG1fbW9kZV9jb21wbGV0ZV9pbmRpY2F0aW9uIH0sDQogCXsg SElGX0lORF9JRF9TQ0FOX0NNUEwsICAgICAgICAgICAgaGlmX3NjYW5fY29tcGxldGVfaW5kaWNh dGlvbiB9LA0KKwl7IEhJRl9JTkRfSURfU1VTUEVORF9SRVNVTUVfVFgsICAgIGhpZl9zdXNwZW5k X3Jlc3VtZV9pbmRpY2F0aW9uIH0sDQogCXsgSElGX0lORF9JRF9TTF9FWENIQU5HRV9QVUJfS0VZ UywgaGlmX2tleXNfaW5kaWNhdGlvbiB9LA0KKwl7IEhJRl9JTkRfSURfRVZFTlQsICAgICAgICAg ICAgICAgIGhpZl9ldmVudF9pbmRpY2F0aW9uIH0sDQogCXsgSElGX0lORF9JRF9HRU5FUklDLCAg ICAgICAgICAgICAgaGlmX2dlbmVyaWNfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfRVJS T1IsICAgICAgICAgICAgICAgIGhpZl9lcnJvcl9pbmRpY2F0aW9uIH0sDQogCXsgSElGX0lORF9J RF9FWENFUFRJT04sICAgICAgICAgICAgaGlmX2V4Y2VwdGlvbl9pbmRpY2F0aW9uIH0sDQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy93 ZngvaGlmX3R4LmMNCmluZGV4IDE1N2FiMTc3YjczZi4uMmQ0MDIyNWEwZmNlIDEwMDY0NA0KLS0t IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHguYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dm eC9oaWZfdHguYw0KQEAgLTE0LDYgKzE0LDcgQEANCiAjaW5jbHVkZSAiYmguaCINCiAjaW5jbHVk ZSAiaHdpby5oIg0KICNpbmNsdWRlICJkZWJ1Zy5oIg0KKyNpbmNsdWRlICJzdGEuaCINCiANCiB2 b2lkIHdmeF9pbml0X2hpZl9jbWQoc3RydWN0IHdmeF9oaWZfY21kICpoaWZfY21kKQ0KIHsNCmRp ZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy93 ZngvbWFpbi5jDQppbmRleCBlN2JiYTI0YWFlMGIuLmZlOWE4OTcwMzg5NyAxMDA2NDQNCi0tLSBh L2RyaXZlcnMvc3RhZ2luZy93ZngvbWFpbi5jDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L21h aW4uYw0KQEAgLTUwLDE0ICs1MCwxMTIgQEAgc3RhdGljIGNoYXIgKnNsa19rZXk7DQogbW9kdWxl X3BhcmFtKHNsa19rZXksIGNoYXJwLCAwNjAwKTsNCiBNT0RVTEVfUEFSTV9ERVNDKHNsa19rZXks ICJzZWNyZXQga2V5IGZvciBzZWN1cmUgbGluayAoZXhwZWN0IDY0IGhleGRlY2ltYWwgZGlnaXRz KS4iKTsNCiANCisjZGVmaW5lIFJBVEVUQUJfRU5UKF9yYXRlLCBfcmF0ZWlkLCBfZmxhZ3MpIHsg XA0KKwkuYml0cmF0ZSAgPSAoX3JhdGUpLCAgIFwNCisJLmh3X3ZhbHVlID0gKF9yYXRlaWQpLCBc DQorCS5mbGFncyAgICA9IChfZmxhZ3MpLCAgXA0KK30NCisNCitzdGF0aWMgc3RydWN0IGllZWU4 MDIxMV9yYXRlIHdmeF9yYXRlc1tdID0gew0KKwlSQVRFVEFCX0VOVCgxMCwgIDAsICAwKSwNCisJ UkFURVRBQl9FTlQoMjAsICAxLCAgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLA0KKwlS QVRFVEFCX0VOVCg1NSwgIDIsICBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksDQorCVJB VEVUQUJfRU5UKDExMCwgMywgIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwNCisJUkFU RVRBQl9FTlQoNjAsICA2LCAgMCksDQorCVJBVEVUQUJfRU5UKDkwLCAgNywgIDApLA0KKwlSQVRF VEFCX0VOVCgxMjAsIDgsICAwKSwNCisJUkFURVRBQl9FTlQoMTgwLCA5LCAgMCksDQorCVJBVEVU QUJfRU5UKDI0MCwgMTAsIDApLA0KKwlSQVRFVEFCX0VOVCgzNjAsIDExLCAwKSwNCisJUkFURVRB Ql9FTlQoNDgwLCAxMiwgMCksDQorCVJBVEVUQUJfRU5UKDU0MCwgMTMsIDApLA0KK307DQorDQor I2RlZmluZSBDSEFOMkcoX2NoYW5uZWwsIF9mcmVxLCBfZmxhZ3MpIHsgXA0KKwkuYmFuZCA9IE5M ODAyMTFfQkFORF8yR0haLCBcDQorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksICAgIFwNCisJLmh3 X3ZhbHVlID0gKF9jaGFubmVsKSwgICAgXA0KKwkuZmxhZ3MgPSAoX2ZsYWdzKSwgICAgICAgICBc DQorCS5tYXhfYW50ZW5uYV9nYWluID0gMCwgICAgIFwNCisJLm1heF9wb3dlciA9IDMwLCAgICAg ICAgICAgXA0KK30NCisNCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHdmeF8yZ2h6 X2NoYW50YWJsZVtdID0gew0KKwlDSEFOMkcoMSwgIDI0MTIsIDApLA0KKwlDSEFOMkcoMiwgIDI0 MTcsIDApLA0KKwlDSEFOMkcoMywgIDI0MjIsIDApLA0KKwlDSEFOMkcoNCwgIDI0MjcsIDApLA0K KwlDSEFOMkcoNSwgIDI0MzIsIDApLA0KKwlDSEFOMkcoNiwgIDI0MzcsIDApLA0KKwlDSEFOMkco NywgIDI0NDIsIDApLA0KKwlDSEFOMkcoOCwgIDI0NDcsIDApLA0KKwlDSEFOMkcoOSwgIDI0NTIs IDApLA0KKwlDSEFOMkcoMTAsIDI0NTcsIDApLA0KKwlDSEFOMkcoMTEsIDI0NjIsIDApLA0KKwlD SEFOMkcoMTIsIDI0NjcsIDApLA0KKwlDSEFOMkcoMTMsIDI0NzIsIDApLA0KKwlDSEFOMkcoMTQs IDI0ODQsIDApLA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9y dGVkX2JhbmQgd2Z4X2JhbmRfMmdoeiA9IHsNCisJLmNoYW5uZWxzID0gd2Z4XzJnaHpfY2hhbnRh YmxlLA0KKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUod2Z4XzJnaHpfY2hhbnRhYmxlKSwNCisJ LmJpdHJhdGVzID0gd2Z4X3JhdGVzLA0KKwkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUod2Z4X3Jh dGVzKSwNCisJLmh0X2NhcCA9IHsNCisJCS8vIFJlY2VpdmUgY2Fwcw0KKwkJLmNhcCA9IElFRUU4 MDIxMV9IVF9DQVBfR1JOX0ZMRCB8IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwIHwNCisJCSAgICAg ICBJRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVSB8ICgxIDw8IElFRUU4MDIxMV9IVF9DQVBfUlhf U1RCQ19TSElGVCksDQorCQkuaHRfc3VwcG9ydGVkID0gMSwNCisJCS5hbXBkdV9mYWN0b3IgPSBJ RUVFODAyMTFfSFRfTUFYX0FNUERVXzE2SywNCisJCS5hbXBkdV9kZW5zaXR5ID0gSUVFRTgwMjEx X0hUX01QRFVfREVOU0lUWV9OT05FLA0KKwkJLm1jcyA9IHsNCisJCQkucnhfbWFzayA9IHsgMHhG RiB9LCAvLyBNQ1MwIHRvIE1DUzcNCisJCQkucnhfaGlnaGVzdCA9IDY1LA0KKwkJCS50eF9wYXJh bXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQsDQorCQl9LA0KKwl9LA0KK307DQorDQor c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgd2Rldl9pZmFjZV9saW1p dHNbXSA9IHsNCisJeyAubWF4ID0gMSwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJ T04pIH0sDQorCXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfSwN Cit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9u IHdmeF9pZmFjZV9jb21iaW5hdGlvbnNbXSA9IHsNCisJew0KKwkJLm51bV9kaWZmZXJlbnRfY2hh bm5lbHMgPSAyLA0KKwkJLm1heF9pbnRlcmZhY2VzID0gMiwNCisJCS5saW1pdHMgPSB3ZGV2X2lm YWNlX2xpbWl0cywNCisJCS5uX2xpbWl0cyA9IEFSUkFZX1NJWkUod2Rldl9pZmFjZV9saW1pdHMp LA0KKwl9DQorfTsNCisNCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2Z4X29w cyA9IHsNCiAJLnN0YXJ0CQkJPSB3Znhfc3RhcnQsDQogCS5zdG9wCQkJPSB3Znhfc3RvcCwNCiAJ LmFkZF9pbnRlcmZhY2UJCT0gd2Z4X2FkZF9pbnRlcmZhY2UsDQogCS5yZW1vdmVfaW50ZXJmYWNl CT0gd2Z4X3JlbW92ZV9pbnRlcmZhY2UsDQorCS5jb25maWcJCQk9IHdmeF9jb25maWcsDQogCS50 eAkJCT0gd2Z4X3R4LA0KKwkuY29uZl90eAkJPSB3ZnhfY29uZl90eCwNCiAJLmh3X3NjYW4JCT0g d2Z4X2h3X3NjYW4sDQorCS5zdGFfYWRkCQk9IHdmeF9zdGFfYWRkLA0KKwkuc3RhX3JlbW92ZQkJ PSB3Znhfc3RhX3JlbW92ZSwNCisJLnN0YV9ub3RpZnkJCT0gd2Z4X3N0YV9ub3RpZnksDQorCS5z ZXRfdGltCQk9IHdmeF9zZXRfdGltLA0KIAkuc2V0X2tleQkJPSB3Znhfc2V0X2tleSwNCisJLnNl dF9ydHNfdGhyZXNob2xkCT0gd2Z4X3NldF9ydHNfdGhyZXNob2xkLA0KKwkuYnNzX2luZm9fY2hh bmdlZAk9IHdmeF9ic3NfaW5mb19jaGFuZ2VkLA0KKwkucHJlcGFyZV9tdWx0aWNhc3QJPSB3Znhf cHJlcGFyZV9tdWx0aWNhc3QsDQorCS5jb25maWd1cmVfZmlsdGVyCT0gd2Z4X2NvbmZpZ3VyZV9m aWx0ZXIsDQorCS5hbXBkdV9hY3Rpb24JCT0gd2Z4X2FtcGR1X2FjdGlvbiwNCisJLmZsdXNoCQkJ PSB3ZnhfZmx1c2gsDQorCS5hZGRfY2hhbmN0eAkJPSB3ZnhfYWRkX2NoYW5jdHgsDQorCS5yZW1v dmVfY2hhbmN0eAkJPSB3ZnhfcmVtb3ZlX2NoYW5jdHgsDQorCS5jaGFuZ2VfY2hhbmN0eAkJPSB3 ZnhfY2hhbmdlX2NoYW5jdHgsDQorCS5hc3NpZ25fdmlmX2NoYW5jdHgJPSB3ZnhfYXNzaWduX3Zp Zl9jaGFuY3R4LA0KKwkudW5hc3NpZ25fdmlmX2NoYW5jdHgJPSB3ZnhfdW5hc3NpZ25fdmlmX2No YW5jdHgsDQogfTsNCiANCiBib29sIHdmeF9hcGlfb2xkZXJfdGhhbihzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwgaW50IG1ham9yLCBpbnQgbWlub3IpDQpAQCAtMTk4LDYgKzI5NiwxNiBAQCBzdHJ1Y3Qg d2Z4X2RldiAqd2Z4X2luaXRfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwNCiANCiAJU0VUX0lF RUU4MDIxMV9ERVYoaHcsIGRldik7DQogDQorCWllZWU4MDIxMV9od19zZXQoaHcsIE5FRURfRFRJ TV9CRUZPUkVfQVNTT0MpOw0KKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBUWF9BTVBEVV9TRVRVUF9J Tl9IVyk7DQorCWllZWU4MDIxMV9od19zZXQoaHcsIEFNUERVX0FHR1JFR0FUSU9OKTsNCisJaWVl ZTgwMjExX2h3X3NldChodywgQ09OTkVDVElPTl9NT05JVE9SKTsNCisJaWVlZTgwMjExX2h3X3Nl dChodywgUkVQT1JUU19UWF9BQ0tfU1RBVFVTKTsNCisJaWVlZTgwMjExX2h3X3NldChodywgU1VQ UE9SVFNfRFlOQU1JQ19QUyk7DQorCWllZWU4MDIxMV9od19zZXQoaHcsIFNJR05BTF9EQk0pOw0K KwlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19QUyk7DQorCWllZWU4MDIxMV9od19zZXQo aHcsIE1GUF9DQVBBQkxFKTsNCisNCiAJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0 IHdmeF92aWYpOw0KIAlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgd2Z4X3N0YV9w cml2KTsNCiAJaHctPnF1ZXVlcyA9IDQ7DQpAQCAtMjA2LDggKzMxNCwxOSBAQCBzdHJ1Y3Qgd2Z4 X2RldiAqd2Z4X2luaXRfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwNCiAJaHctPmV4dHJhX3R4 X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBoaWZfc2xfbXNnX2hkcikgKyBzaXplb2Yoc3RydWN0 IGhpZl9tc2cpDQogCQkJCSsgc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3R4KQ0KIAkJCQkrIDQgLyog YWxpZ25tZW50ICovICsgOCAvKiBUS0lQIElWICovOw0KKwlody0+d2lwaHktPmludGVyZmFjZV9t b2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8DQorCQkJCSAgICAgQklUKE5MODAy MTFfSUZUWVBFX0FESE9DKSB8DQorCQkJCSAgICAgQklUKE5MODAyMTFfSUZUWVBFX0FQKTsNCisJ aHctPndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0FQX1VBUFNEOw0KKwlody0+d2lwaHktPmZs YWdzICY9IH5XSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ7DQorCWh3LT53aXBoeS0+bWF4X2Fw X2Fzc29jX3N0YSA9IFdGWF9NQVhfU1RBX0lOX0FQX01PREU7DQogCWh3LT53aXBoeS0+bWF4X3Nj YW5fc3NpZHMgPSAyOw0KIAlody0+d2lwaHktPm1heF9zY2FuX2llX2xlbiA9IElFRUU4MDIxMV9N QVhfREFUQV9MRU47DQorCWh3LT53aXBoeS0+bl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9T SVpFKHdmeF9pZmFjZV9jb21iaW5hdGlvbnMpOw0KKwlody0+d2lwaHktPmlmYWNlX2NvbWJpbmF0 aW9ucyA9IHdmeF9pZmFjZV9jb21iaW5hdGlvbnM7DQorCWh3LT53aXBoeS0+YmFuZHNbTkw4MDIx MV9CQU5EXzJHSFpdID0gZGV2bV9rbWFsbG9jKGRldiwgc2l6ZW9mKHdmeF9iYW5kXzJnaHopLCBH RlBfS0VSTkVMKTsNCisJLy8gRklYTUU6IGFsc28gY29weSB3ZnhfcmF0ZXMgYW5kIHdmeF8yZ2h6 X2NoYW50YWJsZQ0KKwltZW1jcHkoaHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0s ICZ3ZnhfYmFuZF8yZ2h6LCBzaXplb2Yod2Z4X2JhbmRfMmdoeikpOw0KIA0KIAl3ZGV2ID0gaHct PnByaXY7DQogCXdkZXYtPmh3ID0gaHc7DQpAQCAtMjkwLDYgKzQwOSwxMiBAQCBpbnQgd2Z4X3By b2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KIAkJZ290byBlcnIxOw0KIAl9DQogDQorCWlmICh3 ZGV2LT5od19jYXBzLnJlZ3VsX3NlbF9tb2RlX2luZm8ucmVnaW9uX3NlbF9tb2RlKSB7DQorCQl3 ZGV2LT5ody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXS0+Y2hhbm5lbHNbMTFdLmZs YWdzIHw9IElFRUU4MDIxMV9DSEFOX05PX0lSOw0KKwkJd2Rldi0+aHctPndpcGh5LT5iYW5kc1tO TDgwMjExX0JBTkRfMkdIWl0tPmNoYW5uZWxzWzEyXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9O T19JUjsNCisJCXdkZXYtPmh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLT5jaGFu bmVsc1sxM10uZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7DQorCX0NCisNCiAJZGV2 X2RiZyh3ZGV2LT5kZXYsICJzZW5kaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSAlc1xuIiwgd2Rldi0+ cGRhdGEuZmlsZV9wZHMpOw0KIAllcnIgPSB3Znhfc2VuZF9wZGF0YV9wZHMod2Rldik7DQogCWlm IChlcnIgPCAwKQ0KQEAgLTMyMiw2ICs0NDcsMTIgQEAgaW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4 X2RldiAqd2RldikNCiAJCX0NCiAJCWRldl9pbmZvKHdkZXYtPmRldiwgIk1BQyBhZGRyZXNzICVk OiAlcE1cbiIsIGksIHdkZXYtPmFkZHJlc3Nlc1tpXS5hZGRyKTsNCiAJfQ0KKwl3ZGV2LT5ody0+ d2lwaHktPm5fYWRkcmVzc2VzID0gQVJSQVlfU0laRSh3ZGV2LT5hZGRyZXNzZXMpOw0KKwl3ZGV2 LT5ody0+d2lwaHktPmFkZHJlc3NlcyA9IHdkZXYtPmFkZHJlc3NlczsNCisNCisJZXJyID0gaWVl ZTgwMjExX3JlZ2lzdGVyX2h3KHdkZXYtPmh3KTsNCisJaWYgKGVycikNCisJCWdvdG8gZXJyMTsN CiANCiAJZXJyID0gd2Z4X2RlYnVnX2luaXQod2Rldik7DQogCWlmIChlcnIpDQpAQCAtMzMwLDYg KzQ2MSw3IEBAIGludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpDQogCXJldHVybiAw Ow0KIA0KIGVycjI6DQorCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdkZXYtPmh3KTsNCiAJaWVl ZTgwMjExX2ZyZWVfaHcod2Rldi0+aHcpOw0KIGVycjE6DQogCXdmeF9iaF91bnJlZ2lzdGVyKHdk ZXYpOw0KQEAgLTMzOCw2ICs0NzAsNyBAQCBpbnQgd2Z4X3Byb2JlKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2KQ0KIA0KIHZvaWQgd2Z4X3JlbGVhc2Uoc3RydWN0IHdmeF9kZXYgKndkZXYpDQogew0KKwlp ZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3ZGV2LT5odyk7DQogCWhpZl9zaHV0ZG93bih3ZGV2KTsN CiAJd2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7DQogCXdmeF9zbF9kZWluaXQod2Rldik7DQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3dm eC9xdWV1ZS5jDQppbmRleCBhYTQzOGJlMjFkMzcuLjZmMWJlNGY2ZjQ2MyAxMDA2NDQNCi0tLSBh L2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9x dWV1ZS5jDQpAQCAtMzUxLDYgKzM1MSw4MyBAQCBib29sIHdmeF90eF9xdWV1ZXNfaXNfZW1wdHko c3RydWN0IHdmeF9kZXYgKndkZXYpDQogCXJldHVybiByZXQ7DQogfQ0KIA0KK3N0YXRpYyBib29s IGhpZl9oYW5kbGVfdHhfZGF0YShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHNrX2J1ZmYg KnNrYiwNCisJCQkgICAgICAgc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUpDQorew0KKwlib29sIGhh bmRsZWQgPSBmYWxzZTsNCisJc3RydWN0IHdmeF90eF9wcml2ICp0eF9wcml2ID0gd2Z4X3NrYl90 eF9wcml2KHNrYik7DQorCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXEgPSB3Znhfc2tiX3R4cmVxKHNr Yik7DQorCXN0cnVjdCBpZWVlODAyMTFfaGRyICpmcmFtZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2hk ciAqKSAocmVxLT5mcmFtZSArIHJlcS0+ZGF0YV9mbGFncy5mY19vZmZzZXQpOw0KKw0KKwllbnVt IHsNCisJCWRvX3Byb2JlLA0KKwkJZG9fZHJvcCwNCisJCWRvX3dlcCwNCisJCWRvX3R4LA0KKwl9 IGFjdGlvbiA9IGRvX3R4Ow0KKw0KKwlzd2l0Y2ggKHd2aWYtPnZpZi0+dHlwZSkgew0KKwljYXNl IE5MODAyMTFfSUZUWVBFX1NUQVRJT046DQorCQlpZiAod3ZpZi0+c3RhdGUgPCBXRlhfU1RBVEVf UFJFX1NUQSkNCisJCQlhY3Rpb24gPSBkb19kcm9wOw0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIx MV9JRlRZUEVfQVA6DQorCQlpZiAoIXd2aWYtPnN0YXRlKSB7DQorCQkJYWN0aW9uID0gZG9fZHJv cDsNCisJCX0gZWxzZSBpZiAoIShCSVQodHhfcHJpdi0+cmF3X2xpbmtfaWQpICYgKEJJVCgwKSB8 IHd2aWYtPmxpbmtfaWRfbWFwKSkpIHsNCisJCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsICJh IGZyYW1lIHdpdGggZXhwaXJlZCBsaW5rLWlkIGlzIGRyb3BwZWRcbiIpOw0KKwkJCWFjdGlvbiA9 IGRvX2Ryb3A7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoN CisJCWlmICh3dmlmLT5zdGF0ZSAhPSBXRlhfU1RBVEVfSUJTUykNCisJCQlhY3Rpb24gPSBkb19k cm9wOw0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoNCisJZGVmYXVs dDoNCisJCWFjdGlvbiA9IGRvX2Ryb3A7DQorCQlicmVhazsNCisJfQ0KKw0KKwlpZiAoYWN0aW9u ID09IGRvX3R4KSB7DQorCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZyYW1lLT5mcmFtZV9j b250cm9sKSkgew0KKwkJCW11dGV4X2xvY2soJnd2aWYtPmJzc19sb3NzX2xvY2spOw0KKwkJCWlm ICh3dmlmLT5ic3NfbG9zc19zdGF0ZSkgew0KKwkJCQl3dmlmLT5ic3NfbG9zc19jb25maXJtX2lk ID0gcmVxLT5wYWNrZXRfaWQ7DQorCQkJCXJlcS0+cXVldWVfaWQucXVldWVfaWQgPSBISUZfUVVF VUVfSURfVk9JQ0U7DQorCQkJfQ0KKwkJCW11dGV4X3VubG9jaygmd3ZpZi0+YnNzX2xvc3NfbG9j ayk7DQorCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGZyYW1lLT5mcmFtZV9j b250cm9sKSAmJg0KKwkJCSAgIHR4X3ByaXYtPmh3X2tleSAmJg0KKwkJCSAgIHR4X3ByaXYtPmh3 X2tleS0+a2V5aWR4ICE9IHd2aWYtPndlcF9kZWZhdWx0X2tleV9pZCAmJg0KKwkJCSAgICh0eF9w cml2LT5od19rZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fA0KKwkJCSAg ICB0eF9wcml2LT5od19rZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpKSB7 DQorCQkJYWN0aW9uID0gZG9fd2VwOw0KKwkJfQ0KKwl9DQorDQorCXN3aXRjaCAoYWN0aW9uKSB7 DQorCWNhc2UgZG9fZHJvcDoNCisJCUJVR19PTih3ZnhfcGVuZGluZ19yZW1vdmUod3ZpZi0+d2Rl diwgc2tiKSk7DQorCQloYW5kbGVkID0gdHJ1ZTsNCisJCWJyZWFrOw0KKwljYXNlIGRvX3dlcDoN CisJCXdmeF90eF9sb2NrKHd2aWYtPndkZXYpOw0KKwkJd3ZpZi0+d2VwX2RlZmF1bHRfa2V5X2lk ID0gdHhfcHJpdi0+aHdfa2V5LT5rZXlpZHg7DQorCQl3dmlmLT53ZXBfcGVuZGluZ19za2IgPSBz a2I7DQorCQlpZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPndlcF9rZXlfd29yaykpDQorCQkJd2Z4 X3R4X3VubG9jayh3dmlmLT53ZGV2KTsNCisJCWhhbmRsZWQgPSB0cnVlOw0KKwkJYnJlYWs7DQor CWNhc2UgZG9fdHg6DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCS8qIERvIG5vdGhpbmcgKi8N CisJCWJyZWFrOw0KKwl9DQorCXJldHVybiBoYW5kbGVkOw0KK30NCisNCiBzdGF0aWMgaW50IHdm eF9nZXRfcHJpb19xdWV1ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCiAJCQkJIHUzMiB0eF9hbGxv d2VkX21hc2ssIGludCAqdG90YWwpDQogew0KQEAgLTQ5OCw2ICs1NzUsOSBAQCBzdHJ1Y3QgaGlm X21zZyAqd2Z4X3R4X3F1ZXVlc19nZXQoc3RydWN0IHdmeF9kZXYgKndkZXYpDQogCQl3dmlmID0g d2Rldl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsNCiAJCVdBUk5fT04oIXd2aWYpOw0K IA0KKwkJaWYgKGhpZl9oYW5kbGVfdHhfZGF0YSh3dmlmLCBza2IsIHF1ZXVlKSkNCisJCQljb250 aW51ZTsgIC8qIEhhbmRsZWQgYnkgV1NNICovDQorDQogCQl3dmlmLT5wc3BvbGxfbWFzayAmPSB+ QklUKHR4X3ByaXYtPnJhd19saW5rX2lkKTsNCiANCiAJCS8qIGFsbG93IGJ1cnN0aW5nIGlmIHR4 b3AgaXMgc2V0ICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9zY2FuLmMgYi9k cml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYw0KaW5kZXggMjA3YjI2ZWJjOWZkLi5lYTUwMDFjOTE1 ZjYgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYw0KKysrIGIvZHJpdmVy cy9zdGFnaW5nL3dmeC9zY2FuLmMNCkBAIC0yMSwxMSArMjEsMjYgQEAgc3RhdGljIHZvaWQgX19p ZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWRfY29tcGF0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBi b29sIGFib3INCiAJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKGh3LCAmaW5mbyk7DQogfQ0KIA0K K3N0YXRpYyB2b2lkIHdmeF9zY2FuX3Jlc3RhcnRfZGVsYXllZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZikNCit7DQorCWlmICh3dmlmLT5kZWxheWVkX3Vuam9pbikgew0KKwkJd3ZpZi0+ZGVsYXllZF91 bmpvaW4gPSBmYWxzZTsNCisJCWlmICghc2NoZWR1bGVfd29yaygmd3ZpZi0+dW5qb2luX3dvcmsp KQ0KKwkJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCX0gZWxzZSBpZiAod3ZpZi0+ZGVs YXllZF9saW5rX2xvc3MpIHsNCisJCXd2aWYtPmRlbGF5ZWRfbGlua19sb3NzID0gMDsNCisJCXdm eF9jcW1fYnNzbG9zc19zbSh3dmlmLCAxLCAwLCAwKTsNCisJfQ0KK30NCisNCiBzdGF0aWMgaW50 IHdmeF9zY2FuX3N0YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgd2Z4X3NjYW5fcGFy YW1zICpzY2FuKQ0KIHsNCiAJaW50IHJldDsNCiAJaW50IHRtbyA9IDUwMDsNCiANCisJaWYgKHd2 aWYtPnN0YXRlID09IFdGWF9TVEFURV9QUkVfU1RBKQ0KKwkJcmV0dXJuIC1FQlVTWTsNCisNCiAJ dG1vICs9IHNjYW4tPnNjYW5fcmVxLm51bV9vZl9jaGFubmVscyAqDQogCSAgICAgICAoKDIwICog KHNjYW4tPnNjYW5fcmVxLm1heF9jaGFubmVsX3RpbWUpKSArIDEwKTsNCiAJYXRvbWljX3NldCgm d3ZpZi0+c2Nhbi5pbl9wcm9ncmVzcywgMSk7DQpAQCAtMzgsNiArNTMsNyBAQCBzdGF0aWMgaW50 IHdmeF9zY2FuX3N0YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgd2Z4X3NjYW5fcGFy YW1zICpzY2FuKQ0KIAkJYXRvbWljX3NldCgmd3ZpZi0+c2Nhbi5pbl9wcm9ncmVzcywgMCk7DQog CQlhdG9taWNfc2V0KCZ3dmlmLT53ZGV2LT5zY2FuX2luX3Byb2dyZXNzLCAwKTsNCiAJCWNhbmNl bF9kZWxheWVkX3dvcmtfc3luYygmd3ZpZi0+c2Nhbi50aW1lb3V0KTsNCisJCXdmeF9zY2FuX3Jl c3RhcnRfZGVsYXllZCh3dmlmKTsNCiAJfQ0KIAlyZXR1cm4gcmV0Ow0KIH0NCkBAIC01Niw2ICs3 Miw5IEBAIGludCB3ZnhfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCiAJaWYgKCF3 dmlmKQ0KIAkJcmV0dXJuIC1FSU5WQUw7DQogDQorCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RB VEVfQVApDQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQorDQogCWlmIChyZXEtPm5fc3NpZHMgPT0g MSAmJiAhcmVxLT5zc2lkc1swXS5zc2lkX2xlbikNCiAJCXJlcS0+bl9zc2lkcyA9IDA7DQogDQpA QCAtMTIxLDExICsxNDAsMjMgQEAgdm9pZCB3Znhfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykNCiAJCS5zY2FuX3JlcS5zY2FuX3R5cGUudHlwZSA9IDAsICAgIC8qIEZvcmVncm91 bmQgKi8NCiAJfTsNCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpmaXJzdDsNCisJYm9vbCBm aXJzdF9ydW4gPSAod3ZpZi0+c2Nhbi5iZWdpbiA9PSB3dmlmLT5zY2FuLmN1cnIgJiYNCisJCQkg IHd2aWYtPnNjYW4uYmVnaW4gIT0gd3ZpZi0+c2Nhbi5lbmQpOw0KIAlpbnQgaTsNCiANCiAJZG93 bigmd3ZpZi0+c2Nhbi5sb2NrKTsNCiAJbXV0ZXhfbG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRl eCk7DQogDQorCWlmIChmaXJzdF9ydW4pIHsNCisJCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RB VEVfU1RBICYmDQorCQkgICAgISh3dmlmLT5wb3dlcnNhdmVfbW9kZS5wbV9tb2RlLmVudGVyX3Bz bSkpIHsNCisJCQlzdHJ1Y3QgaGlmX3JlcV9zZXRfcG1fbW9kZSBwbSA9IHd2aWYtPnBvd2Vyc2F2 ZV9tb2RlOw0KKw0KKwkJCXBtLnBtX21vZGUuZW50ZXJfcHNtID0gMTsNCisJCQl3Znhfc2V0X3Bt KHd2aWYsICZwbSk7DQorCQl9DQorCX0NCisNCiAJaWYgKCF3dmlmLT5zY2FuLnJlcSB8fCB3dmlm LT5zY2FuLmN1cnIgPT0gd3ZpZi0+c2Nhbi5lbmQpIHsNCiAJCWlmICh3dmlmLT5zY2FuLm91dHB1 dF9wb3dlciAhPSB3dmlmLT53ZGV2LT5vdXRwdXRfcG93ZXIpDQogCQkJaGlmX3NldF9vdXRwdXRf cG93ZXIod3ZpZiwgd3ZpZi0+d2Rldi0+b3V0cHV0X3Bvd2VyICogMTApOw0KQEAgLTEzOCwxMCAr MTY5LDE0IEBAIHZvaWQgd2Z4X3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQog CQkJZGV2X2RiZyh3dmlmLT53ZGV2LT5kZXYsICJzY2FuIGNhbmNlbGVkXG4iKTsNCiANCiAJCXd2 aWYtPnNjYW4ucmVxID0gTlVMTDsNCisJCXdmeF9zY2FuX3Jlc3RhcnRfZGVsYXllZCh3dmlmKTsN CiAJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQogCQltdXRleF91bmxvY2soJnd2aWYtPndk ZXYtPmNvbmZfbXV0ZXgpOw0KIAkJX19pZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWRfY29tcGF0KHd2 aWYtPndkZXYtPmh3LCB3dmlmLT5zY2FuLnN0YXR1cyA/IDEgOiAwKTsNCiAJCXVwKCZ3dmlmLT5z Y2FuLmxvY2spOw0KKwkJaWYgKHd2aWYtPnN0YXRlID09IFdGWF9TVEFURV9TVEEgJiYNCisJCSAg ICAhKHd2aWYtPnBvd2Vyc2F2ZV9tb2RlLnBtX21vZGUuZW50ZXJfcHNtKSkNCisJCQl3Znhfc2V0 X3BtKHd2aWYsICZ3dmlmLT5wb3dlcnNhdmVfbW9kZSk7DQogCQlyZXR1cm47DQogCX0NCiAJZmly c3QgPSAqd3ZpZi0+c2Nhbi5jdXJyOw0KQEAgLTE3MCw2ICsyMDUsMTEgQEAgdm9pZCB3Znhfc2Nh bl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCiAJc2Nhbi5zc2lkcyA9ICZ3dmlmLT5z Y2FuLnNzaWRzWzBdOw0KIAlzY2FuLnNjYW5fcmVxLm51bV9vZl9jaGFubmVscyA9IGl0IC0gd3Zp Zi0+c2Nhbi5jdXJyOw0KIAlzY2FuLnNjYW5fcmVxLnByb2JlX2RlbGF5ID0gMTAwOw0KKwkvLyBG SVhNRTogQ2hlY2sgaWYgRlcgY2FuIGRvIGFjdGl2ZSBzY2FuIHdoaWxlIGpvaW5lZC4NCisJaWYg KHd2aWYtPnN0YXRlID09IFdGWF9TVEFURV9TVEEpIHsNCisJCXNjYW4uc2Nhbl9yZXEuc2Nhbl90 eXBlLnR5cGUgPSAxOw0KKwkJc2Nhbi5zY2FuX3JlcS5zY2FuX2ZsYWdzLmZiZyA9IDE7DQorCX0N CiANCiAJc2Nhbi5jaCA9IGtjYWxsb2Moc2Nhbi5zY2FuX3JlcS5udW1fb2ZfY2hhbm5lbHMsIHNp emVvZih1OCksIEdGUF9LRVJORUwpOw0KIA0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93 Zngvc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jDQppbmRleCAyZTcwOWI4YTNiZjQu LjI4NTVkMTRhNzA5YyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMNCisr KyBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMNCkBAIC05LDExICs5LDE0OCBAQA0KIA0KICNp bmNsdWRlICJzdGEuaCINCiAjaW5jbHVkZSAid2Z4LmgiDQorI2luY2x1ZGUgImZ3aW8uaCINCisj aW5jbHVkZSAiYmguaCINCiAjaW5jbHVkZSAia2V5LmgiDQogI2luY2x1ZGUgInNjYW4uaCINCisj aW5jbHVkZSAiZGVidWcuaCINCisjaW5jbHVkZSAiaGlmX3R4LmgiDQogI2luY2x1ZGUgImhpZl90 eF9taWIuaCINCiANCiAjZGVmaW5lIFRYT1BfVU5JVCAzMg0KKyNkZWZpbmUgSElGX01BWF9BUlBf SVBfQUREUlRBQkxFX0VOVFJJRVMgMg0KKw0KK3N0YXRpYyB1MzIgd2Z4X3JhdGVfbWFza190b19o dyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIHJhdGVzKQ0KK3sNCisJaW50IGk7DQorCXUzMiBy ZXQgPSAwOw0KKwkvLyBXRnggb25seSBzdXBwb3J0IDJHSHoNCisJc3RydWN0IGllZWU4MDIxMV9z dXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSB3ZGV2LT5ody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFO RF8yR0haXTsNCisNCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsN CisJCWlmIChyYXRlcyAmIEJJVChpKSkgew0KKwkJCWlmIChpID49IHNiYW5kLT5uX2JpdHJhdGVz KQ0KKwkJCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBiYXNpYyByYXRlXG4iKTsN CisJCQllbHNlDQorCQkJCXJldCB8PSBCSVQoc2JhbmQtPmJpdHJhdGVzW2ldLmh3X3ZhbHVlKTsN CisJCX0NCisJfQ0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgdm9pZCBfX3dmeF9mcmVl X2V2ZW50X3F1ZXVlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpDQorew0KKwlzdHJ1Y3Qgd2Z4X2hp Zl9ldmVudCAqZXZlbnQsICp0bXA7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVu dCwgdG1wLCBsaXN0LCBsaW5rKSB7DQorCQlsaXN0X2RlbCgmZXZlbnQtPmxpbmspOw0KKwkJa2Zy ZWUoZXZlbnQpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHdmeF9mcmVlX2V2ZW50X3F1ZXVl KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQ0KK3sNCisJTElTVF9IRUFEKGxpc3QpOw0KKw0KKwlzcGlu X2xvY2soJnd2aWYtPmV2ZW50X3F1ZXVlX2xvY2spOw0KKwlsaXN0X3NwbGljZV9pbml0KCZ3dmlm LT5ldmVudF9xdWV1ZSwgJmxpc3QpOw0KKwlzcGluX3VubG9jaygmd3ZpZi0+ZXZlbnRfcXVldWVf bG9jayk7DQorDQorCV9fd2Z4X2ZyZWVfZXZlbnRfcXVldWUoJmxpc3QpOw0KK30NCisNCit2b2lk IHdmeF9jcW1fYnNzbG9zc19zbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGluaXQsIGludCBn b29kLCBpbnQgYmFkKQ0KK3sNCisJaW50IHR4ID0gMDsNCisNCisJbXV0ZXhfbG9jaygmd3ZpZi0+ YnNzX2xvc3NfbG9jayk7DQorCXd2aWYtPmRlbGF5ZWRfbGlua19sb3NzID0gMDsNCisJY2FuY2Vs X3dvcmtfc3luYygmd3ZpZi0+YnNzX3BhcmFtc193b3JrKTsNCisNCisJLyogSWYgd2UgaGF2ZSBh IHBlbmRpbmcgdW5qb2luICovDQorCWlmICh3dmlmLT5kZWxheWVkX3Vuam9pbikNCisJCWdvdG8g ZW5kOw0KKw0KKwlpZiAoaW5pdCkgew0KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ3dmlmLT5i c3NfbG9zc193b3JrLCBIWik7DQorCQl3dmlmLT5ic3NfbG9zc19zdGF0ZSA9IDA7DQorDQorCQlp ZiAoIWF0b21pY19yZWFkKCZ3dmlmLT53ZGV2LT50eF9sb2NrKSkNCisJCQl0eCA9IDE7DQorCX0g ZWxzZSBpZiAoZ29vZCkgew0KKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3dmlmLT5ic3Nf bG9zc193b3JrKTsNCisJCXd2aWYtPmJzc19sb3NzX3N0YXRlID0gMDsNCisJCXNjaGVkdWxlX3dv cmsoJnd2aWYtPmJzc19wYXJhbXNfd29yayk7DQorCX0gZWxzZSBpZiAoYmFkKSB7DQorCQkvKiBG SVhNRSBTaG91bGQgd2UganVzdCBrZWVwIGdvaW5nIHVudGlsIHdlIHRpbWUgb3V0PyAqLw0KKwkJ aWYgKHd2aWYtPmJzc19sb3NzX3N0YXRlIDwgMykNCisJCQl0eCA9IDE7DQorCX0gZWxzZSB7DQor CQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnd2aWYtPmJzc19sb3NzX3dvcmspOw0KKwkJd3Zp Zi0+YnNzX2xvc3Nfc3RhdGUgPSAwOw0KKwl9DQorDQorCS8qIFNwaXQgb3V0IGEgTlVMTCBwYWNr ZXQgdG8gb3VyIEFQIGlmIG5lY2Vzc2FyeSAqLw0KKwkvLyBGSVhNRTogY2FsbCBpZWVlODAyMTFf YmVhY29uX2xvc3MvaWVlZTgwMjExX2Nvbm5lY3Rpb25fbG9zcyBpbnN0ZWFkDQorCWlmICh0eCkg ew0KKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisNCisJCXd2aWYtPmJzc19sb3NzX3N0YXRlKys7 DQorDQorCQlza2IgPSBpZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KHd2aWYtPndkZXYtPmh3LCB3dmlm LT52aWYsIGZhbHNlKTsNCisJCWlmICghc2tiKQ0KKwkJCWdvdG8gZW5kOw0KKwkJbWVtc2V0KElF RUU4MDIxMV9TS0JfQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJRUVFODAyMTFfU0tCX0NCKHNrYikpKTsN CisJCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+Y29udHJvbC52aWYgPSB3dmlmLT52aWY7DQorCQlJ RUVFODAyMTFfU0tCX0NCKHNrYiktPmRyaXZlcl9yYXRlc1swXS5pZHggPSAwOw0KKwkJSUVFRTgw MjExX1NLQl9DQihza2IpLT5kcml2ZXJfcmF0ZXNbMF0uY291bnQgPSAxOw0KKwkJSUVFRTgwMjEx X1NLQl9DQihza2IpLT5kcml2ZXJfcmF0ZXNbMV0uaWR4ID0gLTE7DQorCQl3ZnhfdHgod3ZpZi0+ d2Rldi0+aHcsIE5VTEwsIHNrYik7DQorCX0NCitlbmQ6DQorCW11dGV4X3VubG9jaygmd3ZpZi0+ YnNzX2xvc3NfbG9jayk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgd2Z4X3NldF91YXBzZF9wYXJhbShz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCQkgICBjb25zdCBzdHJ1Y3Qgd2Z4X2VkY2FfcGFyYW1z ICphcmcpDQorew0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBIZXJlJ3MgdGhlIG1hcHBpbmcgQUMgW3F1 ZXVlLCBiaXRdDQorCSAqICBWTyBbMCwzXSwgVkkgWzEsIDJdLCBCRSBbMiwgMV0sIEJLIFszLCAw XQ0KKwkgKi8NCisNCisJaWYgKGFyZy0+dWFwc2RfZW5hYmxlW0lFRUU4MDIxMV9BQ19WT10pDQor CQl3dmlmLT51YXBzZF9pbmZvLnRyaWdfdm9pY2UgPSAxOw0KKwllbHNlDQorCQl3dmlmLT51YXBz ZF9pbmZvLnRyaWdfdm9pY2UgPSAwOw0KKw0KKwlpZiAoYXJnLT51YXBzZF9lbmFibGVbSUVFRTgw MjExX0FDX1ZJXSkNCisJCXd2aWYtPnVhcHNkX2luZm8udHJpZ192aWRlbyA9IDE7DQorCWVsc2UN CisJCXd2aWYtPnVhcHNkX2luZm8udHJpZ192aWRlbyA9IDA7DQorDQorCWlmIChhcmctPnVhcHNk X2VuYWJsZVtJRUVFODAyMTFfQUNfQkVdKQ0KKwkJd3ZpZi0+dWFwc2RfaW5mby50cmlnX2JlID0g MTsNCisJZWxzZQ0KKwkJd3ZpZi0+dWFwc2RfaW5mby50cmlnX2JlID0gMDsNCisNCisJaWYgKGFy Zy0+dWFwc2RfZW5hYmxlW0lFRUU4MDIxMV9BQ19CS10pDQorCQl3dmlmLT51YXBzZF9pbmZvLnRy aWdfYmNrZ3JuZCA9IDE7DQorCWVsc2UNCisJCXd2aWYtPnVhcHNkX2luZm8udHJpZ19iY2tncm5k ID0gMDsNCisNCisJLyogQ3VycmVudGx5IHBzZXVkbyBVLUFQU0Qgb3BlcmF0aW9uIGlzIG5vdCBz dXBwb3J0ZWQsIHNvIHNldHRpbmcNCisJICogTWluQXV0b1RyaWdnZXJJbnRlcnZhbCwgTWF4QXV0 b1RyaWdnZXJJbnRlcnZhbCBhbmQNCisJICogQXV0b1RyaWdnZXJTdGVwIHRvIDANCisJICovDQor CXd2aWYtPnVhcHNkX2luZm8ubWluX2F1dG9fdHJpZ2dlcl9pbnRlcnZhbCA9IDA7DQorCXd2aWYt PnVhcHNkX2luZm8ubWF4X2F1dG9fdHJpZ2dlcl9pbnRlcnZhbCA9IDA7DQorCXd2aWYtPnVhcHNk X2luZm8uYXV0b190cmlnZ2VyX3N0ZXAgPSAwOw0KKw0KKwlyZXQgPSBoaWZfc2V0X3VhcHNkX2lu Zm8od3ZpZiwgJnd2aWYtPnVhcHNkX2luZm8pOw0KKwlyZXR1cm4gcmV0Ow0KK30NCiANCiBpbnQg d2Z4X2Z3ZF9wcm9iZV9yZXEoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKQ0KIHsN CkBAIC0yMiw2ICsxNTksMTA0NCBAQCBpbnQgd2Z4X2Z3ZF9wcm9iZV9yZXEoc3RydWN0IHdmeF92 aWYgKnd2aWYsIGJvb2wgZW5hYmxlKQ0KIAkJCQkgd3ZpZi0+ZndkX3Byb2JlX3JlcSk7DQogfQ0K IA0KK3N0YXRpYyBpbnQgd2Z4X3NldF9tY2FzdF9maWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYs DQorCQkJCSAgICBzdHJ1Y3Qgd2Z4X2dycF9hZGRyX3RhYmxlICpmcCkNCit7DQorCWludCBpLCBy ZXQ7DQorCXN0cnVjdCBoaWZfbWliX2NvbmZpZ19kYXRhX2ZpbHRlciBjb25maWcgPSB7IH07DQor CXN0cnVjdCBoaWZfbWliX3NldF9kYXRhX2ZpbHRlcmluZyBmaWx0ZXJfZGF0YSA9IHsgfTsNCisJ c3RydWN0IGhpZl9taWJfbWFjX2FkZHJfZGF0YV9mcmFtZV9jb25kaXRpb24gZmlsdGVyX2FkZHJf dmFsID0geyB9Ow0KKwlzdHJ1Y3QgaGlmX21pYl91Y19tY19iY19kYXRhX2ZyYW1lX2NvbmRpdGlv biBmaWx0ZXJfYWRkcl90eXBlID0geyB9Ow0KKw0KKwkvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBm b3IgZmlsdGVycw0KKwlyZXR1cm4gaGlmX3NldF9kYXRhX2ZpbHRlcmluZyh3dmlmLCAmZmlsdGVy X2RhdGEpOw0KKw0KKwlpZiAoIWZwLT5lbmFibGUpIHsNCisJCWZpbHRlcl9kYXRhLmVuYWJsZSA9 IDA7DQorCQlyZXR1cm4gaGlmX3NldF9kYXRhX2ZpbHRlcmluZyh3dmlmLCAmZmlsdGVyX2RhdGEp Ow0KKwl9DQorDQorCS8vIEExIEFkZHJlc3MgbWF0Y2ggb24gbGlzdA0KKwlmb3IgKGkgPSAwOyBp IDwgZnAtPm51bV9hZGRyZXNzZXM7IGkrKykgew0KKwkJZmlsdGVyX2FkZHJfdmFsLmNvbmRpdGlv bl9pZHggPSBpOw0KKwkJZmlsdGVyX2FkZHJfdmFsLmFkZHJlc3NfdHlwZSA9IEhJRl9NQUNfQURE Ul9BMTsNCisJCWV0aGVyX2FkZHJfY29weShmaWx0ZXJfYWRkcl92YWwubWFjX2FkZHJlc3MsIGZw LT5hZGRyZXNzX2xpc3RbaV0pOw0KKwkJcmV0ID0gaGlmX3NldF9tYWNfYWRkcl9jb25kaXRpb24o d3ZpZiwgJmZpbHRlcl9hZGRyX3ZhbCk7DQorCQlpZiAocmV0KQ0KKwkJCXJldHVybiByZXQ7DQor CQljb25maWcubWFjX2NvbmQgfD0gMSA8PCBpOw0KKwl9DQorDQorCS8vIEFjY2VwdCB1bmljYXN0 IGFuZCBicm9hZGNhc3QNCisJZmlsdGVyX2FkZHJfdHlwZS5jb25kaXRpb25faWR4ID0gMDsNCisJ ZmlsdGVyX2FkZHJfdHlwZS5wYXJhbS5iaXRzLnR5cGVfdW5pY2FzdCA9IDE7DQorCWZpbHRlcl9h ZGRyX3R5cGUucGFyYW0uYml0cy50eXBlX2Jyb2FkY2FzdCA9IDE7DQorCXJldCA9IGhpZl9zZXRf dWNfbWNfYmNfY29uZGl0aW9uKHd2aWYsICZmaWx0ZXJfYWRkcl90eXBlKTsNCisJaWYgKHJldCkN CisJCXJldHVybiByZXQ7DQorDQorCWNvbmZpZy51Y19tY19iY19jb25kID0gMTsNCisJY29uZmln LmZpbHRlcl9pZHggPSAwOyAvLyBUT0RPICNkZWZpbmUgTVVMVElDQVNUX0ZJTFRFUklORyAwDQor CWNvbmZpZy5lbmFibGUgPSAxOw0KKwlyZXQgPSBoaWZfc2V0X2NvbmZpZ19kYXRhX2ZpbHRlcih3 dmlmLCAmY29uZmlnKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCS8vIGRpc2Nh cmQgYWxsIGRhdGEgZnJhbWVzIGV4Y2VwdCBtYXRjaCBmaWx0ZXINCisJZmlsdGVyX2RhdGEuZW5h YmxlID0gMTsNCisJZmlsdGVyX2RhdGEuZGVmYXVsdF9maWx0ZXIgPSAxOyAvLyBkaXNjYXJkIGFs bA0KKwlyZXQgPSBoaWZfc2V0X2RhdGFfZmlsdGVyaW5nKHd2aWYsICZmaWx0ZXJfZGF0YSk7DQor DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3ZvaWQgd2Z4X3VwZGF0ZV9maWx0ZXJpbmcoc3RydWN0 IHdmeF92aWYgKnd2aWYpDQorew0KKwlpbnQgcmV0Ow0KKwlib29sIGlzX3N0YSA9IHd2aWYtPnZp ZiAmJiBOTDgwMjExX0lGVFlQRV9TVEFUSU9OID09IHd2aWYtPnZpZi0+dHlwZTsNCisJYm9vbCBm aWx0ZXJfYnNzaWQgPSB3dmlmLT5maWx0ZXJfYnNzaWQ7DQorCWJvb2wgZndkX3Byb2JlX3JlcSA9 IHd2aWYtPmZ3ZF9wcm9iZV9yZXE7DQorCXN0cnVjdCBoaWZfbWliX2Jjbl9maWx0ZXJfZW5hYmxl IGJmX2N0cmw7DQorCXN0cnVjdCBoaWZfbWliX2Jjbl9maWx0ZXJfdGFibGUgKmJmX3RibDsNCisJ c3RydWN0IGhpZl9pZV90YWJsZV9lbnRyeSBpZV90YmxbXSA9IHsNCisJCXsNCisJCQkuaWVfaWQg ICAgICAgID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLA0KKwkJCS5oYXNfY2hhbmdlZCAgPSAx LA0KKwkJCS5ub19sb25nZXIgICAgPSAxLA0KKwkJCS5oYXNfYXBwZWFyZWQgPSAxLA0KKwkJCS5v dWkgICAgICAgICA9IHsgMHg1MCwgMHg2RiwgMHg5QX0sDQorCQl9LCB7DQorCQkJLmllX2lkICAg ICAgICA9IFdMQU5fRUlEX0hUX09QRVJBVElPTiwNCisJCQkuaGFzX2NoYW5nZWQgID0gMSwNCisJ CQkubm9fbG9uZ2VyICAgID0gMSwNCisJCQkuaGFzX2FwcGVhcmVkID0gMSwNCisJCX0sIHsNCisJ CQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURfRVJQX0lORk8sDQorCQkJLmhhc19jaGFuZ2VkICA9 IDEsDQorCQkJLm5vX2xvbmdlciAgICA9IDEsDQorCQkJLmhhc19hcHBlYXJlZCA9IDEsDQorCQl9 DQorCX07DQorDQorCWlmICh3dmlmLT5zdGF0ZSA9PSBXRlhfU1RBVEVfUEFTU0lWRSkNCisJCXJl dHVybjsNCisNCisJYmZfdGJsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZl9taWJfYmNuX2Zp bHRlcl90YWJsZSkgKyBzaXplb2YoaWVfdGJsKSwgR0ZQX0tFUk5FTCk7DQorCW1lbWNweShiZl90 YmwtPmllX3RhYmxlLCBpZV90YmwsIHNpemVvZihpZV90YmwpKTsNCisJaWYgKHd2aWYtPmRpc2Fi bGVfYmVhY29uX2ZpbHRlcikgew0KKwkJYmZfY3RybC5lbmFibGUgPSAwOw0KKwkJYmZfY3RybC5i Y25fY291bnQgPSAxOw0KKwkJYmZfdGJsLT5udW1fb2ZfaW5mb19lbG10cyA9IDA7DQorCX0gZWxz ZSBpZiAoIWlzX3N0YSkgew0KKwkJYmZfY3RybC5lbmFibGUgPSBISUZfQkVBQ09OX0ZJTFRFUl9F TkFCTEUgfCBISUZfQkVBQ09OX0ZJTFRFUl9BVVRPX0VSUDsNCisJCWJmX2N0cmwuYmNuX2NvdW50 ID0gMDsNCisJCWJmX3RibC0+bnVtX29mX2luZm9fZWxtdHMgPSAyOw0KKwl9IGVsc2Ugew0KKwkJ YmZfY3RybC5lbmFibGUgPSBISUZfQkVBQ09OX0ZJTFRFUl9FTkFCTEU7DQorCQliZl9jdHJsLmJj bl9jb3VudCA9IDA7DQorCQliZl90YmwtPm51bV9vZl9pbmZvX2VsbXRzID0gMzsNCisJfQ0KKw0K KwlyZXQgPSBoaWZfc2V0X3J4X2ZpbHRlcih3dmlmLCBmaWx0ZXJfYnNzaWQsIGZ3ZF9wcm9iZV9y ZXEpOw0KKwlpZiAoIXJldCkNCisJCXJldCA9IGhpZl9zZXRfYmVhY29uX2ZpbHRlcl90YWJsZSh3 dmlmLCBiZl90YmwpOw0KKwlpZiAoIXJldCkNCisJCXJldCA9IGhpZl9iZWFjb25fZmlsdGVyX2Nv bnRyb2wod3ZpZiwgYmZfY3RybC5lbmFibGUsIGJmX2N0cmwuYmNuX2NvdW50KTsNCisJaWYgKCFy ZXQpDQorCQlyZXQgPSB3Znhfc2V0X21jYXN0X2ZpbHRlcih3dmlmLCAmd3ZpZi0+bWNhc3RfZmls dGVyKTsNCisJaWYgKHJldCkNCisJCWRldl9lcnIod3ZpZi0+d2Rldi0+ZGV2LCAidXBkYXRlIGZp bHRlcmluZyBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KKwlrZnJlZShiZl90YmwpOw0KK30NCisNCit2 b2lkIHdmeF91cGRhdGVfZmlsdGVyaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0K K3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdm eF92aWYsIHVwZGF0ZV9maWx0ZXJpbmdfd29yayk7DQorDQorCXdmeF91cGRhdGVfZmlsdGVyaW5n KHd2aWYpOw0KK30NCisNCit1NjQgd2Z4X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWNfbGlzdCkNCit7DQorCWlu dCBpOw0KKwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOw0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9IE5VTEw7DQorCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQorCWludCBjb3Vu dCA9IG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobWNfbGlzdCk7DQorDQorCXdoaWxlICgod3Zp ZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgew0KKwkJbWVtc2V0KCZ3dmlm LT5tY2FzdF9maWx0ZXIsIDB4MDAsIHNpemVvZih3dmlmLT5tY2FzdF9maWx0ZXIpKTsNCisJCWlm ICghY291bnQgfHwgY291bnQgPiBBUlJBWV9TSVpFKHd2aWYtPm1jYXN0X2ZpbHRlci5hZGRyZXNz X2xpc3QpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJaSA9IDA7DQorCQluZXRkZXZfaHdfYWRkcl9s aXN0X2Zvcl9lYWNoKGhhLCBtY19saXN0KSB7DQorCQkJZXRoZXJfYWRkcl9jb3B5KHd2aWYtPm1j YXN0X2ZpbHRlci5hZGRyZXNzX2xpc3RbaV0sIGhhLT5hZGRyKTsNCisJCQlpKys7DQorCQl9DQor CQl3dmlmLT5tY2FzdF9maWx0ZXIuZW5hYmxlID0gMTsNCisJCXd2aWYtPm1jYXN0X2ZpbHRlci5u dW1fYWRkcmVzc2VzID0gY291bnQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQg d2Z4X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJICAgICB1 bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywNCisJCQkgICAgIHVuc2lnbmVkIGludCAqdG90YWxf ZmxhZ3MsDQorCQkJICAgICB1NjQgdW51c2VkKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYg PSBOVUxMOw0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Ow0KKw0KKwkqdG90YWxf ZmxhZ3MgJj0gRklGX09USEVSX0JTUyB8IEZJRl9GQ1NGQUlMIHwgRklGX1BST0JFX1JFUTsNCisN CisJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7DQor CQlkb3duKCZ3dmlmLT5zY2FuLmxvY2spOw0KKwkJd3ZpZi0+ZmlsdGVyX2Jzc2lkID0gKCp0b3Rh bF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST0JFX1JFUSkpID8gMCA6IDE7DQorCQl3 dmlmLT5kaXNhYmxlX2JlYWNvbl9maWx0ZXIgPSAhKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9CRV9S RVEpOw0KKwkJd2Z4X2Z3ZF9wcm9iZV9yZXEod3ZpZiwgdHJ1ZSk7DQorCQl3ZnhfdXBkYXRlX2Zp bHRlcmluZyh3dmlmKTsNCisJCXVwKCZ3dmlmLT5zY2FuLmxvY2spOw0KKwl9DQorfQ0KKw0KK2lu dCB3ZnhfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwNCisJCSAgIHUxNiBxdWV1ZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1 ZV9wYXJhbXMgKnBhcmFtcykNCit7DQorCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7 DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3By aXY7DQorCWludCByZXQgPSAwOw0KKwkvKiBUbyBwcmV2ZW50IHJlLWFwcGx5aW5nIFBNIHJlcXVl c3QgT0lEIGFnYWluIGFuZCBhZ2FpbiovDQorCXUxNiBvbGRfdWFwc2RfZmxhZ3MsIG5ld191YXBz ZF9mbGFnczsNCisJc3RydWN0IGhpZl9yZXFfZWRjYV9xdWV1ZV9wYXJhbXMgKmVkY2E7DQorDQor CW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOw0KKw0KKwlpZiAocXVldWUgPCBody0+cXVl dWVzKSB7DQorCQlvbGRfdWFwc2RfZmxhZ3MgPSAqKCh1MTYgKikgJnd2aWYtPnVhcHNkX2luZm8p Ow0KKwkJZWRjYSA9ICZ3dmlmLT5lZGNhLnBhcmFtc1txdWV1ZV07DQorDQorCQl3dmlmLT5lZGNh LnVhcHNkX2VuYWJsZVtxdWV1ZV0gPSBwYXJhbXMtPnVhcHNkOw0KKwkJZWRjYS0+YWlmc24gPSBw YXJhbXMtPmFpZnM7DQorCQllZGNhLT5jd19taW4gPSBwYXJhbXMtPmN3X21pbjsNCisJCWVkY2Et PmN3X21heCA9IHBhcmFtcy0+Y3dfbWF4Ow0KKwkJZWRjYS0+dHhfb3BfbGltaXQgPSBwYXJhbXMt PnR4b3AgKiBUWE9QX1VOSVQ7DQorCQllZGNhLT5hbGxvd2VkX21lZGl1bV90aW1lID0gMDsNCisJ CXJldCA9IGhpZl9zZXRfZWRjYV9xdWV1ZV9wYXJhbXMod3ZpZiwgZWRjYSk7DQorCQlpZiAocmV0 KSB7DQorCQkJcmV0ID0gLUVJTlZBTDsNCisJCQlnb3RvIG91dDsNCisJCX0NCisNCisJCWlmICh3 dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgew0KKwkJCXJldCA9IHdm eF9zZXRfdWFwc2RfcGFyYW0od3ZpZiwgJnd2aWYtPmVkY2EpOw0KKwkJCW5ld191YXBzZF9mbGFn cyA9ICooKHUxNiAqKSAmd3ZpZi0+dWFwc2RfaW5mbyk7DQorCQkJaWYgKCFyZXQgJiYgd3ZpZi0+ c2V0YnNzcGFyYW1zX2RvbmUgJiYNCisJCQkgICAgd3ZpZi0+c3RhdGUgPT0gV0ZYX1NUQVRFX1NU QSAmJg0KKwkJCSAgICBvbGRfdWFwc2RfZmxhZ3MgIT0gbmV3X3VhcHNkX2ZsYWdzKQ0KKwkJCQly ZXQgPSB3Znhfc2V0X3BtKHd2aWYsICZ3dmlmLT5wb3dlcnNhdmVfbW9kZSk7DQorCQl9DQorCX0g ZWxzZSB7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwl9DQorDQorb3V0Og0KKwltdXRleF91bmxvY2so JndkZXYtPmNvbmZfbXV0ZXgpOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgd2Z4X3NldF9w bShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3RydWN0IGhpZl9yZXFfc2V0X3BtX21vZGUg KmFyZykNCit7DQorCXN0cnVjdCBoaWZfcmVxX3NldF9wbV9tb2RlIHBtID0gKmFyZzsNCisJdTE2 IHVhcHNkX2ZsYWdzOw0KKwlpbnQgcmV0Ow0KKw0KKwlpZiAod3ZpZi0+c3RhdGUgIT0gV0ZYX1NU QVRFX1NUQSB8fCAhd3ZpZi0+YnNzX3BhcmFtcy5haWQpDQorCQlyZXR1cm4gMDsNCisNCisJbWVt Y3B5KCZ1YXBzZF9mbGFncywgJnd2aWYtPnVhcHNkX2luZm8sIHNpemVvZih1YXBzZF9mbGFncykp Ow0KKw0KKwlpZiAodWFwc2RfZmxhZ3MgIT0gMCkNCisJCXBtLnBtX21vZGUuZmFzdF9wc20gPSAw Ow0KKw0KKwkvLyBLZXJuZWwgZGlzYWJsZSBQb3dlclNhdmUgd2hlbiBtdWx0aXBsZSB2aWZzIGFy ZSBpbiB1c2UuIEluIGNvbnRyYXJ5LA0KKwkvLyBpdCBpcyBhYnNvbHV0bHkgbmVjZXNzYXJ5IHRv IGVuYWJsZSBQb3dlclNhdmUgZm9yIFdGMjAwDQorCWlmICh3dmlmX2NvdW50KHd2aWYtPndkZXYp ID4gMSkgew0KKwkJcG0ucG1fbW9kZS5lbnRlcl9wc20gPSAxOw0KKwkJcG0ucG1fbW9kZS5mYXN0 X3BzbSA9IDA7DQorCX0NCisNCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnd2 aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlLCBtc2Vjc190b19qaWZmaWVzKDMwMCkpKQ0KKwkJZGV2 X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LCAidGltZW91dCB3aGlsZSB3YWl0aW5nIG9mIHNldF9wbV9t b2RlX2NvbXBsZXRlXG4iKTsNCisJcmV0ID0gaGlmX3NldF9wbSh3dmlmLCAmcG0pOw0KKwkvLyBG SVhNRTogd2h5ID8NCisJaWYgKC1FVElNRURPVVQgPT0gd3ZpZi0+c2Nhbi5zdGF0dXMpDQorCQl3 dmlmLT5zY2FuLnN0YXR1cyA9IDE7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK2ludCB3Znhfc2V0 X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkNCit7DQor CXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlm ID0gTlVMTDsNCisNCisJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAh PSBOVUxMKQ0KKwkJaGlmX3J0c190aHJlc2hvbGQod3ZpZiwgdmFsdWUpOw0KKwlyZXR1cm4gMDsN Cit9DQorDQorLyogSWYgc3VjY2Vzc2Z1bCwgTE9DS1MgdGhlIFRYIHF1ZXVlISAqLw0KK3N0YXRp YyBpbnQgX193ZnhfZmx1c2goc3RydWN0IHdmeF9kZXYgKndkZXYsIGJvb2wgZHJvcCkNCit7DQor CWludCByZXQ7DQorDQorCWZvciAoOzspIHsNCisJCWlmIChkcm9wKSB7DQorCQkJd2Z4X3R4X3F1 ZXVlc19jbGVhcih3ZGV2KTsNCisJCX0gZWxzZSB7DQorCQkJcmV0ID0gd2FpdF9ldmVudF90aW1l b3V0KA0KKwkJCQl3ZGV2LT50eF9xdWV1ZV9zdGF0cy53YWl0X2xpbmtfaWRfZW1wdHksDQorCQkJ CXdmeF90eF9xdWV1ZXNfaXNfZW1wdHkod2RldiksDQorCQkJCTIgKiBIWik7DQorCQl9DQorDQor CQlpZiAoIWRyb3AgJiYgcmV0IDw9IDApIHsNCisJCQlyZXQgPSAtRVRJTUVET1VUOw0KKwkJCWJy ZWFrOw0KKwkJfQ0KKwkJcmV0ID0gMDsNCisNCisJCXdmeF90eF9sb2NrX2ZsdXNoKHdkZXYpOw0K KwkJaWYgKCF3ZnhfdHhfcXVldWVzX2lzX2VtcHR5KHdkZXYpKSB7DQorCQkJLyogSGlnaGx5IHVu bGlrZWx5OiBXU00gcmVxdWV1ZWQgZnJhbWVzLiAqLw0KKwkJCXdmeF90eF91bmxvY2sod2Rldik7 DQorCQkJY29udGludWU7DQorCQl9DQorCQlicmVhazsNCisJfQ0KKwlyZXR1cm4gcmV0Ow0KK30N CisNCit2b2lkIHdmeF9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwNCisJCSAgdTMyIHF1ZXVlcywgYm9vbCBkcm9wKQ0KK3sNCisJc3RydWN0 IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsNCisJc3RydWN0IHdmeF92aWYgKnd2aWY7DQorDQor CWlmICh2aWYpIHsNCisJCXd2aWYgPSAoc3RydWN0IHdmeF92aWYgKikgdmlmLT5kcnZfcHJpdjsN CisJCWlmICh3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikNCisJCQlk cm9wID0gdHJ1ZTsNCisJCWlmICh3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAg JiYgIXd2aWYtPmVuYWJsZV9iZWFjb24pDQorCQkJZHJvcCA9IHRydWU7DQorCX0NCisNCisJLy8g RklYTUU6IG9ubHkgZmx1c2ggcmVxdWVzdGVkIHZpZg0KKwlpZiAoIV9fd2Z4X2ZsdXNoKHdkZXYs IGRyb3ApKQ0KKwkJd2Z4X3R4X3VubG9jayh3ZGV2KTsNCit9DQorDQorLyogV1NNIGNhbGxiYWNr cyAqLw0KKw0KK3N0YXRpYyB2b2lkIHdmeF9ldmVudF9yZXBvcnRfcnNzaShzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgdWludDhfdCByYXdfcmNwaV9yc3NpKQ0KK3sNCisJLyogUlNTSTogc2lnbmVkIFE4 LjAsIFJDUEk6IHVuc2lnbmVkIFE3LjENCisJICogUlNTSSA9IFJDUEkgLyAyIC0gMTEwDQorCSAq Lw0KKwlpbnQgcmNwaV9yc3NpOw0KKwlpbnQgY3FtX2V2dDsNCisNCisJcmNwaV9yc3NpID0gcmF3 X3JjcGlfcnNzaSAvIDIgLSAxMTA7DQorCWlmIChyY3BpX3Jzc2kgPD0gd3ZpZi0+Y3FtX3Jzc2lf dGhvbGQpDQorCQljcW1fZXZ0ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfTE9X Ow0KKwllbHNlDQorCQljcW1fZXZ0ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRf SElHSDsNCisJaWVlZTgwMjExX2NxbV9yc3NpX25vdGlmeSh3dmlmLT52aWYsIGNxbV9ldnQsIHJj cGlfcnNzaSwgR0ZQX0tFUk5FTCk7DQorfQ0KKw0KK3ZvaWQgd2Z4X2V2ZW50X2hhbmRsZXJfd29y ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9 DQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIGV2ZW50X2hhbmRsZXJfd29y ayk7DQorCXN0cnVjdCB3ZnhfaGlmX2V2ZW50ICpldmVudDsNCisNCisJTElTVF9IRUFEKGxpc3Qp Ow0KKw0KKwlzcGluX2xvY2soJnd2aWYtPmV2ZW50X3F1ZXVlX2xvY2spOw0KKwlsaXN0X3NwbGlj ZV9pbml0KCZ3dmlmLT5ldmVudF9xdWV1ZSwgJmxpc3QpOw0KKwlzcGluX3VubG9jaygmd3ZpZi0+ ZXZlbnRfcXVldWVfbG9jayk7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZsaXN0 LCBsaW5rKSB7DQorCQlzd2l0Y2ggKGV2ZW50LT5ldnQuZXZlbnRfaWQpIHsNCisJCWNhc2UgSElG X0VWRU5UX0lORF9CU1NMT1NUOg0KKwkJCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPnVuam9pbl93 b3JrKTsNCisJCQlpZiAoIWRvd25fdHJ5bG9jaygmd3ZpZi0+c2Nhbi5sb2NrKSkgew0KKwkJCQl3 ZnhfY3FtX2Jzc2xvc3Nfc20od3ZpZiwgMSwgMCwgMCk7DQorCQkJCXVwKCZ3dmlmLT5zY2FuLmxv Y2spOw0KKwkJCX0gZWxzZSB7DQorCQkJCS8qIFNjYW4gaXMgaW4gcHJvZ3Jlc3MuIERlbGF5IHJl cG9ydGluZy4NCisJCQkJICogU2NhbiBjb21wbGV0ZSB3aWxsIHRyaWdnZXIgYnNzX2xvc3Nfd29y aw0KKwkJCQkgKi8NCisJCQkJd3ZpZi0+ZGVsYXllZF9saW5rX2xvc3MgPSAxOw0KKwkJCQkvKiBB bHNvIHN0YXJ0IGEgd2F0Y2hkb2cuICovDQorCQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmd3Zp Zi0+YnNzX2xvc3Nfd29yaywgNSAqIEhaKTsNCisJCQl9DQorCQkJYnJlYWs7DQorCQljYXNlIEhJ Rl9FVkVOVF9JTkRfQlNTUkVHQUlORUQ6DQorCQkJd2Z4X2NxbV9ic3Nsb3NzX3NtKHd2aWYsIDAs IDAsIDApOw0KKwkJCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPnVuam9pbl93b3JrKTsNCisJCQli cmVhazsNCisJCWNhc2UgSElGX0VWRU5UX0lORF9SQ1BJX1JTU0k6DQorCQkJd2Z4X2V2ZW50X3Jl cG9ydF9yc3NpKHd2aWYsIGV2ZW50LT5ldnQuZXZlbnRfZGF0YS5yY3BpX3Jzc2kpOw0KKwkJCWJy ZWFrOw0KKwkJY2FzZSBISUZfRVZFTlRfSU5EX1BTX01PREVfRVJST1I6DQorCQkJZGV2X3dhcm4o d3ZpZi0+d2Rldi0+ZGV2LCAiZXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBwb3dlciBzYXZlIHJlcXVl c3RcbiIpOw0KKwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlkZXZfd2Fybih3dmlmLT53ZGV2 LT5kZXYsICJ1bmhhbmRsZWQgZXZlbnQgaW5kaWNhdGlvbjogJS4yeFxuIiwgZXZlbnQtPmV2dC5l dmVudF9pZCk7DQorCQkJYnJlYWs7DQorCQl9DQorCX0NCisJX193ZnhfZnJlZV9ldmVudF9xdWV1 ZSgmbGlzdCk7DQorfQ0KKw0KK3ZvaWQgd2Z4X2Jzc19sb3NzX3dvcmsoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29y aywgc3RydWN0IHdmeF92aWYsIGJzc19sb3NzX3dvcmsud29yayk7DQorDQorCWllZWU4MDIxMV9j b25uZWN0aW9uX2xvc3Mod3ZpZi0+dmlmKTsNCit9DQorDQordm9pZCB3ZnhfYnNzX3BhcmFtc193 b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlm ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCBic3NfcGFyYW1zX3dvcmspOw0K Kw0KKwltdXRleF9sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsNCisJd3ZpZi0+YnNzX3Bh cmFtcy5ic3NfZmxhZ3MubG9zdF9jb3VudF9vbmx5ID0gMTsNCisJaGlmX3NldF9ic3NfcGFyYW1z KHd2aWYsICZ3dmlmLT5ic3NfcGFyYW1zKTsNCisJd3ZpZi0+YnNzX3BhcmFtcy5ic3NfZmxhZ3Mu bG9zdF9jb3VudF9vbmx5ID0gMDsNCisJbXV0ZXhfdW5sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211 dGV4KTsNCit9DQorDQordm9pZCB3Znhfc2V0X2JlYWNvbl93YWtldXBfcGVyaW9kX3dvcmsoc3Ry dWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250 YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIHNldF9iZWFjb25fd2FrZXVwX3BlcmlvZF93 b3JrKTsNCisNCisJaGlmX3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZCh3dmlmLCB3dmlmLT5kdGlt X3BlcmlvZCwgd3ZpZi0+ZHRpbV9wZXJpb2QpOw0KK30NCisNCitzdGF0aWMgdm9pZCB3ZnhfZG9f dW5qb2luKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQ0KK3sNCisJbXV0ZXhfbG9jaygmd3ZpZi0+d2Rl di0+Y29uZl9tdXRleCk7DQorDQorCWlmIChhdG9taWNfcmVhZCgmd3ZpZi0+c2Nhbi5pbl9wcm9n cmVzcykpIHsNCisJCWlmICh3dmlmLT5kZWxheWVkX3Vuam9pbikNCisJCQlkZXZfZGJnKHd2aWYt PndkZXYtPmRldiwgImRlbGF5ZWQgdW5qb2luIGlzIGFscmVhZHkgc2NoZWR1bGVkXG4iKTsNCisJ CWVsc2UNCisJCQl3dmlmLT5kZWxheWVkX3Vuam9pbiA9IHRydWU7DQorCQlnb3RvIGRvbmU7DQor CX0NCisNCisJd3ZpZi0+ZGVsYXllZF9saW5rX2xvc3MgPSBmYWxzZTsNCisNCisJaWYgKCF3dmlm LT5zdGF0ZSkNCisJCWdvdG8gZG9uZTsNCisNCisJaWYgKHd2aWYtPnN0YXRlID09IFdGWF9TVEFU RV9BUCkNCisJCWdvdG8gZG9uZTsNCisNCisJY2FuY2VsX3dvcmtfc3luYygmd3ZpZi0+dXBkYXRl X2ZpbHRlcmluZ193b3JrKTsNCisJY2FuY2VsX3dvcmtfc3luYygmd3ZpZi0+c2V0X2JlYWNvbl93 YWtldXBfcGVyaW9kX3dvcmspOw0KKwl3dmlmLT5zdGF0ZSA9IFdGWF9TVEFURV9QQVNTSVZFOw0K Kw0KKwkvKiBVbmpvaW4gaXMgYSByZXNldC4gKi8NCisJd2Z4X3R4X2ZsdXNoKHd2aWYtPndkZXYp Ow0KKwloaWZfa2VlcF9hbGl2ZV9wZXJpb2Qod3ZpZiwgMCk7DQorCWhpZl9yZXNldCh3dmlmLCBm YWxzZSk7DQorCWhpZl9zZXRfb3V0cHV0X3Bvd2VyKHd2aWYsIHd2aWYtPndkZXYtPm91dHB1dF9w b3dlciAqIDEwKTsNCisJd3ZpZi0+ZHRpbV9wZXJpb2QgPSAwOw0KKwloaWZfc2V0X21hY2FkZHIo d3ZpZiwgd3ZpZi0+dmlmLT5hZGRyKTsNCisJd2Z4X2ZyZWVfZXZlbnRfcXVldWUod3ZpZik7DQor CWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPmV2ZW50X2hhbmRsZXJfd29yayk7DQorCXdmeF9jcW1f YnNzbG9zc19zbSh3dmlmLCAwLCAwLCAwKTsNCisNCisJLyogRGlzYWJsZSBCbG9jayBBQ0tzICov DQorCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAwLCAwKTsNCisNCisJd3ZpZi0+ZGlz YWJsZV9iZWFjb25fZmlsdGVyID0gZmFsc2U7DQorCXdmeF91cGRhdGVfZmlsdGVyaW5nKHd2aWYp Ow0KKwltZW1zZXQoJnd2aWYtPmJzc19wYXJhbXMsIDAsIHNpemVvZih3dmlmLT5ic3NfcGFyYW1z KSk7DQorCXd2aWYtPnNldGJzc3BhcmFtc19kb25lID0gZmFsc2U7DQorCW1lbXNldCgmd3ZpZi0+ aHRfaW5mbywgMCwgc2l6ZW9mKHd2aWYtPmh0X2luZm8pKTsNCisNCitkb25lOg0KKwltdXRleF91 bmxvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOw0KK30NCisNCitzdGF0aWMgdm9pZCB3Znhf c2V0X21mcChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKQ0K K3sNCisJY29uc3QgaW50IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9jb3VudF9vZmZzZXQgPSA4IC8g c2l6ZW9mKHVpbnQxNl90KTsNCisJY29uc3QgaW50IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9zaXpl ID0gNCAvIHNpemVvZih1aW50MTZfdCk7DQorCWNvbnN0IGludCBha21fc3VpdGVfc2l6ZSA9IDQg LyBzaXplb2YodWludDE2X3QpOw0KKwljb25zdCB1aW50MTZfdCAqcHRyID0gTlVMTDsNCisJYm9v bCBtZnBjID0gZmFsc2U7DQorCWJvb2wgbWZwciA9IGZhbHNlOw0KKw0KKwkvKiA4MDIuMTF3IHBy b3RlY3RlZCBtZ210IGZyYW1lcyAqLw0KKw0KKwkvKiByZXRyaWV2ZSBNRlBDIGFuZCBNRlBSIGZs YWdzIGZyb20gYmVhY29uIG9yIFBCUlNQICovDQorDQorCXJjdV9yZWFkX2xvY2soKTsNCisJaWYg KGJzcykNCisJCXB0ciA9IChjb25zdCB1aW50MTZfdCAqKSBpZWVlODAyMTFfYnNzX2dldF9pZShi c3MsIFdMQU5fRUlEX1JTTik7DQorDQorCWlmIChwdHIpIHsNCisJCXB0ciArPSBwYWlyd2lzZV9j aXBoZXJfc3VpdGVfY291bnRfb2Zmc2V0Ow0KKwkJcHRyICs9IDEgKyBwYWlyd2lzZV9jaXBoZXJf c3VpdGVfc2l6ZSAqICpwdHI7DQorCQlwdHIgKz0gMSArIGFrbV9zdWl0ZV9zaXplICogKnB0cjsN CisJCW1mcHIgPSAqcHRyICYgQklUKDYpOw0KKwkJbWZwYyA9ICpwdHIgJiBCSVQoNyk7DQorCX0N CisJcmN1X3JlYWRfdW5sb2NrKCk7DQorDQorCWhpZl9zZXRfbWZwKHd2aWYsIG1mcGMsIG1mcHIp Ow0KK30NCisNCisvKiBNVVNUIGJlIGNhbGxlZCB3aXRoIHR4X2xvY2sgaGVsZCEgIEl0IHdpbGwg YmUgdW5sb2NrZWQgZm9yIHVzLiAqLw0KK3N0YXRpYyB2b2lkIHdmeF9kb19qb2luKHN0cnVjdCB3 ZnhfdmlmICp3dmlmKQ0KK3sNCisJY29uc3QgdTggKmJzc2lkOw0KKwlzdHJ1Y3QgaWVlZTgwMjEx X2Jzc19jb25mICpjb25mID0gJnd2aWYtPnZpZi0+YnNzX2NvbmY7DQorCXN0cnVjdCBjZmc4MDIx MV9ic3MgKmJzcyA9IE5VTEw7DQorCXN0cnVjdCBoaWZfcmVxX2pvaW4gam9pbiA9IHsNCisJCS5t b2RlID0gY29uZi0+aWJzc19qb2luZWQgPyBISUZfTU9ERV9JQlNTIDogSElGX01PREVfQlNTLA0K KwkJLnByZWFtYmxlX3R5cGUgPSBjb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUgPyBISUZfUFJFQU1C TEVfU0hPUlQgOiBISUZfUFJFQU1CTEVfTE9ORywNCisJCS5wcm9iZV9mb3Jfam9pbiA9IDEsDQor CQkuYXRpbV93aW5kb3cgPSAwLA0KKwkJLmJhc2ljX3JhdGVfc2V0ID0gd2Z4X3JhdGVfbWFza190 b19odyh3dmlmLT53ZGV2LCBjb25mLT5iYXNpY19yYXRlcyksDQorCX07DQorDQorCWlmICh3dmlm LT5jaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0lSKQ0KKwkJam9pbi5wcm9iZV9m b3Jfam9pbiA9IDA7DQorDQorCWlmICh3dmlmLT5zdGF0ZSkNCisJCXdmeF9kb191bmpvaW4od3Zp Zik7DQorDQorCWJzc2lkID0gd3ZpZi0+dmlmLT5ic3NfY29uZi5ic3NpZDsNCisNCisJYnNzID0g Y2ZnODAyMTFfZ2V0X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHksIHd2aWYtPmNoYW5uZWwsIGJz c2lkLCBOVUxMLCAwLA0KKwkJCSAgICAgICBJRUVFODAyMTFfQlNTX1RZUEVfQU5ZLCBJRUVFODAy MTFfUFJJVkFDWV9BTlkpOw0KKw0KKwlpZiAoIWJzcyAmJiAhY29uZi0+aWJzc19qb2luZWQpIHsN CisJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCQlyZXR1cm47DQorCX0NCisNCisJbXV0 ZXhfbG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRleCk7DQorDQorCS8qIFVuZGVyIHRoZSBjb25m IGxvY2s6IGNoZWNrIHNjYW4gc3RhdHVzIGFuZA0KKwkgKiBiYWlsIG91dCBpZiBpdCBpcyBpbiBw cm9ncmVzcy4NCisJICovDQorCWlmIChhdG9taWNfcmVhZCgmd3ZpZi0+c2Nhbi5pbl9wcm9ncmVz cykpIHsNCisJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCQlnb3RvIGRvbmVfcHV0Ow0K Kwl9DQorDQorCS8qIFNhbml0eSBjaGVjayBiYXNpYyByYXRlcyAqLw0KKwlpZiAoIWpvaW4uYmFz aWNfcmF0ZV9zZXQpDQorCQlqb2luLmJhc2ljX3JhdGVfc2V0ID0gNzsNCisNCisJLyogU2FuaXR5 IGNoZWNrIGJlYWNvbiBpbnRlcnZhbCAqLw0KKwlpZiAoIXd2aWYtPmJlYWNvbl9pbnQpDQorCQl3 dmlmLT5iZWFjb25faW50ID0gMTsNCisNCisJam9pbi5iZWFjb25faW50ZXJ2YWwgPSB3dmlmLT5i ZWFjb25faW50Ow0KKw0KKwkvLyBEVElNIHBlcmlvZCB3aWxsIGJlIHNldCBvbiBmaXJzdCBCZWFj b24NCisJd3ZpZi0+ZHRpbV9wZXJpb2QgPSAwOw0KKw0KKwlqb2luLmNoYW5uZWxfbnVtYmVyID0g d3ZpZi0+Y2hhbm5lbC0+aHdfdmFsdWU7DQorCW1lbWNweShqb2luLmJzc2lkLCBic3NpZCwgc2l6 ZW9mKGpvaW4uYnNzaWQpKTsNCisNCisJaWYgKCFjb25mLT5pYnNzX2pvaW5lZCkgew0KKwkJY29u c3QgdTggKnNzaWRpZTsNCisNCisJCXJjdV9yZWFkX2xvY2soKTsNCisJCXNzaWRpZSA9IGllZWU4 MDIxMV9ic3NfZ2V0X2llKGJzcywgV0xBTl9FSURfU1NJRCk7DQorCQlpZiAoc3NpZGllKSB7DQor CQkJam9pbi5zc2lkX2xlbmd0aCA9IHNzaWRpZVsxXTsNCisJCQltZW1jcHkoam9pbi5zc2lkLCAm c3NpZGllWzJdLCBqb2luLnNzaWRfbGVuZ3RoKTsNCisJCX0NCisJCXJjdV9yZWFkX3VubG9jaygp Ow0KKwl9DQorDQorCXdmeF90eF9mbHVzaCh3dmlmLT53ZGV2KTsNCisNCisJaWYgKHd2aWZfY291 bnQod3ZpZi0+d2RldikgPD0gMSkNCisJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAw eEZGLCAweEZGKTsNCisNCisJd2Z4X3NldF9tZnAod3ZpZiwgYnNzKTsNCisNCisJLyogUGVyZm9y bSBhY3R1YWwgam9pbiAqLw0KKwl3dmlmLT53ZGV2LT50eF9idXJzdF9pZHggPSAtMTsNCisJaWYg KGhpZl9qb2luKHd2aWYsICZqb2luKSkgew0KKwkJaWVlZTgwMjExX2Nvbm5lY3Rpb25fbG9zcyh3 dmlmLT52aWYpOw0KKwkJd3ZpZi0+am9pbl9jb21wbGV0ZV9zdGF0dXMgPSAtMTsNCisJCS8qIFR4 IGxvY2sgc3RpbGwgaGVsZCwgdW5qb2luIHdpbGwgY2xlYXIgaXQuICovDQorCQlpZiAoIXNjaGVk dWxlX3dvcmsoJnd2aWYtPnVuam9pbl93b3JrKSkNCisJCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndk ZXYpOw0KKwl9IGVsc2Ugew0KKwkJd3ZpZi0+am9pbl9jb21wbGV0ZV9zdGF0dXMgPSAwOw0KKwkJ aWYgKHd2aWYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykNCisJCQl3dmlmLT5z dGF0ZSA9IFdGWF9TVEFURV9JQlNTOw0KKwkJZWxzZQ0KKwkJCXd2aWYtPnN0YXRlID0gV0ZYX1NU QVRFX1BSRV9TVEE7DQorCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOw0KKw0KKwkJLyogVXBs b2FkIGtleXMgKi8NCisJCXdmeF91cGxvYWRfa2V5cyh3dmlmKTsNCisNCisJCS8qIER1ZSB0byBi ZWFjb24gZmlsdGVyaW5nIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlDQorCQkgKiBBUCdzIGJlYWNv biBpcyBub3Qga25vd24gZm9yIHRoZSBtYWM4MDIxMSBzdGFjay4NCisJCSAqIERpc2FibGUgZmls dGVyaW5nIHRlbXBvcmFyeSB0byBtYWtlIHN1cmUgdGhlIHN0YWNrDQorCQkgKiByZWNlaXZlcyBh dCBsZWFzdCBvbmUNCisJCSAqLw0KKwkJd3ZpZi0+ZGlzYWJsZV9iZWFjb25fZmlsdGVyID0gdHJ1 ZTsNCisJfQ0KKwl3ZnhfdXBkYXRlX2ZpbHRlcmluZyh3dmlmKTsNCisNCitkb25lX3B1dDoNCisJ bXV0ZXhfdW5sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsNCisJaWYgKGJzcykNCisJCWNm ZzgwMjExX3B1dF9ic3Mod3ZpZi0+d2Rldi0+aHctPndpcGh5LCBic3MpOw0KK30NCisNCit2b2lk IHdmeF91bmpvaW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgdW5qb2lu X3dvcmspOw0KKw0KKwl3ZnhfZG9fdW5qb2luKHd2aWYpOw0KKwl3ZnhfdHhfdW5sb2NrKHd2aWYt PndkZXYpOw0KK30NCisNCitpbnQgd2Z4X3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3Rh KQ0KK3sNCisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsNCisJc3RydWN0IHdmeF92 aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKikgdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IHdm eF9zdGFfcHJpdiAqc3RhX3ByaXYgPSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSAmc3RhLT5kcnZf cHJpdjsNCisJc3RydWN0IHdmeF9saW5rX2VudHJ5ICplbnRyeTsNCisJc3RydWN0IHNrX2J1ZmYg KnNrYjsNCisNCisJaWYgKHd2aWYtPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkNCisJ CXJldHVybiAwOw0KKw0KKwlzdGFfcHJpdi0+dmlmX2lkID0gd3ZpZi0+aWQ7DQorCXN0YV9wcml2 LT5saW5rX2lkID0gd2Z4X2ZpbmRfbGlua19pZCh3dmlmLCBzdGEtPmFkZHIpOw0KKwlpZiAoIXN0 YV9wcml2LT5saW5rX2lkKSB7DQorCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJtbyBtb3JlIGxpbmst aWQgYXZhaWxhYmxlXG4iKTsNCisJCXJldHVybiAtRU5PRU5UOw0KKwl9DQorDQorCWVudHJ5ID0g Jnd2aWYtPmxpbmtfaWRfZGJbc3RhX3ByaXYtPmxpbmtfaWQgLSAxXTsNCisJc3Bpbl9sb2NrX2Jo KCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisJaWYgKChzdGEtPnVhcHNkX3F1ZXVlcyAmIElFRUU4 MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fQUNfTUFTSykgPT0NCisJCQkJCUlFRUU4MDIxMV9XTU1f SUVfU1RBX1FPU0lORk9fQUNfTUFTSykNCisJCXd2aWYtPnN0YV9hc2xlZXBfbWFzayB8PSBCSVQo c3RhX3ByaXYtPmxpbmtfaWQpOw0KKwllbnRyeS0+c3RhdHVzID0gV0ZYX0xJTktfSEFSRDsNCisJ d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZW50cnktPnJ4X3F1ZXVlKSkpDQorCQlpZWVlODAy MTFfcnhfaXJxc2FmZSh3ZGV2LT5odywgc2tiKTsNCisJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBz X3N0YXRlX2xvY2spOw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IHdmeF9zdGFfcmVtb3ZlKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAg c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0g aHctPnByaXY7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopIHZp Zi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCB3Znhfc3RhX3ByaXYgKnN0YV9wcml2ID0gKHN0cnVjdCB3 Znhfc3RhX3ByaXYgKikgJnN0YS0+ZHJ2X3ByaXY7DQorCXN0cnVjdCB3ZnhfbGlua19lbnRyeSAq ZW50cnk7DQorDQorCWlmICh3dmlmLT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwg IXN0YV9wcml2LT5saW5rX2lkKQ0KKwkJcmV0dXJuIDA7DQorDQorCWVudHJ5ID0gJnd2aWYtPmxp bmtfaWRfZGJbc3RhX3ByaXYtPmxpbmtfaWQgLSAxXTsNCisJc3Bpbl9sb2NrX2JoKCZ3dmlmLT5w c19zdGF0ZV9sb2NrKTsNCisJZW50cnktPnN0YXR1cyA9IFdGWF9MSU5LX1JFU0VSVkU7DQorCWVu dHJ5LT50aW1lc3RhbXAgPSBqaWZmaWVzOw0KKwl3ZnhfdHhfbG9jayh3ZGV2KTsNCisJaWYgKCFz Y2hlZHVsZV93b3JrKCZ3dmlmLT5saW5rX2lkX3dvcmspKQ0KKwkJd2Z4X3R4X3VubG9jayh3ZGV2 KTsNCisJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwlmbHVzaF93b3Jr KCZ3dmlmLT5saW5rX2lkX3dvcmspOw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCB3Znhfc2V0 X2N0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCB3Znhfdmlm ICp3dmlmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCBzZXRfY3RzX3dvcmsp Ow0KKwl1OCBlcnBfaWVbM10gPSB7IFdMQU5fRUlEX0VSUF9JTkZPLCAxLCAwIH07DQorCXN0cnVj dCBoaWZfaWVfZmxhZ3MgdGFyZ2V0X2ZyYW1lID0gew0KKwkJLmJlYWNvbiA9IDEsDQorCX07DQor DQorCW11dGV4X2xvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOw0KKwllcnBfaWVbMl0gPSB3 dmlmLT5lcnBfaW5mbzsNCisJbXV0ZXhfdW5sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsN CisNCisJaGlmX2VycF91c2VfcHJvdGVjdGlvbih3dmlmLCBlcnBfaWVbMl0gJiBXTEFOX0VSUF9V U0VfUFJPVEVDVElPTik7DQorDQorCWlmICh3dmlmLT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZ UEVfU1RBVElPTikNCisJCWhpZl91cGRhdGVfaWUod3ZpZiwgJnRhcmdldF9mcmFtZSwgZXJwX2ll LCBzaXplb2YoZXJwX2llKSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgd2Z4X3N0YXJ0X2FwKHN0cnVj dCB3ZnhfdmlmICp3dmlmKQ0KK3sNCisJaW50IHJldDsNCisJc3RydWN0IGllZWU4MDIxMV9ic3Nf Y29uZiAqY29uZiA9ICZ3dmlmLT52aWYtPmJzc19jb25mOw0KKwlzdHJ1Y3QgaGlmX3JlcV9zdGFy dCBzdGFydCA9IHsNCisJCS5jaGFubmVsX251bWJlciA9IHd2aWYtPmNoYW5uZWwtPmh3X3ZhbHVl LA0KKwkJLmJlYWNvbl9pbnRlcnZhbCA9IGNvbmYtPmJlYWNvbl9pbnQsDQorCQkuZHRpbV9wZXJp b2QgPSBjb25mLT5kdGltX3BlcmlvZCwNCisJCS5wcmVhbWJsZV90eXBlID0gY29uZi0+dXNlX3No b3J0X3ByZWFtYmxlID8gSElGX1BSRUFNQkxFX1NIT1JUIDogSElGX1BSRUFNQkxFX0xPTkcsDQor CQkuYmFzaWNfcmF0ZV9zZXQgPSB3ZnhfcmF0ZV9tYXNrX3RvX2h3KHd2aWYtPndkZXYsIGNvbmYt PmJhc2ljX3JhdGVzKSwNCisJfTsNCisNCisJbWVtc2V0KHN0YXJ0LnNzaWQsIDAsIHNpemVvZihz dGFydC5zc2lkKSk7DQorCWlmICghY29uZi0+aGlkZGVuX3NzaWQpIHsNCisJCXN0YXJ0LnNzaWRf bGVuZ3RoID0gY29uZi0+c3NpZF9sZW47DQorCQltZW1jcHkoc3RhcnQuc3NpZCwgY29uZi0+c3Np ZCwgc3RhcnQuc3NpZF9sZW5ndGgpOw0KKwl9DQorDQorCXd2aWYtPmJlYWNvbl9pbnQgPSBjb25m LT5iZWFjb25faW50Ow0KKwl3dmlmLT5kdGltX3BlcmlvZCA9IGNvbmYtPmR0aW1fcGVyaW9kOw0K Kw0KKwltZW1zZXQoJnd2aWYtPmxpbmtfaWRfZGIsIDAsIHNpemVvZih3dmlmLT5saW5rX2lkX2Ri KSk7DQorDQorCXd2aWYtPndkZXYtPnR4X2J1cnN0X2lkeCA9IC0xOw0KKwlyZXQgPSBoaWZfc3Rh cnQod3ZpZiwgJnN0YXJ0KTsNCisJaWYgKCFyZXQpDQorCQlyZXQgPSB3ZnhfdXBsb2FkX2tleXMo d3ZpZik7DQorCWlmICghcmV0KSB7DQorCQlpZiAod3ZpZl9jb3VudCh3dmlmLT53ZGV2KSA8PSAx KQ0KKwkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweEZGLCAweEZGKTsNCisJCXd2 aWYtPnN0YXRlID0gV0ZYX1NUQVRFX0FQOw0KKwkJd2Z4X3VwZGF0ZV9maWx0ZXJpbmcod3ZpZik7 DQorCX0NCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCB3ZnhfdXBkYXRlX2JlYWNv bmluZyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfYnNzX2Nv bmYgKmNvbmYgPSAmd3ZpZi0+dmlmLT5ic3NfY29uZjsNCisNCisJaWYgKHd2aWYtPnZpZi0+dHlw ZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgew0KKwkJLyogVE9ETzogY2hlY2sgaWYgY2hhbmdlZCBj aGFubmVsLCBiYW5kICovDQorCQlpZiAod3ZpZi0+c3RhdGUgIT0gV0ZYX1NUQVRFX0FQIHx8DQor CQkgICAgd3ZpZi0+YmVhY29uX2ludCAhPSBjb25mLT5iZWFjb25faW50KSB7DQorCQkJd2Z4X3R4 X2xvY2tfZmx1c2god3ZpZi0+d2Rldik7DQorCQkJaWYgKHd2aWYtPnN0YXRlICE9IFdGWF9TVEFU RV9QQVNTSVZFKQ0KKwkJCQloaWZfcmVzZXQod3ZpZiwgZmFsc2UpOw0KKwkJCXd2aWYtPnN0YXRl ID0gV0ZYX1NUQVRFX1BBU1NJVkU7DQorCQkJd2Z4X3N0YXJ0X2FwKHd2aWYpOw0KKwkJCXdmeF90 eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCQl9IGVsc2Ugew0KKwkJfQ0KKwl9DQorCXJldHVybiAw Ow0KK30NCisNCitzdGF0aWMgaW50IHdmeF91cGxvYWRfYmVhY29uKHN0cnVjdCB3ZnhfdmlmICp3 dmlmKQ0KK3sNCisJaW50IHJldCA9IDA7DQorCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOw0K KwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7DQorCXN0cnVjdCBoaWZfbWliX3RlbXBsYXRl X2ZyYW1lICpwOw0KKw0KKwlpZiAod3ZpZi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NU QVRJT04gfHwNCisJICAgIHd2aWYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9S IHx8DQorCSAgICB3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQp DQorCQlnb3RvIGRvbmU7DQorDQorCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHd2aWYtPndk ZXYtPmh3LCB3dmlmLT52aWYpOw0KKw0KKwlpZiAoIXNrYikNCisJCXJldHVybiAtRU5PTUVNOw0K Kw0KKwlwID0gKHN0cnVjdCBoaWZfbWliX3RlbXBsYXRlX2ZyYW1lICopIHNrYl9wdXNoKHNrYiwg NCk7DQorCXAtPmZyYW1lX3R5cGUgPSBISUZfVE1QTFRfQkNOOw0KKwlwLT5pbml0X3JhdGUgPSBB UElfUkFURV9JTkRFWF9CXzFNQlBTOyAvKiAxTWJwcyBEU1NTICovDQorCXAtPmZyYW1lX2xlbmd0 aCA9IGNwdV90b19sZTE2KHNrYi0+bGVuIC0gNCk7DQorDQorCXJldCA9IGhpZl9zZXRfdGVtcGxh dGVfZnJhbWUod3ZpZiwgcCk7DQorDQorCXNrYl9wdWxsKHNrYiwgNCk7DQorDQorCWlmIChyZXQp DQorCQlnb3RvIGRvbmU7DQorCS8qIFRPRE86IERpc3RpbGwgcHJvYmUgcmVzcDsgcmVtb3ZlIFRJ TSBhbmQgYW55IG90aGVyIGJlYWNvbi1zcGVjaWZpYw0KKwkgKiBJRXMNCisJICovDQorCW1nbXQg PSAodm9pZCAqKXNrYi0+ZGF0YTsNCisJbWdtdC0+ZnJhbWVfY29udHJvbCA9DQorCQljcHVfdG9f bGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsN CisNCisJcC0+ZnJhbWVfdHlwZSA9IEhJRl9UTVBMVF9QUkJSRVM7DQorDQorCXJldCA9IGhpZl9z ZXRfdGVtcGxhdGVfZnJhbWUod3ZpZiwgcCk7DQorCXdmeF9md2RfcHJvYmVfcmVxKHd2aWYsIGZh bHNlKTsNCisNCitkb25lOg0KKwlpZiAoIXNrYikNCisJCWRldl9rZnJlZV9za2Ioc2tiKTsNCisJ cmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCB3ZnhfaXNfaHQoY29uc3Qgc3RydWN0IHdm eF9odF9pbmZvICpodF9pbmZvKQ0KK3sNCisJcmV0dXJuIGh0X2luZm8tPmNoYW5uZWxfdHlwZSAh PSBOTDgwMjExX0NIQU5fTk9fSFQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgd2Z4X2h0X2dyZWVuZmll bGQoY29uc3Qgc3RydWN0IHdmeF9odF9pbmZvICpodF9pbmZvKQ0KK3sNCisJcmV0dXJuIHdmeF9p c19odChodF9pbmZvKSAmJg0KKwkJKGh0X2luZm8tPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRf Q0FQX0dSTl9GTEQpICYmDQorCQkhKGh0X2luZm8tPm9wZXJhdGlvbl9tb2RlICYNCisJCSAgSUVF RTgwMjExX0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQg d2Z4X2h0X2FtcGR1X2RlbnNpdHkoY29uc3Qgc3RydWN0IHdmeF9odF9pbmZvICpodF9pbmZvKQ0K K3sNCisJaWYgKCF3ZnhfaXNfaHQoaHRfaW5mbykpDQorCQlyZXR1cm4gMDsNCisJcmV0dXJuIGh0 X2luZm8tPmh0X2NhcC5hbXBkdV9kZW5zaXR5Ow0KK30NCisNCitzdGF0aWMgdm9pZCB3Znhfam9p bl9maW5hbGl6ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4MDIxMV9ic3NfY29u ZiAqaW5mbykNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOw0KKwlzdHJ1 Y3QgaGlmX21pYl9zZXRfYXNzb2NpYXRpb25fbW9kZSBhc3NvY2lhdGlvbl9tb2RlID0geyB9Ow0K Kw0KKwlpZiAoaW5mby0+ZHRpbV9wZXJpb2QpDQorCQl3dmlmLT5kdGltX3BlcmlvZCA9IGluZm8t PmR0aW1fcGVyaW9kOw0KKwl3dmlmLT5iZWFjb25faW50ID0gaW5mby0+YmVhY29uX2ludDsNCisN CisJcmN1X3JlYWRfbG9jaygpOw0KKwlpZiAoaW5mby0+YnNzaWQgJiYgIWluZm8tPmlic3Nfam9p bmVkKQ0KKwkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHd2aWYtPnZpZiwgaW5mby0+YnNzaWQp Ow0KKwlpZiAoc3RhKSB7DQorCQl3dmlmLT5odF9pbmZvLmh0X2NhcCA9IHN0YS0+aHRfY2FwOw0K KwkJd3ZpZi0+YnNzX3BhcmFtcy5vcGVyYXRpb25hbF9yYXRlX3NldCA9DQorCQkJd2Z4X3JhdGVf bWFza190b19odyh3dmlmLT53ZGV2LCBzdGEtPnN1cHBfcmF0ZXNbd3ZpZi0+Y2hhbm5lbC0+YmFu ZF0pOw0KKwkJd3ZpZi0+aHRfaW5mby5vcGVyYXRpb25fbW9kZSA9IGluZm8tPmh0X29wZXJhdGlv bl9tb2RlOw0KKwl9IGVsc2Ugew0KKwkJbWVtc2V0KCZ3dmlmLT5odF9pbmZvLCAwLCBzaXplb2Yo d3ZpZi0+aHRfaW5mbykpOw0KKwkJd3ZpZi0+YnNzX3BhcmFtcy5vcGVyYXRpb25hbF9yYXRlX3Nl dCA9IC0xOw0KKwl9DQorCXJjdV9yZWFkX3VubG9jaygpOw0KKw0KKwkvKiBOb24gR3JlZW5maWVs ZCBzdGF0aW9ucyBwcmVzZW50ICovDQorCWlmICh3dmlmLT5odF9pbmZvLm9wZXJhdGlvbl9tb2Rl ICYgSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVCkNCisJCWhpZl9kdWFsX2N0 c19wcm90ZWN0aW9uKHd2aWYsIHRydWUpOw0KKwllbHNlDQorCQloaWZfZHVhbF9jdHNfcHJvdGVj dGlvbih3dmlmLCBmYWxzZSk7DQorDQorCWFzc29jaWF0aW9uX21vZGUucHJlYW1idHlwZV91c2Ug PSAxOw0KKwlhc3NvY2lhdGlvbl9tb2RlLm1vZGUgPSAxOw0KKwlhc3NvY2lhdGlvbl9tb2RlLnJh dGVzZXQgPSAxOw0KKwlhc3NvY2lhdGlvbl9tb2RlLnNwYWNpbmcgPSAxOw0KKwlhc3NvY2lhdGlv bl9tb2RlLnByZWFtYmxlX3R5cGUgPSBpbmZvLT51c2Vfc2hvcnRfcHJlYW1ibGUgPyBISUZfUFJF QU1CTEVfU0hPUlQgOiBISUZfUFJFQU1CTEVfTE9ORzsNCisJYXNzb2NpYXRpb25fbW9kZS5iYXNp Y19yYXRlX3NldCA9IGNwdV90b19sZTMyKHdmeF9yYXRlX21hc2tfdG9faHcod3ZpZi0+d2Rldiwg aW5mby0+YmFzaWNfcmF0ZXMpKTsNCisJYXNzb2NpYXRpb25fbW9kZS5taXhlZF9vcl9ncmVlbmZp ZWxkX3R5cGUgPSB3ZnhfaHRfZ3JlZW5maWVsZCgmd3ZpZi0+aHRfaW5mbyk7DQorCWFzc29jaWF0 aW9uX21vZGUubXBkdV9zdGFydF9zcGFjaW5nID0gd2Z4X2h0X2FtcGR1X2RlbnNpdHkoJnd2aWYt Pmh0X2luZm8pOw0KKw0KKwl3ZnhfY3FtX2Jzc2xvc3Nfc20od3ZpZiwgMCwgMCwgMCk7DQorCWNh bmNlbF93b3JrX3N5bmMoJnd2aWYtPnVuam9pbl93b3JrKTsNCisNCisJd3ZpZi0+YnNzX3BhcmFt cy5iZWFjb25fbG9zdF9jb3VudCA9IDIwOw0KKwl3dmlmLT5ic3NfcGFyYW1zLmFpZCA9IGluZm8t PmFpZDsNCisNCisJaWYgKHd2aWYtPmR0aW1fcGVyaW9kIDwgMSkNCisJCXd2aWYtPmR0aW1fcGVy aW9kID0gMTsNCisNCisJaGlmX3NldF9hc3NvY2lhdGlvbl9tb2RlKHd2aWYsICZhc3NvY2lhdGlv bl9tb2RlKTsNCisNCisJaWYgKCFpbmZvLT5pYnNzX2pvaW5lZCkgew0KKwkJaGlmX2tlZXBfYWxp dmVfcGVyaW9kKHd2aWYsIDMwIC8qIHNlYyAqLyk7DQorCQloaWZfc2V0X2Jzc19wYXJhbXMod3Zp ZiwgJnd2aWYtPmJzc19wYXJhbXMpOw0KKwkJd3ZpZi0+c2V0YnNzcGFyYW1zX2RvbmUgPSB0cnVl Ow0KKwkJd2Z4X3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZF93b3JrKCZ3dmlmLT5zZXRfYmVhY29u X3dha2V1cF9wZXJpb2Rfd29yayk7DQorCQl3Znhfc2V0X3BtKHd2aWYsICZ3dmlmLT5wb3dlcnNh dmVfbW9kZSk7DQorCX0NCit9DQorDQordm9pZCB3ZnhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywNCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQor CQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLA0KKwkJCSAgICAgdTMyIGNo YW5nZWQpDQorew0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB2aWYtPmRydl9wcml2Ow0KKwlib29s IGRvX2pvaW4gPSBmYWxzZTsNCisJaW50IGk7DQorCWludCBuYl9hcnBfYWRkcjsNCisNCisJbXV0 ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRleCk7DQorDQorCS8qIFRPRE86IEJTU19DSEFOR0VEX1FP UyAqLw0KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FSUF9GSUxURVIpIHsNCisJCXN0cnVj dCBoaWZfbWliX2FycF9pcF9hZGRyX3RhYmxlIGZpbHRlciA9IHsgfTsNCisNCisJCW5iX2FycF9h ZGRyID0gaW5mby0+YXJwX2FkZHJfY250Ow0KKwkJaWYgKG5iX2FycF9hZGRyIDw9IDAgfHwgbmJf YXJwX2FkZHIgPiBISUZfTUFYX0FSUF9JUF9BRERSVEFCTEVfRU5UUklFUykNCisJCQluYl9hcnBf YWRkciA9IDA7DQorDQorCQlmb3IgKGkgPSAwOyBpIDwgSElGX01BWF9BUlBfSVBfQUREUlRBQkxF X0VOVFJJRVM7IGkrKykgew0KKwkJCWZpbHRlci5jb25kaXRpb25faWR4ID0gaTsNCisJCQlpZiAo aSA8IG5iX2FycF9hZGRyKSB7DQorCQkJCS8vIENhdXRpb246IHR5cGUgb2YgYXJwX2FkZHJfbGlz dFtpXSBpcyBfX2JlMzINCisJCQkJbWVtY3B5KGZpbHRlci5pcHY0X2FkZHJlc3MsICZpbmZvLT5h cnBfYWRkcl9saXN0W2ldLCBzaXplb2YoZmlsdGVyLmlwdjRfYWRkcmVzcykpOw0KKwkJCQlmaWx0 ZXIuYXJwX2VuYWJsZSA9IEhJRl9BUlBfTlNfRklMVEVSSU5HX0VOQUJMRTsNCisJCQl9IGVsc2Ug ew0KKwkJCQlmaWx0ZXIuYXJwX2VuYWJsZSA9IEhJRl9BUlBfTlNfRklMVEVSSU5HX0RJU0FCTEU7 DQorCQkJfQ0KKwkJCWhpZl9zZXRfYXJwX2lwdjRfZmlsdGVyKHd2aWYsICZmaWx0ZXIpOw0KKwkJ fQ0KKwl9DQorDQorCWlmIChjaGFuZ2VkICYNCisJICAgIChCU1NfQ0hBTkdFRF9CRUFDT04gfCBC U1NfQ0hBTkdFRF9BUF9QUk9CRV9SRVNQIHwNCisJICAgICBCU1NfQ0hBTkdFRF9CU1NJRCB8IEJT U19DSEFOR0VEX1NTSUQgfCBCU1NfQ0hBTkdFRF9JQlNTKSkgew0KKwkJd3ZpZi0+YmVhY29uX2lu dCA9IGluZm8tPmJlYWNvbl9pbnQ7DQorCQl3ZnhfdXBkYXRlX2JlYWNvbmluZyh3dmlmKTsNCisJ CXdmeF91cGxvYWRfYmVhY29uKHd2aWYpOw0KKwl9DQorDQorCWlmIChjaGFuZ2VkICYgQlNTX0NI QU5HRURfQkVBQ09OX0VOQUJMRUQgJiYgd3ZpZi0+c3RhdGUgIT0gV0ZYX1NUQVRFX0lCU1MpIHsN CisJCWlmICh3dmlmLT5lbmFibGVfYmVhY29uICE9IGluZm8tPmVuYWJsZV9iZWFjb24pIHsNCisJ CQloaWZfYmVhY29uX3RyYW5zbWl0KHd2aWYsIGluZm8tPmVuYWJsZV9iZWFjb24pOw0KKwkJCXd2 aWYtPmVuYWJsZV9iZWFjb24gPSBpbmZvLT5lbmFibGVfYmVhY29uOw0KKwkJfQ0KKwl9DQorDQor CS8qIGFzc29jL2Rpc2Fzc29jLCBvciBtYXliZSBBSUQgY2hhbmdlZCAqLw0KKwlpZiAoY2hhbmdl ZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7DQorCQl3ZnhfdHhfbG9ja19mbHVzaCh3ZGV2KTsNCisJ CXd2aWYtPndlcF9kZWZhdWx0X2tleV9pZCA9IC0xOw0KKwkJd2Z4X3R4X3VubG9jayh3ZGV2KTsN CisJfQ0KKw0KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DICYmICFpbmZvLT5hc3Nv YyAmJg0KKwkgICAgKHd2aWYtPnN0YXRlID09IFdGWF9TVEFURV9TVEEgfHwgd3ZpZi0+c3RhdGUg PT0gV0ZYX1NUQVRFX0lCU1MpKSB7DQorCQkvKiBTaGVkdWxlIHVuam9pbiB3b3JrICovDQorCQl3 ZnhfdHhfbG9jayh3ZGV2KTsNCisJCWlmICghc2NoZWR1bGVfd29yaygmd3ZpZi0+dW5qb2luX3dv cmspKQ0KKwkJCXdmeF90eF91bmxvY2sod2Rldik7DQorCX0gZWxzZSB7DQorCQlpZiAoY2hhbmdl ZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpIHsNCisJCQlpZiAoaW5mby0+aWJzc19qb2luZWQp DQorCQkJCWRvX2pvaW4gPSB0cnVlOw0KKwkJCWVsc2UgaWYgKHd2aWYtPnN0YXRlID09IFdGWF9T VEFURV9BUCkNCisJCQkJd2Z4X3VwZGF0ZV9iZWFjb25pbmcod3ZpZik7DQorCQl9DQorDQorCQlp ZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKQ0KKwkJCWRvX2pvaW4gPSB0cnVlOw0KKw0K KwkJaWYgKGNoYW5nZWQgJg0KKwkJICAgIChCU1NfQ0hBTkdFRF9BU1NPQyB8IEJTU19DSEFOR0VE X0JTU0lEIHwNCisJCSAgICAgQlNTX0NIQU5HRURfSUJTUyB8IEJTU19DSEFOR0VEX0JBU0lDX1JB VEVTIHwgQlNTX0NIQU5HRURfSFQpKSB7DQorCQkJaWYgKGluZm8tPmFzc29jKSB7DQorCQkJCWlm ICh3dmlmLT5zdGF0ZSA8IFdGWF9TVEFURV9QUkVfU1RBKSB7DQorCQkJCQlpZWVlODAyMTFfY29u bmVjdGlvbl9sb3NzKHZpZik7DQorCQkJCQltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgp Ow0KKwkJCQkJcmV0dXJuOw0KKwkJCQl9IGVsc2UgaWYgKHd2aWYtPnN0YXRlID09IFdGWF9TVEFU RV9QUkVfU1RBKSB7DQorCQkJCQl3dmlmLT5zdGF0ZSA9IFdGWF9TVEFURV9TVEE7DQorCQkJCX0N CisJCQl9IGVsc2Ugew0KKwkJCQlkb19qb2luID0gdHJ1ZTsNCisJCQl9DQorDQorCQkJaWYgKGlu Zm8tPmFzc29jIHx8IGluZm8tPmlic3Nfam9pbmVkKQ0KKwkJCQl3Znhfam9pbl9maW5hbGl6ZSh3 dmlmLCBpbmZvKTsNCisJCQllbHNlDQorCQkJCW1lbXNldCgmd3ZpZi0+YnNzX3BhcmFtcywgMCwg c2l6ZW9mKHd2aWYtPmJzc19wYXJhbXMpKTsNCisJCX0NCisJfQ0KKw0KKwkvKiBFUlAgUHJvdGVj dGlvbiAqLw0KKwlpZiAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9BU1NPQyB8DQorCQkgICAgICAg QlNTX0NIQU5HRURfRVJQX0NUU19QUk9UIHwNCisJCSAgICAgICBCU1NfQ0hBTkdFRF9FUlBfUFJF QU1CTEUpKSB7DQorCQl1MzIgcHJldl9lcnBfaW5mbyA9IHd2aWYtPmVycF9pbmZvOw0KKw0KKwkJ aWYgKGluZm8tPnVzZV9jdHNfcHJvdCkNCisJCQl3dmlmLT5lcnBfaW5mbyB8PSBXTEFOX0VSUF9V U0VfUFJPVEVDVElPTjsNCisJCWVsc2UgaWYgKCEocHJldl9lcnBfaW5mbyAmIFdMQU5fRVJQX05P Tl9FUlBfUFJFU0VOVCkpDQorCQkJd3ZpZi0+ZXJwX2luZm8gJj0gfldMQU5fRVJQX1VTRV9QUk9U RUNUSU9OOw0KKw0KKwkJaWYgKGluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSkNCisJCQl3dmlmLT5l cnBfaW5mbyB8PSBXTEFOX0VSUF9CQVJLRVJfUFJFQU1CTEU7DQorCQllbHNlDQorCQkJd3ZpZi0+ ZXJwX2luZm8gJj0gfldMQU5fRVJQX0JBUktFUl9QUkVBTUJMRTsNCisNCisJCWlmIChwcmV2X2Vy cF9pbmZvICE9IHd2aWYtPmVycF9pbmZvKQ0KKwkJCXNjaGVkdWxlX3dvcmsoJnd2aWYtPnNldF9j dHNfd29yayk7DQorCX0NCisNCisJaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfQVNTT0MgfCBC U1NfQ0hBTkdFRF9FUlBfU0xPVCkpDQorCQloaWZfc2xvdF90aW1lKHd2aWYsIGluZm8tPnVzZV9z aG9ydF9zbG90ID8gOSA6IDIwKTsNCisNCisJaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfQVNT T0MgfCBCU1NfQ0hBTkdFRF9DUU0pKSB7DQorCQlzdHJ1Y3QgaGlmX21pYl9yY3BpX3Jzc2lfdGhy ZXNob2xkIHRoID0gew0KKwkJCS5yb2xsaW5nX2F2ZXJhZ2VfY291bnQgPSA4LA0KKwkJCS5kZXRl Y3Rpb24gPSAxLA0KKwkJfTsNCisNCisJCXd2aWYtPmNxbV9yc3NpX3Rob2xkID0gaW5mby0+Y3Ft X3Jzc2lfdGhvbGQ7DQorDQorCQlpZiAoIWluZm8tPmNxbV9yc3NpX3Rob2xkICYmICFpbmZvLT5j cW1fcnNzaV9oeXN0KSB7DQorCQkJdGgudXBwZXJ0aHJlc2ggPSAxOw0KKwkJCXRoLmxvd2VydGhy ZXNoID0gMTsNCisJCX0gZWxzZSB7DQorCQkJLyogRklYTUUgSXQncyBub3QgYSBjb3JyZWN0IHdh eSBvZiBzZXR0aW5nIHRocmVzaG9sZC4NCisJCQkgKiBVcHBlciBhbmQgbG93ZXIgbXVzdCBiZSBz ZXQgZXF1YWwgaGVyZSBhbmQgYWRqdXN0ZWQNCisJCQkgKiBpbiBjYWxsYmFjay4gSG93ZXZlciBj dXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG11Y2gNCisJCQkgKiBtb3JlIHJlbGlhYmxlIGFuZCBz dGFibGUuDQorCQkJICovDQorCQkJLyogUlNTSTogc2lnbmVkIFE4LjAsIFJDUEk6IHVuc2lnbmVk IFE3LjENCisJCQkgKiBSU1NJID0gUkNQSSAvIDIgLSAxMTANCisJCQkgKi8NCisJCQl0aC51cHBl cl90aHJlc2hvbGQgPSBpbmZvLT5jcW1fcnNzaV90aG9sZCArIGluZm8tPmNxbV9yc3NpX2h5c3Q7 DQorCQkJdGgudXBwZXJfdGhyZXNob2xkID0gKHRoLnVwcGVyX3RocmVzaG9sZCArIDExMCkgKiAy Ow0KKwkJCXRoLmxvd2VyX3RocmVzaG9sZCA9IGluZm8tPmNxbV9yc3NpX3Rob2xkOw0KKwkJCXRo Lmxvd2VyX3RocmVzaG9sZCA9ICh0aC5sb3dlcl90aHJlc2hvbGQgKyAxMTApICogMjsNCisJCX0N CisJCWhpZl9zZXRfcmNwaV9yc3NpX3RocmVzaG9sZCh3dmlmLCAmdGgpOw0KKwl9DQorDQorCWlm IChjaGFuZ2VkICYgQlNTX0NIQU5HRURfVFhQT1dFUiAmJiBpbmZvLT50eHBvd2VyICE9IHdkZXYt Pm91dHB1dF9wb3dlcikgew0KKwkJd2Rldi0+b3V0cHV0X3Bvd2VyID0gaW5mby0+dHhwb3dlcjsN CisJCWhpZl9zZXRfb3V0cHV0X3Bvd2VyKHd2aWYsIHdkZXYtPm91dHB1dF9wb3dlciAqIDEwKTsN CisJfQ0KKwltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOw0KKw0KKwlpZiAoZG9fam9p bikgew0KKwkJd2Z4X3R4X2xvY2tfZmx1c2god2Rldik7DQorCQl3ZnhfZG9fam9pbih3dmlmKTsg LyogV2lsbCB1bmxvY2sgaXQgZm9yIHVzICovDQorCX0NCit9DQorDQorc3RhdGljIHZvaWQgd2Z4 X3BzX25vdGlmeShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgZW51bSBzdGFfbm90aWZ5X2NtZCBub3Rp ZnlfY21kLA0KKwkJCSAgaW50IGxpbmtfaWQpDQorew0KKwl1MzIgYml0LCBwcmV2Ow0KKw0KKwlz cGluX2xvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwkvKiBaZXJvIGxpbmsgaWQgbWVh bnMgImZvciBhbGwgbGluayBJRHMiICovDQorCWlmIChsaW5rX2lkKSB7DQorCQliaXQgPSBCSVQo bGlua19pZCk7DQorCX0gZWxzZSBpZiAobm90aWZ5X2NtZCAhPSBTVEFfTk9USUZZX0FXQUtFKSB7 DQorCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBub3RpZnkgY29tbWFu ZFxuIik7DQorCQliaXQgPSAwOw0KKwl9IGVsc2Ugew0KKwkJYml0ID0gd3ZpZi0+bGlua19pZF9t YXA7DQorCX0NCisJcHJldiA9IHd2aWYtPnN0YV9hc2xlZXBfbWFzayAmIGJpdDsNCisNCisJc3dp dGNoIChub3RpZnlfY21kKSB7DQorCWNhc2UgU1RBX05PVElGWV9TTEVFUDoNCisJCWlmICghcHJl dikgew0KKwkJCWlmICh3dmlmLT5tY2FzdF9idWZmZXJlZCAmJiAhd3ZpZi0+c3RhX2FzbGVlcF9t YXNrKQ0KKwkJCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT5tY2FzdF9zdGFydF93b3JrKTsNCisJCQl3 dmlmLT5zdGFfYXNsZWVwX21hc2sgfD0gYml0Ow0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2UgU1RB X05PVElGWV9BV0FLRToNCisJCWlmIChwcmV2KSB7DQorCQkJd3ZpZi0+c3RhX2FzbGVlcF9tYXNr ICY9IH5iaXQ7DQorCQkJd3ZpZi0+cHNwb2xsX21hc2sgJj0gfmJpdDsNCisJCQlpZiAobGlua19p ZCAmJiAhd3ZpZi0+c3RhX2FzbGVlcF9tYXNrKQ0KKwkJCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT5t Y2FzdF9zdG9wX3dvcmspOw0KKwkJCXdmeF9iaF9yZXF1ZXN0X3R4KHd2aWYtPndkZXYpOw0KKwkJ fQ0KKwkJYnJlYWs7DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2sp Ow0KK30NCisNCit2b2lkIHdmeF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBz dHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAgIGVudW0gc3RhX25vdGlmeV9jbWQgbm90 aWZ5X2NtZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCB3Znhfdmlm ICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCB3Znhf c3RhX3ByaXYgKnN0YV9wcml2ID0gKHN0cnVjdCB3Znhfc3RhX3ByaXYgKikgJnN0YS0+ZHJ2X3By aXY7DQorDQorCXdmeF9wc19ub3RpZnkod3ZpZiwgbm90aWZ5X2NtZCwgc3RhX3ByaXYtPmxpbmtf aWQpOw0KK30NCisNCiBzdGF0aWMgaW50IHdmeF9zZXRfdGltX2ltcGwoc3RydWN0IHdmeF92aWYg Knd2aWYsIGJvb2wgYWlkMF9iaXRfc2V0KQ0KIHsNCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCkBA IC0zMyw4ICsxMjA4LDExIEBAIHN0YXRpYyBpbnQgd2Z4X3NldF90aW1faW1wbChzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgYm9vbCBhaWQwX2JpdF9zZXQpDQogDQogCXNrYiA9IGllZWU4MDIxMV9iZWFj b25fZ2V0X3RpbSh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmLA0KIAkJCQkgICAgICAgJnRpbV9v ZmZzZXQsICZ0aW1fbGVuZ3RoKTsNCi0JaWYgKCFza2IpDQorCWlmICghc2tiKSB7DQorCQlpZiAo IV9fd2Z4X2ZsdXNoKHd2aWYtPndkZXYsIHRydWUpKQ0KKwkJCXdmeF90eF91bmxvY2sod3ZpZi0+ d2Rldik7DQogCQlyZXR1cm4gLUVOT0VOVDsNCisJfQ0KIAl0aW1fcHRyID0gc2tiLT5kYXRhICsg dGltX29mZnNldDsNCiANCiAJaWYgKHRpbV9vZmZzZXQgJiYgdGltX2xlbmd0aCA+PSA2KSB7DQpA QCAtNTYsMTYgKzEyMzQsMzQgQEAgc3RhdGljIGludCB3Znhfc2V0X3RpbV9pbXBsKHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBib29sIGFpZDBfYml0X3NldCkNCiAJcmV0dXJuIDA7DQogfQ0KIA0KK3Zv aWQgd2Z4X3NldF90aW1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgc2V0 X3RpbV93b3JrKTsNCisNCisJd2Z4X3NldF90aW1faW1wbCh3dmlmLCB3dmlmLT5haWQwX2JpdF9z ZXQpOw0KK30NCisNCitpbnQgd2Z4X3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0 cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0KQ0KK3sNCisJc3RydWN0IHdmeF9kZXYg KndkZXYgPSBody0+cHJpdjsNCisJc3RydWN0IHdmeF9zdGFfcHJpdiAqc3RhX2RldiA9IChzdHJ1 Y3Qgd2Z4X3N0YV9wcml2ICopICZzdGEtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBzdGFfZGV2LT52aWZfaWQpOw0KKw0KKwlzY2hlZHVsZV93 b3JrKCZ3dmlmLT5zZXRfdGltX3dvcmspOw0KKwlyZXR1cm4gMDsNCit9DQorDQogc3RhdGljIHZv aWQgd2Z4X21jYXN0X3N0YXJ0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KIHsNCiAJ c3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYs IG1jYXN0X3N0YXJ0X3dvcmspOw0KKwlsb25nIHRtbyA9IHd2aWYtPmR0aW1fcGVyaW9kICogVFVf VE9fSklGRklFUyh3dmlmLT5iZWFjb25faW50ICsgMjApOw0KIA0KIAljYW5jZWxfd29ya19zeW5j KCZ3dmlmLT5tY2FzdF9zdG9wX3dvcmspOw0KIAlpZiAoIXd2aWYtPmFpZDBfYml0X3NldCkgew0K IAkJd2Z4X3R4X2xvY2tfZmx1c2god3ZpZi0+d2Rldik7DQogCQl3Znhfc2V0X3RpbV9pbXBsKHd2 aWYsIHRydWUpOw0KIAkJd3ZpZi0+YWlkMF9iaXRfc2V0ID0gdHJ1ZTsNCi0JCW1vZF90aW1lcigm d3ZpZi0+bWNhc3RfdGltZW91dCwgVFVfVE9fSklGRklFUygxMDAwKSk7DQorCQltb2RfdGltZXIo Jnd2aWYtPm1jYXN0X3RpbWVvdXQsIGppZmZpZXMgKyB0bW8pOw0KIAkJd2Z4X3R4X3VubG9jayh3 dmlmLT53ZGV2KTsNCiAJfQ0KIH0NCkBAIC05NSw2ICsxMjkxLDEzNCBAQCBzdGF0aWMgdm9pZCB3 ZnhfbWNhc3RfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkNCiAJc3Bpbl91bmxvY2tfYmgo Jnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KIH0NCiANCitpbnQgd2Z4X2FtcGR1X2FjdGlvbihzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwN CisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcykNCit7DQorCS8q IEFnZ3JlZ2F0aW9uIGlzIGltcGxlbWVudGVkIGZ1bGx5IGluIGZpcm13YXJlLA0KKwkgKiBpbmNs dWRpbmcgYmxvY2sgYWNrIG5lZ290aWF0aW9uLiBEbyBub3QgYWxsb3cNCisJICogbWFjODAyMTEg c3RhY2sgdG8gZG8gYW55dGhpbmc6IGl0IGludGVyZmVyZXMgd2l0aA0KKwkgKiB0aGUgZmlybXdh cmUuDQorCSAqLw0KKw0KKwkvKiBOb3RlIHRoYXQgd2Ugc3RpbGwgbmVlZCB0aGlzIGZ1bmN0aW9u IHN0dWJiZWQuICovDQorDQorCXJldHVybiAtRU5PVFNVUFA7DQorfQ0KKw0KK3ZvaWQgd2Z4X3N1 c3BlbmRfcmVzdW1lKHN0cnVjdCB3ZnhfdmlmICp3dmlmLA0KKwkJCXN0cnVjdCBoaWZfaW5kX3N1 c3BlbmRfcmVzdW1lX3R4ICphcmcpDQorew0KKwlpZiAoYXJnLT5zdXNwZW5kX3Jlc3VtZV9mbGFn cy5iY19tY19vbmx5KSB7DQorCQlib29sIGNhbmNlbF90bW8gPSBmYWxzZTsNCisNCisJCXNwaW5f bG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorCQlpZiAoIWFyZy0+c3VzcGVuZF9yZXN1 bWVfZmxhZ3MucmVzdW1lKQ0KKwkJCXd2aWYtPm1jYXN0X3R4ID0gZmFsc2U7DQorCQllbHNlDQor CQkJd3ZpZi0+bWNhc3RfdHggPSB3dmlmLT5haWQwX2JpdF9zZXQgJiYgd3ZpZi0+bWNhc3RfYnVm ZmVyZWQ7DQorCQlpZiAod3ZpZi0+bWNhc3RfdHgpIHsNCisJCQljYW5jZWxfdG1vID0gdHJ1ZTsN CisJCQl3ZnhfYmhfcmVxdWVzdF90eCh3dmlmLT53ZGV2KTsNCisJCX0NCisJCXNwaW5fdW5sb2Nr X2JoKCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisJCWlmIChjYW5jZWxfdG1vKQ0KKwkJCWRlbF90 aW1lcl9zeW5jKCZ3dmlmLT5tY2FzdF90aW1lb3V0KTsNCisJfSBlbHNlIGlmIChhcmctPnN1c3Bl bmRfcmVzdW1lX2ZsYWdzLnJlc3VtZSkgew0KKwkJLy8gRklYTUU6IHNob3VsZCBjaGFuZ2UgZWFj aCBzdGF0aW9uIHN0YXR1cyBpbmRlcGVuZGVudGx5DQorCQl3ZnhfcHNfbm90aWZ5KHd2aWYsIFNU QV9OT1RJRllfQVdBS0UsIDApOw0KKwkJd2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7DQor CX0gZWxzZSB7DQorCQkvLyBGSVhNRTogc2hvdWxkIGNoYW5nZSBlYWNoIHN0YXRpb24gc3RhdHVz IGluZGVwZW5kZW50bHkNCisJCXdmeF9wc19ub3RpZnkod3ZpZiwgU1RBX05PVElGWV9TTEVFUCwg MCk7DQorCX0NCit9DQorDQoraW50IHdmeF9hZGRfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodywNCisJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZikNCit7DQor CXJldHVybiAwOw0KK30NCisNCit2b2lkIHdmeF9yZW1vdmVfY2hhbmN0eChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywNCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZikNCit7 DQorfQ0KKw0KK3ZvaWQgd2Z4X2NoYW5nZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LA0KKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mLA0KKwkJCXUzMiBjaGFu Z2VkKQ0KK3sNCit9DQorDQoraW50IHdmeF9hc3NpZ25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkJICAgc3RydWN0IGll ZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9 IChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX2No YW5uZWwgKmNoID0gY29uZi0+ZGVmLmNoYW47DQorDQorCVdBUk4od3ZpZi0+Y2hhbm5lbCwgImNo YW5uZWwgb3ZlcndyaXRlIik7DQorCXd2aWYtPmNoYW5uZWwgPSBjaDsNCisJd3ZpZi0+aHRfaW5m by5jaGFubmVsX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKCZjb25mLT5kZWYpOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCB3ZnhfdW5hc3NpZ25fdmlmX2NoYW5jdHgoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkJICAg ICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpDQorew0KKwlzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qg aWVlZTgwMjExX2NoYW5uZWwgKmNoID0gY29uZi0+ZGVmLmNoYW47DQorDQorCVdBUk4od3ZpZi0+ Y2hhbm5lbCAhPSBjaCwgImNoYW5uZWwgbWlzbWF0Y2giKTsNCisJd3ZpZi0+Y2hhbm5lbCA9IE5V TEw7DQorfQ0KKw0KK2ludCB3ZnhfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIg Y2hhbmdlZCkNCit7DQorCWludCByZXQgPSAwOw0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3 LT5wcml2Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7DQorCXN0 cnVjdCB3ZnhfdmlmICp3dmlmOw0KKw0KKwkvLyBGSVhNRTogSW50ZXJmYWNlIGlkIHNob3VsZCBu b3QgYmVlbiBoYXJkY29kZWQNCisJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCAwKTsNCisJaWYg KCF3dmlmKSB7DQorCQlXQVJOKDEsICJpbnRlcmZhY2UgMCBkb2VzIG5vdCBleGlzdCBhbnltb3Jl Iik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlkb3duKCZ3dmlmLT5zY2FuLmxvY2spOw0KKwlt dXRleF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFf Q09ORl9DSEFOR0VfUE9XRVIpIHsNCisJCXdkZXYtPm91dHB1dF9wb3dlciA9IGNvbmYtPnBvd2Vy X2xldmVsOw0KKwkJaGlmX3NldF9vdXRwdXRfcG93ZXIod3ZpZiwgd2Rldi0+b3V0cHV0X3Bvd2Vy ICogMTApOw0KKwl9DQorDQorCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BT KSB7DQorCQl3dmlmID0gTlVMTDsNCisJCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2 LCB3dmlmKSkgIT0gTlVMTCkgew0KKwkJCW1lbXNldCgmd3ZpZi0+cG93ZXJzYXZlX21vZGUsIDAs IHNpemVvZih3dmlmLT5wb3dlcnNhdmVfbW9kZSkpOw0KKwkJCWlmIChjb25mLT5mbGFncyAmIElF RUU4MDIxMV9DT05GX1BTKSB7DQorCQkJCXd2aWYtPnBvd2Vyc2F2ZV9tb2RlLnBtX21vZGUuZW50 ZXJfcHNtID0gMTsNCisJCQkJaWYgKGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsNCisJ CQkJCXd2aWYtPnBvd2Vyc2F2ZV9tb2RlLnBtX21vZGUuZmFzdF9wc20gPSAxOw0KKwkJCQkJLy8g RmlybXdhcmUgZG9lcyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gMTI4bXMNCisJCQkJCXd2aWYtPnBv d2Vyc2F2ZV9tb2RlLmZhc3RfcHNtX2lkbGVfcGVyaW9kID0NCisJCQkJCQltaW4oY29uZi0+ZHlu YW1pY19wc190aW1lb3V0ICogMiwgMjU1KTsNCisJCQkJfQ0KKwkJCX0NCisJCQlpZiAod3ZpZi0+ c3RhdGUgPT0gV0ZYX1NUQVRFX1NUQSAmJiB3dmlmLT5ic3NfcGFyYW1zLmFpZCkNCisJCQkJd2Z4 X3NldF9wbSh3dmlmLCAmd3ZpZi0+cG93ZXJzYXZlX21vZGUpOw0KKwkJfQ0KKwkJd3ZpZiA9IHdk ZXZfdG9fd3ZpZih3ZGV2LCAwKTsNCisJfQ0KKw0KKwltdXRleF91bmxvY2soJndkZXYtPmNvbmZf bXV0ZXgpOw0KKwl1cCgmd3ZpZi0+c2Nhbi5sb2NrKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQog aW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmKQ0KIHsNCiAJaW50IGk7DQpAQCAtMTM4LDggKzE0NjIsMjIgQEAgaW50 IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgw MjExX3ZpZiAqdmlmKQ0KIAkJZGVmYXVsdF9lZGNhX3BhcmFtc1tJRUVFODAyMTFfQUNfQktdLnF1 ZXVlX2lkID0gSElGX1FVRVVFX0lEX0JFU1RFRkZPUlQ7DQogCX0NCiANCisJdmlmLT5kcml2ZXJf ZmxhZ3MgfD0gSUVFRTgwMjExX1ZJRl9CRUFDT05fRklMVEVSIHwNCisJCQkgICAgIElFRUU4MDIx MV9WSUZfU1VQUE9SVFNfVUFQU0QgfA0KKwkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19D UU1fUlNTSTsNCisNCiAJbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRleCk7DQogDQorCXN3aXRj aCAodmlmLT50eXBlKSB7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoNCisJY2FzZSBO TDgwMjExX0lGVFlQRV9BREhPQzoNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoNCisJCWJyZWFr Ow0KKwlkZWZhdWx0Og0KKwkJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCisJCXJl dHVybiAtRU9QTk9UU1VQUDsNCisJfQ0KKw0KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3 ZGV2LT52aWYpOyBpKyspIHsNCiAJCWlmICghd2Rldi0+dmlmW2ldKSB7DQogCQkJd2Rldi0+dmlm W2ldID0gdmlmOw0KQEAgLTE1MSw2ICsxNDg5LDcgQEAgaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KIAkJbXV0 ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCiAJCXJldHVybiAtRU9QTk9UU1VQUDsNCiAJ fQ0KKwkvLyBGSVhNRTogcHJlZmVyIHVzZSBvZiBjb250YWluZXJfb2YoKSB0byBnZXQgdmlmDQog CXd2aWYtPnZpZiA9IHZpZjsNCiAJd3ZpZi0+d2RldiA9IHdkZXY7DQogDQpAQCAtMTU4LDExICsx NDk3LDE2IEBAIGludCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikNCiAJSU5JVF9ERUxBWUVEX1dPUksoJnd2aWYtPmxp bmtfaWRfZ2Nfd29yaywgd2Z4X2xpbmtfaWRfZ2Nfd29yayk7DQogDQogCXNwaW5fbG9ja19pbml0 KCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisJSU5JVF9XT1JLKCZ3dmlmLT5zZXRfdGltX3dvcmss IHdmeF9zZXRfdGltX3dvcmspOw0KIA0KIAlJTklUX1dPUksoJnd2aWYtPm1jYXN0X3N0YXJ0X3dv cmssIHdmeF9tY2FzdF9zdGFydF93b3JrKTsNCiAJSU5JVF9XT1JLKCZ3dmlmLT5tY2FzdF9zdG9w X3dvcmssIHdmeF9tY2FzdF9zdG9wX3dvcmspOw0KIAl0aW1lcl9zZXR1cCgmd3ZpZi0+bWNhc3Rf dGltZW91dCwgd2Z4X21jYXN0X3RpbWVvdXQsIDApOw0KIA0KKwl3dmlmLT5zZXRic3NwYXJhbXNf ZG9uZSA9IGZhbHNlOw0KKwltdXRleF9pbml0KCZ3dmlmLT5ic3NfbG9zc19sb2NrKTsNCisJSU5J VF9ERUxBWUVEX1dPUksoJnd2aWYtPmJzc19sb3NzX3dvcmssIHdmeF9ic3NfbG9zc193b3JrKTsN CisNCiAJd3ZpZi0+d2VwX2RlZmF1bHRfa2V5X2lkID0gLTE7DQogCUlOSVRfV09SSygmd3ZpZi0+ d2VwX2tleV93b3JrLCB3Znhfd2VwX2tleV93b3JrKTsNCiANCkBAIC0xNzAsMjIgKzE1MTQsMTE1 IEBAIGludCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZikNCiAJSU5JVF9XT1JLKCZ3dmlmLT5zY2FuLndvcmssIHdmeF9z Y2FuX3dvcmspOw0KIAlJTklUX0RFTEFZRURfV09SSygmd3ZpZi0+c2Nhbi50aW1lb3V0LCB3Znhf c2Nhbl90aW1lb3V0KTsNCiANCisJc3Bpbl9sb2NrX2luaXQoJnd2aWYtPmV2ZW50X3F1ZXVlX2xv Y2spOw0KKwlJTklUX0xJU1RfSEVBRCgmd3ZpZi0+ZXZlbnRfcXVldWUpOw0KKwlJTklUX1dPUkso Jnd2aWYtPmV2ZW50X2hhbmRsZXJfd29yaywgd2Z4X2V2ZW50X2hhbmRsZXJfd29yayk7DQorDQor CWluaXRfY29tcGxldGlvbigmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOw0KKwljb21wbGV0 ZSgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOw0KKwlJTklUX1dPUksoJnd2aWYtPnNldF9i ZWFjb25fd2FrZXVwX3BlcmlvZF93b3JrLCB3Znhfc2V0X2JlYWNvbl93YWtldXBfcGVyaW9kX3dv cmspOw0KKwlJTklUX1dPUksoJnd2aWYtPnVwZGF0ZV9maWx0ZXJpbmdfd29yaywgd2Z4X3VwZGF0 ZV9maWx0ZXJpbmdfd29yayk7DQorCUlOSVRfV09SSygmd3ZpZi0+YnNzX3BhcmFtc193b3JrLCB3 ZnhfYnNzX3BhcmFtc193b3JrKTsNCisJSU5JVF9XT1JLKCZ3dmlmLT5zZXRfY3RzX3dvcmssIHdm eF9zZXRfY3RzX3dvcmspOw0KKwlJTklUX1dPUksoJnd2aWYtPnVuam9pbl93b3JrLCB3ZnhfdW5q b2luX3dvcmspOw0KKw0KIAltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOw0KKw0KKwlo aWZfc2V0X21hY2FkZHIod3ZpZiwgdmlmLT5hZGRyKTsNCiAJQlVHX09OKEFSUkFZX1NJWkUoZGVm YXVsdF9lZGNhX3BhcmFtcykgIT0gQVJSQVlfU0laRSh3dmlmLT5lZGNhLnBhcmFtcykpOw0KLQlm b3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykNCisJZm9yIChpID0gMDsgaSA8 IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspIHsNCiAJCW1lbWNweSgmd3ZpZi0+ZWRjYS5wYXJhbXNb aV0sICZkZWZhdWx0X2VkY2FfcGFyYW1zW2ldLCBzaXplb2YoZGVmYXVsdF9lZGNhX3BhcmFtc1tp XSkpOw0KKwkJd3ZpZi0+ZWRjYS51YXBzZF9lbmFibGVbaV0gPSBmYWxzZTsNCisJCWhpZl9zZXRf ZWRjYV9xdWV1ZV9wYXJhbXMod3ZpZiwgJnd2aWYtPmVkY2EucGFyYW1zW2ldKTsNCisJfQ0KKwl3 Znhfc2V0X3VhcHNkX3BhcmFtKHd2aWYsICZ3dmlmLT5lZGNhKTsNCisNCiAJdHhfcG9saWN5X2lu aXQod3ZpZik7DQorCXd2aWYgPSBOVUxMOw0KKwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUo d2Rldiwgd3ZpZikpICE9IE5VTEwpIHsNCisJCS8vIENvbWJvIG1vZGUgZG9lcyBub3Qgc3VwcG9y dCBCbG9jayBBY2tzLiBXZSBjYW4gcmUtZW5hYmxlIHRoZW0NCisJCWlmICh3dmlmX2NvdW50KHdk ZXYpID09IDEpDQorCQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYp Ow0KKwkJZWxzZQ0KKwkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweDAwLCAweDAw KTsNCisJCS8vIENvbWJvIGZvcmNlIHBvd2Vyc2F2ZSBtb2RlLiBXZSBjYW4gcmUtZW5hYmxlIGl0 IG5vdw0KKwkJd2Z4X3NldF9wbSh3dmlmLCAmd3ZpZi0+cG93ZXJzYXZlX21vZGUpOw0KKwl9DQog CXJldHVybiAwOw0KIH0NCiANCiB2b2lkIHdmeF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LA0KIAkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikNCiB7DQorCXN0 cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQogCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0g KHN0cnVjdCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3ByaXY7DQorCWludCBpOw0KIA0KKwkvLyBJZiBz Y2FuIGlzIGluIHByb2dyZXNzLCBzdG9wIGl0DQorCXdoaWxlIChkb3duX3RyeWxvY2soJnd2aWYt PnNjYW4ubG9jaykpDQorCQlzY2hlZHVsZSgpOw0KKwl1cCgmd3ZpZi0+c2Nhbi5sb2NrKTsNCisJ d2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSwg bXNlY3NfdG9famlmZmllcygzMDApKTsNCisNCisJbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRl eCk7DQorCXN3aXRjaCAod3ZpZi0+c3RhdGUpIHsNCisJY2FzZSBXRlhfU1RBVEVfUFJFX1NUQToN CisJY2FzZSBXRlhfU1RBVEVfU1RBOg0KKwljYXNlIFdGWF9TVEFURV9JQlNTOg0KKwkJd2Z4X3R4 X2xvY2tfZmx1c2god2Rldik7DQorCQlpZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPnVuam9pbl93 b3JrKSkNCisJCQl3ZnhfdHhfdW5sb2NrKHdkZXYpOw0KKwkJYnJlYWs7DQorCWNhc2UgV0ZYX1NU QVRFX0FQOg0KKwkJZm9yIChpID0gMDsgd3ZpZi0+bGlua19pZF9tYXA7ICsraSkgew0KKwkJCWlm ICh3dmlmLT5saW5rX2lkX21hcCAmIEJJVChpKSkgew0KKwkJCQl3ZnhfdW5tYXBfbGluayh3dmlm LCBpKTsNCisJCQkJd3ZpZi0+bGlua19pZF9tYXAgJj0gfkJJVChpKTsNCisJCQl9DQorCQl9DQor CQltZW1zZXQod3ZpZi0+bGlua19pZF9kYiwgMCwgc2l6ZW9mKHd2aWYtPmxpbmtfaWRfZGIpKTsN CisJCXd2aWYtPnN0YV9hc2xlZXBfbWFzayA9IDA7DQorCQl3dmlmLT5lbmFibGVfYmVhY29uID0g ZmFsc2U7DQorCQl3dmlmLT5tY2FzdF90eCA9IGZhbHNlOw0KKwkJd3ZpZi0+YWlkMF9iaXRfc2V0 ID0gZmFsc2U7DQorCQl3dmlmLT5tY2FzdF9idWZmZXJlZCA9IGZhbHNlOw0KKwkJd3ZpZi0+cHNw b2xsX21hc2sgPSAwOw0KKwkJLyogcmVzZXQubGlua19pZCA9IDA7ICovDQorCQloaWZfcmVzZXQo d3ZpZiwgZmFsc2UpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlicmVhazsNCisJfQ0KKw0K Kwl3dmlmLT5zdGF0ZSA9IFdGWF9TVEFURV9QQVNTSVZFOw0KIAl3ZnhfdHhfcXVldWVzX3dhaXRf ZW1wdHlfdmlmKHd2aWYpOw0KKwl3ZnhfdHhfdW5sb2NrKHdkZXYpOw0KKw0KKwkvKiBGSVhNRTog SW4gYWRkIHRvIHJlc2V0IE1BQyBhZGRyZXNzLCB0cnkgdG8gcmVzZXQgaW50ZXJmYWNlICovDQor CWhpZl9zZXRfbWFjYWRkcih3dmlmLCBOVUxMKTsNCisNCisJY2FuY2VsX2RlbGF5ZWRfd29ya19z eW5jKCZ3dmlmLT5zY2FuLnRpbWVvdXQpOw0KKw0KKwl3ZnhfY3FtX2Jzc2xvc3Nfc20od3ZpZiwg MCwgMCwgMCk7DQorCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPnVuam9pbl93b3JrKTsNCiAJY2Fu Y2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3dmlmLT5saW5rX2lkX2djX3dvcmspOw0KIAlkZWxfdGlt ZXJfc3luYygmd3ZpZi0+bWNhc3RfdGltZW91dCk7DQorCXdmeF9mcmVlX2V2ZW50X3F1ZXVlKHd2 aWYpOw0KKw0KKwl3ZGV2LT52aWZbd3ZpZi0+aWRdID0gTlVMTDsNCisJd3ZpZi0+dmlmID0gTlVM TDsNCisNCisJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsNCisJd3ZpZiA9IE5VTEw7 DQorCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgew0K KwkJLy8gQ29tYm8gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IEJsb2NrIEFja3MuIFdlIGNhbiByZS1l bmFibGUgdGhlbQ0KKwkJaWYgKHd2aWZfY291bnQod2RldikgPT0gMSkNCisJCQloaWZfc2V0X2Js b2NrX2Fja19wb2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7DQorCQllbHNlDQorCQkJaGlmX3NldF9i bG9ja19hY2tfcG9saWN5KHd2aWYsIDB4MDAsIDB4MDApOw0KKwkJLy8gQ29tYm8gZm9yY2UgcG93 ZXJzYXZlIG1vZGUuIFdlIGNhbiByZS1lbmFibGUgaXQgbm93DQorCQl3Znhfc2V0X3BtKHd2aWYs ICZ3dmlmLT5wb3dlcnNhdmVfbW9kZSk7DQorCX0NCiB9DQogDQogaW50IHdmeF9zdGFydChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodykNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0 YS5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaA0KaW5kZXggZGQxYjZiM2ZjMmYxLi4zMDdl ZDAxOTYxMTAgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oDQorKysgYi9k cml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oDQpAQCAtMTIsMTQgKzEyLDQwIEBADQogDQogI2luY2x1 ZGUgImhpZl9hcGlfY21kLmgiDQogDQorc3RydWN0IHdmeF9kZXY7DQogc3RydWN0IHdmeF92aWY7 DQogDQorZW51bSB3Znhfc3RhdGUgew0KKwlXRlhfU1RBVEVfUEFTU0lWRSA9IDAsDQorCVdGWF9T VEFURV9QUkVfU1RBLA0KKwlXRlhfU1RBVEVfU1RBLA0KKwlXRlhfU1RBVEVfSUJTUywNCisJV0ZY X1NUQVRFX0FQLA0KK307DQorDQorc3RydWN0IHdmeF9odF9pbmZvIHsNCisJc3RydWN0IGllZWU4 MDIxMV9zdGFfaHRfY2FwIGh0X2NhcDsNCisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFu bmVsX3R5cGU7DQorCXVpbnQxNl90IG9wZXJhdGlvbl9tb2RlOw0KK307DQorDQorc3RydWN0IHdm eF9oaWZfZXZlbnQgew0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7DQorCXN0cnVjdCBoaWZfaW5k X2V2ZW50IGV2dDsNCit9Ow0KKw0KIHN0cnVjdCB3ZnhfZWRjYV9wYXJhbXMgew0KIAkvKiBOT1RF OiBpbmRleCBpcyBhIGxpbnV4IHF1ZXVlIGlkLiAqLw0KIAlzdHJ1Y3QgaGlmX3JlcV9lZGNhX3F1 ZXVlX3BhcmFtcyBwYXJhbXNbSUVFRTgwMjExX05VTV9BQ1NdOw0KIAlib29sIHVhcHNkX2VuYWJs ZVtJRUVFODAyMTFfTlVNX0FDU107DQogfTsNCiANCitzdHJ1Y3Qgd2Z4X2dycF9hZGRyX3RhYmxl IHsNCisJYm9vbCBlbmFibGU7DQorCWludCBudW1fYWRkcmVzc2VzOw0KKwl1OCBhZGRyZXNzX2xp c3RbOF1bRVRIX0FMRU5dOw0KK307DQorDQogc3RydWN0IHdmeF9zdGFfcHJpdiB7DQogCWludCBs aW5rX2lkOw0KIAlpbnQgdmlmX2lkOw0KQEAgLTI4LDkgKzU0LDQ4IEBAIHN0cnVjdCB3Znhfc3Rh X3ByaXYgew0KIC8vIG1hYzgwMjExIGludGVyZmFjZQ0KIGludCB3Znhfc3RhcnQoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcpOw0KIHZvaWQgd2Z4X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcp Ow0KK2ludCB3ZnhfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7 DQoraW50IHdmeF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMy IHZhbHVlKTsNCit1NjQgd2Z4X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LA0KKwkJCSAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jX2xpc3QpOw0KK3ZvaWQg d2Z4X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHVuc2lnbmVkIGlu dCBjaGFuZ2VkX2ZsYWdzLA0KKwkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IHVu dXNlZCk7DQorDQogaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsNCiB2b2lkIHdmeF9yZW1vdmVfaW50ZXJmYWNl KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsNCit2 b2lkIHdmeF9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwNCisJICAgICAgIHUzMiBxdWV1ZXMsIGJvb2wgZHJvcCk7DQoraW50IHdmeF9jb25m X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0K KwkJdTE2IHF1ZXVlLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFy YW1zKTsNCit2b2lkIHdmeF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3Nf Y29uZiAqaW5mbywgdTMyIGNoYW5nZWQpOw0KK2ludCB3Znhfc3RhX2FkZChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCXN0cnVjdCBpZWVlODAy MTFfc3RhICpzdGEpOw0KK2ludCB3Znhfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3Rh ICpzdGEpOw0KK3ZvaWQgd2Z4X3N0YV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0 cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICAgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQs IHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOw0KK2ludCB3Znhfc2V0X3RpbShzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBzZXQpOw0KK2lu dCB3ZnhfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgw MjExX3ZpZiAqdmlmLA0KKwkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2FtcGR1X3BhcmFtcyAqcGFy YW1zKTsNCitpbnQgd2Z4X2FkZF9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJ ICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKTsNCit2b2lkIHdmeF9yZW1v dmVfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQlzdHJ1Y3QgaWVlZTgwMjEx X2NoYW5jdHhfY29uZiAqY29uZik7DQordm9pZCB3ZnhfY2hhbmdlX2NoYW5jdHgoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsDQorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYs IHUzMiBjaGFuZ2VkKTsNCitpbnQgd2Z4X2Fzc2lnbl92aWZfY2hhbmN0eChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgICBzdHJ1Y3QgaWVl ZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZik7DQordm9pZCB3ZnhfdW5hc3NpZ25fdmlmX2NoYW5j dHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQor CQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpOw0KIA0KKy8vIFdT TSBDYWxsYmFja3MNCit2b2lkIHdmeF9zdXNwZW5kX3Jlc3VtZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp Ziwgc3RydWN0IGhpZl9pbmRfc3VzcGVuZF9yZXN1bWVfdHggKmFyZyk7DQorDQorLy8gT3RoZXIg SGVscGVycw0KK3ZvaWQgd2Z4X2NxbV9ic3Nsb3NzX3NtKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBp bnQgaW5pdCwgaW50IGdvb2QsIGludCBiYWQpOw0KK3ZvaWQgd2Z4X3VwZGF0ZV9maWx0ZXJpbmco c3RydWN0IHdmeF92aWYgKnd2aWYpOw0KK2ludCB3Znhfc2V0X3BtKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBjb25zdCBzdHJ1Y3QgaGlmX3JlcV9zZXRfcG1fbW9kZSAqYXJnKTsNCiBpbnQgd2Z4X2Z3 ZF9wcm9iZV9yZXEoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKTsNCiANCiAjZW5k aWYgLyogV0ZYX1NUQV9IICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC93Zngu aCBiL2RyaXZlcnMvc3RhZ2luZy93Zngvd2Z4LmgNCmluZGV4IGE4NmRkZmFlZDgyNS4uNDg5ODM2 ODM3YjBhIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC93ZnguaA0KKysrIGIvZHJp dmVycy9zdGFnaW5nL3dmeC93ZnguaA0KQEAgLTExLDYgKzExLDggQEANCiAjZGVmaW5lIFdGWF9I DQogDQogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4NCisjaW5jbHVkZSA8bGludXgvd29y a3F1ZXVlLmg+DQorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+DQogI2luY2x1ZGUgPG5ldC9tYWM4 MDIxMS5oPg0KIA0KICNpbmNsdWRlICJiaC5oIg0KQEAgLTYxLDggKzYzLDE1IEBAIHN0cnVjdCB3 ZnhfZGV2IHsNCiBzdHJ1Y3Qgd2Z4X3ZpZiB7DQogCXN0cnVjdCB3ZnhfZGV2CQkqd2RldjsNCiAJ c3RydWN0IGllZWU4MDIxMV92aWYJKnZpZjsNCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpj aGFubmVsOw0KIAlpbnQJCQlpZDsNCisJZW51bSB3Znhfc3RhdGUJCXN0YXRlOw0KIA0KKwlpbnQJ CQlkZWxheWVkX2xpbmtfbG9zczsNCisJaW50CQkJYnNzX2xvc3Nfc3RhdGU7DQorCXUzMgkJCWJz c19sb3NzX2NvbmZpcm1faWQ7DQorCXN0cnVjdCBtdXRleAkJYnNzX2xvc3NfbG9jazsNCisJc3Ry dWN0IGRlbGF5ZWRfd29yawlic3NfbG9zc193b3JrOw0KIA0KIAl1MzIJCQlsaW5rX2lkX21hcDsN CiAJc3RydWN0IHdmeF9saW5rX2VudHJ5CWxpbmtfaWRfZGJbV0ZYX01BWF9TVEFfSU5fQVBfTU9E RV07DQpAQCAtNzIsNiArODEsNyBAQCBzdHJ1Y3Qgd2Z4X3ZpZiB7DQogCWJvb2wJCQlhaWQwX2Jp dF9zZXQ7DQogCWJvb2wJCQltY2FzdF90eDsNCiAJYm9vbAkJCW1jYXN0X2J1ZmZlcmVkOw0KKwlz dHJ1Y3Qgd2Z4X2dycF9hZGRyX3RhYmxlIG1jYXN0X2ZpbHRlcjsNCiAJc3RydWN0IHRpbWVyX2xp c3QJbWNhc3RfdGltZW91dDsNCiAJc3RydWN0IHdvcmtfc3RydWN0CW1jYXN0X3N0YXJ0X3dvcms7 DQogCXN0cnVjdCB3b3JrX3N0cnVjdAltY2FzdF9zdG9wX3dvcms7DQpAQCAtODYsMTMgKzk2LDQw IEBAIHN0cnVjdCB3ZnhfdmlmIHsNCiAJdTMyCQkJc3RhX2FzbGVlcF9tYXNrOw0KIAl1MzIJCQlw c3BvbGxfbWFzazsNCiAJc3BpbmxvY2tfdAkJcHNfc3RhdGVfbG9jazsNCisJc3RydWN0IHdvcmtf c3RydWN0CXNldF90aW1fd29yazsNCisNCisJaW50CQkJZHRpbV9wZXJpb2Q7DQorCWludAkJCWJl YWNvbl9pbnQ7DQorCWJvb2wJCQllbmFibGVfYmVhY29uOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJ c2V0X2JlYWNvbl93YWtldXBfcGVyaW9kX3dvcms7DQogDQogCWJvb2wJCQlmaWx0ZXJfYnNzaWQ7 DQogCWJvb2wJCQlmd2RfcHJvYmVfcmVxOw0KKwlib29sCQkJZGlzYWJsZV9iZWFjb25fZmlsdGVy Ow0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdXBkYXRlX2ZpbHRlcmluZ193b3JrOw0KIA0KKwl1MzIJ CQllcnBfaW5mbzsNCisJaW50CQkJY3FtX3Jzc2lfdGhvbGQ7DQorCWJvb2wJCQlzZXRic3NwYXJh bXNfZG9uZTsNCisJc3RydWN0IHdmeF9odF9pbmZvCWh0X2luZm87DQogCXN0cnVjdCB3ZnhfZWRj YV9wYXJhbXMJZWRjYTsNCisJc3RydWN0IGhpZl9taWJfc2V0X3VhcHNkX2luZm9ybWF0aW9uIHVh cHNkX2luZm87DQorCXN0cnVjdCBoaWZfcmVxX3NldF9ic3NfcGFyYW1zIGJzc19wYXJhbXM7DQor CXN0cnVjdCB3b3JrX3N0cnVjdAlic3NfcGFyYW1zX3dvcms7DQorCXN0cnVjdCB3b3JrX3N0cnVj dAlzZXRfY3RzX3dvcms7DQorDQorCWludAkJCWpvaW5fY29tcGxldGVfc3RhdHVzOw0KKwlib29s CQkJZGVsYXllZF91bmpvaW47DQorCXN0cnVjdCB3b3JrX3N0cnVjdAl1bmpvaW5fd29yazsNCiAN CiAJc3RydWN0IHdmeF9zY2FuCQlzY2FuOw0KKw0KKwlzdHJ1Y3QgaGlmX3JlcV9zZXRfcG1fbW9k ZSBwb3dlcnNhdmVfbW9kZTsNCisJc3RydWN0IGNvbXBsZXRpb24Jc2V0X3BtX21vZGVfY29tcGxl dGU7DQorDQorCXN0cnVjdCBsaXN0X2hlYWQJZXZlbnRfcXVldWU7DQorCXNwaW5sb2NrX3QJCWV2 ZW50X3F1ZXVlX2xvY2s7DQorCXN0cnVjdCB3b3JrX3N0cnVjdAlldmVudF9oYW5kbGVyX3dvcms7 DQogfTsNCiANCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB3ZnhfdmlmICp3ZGV2X3RvX3d2aWYoc3Ry dWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQpDQpAQCAtMTI2LDYgKzE2MywyMCBAQCBzdGF0 aWMgaW5saW5lIHN0cnVjdCB3ZnhfdmlmICp3dmlmX2l0ZXJhdGUoc3RydWN0IHdmeF9kZXYgKndk ZXYsIHN0cnVjdCB3ZnhfdmlmDQogCXJldHVybiBOVUxMOw0KIH0NCiANCitzdGF0aWMgaW5saW5l IGludCB3dmlmX2NvdW50KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KK3sNCisJaW50IGk7DQorCWlu dCByZXQgPSAwOw0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsNCisNCisJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUod2Rldi0+dmlmKTsgaSsrKSB7DQorCQl3dmlmID0gd2Rldl90b193dmlmKHdk ZXYsIGkpOw0KKwkJaWYgKHd2aWYpDQorCQkJcmV0Kys7DQorCX0NCisJcmV0dXJuIHJldDsNCit9 DQorDQogc3RhdGljIGlubGluZSB2b2lkIG1lbXJldmVyc2UodWludDhfdCAqc3JjLCB1aW50OF90 IGxlbmd0aCkNCiB7DQogCXVpbnQ4X3QgKmxvID0gc3JjOw0KLS0gDQoyLjIwLjENCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRldmVsIG1haWxpbmcgbGlz dApkZXZlbEBsaW51eGRyaXZlcnByb2plY3Qub3JnCmh0dHA6Ly9kcml2ZXJkZXYubGludXhkcml2 ZXJwcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaXZlcmRldi1kZXZlbAo=