Return-Path: X-Original-To: apmail-cordova-dev-archive@www.apache.org Delivered-To: apmail-cordova-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 0DB501742E for ; Wed, 25 Mar 2015 05:50:34 +0000 (UTC) Received: (qmail 56258 invoked by uid 500); 25 Mar 2015 05:50:27 -0000 Delivered-To: apmail-cordova-dev-archive@cordova.apache.org Received: (qmail 56217 invoked by uid 500); 25 Mar 2015 05:50:27 -0000 Mailing-List: contact dev-help@cordova.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cordova.apache.org Delivered-To: mailing list dev@cordova.apache.org Received: (qmail 56205 invoked by uid 99); 25 Mar 2015 05:50:27 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 Mar 2015 05:50:27 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of Tim.Barham@microsoft.com designates 157.56.110.146 as permitted sender) Received: from [157.56.110.146] (HELO na01-bn1-obe.outbound.protection.outlook.com) (157.56.110.146) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 25 Mar 2015 05:50:01 +0000 Received: from BN3PR0301CA0038.namprd03.prod.outlook.com (25.160.180.176) by CY1PR0301MB0651.namprd03.prod.outlook.com (25.160.158.145) with Microsoft SMTP Server (TLS) id 15.1.118.21; Wed, 25 Mar 2015 05:49:58 +0000 Received: from BN1BFFO11FD043.protection.gbl (2a01:111:f400:7c10::1:128) by BN3PR0301CA0038.outlook.office365.com (2a01:111:e400:4000::48) with Microsoft SMTP Server (TLS) id 15.1.125.19 via Frontend Transport; Wed, 25 Mar 2015 05:49:57 +0000 Received: from 064-smtp-out.microsoft.com (206.191.228.164) by BN1BFFO11FD043.mail.protection.outlook.com (10.58.144.106) with Microsoft SMTP Server (TLS) id 15.1.125.13 via Frontend Transport; Wed, 25 Mar 2015 05:49:55 +0000 Received: from SINPRD3002MB008.064d.mgd.msft.net ([169.254.2.16]) by SINPRD3002HT003.064d.mgd.msft.net ([141.251.55.16]) with mapi id 14.16.0478.000; Wed, 25 Mar 2015 05:49:47 +0000 From: Tim Barham To: "dev@cordova.apache.org" Subject: RE: Simulating Cordova plugins and device capabilities Thread-Topic: Simulating Cordova plugins and device capabilities Thread-Index: AdBhJjMYC4TIfTtNTUyIQ58HKC7XUAAdKtsAAPG+ypgAQqqRgAAFd/cAAAUWv/A= Date: Wed, 25 Mar 2015 05:49:46 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [141.251.55.4] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-EOPAttributedMessage: 0 Received-SPF: Pass (protection.outlook.com: domain of microsoft.com designates 206.191.228.164 as permitted sender) receiver=protection.outlook.com; client-ip=206.191.228.164; helo=064-smtp-out.microsoft.com; Authentication-Results: spf=pass (sender IP is 206.191.228.164) smtp.mailfrom=Tim.Barham@microsoft.com; cordova.apache.org; dkim=none (message not signed) header.d=none; X-Forefront-Antispam-Report: CIP:206.191.228.164;CTRY:US;IPV:NLI;EFV:NLI;BMV:1;SFV:NSPM;SFS:(10019020)(6009001)(438002)(52604005)(76104003)(13464003)(189002)(51914003)(24454002)(53754006)(164054003)(377454003)(199003)(43784003)(252514010)(51704005)(107886001)(1720100001)(62966003)(15198665003)(93886004)(104016003)(77156002)(110136001)(15395725005)(2900100001)(2351001)(106466001)(102836002)(2950100001)(86146001)(450100001)(2920100001)(66066001)(54356999)(33656002)(50466002)(561944003)(86612001)(23676002)(19580405001)(86362001)(55846006)(46102003)(87936001)(6806004)(92566002)(22746005)(76176999)(2656002)(50986999)(22756005)(15975445007)(2501003)(19580395003)(79686002)(4068875011);DIR:OUT;SFP:1102;SCL:1;SRVR:CY1PR0301MB0651;H:064-smtp-out.microsoft.com;FPR:;SPF:Pass;MLV:sfv;MX:1;A:1;LANG:en; X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB0651; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5002010)(5005006);SRVR:CY1PR0301MB0651;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB0651; X-Forefront-PRVS: 052670E5A4 X-OriginatorOrg: microsoft.onmicrosoft.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2015 05:49:55.9243 (UTC) X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=72f988bf-86f1-41af-91ab-2d7cd011db47;Ip=[206.191.228.164];Helo=[064-smtp-out.microsoft.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB0651 X-Virus-Checked: Checked by ClamAV on apache.org VGhhbmtzIE1pY2hhbCBhbmQgSmVzc2UhDQoNCkplc3NlLCBpbiByZXNwb25zZSB0byB5b3VyIGFk ZGl0aW9uYWwgcXVlc3Rpb25zLi4uDQoNCj4gV2hhdCB2YWx1ZSBkb2VzIFJpcHBsZSAgaWYgdGhl IGJhc2ljIGZ1bmN0aW9uYWxpdHkgYmVjb21lcyBwYXJ0IG9mIGEgDQo+IGdlbmVyaWMgc2ltdWxh dGlvbiBpbnRlcmZhY2U/DQo+DQo+IFJpcHBsZSBjdXJyZW50bHkgd2lsbCBzaW11bGF0ZSBzY3Jl ZW4gc2l6ZXMgYmFzZWQgb24gZGV2aWNlIGNob2ljZS4gDQo+IENocm9tZSBkZXYgdG9vbHMgc3Vw cG9ydCBwaWNraW5nIGRpZmZlcmVudCBkZXZpY2Ugdmlld3BvcnRzIGFsc28uICANCj4gV2hlcmUg c2hvdWxkIHNvbWV0aGluZyBsaWtlIHRoaXMgbGl2ZT8NCg0KSnVsaWFuIEhvcm4gKEludGVsKSB3 b3VsZCBiZSBhIGdvb2QgcGVyc29uIHRvIGFuc3dlciB0aGF0IHF1ZXN0aW9uLi4uIEhlIGNhbiBz cGVhayBtb3JlIGVsb3F1ZW50bHkgdGhhbiBtZSB0byB3aHkgUmlwcGxlIGlzIChhbmQgd2lsbCBj b250aW51ZSB0byBiZSwgYWZ0ZXIgdGhpcyBwcm9wb3NhbCBpcyBpbXBsZW1lbnRlZCkgdGhlIGlk ZWFsIHBsYXRmb3JtIGZvciB0aGVtLiBBbmQgSSB0aGluayB0aGVyZSBpcyBkZWZpbml0ZWx5IHJv b20gZm9yIGJvdGggYXBwcm9hY2hlczoNCg0KKiBTb21lIGJhc2ljIHNpbXVsYXRpb24gaG9zdCBw cm92aWRlZCBieSBDb3Jkb3ZhLCB3aGljaCB3b3VsZG4ndCBwcm92aWRlIGFueSBvZiB0aGUgImRl dmljZSBjaG9vc2luZyIgY2FwYWJpbGl0aWVzIGFuZCBvdGhlciBmdW5jdGlvbmFsaXR5IHdlIGdl dCB3aXRoIFJpcHBsZSwgYnV0IHdvdWxkIHdvcmsgd2VsbCB3aXRoIGJyb3dzZXIgZGV2IHRvb2xz IChhbmQgcmVseSBvbiB0aGVtIHRvIHByb3ZpZGUgdGhhdCBmdW5jdGlvbmFsaXR5KS4NCiogQSBy aWNoZXIgZW52aXJvbm1lbnQgbGlrZSBSaXBwbGUsIHdoaWNoIGlzIGFsc28gd29ya3Mgd2VsbCBl bWJlZGRlZCBpbiB0b29scyBsaWtlIHRoZSBYREsuDQoNCkFub3RoZXIgaW50ZXJlc3RpbmcgcG9p bnQgaXMgdGhhdCBDaHJvbWUgZGV2aWNlIG1vZGUgbWVhbnMgeW91IGhhdmUgdGhlIENocm9tZSBk ZWJ1Z2dlciBvcGVuLCB3aGljaCBtZWFucyB5b3UgY2FuJ3QgdXNlIGFuIGV4dGVybmFsIGRlYnVn Z2VyLiBJZiB5b3VyIHdvcmtmbG93IGlzIGVudGlyZWx5IENocm9tZSwgdGhlbiB0aGF0IHdvcmtz IHZlcnkgd2VsbC4gSWYgd2UncmUgdGFsa2luZyBhYm91dCB1c2luZyBDaHJvbWUgd2l0aCBleHRl cm5hbCBkZWJ1Z2dlcnMgKGxpa2UgSW50ZWwgWERLIG9yIFZpc3VhbCBTdHVkaW8pLCB0aGVuIGRl dmljZSBtb2RlIGJlY29tZXMgcHJvYmxlbWF0aWMgYW5kIHNvbWV0aGluZyBsaWtlIFJpcHBsZSB3 b3JrcyB3ZWxsLg0KDQo+IElzIHRoaXMgZmVhdHVyZSB2YWx1YWJsZSBlbm91Z2ggdG8gd2FycmFu dCB0aGlzIGxlbmd0aHkgZGlzY3Vzc2lvbj8NCg0KSXQncyBjZXJ0YWlubHkgdmFsdWFibGUgdG8g Y2VydGFpbiBncm91cHMgOikuIEJ1dCBmb3IgbWUgSSB0aGluayBpdCdzIG1vcmUgYSBjYXNlIHRo YXQgaXQgd2lsbCBpbnZvbHZlIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIGVmZm9ydCBhbmQgSSB3 YW50IHRvIGdldCBzaWduIG9mZiBmcm9tIHRoZSBjb21tdW5pdHkgbm93IHJhdGhlciB0aGFuIHNw ZW5kaW5nIGEgYnVuY2ggb2YgdGltZSBnb2luZyBkb3duIGEgcGF0aCB0aGF0IG1pZ2h0IGdldCBy ZWplY3RlZCBkb3duIHRoZSBsaW5lLg0KDQpUaGFua3MgYWdhaW4hDQoNClRpbQ0KDQotLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogbW1vY255QGdvb2dsZS5jb20gW21haWx0bzptbW9j bnlAZ29vZ2xlLmNvbV0gT24gQmVoYWxmIE9mIE1pY2hhbCBNb2NueQ0KU2VudDogV2VkbmVzZGF5 LCBNYXJjaCAyNSwgMjAxNSA4OjMyIEFNDQpUbzogZGV2DQpTdWJqZWN0OiBSZTogU2ltdWxhdGlu ZyBDb3Jkb3ZhIHBsdWdpbnMgYW5kIGRldmljZSBjYXBhYmlsaXRpZXMNCg0KVGhpcyBpcyBleGNl cHRpb25hbGx5IGNvb2wgKGFuZCB0aGFua3MgZm9yIGRvaW5nIGEgdmlkZW8gZGVtb25zdHJhdGlv biwgZ3JlYXQgd2F5IHRvIGdldCB0aGUgcG9pbnQgYWNyb3NzKSENCg0KSSBhbHNvIGFncmVlIHdp dGggYWxsIHlvdXIgcG9pbnRzLCBhbmQgcmVhbGx5IHN1cHBvcnQgdGhpcyBhcHByb2FjaC4NClNw ZWNpZmljYWxseToNCg0KKzEgYnJvd3NlciBwbGF0Zm9ybSB3aWxsIGJlIHVzZWQgZm9yIGJvdGgg cHJvZCBhbmQgZGVidWdnaW5nLCBzbyBjYW5ub3QNCmhhdmUgYWx3YXlzLW9uIGVtdWxhdGlvbi4N CisxIHRvIGhhdmUgZW11bGF0aW9uIGhvb2tzIGluc2lkZSBjb3Jkb3ZhIGJyb3dzZXIgcGxhdGZv cm0gYW5kIGNvcmRvdmENCnBsdWdpbnMnIGJyb3dzZXIgdmVyc2lvbnMsIGJ1dCBoYXZlIHRoZW0g bm8tb3AgYnkgZGVmYXVsdC4NCisxIHRvIHN1cHBvcnQgYW55IGRvd25zdHJlYW0gZW11bGF0aW9u IGVtYmVkZGVycywgYW5kIHBlcmhhcHMgaGF2ZSBhIA0KK3ZlcnkNCmxpZ2h0d2VpZ2h0IGNvcmRv dmEgcHJvamVjdCAodGhvdWdoIHBlcmhhcHMgbm90IG5lY2Vzc2FyeSBiZXlvbmQgYSBzaW1wbGUg dGVzdGluZyBhcHApLg0KKzEgdG8gc3VnZ2VzdCBSaXBwbGUgYmVjb21lIGFuIGVtYmVkZGVyLg0K DQpJJ2xsIGFsc28gbm90ZSB0aGF0IE1pY3Jvc29mdCBpcyBvbmUgb2YgdGhlIHByaW1hcnkgc3Vw cG9ydGVycyBvZiBSaXBwbGUgcmVjZW50bHksIHNvIGlmIHRoZXkgdGhpbmsgdGhpcyBpcyBhIGdv b2QgZGlyZWN0aW9uLCB0aGF0IGlzIGEgc3Ryb25nIHNpZ25hbCB0byBtZS4gIEludGVsIGlzIGEg c2Vjb25kIHN0cm9uZyBzdXBwb3J0ZXIgb3IgcmlwcGxlIChhbnlvbmUgZWxzZT8pLCBhbmQgSSB0 aGluayB0aGV5IHdlcmUgb24gYm9hcmQgd2l0aCB0aGlzIGRpcmVjdGlvbiBhcyB3ZWxsICh0byBi dWlsZCBvbiB0b3Agb2YgYnJvd3NlciBwbGF0Zm9ybSkuDQoNCi1NaWNoYWwNCg0KDQoNCk9uIFR1 ZSwgTWFyIDI0LCAyMDE1IGF0IDM6NTUgUE0sIEplc3NlIDxwdXJwbGVjYWJiYWdlQGdtYWlsLmNv bT4gd3JvdGU6DQoNCj4gVGhhbmsgeW91IFRpbSBmb3IgdGhlIGJyaWVmIGV4cGxhbmF0aW9uISA7 KQ0KPg0KPiBJIGFncmVlIHdpdGggYWxsIHlvdXIgc3VtbWFyeSBwb2ludHMuDQo+DQo+IFNvbWUg bW9yZSBxdWVzdGlvbnM6DQo+DQo+IFdoYXQgdmFsdWUgZG9lcyBSaXBwbGUgIGlmIHRoZSBiYXNp YyBmdW5jdGlvbmFsaXR5IGJlY29tZXMgcGFydCBvZiBhIA0KPiBnZW5lcmljIHNpbXVsYXRpb24g aW50ZXJmYWNlPw0KPg0KPiBSaXBwbGUgY3VycmVudGx5IHdpbGwgc2ltdWxhdGUgc2NyZWVuIHNp emVzIGJhc2VkIG9uIGRldmljZSBjaG9pY2UuIA0KPiBDaHJvbWUgZGV2IHRvb2xzIHN1cHBvcnQg cGlja2luZyBkaWZmZXJlbnQgZGV2aWNlIHZpZXdwb3J0cyBhbHNvLiAgDQo+IFdoZXJlIHNob3Vs ZCBzb21ldGhpbmcgbGlrZSB0aGlzIGxpdmU/DQo+DQo+IElzIHRoaXMgZmVhdHVyZSB2YWx1YWJs ZSBlbm91Z2ggdG8gd2FycmFudCB0aGlzIGxlbmd0aHkgZGlzY3Vzc2lvbj8NCj4gSSBoYXZlIG5v IGlkZWEgaG93IHVzZWZ1bCB0aGlzIHdpbGwgYWN0dWFsbHkgYmUuIEFzIHNvbWVvbmUgd2hvIGhh cyANCj4gcmVsZWFzZWQgYXBwcyBmb3IgbW9zdCBvZiBvdXIgc3VwcG9ydGVkIHBsYXRmb3JtcyBJ IGhhdmUgbmV2ZXIgbmVlZGVkIA0KPiByaXBwbGUgb2YgYW55IG90aGVyIHNpbXVsYXRpb24sIHNo b3J0IG9mIHN0dWJiaW5nIGNvcmRvdmEtZXhlYyBhbmQgDQo+IHdvcmtpbmcgb3V0IGFsbCBteSBV SS9VWCBpbiBhIGJyb3dzZXIuICBJcyB0aGVyZSBzb21lIHdheSB3ZSBjYW4gbWVhc3VyZSB0aGUg bmVlZD8NCj4gR2l2ZW4gdGhhdCB0aGlzIGRvZXMgbm90IGFwcGVhciB0byBpbXBhY3QgY29yZG92 YSwganVzdCBzdXBwbGVtZW50IGl0LCANCj4geW91IHNob3VsZCBwcm9iYWJseSBqdXN0IGdvIGZv ciBpdC4gIEZpeGluZyBjb3Jkb3ZhLXNlcnZlIGFuZCBnZXR0aW5nIA0KPiBjb3Jkb3ZhLWJyb3dz ZXIgdG8gdXNlIGl0IGFyZSBhbHJlYWR5IGluIGRpc2N1c3Npb25zLCBzbyBtb3ZpbmcgDQo+IGZv cndhcmQgd2l0aCBhbm90aGVyIG1vZHVsZSAnY29yZG92YS1wbGF0Zm9ybS1zaW0nPyBzb3VuZHMg Z29vZCB0byBtZS4NCj4NCj4gQ2hlZXJzLA0KPiAgIEplc3NlDQo+DQo+DQo+DQo+IEBwdXJwbGVj YWJiYWdlDQo+IHJpc2luZ2ouY29tDQo+DQo+IE9uIE1vbiwgTWFyIDIzLCAyMDE1IGF0IDc6MDgg QU0sIFRpbSBCYXJoYW0gPFRpbS5CYXJoYW1AbWljcm9zb2Z0LmNvbT4NCj4gd3JvdGU6DQo+DQo+ ID4gSGV5IEplc3NlIC0gdGhhbmtzIGZvciB0aGUgZmVlZGJhY2shDQo+ID4NCj4gPiBGaXJzdCBJ J2QgbGlrZSB0byBhZGRyZXNzIHdoeSB3ZSB0aGluayB0aGlzIGJlbG9uZ3MgaW4gQ29yZG92YSAN Cj4gPiByYXRoZXINCj4gdGhhbg0KPiA+IFJpcHBsZToNCj4gPg0KPiA+ICouIFRoZSBmdW5jdGlv bmFsaXR5IGRlc2NyaWJlZCBpcyBjbG9zZWx5IHRpZWQgdG8gaG93IENvcmRvdmEgd29ya3MsIA0K PiA+IGFuZCB3ZSBmZWVsIGlzIGEgY2FwYWJpbGl0eSB0aGF0IHNob3VsZCBiZSBidWlsdCBpbnRv IENvcmRvdmEgLSANCj4gPiBzcGVjaWZpY2FsbHksIHRoYXQgQ29yZG92YSBwcm92aWRlIHRoZSBo b29rcyBuZWNlc3NhcnkgZm9yIGFueSANCj4gPiBhcmJpdHJhcnkgInNpbXVsYXRpb24gaG9zdCIg dG8gY29ubmVjdCB0by4NCj4gPiAqLiBXZSBkb24ndCBzZWUgdGhpcyBhcyBiZWluZyBhIFJpcHBs ZSByZXBsYWNlbWVudCwgcGVyIHNlLiBSYXRoZXIsIA0KPiA+IGlzIHRoaXMgbW9kZWwsIFJpcHBs ZSB3b3VsZCBiZWNvbWUgb25lIG9mIGFueSBudW1iZXIgb2YgInNpbXVsYXRpb24gaG9zdHMiDQo+ ID4gYnVpbHQgb24gdG9wIG9mIHRoaXMuDQo+ID4NCj4gPiBDb3Jkb3ZhIG1pZ2h0IGluY2x1ZGUg YSB2ZXJ5IGJhc2ljICJzaW11bGF0aW9uIGhvc3QiIG91dCBvZiB0aGUgYm94LA0KPiB3aGlsZQ0K PiA+IFJpcHBsZSB3b3VsZCByZW1haW4gYSBtdWNoIHJpY2hlciwgYnV0IHNlcGFyYXRlLCBwcm9q ZWN0IGJ1aWx0IG9uIA0KPiA+IHRvcCBvZiB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5Lg0KPiA+DQo+ ID4gV2h5IGRvIHdlIHNlZSB0aGUgbmVlZCBmb3IgdGhpcyB3aGVuIHdlIGFscmVhZHkgaGF2ZSBS aXBwbGU/IFJlYXNvbnMNCj4gPiBpbmNsdWRlOg0KPiA+DQo+ID4gKiBXZSB3YW50IHRvIG1ha2Ug aXQgZWFzeSB0byBlbWJlZCBhICJzaW11bGF0aW9uIGhvc3QiIGluIG90aGVyIA0KPiA+IGVudmly b25tZW50cy4gUmlwcGxlIGlzIGp1c3Qgb25lIGV4YW1wbGUuLiBBbHNvIHdpdGhpbiBhbiBJREUs IG9yIA0KPiA+IHdpdGhpbg0KPiBhDQo+ID4gYnJvd3NlcidzIGRldiB0b29scywgb3Igd2hhdGV2 ZXIuDQo+ID4gKiBBcyBtZW50aW9uZWQgYmVsb3csIHdlIHdhbnQgdG8gc2VwYXJhdGUgdGhlIHNp bXVsYXRpb24gVUkgZnJvbSB0aGUgDQo+ID4gYXBwIGl0c2VsZiB0byBzaW1wbGlmeSB0aGUgZGVi dWdnaW5nIGV4cGVyaWVuY2UuDQo+ID4gKiBXZSB3YW50IHRvIG1ha2UgaXQgZWFzaWx5IGV4dGVu c2libGUgLSBzcGVjaWZpY2FsbHkgYWxsb3cgcGx1Z2lucyANCj4gPiB0byBkZWZpbmUgdGhlaXIg c2ltdWxhdGlvbiBVSSBhbmQgaGF2ZSBpdCB3b3JrIGluIGFueSBzaW11bGF0aW9uIGhvc3QuDQo+ ID4NCj4gPiBSZWdhcmRpbmcgdGhlICJicm93c2VyIHZzIFJpcHBsZSIgdGhyZWFkIC0geWVhaCwg SSByZW1lbWJlciBpdCA6KS4gDQo+ID4gV2UNCj4gd2VyZQ0KPiA+IGZvbGxvd2luZyBpdCBhdCB0 aGUgdGltZSwgYW5kIGl0IGRlZmluaXRlbHkgaW5mbHVlbmNlZCB3aGF0IHdlIGFyZSANCj4gPiBw cm9wb3NpbmcuIFNvbWUgcG9pbnRzIG9uIHRoaXM6DQo+ID4NCj4gPiAqIFdlIGRvbid0IHRoaW5r IGl0IHNob3VsZCBiZSAiYnJvd3NlciB2cyBSaXBwbGUiLi4uIFdlIHRoaW5rIGl0IA0KPiA+IHNo b3VsZA0KPiBiZQ0KPiA+ICJSaXBwbGUgb24gdG9wIG9mIGJyb3dzZXIiIDopIC4uLiBidXQgbW9z dCBpbXBvcnRhbnRseSB3ZSBkb24ndCANCj4gPiBsaW1pdA0KPiB0aGlzDQo+ID4gdG8gUmlwcGxl LiBNYXkgc2ltdWxhdGlvbiBob3N0cyBwcm9saWZlcmF0ZSENCj4gPiAqIElmIEkgcmVjYWxsIHRo ZXJlIHdhcyBhbHNvIGRpc2N1c3Npb24gYWJvdXQgd2hldGhlciB0aGUgYnJvd3Nlcg0KPiBwbGF0 Zm9ybQ0KPiA+IGlzIHByaW1hcmlseSBhIGRlYnVnZ2luZyB0b29sIG9yIGEgcmVhbCBwcm9kdWN0 aW9uIGRlbGl2ZXJ5IA0KPiA+IHBsYXRmb3JtLiBPdXIgZmlybSBiZWxpZWYgaXMgdGhhdCBpdCBp cyBib3RoLiBXZSBjYW4gZWFzaWx5IHByb3ZpZGUgDQo+ID4gdGhlIGhvb2tzICh0aGUgJ2FwcCBo b3N0JyBhbmQgJ3NlcnZlcicgcGllY2VzKSBzbyBhIHJpY2ggZGVidWdnaW5nIA0KPiA+IGVudmly b25tZW50IGxpa2UgUmlwcGxlDQo+IGNhbg0KPiA+IGJlIGJ1aWx0IG9uIHRvcCBvZiBpdCAoYW5k LCBvZiBjb3Vyc2UsIGFsc28gb3BlbiB0aGUgZG9vciB0byBvdGhlciANCj4gPiBzaW11bGF0aW9u IGhvc3RzKSB3aXRob3V0IHRha2luZyBhbnl0aGluZyBhd2F5IGZyb20gaXQgYmVpbmcgYSByZWFs IA0KPiA+IGRlbGl2ZXJ5IHBsYXRmb3JtLg0KPiA+DQo+ID4gU28sIGluIHN1bW1hcnksIHRoaXMg aXMgaG93IEknbSB0aGlua2luZyBhYm91dCBpdDoNCj4gPg0KPiA+ICogVGhlIGJyb3dzZXIgcGxh dGZvcm0gY29udGludWVzIHRvIGJlIGEgcHJvZHVjdGlvbiBkZWxpdmVyeSANCj4gPiBwbGF0Zm9y bS4gSXQgZG9lc24ndCBwcm92aWRlIGFueSBVSSBmb3Igc2ltdWxhdGluZyBwbHVnaW5zLiBQbHVn aW5zIA0KPiA+IHNob3VsZCBhbHdheXMganVzdCBkbyB0aGUgInJlYWwgdGhpbmciLCBhbmQgbmV2 ZXIgcHJvdmlkZSBtb2NrIGRhdGEgb3IgYW55dGhpbmcgbGlrZSB0aGF0Lg0KPiA+ICogVGhlIGJy b3dzZXIgcGxhdGZvcm0sIHdoZW4gcnVuIGZyb20gdGhlIENvcmRvdmEgQ0xJLCBpcyBtb2RpZmll ZCANCj4gPiB0byBsYXVuY2ggZnJvbSBhIHNlcnZlci4gU29tZXRoaW5nIHdlJ2Qgd2FudCB0byBk byByZWdhcmRsZXNzLg0KPiA+ICogVGhhdCBzZXJ2ZXIgcHJvdmlkZXMgdGhlIGhvb2tzIGEgc2lt dWxhdGlvbiBob3N0IG5lZWRzIHRvIGRvIGl0cyANCj4gPiB0aGluZyAoYnV0LCBtb3N0IGxpa2Vs eSwgdGhvc2UgaG9va3Mgd291bGQgb25seSBiZSBhdmFpbGFibGUgaWYgdGhlIA0KPiA+IGFwcGxp Y2F0aW9uIHdhcyBsYXVuY2hlZCBpbiBhIG1vZGUgdG8gZXhwZWN0IHBsdWdpbiBzaW11bGF0aW9u KS4NCj4gPiAqIFRoZSBzaW11bGF0aW9uIGhvc3QgaXRzZWxmIGlzIGNvbXBsZXRlbHkgc2VwYXJh dGUgZnJvbSB0aGUgYnJvd3NlciANCj4gPiBwbGF0Zm9ybS4gQ29tcGxldGVseSBzZXBhcmF0ZSBm cm9tIENvcmRvdmEsIGluIGZhY3QsIHRob3VnaCANCj4gPiBwZXJzb25hbGx5DQo+IEknZA0KPiA+ IGFsc28gbG92ZSB0byBzZWUgYSBiYXNpYyBzaW11bGF0aW9uIGhvc3QgYXZhaWxhYmxlIGFzIHBh cnQgb2YgDQo+ID4gQ29yZG92YQ0KPiAoYnV0DQo+ID4gaW4gaXRzIG93biBtb2R1bGUpLg0KPiA+ DQo+ID4gVGltDQo+ID4NCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fDQo+ID4gRnJvbTogSmVzc2UgW3B1cnBsZWNhYmJhZ2VAZ21haWwuY29tXQ0KPiA+IFNlbnQ6 IFRodXJzZGF5LCBNYXJjaCAxOSwgMjAxNSAyOjQ0IEFNDQo+ID4gVG86IGRldkBjb3Jkb3ZhLmFw YWNoZS5vcmcNCj4gPiBTdWJqZWN0OiBSZTogU2ltdWxhdGluZyBDb3Jkb3ZhIHBsdWdpbnMgYW5k IGRldmljZSBjYXBhYmlsaXRpZXMNCj4gPg0KPiA+IEhpIFRpbSwNCj4gPg0KPiA+IE5pY2Ugd29y ay4gSSB3YXMgZ29pbmcgdG8gcG9pbnQgeW91IHRvd2FyZHMgUmlwcGxlWzFdLCB1bnRpbCBJIHNh dyANCj4gPiB5b3UNCj4gaGF2ZQ0KPiA+IHRoZSBtb3N0IHJlY2VudCBjb21taXQuICBDYW4geW91 IGVsYWJvcmF0ZSBvbiB3aHkvaG93IHlvdSBmZWVsIHRoaXMgDQo+ID4gZml0cyBpbnRvIGNvcmRv dmEgYW5kIG5vdCBpbnRvIHRoZSByaXBwbGUgcHJvamVjdD8NCj4gPg0KPiA+IFBlcnNvbmFsbHks IEkgdGhpbmsgaXQgaXMgYSBiZXR0ZXIgZml0IGluIHJpcHBsZSwgb3IgYXQgdGhlIG1pbmltdW0s IA0KPiA+IGFzIGEgc2VwYXJhdGUgbW9kdWxlL3JlcG8gaW4gY29yZG92YSB0aGF0IGNhbiBmdW5j dGlvbiBhbmQgYmUgYWRkZWQgDQo+ID4gaW5kZXBlbmRlbnRseS4NCj4gPg0KPiA+IFRoZXJlIGlz IGEgbGVuZ3RoeSBkaXNjdXNzaW9uIG9uIGJyb3dzZXIgdnMgcmlwcGxlIGhlcmUgWzJdDQo+ID4N Cj4gPiBbMV0gaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS9pbmN1YmF0b3ItcmlwcGxlDQo+ID4g WzJdIGh0dHA6Ly9jYWxsYmFjay5tYXJrbWFpbC5vcmcvdGhyZWFkL214d25qcDRsbno3a2Z6cnIN Cj4gPg0KPiA+DQo+ID4NCj4gPiBAcHVycGxlY2FiYmFnZQ0KPiA+IHJpc2luZ2ouY29tDQo+ID4N Cj4gPiBPbiBXZWQsIE1hciAxOCwgMjAxNSBhdCAyOjA0IEFNLCBUaW0gQmFyaGFtIA0KPiA+IDxU aW0uQmFyaGFtQG1pY3Jvc29mdC5jb20+DQo+ID4gd3JvdGU6DQo+ID4NCj4gPiA+IEhleSBldmVy eW9uZS4uLiBJIHdvdWxkIGxpa2UgdG8gaW50cm9kdWNlIGEgcHJvcG9zYWwgYW5kDQo+IHByb29m LW9mLWNvbmNlcHQNCj4gPiA+IHByb3RvdHlwZSB0aGF0IHdlIGhhdmUgYmVlbiB3b3JraW5nIG9u LiBUaGUgcHJvcG9zYWwgaXMgdG8gcHJvdmlkZSANCj4gPiA+IGEgdG9vbC9mZWF0dXJlIHRoYXQg YWxsb3dzIHlvdSB0byBzaW11bGF0ZSBDb3Jkb3ZhIHBsdWdpbnMgYW5kIA0KPiA+ID4gZGV2aWNl IGNhcGFiaWxpdGllcyB3aGVuIGEgQ29yZG92YSBhcHAgaXMgbGF1bmNoZWQgaW4geW91ciBkZXNr dG9wIGJyb3dzZXIuDQo+ID4gPg0KPiA+ID4gVGhlIGdvYWxzIGZvciB0aGlzIHByb3Bvc2FsIHdl cmU6DQo+ID4gPg0KPiA+ID4gMS4gS2VlcCB0aGUgc2ltdWxhdGlvbiBVSSBvdXQgb2YgdGhlIGFw cCdzIHdpbmRvdy4NCj4gPiA+IDIuIFByb3ZpZGUgYW4gZXh0ZW5zaWJsZSBtb2RlbCBmb3Igc2lt dWxhdGluZyBwbHVnaW5zIGFuZCBkZXZpY2UgDQo+ID4gPiBjYXBhYmlsaXRpZXMuDQo+ID4gPg0K PiA+ID4gSSd2ZSBjcmVhdGVkIHNvbWUgcmVzb3VyY2VzIHRvIGludHJvZHVjZSB0aGUgcHJvcG9z YWw6DQo+ID4gPg0KPiA+ID4gKiBEb2N1bWVudCBkZXNjcmliaW5nIHRoZSBwcm9wb3NhbCBhbmQg dGhlIHByb29mLW9mLWNvbmNlcHQgcHJvdG90eXBlOg0KPiA+ID4gaHR0cDovL2dvby5nbC9YSjI1 dkwNCj4gPiA+ICogU2hvcnQgdmlkZW8gZGVtb25zdHJhdGluZyB0aGUgcHJvdG90eXBlOiBodHRw Oi8vZ29vLmdsL05mOFVCcA0KPiA+ID4gKiBEb2N1bWVudCBkZXNjcmliaW5nIGhvdyB0byBpbnN0 YWxsIHRoZSBwcm90b3R5cGUgdG8gdHJ5IGl0IGZvcg0KPiA+IHlvdXJzZWxmOg0KPiA+ID4gaHR0 cDovL2dvby5nbC9NeWlOYXMNCj4gPiA+DQo+ID4gPiBJJ2QgbGlrZSB0byBlbXBoYXNpemUgdGhh dCB0aGUgcHJvdG90eXBlIHdhcyBkZXZlbG9wZWQgcHVyZWx5IGFzIGEgDQo+ID4gPiBwcm9vZi1v Zi1jb25jZXB0LCBhbmQgaXMgbm90IGludGVuZGVkIHRvIHN1Z2dlc3QgdGhlIGZpbmFsDQo+ID4g aW1wbGVtZW50YXRpb24uDQo+ID4gPg0KPiA+ID4gV2UnZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQg aWYgbWVtYmVycyBvZiB0aGUgQ29yZG92YSBjb21tdW5pdHkgDQo+ID4gPiBjb3VsZA0KPiB0YWtl DQo+ID4gPiBhIGxvb2sgYW5kIHByb3ZpZGUgZmVlZGJhY2sgLSBhbnkgYW5kIGFsbCBmZWVkYmFj ayBpcyB3ZWxjb21lISBCdXQgDQo+ID4gPiBhcyBhIHN0YXJ0aW5nIHBvaW50Og0KPiA+ID4NCj4g PiA+ICogV2hhdCBkbyB5b3UgdGhpbmsgb2YgdGhlIGlkZWEgaW4gZ2VuZXJhbD8NCj4gPiA+ICog V2hlcmUgc2hvdWxkIGl0IGxpdmU/IEluIGNvcmRvdmEtYnJvd3NlciAobGlrZSB0aGUgcHJvdG90 eXBlKT8gQSANCj4gPiA+IHNlcGFyYXRlIENvcmRvdmEgbW9kdWxlPyBFbnRpcmVseSBleHRlcm5h bCB0byBDb3Jkb3ZhPw0KPiA+ID4gKiBXaGF0IGFyZSB0aGUgbXVzdC1oYXZlIGZlYXR1cmVzIGZv ciBhbiBpbml0aWFsIHJlbGVhc2U/IEhvdyANCj4gPiA+IHdvdWxkIHdlIGxpa2UgdG8gc2VlIGl0 IGV2b2x2ZSBpbiB0aGUgZnV0dXJlPw0KPiA+ID4gKiBBbnkgdGhvdWdodHMgb24gaW1wbGVtZW50 YXRpb24gZGV0YWlscz8NCj4gPiA+DQo+ID4gPiBUaGFua3MsIGFuZCBsb29raW5nIGZvcndhcmQg dG8geW91ciBpbnB1dCENCj4gPiA+DQo+ID4gPiBUaW0NCj4gPiA+DQo+ID4gPg0KPiA+ID4gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQo+ID4gPiAtLS0gVG8gdW5zdWJzY3JpYmUsIGUtbWFpbDogZGV2LXVuc3Vic2NyaWJl QGNvcmRvdmEuYXBhY2hlLm9yZw0KPiA+ID4gRm9yIGFkZGl0aW9uYWwgY29tbWFuZHMsIGUtbWFp bDogZGV2LWhlbHBAY29yZG92YS5hcGFjaGUub3JnDQo+ID4gPg0KPiA+ID4NCj4gPiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KPiA+IC0gVG8gdW5zdWJzY3JpYmUsIGUtbWFpbDogZGV2LXVuc3Vic2NyaWJlQGNvcmRv dmEuYXBhY2hlLm9yZw0KPiA+IEZvciBhZGRpdGlvbmFsIGNvbW1hbmRzLCBlLW1haWw6IGRldi1o ZWxwQGNvcmRvdmEuYXBhY2hlLm9yZw0KPiA+DQo+ID4NCj4NCg== DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NClRvIHVuc3Vic2NyaWJlLCBlLW1haWw6IGRldi11bnN1YnNj cmliZUBjb3Jkb3ZhLmFwYWNoZS5vcmcNCkZvciBhZGRpdGlvbmFsIGNvbW1hbmRzLCBlLW1h aWw6IGRldi1oZWxwQGNvcmRvdmEuYXBhY2hlLm9yZw0K