Received: by 2002:a05:6a10:a852:0:0:0:0 with SMTP id d18csp1216031pxy; Thu, 6 May 2021 03:11:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwTRZ5Yw3fs+OpaVbGzVaFlFL0Nf78vPrBHROaHT1Up0vd6FyNHPWKNzNfqlWYoXSRQ+YiK X-Received: by 2002:a17:906:c1c9:: with SMTP id bw9mr3604717ejb.239.1620295895921; Thu, 06 May 2021 03:11:35 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g20si301415ejc.561.2021.05.06.03.11.11; Thu, 06 May 2021 03:11:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@dell.com header.s=smtpout1 header.b=gAs9w5d9; arc=fail (signature failed); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=dell.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234210AbhEFJug (ORCPT + 99 others); Thu, 6 May 2021 05:50:36 -0400 Received: from mx0a-00154904.pphosted.com ([148.163.133.20]:21754 "EHLO mx0a-00154904.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231194AbhEFJuf (ORCPT ); Thu, 6 May 2021 05:50:35 -0400 Received: from pps.filterd (m0170392.ppops.net [127.0.0.1]) by mx0a-00154904.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 1469lheV024351; Thu, 6 May 2021 05:48:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=smtpout1; bh=Fxgc/WfwT4FKy3S4qUsjwjcBEky91eVvqFzhtgd8z4M=; b=gAs9w5d9ahTgIwsZ4BLoBjPclU8woxAiXg5JUa5YMe4HYC7Cyko16ZZrddtCTRDj3rlZ Svn8+KGpr3s8Pn8CldsWrgZD/scZ5kQ1k6qYKpCEI+Nsl0nmdYH0Kbi631kNITqQ1WLN dmdTGyUOfn+582uZZEE6BEvq3p2wPRa7T4VJnGJYIdjFgNhVp4PQYi7pnv9FAIifYo09 Yg0U7Q8BIucZKc1LAB5ZDw1NnkSHqXTTvDQilLKTpYxw9YJX3FK490UDaAUqDfEgK4yg IKlz49cGc3y8TIVd6N3uZqCfti0GKaTLqNZFrYgmFwC8si8TJCplU22Nk1UeFOtjExoX Pg== Received: from mx0a-00154901.pphosted.com (mx0a-00154901.pphosted.com [67.231.149.39]) by mx0a-00154904.pphosted.com with ESMTP id 38bec36keb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 06 May 2021 05:48:20 -0400 Received: from pps.filterd (m0142699.ppops.net [127.0.0.1]) by mx0a-00154901.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 1467AWrc031320; Thu, 6 May 2021 05:48:20 -0400 Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2168.outbound.protection.outlook.com [104.47.58.168]) by mx0a-00154901.pphosted.com with ESMTP id 38b3um2j3f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 May 2021 05:48:19 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D7hjaTjhZ6HHrkpE0pBXUuwoTic/JzE43jG2O+BUYsw7dRCELMqldM9Qzopt8zTrNzRPV05PiIfD0Nv2rHvVzjDzJXrkpXDn05lJqqP4gFcT8hkDGEBwEBxOpwdQVO5EnYATOLhBLVdYz67VI2rXD7i27eBbXxtHt/3eCIOH6LyYpPBcBjO8BfDkORfhOgDIWm6imR4IpxNjvNWK88MhAtcl08KzoFreNueJMXp/PWKpKqoSYc9CAm3pdUdfPcOB0D0BlN3utQ8nTQLwA7Qk50wA0pptQ28Wcl63oJZTBTfm8hHzwE/7fRkKghenHXdIrQHvl0HVz+Uu5DaZts0vvw== 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=Fxgc/WfwT4FKy3S4qUsjwjcBEky91eVvqFzhtgd8z4M=; b=KBr3G53+/m55mhI9d7xVJnrqy7UMgONAX1RFfSNw84IAS2Q4riYxtytPi0+uJympE1MpvOo7rnIM3LSWAsPptMiSt0DRELKD/gtlOovmGKrDSl5YRXFU2alJLl9tl1eLmDeBkRrYqbV6nek0S3Z8M77MBCb6vVKm323P55e66Trwh2iLPwHFiPsvTmq1Svi4d17FsULtvaqxBFppfmdGFrrRGmLMLDkd1BFnn3l/nZadFXK6cysJ+FMccTEF8vuwLxD3rOTY/rhEgsJ+qOUC4H6mMlams6472xXS1YZGItxd4WPY895IM/yihmEGwLSLBoAIdN7jwnqBpgGWpsqHng== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=dell.com; dmarc=pass action=none header.from=dell.com; dkim=pass header.d=dell.com; arc=none Received: from SJ0PR19MB4528.namprd19.prod.outlook.com (2603:10b6:a03:28a::6) by BYAPR19MB2886.namprd19.prod.outlook.com (2603:10b6:a03:f5::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.24; Thu, 6 May 2021 09:48:16 +0000 Received: from SJ0PR19MB4528.namprd19.prod.outlook.com ([fe80::8863:ccf2:c6a:d43a]) by SJ0PR19MB4528.namprd19.prod.outlook.com ([fe80::8863:ccf2:c6a:d43a%8]) with mapi id 15.20.4108.026; Thu, 6 May 2021 09:48:16 +0000 From: "Yuan, Perry" To: Hans de Goede , "pobrn@protonmail.com" , "pierre-louis.bossart@linux.intel.com" , "oder_chiou@realtek.com" , "perex@perex.cz" , "tiwai@suse.com" , "mgross@linux.intel.com" CC: "lgirdwood@gmail.com" , "broonie@kernel.org" , "alsa-devel@alsa-project.org" , "linux-kernel@vger.kernel.org" , "platform-driver-x86@vger.kernel.org" , "mario.limonciello@outlook.com" , Dell Client Kernel Subject: RE: [PATCH v7 1/2] platform/x86: dell-privacy: Add support for Dell hardware privacy Thread-Topic: [PATCH v7 1/2] platform/x86: dell-privacy: Add support for Dell hardware privacy Thread-Index: AQHXL3z3zKvyLuVuUEyvwAGA66G/QqqyJIaAgCQwvSA= Date: Thu, 6 May 2021 09:48:16 +0000 Message-ID: References: <20210412091919.27608-1-Perry_Yuan@Dell.com> <8176ceda-cdbf-b733-128d-0766eb6d180d@redhat.com> In-Reply-To: <8176ceda-cdbf-b733-128d-0766eb6d180d@redhat.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_17cb76b2-10b8-4fe1-93d4-2202842406cd_Enabled=True; MSIP_Label_17cb76b2-10b8-4fe1-93d4-2202842406cd_SiteId=945c199a-83a2-4e80-9f8c-5a91be5752dd; MSIP_Label_17cb76b2-10b8-4fe1-93d4-2202842406cd_Owner=Perry_Yuan@Dell.com; MSIP_Label_17cb76b2-10b8-4fe1-93d4-2202842406cd_SetDate=2021-05-06T09:48:13.5768174Z; MSIP_Label_17cb76b2-10b8-4fe1-93d4-2202842406cd_Name=External Public; MSIP_Label_17cb76b2-10b8-4fe1-93d4-2202842406cd_Application=Microsoft Azure Information Protection; MSIP_Label_17cb76b2-10b8-4fe1-93d4-2202842406cd_ActionId=77558474-4a88-46a8-9a7c-48922419615a; MSIP_Label_17cb76b2-10b8-4fe1-93d4-2202842406cd_Extended_MSFT_Method=Manual authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=Dell.com; x-originating-ip: [163.244.246.215] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f2a04700-fc1e-41b1-33d2-08d9107412ca x-ms-traffictypediagnostic: BYAPR19MB2886: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-exotenant: 2khUwGVqB6N9v58KS13ncyUmMJd8q4 x-ms-oob-tlc-oobclassifiers: OLM:5516; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 2GxgITfmCizL3YV4TeMiXRmwBNfg3iniaXXuxwi/xHzLUbnd37ukdF+YPoN56FT0IZd16jWIpGy62P3vuCEWwemBkxEdn06dptE9UGuL6DKbm/3H2kGGA0mMTA66r14pfbwYYNnZ6BL9F1xXVFOCYeW6sXJiaTQ5MDKBgqlqKZzRJr9rcq32z2PBYKnLtZ1b+7wAKaqOHaktKuGKoi2ETu1ZMxW/vD35f7ENEcBqx4+YPQ/tHhoT+lcnca3Ihw5jnG43bWoFXes0wHNZGyNjRrehVS0Sioad2LLTAx6wta7gEUgL+HC9zpyZ8CXRrfwl/OBymW3XtxwBECMl9UnNhFYbq+3EFsHr9YB6WFFauY0xk6TPmCEdimVPEs9St2HJ8CJyqjNztp3S6My5jKghqRVGeOWCdddam7gPqOqau+OtA80JhJi/FPxYmiorOWY5E5zmxd62U9qth7OjuJfAagJ/qdxwKEazq8AAcOLLIi1/CfnJT7zPFfQiSOeMqCyk+FFH374lQk1/JzeA4IQR5JmVKhzDAO3sgwuaWGgN2lXpU5WC8voJ58WMba8rpAccI+AIulvBZgIx+BPm10Tb8bnRzJN9HlRn/FBWahImBfE= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR19MB4528.namprd19.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(396003)(39860400002)(366004)(136003)(376002)(346002)(7696005)(54906003)(316002)(786003)(110136005)(7416002)(2906002)(478600001)(86362001)(107886003)(4326008)(76116006)(52536014)(45080400002)(66476007)(66556008)(64756008)(66446008)(66946007)(55016002)(53546011)(6506007)(71200400001)(186003)(26005)(33656002)(8936002)(9686003)(8676002)(66574012)(30864003)(5660300002)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?YVZBeFpoMjByVkpqaDFoMlJRK2YrMEdZMTlGRjNkOFZlSmgxb0pSY1dPSkEz?= =?utf-8?B?enpyMS9pMi9BWTBTRTZBdmwwWmJMVkdodENvWXhpc0tlWHlwejRYeTNsL0s5?= =?utf-8?B?SisyRVIrOWVCaEtSK2ZxNW84N2M2QjhLSUxsc0UvSGtZbi9CWHlPVHJsZlJj?= =?utf-8?B?dTUvQ1QvTWJPTGFqU1R4ZlpBcXJnejZTbm4xSkFsZDM3a25lUnlGQWF3VldL?= =?utf-8?B?TkhkTVcwQ3RJNElvVzVkelgyczkxS2hSVnBjV0xwNUJ3cWJaMnExQjVYMlg1?= =?utf-8?B?c0FPWGZrOGh3c2JveFYzV3BTUXVPWlFpaXlJbTEyS1BZMG95MnlxNElaOUI0?= =?utf-8?B?TTN6S2N3WnE0cm5RVGt0eHhrc252c2loVWZteW1jQ1Q2ZlB0L2gxVkw5OUs0?= =?utf-8?B?dWU4NmJpajZhcDhrN0ZMYjkrOVhKTGJybE12T3ptVlc4S1dhOStXQWdwNVhs?= =?utf-8?B?c0o0UUw4Ry9uMzVzbTYzSnVKWTNNTjBtMUs3YVpWWXlONkRkaksrVUMxbUlm?= =?utf-8?B?SkJRYnFLbTVuZ3J6WTlxRU5VRnBxSlUzQnFSTmwrRmIzeXNXNDJBWVA3QTl2?= =?utf-8?B?NjdLUGxJeC91WWJUaDI5aVVrRWI4cU9pSUhKUG9xMHVsR2FUQkluVUNRbUFX?= =?utf-8?B?VHhXMUlLQzA3YzRBdHlDbGRDN3o1Q0c5bktnaC9DbmYzRlhvSk9jOWlkbTZU?= =?utf-8?B?YXNWSE0rR0o4OU5EK1Z6SENQYVZYN25zZWJQRkJDbHpwSEVRY28xSEFyemlK?= =?utf-8?B?d25TQWdEazg5UVNCTS9xUThmV1gxZCszbklGTUwrOTZwTVU4RGUwNmFPRThW?= =?utf-8?B?VlM3bnlwSklOMlJFZ0lLUmxhLzAxdW5oSWRRZitXWng5clVrQkpHd0ZVRDJ5?= =?utf-8?B?c1VJOHhHL2FhMmVYSXZ3Nm1kZzlVK3l2Y2ZUK2RKYlJRRFVqcnR2Z1h2L09x?= =?utf-8?B?U2xjbUdHbWZ2VWp2eEQxd1VHUWxWN2cxemhBekhLMUxkWnllT2Z4WndjZGI3?= =?utf-8?B?NkpvT0h3QUQ1QWZnUjd4cVNvd0xqallyZWxOUWF2SzAxNmdOam1LSXJBcTJm?= =?utf-8?B?NmdIbmFQdTZvcy9CUFZVVzJMbUttd0ZDOVJlcVJjZzhweEJYNDNTYXFTWVBk?= =?utf-8?B?ZDhsa3BtQkErcCt3dEhGbFBBdmh6L3dTR0tPenBLL2ZTYWdETU8yVFpoNW9L?= =?utf-8?B?WG9nUGl3MzZhMzFpMVk5MTdBNlRnQzM1WUpuT1ZtdE1BbFFOVThlN0JEMzFo?= =?utf-8?B?eXhCUTlZVkgyVklRaUZRVWd1WmQ2dERLVFdjTytjbElGam1jSnpLaHh0Ni9Y?= =?utf-8?B?NUlOSEF6bVdxZ3BRZHl3emlVR2xTeloyOENHUHdRcU9GMk42M1BtVFJ5N0tY?= =?utf-8?B?U05lRTc3Q3FuV3RpVENpRm9TeGRNcGw3NFYrSmhNam5BMGxaVWdiR0t0NTBz?= =?utf-8?B?QnlFL3B3SVR3d09Ubk5mc1htSzBXdjZteTBibG0vY01iWnB0alhsam1pZ2JJ?= =?utf-8?B?WDFSaTZOWmQyWUF5NEpIYmd1ZHRZWUVYWm9wVGNGeEYwLy9lN2tTTVhMTlJK?= =?utf-8?B?cEpTQ2E2QzdDZ3dqTnZXdUdGYVRJd2pJNWhMODA2ckEyUkRHaUlLc21TSEw1?= =?utf-8?B?Zk1OZWdQZ3h1WmxndVQzbGJKSGU5cENKRWY1bWplbEpaMFFEZHZpWW1Ka3pY?= =?utf-8?B?QVJiYzlKUWZiOTVtRUo3b3l6ZlVvNUs3Z1puSWZ6dFUwaWQyNEUwaVZ2dnB1?= =?utf-8?Q?Wxai8GqdJGtpfmH+xDHNNKdcwDYwZa2eg1XYQfl?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Dell.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ0PR19MB4528.namprd19.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f2a04700-fc1e-41b1-33d2-08d9107412ca X-MS-Exchange-CrossTenant-originalarrivaltime: 06 May 2021 09:48:16.6162 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 945c199a-83a2-4e80-9f8c-5a91be5752dd X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: P8z5pqgWmj7ynqkH0LZRSf/jDCQS5ngfSSPkbSnIaZqa+4zhvvD+Vx72icxeJmnNlCiMGGNtHxGlN98SK2r3bA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR19MB2886 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.761 definitions=2021-05-02_02:2021-04-30,2021-05-02 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 adultscore=0 priorityscore=1501 suspectscore=0 clxscore=1011 phishscore=0 malwarescore=0 mlxscore=0 mlxlogscore=999 lowpriorityscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104060000 definitions=main-2105050163 X-Proofpoint-GUID: 8IFdF7nrypODP8YVkNBn06r2Lo6PIbxK X-Proofpoint-ORIG-GUID: 8IFdF7nrypODP8YVkNBn06r2Lo6PIbxK X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxscore=0 malwarescore=0 mlxlogscore=999 bulkscore=0 adultscore=0 phishscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104060000 definitions=main-2105060066 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSGFucy4NCkkgY2hhbmdlZCB0aGUgZHJpdmVyIGluIFY4IGFzIHlvdXIgY29tbWVudHMuDQpK dXN0IG9uZSBLY29uZmlnIGNoYW5nZSAsIEl0IHdpbGwgY2F1c2Ugc29tZSBidWlsdCBlcnJvciAu DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSGFucyBkZSBHb2VkZSA8 aGRlZ29lZGVAcmVkaGF0LmNvbT4NCj4gU2VudDogMjAyMeW5tDTmnIgxM+aXpSAxNjo0OA0KPiBU bzogWXVhbiwgUGVycnk7IHBvYnJuQHByb3Rvbm1haWwuY29tOyBwaWVycmUtDQo+IGxvdWlzLmJv c3NhcnRAbGludXguaW50ZWwuY29tOyBvZGVyX2NoaW91QHJlYWx0ZWsuY29tOyBwZXJleEBwZXJl eC5jejsNCj4gdGl3YWlAc3VzZS5jb207IG1ncm9zc0BsaW51eC5pbnRlbC5jb20NCj4gQ2M6IGxn aXJkd29vZEBnbWFpbC5jb207IGJyb29uaWVAa2VybmVsLm9yZzsgYWxzYS1kZXZlbEBhbHNhLXBy b2plY3Qub3JnOw0KPiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBwbGF0Zm9ybS1kcml2 ZXIteDg2QHZnZXIua2VybmVsLm9yZzsNCj4gbWFyaW8ubGltb25jaWVsbG9Ab3V0bG9vay5jb207 IERlbGwgQ2xpZW50IEtlcm5lbA0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHY3IDEvMl0gcGxhdGZv cm0veDg2OiBkZWxsLXByaXZhY3k6IEFkZCBzdXBwb3J0IGZvciBEZWxsDQo+IGhhcmR3YXJlIHBy aXZhY3kNCj4gDQo+IA0KPiBbRVhURVJOQUwgRU1BSUxdDQo+IA0KPiBIaSwNCj4gDQo+IE9uIDQv MTIvMjEgMTE6MTkgQU0sIFBlcnJ5IFl1YW4gd3JvdGU6DQo+ID4gRnJvbTogUGVycnkgWXVhbiA8 cGVycnlfeXVhbkBkZWxsLmNvbT4NCj4gPg0KPiA+IGFkZCBzdXBwb3J0IGZvciBEZWxsIHByaXZh Y3kgZHJpdmVyIGZvciB0aGUgRGVsbCB1bml0cyBlcXVpcHBlZA0KPiA+IGhhcmR3YXJlIHByaXZh Y3kgZGVzaWduLCB3aGljaCBwcm90ZWN0IHVzZXJzIHByaXZhY3kgb2YgYXVkaW8gYW5kDQo+ID4g Y2FtZXJhIGZyb20gaGFyZHdhcmUgbGV2ZWwuIE9uY2UgdGhlIGF1ZGlvIG9yIGNhbWVyYSBwcml2 YWN5IG1vZGUNCj4gPiBhY3RpdmF0ZWQsIGFueSBhcHBsaWNhdGlvbnMgd2lsbCBub3QgZ2V0IGFu eSBhdWRpbyBvciB2aWRlbyBzdHJlYW0NCj4gPiB3aGVuIHVzZXIgcHJlc3NlZCBjdHJsK0Y0IGhv dGtleSwgYXVkaW8gcHJpdmFjeSBtb2RlIHdpbGwgYmUgZW5hYmxlZCwNCj4gPiBtaWNtdXRlIGxl ZCB3aWxsIGJlIGFsc28gY2hhbmdlZCBhY2NvcmRpbmdseSBUaGUgbWljbXV0ZSBsZWQgaXMgZnVs bHkNCj4gPiBjb250cm9sbGVkIGJ5IGhhcmR3YXJlICYgRUMoZW1iZWRkZWQgY29udHJvbGxlcikg YW5kIGNhbWVyYSBtdXRlDQo+ID4gaG90a2V5IGlzIEN0cmwrRjkuIEN1cnJlbnRseSBkZXNpZ24g b25seSBlbWl0cyBTV19DQU1FUkFfTEVOU19DT1ZFUg0KPiA+IGV2ZW50IHdoaWxlIHRoZSBjYW1l cmEgbGVucyBzaHV0dGVyIHdpbGwgYmUgY2hhbmdlZCBieSBFQyAmDQo+ID4gSFcoaGFyZHdhcmUp IGNvbnRyb2wNCj4gPg0KPiA+ICpUaGUgZmxvdyBpcyBsaWtlIHRoaXM6DQo+ID4gMSkgVXNlciBw cmVzc2VzIGtleS4gSFcgZG9lcyBzdHVmZiB3aXRoIHRoaXMga2V5ICh0aW1lb3V0IHRpbWVyIGlz DQo+ID4gc3RhcnRlZCkNCj4gPiAyKSBXTUkgZXZlbnQgaXMgZW1pdHRlZCBmcm9tIEJJT1MgdG8g a2VybmVsDQo+ID4gMykgV01JIGV2ZW50IGlzIHJlY2VpdmVkIGJ5IGRlbGwtcHJpdmFjeQ0KPiA+ IDQpIEtFWV9NSUNNVVRFIGVtaXR0ZWQgZnJvbSBkZWxsLXByaXZhY3kNCj4gPiA1KSBVc2VybGFu ZCBwaWNrcyB1cCBrZXkgYW5kIG1vZGlmaWVzIGtjb250cm9sIGZvciBTVyBtdXRlDQo+ID4gNikg Q29kZWMga2VybmVsIGRyaXZlciBjYXRjaGVzIGFuZCBjYWxscyBsZWR0cmlnX2F1ZGlvX3NldCwg bGlrZSB0aGlzOg0KPiA+ICAgIGxlZHRyaWdfYXVkaW9fc2V0KExFRF9BVURJT19NSUNNVVRFLCBy dDcxNS0+bWljbXV0ZV9sZWQgPyBMRURfT04NCj4gPiA6TEVEX09GRik7DQo+ID4gNykgSWYgIkxF RCIgaXMgc2V0IHRvIG9uIGRlbGwtcHJpdmFjeSBub3RpZmllcyBFQywgYW5kIHRpbWVvdXQgaXMg Y2FuY2VsbGVkLA0KPiA+ICAgIEhXIG1pYyBtdXRlIGFjdGl2YXRlZC4gSWYgRUMgbm90IG5vdGlm aWVkLCBIVyBtaWMgbXV0ZSB3aWxsIGFsc28gYmUNCj4gPiAgICBhY3RpdmF0ZWQgd2hlbiB0aW1l b3V0IHVzZWQgdXAsIGl0IGlzIGp1c3QgbGF0ZXIgdGhhbiBhY3RpdmUgYWNrDQo+ID4NCj4gPiBT aWduZWQtb2ZmLWJ5OiBQZXJyeSBZdWFuIDxwZXJyeV95dWFuQGRlbGwuY29tPg0KPiA+IC0tLQ0K PiA+IHY1IC0+IHY2Og0KPiA+ICogYWRkcmVzc2VkIGZlZWRiYWNrIGZyb20gSGFucw0KPiA+ICog YWRkcmVzc2VkIGZlZWRiYWNrIGZyb20gUGllcnJlDQo+ID4gKiBvcHRpbWl6ZSBzb21lIGRlYnVn IGZvcm1hdCB3aXRoIGRldl9kYmcoKQ0KPiA+ICogcmVtb3ZlIHBsYXRmb3JtIGRyaXZlcixjb21i aW5lZCBwcml2YWN5IGFjcGkgZHJpdmVyIGludG8gc2luZ2xlIHdtaQ0KPiA+ICAgZHJpdmVyIGZp bGUNCj4gPiAqIG9wdGltaXplIHN5c2ZzIGludGVyZmFjZSB3aXRoIHN0cmluZyBhZGRlZCB0byBi ZSBtb3JlIGNsZWFybHkNCj4gPiByZWFkaW5nDQo+ID4gKiByZW1vdmUgdW51c2VkIGZ1bmN0aW9u IGFuZCBjbGVhciBoZWFkZXIgZmlsZQ0KPiANCj4gVGhhbmsgeW91LCBhbG1vc3QgdGhlcmUuIEEg ZmV3IHNtYWxsIHJlbWFya3MgaW5saW5lLg0KPiANCj4gPiB2NCAtPiB2NToNCj4gPiAqIGFkZHJl c3NlZCBmZWVkYmFjayBmcm9tIFJhbmR5IER1bmxhcA0KPiA+ICogYWRkcmVzc2VkIGZlZWRiYWNr IGZyb20gUGllcnJlLUxvdWlzIEJvc3NhcnQNCj4gPiAqIHJlYmFzZSB0byBsYXRlc3QgNS4xMiBy YzQgdXBzdHJlYW0ga2VybmVsDQo+ID4gKiBmaXggc29tZSBzcGFjZSBhbGlnbm1lbnQgcHJvYmxl bQ0KPiA+IHYzIC0+IHY0Og0KPiA+ICogZml4IGZvcm1hdCBmb3IgS2NvbmZpZw0KPiA+ICogYWRk IHN5c2ZzIGRvY3VtZW50DQo+ID4gKiBhZGQgZmxvdyBjb21tZW50cyB0byB0aGUgcHJpdmFjeSB3 bWkvYWNwaSBkcml2ZXINCj4gPiAqIGFkZHJlc3NlZCBmZWVkYmFjayBmcm9tIEJhcm5hYsOhcyBQ xZFjemVbVGhhbmtzIHZlcnkgbXVjaF0NCj4gPiAqIGV4cG9ydCBwcml2YWN5X3ZhbGlkIHRvIG1h a2UgdGhlIGdsb2JhbCBzdGF0ZSBzaW1wbGVyIHRvIHF1ZXJ5DQo+ID4gKiBmaXggb25lIGlzc3Vl IHdoaWNoIHdpbGwgYmxvY2sgdGhlIGRlbGwtbGFwdG9wIGRyaXZlciB0byBsb2FkIHdoZW4NCj4g PiAgIHByaXZhY3kgZHJpdmVyIGludmFsaWQNCj4gPiAqIGFkZHJlc3NlZCBmZWVkYmFjayBmcm9t IFBpZXJyZS1Mb3VpcyBCb3NzYXJ0LHJlbW92ZSB0aGUgRUMgSUQgbWF0Y2gNCj4gPiB2MiAtPiB2 MzoNCj4gPiAqIGFkZCBzeXNmcyBhdHRyaWJ1dGVzIGRvYw0KPiA+IHYxIC0+IHYyOg0KPiA+ICog cXVlcnkgRUMgaGFuZGxlIGZyb20gRUMgZHJpdmVyIGRpcmVjdGx5Lg0KPiA+ICogZml4IHNvbWUg Y29kZSBzdHlsZS4NCj4gPiAqIGFkZCBLRVlfRU5EIHRvIGtleW1hcCBhcnJheS4NCj4gPiAqIGNs ZWFuIHBsYXRmb3JtIGRldmljZSB3aGVuIGNsZWFudXAgY2FsbGVkDQo+ID4gKiB1c2UgaGV4YWRl Y2ltYWwgZm9ybWF0IGZvciBsb2cgcHJpbnQgaW4gZGV2X2RiZw0KPiA+ICogcmVtb3ZlIF9fc2V0 X2JpdCBmb3IgdGhlIHJlcG9ydCBrZXlzIGZyb20gcHJvYmUuDQo+ID4gKiBmaXgga2V5bWFwIGxl YWsNCj4gPiAqIGFkZCBlcnJfZnJlZV9rZXltYXAgaW4gZGVsbF9wcml2YWN5X3dtaV9wcm9iZQ0K PiA+ICogd21pIGRyaXZlciB3aWxsIGJlIHVucmVnaXN0ZXJlZCBpZiBwcml2YWN5X2FjcGlfaW5p dCgpIGZhaWxzDQo+ID4gKiBhZGQgc3lzZnMgYXR0cmlidXRlIGZpbGVzIGZvciB1c2VyIHNwYWNl IHF1ZXJ5Lg0KPiA+ICogYWRkIGxlZHMgbWljbXV0ZSBkcml2ZXIgdG8gcHJpdmFjeSBhY3BpDQo+ ID4gKiBhZGQgbW9yZSBkZXNpZ24gaW5mbyB0aGUgY29tbWl0IGluZm8NCj4gPiAtLS0NCj4gPiAt LS0NCj4gPiAgLi4uL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tZGVsbC1wcml2YWN5LXdtaSAgIHwg IDU1ICsrKw0KPiA+ICBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL0tjb25maWcgICAgICAgICAg ICAgfCAgMTQgKw0KPiA+ICBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL01ha2VmaWxlICAgICAg ICAgICAgfCAgIDEgKw0KPiA+ICBkcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2RlbGwtbGFwdG9w LmMgICAgICAgfCAgMjMgKy0NCj4gPiAgZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBy aXZhY3ktd21pLmMgIHwgMzk0DQo+ID4gKysrKysrKysrKysrKysrKysrICBkcml2ZXJzL3BsYXRm b3JtL3g4Ni9kZWxsL2RlbGwtcHJpdmFjeS13bWkuaCAgfCAgMjMgKw0KPiA+ICBkcml2ZXJzL3Bs YXRmb3JtL3g4Ni9kZWxsL2RlbGwtd21pLmMgICAgICAgICAgfCAgIDggKy0NCj4gPiAgNyBmaWxl cyBjaGFuZ2VkLCA1MTEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkgIGNyZWF0ZSBtb2Rl DQo+ID4gMTAwNjQ0IERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tZGVs bC1wcml2YWN5LXdtaQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wbGF0Zm9ybS94 ODYvZGVsbC9kZWxsLXByaXZhY3ktd21pLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wcml2YWN5LXdtaS5oDQo+ID4NCj4gPiBkaWZmIC0t Z2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1kZWxsLXByaXZh Y3ktd21pDQo+ID4gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWRl bGwtcHJpdmFjeS13bWkNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAw MDAwMDAwMC4uN2Y5ZTE4NzA1ODYxDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL0RvY3Vt ZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tZGVsbC1wcml2YWN5LXdtaQ0KPiA+ IEBAIC0wLDAgKzEsNTUgQEANCj4gPiArV2hhdDoJCS9zeXMvYnVzL3dtaS9kZXZpY2VzLzY5MzI5 NjVGLTE2NzEtNENFQi1COTg4LQ0KPiBEM0FCMEE5MDE5MTkvZGVsbF9wcml2YWN5X3N1cHBvcnRl ZF90eXBlDQo+ID4gK0RhdGU6CQlBcHIgMjAyMQ0KPiA+ICtLZXJuZWxWZXJzaW9uOgk1LjEzDQo+ ID4gK0NvbnRhY3Q6CSJwZXJyeS55dWFuQGRlbGwuY29tPiINCj4gPiArRGVzY3JpcHRpb246DQo+ ID4gKwkJRGlzcGxheSB3aGljaCBkZWxsIGhhcmR3YXJlIGxldmVsIHByaXZhY3kgZGV2aWNlcyBh cmUNCj4gc3VwcG9ydGVkDQo+ID4gKwkJ4oCcRGVsbCBQcml2YWN54oCdIGlzIGEgc2V0IG9mIEhX LCBGVywgYW5kIFNXIGZlYXR1cmVzIHRvIGVuaGFuY2UNCj4gPiArCQlEZWxs4oCZcyBjb21taXRt ZW50IHRvIHBsYXRmb3JtIHByaXZhY3kgZm9yIE1JQywgQ2FtZXJhLCBhbmQNCj4gPiArCQllUHJp dmFjeSBzY3JlZW5zLg0KPiA+ICsJCVRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUgcHJpdmFjeSBkZXZp Y2VzIGFyZToNCj4gPiArQXR0cmlidXRlczoNCj4gPiArCQlNaWNyb3Bob25lIE11dGU6DQo+ID4g KwkJCQlJZGVudGlmaWVzIHRoZSBsb2NhbCBtaWNyb3Bob25lIGNhbiBiZSBtdXRlZA0KPiBieSBo YXJkd2FyZSwgbm8gYXBwbGljYXRpb25zDQo+ID4gKwkJCQlpcyBhdmFpbGFibGUgdG8gY2FwdHVy ZSBzeXN0ZW0gbWljIHNvdW5kDQo+ID4gKw0KPiA+ICsJCUNhbWVyYSBTaHV0dGVyOg0KPiA+ICsJ CQkJSWRlbnRpZmllcyBjYW1lcmEgc2h1dHRlciBjb250cm9sbGVkIGJ5DQo+IGhhcmR3YXJlLCB3 aGljaCBpcyBhIG1pY3JvbWVjaGFuaWNhbA0KPiA+ICsJCQkJc2h1dHRlciBhc3NlbWJseSB0aGF0 IGlzIGJ1aWx0IG9udG8gdGhlIGNhbWVyYQ0KPiBtb2R1bGUgdG8gYmxvY2sgY2FwdHVyaW5nIGlt YWdlcw0KPiA+ICsJCQkJZnJvbSBvdXRzaWRlIHRoZSBsYXB0b3ANCj4gPiArDQo+ID4gKwkJc3Vw cG9ydGVkOg0KPiA+ICsJCQkJVGhlIHByaXZhY3kgZGV2aWNlIGlzIHN1cHBvcnRlZCBieSB0aGlz IHN5c3RlbQ0KPiA+ICsNCj4gPiArCQl1bnN1cHBvcnRlZDoNCj4gPiArCQkJCVRoZSBwcml2YWN5 IGRldmljZSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMNCj4gc3lzdGVtDQo+ID4gKw0KPiA+ICsJ CUZvciBleGFtcGxlIHRvIGNoZWNrIHdoaWNoIHByaXZhY3kgZGV2aWNlcyBhcmUgc3VwcG9ydGVk Og0KPiA+ICsNCj4gPiArCQkjIGNhdCAvc3lzL2J1cy93bWkvZHJpdmVycy9kZWxsLXByaXZhY3kv NjkzMjk2NUYtMTY3MS0NCj4gNENFQi1COTg4LUQzQUIwQTkwMTkxOS9kZWxsX3ByaXZhY3lfc3Vw cG9ydGVkX3R5cGUNCj4gPiArCQlbTWljcm9waG9uZSBNdXRlXSBbc3VwcG9ydGVkXQ0KPiA+ICsJ CVtDYW1lcmEgU2h1dHRlcl0gW3N1cHBvcnRlZF0NCj4gPiArCQlbZVByaXZhY3kgU2NyZWVuXSBb dW5zdXBwb3J0ZWRdDQo+ID4gKw0KPiA+ICtXaGF0OgkJL3N5cy9idXMvd21pL2RldmljZXMvNjkz Mjk2NUYtMTY3MS00Q0VCLUI5ODgtDQo+IEQzQUIwQTkwMTkxOS9kZWxsX3ByaXZhY3lfY3VycmVu dF9zdGF0ZQ0KPiA+ICtEYXRlOgkJQXByIDIwMjENCj4gPiArS2VybmVsVmVyc2lvbjoJNS4xMw0K PiA+ICtDb250YWN0OgkicGVycnkueXVhbkBkZWxsLmNvbT4iDQo+ID4gK0Rlc2NyaXB0aW9uOg0K PiA+ICsJCUFsbG93IHVzZXIgc3BhY2UgdG8gY2hlY2sgY3VycmVudCBkZWxsIHByaXZhY3kgZGV2 aWNlIHN0YXRlLg0KPiA+ICsJCURlc2NyaWJlcyB0aGUgRGV2aWNlIFN0YXRlIGNsYXNzIGV4cG9z ZWQgYnkgQklPUyB3aGljaCBjYW4NCj4gYmUNCj4gPiArCQljb25zdW1lZCBieSB2YXJpb3VzIGFw cGxpY2F0aW9ucyBpbnRlcmVzdGVkIGluIGtub3dpbmcgdGhlDQo+IFByaXZhY3kNCj4gPiArCQlm ZWF0dXJlIGNhcGFiaWxpdGllcw0KPiA+ICtBdHRyaWJ1dGVzOg0KPiA+ICsJCW11dGVkOg0KPiA+ ICsJCQlJZGVudGlmaWVzIHRoZSBwcml2YWN5IGRldmljZSBpcyB0dXJuZWQgb2ZmIGFuZCBjYW5u b3QNCj4gc2VuZCBzdHJlYW0NCj4gPiArdG8gT1MgYXBwbGljYXRpb25zDQo+ID4gKw0KPiA+ICsJ CXVubXV0ZWQ6DQo+ID4gKwkJCUlkZW50aWZpZXMgdGhlIHByaXZhY3kgZGV2aWNlIGlzIHR1cm5l ZCBvbiAsYXVkaW8gb3INCj4gY2FtZXJhIGRyaXZlciBjYW4gZ2V0DQo+ID4gKwkJCXN0cmVhbSBm cm9tIG1pYyBhbmQgY2FtZXJhIG1vZHVsZSB0byBPUw0KPiBhcHBsaWNhdGlvbnMNCj4gPiArDQo+ ID4gKwkJRm9yIGV4YW1wbGUgdG8gY2hlY2sgYWxsIHN1cHBvcnRlZCBjdXJyZW50IHByaXZhY3kg ZGV2aWNlDQo+IHN0YXRlczoNCj4gPiArDQo+ID4gKwkJIyBjYXQgL3N5cy9idXMvd21pL2RyaXZl cnMvZGVsbC1wcml2YWN5LzY5MzI5NjVGLTE2NzEtDQo+IDRDRUItQjk4OC1EM0FCMEE5MDE5MTkv ZGVsbF9wcml2YWN5X2N1cnJlbnRfc3RhdGUNCj4gPiArCQlbTWljcm9waG9uZV0gW3VubXV0ZWRd DQo+ID4gKwkJW0NhbWVyYSBTaHV0dGVyXSBbdW5tdXRlZF0NCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9wbGF0Zm9ybS94ODYvZGVsbC9LY29uZmlnDQo+ID4gYi9kcml2ZXJzL3BsYXRmb3JtL3g4 Ni9kZWxsL0tjb25maWcNCj4gPiBpbmRleCBlMGE1NTMzN2Y1MWEuLjA1ZDEyNDQ0MmIyNSAxMDA2 NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL0tjb25maWcNCj4gPiArKysg Yi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL0tjb25maWcNCj4gPiBAQCAtMjA0LDQgKzIwNCwx OCBAQCBjb25maWcgREVMTF9XTUlfU1lTTUFODQo+ID4gIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2 ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbA0KPiA+ICAJICBi ZSBjYWxsZWQgZGVsbC13bWktc3lzbWFuLg0KPiA+DQo+ID4gK2NvbmZpZyBERUxMX1BSSVZBQ1kN Cj4gPiArCXRyaXN0YXRlICJEZWxsIEhhcmR3YXJlIFByaXZhY3kgU3VwcG9ydCINCj4gPiArCWRl cGVuZHMgb24gQUNQSQ0KPiA+ICsJZGVwZW5kcyBvbiBBQ1BJX1dNSQ0KPiA+ICsJZGVwZW5kcyBv biBJTlBVVA0KPiA+ICsJZGVwZW5kcyBvbiBERUxMX0xBUFRPUA0KPiA+ICsJZGVwZW5kcyBvbiBM RURTX1RSSUdHRVJfQVVESU8NCj4gPiArCXNlbGVjdCBERUxMX1dNSQ0KPiANCj4gREVMTF9XTUkg aXMgbm90IGEgaGVscGVyIGxpYnJhcnkgd2hpY2ggY2FuIGJlIHNlbGVjdGVkLCBwbGVhc2UgdXNl IGRlcGVuZHMNCj4gb24gaGVyZS4NCj4gDQo+IE1vcmUgaW4gZ2VuZXJhbCBJJ20gYSBiaXQgd29y cmllZCBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGJlaW5nIGFkZGVkIHRvIGRlbGwtDQo+IGxhcHRv cC5jIGFuZCBkZWxsLXdtaS5jIG9uIHRoZSBuZXcgZGVsbC1wcml2YWN5LXdtaS5rbyBtb2R1bGUu DQo+IA0KPiBXaGF0IGlmIGUuZy4gZGVsbC1sYXB0b3AuYyBnZXRzIGJ1aWx0aW4gd2hpbGUgZGVs bC1wcml2YWN5LXdtaS5jIGlzIGEgbW9kdWxlLg0KPiANCj4gVGhlbiB3ZSBoYXZlIGRlbGwtbGFw dG9wLmMgZGVwZW5kaW5nIG9uIHRoZSBkZWxsX3ByaXZhY3lfcHJlc2VudCBsaW5rZXItDQo+IHN5 bWJvbCwgYnV0IHRoYXQgc3ltYm9sIGlzIGluIGEgbW9kdWxlLCBzbyB0aGUgbWFpbiB2bWxpbnV6 IGJpbmFyeSB3aWxsIGZhaWwgdG8NCj4gbGluayBkdWUgdG8gdGhhdCBtaXNzaW5nIHN5bWJvbC4N Cj4gDQo+IFRvIGZpeCB0aGlzIHlvdSBuZWVkIHRvIGFkZDoNCj4gDQo+IAlkZXBlbmRzIG9uIERF TExfUFJJVkFDWSB8fCBERUxMX1BSSVZBQ1kgPSBuDQo+IA0KPiBUbyB0aGUgS2NvbmZpZyBzZWN0 aW9ucyBmb3IgYm90aCBERUxMX1dNSSBhbmQgREVMTF9MQVBUT1ANCg0KSWYgSSBhZGQgImRlcGVu ZHMgb24gREVMTF9QUklWQUNZIHx8IERFTExfUFJJVkFDWSA9IG4iIHRvIGJvdGggREVMTF9XTUkg YW5kIERFTExfTEFQVE9QDQpUaGUgY29tcGlsZSB3aWxsIHJlcG9ydCBlcnJvciAicmVjdXJzaXZl IGRlcGVuZGVuY3kgZGV0ZWN0ZWQiDQpJIGRvIG5vdCB0aGluayB0aGUgZGVsbC1sYXB0b3Agd2ls bCBiZSBidWlsdGluIG9wdGlvbiBhcyB3ZSBrbm93Lg0KDQpJIGFtIGNvbmZ1c2VkIHRoYXQgd2h5 IHRoZSBzeW1ib2wgd2lsbCBiZSBmYWlsZWQgdG8gbGluayBsaWtlIHRoYXQgPw0KYmVjYXVzZSB0 aGUgY29tcGlsZXIgY2FuIGZpbmQgdGhlIGRlbGxfcHJpdmFjeV9wcmVzZW50IHdoaWNoIGlzIGRl ZmluZWQgaW4gb25lIGNvbW1vbiBoZWFkZXIgZmlsZS4NCg0KDQoNCj4gDQo+IA0KPiA+ICsJaGVs cA0KPiA+ICsJICBUaGlzIGRyaXZlciBwcm92aWRlcyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSAiRGVs bCBIYXJkd2FyZSBQcml2YWN5Ig0KPiBmZWF0dXJlDQo+ID4gKwkgIG9mIERlbGwgbGFwdG9wcy4N Cj4gPiArDQo+ID4gKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29z ZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbA0KPiA+ICsJICBiZSBjYWxsZWQgZGVsbF9wcml2YWN5 Lg0KPiA+ICBlbmRpZiAjIFg4Nl9QTEFURk9STV9EUklWRVJTX0RFTEwNCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9NYWtlZmlsZQ0KPiA+IGIvZHJpdmVycy9wbGF0 Zm9ybS94ODYvZGVsbC9NYWtlZmlsZQ0KPiA+IGluZGV4IGQ3MjBhM2U0MmFlMy4uN2RhMGMzM2Rm Y2NhIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvTWFrZWZpbGUN Cj4gPiArKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL01ha2VmaWxlDQo+ID4gQEAgLTE5 LDMgKzE5LDQgQEAgb2JqLSQoQ09ORklHX0RFTExfV01JX0FJTykJCSs9IGRlbGwtd21pLQ0KPiBh aW8ubw0KPiA+ICBvYmotJChDT05GSUdfREVMTF9XTUlfREVTQ1JJUFRPUikJKz0gZGVsbC13bWkt ZGVzY3JpcHRvci5vDQo+ID4gIG9iai0kKENPTkZJR19ERUxMX1dNSV9MRUQpCQkrPSBkZWxsLXdt aS1sZWQubw0KPiA+ICBvYmotJChDT05GSUdfREVMTF9XTUlfU1lTTUFOKQkJKz0gZGVsbC13bWkt c3lzbWFuLw0KPiA+ICtvYmotJChDT05GSUdfREVMTF9QUklWQUNZKSAgICAgICAgICAgICAgKz0g ZGVsbC1wcml2YWN5LXdtaS5vDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2 L2RlbGwvZGVsbC1sYXB0b3AuYw0KPiA+IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxs LWxhcHRvcC5jDQo+ID4gaW5kZXggNzBlZGM1YmIzYTE0Li5lN2ZmYzBiODEyMDggMTAwNjQ0DQo+ ID4gLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jDQo+ID4gKysr IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLWxhcHRvcC5jDQo+ID4gQEAgLTMxLDYg KzMxLDggQEANCj4gPiAgI2luY2x1ZGUgImRlbGwtcmJ0bi5oIg0KPiA+ICAjaW5jbHVkZSAiZGVs bC1zbWJpb3MuaCINCj4gPg0KPiA+ICsjaW5jbHVkZSAiZGVsbC1wcml2YWN5LXdtaS5oIg0KPiA+ ICsNCj4gPiAgc3RydWN0IHF1aXJrX2VudHJ5IHsNCj4gPiAgCWJvb2wgdG91Y2hwYWRfbGVkOw0K PiA+ICAJYm9vbCBrYmRfbGVkX25vdF9wcmVzZW50Ow0KPiA+IEBAIC05MCw2ICs5Miw3IEBAIHN0 YXRpYyBzdHJ1Y3QgcmZraWxsICp3aWZpX3Jma2lsbDsgIHN0YXRpYyBzdHJ1Y3QNCj4gPiByZmtp bGwgKmJsdWV0b290aF9yZmtpbGw7ICBzdGF0aWMgc3RydWN0IHJma2lsbCAqd3dhbl9yZmtpbGw7 ICBzdGF0aWMNCj4gPiBib29sIGZvcmNlX3Jma2lsbDsNCj4gPiArc3RhdGljIGJvb2wgaGFzX3By aXZhY3k7DQo+IA0KPiBUaGVyZSBpcyBhIHByb2JsZW0gaW4gdGhlIGRlbC1sYXB0b3AuYyBjb2Rl IHdpdGggdGhlIGxlZF9jbGFzc2Rldg0KPiB1bnJlZ2lzdGVyaW5nIHdoaWNoIGlzIG5vdCBpbnRy b2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGJ1dCB0aGlzIHBhdGNoIGlzIGEgZ29vZA0KPiBvcHBvcnR1 bml0eSB0byBmaXggdGhpcy4NCj4gDQo+IFRoZSBwcm9ibGVtIGlzIHRoYXQgaW4gdGhlIGRlbGxf aW5pdCBlcnJvci1leGl0IHBhdGggYXMgd2VsbCBhcyBpbiBkZWxsX2V4aXQNCj4gbGVkX2NsYXNz ZGV2X3VucmVnaXN0ZXIoKSBnZXRzIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHksIHdoaWxlIHRoZSBy ZWdpc3RlcmluZw0KPiBoYXMgb25seSBoYXBwZW5lZCB1bmRlciB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbjoNCj4gDQo+IAlpZiAoZGVsbF9zbWJpb3NfZmluZF90b2tlbihHTE9CQUxfTUlDX01VVEVf RElTQUJMRSkgJiYNCj4gCSAgICBkZWxsX3NtYmlvc19maW5kX3Rva2VuKEdMT0JBTF9NSUNfTVVU RV9FTkFCTEUpKSB7DQo+IA0KPiBTbyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvZGUgbWF5IGVuZCB1 cCB1bnJlZ2lzdGVyaW5nIGEgbmV2ZXIgcmVnaXN0ZXJlZA0KPiBsZWRfY2xhc3NkZXYgd2hpY2gg aXMgbm90IGdvb2QuDQo+IA0KPiBTaW5jZSB5b3UgYXJlIG1ha2luZyB0aGUgdW5yZWdpc3Rlcmlu ZyBjb25kaXRpb25hbCBpbiB0aGlzIHBhdGNoLCBpdCB3b3VsZCBiZQ0KPiBnb29kIHRvIGFsc28g Zml4IHRoaXMgaXNzdWUuDQo+IA0KPiBQbGVhc2UgY2hhbmdlOg0KPiANCj4gc3RhdGljIGJvb2wg aGFzX3ByaXZhY3k7DQo+IA0KPiBUbzoNCj4gDQo+IHN0YXRpYyBib29sIG1pY211dGVfbGVkX3Jl Z2lzdGVyZWQ7DQo+IA0KPiANCj4gDQo+ID4NCj4gPiAgbW9kdWxlX3BhcmFtKGZvcmNlX3Jma2ls bCwgYm9vbCwgMDQ0NCk7DQo+ID4gTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9yZmtpbGwsICJlbmFi bGUgcmZraWxsIG9uIG5vbiB3aGl0ZWxpc3RlZA0KPiA+IG1vZGVscyIpOyBAQCAtMjIwNiwxMCAr MjIwOSwxNiBAQCBzdGF0aWMgaW50IF9faW5pdCBkZWxsX2luaXQodm9pZCkNCj4gPg0KPiA+ICAJ aWYgKGRlbGxfc21iaW9zX2ZpbmRfdG9rZW4oR0xPQkFMX01JQ19NVVRFX0RJU0FCTEUpICYmDQo+ ID4gIAkgICAgZGVsbF9zbWJpb3NfZmluZF90b2tlbihHTE9CQUxfTUlDX01VVEVfRU5BQkxFKSkg ew0KPiA+IC0JCW1pY211dGVfbGVkX2NkZXYuYnJpZ2h0bmVzcyA9DQo+IGxlZHRyaWdfYXVkaW9f Z2V0KExFRF9BVURJT19NSUNNVVRFKTsNCj4gPiAtCQlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0 ZXIoJnBsYXRmb3JtX2RldmljZS0+ZGV2LA0KPiAmbWljbXV0ZV9sZWRfY2Rldik7DQo+ID4gLQkJ aWYgKHJldCA8IDApDQo+ID4gLQkJCWdvdG8gZmFpbF9sZWQ7DQo+ID4gKwkJaWYgKGRlbGxfcHJp dmFjeV9wcmVzZW50KCkpDQo+ID4gKwkJCWhhc19wcml2YWN5ID0gdHJ1ZTsNCj4gPiArCQllbHNl DQo+ID4gKwkJCWhhc19wcml2YWN5ID0gZmFsc2U7DQo+ID4gKwkJaWYgKCFoYXNfcHJpdmFjeSkg ew0KPiA+ICsJCQltaWNtdXRlX2xlZF9jZGV2LmJyaWdodG5lc3MgPQ0KPiBsZWR0cmlnX2F1ZGlv X2dldChMRURfQVVESU9fTUlDTVVURSk7DQo+ID4gKwkJCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdp c3RlcigmcGxhdGZvcm1fZGV2aWNlLT5kZXYsDQo+ICZtaWNtdXRlX2xlZF9jZGV2KTsNCj4gPiAr CQkJaWYgKHJldCA8IDApDQo+ID4gKwkJCQlnb3RvIGZhaWxfbGVkOw0KPiA+ICsJCX0NCj4gPiAg CX0NCj4gDQo+IEFuZCBjaGFuZ2UgdGhpcyBibG9jayB0bw0KPiANCj4gCWlmIChkZWxsX3NtYmlv c19maW5kX3Rva2VuKEdMT0JBTF9NSUNfTVVURV9ESVNBQkxFKSAmJg0KPiAJICAgIGRlbGxfc21i aW9zX2ZpbmRfdG9rZW4oR0xPQkFMX01JQ19NVVRFX0VOQUJMRSkgJiYNCj4gCSAgICAhZGVsbF9w cml2YWN5X3ByZXNlbnQoKSkgew0KPiAJCW1pY211dGVfbGVkX2NkZXYuYnJpZ2h0bmVzcyA9DQo+ IGxlZHRyaWdfYXVkaW9fZ2V0KExFRF9BVURJT19NSUNNVVRFKTsNCj4gCQlyZXQgPSBsZWRfY2xh c3NkZXZfcmVnaXN0ZXIoJnBsYXRmb3JtX2RldmljZS0+ZGV2LA0KPiAmbWljbXV0ZV9sZWRfY2Rl dik7DQo+IAkJaWYgKHJldCA8IDApDQo+IAkJCWdvdG8gZmFpbF9sZWQ7DQo+IAkJbWljbXV0ZV9s ZWRfcmVnaXN0ZXJlZCA9IHRydWU7DQo+IAl9DQo+IA0KPiBUaGlzIGFsc28gbG9va3MgY2xlYW5l ci9uaWNlciB3aXRoIG9uZSBsZXNzIGluZGVudCBsZXZlbCB0b28gOikNCj4gDQo+IA0KPiA+DQo+ ID4gIAlpZiAoYWNwaV92aWRlb19nZXRfYmFja2xpZ2h0X3R5cGUoKSAhPSBhY3BpX2JhY2tsaWdo dF92ZW5kb3IpIEBADQo+ID4gLTIyNTcsNyArMjI2Niw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGRl bGxfaW5pdCh2b2lkKQ0KPiA+ICBmYWlsX2dldF9icmlnaHRuZXNzOg0KPiA+ICAJYmFja2xpZ2h0 X2RldmljZV91bnJlZ2lzdGVyKGRlbGxfYmFja2xpZ2h0X2RldmljZSk7DQo+ID4gIGZhaWxfYmFj a2xpZ2h0Og0KPiA+IC0JbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJm1pY211dGVfbGVkX2NkZXYp Ow0KPiA+ICsJaWYgKCFoYXNfcHJpdmFjeSkNCj4gDQo+IENoYW5nZSB0aGlzIHRvOg0KPiANCj4g CWlmIChtaWNtdXRlX2xlZF9yZWdpc3RlcmVkKQ0KPiA+ICsJCWxlZF9jbGFzc2Rldl91bnJlZ2lz dGVyKCZtaWNtdXRlX2xlZF9jZGV2KTsNCj4gDQo+IFRoaXMgd2F5IHRoZSBpZiBjb25kaXRpb24g YWxzbyBpcyBtb3JlIGxvZ2ljYWwgLyBlYXNpZXIgdG8gc2VlIHdoeSB0aGUgaWYgaXMgdGhlcmUu DQo+IA0KPiA+ICBmYWlsX2xlZDoNCj4gPiAgCWRlbGxfY2xlYW51cF9yZmtpbGwoKTsNCj4gPiAg ZmFpbF9yZmtpbGw6DQo+ID4gQEAgLTIyNzgsNyArMjI4OCw4IEBAIHN0YXRpYyB2b2lkIF9fZXhp dCBkZWxsX2V4aXQodm9pZCkNCj4gPiAgCQl0b3VjaHBhZF9sZWRfZXhpdCgpOw0KPiA+ICAJa2Jk X2xlZF9leGl0KCk7DQo+ID4gIAliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoZGVsbF9iYWNr bGlnaHRfZGV2aWNlKTsNCj4gPiAtCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZtaWNtdXRlX2xl ZF9jZGV2KTsNCj4gPiArCWlmICghaGFzX3ByaXZhY3kpDQo+IA0KPiBBbmQgaGVyZSB0b28sIGNo YW5nZSB0aGlzIHRvOg0KPiANCj4gCWlmIChtaWNtdXRlX2xlZF9yZWdpc3RlcmVkKQ0KPiANCj4g PiArCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbWljbXV0ZV9sZWRfY2Rldik7DQo+ID4gIAlk ZWxsX2NsZWFudXBfcmZraWxsKCk7DQo+ID4gIAlpZiAocGxhdGZvcm1fZGV2aWNlKSB7DQo+ID4g IAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGxhdGZvcm1fZGV2aWNlKTsNCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXByaXZhY3ktd21pLmMNCj4g PiBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wcml2YWN5LXdtaS5jDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjRiZTc1NDhkMWEwMw0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2Rl bGwtcHJpdmFjeS13bWkuYw0KPiA+IEBAIC0wLDAgKzEsMzk0IEBADQo+ID4gKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gPiArLyoNCj4gPiArICogRGVsbCBwcml2 YWN5IG5vdGlmaWNhdGlvbiBkcml2ZXINCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChDKSAy MDIxIERlbGwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4g KyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQNCj4gPiArDQo+ID4g KyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnB1 dC9zcGFyc2Uta2V5bWFwLmg+ICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9sZWRzLmg+ICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4gI2luY2x1ZGUNCj4gPiAr PGxpbnV4L3dtaS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgImRlbGwtcHJpdmFjeS13bWkuaCIN Cj4gPiArDQo+ID4gKyNkZWZpbmUgREVMTF9QUklWQUNZX0dVSUQgIjY5MzI5NjVGLTE2NzEtNENF Qi1COTg4LQ0KPiBEM0FCMEE5MDE5MTkiDQo+ID4gKyNkZWZpbmUgTUlDUk9QSE9ORV9TVEFUVVMJ CUJJVCgwKQ0KPiA+ICsjZGVmaW5lIENBTUVSQV9TVEFUVVMJCSAgICAgICAgQklUKDEpDQo+ID4g KyNkZWZpbmUgREVMTF9QUklWQUNZX0FVRElPX0VWRU5UICAweDEgI2RlZmluZQ0KPiA+ICtERUxM X1BSSVZBQ1lfQ0FNRVJBX0VWRU5UIDB4Mg0KPiA+ICsjZGVmaW5lIGxlZF90b19wcml2KGMpICAg ICAgIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgcHJpdmFjeV93bWlfZGF0YSwgY2RldikNCj4gPiAr DQo+ID4gKy8qDQo+ID4gKyAqIFRoZSB3bWlfbGlzdCBpcyB1c2VkIHRvIHN0b3JlIHRoZSBwcml2 YWN5X3ByaXYgc3RydWN0IHdpdGggbXV0ZXgNCj4gPiArcHJvdGVjdGluZyAgKi8gc3RhdGljIExJ U1RfSEVBRCh3bWlfbGlzdCk7IHN0YXRpYw0KPiA+ICtERUZJTkVfTVVURVgobGlzdF9tdXRleCk7 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgcHJpdmFjeV93bWlfZGF0YSB7DQo+ID4gKwlzdHJ1Y3QgaW5w dXRfZGV2ICppbnB1dF9kZXY7DQo+ID4gKwlzdHJ1Y3Qgd21pX2RldmljZSAqd2RldjsNCj4gPiAr CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsNCj4gPiArCXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsN Cj4gPiArCXUzMiBmZWF0dXJlc19wcmVzZW50Ow0KPiA+ICsJdTMyIGxhc3Rfc3RhdHVzOw0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArLyogREVMTCBQcml2YWN5IFR5cGUgKi8NCj4gPiArZW51bSBkZWxs X2hhcmR3YXJlX3ByaXZhY3lfdHlwZSB7DQo+ID4gKwlERUxMX1BSSVZBQ1lfVFlQRV9BVURJTyA9 IDAsDQo+ID4gKwlERUxMX1BSSVZBQ1lfVFlQRV9DQU1FUkEsDQo+ID4gKwlERUxMX1BSSVZBQ1lf VFlQRV9TQ1JFRU4sDQo+ID4gKwlERUxMX1BSSVZBQ1lfVFlQRV9NQVgsDQo+ID4gK307DQo+ID4g Kw0KPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHByaXZhY3lfdHlwZXNbREVMTF9QUklW QUNZX1RZUEVfTUFYXSA9IHsNCj4gPiArCVtERUxMX1BSSVZBQ1lfVFlQRV9BVURJT10gPSAiTWlj cm9waG9uZSIsDQo+ID4gKwlbREVMTF9QUklWQUNZX1RZUEVfQ0FNRVJBXSA9ICJDYW1lcmEgU2h1 dHRlciIsDQo+ID4gKwlbREVMTF9QUklWQUNZX1RZUEVfU0NSRUVOXSA9ICJlUHJpdmFjeSBTY3Jl ZW4iLCB9Ow0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogS2V5bWFwIGZvciBXTUkgcHJpdmFjeSBl dmVudHMgb2YgdHlwZSAweDAwMTIgICovIHN0YXRpYyBjb25zdA0KPiA+ICtzdHJ1Y3Qga2V5X2Vu dHJ5IGRlbGxfd21pX2tleW1hcF90eXBlXzAwMTJbXSA9IHsNCj4gPiArCS8qIHByaXZhY3kgbWlj IG11dGUgKi8NCj4gPiArCXsgS0VfS0VZLCAweDAwMDEsIHsgS0VZX01JQ01VVEUgfSB9LA0KPiA+ ICsJLyogcHJpdmFjeSBjYW1lcmEgbXV0ZSAqLw0KPiA+ICsJeyBLRV9TVywgIDB4MDAwMiwgeyBT V19DQU1FUkFfTEVOU19DT1ZFUiB9IH0sDQo+ID4gKwl7IEtFX0VORCwgMH0sDQo+ID4gK307DQo+ ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBnbG9iYWwgcHJpdmFjeSBzdGF0ZSBmb3Igb3RoZXIgbW9k dWxlcyB0byBxdWVyeSBpZiB0aGUgcHJpdmFjeQ0KPiA+ICtkcml2ZXIgbG9hZGVkIHN1Y2Nlc3Nm dWxseQ0KPiA+ICsgKiBvciBubyBwcml2YWN5IFdNSSBkZXZpY2Ugd2FzIGRldGVjdGVkIGF0IGlu aXRpYWwgcHJvYmUgcGhhc2UgICovDQo+ID4gK2Jvb2wgZGVsbF9wcml2YWN5X3ByZXNlbnQodm9p ZCkgew0KPiA+ICsJc3RydWN0IHByaXZhY3lfd21pX2RhdGEgKnByaXY7DQo+ID4gKw0KPiA+ICsJ bXV0ZXhfbG9jaygmbGlzdF9tdXRleCk7DQo+ID4gKwlwcml2ID0gbGlzdF9maXJzdF9lbnRyeV9v cl9udWxsKCZ3bWlfbGlzdCwNCj4gPiArCQkJc3RydWN0IHByaXZhY3lfd21pX2RhdGEsDQo+ID4g KwkJCWxpc3QpOw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZsaXN0X211dGV4KTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gcHJpdjsNCj4gPiArfQ0KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkZWxsX3ByaXZh Y3lfcHJlc2VudCk7DQo+IA0KPiBJIHRob3VnaHQgdGhhdCB3ZSBoYWQgY2hhbmVkIHRoaXMgdG8g ZGVsbF9wcml2YWN5X2hhc19taWNfbXV0ZSA/DQo+IA0KPiBSZXR1cm5pbmc6DQo+IA0KPiAJcmV0 dXJuIHByaXYgJiYgKHByaXYtPmZlYXR1cmVzX3ByZXNlbnQgJg0KPiBCSVQoREVMTF9QUklWQUNZ X1RZUEVfQVVESU8pKTsNCj4gDQo+ID8NCj4gDQo+IFdoYXQgaGFzIGhhcHBlbmVkIHRvIHRoYXQg Y2hhbmdlLCBwbGVhc2UgY2hhbmdlIHRoYXQgYmFjaywgdGhlIG9ubHkgdXNlciBvZg0KPiBkZWxs X3ByaXZhY3lfcHJlc2VudCgpIGlzIGRlbGwtbGFwdG9wLmMgYW5kIHRoYXQgd2FudHMgdG8ga25v dyBpZiBkZWxsLXByaXZhY3kuYw0KPiB3aWxsIGJlIGhhbmRsaW5nIHRoZSBtdXRlLWxlZCBvciBu b3QsIHNvIG9ubHkgY2hlY2tpbmcgZm9yIGRlbGwtcHJpdmFjeQ0KPiBwcmVzZW5jZSBpcyBub3Qg ZW5vdWdoLg0KPiANCj4gDQo+IA0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogVGhlIGZsb3cgb2Yg cHJpdmFjeSBldmVudDoNCj4gPiArICogMSkgVXNlciBwcmVzc2VzIGtleS4gSFcgZG9lcyBzdHVm ZiB3aXRoIHRoaXMga2V5ICh0aW1lb3V0IGlzDQo+ID4gK3N0YXJ0ZWQpDQo+ID4gKyAqIDIpIFdN SSBldmVudCBpcyBlbWl0dGVkIGZyb20gQklPUw0KPiA+ICsgKiAzKSBXTUkgZXZlbnQgaXMgcmVj ZWl2ZWQgYnkgZGVsbC1wcml2YWN5DQo+ID4gKyAqIDQpIEtFWV9NSUNNVVRFIGVtaXR0ZWQgZnJv bSBkZWxsLXByaXZhY3kNCj4gPiArICogNSkgVXNlcmxhbmQgcGlja3MgdXAga2V5IGFuZCBtb2Rp ZmllcyBrY29udHJvbCBmb3IgU1cgbXV0ZQ0KPiA+ICsgKiA2KSBDb2RlYyBrZXJuZWwgZHJpdmVy IGNhdGNoZXMgYW5kIGNhbGxzIGxlZHRyaWdfYXVkaW9fc2V0IGRlZmluZWQgYnkNCj4gPiArICog ICAgZGVsbC1wcml2YWN5LWFjcGkgZHJpdmVyLiBDb2RlYyBkcml2ZXIgd2lsbCBjYWxsIGxpa2Ug dGhpcyB0byBzd2l0Y2gNCj4gbWljbXV0ZSBsZWQgc3RhdGUuDQo+ID4gKyAqICAgIGxlZHRyaWdf YXVkaW9fc2V0KExFRF9BVURJT19NSUNNVVRFLCBtaWNtdXRlX2xlZCA/DQo+IExFRF9PTiA6TEVE X09GRik7DQo+ID4gKyAqIDcpIElmICJMRUQiIGlzIHNldCB0byBvbiBkZWxsLXByaXZhY3kgbm90 aWZpZXMgRUMsYW5kIHRpbWVvdXQgaXMgY2FuY2VsbGVkLA0KPiA+ICsgKglIVyBtaWMgbXV0ZSBh Y3RpdmF0ZWQuDQo+ID4gKyAqLw0KPiA+ICtib29sIGRlbGxfcHJpdmFjeV9wcm9jZXNzX2V2ZW50 KGludCB0eXBlLCBpbnQgY29kZSwgaW50IHN0YXR1cykgew0KPiA+ICsJc3RydWN0IHByaXZhY3lf d21pX2RhdGEgKnByaXY7DQo+ID4gKwljb25zdCBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7DQo+ID4g Kwlib29sIHJldCA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJmxpc3RfbXV0ZXgp Ow0KPiA+ICsJcHJpdiA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmd21pX2xpc3QsDQo+ID4g KwkJCXN0cnVjdCBwcml2YWN5X3dtaV9kYXRhLA0KPiA+ICsJCQlsaXN0KTsNCj4gPiArCWlmICgh cHJpdikgew0KPiA+ICsJCWdvdG8gZXJyb3I7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJa2V5ID0g c3BhcnNlX2tleW1hcF9lbnRyeV9mcm9tX3NjYW5jb2RlKHByaXYtPmlucHV0X2RldiwgKHR5cGUg PDwNCj4gMTYpIHwgY29kZSk7DQo+ID4gKwlpZiAoIWtleSkgew0KPiA+ICsJCWRldl93YXJuKCZw cml2LT53ZGV2LT5kZXYsICJVbmtub3duIGtleSB3aXRoIHR5cGUNCj4gMHglMDR4IGFuZCBjb2Rl IDB4JTA0eCBwcmVzc2VkXG4iLA0KPiA+ICsJCQl0eXBlLCBjb2RlKTsNCj4gPiArCQlnb3RvIGVy cm9yOw0KPiA+ICsJfQ0KPiA+ICsJZGV2X2RiZygmcHJpdi0+d2Rldi0+ZGV2LCAiS2V5IHdpdGgg dHlwZSAweCUwNHggYW5kIGNvZGUgMHglMDR4DQo+ID4gK3ByZXNzZWRcbiIsIHR5cGUsIGNvZGUp Ow0KPiA+ICsNCj4gPiArCXN3aXRjaCAoY29kZSkgew0KPiA+ICsJY2FzZSBERUxMX1BSSVZBQ1lf QVVESU9fRVZFTlQ6IC8qIE1pYyBtdXRlICovDQo+ID4gKwljYXNlIERFTExfUFJJVkFDWV9DQU1F UkFfRVZFTlQ6IC8qIENhbWVyYSBtdXRlICovDQo+ID4gKwkJcHJpdi0+bGFzdF9zdGF0dXMgPSBz dGF0dXM7DQo+ID4gKwkJc3BhcnNlX2tleW1hcF9yZXBvcnRfZW50cnkocHJpdi0+aW5wdXRfZGV2 LCBrZXksIDEsIHRydWUpOw0KPiA+ICsJCXJldCA9IHRydWU7DQo+ID4gKwkJYnJlYWs7DQo+ID4g KwlkZWZhdWx0Og0KPiA+ICsJCWRldl9kYmcoJnByaXYtPndkZXYtPmRldiwgInVua25vd24gZXZl bnQgdHlwZSAweCUwNHgNCj4gMHglMDR4XG4iLCB0eXBlLCBjb2RlKTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gK2Vycm9yOg0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZsaXN0X211dGV4KTsNCj4gPiArCXJl dHVybiByZXQ7DQo+ID4gK30NCj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZGVsbF9wcml2YWN5X3By b2Nlc3NfZXZlbnQpOw0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QgZGVsbF9wcml2YWN5X3N1 cHBvcnRlZF90eXBlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ICsJCQkJCXN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICphdHRyLA0KPiA+ICsJCQkJCWNoYXIgKmJ1ZikNCj4gPiArew0KPiA+ ICsJc3RydWN0IHByaXZhY3lfd21pX2RhdGEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsN Cj4gPiArCWVudW0gZGVsbF9oYXJkd2FyZV9wcml2YWN5X3R5cGUgdHlwZTsNCj4gPiArCXUzMiBw cml2YWN5X2xpc3Q7DQo+ID4gKwljaGFyICpzID0gYnVmOw0KPiA+ICsNCj4gPiArCXByaXZhY3lf bGlzdCA9IHByaXYtPmZlYXR1cmVzX3ByZXNlbnQ7DQo+ID4gKwlmb3IgKHR5cGUgPSBERUxMX1BS SVZBQ1lfVFlQRV9BVURJTzsgdHlwZSA8DQo+IERFTExfUFJJVkFDWV9UWVBFX01BWDsgdHlwZSsr KSB7DQo+ID4gKwkJaWYgKHByaXZhY3lfbGlzdCAmIEJJVCh0eXBlKSkNCj4gPiArCQkJcyArPSBz cHJpbnRmKHMsICJbJXNdIFtzdXBwb3J0ZWRdXG4iLA0KPiBwcml2YWN5X3R5cGVzW3R5cGVdKTsN Cj4gPiArCQllbHNlDQo+ID4gKwkJCXMgKz0gc3ByaW50ZihzLCAiWyVzXSBbdW5zdXBwb3J0ZWRd XG4iLA0KPiBwcml2YWN5X3R5cGVzW3R5cGVdKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1 cm4gKHMgLSBidWYpOw0KPiA+ICt9DQo+IA0KPiBBcyBtZW50aW9uZWQgYmVmb3JlIEkgdGhpbmsg KG5vdCBzdXJlKSwgcGxlYXNlIHVzZSBzeXNmc19lbWl0X2F0IGhlcmUsIGxpa2UgdGhpczoNCj4g DQo+IHN0YXRpYyBzc2l6ZV90IGRlbGxfcHJpdmFjeV9zdXBwb3J0ZWRfdHlwZV9zaG93KHN0cnVj dCBkZXZpY2UgKmRldiwNCj4gCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4g CQkJCQljaGFyICpidWYpDQo+IHsNCj4gCXN0cnVjdCBwcml2YWN5X3dtaV9kYXRhICpwcml2ID0g ZGV2X2dldF9kcnZkYXRhKGRldik7DQo+IAllbnVtIGRlbGxfaGFyZHdhcmVfcHJpdmFjeV90eXBl IHR5cGU7DQo+IAl1MzIgcHJpdmFjeV9saXN0Ow0KPiAJaW50IGxlbiA9IDA7DQo+IA0KPiAJcHJp dmFjeV9saXN0ID0gcHJpdi0+ZmVhdHVyZXNfcHJlc2VudDsNCj4gCWZvciAodHlwZSA9IERFTExf UFJJVkFDWV9UWVBFX0FVRElPOyB0eXBlIDwNCj4gREVMTF9QUklWQUNZX1RZUEVfTUFYOyB0eXBl KyspIHsNCj4gCQlpZiAocHJpdmFjeV9saXN0ICYgQklUKHR5cGUpKQ0KPiAJCQlsZW4gKz0gc3lz ZnNfZW1pdF9hdChidWYsIGxlbiwgIlslc10gW3N1cHBvcnRlZF1cbiIsDQo+IHByaXZhY3lfdHlw ZXNbdHlwZV0pOw0KPiAJCWVsc2UNCj4gCQkJbGVuICs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBsZW4s ICAiWyVzXSBbdW5zdXBwb3J0ZWRdXG4iLA0KPiBwcml2YWN5X3R5cGVzW3R5cGVdKTsNCj4gCX0N Cj4gDQo+IAlyZXR1cm4gbGVuOw0KPiB9DQo+IA0KPiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgd2Ug bmV2ZXIgb3ZlcnJ1biB0aGUgc2l6ZSBvZiB0aGUgcGFzc2VkIGluIGJ1ZmZlci4NCj4gDQo+IA0K PiANCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90IGRlbGxfcHJpdmFjeV9jdXJyZW50X3N0YXRl X3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ICsJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICphdHRyLA0KPiA+ICsJCQkJCWNoYXIgKmJ1ZikNCj4gPiArew0KPiA+ICsJc3RydWN0IHBy aXZhY3lfd21pX2RhdGEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArCXUzMiBw cml2YWN5X3N1cHBvcnRlZCA9IHByaXYtPmZlYXR1cmVzX3ByZXNlbnQ7DQo+ID4gKwllbnVtIGRl bGxfaGFyZHdhcmVfcHJpdmFjeV90eXBlIHR5cGU7DQo+ID4gKwl1MzIgcHJpdmFjeV9zdGF0ZSA9 IHByaXYtPmxhc3Rfc3RhdHVzOw0KPiA+ICsJY2hhciAqcyA9IGJ1ZjsNCj4gPiArDQo+ID4gKwlm b3IgKHR5cGUgPSBERUxMX1BSSVZBQ1lfVFlQRV9BVURJTzsgdHlwZSA8DQo+IERFTExfUFJJVkFD WV9UWVBFX01BWDsgdHlwZSsrKSB7DQo+ID4gKwkJaWYgKHByaXZhY3lfc3VwcG9ydGVkICYgQklU KHR5cGUpKSB7DQo+ID4gKwkJCWlmIChwcml2YWN5X3N0YXRlICYgQklUKHR5cGUpKQ0KPiA+ICsJ CQkJcyArPSBzcHJpbnRmKHMsICJbJXNdIFt1bm11dGVkXVxuIiwNCj4gcHJpdmFjeV90eXBlc1t0 eXBlXSk7DQo+ID4gKwkJCWVsc2UNCj4gPiArCQkJCXMgKz0gc3ByaW50ZihzLCAiWyVzXSBbbXV0 ZWRdXG4iLA0KPiBwcml2YWN5X3R5cGVzW3R5cGVdKTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIChzIC0gYnVmKTsNCj4gPiArfQ0KPiANCj4gQW5kIHRoZSBzYW1lIGhl cmUuDQo+IA0KPiANCj4gPiArDQo+ID4gK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhkZWxsX3ByaXZh Y3lfc3VwcG9ydGVkX3R5cGUpOw0KPiA+ICtzdGF0aWMgREVWSUNFX0FUVFJfUk8oZGVsbF9wcml2 YWN5X2N1cnJlbnRfc3RhdGUpOw0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUg KnByaXZhY3lfYXR0cmlidXRlc1tdID0gew0KPiA+ICsJJmRldl9hdHRyX2RlbGxfcHJpdmFjeV9z dXBwb3J0ZWRfdHlwZS5hdHRyLA0KPiA+ICsJJmRldl9hdHRyX2RlbGxfcHJpdmFjeV9jdXJyZW50 X3N0YXRlLmF0dHIsDQo+ID4gKwlOVUxMLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcHJpdmFjeV9hdHRyaWJ1dGVfZ3JvdXAgPSB7DQo+ ID4gKwkuYXR0cnMgPSBwcml2YWN5X2F0dHJpYnV0ZXMNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8q DQo+ID4gKyAqIERlc2NyaWJlcyB0aGUgRGV2aWNlIFN0YXRlIGNsYXNzIGV4cG9zZWQgYnkgQklP UyB3aGljaCBjYW4gYmUNCj4gPiArY29uc3VtZWQgYnkNCj4gPiArICogdmFyaW91cyBhcHBsaWNh dGlvbnMgaW50ZXJlc3RlZCBpbiBrbm93aW5nIHRoZSBQcml2YWN5IGZlYXR1cmUNCj4gY2FwYWJp bGl0aWVzLg0KPiA+ICsgKiBjbGFzcyBEZXZpY2VTdGF0ZQ0KPiA+ICsgKiB7DQo+ID4gKyAqICBb a2V5LCByZWFkXSBzdHJpbmcgSW5zdGFuY2VOYW1lOw0KPiA+ICsgKiAgW3JlYWRdIGJvb2xlYW4g UmVhZE9ubHk7DQo+ID4gKyAqDQo+ID4gKyAqICBbV21pRGF0YUlkKDEpLCByZWFkXSB1aW50MzIg RGV2aWNlc1N1cHBvcnRlZDsNCj4gPiArICogICAwIC0gTm9uZTsgMHgxIC0gTWljcm9waG9uZTsg MHgyIC0gQ2FtZXJhOyAweDQgLSBlUHJpdmFjeSAgU2NyZWVuDQo+ID4gKyAqDQo+ID4gKyAqICBb V21pRGF0YUlkKDIpLCByZWFkXSB1aW50MzIgQ3VycmVudFN0YXRlOw0KPiA+ICsgKiAgIDAgLSBP ZmY7IDEgLSBPbjsgQml0MCAtIE1pY3JvcGhvbmU7IEJpdDEgLSBDYW1lcmE7IEJpdDIgLSBlUHJp dmFjeVNjcmVlbg0KPiA+ICsgKiB9Ow0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBnZXRfY3Vy cmVudF9zdGF0dXMoc3RydWN0IHdtaV9kZXZpY2UgKndkZXYpIHsNCj4gPiArCXN0cnVjdCBwcml2 YWN5X3dtaV9kYXRhICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZ3ZGV2LT5kZXYpOw0KPiA+ICsJ dW5pb24gYWNwaV9vYmplY3QgKm9ial9wcmVzZW50Ow0KPiA+ICsJdTMyICpidWZmZXI7DQo+ID4g KwlpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKwlpZiAoIXByaXYpIHsNCj4gPiArCQlkZXZfZXJy KCZ3ZGV2LT5kZXYsICJkZWxsIHByaXZhY3kgcHJpdiBpcyBOVUxMXG4iKTsNCj4gPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArCS8qIGNoZWNrIHByaXZhY3kgc3VwcG9ydCBmZWF0 dXJlcyBhbmQgZGV2aWNlIHN0YXRlcyAqLw0KPiA+ICsJb2JqX3ByZXNlbnQgPSB3bWlkZXZfYmxv Y2tfcXVlcnkod2RldiwgMCk7DQo+ID4gKwlpZiAoIW9ial9wcmVzZW50KSB7DQo+ID4gKwkJZGV2 X2Vycigmd2Rldi0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgQmluYXJ5IE1PRlxuIik7DQo+ID4gKwkJ cmV0dXJuIC1FSU87DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKG9ial9wcmVzZW50LT50eXBl ICE9IEFDUElfVFlQRV9CVUZGRVIpIHsNCj4gPiArCQlkZXZfZXJyKCZ3ZGV2LT5kZXYsICJCaW5h cnkgTU9GIGlzIG5vdCBhIGJ1ZmZlciFcbiIpOw0KPiA+ICsJCXJldCA9IC1FSU87DQo+ID4gKwkJ Z290byBvYmpfZnJlZTsNCj4gPiArCX0NCj4gPiArCS8qICBBbHRob3VnaCBpdCdzIG5vdCB0ZWNo bmljYWxseSBhIGZhaWx1cmUsIHRoaXMgd291bGQgbGVhZCB0bw0KPiA+ICsJICogIHVuZXhwZWN0 ZWQgYmVoYXZpb3INCj4gPiArCSAqLw0KPiA+ICsJaWYgKG9ial9wcmVzZW50LT5idWZmZXIubGVu Z3RoICE9IDgpIHsNCj4gPiArCQlkZXZfZXJyKCZ3ZGV2LT5kZXYsICJEZWxsIHByaXZhY3kgYnVm ZmVyIGhhcyB1bmV4cGVjdGVkDQo+IGxlbmd0aCAoJWQpIVxuIiwNCj4gPiArCQkJCW9ial9wcmVz ZW50LT5idWZmZXIubGVuZ3RoKTsNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCWdvdG8g b2JqX2ZyZWU7DQo+ID4gKwl9DQo+ID4gKwlidWZmZXIgPSAodTMyICopb2JqX3ByZXNlbnQtPmJ1 ZmZlci5wb2ludGVyOw0KPiA+ICsJcHJpdi0+ZmVhdHVyZXNfcHJlc2VudCA9IGJ1ZmZlclswXTsN Cj4gPiArCXByaXYtPmxhc3Rfc3RhdHVzID0gYnVmZmVyWzFdOw0KPiA+ICsNCj4gPiArb2JqX2Zy ZWU6DQo+ID4gKwlrZnJlZShvYmpfcHJlc2VudCk7DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGRlbGxfcHJpdmFjeV9taWNtdXRlX2xlZF9zZXQoc3Ry dWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsDQo+ID4gKwkJCQkJZW51bSBsZWRfYnJpZ2h0bmVz cyBicmlnaHRuZXNzKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcHJpdmFjeV93bWlfZGF0YSAqcHJp diA9IGxlZF90b19wcml2KGxlZF9jZGV2KTsNCj4gPiArCXN0YXRpYyBjaGFyICphY3BpX21ldGhv ZCA9IChjaGFyICopIkVDQUsiOw0KPiA+ICsJYWNwaV9zdGF0dXMgc3RhdHVzOw0KPiA+ICsJYWNw aV9oYW5kbGUgaGFuZGxlOw0KPiA+ICsNCj4gPiArCWhhbmRsZSA9IGVjX2dldF9oYW5kbGUoKTsN Cj4gPiArCWlmICghaGFuZGxlKQ0KPiA+ICsJCXJldHVybiAtRUlPOw0KPiA+ICsNCj4gPiArCWlm ICghYWNwaV9oYXNfbWV0aG9kKGhhbmRsZSwgYWNwaV9tZXRob2QpKQ0KPiA+ICsJCXJldHVybiAt RUlPOw0KPiA+ICsNCj4gPiArCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwg YWNwaV9tZXRob2QsIE5VTEwsIE5VTEwpOw0KPiA+ICsJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMp KSB7DQo+ID4gKwkJZGV2X2VycigmcHJpdi0+d2Rldi0+ZGV2LCAiRXJyb3Igc2V0dGluZyBwcml2 YWN5IEVDIGFjaw0KPiB2YWx1ZTogJXNcbiIsDQo+ID4gKwkJCQlhY3BpX2Zvcm1hdF9leGNlcHRp b24oc3RhdHVzKSk7DQo+ID4gKwkJcmV0dXJuIC1FSU87DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFByZXNzaW5nIHRoZSBt dXRlIGtleSBhY3RpdmF0ZXMgYSB0aW1lIGRlbGF5ZWQgY2lyY3VpdCB0bw0KPiA+ICtwaHlzaWNh bGx5IGN1dA0KPiA+ICsgKiBvZmYgdGhlIG11dGUuIFRoZSBMRUQgaXMgaW4gdGhlIHNhbWUgY2ly Y3VpdCwgc28gaXQgcmVmbGVjdHMgdGhlDQo+ID4gK3RydWUNCj4gPiArICogc3RhdGUgb2YgdGhl IEhXIG11dGUuICBUaGUgcmVhc29uIGZvciB0aGUgRUMgImFjayIgaXMgc28gdGhhdA0KPiA+ICtz b2Z0d2FyZQ0KPiA+ICsgKiBjYW4gZmlyc3QgaW52b2tlIGEgU1cgbXV0ZSBiZWZvcmUgdGhlIEhX IGNpcmN1aXQgaXMgY3V0IG9mZi4NCj4gPiArV2l0aG91dCBTVw0KPiA+ICsgKiBjdXR0aW5nIHRo aXMgb2ZmIGZpcnN0IGRvZXMgbm90IGFmZmVjdCB0aGUgdGltZSBkZWxheWVkIG11dGluZyBvcg0K PiA+ICtzdGF0dXMNCj4gPiArICogb2YgdGhlIExFRCBidXQgdGhlcmUgaXMgYSBwb3NzaWJpbGl0 eSBvZiBhICJwb3BwaW5nIiBub2lzZS4NCj4gPiArICoNCj4gPiArICogSWYgdGhlIEVDIHJlY2Vp dmVzIHRoZSBTVyBhY2ssIHRoZSBjaXJjdWl0IHdpbGwgYmUgYWN0aXZhdGVkDQo+ID4gK2JlZm9y ZSB0aGUNCj4gPiArICogZGVsYXkgY29tcGxldGVkLg0KPiA+ICsgKg0KPiA+ICsgKiBFeHBvc2lu ZyBhcyBhbiBMRUQgZGV2aWNlIGFsbG93cyB0aGUgY29kZWMgZHJpdmVycyBub3RpZmljYXRpb24N Cj4gPiArcGF0aCB0bw0KPiA+ICsgKiBFQyBBQ0sgdG8gd29yaw0KPiA+ICsgKi8NCj4gPiArc3Rh dGljIGludCBkZWxsX3ByaXZhY3lfbGVkc19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsNCj4g PiArCXN0cnVjdCBwcml2YWN5X3dtaV9kYXRhICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7 DQo+ID4gKw0KPiA+ICsJcHJpdi0+Y2Rldi5uYW1lID0gImRlbGwtcHJpdmFjeTo6bWljbXV0ZSI7 DQo+ID4gKwlwcml2LT5jZGV2Lm1heF9icmlnaHRuZXNzID0gMTsNCj4gPiArCXByaXYtPmNkZXYu YnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSBkZWxsX3ByaXZhY3lfbWljbXV0ZV9sZWRfc2V0Ow0K PiA+ICsJcHJpdi0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSAiYXVkaW8tbWljbXV0ZSI7DQo+ID4g Kwlwcml2LT5jZGV2LmJyaWdodG5lc3MgPSBsZWR0cmlnX2F1ZGlvX2dldChMRURfQVVESU9fTUlD TVVURSk7DQo+ID4gKwlyZXR1cm4gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXIoZGV2LCAmcHJp di0+Y2Rldik7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZGVsbF9wcml2YWN5X3dtaV9wcm9i ZShzdHJ1Y3Qgd21pX2RldmljZSAqd2RldiwgY29uc3Qgdm9pZA0KPiA+ICsqY29udGV4dCkgew0K PiA+ICsJc3RydWN0IHByaXZhY3lfd21pX2RhdGEgKnByaXY7DQo+ID4gKwlzdHJ1Y3Qga2V5X2Vu dHJ5ICprZXltYXA7DQo+ID4gKwlpbnQgcmV0LCBpOw0KPiA+ICsNCj4gPiArCXJldCA9IHdtaV9o YXNfZ3VpZChERUxMX1BSSVZBQ1lfR1VJRCk7DQo+ID4gKwlpZiAoIXJldCkNCj4gPiArCQlwcl9k ZWJ1ZygiVW5hYmxlIHRvIGRldGVjdCBhdmFpbGFibGUgRGVsbCBwcml2YWN5DQo+IGRldmljZXMh XG4iKTsNCj4gPiArDQo+ID4gKwlwcml2ID0gZGV2bV9remFsbG9jKCZ3ZGV2LT5kZXYsIHNpemVv ZigqcHJpdiksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFwcml2KQ0KPiA+ICsJCXJldHVybiAt RU5PTUVNOw0KPiA+ICsNCj4gPiArCWRldl9zZXRfZHJ2ZGF0YSgmd2Rldi0+ZGV2LCBwcml2KTsN Cj4gPiArCXByaXYtPndkZXYgPSB3ZGV2Ow0KPiA+ICsJLyogY3JlYXRlIGV2ZGV2IHBhc3Npbmcg aW50ZXJmYWNlICovDQo+ID4gKwlwcml2LT5pbnB1dF9kZXYgPSBkZXZtX2lucHV0X2FsbG9jYXRl X2RldmljZSgmd2Rldi0+ZGV2KTsNCj4gPiArCWlmICghcHJpdi0+aW5wdXRfZGV2KQ0KPiA+ICsJ CXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCS8qIHJlbWFwIHRoZSB3bWkga2V5bWFwIGV2 ZW50IHRvIG5ldyBrZXltYXAgKi8NCj4gPiArCWtleW1hcCA9IGtjYWxsb2MoQVJSQVlfU0laRShk ZWxsX3dtaV9rZXltYXBfdHlwZV8wMDEyKSwNCj4gPiArCQkJc2l6ZW9mKHN0cnVjdCBrZXlfZW50 cnkpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICgha2V5bWFwKQ0KPiA+ICsJCXJldHVybiAtRU5P TUVNOw0KPiA+ICsNCj4gPiArCS8qIHJlbWFwIHRoZSBrZXltYXAgY29kZSB3aXRoIERlbGwgcHJp dmFjeSBrZXkgdHlwZSAweDEyIGFzIHByZWZpeA0KPiA+ICsJICogS0VZX01JQ01VVEUgc2NhbmNv ZGUgd2lsbCBiZSByZXBvcnRlZCBhcyAweDEyMDAwMQ0KPiA+ICsJICovDQo+ID4gKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShkZWxsX3dtaV9rZXltYXBfdHlwZV8wMDEyKTsgaSsrKSB7DQo+ ID4gKwkJa2V5bWFwW2ldID0gZGVsbF93bWlfa2V5bWFwX3R5cGVfMDAxMltpXTsNCj4gPiArCQlr ZXltYXBbaV0uY29kZSB8PSAoMHgwMDEyIDw8IDE2KTsNCj4gPiArCX0NCj4gPiArCXJldCA9IHNw YXJzZV9rZXltYXBfc2V0dXAocHJpdi0+aW5wdXRfZGV2LCBrZXltYXAsIE5VTEwpOw0KPiA+ICsJ a2ZyZWUoa2V5bWFwKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiAr DQo+ID4gKwlwcml2LT5pbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmd2Rldi0+ZGV2Ow0KPiA+ICsJ cHJpdi0+aW5wdXRfZGV2LT5uYW1lID0gIkRlbGwgUHJpdmFjeSBEcml2ZXIiOw0KPiA+ICsJcHJp di0+aW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7DQo+ID4gKw0KPiA+ICsJcmV0ID0g aW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHByaXYtPmlucHV0X2Rldik7DQo+ID4gKwlpZiAocmV0KQ0K PiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gZ2V0X2N1cnJlbnRfc3RhdHVz KHByaXYtPndkZXYpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsN Cj4gPiArCXJldCA9IGRldm1fZGV2aWNlX2FkZF9ncm91cCgmd2Rldi0+ZGV2LA0KPiAmcHJpdmFj eV9hdHRyaWJ1dGVfZ3JvdXApOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0K PiA+ICsNCj4gPiArCXJldCA9IGRlbGxfcHJpdmFjeV9sZWRzX3NldHVwKCZwcml2LT53ZGV2LT5k ZXYpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiANCj4gVGhpcyBzaG91 bGQgYmUgY29uZGl0aW9uYWwgb24gdGhlIGF1ZGlvIHByaXZhY3kgZmVhdHVyZSBiZWluZyBzdXBw b3J0ZWQ6DQo+IA0KPiAJaWYgKHByaXYtPmZlYXR1cmVzX3ByZXNlbnQgJiBCSVQoREVMTF9QUklW QUNZX1RZUEVfQVVESU8pKSB7DQo+IAkJcmV0ID0gZGVsbF9wcml2YWN5X2xlZHNfc2V0dXAoJnBy aXYtPndkZXYtPmRldik7DQo+IAkJaWYgKHJldCkNCj4gCQkJcmV0dXJuIHJldDsNCj4gCX0NCj4g DQo+IA0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJmxpc3RfbXV0ZXgpOw0KPiA+ICsJbGlzdF9h ZGRfdGFpbCgmcHJpdi0+bGlzdCwgJndtaV9saXN0KTsNCj4gPiArCW11dGV4X3VubG9jaygmbGlz dF9tdXRleCk7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCBkZWxsX3ByaXZhY3lfd21pX3JlbW92ZShzdHJ1Y3Qgd21pX2RldmljZSAqd2Rldikgew0KPiA+ ICsJc3RydWN0IHByaXZhY3lfd21pX2RhdGEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJndkZXYt PmRldik7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmbGlzdF9tdXRleCk7DQo+ID4gKwlsaXN0 X2RlbCgmcHJpdi0+bGlzdCk7DQo+ID4gKwltdXRleF91bmxvY2soJmxpc3RfbXV0ZXgpOw0KPiA+ ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd21p X2RldmljZV9pZCBkZWxsX3dtaV9wcml2YWN5X3dtaV9pZF90YWJsZVtdID0gew0KPiA+ICsJeyAu Z3VpZF9zdHJpbmcgPSBERUxMX1BSSVZBQ1lfR1VJRCB9LA0KPiA+ICsJeyB9LA0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCB3bWlfZHJpdmVyIGRlbGxfcHJpdmFjeV93bWlfZHJp dmVyID0gew0KPiA+ICsJLmRyaXZlciA9IHsNCj4gPiArCQkubmFtZSA9ICJkZWxsLXByaXZhY3ki LA0KPiA+ICsJfSwNCj4gPiArCS5wcm9iZSA9IGRlbGxfcHJpdmFjeV93bWlfcHJvYmUsDQo+ID4g KwkucmVtb3ZlID0gZGVsbF9wcml2YWN5X3dtaV9yZW1vdmUsDQo+ID4gKwkuaWRfdGFibGUgPSBk ZWxsX3dtaV9wcml2YWN5X3dtaV9pZF90YWJsZSwgfTsNCj4gPiArDQo+ID4gK21vZHVsZV93bWlf ZHJpdmVyKGRlbGxfcHJpdmFjeV93bWlfZHJpdmVyKTsNCj4gPiArDQo+ID4gK01PRFVMRV9ERVZJ Q0VfVEFCTEUod21pLCBkZWxsX3dtaV9wcml2YWN5X3dtaV9pZF90YWJsZSk7DQo+ID4gK01PRFVM RV9BVVRIT1IoIlBlcnJ5IFl1YW4gPHBlcnJ5X3l1YW5AZGVsbC5jb20+Iik7DQo+ID4gK01PRFVM RV9ERVNDUklQVElPTigiRGVsbCBQcml2YWN5IFdNSSBEcml2ZXIiKTsNCj4gTU9EVUxFX0xJQ0VO U0UoIkdQTCIpOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2Rl bGwtcHJpdmFjeS13bWkuaA0KPiA+IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXBy aXZhY3ktd21pLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAw MDAwMC4uMDRjNDlkMmZhOTI0DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMv cGxhdGZvcm0veDg2L2RlbGwvZGVsbC1wcml2YWN5LXdtaS5oDQo+ID4gQEAgLTAsMCArMSwyMyBA QA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovDQo+ID4g Ky8qDQo+ID4gKyAqIERlbGwgcHJpdmFjeSBub3RpZmljYXRpb24gZHJpdmVyDQo+ID4gKyAqDQo+ ID4gKyAqIENvcHlyaWdodCAoQykgMjAyMSBEZWxsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4N Cj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9ERUxMX1BSSVZBQ1lfV01JX0hfDQo+ID4g KyNkZWZpbmUgX0RFTExfUFJJVkFDWV9XTUlfSF8NCj4gPiArDQo+ID4gKyNpZiBJU19FTkFCTEVE KENPTkZJR19ERUxMX1BSSVZBQ1kpDQo+ID4gK2Jvb2wgZGVsbF9wcml2YWN5X3ByZXNlbnQodm9p ZCk7DQo+ID4gK2Jvb2wgZGVsbF9wcml2YWN5X3Byb2Nlc3NfZXZlbnQoaW50IHR5cGUsIGludCBj b2RlLCBpbnQgc3RhdHVzKTsNCj4gPiArI2Vsc2UgLyogQ09ORklHX0RFTExfUFJJVkFDWSAqLyBz dGF0aWMgaW5saW5lIGJvb2wNCj4gPiArZGVsbF9wcml2YWN5X3ByZXNlbnQodm9pZCkgew0KPiA+ ICsJcmV0dXJuIC1FTk9ERVY7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9v bCBkZWxsX3ByaXZhY3lfcHJvY2Vzc19ldmVudChpbnQgdHlwZSwgaW50IGNvZGUsIGludA0KPiA+ ICtzdGF0dXMpIHt9DQo+IA0KPiBUaGlzIGlzIG1pc3NpbmcgYSByZXR1cm4gZmFsc2U7IGJldHdl ZW4gdGhlIHt9Lg0KPiANCj4gPiArI2VuZGlmIC8qIENPTkZJR19ERUxMX1BSSVZBQ1kgKi8NCj4g PiArI2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvZGVs bC13bWkuYw0KPiA+IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXdtaS5jDQo+ID4g aW5kZXggYmJkYjNlODYwODkyLi4yMjhlODVhNDI3ZjUgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVy cy9wbGF0Zm9ybS94ODYvZGVsbC9kZWxsLXdtaS5jDQo+ID4gKysrIGIvZHJpdmVycy9wbGF0Zm9y bS94ODYvZGVsbC9kZWxsLXdtaS5jDQo+ID4gQEAgLTI3LDYgKzI3LDcgQEANCj4gPiAgI2luY2x1 ZGUgPGFjcGkvdmlkZW8uaD4NCj4gPiAgI2luY2x1ZGUgImRlbGwtc21iaW9zLmgiDQo+ID4gICNp bmNsdWRlICJkZWxsLXdtaS1kZXNjcmlwdG9yLmgiDQo+ID4gKyNpbmNsdWRlICJkZWxsLXByaXZh Y3ktd21pLmgiDQo+ID4NCj4gPiAgTU9EVUxFX0FVVEhPUigiTWF0dGhldyBHYXJyZXR0IDxtamdA cmVkaGF0LmNvbT4iKTsNCj4gPiBNT0RVTEVfQVVUSE9SKCJQYWxpIFJvaMOhciA8cGFsaUBrZXJu ZWwub3JnPiIpOyBAQCAtNDI3LDcgKzQyOCw2DQo+IEBADQo+ID4gc3RhdGljIHZvaWQgZGVsbF93 bWlfbm90aWZ5KHN0cnVjdCB3bWlfZGV2aWNlICp3ZGV2LA0KPiA+DQo+ID4gIAkJc3dpdGNoIChi dWZmZXJfZW50cnlbMV0pIHsNCj4gPiAgCQljYXNlIDB4MDAwMDogLyogT25lIGtleSBwcmVzc2Vk IG9yIGV2ZW50IG9jY3VycmVkICovDQo+ID4gLQkJY2FzZSAweDAwMTI6IC8qIEV2ZW50IHdpdGgg ZXh0ZW5kZWQgZGF0YSBvY2N1cnJlZCAqLw0KPiA+ICAJCQlpZiAobGVuID4gMikNCj4gPiAgCQkJ CWRlbGxfd21pX3Byb2Nlc3Nfa2V5KHdkZXYsIGJ1ZmZlcl9lbnRyeVsxXSwNCj4gPiAgCQkJCQkJ ICAgICBidWZmZXJfZW50cnlbMl0pOw0KPiA+IEBAIC00MzksNiArNDM5LDEyIEBAIHN0YXRpYyB2 b2lkIGRlbGxfd21pX25vdGlmeShzdHJ1Y3Qgd21pX2RldmljZQ0KPiAqd2RldiwNCj4gPiAgCQkJ CWRlbGxfd21pX3Byb2Nlc3Nfa2V5KHdkZXYsIGJ1ZmZlcl9lbnRyeVsxXSwNCj4gPiAgCQkJCQkJ ICAgICBidWZmZXJfZW50cnlbaV0pOw0KPiA+ICAJCQlicmVhazsNCj4gPiArCQljYXNlIDB4MDAx MjoNCj4gPiArCQkJaWYgKChsZW4gPiA0KSAmJg0KPiBkZWxsX3ByaXZhY3lfcHJvY2Vzc19ldmVu dChidWZmZXJfZW50cnlbMV0sIGJ1ZmZlcl9lbnRyeVszXSwgYnVmZmVyX2VudHJ5WzRdKSkNCj4g PiArCQkJCS8qIHByaXZhY3kgaG90a2V5IGhhbmRsZSAqLzsNCj4gDQo+IFBsZWFzZSBjaGFuZ2Ug dGhpcyBjb21tZW50IHRvOg0KPiANCj4gCQkJCS8qIGRlbGxfcHJpdmFjeV9wcm9jZXNzX2V2ZW50 KCkgaGFzIGhhbmRsZWQNCj4gdGhlIGV2ZW50ICovIDsNCj4gDQo+IA0KPiA+ICsJCQllbHNlIGlm IChsZW4gPiAyKQ0KPiA+ICsJCQkJZGVsbF93bWlfcHJvY2Vzc19rZXkod2RldiwgYnVmZmVyX2Vu dHJ5WzFdLA0KPiBidWZmZXJfZW50cnlbMl0pOw0KPiA+ICsJCQlicmVhazsNCj4gPiAgCQlkZWZh dWx0OiAvKiBVbmtub3duIGV2ZW50ICovDQo+ID4gIAkJCXByX2luZm8oIlVua25vd24gV01JIGV2 ZW50IHR5cGUgMHgleFxuIiwNCj4gPiAgCQkJCShpbnQpYnVmZmVyX2VudHJ5WzFdKTsNCj4gPg0K PiANCj4gDQo+IA0KPiBSZWdhcmRzLA0KPiANCj4gSGFucw0KDQo=