From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39689) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bSFvv-0008OM-Kk for qemu-devel@nongnu.org; Tue, 26 Jul 2016 23:55:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bSFvp-0006EG-JQ for qemu-devel@nongnu.org; Tue, 26 Jul 2016 23:54:58 -0400 Message-ID: <1469591678.5978.106.camel@kernel.crashing.org> From: Benjamin Herrenschmidt Date: Wed, 27 Jul 2016 13:54:38 +1000 In-Reply-To: <20160727021939.GU17429@voom.fritz.box> References: <1469571686-7284-1-git-send-email-benh@kernel.crashing.org> <1469571686-7284-16-git-send-email-benh@kernel.crashing.org> <20160727021939.GU17429@voom.fritz.box> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: base64 Subject: Re: [Qemu-devel] [PATCH 16/32] ppc: Rework NIP updates vs. exception generation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org T24gV2VkLCAyMDE2LTA3LTI3IGF0IDEyOjE5ICsxMDAwLCBEYXZpZCBHaWJzb24gd3JvdGU6 DQo+IE9uIFdlZCwgSnVsIDI3LCAyMDE2IGF0IDA4OjIxOjEwQU0gKzEwMDAsIEJlbmphbWlu IEhlcnJlbnNjaG1pZHQNCj4gd3JvdGU6DQo+ID4gDQo+ID4gV2UgbWFrZSBlbnYtPm5pcCBh bG1vc3QgYWx3YXlzIHBvaW50IHRvIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiwNCj4gPiB0 aHVzIGF2b2lkaW5nIGEgbWVzcyBvZiAic3RvcmVfY3VycmVudCIgdnMgInN0b3JlX25leHQi IGluIHRoZQ0KPiA+IGV4Y2VwdGlvbiBoYW5kbGluZy4gVGhlIHN5c2NhbGwgZXhjZXB0aW9u IGtub3dzIHRvIG1vdmUgdGhlIFBDIGJ5DQo+ID4gNCBhbmQgdGhhdCdzIHJlYWxseSBhYm91 dCBpdC4NCj4gPiANCj4gPiBUaGlzIGFjdHVhbGx5IGZpeGVzIGEgbnVtYmVyIG9mIGNhc2Vz IHdoZXJlIHRoZSB0cmFuc2xhdG9yIHdhcw0KPiA+IHNldHRpbmcgZW52LT5uaXAgdG8gY3R4 LT5uaXAgLSA0IChpZS4gdGhlICpjdXJyZW50KiBpbnN0cnVjdGlvbikNCj4gPiBidXQgdGhl IHByb2dyYW0gY2hlY2sgZXhjZXB0aW9uIGhhbmRsZXIgd291bGQgYnJhbmNoIHRvDQo+ID4g InN0b3JlX2N1cnJlbnQiIHdoaWNoIGFwcGxpZXMgYW5vdGhlciAtNCBvZmZzZXQuDQo+ID4g DQo+ID4gU2lnbmVkLW9mZi1ieTogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJu ZWwuY3Jhc2hpbm5nLm9yZw0KPiANCj4gSSdtIGhhdmluZyBhIGZhaXIgYml0IG9mIHRyb3Vi bGUgd3JhcHBpbmcgbXkgaGVhZCBhcm91bmQgdGhpcy7CoMKgU3RpbGwNCj4gY29tbWVudHMg b24gYSBjb3VwbGUgb2Ygc21hbGwgbWF0dGVycy4NCg0KQmVjYXVzZSB0aGUgb3JpZ2luYWwg Y29kZSB3YXMgYSBibG9vZHkgbWVzcyA/IDotKQ0KDQpCYXNpY2FsbHksIHdlIG1ha2Ugc3Vy ZSB0aGF0IHdlIGVpdGhlciBkb24ndCBzZXQgZW52LT5uaXAgKGJlY2F1c2UgdGhlDQpoZWxw ZXIgd2lsbCB1c2UgdGhlIFRCIHNjYW4gbWVjaGFuaXNtIGJhc2VkIG9uIHRoZSByZXR1cm4g YWRkcmVzcykgb3INCndlIHNldCBpdCB0byB0aGUgYWRkcmVzcyBvZiB0aGUgaW5zdHJ1Y3Rp b24gdGhhdCBjYXVzZWQgdGhlIGZhdWx0DQoqYWx3YXlzKi4NCg0KVGhlbiwgaW4gcG93ZXJw Y19leGNwLCB3ZSBqdXN0IHB1dCB0aGF0IGluIFNSUjEgd2l0aCBvbmUgZXhjZXB0aW9uLCB0 aGUNCnN5c2NhbGwsIHdoZXJlIGJ5IHNwZWMsIGl0IGhhcyB0byBiZSBvbiB0aGUgbmV4dCBp bnN0cnVjdGlvbi4NCg0KVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzLCB5b3UgbmVlZCB0byBr bm93IHRoYXQgd2hlbiB0aGUgZ2VuZXJhdG9yIG9mDQphbiBpbnN0cnVjdGlvbiBpcyBjYWxs ZWQsIGN0eC0+bmlwIGhhcyBhbHJlYWR5IGJlZW4gbW92ZWQgdG8gdGhlDQpuZXh0IGluc3Ry dWN0aW9uICgrNCkuDQoNCkNoZWVycywNCkJlbi4NCg0KPiA+IA0KPiA+IC0tLQ0KPiA+IMKg bGludXgtdXNlci9tYWluLmPCoMKgwqDCoMKgwqDCoMKgfMKgwqAxMiArKy0tDQo+ID4gwqB0 YXJnZXQtcHBjL2V4Y3BfaGVscGVyLmMgfCAxNDggKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0NCj4gPiAtLS0tLS0tLS0tLS0NCj4gPiDCoHRhcmdldC1wcGMvdHJhbnNs YXRlLmPCoMKgwqB8wqDCoDU5ICsrKysrKysrKysrLS0tLS0tLS0NCj4gPiDCoDMgZmlsZXMg Y2hhbmdlZCwgOTYgaW5zZXJ0aW9ucygrKSwgMTIzIGRlbGV0aW9ucygtKQ0KPiA+IA0KPiA+ IGRpZmYgLS1naXQgYS9saW51eC11c2VyL21haW4uYyBiL2xpbnV4LXVzZXIvbWFpbi5jDQo+ ID4gaW5kZXggNDYyZTgyMC4uMWQxNDlkYyAxMDA2NDQNCj4gPiAtLS0gYS9saW51eC11c2Vy L21haW4uYw0KPiA+ICsrKyBiL2xpbnV4LXVzZXIvbWFpbi5jDQo+ID4gQEAgLTE4MTQsNyAr MTgxNCw3IEBAIHZvaWQgY3B1X2xvb3AoQ1BVUFBDU3RhdGUgKmVudikNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbnYtPmVy cm9yX2NvZGUpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaW5mby5fc2lmaWVsZHMuX3NpZ2ZhdWx0Ll9hZGRyID0gZW52LT5uaXAg LSA0Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbmZvLl9zaWZpZWxkcy5fc2ln ZmF1bHQuX2FkZHIgPSBlbnYtPm5pcDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHF1ZXVlX3NpZ25hbChlbnYsIGluZm8uc2lfc2lnbm8sICZpbmZvKTsNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoGNhc2Ug UE9XRVJQQ19FWENQX0ZQVTrCoMKgwqDCoMKgwqAvKiBGbG9hdGluZy1wb2ludCB1bmF2YWls YWJsZQ0KPiA+IGV4Y2VwdGlvbsKgwqAqLw0KPiA+IEBAIC0xODIyLDcgKzE4MjIsNyBAQCB2 b2lkIGNwdV9sb29wKENQVVBQQ1N0YXRlICplbnYpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpbmZvLnNpX3NpZ25vID0gVEFSR0VUX1NJR0lMTDsNCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGluZm8uc2lfZXJybm8gPSAwOw0KPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaW5mby5zaV9jb2RlID0gVEFSR0VUX0lMTF9DT1BST0M7DQo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGluZm8uX3NpZmllbGRzLl9zaWdmYXVsdC5fYWRkciA9 IGVudi0+bmlwIC0gNDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5mby5fc2lm aWVsZHMuX3NpZ2ZhdWx0Ll9hZGRyID0gZW52LT5uaXA7DQo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBxdWV1ZV9zaWduYWwoZW52LCBpbmZvLnNpX3NpZ25vLCAmaW5mbyk7DQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqBjYXNlIFBPV0VSUENfRVhDUF9TWVNDQUxMOsKgwqAvKiBTeXN0ZW0gY2FsbA0KPiA+ IGV4Y2VwdGlvbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+IEBA IC0xODM0LDcgKzE4MzQsNyBAQCB2b2lkIGNwdV9sb29wKENQVVBQQ1N0YXRlICplbnYpDQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbmZvLnNpX3NpZ25vID0gVEFSR0VUX1NJ R0lMTDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGluZm8uc2lfZXJybm8gPSAw Ow0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5mby5zaV9jb2RlID0gVEFSR0VU X0lMTF9DT1BST0M7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGluZm8uX3NpZmll bGRzLl9zaWdmYXVsdC5fYWRkciA9IGVudi0+bmlwIC0gNDsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaW5mby5fc2lmaWVsZHMuX3NpZ2ZhdWx0Ll9hZGRyID0gZW52LT5uaXA7 DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBxdWV1ZV9zaWduYWwoZW52LCBpbmZv LnNpX3NpZ25vLCAmaW5mbyk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9ERUNSOsKgwqDC oMKgwqAvKiBEZWNyZW1lbnRlcg0KPiA+IGV4Y2VwdGlvbsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAqLw0KPiA+IEBAIC0xODYyLDcgKzE4NjIsNyBAQCB2b2lkIGNwdV9s b29wKENQVVBQQ1N0YXRlICplbnYpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp bmZvLnNpX3NpZ25vID0gVEFSR0VUX1NJR0lMTDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGluZm8uc2lfZXJybm8gPSAwOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaW5mby5zaV9jb2RlID0gVEFSR0VUX0lMTF9DT1BST0M7DQo+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGluZm8uX3NpZmllbGRzLl9zaWdmYXVsdC5fYWRkciA9IGVudi0+bmlw IC0gNDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5mby5fc2lmaWVsZHMuX3Np Z2ZhdWx0Ll9hZGRyID0gZW52LT5uaXA7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBxdWV1ZV9zaWduYWwoZW52LCBpbmZvLnNpX3NpZ25vLCAmaW5mbyk7DQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBjYXNl IFBPV0VSUENfRVhDUF9FRlBESTrCoMKgwqDCoC8qIEVtYmVkZGVkIGZsb2F0aW5nLXBvaW50 DQo+ID4gZGF0YSBJUlHCoMKgwqDCoMKgwqAqLw0KPiA+IEBAIC0xOTI2LDcgKzE5MjYsNyBA QCB2b2lkIGNwdV9sb29wKENQVVBQQ1N0YXRlICplbnYpDQo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpbmZvLnNpX3NpZ25vID0gVEFSR0VUX1NJR0lMTDsNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGluZm8uc2lfZXJybm8gPSAwOw0KPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaW5mby5zaV9jb2RlID0gVEFSR0VUX0lMTF9DT1BST0M7DQo+ID4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGluZm8uX3NpZmllbGRzLl9zaWdmYXVsdC5fYWRk ciA9IGVudi0+bmlwIC0gNDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5mby5f c2lmaWVsZHMuX3NpZ2ZhdWx0Ll9hZGRyID0gZW52LT5uaXA7DQo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBxdWV1ZV9zaWduYWwoZW52LCBpbmZvLnNpX3NpZ25vLCAmaW5mbyk7 DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9QSVQ6wqDCoMKgwqDCoMKgLyogUHJvZ3JhbW1h YmxlIGludGVydmFsIHRpbWVyDQo+ID4gSVJRwqDCoMKgwqDCoMKgwqAqLw0KPiA+IEBAIC0y MDAxLDkgKzIwMDEsOSBAQCB2b2lkIGNwdV9sb29wKENQVVBQQ1N0YXRlICplbnYpDQo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZW52LT5ncHJbNV0sIGVudi0+Z3ByWzZdLCBlbnYtDQo+ID4gPmdwcls3XSwNCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBlbnYtPmdwcls4XSwgMCwgMCk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAocmV0ID09IC1UQVJHRVRfRVJFU1RBUlRTWVMpIHsNCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbnYtPm5pcCAtPSA0Ow0KPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW52LT5uaXAgKz0gNDsN Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgPT0gKHRhcmdldF91bG9u ZykoLVRBUkdFVF9RRU1VX0VTSUdSRVRVUk4pKSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC8qIFJldHVybmluZyBmcm9tIGEgc3VjY2Vzc2Z1bCBzaWdyZXR1 cm4gc3lzY2FsbC4NCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgQXZvaWQgY29ycnVwdGluZyByZWdpc3RlciBzdGF0ZS7CoMKgKi8NCj4gPiBkaWZmIC0t Z2l0IGEvdGFyZ2V0LXBwYy9leGNwX2hlbHBlci5jIGIvdGFyZ2V0LXBwYy9leGNwX2hlbHBl ci5jDQo+ID4gaW5kZXggNTYzYzdiYy4uNTcwZDE4OCAxMDA2NDQNCj4gPiAtLS0gYS90YXJn ZXQtcHBjL2V4Y3BfaGVscGVyLmMNCj4gPiArKysgYi90YXJnZXQtcHBjL2V4Y3BfaGVscGVy LmMNCj4gPiBAQCAtMTk4LDcgKzE5OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwb3dlcnBj X2V4Y3AoUG93ZXJQQ0NQVQ0KPiA+ICpjcHUsIGludCBleGNwX21vZGVsLCBpbnQgZXhjcCkN Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBkZWZhdWx0Og0KPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZ290byBleGNwX2ludmFsaWQ7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgfQ0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9uZXh0Ow0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQX01DSEVDSzrC oMKgwqDCoC8qIE1hY2hpbmUgY2hlY2sNCj4gPiBleGNlcHRpb27CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoGlmIChtc3Jf bWUgPT0gMCkgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogTWFjaGluZSBj aGVjayBleGNlcHRpb24gaXMgbm90IGVuYWJsZWQuDQo+ID4gQEAgLTIwOSw3ICsyMDksNyBA QCBzdGF0aWMgaW5saW5lIHZvaWQgcG93ZXJwY19leGNwKFBvd2VyUENDUFUNCj4gPiAqY3B1 LCBpbnQgZXhjcF9tb2RlbCwgaW50IGV4Y3ApDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAocWVtdV9sb2dfc2VwYXJhdGUoKSkgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBxZW11X2xvZygiTWFjaGluZSBjaGVjayB3aGlsZSBub3QgYWxs b3dlZC4gIg0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIkVudGVyaW5nIGNoZWNrc3RvcCBzdGF0ZVxuIik7DQo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ IA0KPiBMb29rcyBsaWtlIGFuIGFjY2lkZW50YWwgd2hpdGVzcGFjZSBjaGFuZ2UuDQo+IA0K PiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3MtPmhhbHRlZCA9IDE7DQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjcy0+aW50ZXJydXB0X3JlcXVlc3QgfD0g Q1BVX0lOVEVSUlVQVF9FWElUVEI7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+IEBA IC0yMzUsMTYgKzIzNSwxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG93ZXJwY19leGNwKFBv d2VyUENDUFUNCj4gPiAqY3B1LCBpbnQgZXhjcF9tb2RlbCwgaW50IGV4Y3ApDQo+ID4gwqDC oMKgwqDCoMKgwqDCoMKgZGVmYXVsdDoNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJyZWFrOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiAtwqDCoMKgwqDCoMKgwqDC oGdvdG8gc3RvcmVfbmV4dDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IMKg wqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9EU0k6wqDCoMKgwqDCoMKgwqAvKiBEYXRhIHN0 b3JhZ2UNCj4gPiBleGNlcHRpb27CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgTE9HX0VYQ1AoIkRTSSBleGNlcHRpb246 IERTSVNSPSIgVEFSR0VUX0ZNVF9seCIgREFSPSINCj4gPiBUQVJHRVRfRk1UX2x4DQo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIlxuIiwgZW52LT5zcHJbU1BS X0RTSVNSXSwgZW52LT5zcHJbU1BSX0RBUl0pOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290 byBzdG9yZV9uZXh0Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKg wqDCoGNhc2UgUE9XRVJQQ19FWENQX0lTSTrCoMKgwqDCoMKgwqDCoC8qIEluc3RydWN0aW9u IHN0b3JhZ2UNCj4gPiBleGNlcHRpb27CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoExPR19FWENQKCJJU0kgZXhjZXB0aW9uOiBtc3I9IiBUQVJH RVRfRk1UX2x4ICIsIG5pcD0iDQo+ID4gVEFSR0VUX0ZNVF9seA0KPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJcbiIsIG1zciwgZW52LT5uaXApOw0KPiA+IMKg wqDCoMKgwqDCoMKgwqDCoG1zciB8PSBlbnYtPmVycm9yX2NvZGU7DQo+ID4gLcKgwqDCoMKg wqDCoMKgwqBnb3RvIHN0b3JlX25leHQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsN Cj4gPiDCoMKgwqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1BfRVhURVJOQUw6wqDCoC8qIEV4dGVy bmFsDQo+ID4gaW5wdXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAqLw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoGNzID0gQ1BVKGNwdSk7 DQo+ID4gwqANCj4gPiBAQCAtMjU4LDEzICsyNTgsMTQgQEAgc3RhdGljIGlubGluZSB2b2lk IHBvd2VycGNfZXhjcChQb3dlclBDQ1BVDQo+ID4gKmNwdSwgaW50IGV4Y3BfbW9kZWwsIGlu dCBleGNwKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogSUFDSyB0aGUgSVJR IG9uIGRlbGl2ZXJ5ICovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbnYtPnNw cltTUFJfQk9PS0VfRVBSXSA9IGxkbF9waHlzKGNzLT5hcywgZW52LQ0KPiA+ID5tcGljX2lh Y2spOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdv dG8gc3RvcmVfbmV4dDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDC oMKgwqBjYXNlIFBPV0VSUENfRVhDUF9BTElHTjrCoMKgwqDCoMKgLyogQWxpZ25tZW50DQo+ ID4gZXhjZXB0aW9uwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAqLw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoC8qIFhYWDogdGhpcyBpcyBmYWxzZSAqLw0K PiA+IMKgwqDCoMKgwqDCoMKgwqDCoC8qIEdldCByUy9yRCBhbmQgckEgZnJvbSBmYXVsdGlu ZyBvcGNvZGUgKi8NCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGVudi0+c3ByW1NQUl9EU0lTUl0g fD0gKGNwdV9sZGxfY29kZShlbnYsIChlbnYtPm5pcCAtIDQpKQ0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgLyogQnJva2VuIGZvciBMRSBtb2RlICovDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBl bnYtPnNwcltTUFJfRFNJU1JdIHw9IChjcHVfbGRsX2NvZGUoZW52LCBlbnYtPm5pcCkNCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAmIDB4MDNGRjAwMDApID4+IDE2Ow0KPiA+IC3CoMKgwqDCoMKgwqDC oMKgZ290byBzdG9yZV9uZXh0Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4g wqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQX1BST0dSQU06wqDCoMKgLyogUHJvZ3JhbQ0K PiA+IGV4Y2VwdGlvbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgc3dpdGNoIChlbnYtPmVycm9yX2Nv ZGUgJiB+MHhGKSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1Bf RlA6DQo+ID4gQEAgLTI4MCwxNSArMjgxLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwb3dl cnBjX2V4Y3AoUG93ZXJQQ0NQVQ0KPiA+ICpjcHUsIGludCBleGNwX21vZGVsLCBpbnQgZXhj cCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKiBwcmVjaXNlIGluIHRoZSBN U1IuDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBtc3IgfD0gMHgwMDEwMDAwMDsNCj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZ290byBzdG9yZV9uZXh0Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBicmVhazsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9J TlZBTDoNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoExPR19FWENQKCJJbnZhbGlk IGluc3RydWN0aW9uIGF0ICIgVEFSR0VUX0ZNVF9seCAiXG4iLA0KPiA+IGVudi0+bmlwKTsN Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zciB8PSAweDAwMDgwMDAwOw0KPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW52LT5zcHJbU1BSX0JPT0tFX0VTUl0gPSBF U1JfUElMOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBTb21lIGludmFsaWRz IHdpbGwgaGF2ZSB0aGUgUEMgaW4gdGhlIHJpZ2h0IHBsYWNlDQo+ID4gYWxyZWFkeSAqLw0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZW52LT5lcnJvcl9jb2RlICYgUE9X RVJQQ19FWENQX0lOVkFMX0xTV1gpIHsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBnb3RvIHN0b3JlX25leHQ7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0NCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKg wqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQX1BSSVY6DQo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBtc3IgfD0gMHgwMDA0MDAwMDsNCj4gPiBAQCAtMzA0LDIzICszMDEsMTYg QEAgc3RhdGljIGlubGluZSB2b2lkIHBvd2VycGNfZXhjcChQb3dlclBDQ1BVDQo+ID4gKmNw dSwgaW50IGV4Y3BfbW9kZWwsIGludCBleGNwKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbnYtPmVycm9yX2NvZGUpOw0KPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgfQ0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9jdXJyZW50Ow0KPiA+IC3CoMKgwqDC oGNhc2UgUE9XRVJQQ19FWENQX0hWX0VNVToNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoHNycjAg PSBTUFJfSFNSUjA7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqBzcnIxID0gU1BSX0hTUlIxOw0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgbmV3X21zciB8PSAodGFyZ2V0X3Vsb25nKU1TUl9IVkI7 DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqBuZXdfbXNyIHw9IGVudi0+bXNyICYgKCh0YXJnZXRf dWxvbmcpMSA8PCBNU1JfUkkpOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgLyogU29tZSBpbnZh bGlkcyB3aWxsIGhhdmUgdGhlIFBDIGluIHRoZSByaWdodCBwbGFjZQ0KPiA+IGFscmVhZHkg Ki8NCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGlmIChlbnYtPmVycm9yX2NvZGUgPT0NCj4gPiAo UE9XRVJQQ19FWENQX0lOVkFMfFBPV0VSUENfRVhDUF9JTlZBTF9MU1dYKSkgew0KPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gc3RvcmVfbmV4dDsNCj4gPiAt wqDCoMKgwqDCoMKgwqDCoH0NCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdvdG8gc3RvcmVfY3Vy cmVudDsNCj4gPiAtwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9GUFU6wqDCoMKgwqDCoMKg wqAvKiBGbG9hdGluZy1wb2ludCB1bmF2YWlsYWJsZQ0KPiA+IGV4Y2VwdGlvbsKgwqDCoMKg wqAqLw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9jdXJyZW50Ow0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQ X1NZU0NBTEw6wqDCoMKgLyogU3lzdGVtIGNhbGwNCj4gPiBleGNlcHRpb27CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKg wqBkdW1wX3N5c2NhbGwoZW52KTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBsZXYgPSBlbnYt PmVycm9yX2NvZGU7DQo+ID4gwqANCj4gPiArwqDCoMKgwqDCoMKgwqDCoC8qIFdlIG5lZWQg dG8gY29ycmVjdCB0aGUgTklQIHdoaWNoIGluIHRoaXMgY2FzZSBpcw0KPiA+IHN1cHBvc2Vk DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCogdG8gcG9pbnQgdG8gdGhlIG5leHQgaW5zdHJ1 Y3Rpb24NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgKi8NCj4gPiArwqDCoMKgwqDCoMKgwqDC oGVudi0+bmlwICs9IDQ7DQo+ID4gKw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoC8qICJQQVBS IG1vZGUiIGJ1aWx0LWluIGh5cGVyY2FsbCBlbXVsYXRpb24gKi8NCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoKGxldiA9PSAxKSAmJiBjcHVfcHBjX2h5cGVyY2FsbCkgew0KPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3B1X3BwY19oeXBlcmNhbGwoY3B1KTsNCj4gPiBA QCAtMzI5LDE1ICszMTksMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHBvd2VycGNfZXhjcChQ b3dlclBDQ1BVDQo+ID4gKmNwdSwgaW50IGV4Y3BfbW9kZWwsIGludCBleGNwKQ0KPiA+IMKg wqDCoMKgwqDCoMKgwqDCoGlmIChsZXYgPT0gMSkgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgbmV3X21zciB8PSAodGFyZ2V0X3Vsb25nKU1TUl9IVkI7DQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgfQ0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9uZXh0Ow0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gK8KgwqDCoMKgY2FzZSBQT1dFUlBD X0VYQ1BfRlBVOsKgwqDCoMKgwqDCoMKgLyogRmxvYXRpbmctcG9pbnQgdW5hdmFpbGFibGUN Cj4gPiBleGNlcHRpb27CoMKgwqDCoMKgKi8NCj4gPiDCoMKgwqDCoMKgY2FzZSBQT1dFUlBD X0VYQ1BfQVBVOsKgwqDCoMKgwqDCoMKgLyogQXV4aWxpYXJ5IHByb2Nlc3Nvcg0KPiA+IHVu YXZhaWxhYmxlwqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKg Z290byBzdG9yZV9jdXJyZW50Ow0KPiA+IMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9E RUNSOsKgwqDCoMKgwqDCoC8qIERlY3JlbWVudGVyDQo+ID4gZXhjZXB0aW9uwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQo+ID4gLcKgwqDCoMKgwqDCoMKg wqBnb3RvIHN0b3JlX25leHQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiDC oMKgwqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1BfRklUOsKgwqDCoMKgwqDCoMKgLyogRml4ZWQt aW50ZXJ2YWwgdGltZXINCj4gPiBpbnRlcnJ1cHTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKi8N Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqAvKiBGSVQgb24gNHh4ICovDQo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgTE9HX0VYQ1AoIkZJVCBleGNlcHRpb25cbiIpOw0KPiA+IC3CoMKgwqDCoMKg wqDCoMKgZ290byBzdG9yZV9uZXh0Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ ID4gwqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQX1dEVDrCoMKgwqDCoMKgwqDCoC8qIFdh dGNoZG9nIHRpbWVyDQo+ID4gaW50ZXJydXB0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgTE9HX0VYQ1AoIldEVCBleGNlcHRp b25cbiIpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoHN3aXRjaCAoZXhjcF9tb2RlbCkgew0K PiA+IEBAIC0zNDgsMTEgKzMzOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG93ZXJwY19l eGNwKFBvd2VyUENDUFUNCj4gPiAqY3B1LCBpbnQgZXhjcF9tb2RlbCwgaW50IGV4Y3ApDQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgZGVmYXVsdDoNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiAtwqDCoMKgwqDC oMKgwqDCoGdvdG8gc3RvcmVfbmV4dDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0K PiA+IMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9EVExCOsKgwqDCoMKgwqDCoC8qIERh dGEgVExCDQo+ID4gZXJyb3LCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9u ZXh0Ow0KPiA+IMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9JVExCOsKgwqDCoMKgwqDC oC8qIEluc3RydWN0aW9uIFRMQg0KPiA+IGVycm9ywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCovDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqBnb3RvIHN0b3JlX25l eHQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiDCoMKgwqDCoMKgY2FzZSBQ T1dFUlBDX0VYQ1BfREVCVUc6wqDCoMKgwqDCoC8qIERlYnVnDQo+ID4gaW50ZXJydXB0wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgc3dpdGNoIChleGNwX21vZGVsKSB7DQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1BfQk9PS0U6DQo+ID4gQEAgLTM2NywzMyAr MzU2LDMzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwb3dlcnBjX2V4Y3AoUG93ZXJQQ0NQVQ0K PiA+ICpjcHUsIGludCBleGNwX21vZGVsLCBpbnQgZXhjcCkNCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqB9DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgLyogWFhYOiBUT0RPICovDQo+ID4gwqDC oMKgwqDCoMKgwqDCoMKgY3B1X2Fib3J0KGNzLCAiRGVidWcgZXhjZXB0aW9uIGlzIG5vdCBp bXBsZW1lbnRlZCB5ZXQNCj4gPiAhXG4iKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdvdG8g c3RvcmVfbmV4dDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKg wqBjYXNlIFBPV0VSUENfRVhDUF9TUEVVOsKgwqDCoMKgwqDCoC8qIFNQRS9lbWJlZGRlZCBm bG9hdGluZy1wb2ludA0KPiA+IHVuYXZhaWxhYmxlwqDCoCovDQo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgZW52LT5zcHJbU1BSX0JPT0tFX0VTUl0gPSBFU1JfU1BWOw0KPiA+IC3CoMKgwqDC oMKgwqDCoMKgZ290byBzdG9yZV9jdXJyZW50Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJl YWs7DQo+ID4gwqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQX0VGUERJOsKgwqDCoMKgwqAv KiBFbWJlZGRlZCBmbG9hdGluZy1wb2ludCBkYXRhDQo+ID4gaW50ZXJydXB0wqDCoMKgKi8N Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqAvKiBYWFg6IFRPRE8gKi8NCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqBjcHVfYWJvcnQoY3MsICJFbWJlZGRlZCBmbG9hdGluZyBwb2ludCBkYXRhIGV4 Y2VwdGlvbiAiDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAi aXMgbm90IGltcGxlbWVudGVkIHlldCAhXG4iKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBl bnYtPnNwcltTUFJfQk9PS0VfRVNSXSA9IEVTUl9TUFY7DQo+ID4gLcKgwqDCoMKgwqDCoMKg wqBnb3RvIHN0b3JlX25leHQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiDC oMKgwqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1BfRUZQUkk6wqDCoMKgwqDCoC8qIEVtYmVkZGVk IGZsb2F0aW5nLXBvaW50IHJvdW5kDQo+ID4gaW50ZXJydXB0wqDCoCovDQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgLyogWFhYOiBUT0RPICovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgY3B1 X2Fib3J0KGNzLCAiRW1iZWRkZWQgZmxvYXRpbmcgcG9pbnQgcm91bmQgZXhjZXB0aW9uICIN Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJpcyBub3QgaW1w bGVtZW50ZWQgeWV0ICFcbiIpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoGVudi0+c3ByW1NQ Ul9CT09LRV9FU1JdID0gRVNSX1NQVjsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdvdG8gc3Rv cmVfbmV4dDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKgwqBj YXNlIFBPV0VSUENfRVhDUF9FUEVSRk06wqDCoMKgwqAvKiBFbWJlZGRlZCBwZXJmb3JtYW5j ZSBtb25pdG9yDQo+ID4gaW50ZXJydXB0wqDCoMKgKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKg wqAvKiBYWFg6IFRPRE8gKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBjcHVfYWJvcnQoY3Ms DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiUGVyZm9ybWFu Y2UgY291bnRlciBleGNlcHRpb24gaXMgbm90DQo+ID4gaW1wbGVtZW50ZWQgeWV0ICFcbiIp Ow0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9uZXh0Ow0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQX0RPT1JJ OsKgwqDCoMKgwqAvKiBFbWJlZGRlZCBkb29yYmVsbA0KPiA+IGludGVycnVwdMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9y ZV9uZXh0Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKgwqDCoGNh c2UgUE9XRVJQQ19FWENQX0RPT1JDSTrCoMKgwqDCoC8qIEVtYmVkZGVkIGRvb3JiZWxsIGNy aXRpY2FsDQo+ID4gaW50ZXJydXB0wqDCoMKgwqDCoCovDQo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgc3JyMCA9IFNQUl9CT09LRV9DU1JSMDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBzcnIx ID0gU1BSX0JPT0tFX0NTUlIxOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9u ZXh0Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKgwqDCoGNhc2Ug UE9XRVJQQ19FWENQX1JFU0VUOsKgwqDCoMKgwqAvKiBTeXN0ZW0gcmVzZXQNCj4gPiBleGNl cHRpb27CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQo+ID4gwqDC oMKgwqDCoMKgwqDCoMKgaWYgKG1zcl9wb3cpIHsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC8qIGluZGljYXRlIHRoYXQgd2UgcmVzdW1lZCBmcm9tIHBvd2VyIHNhdmUgbW9k ZSAqLw0KPiA+IEBAIC00MDQsNjUgKzM5Myw0MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcG93 ZXJwY19leGNwKFBvd2VyUENDUFUNCj4gPiAqY3B1LCBpbnQgZXhjcF9tb2RlbCwgaW50IGV4 Y3ApDQo+ID4gwqANCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBuZXdfbXNyIHw9ICh0YXJnZXRf dWxvbmcpTVNSX0hWQjsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBhaWwgPSAwOw0KPiA+IC3C oMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9uZXh0Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg YnJlYWs7DQo+ID4gwqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQX0RTRUc6wqDCoMKgwqDC oMKgLyogRGF0YSBzZWdtZW50DQo+ID4gZXhjZXB0aW9uwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9u ZXh0Ow0KPiA+IMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9JU0VHOsKgwqDCoMKgwqDC oC8qIEluc3RydWN0aW9uIHNlZ21lbnQNCj4gPiBleGNlcHRpb27CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAqLw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9uZXh0Ow0KPiA+ IC3CoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQX0hERUNSOsKgwqDCoMKgwqAvKiBIeXBlcnZp c29yIGRlY3JlbWVudGVyDQo+ID4gZXhjZXB0aW9uwqDCoMKgwqDCoMKgwqDCoMKgKi8NCj4g PiAtwqDCoMKgwqDCoMKgwqDCoHNycjAgPSBTUFJfSFNSUjA7DQo+ID4gLcKgwqDCoMKgwqDC oMKgwqBzcnIxID0gU1BSX0hTUlIxOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgbmV3X21zciB8 PSAodGFyZ2V0X3Vsb25nKU1TUl9IVkI7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqBuZXdfbXNy IHw9IGVudi0+bXNyICYgKCh0YXJnZXRfdWxvbmcpMSA8PCBNU1JfUkkpOw0KPiA+IC3CoMKg wqDCoMKgwqDCoMKgZ290byBzdG9yZV9uZXh0Ow0KPiA+IMKgwqDCoMKgwqBjYXNlIFBPV0VS UENfRVhDUF9UUkFDRTrCoMKgwqDCoMKgLyogVHJhY2UNCj4gPiBleGNlcHRpb27CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKi8NCj4gPiAt wqDCoMKgwqDCoMKgwqDCoGdvdG8gc3RvcmVfbmV4dDsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oGJyZWFrOw0KPiA+ICvCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQX0hERUNSOsKgwqDCoMKg wqAvKiBIeXBlcnZpc29yIGRlY3JlbWVudGVyDQo+ID4gZXhjZXB0aW9uwqDCoMKgwqDCoMKg wqDCoMKgKi8NCj4gPiDCoMKgwqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1BfSERTSTrCoMKgwqDC oMKgwqAvKiBIeXBlcnZpc29yIGRhdGEgc3RvcmFnZQ0KPiA+IGV4Y2VwdGlvbsKgwqDCoMKg wqDCoMKgwqAqLw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgc3JyMCA9IFNQUl9IU1JSMDsNCj4g PiAtwqDCoMKgwqDCoMKgwqDCoHNycjEgPSBTUFJfSFNSUjE7DQo+ID4gLcKgwqDCoMKgwqDC oMKgwqBuZXdfbXNyIHw9ICh0YXJnZXRfdWxvbmcpTVNSX0hWQjsNCj4gPiAtwqDCoMKgwqDC oMKgwqDCoG5ld19tc3IgfD0gZW52LT5tc3IgJiAoKHRhcmdldF91bG9uZykxIDw8IE1TUl9S SSk7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqBnb3RvIHN0b3JlX25leHQ7DQo+ID4gwqDCoMKg wqDCoGNhc2UgUE9XRVJQQ19FWENQX0hJU0k6wqDCoMKgwqDCoMKgLyogSHlwZXJ2aXNvciBp bnN0cnVjdGlvbiBzdG9yYWdlDQo+ID4gZXhjZXB0aW9uICovDQo+ID4gLcKgwqDCoMKgwqDC oMKgwqBzcnIwID0gU1BSX0hTUlIwOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgc3JyMSA9IFNQ Ul9IU1JSMTsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoG5ld19tc3IgfD0gKHRhcmdldF91bG9u ZylNU1JfSFZCOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgbmV3X21zciB8PSBlbnYtPm1zciAm ICgodGFyZ2V0X3Vsb25nKTEgPDwgTVNSX1JJKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdv dG8gc3RvcmVfbmV4dDsNCj4gPiDCoMKgwqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1BfSERTRUc6 wqDCoMKgwqDCoC8qIEh5cGVydmlzb3IgZGF0YSBzZWdtZW50DQo+ID4gZXhjZXB0aW9uwqDC oMKgwqDCoMKgwqDCoCovDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqBzcnIwID0gU1BSX0hTUlIw Ow0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgc3JyMSA9IFNQUl9IU1JSMTsNCj4gPiAtwqDCoMKg wqDCoMKgwqDCoG5ld19tc3IgfD0gKHRhcmdldF91bG9uZylNU1JfSFZCOw0KPiA+IC3CoMKg wqDCoMKgwqDCoMKgbmV3X21zciB8PSBlbnYtPm1zciAmICgodGFyZ2V0X3Vsb25nKTEgPDwg TVNSX1JJKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdvdG8gc3RvcmVfbmV4dDsNCj4gPiDC oMKgwqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1BfSElTRUc6wqDCoMKgwqDCoC8qIEh5cGVydmlz b3IgaW5zdHJ1Y3Rpb24gc2VnbWVudA0KPiA+IGV4Y2VwdGlvbiAqLw0KPiA+ICvCoMKgwqDC oGNhc2UgUE9XRVJQQ19FWENQX0hWX0VNVToNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBzcnIw ID0gU1BSX0hTUlIwOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoHNycjEgPSBTUFJfSFNSUjE7 DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgbmV3X21zciB8PSAodGFyZ2V0X3Vsb25nKU1TUl9I VkI7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgbmV3X21zciB8PSBlbnYtPm1zciAmICgodGFy Z2V0X3Vsb25nKTEgPDwgTVNSX1JJKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdvdG8gc3Rv cmVfbmV4dDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKgwqBj YXNlIFBPV0VSUENfRVhDUF9WUFU6wqDCoMKgwqDCoMKgwqAvKiBWZWN0b3IgdW5hdmFpbGFi bGUNCj4gPiBleGNlcHRpb27CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQo+ID4gLcKg wqDCoMKgwqDCoMKgwqBnb3RvIHN0b3JlX2N1cnJlbnQ7DQo+ID4gwqDCoMKgwqDCoGNhc2Ug UE9XRVJQQ19FWENQX1ZTWFU6wqDCoMKgwqDCoMKgwqAvKiBWU1ggdW5hdmFpbGFibGUNCj4g PiBleGNlcHRpb27CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+IC3CoMKg wqDCoMKgwqDCoMKgZ290byBzdG9yZV9jdXJyZW50Ow0KPiA+IMKgwqDCoMKgwqBjYXNlIFBP V0VSUENfRVhDUF9GVTrCoMKgwqDCoMKgwqDCoMKgwqAvKiBGYWNpbGl0eSB1bmF2YWlsYWJs ZQ0KPiA+IGV4Y2VwdGlvbsKgwqDCoMKgwqDCoMKgwqDCoMKgKi8NCj4gPiAtwqDCoMKgwqDC oMKgwqDCoGdvdG8gc3RvcmVfY3VycmVudDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFr Ow0KPiA+IMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9QSVQ6wqDCoMKgwqDCoMKgwqAv KiBQcm9ncmFtbWFibGUgaW50ZXJ2YWwgdGltZXINCj4gPiBpbnRlcnJ1cHTCoMKgwqDCoCov DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgTE9HX0VYQ1AoIlBJVCBleGNlcHRpb25cbiIpOw0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9uZXh0Ow0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQX0lPOsKgwqDC oMKgwqDCoMKgwqAvKiBJTyBlcnJvcg0KPiA+IGV4Y2VwdGlvbsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDC oC8qIFhYWDogVE9ETyAqLw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoGNwdV9hYm9ydChjcywg IjYwMSBJTyBlcnJvciBleGNlcHRpb24gaXMgbm90IGltcGxlbWVudGVkDQo+ID4geWV0ICFc biIpOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9uZXh0Ow0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQX1JV Tk06wqDCoMKgwqDCoMKgLyogUnVuIG1vZGUNCj4gPiBleGNlcHRpb27CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKi8NCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqAvKiBYWFg6IFRPRE8gKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBjcHVfYWJvcnQo Y3MsICI2MDEgcnVuIG1vZGUgZXhjZXB0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZA0KPiA+IHll dCAhXG4iKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdvdG8gc3RvcmVfbmV4dDsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhD UF9FTVVMOsKgwqDCoMKgwqDCoC8qIEVtdWxhdGlvbiB0cmFwDQo+ID4gZXhjZXB0aW9uwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgLyogWFhYOiBUT0RPICovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgY3B1X2Fib3J0KGNz LCAiNjAyIGVtdWxhdGlvbiB0cmFwIGV4Y2VwdGlvbiAiDQo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiaXMgbm90IGltcGxlbWVudGVkIHlldCAhXG4iKTsN Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdvdG8gc3RvcmVfbmV4dDsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9JRlRMQjrC oMKgwqDCoMKgLyogSW5zdHJ1Y3Rpb24gZmV0Y2ggVExCDQo+ID4gZXJyb3LCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKGV4 Y3BfbW9kZWwpIHsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF82 MDI6DQo+ID4gQEAgLTU3Nyw3MSArNTQzLDY3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwb3dl cnBjX2V4Y3AoUG93ZXJQQ0NQVQ0KPiA+ICpjcHUsIGludCBleGNwX21vZGVsLCBpbnQgZXhj cCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNwdV9hYm9ydChjcywgIkludmFs aWQgZGF0YSBzdG9yZSBUTEIgbWlzcw0KPiA+IGV4Y2VwdGlvblxuIik7DQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ ID4gLcKgwqDCoMKgwqDCoMKgwqBnb3RvIHN0b3JlX25leHQ7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqBicmVhazsNCj4gPiDCoMKgwqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1BfRlBBOsKgwqDC oMKgwqDCoMKgLyogRmxvYXRpbmctcG9pbnQgYXNzaXN0DQo+ID4gZXhjZXB0aW9uwqDCoMKg wqDCoMKgwqDCoMKgwqAqLw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoC8qIFhYWDogVE9ETyAq Lw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoGNwdV9hYm9ydChjcywgIkZsb2F0aW5nIHBvaW50 IGFzc2lzdCBleGNlcHRpb24gIg0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgImlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgIVxuIik7DQo+ID4gLcKgwqDCoMKg wqDCoMKgwqBnb3RvIHN0b3JlX25leHQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsN Cj4gPiDCoMKgwqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1BfREFCUjrCoMKgwqDCoMKgwqAvKiBE YXRhIGFkZHJlc3MNCj4gPiBicmVha3BvaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqAvKiBYWFg6IFRPRE8gKi8NCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqBjcHVfYWJvcnQoY3MsICJEQUJSIGV4Y2VwdGlvbiBpcyBu b3QgaW1wbGVtZW50ZWQgeWV0DQo+ID4gIVxuIik7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqBn b3RvIHN0b3JlX25leHQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiDCoMKg wqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1BfSUFCUjrCoMKgwqDCoMKgwqAvKiBJbnN0cnVjdGlv biBhZGRyZXNzDQo+ID4gYnJlYWtwb2ludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoC8qIFhYWDogVE9ETyAqLw0KPiA+IMKgwqDCoMKgwqDCoMKg wqDCoGNwdV9hYm9ydChjcywgIklBQlIgZXhjZXB0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCB5 ZXQNCj4gPiAhXG4iKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdvdG8gc3RvcmVfbmV4dDsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKgwqBjYXNlIFBPV0VS UENfRVhDUF9TTUk6wqDCoMKgwqDCoMKgwqAvKiBTeXN0ZW0gbWFuYWdlbWVudA0KPiA+IGlu dGVycnVwdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+IMKgwqDCoMKgwqDC oMKgwqDCoC8qIFhYWDogVE9ETyAqLw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoGNwdV9hYm9y dChjcywgIlNNSSBleGNlcHRpb24gaXMgbm90IGltcGxlbWVudGVkIHlldCAhXG4iKTsNCj4g PiAtwqDCoMKgwqDCoMKgwqDCoGdvdG8gc3RvcmVfbmV4dDsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9USEVSTTrCoMKg wqDCoMKgLyogVGhlcm1hbA0KPiA+IGludGVycnVwdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgLyog WFhYOiBUT0RPICovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgY3B1X2Fib3J0KGNzLCAiVGhl cm1hbCBtYW5hZ2VtZW50IGV4Y2VwdGlvbiAiDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAiaXMgbm90IGltcGxlbWVudGVkIHlldCAhXG4iKTsNCj4gPiAt wqDCoMKgwqDCoMKgwqDCoGdvdG8gc3RvcmVfbmV4dDsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oGJyZWFrOw0KPiA+IMKgwqDCoMKgwqBjYXNlIFBPV0VSUENfRVhDUF9QRVJGTTrCoMKgwqDC oMKgLyogRW1iZWRkZWQgcGVyZm9ybWFuY2UgbW9uaXRvcg0KPiA+IGludGVycnVwdMKgwqDC oCovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgLyogWFhYOiBUT0RPICovDQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgY3B1X2Fib3J0KGNzLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIlBlcmZvcm1hbmNlIGNvdW50ZXIgZXhjZXB0aW9uIGlzIG5vdA0K PiA+IGltcGxlbWVudGVkIHlldCAhXG4iKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdvdG8g c3RvcmVfbmV4dDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKg wqBjYXNlIFBPV0VSUENfRVhDUF9WUFVBOsKgwqDCoMKgwqDCoC8qIFZlY3RvciBhc3Npc3QN Cj4gPiBleGNlcHRpb27CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0K PiA+IMKgwqDCoMKgwqDCoMKgwqDCoC8qIFhYWDogVE9ETyAqLw0KPiA+IMKgwqDCoMKgwqDC oMKgwqDCoGNwdV9hYm9ydChjcywgIlZQVSBhc3Npc3QgZXhjZXB0aW9uIGlzIG5vdCBpbXBs ZW1lbnRlZCB5ZXQNCj4gPiAhXG4iKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdvdG8gc3Rv cmVfbmV4dDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+IMKgwqDCoMKgwqBj YXNlIFBPV0VSUENfRVhDUF9TT0ZUUDrCoMKgwqDCoMKgLyogU29mdCBwYXRjaA0KPiA+IGV4 Y2VwdGlvbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgLyogWFhYOiBUT0RPICovDQo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgY3B1X2Fib3J0KGNzLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIjk3MCBzb2Z0LXBhdGNoIGV4Y2VwdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQg eWV0DQo+ID4gIVxuIik7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqBnb3RvIHN0b3JlX25leHQ7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiDCoMKgwqDCoMKgY2FzZSBQT1dF UlBDX0VYQ1BfTUFJTlQ6wqDCoMKgwqDCoC8qIE1haW50ZW5hbmNlDQo+ID4gZXhjZXB0aW9u wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgLyogWFhYOiBUT0RPICovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgY3B1 X2Fib3J0KGNzLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Ijk3MCBtYWludGVuYW5jZSBleGNlcHRpb24gaXMgbm90IGltcGxlbWVudGVkDQo+ID4geWV0 ICFcbiIpOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290byBzdG9yZV9uZXh0Ow0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19FWENQ X01FWFRCUjrCoMKgwqDCoC8qIE1hc2thYmxlIGV4dGVybmFsDQo+ID4gYnJlYWtwb2ludMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqAvKiBY WFg6IFRPRE8gKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBjcHVfYWJvcnQoY3MsICJNYXNr YWJsZSBleHRlcm5hbCBleGNlcHRpb24gIg0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgImlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgIVxuIik7DQo+ID4gLcKg wqDCoMKgwqDCoMKgwqBnb3RvIHN0b3JlX25leHQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBi cmVhazsNCj4gPiDCoMKgwqDCoMKgY2FzZSBQT1dFUlBDX0VYQ1BfTk1FWFRCUjrCoMKgwqAv KiBOb24gbWFza2FibGUgZXh0ZXJuYWwNCj4gPiBicmVha3BvaW50wqDCoMKgwqDCoMKgwqDC oMKgKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqAvKiBYWFg6IFRPRE8gKi8NCj4gPiDCoMKg wqDCoMKgwqDCoMKgwqBjcHVfYWJvcnQoY3MsICJOb24gbWFza2FibGUgZXh0ZXJuYWwgZXhj ZXB0aW9uICINCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJp cyBub3QgaW1wbGVtZW50ZWQgeWV0ICFcbiIpOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ290 byBzdG9yZV9uZXh0Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gwqDCoMKg wqDCoGRlZmF1bHQ6DQo+ID4gwqDCoMKgwqDCoGV4Y3BfaW52YWxpZDoNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqBjcHVfYWJvcnQoY3MsICJJbnZhbGlkIFBvd2VyUEMgZXhjZXB0aW9uICVk LiBBYm9ydGluZ1xuIiwNCj4gPiBleGNwKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsNCj4gPiAtwqDCoMKgwqBzdG9yZV9jdXJyZW50Og0KPiA+IC3CoMKgwqDCoMKgwqDCoMKg Lyogc2F2ZSBjdXJyZW50IGluc3RydWN0aW9uIGxvY2F0aW9uICovDQo+ID4gLcKgwqDCoMKg wqDCoMKgwqBlbnYtPnNwcltzcnIwXSA9IGVudi0+bmlwIC0gNDsNCj4gPiAtwqDCoMKgwqDC oMKgwqDCoGJyZWFrOw0KPiA+IC3CoMKgwqDCoHN0b3JlX25leHQ6DQo+ID4gLcKgwqDCoMKg wqDCoMKgwqAvKiBzYXZlIG5leHQgaW5zdHJ1Y3Rpb24gbG9jYXRpb24gKi8NCj4gPiAtwqDC oMKgwqDCoMKgwqDCoGVudi0+c3ByW3NycjBdID0gZW52LT5uaXA7DQo+ID4gLcKgwqDCoMKg wqDCoMKgwqBicmVhazsNCj4gPiDCoMKgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqAv KiBTYXZlIFBDICovDQo+ID4gK8KgwqDCoMKgZW52LT5zcHJbc3JyMF0gPSBlbnYtPm5pcDsN Cj4gPiArDQo+ID4gwqDCoMKgwqDCoC8qIFNhdmUgTVNSICovDQo+ID4gwqDCoMKgwqDCoGVu di0+c3ByW3NycjFdID0gbXNyOw0KPiA+IMKgDQo+ID4gZGlmZiAtLWdpdCBhL3RhcmdldC1w cGMvdHJhbnNsYXRlLmMgYi90YXJnZXQtcHBjL3RyYW5zbGF0ZS5jDQo+ID4gaW5kZXggYzRm ODkxNi4uODRiY2IwOSAxMDA2NDQNCj4gPiAtLS0gYS90YXJnZXQtcHBjL3RyYW5zbGF0ZS5j DQo+ID4gKysrIGIvdGFyZ2V0LXBwYy90cmFuc2xhdGUuYw0KPiA+IEBAIC0yNzYsOCArMjc2 LDEyIEBAIHZvaWQgZ2VuX3VwZGF0ZV9jdXJyZW50X25pcCh2b2lkICpvcGFxdWUpDQo+ID4g wqBzdGF0aWMgdm9pZCBnZW5fZXhjZXB0aW9uX2VycihEaXNhc0NvbnRleHQgKmN0eCwgdWlu dDMyX3QgZXhjcCwNCj4gPiB1aW50MzJfdCBlcnJvcikNCj4gPiDCoHsNCj4gPiDCoMKgwqDC oMKgVENHdl9pMzIgdDAsIHQxOw0KPiA+ICsNCj4gPiArwqDCoMKgwqAvKiBUaGVzZSBhcmUg YWxsIHN5bmNocm9ub3VzIGV4Y2VwdGlvbnMsIHdlIHNldCB0aGUgUEMgYmFjayB0bw0KPiA+ ICvCoMKgwqDCoMKgKiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24NCj4gPiArwqDCoMKgwqDC oCovDQo+ID4gwqDCoMKgwqDCoGlmIChjdHgtPmV4Y2VwdGlvbiA9PSBQT1dFUlBDX0VYQ1Bf Tk9ORSkgew0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgZ2VuX3VwZGF0ZV9uaXAoY3R4LCBjdHgt Pm5pcCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBnZW5fdXBkYXRlX25pcChjdHgsIGN0eC0+ bmlwIC0gNCk7DQo+ID4gwqDCoMKgwqDCoH0NCj4gPiDCoMKgwqDCoMKgdDAgPSB0Y2dfY29u c3RfaTMyKGV4Y3ApOw0KPiA+IMKgwqDCoMKgwqB0MSA9IHRjZ19jb25zdF9pMzIoZXJyb3Ip Ow0KPiA+IEBAIC0yOTAsOCArMjk0LDEyIEBAIHN0YXRpYyB2b2lkIGdlbl9leGNlcHRpb25f ZXJyKERpc2FzQ29udGV4dA0KPiA+ICpjdHgsIHVpbnQzMl90IGV4Y3AsIHVpbnQzMl90IGVy cm9yKQ0KPiA+IMKgc3RhdGljIHZvaWQgZ2VuX2V4Y2VwdGlvbihEaXNhc0NvbnRleHQgKmN0 eCwgdWludDMyX3QgZXhjcCkNCj4gPiDCoHsNCj4gPiDCoMKgwqDCoMKgVENHdl9pMzIgdDA7 DQo+ID4gKw0KPiA+ICvCoMKgwqDCoC8qIFRoZXNlIGFyZSBhbGwgc3luY2hyb25vdXMgZXhj ZXB0aW9ucywgd2Ugc2V0IHRoZSBQQyBiYWNrIHRvDQo+ID4gK8KgwqDCoMKgwqAqIHRoZSBm YXVsdGluZyBpbnN0cnVjdGlvbg0KPiA+ICvCoMKgwqDCoMKgKi8NCj4gPiDCoMKgwqDCoMKg aWYgKGN0eC0+ZXhjZXB0aW9uID09IFBPV0VSUENfRVhDUF9OT05FKSB7DQo+ID4gLcKgwqDC oMKgwqDCoMKgwqBnZW5fdXBkYXRlX25pcChjdHgsIGN0eC0+bmlwKTsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoGdlbl91cGRhdGVfbmlwKGN0eCwgY3R4LT5uaXAgLSA0KTsNCj4gPiDCoMKg wqDCoMKgfQ0KPiA+IMKgwqDCoMKgwqB0MCA9IHRjZ19jb25zdF9pMzIoZXhjcCk7DQo+ID4g wqDCoMKgwqDCoGdlbl9oZWxwZXJfcmFpc2VfZXhjZXB0aW9uKGNwdV9lbnYsIHQwKTsNCj4g PiBAQCAtMjk5LDEzICszMDcsMjggQEAgc3RhdGljIHZvaWQgZ2VuX2V4Y2VwdGlvbihEaXNh c0NvbnRleHQgKmN0eCwNCj4gPiB1aW50MzJfdCBleGNwKQ0KPiA+IMKgwqDCoMKgwqBjdHgt PmV4Y2VwdGlvbiA9IChleGNwKTsNCj4gPiDCoH0NCj4gPiDCoA0KPiA+ICtzdGF0aWMgdm9p ZCBnZW5fZXhjZXB0aW9uX25pcChEaXNhc0NvbnRleHQgKmN0eCwgdWludDMyX3QgZXhjcCwN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdGFyZ2V0X3Vsb25nIG5pcCkNCj4gPiArew0KPiA+ICvCoMKgwqDCoFRD R3ZfaTMyIHQwOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBnZW5fdXBkYXRlX25pcChjdHgsIG5p cCk7DQo+ID4gK8KgwqDCoMKgdDAgPSB0Y2dfY29uc3RfaTMyKGV4Y3ApOw0KPiA+ICvCoMKg wqDCoGdlbl9oZWxwZXJfcmFpc2VfZXhjZXB0aW9uKGNwdV9lbnYsIHQwKTsNCj4gPiArwqDC oMKgwqB0Y2dfdGVtcF9mcmVlX2kzMih0MCk7DQo+ID4gK8KgwqDCoMKgY3R4LT5leGNlcHRp b24gPSAoZXhjcCk7DQo+ID4gK30NCj4gPiArDQo+ID4gwqBzdGF0aWMgdm9pZCBnZW5fZGVi dWdfZXhjZXB0aW9uKERpc2FzQ29udGV4dCAqY3R4KQ0KPiA+IMKgew0KPiA+IMKgwqDCoMKg wqBUQ0d2X2kzMiB0MDsNCj4gPiDCoA0KPiA+ICvCoMKgwqDCoC8qIFRoZXNlIGFyZSBhbGwg c3luY2hyb25vdXMgZXhjZXB0aW9ucywgd2Ugc2V0IHRoZSBQQyBiYWNrIHRvDQo+ID4gK8Kg wqDCoMKgwqAqIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbg0KPiA+ICvCoMKgwqDCoMKgKi8N Cj4gPiDCoMKgwqDCoMKgaWYgKChjdHgtPmV4Y2VwdGlvbiAhPSBQT1dFUlBDX0VYQ1BfQlJB TkNIKSAmJg0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoChjdHgtPmV4Y2VwdGlvbiAhPSBQT1dF UlBDX0VYQ1BfU1lOQykpIHsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoGdlbl91cGRhdGVfbmlw KGN0eCwgY3R4LT5uaXApOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZ2VuX3VwZGF0ZV9uaXAo Y3R4LCBjdHgtPm5pcCAtIDQpOw0KPiA+IMKgwqDCoMKgwqB9DQo+ID4gwqDCoMKgwqDCoHQw ID0gdGNnX2NvbnN0X2kzMihFWENQX0RFQlVHKTsNCj4gPiDCoMKgwqDCoMKgZ2VuX2hlbHBl cl9yYWlzZV9leGNlcHRpb24oY3B1X2VudiwgdDApOw0KPiA+IEBAIC0xNDM3LDcgKzE0NjAs NyBAQCBzdGF0aWMgdm9pZCBnZW5fcGF1c2UoRGlzYXNDb250ZXh0ICpjdHgpDQo+ID4gwqDC oMKgwqDCoHRjZ190ZW1wX2ZyZWVfaTMyKHQwKTsNCj4gPiDCoA0KPiA+IMKgwqDCoMKgwqAv KiBTdG9wIHRyYW5zbGF0aW9uLCB0aGlzIGdpdmVzIG90aGVyIENQVXMgYSBjaGFuY2UgdG8g cnVuICovDQo+ID4gLcKgwqDCoMKgZ2VuX2V4Y2VwdGlvbl9lcnIoY3R4LCBFWENQX0hMVCwg MSk7DQo+ID4gK8KgwqDCoMKgZ2VuX2V4Y2VwdGlvbl9uaXAoY3R4LCBFWENQX0hMVCwgY3R4 LT5uaXApOw0KPiA+IMKgfQ0KPiA+IMKgI2VuZGlmIC8qIGRlZmluZWQoVEFSR0VUX1BQQzY0 KSAqLw0KPiA+IMKgDQo+ID4gQEAgLTI2OTcsMTIgKzI3MjAsNiBAQCBzdGF0aWMgdm9pZCBn ZW5fbHN3aShEaXNhc0NvbnRleHQgKmN0eCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqBuYiA9 IDMyOw0KPiA+IMKgwqDCoMKgwqBuciA9IChuYiArIDMpIC8gNDsNCj4gPiDCoMKgwqDCoMKg aWYgKHVubGlrZWx5KGxzd19yZWdfaW5fcmFuZ2Uoc3RhcnQsIG5yLCByYSkpKSB7DQo+ID4g LcKgwqDCoMKgwqDCoMKgwqAvKiBUaGUgaGFuZGxlciBleHBlY3RzIHRoZSBQQyB0byBwb2lu dCB0byAqdGhpcyoNCj4gPiBpbnN0cnVjdGlvbiwNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKg KiBzbyBzZXR0aW5nIGN0eC0+ZXhjZXB0aW9uIGhlcmUgcHJldmVudHMgaXQgZnJvbSBiZWlu Zw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqAqIGltcHJvcGVybHkgdXBkYXRlZCBhZ2FpbiBi eSBnZW5faW52YWxfZXhjZXB0aW9uDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoCovDQo+ID4g LcKgwqDCoMKgwqDCoMKgwqBnZW5fdXBkYXRlX25pcChjdHgsIGN0eC0+bmlwIC0gNCk7DQo+ ID4gLcKgwqDCoMKgwqDCoMKgwqBjdHgtPmV4Y2VwdGlvbiA9IFBPV0VSUENfRVhDUF9IVl9F TVU7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgZ2VuX2ludmFsX2V4Y2VwdGlvbihjdHgsIFBP V0VSUENfRVhDUF9JTlZBTF9MU1dYKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47 DQo+ID4gwqDCoMKgwqDCoH0NCj4gPiBAQCAtMjg0NSwxMCArMjg2Miw3IEBAIHN0YXRpYyB2 b2lkDQo+ID4gZ2VuX2NvbmRpdGlvbmFsX3N0b3JlKERpc2FzQ29udGV4dCAqY3R4LCBUQ0d2 IEVBLA0KPiA+IMKgwqDCoMKgwqB0Y2dfZ2VuX21vdmlfdGwodDAsIChzaXplIDw8IDUpIHwg cmVnKTsNCj4gPiDCoMKgwqDCoMKgdGNnX2dlbl9zdF90bCh0MCwgY3B1X2Vudiwgb2Zmc2V0 b2YoQ1BVUFBDU3RhdGUsDQo+ID4gcmVzZXJ2ZV9pbmZvKSk7DQo+ID4gwqDCoMKgwqDCoHRj Z190ZW1wX2ZyZWUodDApOw0KPiA+IC3CoMKgwqDCoGdlbl91cGRhdGVfbmlwKGN0eCwgY3R4 LT5uaXAtNCk7DQo+ID4gLcKgwqDCoMKgY3R4LT5leGNlcHRpb24gPSBQT1dFUlBDX0VYQ1Bf QlJBTkNIOw0KPiA+IC3CoMKgwqDCoGdlbl9leGNlcHRpb24oY3R4LCBQT1dFUlBDX0VYQ1Bf U1RDWCk7DQo+ID4gLcKgwqDCoMKgY3R4LT5leGNlcHRpb24gPSBzYXZlX2V4Y2VwdGlvbjsN Cj4gPiArwqDCoMKgwqBnZW5fZXhjZXB0aW9uX2VycihjdHgsIFBPV0VSUENfRVhDUF9TVENY LCAwKTsNCj4gPiDCoH0NCj4gPiDCoCNlbHNlDQo+ID4gwqBzdGF0aWMgdm9pZCBnZW5fY29u ZGl0aW9uYWxfc3RvcmUoRGlzYXNDb250ZXh0ICpjdHgsIFRDR3YgRUEsDQo+ID4gQEAgLTI5 ODcsNyArMzAwMSw3IEBAIHN0YXRpYyB2b2lkIGdlbl93YWl0KERpc2FzQ29udGV4dCAqY3R4 KQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAtb2Zmc2V0 b2YoUG93ZXJQQ0NQVSwgZW52KSArIG9mZnNldG9mKENQVVN0YXRlLA0KPiA+IGhhbHRlZCkp Ow0KPiA+IMKgwqDCoMKgwqB0Y2dfdGVtcF9mcmVlX2kzMih0MCk7DQo+ID4gwqDCoMKgwqDC oC8qIFN0b3AgdHJhbnNsYXRpb24sIGFzIHRoZSBDUFUgaXMgc3VwcG9zZWQgdG8gc2xlZXAg ZnJvbSBub3cNCj4gPiAqLw0KPiA+IC3CoMKgwqDCoGdlbl9leGNlcHRpb25fZXJyKGN0eCwg RVhDUF9ITFQsIDEpOw0KPiA+ICvCoMKgwqDCoGdlbl9leGNlcHRpb25fbmlwKGN0eCwgRVhD UF9ITFQsIGN0eC0+bmlwKTsNCj4gPiDCoH0NCj4gPiDCoA0KPiA+IMKgI2lmIGRlZmluZWQo VEFSR0VUX1BQQzY0KQ0KPiA+IEBAIC0zMDkwLDEwICszMTA0LDcgQEAgc3RhdGljIGlubGlu ZSB2b2lkIGdlbl9nb3RvX3RiKERpc2FzQ29udGV4dA0KPiA+ICpjdHgsIGludCBuLCB0YXJn ZXRfdWxvbmcgZGVzdCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg KENQVV9CUkFOQ0hfU1RFUCB8IENQVV9TSU5HTEVfU1RFUCkpICYmDQo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChjdHgtPmV4Y2VwdGlvbiA9PSBQT1dFUlBDX0VY Q1BfQlJBTkNIIHx8DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Y3R4LT5leGNlcHRpb24gPT0gUE9XRVJQQ19FWENQX1RSQUNFKSkgew0KPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRhcmdldF91bG9uZyB0bXAgPSBjdHgtPm5pcDsN Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjdHgtPm5pcCA9IGRlc3Q7 DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ2VuX2V4Y2VwdGlvbihj dHgsIFBPV0VSUENfRVhDUF9UUkFDRSk7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY3R4LT5uaXAgPSB0bXA7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZ2VuX2V4Y2VwdGlvbl9uaXAoY3R4LCBQT1dFUlBDX0VYQ1BfVFJBQ0UsIGRl c3QpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKGN0eC0+c2luZ2xlc3RlcF9lbmFibGVkICYgR0RCU1RVQl9T SU5HTEVfU1RFUCkgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBn ZW5fZGVidWdfZXhjZXB0aW9uKGN0eCk7DQo+ID4gQEAgLTMzNjIsNyArMzM3Myw3IEBAIHN0 YXRpYyB2b2lkIGdlbl90dyhEaXNhc0NvbnRleHQgKmN0eCkNCj4gPiDCoHsNCj4gPiDCoMKg wqDCoMKgVENHdl9pMzIgdDAgPSB0Y2dfY29uc3RfaTMyKFRPKGN0eC0+b3Bjb2RlKSk7DQo+ ID4gwqDCoMKgwqDCoC8qIFVwZGF0ZSB0aGUgbmlwIHNpbmNlIHRoaXMgbWlnaHQgZ2VuZXJh dGUgYSB0cmFwIGV4Y2VwdGlvbg0KPiA+ICovDQo+ID4gLcKgwqDCoMKgZ2VuX3VwZGF0ZV9u aXAoY3R4LCBjdHgtPm5pcCk7DQo+ID4gK8KgwqDCoMKgZ2VuX3VwZGF0ZV9uaXAoY3R4LCBj dHgtPm5pcCAtIDQpOw0KPiANCj4gdHdpIGV0YyB3aWxsIGdlbmVyYWxseSByZXN1bWUgZnJv bSB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpZiB0aGV5IHRyYXAsDQo+IHllcz/CoMKgSW4gd2hp Y2ggY2FzZSBJJ20gYSBiaXQgY29uZnVzZWQgYnkgdGhlIG5pcCAtIDQuwqDCoEJ1dCBwb3Nz aWJseQ0KPiBJDQo+IGp1c3QgaGF2ZW4ndCBjb3JyZWN0bHkgZm9sbG93ZWQgYWxsIHRoZSBu aXAgdXBkYXRlIGxvZ2ljIGNoYW5nZWQgYnkNCj4gdGhpcyBwYXRjaC4NCj4gDQo+ID4gDQo+ ID4gwqDCoMKgwqDCoGdlbl9oZWxwZXJfdHcoY3B1X2VudiwgY3B1X2dwcltyQShjdHgtPm9w Y29kZSldLA0KPiA+IGNwdV9ncHJbckIoY3R4LT5vcGNvZGUpXSwNCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHQwKTsNCj4gPiDCoMKgwqDCoMKgdGNnX3Rl bXBfZnJlZV9pMzIodDApOw0KPiA+IEBAIC0zMzc0LDcgKzMzODUsNyBAQCBzdGF0aWMgdm9p ZCBnZW5fdHdpKERpc2FzQ29udGV4dCAqY3R4KQ0KPiA+IMKgwqDCoMKgwqBUQ0d2IHQwID0g dGNnX2NvbnN0X3RsKFNJTU0oY3R4LT5vcGNvZGUpKTsNCj4gPiDCoMKgwqDCoMKgVENHdl9p MzIgdDEgPSB0Y2dfY29uc3RfaTMyKFRPKGN0eC0+b3Bjb2RlKSk7DQo+ID4gwqDCoMKgwqDC oC8qIFVwZGF0ZSB0aGUgbmlwIHNpbmNlIHRoaXMgbWlnaHQgZ2VuZXJhdGUgYSB0cmFwIGV4 Y2VwdGlvbg0KPiA+ICovDQo+ID4gLcKgwqDCoMKgZ2VuX3VwZGF0ZV9uaXAoY3R4LCBjdHgt Pm5pcCk7DQo+ID4gK8KgwqDCoMKgZ2VuX3VwZGF0ZV9uaXAoY3R4LCBjdHgtPm5pcCAtIDQp Ow0KPiA+IMKgwqDCoMKgwqBnZW5faGVscGVyX3R3KGNwdV9lbnYsIGNwdV9ncHJbckEoY3R4 LT5vcGNvZGUpXSwgdDAsIHQxKTsNCj4gPiDCoMKgwqDCoMKgdGNnX3RlbXBfZnJlZSh0MCk7 DQo+ID4gwqDCoMKgwqDCoHRjZ190ZW1wX2ZyZWVfaTMyKHQxKTsNCj4gPiBAQCAtMzM4Niw3 ICszMzk3LDcgQEAgc3RhdGljIHZvaWQgZ2VuX3RkKERpc2FzQ29udGV4dCAqY3R4KQ0KPiA+ IMKgew0KPiA+IMKgwqDCoMKgwqBUQ0d2X2kzMiB0MCA9IHRjZ19jb25zdF9pMzIoVE8oY3R4 LT5vcGNvZGUpKTsNCj4gPiDCoMKgwqDCoMKgLyogVXBkYXRlIHRoZSBuaXAgc2luY2UgdGhp cyBtaWdodCBnZW5lcmF0ZSBhIHRyYXAgZXhjZXB0aW9uDQo+ID4gKi8NCj4gPiAtwqDCoMKg wqBnZW5fdXBkYXRlX25pcChjdHgsIGN0eC0+bmlwKTsNCj4gPiArwqDCoMKgwqBnZW5fdXBk YXRlX25pcChjdHgsIGN0eC0+bmlwIC0gNCk7DQo+ID4gwqDCoMKgwqDCoGdlbl9oZWxwZXJf dGQoY3B1X2VudiwgY3B1X2dwcltyQShjdHgtPm9wY29kZSldLA0KPiA+IGNwdV9ncHJbckIo Y3R4LT5vcGNvZGUpXSwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHQwKTsNCj4gPiDCoMKgwqDCoMKgdGNnX3RlbXBfZnJlZV9pMzIodDApOw0KPiA+IEBA IC0zMzk4LDcgKzM0MDksNyBAQCBzdGF0aWMgdm9pZCBnZW5fdGRpKERpc2FzQ29udGV4dCAq Y3R4KQ0KPiA+IMKgwqDCoMKgwqBUQ0d2IHQwID0gdGNnX2NvbnN0X3RsKFNJTU0oY3R4LT5v cGNvZGUpKTsNCj4gPiDCoMKgwqDCoMKgVENHdl9pMzIgdDEgPSB0Y2dfY29uc3RfaTMyKFRP KGN0eC0+b3Bjb2RlKSk7DQo+ID4gwqDCoMKgwqDCoC8qIFVwZGF0ZSB0aGUgbmlwIHNpbmNl IHRoaXMgbWlnaHQgZ2VuZXJhdGUgYSB0cmFwIGV4Y2VwdGlvbg0KPiA+ICovDQo+ID4gLcKg wqDCoMKgZ2VuX3VwZGF0ZV9uaXAoY3R4LCBjdHgtPm5pcCk7DQo+ID4gK8KgwqDCoMKgZ2Vu X3VwZGF0ZV9uaXAoY3R4LCBjdHgtPm5pcCAtIDQpOw0KPiA+IMKgwqDCoMKgwqBnZW5faGVs cGVyX3RkKGNwdV9lbnYsIGNwdV9ncHJbckEoY3R4LT5vcGNvZGUpXSwgdDAsIHQxKTsNCj4g PiDCoMKgwqDCoMKgdGNnX3RlbXBfZnJlZSh0MCk7DQo+ID4gwqDCoMKgwqDCoHRjZ190ZW1w X2ZyZWVfaTMyKHQxKTsNCj4gPiBAQCAtNjc1Nyw3ICs2NzY4LDcgQEAgdm9pZCBnZW5faW50 ZXJtZWRpYXRlX2NvZGUoQ1BVUFBDU3RhdGUgKmVudiwNCj4gPiBzdHJ1Y3QgVHJhbnNsYXRp b25CbG9jayAqdGIpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjdHguZXhjZXB0aW9uICE9IFBPV0VSUENfU1lTQ0FMTCAmJg0KPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3R4LmV4Y2VwdGlvbiAh PSBQT1dFUlBDX0VYQ1BfVFJBUCAmJg0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY3R4LmV4Y2VwdGlvbiAhPSBQT1dFUlBDX0VYQ1BfQlJBTkNI KSkgew0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnZW5fZXhjZXB0aW9uKGN0eHAs IFBPV0VSUENfRVhDUF9UUkFDRSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdl bl9leGNlcHRpb25fbmlwKGN0eHAsIFBPV0VSUENfRVhDUF9UUkFDRSwgY3R4Lm5pcCk7DQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIGlmICh1bmxpa2VseSgoKGN0eC5uaXAgJiAo VEFSR0VUX1BBR0VfU0laRSAtIDEpKSA9PQ0KPiA+IDApIHx8DQo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChjcy0+c2lu Z2xlc3RlcF9lbmFibGVkKSB8fA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaW5nbGVzdGVwIHx8DQo+IA0K