From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42225) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bZWWd-0006pd-GN for qemu-devel@nongnu.org; Tue, 16 Aug 2016 01:02:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bZWWa-0008Ga-7E for qemu-devel@nongnu.org; Tue, 16 Aug 2016 01:02:55 -0400 Message-ID: <1471323753.12231.140.camel@kernel.crashing.org> From: Benjamin Herrenschmidt Date: Tue, 16 Aug 2016 15:02:33 +1000 In-Reply-To: <20160816023900.GC14530@voom.fritz.box> References: <1470388537-2908-1-git-send-email-clg@kaod.org> <1470388537-2908-4-git-send-email-clg@kaod.org> <20160816023900.GC14530@voom.fritz.box> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: base64 Subject: Re: [Qemu-devel] [PATCH 3/3] ppc/pnv: add a PowerNVCPUCore object List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson , =?ISO-8859-1?Q?C=E9dric?= Le Goater Cc: qemu-ppc@nongnu.org, Alexander Graf , qemu-devel@nongnu.org T24gVHVlLCAyMDE2LTA4LTE2IGF0IDEyOjM5ICsxMDAwLCBEYXZpZCBHaWJzb24gd3JvdGU6 DQo+IE9uIEZyaSwgQXVnIDA1LCAyMDE2IGF0IDExOjE1OjM3QU0gKzAyMDAsIEPDqWRyaWMg TGUgR29hdGVyIHdyb3RlOg0KPiA+IA0KPiA+IFRoaXMgaXMgbGFyZ3kgaW5zcGlyZWQgYnkg c1BBUFJDUFVDb3JlIHdpdGggc29tZSBzaW1wbGlmaWNhdGlvbiwgbm8NCj4gPiBob3RwbHVn IGZvciBpbnN0YW5jZS4gQnV0IHRoZSBkaWZmZXJlbmNlcyBhcmUgc21hbGwgYW5kIHRoZSBv YmplY3RzDQo+ID4gY291bGQgcG9zc2libHkgYmUgbWVyZ2VkLg0KPiA+IA0KPiA+IEEgc2V0 IG9mIFBvd2VyTlZDUFVDb3JlIG9iamVjdHMgaXMgYWRkZWQgdG8gdGhlIFBudkNoaXAgYW5k IHRoZSBkZXZpY2UNCj4gPiB0cmVlIGlzIHBvcHVsYXRlZCBsb29waW5nIG9uIHRoZXNlIGNv cmVzLiBDb3JlIGlkcyBpbiB0aGUgZGV2aWNlIHRyZWUNCj4gPiBhcmUgc3RpbGwgYSBsaXR0 bGUgZnV6eS4gVG8gYmUgY2hlY2tlZC4NCg0KV2hhdCBhYm91dCBQOSB3aGVyZSBjb3JlcyBh cmUgaW4gcGFpcnMgdG8gZm9ybSBFWCBhbmQgaW4gcGFpcnMgb2YgRVgNCihpZSwgcXVhZHMp IHRvIGZvcm0gRVBzID8NCg0KPiA+IFNvLCBpdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3Vz IHRvIG1lIGlmIHlvdSB3YW50IGFuIGFjdHVhbCBjb3JlDQo+IG9iamVjdC7CoMKgWW91IGNv dWxkIHBvdGVudGlhbGx5IGNyZWF0ZSB0aGUgYWN0dWFsIHZjcHUgb2JqZWN0cyBkaXJlY3Rs eQ0KPiBmcm9tIHRoZSBjaGlwIG9iamVjdC7CoMKgVGhhdCBhc3N1bWVzIHRoYXQgYW55IGhv dHBsdWcgd2lsbCBvbmx5IGJlIGF0DQo+IGNoaXAgZ3JhbnVsYXJpdHksIG5vdCBjb3JlIGdy YW51bGFyaXR5LCBidXQgSSdtIGd1ZXNzaW5nIHRoYXQncyB0aGUNCj4gY2FzZSBhbnl3YXku DQoNCldlbGwgd2Ugd2FudCB0byBhZGQgc29tZSBvZiB0aGUgY29yZSBYU0NPTXMgc28gaXQg bWFrZXMgc2Vuc2UgdG8gaGF2ZQ0KYSBjb3JlIG9iamVjdCB0aGF0IGlzIGEgWFNDT00gZGV2 aWNlDQoNCj4gPiBUaGF0IHNhaWQsIGlmIGhhdmluZyB0aGUgaW50ZXJtZWRpYXRlIGNvcmUg b2JqZWN0IGlzIGhlbHBmdWwsIHlvdSdyZQ0KPiBjZXJ0YWlubHkgZnJlZSB0byBoYXZlIGl0 Lg0KPiANCj4gPiANCj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogQ8OpZHJpYyBMZSBHb2F0ZXIg PGNsZ0BrYW9kLm9yZz4NCj4gPiAtLS0NCj4gPiDCoGh3L3BwYy9NYWtlZmlsZS5vYmpzwqDC oMKgwqDCoMKgfMKgwqDCoDIgKy0NCj4gPiDCoGh3L3BwYy9wbnYuY8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB8IDE2MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystDQo+ID4gwqBody9wcGMvcG52X2NvcmUuY8KgwqDCoMKgwqDCoMKgwqDCoHwg MTcxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4g PiDCoGluY2x1ZGUvaHcvcHBjL3Budi5owqDCoMKgwqDCoMKgfMKgwqDCoDcgKysNCj4gPiDC oGluY2x1ZGUvaHcvcHBjL3Budl9jb3JlLmggfMKgwqA0NyArKysrKysrKysrKysrDQo+ID4g wqA1IGZpbGVzIGNoYW5nZWQsIDM4MyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQ0K PiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGh3L3BwYy9wbnZfY29yZS5jDQo+ID4gwqBjcmVh dGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9ody9wcGMvcG52X2NvcmUuaA0KPiA+IA0KPiA+IGRp ZmYgLS1naXQgYS9ody9wcGMvTWFrZWZpbGUub2JqcyBiL2h3L3BwYy9NYWtlZmlsZS5vYmpz DQo+ID4gaW5kZXggODEwNWRiN2Q1NjAwLi5mOGM3ZDFkYjlhZGUgMTAwNjQ0DQo+ID4gLS0t IGEvaHcvcHBjL01ha2VmaWxlLm9ianMNCj4gPiArKysgYi9ody9wcGMvTWFrZWZpbGUub2Jq cw0KPiA+IEBAIC02LDcgKzYsNyBAQCBvYmotJChDT05GSUdfUFNFUklFUykgKz0gc3BhcHJf aGNhbGwubyBzcGFwcl9pb21tdS5vIHNwYXByX3J0YXMubw0KPiA+IMKgb2JqLSQoQ09ORklH X1BTRVJJRVMpICs9IHNwYXByX3BjaS5vIHNwYXByX3J0Yy5vIHNwYXByX2RyYy5vIHNwYXBy X3JuZy5vDQo+ID4gwqBvYmotJChDT05GSUdfUFNFUklFUykgKz0gc3BhcHJfY3B1X2NvcmUu bw0KPiA+IMKgIyBJQk0gUG93ZXJOVg0KPiA+IC1vYmotJChDT05GSUdfUE9XRVJOVikgKz0g cG52Lm8NCj4gPiArb2JqLSQoQ09ORklHX1BPV0VSTlYpICs9IHBudi5vIHBudl9jb3JlLm8N Cj4gPiDCoGlmZXEgKCQoQ09ORklHX1BDSSkkKENPTkZJR19QU0VSSUVTKSQoQ09ORklHX0xJ TlVYKSwgeXl5KQ0KPiA+IMKgb2JqLXkgKz0gc3BhcHJfcGNpX3ZmaW8ubw0KPiA+IMKgZW5k aWYNCj4gPiBkaWZmIC0tZ2l0IGEvaHcvcHBjL3Budi5jIGIvaHcvcHBjL3Budi5jDQo+ID4g aW5kZXggYTY4MDc4MGU5ZGVhLi4xMjE5NDkzYzcyMTggMTAwNjQ0DQo+ID4gLS0tIGEvaHcv cHBjL3Budi5jDQo+ID4gKysrIGIvaHcvcHBjL3Budi5jDQo+ID4gQEAgLTM1LDYgKzM1LDcg QEANCj4gPiDCoCNpbmNsdWRlICJody9wcGMvZmR0LmgiDQo+ID4gwqAjaW5jbHVkZSAiaHcv cHBjL3BwYy5oIg0KPiA+IMKgI2luY2x1ZGUgImh3L3BwYy9wbnYuaCINCj4gPiArI2luY2x1 ZGUgImh3L3BwYy9wbnZfY29yZS5oIg0KPiA+IMKgI2luY2x1ZGUgImh3L2xvYWRlci5oIg0K PiA+IMKgI2luY2x1ZGUgImV4ZWMvYWRkcmVzcy1zcGFjZXMuaCINCj4gPiDCoCNpbmNsdWRl ICJxZW11L2N1dGlscy5oIg0KPiA+IEBAIC0xMTIsNiArMTEzLDExNCBAQCBzdGF0aWMgaW50 IHBvd2VybnZfcG9wdWxhdGVfbWVtb3J5KHZvaWQgKmZkdCkNCj4gPiDCoMKgwqDCoMKgcmV0 dXJuIDA7DQo+ID4gwqB9DQo+ID4gwqANCj4gPiArc3RhdGljIHZvaWQgcG93ZXJudl9jcmVh dGVfY29yZV9ub2RlKHZvaWQgKmZkdCwgQ1BVU3RhdGUgKmNzLCB1aW50MzJfdCBjaGlwX2lk KQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgUG93ZXJQQ0NQVSAqY3B1ID0gUE9XRVJQQ19DUFUo Y3MpOw0KPiA+ICvCoMKgwqDCoGludCBzbXRfdGhyZWFkcyA9IHBwY19nZXRfY29tcGF0X3Nt dF90aHJlYWRzKGNwdSk7DQo+ID4gK8KgwqDCoMKgQ1BVUFBDU3RhdGUgKmVudiA9ICZjcHUt PmVudjsNCj4gPiArwqDCoMKgwqBEZXZpY2VDbGFzcyAqZGMgPSBERVZJQ0VfR0VUX0NMQVNT KGNzKTsNCj4gPiArwqDCoMKgwqBQb3dlclBDQ1BVQ2xhc3MgKnBjYyA9IFBPV0VSUENfQ1BV X0dFVF9DTEFTUyhjcyk7DQo+ID4gK8KgwqDCoMKgdWludDMyX3Qgc2VydmVyc19wcm9wW3Nt dF90aHJlYWRzXTsNCj4gPiArwqDCoMKgwqB1aW50MzJfdCBnc2VydmVyc19wcm9wW3NtdF90 aHJlYWRzICogMl07DQo+ID4gK8KgwqDCoMKgaW50IGksIGluZGV4ID0gcHBjX2dldF92Y3B1 X2R0X2lkKGNwdSk7DQo+ID4gK8KgwqDCoMKgdWludDMyX3Qgc2Vnc1tdID0ge2NwdV90b19i ZTMyKDI4KSwgY3B1X3RvX2JlMzIoNDApLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZn07DQo+ID4g K8KgwqDCoMKgdWludDMyX3QgdGJmcmVxID0gUE5WX1RJTUVCQVNFX0ZSRVE7DQo+ID4gK8Kg wqDCoMKgdWludDMyX3QgY3B1ZnJlcSA9IDEwMDAwMDAwMDA7DQo+ID4gK8KgwqDCoMKgdWlu dDMyX3QgcGFnZV9zaXplc19wcm9wWzY0XTsNCj4gPiArwqDCoMKgwqBzaXplX3QgcGFnZV9z aXplc19wcm9wX3NpemU7DQo+ID4gK8KgwqDCoMKgY2hhciAqbm9kZW5hbWU7DQo+ID4gKw0K PiA+ICvCoMKgwqDCoG5vZGVuYW1lID0gZ19zdHJkdXBfcHJpbnRmKCIlc0AleCIsIGRjLT5m d19uYW1lLCBpbmRleCk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoF9GRFQoKGZkdF9iZWdpbl9u b2RlKGZkdCwgbm9kZW5hbWUpKSk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGdfZnJlZShub2Rl bmFtZSk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoF9GRFQoKGZkdF9wcm9wZXJ0eV9jZWxsKGZk dCwgInJlZyIsIGluZGV4KSkpOw0KPiA+ICvCoMKgwqDCoF9GRFQoKGZkdF9wcm9wZXJ0eV9z dHJpbmcoZmR0LCAiZGV2aWNlX3R5cGUiLCAiY3B1IikpKTsNCj4gDQo+IFRoZSBoYW5kbGlu ZyBvZiBkdF9pZCBpcyBnb2luZyB0byBjb2xsaWRlIHdpdGggY2xlYW51cHMgSSB3YW50IHRv IGRvDQo+IGluIHRoaXMgYXJlYSAoZm9yIHNwYXByIGFuZCB0aGUgcHBjIGNwdSBjb3JlKS7C oMKgTm90IHN1cmUgdGhlcmUncyBhIGxvdA0KPiB5b3UgY2FuIGRvIHRvIGF2b2lkIHRoYXQg YXQgdGhpcyBzdGFnZS4NCj4gDQo+ID4gDQo+ID4gK8KgwqDCoMKgX0ZEVCgoZmR0X3Byb3Bl cnR5X2NlbGwoZmR0LCAiY3B1LXZlcnNpb24iLCBlbnYtPnNwcltTUFJfUFZSXSkpKTsNCj4g PiArwqDCoMKgwqBfRkRUKChmZHRfcHJvcGVydHlfY2VsbChmZHQsICJkLWNhY2hlLWJsb2Nr LXNpemUiLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGVudi0+ZGNhY2hlX2xpbmVfc2l6ZSkpKTsNCj4gPiArwqDCoMKg wqBfRkRUKChmZHRfcHJvcGVydHlfY2VsbChmZHQsICJkLWNhY2hlLWxpbmUtc2l6ZSIsDQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZW52LT5kY2FjaGVfbGluZV9zaXplKSkpOw0KPiA+ICvCoMKgwqDCoF9GRFQoKGZk dF9wcm9wZXJ0eV9jZWxsKGZkdCwgImktY2FjaGUtYmxvY2stc2l6ZSIsDQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW52 LT5pY2FjaGVfbGluZV9zaXplKSkpOw0KPiA+ICvCoMKgwqDCoF9GRFQoKGZkdF9wcm9wZXJ0 eV9jZWxsKGZkdCwgImktY2FjaGUtbGluZS1zaXplIiwNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbnYtPmljYWNoZV9s aW5lX3NpemUpKSk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmIChwY2MtPmwxX2RjYWNoZV9z aXplKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBfRkRUKChmZHRfcHJvcGVydHlfY2VsbChm ZHQsICJkLWNhY2hlLXNpemUiLCBwY2MtPmwxX2RjYWNoZV9zaXplKSkpOw0KPiA+ICvCoMKg wqDCoH0gZWxzZSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBlcnJvcl9yZXBvcnQoIldhcm5p bmc6IFVua25vd24gTDEgZGNhY2hlIHNpemUgZm9yIGNwdSIpOw0KPiA+ICvCoMKgwqDCoH0N Cj4gPiArwqDCoMKgwqBpZiAocGNjLT5sMV9pY2FjaGVfc2l6ZSkgew0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgX0ZEVCgoZmR0X3Byb3BlcnR5X2NlbGwoZmR0LCAiaS1jYWNoZS1zaXplIiwg cGNjLT5sMV9pY2FjaGVfc2l6ZSkpKTsNCj4gPiArwqDCoMKgwqB9IGVsc2Ugew0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgZXJyb3JfcmVwb3J0KCJXYXJuaW5nOiBVbmtub3duIEwxIGljYWNo ZSBzaXplIGZvciBjcHUiKTsNCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDC oF9GRFQoKGZkdF9wcm9wZXJ0eV9jZWxsKGZkdCwgInRpbWViYXNlLWZyZXF1ZW5jeSIsIHRi ZnJlcSkpKTsNCj4gPiArwqDCoMKgwqBfRkRUKChmZHRfcHJvcGVydHlfY2VsbChmZHQsICJj bG9jay1mcmVxdWVuY3kiLCBjcHVmcmVxKSkpOw0KPiA+ICvCoMKgwqDCoF9GRFQoKGZkdF9w cm9wZXJ0eV9jZWxsKGZkdCwgImlibSxzbGItc2l6ZSIsIGVudi0+c2xiX25yKSkpOw0KPiA+ ICvCoMKgwqDCoF9GRFQoKGZkdF9wcm9wZXJ0eV9zdHJpbmcoZmR0LCAic3RhdHVzIiwgIm9r YXkiKSkpOw0KPiA+ICvCoMKgwqDCoF9GRFQoKGZkdF9wcm9wZXJ0eShmZHQsICI2NC1iaXQi LCBOVUxMLCAwKSkpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBpZiAoZW52LT5zcHJfY2JbU1BS X1BVUlJdLm9lYV9yZWFkKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBfRkRUKChmZHRfcHJv cGVydHkoZmR0LCAiaWJtLHB1cnIiLCBOVUxMLCAwKSkpOw0KPiA+ICvCoMKgwqDCoH0NCj4g PiArDQo+ID4gK8KgwqDCoMKgaWYgKGVudi0+bW11X21vZGVsICYgUE9XRVJQQ19NTVVfMVRT RUcpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoF9GRFQoKGZkdF9wcm9wZXJ0eShmZHQsICJp Ym0scHJvY2Vzc29yLXNlZ21lbnQtc2l6ZXMiLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZWdzLCBzaXplb2Yoc2Vncykp KSk7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqAvKiBBZHZlcnRpc2Ug Vk1YL1ZTWCAodmVjdG9yIGV4dGVuc2lvbnMpIGlmIGF2YWlsYWJsZQ0KPiA+ICvCoMKgwqDC oMKgKsKgwqDCoDAgLyBubyBwcm9wZXJ0eSA9PSBubyB2ZWN0b3IgZXh0ZW5zaW9ucw0KPiA+ ICvCoMKgwqDCoMKgKsKgwqDCoDHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9PSBW TVggLyBBbHRpdmVjIGF2YWlsYWJsZQ0KPiA+ICvCoMKgwqDCoMKgKsKgwqDCoDLCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9PSBWU1ggYXZhaWxhYmxlICovDQo+ID4gK8KgwqDC oMKgaWYgKGVudi0+aW5zbnNfZmxhZ3MgJiBQUENfQUxUSVZFQykgew0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgdWludDMyX3Qgdm14ID0gKGVudi0+aW5zbnNfZmxhZ3MyICYgUFBDMl9WU1gp ID8gMiA6IDE7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgX0ZEVCgoZmR0X3Byb3Bl cnR5X2NlbGwoZmR0LCAiaWJtLHZteCIsIHZteCkpKTsNCj4gPiArwqDCoMKgwqB9DQo+ID4g Kw0KPiA+ICvCoMKgwqDCoC8qIEFkdmVydGlzZSBERlAgKERlY2ltYWwgRmxvYXRpbmcgUG9p bnQpIGlmIGF2YWlsYWJsZQ0KPiA+ICvCoMKgwqDCoMKgKsKgwqDCoDAgLyBubyBwcm9wZXJ0 eSA9PSBubyBERlANCj4gPiArwqDCoMKgwqDCoCrCoMKgwqAxwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgPT0gREZQIGF2YWlsYWJsZSAqLw0KPiA+ICvCoMKgwqDCoGlmIChlbnYt Pmluc25zX2ZsYWdzMiAmIFBQQzJfREZQKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBfRkRU KChmZHRfcHJvcGVydHlfY2VsbChmZHQsICJpYm0sZGZwIiwgMSkpKTsNCj4gPiArwqDCoMKg wqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoHBhZ2Vfc2l6ZXNfcHJvcF9zaXplID0gcHBjX2Ny ZWF0ZV9wYWdlX3NpemVzX3Byb3AoZW52LCBwYWdlX3NpemVzX3Byb3AsDQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaXplb2YocGFnZV9z aXplc19wcm9wKSk7DQo+ID4gK8KgwqDCoMKgaWYgKHBhZ2Vfc2l6ZXNfcHJvcF9zaXplKSB7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBfRkRUKChmZHRfcHJvcGVydHkoZmR0LCAiaWJtLHNl Z21lbnQtcGFnZS1zaXplcyIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhZ2Vfc2l6ZXNfcHJvcCwgcGFnZV9zaXplc19w cm9wX3NpemUpKSk7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqBfRkRU KChmZHRfcHJvcGVydHlfY2VsbChmZHQsICJpYm0sY2hpcC1pZCIsIGNoaXBfaWQpKSk7DQo+ ID4gKw0KPiA+ICvCoMKgwqDCoGlmIChjcHUtPmNwdV92ZXJzaW9uKSB7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqBfRkRUKChmZHRfcHJvcGVydHlfY2VsbChmZHQsICJjcHUtdmVyc2lvbiIs IGNwdS0+Y3B1X3ZlcnNpb24pKSk7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDC oMKgwqAvKiBCdWlsZCBpbnRlcnJ1cHQgc2VydmVycyBhbmQgZ3NlcnZlcnMgcHJvcGVydGll cyAqLw0KPiA+ICvCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBzbXRfdGhyZWFkczsgaSsrKSB7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBzZXJ2ZXJzX3Byb3BbaV0gPSBjcHVfdG9fYmUzMihp bmRleCArIGkpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgLyogSGFjaywgZGlyZWN0IHRoZSBn cm91cCBxdWV1ZXMgYmFjayB0byBjcHUgMCAqLw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZ3Nl cnZlcnNfcHJvcFtpICogMl0gPSBjcHVfdG9fYmUzMihpbmRleCArIGkpOw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgZ3NlcnZlcnNfcHJvcFtpICogMiArIDFdID0gMDsNCj4gPiArwqDCoMKg wqB9DQo+ID4gK8KgwqDCoMKgX0ZEVCgoZmR0X3Byb3BlcnR5KGZkdCwgImlibSxwcGMtaW50 ZXJydXB0LXNlcnZlciNzIiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHNlcnZlcnNfcHJvcCwgc2l6ZW9mKHNlcnZlcnNfcHJvcCkpKSk7 DQo+ID4gK8KgwqDCoMKgX0ZEVCgoZmR0X3Byb3BlcnR5KGZkdCwgImlibSxwcGMtaW50ZXJy dXB0LWdzZXJ2ZXIjcyIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBnc2VydmVyc19wcm9wLCBzaXplb2YoZ3NlcnZlcnNfcHJvcCkpKSk7 DQo+ID4gKw0KPiA+ICvCoMKgwqDCoF9GRFQoKGZkdF9lbmRfbm9kZShmZHQpKSk7DQo+ID4g K30NCj4gPiArDQo+ID4gwqBzdGF0aWMgdm9pZCAqcG93ZXJudl9jcmVhdGVfZmR0KHNQb3dl ck5WTWFjaGluZVN0YXRlICpwbnYsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqa2Vy bmVsX2NtZGxpbmUpDQo+ID4gwqB7DQo+ID4gQEAgLTEyMCw2ICsyMjksNyBAQCBzdGF0aWMg dm9pZCAqcG93ZXJudl9jcmVhdGVfZmR0KHNQb3dlck5WTWFjaGluZVN0YXRlICpwbnYsDQo+ ID4gwqDCoMKgwqDCoHVpbnQzMl90IGVuZF9wcm9wID0gY3B1X3RvX2JlMzIocG52LT5pbml0 cmRfYmFzZSArIHBudi0+aW5pdHJkX3NpemUpOw0KPiA+IMKgwqDCoMKgwqBjaGFyICpidWY7 DQo+ID4gwqDCoMKgwqDCoGNvbnN0IGNoYXIgcGxhdF9jb21wYXRbXSA9ICJxZW11LHBvd2Vy bnZcMGlibSxwb3dlcm52IjsNCj4gPiArwqDCoMKgwqBpbnQgaTsNCj4gPiDCoA0KPiA+IMKg wqDCoMKgwqBmZHQgPSBnX21hbGxvYzAoRkRUX01BWF9TSVpFKTsNCj4gPiDCoMKgwqDCoMKg X0ZEVCgoZmR0X2NyZWF0ZShmZHQsIEZEVF9NQVhfU0laRSkpKTsNCj4gPiBAQCAtMTU2LDYg KzI2NiwyMyBAQCBzdGF0aWMgdm9pZCAqcG93ZXJudl9jcmVhdGVfZmR0KHNQb3dlck5WTWFj aGluZVN0YXRlICpwbnYsDQo+ID4gwqDCoMKgwqDCoC8qIE1lbW9yeSAqLw0KPiA+IMKgwqDC oMKgwqBfRkRUKChwb3dlcm52X3BvcHVsYXRlX21lbW9yeShmZHQpKSk7DQo+ID4gwqANCj4g PiArwqDCoMKgwqAvKiBjcHVzICovDQo+ID4gK8KgwqDCoMKgX0ZEVCgoZmR0X2JlZ2luX25v ZGUoZmR0LCAiY3B1cyIpKSk7DQo+ID4gK8KgwqDCoMKgX0ZEVCgoZmR0X3Byb3BlcnR5X2Nl bGwoZmR0LCAiI2FkZHJlc3MtY2VsbHMiLCAweDEpKSk7DQo+ID4gK8KgwqDCoMKgX0ZEVCgo ZmR0X3Byb3BlcnR5X2NlbGwoZmR0LCAiI3NpemUtY2VsbHMiLCAweDApKSk7DQo+ID4gKw0K PiA+ICvCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBwbnYtPm51bV9jaGlwczsgaSsrKSB7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqBQbnZDaGlwICpjaGlwID0gJnBudi0+Y2hpcHNbaV07DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqBpbnQgajsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKg wqBmb3IgKGogPSAwOyBqIDwgY2hpcC0+bnVtX2NvcmVzOyBqKyspIHsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgUG93ZXJOVkNQVUNvcmUgKnBjID0gUE9XRVJOVl9DUFVfQ09S RShjaGlwLT5jb3Jlc1tqXSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoENQVVN0 YXRlICpjcyA9IENQVShERVZJQ0UocGMtPnRocmVhZHMpKTsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcG93ZXJudl9jcmVhdGVfY29yZV9ub2RlKGZkdCwgY3MsIGNoaXAtPmNo aXBfaWQpOw0KPiANCj4gSSB0aGluayBpdCB3b3VsZCBiZSBuaWNlciB0byBkZWZpbmUgdGhl IGZkdCBjcmVhdGlvbiBmdW5jdGlvbiBpbiB0ZXJtcw0KPiBvZiB0aGUgY29yZSBvYmplY3Qs IGFuZCBoYXZlIGl0IHJldHJpZXZlIHRoZSByZXByZXNlbnRhdGl2ZSB0aHJlYWQgaXRzZWxm Lg0KPiANCj4gPiANCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqB9DQo+ ID4gK8KgwqDCoMKgX0ZEVCgoZmR0X2VuZF9ub2RlKGZkdCkpKTsNCj4gPiArDQo+ID4gwqDC oMKgwqDCoF9GRFQoKGZkdF9lbmRfbm9kZShmZHQpKSk7IC8qIGNsb3NlIHJvb3Qgbm9kZSAq Lw0KPiA+IMKgwqDCoMKgwqBfRkRUKChmZHRfZmluaXNoKGZkdCkpKTsNCj4gPiDCoA0KPiA+ IEBAIC0xNjgsMTEgKzI5NSwxMyBAQCBzdGF0aWMgdm9pZCBwcGNfcG93ZXJudl9yZXNldCh2 b2lkKQ0KPiA+IMKgwqDCoMKgwqBzUG93ZXJOVk1hY2hpbmVTdGF0ZSAqcG52ID0gUE9XRVJO Vl9NQUNISU5FKG1hY2hpbmUpOw0KPiA+IMKgwqDCoMKgwqB2b2lkICpmZHQ7DQo+ID4gwqAN Cj4gPiArwqDCoMKgwqBwbnYtPmZkdF9hZGRyID0gRkRUX0FERFI7DQo+ID4gKw0KPiA+IMKg wqDCoMKgwqBxZW11X2RldmljZXNfcmVzZXQoKTsNCj4gPiDCoA0KPiA+IMKgwqDCoMKgwqBm ZHQgPSBwb3dlcm52X2NyZWF0ZV9mZHQocG52LCBtYWNoaW5lLT5rZXJuZWxfY21kbGluZSk7 DQo+ID4gwqANCj4gPiAtwqDCoMKgwqBjcHVfcGh5c2ljYWxfbWVtb3J5X3dyaXRlKEZEVF9B RERSLCBmZHQsIGZkdF90b3RhbHNpemUoZmR0KSk7DQo+ID4gK8KgwqDCoMKgY3B1X3BoeXNp Y2FsX21lbW9yeV93cml0ZShwbnYtPmZkdF9hZGRyLCBmZHQsIGZkdF90b3RhbHNpemUoZmR0 KSk7DQo+IA0KPiBUaGVzZSBsb29rIGxpa2Ugbm90IHJlYWxseSByZWxhdGVkIGNoYW5nZXMs IHRoYXQgc2hvdWxkIGJlIG1heWJlDQo+IGZvbGRlZCBpbnRvIDEvMy4NCj4gDQo+ID4gDQo+ ID4gwqB9DQo+ID4gwqANCj4gPiDCoHN0YXRpYyB2b2lkIHBwY19wb3dlcm52X2luaXQoTWFj aGluZVN0YXRlICptYWNoaW5lKQ0KPiA+IEBAIC0yNTIsNiArMzgxLDEwIEBAIHN0YXRpYyB2 b2lkIHBwY19wb3dlcm52X2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5lKQ0KPiA+IMKgDQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgb2JqZWN0X2luaXRpYWxpemUoY2hpcCwgc2l6ZW9mKCpj aGlwKSwgVFlQRV9QTlZfQ0hJUCk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgb2JqZWN0X3By b3BlcnR5X3NldF9pbnQoT0JKRUNUKGNoaXApLCBpLCAiY2hpcC1pZCIsICZlcnJvcl9hYm9y dCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBvYmplY3RfcHJvcGVydHlfc2V0X2ludChPQkpF Q1QoY2hpcCksIHNtcF9jcHVzLCAibnVtLWNvcmVzIiwNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZlcnJv cl9hYm9ydCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBvYmplY3RfcHJvcGVydHlfc2V0X3N0 cihPQkpFQ1QoY2hpcCksIG1hY2hpbmUtPmNwdV9tb2RlbCwgImNwdS1tb2RlbCIsDQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAmZXJyb3JfYWJvcnQpOw0KPiANCj4gU28gdmFyaW91cyBkcmFmdHMgb2Yg dGhlIHNwYXByIGNvcmVzIGhhZCBhIGNwdS1tb2RlbCBwYXJhbWV0ZXIsIGJ1dCB3ZQ0KPiBl dmVudHVhbGx5IHJlamVjdGVkIGl0IGluIGZhdm91ciBvZiBoYXZpbmcgZGlmZmVyZW50IGNv cmUgdHlwZXMNCj4gY29ycmVzcG9uZGluZyB0byB0aGUgZGlmZmVyZW50LCB3ZWxsLCBjb3Jl IHR5cGVzLsKgwqBVbmxlc3MgdGhlcmUncyBhDQo+IGNvbXBlbGxpbmcgcmVhc29uIG90aGVy d2lzZSwgSSB0aGluayBpdCB3b3VsZCBiZSBuaWNlciB0byBkbyB0aGUgc2FtZQ0KPiBmb3Ig dGhlIHBudmNoaXAgb2JqZWN0cyAtIGEgcDhwbnZjaGlwIG9iamVjdCB3aWxsIGFsd2F5cyBj cmVhdGUgcDgNCj4gY29yZXMgYW5kIHNvIGZvcnRoLg0KPiANCj4gPiANCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqBvYmplY3RfcHJvcGVydHlfc2V0X2Jvb2woT0JKRUNUKGNoaXApLCB0cnVl LCAicmVhbGl6ZWQiLCAmZXJyb3JfYWJvcnQpOw0KPiA+IMKgwqDCoMKgwqB9DQo+ID4gwqB9 DQo+ID4gQEAgLTI5MiwxNCArNDI1LDM1IEBAIHN0YXRpYyBjb25zdCBUeXBlSW5mbyBwb3dl cm52X21hY2hpbmVfMl84X2luZm8gPSB7DQo+ID4gwqDCoMKgwqDCoC5jbGFzc19pbml0wqDC oMKgwqA9IHBvd2VybnZfbWFjaGluZV8yXzhfY2xhc3NfaW5pdCwNCj4gPiDCoH07DQo+ID4g wqANCj4gPiAtDQo+ID4gwqBzdGF0aWMgdm9pZCBwbnZfY2hpcF9yZWFsaXplKERldmljZVN0 YXRlICpkZXYsIEVycm9yICoqZXJycCkNCj4gPiDCoHsNCj4gPiAtwqDCoMKgwqA7DQo+ID4g K8KgwqDCoMKgaW50IGk7DQo+ID4gK8KgwqDCoMKgUG52Q2hpcCAqY2hpcCA9IFBOVl9DSElQ KGRldik7DQo+ID4gK8KgwqDCoMKgY2hhciAqdHlwZW5hbWUgPSBwb3dlcm52X2NwdV9jb3Jl X3R5cGVuYW1lKGNoaXAtPmNwdV9tb2RlbCk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmICgh b2JqZWN0X2NsYXNzX2J5X25hbWUodHlwZW5hbWUpKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqBlcnJvcl9zZXRnKGVycnAsICJVbmFibGUgdG8gZmluZCBQb3dlck5WIENQVSBDb3JlIGRl ZmluaXRpb24iKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiArwqDCoMKg wqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGNoaXAtPmNvcmVzID0gZ19uZXcwKE9iamVjdCAq LCBjaGlwLT5udW1fY29yZXMpOw0KPiA+ICvCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBjaGlw LT5udW1fY29yZXM7IGkrKykgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgaW50IGNvcmVfaWQg PSBpICogc21wX3RocmVhZHM7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBjaGlwLT5jb3Jlc1tp XSA9IG9iamVjdF9uZXcodHlwZW5hbWUpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgb2JqZWN0 X3Byb3BlcnR5X3NldF9pbnQoY2hpcC0+Y29yZXNbaV0sIHNtcF90aHJlYWRzLCAibnItdGhy ZWFkcyIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAmZXJyb3JfZmF0YWwpOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgb2JqZWN0X3Byb3BlcnR5X3NldF9pbnQoY2hpcC0+Y29yZXNbaV0sIGNvcmVfaWQs IENQVV9DT1JFX1BST1BfQ09SRV9JRCwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZlcnJvcl9mYXRhbCk7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBvYmplY3RfcHJvcGVydHlfc2V0X2Jvb2woY2hpcC0+ Y29yZXNbaV0sIHRydWUsICJyZWFsaXplZCIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZlcnJvcl9m YXRhbCk7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICvCoMKgwqDCoGdfZnJlZSh0eXBlbmFtZSk7 DQo+ID4gwqB9DQo+ID4gwqANCj4gPiDCoHN0YXRpYyBQcm9wZXJ0eSBwbnZfY2hpcF9wcm9w ZXJ0aWVzW10gPSB7DQo+ID4gwqDCoMKgwqDCoERFRklORV9QUk9QX1VJTlQzMigiY2hpcC1p ZCIsIFBudkNoaXAsIGNoaXBfaWQsIDApLA0KPiA+ICvCoMKgwqDCoERFRklORV9QUk9QX1NU UklORygiY3B1LW1vZGVsIiwgUG52Q2hpcCwgY3B1X21vZGVsKSwNCj4gPiArwqDCoMKgwqBE RUZJTkVfUFJPUF9VSU5UMzIoIm51bS1jb3JlcyIsIFBudkNoaXAsIG51bV9jb3JlcywgMSks DQo+ID4gwqDCoMKgwqDCoERFRklORV9QUk9QX0VORF9PRl9MSVNUKCksDQo+ID4gwqB9Ow0K PiA+IMKgDQo+ID4gZGlmZiAtLWdpdCBhL2h3L3BwYy9wbnZfY29yZS5jIGIvaHcvcHBjL3Bu dl9jb3JlLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAw MDAwMC4uMWUzNjcwOWRiOTkzDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2h3L3Bw Yy9wbnZfY29yZS5jDQo+ID4gQEAgLTAsMCArMSwxNzEgQEANCj4gPiArLyoNCj4gPiArICog UUVNVSBQb3dlclBDIFBvd2VyTlYgQ1BVIG1vZGVsDQo+ID4gKyAqDQo+ID4gKyAqIENvcHly aWdodCAoYykgSUJNIENvcnBvcmF0aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGxpYnJh cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ ID4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQ0KPiA+ICsgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZg0KPiA+ICsgKiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4gPiAr ICoNCj4gPiArICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KPiA+ICsgKiBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ID4gKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS7CoMKgU2Vl IHRoZSBHTlUNCj4gPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4NCj4gPiArICoNCj4gPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPiA+ICsgKiBMaWNl bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uDQo+ID4gKyAqLw0KPiA+ICsjaW5jbHVkZSAicWVtdS9vc2Rl cC5oIg0KPiA+ICsjaW5jbHVkZSAic3lzZW11L3N5c2VtdS5oIg0KPiA+ICsjaW5jbHVkZSAi cWFwaS9lcnJvci5oIg0KPiA+ICsjaW5jbHVkZSAidGFyZ2V0LXBwYy9jcHUuaCINCj4gPiAr I2luY2x1ZGUgImh3L3BwYy9wcGMuaCINCj4gPiArI2luY2x1ZGUgImh3L3BwYy9wbnYuaCIN Cj4gPiArI2luY2x1ZGUgImh3L3BwYy9wbnZfY29yZS5oIg0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgcG93ZXJudl9jcHVfcmVzZXQodm9pZCAqb3BhcXVlKQ0KPiA+ICt7DQo+ID4gK8Kg wqDCoMKgUG93ZXJQQ0NQVSAqY3B1ID0gb3BhcXVlOw0KPiA+ICvCoMKgwqDCoENQVVN0YXRl ICpjcyA9IENQVShjcHUpOw0KPiA+ICvCoMKgwqDCoENQVVBQQ1N0YXRlICplbnYgPSAmY3B1 LT5lbnY7DQo+ID4gK8KgwqDCoMKgTWFjaGluZVN0YXRlICptYWNoaW5lID0gTUFDSElORShx ZGV2X2dldF9tYWNoaW5lKCkpOw0KPiA+ICvCoMKgwqDCoHNQb3dlck5WTWFjaGluZVN0YXRl ICpwbnYgPSBQT1dFUk5WX01BQ0hJTkUobWFjaGluZSk7DQo+ID4gKw0KPiA+ICvCoMKgwqDC oGNwdV9yZXNldChjcyk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGVudi0+c3ByW1NQUl9QSVJd ID0gcHBjX2dldF92Y3B1X2R0X2lkKGNwdSk7DQo+IA0KPiBJcyB0aGUgUElSIHdyaXRhYmxl P8KgwqBJZiBub3QgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIG1vdmUgdGhpcyB0byBpbml0DQo+ IHJhdGhlciB0aGFuIHJlc2V0IHRpbWUuDQo+IA0KPiA+IA0KPiA+ICvCoMKgwqDCoGVudi0+ c3ByW1NQUl9ISU9SXSA9IDA7DQo+ID4gK8KgwqDCoMKgZW52LT5ncHJbM10gPSBwbnYtPmZk dF9hZGRyOw0KPiA+ICvCoMKgwqDCoGVudi0+bmlwID0gMHgxMDsNCj4gPiArwqDCoMKgwqBl bnYtPm1zciB8PSBNU1JfSFZCOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBw b3dlcm52X2NwdV9pbml0KFBvd2VyUENDUFUgKmNwdSwgRXJyb3IgKiplcnJwKQ0KPiA+ICt7 DQo+ID4gK8KgwqDCoMKgQ1BVUFBDU3RhdGUgKmVudiA9ICZjcHUtPmVudjsNCj4gPiArDQo+ ID4gK8KgwqDCoMKgLyogU2V0IHRpbWUtYmFzZSBmcmVxdWVuY3kgdG8gNTEyIE1IeiAqLw0K PiA+ICvCoMKgwqDCoGNwdV9wcGNfdGJfaW5pdChlbnYsIFBOVl9USU1FQkFTRV9GUkVRKTsN Cj4gPiArDQo+ID4gK8KgwqDCoMKgLyogTVNSW0lQXSBkb2Vzbid0IGV4aXN0IG5vd2FkYXlz ICovDQo+ID4gK8KgwqDCoMKgZW52LT5tc3JfbWFzayAmPSB+KDEgPDwgNik7DQo+ID4gKw0K PiA+ICvCoMKgwqDCoHFlbXVfcmVnaXN0ZXJfcmVzZXQocG93ZXJudl9jcHVfcmVzZXQsIGNw dSk7DQo+ID4gK8KgwqDCoMKgcG93ZXJudl9jcHVfcmVzZXQoY3B1KTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgcG93ZXJudl9jcHVfY29yZV9yZWFsaXplX2NoaWxkKE9i amVjdCAqY2hpbGQsIEVycm9yICoqZXJycCkNCj4gPiArew0KPiA+ICvCoMKgwqDCoEVycm9y ICpsb2NhbF9lcnIgPSBOVUxMOw0KPiA+ICvCoMKgwqDCoENQVVN0YXRlICpjcyA9IENQVShj aGlsZCk7DQo+ID4gK8KgwqDCoMKgUG93ZXJQQ0NQVSAqY3B1ID0gUE9XRVJQQ19DUFUoY3Mp Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqBvYmplY3RfcHJvcGVydHlfc2V0X2Jvb2woY2hpbGQs IHRydWUsICJyZWFsaXplZCIsICZsb2NhbF9lcnIpOw0KPiA+ICvCoMKgwqDCoGlmIChsb2Nh bF9lcnIpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBs b2NhbF9lcnIpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+ICvCoMKgwqDC oH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgcG93ZXJudl9jcHVfaW5pdChjcHUsICZsb2NhbF9l cnIpOw0KPiA+ICvCoMKgwqDCoGlmIChsb2NhbF9lcnIpIHsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBsb2NhbF9lcnIpOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgcmV0dXJuOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHZvaWQgcG93ZXJudl9jcHVfY29yZV9yZWFsaXplKERldmljZVN0YXRlICpkZXYsIEVy cm9yICoqZXJycCkNCj4gPiArew0KPiA+ICvCoMKgwqDCoFBvd2VyTlZDUFVDb3JlICpwYyA9 IFBPV0VSTlZfQ1BVX0NPUkUoT0JKRUNUKGRldikpOw0KPiA+ICvCoMKgwqDCoENQVUNvcmUg KmNjID0gQ1BVX0NPUkUoT0JKRUNUKGRldikpOw0KPiA+ICvCoMKgwqDCoFBvd2VyTlZDUFVD bGFzcyAqcGNjID0gUE9XRVJOVl9DUFVfR0VUX0NMQVNTKE9CSkVDVChkZXYpKTsNCj4gPiAr wqDCoMKgwqBjb25zdCBjaGFyICp0eXBlbmFtZSA9IG9iamVjdF9jbGFzc19nZXRfbmFtZShw Y2MtPmNwdV9vYyk7DQo+ID4gK8KgwqDCoMKgc2l6ZV90IHNpemUgPSBvYmplY3RfdHlwZV9n ZXRfaW5zdGFuY2Vfc2l6ZSh0eXBlbmFtZSk7DQo+ID4gK8KgwqDCoMKgRXJyb3IgKmxvY2Fs X2VyciA9IE5VTEw7DQo+ID4gK8KgwqDCoMKgdm9pZCAqb2JqOw0KPiA+ICvCoMKgwqDCoGlu dCBpLCBqOw0KPiA+ICsNCj4gPiArDQo+ID4gK8KgwqDCoMKgcGMtPnRocmVhZHMgPSBnX21h bGxvYzAoc2l6ZSAqIGNjLT5ucl90aHJlYWRzKTsNCj4gPiArwqDCoMKgwqBmb3IgKGkgPSAw OyBpIDwgY2MtPm5yX3RocmVhZHM7IGkrKykgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgY2hh ciBpZFszMl07DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBDUFVTdGF0ZSAqY3M7DQo+ID4gKw0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgb2JqID0gcGMtPnRocmVhZHMgKyBpICogc2l6ZTsNCj4g PiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBvYmplY3RfaW5pdGlhbGl6ZShvYmosIHNpemUs IHR5cGVuYW1lKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNzID0gQ1BVKG9iaik7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqBjcy0+Y3B1X2luZGV4ID0gY2MtPmNvcmVfaWQgKyBpOw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgc25wcmludGYoaWQsIHNpemVvZihpZCksICJ0aHJlYWRbJWRd IiwgaSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBvYmplY3RfcHJvcGVydHlfYWRkX2NoaWxk KE9CSkVDVChwYyksIGlkLCBvYmosICZsb2NhbF9lcnIpOw0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgaWYgKGxvY2FsX2Vycikgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3Rv IGVycjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoG9i amVjdF91bnJlZihvYmopOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKg Zm9yIChqID0gMDsgaiA8IGNjLT5ucl90aHJlYWRzOyBqKyspIHsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoG9iaiA9IHBjLT50aHJlYWRzICsgaiAqIHNpemU7DQo+ID4gKw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgcG93ZXJudl9jcHVfY29yZV9yZWFsaXplX2NoaWxkKG9iaiwgJmxvY2Fs X2Vycik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBpZiAobG9jYWxfZXJyKSB7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg fQ0KPiA+ICvCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqByZXR1cm47DQo+ID4gKw0KPiA+ICtl cnI6DQo+ID4gK8KgwqDCoMKgd2hpbGUgKC0taSA+PSAwKSB7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqBvYmogPSBwYy0+dGhyZWFkcyArIGkgKiBzaXplOw0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgb2JqZWN0X3VucGFyZW50KG9iaik7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICvCoMKgwqDC oGdfZnJlZShwYy0+dGhyZWFkcyk7DQo+ID4gK8KgwqDCoMKgZXJyb3JfcHJvcGFnYXRlKGVy cnAsIGxvY2FsX2Vycik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIEdyb3cg dGhpcyBsaXN0IG9yIG1lcmdlIHdpdGggU1BBUFJDb3JlSW5mbyB3aGljaCBpcyB2ZXJ5IHNp bWlsYXINCj4gPiArICovDQo+ID4gK3N0YXRpYyBjb25zdCBjaGFyICpwb3dlcm52X2NvcmVf bW9kZWxzW10gPSB7ICJQT1dFUjgiIH07DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBwb3dl cm52X2NwdV9jb3JlX2NsYXNzX2luaXQoT2JqZWN0Q2xhc3MgKm9jLCB2b2lkICpkYXRhKQ0K PiA+ICt7DQo+ID4gK8KgwqDCoMKgRGV2aWNlQ2xhc3MgKmRjID0gREVWSUNFX0NMQVNTKG9j KTsNCj4gPiArwqDCoMKgwqBQb3dlck5WQ1BVQ2xhc3MgKnBjYyA9IFBPV0VSTlZfQ1BVX0NM QVNTKG9jKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgZGMtPnJlYWxpemUgPSBwb3dlcm52X2Nw dV9jb3JlX3JlYWxpemU7DQo+ID4gK8KgwqDCoMKgcGNjLT5jcHVfb2MgPSBjcHVfY2xhc3Nf YnlfbmFtZShUWVBFX1BPV0VSUENfQ1BVLCBkYXRhKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGNvbnN0IFR5cGVJbmZvIHBvd2VybnZfY3B1X2NvcmVfaW5mbyA9IHsNCj4gPiAr wqDCoMKgwqAubmFtZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IFRZUEVfUE9XRVJOVl9DUFVf Q09SRSwNCj4gPiArwqDCoMKgwqAucGFyZW50wqDCoMKgwqDCoMKgwqDCoMKgPSBUWVBFX0NQ VV9DT1JFLA0KPiA+ICvCoMKgwqDCoC5pbnN0YW5jZV9zaXplwqDCoD0gc2l6ZW9mKFBvd2Vy TlZDUFVDb3JlKSwNCj4gPiArwqDCoMKgwqAuY2xhc3Nfc2l6ZcKgwqDCoMKgwqA9IHNpemVv ZihQb3dlck5WQ1BVQ2xhc3MpLA0KPiA+ICvCoMKgwqDCoC5hYnN0cmFjdMKgwqDCoMKgwqDC oMKgPSB0cnVlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcG93ZXJudl9j cHVfY29yZV9yZWdpc3Rlcl90eXBlcyh2b2lkKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgaW50 IGkgOw0KPiA+ICsNCj4gPiArwqDCoMKgwqB0eXBlX3JlZ2lzdGVyX3N0YXRpYygmcG93ZXJu dl9jcHVfY29yZV9pbmZvKTsNCj4gPiArwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShwb3dlcm52X2NvcmVfbW9kZWxzKTsgKytpKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqBUeXBlSW5mbyB0aSA9IHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnBhcmVu dCA9IFRZUEVfUE9XRVJOVl9DUFVfQ09SRSwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLmluc3RhbmNlX3NpemUgPSBzaXplb2YoUG93ZXJOVkNQVUNvcmUpLA0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAuY2xhc3NfaW5pdCA9IHBvd2VybnZfY3B1X2NvcmVfY2xh c3NfaW5pdCwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmNsYXNzX2RhdGEgPSAo dm9pZCAqKSBwb3dlcm52X2NvcmVfbW9kZWxzW2ldLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg fTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHRpLm5hbWUgPSBwb3dlcm52X2NwdV9jb3JlX3R5 cGVuYW1lKHBvd2VybnZfY29yZV9tb2RlbHNbaV0pOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg dHlwZV9yZWdpc3RlcigmdGkpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZ19mcmVlKCh2b2lk ICopdGkubmFtZSk7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICt0eXBl X2luaXQocG93ZXJudl9jcHVfY29yZV9yZWdpc3Rlcl90eXBlcykNCj4gPiArDQo+ID4gK2No YXIgKnBvd2VybnZfY3B1X2NvcmVfdHlwZW5hbWUoY29uc3QgY2hhciAqbW9kZWwpDQo+ID4g K3sNCj4gPiArwqDCoMKgwqByZXR1cm4gZ19zdHJkdXBfcHJpbnRmKCIlcy0iIFRZUEVfUE9X RVJOVl9DUFVfQ09SRSwgbW9kZWwpOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1 ZGUvaHcvcHBjL3Budi5oIGIvaW5jbHVkZS9ody9wcGMvcG52LmgNCj4gPiBpbmRleCA2OTA3 ZGM5ZTVjM2QuLjllYWM0YjM0YTliMCAxMDA2NDQNCj4gPiAtLS0gYS9pbmNsdWRlL2h3L3Bw Yy9wbnYuaA0KPiA+ICsrKyBiL2luY2x1ZGUvaHcvcHBjL3Budi5oDQo+ID4gQEAgLTMxLDYg KzMxLDEwIEBAIHR5cGVkZWYgc3RydWN0IFBudkNoaXAgew0KPiA+IMKgDQo+ID4gwqDCoMKg wqDCoC8qPCBwdWJsaWMgPiovDQo+ID4gwqDCoMKgwqDCoHVpbnQzMl90wqDCoMKgwqDCoGNo aXBfaWQ7DQo+ID4gK8KgwqDCoMKgdWludDMyX3TCoMKgwqDCoMKgbnVtX2NvcmVzOw0KPiA+ ICvCoMKgwqDCoGNoYXIgKmNwdV9tb2RlbDsNCj4gPiArDQo+ID4gK8KgwqDCoMKgT2JqZWN0 ICoqY29yZXM7DQo+IA0KPiBTbywgdW5saWtlIHRoZSBjaGlwcyB3aXRoaW4gdGhlIG1hY2hp bmUsIHRoZSBjb3JlcyB3aXRoaW4gdGhlIGNoaXANCj4gc2hvdWxkIHByb2JhYmx5IGJlIGRv bmUgbGlrZSB0aGUgdGhyZWFkcyB3aXRoaW4gdGhlIGNvcmUgLSBhIHNpbmdsZQ0KPiBhcnJh eSB3aXRoIG9iamVjdF9pbml0aWFsaXplKCkgcmF0aGVyIHRoYW4gYW4gYXJyYXkgb2YgcG9p bnRlcnMuwqDCoEFJVUkNCj4gdGhpcyBpcyBiZWNhdXNlIGhhdmluZyBhIChwb3RlbnRpYWxs eSkgdXNlciBpbnN0YW50aWFibGUgb2JqZWN0DQo+IGF1dG9tYXRpY2FsbHkgb2JqZWN0X25l dygpIG90aGVyIHRoaW5ncyBicmVha3MgUU9NIGxpZmV0aW1lIHJ1bGVzLsKgwqBJDQo+IGNh bid0IHNheSBJIHVuZGVyc3RhbmQgdGhpcyBwb2ludCB0ZXJyaWJseSB3ZWxsIHRob3VnaCwg YnV0IGkga25vdyBpdA0KPiB3YXMgc29tZXRoaW5nIHdlIHdlbnQgc2V2ZXJhbCByb3VuZHMg b24gZHVyaW5nIHRoZSBzcGFwciBjb3JlIHdvcmsNCj4gdGhvdWdoLg0KPiANCj4gPiANCj4g PiDCoH0gUG52Q2hpcDsNCj4gPiDCoA0KPiA+IMKgI2RlZmluZSBUWVBFX1BPV0VSTlZfTUFD SElORcKgwqDCoMKgwqDCoCJwb3dlcm52LW1hY2hpbmUiDQo+ID4gQEAgLTQzLDkgKzQ3LDEy IEBAIHR5cGVkZWYgc3RydWN0IHNQb3dlck5WTWFjaGluZVN0YXRlIHsNCj4gPiDCoA0KPiA+ IMKgwqDCoMKgwqB1aW50MzJfdCBpbml0cmRfYmFzZTsNCj4gPiDCoMKgwqDCoMKgbG9uZyBp bml0cmRfc2l6ZTsNCj4gPiArwqDCoMKgwqBod2FkZHIgZmR0X2FkZHI7DQo+ID4gwqANCj4g PiDCoMKgwqDCoMKgdWludDMyX3TCoMKgbnVtX2NoaXBzOw0KPiA+IMKgwqDCoMKgwqBQbnZD aGlwwqDCoMKgKmNoaXBzOw0KPiA+IMKgfSBzUG93ZXJOVk1hY2hpbmVTdGF0ZTsNCj4gPiDC oA0KPiA+ICsjZGVmaW5lIFBOVl9USU1FQkFTRV9GUkVRwqDCoMKgwqDCoMKgwqDCoMKgwqDC oDUxMjAwMDAwMFVMTA0KPiA+ICsNCj4gPiDCoCNlbmRpZiAvKiBfUFBDX1BOVl9IICovDQo+ ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvaHcvcHBjL3Budl9jb3JlLmggYi9pbmNsdWRlL2h3 L3BwYy9wbnZfY29yZS5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAw MDAwMDAwMDAwMDAuLjg4YTA5YjBmZDFjNg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysg Yi9pbmNsdWRlL2h3L3BwYy9wbnZfY29yZS5oDQo+ID4gQEAgLTAsMCArMSw0NyBAQA0KPiA+ ICsvKg0KPiA+ICsgKiBRRU1VIFBvd2VyUEMgUG93ZXJOViBDUFUgbW9kZWwNCj4gPiArICoN Cj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE2IElCTSBDb3Jwb3JhdGlvbi4NCj4gPiArICoN Cj4gPiArICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcg0KPiA+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCj4gPiArICogYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YNCj4gPiArICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCj4gPiArICog V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZg0KPiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuwqDCoFNlZSB0aGUgR05VDQo+ID4gKyAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ID4gKyAqDQo+ID4gKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMNCj4gPiArICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lg0KPiA+ICsgKi8NCj4gPiAr I2lmbmRlZiBfUFBDX1BOVl9DT1JFX0gNCj4gPiArI2RlZmluZSBfUFBDX1BOVl9DT1JFX0gN Cj4gPiArDQo+ID4gKyNpbmNsdWRlICJody9jcHUvY29yZS5oIg0KPiA+ICsNCj4gPiArI2Rl ZmluZSBUWVBFX1BPV0VSTlZfQ1BVX0NPUkUgInBvd2VybnYtY3B1LWNvcmUiDQo+ID4gKyNk ZWZpbmUgUE9XRVJOVl9DUFVfQ09SRShvYmopIFwNCj4gPiArwqDCoMKgwqBPQkpFQ1RfQ0hF Q0soUG93ZXJOVkNQVUNvcmUsIChvYmopLCBUWVBFX1BPV0VSTlZfQ1BVX0NPUkUpDQo+ID4g KyNkZWZpbmUgUE9XRVJOVl9DUFVfQ0xBU1Moa2xhc3MpIFwNCj4gPiArwqDCoMKgwqDCoE9C SkVDVF9DTEFTU19DSEVDSyhQb3dlck5WQ1BVQ2xhc3MsIChrbGFzcyksIFRZUEVfUE9XRVJO Vl9DUFVfQ09SRSkNCj4gPiArI2RlZmluZSBQT1dFUk5WX0NQVV9HRVRfQ0xBU1Mob2JqKSBc DQo+ID4gK8KgwqDCoMKgwqBPQkpFQ1RfR0VUX0NMQVNTKFBvd2VyTlZDUFVDbGFzcywgKG9i aiksIFRZUEVfUE9XRVJOVl9DUFVfQ09SRSkNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0 IFBvd2VyTlZDUFVDb3JlIHsNCj4gPiArwqDCoMKgwqAvKjwgcHJpdmF0ZSA+Ki8NCj4gPiAr wqDCoMKgwqBDUFVDb3JlIHBhcmVudF9vYmo7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoC8qPCBw dWJsaWMgPiovDQo+ID4gK8KgwqDCoMKgdm9pZCAqdGhyZWFkczsNCj4gPiArfSBQb3dlck5W Q1BVQ29yZTsNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IFBvd2VyTlZDUFVDbGFzcyB7 DQo+ID4gK8KgwqDCoMKgRGV2aWNlQ2xhc3MgcGFyZW50X2NsYXNzOw0KPiA+ICvCoMKgwqDC oE9iamVjdENsYXNzICpjcHVfb2M7DQo+ID4gK33CoMKgwqBQb3dlck5WQ1BVQ2xhc3M7DQo+ ID4gKw0KPiA+ICtleHRlcm4gY2hhciAqcG93ZXJudl9jcHVfY29yZV90eXBlbmFtZShjb25z dCBjaGFyICptb2RlbCk7DQo+ID4gKw0KPiA+ICsjZW5kaWYgLyogX1BQQ19QTlZfQ09SRV9I ICovDQo+IA0K