From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR02-VE1-obe.outbound.protection.outlook.com (EUR02-VE1-obe.outbound.protection.outlook.com [40.107.2.67]) by mx.groups.io with SMTP id smtpd.web11.33109.1590420104106279151 for ; Mon, 25 May 2020 08:21:44 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nxp1.onmicrosoft.com header.s=selector2-nxp1-onmicrosoft-com header.b=cNWOjD0c; spf=pass (domain: oss.nxp.com, ip: 40.107.2.67, mailfrom: wasim.khan@oss.nxp.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S4VENu7LpOLFYheQzSG2zVD9G004LRJqXtUJhVbEOy2T/YoEN7MUIayldBEd9b5zS9AmhD5w13eQSUCQYmjrgRWFaOslyN1atMBKNtxirdcwiR8/VBiit1MegwEyl7UWwocRnBh3YpGsqev+olDs3EKy3Ko8CdH0da18n0XWRCSAiM6IsA04Hrmhjzbel5dQfFFCNGEgDFfDmoBDd9BlV6aLylRwWX7QKWmDRkTFb9ozuZqbJL3uXPofOpO12TD1cqBMHrIYPXP+VIMSU75YduUp38pwKAfNcSjUxJgnJZSrNyLG+2vDweD2EiqbcEK4c3MVS3gOaY4kLsbBxQXbkg== 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=UH0K7Had8ISTTejfpVCzGnRalFgHxhR/IIdD10kjaN4=; b=Tb76Z33t97AocNNNmsH+/wTRHmdQjBlQGGYNKD+FY7plT9N0jtTr7w1z0Yy5e56WPV884/7Dx5P6SRaN7CjDJ0YyxELbxoEQQ9KGgoWPsTfTDO472XMWhb/wq25TBr96rj5kesKQqZ0QO7TCjtMrOgThi2XnCDo5bpHOF4FUALf4vzcc/Thtvb0v0QgdRDAc6kVZJRzAnMRWn5xsPzbcS+QhuCuEwGOp4UheABZlwfjPrzZ1n4Cv7KPZiu3/yeUIvvBlpu42HiDHtNRtfvddLQwhdVA6E+WL7vZmd5Iv7dOAqkX9qOFbR0g9HjOIGaRvOdgTWKd8UcDSBkWRXzK7xA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UH0K7Had8ISTTejfpVCzGnRalFgHxhR/IIdD10kjaN4=; b=cNWOjD0ceEMYMy8psOVqsdRPhGYjFZkXmUY5EE5rXWLRm86zGcXlLfAvjNnG+z6JFyxf0QXLJRpP90w6dDHVCdZ7X8H5icTpMtjN1Hga7gTPDWuDbx9EoKBjEFvyjvKEFXO5sY5jcNNBHtM9NBIFROT9GYXjUVgrFh77sp/OpAw= Received: from VE1PR04MB6702.eurprd04.prod.outlook.com (2603:10a6:803:123::13) by VE1PR04MB6541.eurprd04.prod.outlook.com (2603:10a6:803:121::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.26; Mon, 25 May 2020 15:21:40 +0000 Received: from VE1PR04MB6702.eurprd04.prod.outlook.com ([fe80::81c4:97a6:7592:f225]) by VE1PR04MB6702.eurprd04.prod.outlook.com ([fe80::81c4:97a6:7592:f225%7]) with mapi id 15.20.3021.029; Mon, 25 May 2020 15:21:40 +0000 From: "Wasim Khan (OSS)" To: Jon Nettleton , "Wasim Khan (OSS)" CC: Ard Biesheuvel , "devel@edk2.groups.io" , Meenakshi Aggarwal , Vabhav Sharma , Varun Sethi , "leif@nuviainc.com" Subject: Re: [PATCH edk2-platforms 09/16] Silicon/NXP: Implement PciSegmentLib for PCIe Layerscape Controller Thread-Topic: [PATCH edk2-platforms 09/16] Silicon/NXP: Implement PciSegmentLib for PCIe Layerscape Controller Thread-Index: AQHWMqgwgt3aoy6OOk6m3pipOKa97w== Date: Mon, 25 May 2020 15:21:40 +0000 Message-ID: References: <1590102139-16588-1-git-send-email-wasim.khan@oss.nxp.com> <1590102139-16588-10-git-send-email-wasim.khan@oss.nxp.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: solid-run.com; dkim=none (message not signed) header.d=none;solid-run.com; dmarc=none action=none header.from=oss.nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [157.47.204.118] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: d28b8dd7-5783-4470-d74c-08d800bf5347 x-ms-traffictypediagnostic: VE1PR04MB6541: x-ms-exchange-sharedmailbox-routingagent-processed: True x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6108; x-forefront-prvs: 0414DF926F x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: xb0EcwJS9AT+pVaEiG+9JDih6G1X4mKI9sI58XPWcnQ48Tk+JLy+AMnFNIvNtsUchSunRlF3P08N3QrHYpefRgNzm/PppKdNUFPPaGGOFCaRw+NSJWCJr0dUiOhRq89N1nKDYuIjM9Q+slUzHyTwZaTdM2HHO7LxYpaIixG4jwZgc2G9SxbVfTCKuyuZuAM/VVYD5g9HuLT6ZiGSe2MdFiXB7AxLG1Erkev/ywYSyDwmWZbwgd/9PciOfI7SU9Qp7G0BSipN/pRFNDWG3lR1+fRRfeittiV+fX2EoPcAqX/X75AmRqMXOX1aIKC0qZeK90LN16HF4nVMy6B75hiyeQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6702.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(366004)(346002)(396003)(39860400002)(136003)(376002)(7696005)(6506007)(53546011)(19627235002)(26005)(186003)(33656002)(71200400001)(66446008)(52536014)(76116006)(2906002)(66556008)(64756008)(66476007)(66946007)(8936002)(8676002)(9686003)(55016002)(316002)(86362001)(54906003)(110136005)(30864003)(4326008)(5660300002)(478600001)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: 0Cxhiws9NEX6UXrDxubW59pg2cm95he6ookm7TcFDLmzi+NLfHOLI2oyBQ9bbLjFzlk6wIlVe63Z3kRVl1hPJVqxCY54vIKNuZJCqTgziTbp0EEDeVAkzyYxDpJuJpoJjlA/GHLbPTYpYidPWovxuEVy84yP4fbAJB8GdKs9wgqvVZsgne1u6rtRoeCpKw1JoixjKouYUs5GSlK7ngqbDy2e4yY5wRWqQAnLeJIu64oD6A6H3M8O6tdFP2T7Ev1ZzaFB1GuWLIeLmudkO9UQOCR2GsTYIEjgS3tMugxu7ZCahpWx+mf1o2Ty0g8PZ9gGFtKEsOOM1lpQu13DScA/5gKSpnTciDKuKU94IKNRqvI0XhGQEBV5A3S9y+XG/iBoHCVqX2M5A9U5/45ZADs+Sj+GjdZr+oD3iA0sO310uXltm3PL5Ki85BcuKdx7QhW0kjZZ0dM3JTK8RljJO6kPklfrJ7jJqmgRa6ynQb9Pyppnf9Gr2mPbPC+WutS7WhPc MIME-Version: 1.0 X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d28b8dd7-5783-4470-d74c-08d800bf5347 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 May 2020 15:21:40.7596 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: cAd28cUYyNr7xHq7b0ahNKIRezUfaXbHVjXBGI1dFE+9S732LoDbzjHp52T9FuOb1z3d/TezxDN8Z7NzdYZkhA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6541 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSm9uIE5ldHRsZXRvbiA8 am9uQHNvbGlkLXJ1bi5jb20+DQo+IFNlbnQ6IE1vbmRheSwgTWF5IDI1LCAyMDIwIDEwOjAwIEFN DQo+IFRvOiBXYXNpbSBLaGFuIChPU1MpIDx3YXNpbS5raGFuQG9zcy5ueHAuY29tPg0KPiBDYzog QXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGFybS5jb20+OyBkZXZlbEBlZGsyLmdyb3Vw cy5pbzsNCj4gTWVlbmFrc2hpIEFnZ2Fyd2FsIDxtZWVuYWtzaGkuYWdnYXJ3YWxAbnhwLmNvbT47 IFZhYmhhdiBTaGFybWENCj4gPHZhYmhhdi5zaGFybWFAbnhwLmNvbT47IFZhcnVuIFNldGhpIDxW LlNldGhpQG54cC5jb20+Ow0KPiBsZWlmQG51dmlhaW5jLmNvbQ0KPiBTdWJqZWN0OiBSZTogW1BB VENIIGVkazItcGxhdGZvcm1zIDA5LzE2XSBTaWxpY29uL05YUDogSW1wbGVtZW50DQo+IFBjaVNl Z21lbnRMaWIgZm9yIFBDSWUgTGF5ZXJzY2FwZSBDb250cm9sbGVyDQo+IA0KPiBPbiBTdW4sIE1h eSAyNCwgMjAyMCBhdCA4OjMyIFBNIFdhc2ltIEtoYW4gKE9TUykNCj4gPHdhc2ltLmtoYW5Ab3Nz Lm54cC5jb20+IHdyb3RlOg0KPiA+DQo+ID4NCj4gPg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj4gPiA+IEZyb206IEFyZCBCaWVzaGV1dmVsIDxhcmQuYmllc2hldXZlbEBhcm0u Y29tPg0KPiA+ID4gU2VudDogRnJpZGF5LCBNYXkgMjIsIDIwMjAgMzowMCBQTQ0KPiA+ID4gVG86 IFdhc2ltIEtoYW4gKE9TUykgPHdhc2ltLmtoYW5Ab3NzLm54cC5jb20+OyBkZXZlbEBlZGsyLmdy b3Vwcy5pbzsNCj4gPiA+IE1lZW5ha3NoaSBBZ2dhcndhbCA8bWVlbmFrc2hpLmFnZ2Fyd2FsQG54 cC5jb20+OyBWYWJoYXYgU2hhcm1hDQo+ID4gPiA8dmFiaGF2LnNoYXJtYUBueHAuY29tPjsgVmFy dW4gU2V0aGkgPFYuU2V0aGlAbnhwLmNvbT47DQo+ID4gPiBsZWlmQG51dmlhaW5jLmNvbTsgam9u QHNvbGlkLXJ1bi5jb20NCj4gPiA+IENjOiBXYXNpbSBLaGFuIDx3YXNpbS5raGFuQG54cC5jb20+ DQo+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIGVkazItcGxhdGZvcm1zIDA5LzE2XSBTaWxpY29u L05YUDogSW1wbGVtZW50DQo+ID4gPiBQY2lTZWdtZW50TGliIGZvciBQQ0llIExheWVyc2NhcGUg Q29udHJvbGxlcg0KPiA+ID4NCj4gPiA+IE9uIDUvMjIvMjAgMTowMiBBTSwgV2FzaW0gS2hhbiB3 cm90ZToNCj4gPiA+ID4gRnJvbTogV2FzaW0gS2hhbiA8d2FzaW0ua2hhbkBueHAuY29tPg0KPiA+ ID4gPg0KPiA+ID4gPiBXZSBoYXZlIGRpZmZlcmVudCBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lvbiBm b3IgYnVzIDAgKENvbnRyb2xsZXINCj4gPiA+ID4gc3BhY2UpIGFuZCBidXNbMHgxLTB4ZmZdIG9u IE5YUCBTb0NzIHdpdGggUENJZSBMUyBjb250cm9sbGVyLg0KPiA+ID4gPiBBZGQgUGNpU2VnbWVu dExpYiBmb3IgUENJZSBMUyBjb250cm9sbGVyLg0KPiA+ID4gPg0KPiA+ID4gPiBGb3IgY29uZmln IHRyYW5zYWN0aW9ucyBmb3IgQnVzMDoNCj4gPiA+ID4gICAgLSBDb25maWcgdHJhbnNhY3Rpb24g YWRkcmVzcyA9IFBDSWUgY29udHJvbGxlciBhZGRyZXNzICsgb2Zmc2V0DQo+ID4gPiA+DQo+ID4g PiA+IEZvciBjb25maWcgdHJhbnNhY3Rpb25zIGZvciBCdXNbMHgxLTB4ZmZdOg0KPiA+ID4gPiAg ICAtIFBDSWUgSVAgcmVxdWlyZXMgdGFyZ2V0IEJERiB0byBiZSB3cml0dGVuIGF0IGJpdFszMTox Nl0gb2YgUENJZQ0KPiA+ID4gPiAgICAgIHR5cGUwL3R5cGUxIG91dGJvdW5kIHdpbmRvdy4NCj4g PiA+ID4gICAgLSBDb25maWcgdHJhbnNhY3Rpb24gYWRkcmVzcyA9IFBDSWUgY29uZmlnIHNwYWNl IGFkZHJlc3MgKw0KPiA+ID4gPiBvZmZzZXQNCj4gPiA+ID4NCj4gPiA+ID4gU2lnbmVkLW9mZi1i eTogVmFiaGF2IFNoYXJtYSA8dmFiaGF2LnNoYXJtYUBueHAuY29tPg0KPiA+ID4gPiBTaWduZWQt b2ZmLWJ5OiBXYXNpbSBLaGFuIDx3YXNpbS5raGFuQG54cC5jb20+DQo+ID4gPiA+IC0tLQ0KPiA+ ID4gPiAgIC4uLi9OWFAvTGlicmFyeS9QY2lTZWdtZW50TGliL1BjaVNlZ21lbnRMaWIuaW5mICAg IHwgIDMyICsrDQo+ID4gPiA+ICAgU2lsaWNvbi9OWFAvTGlicmFyeS9QY2lTZWdtZW50TGliL1Bj aVNlZ21lbnRMaWIuYyAgfCA2MTINCj4gPiA+ICsrKysrKysrKysrKysrKysrKysrKw0KPiA+ID4g PiAgIDIgZmlsZXMgY2hhbmdlZCwgNjQ0IGluc2VydGlvbnMoKykNCj4gPiA+ID4gICBjcmVhdGUg bW9kZSAxMDA3NTUNCj4gU2lsaWNvbi9OWFAvTGlicmFyeS9QY2lTZWdtZW50TGliL1BjaVNlZ21l bnRMaWIuaW5mDQo+ID4gPiA+ICAgY3JlYXRlIG1vZGUgMTAwNzU1DQo+ID4gPiA+IFNpbGljb24v TlhQL0xpYnJhcnkvUGNpU2VnbWVudExpYi9QY2lTZWdtZW50TGliLmMNCj4gPiA+ID4NCj4gPiA+ ID4gZGlmZiAtLWdpdCBhL1NpbGljb24vTlhQL0xpYnJhcnkvUGNpU2VnbWVudExpYi9QY2lTZWdt ZW50TGliLmluZg0KPiA+ID4gPiBiL1NpbGljb24vTlhQL0xpYnJhcnkvUGNpU2VnbWVudExpYi9Q Y2lTZWdtZW50TGliLmluZg0KPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDc1NQ0KPiA+ID4gPiBp bmRleCAwMDAwMDAwMDAwMDAuLmEzNmU3OTIzOWIzMw0KPiA+ID4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gPiA+ICsrKyBiL1NpbGljb24vTlhQL0xpYnJhcnkvUGNpU2VnbWVudExpYi9QY2lTZWdtZW50 TGliLmluZg0KPiA+ID4gPiBAQCAtMCwwICsxLDMyIEBADQo+ID4gPiA+ICsjIyBAZmlsZQ0KPiA+ ID4gPiArIyAgUENJIFNlZ21lbnQgTGlicmFyeSBmb3IgTlhQIFNvQ3Mgd2l0aCBtdWx0aXBsZSBS Q3MgIyAjDQo+ID4gPiA+ICtDb3B5cmlnaHQNCj4gPiA+ID4gKzIwMTgtMjAyMCBOWFAgIyAjICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gPiArIyMN Cj4gPiA+ID4gKw0KPiA+ID4gPiArW0RlZmluZXNdDQo+ID4gPiA+ICsgIElORl9WRVJTSU9OICAg ICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMUENCj4gPiA+ID4gKyAgQkFTRV9OQU1FICAgICAg ICAgICAgICAgICAgICAgID0gUGNpU2VnbWVudExpYg0KPiA+ID4gPiArICBGSUxFX0dVSUQgICAg ICAgICAgICAgICAgICAgICAgPSBjOWY1OTI2MS01YTYwLTRhNGMtODJmNi0xZjUyMDQ0MmUxMDAN Cj4gPiA+ID4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0K PiA+ID4NCj4gPiA+IENhbiB0aGlzIGJlIEJBU0UgPw0KPiA+ID4NCj4gPg0KPiA+IE5vLCB3ZSBu ZWVkIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIFBjaVNlZ0xpYkluaXQoKSB3aGljaCByZXF1aXJlcyBp dCB0byBiZQ0KPiBEWEVfRFJJVkVSLg0KPiA+DQo+ID4gPiA+ICsgIFZFUlNJT05fU1RSSU5HICAg ICAgICAgICAgICAgICA9IDEuMA0KPiA+ID4gPiArICBMSUJSQVJZX0NMQVNTICAgICAgICAgICAg ICAgICAgPSBQY2lTZWdtZW50TGlifERYRV9EUklWRVINCj4gPiA+ID4gKyAgQ09OU1RSVUNUT1Ig ICAgICAgICAgICAgICAgICAgID0gUGNpU2VnTGliSW5pdA0KPiA+ID4gPiArDQo+ID4gPiA+ICtb U291cmNlc10NCj4gPiA+ID4gKyAgUGNpU2VnbWVudExpYi5jDQo+ID4gPiA+ICsNCj4gPiA+ID4g K1tQYWNrYWdlc10NCj4gPiA+ID4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gPiA+ID4gKyAgU2ls aWNvbi9OWFAvTnhwUW9yaXFMcy5kZWMNCj4gPiA+ID4gKw0KPiA+ID4gPiArW0xpYnJhcnlDbGFz c2VzXQ0KPiA+ID4gPiArICBCYXNlTGliDQo+ID4gPiA+ICsgIERlYnVnTGliDQo+ID4gPiA+ICsg IElvTGliDQo+ID4gPiA+ICsgIFBjZExpYg0KPiA+ID4gPiArDQo+ID4gPiA+ICtbRml4ZWRQY2Rd DQo+ID4gPiA+ICsgIGdOeHBRb3JpcUxzVG9rZW5TcGFjZUd1aWQuUGNkUGNpRXhwMUJhc2VBZGRy DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9TaWxpY29uL05YUC9MaWJyYXJ5L1BjaVNlZ21lbnRMaWIv UGNpU2VnbWVudExpYi5jDQo+ID4gPiA+IGIvU2lsaWNvbi9OWFAvTGlicmFyeS9QY2lTZWdtZW50 TGliL1BjaVNlZ21lbnRMaWIuYw0KPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDc1NQ0KPiA+ID4g PiBpbmRleCAwMDAwMDAwMDAwMDAuLmVjZDM2OTcxYjc1Mw0KPiA+ID4gPiAtLS0gL2Rldi9udWxs DQo+ID4gPiA+ICsrKyBiL1NpbGljb24vTlhQL0xpYnJhcnkvUGNpU2VnbWVudExpYi9QY2lTZWdt ZW50TGliLmMNCj4gPiA+ID4gQEAgLTAsMCArMSw2MTIgQEANCj4gPiA+ID4gKy8qKiBAZmlsZQ0K PiA+ID4gPiArICBQQ0kgU2VnbWVudCBMaWJyYXJ5IGZvciBOWFAgU29DcyB3aXRoIG11bHRpcGxl IFJDcw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIENvcHlyaWdodCAyMDE4LTIwMjAgTlhQDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQgKiovICNpbmNsdWRlDQo+ID4gPiA+ICs8UGlEeGUuaD4gI2luY2x1ZGUgPEJhc2UuaD4g I2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvUGNpMjIuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxM aWJyYXJ5L1BjaVNlZ21lbnRMaWIuaD4gI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiA+ ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4gI2luY2x1ZGUgPExpYnJhcnkvSW9M aWIuaD4gI2luY2x1ZGUNCj4gPiA+ID4gKzxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4g I2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8UGNpZS5oPg0K PiA+ID4gPiArDQo+ID4gPiA+ICt0eXBlZGVmIGVudW0gew0KPiA+ID4gPiArICBQY2lDZmdXaWR0 aFVpbnQ4ICAgICAgPSAwLA0KPiA+ID4gPiArICBQY2lDZmdXaWR0aFVpbnQxNiwNCj4gPiA+ID4g KyAgUGNpQ2ZnV2lkdGhVaW50MzIsDQo+ID4gPiA+ICsgIFBjaUNmZ1dpZHRoTWF4DQo+ID4gPiA+ ICt9IFBDSV9DRkdfV0lEVEg7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBB c3NlcnQgdGhlIHZhbGlkaXR5IG9mIGEgUENJIFNlZ21lbnQgYWRkcmVzcy4NCj4gPiA+ID4gKyAg QSB2YWxpZCBQQ0kgU2VnbWVudCBhZGRyZXNzIHNob3VsZCBub3QgY29udGFpbiAxJ3MgaW4gYml0 cw0KPiA+ID4gPiArMjguLjMxIGFuZCA0OC4uNjMNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFy YW0gIEEgVGhlIGFkZHJlc3MgdG8gdmFsaWRhdGUuDQo+ID4gPiA+ICsgIEBwYXJhbSAgTSBBZGRp dGlvbmFsIGJpdHMgdG8gYXNzZXJ0IHRvIGJlIHplcm8uDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoq Lw0KPiA+ID4gPiArI2RlZmluZSBBU1NFUlRfSU5WQUxJRF9QQ0lfU0VHTUVOVF9BRERSRVNTKEEs TSkgXA0KPiA+ID4gPiArICBBU1NFUlQgKCgoQSkgJiAoMHhmZmZmMDAwMGYwMDAwMDAwVUxMIHwg KE0pKSkgPT0gMCkNCj4gPiA+ID4gKw0KPiA+ID4gPiArU1RBVElDDQo+ID4gPiA+ICtVSU5UNjQN Cj4gPiA+ID4gK1BjaUxzQ2ZnVGFyZ2V0ICgNCj4gPiA+ID4gKyAgSU4gIEVGSV9QSFlTSUNBTF9B RERSRVNTIERiaSwNCj4gPiA+ID4gKyAgSU4gIFVJTlQ2NCAgICAgICAgICAgICAgIEFkZHJlc3Ms DQo+ID4gPiA+ICsgIElOICBVSU5UMTYgICAgICAgICAgICAgICBTZWdtZW50LA0KPiA+ID4gPiAr ICBJTiAgVUlOVDggICAgICAgICAgICAgICAgQnVzLA0KPiA+ID4gPiArICBJTiAgVUlOVDE2ICAg ICAgICAgICAgICAgT2Zmc2V0DQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAg VUlOVDMyIFRhcmdldDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBUYXJnZXQgPSAoKCgoQWRkcmVz cyA+PiAyMCkgJiAweEZGKSA8PCAyNCkgfA0KPiA+ID4gPiArICAgICAgICAgICAoKChBZGRyZXNz ID4+IDE1KSAmIDB4MUYpIDw8IDE5KSB8DQo+ID4gPiA+ICsgICAgICAgICAgICgoKEFkZHJlc3Mg Pj4gMTIpICYgMHg3KSA8PCAxNikpOw0KPiA+ID4NCj4gPiA+IFlvdSBjYW4gZHJvcCB0aGUgb3V0 ZXIgKCkgaGVyZQ0KPiA+ID4NCj4gPg0KPiA+IE9LDQo+ID4NCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICBpZiAoQnVzID4gMSkgew0KPiA+ID4gPiArICAgIE1taW9Xcml0ZTMyICgoVUlOVE4pRGJpICsg SUFUVV9WSUVXUE9SVF9PRkYsDQo+ID4gPiA+ICsgSUFUVV9WSUVXUE9SVF9PVVRCT1VORCB8IElB VFVfUkVHSU9OX0lOREVYMSk7ICB9IGVsc2Ugew0KPiA+ID4gPiArICAgIE1taW9Xcml0ZTMyICgo VUlOVE4pRGJpICsgSUFUVV9WSUVXUE9SVF9PRkYsDQo+ID4gPiA+ICsgSUFUVV9WSUVXUE9SVF9P VVRCT1VORCB8IElBVFVfUkVHSU9OX0lOREVYMCk7ICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg TW1pb1dyaXRlMzIgKChVSU5UTilEYmkgKw0KPiA+ID4gSUFUVV9MV1JfVEFSR0VUX0FERFJfT0ZG X09VVEJPVU5EXzAsDQo+ID4gPiA+ICsgVGFyZ2V0KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBp ZiAoQnVzID4gMSkgew0KPiA+ID4gPiArICAgIHJldHVybiBQQ0lfU0VHMF9NTUlPX01FTUJBU0Ug KyBQQ0lfQkFTRV9ESUZGICogU2VnbWVudCArDQo+ID4gPiA+ICsgU0VHX0NGR19TSVpFICsgT2Zm c2V0OyAgfSBlbHNlIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gUENJX1NFRzBfTU1JT19NRU1CQVNF ICsgUENJX0JBU0VfRElGRiAqIFNlZ21lbnQgKw0KPiA+ID4gPiArIE9mZnNldDsgfQ0KPiA+ID4N Cj4gPiA+IE9LLCBzbyB0aGlzIGlzIHRoZSB2ZXJzaW9uIGZvciB0aGUgSVAgdGhhdCBkb2VzIG5v dCBpbXBsZW1lbnQgRUNBTSBzaGlmdCwNCj4gcmlnaHQ/DQo+ID4NCj4gPiBObywgUENJZSBMYXll cnNjYXBlIHN1cHBvcnQgYm90aCBtZWNoYW5pc20gRUNBTSAmIE5vbi1FQ0FNICh3aXRoDQo+IGV4 Y2VwdGlvbiBvZiBidXMgMCkuDQo+ID4gUENJZSBMU0dlbjQgY29udHJvbGxlciBkb2VzIG5vdCBz dXBwb3J0IEVDQU0gYXQgYWxsICwgd2hpY2ggaXMgcGFydCBvZg0KPiA+IHBhdGNoICMxMQ0KPiA+ DQo+IA0KPiBXZWxsIHRoaXMgaXNuJ3QgY29tcGxldGVseSB0cnVlLiAgSXQgZG9lc24ndCBzdXBw b3J0IEVDQU0gbmF0aXZlbHkgb24gdGhlDQo+IGNvbnRyb2xsZXIsIGJ1dCBpdCBjYW4gYmUgY29u ZmlndXJlZCB0byByZXByZXNlbnQgYSBwcm9wZXIgRUNBTSB2aWV3IHdpdGggdGhlDQo+IGNvbmZp ZyBzaGlmdCBtb2RlbCB3ZSBhcmUgdXNpbmcgb24gdGhlIFJldiAyIHNpbGljb24uICBJIGhhdmUg YSBmdW5jdGlvbmFsIHRlc3QNCj4gcGF0Y2gsIGJ1dCB0aGF0IHNob3VsZG4ndCBiZSBzb21ldGhp bmcgdG8gaG9sZCB1cCB0aGlzIHBhdGNoIHNldC4gIEkgd2lsbCBzdWJtaXQNCj4gdGhhdCB3b3Jr IHNlcGFyYXRlbHkgYW5kIHdlIGNhbiBkaXNjdXNzIHRoZSBpbXBsZW1lbnRhdGlvbiBhdCB0aGF0 IHRpbWUuDQoNClRoYW5rcyBKb24gZm9yIGJyaW5pbmcgdGhpcyBwb2ludC4gDQpJIG1lYW50IEVD QU0gc3VwcG9ydCBhdCBjb250cm9sbGVyIGxldmVsIChIVykgLiBZZXMsIHdpbGwgZGlzY3VzcyB0 aGUgaW1wbGVtZW50YXRpb24uIA0KDQo+IA0KPiA+ID4NCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0K PiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIEZ1bmN0aW9uIHRvIHJldHVybiBQQ0llIFBoeXNpY2Fs IEFkZHJlc3MoUENJZSB2aWV3KSBvcg0KPiA+ID4gPiArQ29udHJvbGxlcg0KPiA+ID4gPiArICBB ZGRyZXNzKENQVSB2aWV3KSBmb3IgZGlmZmVyZW50IFJDcw0KPiA+ID4gPiArDQo+ID4gPiA+ICsg IEBwYXJhbSAgQWRkcmVzcyBBZGRyZXNzIHBhc3NlZCBmcm9tIGJ1cyBsYXllci4NCj4gPiA+ID4g KyAgQHBhcmFtICBTZWdtZW50IFNlZ21lbnQgbnVtYmVyIGZvciBSb290IENvbXBsZXguDQo+ID4g PiA+ICsgIEBwYXJhbSAgT2Zmc2V0ICBDb25maWcgc3BhY2UgcmVnaXN0ZXIgb2Zmc2V0Lg0KPiA+ ID4gPiArICBAcGFyYW0gIEJ1cyAgICAgUENJZSBCdXMgbnVtYmVyLg0KPiA+ID4gPiArDQo+ID4g PiA+ICsgIEByZXR1cm4gUmV0dXJuIFBDSWUgQ1BVIG9yIENvbnRyb2xsZXIgYWRkcmVzcy4NCj4g PiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtTVEFUSUMNCj4gPiA+ID4gK1VJTlQ2NA0K PiA+ID4gPiArUGNpTHNHZXRDb25maWdCYXNlICgNCj4gPiA+ID4gKyAgSU4gIFVJTlQ2NCAgICAg IEFkZHJlc3MsDQo+ID4gPiA+ICsgIElOICBVSU5UMTYgICAgICBTZWdtZW50LA0KPiA+ID4gPiAr ICBJTiAgVUlOVDE2ICAgICAgT2Zmc2V0LA0KPiA+ID4gPiArICBJTiAgVUlOVDggICAgICAgQnVz DQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgVUlOVDMyIENmZ0FkZHI7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgQ2ZnQWRkciA9IChVSU5UMTYpT2Zmc2V0Ow0KPiA+ID4gPiAr ICBpZiAoQnVzKSB7DQo+ID4gPg0KPiA+ID4gUGxlYXNlIHVzZSBCdXMgPiAwIGhlcmUNCj4gPg0K PiA+IE9LDQo+ID4NCj4gPiA+DQo+ID4gPiA+ICsgICAgcmV0dXJuIFBjaUxzQ2ZnVGFyZ2V0IChQ Q0lfU0VHMF9EQklfQkFTRSArIFBDSV9EQklfU0laRV9ESUZGDQo+ID4gPiA+ICsqIFNlZ21lbnQs IEFkZHJlc3MsIFNlZ21lbnQsIEJ1cywgT2Zmc2V0KTsNCj4gPiA+ID4gKyAgfSBlbHNlIHsNCj4g PiA+ID4gKyAgICByZXR1cm4gUENJX1NFRzBfREJJX0JBU0UgKyBQQ0lfREJJX1NJWkVfRElGRiAq IFNlZ21lbnQgKw0KPiA+ID4gPiArQ2ZnQWRkcjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArfQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgRnVuY3Rpb24gdG8gcmV0dXJuIFBD SWUgUGh5c2ljYWwgQWRkcmVzcyhQQ0llIHZpZXcpIG9yDQo+ID4gPiA+ICtDb250cm9sbGVyDQo+ ID4gPiA+ICsgIEFkZHJlc3MoQ1BVIHZpZXcpIGZvciBkaWZmZXJlbnQgUkNzDQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgQHBhcmFtICBBZGRyZXNzIEFkZHJlc3MgcGFzc2VkIGZyb20gYnVzIGxheWVy Lg0KPiA+ID4gPiArICBAcGFyYW0gIFNlZ21lbnQgU2VnbWVudCBudW1iZXIgZm9yIFJvb3QgQ29t cGxleC4NCj4gPiA+ID4gKyAgQHBhcmFtICBPZmZzZXQgIENvbmZpZyBzcGFjZSByZWdpc3RlciBv ZmZzZXQuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHVybiBSZXR1cm4gUENJZSBDUFUgb3Ig Q29udHJvbGxlciBhZGRyZXNzLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK1NU QVRJQw0KPiA+ID4gPiArVUlOVDY0DQo+ID4gPiA+ICtQY2lTZWdtZW50TGliR2V0Q29uZmlnQmFz ZSAoDQo+ID4gPiA+ICsgIElOICBVSU5UNjQgICAgICBBZGRyZXNzLA0KPiA+ID4gPiArICBJTiAg VUlOVDE2ICAgICAgU2VnbWVudCwNCj4gPiA+ID4gKyAgSU4gIFVJTlQxNiAgICAgIE9mZnNldA0K PiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIFVJTlQ4ICBCdXM7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgQnVzID0gKChVSU5UMzIpQWRkcmVzcyA+PiAyMCkgJiAweGZmOyAgcmV0 dXJuDQo+ID4gPiA+ICsgUGNpTHNHZXRDb25maWdCYXNlIChBZGRyZXNzLCBTZWdtZW50LCBPZmZz ZXQsIEJ1cyk7IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIEludGVybmFs IHdvcmtlciBmdW5jdGlvbiB0byByZWFkIGEgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBhZGRyZXNzIHRoYXQgZW5j b2RlcyB0aGUgU2VnbWVudCwgUENJIEJ1cywNCj4gRGV2aWNlLA0KPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgRnVuY3Rpb24gYW5kIFJlZ2lzdGVyLg0KPiA+ID4gPiArICBAcGFyYW0gIFdpZHRo ICAgVGhlIHdpZHRoIG9mIGRhdGEgdG8gcmVhZA0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR1 cm4gVGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArU1RBVElDDQo+ID4gPiA+ICtVSU5UMzIN Cj4gPiA+ID4gK1BjaVNlZ21lbnRMaWJSZWFkV29ya2VyICgNCj4gPiA+ID4gKyAgSU4gIFVJTlQ2 NCAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPiA+ID4gPiArICBJTiAgUENJX0NGR19X SURUSCAgICAgICAgICAgICAgIFdpZHRoDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ ID4gKyAgVUlOVDY0ICAgIEJhc2U7DQo+ID4gPiA+ICsgIFVJTlQxNiAgICBPZmZzZXQ7DQo+ID4g PiA+ICsgIFVJTlQxNiAgICBTZWdtZW50Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFNlZ21lbnQg PSAoQWRkcmVzcyA+PiAzMik7DQo+ID4gPiA+ICsgIE9mZnNldCA9IChBZGRyZXNzICYgMHhmZmYg KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBCYXNlID0gUGNpU2VnbWVudExpYkdldENvbmZpZ0Jh c2UgKEFkZHJlc3MsIFNlZ21lbnQsIE9mZnNldCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8g aWdub3JlIGRldmljZXMgPiAwIG9uIGJ1cyAwDQo+ID4gPiA+ICsgIGlmICgoQWRkcmVzcyAmIDB4 ZmYwMDAwMCkgPT0gMCAmJiAoQWRkcmVzcyAmIDB4ZjgwMDApICE9IDApIHsNCj4gPiA+ID4gKyAg ICByZXR1cm4gTUFYX1VJTlQzMjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsg IC8vIGlnbm9yZSBkZXZpY2UgPiAwIG9uIGJ1cyAxDQo+ID4gPiA+ICsgIGlmICgoQWRkcmVzcyAm IDB4ZmUwMDAwMCkgPT0gMCAmJiAoQWRkcmVzcyAmIDB4ZjgwMDApICE9IDApIHsNCj4gPiA+ID4g KyAgICByZXR1cm4gTUFYX1VJTlQzMjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIHN3aXRjaCAoV2lkdGgpIHsNCj4gPiA+ID4gKyAgY2FzZSBQY2lDZmdXaWR0aFVpbnQ4Og0K PiA+ID4gPiArICAgIHJldHVybiBNbWlvUmVhZDggKEJhc2UpOw0KPiA+ID4gPiArICBjYXNlIFBj aUNmZ1dpZHRoVWludDE2Og0KPiA+ID4gPiArICAgIHJldHVybiBNbWlvUmVhZDE2IChCYXNlKTsN Cj4gPiA+ID4gKyAgY2FzZSBQY2lDZmdXaWR0aFVpbnQzMjoNCj4gPiA+ID4gKyAgICByZXR1cm4g TW1pb1JlYWQzMiAoQmFzZSk7DQo+ID4gPiA+ICsgIGRlZmF1bHQ6DQo+ID4gPiA+ICsgICAgQVNT RVJUIChGQUxTRSk7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4g Q0hBUl9OVUxMOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4g KyAgSW50ZXJuYWwgd29ya2VyIGZ1bmN0aW9uIHRvIHdyaXRlcyBhIFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVyLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbSAgQWRkcmVzcyBUaGUgYWRk cmVzcyB0aGF0IGVuY29kZXMgdGhlIFNlZ21lbnQsIFBDSSBCdXMsDQo+IERldmljZSwNCj4gPiA+ ID4gKyAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIGFuZCBSZWdpc3Rlci4NCj4gPiA+ID4gKyAg QHBhcmFtICBXaWR0aCAgIFRoZSB3aWR0aCBvZiBkYXRhIHRvIHdyaXRlDQo+ID4gPiA+ICsgIEBw YXJhbSAgRGF0YSAgICBUaGUgdmFsdWUgdG8gd3JpdGUuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg QHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArU1RBVElDDQo+ID4gPiA+ICtV SU5UMzINCj4gPiA+ID4gK1BjaVNlZ21lbnRMaWJXcml0ZVdvcmtlciAoDQo+ID4gPiA+ICsgIElO ICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywNCj4gPiA+ID4gKyAgSU4gIFBD SV9DRkdfV0lEVEggICAgICAgICAgICAgICBXaWR0aCwNCj4gPiA+ID4gKyAgSU4gIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICBEYXRhDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ ID4gKyAgVUlOVDY0ICAgIEJhc2U7DQo+ID4gPiA+ICsgIFVJTlQzMiAgICBPZmZzZXQ7DQo+ID4g PiA+ICsgIFVJTlQxNiAgICBTZWdtZW50Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFNlZ21lbnQg PSAoQWRkcmVzcyA+PiAzMik7DQo+ID4gPiA+ICsgIE9mZnNldCA9IChBZGRyZXNzICYgMHhmZmYg KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBCYXNlID0gUGNpU2VnbWVudExpYkdldENvbmZpZ0Jh c2UgKEFkZHJlc3MsIFNlZ21lbnQsIE9mZnNldCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8g aWdub3JlIGRldmljZXMgPiAwIG9uIGJ1cyAwDQo+ID4gPiA+ICsgIGlmICgoQWRkcmVzcyAmIDB4 ZmYwMDAwMCkgPT0gMCAmJiAoQWRkcmVzcyAmIDB4ZjgwMDApICE9IDApIHsNCj4gPiA+ID4gKyAg ICByZXR1cm4gRGF0YTsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vIGln bm9yZSBkZXZpY2UgPiAwIG9uIGJ1cyAxDQo+ID4gPiA+ICsgIGlmICgoQWRkcmVzcyAmIDB4ZmUw MDAwMCkgPT0gMCAmJiAoQWRkcmVzcyAmIDB4ZjgwMDApICE9IDApIHsNCj4gPiA+ID4gKyAgICBy ZXR1cm4gTUFYX1VJTlQzMjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHN3 aXRjaCAoV2lkdGgpIHsNCj4gPiA+ID4gKyAgY2FzZSBQY2lDZmdXaWR0aFVpbnQ4Og0KPiA+ID4g PiArICAgIE1taW9Xcml0ZTggKEJhc2UgLCBEYXRhKTsNCj4gPiA+ID4gKyAgICBicmVhazsNCj4g PiA+ID4gKyAgY2FzZSBQY2lDZmdXaWR0aFVpbnQxNjoNCj4gPiA+ID4gKyAgICBNbWlvV3JpdGUx NiAoQmFzZSAsIERhdGEpOw0KPiA+ID4gPiArICAgIGJyZWFrOw0KPiA+ID4gPiArICBjYXNlIFBj aUNmZ1dpZHRoVWludDMyOg0KPiA+ID4gPiArICAgIE1taW9Xcml0ZTMyIChCYXNlICwgRGF0YSk7 DQo+ID4gPiA+ICsgICAgYnJlYWs7DQo+ID4gPiA+ICsgIGRlZmF1bHQ6DQo+ID4gPiA+ICsgICAg QVNTRVJUIChGQUxTRSk7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1 cm4gRGF0YTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsg IFJlZ2lzdGVyIGEgUENJIGRldmljZSBzbyBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgbWF5 IGJlDQo+ID4gPiA+ICthY2Nlc3NlZCBhZnRlcg0KPiA+ID4gPiArICBTZXRWaXJ0dWFsQWRkcmVz c01hcCgpLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFk ZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFy YW0gIEFkZHJlc3MgICAgICAgICAgICAgICAgICBUaGUgYWRkcmVzcyB0aGF0IGVuY29kZXMgdGhl IFBDSSBCdXMsDQo+IERldmljZSwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRnVuY3Rpb24gYW5kIFJlZ2lzdGVyLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBy ZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICAgIFRoZSBQQ0kgZGV2aWNlIHdhcyByZWdpc3Rl cmVkIGZvcg0KPiBydW50aW1lDQo+ID4gPiBhY2Nlc3MuDQo+ID4gPiA+ICsgIEByZXR2YWwgUkVU VVJOX1VOU1VQUE9SVEVEICAgICAgIEFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gY2FsbCB0aGlzDQo+ ID4gPiBmdW5jdGlvbg0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhZnRlciBFeGl0Qm9vdFNlcnZpY2VzKCkuDQo+ID4gPiA+ICsgIEByZXR2YWwgUkVUVVJOX1VO U1VQUE9SVEVEICAgICAgIFRoZSByZXNvdXJjZXMgcmVxdWlyZWQgdG8gYWNjZXNzDQo+IHRoZQ0K PiA+ID4gUENJIGRldmljZQ0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhdCBydW50aW1lIGNvdWxkIG5vdCBiZSBtYXBwZWQuDQo+ID4gPiA+ICsgIEByZXR2YWwg UkVUVVJOX09VVF9PRl9SRVNPVVJDRVMgIFRoZXJlIGFyZSBub3QgZW5vdWdoDQo+IHJlc291cmNl cw0KPiA+ID4gYXZhaWxhYmxlIHRvDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbXBsZXRlIHRoZSByZWdpc3RyYXRpb24uDQo+ID4gPiA+ICsNCj4gPiA+ID4g KyoqLw0KPiA+ID4gPiArUkVUVVJOX1NUQVRVUw0KPiA+ID4gPiArRUZJQVBJDQo+ID4gPiA+ICtQ Y2lTZWdtZW50UmVnaXN0ZXJGb3JSdW50aW1lQWNjZXNzICgNCj4gPiA+ID4gKyAgSU4gVUlOVE4g IEFkZHJlc3MNCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBBU1NFUlRfSU5W QUxJRF9QQ0lfU0VHTUVOVF9BRERSRVNTIChBZGRyZXNzLCAwKTsNCj4gPiA+ID4gKyAgcmV0dXJu IFJFVFVSTl9VTlNVUFBPUlRFRDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoq DQo+ID4gPiA+ICsgIFJlYWRzIGFuIDgtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0K PiA+ID4gPiArDQo+ID4gPiA+ICsgIFJlYWRzIGFuZCByZXR1cm5zIHRoZSA4LWJpdCBQQ0kgY29u ZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkNCj4gQWRkcmVzcy4NCj4gPiA+ID4gKw0K PiA+ID4gPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4g QVNTRVJUKCkuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtICBBZGRyZXNzICAgVGhlIGFk ZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVzLA0KPiBEZXZpY2UsDQo+ID4g PiBGdW5jdGlvbiwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgYW5kIFJlZ2lzdGVyLg0K PiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR1cm4gVGhlIDgtYml0IFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8N Cj4gPiA+ID4gK1VJTlQ4DQo+ID4gPiA+ICtFRklBUEkNCj4gPiA+ID4gK1BjaVNlZ21lbnRSZWFk OCAoDQo+ID4gPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcw0KPiA+ ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIEFTU0VSVF9JTlZBTElEX1BDSV9TRUdN RU5UX0FERFJFU1MgKEFkZHJlc3MsIDApOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiAo VUlOVDgpIFBjaVNlZ21lbnRMaWJSZWFkV29ya2VyIChBZGRyZXNzLA0KPiA+ID4gPiArUGNpQ2Zn V2lkdGhVaW50OCk7IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFdyaXRl cyBhbiA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4NCj4gPiA+ID4gKw0KPiA+ID4g PiArICBXcml0ZXMgdGhlIDgtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmll ZCBieQ0KPiA+ID4gPiArIEFkZHJlc3Mgd2l0aCB0aGUNCj4gPiA+IHZhbHVlIHNwZWNpZmllZCBi eSBWYWx1ZS4NCj4gPiA+ID4gKyAgVmFsdWUgaXMgcmV0dXJuZWQuICBUaGlzIGZ1bmN0aW9uIG11 c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFBDSQ0KPiA+ID4gPiArIHJlYWQgYW5kIHdyaXRlDQo+ID4g PiBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIElmIGFu eSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ ID4gKw0KPiA+ID4gPiArICBAcGFyYW0gIEFkZHJlc3MgICAgIFRoZSBhZGRyZXNzIHRoYXQgZW5j b2RlcyB0aGUgUENJIFNlZ21lbnQsIEJ1cywNCj4gRGV2aWNlLA0KPiA+ID4gRnVuY3Rpb24sIGFu ZCBSZWdpc3Rlci4NCj4gPiA+ID4gKyAgQHBhcmFtICBWYWx1ZSAgICAgICBUaGUgdmFsdWUgdG8g d3JpdGUuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiB0 byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoq Lw0KPiA+ID4gPiArVUlOVDgNCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArUGNpU2VnbWVudFdy aXRlOCAoDQo+ID4gPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywN Cj4gPiA+ID4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0KPiA+ID4gPiAr ICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIEFTU0VSVF9JTlZBTElEX1BDSV9TRUdNRU5UX0FE RFJFU1MgKEFkZHJlc3MsIDApOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiAoVUlOVDgp IFBjaVNlZ21lbnRMaWJXcml0ZVdvcmtlciAoQWRkcmVzcywNCj4gPiA+ID4gK1BjaUNmZ1dpZHRo VWludDgsIFZhbHVlKTsgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgUmVh ZHMgYSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyAgUmVhZHMgYW5kIHJldHVybnMgdGhlIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdp c3RlciBzcGVjaWZpZWQgYnkNCj4gQWRkcmVzcy4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBJZiBh bnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuDQo+ID4g PiA+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRo ZW4gQVNTRVJUKCkuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtICBBZGRyZXNzICAgVGhl IGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVzLA0KPiBEZXZpY2UsDQo+ ID4gPiBGdW5jdGlvbiwgYW5kIFJlZ2lzdGVyLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR1 cm4gVGhlIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRk cmVzcy4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtVSU5UMTYNCj4gPiA+ID4g K0VGSUFQSQ0KPiA+ID4gPiArUGNpU2VnbWVudFJlYWQxNiAoDQo+ID4gPiA+ICsgIElOIFVJTlQ2 NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcw0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ ID4gPiA+ICsgIEFTU0VSVF9JTlZBTElEX1BDSV9TRUdNRU5UX0FERFJFU1MgKEFkZHJlc3MsIDEp Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiAoVUlOVDE2KSBQY2lTZWdtZW50TGliUmVh ZFdvcmtlciAoQWRkcmVzcywNCj4gPiA+ID4gK1BjaUNmZ1dpZHRoVWludDE2KTsgfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgV3JpdGVzIGEgMTYtYml0IFBDSSBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFdyaXRlcyB0aGUgMTYtYml0 IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieQ0KPiA+ID4gPiArIEFkZHJl c3Mgd2l0aCB0aGUgIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4NCj4gPiA+ID4gKw0KPiA+ID4g PiArICBWYWx1ZSBpcyByZXR1cm5lZC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBJZiBhbnkgcmVz ZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+ICsg IElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNT RVJUKCkuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtICBBZGRyZXNzICAgICBUaGUgYWRk cmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBTZWdtZW50LCBCdXMsDQo+IERldmljZSwNCj4gPiA+ IEZ1bmN0aW9uLCBhbmQgUmVnaXN0ZXIuDQo+ID4gPiA+ICsgIEBwYXJhbSAgVmFsdWUgICAgICAg VGhlIHZhbHVlIHRvIHdyaXRlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR1cm4gVGhlIHBh cmFtZXRlciBvZiBWYWx1ZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtVSU5U MTYNCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArUGNpU2VnbWVudFdyaXRlMTYgKA0KPiA+ID4g PiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+ID4gPiA+ICsgIElO IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgVmFsdWUNCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiAr ew0KPiA+ID4gPiArICBBU1NFUlRfSU5WQUxJRF9QQ0lfU0VHTUVOVF9BRERSRVNTIChBZGRyZXNz LCAxKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4gKFVJTlQxNikgUGNpU2VnbWVudExp YldyaXRlV29ya2VyIChBZGRyZXNzLA0KPiA+ID4gPiArUGNpQ2ZnV2lkdGhVaW50MTYsIFZhbHVl KTsgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgUmVhZHMgYSAzMi1iaXQg UENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgUmVhZHMg YW5kIHJldHVybnMgdGhlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZp ZWQgYnkNCj4gQWRkcmVzcy4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBJZiBhbnkgcmVzZXJ2ZWQg Yml0cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+ICsgIElmIEFk ZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCku DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtICBBZGRyZXNzICAgVGhlIGFkZHJlc3MgdGhh dCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVzLA0KPiBEZXZpY2UsDQo+ID4gPiBGdW5jdGlv biwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgYW5kIFJlZ2lzdGVyLg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIEByZXR1cm4gVGhlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rl ciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ ICtVSU5UMzINCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArUGNpU2VnbWVudFJlYWQzMiAoDQo+ ID4gPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcw0KPiA+ID4gPiAr ICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIEFTU0VSVF9JTlZBTElEX1BDSV9TRUdNRU5UX0FE RFJFU1MgKEFkZHJlc3MsIDMpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBQY2lTZWdt ZW50TGliUmVhZFdvcmtlciAoQWRkcmVzcywgUGNpQ2ZnV2lkdGhVaW50MzIpOyB9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBXcml0ZXMgYSAzMi1iaXQgUENJIGNvbmZpZ3Vy YXRpb24gcmVnaXN0ZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgV3JpdGVzIHRoZSAzMi1iaXQg UENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5DQo+ID4gPiA+ICsgQWRkcmVz cyB3aXRoIHRoZSAgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLg0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIFZhbHVlIGlzIHJldHVybmVkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIElmIGFueSByZXNl cnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gKyAg SWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbiBBU1NF UlQoKS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW0gIEFkZHJlc3MgICAgIFRoZSBhZGRy ZXNzIHRoYXQgZW5jb2RlcyB0aGUgUENJIFNlZ21lbnQsIEJ1cywNCj4gRGV2aWNlLA0KPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uLCBhbmQgUmVnaXN0ZXIuDQo+ID4gPiA+ ICsgIEBwYXJhbSAgVmFsdWUgICAgICAgVGhlIHZhbHVlIHRvIHdyaXRlLg0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIEByZXR1cm4gVGhlIHBhcmFtZXRlciBvZiBWYWx1ZS4NCj4gPiA+ID4gKw0KPiA+ ID4gPiArKiovDQo+ID4gPiA+ICtVSU5UMzINCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArUGNp U2VnbWVudFdyaXRlMzIgKA0KPiA+ID4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAg IEFkZHJlc3MsDQo+ID4gPiA+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgVmFsdWUN Cj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBBU1NFUlRfSU5WQUxJRF9QQ0lf U0VHTUVOVF9BRERSRVNTIChBZGRyZXNzLCAzKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1 cm4gUGNpU2VnbWVudExpYldyaXRlV29ya2VyIChBZGRyZXNzLCBQY2lDZmdXaWR0aFVpbnQzMiwN Cj4gPiA+ID4gK1ZhbHVlKTsgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAg UmVhZHMgYSByYW5nZSBvZiBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgaW50byBhIGNhbGxl ciBzdXBwbGllZCBidWZmZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgUmVhZHMgdGhlIHJhbmdl IG9mIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBzcGVjaWZpZWQgYnkNCj4gPiA+ID4gKyBT dGFydEFkZHJlc3MgYW5kICBTaXplIGludG8gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgQnVmZmVy LiBUaGlzDQo+ID4gPiA+ICsgZnVuY3Rpb24gb25seSBhbGxvd3MgdGhlIFBDSSAgY29uZmlndXJh dGlvbiByZWdpc3RlcnMgZnJvbSBhDQo+ID4gPiA+ICsgc2luZ2xlIFBDSSBmdW5jdGlvbiB0byBi ZSByZWFkLiBTaXplIGlzICByZXR1cm5lZC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBJZiBhbnkg cmVzZXJ2ZWQgYml0cyBpbiBTdGFydEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4NCj4g PiA+ID4gKyAgSWYgKChTdGFydEFkZHJlc3MgJiAweEZGRikgKyBTaXplKSA+IDB4MTAwMCwgdGhl biBBU1NFUlQoKS4NCj4gPiA+ID4gKyAgSWYgU2l6ZSA+IDAgYW5kIEJ1ZmZlciBpcyBOVUxMLCB0 aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbSAgU3RhcnRBZGRyZXNz ICBUaGUgc3RhcnRpbmcgYWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSQ0KPiA+ID4gPiArIFNl Z21lbnQsDQo+ID4gPiBCdXMsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBEZXZp Y2UsIEZ1bmN0aW9uIGFuZCBSZWdpc3Rlci4NCj4gPiA+ID4gKyAgQHBhcmFtICBTaXplICAgICAg ICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSB0cmFuc2Zlci4NCj4gPiA+ID4gKyAgQHBhcmFt ICBCdWZmZXIgICAgICAgIFRoZSBwb2ludGVyIHRvIGEgYnVmZmVyIHJlY2VpdmluZyB0aGUgZGF0 YSByZWFkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR1cm4gU2l6ZQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICsqKi8NCj4gPiA+ID4gK1VJTlRODQo+ID4gPiA+ICtFRklBUEkNCj4gPiA+ID4gK1Bj aVNlZ21lbnRSZWFkQnVmZmVyICgNCj4gPiA+ID4gKyAgSU4gIFVJTlQ2NCAgICAgICAgICAgICAg ICAgICBTdGFydEFkZHJlc3MsDQo+ID4gPiA+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgU2l6ZSwNCj4gPiA+ID4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAqQnVmZmVy DQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJldHVyblZhbHVlOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEFTU0VS VF9JTlZBTElEX1BDSV9TRUdNRU5UX0FERFJFU1MgKFN0YXJ0QWRkcmVzcywgMCk7ICBBU1NFUlQN Cj4gPiA+ID4gKyAoKChTdGFydEFkZHJlc3MgJiAweEZGRikgKyBTaXplKSA8PSBTSVpFXzRLQik7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKFNpemUgPT0gMCkgew0KPiA+ID4gPiArICAgIHJl dHVybiBTaXplOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQVNTRVJUIChC dWZmZXIgIT0gTlVMTCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgLy8g U2F2ZSBTaXplIGZvciByZXR1cm4NCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgUmV0dXJuVmFs dWUgPSBTaXplOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmICgoU3RhcnRBZGRyZXNzICYgQklU MCkgIT0gMCkgew0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgLy8gUmVhZCBhIGJ5dGUg aWYgU3RhcnRBZGRyZXNzIGlzIGJ5dGUgYWxpZ25lZA0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ ICsgICAgKih2b2xhdGlsZSBVSU5UOCAqKUJ1ZmZlciA9IFBjaVNlZ21lbnRSZWFkOCAoU3RhcnRB ZGRyZXNzKTsNCj4gPiA+ID4gKyAgICBTdGFydEFkZHJlc3MgKz0gc2l6ZW9mIChVSU5UOCk7DQo+ ID4gPiA+ICsgICAgU2l6ZSAtPSBzaXplb2YgKFVJTlQ4KTsNCj4gPiA+ID4gKyAgICBCdWZmZXIg PSAoVUlOVDgqKUJ1ZmZlciArIEJJVDA7ICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKFNp emUgPj0gc2l6ZW9mIChVSU5UMTYpICYmIChTdGFydEFkZHJlc3MgJiBCSVQxKSAhPSAwKSB7DQo+ ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICAvLyBSZWFkIGEgd29yZCBpZiBTdGFydEFkZHJl c3MgaXMgd29yZCBhbGlnbmVkDQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICBXcml0ZVVu YWxpZ25lZDE2IChCdWZmZXIsIFBjaVNlZ21lbnRSZWFkMTYgKFN0YXJ0QWRkcmVzcykpOw0KPiA+ ID4gPiArICAgIFN0YXJ0QWRkcmVzcyArPSBzaXplb2YgKFVJTlQxNik7DQo+ID4gPiA+ICsgICAg U2l6ZSAtPSBzaXplb2YgKFVJTlQxNik7DQo+ID4gPiA+ICsgICAgQnVmZmVyID0gKFVJTlQxNiop QnVmZmVyICsgQklUMDsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICB3aGlsZSAoU2l6ZSA+PSBz aXplb2YgKFVJTlQzMikpIHsNCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIC8vIFJlYWQg YXMgbWFueSBkb3VibGUgd29yZHMgYXMgcG9zc2libGUNCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4g PiArICAgIFdyaXRlVW5hbGlnbmVkMzIgKEJ1ZmZlciwgUGNpU2VnbWVudFJlYWQzMiAoU3RhcnRB ZGRyZXNzKSk7DQo+ID4gPiA+ICsgICAgU3RhcnRBZGRyZXNzICs9IHNpemVvZiAoVUlOVDMyKTsN Cj4gPiA+ID4gKyAgICBTaXplIC09IHNpemVvZiAoVUlOVDMyKTsNCj4gPiA+ID4gKyAgICBCdWZm ZXIgPSAoVUlOVDMyKilCdWZmZXIgKyBCSVQwOyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlm IChTaXplID49IHNpemVvZiAoVUlOVDE2KSkgew0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsg ICAgLy8gUmVhZCB0aGUgbGFzdCByZW1haW5pbmcgd29yZCBpZiBleGlzdA0KPiA+ID4gPiArICAg IC8vDQo+ID4gPiA+ICsgICAgV3JpdGVVbmFsaWduZWQxNiAoQnVmZmVyLCBQY2lTZWdtZW50UmVh ZDE2IChTdGFydEFkZHJlc3MpKTsNCj4gPiA+ID4gKyAgICBTdGFydEFkZHJlc3MgKz0gc2l6ZW9m IChVSU5UMTYpOw0KPiA+ID4gPiArICAgIFNpemUgLT0gc2l6ZW9mIChVSU5UMTYpOw0KPiA+ID4g PiArICAgIEJ1ZmZlciA9IChVSU5UMTYqKUJ1ZmZlciArIEJJVDA7ICB9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgaWYgKFNpemUgPj0gc2l6ZW9mIChVSU5UOCkpIHsNCj4gPiA+ID4gKyAgICAvLw0K PiA+ID4gPiArICAgIC8vIFJlYWQgdGhlIGxhc3QgcmVtYWluaW5nIGJ5dGUgaWYgZXhpc3QNCj4g PiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgICoodm9sYXRpbGUgVUlOVDggKilCdWZmZXIgPSBQ Y2lTZWdtZW50UmVhZDggKFN0YXJ0QWRkcmVzcyk7DQo+ID4gPiA+ICsgfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIHJldHVybiBSZXR1cm5WYWx1ZTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgQ29waWVzIHRoZSBkYXRhIGluIGEgY2Fs bGVyIHN1cHBsaWVkIGJ1ZmZlciB0byBhIHNwZWNpZmllZA0KPiA+ID4gPiArcmFuZ2Ugb2YgUENJ DQo+ID4gPiA+ICsgIGNvbmZpZ3VyYXRpb24gc3BhY2UuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg V3JpdGVzIHRoZSByYW5nZSBvZiBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgc3BlY2lmaWVk IGJ5DQo+ID4gPiA+ICsgU3RhcnRBZGRyZXNzIGFuZCAgU2l6ZSBmcm9tIHRoZSBidWZmZXIgc3Bl Y2lmaWVkIGJ5IEJ1ZmZlci4gVGhpcw0KPiA+ID4gPiArIGZ1bmN0aW9uIG9ubHkgYWxsb3dzIHRo ZSBQQ0kgIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGZyb20gYQ0KPiA+ID4gPiArIHNpbmdsZSBQ Q0kgZnVuY3Rpb24gdG8gYmUgd3JpdHRlbi4gU2l6ZSBpcyAgcmV0dXJuZWQuDQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgSWYgYW55IHJlc2VydmVkIGJpdHMgaW4gU3RhcnRBZGRyZXNzIGFyZSBzZXQs IHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+ICsgIElmICgoU3RhcnRBZGRyZXNzICYgMHhGRkYpICsg U2l6ZSkgPiAweDEwMDAsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+ICsgIElmIFNpemUgPiAwIGFu ZCBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBA cGFyYW0gIFN0YXJ0QWRkcmVzcyAgVGhlIHN0YXJ0aW5nIGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRo ZSBQQ0kNCj4gPiA+ID4gKyBTZWdtZW50LA0KPiA+ID4gQnVzLA0KPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgRGV2aWNlLCBGdW5jdGlvbiBhbmQgUmVnaXN0ZXIuDQo+ID4gPiA+ICsg IEBwYXJhbSAgU2l6ZSAgICAgICAgICBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgdHJhbnNmZXIu DQo+ID4gPiA+ICsgIEBwYXJhbSAgQnVmZmVyICAgICAgICBUaGUgcG9pbnRlciB0byBhIGJ1ZmZl ciBjb250YWluaW5nIHRoZSBkYXRhIHRvIHdyaXRlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBy ZXR1cm4gVGhlIHBhcmFtZXRlciBvZiBTaXplLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4g PiA+ID4gK1VJTlRODQo+ID4gPiA+ICtFRklBUEkNCj4gPiA+ID4gK1BjaVNlZ21lbnRXcml0ZUJ1 ZmZlciAoDQo+ID4gPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgU3RhcnRBZGRy ZXNzLA0KPiA+ID4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFNpemUsDQo+ID4g PiA+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcg0KPiA+ID4gPiArICAp DQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZXR1cm5WYWx1ZTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBBU1NFUlRfSU5WQUxJRF9QQ0lf U0VHTUVOVF9BRERSRVNTIChTdGFydEFkZHJlc3MsIDApOyAgQVNTRVJUDQo+ID4gPiA+ICsgKCgo U3RhcnRBZGRyZXNzICYgMHhGRkYpICsgU2l6ZSkgPD0gU0laRV80S0IpOw0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIGlmIChTaXplID09IDApIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gU2l6ZTsNCj4g PiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEFTU0VSVCAoQnVmZmVyICE9IE5VTEwp Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIFNhdmUgU2l6ZSBmb3Ig cmV0dXJuDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIFJldHVyblZhbHVlID0gU2l6ZTsNCj4g PiA+ID4gKw0KPiA+ID4gPiArICBpZiAoKFN0YXJ0QWRkcmVzcyAmIEJJVDApICE9IDApIHsNCj4g PiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIC8vIFdyaXRlIGEgYnl0ZSBpZiBTdGFydEFkZHJl c3MgaXMgYnl0ZSBhbGlnbmVkDQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICBQY2lTZWdt ZW50V3JpdGU4IChTdGFydEFkZHJlc3MsICooVUlOVDgqKUJ1ZmZlcik7DQo+ID4gPiA+ICsgICAg U3RhcnRBZGRyZXNzICs9IHNpemVvZiAoVUlOVDgpOw0KPiA+ID4gPiArICAgIFNpemUgLT0gc2l6 ZW9mIChVSU5UOCk7DQo+ID4gPiA+ICsgICAgQnVmZmVyID0gKFVJTlQ4KilCdWZmZXIgKyBCSVQw OyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIChTaXplID49IHNpemVvZiAoVUlOVDE2KSAm JiAoU3RhcnRBZGRyZXNzICYgQklUMSkgIT0gMCkgew0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ ICsgICAgLy8gV3JpdGUgYSB3b3JkIGlmIFN0YXJ0QWRkcmVzcyBpcyB3b3JkIGFsaWduZWQNCj4g PiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIFBjaVNlZ21lbnRXcml0ZTE2IChTdGFydEFkZHJl c3MsIFJlYWRVbmFsaWduZWQxNiAoQnVmZmVyKSk7DQo+ID4gPiA+ICsgICAgU3RhcnRBZGRyZXNz ICs9IHNpemVvZiAoVUlOVDE2KTsNCj4gPiA+ID4gKyAgICBTaXplIC09IHNpemVvZiAoVUlOVDE2 KTsNCj4gPiA+ID4gKyAgICBCdWZmZXIgPSAoVUlOVDE2KilCdWZmZXIgKyBCSVQwOyAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIHdoaWxlIChTaXplID49IHNpemVvZiAoVUlOVDMyKSkgew0KPiA+ ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgLy8gV3JpdGUgYXMgbWFueSBkb3VibGUgd29yZHMg YXMgcG9zc2libGUNCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIFBjaVNlZ21lbnRXcml0 ZTMyIChTdGFydEFkZHJlc3MsIFJlYWRVbmFsaWduZWQzMiAoQnVmZmVyKSk7DQo+ID4gPiA+ICsg ICAgU3RhcnRBZGRyZXNzICs9IHNpemVvZiAoVUlOVDMyKTsNCj4gPiA+ID4gKyAgICBTaXplIC09 IHNpemVvZiAoVUlOVDMyKTsNCj4gPiA+ID4gKyAgICBCdWZmZXIgPSAoVUlOVDMyKilCdWZmZXIg KyBCSVQwOyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIChTaXplID49IHNpemVvZiAoVUlO VDE2KSkgew0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgLy8gV3JpdGUgdGhlIGxhc3Qg cmVtYWluaW5nIHdvcmQgaWYgZXhpc3QNCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIFBj aVNlZ21lbnRXcml0ZTE2IChTdGFydEFkZHJlc3MsIFJlYWRVbmFsaWduZWQxNiAoQnVmZmVyKSk7 DQo+ID4gPiA+ICsgICAgU3RhcnRBZGRyZXNzICs9IHNpemVvZiAoVUlOVDE2KTsNCj4gPiA+ID4g KyAgICBTaXplIC09IHNpemVvZiAoVUlOVDE2KTsNCj4gPiA+ID4gKyAgICBCdWZmZXIgPSAoVUlO VDE2KilCdWZmZXIgKyBCSVQwOyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIChTaXplID49 IHNpemVvZiAoVUlOVDgpKSB7DQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICAvLyBXcml0 ZSB0aGUgbGFzdCByZW1haW5pbmcgYnl0ZSBpZiBleGlzdA0KPiA+ID4gPiArICAgIC8vDQo+ID4g PiA+ICsgICAgUGNpU2VnbWVudFdyaXRlOCAoU3RhcnRBZGRyZXNzLCAqKFVJTlQ4KilCdWZmZXIp OyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBSZXR1cm5WYWx1ZTsNCj4gPiA+ID4g K30NCj4gPiA+ID4gKw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArUGNpU2VnTGliSW5p dCAoDQo+ID4gPiA+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ID4g PiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4gPiA+ID4gKyAgKQ0KPiA+ ID4gPiArew0KPiA+ID4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiA+ICt9DQo+ID4g PiA+DQo+ID4NCg==