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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 60B59EE4996 for ; Mon, 21 Aug 2023 08:31:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231982AbjHUIbw (ORCPT ); Mon, 21 Aug 2023 04:31:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44100 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233994AbjHUIbr (ORCPT ); Mon, 21 Aug 2023 04:31:47 -0400 Received: from mx08-00376f01.pphosted.com (mx08-00376f01.pphosted.com [91.207.212.86]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8C84DA6 for ; Mon, 21 Aug 2023 01:31:42 -0700 (PDT) Received: from pps.filterd (m0168888.ppops.net [127.0.0.1]) by mx08-00376f01.pphosted.com (8.17.1.22/8.17.1.22) with ESMTP id 37L6eAct005858; Mon, 21 Aug 2023 09:31:01 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imgtec.com; h= from:to:cc:subject:date:message-id:references:in-reply-to :content-type:content-id:content-transfer-encoding:mime-version; s=dk201812; bh=potX/u1XniVnsSZJXHpHSu/aF6pJfFrbto+fzSZQolU=; b= qsBg6MrgOQAW6nlJuqa8VbVEkWGIEaoJ8pBJrKInvksA+tcc6fBYMt2kXGJM9t5V 4kI+glvwX0j1DYeTC+8eYgh0F0hig0JVD+fRIgxP2WkspQxSCgjZBZWLsQTHreQW EgH+LEGqSZ2XChjvPA6xQYRM8NKScV/dUOs4DZBDXUv/6dKlBW9NOm07n2vG4jUw hTUEpTyY1h2B/4lhKg1j2N/4v6Lv2ROnlAat4STJFjsUbLcIifxU+KE87+74hivT lQf1jFBb8N4S/IWGCko6kGczrZFWEmYYcf0tDlklZbT6AQ8iKOMNKJOXaeMQw5w4 YNEPDF4BocwIBZ2EdaYRow== Received: from hhmail05.hh.imgtec.org ([217.156.249.195]) by mx08-00376f01.pphosted.com (PPS) with ESMTPS id 3sktk909va-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Mon, 21 Aug 2023 09:31:00 +0100 (BST) Received: from HHMAIL05.hh.imgtec.org (10.100.10.120) by HHMAIL05.hh.imgtec.org (10.100.10.120) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 21 Aug 2023 09:30:59 +0100 Received: from GBR01-LO2-obe.outbound.protection.outlook.com (104.47.21.55) by email.imgtec.com (10.100.10.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Mon, 21 Aug 2023 09:30:59 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eMXCvi3dFvUiPBWK9U2mPSNIHb9YPNX6P+3rVXNqyZ9GMvkWFemMGKLefb0RQBPU7m7uIOMVgaS12jNSg/soZ9RxquXwQ/UJEuAgyqNoTx5i11QJ6GhP4zZck+57O2nwL63kGOyypPvhTIky0eQ2ayxVzJnzeAf+3awn9tbvRViDNc5wKY1GMQZHAgIfOktA5On8tuMoBKwDDVI6LkRljF4om4IXKqzFK1+dKc3nCOJ7Pu8Q3bKBRtv/Bp/xM7D8yxS0vtHPNFD6nkNPBASra/x8m1KuCtBbh2NBYKMRUx6ziDooczS7/fRzrJeVyNLE5HV9udy7KD0XeuBK+Y1zhQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=potX/u1XniVnsSZJXHpHSu/aF6pJfFrbto+fzSZQolU=; b=lYRsOOsbYoO04nGhoaSVqEL91qYP4/qjtr5mssPZ0HiUHjhG2cdHSgrBjERLGXXTMW2bayCycAtNs9idkuqIPo7kruUt9TGkPUtEuTde/pwcCGEBYImmCSeZt8Shc/bg4CnVMlW8kkJb4H6nuOnC2A0iZB9669RUAIvThHUhVtDptP99+gDG1A9FpLU+ZHFfZQu8SqxSJE1E7cK2kDm/wtWRpVSGs8oRXWLAFLVX+OqmtLeiji71hxHlra68OVZ/kru1tIizh0zjPGZ883ZrXGWxJqgve/AOadSuvg6J5YFsiFA3Xm7bkZJ915kLgU5vfQ2Y9IhyOtc6W7IIoiFlCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=imgtec.com; dmarc=pass action=none header.from=imgtec.com; dkim=pass header.d=imgtec.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=IMGTecCRM.onmicrosoft.com; s=selector2-IMGTecCRM-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=potX/u1XniVnsSZJXHpHSu/aF6pJfFrbto+fzSZQolU=; b=F/pAxSJewurNVKRXRzxox/tW1wv61+v4AE7Vi7WPpwp8WX1VlgQ+uPemZ7ZdkDJWOOt2MBKH/HaCJV/h7mLFMsQGXHS6j7lLY1aeb2gnFrFmcOxp/lL+6MZxlpAjqH2scZyeVbDEzYOEpWkc3vI2e3hGGSIbuCfnYRy1ACLZSjk= Received: from CWLP265MB5770.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:1a0::8) by LO6P265MB6127.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2b2::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.20; Mon, 21 Aug 2023 08:30:57 +0000 Received: from CWLP265MB5770.GBRP265.PROD.OUTLOOK.COM ([fe80::8a14:bf03:d74c:2fe3]) by CWLP265MB5770.GBRP265.PROD.OUTLOOK.COM ([fe80::8a14:bf03:d74c:2fe3%3]) with mapi id 15.20.6699.022; Mon, 21 Aug 2023 08:30:57 +0000 From: Donald Robson To: "dakr@redhat.com" , Sarah Walker CC: "luben.tuikov@amd.com" , "christian.koenig@amd.com" , "tzimmermann@suse.de" , "mripard@kernel.org" , "hns@goldelico.com" , "daniel@ffwll.ch" , "afd@ti.com" , Matt Coster , "maarten.lankhorst@linux.intel.com" , "boris.brezillon@collabora.com" , "matthew.brost@intel.com" , "linux-kernel@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , "Frank Binns" , "airlied@gmail.com" , "faith.ekstrand@collabora.com" Subject: Re: [EXTERNAL] Re: [PATCH v5 08/17] drm/imagination: Add GEM and VM related code Thread-Topic: [EXTERNAL] Re: [PATCH v5 08/17] drm/imagination: Add GEM and VM related code Thread-Index: AQHZ0BtYhCqyLn4sWU+v4CS9Nxpl/a/wMY6AgARB1wA= Date: Mon, 21 Aug 2023 08:30:56 +0000 Message-ID: References: <20230816082531.164695-1-sarah.walker@imgtec.com> <20230816082531.164695-9-sarah.walker@imgtec.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CWLP265MB5770:EE_|LO6P265MB6127:EE_ x-ms-office365-filtering-correlation-id: 20817d30-7fee-41c3-5a21-08dba220f112 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: MHgE5JzhlYYkxWhzoCFEQHxomvyHkidVVtgOWWQWKwzUFJEnLm0w1sPabBznKBaFAGAWE297zrYXqq3wk7Z0BFFXA8FTuVlUytKgtxvQAm17IIVJSM9ARcWId6BMS3WKRjVwjwXsLhf0m1FWsZFptSPGG5PbLkOAL1ZV1J4MSgHhZqxqgimx9prQ5PJnkIx3kK90yVDtmomiQFSCU8xVcsxG6D/viMKlxi0oMjo2nTSPPl7kBauF+qUpfD6/ZU9gGZhmIZpeJuHOGydt5WV7CYhIGU7Ri/wxbkR7ELuEVZt/KryfBT0wNZVTtNVqVX1MXyEa3ZSjK1A9GjEyiIIymYT9nxgqfMaMQzxH0lzxOaZYmQa53KYl4n+JecNUZ02TBCrOV2aLe+5/3e4PWruT4NHlqBE+lpuWbWwITIdZ3Ml5j4ZYoaft+mCJDxKKQqj4MHqa21LCrAahO+GzAzEg7wG5lYmkGwpBioUXOx0yRp0Jy/xH4XUyjPm7v26giBOm+hYm+kRxMw0id6jV3JBCtmwHv1XcV9IbLXbcclH91KvLpontWg9rvcpbCFYT3js4f7WXwtzbGQgymf06/vzh9dt8YVxxo97szMp9EhCCLctszZwh+0OnA6Rbbaemy3Q4 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP265MB5770.GBRP265.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230031)(39840400004)(346002)(136003)(376002)(396003)(366004)(451199024)(186009)(1800799009)(26005)(71200400001)(6512007)(6486002)(6506007)(83380400001)(2616005)(7416002)(8936002)(5660300002)(8676002)(4326008)(2906002)(30864003)(54906003)(478600001)(110136005)(41300700001)(76116006)(316002)(91956017)(66446008)(66556008)(66476007)(64756008)(6636002)(38100700002)(38070700005)(66946007)(86362001)(36756003)(122000001)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?OHBzV1hvZ2pmNG1VNzRYYk5MbC9vUUF5cWFmV21DZ0gyRU5FS29jQVhra2kw?= =?utf-8?B?aHhwamp6bml0U052WGZZanlMNFF0S2d3b09PcFZ4aTRzdmRieUhOdjRiSktG?= =?utf-8?B?YUVnWVpsMS9GRXJtNSsxaTd4RUxjaDYwakQ4Yzd6VWhLSVF3SUFXNk0veG02?= =?utf-8?B?RnBlOU95blhVTE40aGV4aTd6VmFTaTJETDd2ZUdHN0x5d29RL3hSeVhjc2g3?= =?utf-8?B?UHdtcFRnOGIwdW5BQU44OUpqbWdLRUcrMVBaUkZRUEVMR3gzcW9MQlp6TDBL?= =?utf-8?B?SFZHeHlxbWJIdytaYlQ5ZXRJTGhOcElRdk5yWEtQUGlzRmd6OGVQdVV5VCtH?= =?utf-8?B?UWpvc25ucURmSkNna0gzTGNjbXB6dDBaOXpHVlh4UDY5STIzT21zeHpmeTNI?= =?utf-8?B?SWcrc0RxODRUMmxDOGRTM0gxdlpjZGJpbExVcnZDMkdLNkhVWm44ZjNqbTlX?= =?utf-8?B?UTFwenREQUpLbElORHQxRHpZYTFLMnJRVWd4TmRBVGNtb21yUUVSOGo3OWpr?= =?utf-8?B?RzNjUWJtWTVPa0kvK25nNjJjaGhzTnFsYXgzZEQrK1Q1RlYySmVUMDlmU1VF?= =?utf-8?B?QXhiczhsZ3c1TGJDeko5R0p5aHUzS2VaOXAySUNsTmtORmhpeUVJWHZHbEpH?= =?utf-8?B?UDFXZDJycDNxZytqS0ZXYS9SZFpVRFoySXhlU2c2WmplSnZFdUhNeFhyQU5h?= =?utf-8?B?bXNzMW9PSkwrNFIwWGdnUGVTZFVvUk5HT05kTE96QUsvWFVTbHpzYkVBM2ll?= =?utf-8?B?WDRNWUJPajJpeHBFeGs0Qm5xRVlpZDdzMkYvYVB0ZHlFM1ZDUHQ4RnVSd25v?= =?utf-8?B?NnJuMjNIYzlneXhxM1AvYmtuY09Mb0JQVTVCYjFCYVBBWmlsT2l6VmlvenFl?= =?utf-8?B?aXRrY2pqem9UN0VtajA4bUF1dk9JY29zc25rSUh1NktSS2NVMDRJU05mTzk0?= =?utf-8?B?YmpUZm9VM3NTdi84bndKVG5FMnh2TzJlYlRQNWh0NGdKeVE0b20yS2dsRVFz?= =?utf-8?B?dDFsaDdGYW1NQ2Z4dlEzRTIwUCs0R3FnR1pzUWJqZVNERW1YYTJqbjBOT0wv?= =?utf-8?B?Q3RnbmlpbElpZGlzb0pEV2MwNjVNQW9DWFhlZUxzUm1SL2cyWXJPRTJEaWw5?= =?utf-8?B?VzNvdG9BM0R0YW9BWDBFS0hJOTdrcE1nNDkxVzU3MndwbktpeFVYZU5jOXN6?= =?utf-8?B?WTNqT2VvZmRJL3lmR21NWktWT2tJcHhORVJIWTdGVlUvejh4WGtvTHFZVTdQ?= =?utf-8?B?eTBCa0l1R011VlF5YzJRM0tZeERzdGkwbWVpSHVab1lhYjFyMTJDdHpyenNV?= =?utf-8?B?YkFwS282QTl1dnBvL1JMV0dSSXJlRHZTY1M4TXBZNjlZWms5enNRaWtFWmJD?= =?utf-8?B?cVRTY3JJNUd5SFZuQ3NmRlc2YWpualBwSnd2SURjSG8vQ1RyKytIaDR0eG80?= =?utf-8?B?WnVyekZyWExPZ0hKWDNwUFpvSER1aVh0eXFLRy9NL3oyMS82c1N3T3RjbjA4?= =?utf-8?B?aEw1RVR5RWR4UnBUV0VwYXZ1emx5WGZ0ekNobXNrUFd4djIvRWRoN0FVZEti?= =?utf-8?B?YWw2amtZWDlFUS8zbFRTaFJ2azBBazQ0YnRpZkNabEJ4c2kzN1dxY0NMNTdj?= =?utf-8?B?Y3JmU3BCK24yVjBqUnBndVhmSUw4NDVUL2psSU5uSDg1a0dQTDJIZ0k3QTJw?= =?utf-8?B?dHNBSmI2UXFsMktyNDlYYjY1ancyZVlpbWJJMC85L2dHRWplUFlIUWtLbTc1?= =?utf-8?B?SmlxUG9udHlPaHdEU1Q3OEpnSGJwOVhORmdHbnV2UW9rMEFidExFRW0yeEpT?= =?utf-8?B?S3A2Nnl5anlhTXY5SURkQ29tNzV1Yi9hOEFjeG5OSlNJakRxQWVuQXZ5d0Iy?= =?utf-8?B?MkJ5TXNnTHhUV1h3Z21FUHp6dE9QSVN4YjZyVWtrdGFZaHJQZjVlQjZyU09h?= =?utf-8?B?SHhJWlhUNGswMThmQXA1M0c2dFNSMXNXSU1pY0V3c0toOFdFR05wcHdLU3hj?= =?utf-8?B?aWxiTkNpVy9VQVhCdzNYTFRDS0orZ2RyS1FlSjAwMGdYNy9tT2QzV0o2QUNY?= =?utf-8?B?Z1M1RGwrRnUybElLRUFrczA2cjFzNWdDZ1dscnh2VDhpb01RUXhLTUpVQ09K?= =?utf-8?B?TGpQNE4rOG9paW5tRWEydHhWVzBKdXpMZVpqbG1KcU9Gdzc1VDVDYU1WQ2hH?= =?utf-8?B?aHc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <9F8EB3E6D3977A4EA03EF500E1F559CE@GBRP265.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CWLP265MB5770.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 20817d30-7fee-41c3-5a21-08dba220f112 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Aug 2023 08:30:56.9540 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0d5fd8bb-e8c2-4e0a-8dd5-2c264f7140fe X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: pzd9r9AguNtFQokmUbsHv20OJ3OvjlRdVD+29bLRlCerrr3u4J8gk4dp0Ff9XL30DuDDABDHJj3wxvwZsDLshcHtV0VLFCfGVfnp+IElGTk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO6P265MB6127 X-OriginatorOrg: imgtec.com X-EXCLAIMER-MD-CONFIG: 15a78312-3e47-46eb-9010-2e54d84a9631 X-Proofpoint-GUID: dJCsof3Da1T4wgW2ihMxpNBQc6HiwpBs X-Proofpoint-ORIG-GUID: dJCsof3Da1T4wgW2ihMxpNBQc6HiwpBs Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgRGFuaWxvLA0KVGhhbmtzIGZvciB0aGUgZmVlZGJhY2suICBPbiB0aGUgc3ViamVjdCBvZiBs b2NraW5nLCBJIGhhdmUgZG1hX3Jlc3YgbG9ja2luZw0KaW4gYW5vdGhlciBicmFuY2ggd2hlcmUg SSdtIHRyeWluZyB0byBlbmFibGUgYmluZCBxdWV1ZXMsIGJ1dCBJIGRpZG4ndCB0aGluaw0KSSBu ZWVkZWQgbG9ja2luZyBmb3IgdGhlIHNpbmdsZSwgc3luY2hyb25vdXMgb3BlcmF0aW9ucyBzZWVu IGhlcmUuICBXb3VsZCBhIA0KbXV0ZXggb24gdGhlIGdlbSBvYmplY3Qgd3JhcHBlciBzdWZmaWNl Pw0KVGhhbmtzLA0KRG9uYWxkDQpPbiBGcmksIDIwMjMtMDgtMTggYXQgMTc6MzAgKzAyMDAsIERh bmlsbyBLcnVtbXJpY2ggd3JvdGU6DQo+IA0KPiBIaSBTYXJhaCwNCj4gDQo+IE9uIFdlZCwgQXVn IDE2LCAyMDIzIGF0IDA5OjI1OjIzQU0gKzAxMDAsIFNhcmFoIFdhbGtlciB3cm90ZToNCj4gPiBB ZGQgYSBHRU0gaW1wbGVtZW50YXRpb24gYmFzZWQgb24gZHJtX2dlbV9zaG1lbSwgYW5kIHN1cHBv cnQgY29kZSBmb3IgdGhlDQo+ID4gUG93ZXJWUiBHUFUgTU1VLiBUaGUgR1BVIFZBIG1hbmFnZXIg aXMgdXNlZCBmb3IgYWRkcmVzcyBzcGFjZSBtYW5hZ2VtZW50Lg0KPiA+IA0KPiA+IENoYW5nZXMg c2luY2UgdjQ6DQo+ID4gLSBDb3JyZWN0IHN5bmMgZnVuY3Rpb24gaW4gdm1hcC92dW5tYXAgZnVu Y3Rpb24gZG9jdW1lbnRhdGlvbg0KPiA+IC0gVXBkYXRlIGZvciB1cHN0cmVhbSBHUFUgVkEgbWFu YWdlcg0KPiA+IC0gRml4IG1pc3NpbmcgZnJlZXMgd2hlbiB1bm1hcHBpbmcgZHJtX2dwdXZhIG9i amVjdHMNCj4gPiAtIEFsd2F5cyB6ZXJvIEdFTSBCT3Mgb24gY3JlYXRpb24NCj4gPiANCj4gPiBD aGFuZ2VzIHNpbmNlIHYzOg0KPiA+IC0gU3BsaXQgTU1VIGFuZCBWTSBjb2RlDQo+ID4gLSBSZWdp c3RlciBwYWdlIHRhYmxlIGFsbG9jYXRpb25zIHdpdGgga21lbWxlYWsNCj4gPiAtIFVzZSBkcm1f ZGV2X3tlbnRlcixleGl0fQ0KPiA+IA0KPiA+IENoYW5nZXMgc2luY2UgdjI6DQo+ID4gLSBVc2Ug R1BVIFZBIG1hbmFnZXINCj4gPiAtIFVzZSBkcm1fZ2VtX3NobWVtDQo+ID4gDQo+ID4gQ28tZGV2 ZWxvcGVkLWJ5OiBNYXR0IENvc3RlciA8bWF0dC5jb3N0ZXJAaW1ndGVjLmNvbT4NCj4gPiBTaWdu ZWQtb2ZmLWJ5OiBNYXR0IENvc3RlciA8bWF0dC5jb3N0ZXJAaW1ndGVjLmNvbT4NCj4gPiBDby1k ZXZlbG9wZWQtYnk6IERvbmFsZCBSb2Jzb24gPGRvbmFsZC5yb2Jzb25AaW1ndGVjLmNvbT4NCj4g PiBTaWduZWQtb2ZmLWJ5OiBEb25hbGQgUm9ic29uIDxkb25hbGQucm9ic29uQGltZ3RlYy5jb20+ DQo+ID4gU2lnbmVkLW9mZi1ieTogU2FyYWggV2Fsa2VyIDxzYXJhaC53YWxrZXJAaW1ndGVjLmNv bT4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL01ha2VmaWxlICAg ICB8ICAgIDUgKy0NCj4gPiAgZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9kZXZpY2Uu YyB8ICAgMjMgKy0NCj4gPiAgZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9kZXZpY2Uu aCB8ICAgMTggKw0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaW1hZ2luYXRpb24vcHZyX2Rydi5jICAg IHwgIDMwMiArKy0NCj4gPiAgZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9nZW0uYyAg ICB8ICAzOTYgKysrKw0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaW1hZ2luYXRpb24vcHZyX2dlbS5o ICAgIHwgIDE3NyArKw0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaW1hZ2luYXRpb24vcHZyX21tdS5j ICAgIHwgMjQ4NyArKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9p bWFnaW5hdGlvbi9wdnJfbW11LmggICAgfCAgMTA4ICsNCj4gPiAgZHJpdmVycy9ncHUvZHJtL2lt YWdpbmF0aW9uL3B2cl92bS5jICAgICB8ICA4OTAgKysrKysrKysNCj4gPiAgZHJpdmVycy9ncHUv ZHJtL2ltYWdpbmF0aW9uL3B2cl92bS5oICAgICB8ICAgNjAgKw0KPiA+ICAxMCBmaWxlcyBjaGFu Z2VkLCA0NDU1IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQ0KPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9nZW0uYw0KPiA+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9nZW0uaA0KPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl9tbXUu Yw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2 cl9tbXUuaA0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0 aW9uL3B2cl92bS5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaW1h Z2luYXRpb24vcHZyX3ZtLmgNCj4gDQo+IDxzbmlwPg0KPiANCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl92bS5jIGIvZHJpdmVycy9ncHUvZHJtL2ltYWdp bmF0aW9uL3B2cl92bS5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAw MDAwMDAwMDAuLjYxNmZhZDNhMzMyNQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaW1hZ2luYXRpb24vcHZyX3ZtLmMNCj4gPiBAQCAtMCwwICsxLDg5MCBAQA0K PiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQNCj4gPiArLyog Q29weXJpZ2h0IChjKSAyMDIzIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBMdGQuICovDQo+ID4g Kw0KPiA+ICsjaW5jbHVkZSAicHZyX3ZtLmgiDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAicHZyX2Rl dmljZS5oIg0KPiA+ICsjaW5jbHVkZSAicHZyX2Rydi5oIg0KPiA+ICsjaW5jbHVkZSAicHZyX2dl bS5oIg0KPiA+ICsjaW5jbHVkZSAicHZyX21tdS5oIg0KPiA+ICsjaW5jbHVkZSAicHZyX3JvZ3Vl X2Z3aWYuaCINCj4gPiArI2luY2x1ZGUgInB2cl9yb2d1ZV9oZWFwX2NvbmZpZy5oIg0KPiA+ICsN Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+DQo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2dw dXZhX21nci5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2NvbnRhaW5lcl9vZi5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9lcnJuby5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZ2ZwX3R5cGVzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9rcmVmLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvc3RkZGVmLmg+DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogRE9DOiBNZW1vcnkgY29u dGV4dA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGlzIHRoZSAidG9wIGxldmVsIiBkYXRhdHlwZSBp biB0aGUgVk0gY29kZS4gSXQncyBleHBvc2VkIGluIHRoZSBwdWJsaWMNCj4gPiArICogQVBJIGFz IGFuIG9wYXF1ZSBoYW5kbGUuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHN0 cnVjdCBwdnJfdm1fY29udGV4dCAtIENvbnRleHQgdHlwZSB3aGljaCBlbmNhcHN1bGF0ZXMgYW4g ZW50aXJlIHBhZ2UgdGFibGUNCj4gPiArICogdHJlZSBzdHJ1Y3R1cmUuDQo+ID4gKyAqIEBwdnJf ZGV2OiBUaGUgUG93ZXJWUiBkZXZpY2UgdG8gd2hpY2ggdGhpcyBjb250ZXh0IGlzIGJvdW5kLg0K PiA+ICsgKg0KPiA+ICsgKiBUaGlzIGJpbmRpbmcgaXMgaW1tdXRhYmxlIGZvciB0aGUgbGlmZSBv ZiB0aGUgY29udGV4dC4NCj4gPiArICogQG1tdV9jdHg6IFRoZSBjb250ZXh0IGZvciBiaW5kaW5n IHRvIHBoeXNpY2FsIG1lbW9yeS4NCj4gPiArICogQGdwdXZhX21ncjogR1BVVkEgbWFuYWdlciBv YmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dC4NCj4gPiArICogQGxvY2s6IEdsb2Jh bCBsb2NrIG9uIHRoaXMgZW50aXJlIHN0cnVjdHVyZSBvZiBwYWdlIHRhYmxlcy4NCj4gPiArICog QGZ3X21lbV9jdHhfb2JqOiBGaXJtd2FyZSBvYmplY3QgcmVwcmVzZW50aW5nIGZpcm13YXJlIG1l bW9yeSBjb250ZXh0Lg0KPiA+ICsgKiBAcmVmX2NvdW50OiBSZWZlcmVuY2UgY291bnQgb2Ygb2Jq ZWN0Lg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHB2cl92bV9jb250ZXh0IHsNCj4gPiArCXN0cnVj dCBwdnJfZGV2aWNlICpwdnJfZGV2Ow0KPiA+ICsJc3RydWN0IHB2cl9tbXVfY29udGV4dCAqbW11 X2N0eDsNCj4gPiArCXN0cnVjdCBkcm1fZ3B1dmFfbWFuYWdlciBncHV2YV9tZ3I7DQo+ID4gKwlz dHJ1Y3QgbXV0ZXggbG9jazsNCj4gPiArCXN0cnVjdCBwdnJfZndfb2JqZWN0ICpmd19tZW1fY3R4 X29iajsNCj4gPiArCXN0cnVjdCBrcmVmIHJlZl9jb3VudDsNCj4gPiArfTsNCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgKiBwdnJfdm1fZ2V0X3BhZ2VfdGFibGVfcm9vdF9hZGRyKCkgLSBHZXQgdGhl IERNQSBhZGRyZXNzIG9mIHRoZSByb290IG9mIHRoZQ0KPiA+ICsgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwYWdlIHRhYmxlIHN0cnVjdHVyZSBiZWhpbmQgYSBWTSBjb250 ZXh0Lg0KPiA+ICsgKiBAdm1fY3R4OiBUYXJnZXQgVk0gY29udGV4dC4NCj4gPiArICovDQo+ID4g K2RtYV9hZGRyX3QgcHZyX3ZtX2dldF9wYWdlX3RhYmxlX3Jvb3RfYWRkcihzdHJ1Y3QgcHZyX3Zt X2NvbnRleHQgKnZtX2N0eCkNCj4gPiArew0KPiA+ICsJcmV0dXJuIHB2cl9tbXVfZ2V0X3Jvb3Rf dGFibGVfZG1hX2FkZHIodm1fY3R4LT5tbXVfY3R4KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIERPQzogTWVtb3J5IG1hcHBpbmdzDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIHB2cl92bV9ncHV2YV9tYXBwaW5nX2luaXQoKSAtIFNldHVwIGEgbWFwcGluZyBv YmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkDQo+ID4gKyAqIHBhcmFtZXRlcnMgcmVhZHkgZm9yIG1h cHBpbmcgdXNpbmcgcHZyX3ZtX2dwdXZhX21hcHBpbmdfbWFwKCkuDQo+ID4gKyAqIEB2YTogUG9p bnRlciB0byBkcm1fZ3B1dmEgbWFwcGluZyBvYmplY3QuDQo+ID4gKyAqIEBkZXZpY2VfYWRkcjog RGV2aWNlLXZpcnR1YWwgYWRkcmVzcyBhdCB0aGUgc3RhcnQgb2YgdGhlIG1hcHBpbmcuDQo+ID4g KyAqIEBzaXplOiBTaXplIG9mIHRoZSBkZXNpcmVkIG1hcHBpbmcuDQo+ID4gKyAqIEBwdnJfb2Jq OiBUYXJnZXQgUG93ZXJWUiBtZW1vcnkgb2JqZWN0Lg0KPiA+ICsgKiBAcHZyX29ial9vZmZzZXQ6 IE9mZnNldCBpbnRvIEBwdnJfb2JqIHRvIGJlZ2luIG1hcHBpbmcgZnJvbS4NCj4gPiArICoNCj4g PiArICogU29tZSBwYXJhbWV0ZXJzIG9mIHRoaXMgZnVuY3Rpb24gYXJlIHVuY2hlY2tlZC4gSXQg aXMgdGhlcmVmb3JlIHRoZSBjYWxsZXJzDQo+ID4gKyAqIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3Vy ZSBjZXJ0YWluIGNvbnN0cmFpbnRzIGFyZSBtZXQuIFNwZWNpZmljYWxseToNCj4gPiArICoNCj4g PiArICogKiBAcHZyX29ial9vZmZzZXQgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIHNpemUgb2YgQHB2 cl9vYmosDQo+ID4gKyAqICogVGhlIHN1bSBvZiBAcHZyX29ial9vZmZzZXQgYW5kIEBzaXplIG11 c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQ0KPiA+ICsgKiAgIHNpemUgb2YgQHB2cl9v YmosDQo+ID4gKyAqICogVGhlIHJhbmdlIHNwZWNpZmllZCBieSBAcHZyX29ial9vZmZzZXQgYW5k IEBzaXplICh0aGUgIkNQVSByYW5nZSIpIG11c3QgYmUNCj4gPiArICogICBDUFUgcGFnZS1hbGln bmVkIGJvdGggaW4gc3RhcnQgcG9zaXRpb24gYW5kIHNpemUsIGFuZA0KPiA+ICsgKiAqIFRoZSBy YW5nZSBzcGVjaWZpZWQgYnkgQGRldmljZV9hZGRyIGFuZCBAc2l6ZSAodGhlICJkZXZpY2UgcmFu Z2UiKSBtdXN0IGJlDQo+ID4gKyAqICAgZGV2aWNlIHBhZ2UtYWxpZ25lZCBib3RoIGluIHN0YXJ0 IHBvc2l0aW9uIGFuZCBzaXplLg0KPiA+ICsgKg0KPiA+ICsgKiBGdXJ0aGVybW9yZSwgaXQgaXMg dXAgdG8gdGhlIGNhbGxlciB0byBtYWtlIHN1cmUgdGhhdCBhIHJlZmVyZW5jZSB0byBAcHZyX29i ag0KPiA+ICsgKiBpcyB0YWtlbiBwcmlvciB0byBtYXBwaW5nIEB2YSB3aXRoIHRoZSBkcm1fZ3B1 dmFfbWFuYWdlci4NCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkDQo+ID4gK3B2cl92bV9ncHV2 YV9tYXBwaW5nX2luaXQoc3RydWN0IGRybV9ncHV2YSAqdmEsIHU2NCBkZXZpY2VfYWRkciwgdTY0 IHNpemUsDQo+ID4gKwkJCSAgc3RydWN0IHB2cl9nZW1fb2JqZWN0ICpwdnJfb2JqLCB1NjQgcHZy X29ial9vZmZzZXQpDQo+IA0KPiBUaGVyZSdzIGFscmVhZHkgZHJtX2dwdXZhX2luaXQoKSBkb2lu ZyB0aGUgc2FtZSB0aGluZy4NCj4gDQo+ID4gK3sNCj4gPiArCXZhLT52YS5hZGRyID0gZGV2aWNl X2FkZHI7DQo+ID4gKwl2YS0+dmEucmFuZ2UgPSBzaXplOw0KPiA+ICsJdmEtPmdlbS5vYmogPSBn ZW1fZnJvbV9wdnJfZ2VtKHB2cl9vYmopOw0KPiA+ICsJdmEtPmdlbS5vZmZzZXQgPSBwdnJfb2Jq X29mZnNldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RydWN0IHB2cl92bV9ncHV2YV9vcF9jdHgg ew0KPiA+ICsJc3RydWN0IHB2cl92bV9jb250ZXh0ICp2bV9jdHg7DQo+ID4gKwlzdHJ1Y3QgcHZy X21tdV9vcF9jb250ZXh0ICptbXVfb3BfY3R4Ow0KPiA+ICsJc3RydWN0IGRybV9ncHV2YSAqbmV3 X3ZhLCAqcHJldl92YSwgKm5leHRfdmE7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogcHZyX3ZtX2dwdXZhX21hcCgpIC0gSW5zZXJ0IGEgbWFwcGluZyBpbnRvIGEgbWVtb3J5IGNv bnRleHQuDQo+ID4gKyAqIEBvcDogZ3B1dmEgb3AgY29udGFpbmluZyB0aGUgcmVtYXAgZGV0YWls cy4NCj4gPiArICogQG9wX2N0eDogT3BlcmF0aW9uIGNvbnRleHQuDQo+ID4gKyAqDQo+ID4gKyAq IENvbnRleHQ6IENhbGxlZCBieSBkcm1fZ3B1dmFfc21fbWFwIGZvbGxvd2luZyBhIHN1Y2Nlc3Nm dWwgbWFwcGluZyB3aGlsZQ0KPiA+ICsgKiBAb3BfY3R4LnZtX2N0eCBtdXRleCBpcyBoZWxkLg0K PiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46DQo+ID4gKyAqICAqIDAgb24gc3VjY2Vzcywgb3INCj4g PiArICogICogQW55IGVycm9yIHJldHVybmVkIGJ5IHB2cl9tbXVfbWFwKCkuDQo+ID4gKyAqLw0K PiA+ICtzdGF0aWMgaW50DQo+ID4gK3B2cl92bV9ncHV2YV9tYXAoc3RydWN0IGRybV9ncHV2YV9v cCAqb3AsIHZvaWQgKm9wX2N0eCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHB2cl9nZW1fb2JqZWN0 ICpwdnJfZ2VtID0gZ2VtX3RvX3B2cl9nZW0ob3AtPm1hcC5nZW0ub2JqKTsNCj4gPiArCXN0cnVj dCBwdnJfdm1fZ3B1dmFfb3BfY3R4ICpjdHggPSBvcF9jdHg7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ ICsNCj4gPiArCWlmICgob3AtPm1hcC5nZW0ub2Zmc2V0IHwgb3AtPm1hcC52YS5yYW5nZSkgJiB+ UFZSX0RFVklDRV9QQUdFX01BU0spDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ ICsJZXJyID0gcHZyX21tdV9tYXAoY3R4LT5tbXVfb3BfY3R4LCBvcC0+bWFwLnZhLnJhbmdlLCBw dnJfZ2VtLT5mbGFncywNCj4gPiArCQkJICBvcC0+bWFwLnZhLmFkZHIpOw0KPiA+ICsJaWYgKGVy cikNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsNCj4gPiArCXB2cl92bV9ncHV2YV9tYXBwaW5n X2luaXQoY3R4LT5uZXdfdmEsIG9wLT5tYXAudmEuYWRkciwNCj4gPiArCQkJCSAgb3AtPm1hcC52 YS5yYW5nZSwgcHZyX2dlbSwgb3AtPm1hcC5nZW0ub2Zmc2V0KTsNCj4gPiArDQo+ID4gKwlkcm1f Z3B1dmFfbWFwKCZjdHgtPnZtX2N0eC0+Z3B1dmFfbWdyLCBjdHgtPm5ld192YSwgJm9wLT5tYXAp Ow0KPiANCj4gZHJtX2dwdXZhX21hcCgpIGRvZXMgdXNlIGRybV9ncHV2YV9pbml0X2Zyb21fb3Ao KSBpbnRlcm5hbGx5LCBoZW5jZSB0aGUgZXh0cmENCj4gY2FsbCB0byBwdnJfdm1fZ3B1dmFfbWFw cGluZ19pbml0KCkgc2hvdWxkIGJlIHVubmVjZXNzYXJ5Lg0KPiANCj4gPiArCWRybV9ncHV2YV9s aW5rKGN0eC0+bmV3X3ZhKTsNCj4gDQo+IEhvdyBpcyB0aGlzIHByb3RlY3RlZD8NCj4gDQo+IGRy bV9ncHV2YV9saW5rKCkgYW5kIGRybV9ncHV2YV91bmxpbmsoKSByZXF1aXJlIGVpdGhlciB0aGUg ZG1hX3Jlc3YgbG9jayBvZiB0aGUNCj4gY29ycmVzcG9uZGluZyBHRU0gb2JqZWN0IGJlaW5nIGhl bGQgb3IsIGFsdGVybmF0aXZlbHksIHRoZSBkcml2ZXIgc3BlY2lmaWMgbG9jaw0KPiBpbmRpY2F0 ZWQgdmlhIGRybV9nZW1fZ3B1dmFfc2V0X2xvY2soKS4NCj4gDQo+ID4gKwljdHgtPm5ld192YSA9 IE5VTEw7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIEluY3JlbWVudCB0aGUgcmVmY291bnQg b24gdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgbWVtb3J5IHJlc291cmNlDQo+ID4gKwkgKiB0byBw cmV2ZW50IGRlLWFsbG9jYXRpb24gd2hpbGUgdGhlIG1hcHBpbmcgZXhpc3RzLg0KPiA+ICsJICov DQo+ID4gKwlwdnJfZ2VtX29iamVjdF9nZXQocHZyX2dlbSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBwdnJfdm1fZ3B1dmFfdW5tYXAo KSAtIFJlbW92ZSBhIG1hcHBpbmcgZnJvbSBhIG1lbW9yeSBjb250ZXh0Lg0KPiA+ICsgKiBAb3A6 IGdwdXZhIG9wIGNvbnRhaW5pbmcgdGhlIHVubWFwIGRldGFpbHMuDQo+ID4gKyAqIEBvcF9jdHg6 IE9wZXJhdGlvbiBjb250ZXh0Lg0KPiA+ICsgKg0KPiA+ICsgKiBDb250ZXh0OiBDYWxsZWQgYnkg ZHJtX2dwdXZhX3NtX3VubWFwIGZvbGxvd2luZyBhIHN1Y2Nlc3NmdWwgdW5tYXBwaW5nIHdoaWxl DQo+ID4gKyAqIEBvcF9jdHgudm1fY3R4IG11dGV4IGlzIGhlbGQuDQo+ID4gKyAqDQo+ID4gKyAq IFJldHVybjoNCj4gPiArICogICogMCBvbiBzdWNjZXNzLCBvcg0KPiA+ICsgKiAgKiBBbnkgZXJy b3IgcmV0dXJuZWQgYnkgcHZyX21tdV91bm1hcCgpLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGlu dA0KPiA+ICtwdnJfdm1fZ3B1dmFfdW5tYXAoc3RydWN0IGRybV9ncHV2YV9vcCAqb3AsIHZvaWQg Km9wX2N0eCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHB2cl9nZW1fb2JqZWN0ICpwdnJfZ2VtID0g Z2VtX3RvX3B2cl9nZW0ob3AtPnVubWFwLnZhLT5nZW0ub2JqKTsNCj4gPiArCXN0cnVjdCBwdnJf dm1fZ3B1dmFfb3BfY3R4ICpjdHggPSBvcF9jdHg7DQo+ID4gKw0KPiA+ICsJaW50IGVyciA9IHB2 cl9tbXVfdW5tYXAoY3R4LT5tbXVfb3BfY3R4LCBvcC0+dW5tYXAudmEtPnZhLmFkZHIsDQo+ID4g KwkJCQlvcC0+dW5tYXAudmEtPnZhLnJhbmdlKTsNCj4gPiArDQo+ID4gKwlpZiAoZXJyKQ0KPiA+ ICsJCXJldHVybiBlcnI7DQo+ID4gKw0KPiA+ICsJZHJtX2dwdXZhX3VubWFwKCZvcC0+dW5tYXAp Ow0KPiA+ICsJZHJtX2dwdXZhX3VubGluayhvcC0+dW5tYXAudmEpOw0KPiA+ICsJa2ZyZWUob3At PnVubWFwLnZhKTsNCj4gPiArDQo+ID4gKwlwdnJfZ2VtX29iamVjdF9wdXQocHZyX2dlbSk7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBw dnJfdm1fZ3B1dmFfcmVtYXAoKSAtIFJlbWFwIGEgbWFwcGluZyB3aXRoaW4gYSBtZW1vcnkgY29u dGV4dC4NCj4gPiArICogQG9wOiBncHV2YSBvcCBjb250YWluaW5nIHRoZSByZW1hcCBkZXRhaWxz Lg0KPiA+ICsgKiBAb3BfY3R4OiBPcGVyYXRpb24gY29udGV4dC4NCj4gPiArICoNCj4gPiArICog Q29udGV4dDogQ2FsbGVkIGJ5IGVpdGhlciBkcm1fZ3B1dmFfc21fbWFwIG9yIGRybV9ncHV2YV9z bV91bm1hcCB3aGVuIGENCj4gPiArICogbWFwcGluZyBvciB1bm1hcHBpbmcgb3BlcmF0aW9uIGNh dXNlcyBhIHJlZ2lvbiB0byBiZSBzcGxpdC4gVGhlDQo+ID4gKyAqIEBvcF9jdHgudm1fY3R4IG11 dGV4IGlzIGhlbGQuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoNCj4gPiArICogICogMCBvbiBz dWNjZXNzLCBvcg0KPiA+ICsgKiAgKiBBbnkgZXJyb3IgcmV0dXJuZWQgYnkgcHZyX3ZtX2dwdXZh X3VubWFwKCkgb3IgcHZyX3ZtX2dwdXZhX3VubWFwKCkuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMg aW50DQo+ID4gK3B2cl92bV9ncHV2YV9yZW1hcChzdHJ1Y3QgZHJtX2dwdXZhX29wICpvcCwgdm9p ZCAqb3BfY3R4KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcHZyX3ZtX2dwdXZhX29wX2N0eCAqY3R4 ID0gb3BfY3R4Ow0KPiA+ICsNCj4gPiArCWlmIChvcC0+cmVtYXAudW5tYXApIHsNCj4gDQo+IFlv dSBjYW4gb21pdCB0aGlzIGNoZWNrLCByZW1hcCBvcGVyYXRpb25zIGFsd2F5cyBjb250YWluIGEg dmFsaWQgdW5tYXANCj4gb3BlcmF0aW9uLiBIb3dldmVyLCB5b3UgbWlnaHQgd2FudCB0byBrbm93 IHdoZXRoZXIgdGhlIHJlbWFwIG9wZXJhdGlvbiB3YXMNCj4gZ2VuZXJhdGVkIGR1ZSB0byBhIGNh bGwgdG8gZHJtX2dwdXZhX3NtX21hcCgpIG9yIGRybV9ncHV2YV9zbV91bm1hcCgpLCBzaW5jZSBm b3INCj4gdGhlIGxhdHRlciB5b3UgbWlnaHQgd2FudCB0byBmcmVlIHBhZ2UgdGFibGUgc3RydWN0 dXJlcy4NCj4gDQo+ID4gKwkJY29uc3QgdTY0IHZhX3N0YXJ0ID0gb3AtPnJlbWFwLnByZXYgPw0K PiA+ICsJCQkJICAgICBvcC0+cmVtYXAucHJldi0+dmEuYWRkciArIG9wLT5yZW1hcC5wcmV2LT52 YS5yYW5nZSA6DQo+ID4gKwkJCQkgICAgIG9wLT5yZW1hcC51bm1hcC0+dmEtPnZhLmFkZHI7DQo+ ID4gKwkJY29uc3QgdTY0IHZhX2VuZCA9IG9wLT5yZW1hcC5uZXh0ID8NCj4gPiArCQkJCSAgIG9w LT5yZW1hcC5uZXh0LT52YS5hZGRyIDoNCj4gPiArCQkJCSAgIG9wLT5yZW1hcC51bm1hcC0+dmEt PnZhLmFkZHIgKyBvcC0+cmVtYXAudW5tYXAtPnZhLT52YS5yYW5nZTsNCj4gDQo+IFRoaXMgc2Vl bXMgdG8gYmUgYSBjb21tb24gY2FsY3VsYXRpb24gZm9yIGRyaXZlcnMsIGl0IGlzIHByb2JhYmx5 IHdvcnRoIHRvIGNvbWUNCj4gdXAgd2l0aCBhIGhlbHBlciwgc29tZXRoaW5nIGxpa2UNCj4gZHJt X2dwdXZhX29wX3VubWFwX3JhbmdlKHN0cnVjdCBkcm1fZ3B1dmFfb3AgKm9wLCB1NjQgKmFkZHIs IHU2NCAqcmFuZ2UpLg0KPiANCj4gPiArDQo+ID4gKwkJaW50IGVyciA9IHB2cl9tbXVfdW5tYXAo Y3R4LT5tbXVfb3BfY3R4LCB2YV9zdGFydCwNCj4gPiArCQkJCQl2YV9lbmQgLSB2YV9zdGFydCk7 DQo+ID4gKw0KPiA+ICsJCWlmIChlcnIpDQo+ID4gKwkJCXJldHVybiBlcnI7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJaWYgKG9wLT5yZW1hcC5wcmV2KQ0KPiA+ICsJCXB2cl92bV9ncHV2YV9tYXBw aW5nX2luaXQoY3R4LT5wcmV2X3ZhLCBvcC0+cmVtYXAucHJldi0+dmEuYWRkciwNCj4gPiArCQkJ CQkgIG9wLT5yZW1hcC5wcmV2LT52YS5yYW5nZSwNCj4gPiArCQkJCQkgIGdlbV90b19wdnJfZ2Vt KG9wLT5yZW1hcC5wcmV2LT5nZW0ub2JqKSwNCj4gPiArCQkJCQkgIG9wLT5yZW1hcC5wcmV2LT5n ZW0ub2Zmc2V0KTsNCj4gPiArDQo+ID4gKwlpZiAob3AtPnJlbWFwLm5leHQpDQo+ID4gKwkJcHZy X3ZtX2dwdXZhX21hcHBpbmdfaW5pdChjdHgtPm5leHRfdmEsIG9wLT5yZW1hcC5uZXh0LT52YS5h ZGRyLA0KPiA+ICsJCQkJCSAgb3AtPnJlbWFwLm5leHQtPnZhLnJhbmdlLA0KPiA+ICsJCQkJCSAg Z2VtX3RvX3B2cl9nZW0ob3AtPnJlbWFwLm5leHQtPmdlbS5vYmopLA0KPiA+ICsJCQkJCSAgb3At PnJlbWFwLm5leHQtPmdlbS5vZmZzZXQpOw0KPiA+ICsNCj4gPiArCS8qIE5vIGFjdHVhbCByZW1h cCByZXF1aXJlZDogdGhlIHBhZ2UgdGFibGUgdHJlZSBkZXB0aCBpcyBmaXhlZCB0byAzLA0KPiA+ ICsJICogYW5kIHdlIHVzZSA0ayBwYWdlIHRhYmxlIGVudHJpZXMgb25seSBmb3Igbm93Lg0KPiA+ ICsJICovDQo+ID4gKwlkcm1fZ3B1dmFfcmVtYXAoY3R4LT5wcmV2X3ZhLCBjdHgtPm5leHRfdmEs ICZvcC0+cmVtYXApOw0KPiANCj4gQXMgYWJvdmUsIGRybV9ncHV2YV9yZW1hcCgpIGRvZXMgdXNl IGRybV9ncHV2YV9pbml0X2Zyb21fb3AoKSBpbnRlcm5hbGx5LCBoZW5jZQ0KPiB0aGUgZXh0cmEg Y2FsbCB0byBwdnJfdm1fZ3B1dmFfbWFwcGluZ19pbml0KCkgc2hvdWxkIGJlIHVubmVjZXNzYXJ5 Lg0KPiANCj4gPiArDQo+ID4gKwlpZiAob3AtPnJlbWFwLnByZXYpIHsNCj4gPiArCQlwdnJfZ2Vt X29iamVjdF9nZXQoZ2VtX3RvX3B2cl9nZW0oY3R4LT5wcmV2X3ZhLT5nZW0ub2JqKSk7DQo+ID4g KwkJZHJtX2dwdXZhX2xpbmsoY3R4LT5wcmV2X3ZhKTsNCj4gPiArCQljdHgtPnByZXZfdmEgPSBO VUxMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChvcC0+cmVtYXAubmV4dCkgew0KPiA+ICsJ CXB2cl9nZW1fb2JqZWN0X2dldChnZW1fdG9fcHZyX2dlbShjdHgtPm5leHRfdmEtPmdlbS5vYmop KTsNCj4gPiArCQlkcm1fZ3B1dmFfbGluayhjdHgtPm5leHRfdmEpOw0KPiA+ICsJCWN0eC0+bmV4 dF92YSA9IE5VTEw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKG9wLT5yZW1hcC51bm1hcCkg ew0KPiANCj4gQXMgYWJvdmUsIG5vIG5lZWQgZm9yIHRoaXMgY2hlY2suDQo+IA0KPiAtIERhbmls bw0KPiANCj4gPiArCQlzdHJ1Y3QgcHZyX2dlbV9vYmplY3QgKnB2cl9nZW0gPSBnZW1fdG9fcHZy X2dlbShvcC0+cmVtYXAudW5tYXAtPnZhLT5nZW0ub2JqKTsNCj4gPiArDQo+ID4gKwkJZHJtX2dw dXZhX3VubGluayhvcC0+dW5tYXAudmEpOw0KPiA+ICsJCWtmcmVlKG9wLT51bm1hcC52YSk7DQo+ ID4gKw0KPiA+ICsJCXB2cl9nZW1fb2JqZWN0X3B1dChwdnJfZ2VtKTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogUHVibGlj IEFQSQ0KPiA+ICsgKg0KPiA+ICsgKiBGb3IgYW4gb3ZlcnZpZXcgb2YgdGhlc2UgZnVuY3Rpb25z LCBzZWUgKkRPQzogUHVibGljIEFQSSogaW4gInB2cl92bS5oIi4NCj4gPiArICovDQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICogcHZyX2RldmljZV9hZGRyX2lzX3ZhbGlkKCkgLSBUZXN0cyB3aGV0 aGVyIGEgZGV2aWNlLXZpcnR1YWwgYWRkcmVzcw0KPiA+ICsgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlzIHZhbGlkLg0KPiA+ICsgKiBAZGV2aWNlX2FkZHI6IFZpcnR1YWwgZGV2aWNl IGFkZHJlc3MgdG8gdGVzdC4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOg0KPiA+ICsgKiAgKiAl dHJ1ZSBpZiBAZGV2aWNlX2FkZHIgaXMgd2l0aGluIHRoZSB2YWxpZCByYW5nZSBmb3IgYSBkZXZp Y2UgcGFnZQ0KPiA+ICsgKiAgICB0YWJsZSBhbmQgaXMgYWxpZ25lZCB0byB0aGUgZGV2aWNlIHBh Z2Ugc2l6ZSwgb3INCj4gPiArICogICogJWZhbHNlIG90aGVyd2lzZS4NCj4gPiArICovDQo+ID4g K2Jvb2wNCj4gPiArcHZyX2RldmljZV9hZGRyX2lzX3ZhbGlkKHU2NCBkZXZpY2VfYWRkcikNCj4g PiArew0KPiA+ICsJcmV0dXJuIChkZXZpY2VfYWRkciAmIH5QVlJfUEFHRV9UQUJMRV9BRERSX01B U0spID09IDAgJiYNCj4gPiArCSAgICAgICAoZGV2aWNlX2FkZHIgJiB+UFZSX0RFVklDRV9QQUdF X01BU0spID09IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBwdnJfZGV2aWNl X2FkZHJfYW5kX3NpemVfYXJlX3ZhbGlkKCkgLSBUZXN0cyB3aGV0aGVyIGEgZGV2aWNlLXZpcnR1 YWwNCj4gPiArICogYWRkcmVzcyBhbmQgYXNzb2NpYXRlZCBzaXplIGFyZSBib3RoIHZhbGlkLg0K PiA+ICsgKiBAZGV2aWNlX2FkZHI6IFZpcnR1YWwgZGV2aWNlIGFkZHJlc3MgdG8gdGVzdC4NCj4g PiArICogQHNpemU6IFNpemUgb2YgdGhlIHJhbmdlIGJhc2VkIGF0IEBkZXZpY2VfYWRkciB0byB0 ZXN0Lg0KPiA+ICsgKg0KPiA+ICsgKiBDYWxsaW5nIHB2cl9kZXZpY2VfYWRkcl9pc192YWxpZCgp IHR3aWNlIChvbmNlIG9uIEBzaXplLCBhbmQgYWdhaW4gb24NCj4gPiArICogQGRldmljZV9hZGRy ICsgQHNpemUpIHRvIHZlcmlmeSBhIGRldmljZS12aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgaW5pdGlh bGx5DQo+ID4gKyAqIHNlZW1zIGludHVpdGl2ZSwgYnV0IGl0IHByb2R1Y2VzIGEgZmFsc2UtbmVn YXRpdmUgd2hlbiB0aGUgYWRkcmVzcyByYW5nZQ0KPiA+ICsgKiBpcyByaWdodCBhdCB0aGUgZW5k IG9mIGRldmljZS12aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMg ZnVuY3Rpb24gY2F0Y2hlcyB0aGF0IGNvcm5lciBjYXNlLCBhcyB3ZWxsIGFzIGNoZWNraW5nIHRo YXQNCj4gPiArICogQHNpemUgaXMgbm9uLXplcm8uDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoN Cj4gPiArICogICogJXRydWUgaWYgQGRldmljZV9hZGRyIGlzIGRldmljZSBwYWdlIGFsaWduZWQ7 IEBzaXplIGlzIGRldmljZSBwYWdlDQo+ID4gKyAqICAgIGFsaWduZWQ7IHRoZSByYW5nZSBzcGVj aWZpZWQgYnkgQGRldmljZV9hZGRyIGFuZCBAc2l6ZSBpcyB3aXRoaW4gdGhlDQo+ID4gKyAqICAg IGJvdW5kcyBvZiB0aGUgZGV2aWNlLXZpcnR1YWwgYWRkcmVzcyBzcGFjZSwgYW5kIEBzaXplIGlz IG5vbi16ZXJvLCBvcg0KPiA+ICsgKiAgKiAlZmFsc2Ugb3RoZXJ3aXNlLg0KPiA+ICsgKi8NCj4g PiArYm9vbA0KPiA+ICtwdnJfZGV2aWNlX2FkZHJfYW5kX3NpemVfYXJlX3ZhbGlkKHU2NCBkZXZp Y2VfYWRkciwgdTY0IHNpemUpDQo+ID4gK3sNCj4gPiArCXJldHVybiBwdnJfZGV2aWNlX2FkZHJf aXNfdmFsaWQoZGV2aWNlX2FkZHIpICYmDQo+ID4gKwkgICAgICAgc2l6ZSAhPSAwICYmIChzaXpl ICYgflBWUl9ERVZJQ0VfUEFHRV9NQVNLKSA9PSAwICYmDQo+ID4gKwkgICAgICAgKGRldmljZV9h ZGRyICsgc2l6ZSA8PSBQVlJfUEFHRV9UQUJMRV9BRERSX1NQQUNFX1NJWkUpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9ncHV2YV9mbl9vcHMgcHZyX3ZtX2dw dXZhX29wcyA9IHsNCj4gPiArCS5zbV9zdGVwX21hcCA9IHB2cl92bV9ncHV2YV9tYXAsDQo+ID4g Kwkuc21fc3RlcF9yZW1hcCA9IHB2cl92bV9ncHV2YV9yZW1hcCwNCj4gPiArCS5zbV9zdGVwX3Vu bWFwID0gcHZyX3ZtX2dwdXZhX3VubWFwLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAqIHB2cl92bV9jcmVhdGVfY29udGV4dCgpIC0gQ3JlYXRlIGEgbmV3IFZNIGNvbnRleHQuDQo+ ID4gKyAqIEBwdnJfZGV2OiBUYXJnZXQgUG93ZXJWUiBkZXZpY2UuDQo+ID4gKyAqIEBpc191c2Vy c3BhY2VfY29udGV4dDogJXRydWUgaWYgdGhpcyBjb250ZXh0IGlzIGZvciB1c2Vyc3BhY2UuIFRo aXMgd2lsbA0KPiA+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIGZpcm13YXJl IG1lbW9yeSBjb250ZXh0IGZvciB0aGUgVk0gY29udGV4dA0KPiA+ICsgKiAgICAgICAgICAgICAg ICAgICAgICAgIGFuZCBkaXNhYmxlIHdhcm5pbmdzIHdoZW4gdGVhcmluZyBkb3duIG1hcHBpbmdz Lg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46DQo+ID4gKyAqICAqIEEgaGFuZGxlIHRvIHRoZSBu ZXdseS1taW50ZWQgVk0gY29udGV4dCBvbiBzdWNjZXNzLA0KPiA+ICsgKiAgKiAtJUVJTlZBTCBp ZiB0aGUgZmVhdHVyZSAidmlydHVhbCBhZGRyZXNzIHNwYWNlIGJpdHMiIG9uIEBwdnJfZGV2IGlz DQo+ID4gKyAqICAgIG1pc3Npbmcgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHZhbHVlLA0KPiA+ICsg KiAgKiAtJUVOT01FTSBpZiBhbGxvY2F0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUgYmVoaW5kIHRoZSBv cGFxdWUgaGFuZGxlIGZhaWxzLA0KPiA+ICsgKiAgICBvcg0KPiA+ICsgKiAgKiBBbnkgZXJyb3Ig ZW5jb3VudGVyZWQgd2hpbGUgc2V0dGluZyB1cCBpbnRlcm5hbCBzdHJ1Y3R1cmVzLg0KPiA+ICsg Ki8NCj4gPiArc3RydWN0IHB2cl92bV9jb250ZXh0ICoNCj4gPiArcHZyX3ZtX2NyZWF0ZV9jb250 ZXh0KHN0cnVjdCBwdnJfZGV2aWNlICpwdnJfZGV2LCBib29sIGlzX3VzZXJzcGFjZV9jb250ZXh0 KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGZyb21fcHZyX2Rl dmljZShwdnJfZGV2KTsNCj4gPiArDQo+ID4gKwlzdHJ1Y3QgcHZyX3ZtX2NvbnRleHQgKnZtX2N0 eDsNCj4gPiArCXUxNiBkZXZpY2VfYWRkcl9iaXRzOw0KPiA+ICsNCj4gPiArCWludCBlcnI7DQo+ ID4gKw0KPiA+ICsJZXJyID0gUFZSX0ZFQVRVUkVfVkFMVUUocHZyX2RldiwgdmlydHVhbF9hZGRy ZXNzX3NwYWNlX2JpdHMsDQo+ID4gKwkJCQkmZGV2aWNlX2FkZHJfYml0cyk7DQo+ID4gKwlpZiAo ZXJyKSB7DQo+ID4gKwkJZHJtX2Vycihkcm1fZGV2LA0KPiA+ICsJCQkiRmFpbGVkIHRvIGdldCBk ZXZpY2UgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGJpdHNcbiIpOw0KPiA+ICsJCXJldHVybiBFUlJf UFRSKGVycik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGRldmljZV9hZGRyX2JpdHMgIT0g UFZSX1BBR0VfVEFCTEVfQUREUl9CSVRTKSB7DQo+ID4gKwkJZHJtX2Vycihkcm1fZGV2LA0KPiA+ ICsJCQkiRGV2aWNlIGhhcyB1bnN1cHBvcnRlZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugc2l6ZVxu Iik7DQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJdm1fY3R4ID0ga3phbGxvYyhzaXplb2YoKnZtX2N0eCksIEdGUF9LRVJORUwpOw0KPiA+ICsJ aWYgKCF2bV9jdHgpDQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ID4gKw0KPiA+ ICsJdm1fY3R4LT5wdnJfZGV2ID0gcHZyX2RldjsNCj4gPiArCWtyZWZfaW5pdCgmdm1fY3R4LT5y ZWZfY291bnQpOw0KPiA+ICsJbXV0ZXhfaW5pdCgmdm1fY3R4LT5sb2NrKTsNCj4gPiArDQo+ID4g Kwlkcm1fZ3B1dmFfbWFuYWdlcl9pbml0KCZ2bV9jdHgtPmdwdXZhX21nciwNCj4gPiArCQkJICAg ICAgIGlzX3VzZXJzcGFjZV9jb250ZXh0ID8gIlBvd2VyVlItdXNlci1WTSIgOiAiUG93ZXJWUi1G Vy1WTSIsDQo+ID4gKwkJCSAgICAgICAwLCAxVUxMIDw8IGRldmljZV9hZGRyX2JpdHMsIDAsIDAs ICZwdnJfdm1fZ3B1dmFfb3BzKTsNCj4gPiArDQo+ID4gKwl2bV9jdHgtPm1tdV9jdHggPSBwdnJf bW11X2NvbnRleHRfY3JlYXRlKHB2cl9kZXYpOw0KPiA+ICsJZXJyID0gUFRSX0VSUl9PUl9aRVJP KCZ2bV9jdHgtPm1tdV9jdHgpOw0KPiA+ICsJaWYgKGVycikgew0KPiA+ICsJCXZtX2N0eC0+bW11 X2N0eCA9IE5VTEw7DQo+ID4gKwkJZ290byBlcnJfcHV0X2N0eDsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlpZiAoaXNfdXNlcnNwYWNlX2NvbnRleHQpIHsNCj4gPiArCQkvKiBUT0RPOiBDcmVhdGUg RlcgbWVtIGNvbnRleHQgKi8NCj4gPiArCQllcnIgPSAtRU5PREVWOw0KPiA+ICsJCWdvdG8gZXJy X3B1dF9jdHg7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHZtX2N0eDsNCj4gPiArDQo+ ID4gK2Vycl9wdXRfY3R4Og0KPiA+ICsJcHZyX3ZtX2NvbnRleHRfcHV0KHZtX2N0eCk7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIEVSUl9QVFIoZXJyKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIHB2cl92bV9jb250ZXh0X3JlbGVhc2UoKSAtIFRlYXJkb3duIGEgVk0gY29udGV4dC4N Cj4gPiArICogQHJlZl9jb3VudDogUG9pbnRlciB0byByZWZlcmVuY2UgY291bnRlciBvZiB0aGUg Vk0gY29udGV4dC4NCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQg bm8gbWFwcGluZ3MgYXJlIGxlZnQgZGFuZ2xpbmcgYnkgdW5tYXBwaW5nIHRoZW0NCj4gPiArICog YWxsIGluIG9yZGVyIG9mIGFzY2VuZGluZyBkZXZpY2UtdmlydHVhbCBhZGRyZXNzLg0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIHZvaWQNCj4gPiArcHZyX3ZtX2NvbnRleHRfcmVsZWFzZShzdHJ1Y3Qg a3JlZiAqcmVmX2NvdW50KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcHZyX3ZtX2NvbnRleHQgKnZt X2N0eCA9DQo+ID4gKwkJY29udGFpbmVyX29mKHJlZl9jb3VudCwgc3RydWN0IHB2cl92bV9jb250 ZXh0LCByZWZfY291bnQpOw0KPiA+ICsNCj4gPiArCS8qIFRPRE86IERlc3Ryb3kgRlcgbWVtIGNv bnRleHQgKi8NCj4gPiArCVdBUk5fT04odm1fY3R4LT5md19tZW1fY3R4X29iaik7DQo+ID4gKw0K PiA+ICsJV0FSTl9PTihwdnJfdm1fdW5tYXAodm1fY3R4LCB2bV9jdHgtPmdwdXZhX21nci5tbV9z dGFydCwNCj4gPiArCQkJICAgICB2bV9jdHgtPmdwdXZhX21nci5tbV9yYW5nZSkpOw0KPiA+ICsN Cj4gPiArCWRybV9ncHV2YV9tYW5hZ2VyX2Rlc3Ryb3koJnZtX2N0eC0+Z3B1dmFfbWdyKTsNCj4g PiArCXB2cl9tbXVfY29udGV4dF9kZXN0cm95KHZtX2N0eC0+bW11X2N0eCk7DQo+ID4gKwltdXRl eF9kZXN0cm95KCZ2bV9jdHgtPmxvY2spOw0KPiA+ICsNCj4gPiArCWtmcmVlKHZtX2N0eCk7DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBwdnJfdm1fY29udGV4dF9sb29rdXAoKSAt IExvb2sgdXAgVk0gY29udGV4dCBmcm9tIGhhbmRsZQ0KPiA+ICsgKiBAcHZyX2ZpbGU6IFBvaW50 ZXIgdG8gcHZyX2ZpbGUgc3RydWN0dXJlLg0KPiA+ICsgKiBAaGFuZGxlOiBPYmplY3QgaGFuZGxl Lg0KPiA+ICsgKg0KPiA+ICsgKiBUYWtlcyByZWZlcmVuY2Ugb24gVk0gY29udGV4dCBvYmplY3Qu IENhbGwgcHZyX3ZtX2NvbnRleHRfcHV0KCkgdG8gcmVsZWFzZS4NCj4gPiArICoNCj4gPiArICog UmV0dXJuczoNCj4gPiArICogICogVGhlIHJlcXVlc3RlZCBvYmplY3Qgb24gc3VjY2Vzcywgb3IN Cj4gPiArICogICogJU5VTEwgb24gZmFpbHVyZSAob2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIGxp c3QsIG9yIGlzIG5vdCBhIFZNIGNvbnRleHQpDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcHZyX3Zt X2NvbnRleHQgKg0KPiA+ICtwdnJfdm1fY29udGV4dF9sb29rdXAoc3RydWN0IHB2cl9maWxlICpw dnJfZmlsZSwgdTMyIGhhbmRsZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHB2cl92bV9jb250ZXh0 ICp2bV9jdHg7DQo+ID4gKw0KPiA+ICsJeGFfbG9jaygmcHZyX2ZpbGUtPnZtX2N0eF9oYW5kbGVz KTsNCj4gPiArCXZtX2N0eCA9IHhhX2xvYWQoJnB2cl9maWxlLT52bV9jdHhfaGFuZGxlcywgaGFu ZGxlKTsNCj4gPiArCWlmICh2bV9jdHgpDQo+ID4gKwkJa3JlZl9nZXQoJnZtX2N0eC0+cmVmX2Nv dW50KTsNCj4gPiArDQo+ID4gKwl4YV91bmxvY2soJnB2cl9maWxlLT52bV9jdHhfaGFuZGxlcyk7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHZtX2N0eDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAqIHB2cl92bV9jb250ZXh0X3B1dCgpIC0gUmVsZWFzZSBhIHJlZmVyZW5jZSBvbiBhIFZN IGNvbnRleHQNCj4gPiArICogQHZtX2N0eDogVGFyZ2V0IFZNIGNvbnRleHQuDQo+ID4gKyAqDQo+ ID4gKyAqIFJldHVybnM6DQo+ID4gKyAqICAqICV0cnVlIGlmIHRoZSBWTSBjb250ZXh0IHdhcyBk ZXN0cm95ZWQsIG9yDQo+ID4gKyAqICAqICVmYWxzZSBpZiB0aGVyZSBhcmUgYW55IHJlZmVyZW5j ZXMgc3RpbGwgcmVtYWluaW5nLg0KPiA+ICsgKi8NCj4gPiArYm9vbA0KPiA+ICtwdnJfdm1fY29u dGV4dF9wdXQoc3RydWN0IHB2cl92bV9jb250ZXh0ICp2bV9jdHgpDQo+ID4gK3sNCj4gPiArCVdB Uk5fT04oIXZtX2N0eCk7DQo+ID4gKw0KPiA+ICsJaWYgKHZtX2N0eCkNCj4gPiArCQlyZXR1cm4g a3JlZl9wdXQoJnZtX2N0eC0+cmVmX2NvdW50LCBwdnJfdm1fY29udGV4dF9yZWxlYXNlKTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IHB2cl9kZXN0cm95X3ZtX2NvbnRleHRzX2Zvcl9maWxlOiBEZXN0cm95IGFueSBWTSBjb250ZXh0 cyBhc3NvY2lhdGVkIHdpdGggdGhlDQo+ID4gKyAqIGdpdmVuIGZpbGUuDQo+ID4gKyAqIEBwdnJf ZmlsZTogUG9pbnRlciB0byBwdnJfZmlsZSBzdHJ1Y3R1cmUuDQo+ID4gKyAqDQo+ID4gKyAqIFJl bW92ZXMgYWxsIHZtX2NvbnRleHRzIGFzc29jaWF0ZWQgd2l0aCBAcHZyX2ZpbGUgZnJvbSB0aGUg ZGV2aWNlIFZNIGNvbnRleHQNCj4gPiArICogbGlzdCBhbmQgZHJvcHMgaW5pdGlhbCByZWZlcmVu Y2VzLiB2bV9jb250ZXh0cyB3aWxsIHRoZW4gYmUgZGVzdHJveWVkIG9uY2UNCj4gPiArICogYWxs IG91dHN0YW5kaW5nIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuDQo+ID4gKyAqLw0KPiA+ICt2b2lk IHB2cl9kZXN0cm95X3ZtX2NvbnRleHRzX2Zvcl9maWxlKHN0cnVjdCBwdnJfZmlsZSAqcHZyX2Zp bGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBwdnJfdm1fY29udGV4dCAqdm1fY3R4Ow0KPiA+ICsJ dW5zaWduZWQgbG9uZyBoYW5kbGU7DQo+ID4gKw0KPiA+ICsJeGFfZm9yX2VhY2goJnB2cl9maWxl LT52bV9jdHhfaGFuZGxlcywgaGFuZGxlLCB2bV9jdHgpIHsNCj4gPiArCQkvKiB2bV9jdHggaXMg bm90IHVzZWQgaGVyZSBiZWNhdXNlIHRoYXQgd291bGQgY3JlYXRlIGEgcmFjZSB3aXRoIHhhX2Vy YXNlICovDQo+ID4gKwkJcHZyX3ZtX2NvbnRleHRfcHV0KHhhX2VyYXNlKCZwdnJfZmlsZS0+dm1f Y3R4X2hhbmRsZXMsIGhhbmRsZSkpOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogcHZyX3ZtX21hcCgpIC0gTWFwIGEgc2VjdGlvbiBvZiBwaHlzaWNhbCBtZW1vcnkg aW50byBhIHNlY3Rpb24gb2YgZGV2aWNlLXZpcnR1YWwgbWVtb3J5Lg0KPiA+ICsgKiBAdm1fY3R4 OiBUYXJnZXQgVk0gY29udGV4dC4NCj4gPiArICogQHB2cl9vYmo6IFRhcmdldCBQb3dlclZSIG1l bW9yeSBvYmplY3QuDQo+ID4gKyAqIEBwdnJfb2JqX29mZnNldDogT2Zmc2V0IGludG8gQHB2cl9v YmogdG8gbWFwIGZyb20uDQo+ID4gKyAqIEBkZXZpY2VfYWRkcjogVmlydHVhbCBkZXZpY2UgYWRk cmVzcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3RlZCBtYXBwaW5nLg0KPiA+ICsgKiBAc2l6 ZTogU2l6ZSBvZiB0aGUgcmVxdWVzdGVkIG1hcHBpbmcuDQo+ID4gKyAqDQo+ID4gKyAqIE5vIGhh bmRsZSBpcyByZXR1cm5lZCB0byByZXByZXNlbnQgdGhlIG1hcHBpbmcuIEluc3RlYWQsIGNhbGxl cnMgc2hvdWxkDQo+ID4gKyAqIHJlbWVtYmVyIEBkZXZpY2VfYWRkciBhbmQgdXNlIHRoYXQgYXMg YSBoYW5kbGUuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoNCj4gPiArICogICogMCBvbiBzdWNj ZXNzLA0KPiA+ICsgKiAgKiAtJUVJTlZBTCBpZiBAZGV2aWNlX2FkZHIgaXMgbm90IGEgdmFsaWQg cGFnZS1hbGlnbmVkIGRldmljZS12aXJ0dWFsDQo+ID4gKyAqICAgIGFkZHJlc3M7IHRoZSByZWdp b24gc3BlY2lmaWVkIGJ5IEBwdnJfb2JqX29mZnNldCBhbmQgQHNpemUgZG9lcyBub3QgZmFsbA0K PiA+ICsgKiAgICBlbnRpcmVseSB3aXRoaW4gQHB2cl9vYmosIG9yIGFueSBwYXJ0IG9mIHRoZSBz cGVjaWZpZWQgcmVnaW9uIG9mIEBwdnJfb2JqDQo+ID4gKyAqICAgIGlzIG5vdCBkZXZpY2Utdmly dHVhbCBwYWdlLWFsaWduZWQsDQo+ID4gKyAqICAqIEFueSBlcnJvciBlbmNvdW50ZXJlZCB3aGls ZSBwZXJmb3JtaW5nIGludGVybmFsIG9wZXJhdGlvbnMgcmVxdWlyZWQgdG8NCj4gPiArICogICAg ZGVzdHJveSB0aGUgbWFwcGluZyAocmV0dXJuZWQgZnJvbSBwdnJfdm1fZ3B1dmFfbWFwIG9yDQo+ ID4gKyAqICAgIHB2cl92bV9ncHV2YV9yZW1hcCkuDQo+ID4gKyAqLw0KPiA+ICtpbnQNCj4gPiAr cHZyX3ZtX21hcChzdHJ1Y3QgcHZyX3ZtX2NvbnRleHQgKnZtX2N0eCwNCj4gPiArCSAgIHN0cnVj dCBwdnJfZ2VtX29iamVjdCAqcHZyX29iaiwgdTY0IHB2cl9vYmpfb2Zmc2V0LA0KPiA+ICsJICAg dTY0IGRldmljZV9hZGRyLCB1NjQgc2l6ZSkNCj4gPiArew0KPiA+ICsJY29uc3Qgc2l6ZV90IHB2 cl9vYmpfc2l6ZSA9IHB2cl9nZW1fb2JqZWN0X3NpemUocHZyX29iaik7DQo+ID4gKwlzdHJ1Y3Qg cHZyX3ZtX2dwdXZhX29wX2N0eCBvcF9jdHggPSB7IC52bV9jdHggPSB2bV9jdHggfTsNCj4gPiAr CXN0cnVjdCBzZ190YWJsZSAqc2d0Ow0KPiA+ICsJaW50IGVycjsNCj4gPiArDQo+ID4gKwlpZiAo IXB2cl9kZXZpY2VfYWRkcl9hbmRfc2l6ZV9hcmVfdmFsaWQoZGV2aWNlX2FkZHIsIHNpemUpIHx8 DQo+ID4gKwkgICAgcHZyX29ial9vZmZzZXQgJiB+UEFHRV9NQVNLIHx8IHNpemUgJiB+UEFHRV9N QVNLIHx8DQo+ID4gKwkgICAgcHZyX29ial9vZmZzZXQgKyBzaXplID4gcHZyX29ial9zaXplIHx8 DQo+ID4gKwkgICAgcHZyX29ial9vZmZzZXQgPiBwdnJfb2JqX3NpemUpIHsNCj4gPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlvcF9jdHgubmV3X3ZhID0ga3phbGxv YyhzaXplb2YoKm9wX2N0eC5uZXdfdmEpLCBHRlBfS0VSTkVMKTsNCj4gPiArCW9wX2N0eC5wcmV2 X3ZhID0ga3phbGxvYyhzaXplb2YoKm9wX2N0eC5wcmV2X3ZhKSwgR0ZQX0tFUk5FTCk7DQo+ID4g KwlvcF9jdHgubmV4dF92YSA9IGt6YWxsb2Moc2l6ZW9mKCpvcF9jdHgubmV4dF92YSksIEdGUF9L RVJORUwpOw0KPiA+ICsJaWYgKCFvcF9jdHgubmV3X3ZhIHx8ICFvcF9jdHgucHJldl92YSB8fCAh b3BfY3R4Lm5leHRfdmEpIHsNCj4gPiArCQllcnIgPSAtRU5PTUVNOw0KPiA+ICsJCWdvdG8gb3V0 X2ZyZWU7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc2d0ID0gcHZyX2dlbV9vYmplY3RfZ2V0X3Bh Z2VzX3NndChwdnJfb2JqKTsNCj4gPiArCWVyciA9IFBUUl9FUlJfT1JfWkVSTyhzZ3QpOw0KPiA+ ICsJaWYgKGVycikNCj4gPiArCQlnb3RvIG91dF9mcmVlOw0KPiA+ICsNCj4gPiArCW9wX2N0eC5t bXVfb3BfY3R4ID0gcHZyX21tdV9vcF9jb250ZXh0X2NyZWF0ZSh2bV9jdHgtPm1tdV9jdHgsIHNn dCwNCj4gPiArCQkJCQkJICAgICAgcHZyX29ial9vZmZzZXQsIHNpemUpOw0KPiA+ICsJZXJyID0g UFRSX0VSUl9PUl9aRVJPKG9wX2N0eC5tbXVfb3BfY3R4KTsNCj4gPiArCWlmIChlcnIpIHsNCj4g PiArCQlvcF9jdHgubW11X29wX2N0eCA9IE5VTEw7DQo+ID4gKwkJZ290byBvdXRfbW11X29wX2N0 eF9kZXN0cm95Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnZtX2N0eC0+bG9j ayk7DQo+ID4gKwllcnIgPSBkcm1fZ3B1dmFfc21fbWFwKCZ2bV9jdHgtPmdwdXZhX21nciwgJm9w X2N0eCwgZGV2aWNlX2FkZHIsIHNpemUsDQo+ID4gKwkJCSAgICAgICBnZW1fZnJvbV9wdnJfZ2Vt KHB2cl9vYmopLCBwdnJfb2JqX29mZnNldCk7DQo+ID4gKwltdXRleF91bmxvY2soJnZtX2N0eC0+ bG9jayk7DQo+ID4gKw0KPiA+ICtvdXRfbW11X29wX2N0eF9kZXN0cm95Og0KPiA+ICsJcHZyX21t dV9vcF9jb250ZXh0X2Rlc3Ryb3kob3BfY3R4Lm1tdV9vcF9jdHgpOw0KPiA+ICsNCj4gPiArb3V0 X2ZyZWU6DQo+ID4gKwlrZnJlZShvcF9jdHgubmV4dF92YSk7DQo+ID4gKwlrZnJlZShvcF9jdHgu cHJldl92YSk7DQo+ID4gKwlrZnJlZShvcF9jdHgubmV3X3ZhKTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcHZyX3ZtX3VubWFwKCkg LSBVbm1hcCBhbiBhbHJlYWR5IG1hcHBlZCBzZWN0aW9uIG9mIGRldmljZS12aXJ0dWFsIG1lbW9y eS4NCj4gPiArICogQHZtX2N0eDogVGFyZ2V0IFZNIGNvbnRleHQuDQo+ID4gKyAqIEBkZXZpY2Vf YWRkcjogVmlydHVhbCBkZXZpY2UgYWRkcmVzcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHRhcmdldCBt YXBwaW5nLg0KPiA+ICsgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgdGFyZ2V0IG1hcHBpbmcuDQo+ID4g KyAqDQo+ID4gKyAqIFJldHVybjoNCj4gPiArICogICogMCBvbiBzdWNjZXNzLA0KPiA+ICsgKiAg KiAtJUVJTlZBTCBpZiBAZGV2aWNlX2FkZHIgaXMgbm90IGEgdmFsaWQgcGFnZS1hbGlnbmVkIGRl dmljZS12aXJ0dWFsDQo+ID4gKyAqICAgIGFkZHJlc3MsDQo+ID4gKyAqICAqIEFueSBlcnJvciBl bmNvdW50ZXJlZCB3aGlsZSBwZXJmb3JtaW5nIGludGVybmFsIG9wZXJhdGlvbnMgcmVxdWlyZWQg dG8NCj4gPiArICogICAgZGVzdHJveSB0aGUgbWFwcGluZyAocmV0dXJuZWQgZnJvbSBwdnJfdm1f Z3B1dmFfdW5tYXAgb3INCj4gPiArICogICAgcHZyX3ZtX2dwdXZhX3JlbWFwKS4NCj4gPiArICov DQo+ID4gK2ludA0KPiA+ICtwdnJfdm1fdW5tYXAoc3RydWN0IHB2cl92bV9jb250ZXh0ICp2bV9j dHgsIHU2NCBkZXZpY2VfYWRkciwgdTY0IHNpemUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBwdnJf dm1fZ3B1dmFfb3BfY3R4IG9wX2N0eCA9IHsgLnZtX2N0eCA9IHZtX2N0eCB9Ow0KPiA+ICsJaW50 IGVycjsNCj4gPiArDQo+ID4gKwlpZiAoIXB2cl9kZXZpY2VfYWRkcl9hbmRfc2l6ZV9hcmVfdmFs aWQoZGV2aWNlX2FkZHIsIHNpemUpKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4g PiArCW9wX2N0eC5wcmV2X3ZhID0ga3phbGxvYyhzaXplb2YoKm9wX2N0eC5wcmV2X3ZhKSwgR0ZQ X0tFUk5FTCk7DQo+ID4gKwlvcF9jdHgubmV4dF92YSA9IGt6YWxsb2Moc2l6ZW9mKCpvcF9jdHgu bmV4dF92YSksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFvcF9jdHgucHJldl92YSB8fCAhb3Bf Y3R4Lm5leHRfdmEpIHsNCj4gPiArCQllcnIgPSAtRU5PTUVNOw0KPiA+ICsJCWdvdG8gb3V0Ow0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCW9wX2N0eC5tbXVfb3BfY3R4ID0NCj4gPiArCQlwdnJfbW11 X29wX2NvbnRleHRfY3JlYXRlKHZtX2N0eC0+bW11X2N0eCwgTlVMTCwgMCwgMCk7DQo+ID4gKwll cnIgPSBQVFJfRVJSX09SX1pFUk8ob3BfY3R4Lm1tdV9vcF9jdHgpOw0KPiA+ICsJaWYgKGVycikg ew0KPiA+ICsJCW9wX2N0eC5tbXVfb3BfY3R4ID0gTlVMTDsNCj4gPiArCQlnb3RvIG91dDsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwltdXRleF9sb2NrKCZ2bV9jdHgtPmxvY2spOw0KPiA+ICsJZXJy ID0gZHJtX2dwdXZhX3NtX3VubWFwKCZ2bV9jdHgtPmdwdXZhX21nciwgJm9wX2N0eCwgZGV2aWNl X2FkZHIsIHNpemUpOw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZ2bV9jdHgtPmxvY2spOw0KPiA+ICsN Cj4gPiArb3V0Og0KPiA+ICsJcHZyX21tdV9vcF9jb250ZXh0X2Rlc3Ryb3kob3BfY3R4Lm1tdV9v cF9jdHgpOw0KPiA+ICsJa2ZyZWUob3BfY3R4Lm5leHRfdmEpOw0KPiA+ICsJa2ZyZWUob3BfY3R4 LnByZXZfdmEpOw0KPiA+ICsNCj4gPiArCXJldHVybiBlcnI7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qDQo+ID4gKyAqIFN0YXRpYyBkYXRhIGFyZWFzIGFyZSBkZXRlcm1pbmVkIGJ5IGZpcm13YXJl Lg0KPiA+ICsgKg0KPiA+ICsgKiBXaGVuIGFkZGluZyBhIG5ldyBzdGF0aWMgZGF0YSBhcmVhIHlv dSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIHJlc2VydmVkX3NpemUgZmllbGQgZm9yIHRo ZQ0KPiA+ICsgKiBoZWFwIGluIHB2cl9oZWFwc1tdLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fcHZyX3N0YXRpY19kYXRhX2FyZWEgc3RhdGljX2RhdGFfYXJlYXNbXSA9 IHsNCj4gPiArCXsNCj4gPiArCQkuYXJlYV91c2FnZSA9IERSTV9QVlJfU1RBVElDX0RBVEFfQVJF QV9GRU5DRSwNCj4gPiArCQkubG9jYXRpb25faGVhcF9pZCA9IERSTV9QVlJfSEVBUF9HRU5FUkFM LA0KPiA+ICsJCS5vZmZzZXQgPSAwLA0KPiA+ICsJCS5zaXplID0gMTI4LA0KPiA+ICsJfSwNCj4g PiArCXsNCj4gPiArCQkuYXJlYV91c2FnZSA9IERSTV9QVlJfU1RBVElDX0RBVEFfQVJFQV9ZVVZf Q1NDLA0KPiA+ICsJCS5sb2NhdGlvbl9oZWFwX2lkID0gRFJNX1BWUl9IRUFQX0dFTkVSQUwsDQo+ ID4gKwkJLm9mZnNldCA9IDEyOCwNCj4gPiArCQkuc2l6ZSA9IDEwMjQsDQo+ID4gKwl9LA0KPiA+ ICsJew0KPiA+ICsJCS5hcmVhX3VzYWdlID0gRFJNX1BWUl9TVEFUSUNfREFUQV9BUkVBX1ZETV9T WU5DLA0KPiA+ICsJCS5sb2NhdGlvbl9oZWFwX2lkID0gRFJNX1BWUl9IRUFQX1BEU19DT0RFX0RB VEEsDQo+ID4gKwkJLm9mZnNldCA9IDAsDQo+ID4gKwkJLnNpemUgPSAxMjgsDQo+ID4gKwl9LA0K PiA+ICsJew0KPiA+ICsJCS5hcmVhX3VzYWdlID0gRFJNX1BWUl9TVEFUSUNfREFUQV9BUkVBX0VP VCwNCj4gPiArCQkubG9jYXRpb25faGVhcF9pZCA9IERSTV9QVlJfSEVBUF9QRFNfQ09ERV9EQVRB LA0KPiA+ICsJCS5vZmZzZXQgPSAxMjgsDQo+ID4gKwkJLnNpemUgPSAxMjgsDQo+ID4gKwl9LA0K PiA+ICsJew0KPiA+ICsJCS5hcmVhX3VzYWdlID0gRFJNX1BWUl9TVEFUSUNfREFUQV9BUkVBX1ZE TV9TWU5DLA0KPiA+ICsJCS5sb2NhdGlvbl9oZWFwX2lkID0gRFJNX1BWUl9IRUFQX1VTQ19DT0RF LA0KPiA+ICsJCS5vZmZzZXQgPSAwLA0KPiA+ICsJCS5zaXplID0gMTI4LA0KPiA+ICsJfSwNCj4g PiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgR0VUX1JFU0VSVkVEX1NJWkUobGFzdF9vZmZzZXQs IGxhc3Rfc2l6ZSkgcm91bmRfdXAoKGxhc3Rfb2Zmc2V0KSArIChsYXN0X3NpemUpLCBQQUdFX1NJ WkUpDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBUaGUgdmFsdWVzIGdpdmVuIHRvIEdFVF9SRVNF UlZFRF9TSVpFKCkgYXJlIHRha2VuIGZyb20gdGhlIGxhc3QgZW50cnkgaW4gdGhlIGNvcnJlc3Bv bmRpbmcNCj4gPiArICogc3RhdGljIGRhdGEgYXJlYSBmb3IgZWFjaCBoZWFwLg0KPiA+ICsgKi8N Cj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHZyX2hlYXAgcHZyX2hlYXBzW10gPSB7DQo+ ID4gKwlbRFJNX1BWUl9IRUFQX0dFTkVSQUxdID0gew0KPiA+ICsJCS5iYXNlID0gUk9HVUVfR0VO RVJBTF9IRUFQX0JBU0UsDQo+ID4gKwkJLnNpemUgPSBST0dVRV9HRU5FUkFMX0hFQVBfU0laRSwN Cj4gPiArCQkuZmxhZ3MgPSAwLA0KPiA+ICsJCS5wYWdlX3NpemVfbG9nMiA9IFBWUl9ERVZJQ0Vf UEFHRV9TSElGVCwNCj4gPiArCX0sDQo+ID4gKwlbRFJNX1BWUl9IRUFQX1BEU19DT0RFX0RBVEFd ID0gew0KPiA+ICsJCS5iYXNlID0gUk9HVUVfUERTQ09ERURBVEFfSEVBUF9CQVNFLA0KPiA+ICsJ CS5zaXplID0gUk9HVUVfUERTQ09ERURBVEFfSEVBUF9TSVpFLA0KPiA+ICsJCS5mbGFncyA9IDAs DQo+ID4gKwkJLnBhZ2Vfc2l6ZV9sb2cyID0gUFZSX0RFVklDRV9QQUdFX1NISUZULA0KPiA+ICsJ fSwNCj4gPiArCVtEUk1fUFZSX0hFQVBfVVNDX0NPREVdID0gew0KPiA+ICsJCS5iYXNlID0gUk9H VUVfVVNDQ09ERV9IRUFQX0JBU0UsDQo+ID4gKwkJLnNpemUgPSBST0dVRV9VU0NDT0RFX0hFQVBf U0laRSwNCj4gPiArCQkuZmxhZ3MgPSAwLA0KPiA+ICsJCS5wYWdlX3NpemVfbG9nMiA9IFBWUl9E RVZJQ0VfUEFHRV9TSElGVCwNCj4gPiArCX0sDQo+ID4gKwlbRFJNX1BWUl9IRUFQX1JHTkhEUl0g PSB7DQo+ID4gKwkJLmJhc2UgPSBST0dVRV9SR05IRFJfSEVBUF9CQVNFLA0KPiA+ICsJCS5zaXpl ID0gUk9HVUVfUkdOSERSX0hFQVBfU0laRSwNCj4gPiArCQkuZmxhZ3MgPSAwLA0KPiA+ICsJCS5w YWdlX3NpemVfbG9nMiA9IFBWUl9ERVZJQ0VfUEFHRV9TSElGVCwNCj4gPiArCX0sDQo+ID4gKwlb RFJNX1BWUl9IRUFQX1ZJU19URVNUXSA9IHsNCj4gPiArCQkuYmFzZSA9IFJPR1VFX1ZJU1RFU1Rf SEVBUF9CQVNFLA0KPiA+ICsJCS5zaXplID0gUk9HVUVfVklTVEVTVF9IRUFQX1NJWkUsDQo+ID4g KwkJLmZsYWdzID0gMCwNCj4gPiArCQkucGFnZV9zaXplX2xvZzIgPSBQVlJfREVWSUNFX1BBR0Vf U0hJRlQsDQo+ID4gKwl9LA0KPiA+ICsJW0RSTV9QVlJfSEVBUF9UUkFOU0ZFUl9GUkFHXSA9IHsN Cj4gPiArCQkuYmFzZSA9IFJPR1VFX1RSQU5TRkVSX0ZSQUdfSEVBUF9CQVNFLA0KPiA+ICsJCS5z aXplID0gUk9HVUVfVFJBTlNGRVJfRlJBR19IRUFQX1NJWkUsDQo+ID4gKwkJLmZsYWdzID0gMCwN Cj4gPiArCQkucGFnZV9zaXplX2xvZzIgPSBQVlJfREVWSUNFX1BBR0VfU0hJRlQsDQo+ID4gKwl9 LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAraW50DQo+ID4gK3B2cl9zdGF0aWNfZGF0YV9hcmVhc19n ZXQoY29uc3Qgc3RydWN0IHB2cl9kZXZpY2UgKnB2cl9kZXYsDQo+ID4gKwkJCSAgc3RydWN0IGRy bV9wdnJfaW9jdGxfZGV2X3F1ZXJ5X2FyZ3MgKmFyZ3MpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBk cm1fcHZyX2Rldl9xdWVyeV9zdGF0aWNfZGF0YV9hcmVhcyBxdWVyeSA9IHswfTsNCj4gPiArCWlu dCBlcnI7DQo+ID4gKw0KPiA+ICsJaWYgKCFhcmdzLT5wb2ludGVyKSB7DQo+ID4gKwkJYXJncy0+ c2l6ZSA9IHNpemVvZihzdHJ1Y3QgZHJtX3B2cl9kZXZfcXVlcnlfc3RhdGljX2RhdGFfYXJlYXMp Ow0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWVyciA9IFBWUl9VT0JK X0dFVChxdWVyeSwgYXJncy0+c2l6ZSwgYXJncy0+cG9pbnRlcik7DQo+ID4gKwlpZiAoZXJyIDwg MCkNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsNCj4gPiArCWlmICghcXVlcnkuc3RhdGljX2Rh dGFfYXJlYXMuYXJyYXkpIHsNCj4gPiArCQlxdWVyeS5zdGF0aWNfZGF0YV9hcmVhcy5jb3VudCA9 IEFSUkFZX1NJWkUoc3RhdGljX2RhdGFfYXJlYXMpOw0KPiA+ICsJCXF1ZXJ5LnN0YXRpY19kYXRh X2FyZWFzLnN0cmlkZSA9IHNpemVvZihzdHJ1Y3QgZHJtX3B2cl9zdGF0aWNfZGF0YV9hcmVhKTsN Cj4gPiArCQlnb3RvIGNvcHlfb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChxdWVyeS5z dGF0aWNfZGF0YV9hcmVhcy5jb3VudCA+IEFSUkFZX1NJWkUoc3RhdGljX2RhdGFfYXJlYXMpKQ0K PiA+ICsJCXF1ZXJ5LnN0YXRpY19kYXRhX2FyZWFzLmNvdW50ID0gQVJSQVlfU0laRShzdGF0aWNf ZGF0YV9hcmVhcyk7DQo+ID4gKw0KPiA+ICsJZXJyID0gUFZSX1VPQkpfU0VUX0FSUkFZKCZxdWVy eS5zdGF0aWNfZGF0YV9hcmVhcywgc3RhdGljX2RhdGFfYXJlYXMpOw0KPiA+ICsJaWYgKGVyciA8 IDApDQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gK2NvcHlfb3V0Og0KPiA+ICsJZXJy ID0gUFZSX1VPQkpfU0VUKGFyZ3MtPnBvaW50ZXIsIGFyZ3MtPnNpemUsIHF1ZXJ5KTsNCj4gPiAr CWlmIChlcnIgPCAwKQ0KPiA+ICsJCXJldHVybiBlcnI7DQo+ID4gKw0KPiA+ICsJYXJncy0+c2l6 ZSA9IHNpemVvZihxdWVyeSk7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr aW50DQo+ID4gK3B2cl9oZWFwX2luZm9fZ2V0KGNvbnN0IHN0cnVjdCBwdnJfZGV2aWNlICpwdnJf ZGV2LA0KPiA+ICsJCSAgc3RydWN0IGRybV9wdnJfaW9jdGxfZGV2X3F1ZXJ5X2FyZ3MgKmFyZ3Mp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBkcm1fcHZyX2Rldl9xdWVyeV9oZWFwX2luZm8gcXVlcnkg PSB7MH07DQo+ID4gKwl1NjQgZGVzdDsNCj4gPiArCWludCBlcnI7DQo+ID4gKw0KPiA+ICsJaWYg KCFhcmdzLT5wb2ludGVyKSB7DQo+ID4gKwkJYXJncy0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgZHJt X3B2cl9kZXZfcXVlcnlfaGVhcF9pbmZvKTsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwllcnIgPSBQVlJfVU9CSl9HRVQocXVlcnksIGFyZ3MtPnNpemUsIGFyZ3MtPnBv aW50ZXIpOw0KPiA+ICsJaWYgKGVyciA8IDApDQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArDQo+ ID4gKwlpZiAoIXF1ZXJ5LmhlYXBzLmFycmF5KSB7DQo+ID4gKwkJcXVlcnkuaGVhcHMuY291bnQg PSBBUlJBWV9TSVpFKHB2cl9oZWFwcyk7DQo+ID4gKwkJcXVlcnkuaGVhcHMuc3RyaWRlID0gc2l6 ZW9mKHN0cnVjdCBkcm1fcHZyX2hlYXApOw0KPiA+ICsJCWdvdG8gY29weV9vdXQ7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJaWYgKHF1ZXJ5LmhlYXBzLmNvdW50ID4gQVJSQVlfU0laRShwdnJfaGVh cHMpKQ0KPiA+ICsJCXF1ZXJ5LmhlYXBzLmNvdW50ID0gQVJSQVlfU0laRShwdnJfaGVhcHMpOw0K PiA+ICsNCj4gPiArCS8qIFJlZ2lvbiBoZWFkZXIgaGVhcCBpcyBvbmx5IHByZXNlbnQgaWYgQlJO NjMxNDIgaXMgcHJlc2VudC4gKi8NCj4gPiArCWRlc3QgPSBxdWVyeS5oZWFwcy5hcnJheTsNCj4g PiArCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVlcnkuaGVhcHMuY291bnQ7IGkrKykgew0KPiA+ ICsJCXN0cnVjdCBkcm1fcHZyX2hlYXAgaGVhcCA9IHB2cl9oZWFwc1tpXTsNCj4gPiArDQo+ID4g KwkJaWYgKGkgPT0gRFJNX1BWUl9IRUFQX1JHTkhEUiAmJiAhUFZSX0hBU19RVUlSSyhwdnJfZGV2 LCA2MzE0MikpDQo+ID4gKwkJCWhlYXAuc2l6ZSA9IDA7DQo+ID4gKw0KPiA+ICsJCWVyciA9IFBW Ul9VT0JKX1NFVChkZXN0LCBxdWVyeS5oZWFwcy5zdHJpZGUsIGhlYXApOw0KPiA+ICsJCWlmIChl cnIgPCAwKQ0KPiA+ICsJCQlyZXR1cm4gZXJyOw0KPiA+ICsNCj4gPiArCQlkZXN0ICs9IHF1ZXJ5 LmhlYXBzLnN0cmlkZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gK2NvcHlfb3V0Og0KPiA+ICsJZXJy ID0gUFZSX1VPQkpfU0VUKGFyZ3MtPnBvaW50ZXIsIGFyZ3MtPnNpemUsIHF1ZXJ5KTsNCj4gPiAr CWlmIChlcnIgPCAwKQ0KPiA+ICsJCXJldHVybiBlcnI7DQo+ID4gKw0KPiA+ICsJYXJncy0+c2l6 ZSA9IHNpemVvZihxdWVyeSk7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAqIHB2cl9oZWFwX2NvbnRhaW5zX3JhbmdlKCkgLSBEZXRlcm1pbmUgaWYgYSBn aXZlbiBoZWFwIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQNCj4gPiArICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRldmljZS12aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuDQo+ID4gKyAqIEBwdnJf aGVhcDogVGFyZ2V0IGhlYXAuDQo+ID4gKyAqIEBzdGFydDogSW5jbHVzaXZlIHN0YXJ0IG9mIHRo ZSB0YXJnZXQgcmFuZ2UuDQo+ID4gKyAqIEBlbmQ6IEluY2x1c2l2ZSBlbmQgb2YgdGhlIHRhcmdl dCByYW5nZS4NCj4gPiArICoNCj4gPiArICogSXQgaXMgYW4gZXJyb3IgdG8gY2FsbCB0aGlzIGZ1 bmN0aW9uIHdpdGggdmFsdWVzIG9mIEBzdGFydCBhbmQgQGVuZCB0aGF0IGRvDQo+ID4gKyAqIG5v dCBzYXRpc2Z5IHRoZSBjb25kaXRpb24gQHN0YXJ0IDw9IEBlbmQuDQo+ID4gKyAqLw0KPiA+ICtz dGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wNCj4gPiArcHZyX2hlYXBfY29udGFpbnNfcmFuZ2Uo Y29uc3Qgc3RydWN0IGRybV9wdnJfaGVhcCAqcHZyX2hlYXAsIHU2NCBzdGFydCwgdTY0IGVuZCkN Cj4gPiArew0KPiA+ICsJcmV0dXJuIHB2cl9oZWFwLT5iYXNlIDw9IHN0YXJ0ICYmIGVuZCA8IHB2 cl9oZWFwLT5iYXNlICsgcHZyX2hlYXAtPnNpemU7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiBwdnJfZmluZF9oZWFwX2NvbnRhaW5pbmcoKSAtIEZpbmQgYSBoZWFwIHdoaWNoIGNv bnRhaW5zIHRoZSBzcGVjaWZpZWQNCj4gPiArICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXZpY2UtdmlydHVhbCBhZGRyZXNzIHJhbmdlLg0KPiA+ICsgKiBAcHZyX2RldjogVGFyZ2V0 IFBvd2VyVlIgZGV2aWNlLg0KPiA+ICsgKiBAc3RhcnQ6IFN0YXJ0IG9mIHRoZSB0YXJnZXQgcmFu Z2UuDQo+ID4gKyAqIEBzaXplOiBTaXplIG9mIHRoZSB0YXJnZXQgcmFuZ2UuDQo+ID4gKyAqDQo+ ID4gKyAqIFJldHVybjoNCj4gPiArICogICogQSBwb2ludGVyIHRvIGEgY29uc3RhbnQgaW5zdGFu Y2Ugb2Ygc3RydWN0IGRybV9wdnJfaGVhcCByZXByZXNlbnRpbmcgdGhlDQo+ID4gKyAqICAgIGhl YXAgY29udGFpbmluZyB0aGUgZW50aXJlIHJhbmdlIHNwZWNpZmllZCBieSBAc3RhcnQgYW5kIEBz aXplIG9uDQo+ID4gKyAqICAgIHN1Y2Nlc3MsIG9yDQo+ID4gKyAqICAqICVOVUxMIGlmIG5vIHN1 Y2ggaGVhcCBleGlzdHMuDQo+ID4gKyAqLw0KPiA+ICtjb25zdCBzdHJ1Y3QgZHJtX3B2cl9oZWFw ICoNCj4gPiArcHZyX2ZpbmRfaGVhcF9jb250YWluaW5nKHN0cnVjdCBwdnJfZGV2aWNlICpwdnJf ZGV2LCB1NjQgc3RhcnQsIHU2NCBzaXplKQ0KPiA+ICt7DQo+ID4gKwl1NjQgZW5kOw0KPiA+ICsN Cj4gPiArCWlmIChjaGVja19hZGRfb3ZlcmZsb3coc3RhcnQsIHNpemUgLSAxLCAmZW5kKSkNCj4g PiArCQlyZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogVGhlcmUgYXJlIG5v IGd1YXJhbnRlZXMgYWJvdXQgdGhlIG9yZGVyIG9mIGFkZHJlc3MgcmFuZ2VzIGluDQo+ID4gKwkg KiAmcHZyX2hlYXBzLCBzbyBpdGVyYXRlIG92ZXIgdGhlIGVudGlyZSBhcnJheSBmb3IgYSBoZWFw IHdob3NlDQo+ID4gKwkgKiByYW5nZSBjb21wbGV0ZWx5IGVuY29tcGFzc2VzIHRoZSBnaXZlbiBy YW5nZS4NCj4gPiArCSAqLw0KPiA+ICsJZm9yICh1MzIgaGVhcF9pZCA9IDA7IGhlYXBfaWQgPCBB UlJBWV9TSVpFKHB2cl9oZWFwcyk7IGhlYXBfaWQrKykgew0KPiA+ICsJCS8qIEZpbHRlciBoZWFw cyB0aGF0IHByZXNlbnQgb25seSB3aXRoIGFuIGFzc29jaWF0ZWQgcXVpcmsgKi8NCj4gPiArCQlp ZiAoaGVhcF9pZCA9PSBEUk1fUFZSX0hFQVBfUkdOSERSICYmDQo+ID4gKwkJICAgICFQVlJfSEFT X1FVSVJLKHB2cl9kZXYsIDYzMTQyKSkgew0KPiA+ICsJCQljb250aW51ZTsNCj4gPiArCQl9DQo+ ID4gKw0KPiA+ICsJCWlmIChwdnJfaGVhcF9jb250YWluc19yYW5nZSgmcHZyX2hlYXBzW2hlYXBf aWRdLCBzdGFydCwgZW5kKSkNCj4gPiArCQkJcmV0dXJuICZwdnJfaGVhcHNbaGVhcF9pZF07DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiBwdnJfdm1fZmluZF9nZW1fb2JqZWN0KCkgLSBMb29rIHVwIGEgYnVmZmVyIG9i amVjdCBmcm9tIGEgZ2l2ZW4NCj4gPiArICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2 aWNlLXZpcnR1YWwgYWRkcmVzcy4NCj4gPiArICogQHZtX2N0eDogW0lOXSBUYXJnZXQgVk0gY29u dGV4dC4NCj4gPiArICogQGRldmljZV9hZGRyOiBbSU5dIFZpcnR1YWwgZGV2aWNlIGFkZHJlc3Mg YXQgdGhlIHN0YXJ0IG9mIHRoZSByZXF1aXJlZA0KPiA+ICsgKiAgICAgICAgICAgICAgIG9iamVj dC4NCj4gPiArICogQG1hcHBlZF9vZmZzZXRfb3V0OiBbT1VUXSBQb2ludGVyIHRvIGxvY2F0aW9u IHRvIHdyaXRlIG9mZnNldCBvZiB0aGUgc3RhcnQNCj4gPiArICogICAgICAgICAgICAgICAgICAg ICBvZiB0aGUgbWFwcGVkIHJlZ2lvbiB3aXRoaW4gdGhlIGJ1ZmZlciBvYmplY3QuIE1heSBiZQ0K PiA+ICsgKiAgICAgICAgICAgICAgICAgICAgICVOVUxMIGlmIHRoaXMgaW5mb3JtYXRpb24gaXMg bm90IHJlcXVpcmVkLg0KPiA+ICsgKiBAbWFwcGVkX3NpemVfb3V0OiBbT1VUXSBQb2ludGVyIHRv IGxvY2F0aW9uIHRvIHdyaXRlIHNpemUgb2YgdGhlIG1hcHBlZA0KPiA+ICsgKiAgICAgICAgICAg ICAgICAgICByZWdpb24uIE1heSBiZSAlTlVMTCBpZiB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBy ZXF1aXJlZC4NCj4gPiArICoNCj4gPiArICogSWYgc3VjY2Vzc2Z1bCwgYSByZWZlcmVuY2Ugd2ls bCBiZSB0YWtlbiBvbiB0aGUgYnVmZmVyIG9iamVjdC4gVGhlIGNhbGxlcg0KPiA+ICsgKiBtdXN0 IGRyb3AgdGhlIHJlZmVyZW5jZSB3aXRoIHB2cl9nZW1fb2JqZWN0X3B1dCgpLg0KPiA+ICsgKg0K PiA+ICsgKiBSZXR1cm46DQo+ID4gKyAqICAqIFRoZSBQb3dlclZSIGJ1ZmZlciBvYmplY3QgbWFw cGVkIGF0IEBkZXZpY2VfYWRkciBpZiBvbmUgZXhpc3RzLCBvcg0KPiA+ICsgKiAgKiAlTlVMTCBv dGhlcndpc2UuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcHZyX2dlbV9vYmplY3QgKg0KPiA+ICtw dnJfdm1fZmluZF9nZW1fb2JqZWN0KHN0cnVjdCBwdnJfdm1fY29udGV4dCAqdm1fY3R4LCB1NjQg ZGV2aWNlX2FkZHIsDQo+ID4gKwkJICAgICAgIHU2NCAqbWFwcGVkX29mZnNldF9vdXQsIHU2NCAq bWFwcGVkX3NpemVfb3V0KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcHZyX2dlbV9vYmplY3QgKnB2 cl9vYmo7DQo+ID4gKwlzdHJ1Y3QgZHJtX2dwdXZhICp2YTsNCj4gPiArDQo+ID4gKwltdXRleF9s b2NrKCZ2bV9jdHgtPmxvY2spOw0KPiA+ICsNCj4gPiArCXZhID0gZHJtX2dwdXZhX2ZpbmRfZmly c3QoJnZtX2N0eC0+Z3B1dmFfbWdyLCBkZXZpY2VfYWRkciwgMSk7DQo+ID4gKwlpZiAoIXZhKQ0K PiA+ICsJCWdvdG8gZXJyX3VubG9jazsNCj4gPiArDQo+ID4gKwlwdnJfb2JqID0gZ2VtX3RvX3B2 cl9nZW0odmEtPmdlbS5vYmopOw0KPiA+ICsJcHZyX2dlbV9vYmplY3RfZ2V0KHB2cl9vYmopOw0K PiA+ICsNCj4gPiArCWlmIChtYXBwZWRfb2Zmc2V0X291dCkNCj4gPiArCQkqbWFwcGVkX29mZnNl dF9vdXQgPSB2YS0+Z2VtLm9mZnNldDsNCj4gPiArCWlmIChtYXBwZWRfc2l6ZV9vdXQpDQo+ID4g KwkJKm1hcHBlZF9zaXplX291dCA9IHZhLT52YS5yYW5nZTsNCj4gPiArDQo+ID4gKwltdXRleF91 bmxvY2soJnZtX2N0eC0+bG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHB2cl9vYmo7DQo+ID4g Kw0KPiA+ICtlcnJfdW5sb2NrOg0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZ2bV9jdHgtPmxvY2spOw0K PiA+ICsNCj4gPiArCXJldHVybiBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogcHZyX3ZtX2dldF9md19tZW1fY29udGV4dDogR2V0IG9iamVjdCByZXByZXNlbnRpbmcgZmly bXdhcmUgbWVtb3J5IGNvbnRleHQNCj4gPiArICogQHZtX2N0eDogVGFyZ2V0IFZNIGNvbnRleHQu DQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybnM6DQo+ID4gKyAqICAqIEZXIG9iamVjdCByZXByZXNl bnRpbmcgZmlybXdhcmUgbWVtb3J5IGNvbnRleHQsIG9yDQo+ID4gKyAqICAqICVOVUxMIGlmIHRo aXMgVk0gY29udGV4dCBkb2VzIG5vdCBoYXZlIGEgZmlybXdhcmUgbWVtb3J5IGNvbnRleHQuDQo+ ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcHZyX2Z3X29iamVjdCAqDQo+ID4gK3B2cl92bV9nZXRfZndf bWVtX2NvbnRleHQoc3RydWN0IHB2cl92bV9jb250ZXh0ICp2bV9jdHgpDQo+ID4gK3sNCj4gPiAr CXJldHVybiB2bV9jdHgtPmZ3X21lbV9jdHhfb2JqOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pbWFnaW5hdGlvbi9wdnJfdm0uaCBiL2RyaXZlcnMvZ3B1L2RybS9p bWFnaW5hdGlvbi9wdnJfdm0uaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgg MDAwMDAwMDAwMDAwLi5iOThiYzM5ODE4MDcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2ltYWdpbmF0aW9uL3B2cl92bS5oDQo+ID4gQEAgLTAsMCArMSw2MCBA QA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8NCj4g PiArLyogQ29weXJpZ2h0IChjKSAyMDIzIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBMdGQuICov DQo+ID4gKw0KPiA+ICsjaWZuZGVmIFBWUl9WTV9IDQo+ID4gKyNkZWZpbmUgUFZSX1ZNX0gNCj4g PiArDQo+ID4gKyNpbmNsdWRlICJwdnJfcm9ndWVfbW11X2RlZnMuaCINCj4gPiArDQo+ID4gKyNp bmNsdWRlIDx1YXBpL2RybS9wdnJfZHJtLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgv dHlwZXMuaD4NCj4gPiArDQo+ID4gKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gZnJvbSAicHZyX2Rl dmljZS5oIiAqLw0KPiA+ICtzdHJ1Y3QgcHZyX2RldmljZTsNCj4gPiArc3RydWN0IHB2cl9maWxl Ow0KPiA+ICsNCj4gPiArLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBmcm9tICJwdnJfZ2VtLmgiICov DQo+ID4gK3N0cnVjdCBwdnJfZ2VtX29iamVjdDsNCj4gPiArDQo+ID4gKy8qIEZvcndhcmQgZGVj bGFyYXRpb24gZnJvbSAicHZyX3ZtLmMiICovDQo+ID4gK3N0cnVjdCBwdnJfdm1fY29udGV4dDsN Cj4gPiArDQo+ID4gKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gZnJvbSA8dWFwaS9kcm0vcHZyX2Ry bS5oPiAqLw0KPiA+ICtzdHJ1Y3QgZHJtX3B2cl9pb2N0bF9nZXRfaGVhcF9pbmZvX2FyZ3M7DQo+ ID4gKw0KPiA+ICsvKiBGdW5jdGlvbnMgZGVmaW5lZCBpbiBwdnJfdm0uYyAqLw0KPiA+ICsNCj4g PiArYm9vbCBwdnJfZGV2aWNlX2FkZHJfaXNfdmFsaWQodTY0IGRldmljZV9hZGRyKTsNCj4gPiAr Ym9vbCBwdnJfZGV2aWNlX2FkZHJfYW5kX3NpemVfYXJlX3ZhbGlkKHU2NCBkZXZpY2VfYWRkciwg dTY0IHNpemUpOw0KPiA+ICsNCj4gPiArc3RydWN0IHB2cl92bV9jb250ZXh0ICpwdnJfdm1fY3Jl YXRlX2NvbnRleHQoc3RydWN0IHB2cl9kZXZpY2UgKnB2cl9kZXYsDQo+ID4gKwkJCQkJICAgICBi b29sIGlzX3VzZXJzcGFjZV9jb250ZXh0KTsNCj4gPiArDQo+ID4gK2ludCBwdnJfdm1fbWFwKHN0 cnVjdCBwdnJfdm1fY29udGV4dCAqdm1fY3R4LA0KPiA+ICsJICAgICAgIHN0cnVjdCBwdnJfZ2Vt X29iamVjdCAqcHZyX29iaiwgdTY0IHB2cl9vYmpfb2Zmc2V0LA0KPiA+ICsJICAgICAgIHU2NCBk ZXZpY2VfYWRkciwgdTY0IHNpemUpOw0KPiA+ICtpbnQgcHZyX3ZtX3VubWFwKHN0cnVjdCBwdnJf dm1fY29udGV4dCAqdm1fY3R4LCB1NjQgZGV2aWNlX2FkZHIsIHU2NCBzaXplKTsNCj4gPiArDQo+ ID4gK2RtYV9hZGRyX3QgcHZyX3ZtX2dldF9wYWdlX3RhYmxlX3Jvb3RfYWRkcihzdHJ1Y3QgcHZy X3ZtX2NvbnRleHQgKnZtX2N0eCk7DQo+ID4gKw0KPiA+ICtpbnQgcHZyX3N0YXRpY19kYXRhX2Fy ZWFzX2dldChjb25zdCBzdHJ1Y3QgcHZyX2RldmljZSAqcHZyX2RldiwNCj4gPiArCQkJICAgICAg c3RydWN0IGRybV9wdnJfaW9jdGxfZGV2X3F1ZXJ5X2FyZ3MgKmFyZ3MpOw0KPiA+ICtpbnQgcHZy X2hlYXBfaW5mb19nZXQoY29uc3Qgc3RydWN0IHB2cl9kZXZpY2UgKnB2cl9kZXYsDQo+ID4gKwkJ ICAgICAgc3RydWN0IGRybV9wdnJfaW9jdGxfZGV2X3F1ZXJ5X2FyZ3MgKmFyZ3MpOw0KPiA+ICtj b25zdCBzdHJ1Y3QgZHJtX3B2cl9oZWFwICpwdnJfZmluZF9oZWFwX2NvbnRhaW5pbmcoc3RydWN0 IHB2cl9kZXZpY2UgKnB2cl9kZXYsDQo+ID4gKwkJCQkJCSAgICB1NjQgYWRkciwgdTY0IHNpemUp Ow0KPiA+ICsNCj4gPiArc3RydWN0IHB2cl9nZW1fb2JqZWN0ICpwdnJfdm1fZmluZF9nZW1fb2Jq ZWN0KHN0cnVjdCBwdnJfdm1fY29udGV4dCAqdm1fY3R4LA0KPiA+ICsJCQkJCSAgICAgIHU2NCBk ZXZpY2VfYWRkciwNCj4gPiArCQkJCQkgICAgICB1NjQgKm1hcHBlZF9vZmZzZXRfb3V0LA0KPiA+ ICsJCQkJCSAgICAgIHU2NCAqbWFwcGVkX3NpemVfb3V0KTsNCj4gPiArDQo+ID4gK3N0cnVjdCBw dnJfZndfb2JqZWN0ICoNCj4gPiArcHZyX3ZtX2dldF9md19tZW1fY29udGV4dChzdHJ1Y3QgcHZy X3ZtX2NvbnRleHQgKnZtX2N0eCk7DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgcHZyX3ZtX2NvbnRleHQg KnB2cl92bV9jb250ZXh0X2xvb2t1cChzdHJ1Y3QgcHZyX2ZpbGUgKnB2cl9maWxlLCB1MzIgaGFu ZGxlKTsNCj4gPiArYm9vbCBwdnJfdm1fY29udGV4dF9wdXQoc3RydWN0IHB2cl92bV9jb250ZXh0 ICp2bV9jdHgpOw0KPiA+ICt2b2lkIHB2cl9kZXN0cm95X3ZtX2NvbnRleHRzX2Zvcl9maWxlKHN0 cnVjdCBwdnJfZmlsZSAqcHZyX2ZpbGUpOw0KPiA+ICsNCj4gPiArI2VuZGlmIC8qIFBWUl9WTV9I ICovDQo+ID4gLS0gDQo+ID4gMi40MS4wDQo+ID4gDQo=