From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42544) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a12gG-0000hw-6w for qemu-devel@nongnu.org; Mon, 23 Nov 2015 20:46:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a12gB-00049O-4Z for qemu-devel@nongnu.org; Mon, 23 Nov 2015 20:46:04 -0500 Message-ID: <1448329548.4574.47.camel@kernel.crashing.org> From: Benjamin Herrenschmidt Date: Tue, 24 Nov 2015 12:45:48 +1100 In-Reply-To: <20151120082158.GG7118@voom.redhat.com> References: <1447201710-10229-1-git-send-email-benh@kernel.crashing.org> <1447201710-10229-27-git-send-email-benh@kernel.crashing.org> <20151120082158.GG7118@voom.redhat.com> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: base64 Subject: Re: [Qemu-devel] [Qemu-ppc] [PATCH 26/77] ppc/pnv: Add skeletton PowerNV platform List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org T24gRnJpLCAyMDE1LTExLTIwIGF0IDE5OjIxICsxMTAwLCBEYXZpZCBHaWJzb24gd3JvdGU6 DQo+IE9uIFdlZCwgTm92IDExLCAyMDE1IGF0IDExOjI3OjM5QU0gKzExMDAsIEJlbmphbWlu IEhlcnJlbnNjaG1pZHQNCj4gd3JvdGU6DQo+ID4gTm8gZGV2aWNlcyB5ZXQsIG5vdCBldmVu IGFuIGludGVycnVwdCBjb250cm9sbGVyLCBqdXN0IHRvIGdldA0KPiA+IHN0YXJ0ZWQuDQo+ ID4gDQo+ID4gU2lnbmVkLW9mZi1ieTogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBr ZXJuZWwuY3Jhc2hpbmcub3JnPg0KPiA+IC0tLQ0KPiA+IMKgZGVmYXVsdC1jb25maWdzL3Bw YzY0LXNvZnRtbXUubWFrIHzCoMKgwqAxICsNCj4gPiDCoGh3L3BwYy9NYWtlZmlsZS5vYmpz wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAyICsNCj4gPiDCoGh3L3BwYy9w bnYuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCA2MDAN Cj4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+IMKgaW5j bHVkZS9ody9wcGMvcG52LmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAzNiAr KysNCj4gPiDCoDQgZmlsZXMgY2hhbmdlZCwgNjM5IGluc2VydGlvbnMoKykNCj4gPiDCoGNy ZWF0ZSBtb2RlIDEwMDY0NCBody9wcGMvcG52LmMNCj4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0 NCBpbmNsdWRlL2h3L3BwYy9wbnYuaA0KPiANCj4gTWFueSBvZiBteSBjb21tZW50cyBiZWxv dyBtYXkgYmUgbWFkZSBpcnJlbGV2YW50IGJ5IGxhdGVyIHBhdGNoZXMgaW4NCj4gdGhlIHNl cmllcy4NCg0KSGVoLCB3ZWxsIHRoZXJlIGlzIHdoZXJlIHRoZSAibWVhdCIgb2YgdGhlIG5l dyBwbGF0Zm9ybSBzdGFydHMgc2hvd2luZw0KdXAgOi0pDQoNCsKgLi4uLy4uLg0KDQo+ID4g KyNkZWZpbmUgX0ZEVChleHApIFwNCj4gPiArwqDCoMKgwqBkbyB7IFwNCj4gPiArwqDCoMKg wqDCoMKgwqDCoGludCByZXQgPSAoZXhwKTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoFwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGVycm9yIGNyZWF0aW5nIGRldmljZSB0cmVlOiAl czogJXNcbiIsIFwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCNleHAsIGZkdF9zdHJlcnJvcihyZXQpKTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoFwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXhp dCgxKTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXA0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgfcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXA0KPiA+ICvCoMKgwqDCoH0gd2hpbGUgKDApDQo+ IA0KPiBXZSBzaG91bGQgcHJvYmFibHkgbWFrZSBhIGZpbGUgd2hlcmUgaGVscGVyIHJvdXRp bmVzIHVzZWQgYnkgYm90aA0KPiBzcGFwci5jIGFuZCBwbnYuYyBjYW4gbGl2ZS4NCg0KUHJv YmFibHkgYnV0IEknZCBzZWUgdGhhdCBhcyBhIGxhdGVyIGNsZWFudXAgcmF0aGVyIHRoYW4g ZG9pbmcgaXQNCmluIHRoaXMgc2VyaWVzLi4uDQoNCiAuLi4vLi4uDQoNCj4gPiArwqDCoMKg wqBpZiAocGNjLT5sMV9kY2FjaGVfc2l6ZSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgX0ZE VCgoZmR0X3Byb3BlcnR5X2NlbGwoZmR0LCAiZC1jYWNoZS1zaXplIiwgcGNjLT5sMV9kY2Fj aGVfc2l6ZSkpKTsNCj4gPiArwqDCoMKgwqB9IGVsc2Ugew0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBVbmtub3duIEwxIGRjYWNoZSBzaXplIGZv ciBjcHVcbiIpOw0KPiANCj4gSG1tIChub3RlIHRvIHNlbGYpIHNob3VsZCBwcm9iYWJseSBj aGFuZ2UgYSBidW5jaCBvZiB0aGVzZSBib3RoIGluDQo+IHNwYXByLmMgYW5kIHBudi5jIGZy b20gZXhwbGljaXQgZnByaW50ZnMoKSB0byBtb2Rlcm4gZXJyb3JfcmVwb3J0KCkNCj4gYW5k IHNpbWlsYXIuDQoNClRoYXQncyBhIHRyYWluIEkgY29tcGxldGVseSBtaXNzZWQsIGJ1dCB5 ZXMuDQoNCsKgIC4uLi8uLi4NCg0KPiA+ICvCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqBfRkRU KChmZHRfcHJvcGVydHkoZmR0LCAiaWJtLHBwYy1pbnRlcnJ1cHQtc2VydmVyI3MiLA0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VydmVy c19wcm9wLCBzaXplb2Yoc2VydmVyc19wcm9wKSkpKTsNCj4gPiArwqDCoMKgwqBfRkRUKChm ZHRfcHJvcGVydHkoZmR0LCAiaWJtLHBwYy1pbnRlcnJ1cHQtZ3NlcnZlciNzIiwNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdzZXJ2ZXJz X3Byb3AsIHNpemVvZihnc2VydmVyc19wcm9wKSkpKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKg X0ZEVCgoZmR0X2VuZF9ub2RlKGZkdCkpKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgKnBvd2VybnZfY3JlYXRlX2ZkdChQbnZTeXN0ZW0gKnN5cywgdWludDMyX3QgaW5p dHJkX2Jhc2UsIHVpbnQzMl90IGluaXRyZF9zaXplKQ0KPiA+ICt7DQo+IA0KPiBTby4uIGRv ZXMgaXQgbWFrZSBzZW5zZSBmb3IgcWVtdSB0byBjcmVhdGUgYSBkZXZpY2UgdHJlZSBmb3Ig cG93ZXJudiwNCj4gcmF0aGVyIHRoYW4gbGVhdmluZyBpdCB0byBPcGFsPw0KDQpXZWxsLCBP UEFMIG9ubHkgY3JlYXRlcyBhIGRldmljZS10cmVlIGlmIHlvdSBhcmUgb24gYW4gRlNQIG1h Y2hpbmUgaW4NCndoaWNoIGNhc2UgaXQgZXhwZWN0cyBhIGNvbXBsZXggZGF0YSBzdHJ1Y3R1 cmUgKEhEQVQpIGNvbWluZyBmcm9tIHRoZQ0KRlNQIHRvIHVzZSBhcyBhIHNvdXJjZSBvZiBp bmZvLg0KDQpPbiBPcGVuUG93ZXIgbWFjaGluZXMsIHdoaWNoIGlzIGNsb3NlciB0byB3aGF0 IHdlIHNpbXVsYXRlIGhlcmUsIHdlDQpkbyBnZXQgYSBkZXZpY2UtdHJlZSBhcyBhbiBpbnB1 dCBpbiBPUEFMLCBpdCdzIGdlbmVyYXRlZCBieSBIb3N0Qm9vdC4NCg0KTm93LCBJIGFtIG5v dCBydW5uaW5nIEhvc3RCb290IGluIHFlbXUgYmVjYXVzZSBtb3N0IG9mIHdoYXQgaXQgZG9l cw0KaXMgY29tcGxldGVseSBpcnJlbGV2YW50IHRvIGFuIGVtdWxhdGVkIHN5c3RlbSAodHJh aW5pbmcgdGhlIHZhcmlvdXMNCmxpbmtzLCBpbml0aWFsaXppbmcgdGhlIG1lbW9yeSBidWZm ZXIgY2hpcHMsIGV0Yy4uLikuDQoNCkhvd2V2ZXIgd2UgZG8gbmVlZCB0byBwYXNzIGEgbnVt YmVyIG9mIHBsYXRmb3JtIGluZm9ybWF0aW9uIHRvIE9QQUwNCndoaWNoIEhCIGRvZXMgdmlh IHRoZSBkZXZpY2UtdHJlZSwgc3VjaCBhcyB3aGljaCBjb3JlcyBhcmUgZW5hYmxlZCwNCnRo ZSBtZW1vcnkgbWFwIGNvbmZpZ3VyZWQgZm9yIFBDSSwgd2hpY2ggUEhCcyBhcmUgZW5hYmxl ZCwgZXRjLi4uIMKgc28NCmNyZWF0aW5nIGEgRFQgaW4gcWVtdSBtYWtlcyBzZW5zZSwgaXQg bWltbWljcyBIQiBpbiBlc3NlbmNlLg0KDQpPUEFMIHdpbGwgZW5yaWNoIHRoYXQgZGV2aWNl LXRyZWUgYmVmb3JlIHN0YXJ0aW5nIExpbnV4Lg0KDQo+ID4gK8KgwqDCoMKgLyoNCj4gPiAr wqDCoMKgwqDCoCogQWRkIGluZm8gdG8gZ3Vlc3QgdG8gaW5kZW50aWZ5IHdoaWNoIGhvc3Qg aXMgaXQgYmVpbmcgcnVuIG9uDQo+ID4gK8KgwqDCoMKgwqAqIGFuZCB3aGF0IGlzIHRoZSB1 dWlkIG9mIHRoZSBndWVzdA0KPiA+ICvCoMKgwqDCoMKgKi8NCj4gPiArwqDCoMKgwqBpZiAo a3ZtcHBjX2dldF9ob3N0X21vZGVsKCZidWYpKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBf RkRUKChmZHRfcHJvcGVydHlfc3RyaW5nKGZkdCwgImhvc3QtbW9kZWwiLCBidWYpKSk7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqBnX2ZyZWUoYnVmKTsNCj4gPiArwqDCoMKgwqB9DQo+ID4g K8KgwqDCoMKgaWYgKGt2bXBwY19nZXRfaG9zdF9zZXJpYWwoJmJ1ZikpIHsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoF9GRFQoKGZkdF9wcm9wZXJ0eV9zdHJpbmcoZmR0LCAiaG9zdC1zZXJp YWwiLCBidWYpKSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBnX2ZyZWUoYnVmKTsNCj4gPiAr wqDCoMKgwqB9DQo+IA0KPiBTaW5jZSB5b3UncmUgZW11bGF0aW5nIGEgImJhcmUgbWV0YWwi IG1hY2hpbmUsIHN1cmVseSB0aGUgaG9zdA0KPiBwcm9wZXJ0aWVzIGFyZW4ndCByZWxldmFu dCBoZXJlLg0KDQpUaGV5IG1heSBvciBtYXkgbm90LiBCdXQgeWVzLCBJIGNhbiB0YWtlIHRo YXQgb3V0Lg0KDQo+ID4gK8KgwqDCoMKgYnVmID0gZ19zdHJkdXBfcHJpbnRmKFVVSURfRk1U LCBxZW11X3V1aWRbMF0sIHFlbXVfdXVpZFsxXSwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHFlbXVfdXVpZFsyXSwgcWVtdV91 dWlkWzNdLCBxZW11X3V1aWRbNF0sDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBxZW11X3V1aWRbNV0sIHFlbXVfdXVpZFs2XSwg cWVtdV91dWlkWzddLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcWVtdV91dWlkWzhdLCBxZW11X3V1aWRbOV0sIHFlbXVfdXVp ZFsxMF0sDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBxZW11X3V1aWRbMTFdLCBxZW11X3V1aWRbMTJdLCBxZW11X3V1aWRbMTNd LA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcWVtdV91dWlkWzE0XSwgcWVtdV91dWlkWzE1XSk7DQo+ID4gKw0KPiA+ICvCoMKg wqDCoF9GRFQoKGZkdF9wcm9wZXJ0eV9zdHJpbmcoZmR0LCAidm0sdXVpZCIsIGJ1ZikpKTsN Cj4gPiArwqDCoMKgwqBnX2ZyZWUoYnVmKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgX0ZEVCgo ZmR0X2JlZ2luX25vZGUoZmR0LCAiY2hvc2VuIikpKTsNCj4gPiArwqDCoMKgwqBfRkRUKChm ZHRfcHJvcGVydHkoZmR0LCAibGludXgsaW5pdHJkLXN0YXJ0IiwNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZzdGFydF9wcm9wLCBzaXpl b2Yoc3RhcnRfcHJvcCkpKSk7DQo+ID4gK8KgwqDCoMKgX0ZEVCgoZmR0X3Byb3BlcnR5KGZk dCwgImxpbnV4LGluaXRyZC1lbmQiLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgJmVuZF9wcm9wLCBzaXplb2YoZW5kX3Byb3ApKSkpOw0K PiA+ICvCoMKgwqDCoF9GRFQoKGZkdF9lbmRfbm9kZShmZHQpKSk7DQo+ID4gKw0KPiA+ICvC oMKgwqDCoF9GRFQoKGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgIiNhZGRyZXNzLWNlbGxzIiwg MHgyKSkpOw0KPiA+ICvCoMKgwqDCoF9GRFQoKGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgIiNz aXplLWNlbGxzIiwgMHgyKSkpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqAvKiBjcHVzICovDQo+ ID4gK8KgwqDCoMKgX0ZEVCgoZmR0X2JlZ2luX25vZGUoZmR0LCAiY3B1cyIpKSk7DQo+ID4g K8KgwqDCoMKgX0ZEVCgoZmR0X3Byb3BlcnR5X2NlbGwoZmR0LCAiI2FkZHJlc3MtY2VsbHMi LCAweDEpKSk7DQo+ID4gK8KgwqDCoMKgX0ZEVCgoZmR0X3Byb3BlcnR5X2NlbGwoZmR0LCAi I3NpemUtY2VsbHMiLCAweDApKSk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoENQVV9GT1JFQUNI KGNzKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBwb3dlcm52X2NyZWF0ZV9jcHVfbm9kZShm ZHQsIGNzLCBzbXQpOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgX0ZE VCgoZmR0X2VuZF9ub2RlKGZkdCkpKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgLyogTWVtb3J5 ICovDQo+ID4gK8KgwqDCoMKgX0ZEVCgocG93ZXJudl9wb3B1bGF0ZV9tZW1vcnkoZmR0KSkp Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqAvKiAvaHlwZXJ2aXNvciBub2RlICovDQo+ID4gK8Kg wqDCoMKgaWYgKGt2bV9lbmFibGVkKCkpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHVpbnQ4 X3QgaHlwZXJjYWxsWzE2XTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqAvKiBpbmRp Y2F0ZSBLVk0gaHlwZXJjYWxsIGludGVyZmFjZSAqLw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg X0ZEVCgoZmR0X2JlZ2luX25vZGUoZmR0LCAiaHlwZXJ2aXNvciIpKSk7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqBfRkRUKChmZHRfcHJvcGVydHlfc3RyaW5nKGZkdCwgImNvbXBhdGlibGUi LCAibGludXgsa3ZtIikpKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGlmIChrdm1wcGNfaGFz X2NhcF9maXh1cF9oY2FsbHMoKSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAv Kg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCogT2xkZXIgS1ZNIHZlcnNpb25z IHdpdGggb2xkZXIgZ3Vlc3Qga2VybmVscyB3ZXJlIGJyb2tlbiB3aXRoIHRoZQ0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCogbWFnaWMgcGFnZSwgZG9uJ3QgYWxsb3cgdGhl IGd1ZXN0IHRvIG1hcCBpdC4NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrdm1wcGNfZ2V0X2h5cGVyY2FsbChmaXJz dF9jcHUtPmVudl9wdHIsIGh5cGVyY2FsbCwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZW9mKGh5 cGVyY2FsbCkpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfRkRUKChmZHRfcHJv cGVydHkoZmR0LCAiaGNhbGwtaW5zdHJ1Y3Rpb25zIiwgaHlwZXJjYWxsLA0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzaXplb2YoaHlwZXJjYWxsKSkpKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiAr wqDCoMKgwqDCoMKgwqDCoF9GRFQoKGZkdF9lbmRfbm9kZShmZHQpKSk7DQo+ID4gK8KgwqDC oMKgfQ0KPiANCj4gQW5kIGEgaHlwZXJjYWxsIGludGVyZmFjZSBzdXJlbHkgZG9lc24ndCBt YWtlIHNlbnNlIGZvciBwb3dlcm52Lg0KDQpJdCdzIHFlbXUgcGFyYXZpcnQsIGl0IGV4aXN0 IG9uIEc1IHRvbyA6LSkgSXQncyBmb3IgUFIgS1ZNLCBpdCBhbGxvd3MNCnRvIHNwZWVkIHVw IHNvbWUgYml0cyBhbmQgcGllY2VzLiBCdXQgeWVhaCB3ZSBkb24ndCB5ZXQgcmVhbGx5DQoi c3VwcG9ydCIgaXQgYXQgdGhpcyBwb2ludC4gSG93ZXZlciB3ZSBtaWdodC4NCg0KPiA+ICsN Cj4gPiArwqDCoMKgwqBfRkRUKChmZHRfZW5kX25vZGUoZmR0KSkpOyAvKiBjbG9zZSByb290 IG5vZGUgKi8NCj4gPiArwqDCoMKgwqBfRkRUKChmZHRfZmluaXNoKGZkdCkpKTsNCj4gPiAr DQo+ID4gK8KgwqDCoMKgcmV0dXJuIGZkdDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgcG93ZXJudl9jcHVfcmVzZXQodm9pZCAqb3BhcXVlKQ0KPiA+ICt7DQo+ID4gK8Kg wqDCoMKgUG93ZXJQQ0NQVSAqY3B1ID0gb3BhcXVlOw0KPiA+ICvCoMKgwqDCoENQVVN0YXRl ICpjcyA9IENQVShjcHUpOw0KPiA+ICvCoMKgwqDCoENQVVBQQ1N0YXRlICplbnYgPSAmY3B1 LT5lbnY7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGNwdV9yZXNldChjcyk7DQo+ID4gKw0KPiA+ ICvCoMKgwqDCoGVudi0+c3ByW1NQUl9QSVJdID0gcHBjX2dldF92Y3B1X2R0X2lkKGNwdSk7 DQo+ID4gK8KgwqDCoMKgZW52LT5zcHJbU1BSX0hJT1JdID0gMDsNCj4gPiArwqDCoMKgwqBl bnYtPmdwclszXSA9IEZEVF9BRERSOw0KPiA+ICvCoMKgwqDCoGVudi0+bmlwID0gMHgxMDsN Cj4gPiArwqDCoMKgwqBlbnYtPm1zciB8PSBNU1JfSFZCOw0KPiA+ICt9DQo+IA0KPiBTbywg SSBiZWxpZXZlIHRoZSBxZW11LWlzaGx5IGNvcnJlY3Qgd2F5IG9mIGRvaW5nIHRoaXMgaXMg dG8gaGF2ZSB0aGUNCj4gY3B1IGluaXRpYWxpemF0aW9uIGluIHRoZSBjcHUgY29kZSwgcmF0 aGVyIHRoYW4gdGhlIHBsYXRmb3JtIGNvZGUsIGFzDQo+IG11Y2ggYXMgcG9zc2libGUuwqDC oE9uIFBBUFIgd2Uga2luZCBvZiBnZXQgYXdheSB3aXRoIGluaXRpYWxpemF0aW9uIGluDQo+ IHRoZSBwbGF0Zm9ybSBjb2RlIG9uIHRoZSBncm91bmRzIHRoYXQgaXQncyBhIHBhcmF2aXJ0 IHBsYXRmb3JtLCBidXQNCj4gcG93ZXJudiBkb2Vzbid0IGhhdmUgdGhhdCBleGN1c2UuDQo+ IA0KPiBCdXQgdGhpcyBtYXkgd2VsbCBiZSBzdHVmZiB0aGF0IGNoYW5nZXMgaW4gbGF0ZXIg cGF0Y2hlcywgc28uLg0KDQpXZWxsIG5vLCBub3QgcmVhbGx5LiBCdXQgaGVyZSB0b28sIHdl IG1pbW1pYyB0aGUgc3RhdGUgYXMgY29taW5nIG91dCBvZg0KSG9zdEJvb3QsIHdoaWNoIGlz bid0IHF1aXRlIHRoZSBzYW1lIHRoaW5nLiBXZSBuZWVkIHRvIHByb3ZpZGUgdGhlIEZEVA0K ZW50cnksIGV0Yy4uLg0KDQpUaGUgInJlYWwiIHJlc2V0IHN0YXRlIG9mIGEgUDggaXNuJ3Qg c29tZXRoaW5nIHdlIGNhbiBlYXNpbHkNCnNpbXVsYXRlLi4uwqANCg0KSXQgcnVucyBzb21l IG1pY3JvY29kZSBmcm9tIGEgU0VFUFJPTSB3aXRoIGEgc21hbGwgbWljcm9jb250cm9sbGVy DQp3aGljaCBpbml0aWFsaXplcyBhIGNvcmUsIHdoaWNoIHRoZW4gcnVucyBzb21lIEhCIGNv ZGUgb2ZmIGl0J3MgTDMNCmNhY2hlIGV0Yy4uLiByZWFsbHkgbm90IHNvbWV0aGluZyB3ZSB3 YW50IHRvIGRvIGluIHFlbXUgYXQgbGVhc3QNCmZvciBub3cuDQoNClNvIHRoZSBpbml0aWFs IHN0YXRlIGhlcmUgaXMgc29tZXdoYXQgaW4gYmV0d2VlbiBmdWxsIHZpcnQgYW5kDQpwYXJh dmlydCwgd2Ugc2ltdWxhdGUgYSBwbGF0Zm9ybSB0aGF0IGhhcyBiZWVuIHBhcnRpYWxseSBp bml0aWFsaXplZCBieQ0KSG9zdEJvb3QsIHRvIHRoZSBzdGF0ZSBpdCBoYXMgd2hlbiBpdCBl bnRlcnMgT1BBTC4NCg0KPiA+ICtzdGF0aWMgY29uc3QgVk1TdGF0ZURlc2NyaXB0aW9uIHZt c3RhdGVfcG93ZXJudiA9IHsNCj4gPiArwqDCoMKgwqAubmFtZSA9ICJwb3dlcm52IiwNCj4g PiArwqDCoMKgwqAudmVyc2lvbl9pZCA9IDEsDQo+ID4gK8KgwqDCoMKgLm1pbmltdW1fdmVy c2lvbl9pZCA9IDEsDQo+ID4gK307DQo+IA0KPiBJdCBtaWdodCBiZSBiZXN0IHRvIGxlYXZl IG91dCB0aGUgdm1zdGF0ZSBlbnRpcmVseSB1bnRpbCB5b3UncmUgcmVhZHkNCj4gdG8gaW1w bGVtZW50IG1pZ3JhdGlvbiwgcmF0aGVyIHRoYW4gaGF2aW5nIGEgcGFydGlhbCwgcHJvYmFi bHkgbm90DQo+IHdvcmtpbmcgbWlncmF0aW9uIGltcGxlbWVudGF0aW9uLg0KDQpPay4NCg0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcG52X2NyZWF0ZV9jaGlwKFBudlN5c3RlbSAqc3lz LCB1bnNpZ25lZCBpbnQgY2hpcF9ubykNCj4gPiArew0KPiA+ICvCoMKgwqDCoFBudkNoaXAg KmNoaXAgPSAmc3lzLT5jaGlwc1tjaGlwX25vXTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYg KGNoaXBfbm8gPj0gUE5WX01BWF9DSElQUykgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm47DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqAvKiBY WFggSW1wcm92ZSBjaGlwIG51bWJlcmluZyB0byBiZXR0ZXIgbWF0Y2ggSFcgKi8NCj4gPiAr wqDCoMKgwqBjaGlwLT5jaGlwX2lkID0gY2hpcF9ubzsNCj4gDQo+IEkgdGhpbmsgbW9kZXJu IHFlbXUgY29udmVudGlvbnMgd291bGQgc3VnZ2VzdCBjcmVhdGluZyB0aGUgY2hpcHMgYXMN Cj4gUU9NIG9iamVjdHMgcmF0aGVyIHRoYW4gaGF2aW5nIGEgZml4ZWQgYXJyYXkuDQoNClll YWgsIG1vcmUgY29kZSAmIG11Y2ggbGFyZ2VyIG1lbW9yeSBmb290cHJpbnQgZm9yIHRoZSBz YW1lIHJlc3VsdCA6LSkNCg0KSSBjYW4gbG9vayBpbnRvIGl0IGJ1dCBpdCdzIGxvdyBwcmlv cml0eS4gSSBzdGlsbCB3YW50IHRvIHJld29yayBzb21lDQpvZiB0aGF0IGNoaXAgc3R1ZmYg aW4gZnV0dXJlIHBhdGNoZXMgYW55d2F5Lg0KDQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIHBwY19wb3dlcm52X2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5lKQ0KPiA+ICt7 DQo+ID4gK8KgwqDCoMKgcmFtX2FkZHJfdCByYW1fc2l6ZSA9IG1hY2hpbmUtPnJhbV9zaXpl Ow0KPiA+ICvCoMKgwqDCoGNvbnN0IGNoYXIgKmNwdV9tb2RlbCA9IG1hY2hpbmUtPmNwdV9t b2RlbDsNCj4gPiArwqDCoMKgwqBjb25zdCBjaGFyICprZXJuZWxfZmlsZW5hbWUgPSBtYWNo aW5lLT5rZXJuZWxfZmlsZW5hbWU7DQo+ID4gK8KgwqDCoMKgY29uc3QgY2hhciAqaW5pdHJk X2ZpbGVuYW1lID0gbWFjaGluZS0+aW5pdHJkX2ZpbGVuYW1lOw0KPiA+ICvCoMKgwqDCoHVp bnQzMl90IGluaXRyZF9iYXNlID0gMDsNCj4gPiArwqDCoMKgwqBsb25nIGluaXRyZF9zaXpl ID0gMDsNCj4gPiArwqDCoMKgwqBQb3dlclBDQ1BVICpjcHU7DQo+ID4gK8KgwqDCoMKgQ1BV UFBDU3RhdGUgKmVudjsNCj4gPiArwqDCoMKgwqBNZW1vcnlSZWdpb24gKnN5c21lbSA9IGdl dF9zeXN0ZW1fbWVtb3J5KCk7DQo+ID4gK8KgwqDCoMKgTWVtb3J5UmVnaW9uICpyYW0gPSBn X25ldyhNZW1vcnlSZWdpb24sIDEpOw0KPiA+ICvCoMKgwqDCoHNQb3dlck5WTWFjaGluZVN0 YXRlICpwbnZfbWFjaGluZSA9IFBPV0VSTlZfTUFDSElORShtYWNoaW5lKTsNCj4gPiArwqDC oMKgwqBQbnZTeXN0ZW0gKnN5cyA9ICZwbnZfbWFjaGluZS0+c3lzOw0KPiA+ICvCoMKgwqDC oGxvbmcgZndfc2l6ZTsNCj4gPiArwqDCoMKgwqBjaGFyICpmaWxlbmFtZTsNCj4gPiArwqDC oMKgwqB2b2lkICpmZHQ7DQo+ID4gK8KgwqDCoMKgaW50IGk7DQo+ID4gKw0KPiA+ICvCoMKg wqDCoC8qIGluaXQgQ1BVcyAqLw0KPiA+ICvCoMKgwqDCoGlmIChjcHVfbW9kZWwgPT0gTlVM TCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgY3B1X21vZGVsID0ga3ZtX2VuYWJsZWQoKSA/ ICJob3N0IiA6ICJQT1dFUjgiOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDC oMKgZm9yIChpID0gMDsgaSA8IHNtcF9jcHVzOyBpKyspIHsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoGNwdSA9IGNwdV9wcGNfaW5pdChjcHVfbW9kZWwpOw0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgaWYgKGNwdSA9PSBOVUxMKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZw cmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGZpbmQgUG93ZXJQQyBDUFUgZGVmaW5pdGlvblxu Iik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGV4aXQoMSk7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBlbnYgPSAmY3B1LT5lbnY7DQo+ ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgLyogU2V0IHRpbWUtYmFzZSBmcmVxdWVuY3kg dG8gNTEyIE1IeiAqLw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgY3B1X3BwY190Yl9pbml0KGVu diwgVElNRUJBU0VfRlJFUSk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgLyogTVNS W0lQXSBkb2Vzbid0IGV4aXN0IG5vd2FkYXlzICovDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBl bnYtPm1zcl9tYXNrICY9IH4oMSA8PCA2KTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKg wqBxZW11X3JlZ2lzdGVyX3Jlc2V0KHBvd2VybnZfY3B1X3Jlc2V0LCBjcHUpOw0KPiA+ICvC oMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgLyogYWxsb2NhdGUgUkFNICovDQo+ID4g K8KgwqDCoMKgbWVtb3J5X3JlZ2lvbl9hbGxvY2F0ZV9zeXN0ZW1fbWVtb3J5KHJhbSwgTlVM TCwgInBwY19wb3dlcm52LnJhbSIsIHJhbV9zaXplKTsNCj4gPiArwqDCoMKgwqBtZW1vcnlf cmVnaW9uX2FkZF9zdWJyZWdpb24oc3lzbWVtLCAwLCByYW0pOw0KPiA+ICsNCj4gPiArwqDC oMKgwqAvKiBYWFggV2Ugc2hvdWxkIGRlY2lkZSBob3cgbWFueSBjaGlwcyB0byBjcmVhdGUg YmFzZWQgb24gI2NvcmVzIGFuZA0KPiA+ICvCoMKgwqDCoMKgKiBWZW5pY2UgdnMuIE11cmFu byB2cy4gTmFwbGVzIGNoaXAgdHlwZSBldGMuLi4sIGZvciBub3csIGp1c3QgY3JlYXRlDQo+ ID4gK8KgwqDCoMKgwqAqIG9uZSBjaGlwLiBBbHNvIGNyZWF0aW9uIG9mIHRoZSBDUFVzIHNo b3VsZCBiZSBkb25lIHBlci1jaGlwDQo+ID4gK8KgwqDCoMKgwqAqLw0KPiA+ICvCoMKgwqDC oHN5cy0+bnVtX2NoaXBzID0gMTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgLyogQ3JlYXRlIG9u bHkgb25lIFBIQiBmb3Igbm93IHVudGlsIEkgZmlndXJlIG91dCB3aGF0J3Mgd3JvbmcNCj4g PiArwqDCoMKgwqDCoCogd2hlbiBJIGNyZWF0ZSBtb3JlIChyZXNvdXJjZSBhc3NpZ25tZW50 IGZhaWx1cmVzIGluIExpbnV4KQ0KPiA+ICvCoMKgwqDCoMKgKi8NCj4gPiArwqDCoMKgwqBw bnZfY3JlYXRlX2NoaXAoc3lzLCAwKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKGJpb3Nf bmFtZSA9PSBOVUxMKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBiaW9zX25hbWUgPSBGV19G SUxFX05BTUU7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICvCoMKgwqDCoGZpbGVuYW1lID0gcWVt dV9maW5kX2ZpbGUoUUVNVV9GSUxFX1RZUEVfQklPUywgYmlvc19uYW1lKTsNCj4gPiArwqDC oMKgwqBmd19zaXplID0gbG9hZF9pbWFnZV90YXJncGh5cyhmaWxlbmFtZSwgMCwgRldfTUFY X1NJWkUpOw0KPiA+ICvCoMKgwqDCoGlmIChmd19zaXplIDwgMCkgew0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgaHdfZXJyb3IoInFlbXU6IGNvdWxkIG5vdCBsb2FkIE9QQUwgJyVzJ1xuIiwg ZmlsZW5hbWUpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZXhpdCgxKTsNCj4gPiArwqDCoMKg wqB9DQo+ID4gK8KgwqDCoMKgZ19mcmVlKGZpbGVuYW1lKTsNCj4gPiArDQo+ID4gKw0KPiA+ ICvCoMKgwqDCoGlmIChrZXJuZWxfZmlsZW5hbWUgPT0gTlVMTCkgew0KPiA+ICvCoMKgwqDC oMKgwqDCoMKga2VybmVsX2ZpbGVuYW1lID0gS0VSTkVMX0ZJTEVfTkFNRTsNCj4gPiArwqDC oMKgwqB9DQo+ID4gK8KgwqDCoMKgZmlsZW5hbWUgPSBxZW11X2ZpbmRfZmlsZShRRU1VX0ZJ TEVfVFlQRV9CSU9TLA0KPiA+IGtlcm5lbF9maWxlbmFtZSk7DQo+IA0KPiBUaGUgY29tbWl0 IHdpdGhlIE9wYWwgaW1hZ2Ugc2hvdWxkIGdvIGluIGJlZm9yZSB0aGlzLCBubz8NCg0KTm93 IHRoaXMgaXMgYSBiaXQgb2YgYW4gb3BlbiBkaXNjdXNzaW9uIGF0IHRoZSBtb21lbnQgOi0p DQoNClRoZSB3YXkgT1BBTCBpcyBidWlsdCBvbiBPUFAgbWFjaGluZXMgdG9kYXkgaXMgYnkg ZXNzZW50aWFsbHkgYnVpbGRpbmcNCmEgY29tcGxldGUgZmxhc2ggaW1hZ2Ugd2hpY2ggY29u dGFpbnMgSG9zdEJvb3QsIE9QQUwgYW5kIHRoZSBwZXRpdGJvb3QtDQpiYXNlZCBib290bG9h ZGVyIHdoaWNoIGNvbnRhaW5zIGEgTGludXgga2VybmVsIGV0Yy4uLg0KDQpXZSBjb3VsZCBj cmVhdGUgYSB0YXJnZXQgd2l0aG91dCBIQiBhbmQgd2l0aCBhIHNsaW1tZWQgZG93biBMaW51 eCBidXQNCml0IHdvdWxkIHN0aWxsIHByb2JhYmx5IGJlIGFib3V0IDEyTUIgSSByZWNrb24s IGlmIG5vdCBtb3JlLiBJdCBmZWVscyBhDQpiaXQgImJpZyIgdG8gc2hpcCBhcyBhIGJpbmFy eSBhcyBwYXJ0IG9mIHFlbXUuLi4NCg0KV2Ugd291bGQgYWxzbyBoYXZlIHRvIGFkZCBjb2Rl IHRvIHFlbXUgdG8gImZpbmQiIE9QQUwgaW4gdGhhdCBpbWFnZSwNCmFuZCB0aGVuIGFkZCBh IG1vZGVsIGZvciB0aGUgZmxhc2ggY29udHJvbGxlci4NCg0KVGhlIG90aGVyIG9wdGlvbiBp cyB0byBidW5kbGUganVzdCBPUEFMIGl0c2VsZi4gSG93ZXZlciB0aGF0IG1lYW5zDQp5b3Ug Y2FuJ3QgZ28gYW55d2hlcmUgd2l0aG91dCBhIC1rZXJuZWwgYXJndW1lbnQsIHdoaWNoIHdv dWxkIHRoZW4NCmJlIGVpdGhlciBhIHBldGl0Ym9vdC1iYXNlZCBib290bG9hZGVyIG9yIHlv dXIgYWN0dWFsIHRhcmdldCBrZXJuZWwuDQoNCkNoZWVycywNCkJlbi4NCg==