Received: by 10.223.185.116 with SMTP id b49csp8780696wrg; Fri, 2 Mar 2018 07:52:21 -0800 (PST) X-Google-Smtp-Source: AG47ELvF9GhJR2B8iJkhJD+/2YEXhGT6ADK6yN9iKyANx2VWnC4lfUnbE29h/bIT9fyX+rRk8bq1 X-Received: by 10.98.64.73 with SMTP id n70mr6159388pfa.142.1520005941815; Fri, 02 Mar 2018 07:52:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520005941; cv=none; d=google.com; s=arc-20160816; b=nr0tCxsKIGfGZCcIRsW4I7Ajfk04vMhhkb1ifV58GtT7RaR/eokScESZZxqmI1URN6 9QbO7PyMxxABAoM8gqRWUk08v3O71QO+fgmYoTigYScaW7ZhHdT7Fpl3TSG+DBVhhDXW ZwJpxaDkYdoWAlBNtQzUNOe8uLNYTuVz78IxUH/TBEx0wnQy1WMpdHCHDaf9LsyUSOsf pN5Tu5mTryA2BT34Dfs8mhW2Z4ov2R1dB7GL6ZQmJwuYzDZ8VZ0dHhDp4tZxFu2wfD9z Wj6KRkBuYNddKIpjfmm+t3N2x/3+aMn4RaOdVaQAi4JFVfchYaZ551uhIuibLPqFiIQN S1xw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=egC9XEuItfZbXlmMjHH4NWS3t0Zxpbxv2ecrqE0kfFI=; b=JCJi9sJ8y3S+3ATKAJ4usn3l/GwkXU64JYTATShrrNiVSF4rd925QV3gnYLpGUC1pG f13wibkBVbpu9bqwRGh4n2++WUD5q6GisksK5YpPU8dpdsfLRDSsJOp9JlhO+mMP/s7G EYZ60WjbVnLevCkxlj1blULfaNaIbUC/GnrkITDjWVlpRA/57o4dRIjNj4INMYlbwZQc pCdqHS5RuZrVlP4cZ8Y1UqBL9ItmBspHzCZMqq7fTR/41wV0/N1iyckkLU9U3vZnZ00Q 5PkTrKuXEUFyefEoQi7lRAl6E4mS+Ezg9JrUlEy44qzB2Gfn9dm8NPZlIPFRtu4cdSRm /wfw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=gCftH0W/; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w3-v6si4942869plp.526.2018.03.02.07.52.07; Fri, 02 Mar 2018 07:52:21 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=gCftH0W/; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1426034AbeCBOi6 (ORCPT + 99 others); Fri, 2 Mar 2018 09:38:58 -0500 Received: from mail-he1eur01on0076.outbound.protection.outlook.com ([104.47.0.76]:47111 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1424068AbeCBOiy (ORCPT ); Fri, 2 Mar 2018 09:38:54 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=egC9XEuItfZbXlmMjHH4NWS3t0Zxpbxv2ecrqE0kfFI=; b=gCftH0W/ulD5aebNkPAvYpJQwtk3tXASz5C+BnJEe51GhhM0A5ZpcOffEQE+WcXkgYWLSIUnCbBrLAC1d6XVjr62IBtOUlclzM/pQEMf5qKWO7e/4AGjc7CuENX/x94lh5gY5OH6NIxup3CaPT0/EUek3eDjTr+H/K4fOCi+ZJY= Received: from VI1PR0402MB3917.eurprd04.prod.outlook.com (52.134.17.30) by VI1PR0402MB3645.eurprd04.prod.outlook.com (52.134.14.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.548.13; Fri, 2 Mar 2018 14:38:50 +0000 Received: from VI1PR0402MB3917.eurprd04.prod.outlook.com ([fe80::70cd:1c30:40b2:1bae]) by VI1PR0402MB3917.eurprd04.prod.outlook.com ([fe80::70cd:1c30:40b2:1bae%13]) with mapi id 15.20.0527.023; Fri, 2 Mar 2018 14:38:50 +0000 From: Jun Li To: =?utf-8?B?c2h1ZmFuX2xlZSjmnY7mm7jluIYp?= , ShuFanLee , "heikki.krogerus@linux.intel.com" , "linux@roeck-us.net" , "greg@kroah.com" CC: =?utf-8?B?Y3lfaHVhbmco6buD5ZWf5Y6fKQ==?= , "linux-kernel@vger.kernel.org" , "linux-usb@vger.kernel.org" , dl-linux-imx Subject: RE: [PATCH] staging: typec: handle vendor defined part and modify drp toggling flow Thread-Topic: [PATCH] staging: typec: handle vendor defined part and modify drp toggling flow Thread-Index: AQHTqyUdFvVGBwfZp02pyfGoxbo4UqOwKcjQgAkL0QCAAZ22kIAASrEAgAACPMCAADFkAIABYD/w Date: Fri, 2 Mar 2018 14:38:50 +0000 Message-ID: References: <1519225343-2929-1-git-send-email-leechu729@gmail.com>, <1519789258692.80587@richtek.com> <06ae73ba737e4b5197874080384e178d@ex1.rt.l> <524719c21a4d4c5bb32480ced557d948@ex1.rt.l> In-Reply-To: <524719c21a4d4c5bb32480ced557d948@ex1.rt.l> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=jun.li@nxp.com; x-originating-ip: [185.114.77.231] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;VI1PR0402MB3645;7:wnzEXw/vw1oXJOtZCHrVP1tH1Nfj1E2QypfJ8TC/w5Ao6BEbYrHXhudZPCaijZSkBAgj9miGZ3LnfhB5gnWf5RtqeS/blo5SN/uB6Ro36o4wXL38Zf8+SQRfR/wOg9dh5aFoZ+FxuexeouScRdsFSvDkUhsxD3nA0fzeL8y4G5gAkegTNN/p9Xlh1luWeB8NpEArMPFVzZK7Z6XpZT0hppESrHJOBFjIwiKDhKefOm1ySmwozSIfnzdQr6zfzChG x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 997d4442-a531-47f8-2e00-08d5804b508b x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(3008032)(2017052603307)(7153060)(7193020);SRVR:VI1PR0402MB3645; x-ms-traffictypediagnostic: VI1PR0402MB3645: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(20558992708506)(9452136761055)(189930954265078)(185117386973197)(85827821059158)(45079756050767)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040501)(2401047)(5005006)(8121501046)(3231220)(944501240)(52105095)(93006095)(93001095)(3002001)(10201501046)(6055026)(6041288)(20161123564045)(20161123558120)(20161123560045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011);SRVR:VI1PR0402MB3645;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0402MB3645; x-forefront-prvs: 05991796DF x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(396003)(366004)(39380400002)(39860400002)(346002)(13464003)(199004)(189003)(14454004)(305945005)(966005)(3846002)(6116002)(6246003)(33656002)(478600001)(45080400002)(5250100002)(7696005)(53936002)(2201001)(93886005)(2950100002)(39060400002)(4326008)(105586002)(9686003)(25786009)(55016002)(76176011)(6436002)(6306002)(2501003)(8676002)(106356001)(99286004)(6506007)(53546011)(86362001)(229853002)(66066001)(186003)(2906002)(81156014)(102836004)(316002)(97736004)(26005)(2900100001)(110136005)(54906003)(59450400001)(3660700001)(7736002)(5660300001)(3280700002)(68736007)(8936002)(5890100001)(74316002)(81166006)(19627235001);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0402MB3645;H:VI1PR0402MB3917.eurprd04.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: j4Kf0TvGLZJtuqlYxUToe4DUEMl87tshHfp0iUC6jdS+faRokHVSsfgyBvQzNvua3+7+N182OM6xRp1WJSosRGikrha0FCafiTWCaGHhFBLSKFa5EwMmgxPMiGS5EruA4co1pJLdZoHfJasuf8U4+RxQApvpgW4mhDNxCxMJWrc= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 997d4442-a531-47f8-2e00-08d5804b508b X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Mar 2018 14:38:50.3275 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3645 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogc2h1ZmFuX2xlZSjmnY7m m7jluIYpIFttYWlsdG86c2h1ZmFuX2xlZUByaWNodGVrLmNvbV0NCj4gU2VudDogMjAxOOW5tDPm nIgx5pelIDE5OjU0DQo+IFRvOiBKdW4gTGkgPGp1bi5saUBueHAuY29tPjsgU2h1RmFuTGVlIDxs ZWVjaHU3MjlAZ21haWwuY29tPjsNCj4gaGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbTsg bGludXhAcm9lY2stdXMubmV0OyBncmVnQGtyb2FoLmNvbQ0KPiBDYzogY3lfaHVhbmco6buD5ZWf 5Y6fKSA8Y3lfaHVhbmdAcmljaHRlay5jb20+Ow0KPiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwu b3JnOyBsaW51eC11c2JAdmdlci5rZXJuZWwub3JnOyBkbC1saW51eC1pbXgNCj4gPGxpbnV4LWlt eEBueHAuY29tPg0KPiBTdWJqZWN0OiBSRTogW1BBVENIXSBzdGFnaW5nOiB0eXBlYzogaGFuZGxl IHZlbmRvciBkZWZpbmVkIHBhcnQgYW5kIG1vZGlmeQ0KPiBkcnAgdG9nZ2xpbmcgZmxvdw0KPiAN Cj4gSGkgSnVuLA0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206 IEp1biBMaSBbbWFpbHRvOmp1bi5saUBueHAuY29tXQ0KPiA+IFNlbnQ6IFRodXJzZGF5LCBNYXJj aCAwMSwgMjAxOCA2OjA2IFBNDQo+ID4gVG86IHNodWZhbl9sZWUo5p2O5pu45biGKTsgU2h1RmFu TGVlOyBoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwuY29tOw0KPiA+IGxpbnV4QHJvZWNrLXVz Lm5ldDsgZ3JlZ0Brcm9haC5jb20NCj4gPiBDYzogY3lfaHVhbmco6buD5ZWf5Y6fKTsgbGludXgt a2VybmVsQHZnZXIua2VybmVsLm9yZzsNCj4gPiBsaW51eC11c2JAdmdlci5rZXJuZWwub3JnOyBk bC1saW51eC1pbXgNCj4gPiBTdWJqZWN0OiBSRTogW1BBVENIXSBzdGFnaW5nOiB0eXBlYzogaGFu ZGxlIHZlbmRvciBkZWZpbmVkIHBhcnQgYW5kDQo+ID4gbW9kaWZ5IGRycCB0b2dnbGluZyBmbG93 DQo+ID4NCj4gPiBIaSBTaHVmYW4NCj4gPg0KPiA+IFBsZWFzZSBkb24ndCB0b3AgcG9zdGluZw0K PiA+DQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBzaHVmYW5fbGVl KOadjuabuOW4hikgW21haWx0bzpzaHVmYW5fbGVlQHJpY2h0ZWsuY29tXQ0KPiA+IFNlbnQ6IDIw MTjlubQz5pyIMeaXpSAxNjo0OQ0KPiA+IFRvOiBKdW4gTGkgPGp1bi5saUBueHAuY29tPjsgU2h1 RmFuTGVlIDxsZWVjaHU3MjlAZ21haWwuY29tPjsNCj4gPiBoZWlra2kua3JvZ2VydXNAbGludXgu aW50ZWwuY29tOyBsaW51eEByb2Vjay11cy5uZXQ7IGdyZWdAa3JvYWguY29tDQo+ID4gQ2M6IGN5 X2h1YW5nKOm7g+WVn+WOnykgPGN5X2h1YW5nQHJpY2h0ZWsuY29tPjsNCj4gPiBsaW51eC1rZXJu ZWxAdmdlci5rZXJuZWwub3JnOyBsaW51eC11c2JAdmdlci5rZXJuZWwub3JnOyBkbC1saW51eC1p bXgNCj4gPiA8bGludXgtaW14QG54cC5jb20+DQo+ID4gU3ViamVjdDogUkU6IFtQQVRDSF0gc3Rh Z2luZzogdHlwZWM6IGhhbmRsZSB2ZW5kb3IgZGVmaW5lZCBwYXJ0IGFuZA0KPiA+IG1vZGlmeSBk cnAgdG9nZ2xpbmcgZmxvdw0KPiA+DQo+ID4gSGkgSnVuLA0KPiA+DQo+ID4gICBUaGUgYXR0YWNo bWVudCBpcyB3YXZlZm9ybSBvZiB0aGUgY29uZGl0aW9uIHdlIG1ldCBidXQgSSdtIG5vdCBzdXJl DQo+ID4gd2hldGhlciB5b3UgY2FuIGRvd25sb2FkIHRoZSBhdHRhY2htZW50Lg0KPiA+ICAgSSBh ZGQgbG9nIGluIFJUMTcxMUggaXQgc2hvd3MgYXMgZm9sbG93aW5nOg0KPiA+DQo+ID4gWW91IGRv bid0IG5lZWQgYWRkIGxvZyBieSB5b3VyIG93bi4NCj4gPiBUaGVyZSBpcyB0Y3BtKC4vZHJpdmVy cy91c2IvdHlwZWMvdGNwbS5jKSBsb2cgZm9yIGRlYnVnIGFscmVhZHksIHdoaWNoIGNhbg0KPiBz aG93IGFsbCB0aGUgZXZlbnRzIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucywgeW91IGNhbiBnZXQgaXQg YnkgYmVsb3cgY29tbWFuZA0KPiBhcyBJIGNvbW1lbnRlZDoNCj4gPg0KPiA+IGNhdCAvc3lzL2tl cm5lbC9kZWJ1Zy90Y3BtL3h4eHh4KHlvdXIgdGNwYyBpMmMgZGV2aWNlKQ0KPiA+DQo+IEFmdGVy IGFwcGx5aW5nIHlvdXIgcGF0Y2hbMl0sIFRDUE0gbG9nIGlzIGFzIGZvbGxvd2luZzoNCg0KSSBh c3N1bWUgeW91IGFsc28gYXBwbGllZCBteSBwYXRjaCBbMV0uDQpbMV0gaHR0cHM6Ly93d3cuc3Bp bmljcy5uZXQvbGlzdHMvZGV2aWNldHJlZS9tc2cyMTY4NTEuaHRtbA0KDQo+IA0KPiBbICAgNTMu MDUwNjAyXSBDQzE6IDAgLT4gMiwgQ0MyOiAwIC0+IDAgW3N0YXRlIERSUF9UT0dHTElORywgcG9s YXJpdHkgMCwNCj4gY29ubmVjdGVkXQ0KPiBbICAgNTMuMDUwNjEzXSBzdGF0ZSBjaGFuZ2UgRFJQ X1RPR0dMSU5HIC0+IFNSQ19BVFRBQ0hfV0FJVA0KPiBbICAgNTMuMDUwNjc4XSBwZW5kaW5nIHN0 YXRlIGNoYW5nZSBTUkNfQVRUQUNIX1dBSVQgLT4gU05LX1RSWSBADQo+IDIwMCBtcw0KPiA9PiBS ZCBpcyBwbHVnZ2VkIG91dA0KPiBbICAgNTMuMTc4ODA0XSBDQzE6IDIgLT4gMCwgQ0MyOiAwIC0+ IDAgW3N0YXRlIFNSQ19BVFRBQ0hfV0FJVCwgcG9sYXJpdHkgMCwNCj4gZGlzY29ubmVjdGVkXQ0K PiBbICAgNTMuMTc4ODE1XSBzdGF0ZSBjaGFuZ2UgU1JDX0FUVEFDSF9XQUlUIC0+IFNSQ19VTkFU VEFDSEVEDQo+ID0+IFJkIGlzIHBsdWdnZWQgaW4NCj4gWyAgIDUzLjE3ODg3NF0gU3RhcnQgRFJQ IHRvZ2dsaW5nDQo+IFsgICA1My4xODg0NzJdIENDMTogMCAtPiAwLCBDQzI6IDAgLT4gMCBbc3Rh dGUgRFJQX1RPR0dMSU5HLCBwb2xhcml0eSAwLA0KPiBkaXNjb25uZWN0ZWRdDQoNCjEuIFRoZSBw bHVnIG91dCBhbmQgdGhlbiBwbHVnIGluIGhhcHBlbnMgaW4gMTBtcz8gKDUzLjE4ODQ3MiAtIDUz LjE3ODgwNCkNCldhcyB0aGlzIGRvbmUgbWFudWFsbHk/IE9yIGJ5IHNvbWUgc3BlY2lhbCB0ZXN0 IG1ldGhvZD8NCjIuIFRoaXMgaXMgYWxsIHRjcG0gbG9nIGlmIHlvdSBmaW5hbGx5IGtlZXAgdGhl IFJkLWRldmljZSBjb25uZWN0ZWQgb24gdHlwZWMNCnBvcnQ/IFRoZXJlIGlzIG5vIG1vcmUgdGNw bSBsb2cgYWZ0ZXIgNTMuMTg4NDcyIGlmIHlvdSBwbHVnIGluIFJkLWRldmljZQ0KYW5kIGRvbid0 IHJlbW92ZSBpdD8gDQozLiBJZiB0aGUgYW5zd2VyIG9mIFEyIGlzIHllcywgdGhlbiBJIG11c3Qg YXNrIHdoeSB5b3UgdGNwYyBjaGlwK2ludGVybmFsIGZpcm13YXJlDQpjYW4ndCByZXBvcnQgZnVy dGhlciBjYyBjaGFuZ2UgZXZlbnQgYWZ0ZXIgeW91ciBkcnAgdG9nZ2xpbmcgc3RhcnRzIHRvIHBy ZXNlbnQgUnAoSSBrbm93DQppdCBmaXJzdGx5IHByZXNlbnQgUmQgYWZ0ZXIgeW91IHdyaXRlIHRv IExPT0s0Q09OTkVDVElPTiwgYnV0IHRoZW4gaXQgc2hvdWxkIGNoYW5nZQ0KdG8gcHJlc2VudCBS cCwgc28gaXQgc2hvdWxkIGJlIGFibGUgdG8gZGV0ZWN0IHRoZSBSZC1kZXZpY2UgZmluYWxseSkN Cg0KPiANCj4gSWYgVENQTSBkb2VzIG5vdCBlbnRlciBTUkNfQVRUQUNIRUQgc3RhdGUsIFJDLkRS UCB3aWxsIG5vdCBiZSBjbGVhcmVkLg0KDQpJbiB0aGlzIGNhc2UsIHlvdSBkb27igJl0IG5lZWQg Y2xlYXIgUkMuRFJQLCBzZWUgVENQQ0kgc3BlYzoNCiJGaWd1cmUgNC0xOC4gU2luayBEaXNjb25u ZWN0Ig0KVENQTSBzaW5rIGRvZXNuJ3QgY2xlYXIgaXQgaW4gd2hvbGUgc2VxdWVuY2UsIGp1c3Qg ZGlyZWN0bHkgc2V0IGl0Og0KUmVzdGFydCBEUlAgVG9nZ2xpbmcNClBDLkF1dG9EaXNjaGFyZ2VE aXNjb25uZWN0PTBiDQpTZXQgUkMuRFJQPTFiIChEUlApDQpTZXQgUkMuQ0MxPTEwYiAoUmQpDQpT ZXQgUkMuQ0MyPTEwYiAoUmQpDQpDT01NQU5ELkxvb2s0Q29ubmVjdGlvbiAoRFJQIHRvZ2dsZSkN Cg0KPiBXaGVuIFRDUE0gd3JpdGVzIFJkL1JkIG9yIFJwL1JwIGluIHRoZSBkcnBfdG9nZ2xpbmcg ZnVuY3Rpb24sIGl0IGRvZXMgbm90DQo+IHRha2UgZWZmZWN0IHVudGlsIExPT0s0Q09OTkVDVElP TiBjb21tYW5kIGlzIHNldC4NCj4gVGhlIGFib3ZlIGNvbmRpdGlvbiBjYXVzZXMgUlQxNzExSCBy ZXBvcnRzIG9wZW4vb3BlbiBhdCBbNTMuMTg4NDcyXQ0KPiANCj4gPiBbIDkxNC45MzczNDBdIHR5 cGVjX3J0MTcxMWggMi0wMDRlOiBfX3J0MTcxMWhfaXJxX2hhbmRsZXIgWw0KPiA+IDkxNC45NDM4 MzhdIHR5cGVjX3J0MTcxMWggMi0wMDRlOiBfX3RjcG1fZ2V0X2NjIGNjMSA9IE9wZW4sIGNjMiA9 DQo+IE9wZW4NCj4gPiA9PiBEZXZpY2UoUmQpIGlzIHBsdWdnZWQgb3V0DQo+ID4NCj4gPiBbIDkx NC45NTgwNDFdIHR5cGVjX3J0MTcxMWggMi0wMDRlOiB0Y3BtX3NldF9wZF9yeCAwIFsgOTE0Ljk2 MzAxMV0NCj4gPiB0eXBlY19ydDE3MTFoIDItMDA0ZTogdGNwbV9zZXRfdmJ1cyB2YnVzID0gMCBb IDkxNC45Njg0MDddDQo+ID4gdHlwZWNfcnQxNzExaA0KPiA+IDItMDA0ZTogdGNwbV9zZXRfdmJ1 cyBjaGcgaXMgYWxyZWFkeSAwIFsgOTE0Ljk3NDU0MV0gdHlwZWNfcnQxNzExaA0KPiAyLTAwNGU6 DQo+ID4gdGNwbV9zZXRfdmNvbm4gdmNvbm4gaXMgYWxyZWFkeSAwIFsgOTE0Ljk4MDkyMV0gdHlw ZWNfcnQxNzExaCAyLTAwNGU6DQo+ID4gdGNwbV9zZXRfY3VycmVudF9saW1pdCAwIG1hLCAwIG12 IChub3QgaW1wbGVtZW50ZWQpIFsgOTE0Ljk4ODg5NF0NCj4gPiB0eXBlY19ydDE3MTFoIDItMDA0 ZTogdGNwbV9zZXRfcG9sYXJpdHkgUG9sYXJpdHlfQ0MxIFsgOTE1LjAwMzIwMV0NCj4gPiB0eXBl Y19ydDE3MTFoIDItMDA0ZTogdGNwbV9zZXRfcm9sZXMgU291cmNlIEhvc3QgWyA5MTUuMDA5MjY0 XQ0KPiA+IHR5cGVjX3J0MTcxMWggMi0wMDRlOiB0Y3BtX3N0YXJ0X2RycF90b2dnbGluZyA9PiBz dGF0ZV9tYWNoaW5lX3dvcmsNCj4gb2YNCj4gPiBUQ1BNIGNhbGxzIHN0YXJ0X2RycF90b2dnbGlu ZyBmdW5jdGlvbiBidXQgZG9lcyBub3Qgc2V0DQo+ID4gTE9PSzRDT05ORUNUSU9OIGNvbW1hbmQg eWV0ID0+IChOb3RlMSkgRGV2aWNlKFJkKSBpcyBwbHVnZ2VkIGluDQo+ID4gKFJUMTcxMUgncyBp bnRlcm5hbCBmaXJtd2FyZSBkZXRlY3RzIFJkIHBsdWdnZWQgaW4uIGNjX2NoYW5nZSBpcw0KPiA+ IHRyaWdnZXJlZCBhbmQgaXQgd2lsbCBiZSB2UmQtY29ubmVjdGVkIGF0IHRoaXMgbW9tZW50KSA9 PiBUQ1BNIHdyaXRlcw0KPiA+IExPT0s0Q09OTkVDVElPTiBjb21tYW5kDQo+ID4gLSBCZWNhdXNl IFJDLkRSUCBpcyBzdGlsbCAxLCBSVDE3MTFIIHdpbGwgbm90IHB1bGwgY2MxL2NjMiB0byBSZCB3 aGlsZQ0KPiA+IHdyaXRpbmcgUmQvUmQgdG8gUkMuQ0MxL1JDLkNDMi4NCj4gPiAtIChOb3RlMikg UmlnaHQgYWZ0ZXIgTE9PSzRDT05ORUNUSU9OIGNvbW1hbmQgaXMgd3JpdHRlbiwgUlQxNzExSA0K PiA+IHB1bGxzIENDIHRvIFJkJ3MgbGV2ZWwgKGJlY2F1c2UgUkMuUm9sZSBpcyBSZC9SZCksIHN0 b3AgdG9nZ2xpbmcNCj4gPiAoYmVjYXVzZQ0KPiA+IGRldmljZShSZCkgaXMgYWxyZWFkeSBjb25u ZWN0ZWQpIGFuZCBDQyBzdGF0dXMgd2lsbCBiZSBvcGVuL29wZW4gbm93DQo+ID4gKGJlY2F1c2Ug UlQxNzExSCBwcmVzZW50cyBSZCBhbmQgZGV2aWNlIGlzIGNvbm5lY3RlZChSZCkpDQo+ID4NCj4g PiBbIDkxNS4wMzcyNjNdIHR5cGVjX3J0MTcxMWggMi0wMDRlOiBfX3RjcG1fZ2V0X2NjIGNjMSA9 IE9wZW4sIGNjMiA9DQo+ID4gT3BlbiA9PiBFbnRlciBSVDE3MTFIJ3MgaXJxIGhhbmRsZXIgYW5k IGl0IHJlcG9ydHMgb3Blbi9vcGVuDQo+ID4NCj4gPiBJIHRoaW5rIHRoZSBwb2ludCBpcyB0byB3 cml0ZSBSQy5EUlAgPSAwIGF0IHRoZSBiZWdpbm5pbmcgb2YNCj4gPiBkcnBfdG9nZ2xpbmcgc28g dGhhdCBSVDE3MTFIIHdpbGwgcHVsbCBjYzEvY2MyIHRvIFJkIHdoaWxlIHdyaXRpbmcNCj4gPiBS ZC9SZCB0byBSQy5DQzEvUkMuQ0MyIFRoaXMgb3BlcmF0aW9uIHdpbGwgbWFrZSBSVDE3MTFIJ3Mg aW50ZXJuYWwNCj4gPiBmaXJtd2FyZSByZXN0YXJ0cyBmcm9tIGRpc2Nvbm5lY3RlZCBzdGF0ZSBh bmQgdG9nZ2xlcyBjb3JyZWN0bHkuDQo+ID4NCj4gPiBBY2NvcmRpbmcgdG8gVENQQ0kgc3BlYyAo NC40LjUuMik6DQo+ID4gSXQgaXMgcmVjb21tZW5kZWQgdGhlIFRDUE0gd3JpdGUgUk9MRV9DT05U Uk9MLkRSUD0wIGJlZm9yZSB3cml0aW5nDQo+IHRvDQo+ID4gUE9XRVJfQ09OVFJPTC5BdXRvRGlz Y2hhcmdlRGlzY29ubmVjdCBhbmQgc3RhcnRpbmcgdGhlIERSUCB0b2dnbGluZw0KPiA+IHVzaW5n IENPTU1BTkQuTG9vazRDb25uZWN0aW9uIFJlc3RhcnQgRFJQIFRvZ2dsaW5nID0+IEl0IGlzDQo+ ID4gcmVjb21tZW5kZWQgdGhlIFRDUE0gd3JpdGUgUk9MRV9DT05UUk9MLkRSUD0wIGhlcmUgU2V0 DQo+ID4NCj4gPiBUaGlzIHN0YXRlbWVudCBpc19ub3RfIHJlY29tbWVuZCB5b3UgZG8gdGhpcyhS Qy5EUlA9MCkgZm9yIHN0YXJ0IGRycA0KPiB0b2dnbGluZywgUGxlYXNlIGNhcmVmdWxseSBjaGVj ayB0aGUgd2hvbGUgc2VudGVuY2U6DQo+ID4gIi4uLiBhcyBzaG93biBpbiBGaWd1cmUgNC0xNiwg Ig0KPiA+IElmIHlvdSBsb29rIGF0ICJGaWd1cmUgNC0xNi4gRFJQIEluaXRpYWxpemF0aW9uIGFu ZCBDb25uZWN0aW9uIERldGVjdGlvbiINCj4gPiBJdCBnaXZlcyBjbGVhciBkcnAgdG9nZ2xpbmcg c3RhcnQgb3BlcmF0aW9uczoNCj4gPg0KPiA+IFNldCBUQ1BDIHRvIERSUA0KPiA+IC0gUmVhZCBQ Uy5UQ1BDSW5pdGlhbGl6YXRpb25TdGF0dXMNCj4gPiAtIFdyaXRlIFJPTEVfQ09OVFJPTA0KPiA+ IC0gUkMuRFJQID0gMWINCj4gPiAtIFJDLkNDMj0wMWIgb3IgMTBiDQo+ID4gLSBSQy5DQzE9MDFi IG9yIDEwYg0KPiA+IC0gUkMuQ0MxPVJDLkNDMg0KPiA+IC0gV3JpdGUgQ09NTUFORC5Mb29rNENv bm5lY3Rpb25QUy4NCj4gPg0KPiA+IEFib3ZlIGlzIGFsbCBvcGVyYXRpb25zIHJlcXVpcmVkIHRv IHN0YXJ0IGRycCB0b2dnbGluZy4gWW91IGFsc28gY2FuIHNlZQ0KPiBSQy5DQ3ggPSAwMWIgb3Ig MTBiLCBub3QgZml4ZWQgdG8gYmUgUmQsIHJpZ2h0Pw0KPiBZZXMsIHRoaXMgb25lIHNob3VsZCBi ZSBsaWtlIHlvdXIgcGF0Y2hbMDcvMTJdLiBXcml0ZSBSZCBvciBScCB0byBSQy5DQ3gNCj4gYWNj b3JkaW5nIHRvIHRoZSBjYyBwYXJhbWV0ZXIgb2YgZHJwX3RvZ2dsaW5nIGZ1bmN0aW9uLg0KPiA+ DQo+ID4gR28gb24gdG8gY2hlY2sgdGhlIEZpZ3VyZSA0LTE2DQo+ID4gQWZ0ZXIgZGVib3VuY2Us IHdlIG5lZWQgZG8gZm9sbG93aW5nOg0KPiA+DQo+ID4gQ29ubmVjdGlvbkRldGVybWluZSBDQyAm IFZDT05ODQo+ID4gLSBXcml0ZSBSQy5DQzEgJiBSQy5DQzIgcGVyIGRlY2lzaW9uDQo+ID4gLSBX cml0ZSBSQy5EUlA9MA0KPiA+IC0gV3JpdGUgVENQQ19DT05UUk9sLlBsdWdPcmllbnRhdGlvbg0K PiA+IC0gV3JpdGUgUEMuQXV0b0Rpc2NoYXJnZURpc2Nvbm5lY3Q9MQ0KPiA+ICAmIFBDLkVuYWJs ZVZjb25uQ29ubmVjdGlvbg0KPiA+DQo+ID4gQ3VycmVudCBleGlzdGluZyB0Y3BtK3RjcGNpIHdp bGwgbm90IGNsZWFyIFJDLkRSUCBhZnRlciBhdHRhY2gsIFRoYXQgbWVhbnMNCj4gUkMuRFJQIGNs ZWFyIG1heSBiZSBkb25lIGFmdGVyIGF0dGFjaCwgbm90IGluIHN0YXJ0X2RycF90b2dnbGluZy4N Cj4gPiBJIGFtIG5vdCBzdXJlIGlmIHRoaXMgY2FuIHJlc29sdmUgeW91ciBwcm9ibGVtLCBidXQg SSB0aGluayBpdCBkZXNlcnZlIGEgdHJ5LA0KPiB5b3UgY2FuIGZvbGxvdyBhYm92ZSBvcGVyYXRp b24gc2VxdWVuY2Ugd2hpbGUgZW50ZXJpbmcgYXR0YWNoIHN0YXRlLCByZWZlcg0KPiB0byBteSBw YXRjaFsyXToNCj4gPg0KPiA+IFsyXQ0KPiA+DQo+IGh0dHBzOi8vZW1lYTAxLnNhZmVsaW5rcy5w cm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cHMlM0ElMkYlMkZ3DQo+IHd3DQo+ID4gLnNw aW5pY3MubmV0JTJGbGlzdHMlMkZkZXZpY2V0cmVlJTJGbXNnMjE2ODUyLmh0bWwmZGF0YT0wMiU3 QzAxJTcNCj4gQ2p1bi4NCj4gPg0KPiBsaSU0MG54cC5jb20lN0M5MTE3NDI1NTUwZDI0ZGRjODZk ODA4ZDU3ZjZiMWI0ZSU3QzY4NmVhMWQzYmMyYg0KPiA0YzZmYTkyYw0KPiA+DQo+IGQ5OWM1YzMw MTYzNSU3QzAlN0MwJTdDNjM2NTU1MDIwMzY2NDgzNDU2JnNkYXRhPTklMkJ5d1lsJTJCUg0KPiBQ WXRrNjBXZzZwDQo+ID4gUjYzY0NXMkFuUlhzJTJCcklOdnZxVXBxTDE4JTNEJnJlc2VydmVkPTAN Cj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdHlwZWMvdGNwY2kuYw0KPiA+ IGIvZHJpdmVycy9zdGFnaW5nL3R5cGVjL3RjcGNpLmMgaW5kZXggNTMwYTVkNy4uNzE0NTc3MSAx MDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3N0YWdpbmcvdHlwZWMvdGNwY2kuYw0KPiA+ICsrKyBi L2RyaXZlcnMvc3RhZ2luZy90eXBlYy90Y3BjaS5jDQo+ID4gQEAgLTE4NCw2ICsxODQsNyBAQCBz dGF0aWMgaW50IHRjcGNpX3NldF9wb2xhcml0eShzdHJ1Y3QgdGNwY19kZXYgKnRjcGMsDQo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB0eXBlY19jY19wb2xhcml0eSBwb2xh cml0eSkgIHsNCj4gPiAgICAgICAgIHN0cnVjdCB0Y3BjaSAqdGNwY2kgPSB0Y3BjX3RvX3RjcGNp KHRjcGMpOw0KPiA+ICsgICAgICAgdW5zaWduZWQgaW50IHJlZzsNCj4gPiAgICAgICAgIGludCBy ZXQ7DQo+ID4NCj4gPiAgICAgICAgIHJldCA9IHJlZ21hcF93cml0ZSh0Y3BjaS0+cmVnbWFwLCBU Q1BDX1RDUENfQ1RSTCwgQEANCj4gLTE5Miw2ICsxOTMsMjAgQEAgc3RhdGljIGludCB0Y3BjaV9z ZXRfcG9sYXJpdHkoc3RydWN0IHRjcGNfZGV2ICp0Y3BjLA0KPiA+ICAgICAgICAgaWYgKHJldCA8 IDApDQo+ID4gICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4NCj4gPiArICAgICAgIHJl dCA9IHJlZ21hcF9yZWFkKHRjcGNpLT5yZWdtYXAsIFRDUENfUk9MRV9DVFJMLCAmcmVnKTsNCj4g PiArICAgICAgIGlmIChyZXQgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0K PiA+ICsNCj4gPiArICAgICAgIGlmIChwb2xhcml0eSA9PSBUWVBFQ19QT0xBUklUWV9DQzIpDQo+ ID4gKyAgICAgICAgICAgICAgIHJldCA9IFRDUENfUk9MRV9DVFJMX0NDMV9TSElGVDsNCj4gPiAr ICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgICAgcmV0ID0gVENQQ19ST0xFX0NUUkxfQ0My X1NISUZUOw0KPiA+ICsgICAgICAgcmVnIHw9IFRDUENfUk9MRV9DVFJMX0NDX09QRU4gPDwgcmV0 Ow0KPiA+ICsgICAgICAgcmVnICY9IH5UQ1BDX1JPTEVfQ1RSTF9EUlA7DQo+ID4gKyAgICAgICBy ZXQgPSByZWdtYXBfd3JpdGUodGNwY2ktPnJlZ21hcCwgVENQQ19ST0xFX0NUUkwsIHJlZyk7DQo+ ID4gKyAgICAgICBpZiAocmV0IDwgMCkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsN Cj4gPiArDQo+ID4gICAgICAgICByZXR1cm4gMDsNCj4gPiAgfQ0KPiA+DQo+ID4gUEMuQXV0b0Rp c2NoYXJnZURpc2Nvbm5lY3Q9MGIgU2V0IFJDLkRSUD0xYiAoRFJQKSBTZXQgUkMuUnBWYWx1ZT0w MGINCj4gPiAoc21hbGxlc3QgUnAgdG8gc2F2ZSBwb3dlcikgU2V0IFJDLkNDMT0wMWIgU2V0DQo+ ID4gUkMuQ0MyPTAxYkNPTU1BTkQuTG9vazRDb25uZWN0aW9uTm8NCj4gPg0KPiA+IEl0IHNlZW1z IGxpa2UgaXQgaXMgbm90IGEgZ2VuZXJhbCBjYXNlIGhlcmUgKGJlY2F1c2UgaXQgaXMgb25seQ0K PiA+IHJlY29tbWVuZGVkIGJ1dCBub3QgbmVjZXNzYXJ5KSwgd2UgY2FuIG1vdmUgaXQgdG8gdmVu ZG9yX29wcyBpbiB0aGUNCj4gbmV4dCBwYXRjaC4NCj4gPg0KPiA+IFRoZSBUQ1BNIHNob3VsZCBi ZSBhYmxlIHRvIGNvdmVyIGFsbCBjYXNlcywgYW5kIHdlIHNob3VsZCBmb2xsb3cgdGhlDQo+IHJl Y29tbWVuZGVkIHNlcXVlbmNlKGlmIHdoYXQgeW91IGFyZSB0cnlpbmcgdG8gZG8gaXMgcmVhbGx5 IGFzIHNwZWMgc2F5cykuDQo+IEFncmVlIQ0KPiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2Ug bmVlZCB0byBzZXQgUkMuRFJQIHRvIDAgZXZlcnkgdGltZSBiZWZvcmUNCj4gVENQTSByZXN0YXJ0 cyB0b2dnbGluZyBidXQgbm90IGp1c3QgZm9yIGF0dGFjaGVkLg0KDQpBY3R1YWxseSBJIGhhdmUg bm8gb2JqZWN0aW9uIG9uIGFkZGluZyBhIFJDLkRSUCBjbGVhciwgdGhlIHF1ZXN0aW9uIGlzDQp3 aGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gdGhpcywgdGlsbCBub3cgSSBkb27igJl0IHNl ZSBob3cgdGhpcyBEUlAgYml0IGtlZXAgc2V0DQp3aGlsZSBzdGFydCBkcnAgdG9nZ2xpbmcgaXMg Y2F1c2luZyBwcm9ibGVtLCBZb3Ugd2FudCB0byBzdGFydCBwcmVzZW50IFJkIGFmdGVyIHdyaXRl DQpDQzEvQ0MyIHRvIGJlIFJkL1JkIGFuZCBiZWZvcmUgd3JpdGUgdG8gTE9PSzRDT05ORUNUSU9O LCB0aGlzIGlzIG5vdCByZXF1aXJlZA0KcGVyIHRjcGNpIHNwZWMuDQoNCi1CZWhhdmlvciBhZnRl ciB5b3VyIHBhdGNoOg0KLy9iZWdpbiB3aXRoIE9wZW4gYXMgUkMuRFJQID0gMQ0KUkMuQ0N4PVJk ICYgUkMuRFJQID0gMDsgLy9TdGFydCBwcmVzZW50IFJkDQpXYWl0IDFtczsgLy8gU3RpbGwgUmQN ClJDLkNDeD1SZCAmIFJDLkRSUCA9IDE7IC8vT3Blbj8NCkxvb2s0Q09OTkVDVElPTiA9IDE7IC8v RFJQIHRvZ2dsaW5nIGNvbnRpbnVlIHByZXNldCBSZA0KDQpJcyBteSBhYm92ZSBDQyBzdGF0ZSBk ZXNjcmlwdGlvbiBjb3JyZWN0PyBJcyB0aGlzIHdoYXQgeW91IHdhbnQ/DQoNCi1Pbmx5IGFwcGx5 IG15IHBhdGNoZXM6DQovL2JlZ2luIHdpdGggT3BlbiBhcyBSQy5EUlAgPSAxDQpSQy5DQ3g9UmQg JiBSQy5EUlAgPSAxOyAvL3N0aWxsIE9wZW4NCkxvb2s0Q29ubmVjdGlvbiA9IDE7IC8vU3RhcnQg cHJlc2V0IFJkDQoNCj4gRm9yIFJUMTcxMUgsIGl0IGZvbGxvd3MgYWJvdmUgZmxvdy4gSWYgaXQg aXMgbm90IGNvcnJlY3QsIHRoaXMgb3BlcmF0aW9uIHNob3VsZA0KPiBiZSBtb3ZlZCB0byB2ZW5k b3Jfb3BzLg0KPiA+DQo+ID4gRm9yIHlvdXIgcXVlc3Rpb246DQo+ID4gV2h5IFJUMTcxMUggcmVw b3J0cyBvcGVuL29wZW4gYWZ0ZXIgZHJwX3RvZ2dsaW5nIGlzIGVuYWJsZWQ/DQo+ID4gPT4gU2Vl IE5vdGUyIGFib3ZlLg0KPiA+IFRoaXMgb3Blbi9vcGVuIGlzIGZvciB5b3UgcGx1ZyBvdXQgdGhl IGRldmljZSwgcmlnaHQ/DQo+ID4gPT4gTm8sIHNlZSBOb3RlMiBhYm92ZS4NCj4gPiBXaHkgUlQx NzExSCBjYW4ndCByZXBvcnQgbmV3IGNjIGNoYW5nZSBldmVudHMgYWZ0ZXIgeW91IHBsdWcgaW4g dGhlDQo+ID4gZGV2aWNlPw0KPiA+ID0+IFJUMTcxMUggY2FuIGdlbmVyYXRlIG5ldyBjYyBjaGFu Z2UgZXZlbnRzIGFmdGVyIHBsdWdnaW5nIGluIHRoZQ0KPiBkZXZpY2UuDQo+ID4gV2hhdCBjYyBj aGFuZ2UgZXZlbnQgdGNwYyB3aWxsIHJlcG9ydCBvbiBzdGVwIDQ/DQo+ID4gPT4gU2VlIE5vdGUx IGFib3ZlDQo+ID4gRGlkIHlvdSB2ZXJpZnkgeW91ciBjaGFuZ2UgY2FuIHBhc3MgdGhlIHR5cGVj IGNvbXBsaWFuY2UgdGVzdD8NCj4gPiA9PiBXZSBkaWRuJ3QgdGVzdCBpdCB5ZXQgYnV0IHRyeSB0 byBtYWtlIGFsbCBmdW5jdGlvbnMgd29yayBjb3JyZWN0bHkgZmlyc3QuDQo+ID4NCj4gPiBCZXN0 IFJlZ2FyZHMsDQo+ID4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gPiBTaHUtRmFu IExlZQ0KPiA+IFJpY2h0ZWsgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbg0KPiA+IFRFTDogKzg4Ni0z LTU1MjY3ODkgIzIzNTkNCj4gPiBGQVg6ICs4ODYtMy01NTI2NjEyDQo+ID4gKioqKioqKioqKioq KioqKioqKioqKioqKioqKioNCj4gPg0KPiANCj4gKioqKioqKioqKioqKiBFbWFpbCBDb25maWRl bnRpYWxpdHkgTm90aWNlICoqKioqKioqKioqKioqKioqKioqDQo+IA0KPiBUaGUgaW5mb3JtYXRp b24gY29udGFpbmVkIGluIHRoaXMgZS1tYWlsIG1lc3NhZ2UgKGluY2x1ZGluZyBhbnkgYXR0YWNo bWVudHMpDQo+IG1heSBiZSBjb25maWRlbnRpYWwsIHByb3ByaWV0YXJ5LCBwcml2aWxlZ2VkLCBv ciBvdGhlcndpc2UgZXhlbXB0IGZyb20NCj4gZGlzY2xvc3VyZSB1bmRlciBhcHBsaWNhYmxlIGxh d3MuIEl0IGlzIGludGVuZGVkIHRvIGJlIGNvbnZleWVkIG9ubHkgdG8gdGhlDQo+IGRlc2lnbmF0 ZWQgcmVjaXBpZW50KHMpLiBBbnkgdXNlLCBkaXNzZW1pbmF0aW9uLCBkaXN0cmlidXRpb24sIHBy aW50aW5nLA0KPiByZXRhaW5pbmcgb3IgY29weWluZyBvZiB0aGlzIGUtbWFpbCAoaW5jbHVkaW5n IGl0cyBhdHRhY2htZW50cykgYnkgdW5pbnRlbmRlZA0KPiByZWNpcGllbnQocykgaXMgc3RyaWN0 bHkgcHJvaGliaXRlZCBhbmQgbWF5IGJlIHVubGF3ZnVsLiBJZiB5b3UgYXJlIG5vdCBhbg0KPiBp bnRlbmRlZCByZWNpcGllbnQgb2YgdGhpcyBlLW1haWwsIG9yIGJlbGlldmUgdGhhdCB5b3UgaGF2 ZSByZWNlaXZlZCB0aGlzDQo+IGUtbWFpbCBpbiBlcnJvciwgcGxlYXNlIG5vdGlmeSB0aGUgc2Vu ZGVyIGltbWVkaWF0ZWx5IChieSByZXBseWluZyB0byB0aGlzDQo+IGUtbWFpbCksIGRlbGV0ZSBh bnkgYW5kIGFsbCBjb3BpZXMgb2YgdGhpcyBlLW1haWwgKGluY2x1ZGluZyBhbnkgYXR0YWNobWVu dHMpDQo+IGZyb20geW91ciBzeXN0ZW0sIGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnQg b2YgdGhpcyBlLW1haWwgdG8gYW55IG90aGVyDQo+IHBlcnNvbi4gVGhhbmsgeW91IQ0K