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=-12.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,UNWANTED_LANGUAGE_BODY,URIBL_BLOCKED,USER_AGENT_GIT 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 37B7AC433E0 for ; Tue, 30 Jun 2020 06:22:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 033B920775 for ; Tue, 30 Jun 2020 06:22:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="ajc64+Ki" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730030AbgF3GWx (ORCPT ); Tue, 30 Jun 2020 02:22:53 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:53950 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725845AbgF3GWw (ORCPT ); Tue, 30 Jun 2020 02:22:52 -0400 X-UUID: fc85ecf3d97049f18d06b9297ca1e819-20200630 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=y3zMql/CesFnZ2eKS8O9ihaCEIxLgThBXiaZmKt2NpM=; b=ajc64+KikntsvKtcmYN1WfKXoTqNl5tZMTTQBs9Hnc1k87gAJfEMRJyldqVv9TZ7ruYppjeCbv3uqNUQEcHLqnpJO+qv8m2PQc6xH8dFFqbLoy9+YrJbw3WCXlYekssDsiIHxX465wZ5wlWLJ3e+vhDyV7QgnUSvp1XTKMKfg70=; X-UUID: fc85ecf3d97049f18d06b9297ca1e819-20200630 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1244522108; Tue, 30 Jun 2020 14:22:38 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs02n2.mediatek.inc (172.21.101.101) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 30 Jun 2020 14:22:35 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 30 Jun 2020 14:22:36 +0800 From: Dongchun Zhu To: , , , , , , , , , , CC: , , , , , , , , Subject: [PATCH V9 2/2] media: i2c: dw9768: Add DW9768 VCM driver Date: Tue, 30 Jun 2020 14:22:11 +0800 Message-ID: <20200630062211.22988-3-dongchun.zhu@mediatek.com> X-Mailer: git-send-email 2.9.2 In-Reply-To: <20200630062211.22988-1-dongchun.zhu@mediatek.com> References: <20200630062211.22988-1-dongchun.zhu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-SNTS-SMTP: 364FE011BD8D32CD642FAB6ECB9974397D3EE8F896F05C017B8AFB7FC6C6D5742000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org QWRkIGEgVjRMMiBzdWItZGV2aWNlIGRyaXZlciBmb3IgRFc5NzY4IHZvaWNlIGNvaWwgbW90b3Is DQpwcm92aWRpbmcgY29udHJvbCB0byBzZXQgdGhlIGRlc2lyZWQgZm9jdXMgdmlhIElJQyBzZXJp YWwgaW50ZXJmYWNlLg0KDQpTaWduZWQtb2ZmLWJ5OiBEb25nY2h1biBaaHUgPGRvbmdjaHVuLnpo dUBtZWRpYXRlay5jb20+DQotLS0NCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICB8ICAgMSAr DQogZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZyAgfCAgMTIgKw0KIGRyaXZlcnMvbWVkaWEvaTJj L01ha2VmaWxlIHwgICAxICsNCiBkcml2ZXJzL21lZGlhL2kyYy9kdzk3NjguYyB8IDU1NCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiA0IGZpbGVzIGNoYW5n ZWQsIDU2OCBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEv aTJjL2R3OTc2OC5jDQoNCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTDQpp bmRleCA2MjY5MGM0Li4zNWIzZGFiIDEwMDY0NA0KLS0tIGEvTUFJTlRBSU5FUlMNCisrKyBiL01B SU5UQUlORVJTDQpAQCAtNTIyMSw2ICs1MjIxLDcgQEAgTDoJbGludXgtbWVkaWFAdmdlci5rZXJu ZWwub3JnDQogUzoJTWFpbnRhaW5lZA0KIFQ6CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90 cmVlLmdpdA0KIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS9pMmMv ZG9uZ3dvb24sZHc5NzY4LnlhbWwNCitGOglkcml2ZXJzL21lZGlhL2kyYy9kdzk3NjguYw0KIA0K IERPTkdXT09OIERXOTgwNyBMRU5TIFZPSUNFIENPSUwgRFJJVkVSDQogTToJU2FrYXJpIEFpbHVz IDxzYWthcmkuYWlsdXNAbGludXguaW50ZWwuY29tPg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVk aWEvaTJjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnDQppbmRleCBkYTExMDM2 Li45MzMzNzFmIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KKysrIGIv ZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZw0KQEAgLTEyNTMsNiArMTI1MywxOCBAQCBjb25maWcg VklERU9fRFc5NzE0DQogCSAgY2FwYWJpbGl0eS4gVGhpcyBpcyBkZXNpZ25lZCBmb3IgbGluZWFy IGNvbnRyb2wgb2YNCiAJICB2b2ljZSBjb2lsIG1vdG9ycywgY29udHJvbGxlZCB2aWEgSTJDIHNl cmlhbCBpbnRlcmZhY2UuDQogDQorY29uZmlnIFZJREVPX0RXOTc2OA0KKwl0cmlzdGF0ZSAiRFc5 NzY4IGxlbnMgdm9pY2UgY29pbCBzdXBwb3J0Ig0KKwlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19W NEwyDQorCXNlbGVjdCBNRURJQV9DT05UUk9MTEVSDQorCXNlbGVjdCBWSURFT19WNEwyX1NVQkRF Vl9BUEkNCisJc2VsZWN0IFY0TDJfRldOT0RFDQorCWhlbHANCisJICBUaGlzIGlzIGEgZHJpdmVy IGZvciB0aGUgRFc5NzY4IGNhbWVyYSBsZW5zIHZvaWNlIGNvaWwuDQorCSAgRFc5NzY4IGlzIGEg MTAgYml0IERBQyB3aXRoIDEwMG1BIG91dHB1dCBjdXJyZW50IHNpbmsNCisJICBjYXBhYmlsaXR5 LiBUaGlzIGlzIGRlc2lnbmVkIGZvciBsaW5lYXIgY29udHJvbCBvZg0KKwkgIHZvaWNlIGNvaWwg bW90b3JzLCBjb250cm9sbGVkIHZpYSBJMkMgc2VyaWFsIGludGVyZmFjZS4NCisNCiBjb25maWcg VklERU9fRFc5ODA3X1ZDTQ0KIAl0cmlzdGF0ZSAiRFc5ODA3IGxlbnMgdm9pY2UgY29pbCBzdXBw b3J0Ig0KIAlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19WNEwyDQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZWRpYS9pMmMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQ0KaW5kZXgg OTkzYWNhYi4uMzNhZDQzNSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxl DQorKysgYi9kcml2ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQ0KQEAgLTI0LDYgKzI0LDcgQEAgb2Jq LSQoQ09ORklHX1ZJREVPX1NBQTY3NTJIUykgKz0gc2FhNjc1MmhzLm8NCiBvYmotJChDT05GSUdf VklERU9fQUQ1ODIwKSAgKz0gYWQ1ODIwLm8NCiBvYmotJChDT05GSUdfVklERU9fQUs3Mzc1KSAg Kz0gYWs3Mzc1Lm8NCiBvYmotJChDT05GSUdfVklERU9fRFc5NzE0KSAgKz0gZHc5NzE0Lm8NCitv YmotJChDT05GSUdfVklERU9fRFc5NzY4KSAgKz0gZHc5NzY4Lm8NCiBvYmotJChDT05GSUdfVklE RU9fRFc5ODA3X1ZDTSkgICs9IGR3OTgwNy12Y20ubw0KIG9iai0kKENPTkZJR19WSURFT19BRFY3 MTcwKSArPSBhZHY3MTcwLm8NCiBvYmotJChDT05GSUdfVklERU9fQURWNzE3NSkgKz0gYWR2NzE3 NS5vDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvZHc5NzY4LmMgYi9kcml2ZXJzL21l ZGlhL2kyYy9kdzk3NjguYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjQ1 Y2RkOTINCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL2R3OTc2OC5jDQpA QCAtMCwwICsxLDU1NCBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQor Ly8gQ29weXJpZ2h0IChjKSAyMDIwIE1lZGlhVGVrIEluYy4NCisNCisjaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4NCisjaW5jbHVkZSA8bGludXgvaTJjLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Jl Z3VsYXRvci9jb25zdW1lci5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWFzeW5jLmg+DQorI2lu Y2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2Uu aD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRs Mi1zdWJkZXYuaD4NCisNCisjZGVmaW5lIERXOTc2OF9OQU1FCQkJCSJkdzk3NjgiDQorI2RlZmlu ZSBEVzk3NjhfTUFYX0ZPQ1VTX1BPUwkJCSgxMDI0IC0gMSkNCisvKg0KKyAqIFRoaXMgc2V0cyB0 aGUgbWluaW11bSBncmFudWxhcml0eSBmb3IgdGhlIGZvY3VzIHBvc2l0aW9ucy4NCisgKiBBIHZh bHVlIG9mIDEgZ2l2ZXMgbWF4aW11bSBhY2N1cmFjeSBmb3IgYSBkZXNpcmVkIGZvY3VzIHBvc2l0 aW9uDQorICovDQorI2RlZmluZSBEVzk3NjhfRk9DVVNfU1RFUFMJCQkxDQorDQorLyoNCisgKiBS aW5nIGNvbnRyb2wgYW5kIFBvd2VyIGNvbnRyb2wgcmVnaXN0ZXINCisgKiBCaXRbMV0gUklOR19F Tg0KKyAqIDA6IERpcmVjdCBtb2RlDQorICogMTogQUFDIG1vZGUgKHJpbmdpbmcgY29udHJvbCBt b2RlKQ0KKyAqIEJpdFswXSBQRA0KKyAqIDA6IE5vcm1hbCBvcGVyYXRpb24gbW9kZQ0KKyAqIDE6 IFBvd2VyIGRvd24gbW9kZQ0KKyAqIERXOTc2OCByZXF1aXJlcyB3YWl0aW5nIHRpbWUgb2YgVG9w ciBhZnRlciBQRCByZXNldCB0YWtlcyBwbGFjZS4NCisgKi8NCisjZGVmaW5lIERXOTc2OF9SSU5H X1BEX0NPTlRST0xfUkVHCQkweDAyDQorI2RlZmluZSBEVzk3NjhfUERfTU9ERV9PRkYJCQkweDAw DQorI2RlZmluZSBEVzk3NjhfUERfTU9ERV9FTgkJCUJJVCgwKQ0KKyNkZWZpbmUgRFc5NzY4X0FB Q19NT0RFX0VOCQkJQklUKDEpDQorDQorLyoNCisgKiBEVzk3Njggc2VwYXJhdGVzIHR3byByZWdp c3RlcnMgdG8gY29udHJvbCB0aGUgVkNNIHBvc2l0aW9uLg0KKyAqIE9uZSBmb3IgTVNCIHZhbHVl LCBhbm90aGVyIGlzIExTQiB2YWx1ZS4NCisgKiBEQUNfTVNCOiBEWzk6OF0gKEFERDogMHgwMykN CisgKiBEQUNfTFNCOiBEWzc6MF0gKEFERDogMHgwNCkNCisgKiBEWzk6MF0gREFDIGRhdGEgaW5w dXQ6IHBvc2l0aXZlIG91dHB1dCBjdXJyZW50ID0gRFs5OjBdIC8gMTAyMyAqIDEwMFttQV0NCisg Ki8NCisjZGVmaW5lIERXOTc2OF9NU0JfQUREUgkJCQkweDAzDQorI2RlZmluZSBEVzk3NjhfTFNC X0FERFIJCQkJMHgwNA0KKyNkZWZpbmUgRFc5NzY4X1NUQVRVU19BRERSCQkJMHgwNQ0KKw0KKy8q DQorICogQUFDIG1vZGUgY29udHJvbCAmIHByZXNjYWxlIHJlZ2lzdGVyDQorICogQml0Wzc6NV0g TmFtZWx5IEFDWzI6MF0sIGRlY2lkZSB0aGUgVkNNIG1vZGUgYW5kIG9wZXJhdGlvbiB0aW1lLg0K KyAqIDAwMSBBQUMyIDAuNDggeCBUdmliDQorICogMDEwIEFBQzMgMC43MCB4IFR2aWINCisgKiAw MTEgQUFDNCAwLjc1IHggVHZpYg0KKyAqIDEwMSBBQUM4IDEuMTMgeCBUdmliDQorICogQml0WzI6 MF0gTmFtZWx5IFBSRVNDWzI6MF0sIHNldCB0aGUgaW50ZXJuYWwgY2xvY2sgZGl2aWRpbmcgcmF0 ZSBhcyBmb2xsb3cuDQorICogMDAwIDINCisgKiAwMDEgMQ0KKyAqIDAxMCAxLzINCisgKiAwMTEg MS80DQorICogMTAwIDgNCisgKiAxMDEgNA0KKyAqLw0KKyNkZWZpbmUgRFc5NzY4X0FBQ19QUkVT Q19SRUcJCQkweDA2DQorI2RlZmluZSBEVzk3NjhfQUFDX01PREVfU0VMX01BU0sJCUdFTk1BU0so NywgNSkNCisjZGVmaW5lIERXOTc2OF9DTE9DS19QUkVfU0NBTEVfU0VMX01BU0sJCUdFTk1BU0so MiwgMCkNCisNCisvKg0KKyAqIFZDTSBwZXJpb2Qgb2YgdmlicmF0aW9uIHJlZ2lzdGVyDQorICog Qml0WzU6MF0gRGVmaW5lZCBhcyBWQ00gcmlzaW5nIHBlcmlvZGljIHRpbWUgKFR2aWIpIHRvZ2V0 aGVyIHdpdGggUFJFU0NbMjowXQ0KKyAqIFR2aWIgPSAoNi4zbXMgKyBBQUNUWzU6MF0gKiAwLjFt cykgKiBEaXZpZGluZyBSYXRlDQorICogRGl2aWRpbmcgUmF0ZSBpcyB0aGUgaW50ZXJuYWwgY2xv Y2sgZGl2aWRpbmcgcmF0ZSB0aGF0IGlzIGRlZmluZWQgYXQNCisgKiBQUkVTQ0FMRSByZWdpc3Rl ciAoQUREOiAweDA2KQ0KKyAqLw0KKyNkZWZpbmUgRFc5NzY4X0FBQ19USU1FX1JFRwkJCTB4MDcN CisNCisvKg0KKyAqIERXOTc2OCByZXF1aXJlcyB3YWl0aW5nIHRpbWUgKGRlbGF5IHRpbWUpIG9m IHRfT1BSIGFmdGVyIHBvd2VyLXVwLA0KKyAqIG9yIGluIHRoZSBjYXNlIG9mIFBEIHJlc2V0IHRh a2luZyBwbGFjZS4NCisgKi8NCisjZGVmaW5lIERXOTc2OF9UX09QUl9VUwkJCQkxMDAwDQorI2Rl ZmluZSBEVzk3NjhfVFZJQl9NU19CQVNFMTAJCQkoNjQgLSAxKQ0KKyNkZWZpbmUgRFc5NzY4X0FB Q19NT0RFX0RFRkFVTFQJCQkyDQorI2RlZmluZSBEVzk3NjhfQUFDX1RJTUVfREVGQVVMVAkJCTB4 MjANCisjZGVmaW5lIERXOTc2OF9DTE9DS19QUkVfU0NBTEVfREVGQVVMVAkJMQ0KKw0KKy8qDQor ICogVGhpcyBhY3RzIGFzIHRoZSBtaW5pbXVtIGdyYW51bGFyaXR5IG9mIGxlbnMgbW92ZW1lbnQu DQorICogS2VlcCB0aGlzIHZhbHVlIHBvd2VyIG9mIDIsIHNvIHRoZSBjb250cm9sIHN0ZXBzIGNh biBiZQ0KKyAqIHVuaWZvcm1seSBhZGp1c3RlZCBmb3IgZ3JhZHVhbCBsZW5zIG1vdmVtZW50LCB3 aXRoIGRlc2lyZWQNCisgKiBudW1iZXIgb2YgY29udHJvbCBzdGVwcy4NCisgKi8NCisjZGVmaW5l IERXOTc2OF9NT1ZFX1NURVBTCQkJMTYNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGR3 OTc2OF9zdXBwbHlfbmFtZXNbXSA9IHsNCisJInZpbiIsCS8qIERpZ2l0YWwgSS9PIHBvd2VyICov DQorCSJ2ZGQiLAkvKiBEaWdpdGFsIGNvcmUgcG93ZXIgKi8NCit9Ow0KKw0KKy8qIGR3OTc2OCBk ZXZpY2Ugc3RydWN0dXJlICovDQorc3RydWN0IGR3OTc2OCB7DQorCXN0cnVjdCByZWd1bGF0b3Jf YnVsa19kYXRhIHN1cHBsaWVzW0FSUkFZX1NJWkUoZHc5NzY4X3N1cHBseV9uYW1lcyldOw0KKwlz dHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgY3RybHM7DQorCXN0cnVjdCB2NGwyX2N0cmwgKmZvY3Vz Ow0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7DQorDQorCXUzMiBhYWNfbW9kZTsNCisJdTMyIGFh Y190aW1pbmc7DQorCXUzMiBjbG9ja19wcmVzYzsNCisJdTMyIG1vdmVfZGVsYXlfdXM7DQorfTsN CisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdzk3NjggKnNkX3RvX2R3OTc2OChzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnN1YmRldikNCit7DQorCXJldHVybiBjb250YWluZXJfb2Yoc3ViZGV2LCBzdHJ1 Y3QgZHc5NzY4LCBzZCk7DQorfQ0KKw0KK3N0cnVjdCByZWd2YWxfbGlzdCB7DQorCXU4IHJlZ19u dW07DQorCXU4IHZhbHVlOw0KK307DQorDQorc3RydWN0IGR3OTc2OF9hYWNfbW9kZV9vdF9tdWx0 aSB7DQorCXUzMiBhYWNfbW9kZV9lbnVtOw0KKwl1MzIgb3RfbXVsdGlfYmFzZTEwMDsNCit9Ow0K Kw0KK3N0cnVjdCBkdzk3NjhfY2xrX3ByZXNjX2RpdmlkaW5nX3JhdGUgew0KKwl1MzIgY2xrX3By ZXNjX2VudW07DQorCXUzMiBkaXZpZGluZ19yYXRlX2Jhc2UxMDA7DQorfTsNCisNCitzdGF0aWMg Y29uc3Qgc3RydWN0IGR3OTc2OF9hYWNfbW9kZV9vdF9tdWx0aSBhYWNfbW9kZV9vdF9tdWx0aVtd ID0gew0KKwl7MSwgIDQ4fSwNCisJezIsICA3MH0sDQorCXszLCAgNzV9LA0KKwl7NSwgMTEzfSwN Cit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHc5NzY4X2Nsa19wcmVzY19kaXZpZGluZ19y YXRlIHByZXNjX2RpdmlkaW5nX3JhdGVbXSA9IHsNCisJezAsIDIwMH0sDQorCXsxLCAxMDB9LA0K Kwl7MiwgIDUwfSwNCisJezMsICAyNX0sDQorCXs0LCA4MDB9LA0KKwl7NSwgNDAwfSwNCit9Ow0K Kw0KK3N0YXRpYyB1MzIgZHc5NzY4X2ZpbmRfb3RfbXVsdGkodTMyIGFhY19tb2RlX3BhcmFtKQ0K K3sNCisJdTMyIGN1cl9vdF9tdWx0aV9iYXNlMTAwID0gNzA7DQorCXVuc2lnbmVkIGludCBpOw0K Kw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhYWNfbW9kZV9vdF9tdWx0aSk7IGkrKykg ew0KKwkJaWYgKGFhY19tb2RlX290X211bHRpW2ldLmFhY19tb2RlX2VudW0gPT0gYWFjX21vZGVf cGFyYW0pIHsNCisJCQljdXJfb3RfbXVsdGlfYmFzZTEwMCA9DQorCQkJCWFhY19tb2RlX290X211 bHRpW2ldLm90X211bHRpX2Jhc2UxMDA7DQorCQl9DQorCX0NCisNCisJcmV0dXJuIGN1cl9vdF9t dWx0aV9iYXNlMTAwOw0KK30NCisNCitzdGF0aWMgdTMyIGR3OTc2OF9maW5kX2RpdmlkaW5nX3Jh dGUodTMyIHByZXNjX3BhcmFtKQ0KK3sNCisJdTMyIGN1cl9jbGtfZGl2aWRpbmdfcmF0ZV9iYXNl MTAwID0gMTAwOw0KKwl1bnNpZ25lZCBpbnQgaTsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUocHJlc2NfZGl2aWRpbmdfcmF0ZSk7IGkrKykgew0KKwkJaWYgKHByZXNjX2RpdmlkaW5n X3JhdGVbaV0uY2xrX3ByZXNjX2VudW0gPT0gcHJlc2NfcGFyYW0pIHsNCisJCQljdXJfY2xrX2Rp dmlkaW5nX3JhdGVfYmFzZTEwMCA9DQorCQkJCXByZXNjX2RpdmlkaW5nX3JhdGVbaV0uZGl2aWRp bmdfcmF0ZV9iYXNlMTAwOw0KKwkJfQ0KKwl9DQorDQorCXJldHVybiBjdXJfY2xrX2RpdmlkaW5n X3JhdGVfYmFzZTEwMDsNCit9DQorDQorLyoNCisgKiBEVzk3NjhfQUFDX1BSRVNDX1JFRyAmIERX OTc2OF9BQUNfVElNRV9SRUcgZGV0ZXJtaW5lIFZDTSBvcGVyYXRpb24gdGltZS4NCisgKiBGb3Ig Y3VycmVudCBWQ00gbW9kZTogQUFDMywgT3BlcmF0aW9uIFRpbWUgd291bGQgYmUgMC43MCB4IFR2 aWIuDQorICogVHZpYiA9ICg2LjNtcyArIEFBQ1RbNTowXSAqIDAuMU1TKSAqIERpdmlkaW5nIFJh dGUuDQorICogQmVsb3cgaXMgY2FsY3VsYXRpb24gb2YgdGhlIG9wZXJhdGlvbiBkZWxheSBmb3Ig ZWFjaCBzdGVwLg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgdTMyIGR3OTc2OF9jYWxfbW92ZV9kZWxh eSh1MzIgYWFjX21vZGVfcGFyYW0sIHUzMiBwcmVzY19wYXJhbSwNCisJCQkJCXUzMiBhYWNfdGlt aW5nX3BhcmFtKQ0KK3sNCisJdTMyIFR2aWJfdXM7DQorCXUzMiBvdF9tdWx0aV9iYXNlMTAwOw0K Kwl1MzIgY2xrX2RpdmlkaW5nX3JhdGVfYmFzZTEwMDsNCisNCisJb3RfbXVsdGlfYmFzZTEwMCA9 IGR3OTc2OF9maW5kX290X211bHRpKGFhY19tb2RlX3BhcmFtKTsNCisNCisJY2xrX2RpdmlkaW5n X3JhdGVfYmFzZTEwMCA9IGR3OTc2OF9maW5kX2RpdmlkaW5nX3JhdGUocHJlc2NfcGFyYW0pOw0K Kw0KKwlUdmliX3VzID0gKERXOTc2OF9UVklCX01TX0JBU0UxMCArIGFhY190aW1pbmdfcGFyYW0p ICoNCisJCSAgY2xrX2RpdmlkaW5nX3JhdGVfYmFzZTEwMDsNCisNCisJcmV0dXJuIFR2aWJfdXMg KiBvdF9tdWx0aV9iYXNlMTAwIC8gMTAwOw0KK30NCisNCitzdGF0aWMgaW50IGR3OTc2OF9tb2Rf cmVnKHN0cnVjdCBkdzk3NjggKmR3OTc2OCwgdTggcmVnLCB1OCBtYXNrLCB1OCB2YWwpDQorew0K KwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZHc5NzY4 LT5zZCk7DQorCWludCByZXQ7DQorDQorCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShj bGllbnQsIHJlZyk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJdmFsID0g KCh1bnNpZ25lZCBjaGFyKXJldCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsNCisNCisJcmV0dXJu IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbCk7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgZHc5NzY4X3NldF9kYWMoc3RydWN0IGR3OTc2OCAqZHc5NzY4LCB1MTYgdmFsKQ0K K3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJmR3 OTc2OC0+c2QpOw0KKw0KKwkvKiBXcml0ZSBWQ00gcG9zaXRpb24gdG8gcmVnaXN0ZXJzICovDQor CXJldHVybiBpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgRFc5NzY4X01TQl9B RERSLCB2YWwpOw0KK30NCisNCitzdGF0aWMgaW50IGR3OTc2OF9pbml0KHN0cnVjdCBkdzk3Njgg KmR3OTc2OCkNCit7DQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJk ZXZkYXRhKCZkdzk3NjgtPnNkKTsNCisJaW50IHJldCwgdmFsOw0KKw0KKwkvKiBSZXNldCBEVzk3 NjhfUklOR19QRF9DT05UUk9MX1JFRyB0byBkZWZhdWx0IHN0YXR1cyAweDAwICovDQorCXJldCA9 IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEVzk3NjhfUklOR19QRF9DT05UUk9M X1JFRywNCisJCQkJCURXOTc2OF9QRF9NT0RFX09GRik7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0 dXJuIHJldDsNCisNCisJLyoNCisJICogRFc5NzY5IHJlcXVpcmVzIHdhaXRpbmcgZGVsYXkgdGlt ZSBvZiB0X09QUg0KKwkgKiBhZnRlciBQRCByZXNldCB0YWtlcyBwbGFjZS4NCisJICovDQorCXVz bGVlcF9yYW5nZShEVzk3NjhfVF9PUFJfVVMsIERXOTc2OF9UX09QUl9VUyArIDEwMCk7DQorDQor CS8qIFNldCBEVzk3NjhfUklOR19QRF9DT05UUk9MX1JFRyB0byBEVzk3NjhfQUFDX01PREVfRU4o MHgwMSkgKi8NCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERXOTc2 OF9SSU5HX1BEX0NPTlRST0xfUkVHLA0KKwkJCQkJRFc5NzY4X0FBQ19NT0RFX0VOKTsNCisJaWYg KHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwkvKiBTZXQgQUFDIG1vZGUgKi8NCisJcmV0 ID0gZHc5NzY4X21vZF9yZWcoZHc5NzY4LCBEVzk3NjhfQUFDX1BSRVNDX1JFRywNCisJCQkgICAg IERXOTc2OF9BQUNfTU9ERV9TRUxfTUFTSywNCisJCQkgICAgIGR3OTc2OC0+YWFjX21vZGUgPDwg NSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJLyogU2V0IGNsb2NrIHBy ZXNjICovDQorCWlmIChkdzk3NjgtPmNsb2NrX3ByZXNjICE9IERXOTc2OF9DTE9DS19QUkVfU0NB TEVfREVGQVVMVCkgew0KKwkJcmV0ID0gZHc5NzY4X21vZF9yZWcoZHc5NzY4LCBEVzk3NjhfQUFD X1BSRVNDX1JFRywNCisJCQkJICAgICBEVzk3NjhfQ0xPQ0tfUFJFX1NDQUxFX1NFTF9NQVNLLA0K KwkJCQkgICAgIGR3OTc2OC0+Y2xvY2tfcHJlc2MpOw0KKwkJaWYgKHJldCA8IDApDQorCQkJcmV0 dXJuIHJldDsNCisJfQ0KKw0KKwkvKiBTZXQgQUFDIFRpbWluZyAqLw0KKwlpZiAoZHc5NzY4LT5h YWNfdGltaW5nICE9IERXOTc2OF9BQUNfVElNRV9ERUZBVUxUKSB7DQorCQlyZXQgPSBpMmNfc21i dXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFc5NzY4X0FBQ19USU1FX1JFRywNCisJCQkJCQlk dzk3NjgtPmFhY190aW1pbmcpOw0KKwkJaWYgKHJldCA8IDApDQorCQkJcmV0dXJuIHJldDsNCisJ fQ0KKw0KKwlmb3IgKHZhbCA9IGR3OTc2OC0+Zm9jdXMtPnZhbCAlIERXOTc2OF9NT1ZFX1NURVBT Ow0KKwkgICAgIHZhbCA8PSBkdzk3NjgtPmZvY3VzLT52YWw7DQorCSAgICAgdmFsICs9IERXOTc2 OF9NT1ZFX1NURVBTKSB7DQorCQlyZXQgPSBkdzk3Njhfc2V0X2RhYyhkdzk3NjgsIHZhbCk7DQor CQlpZiAocmV0KSB7DQorCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJJMkMgZmFpbHVyZTogJWQi LCByZXQpOw0KKwkJCXJldHVybiByZXQ7DQorCQl9DQorCQl1c2xlZXBfcmFuZ2UoZHc5NzY4LT5t b3ZlX2RlbGF5X3VzLA0KKwkJCSAgICAgZHc5NzY4LT5tb3ZlX2RlbGF5X3VzICsgMTAwMCk7DQor CX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZHc5NzY4X3JlbGVhc2Uoc3Ry dWN0IGR3OTc2OCAqZHc5NzY4KQ0KK3sNCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0 bDJfZ2V0X3N1YmRldmRhdGEoJmR3OTc2OC0+c2QpOw0KKwlpbnQgcmV0LCB2YWw7DQorDQorCXZh bCA9IHJvdW5kX2Rvd24oZHc5NzY4LT5mb2N1cy0+dmFsLCBEVzk3NjhfTU9WRV9TVEVQUyk7DQor CWZvciAoIDsgdmFsID49IDA7IHZhbCAtPSBEVzk3NjhfTU9WRV9TVEVQUykgew0KKwkJcmV0ID0g ZHc5NzY4X3NldF9kYWMoZHc5NzY4LCB2YWwpOw0KKwkJaWYgKHJldCkgew0KKwkJCWRldl9lcnIo JmNsaWVudC0+ZGV2LCAiSTJDIHdyaXRlIGZhaWw6ICVkIiwgcmV0KTsNCisJCQlyZXR1cm4gcmV0 Ow0KKwkJfQ0KKwkJdXNsZWVwX3JhbmdlKGR3OTc2OC0+bW92ZV9kZWxheV91cywNCisJCQkgICAg IGR3OTc2OC0+bW92ZV9kZWxheV91cyArIDEwMDApOw0KKwl9DQorDQorCXJldCA9IGkyY19zbWJ1 c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEVzk3NjhfUklOR19QRF9DT05UUk9MX1JFRywNCisJ CQkJCURXOTc2OF9QRF9NT0RFX0VOKTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0K Kw0KKwkvKg0KKwkgKiBEVzk3NjkgcmVxdWlyZXMgd2FpdGluZyBkZWxheSB0aW1lIG9mIHRfT1BS DQorCSAqIGFmdGVyIFBEIHJlc2V0IHRha2VzIHBsYWNlLg0KKwkgKi8NCisJdXNsZWVwX3Jhbmdl KERXOTc2OF9UX09QUl9VUywgRFc5NzY4X1RfT1BSX1VTICsgMTAwKTsNCisNCisJcmV0dXJuIDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgZHc5NzY4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNl ICpkZXYpDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChk ZXYpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVu dCk7DQorCXN0cnVjdCBkdzk3NjggKmR3OTc2OCA9IHNkX3RvX2R3OTc2OChzZCk7DQorDQorCWR3 OTc2OF9yZWxlYXNlKGR3OTc2OCk7DQorCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0la RShkdzk3Njhfc3VwcGx5X25hbWVzKSwNCisJCQkgICAgICAgZHc5NzY4LT5zdXBwbGllcyk7DQor DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGR3OTc2OF9ydW50aW1lX3Jlc3VtZShz dHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9f aTJjX2NsaWVudChkZXYpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGll bnRkYXRhKGNsaWVudCk7DQorCXN0cnVjdCBkdzk3NjggKmR3OTc2OCA9IHNkX3RvX2R3OTc2OChz ZCk7DQorCWludCByZXQ7DQorDQorCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9T SVpFKGR3OTc2OF9zdXBwbHlfbmFtZXMpLA0KKwkJCQkgICAgZHc5NzY4LT5zdXBwbGllcyk7DQor CWlmIChyZXQgPCAwKSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgcmVndWxh dG9yc1xuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCS8qDQorCSAqIFRoZSBkYXRhc2hl ZXQgcmVmZXJzIHRvIHRfT1BSIHRoYXQgbmVlZHMgdG8gYmUgd2FpdGVkIGJlZm9yZSBzZW5kaW5n DQorCSAqIEkyQyBjb21tYW5kcyBhZnRlciBwb3dlci11cC4NCisJICovDQorCXVzbGVlcF9yYW5n ZShEVzk3NjhfVF9PUFJfVVMsIERXOTc2OF9UX09QUl9VUyArIDEwMCk7DQorDQorCXJldCA9IGR3 OTc2OF9pbml0KGR3OTc2OCk7DQorCWlmIChyZXQgPCAwKQ0KKwkJZ290byBkaXNhYmxlX3JlZ3Vs YXRvcjsNCisNCisJcmV0dXJuIDA7DQorDQorZGlzYWJsZV9yZWd1bGF0b3I6DQorCXJlZ3VsYXRv cl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShkdzk3Njhfc3VwcGx5X25hbWVzKSwNCisJCQkgICAg ICAgZHc5NzY4LT5zdXBwbGllcyk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBp bnQgZHc5NzY4X3NldF9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQorew0KKwlzdHJ1Y3Qg ZHc5NzY4ICpkdzk3NjggPSBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwNCisJCQkJCSAgICAg c3RydWN0IGR3OTc2OCwgY3RybHMpOw0KKw0KKwlpZiAoY3RybC0+aWQgPT0gVjRMMl9DSURfRk9D VVNfQUJTT0xVVEUpDQorCQlyZXR1cm4gZHc5NzY4X3NldF9kYWMoZHc5NzY4LCBjdHJsLT52YWwp Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxf b3BzIGR3OTc2OF9jdHJsX29wcyA9IHsNCisJLnNfY3RybCA9IGR3OTc2OF9zZXRfY3RybCwNCit9 Ow0KKw0KK3N0YXRpYyBpbnQgZHc5NzY4X29wZW4oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3Ry dWN0IHY0bDJfc3ViZGV2X2ZoICpmaCkNCit7DQorCWludCByZXQ7DQorDQorCXJldCA9IHBtX3J1 bnRpbWVfZ2V0X3N5bmMoc2QtPmRldik7DQorCWlmIChyZXQgPCAwKSB7DQorCQlwbV9ydW50aW1l X3B1dF9ub2lkbGUoc2QtPmRldik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldHVybiAw Ow0KK30NCisNCitzdGF0aWMgaW50IGR3OTc2OF9jbG9zZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNk LCBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoKQ0KK3sNCisJcG1fcnVudGltZV9wdXQoc2QtPmRl dik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3Vi ZGV2X2ludGVybmFsX29wcyBkdzk3NjhfaW50X29wcyA9IHsNCisJLm9wZW4gPSBkdzk3Njhfb3Bl biwNCisJLmNsb3NlID0gZHc5NzY4X2Nsb3NlLA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVj dCB2NGwyX3N1YmRldl9vcHMgZHc5NzY4X29wcyA9IHsgfTsNCisNCitzdGF0aWMgaW50IGR3OTc2 OF9pbml0X2NvbnRyb2xzKHN0cnVjdCBkdzk3NjggKmR3OTc2OCkNCit7DQorCXN0cnVjdCB2NGwy X2N0cmxfaGFuZGxlciAqaGRsID0gJmR3OTc2OC0+Y3RybHM7DQorCWNvbnN0IHN0cnVjdCB2NGwy X2N0cmxfb3BzICpvcHMgPSAmZHc5NzY4X2N0cmxfb3BzOw0KKw0KKwl2NGwyX2N0cmxfaGFuZGxl cl9pbml0KGhkbCwgMSk7DQorDQorCWR3OTc2OC0+Zm9jdXMgPSB2NGwyX2N0cmxfbmV3X3N0ZCho ZGwsIG9wcywgVjRMMl9DSURfRk9DVVNfQUJTT0xVVEUsIDAsDQorCQkJCQkgIERXOTc2OF9NQVhf Rk9DVVNfUE9TLA0KKwkJCQkJICBEVzk3NjhfRk9DVVNfU1RFUFMsIDApOw0KKw0KKwlpZiAoaGRs LT5lcnJvcikNCisJCXJldHVybiBoZGwtPmVycm9yOw0KKw0KKwlkdzk3NjgtPnNkLmN0cmxfaGFu ZGxlciA9IGhkbDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZHc5NzY4X3By b2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmY2xpZW50LT5kZXY7DQorCXN0cnVjdCBkdzk3NjggKmR3OTc2ODsNCisJdW5zaWduZWQgaW50 IGk7DQorCWludCByZXQ7DQorDQorCWR3OTc2OCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq ZHc5NzY4KSwgR0ZQX0tFUk5FTCk7DQorCWlmICghZHc5NzY4KQ0KKwkJcmV0dXJuIC1FTk9NRU07 DQorDQorCS8qIEluaXRpYWxpemUgc3ViZGV2ICovDQorCXY0bDJfaTJjX3N1YmRldl9pbml0KCZk dzk3NjgtPnNkLCBjbGllbnQsICZkdzk3Njhfb3BzKTsNCisNCisJZHc5NzY4LT5hYWNfbW9kZSA9 IERXOTc2OF9BQUNfTU9ERV9ERUZBVUxUOw0KKwlkdzk3NjgtPmFhY190aW1pbmcgPSBEVzk3Njhf QUFDX1RJTUVfREVGQVVMVDsNCisJZHc5NzY4LT5jbG9ja19wcmVzYyA9IERXOTc2OF9DTE9DS19Q UkVfU0NBTEVfREVGQVVMVDsNCisNCisJLyogT3B0aW9uYWwgaW5kaWNhdGlvbiBvZiBBQUMgbW9k ZSBzZWxlY3QgKi8NCisJZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldl9md25vZGUoZGV2KSwg ImRvbmd3b29uLGFhYy1tb2RlIiwNCisJCQkJICZkdzk3NjgtPmFhY19tb2RlKTsNCisNCisJLyog T3B0aW9uYWwgaW5kaWNhdGlvbiBvZiBjbG9jayBwcmUtc2NhbGUgc2VsZWN0ICovDQorCWZ3bm9k ZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXZfZndub2RlKGRldiksICJkb25nd29vbixjbG9jay1wcmVz YyIsDQorCQkJCSAmZHc5NzY4LT5jbG9ja19wcmVzYyk7DQorDQorCS8qIE9wdGlvbmFsIGluZGlj YXRpb24gb2YgQUFDIFRpbWluZyAqLw0KKwlmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3 bm9kZShkZXYpLCAiZG9uZ3dvb24sYWFjLXRpbWluZyIsDQorCQkJCSAmZHc5NzY4LT5hYWNfdGlt aW5nKTsNCisNCisJZHc5NzY4LT5tb3ZlX2RlbGF5X3VzID0gZHc5NzY4X2NhbF9tb3ZlX2RlbGF5 KGR3OTc2OC0+YWFjX21vZGUsDQorCQkJCQkJICAgICAgZHc5NzY4LT5jbG9ja19wcmVzYywNCisJ CQkJCQkgICAgICBkdzk3NjgtPmFhY190aW1pbmcpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShkdzk3Njhfc3VwcGx5X25hbWVzKTsgaSsrKQ0KKwkJZHc5NzY4LT5zdXBwbGllc1tp XS5zdXBwbHkgPSBkdzk3Njhfc3VwcGx5X25hbWVzW2ldOw0KKw0KKwlyZXQgPSBkZXZtX3JlZ3Vs YXRvcl9idWxrX2dldChkZXYsIEFSUkFZX1NJWkUoZHc5NzY4X3N1cHBseV9uYW1lcyksDQorCQkJ CSAgICAgIGR3OTc2OC0+c3VwcGxpZXMpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwg ImZhaWxlZCB0byBnZXQgcmVndWxhdG9yc1xuIik7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQor CS8qIEluaXRpYWxpemUgY29udHJvbHMgKi8NCisJcmV0ID0gZHc5NzY4X2luaXRfY29udHJvbHMo ZHc5NzY4KTsNCisJaWYgKHJldCkNCisJCWdvdG8gZXJyX2ZyZWVfaGFuZGxlcjsNCisNCisJLyog SW5pdGlhbGl6ZSBzdWJkZXYgKi8NCisJZHc5NzY4LT5zZC5mbGFncyB8PSBWNEwyX1NVQkRFVl9G TF9IQVNfREVWTk9ERTsNCisJZHc5NzY4LT5zZC5pbnRlcm5hbF9vcHMgPSAmZHc5NzY4X2ludF9v cHM7DQorDQorCXJldCA9IG1lZGlhX2VudGl0eV9wYWRzX2luaXQoJmR3OTc2OC0+c2QuZW50aXR5 LCAwLCBOVUxMKTsNCisJaWYgKHJldCA8IDApDQorCQlnb3RvIGVycl9mcmVlX2hhbmRsZXI7DQor DQorCWR3OTc2OC0+c2QuZW50aXR5LmZ1bmN0aW9uID0gTUVESUFfRU5UX0ZfTEVOUzsNCisNCisJ cG1fcnVudGltZV9lbmFibGUoZGV2KTsNCisJaWYgKCFwbV9ydW50aW1lX2VuYWJsZWQoZGV2KSkg ew0KKwkJcmV0ID0gZHc5NzY4X3J1bnRpbWVfcmVzdW1lKGRldik7DQorCQlpZiAocmV0IDwgMCkg ew0KKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHBvd2VyIG9uOiAlZFxuIiwgcmV0KTsNCisJ CQlnb3RvIGVycl9jbGVhbl9lbnRpdHk7DQorCQl9DQorCX0NCisNCisJcmV0ID0gdjRsMl9hc3lu Y19yZWdpc3Rlcl9zdWJkZXYoJmR3OTc2OC0+c2QpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgVjRMMiBzdWJkZXY6ICVkIiwgcmV0KTsNCisJ CWdvdG8gZXJyX3Bvd2VyX29mZjsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnJfcG93ZXJf b2ZmOg0KKwlpZiAocG1fcnVudGltZV9lbmFibGVkKGRldikpDQorCQlwbV9ydW50aW1lX2Rpc2Fi bGUoZGV2KTsNCisJZWxzZQ0KKwkJZHc5NzY4X3J1bnRpbWVfc3VzcGVuZChkZXYpOw0KK2Vycl9j bGVhbl9lbnRpdHk6DQorCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZkdzk3NjgtPnNkLmVudGl0eSk7 DQorZXJyX2ZyZWVfaGFuZGxlcjoNCisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmZHc5NzY4LT5j dHJscyk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZHc5NzY4X3JlbW92 ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQ0KK3sNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0KKwlzdHJ1Y3QgZHc5NzY4ICpkdzk3Njgg PSBzZF90b19kdzk3Njgoc2QpOw0KKw0KKwl2NGwyX2FzeW5jX3VucmVnaXN0ZXJfc3ViZGV2KCZk dzk3NjgtPnNkKTsNCisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmZHc5NzY4LT5jdHJscyk7DQor CW1lZGlhX2VudGl0eV9jbGVhbnVwKCZkdzk3NjgtPnNkLmVudGl0eSk7DQorCXBtX3J1bnRpbWVf ZGlzYWJsZSgmY2xpZW50LT5kZXYpOw0KKwlpZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRl ZCgmY2xpZW50LT5kZXYpKQ0KKwkJZHc5NzY4X3J1bnRpbWVfc3VzcGVuZCgmY2xpZW50LT5kZXYp Ow0KKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJmNsaWVudC0+ZGV2KTsNCisNCisJcmV0dXJu IDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3OTc2OF9vZl90 YWJsZVtdID0gew0KKwl7IC5jb21wYXRpYmxlID0gImRvbmd3b29uLGR3OTc2OCIgfSwNCisJeyAu Y29tcGF0aWJsZSA9ICJnaWFudGVjLGd0OTc2OSIgfSwNCisJe30NCit9Ow0KK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIGR3OTc2OF9vZl90YWJsZSk7DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBk ZXZfcG1fb3BzIGR3OTc2OF9wbV9vcHMgPSB7DQorCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHBt X3J1bnRpbWVfZm9yY2Vfc3VzcGVuZCwNCisJCQkJcG1fcnVudGltZV9mb3JjZV9yZXN1bWUpDQor CVNFVF9SVU5USU1FX1BNX09QUyhkdzk3NjhfcnVudGltZV9zdXNwZW5kLCBkdzk3NjhfcnVudGlt ZV9yZXN1bWUsIE5VTEwpDQorfTsNCisNCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHc5NzY4 X2kyY19kcml2ZXIgPSB7DQorCS5kcml2ZXIgPSB7DQorCQkubmFtZSA9IERXOTc2OF9OQU1FLA0K KwkJLnBtID0gJmR3OTc2OF9wbV9vcHMsDQorCQkub2ZfbWF0Y2hfdGFibGUgPSBkdzk3Njhfb2Zf dGFibGUsDQorCX0sDQorCS5wcm9iZV9uZXcgID0gZHc5NzY4X3Byb2JlLA0KKwkucmVtb3ZlID0g ZHc5NzY4X3JlbW92ZSwNCit9Ow0KK21vZHVsZV9pMmNfZHJpdmVyKGR3OTc2OF9pMmNfZHJpdmVy KTsNCisNCitNT0RVTEVfQVVUSE9SKCJEb25nY2h1biBaaHUgPGRvbmdjaHVuLnpodUBtZWRpYXRl ay5jb20+Iik7DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJEVzk3NjggVkNNIGRyaXZlciIpOw0KK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCi0tIA0KMi45LjINCg==