From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58458) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a11j5-00070A-Q2 for qemu-devel@nongnu.org; Mon, 23 Nov 2015 19:44:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a11j1-00076U-BK for qemu-devel@nongnu.org; Mon, 23 Nov 2015 19:44:55 -0500 Message-ID: <1448325876.4574.24.camel@kernel.crashing.org> From: Benjamin Herrenschmidt Date: Tue, 24 Nov 2015 11:44:36 +1100 In-Reply-To: <20151120074526.GB7118@voom.redhat.com> References: <1447201710-10229-1-git-send-email-benh@kernel.crashing.org> <1447201710-10229-22-git-send-email-benh@kernel.crashing.org> <20151120074526.GB7118@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 21/77] ppc: Rework generation of priv and inval interrupts List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org T24gRnJpLCAyMDE1LTExLTIwIGF0IDE4OjQ1ICsxMTAwLCBEYXZpZCBHaWJzb24gd3JvdGU6 DQo+wqANCj4gU28sIEknbSBub3QgMTAwJSBmb2xsb3dpbmcgdGhlIGxvZ2ljIGJlbG93LCBi dXQgaXQgbG9va3MgbGlrZSB0aGUNCj4gZXhpc3RpbmcgY29kZSB1c2VkIFNQUl9OT0FDQ0VT UyB0byBtYXJrIHRoaW5ncyB3aGljaCBnZW5lcmF0ZWQgYQ0KPiBwcml2aWxlZ2UgZXhjZXB0 aW9uIGNvbXBhcmVkIHRvIE5VTEwgZm9yIHRoaW5ncyB3aGljaCBnZW5lcmF0ZWQgYW4NCj4g aW52YWxpZCBpbnN0cnVjdGlvbiBleGNlcHRpb24uwqDCoFVzaW5nIHRoYXQgZW5jb2Rpbmcs IGNhbiB5b3Ugc2ltcGxpZnkNCj4gdGhlIGxvZ2ljIGhlcmU/wqDCoEFsdGVybmF0aXZlbHkg Y2FuIHlvdSB1c2UgdGhlIGxvZ2ljIGhlcmUgdG8gYXZvaWQNCj4gdGhlIFNQUl9OT0FDRVNT IGVuY29kaW5nPw0KDQpXZWxsLCBzbyB0aGUgU1BSX05PQUNDRVNTIGhhcyB0byBkbyB3aXRo IGhvdyB5b3UgcmVhY3QgdG8gYSBrbm93biBTUFINCndobyBoYXMgZXhwbGljaXQgYWNjZXNz IHBlcm1pc3Npb25zLiBUaGUgbG9naWMgYmVsb3cgaXMgZGVzY3JpYmVkIGluDQp0aGUgSVNB IGZvciBhbiB1bmtub3duIFNQUiBudW1iZXIuDQoNCkkgZG9uJ3Qga25vdyB3aGV0aGVyIHRo ZSBhY2Nlc3MgcGVybWlzc2lvbiBvZiAia25vd24iIFNQUnMgYWx3YXlzDQpob25vciB0aGUg MHgxMCBiaXQgdHJpY2ssIGFuZCBjaGFuZ2luZyB0aGF0IGluIHFlbXUgd291bGQgYmUgYQ0K ZmFpcmx5IGxhcmdlIHBhdGNoLiBTbyBJJ2QgcmF0aGVyIHN0aWNrIHRvIHRoZSBsb2dpYyBo ZXJlIGZvcg0KInVua25vd24iIFNQUnMgd2hpY2ggbWF0Y2hlcyB0aGUgSVNBIGRlZmluaXRp b24uDQoNCkknbGwgdXBkYXRlIHRoZSBwYXRjaCB0aG91Z2ggZm9yIGFyY2ggMi4wNyBhcyBp dCBkZWZpbmVzIGEgZmV3DQpyZXNlcnZlZCBTUFJzIGFzIG5vLW9wcy4NCg0KSG93ZXZlcjoN Cg0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ2VuX2ludmFsX2V4Y2VwdGlvbihjdHgsIFBPV0VS UENfRVhDUF9JTlZBTF9TUFIpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoC8qIFRo ZSBiZWhhdmlvdXIgZGVwZW5kcyBvbiBNU1I6UFIgYW5kIFNQUiMgYml0IDB4MTAsDQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoCogaXQgY2FuIGdlbmVyYXRlIGEgcHJpdiwgYSBodiBlbXUg b3IgYSBuby1vcA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgaWYgKHNwcm4gJiAweDEwKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChjdHgtPnByKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Z2VuX3ByaXZfZXhjZXB0aW9uKGN0eCwgUE9XRVJQQ19FWENQX0lOVkFMX1NQUik7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0gZWxz ZSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChjdHgtPnByIHx8IHNwcm4g PT0gMCB8fCBzcHJuID09IDQgfHwgc3BybiA9PSA1IHx8DQo+ID4gc3BybiA9PSA2KSB7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ2VuX2h2cHJpdl9leGNlcHRp b24oY3R4LCBQT1dFUlBDX0VYQ1BfSU5WQUxfU1BSKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ICsjaWYgIWRlZmluZWQo Q09ORklHX1VTRVJfT05MWSkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoC8qIEhWIHByaXYgKi8N Cj4gPiArwqDCoMKgwqDCoMKgwqDCoGlmIChjdHgtPnNwcl9jYltzcHJuXS5oZWFfcmVhZCkg ew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnZW5fcHJpdl9leGNlcHRpb24oY3R4 LCBQT1dFUlBDX0VYQ1BfSU5WQUxfU1BSKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCg0K VGhhdCBsYXRlc3QgYml0IGlzIGJvZ3VzLg0KDQo+IElmIHlvdSdyZSBpbiBQUiBtb2RlLCBh bmQgaXQncyBhbiBTUFIgd2l0aCBhbiBoZWFfcmVhZCBmdW5jdGlvbiBhbmQNCj4gaGFzIHRo ZSAweDEwIGJpdCBzZXQsIHdvbid0IHRoaXMgY2FsbCBnZW5fcHJpdl9leGNlcHRpb24gdHdp Y2U/DQoNClllcywgSSd2ZSByZW1vdmVkIGl0LiBJdCBzaG91bGQgYmUgaGFuZGxlZCBieSB0 aGUgU1BSX05PQUNDRVNTLg0KDQo+IEkgYWxzbyBzZWUgbm8gcGF0aCBoZXJlIHdoaWNoIHdp bGwgY2FsbCBnZW5faW52YWxfZXhjZXB0aW9uKCksIGlzDQo+IHRoYXQNCj4gcmlnaHQ/wqDC oElmIHlvdSdyZSBpbiBIViBtb2RlIGFuZCBpdCdzIGEgdHJ1bHkgaW52YWxpZCBTUFJOLCBp c24ndA0KPiB0aGF0DQo+IHdoYXQgeW91J2Qgd2FudD8NCg0KTm8sIHRoZSBJU0Egc2F5cyBp dCdzIGEgbm9wLg0KDQpDaGVlcnMsDQpCZW4uDQoNCj4gPiArI2VuZGlmDQo+ID4gwqDCoMKg wqDCoH0NCj4gPiDCoH0NCj4gDQo+IA0KPiANCj4gPiDCoA0KPiA+IEBAIC00Mzk1LDEzICs0 NDIzLDkgQEAgc3RhdGljIHZvaWQgZ2VuX210Y3JmKERpc2FzQ29udGV4dCAqY3R4KQ0KPiA+ IMKgI2lmIGRlZmluZWQoVEFSR0VUX1BQQzY0KQ0KPiA+IMKgc3RhdGljIHZvaWQgZ2VuX210 bXNyZChEaXNhc0NvbnRleHQgKmN0eCkNCj4gPiDCoHsNCj4gPiAtI2lmIGRlZmluZWQoQ09O RklHX1VTRVJfT05MWSkNCj4gPiAtwqDCoMKgwqBnZW5faW52YWxfZXhjZXB0aW9uKGN0eCwg UE9XRVJQQ19FWENQX1BSSVZfUkVHKTsNCj4gPiAtI2Vsc2UNCj4gPiAtwqDCoMKgwqBpZiAo dW5saWtlbHkoY3R4LT5wcikpIHsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdlbl9pbnZhbF9l eGNlcHRpb24oY3R4LCBQT1dFUlBDX0VYQ1BfUFJJVl9SRUcpOw0KPiA+IC3CoMKgwqDCoMKg wqDCoMKgcmV0dXJuOw0KPiA+IC3CoMKgwqDCoH0NCj4gPiArwqDCoMKgwqBDSEtfU1Y7DQo+ ID4gKw0KPiA+ICsjaWYgIWRlZmluZWQoQ09ORklHX1VTRVJfT05MWSkNCj4gPiDCoMKgwqDC oMKgaWYgKGN0eC0+b3Bjb2RlICYgMHgwMDAxMDAwMCkgew0KPiA+IMKgwqDCoMKgwqDCoMKg wqDCoC8qIFNwZWNpYWwgZm9ybSB0aGF0IGRvZXMgbm90IG5lZWQgYW55IHN5bmNocm9uaXNh dGlvbiAqLw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoFRDR3YgdDAgPSB0Y2dfdGVtcF9uZXco KTsNCj4gPiBAQCAtNDQyMCwyMCArNDQ0NCwxNiBAQCBzdGF0aWMgdm9pZCBnZW5fbXRtc3Jk KERpc2FzQ29udGV4dCAqY3R4KQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoC8qIE5vdGUgdGhh dCBtdG1zciBpcyBub3QgYWx3YXlzIGRlZmluZWQgYXMgY29udGV4dC0NCj4gPiBzeW5jaHJv bml6aW5nICovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgZ2VuX3N0b3BfZXhjZXB0aW9uKGN0 eCk7DQo+ID4gwqDCoMKgwqDCoH0NCj4gPiAtI2VuZGlmDQo+ID4gKyNlbmRpZiAvKiAhZGVm aW5lZChDT05GSUdfVVNFUl9PTkxZKSAqLw0KPiA+IMKgfQ0KPiA+IC0jZW5kaWYNCj4gPiAr I2VuZGlmIC8qIGRlZmluZWQoVEFSR0VUX1BQQzY0KSAqLw0KPiA+IMKgDQo+ID4gwqBzdGF0 aWMgdm9pZCBnZW5fbXRtc3IoRGlzYXNDb250ZXh0ICpjdHgpDQo+ID4gwqB7DQo+ID4gLSNp ZiBkZWZpbmVkKENPTkZJR19VU0VSX09OTFkpDQo+ID4gLcKgwqDCoMKgZ2VuX2ludmFsX2V4 Y2VwdGlvbihjdHgsIFBPV0VSUENfRVhDUF9QUklWX1JFRyk7DQo+ID4gLSNlbHNlDQo+ID4g LcKgwqDCoMKgaWYgKHVubGlrZWx5KGN0eC0+cHIpKSB7DQo+ID4gLcKgwqDCoMKgwqDCoMKg wqBnZW5faW52YWxfZXhjZXB0aW9uKGN0eCwgUE9XRVJQQ19FWENQX1BSSVZfUkVHKTsNCj4g PiAtwqDCoMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiAtwqDCoMKgwqB9DQo+ID4gLcKgwqDC oMKgaWYgKGN0eC0+b3Bjb2RlICYgMHgwMDAxMDAwMCkgew0KPiA+ICvCoMKgwqDCoENIS19T VjsNCj4gPiArDQo+ID4gKyNpZiAhZGVmaW5lZChDT05GSUdfVVNFUl9PTkxZKQ0KPiA+ICvC oMKgwqBpZiAoY3R4LT5vcGNvZGUgJiAweDAwMDEwMDAwKSB7DQo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgLyogU3BlY2lhbCBmb3JtIHRoYXQgZG9lcyBub3QgbmVlZCBhbnkgc3luY2hyb25p c2F0aW9uICovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgVENHdiB0MCA9IHRjZ190ZW1wX25l dygpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoHRjZ19nZW5fYW5kaV90bCh0MCwgY3B1X2dw cltyUyhjdHgtPm9wY29kZSldLCAoMSA8PA0KPiA+IE1TUl9SSSkgfCAoMSA8PCBNU1JfRUUp KTsNCj4gPiBAQCAtNDQ4OCw3ICs0NTA4LDcgQEAgc3RhdGljIHZvaWQgZ2VuX210c3ByKERp c2FzQ29udGV4dCAqY3R4KQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgVEFSR0VUX0ZNVF9seCAiXG4iLCBzcHJuLCBzcHJuLCBjdHgtPm5pcCAt DQo+ID4gNCk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcmludGYoIlRyeWlu ZyB0byB3cml0ZSBwcml2aWxlZ2VkIHNwciAlZCAoMHglMDN4KSBhdA0KPiA+ICINCj4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgVEFSR0VUX0ZNVF9seCAi XG4iLCBzcHJuLCBzcHJuLCBjdHgtPm5pcCAtIDQpOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBnZW5faW52YWxfZXhjZXB0aW9uKGN0eCwgUE9XRVJQQ19FWENQX1BSSVZfUkVH KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ2VuX3ByaXZfZXhjZXB0aW9uKGN0 eCwgUE9XRVJQQ19FWENQX1BSSVZfUkVHKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ ID4gwqDCoMKgwqDCoH0gZWxzZSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgLyogTm90IGRl ZmluZWQgKi8NCj4gPiBAQCAtNDQ5Niw3ICs0NTE2LDI1IEBAIHN0YXRpYyB2b2lkIGdlbl9t dHNwcihEaXNhc0NvbnRleHQgKmN0eCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBUQVJHRVRfRk1UX2x4ICJcbiIsIHNwcm4sIHNwcm4sIGN0eC0+bmlwIC0g NCk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgcHJpbnRmKCJUcnlpbmcgdG8gd3JpdGUgaW52 YWxpZCBzcHIgJWQgKDB4JTAzeCkgYXQgIg0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgVEFSR0VUX0ZNVF9seCAiXG4iLCBzcHJuLCBzcHJuLCBjdHgtPm5pcCAtIDQp Ow0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ2VuX2ludmFsX2V4Y2VwdGlvbihjdHgsIFBPV0VS UENfRVhDUF9JTlZBTF9TUFIpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoC8qIFRo ZSBiZWhhdmlvdXIgZGVwZW5kcyBvbiBNU1I6UFIgYW5kIFNQUiMgYml0IDB4MTAsDQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoCogaXQgY2FuIGdlbmVyYXRlIGEgcHJpdiwgYSBodiBlbXUg b3IgYSBuby1vcA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgaWYgKHNwcm4gJiAweDEwKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChjdHgtPnByKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Z2VuX3ByaXZfZXhjZXB0aW9uKGN0eCwgUE9XRVJQQ19FWENQX0lOVkFMX1NQUik7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0gZWxz ZSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChjdHgtPnByIHx8IHNwcm4g PT0gMCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdlbl9odnBy aXZfZXhjZXB0aW9uKGN0eCwgUE9XRVJQQ19FWENQX0lOVkFMX1NQUik7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArI2lm ICFkZWZpbmVkKENPTkZJR19VU0VSX09OTFkpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqAvKiBI ViBwcml2ICovDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBpZiAoY3R4LT5zcHJfY2Jbc3Bybl0u aGVhX3dyaXRlKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdlbl9wcml2X2V4 Y2VwdGlvbihjdHgsIFBPV0VSUENfRVhDUF9JTlZBTF9TUFIpOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgfQ0KPiA+ICsjZW5kaWYNCj4gDQo+IFNhbWUgY29uY2VybnMgaGVyZSBhcyBmb3Ig bWZzcHIuDQo+IA0KPiBbc25pcF0NCj4gPiDCoC8qIHRsYmllbCAqLw0KPiA+IMKgc3RhdGlj IHZvaWQgZ2VuX3RsYmllbChEaXNhc0NvbnRleHQgKmN0eCkNCj4gPiDCoHsNCj4gPiDCoCNp ZiBkZWZpbmVkKENPTkZJR19VU0VSX09OTFkpDQo+ID4gLcKgwqDCoMKgZ2VuX2ludmFsX2V4 Y2VwdGlvbihjdHgsIFBPV0VSUENfRVhDUF9QUklWX09QQyk7DQo+ID4gK8KgwqDCoMKgR0VO X1BSSVY7DQo+ID4gwqAjZWxzZQ0KPiA+IC3CoMKgwqDCoGlmICh1bmxpa2VseShjdHgtPnBy IHx8ICFjdHgtPmh2KSkgew0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ2VuX2ludmFsX2V4Y2Vw dGlvbihjdHgsIFBPV0VSUENfRVhDUF9QUklWX09QQyk7DQo+ID4gLcKgwqDCoMKgwqDCoMKg wqByZXR1cm47DQo+ID4gLcKgwqDCoMKgfQ0KPiA+ICvCoMKgwqDCoENIS19TVjsNCj4gDQo+ IFlvdSBoYXZlIENIS19TViBoZXJlLCBidXQgdGhlIG9yaWdpbmFsIGNvZGUgY2hlY2tzIGZv ciBIViwgYXMgZG9lcw0KPiB5b3VyIG5ldyBjb2RlIGZvciB0bGJpYSBhbmQgdGxiaWVsLCBp cyB0aGF0IHJpZ2h0Pw0KPiANCj4gW3NuaXBdDQo+ID4gwqAvKiB0bGJzeW5jICovDQo+ID4g wqBzdGF0aWMgdm9pZCBnZW5fdGxic3luYyhEaXNhc0NvbnRleHQgKmN0eCkNCj4gPiDCoHsN Cj4gPiDCoCNpZiBkZWZpbmVkKENPTkZJR19VU0VSX09OTFkpDQo+ID4gLcKgwqDCoMKgZ2Vu X2ludmFsX2V4Y2VwdGlvbihjdHgsIFBPV0VSUENfRVhDUF9QUklWX09QQyk7DQo+ID4gLSNl bHNlDQo+ID4gLcKgwqDCoMKgaWYgKHVubGlrZWx5KGN0eC0+cHIpKSB7DQo+ID4gLcKgwqDC oMKgwqDCoMKgwqBnZW5faW52YWxfZXhjZXB0aW9uKGN0eCwgUE9XRVJQQ19FWENQX1BSSVZf T1BDKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiAtwqDCoMKgwqB9DQo+ ID4gK8KgwqDCoMKgR0VOX1BSSVY7DQo+ID4gKyNlbHNlwqDCoMKgwqANCj4gPiArwqDCoMKg wqBDSEtfSFY7DQo+ID4gKw0KPiANCj4gT2xkIGNvZGUgZGlkbid0IGNoZWNrIGZvciBIViwg bW9kZSwgYnV0IEFGQUlDVCBpdCBzaG91bGQgaGF2ZSwgc28NCj4gdGhpcw0KPiBsb29rcyBj b3JyZWN0Lg0KPiANCj4gW3NuaXBdDQo+ID4gQEAgLTU5NDEsMTggKzU5MjEsMTYgQEAgc3Rh dGljIHZvaWQgZ2VuX21mYXBpZGkoRGlzYXNDb250ZXh0ICpjdHgpDQo+ID4gwqBzdGF0aWMg dm9pZCBnZW5fdGxiaXZhKERpc2FzQ29udGV4dCAqY3R4KQ0KPiA+IMKgew0KPiA+IMKgI2lm IGRlZmluZWQoQ09ORklHX1VTRVJfT05MWSkNCj4gPiAtwqDCoMKgwqBnZW5faW52YWxfZXhj ZXB0aW9uKGN0eCwgUE9XRVJQQ19FWENQX1BSSVZfT1BDKTsNCj4gPiArwqDCoMKgwqBHRU5f UFJJVjsNCj4gPiDCoCNlbHNlDQo+ID4gwqDCoMKgwqDCoFRDR3YgdDA7DQo+ID4gLcKgwqDC oMKgaWYgKHVubGlrZWx5KGN0eC0+cHIpKSB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqBnZW5f aW52YWxfZXhjZXB0aW9uKGN0eCwgUE9XRVJQQ19FWENQX1BSSVZfT1BDKTsNCj4gPiAtwqDC oMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiAtwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKg wqDCoENIS19TVjsNCj4gDQo+IElzIHRoZSBzYW1lIHRoaW5nIGFzIHRsYml2YXgsIG9yIHNv bWUgYW5jaWVudCBpbnN0cnVjdGlvbj/CoMKgQUZBSUNUDQo+IHRoZQ0KPiBJU0Egc2F5cyB0 bGJpdmF4IGlzIGh5cGVydmlzb3IgcHJpdmlsZWdlZC4NCj4gDQo+ID4gwqDCoMKgwqDCoHQw ID0gdGNnX3RlbXBfbmV3KCk7DQo+ID4gwqDCoMKgwqDCoGdlbl9hZGRyX3JlZ19pbmRleChj dHgsIHQwKTsNCj4gPiDCoMKgwqDCoMKgZ2VuX2hlbHBlcl90bGJpZShjcHVfZW52LCBjcHVf Z3ByW3JCKGN0eC0+b3Bjb2RlKV0pOw0KPiA+IMKgwqDCoMKgwqB0Y2dfdGVtcF9mcmVlKHQw KTsNCj4gPiAtI2VuZGlmDQo+ID4gKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0VSX09O TFkpICovDQo+ID4gwqB9DQo+IA0KPiBbc25pcF0NCj4gPiDCoHN0YXRpYyB2b2lkIGdlbl90 bGJpdmF4X2Jvb2tlMjA2KERpc2FzQ29udGV4dCAqY3R4KQ0KPiA+IMKgew0KPiA+IMKgI2lm IGRlZmluZWQoQ09ORklHX1VTRVJfT05MWSkNCj4gPiAtwqDCoMKgwqBnZW5faW52YWxfZXhj ZXB0aW9uKGN0eCwgUE9XRVJQQ19FWENQX1BSSVZfT1BDKTsNCj4gPiArwqDCoMKgwqBHRU5f UFJJVjsNCj4gPiDCoCNlbHNlDQo+ID4gwqDCoMKgwqDCoFRDR3YgdDA7DQo+ID4gLcKgwqDC oMKgaWYgKHVubGlrZWx5KGN0eC0+cHIpKSB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqBnZW5f aW52YWxfZXhjZXB0aW9uKGN0eCwgUE9XRVJQQ19FWENQX1BSSVZfT1BDKTsNCj4gPiAtwqDC oMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiAtwqDCoMKgwqB9DQo+ID4gwqANCj4gPiArwqDC oMKgwqBDSEtfU1Y7DQo+IA0KPiBJU0Egc2F5cyB0bGJpdmF4IGlzIGh5cGVydmlzb3IgcHJp dmlsZWdlZCB3aGVuIHRoZSBDUFUgaGFzIGENCj4gaHlwZXJ2aXNvciBtb2RlLCB3aGljaCBJ IGd1ZXNzIGJvb2tlMjA2IHByb2JhYmx5IGRvZXNuJ3Q/DQo+IA0KPiA+IMKgwqDCoMKgwqB0 MCA9IHRjZ190ZW1wX25ldygpOw0KPiA+IMKgwqDCoMKgwqBnZW5fYWRkcl9yZWdfaW5kZXgo Y3R4LCB0MCk7DQo+ID4gLQ0KPiA+IMKgwqDCoMKgwqBnZW5faGVscGVyX2Jvb2tlMjA2X3Rs Yml2YXgoY3B1X2VudiwgdDApOw0KPiA+IMKgwqDCoMKgwqB0Y2dfdGVtcF9mcmVlKHQwKTsN Cj4gPiAtI2VuZGlmDQo+ID4gKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0VSX09OTFkp ICovDQo+ID4gwqB9DQo+ID4gwqANCj4gPiDCoHN0YXRpYyB2b2lkIGdlbl90bGJpbHhfYm9v a2UyMDYoRGlzYXNDb250ZXh0ICpjdHgpDQo+ID4gwqB7DQo+ID4gwqAjaWYgZGVmaW5lZChD T05GSUdfVVNFUl9PTkxZKQ0KPiA+IC3CoMKgwqDCoGdlbl9pbnZhbF9leGNlcHRpb24oY3R4 LCBQT1dFUlBDX0VYQ1BfUFJJVl9PUEMpOw0KPiA+ICvCoMKgwqDCoEdFTl9QUklWOw0KPiA+ IMKgI2Vsc2UNCj4gPiDCoMKgwqDCoMKgVENHdiB0MDsNCj4gPiAtwqDCoMKgwqBpZiAodW5s aWtlbHkoY3R4LT5wcikpIHsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdlbl9pbnZhbF9leGNl cHRpb24oY3R4LCBQT1dFUlBDX0VYQ1BfUFJJVl9PUEMpOw0KPiA+IC3CoMKgwqDCoMKgwqDC oMKgcmV0dXJuOw0KPiA+IC3CoMKgwqDCoH0NCj4gPiDCoA0KPiA+ICvCoMKgwqDCoENIS19T VjsNCj4gDQo+IEFuZCBhcHBhcmVudGx5IGh2IHZzLiBzdiBwcml2aWxlZ2Ugb2YgdGxiaWx4 IGRlcGVuZHMgb24gdGhlIEVQQ1INCj4gcmVnaXN0ZXIuwqDCoEFnYWluLCBtYXkgbm90IGJl IHJlbGV2YW50IGZvciAyLjA2Lg0KPiANCj4gPiDCoMKgwqDCoMKgdDAgPSB0Y2dfdGVtcF9u ZXcoKTsNCj4gPiDCoMKgwqDCoMKgZ2VuX2FkZHJfcmVnX2luZGV4KGN0eCwgdDApOw0KPiA+ IMKgDQo+ID4gQEAgLTY2NzIsNyArNjU3NCw3IEBAIHN0YXRpYyB2b2lkIGdlbl90bGJpbHhf Ym9va2UyMDYoRGlzYXNDb250ZXh0DQo+ID4gKmN0eCkNCj4gPiDCoMKgwqDCoMKgfQ0KPiA+ IMKgDQo+ID4gwqDCoMKgwqDCoHRjZ190ZW1wX2ZyZWUodDApOw0KPiA+IC0jZW5kaWYNCj4g PiArI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTRVJfT05MWSkgKi8NCj4gPiDCoH0NCj4g DQo=