From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH i-g-t] tests/gem_softpin: New tests for softpin feature Date: Fri, 4 Dec 2015 10:45:46 +0100 Message-ID: <20151204094546.GI10243@phenom.ffwll.local> References: <1448907744-15263-1-git-send-email-vinay.belgaumkar@intel.com> <565D780F.3070709@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by gabe.freedesktop.org (Postfix) with ESMTPS id 220B96E442 for ; Fri, 4 Dec 2015 01:45:50 -0800 (PST) Received: by wmvv187 with SMTP id v187so66080889wmv.1 for ; Fri, 04 Dec 2015 01:45:48 -0800 (PST) Content-Disposition: inline In-Reply-To: <565D780F.3070709@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin Cc: Vinay Belgaumkar , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBEZWMgMDEsIDIwMTUgYXQgMTA6MzU6NTlBTSArMDAwMCwgVHZydGtvIFVyc3VsaW4g d3JvdGU6Cj4gCj4gSGksCj4gCj4gSnVzdCBvbmUgY29tbWVudCBkZWVwIGRvd24uCj4gCj4gT24g MzAvMTEvMTUgMTg6MjIsIFZpbmF5IEJlbGdhdW1rYXIgd3JvdGU6Cj4gPlRoZXNlIHRlc3RzIGV4 ZXJjaXNlIHRoZSB1c2VycHRyIGlvY3RsIHRvIGNyZWF0ZSBzaGFyZWQgYnVmZmVycwo+ID5iZXR3 ZWVuIENQVSBhbmQgR1BVLiBUaGV5IGNvbnRhaW4gZXJyb3IgYW5kIG5vcm1hbCB1c2FnZSBzY2Vu YXJpb3MuCj4gPlRoZXkgYWxzbyBjb250YWluIGEgY291cGxlIG9mIHN0cmVzcyB0ZXN0cyB3aGlj aCBjb3B5IGJ1ZmZlcnMgYmV0d2Vlbgo+ID5DUFUgYW5kIEdQVS4gVGhlc2UgdGVzdHMgcmVseSBv biB0aGUgc29mdHBpbiBwYXRjaCBpbiBvcmRlciB0byBwaW4gYnVmZmVycwo+ID50byBhIGNlcnRh aW4gVkEuCj4gPgo+ID5DYXZlYXQ6IFRoZXNlIHRlc3RzIHdlcmUgZGVzaWduZWQgdG8gcnVuIG9u IDY0LWJpdCBzeXN0ZW0uIEZ1dHVyZSB3b3JrCj4gPmluY2x1ZGVzIGFkZGluZyBsb2dpYyB0byBl bnN1cmUgdGhlc2UgdGVzdHMgY2FuIHJ1biBvbiAzMi1iaXQgc3lzdGVtcyB3aXRoCj4gPlBQR1RU IHN1cHBvcnQuIFNvbWUgdGVzdHMgYXJlIGN1cnJlbnRseSBkaXNhYmxlZCBmb3IgMzItYml0IHN5 c3RlbXMgZm9yIHRoYXQKPiA+cmVhc29uLgo+ID4KPiA+djI6IEFkZGVkIGNjIGFuZCBzaWduZWQt b2ZmLWJ5IGZpZWxkcwo+ID4KPiA+djM6IEZpeGVkIHJldmlldyBjb21tZW50cywgYWRkZWQgaGVs cGVyIGZ1bmN0aW9ucy4gUmVtb3ZlZCB1c2VycHRyIGVycm9yCj4gPnNjZW5hcmlvcyBjb3ZlcmVk IGJ5IGV4aXN0aW5nIHVzZXJwdHIgdGVzdHMuIE1vZGlmaWVkIHN0cmVzcyB0ZXN0IHRvIGhhdmUK PiA+MTAwSyBidWZmZXJzLCBpdCBub3cgcnVucyBmb3IgfjMwIG1pbnMsIGNoZWNrcyBldmVyeSBl bGVtZW50IGhhcyBiZWVuIHdyaXR0ZW4KPiA+dG8gY29ycmVjdGx5LCBhbmQgcGlucyBidWZmZXJz IGF0IGRpZmZlcmVudCBWTUFzLgo+ID4KPiA+djQ6IENoYW5nZWQgbmFtZSB0byBnZW1fc29mdHBp bgo+ID4KPiA+djU6IE1vcmUgZml4ZXMuIFJlbW92ZWQgdGhlIGZpbGUgYmFzZWQgdGVzdHMsIHdp bGwgbW92ZSB0aGVtIHRvIHVzZXJwdHIgdGVzdHMuCj4gPkFkZGVkIGEgZnVuY3Rpb24gdGhhdCB2 YWxpZGF0ZXMgYXBwcm9wcmlhdGUgUFBHVFQgc3VwcG9ydCBiZWZvcmUgcnVubmluZyB0ZXN0cy4K PiA+T3B0aW1pemVkIHN0YWNrIHNwYWNlIGFuZCBtZW1vcnkgZm9vdHByaW50IGluIHN0cmVzcyB0 ZXN0LiBSZW1vdmVkIHRoZSBldmljdGlvbgo+ID50ZXN0LCB3aWxsIGFkZCBpdCBiYWNrIGFmdGVy IHZlcmlmeWluZyBwcm9wZXIgZnVuY3Rpb25hbGl0eS4KPiA+Cj4gPnY2OiBTcGxpdCBiYXNpYyB0 ZXN0IGludG8gdXNlcnB0ciBhbmQgYm8KPiA+Rml4ZWQgc29tZSBjb2Rpbmcgc3R5bGUgaXNzdWVz Lgo+ID4KPiA+djc6IEVuaGFuY2VkIGludmFsaWQgdm1hIHBpbm5pbmcgdGVzdCB0byB2ZXJpZnkg MzItYml0IFBQR1RUIGZ1bmN0aW9uYWxpdHkuCj4gPkVuYWJsZWQgdGhlIHRlc3QgZm9yIDMyLWJp dCBQUEdUVCBzeXN0ZW1zLCBhbmQgdmVyaWZ5IHBpbm5pbmcgZmFpbHMgYWJvdmUKPiA+MzItYml0 IGFkZHJlc3Nlcy4gRW5oYW5jZWQgdGhlIGhpZ2ggYWRyZXNzIHBpbm5pbmcgdGVzdCB0byBlbnN1 cmUgcGlubmluZwo+ID5mYWlscyB3aGVuIEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGlzIG5vdCB1 c2VkLiBTb21lIG1vcmUgY29zbWV0aWMgZml4ZXMgdG8KPiA+Y2xvc2UgYnVmZmVyIGhhbmRsZXMu IENoYW5nZWQgdXNlcnB0ciBmdW5jdGlvbiB0byB1c2VkIHN5bmNocm9uaXplZCBvcGVyYXRpb25z Lgo+ID4KPiA+Q2M6IE1pY2hlbCBUaGllcnJ5IDxtaWNoZWwudGhpZXJyeUBpbnRlbC5jb20+Cj4g PkNjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+ID5TaWduZWQt b2ZmLWJ5OiBWaW5heSBCZWxnYXVta2FyIDx2aW5heS5iZWxnYXVta2FyQGludGVsLmNvbT4KPiA+ LS0tCj4gPiAgdGVzdHMvLmdpdGlnbm9yZSAgICAgICB8ICAgIDEgKwo+ID4gIHRlc3RzL01ha2Vm aWxlLnNvdXJjZXMgfCAgICAxICsKPiA+ICB0ZXN0cy9nZW1fc29mdHBpbi5jICAgIHwgMTA1MCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICAzIGZp bGVzIGNoYW5nZWQsIDEwNTIgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 ZXN0cy9nZW1fc29mdHBpbi5jCj4gPgo+ID5kaWZmIC0tZ2l0IGEvdGVzdHMvLmdpdGlnbm9yZSBi L3Rlc3RzLy5naXRpZ25vcmUKPiA+aW5kZXggODBhZjlhNy4uNDI0ODcwYiAxMDA2NDQKPiA+LS0t IGEvdGVzdHMvLmdpdGlnbm9yZQo+ID4rKysgYi90ZXN0cy8uZ2l0aWdub3JlCj4gPkBAIC0yMSw2 ICsyMSw3IEBAIGdlbV9iYWRfYmxpdAo+ID4gIGdlbV9iYWRfbGVuZ3RoCj4gPiAgZ2VtX2JhZF9y ZWxvYwo+ID4gIGdlbV9iYXNpYwo+ID4rZ2VtX3NvZnRwaW4KPiA+ICBnZW1fY2FjaGluZwo+ID4g IGdlbV9jbG9zZV9yYWNlCj4gPiAgZ2VtX2NvbmN1cnJlbnRfYWxsCj4gPmRpZmYgLS1naXQgYS90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID5pbmRleCA4 ZmIyZGU4Li4yMDA4ZDRhIDEwMDY0NAo+ID4tLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4g PisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+QEAgLTExLDYgKzExLDcgQEAgVEVTVFNf cHJvZ3NfTSA9IFwKPiA+ICAJZHJ2X2hhbmdtYW4gXAo+ID4gIAlnZW1fYmFkX3JlbG9jIFwKPiA+ ICAJZ2VtX2Jhc2ljIFwKPiA+KwlnZW1fc29mdHBpbiBcCj4gPiAgCWdlbV9jYWNoaW5nIFwKPiA+ ICAJZ2VtX2Nsb3NlX3JhY2UgXAo+ID4gIAlnZW1fY29uY3VycmVudF9ibGl0IFwKPiA+ZGlmZiAt LWdpdCBhL3Rlc3RzL2dlbV9zb2Z0cGluLmMgYi90ZXN0cy9nZW1fc29mdHBpbi5jCj4gPm5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gPmluZGV4IDAwMDAwMDAuLjg2Y2ZhZjgKPiA+LS0tIC9kZXYvbnVs bAo+ID4rKysgYi90ZXN0cy9nZW1fc29mdHBpbi5jCj4gPkBAIC0wLDAgKzEsMTA1MCBAQAo+ID4r LyoKPiA+KyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4gPisgKgo+ID4r ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKPiA+KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gPisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCj4gPisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+KyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4r ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKPiA+KyAqCj4gPisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCj4gPisgKiBTb2Z0d2FyZS4KPiA+KyAqCj4gPisgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT UyBPUgo+ID4rICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+KyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCj4gPisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ID4rICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUwo+ID4rICogSU4gVEhFIFNPRlRXQVJFLgo+ID4rICoKPiA+KyAqIEF1dGhvcnM6 Cj4gPisgKiAgICBWaW5heSBCZWxnYXVta2FyIDx2aW5heS5iZWxnYXVta2FyQGludGVsLmNvbT4K PiA+KyAqICAgIFRob21hcyBEYW5pZWwgPHRob21hcy5kYW5pZWxAaW50ZWwuY29tPgo+ID4rICoK PiA+KyAqLwo+ID4rCj4gPisjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gPisjaW5jbHVkZSA8c3RkbGli Lmg+Cj4gPisjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gPisjaW5jbHVkZSA8c3RkaW8uaD4KPiA+KyNp bmNsdWRlIDxzdHJpbmcuaD4KPiA+KyNpbmNsdWRlIDxmY250bC5oPgo+ID4rI2luY2x1ZGUgPGlu dHR5cGVzLmg+Cj4gPisjaW5jbHVkZSA8ZXJybm8uaD4KPiA+KyNpbmNsdWRlIDxzeXMvc3RhdC5o Pgo+ID4rI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ID4rI2luY2x1ZGUgPHN5cy90aW1lLmg+Cj4g PisjaW5jbHVkZSA8bWFsbG9jLmg+Cj4gPisjaW5jbHVkZSAiZHJtLmgiCj4gPisjaW5jbHVkZSAi aW9jdGxfd3JhcHBlcnMuaCIKPiA+KyNpbmNsdWRlICJkcm10ZXN0LmgiCj4gPisjaW5jbHVkZSAi aW50ZWxfY2hpcHNldC5oIgo+ID4rI2luY2x1ZGUgImludGVsX2lvLmgiCj4gPisjaW5jbHVkZSAi aTkxNV9kcm0uaCIKPiA+KyNpbmNsdWRlIDxhc3NlcnQuaD4KPiA+KyNpbmNsdWRlIDxzeXMvd2Fp dC5oPgo+ID4rI2luY2x1ZGUgPHN5cy9pcGMuaD4KPiA+KyNpbmNsdWRlIDxzeXMvc2htLmg+Cj4g PisjaW5jbHVkZSAiaWd0X2ttcy5oIgo+ID4rI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gPisjaW5j bHVkZSA8c3lzL3R5cGVzLmg+Cj4gPisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiA+Kwo+ID4rI2Rl ZmluZSBCT19TSVpFIDQwOTYKPiA+KyNkZWZpbmUgTVVMVElQQUdFX0JPX1NJWkUgMiAqIEJPX1NJ WkUKPiA+KyNkZWZpbmUgU1RPUkVfQkFUQ0hfQlVGRkVSX1NJWkUgNAo+ID4rI2RlZmluZSBFWEVD X09CSkVDVF9QSU5ORUQJKDE8PDQpCj4gPisjZGVmaW5lIEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4 Ql9BRERSRVNTICgxPDwzKQo+ID4rI2RlZmluZSBTSEFSRURfQlVGRkVSX1NJWkUgNDA5Ngo+ID4r Cj4gPit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9nZW1fdXNlcnB0ciBpOTE1X2dlbV91c2VycHRy Owo+ID4rCj4gPitzdGF0aWMgdWludDMyX3QgaW5pdF91c2VycHRyKGludCBmZCwgaTkxNV9nZW1f dXNlcnB0ciAqLCB2b2lkICpwdHIsIHVpbnQ2NF90IHNpemUpOwo+ID4rc3RhdGljIHZvaWQgKmNy ZWF0ZV9tZW1fYnVmZmVyKHVpbnQ2NF90IHNpemUpOwo+ID4rc3RhdGljIGludCBnZW1fY2FsbF91 c2VycHRyX2lvY3RsKGludCBmZCwgaTkxNV9nZW1fdXNlcnB0ciAqdXNlcnB0cik7Cj4gPitzdGF0 aWMgdm9pZCBnZW1fcGluX3VzZXJwdHJfdGVzdCh2b2lkKTsKPiA+K3N0YXRpYyB2b2lkIGdlbV9w aW5fYm9fdGVzdCh2b2lkKTsKPiA+K3N0YXRpYyB2b2lkIGdlbV9waW5faW52YWxpZF92bWFfdGVz dCh2b2lkKTsKPiA+K3N0YXRpYyB2b2lkIGdlbV9waW5fb3ZlcmxhcF90ZXN0KHZvaWQpOwo+ID4r c3RhdGljIHZvaWQgZ2VtX3Bpbl9oaWdoX2FkZHJlc3NfdGVzdCh2b2lkKTsKPiA+Kwo+ID4rI2Rl ZmluZSBOT19QUEdUVCAwCj4gPisjZGVmaW5lIEFMSUFTSU5HX1BQR1RUIDEKPiA+KyNkZWZpbmUg RlVMTF8zMl9CSVRfUFBHVFQgMgo+ID4rI2RlZmluZSBGVUxMXzQ4X0JJVF9QUEdUVCAzCj4gPisv KiB1c2VzX2Z1bGxfcHBndHQKPiA+KyAqIEZpbmRzIHN1cHBvcnRlZCBQUEdUVCBkZXRhaWxzLgo+ ID4rICogQGZkIERSTSBmZAo+ID4rICogQG1pbiBjYW4gYmUKPiA+KyAqIDAgLSBObyBQUEdUVAo+ ID4rICogMSAtIEFsaWFzaW5nIFBQR1RUCj4gPisgKiAyIC0gRnVsbCBQUEdUVCAoMzJiKQo+ID4r ICogMyAtIEZ1bGwgUFBHVFQgKDQ4YikKPiA+KyAqIFJFVFVSTlMgdHJ1ZS9mYWxzZSBpZiBtaW4g c3VwcG9ydCBpcyBwcmVzZW50Cj4gPisqLwo+ID4rc3RhdGljIGJvb2wgdXNlc19mdWxsX3BwZ3R0 KGludCBmZCwgaW50IG1pbikKPiA+K3sKPiA+KwlzdHJ1Y3QgZHJtX2k5MTVfZ2V0cGFyYW0gZ3A7 Cj4gPisJaW50IHZhbCA9IDA7Cj4gPisKPiA+KwltZW1zZXQoJmdwLCAwLCBzaXplb2YoZ3ApKTsK PiA+KwlncC5wYXJhbSA9IDE4OyAvKiBIQVNfQUxJQVNJTkdfUFBHVFQgKi8KPiA+KwlncC52YWx1 ZSA9ICZ2YWw7Cj4gPisKPiA+KwlpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBB UkFNLCAmZ3ApKQo+ID4rCQlyZXR1cm4gMDsKPiA+Kwo+ID4rCWVycm5vID0gMDsKPiA+KwlyZXR1 cm4gdmFsID49IG1pbjsKPiA+K30KPiA+Kwo+ID4rCj4gPisvKiBnZW1fY2FsbF91c2VycHRyX2lv Y3RsCj4gPisgKiBIZWxwZXIgdG8gY2FsbCBpb2N0bCAtIFRPRE86IG1vdmUgdG8gbGliCj4gPisg KiBAZmQgLSBkcm0gZmQKPiA+KyAqIEB1c2VycHRyIC0gcG9pbnRlciB0byBpbml0aWFsaXNlZCB1 c2VycHRyCj4gPisgKiBSRVRVUk5TIHN0YXR1cyBvZiBpb2N0bCBjYWxsCj4gPisqLwo+ID4rc3Rh dGljIGludCBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGludCBmZCwgaTkxNV9nZW1fdXNlcnB0ciAq dXNlcnB0cikKPiA+K3sKPiA+KwlpbnQgcmV0Owo+ID4rCj4gPisJcmV0ID0gZHJtSW9jdGwoZmQs IERSTV9JT0NUTF9JOTE1X0dFTV9VU0VSUFRSLCB1c2VycHRyKTsKPiA+Kwo+ID4rCWlmIChyZXQp Cj4gPisJCXJldCA9IGVycm5vOwo+ID4rCj4gPisJcmV0dXJuIHJldDsKPiA+K30KPiA+Kwo+ID4r LyogaW5pdF91c2VycHRyCj4gPisgKiBIZWxwZXIgdGhhdCBpbml0cyB1c2VycHRyIGFuIHJldHVy bnMgaGFuZGxlCj4gPisgKiBAZmQgLSBkcm0gZmQKPiA+KyAqIEB1c2VycHRyIC0gcG9pbnRlciB0 byBlbXB0eSB1c2VycHRyCj4gPisgKiBAcHRyIC0gYnVmZmVyIHRvIGJlIHNoYXJlZAo+ID4rICog QHNpemUgLSBzaXplIG9mIGJ1ZmZlcgo+ID4rICogQHJvIC0gcmVhZCBvbmx5IGZsYWcKPiA+KyAq IFJFVFVSTlMgaGFuZGxlIHRvIHNoYXJlZCBidWZmZXIKPiA+KyovCj4gPitzdGF0aWMgdWludDMy X3QgaW5pdF91c2VycHRyKGludCBmZCwgaTkxNV9nZW1fdXNlcnB0ciAqdXNlcnB0ciwgdm9pZCAq cHRyLAo+ID4rCQkJICAgICB1aW50NjRfdCBzaXplKQo+ID4rewo+ID4rCWludCByZXQ7Cj4gPisK PiA+KwltZW1zZXQoKHZvaWQqKXVzZXJwdHIsIDAsIHNpemVvZihpOTE1X2dlbV91c2VycHRyKSk7 Cj4gPisKPiA+Kwl1c2VycHRyLT51c2VyX3B0ciA9ICh1aW50NjRfdClwdHI7IC8qIE5lZWQgdGhl IGNhc3QgdG8gb3ZlcmNvbWUgY29tcGlsZXIgd2FybmluZyAqLwo+ID4rCXVzZXJwdHItPnVzZXJf c2l6ZSA9IHNpemU7Cj4gPisJdXNlcnB0ci0+ZmxhZ3MgPSAwOyAvKiB1c2Ugc3luY2hyb25pemVk IG9wZXJhdGlvbiAqLwo+ID4rCj4gPisJcmV0ID0gZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bChmZCwg dXNlcnB0cik7Cj4gPisJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ID4rCj4gPisJcmV0dXJuIHVz ZXJwdHItPmhhbmRsZTsKPiA+K30KPiA+Kwo+ID4rLyogY3JlYXRlX21lbV9idWZmZXIKPiA+KyAq IENyZWF0ZXMgYSA0SyBhbGlnbmVkIENQVSBidWZmZXIKPiA+KyAqIEBzaXplIC0gc2l6ZSBvZiBi dWZmZXIKPiA+KyAqIFJFVFVSTlMgcG9pbnRlciB0byBidWZmZXIgb2YgQHNpemUKPiA+KyovCj4g PitzdGF0aWMgdm9pZCAqY3JlYXRlX21lbV9idWZmZXIodWludDY0X3Qgc2l6ZSkKPiA+K3sKPiA+ Kwl2b2lkICphZGRyOwo+ID4rCWludCByZXQ7Cj4gPisKPiA+KwlyZXQgPSBwb3NpeF9tZW1hbGln bigmYWRkciwgNDA5Niwgc2l6ZSk7Cj4gPisJaWd0X2Fzc2VydChyZXQgPT0gMCk7Cj4gPisKPiA+ KwlyZXR1cm4gYWRkcjsKPiA+K30KPiA+Kwo+ID4rLyogc2V0dXBfZXhlY19vYmoKPiA+KyAqIHBv cHVsYXRlIGV4ZWMgb2JqZWN0Cj4gPisgKiBAZXhlYyAtIGV4ZWMgb2JqZWN0Cj4gPisgKiBAaGFu ZGxlIC0gaGFuZGxlIHRvIGdlbSBidWZmZXIKPiA+KyAqIEBmbGFncyAtIGFueSBmbGFncwo+ID4r ICogQG9mZnNldCAtIHJlcXVlc3RlZCBWTUEKPiA+KyovCj4gPitzdGF0aWMgdm9pZCBzZXR1cF9l eGVjX29iaihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlYywKPiA+KwkJCSAg IHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgZmxhZ3MsCj4gPisJCQkgICB1aW50NjRfdCBvZmZz ZXQpCj4gPit7Cj4gPisJbWVtc2V0KGV4ZWMsIDAsIHNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNfb2JqZWN0MikpOwo+ID4rCWV4ZWMtPmhhbmRsZSA9IGhhbmRsZTsKPiA+KwlleGVjLT5m bGFncyA9IGZsYWdzOwo+ID4rCWV4ZWMtPm9mZnNldCA9IG9mZnNldDsKPiA+K30KPiA+Kwo+ID4r LyogZ2VtX3N0b3JlX2RhdGFfc3ZtCj4gPisgKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBN SV9TVE9SRV9EV09SRF9JTU0gY29tbWFuZAo+ID4rICogQGZkOiBkcm0gZmlsZSBkZXNjcmlwdG9y Cj4gPisgKiBAY21kX2J1ZjogYmF0Y2ggYnVmZmVyCj4gPisgKiBAdmFkZHI6IGRlc3RpbmF0aW9u IFZpcnR1YWwgYWRkcmVzcwo+ID4rICogQGRhdGE6IGRhdGEgdG8gYmUgc3RvcmUgYXQgZGVzdGlu YXRpb24KPiA+KyAqIEBlbmQ6IHdoZXRoZXIgdG8gZW5kIGJhdGNoIGJ1ZmZlciBvciBub3QKPiA+ KyovCj4gPitzdGF0aWMgaW50IGdlbV9zdG9yZV9kYXRhX3N2bShpbnQgZmQsIHVpbnQzMl90ICpj bWRfYnVmLCB1aW50NjRfdCB2YWRkciwKPiA+KwkJCSAgICAgIHVpbnQzMl90IGRhdGEsIGJvb2wg ZW5kKQo+ID4rewo+ID4rCWludCBpID0gMDsKPiA+Kwo+ID4rCWNtZF9idWZbaSsrXSA9IE1JX1NU T1JFX0RXT1JEX0lNTTsKPiA+KwljbWRfYnVmW2krK10gPSB2YWRkciAmIDB4RkZGRkZGRkM7Cj4g PisJY21kX2J1ZltpKytdID0gKHZhZGRyID4+IDMyKSAmIDB4RkZGRjsgLyogYml0cyAzMjo0NyAq Lwo+ID4rCj4gPisJY21kX2J1ZltpKytdID0gZGF0YTsKPiA+KwlpZiAoZW5kKSB7Cj4gPisJCWNt ZF9idWZbaSsrXSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gPisJCWNtZF9idWZbaSsrXSA9IDA7 Cj4gPisJfQo+ID4rCj4gPisJcmV0dXJuKGkgKiBzaXplb2YodWludDMyX3QpKTsKPiA+K30KPiA+ Kwo+ID4rLyogZ2VtX3N0b3JlX2RhdGEKPiA+KyAqIHBvcHVsYXRlIGJhdGNoIGJ1ZmZlciB3aXRo IE1JX1NUT1JFX0RXT1JEX0lNTSBjb21tYW5kCj4gPisgKiBUaGlzIG9uZSBmaWxscyB1cCByZWxv YyBidWZmZXIgYXMgd2VsbAo+ID4rICogQGZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gPisgKiBA Y21kX2J1ZjogYmF0Y2ggYnVmZmVyCj4gPisgKiBAZGF0YTogZGF0YSB0byBiZSBzdG9yZSBhdCBk ZXN0aW5hdGlvbgo+ID4rICogQHJlbG9jIC0gcmVsb2NhdGlvbiBlbnRyeQo+ID4rICogQGVuZDog d2hldGhlciB0byBlbmQgYmF0Y2ggYnVmZmVyIG9yIG5vdAo+ID4rKi8KPiA+K3N0YXRpYyBpbnQg Z2VtX3N0b3JlX2RhdGEoaW50IGZkLCB1aW50MzJfdCAqY21kX2J1ZiwKPiA+KwkJCSAgdWludDMy X3QgaGFuZGxlLCB1aW50MzJfdCBkYXRhLAo+ID4rCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl bG9jYXRpb25fZW50cnkgKnJlbG9jLAo+ID4rCQkJICBib29sIGVuZCkKPiA+K3sKPiA+KwlpbnQg aSA9IDA7Cj4gPisKPiA+KwljbWRfYnVmW2krK10gPSBNSV9TVE9SRV9EV09SRF9JTU07Cj4gPisJ Y21kX2J1ZltpKytdID0gMDsgLyogbG93ZXIgMzEgYml0cyBvZiA0OCBiaXQgYWRkcmVzcyAtIDAg cmVsb2MgbmVlZGVkICovCj4gPisJY21kX2J1ZltpKytdID0gMDsgLyogdXBwZXIgMTUgYml0cyBv ZiA0OCBiaXQgYWRkcmVzcyAtIDAgcmVsb2MgbmVlZGVkICovCj4gPisJcmVsb2MtPm9mZnNldCA9 IDEgKiBzaXplb2YodWludDMyX3QpOwo+ID4rCXJlbG9jLT5kZWx0YSA9IDA7Cj4gPisJcmVsb2Mt PnRhcmdldF9oYW5kbGUgPSBoYW5kbGU7Cj4gPisJcmVsb2MtPnJlYWRfZG9tYWlucyA9IEk5MTVf R0VNX0RPTUFJTl9SRU5ERVI7Cj4gPisJcmVsb2MtPndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RP TUFJTl9SRU5ERVI7Cj4gPisJcmVsb2MtPnByZXN1bWVkX29mZnNldCA9IDA7Cj4gPisJY21kX2J1 ZltpKytdID0gZGF0YTsKPiA+KwlpZiAoZW5kKSB7Cj4gPisJCWNtZF9idWZbaSsrXSA9IE1JX0JB VENIX0JVRkZFUl9FTkQ7Cj4gPisJCWNtZF9idWZbaSsrXSA9IDA7Cj4gPisJfQo+ID4rCj4gPisJ cmV0dXJuIChpICogc2l6ZW9mKHVpbnQzMl90KSk7Cj4gPit9Cj4gPisKPiA+Ky8qIHNldHVwX2V4 ZWNidWZmZXIKPiA+KyAqIGhlbHBlciBmb3IgYnVmZmVyIGV4ZWN1dGlvbgo+ID4rICogQGV4ZWNi dWYgLSBwb2ludGVyIHRvIGV4ZWNidWZmZXIKPiA+KyAqIEBleGVjX29iamVjdCAtIHBvaW50ZXIg dG8gZXhlYyBvYmplY3QyIHN0cnVjdAo+ID4rICogQHJpbmcgLSByaW5nIHRvIGJlIHVzZWQKPiA+ KyAqIEBidWZmZXJfY291bnQgLSBob3cgbWFudSBidWZmZXJzIHRvIHN1Ym1pdAo+ID4rICogQGJh dGNoX2xlbmd0aCAtIGxlbmd0aCBvZiBiYXRjaCBidWZmZXIKPiA+KyovCj4gPitzdGF0aWMgdm9p ZCBzZXR1cF9leGVjYnVmZmVyKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4ZWNi dWYsCj4gPisJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjX29i amVjdCwKPiA+KwkJCSAgICAgaW50IHJpbmcsIGludCBidWZmZXJfY291bnQsIGludCBiYXRjaF9s ZW5ndGgpCj4gPit7Cj4gPisJZXhlY2J1Zi0+YnVmZmVyc19wdHIgPSAodWludDY0X3QpZXhlY19v YmplY3Q7Cj4gPisJZXhlY2J1Zi0+YnVmZmVyX2NvdW50ID0gYnVmZmVyX2NvdW50Owo+ID4rCWV4 ZWNidWYtPmJhdGNoX3N0YXJ0X29mZnNldCA9IDA7Cj4gPisJZXhlY2J1Zi0+YmF0Y2hfbGVuID0g YmF0Y2hfbGVuZ3RoOwo+ID4rCWV4ZWNidWYtPmNsaXByZWN0c19wdHIgPSAwOwo+ID4rCWV4ZWNi dWYtPm51bV9jbGlwcmVjdHMgPSAwOwo+ID4rCWV4ZWNidWYtPkRSMSA9IDA7Cj4gPisJZXhlY2J1 Zi0+RFI0ID0gMDsKPiA+KwlleGVjYnVmLT5mbGFncyA9IHJpbmc7Cj4gPisJaTkxNV9leGVjYnVm ZmVyMl9zZXRfY29udGV4dF9pZCgqZXhlY2J1ZiwgMCk7Cj4gPisJZXhlY2J1Zi0+cnN2ZDIgPSAw Owo+ID4rfQo+ID4rCj4gPisvKiBzdWJtaXRfYW5kX3N5bmMKPiA+KyAqIEhlbHBlciBmdW5jdGlv biBmb3IgZXhlYyBhbmQgc3luYyBmdW5jdGlvbnMKPiA+KyAqIEBmZCAtIGRybSBmZAo+ID4rICog QGV4ZWNidWYgLSBwb2ludGVyIHRvIGV4ZWNidWZmZXIKPiA+KyAqIEBiYXRjaF9idWZfaGFuZGxl IC0gYmF0Y2ggYnVmZmVyIGhhbmRsZQo+ID4rKi8KPiA+K3N0YXRpYyB2b2lkIHN1Ym1pdF9hbmRf c3luYyhpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4ZWNidWYsCj4g PisJCQkgICAgdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSkKPiA+K3sKPiA+KwlnZW1fZXhlY2J1 ZihmZCwgZXhlY2J1Zik7Cj4gPisJZ2VtX3N5bmMoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ID4r fQo+ID4rCj4gPisvKiBnZW1fdXNlcnB0cl9zeW5jCj4gPisgKiBoZWxwZXIgZm9yIHN5bmNpbmcg dG8gQ1BVIGRvbWFpbiAtIGNvcHkvcGFzdGUgZnJvbSB1c2VyYmxpdAo+ID4rICogQGZkIC0gZHJt IGZkCj4gPisgKiBAaGFuZGxlIC0gYnVmZmVyIGhhbmRsZSB0byBzeW5jCj4gPisqLwo+ID4rc3Rh dGljIHZvaWQgZ2VtX3VzZXJwdHJfc3luYyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSkKPiA+K3sK PiA+KwlnZW1fc2V0X2RvbWFpbihmZCwgaGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1 X0dFTV9ET01BSU5fQ1BVKTsKPiA+K30KPiA+Kwo+ID4rCj4gPisvKiBnZW1fcGluX3VzZXJwdHJf dGVzdAo+ID4rICogVGhpcyB0ZXN0IHdpbGwgY3JlYXRlIGEgc2hhcmVkIGJ1ZmZlciwgYW5kIGNy ZWF0ZSBhIGNvbW1hbmQKPiA+KyAqIGZvciBHUFUgdG8gd3JpdGUgZGF0YSBpbiBpdAo+ID4rICog Q1BVIHdpbGwgcmVhZCBhbmQgbWFrZSBzdXJlIGV4cGVjdGVkIHZhbHVlIGlzIG9idGFpbmVkCj4g PisgKiBNYWxsb2MgYSA0SyBidWZmZXIKPiA+KyAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BV IGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiA+KyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3Jp dGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBidWZmZXIKPiA+KyAqIFVzZSAweDEwMDAgYWRkcmVz cyBhcyBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIGJhdGNoIGJ1ZmZlcgo+ID4rICogU2V0IEVYRUNf T0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gPisgKiBTZXQgJ29mZnNldCcgaW4g ZXhlYyBvYmplY3QgdG8gMHgxMDAwCj4gPisgKiBTdWJtaXQgZXhlY2J1ZmZlcgo+ID4rICogVmVy aWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4g PisqLwo+ID4rc3RhdGljIHZvaWQgZ2VtX3Bpbl91c2VycHRyX3Rlc3Qodm9pZCkKPiA+K3sKPiA+ KwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gPisJaW50IGZkOwo+ID4rCXVpbnQzMl90ICpz aGFyZWRfYnVmZmVyOwo+ID4rCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1 ZjsKPiA+KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMl07 Cj4gPisJdWludDMyX3QgYmF0Y2hfYnVmZmVyW1NUT1JFX0JBVENIX0JVRkZFUl9TSVpFICsgMl07 Cj4gPisJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gPisJ aW50IHJpbmcsIGxlbjsKPiA+Kwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiA+ Kwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4MTAwMDsKPiA+Kwo+ID4rCWZkID0gZHJtX29w ZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gPisJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0 KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ID4rCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRl KGZkLCBCT19TSVpFKTsKPiA+Kwo+ID4rCS8qIGNyZWF0ZSBjcHUgYnVmZmVyICovCj4gPisJc2hh cmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ID4rCQo+ID4rCS8qIHNo YXJlIHdpdGggR1BVICovCj4gPisJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQs ICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLAo+ID4rCQkJCQkgQk9fU0laRSk7Cj4gPisKPiA+Kwkv KiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gPisJbGVuID0g Z2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIHBpbm5pbmdfb2Zmc2V0LCBkYXRh LCB0cnVlKTsKPiA+KwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1 ZmZlciwgbGVuKTsKPiA+Kwo+ID4rCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ID4rCXNl dHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ID4rCQkg ICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gPisJc2V0dXBfZXhl Y19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gPisKPiA+ KwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiA+Kwo+ID4rCXNldHVwX2V4ZWNidWZmZXIoJmV4 ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiA+KwlzdWJtaXRfYW5kX3N5bmMo ZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiA+KwlnZW1fdXNlcnB0cl9zeW5jKGZk LCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gPisKPiA+KwkvKiBDaGVjayBpZiBkcml2ZXIgcGlubmVk IHRoZSBidWZmZXIgYXMgcmVxdWVzdGVkICovCj4gPisJaWd0X2ZhaWxfb25fZihleGVjX29iamVj dDJbMF0ub2Zmc2V0ICE9IHBpbm5pbmdfb2Zmc2V0LAo+ID4rCQkJIlxuRmFpbGVkIHRvIHBpbiBh dCByZXF1ZXN0ZWQgb2Zmc2V0Iik7Cj4gPisJLyogY2hlY2sgb24gQ1BVIHRvIHNlZSBpZiB2YWx1 ZSBjaGFuZ2VzICovCj4gPisJaWd0X2ZhaWxfb25fZihzaGFyZWRfYnVmZmVyWzBdICE9IGRhdGEs Cj4gPisJCSAgICAgICJcbkNQVSByZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3cml0ZSxcCj4gPisJ CQlleHBlY3RlZDogMHgleCwgZ290OiAweCV4XG4iLAo+ID4rCQkJZGF0YSwgc2hhcmVkX2J1ZmZl clswXSk7Cj4gPisKPiA+KwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ID4rCWdl bV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ID4rCWNsb3NlKGZkKTsKPiA+KwlmcmVl KHNoYXJlZF9idWZmZXIpOwo+ID4rfQo+ID4rCj4gPisvKiBnZW1fcGluX2JvCj4gPisgKiBUaGlz IHRlc3Qgd2lsbCB0ZXN0IHNvZnRwaW5uaW5nIG9mIGEgZ2VtIGJ1ZmZlciBvYmplY3QKPiA+KyAq IE1hbGxvYyBhIDRLIGJ1ZmZlcgo+ID4rICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBE QVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ID4rICogVXNlIDB4MTAwMCBhZGRyZXNzIGFz IGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gYmF0Y2ggYnVmZmVyCj4gPisgKiBTZXQgRVhFQ19PQkpF Q1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmplY3QKPiA+KyAqIFNldCAnb2Zmc2V0JyBpbiBleGVj IG9iamVjdCB0byAweDEwMDAKPiA+KyAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gPisgKiBWZXJpZnkg dmFsdWUgcGlubmVkIG9mZnNldCBtYXRjaGVzIHRoZSByZXF1ZXN0Cj4gPisqLwo+ID4rc3RhdGlj IHZvaWQgZ2VtX3Bpbl9ib190ZXN0KHZvaWQpCj4gPit7Cj4gPisJaW50IGZkOwo+ID4rCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiA+KwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMl07Cj4gPisJdWludDMyX3QgYmF0Y2hfYnVm ZmVyW1NUT1JFX0JBVENIX0JVRkZFUl9TSVpFICsgMl07Cj4gPisJdWludDMyX3QgYmF0Y2hfYnVm X2hhbmRsZSwgdW5zaGFyZWRfYnVmX2hhbmRsZTsKPiA+KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl bG9jYXRpb25fZW50cnkgcmVsb2NbNF07Cj4gPisJaW50IHJpbmcsIGxlbjsKPiA+Kwl1aW50MzJf dCB2YWx1ZTsKPiA+Kwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiA+Kwl1aW50 NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4MTAwMDsKPiA+Kwo+ID4rCWZkID0gZHJtX29wZW5fZHJp dmVyKERSSVZFUl9JTlRFTCk7Cj4gPisJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBB TElBU0lOR19QUEdUVCkpOwo+ID4rCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBC T19TSVpFKTsKPiA+Kwo+ID4rCS8qIGNyZWF0ZSBnZW0gYnVmZmVyICovCj4gPisJdW5zaGFyZWRf YnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ID4rCQo+ID4rCS8qIGNyZWF0 ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiA+KwlsZW4gPSBnZW1fc3Rv cmVfZGF0YShmZCwgYmF0Y2hfYnVmZmVyLCB1bnNoYXJlZF9idWZfaGFuZGxlLCBkYXRhLAo+ID4r CQkJCXJlbG9jLCB0cnVlKTsKPiA+KwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAs IGJhdGNoX2J1ZmZlciwgbGVuKTsKPiA+Kwo+ID4rCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAq Lwo+ID4rCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHVuc2hhcmVkX2J1Zl9oYW5k bGUsCj4gPisJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiA+ KwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAw KTsKPiA+KwlleGVjX29iamVjdDJbMV0ucmVsb2NhdGlvbl9jb3VudCA9IDE7Cj4gPisJZXhlY19v YmplY3QyWzFdLnJlbG9jc19wdHIgPSAodWludDY0X3QpcmVsb2M7Cj4gPisKPiA+KwlyaW5nID0g STkxNV9FWEVDX1JFTkRFUjsKPiA+Kwo+ID4rCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4 ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiA+KwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVj YnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiA+Kwo+ID4rCS8qIENoZWNrIGlmIGRyaXZlciBwaW5u ZWQgdGhlIGJ1ZmZlciBhcyByZXF1ZXN0ZWQgKi8KPiA+KwlpZ3RfZmFpbF9vbl9mKGV4ZWNfb2Jq ZWN0MlswXS5vZmZzZXQgIT0gcGlubmluZ19vZmZzZXQsCj4gPisJCQkiXG5GYWlsZWQgdG8gcGlu IGF0IHJlcXVlc3RlZCBvZmZzZXQiKTsKPiA+KwlnZW1fcmVhZChmZCwgdW5zaGFyZWRfYnVmX2hh bmRsZSwgMCwgKHZvaWQqKSZ2YWx1ZSwgNCk7Cj4gPisJaWd0X2Fzc2VydCh2YWx1ZSA9PSBkYXRh KTsKPiA+Kwo+ID4rCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gPisJZ2VtX2Ns b3NlKGZkLCB1bnNoYXJlZF9idWZfaGFuZGxlKTsKPiA+KwljbG9zZShmZCk7Cj4gPit9Cj4gPisK PiA+Kwo+ID4rLyogZ2VtX211bHRpcGxlX3Byb2Nlc3NfdGVzdAo+ID4rICogUnVuIGJhc2ljIHRl c3Qgc2ltdWx0YW5lb3VzbHkgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMKPiA+KyAqIFRoaXMgd2ls bCB0ZXN0IHBpbm5pbmcgc2FtZSBWQSBzZXBhcmF0ZWx5IGluIGVhY2ggcHJvY2Vzcwo+ID4rCj4g PisgKiBmb3JrKCk7Cj4gPisgKiBFeGVjdXRlIGJhc2ljIHRlc3QgaW4gcGFyZW50L2NoaWxkIHBy b2Nlc3Nlcwo+ID4rKi8KPiA+KyNkZWZpbmUgTUFYX05VTV9QUk9DRVNTRVMgMTAKPiA+Kwo+ID4r c3RhdGljIHZvaWQgZ2VtX211bHRpcGxlX3Byb2Nlc3NfdGVzdCh2b2lkKQo+ID4rewo+ID4rCWln dF9mb3JrKGNoaWxkLCBNQVhfTlVNX1BST0NFU1NFUykgewo+ID4rCQlnZW1fcGluX3VzZXJwdHJf dGVzdCgpOwo+ID4rCX0KPiA+KwlpZ3Rfd2FpdGNoaWxkcmVuKCk7Cj4gPit9Cj4gPisKPiA+Kwo+ ID4rLyogZ2VtX3JlcGluX3Rlc3QKPiA+KyAqIFRoaXMgdGVzdCB0cmllcyB0byByZXBpbiBhIGJ1 ZmZlciBhdCBhIHByZXZpb3VzbHkgcGlubmVkIHZtYQo+ID4rICogZnJvbSBhIGRpZmZlcmVudCBl eGVjYnVmLgo+ID4rICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gPisgKiBTaGFyZSBidWZmZXIgd2l0 aCB3aXRoIEdQVSBieSB1c2luZyB1c2VycHRyIGlvY3RsCj4gPisgKiBDcmVhdGUgYmF0Y2ggYnVm ZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gPisgKiBVc2UgMHgx MDAwIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBiYXRjaCBidWZmZXIKPiA+KyAq IFNldCBFWEVDX09CSkVDVF9QSU5ORUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ID4rICogU2V0ICdv ZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIDB4MTAwMCBWTUEKPiA+KyAqIFN1Ym1pdCBleGVjYnVm ZmVyCj4gPisgKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2hhcmVkIGJ1ZmZlciBt YXRjaGVzIERBVEEKPiA+Kwo+ID4rICogQ3JlYXRlIHNlY29uZCBzaGFyZWQgYnVmZmVyCj4gPisg KiBGb2xsb3cgYWxsIHN0ZXBzIGFib3ZlCj4gPisgKiBFeGVjcHQsIGZvciBvZmZzZXQsIHVzZSBW TUEgb2YgZmlyc3QgYnVmZmVyIGFib3ZlCj4gPisgKiBTdWJtaXQgZXhlY2J1ZmZlcgo+ID4rICog VmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNlY29uZCBzaGFyZWQgYnVmZmVyIG1hdGNo ZXMgREFUQQo+ID4rKi8KPiA+K3N0YXRpYyB2b2lkIGdlbV9yZXBpbl90ZXN0KHZvaWQpCj4gPit7 Cj4gPisJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ID4rCWk5MTVfZ2VtX3VzZXJwdHIgdXNl cnB0cjE7Cj4gPisJaW50IGZkOwo+ID4rCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ID4rCXVp bnQzMl90ICpzaGFyZWRfYnVmZmVyMTsKPiA+KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyIGV4ZWNidWY7Cj4gPisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19v YmplY3QyWzJdOwo+ID4rCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJf U0laRSArIDJdOwo+ID4rCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFu ZGxlLCBzaGFyZWRfYnVmX2hhbmRsZTE7Cj4gPisJaW50IHJpbmcsIGxlbjsKPiA+Kwljb25zdCB1 aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiA+Kwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9 IDB4MTAwMDsKPiA+Kwo+ID4rCS8qIENyZWF0ZSBnZW0gb2JqZWN0ICovCj4gPisJZmQgPSBkcm1f b3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiA+KwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBn dHQoZmQsIEFMSUFTSU5HX1BQR1RUKSk7Cj4gPisKPiA+KwliYXRjaF9idWZfaGFuZGxlID0gZ2Vt X2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gPisKPiA+KwkvKiBjcmVhdGUgY3B1IGJ1ZmZlciwgc2V0 IGZpcnN0IGVsZW1lbnRzIHRvIDB4MCAqLwo+ID4rCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVt X2J1ZmZlcihCT19TSVpFKTsKPiA+KwlzaGFyZWRfYnVmZmVyMSA9IGNyZWF0ZV9tZW1fYnVmZmVy KEJPX1NJWkUpOwo+ID4rCXNoYXJlZF9idWZmZXJbMF0gPSAweDA7Cj4gPisJc2hhcmVkX2J1ZmZl cjFbMF0gPSAweDA7Cj4gPisKPiA+KwkvKiBzaGFyZSB3aXRoIEdQVSBhbmQgZ2V0IGhhbmRsZXMg Ki8KPiA+KwlzaGFyZWRfYnVmX2hhbmRsZSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNo YXJlZF9idWZmZXIsCj4gPisJCQkJCSBCT19TSVpFKTsKPiA+KwlzaGFyZWRfYnVmX2hhbmRsZTEg PSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyMSwgc2hhcmVkX2J1ZmZlcjEsCj4gPisJCQkJCSAg Qk9fU0laRSk7Cj4gPisKPiA+KwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBj b21tYW5kICovCj4gPisJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIs IHBpbm5pbmdfb2Zmc2V0LCBkYXRhLCB0cnVlKTsKPiA+KwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1 Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiA+Kwo+ID4rCS8qIHN1Ym1pdCBjb21t YW5kIGJ1ZmZlciAqLwo+ID4rCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJl ZF9idWZfaGFuZGxlLAo+ID4rCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29m ZnNldCk7Cj4gPisJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hh bmRsZSwgMCwgMCk7Cj4gPisKPiA+KwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiA+Kwo+ID4r CXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsK PiA+KwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiA+ KwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gPisKPiA+KwlpZ3Rf YXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+ID4rCWln dF9hc3NlcnQoKnNoYXJlZF9idWZmZXIgPT0gZGF0YSk7Cj4gPisKPiA+KwkvKiBTZWNvbmQgYnVm ZmVyICovCj4gPisJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAq Lwo+ID4rCXBpbm5pbmdfb2Zmc2V0ID0gZXhlY19vYmplY3QyWzBdLm9mZnNldDsKPiA+KwlsZW4g PSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgcGlubmluZ19vZmZzZXQsIGRh dGEsIHRydWUpOwo+ID4rCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hf YnVmZmVyLCBsZW4pOwo+ID4rCj4gPisJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gPisJ LyogUGluIGF0IHNoYXJlZF9idWZmZXIsIG5vdCBzaGFyZWRfYnVmZmVyMSAqLwo+ID4rCS8qIFdl IGFyZSByZXF1ZXN0aW5nIGFkZHJlc3Mgd2hlcmUgYW5vdGhlciBidWZmZXIgd2FzIHBpbm5lZCBw cmV2aW91c2x5ICovCj4gPisJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVk X2J1Zl9oYW5kbGUxLAo+ID4rCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29m ZnNldCk7Cj4gPisJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hh bmRsZSwgMCwgMCk7Cj4gPisKPiA+KwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiA+Kwo+ID4r CXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsK PiA+KwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiA+ KwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfYnVmX2hhbmRsZTEpOwo+ID4rCj4gPisJaWd0 X2Fzc2VydChleGVjX29iamVjdDJbMF0ub2Zmc2V0ID09IHBpbm5pbmdfb2Zmc2V0KTsKPiA+Kwlp Z3RfYXNzZXJ0KCpzaGFyZWRfYnVmZmVyMSA9PSBkYXRhKTsKPiA+Kwo+ID4rCWdlbV9jbG9zZShm ZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gPisJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRfYnVmX2hhbmRs ZSk7Cj4gPisJY2xvc2UoZmQpOwo+ID4rCj4gPisJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiA+Kwlm cmVlKHNoYXJlZF9idWZmZXIxKTsKPiA+K30KPiA+Kwo+ID4rCj4gPisvKiBnZW1fcmVwaW5fb3Zl cmxhcF90ZXN0Cj4gPisgKiBUaGlzIHRlc3Qgd2lsbCBhdHRlbXB0IHRvIHBpbiB0d28gYnVmZmVy cyBhdCB0aGUgc2FtZSBWTUEgYXMgcGFydCBvZiB0aGUgc2FtZQo+ID4rICAgZXhlY2J1ZmZlciBv YmplY3QKPiA+Kwo+ID4rICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gPisgKiBTaGFyZSBidWZmZXIg d2l0aCB3aXRoIEdQVSBieSB1c2luZyB1c2VycHRyIGlvY3RsCj4gPisgKiBDcmVhdGUgc2Vjb25k IHNoYXJlZCBidWZmZXIKPiA+KyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0 byBmaXJzdCBkd29yZCBvZiBlYWNoIGJ1ZmZlcgo+ID4rICogVXNlIHNhbWUgdmlydHVhbCBhZGRy ZXNzIGFzIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBpbiBiYXRjaCBidWZmZXIKPiA+KyAqIFNldCBF WEVDX09CSkVDVF9QSU5ORUQgZmxhZyBpbiBib3RoIGV4ZWMgb2JqZWN0cwo+ID4rICogU2V0ICdv ZmZzZXQnIGluIGJvdGggZXhlYyBvYmplY3RzIHRvIHNhbWUgVk1BCj4gPisgKiBTdWJtaXQgZXhl Y2J1ZmZlcgo+ID4rICogQ29tbWFuZCBzaG91bGQgcmV0dXJuIEVJTlZBTCwgc2luY2Ugd2UgYXJl IHRyeWluZyB0byBwaW4gdG8gc2FtZSBWTUEKPiA+KyovCj4gPitzdGF0aWMgdm9pZCBnZW1fcGlu X292ZXJsYXBfdGVzdCh2b2lkKQo+ID4rewo+ID4rCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsK PiA+KwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHIxOwo+ID4rCWludCBmZCwgcmV0Owo+ID4rCXVp bnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ID4rCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyMTsKPiA+ KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gPisJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzNdOwo+ID4rCXVpbnQzMl90IHNo YXJlZF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZTE7Cj4gPisJaW50IHJpbmcsIGxlbjsK PiA+Kwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4MTAwMDsKPiA+Kwo+ID4rCWZkID0gZHJt X29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gPisJaWd0X3JlcXVpcmUodXNlc19mdWxsX3Bw Z3R0KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ID4rCj4gPisJc2hhcmVkX2J1ZmZlciA9IGNyZWF0 ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ID4rCXNoYXJlZF9idWZmZXIxID0gY3JlYXRlX21lbV9i dWZmZXIoQk9fU0laRSAqIDIpOwo+ID4rCj4gPisJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiA+Kwlz aGFyZWRfYnVmX2hhbmRsZSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZm ZXIsCj4gPisJCQkJCSBCT19TSVpFKTsKPiA+KwlzaGFyZWRfYnVmX2hhbmRsZTEgPSBpbml0X3Vz ZXJwdHIoZmQsICZ1c2VycHRyMSwgc2hhcmVkX2J1ZmZlcjEsCj4gPisJCQkJCSAgQk9fU0laRSAq IDIpOwo+ID4rCj4gPisJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gPisJc2V0dXBfZXhl Y19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gPisJCSAgICAgICBF WEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiA+KwlzZXR1cF9leGVjX29iaigm ZXhlY19vYmplY3QyWzFdLCBzaGFyZWRfYnVmX2hhbmRsZTEsCj4gPisJCSAgICAgICBFWEVDX09C SkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiA+Kwo+ID4rCXJpbmcgPSBJOTE1X0VYRUNf UkVOREVSOwo+ID4rCj4gPisJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3Qy LCByaW5nLCAyLCBsZW4pOwo+ID4rCj4gPisJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9J OTE1X0dFTV9FWEVDQlVGRkVSMiwgJmV4ZWNidWYpOwo+ID4rCj4gPisJLyogZXhwZWN0IHRvIGZh aWwgKi8KPiA+KwlpZ3RfYXNzZXJ0X25lcShyZXQsIDApOwo+ID4rCWlndF9hc3NlcnQoZXJybm8g PT0gRUlOVkFMKTsKPiA+Kwo+ID4rCWNsb3NlKGZkKTsKPiA+KwlmcmVlKHNoYXJlZF9idWZmZXIp Owo+ID4rCWZyZWUoc2hhcmVkX2J1ZmZlcjEpOwo+ID4rfQo+ID4rCj4gPisvKiBnZW1fc29mdHBp bl9zdHJlc3NfdGVzdAo+ID4rICogU3RyZXNzIHRlc3Qgd2hpY2ggY3JlYXRlcyAxMEsgYnVmZmVy cyBhbmQgc2hhcmVzIHdpdGggR1BVCj4gPisgKiBDcmVhdGUgMTAwSyB1aW50MzIgYnVmZmVycyBv ZiBzaXplIDRLIGVhY2gKPiA+KyAqIFNoYXJlIHdpdGggR1BVIHVzaW5nIHVzZXJwdHIgaW9jdGwK PiA+KyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSBpbiBmaXJzdCBlbGVtZW50 IG9mIGVhY2ggYnVmZmVyCj4gPisgKiBQaW4gZWFjaCBidWZmZXIgdG8gdmFyeWluZyBhZGRyZXNz ZXMgc3RhcnRpbmcgZnJvbSAweDgwMDAwMDAwMDAwMCBnb2luZyBiZWxvdwo+ID4rICogRXhlY3V0 ZSBCYXRjaCBCdWZmZXIgb24gQmxpdCByaW5nIFNUUkVTU19OVU1fTE9PUFMgdGltZXMKPiA+KyAq IFZhbGlkYXRlIGV2ZXJ5IGJ1ZmZlciBoYXMgREFUQSBpbiBmaXJzdCBlbGVtZW50Cj4gPisgKiBS aW5zZSBhbmQgUmVwZWF0IG9uIFJlbmRlciByaW5nCj4gPisqLwo+ID4rI2RlZmluZSBTVFJFU1Nf TlVNX0JVRkZFUlMgMTAwMDAwCj4gPisjZGVmaW5lIFNUUkVTU19OVU1fTE9PUFMgMTAwCj4gPisj ZGVmaW5lIFNUUkVTU19TVE9SRV9DT01NQU5EUyA0ICogU1RSRVNTX05VTV9CVUZGRVJTCj4gPisK PiA+K3N0YXRpYyB2b2lkIGdlbV9zb2Z0cGluX3N0cmVzc190ZXN0KHZvaWQpCj4gPit7Cj4gPisJ aTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ID4rCWludCBmZDsKPiA+Kwl1aW50MzJfdCAqKnNo YXJlZF9idWZmZXI7Cj4gPisJdWludDMyX3QgKnNoYXJlZF9oYW5kbGU7Cj4gPisJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ID4rCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyICpleGVjX29iamVjdDI7Cj4gPisJdWludDMyX3QgKmJhdGNoX2J1ZmZlcjsK PiA+Kwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlOwo+ID4rCWludCByaW5nLCBsZW47Cj4gPisJ aW50IGJ1ZiwgbG9vcDsKPiA+Kwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4ODAwMDAwMDAw MDAwOwo+ID4rCj4gPisJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiA+Kwlp Z3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSk7Cj4gPisK PiA+Kwo+ID4rCS8qIEFsbG9jYXRlIGJsb2JzIGZvciBhbGwgZGF0YSBzdHJ1Y3R1cmVzICovCj4g PisJc2hhcmVkX2hhbmRsZSA9IGNhbGxvYyhTVFJFU1NfTlVNX0JVRkZFUlMsIHNpemVvZih1aW50 MzJfdCkpOwo+ID4rCXNoYXJlZF9idWZmZXIgPSBjYWxsb2MoU1RSRVNTX05VTV9CVUZGRVJTLCBz aXplb2YodWludDMyX3QgKikpOwo+ID4rCWV4ZWNfb2JqZWN0MiA9IGNhbGxvYyhTVFJFU1NfTlVN X0JVRkZFUlMgKyAxLAo+ID4rCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2Jq ZWN0MikpOwo+ID4rCS8qIDQgZHdvcmRzIHBlciBidWZmZXIgKyAyIGZvciB0aGUgZW5kIG9mIGJh dGNoYnVmZmVyICovCj4gPisJYmF0Y2hfYnVmZmVyID0gY2FsbG9jKFNUUkVTU19TVE9SRV9DT01N QU5EUyArIDIsIHNpemVvZih1aW50MzJfdCkpOwo+ID4rCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1f Y3JlYXRlKGZkLCAoU1RSRVNTX1NUT1JFX0NPTU1BTkRTICsgMikqNCk7Cj4gPisKPiA+KwkvKiBj cmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kcyAqLwo+ID4rCWxlbiA9IDA7 Cj4gPisJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKyspIHsKPiA+ KwkJc2hhcmVkX2J1ZmZlcltidWZdID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gPisJ CSpzaGFyZWRfYnVmZmVyW2J1Zl0gPSAweEZGRkZGRkZGOwo+ID4rCj4gPisJCS8qIHNoYXJlIHdp dGggR1BVICovCj4gPisJCXNoYXJlZF9oYW5kbGVbYnVmXSA9IGluaXRfdXNlcnB0cihmZCwgJnVz ZXJwdHIsCj4gPisJCQkJCQkgIHNoYXJlZF9idWZmZXJbYnVmXSwKPiA+KwkJCQkJCSAgQk9fU0la RSk7Cj4gPisKPiA+KwkJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MltidWZdLCBzaGFyZWRf aGFuZGxlW2J1Zl0sCj4gPisJCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29m ZnNldCk7Cj4gPisJCWxlbiArPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciAr IChsZW4vNCksCj4gPisJCQkJCSAgcGlubmluZ19vZmZzZXQsIGJ1ZiwKPiA+KwkJCQkJICAoYnVm ID09IFNUUkVTU19OVU1fQlVGRkVSUy0xKT8gXAo+ID4rCQkJCQkgIHRydWU6ZmFsc2UpOwo+ID4r CQkKPiA+KwkJLyogZGVjcmVtZW50YWwgNEsgYWxpZ25lZCBhZGRyZXNzICovCj4gPisJCXBpbm5p bmdfb2Zmc2V0IC09IEFMSUdOKEJPX1NJWkUsIDQwOTYpOwo+ID4rCX0KPiA+Kwo+ID4rCS8qIHNl dHVwIGNvbW1hbmQgYnVmZmVyICovCj4gPisJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxl LCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gPisJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0 MltTVFJFU1NfTlVNX0JVRkZFUlNdLCBiYXRjaF9idWZfaGFuZGxlLAo+ID4rCQkgICAgICAgMCwg MCk7Cj4gPisKPiA+KwkvKiBXZSB3YW50IHRvIHJ1biB0aGlzIG9uIEJMVCByaW5nIGlmIHBvc3Np YmxlICovCj4gPisJaWYgKEhBU19CTFRfUklORyhpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkpIHsK PiA+KwkJcmluZyA9IEk5MTVfRVhFQ19CTFQ7Cj4gPisKPiA+KwkJc2V0dXBfZXhlY2J1ZmZlcigm ZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLAo+ID4rCQkJCSBTVFJFU1NfTlVNX0JVRkZFUlMg KyAxLCBsZW4pOwo+ID4rCj4gPisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBTVFJFU1NfTlVNX0xP T1BTOyBsb29wKyspIHsKPiA+KwkJCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNo X2J1Zl9oYW5kbGUpOwo+ID4rCQkJLyogU2V0IHBpbm5pbmcgb2Zmc2V0IGJhY2sgdG8gb3JpZ2lu YWwgdmFsdWUgKi8KPiA+KwkJCXBpbm5pbmdfb2Zmc2V0ID0gMHg4MDAwMDAwMDAwMDA7Cj4gPisJ CQlmb3IoYnVmID0gMDsgYnVmIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBidWYrKykgewo+ID4rCQkJ CWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9oYW5kbGVbYnVmXSk7Cj4gPisJCQkJaWd0X2Fz c2VydChleGVjX29iamVjdDJbYnVmXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+ID4rCQkJ CWlndF9mYWlsX29uX2YoKnNoYXJlZF9idWZmZXJbYnVmXSAhPSBidWYsIFwKPiA+KwkJCQkiTWlz bWF0Y2ggaW4gYnVmZmVyICVkLCBpdGVyYXRpb24gJWQ6IDB4JTA4WFxuIiwgXAo+ID4rCQkJCWJ1 ZiwgbG9vcCwgKnNoYXJlZF9idWZmZXJbYnVmXSk7Cj4gPisJCQkJcGlubmluZ19vZmZzZXQgLT0g QUxJR04oQk9fU0laRSwgNDA5Nik7Cj4gPisJCQl9Cj4gPisJCQkvKiBSZXNldCB0aGUgYnVmZmVy IGVudHJpZXMgZm9yIG5leHQgaXRlcmF0aW9uICovCj4gPisJCQlmb3IoYnVmID0gMDsgYnVmIDwg U1RSRVNTX05VTV9CVUZGRVJTOyBidWYrKykgewo+ID4rCQkJCSpzaGFyZWRfYnVmZmVyW2J1Zl0g PSAweEZGRkZGRkZGOwo+ID4rCQkJfQo+ID4rCQl9Cj4gPisJfQo+ID4rCj4gPisJLyogTm93IFJl bmRlciBSaW5nICovCj4gPisJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gPisJc2V0dXBfZXhl Y2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLAo+ID4rCQkJIFNUUkVTU19OVU1f QlVGRkVSUyArIDEsIGxlbik7Cj4gPisJZm9yIChsb29wID0gMDsgbG9vcCA8IFNUUkVTU19OVU1f TE9PUFM7IGxvb3ArKykgewo+ID4rCQlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRj aF9idWZfaGFuZGxlKTsKPiA+KwkJcGlubmluZ19vZmZzZXQgPSAweDgwMDAwMDAwMDAwMDsKPiA+ KwkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKyspIHsKPiA+KwkJ CWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9oYW5kbGVbYnVmXSk7Cj4gPisJCQlpZ3RfYXNz ZXJ0KGV4ZWNfb2JqZWN0MltidWZdLm9mZnNldCA9PSBwaW5uaW5nX29mZnNldCk7Cj4gPisJCQlp Z3RfZmFpbF9vbl9mKCpzaGFyZWRfYnVmZmVyW2J1Zl0gIT0gYnVmLCBcCj4gPisJCQkiTWlzbWF0 Y2ggaW4gYnVmZmVyICVkLCBcCj4gPisJCQlpdGVyYXRpb24gJWQ6IDB4JTA4WFxuIiwgYnVmLCBs b29wLCAqc2hhcmVkX2J1ZmZlcltidWZdKTsKPiA+KwkJCXBpbm5pbmdfb2Zmc2V0IC09IEFMSUdO KEJPX1NJWkUsIDQwOTYpOwo+ID4rCQl9Cj4gPisJCS8qIFJlc2V0IHRoZSBidWZmZXIgZW50cmll cyBmb3IgbmV4dCBpdGVyYXRpb24gKi8KPiA+KwkJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19O VU1fQlVGRkVSUzsgYnVmKyspIHsKPiA+KwkJCSpzaGFyZWRfYnVmZmVyW2J1Zl0gPSAweEZGRkZG RkZGOwo+ID4rCQl9Cj4gPisJfQo+ID4rCj4gPisJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19O VU1fQlVGRkVSUzsgYnVmKyspIHsKPiA+KwkJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRfaGFuZGxlW2J1 Zl0pOwo+ID4rCQlmcmVlKHNoYXJlZF9idWZmZXJbYnVmXSk7Cj4gPisJfQo+ID4rCWdlbV9jbG9z ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gPisJY2xvc2UoZmQpOwo+ID4rCj4gPisJZnJlZShz aGFyZWRfaGFuZGxlKTsKPiA+KwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ID4rCWZyZWUoZXhlY19v YmplY3QyKTsKPiA+KwlmcmVlKGJhdGNoX2J1ZmZlcik7Cj4gPit9Cj4gPisKPiA+Ky8qIGdlbV93 cml0ZV9tdWx0aXBhZ2VfYnVmZmVyCj4gPisgKiBDcmVhdGUgYSBidWZmZXIgc3Bhbm5pbmcgbXVs dGlwbGUgcGFnZXMsIGFuZCBzaGFyZSB3aXRoIEdQVS4KPiA+KyAqIFdyaXRlIHRvIGV2ZXJ5IGVs ZW1lbnQgb2YgdGhlIGJ1ZmZlcgo+ID4rICogYW5kIHZlcmlmeSBjb3JyZWN0IGNvbnRlbnRzLgo+ ID4rCj4gPisgKiBDcmVhdGUgOEsgYnVmZmVyCj4gPisgKiBTaGFyZSB3aXRoIEdQVSB1c2luZyB1 c2VycHRyIGlvY3RsCj4gPisgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4g YWxsIGVsZW1lbnRzIG9mIGJ1ZmZlcgo+ID4rICogRXhlY3V0ZSBCYXRjaCBCdWZmZXIKPiA+KyAq IFZhbGlkYXRlIGV2ZXJ5IGVsZW1lbnQgaGFzIERBVEEKPiA+KyovCj4gPisKPiA+KyNkZWZpbmUg RFdPUkRfU0laRSBzaXplb2YodWludDMyX3QpCj4gPisjZGVmaW5lIEJCX1NJWkUgKChNVUxUSVBB R0VfQk9fU0laRSAvIERXT1JEX1NJWkUpICogU1RPUkVfQkFUQ0hfQlVGRkVSX1NJWkUpICsgMgo+ ID4rI2RlZmluZSBOVU1fRFdPUkRTIChNVUxUSVBBR0VfQk9fU0laRS9zaXplb2YodWludDMyX3Qp KQo+ID4rc3RhdGljIHZvaWQgZ2VtX3dyaXRlX211bHRpcGFnZV9idWZmZXJfdGVzdCh2b2lkKQo+ ID4rewo+ID4rCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiA+KwlpbnQgZmQ7Cj4gPisJdWlu dDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gPisJdWludDMyX3Qgc2hhcmVkX2hhbmRsZTsKPiA+Kwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gPisJc3RydWN0IGRybV9p OTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzJdOwo+ID4rCXVpbnQzMl90IGJhdGNo X2J1ZmZlcltCQl9TSVpFXTsKPiA+Kwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlOwo+ID4rCWlu dCByaW5nLCBsZW4sIGo7Cj4gPisJdWludDY0X3QgcGlubmluZ19vZmZzZXQ9MHgxMDAwOwo+ID4r CXVpbnQ2NF90IHZhZGRyOwo+ID4rCj4gPisJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lO VEVMKTsKPiA+KwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFMSUFTSU5HX1BQR1RU KSk7Cj4gPisKPiA+KwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZW9mKGJh dGNoX2J1ZmZlcikpOwo+ID4rCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihNVUxU SVBBR0VfQk9fU0laRSk7Cj4gPisKPiA+KwlsZW4gPSAwOwo+ID4rCW1lbXNldChiYXRjaF9idWZm ZXIsIDAsIHNpemVvZihiYXRjaF9idWZmZXIpKTsKPiA+KwltZW1zZXQoc2hhcmVkX2J1ZmZlciwg MCwgTVVMVElQQUdFX0JPX1NJWkUpOwo+ID4rCj4gPisJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiA+ KwlzaGFyZWRfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZl ciwKPiA+KwkJCQkgICAgIE1VTFRJUEFHRV9CT19TSVpFKTsKPiA+KwlzZXR1cF9leGVjX29iaigm ZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfaGFuZGxlLAo+ID4rCQkgICAgICAgRVhFQ19PQkpFQ1Rf UElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gPisKPiA+KwkvKiBjcmVhdGUgY29tbWFuZCBidWZm ZXIgd2l0aCB3cml0ZSBjb21tYW5kcyAqLwo+ID4rCXZhZGRyID0gcGlubmluZ19vZmZzZXQ7Cj4g PisJZm9yKGo9MDsgajwgTlVNX0RXT1JEUzsgaisrKSB7Cj4gPisJCWxlbiArPSBnZW1fc3RvcmVf ZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciArIChsZW4vNCksIHZhZGRyLAo+ID4rCQkJCQkgIGos Cj4gPisJCQkJCSAgKGogPT0gTlVNX0RXT1JEUyAtIDEpID8gdHJ1ZTpmYWxzZSk7Cj4gPisJCXZh ZGRyICs9IHNpemVvZihzaGFyZWRfYnVmZmVyWzBdKTsgIC8qIDQgYnl0ZXMgKi8KPiA+Kwl9Cj4g PisKPiA+KwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwg bGVuKTsKPiA+Kwo+ID4rCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ID4rCXNldHVwX2V4 ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ID4rCj4g PisJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gPisJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1 ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ID4rCXN1Ym1pdF9hbmRfc3luYyhmZCwg JmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ID4rCWdlbV91c2VycHRyX3N5bmMoZmQsIHNo YXJlZF9oYW5kbGUpOwo+ID4rCj4gPisJaWd0X2Fzc2VydChleGVjX29iamVjdDJbMF0ub2Zmc2V0 ID09IHBpbm5pbmdfb2Zmc2V0KTsKPiA+Kwlmb3IoaiA9IDA7IGogPCAoTVVMVElQQUdFX0JPX1NJ WkUvc2l6ZW9mKHVpbnQzMl90KSk7IGorKykgewo+ID4rCQlpZ3RfZmFpbF9vbl9mKHNoYXJlZF9i dWZmZXJbal0gIT0gaiwKPiA+KwkJIk1pc21hdGNoIGluIGluZGV4ICVkOiAweCUwOFhcbiIsIGos IHNoYXJlZF9idWZmZXJbal0pOwo+ID4rCX0KPiA+Kwo+ID4rCWdlbV9jbG9zZShmZCwgYmF0Y2hf YnVmX2hhbmRsZSk7Cj4gPisJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRfaGFuZGxlKTsKPiA+KwljbG9z ZShmZCk7Cj4gPisKPiA+KwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ID4rfQo+ID4rCj4gPisvKiBn ZW1fcGluX2ludmFsaWRfdm1hX3Rlc3QKPiA+KyAqIFRoaXMgdGVzdCB3aWxsIHJlcXVlc3QgdG8g cGluIGEgc2hhcmVkIGJ1ZmZlciB0byBhbiBpbnZhbGlkCj4gPisgKiBWTUEgID4gNDgtYml0IGFk ZHJlc3MgaWYgc3lzdGVtIHN1cHBvcnRzIDQ4QiBQUEdUVAo+ID4rICogSWYgc3lzdGVtIHN1cHBv cnRzIDMyQiBQUEdUVCwgaXQgd2lsbCB0ZXN0IHRoZSBlcXVpdmFsZW50IGludmFsaWQgVk1BCj4g PisgKiBDcmVhdGUgc2hhcmVkIGJ1ZmZlciBvZiBzaXplIDRLCj4gPisgKiBUcnkgYW5kIFBpbiBv YmplY3QgdG8gaW52YWxpZCBhZGRyZXNzCj4gPisqLwo+ID4rc3RhdGljIHZvaWQgZ2VtX3Bpbl9p bnZhbGlkX3ZtYV90ZXN0KHZvaWQpCj4gPit7Cj4gPisJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRy Owo+ID4rCWludCBmZCwgcmV0Owo+ID4rCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ID4rCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiA+KwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMV07Cj4gPisJdWludDMyX3Qgc2hhcmVk X2J1Zl9oYW5kbGU7Cj4gPisJaW50IHJpbmc7Cj4gPisJdWludDY0X3QgaW52YWxpZF9hZGRyZXNz X2Zvcl80OGIgPSAweDkwMDAwMDAwMDAwMDA7IC8qIDUyIGJpdCBhZGRyZXNzICovCj4gPisJdWlu dDY0X3QgaW52YWxpZF9hZGRyZXNzX2Zvcl8zMmIgPSAweDkwMDAwMDAwMDsgLyogMzYgYml0IGFk ZHJlc3MgKi8KPiA+Kwo+ID4rCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4g PisJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxMXzQ4X0JJVF9QUEdUVCkgfHwK PiA+KwkJICAgIHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF8zMl9CSVRfUFBHVFQpKTsKPiA+Kwo+ ID4rCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiA+Kwkqc2hh cmVkX2J1ZmZlciA9IDB4RkZGRkZGRkY7Cj4gPisJCj4gPisJLyogc2hhcmUgd2l0aCBHUFUgKi8K PiA+KwlzaGFyZWRfYnVmX2hhbmRsZSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJl ZF9idWZmZXIsIEJPX1NJWkUpOwo+ID4rCj4gPisJaWYgKHVzZXNfZnVsbF9wcGd0dChmZCwgRlVM TF80OF9CSVRfUFBHVFQpKSB7Cj4gPisJCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0s IHNoYXJlZF9idWZfaGFuZGxlLAo+ID4rCQkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgaW52 YWxpZF9hZGRyZXNzX2Zvcl80OGIpOwo+ID4rCX0gZWxzZSB7Cj4gPisJCXNldHVwX2V4ZWNfb2Jq KCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ID4rCQkJICAgICAgIEVYRUNf T0JKRUNUX1BJTk5FRCwgaW52YWxpZF9hZGRyZXNzX2Zvcl8zMmIpOwo+ID4rCX0KPiA+Kwo+ID4r CXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ID4rCj4gPisJc2V0dXBfZXhlY2J1ZmZlcigmZXhl Y2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAxLCAwKTsKPiA+Kwo+ID4rCS8qIEV4cGVjdCBleGVj YnVmIHRvIGZhaWwgKi8KPiA+KwlyZXQgPSBkcm1Jb2N0bChmZCwKPiA+KwkJICAgICAgIERSTV9J T0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMiwKPiA+KwkJICAgICAgICZleGVjYnVmKTsKPiA+Kwo+ ID4rCWlndF9hc3NlcnQoZXJybm8gPT0gRU5PU1BDKTsKPiA+KwlpZ3RfYXNzZXJ0X25lcShyZXQs IDApOwo+ID4rCQo+ID4rCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ID4rCWNs b3NlKGZkKTsKPiA+KwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ID4rfQo+ID4rCj4gPisKPiA+Ky8q IGdlbV9waW5faGlnaF9hZGRyZXNzX3Rlc3QKPiA+KyAqIFRoaXMgdGVzdCB3aWxsIGNyZWF0ZSBh IHNoYXJlZCBidWZmZXIsIGFuZCBjcmVhdGUgYSBjb21tYW5kCj4gPisgKiBmb3IgR1BVIHRvIHdy aXRlIGRhdGEgaW4gaXQuIEl0IHdpbGwgYXR0ZW1wdCB0byBwaW4gdGhlIGJ1ZmZlciBhdCBhZGRy ZXNzID4gMzIgYml0cy4KPiA+KyAqIENQVSB3aWxsIHJlYWQgYW5kIG1ha2Ugc3VyZSBleHBlY3Rl ZCB2YWx1ZSBpcyBvYnRhaW5lZAo+ID4rCj4gPisgKiBNYWxsb2MgYSA0SyBidWZmZXIKPiA+KyAq IFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiA+KyAq IENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBidWZm ZXIKPiA+KyAqIFVzZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgYnVmZmVyIGFzIDB4MTEwMDAwMDAwMCAo PiAzMiBiaXQpCj4gPisgKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmpl Y3QKPiA+KyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byBzaGFyZWQgYnVmZmVyIFZN QQo+ID4rICogU3VibWl0IGV4ZWNidWZmZXIKPiA+KyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBE V09SRCBpbiBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFUQQo+ID4rICogTm93IHRyeSBzYW1lIHRl c3Qgd2l0aG91dCB1c2luZyBFWEVDX09CSkVDVF9QSU5ORUQgZmxhZwo+ID4rICogdGVzdCBzaG91 bGQgZmFpbCBwaW5uZWQgb2Zmc2V0IGNoZWNrCj4gPisqLwo+ID4rCj4gPitzdGF0aWMgdm9pZCBn ZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0KHZvaWQpCj4gPit7Cj4gPisJaTkxNV9nZW1fdXNlcnB0 ciB1c2VycHRyOwo+ID4rCWludCBmZDsKPiA+Kwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiA+ KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gPisJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzJdOwo+ID4rCXVpbnQzMl90IGJh dGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJdOwo+ID4rCXVpbnQzMl90IGJh dGNoX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlOwo+ID4rCWludCByaW5nLCBsZW47Cj4g PisJY29uc3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gPisJdWludDY0X3QgaGlnaF9h ZGRyZXNzID0gMHgxMTExRkZGRjAwMDsgLyogNDQgYml0IGFkZHJlc3MgKi8KPiA+Kwo+ID4rCWZk ID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gPisJaWd0X3JlcXVpcmUodXNlc19m dWxsX3BwZ3R0KGZkLCBGVUxMXzQ4X0JJVF9QUEdUVCkpOwo+ID4rCj4gPisJYmF0Y2hfYnVmX2hh bmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ID4rCj4gPisJLyogY3JlYXRlIGNwdSBi dWZmZXIsIHNldCB0byBhbGwgMHhGJ3MgKi8KPiA+KwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21l bV9idWZmZXIoQk9fU0laRSk7Cj4gPisJKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwo+ID4r Cj4gPisJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiA+KwlzaGFyZWRfYnVmX2hhbmRsZSA9IGluaXRf dXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsIEJPX1NJWkUpOwo+ID4rCj4gPisJ LyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ID4rCWxlbiA9 IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBoaWdoX2FkZHJlc3MsIGRhdGEs IHRydWUpOwo+ID4rCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVm ZmVyLCBsZW4pOwo+ID4rCj4gPisJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gPisJc2V0 dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gPisJCSAg ICAgICBFWEVDX09CSkVDVF9QSU5ORUQgfCBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVT UywgaGlnaF9hZGRyZXNzKTsKPiA+KwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBi YXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiA+Kwo+ID4rCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVS Owo+ID4rCj4gPisJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5n LCAyLCBsZW4pOwo+ID4rCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9o YW5kbGUpOwo+ID4rCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiA+ Kwo+ID4rCWlndF9hc3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNldCA9PSBoaWdoX2FkZHJlc3Mp Owo+ID4rCS8qIGNoZWNrIG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcyAqLwo+ID4rCWln dF9mYWlsX29uX2Yoc2hhcmVkX2J1ZmZlclswXSAhPSBkYXRhLAo+ID4rCQkiXG5DUFUgcmVhZCBk b2VzIG5vdCBtYXRjaCBHUFUgd3JpdGUsIFwKPiA+KwkJZXhwZWN0ZWQ6IDB4JXgsIGdvdDogMHgl eFxuIiwgZGF0YSwgc2hhcmVkX2J1ZmZlclswXSk7Cj4gPisKPiA+KwkvKiBOb3cgdHJ5IHBpbm5p bmcgdG8gaGlnaCBhZGRyZXNzIHdpdGhvdXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgKi8KPiAK PiBJIHRob3VnaHQgaGVyZSBFWEVDX09CSkVDVF9QSU5ORUQgd2l0aG91dCBFWEVDX09CSkVDVF9T VVBQT1JUU180OEJfQUREUkVTUywKPiB0byB2ZXJpZnkgdGhhdCB0aGUgZm9ybWVyIHJlYWxseSBp bXBsaWVzIHRoZSBsYXR0ZXIuCj4gCj4gSWYgeW91IGNoYW5nZSB0aGF0IHlvdSBjYW4gYWRkIG15 IHItYi4KCkkgdGhpbmsgQ2hyaXMgcmVwbGllZCBvbiB0aGUga2VybmVsIHBhdGNoIGFscmVhZHks IGJ1dCBwbGVhc2UgZG9uJ3QgY3JlYXRlCnN1Y2ggZGVwZW5jaWVzIGluIGZsYWdzLgotRGFuaWVs Cgo+IAo+IFJlZ2FyZHMsCj4gCj4gVHZydGtvCj4gCj4gPisJc2V0dXBfZXhlY19vYmooJmV4ZWNf b2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gPisJCSAgICAgICAwLCBoaWdoX2FkZHJl c3MpOwo+ID4rCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywg MiwgbGVuKTsKPiA+KwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFu ZGxlKTsKPiA+KwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gPisK PiA+KwkvKiBTaW5jZSB3ZSBkaWQgbm90IHJlcXVlc3QgNDhCIGFkZHJlc3NpbmcgdXNpbmcgRVhF Q19PQkpFQ1RfUElOTkVEICovCj4gPisJaWd0X2Fzc2VydChleGVjX29iamVjdDJbMF0ub2Zmc2V0 ICE9IGhpZ2hfYWRkcmVzcyk7Cj4gPisKPiA+KwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5k bGUpOwo+ID4rCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ID4rCWNsb3NlKGZk KTsKPiA+KwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ID4rfQo+ID4rCj4gPisvKiBnZW1fcGluX25l YXJfNDhCaXRfdGVzdAo+ID4rICogVGhpcyB0ZXN0IHdpbGwgY3JlYXRlIGEgc2hhcmVkIGJ1ZmZl ciwKPiA+KyAqIGFuZCBjcmVhdGUgYSBjb21tYW5kIGZvciBHUFUgdG8gd3JpdGUgZGF0YSBpbiBp dC4gSXQgd2lsbCBhdHRlbXB0Cj4gPisgKiB0byBwaW4gdGhlIGJ1ZmZlciBhdCBhZGRyZXNzID4g NDcgYml0cyA8PSA0OC1iaXQuCj4gPisgKiBDUFUgd2lsbCByZWFkIGFuZCBtYWtlIHN1cmUgZXhw ZWN0ZWQgdmFsdWUgaXMgb2J0YWluZWQKPiA+Kwo+ID4rICogTWFsbG9jIGEgNEsgYnVmZmVyCj4g PisgKiBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQVSBieSB1c2luZyB1c2VycHRyIGlvY3RsCj4g PisgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2Yg YnVmZmVyCj4gPisgKiBVc2UgdmlydHVhbCBhZGRyZXNzIG9mIGJ1ZmZlciBhcyByYW5nZSBiZXR3 ZWVuIDQ3LWJpdCBhbmQgNDgtYml0Cj4gPisgKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcg aW4gZXhlYyBvYmplY3QKPiA+KyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byBzaGFy ZWQgYnVmZmVyIFZNQQo+ID4rICogU3VibWl0IGV4ZWNidWZmZXIKPiA+KyAqIFZlcmlmeSB2YWx1 ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFUQQo+ID4rKi8KPiA+ KyNkZWZpbmUgQkVHSU5fSElHSF9BRERSRVNTIDB4N0ZGRkZGRkZGMDAwCj4gPisjZGVmaW5lIEVO RF9ISUdIX0FERFJFU1MgMHhGRkZGRkZGRkMwMDAKPiA+KyNkZWZpbmUgQUREUkVTU19JTkNSRU1F TlQgMHgyMDAwMDAwMDAwCj4gPitzdGF0aWMgdm9pZCBnZW1fcGluX25lYXJfNDhCaXRfdGVzdCh2 b2lkKQo+ID4rewo+ID4rCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiA+KwlpbnQgZmQ7Cj4g PisJdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gPisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj YnVmZmVyMiBleGVjYnVmOwo+ID4rCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4 ZWNfb2JqZWN0MlsyXTsKPiA+Kwl1aW50MzJfdCBiYXRjaF9idWZmZXJbQk9fU0laRV07Cj4gPisJ dWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gPisJaW50IHJp bmcsIGxlbjsKPiA+Kwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiA+Kwl1aW50 NjRfdCBoaWdoX2FkZHJlc3M7Cj4gPisKPiA+KwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJf SU5URUwpOwo+ID4rCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF80OF9CSVRf UFBHVFQpKTsKPiA+Kwo+ID4rCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19T SVpFKTsKPiA+Kwo+ID4rCS8qIGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8gYWxsIDB4RidzICov Cj4gPisJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ID4rCSpz aGFyZWRfYnVmZmVyID0gMHhGRkZGRkZGRjsKPiA+Kwo+ID4rCS8qIHNoYXJlIHdpdGggR1BVICov Cj4gPisJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFy ZWRfYnVmZmVyLCBCT19TSVpFKTsKPiA+Kwo+ID4rCWZvciAoaGlnaF9hZGRyZXNzID0gQkVHSU5f SElHSF9BRERSRVNTOyBoaWdoX2FkZHJlc3MgPD0gRU5EX0hJR0hfQUREUkVTUzsKPiA+KwkJCQkJ CWhpZ2hfYWRkcmVzcys9QUREUkVTU19JTkNSRU1FTlQpIHsKPiA+KwkJLyogY3JlYXRlIGNvbW1h bmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ID4rCQlsZW4gPSBnZW1fc3RvcmVfZGF0 YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgaGlnaF9hZGRyZXNzLAo+ID4rCQkJCQlkYXRhLCB0cnVl KTsKPiA+KwkJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIs IGxlbik7Cj4gPisJCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ID4rCQlzZXR1cF9leGVj X29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiA+KwkJCSAgICAgICBF WEVDX09CSkVDVF9QSU5ORUQgfCBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVTUywKPiA+ KwkJCSAgICAgICBoaWdoX2FkZHJlc3MpOwo+ID4rCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmpl Y3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiA+Kwo+ID4rCQlyaW5nID0gSTkxNV9F WEVDX1JFTkRFUjsKPiA+KwkJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3Qy LCByaW5nLCAyLCBsZW4pOwo+ID4rCQlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRj aF9idWZfaGFuZGxlKTsKPiA+KwkJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5k bGUpOwo+ID4rCj4gPisJCWlndF9hc3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNldCA9PSBoaWdo X2FkZHJlc3MpOwo+ID4rCQkvKiBjaGVjayBvbiBDUFUgdG8gc2VlIGlmIHZhbHVlIGNoYW5nZXMg Ki8KPiA+KwkJaWd0X2ZhaWxfb25fZihzaGFyZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gPisJCSJc bkNQVSByZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3cml0ZSwgZXhwZWN0ZWQ6IDB4JXgsIFwKPiA+ KwkJZ290OiAweCV4XG4sIDB4JSJQUkl4NjQiIiwgZGF0YSwgc2hhcmVkX2J1ZmZlclswXSwgaGln aF9hZGRyZXNzKTsKPiA+Kwl9Cj4gPisKPiA+KwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5k bGUpOwo+ID4rCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ID4rCWNsb3NlKGZk KTsKPiA+KwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ID4rfQo+ID4rCj4gPisKPiA+K2ludCBtYWlu KGludCBhcmdjLCBjaGFyKiBhcmd2W10pCj4gPit7Cj4gPisJaWd0X3N1YnRlc3RfaW5pdChhcmdj LCBhcmd2KTsKPiA+KwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gPisKPiA+KwkvKiBBbGwg dGVzdHMgbmVlZCBQUEdUVCBzdXBwb3J0ICovCj4gPisJaWd0X3N1YnRlc3QoImdlbV9waW5fdXNl cnB0ciIpIHsKPiA+KwkJZ2VtX3Bpbl91c2VycHRyX3Rlc3QoKTsKPiA+Kwl9Cj4gPisJaWd0X3N1 YnRlc3QoImdlbV9waW5fYm8iKSB7Cj4gPisJCWdlbV9waW5fYm9fdGVzdCgpOwo+ID4rCX0KPiA+ KwlpZ3Rfc3VidGVzdCgiZ2VtX211bHRpcGxlX3Byb2Nlc3MiKSB7Cj4gPisJCWdlbV9tdWx0aXBs ZV9wcm9jZXNzX3Rlc3QoKTsKPiA+Kwl9Cj4gPisJaWd0X3N1YnRlc3QoImdlbV9yZXBpbiIpIHsK PiA+KwkJZ2VtX3JlcGluX3Rlc3QoKTsKPiA+Kwl9Cj4gPisJaWd0X3N1YnRlc3QoImdlbV9waW5f b3ZlcmxhcCIpIHsKPiA+KwkJZ2VtX3Bpbl9vdmVybGFwX3Rlc3QoKTsKPiA+Kwl9Cj4gPisJaWd0 X3N1YnRlc3QoImdlbV93cml0ZV9tdWx0aXBhZ2VfYnVmZmVyIikgewo+ID4rCQlnZW1fd3JpdGVf bXVsdGlwYWdlX2J1ZmZlcl90ZXN0KCk7Cj4gPisJfQo+ID4rCj4gPisJLyogRm9sbG93aW5nIHRl c3RzIG5lZWQgMzIvNDggQml0IFBQR1RUIHN1cHBvcnQgKi8KPiA+KwlpZ3Rfc3VidGVzdCgiZ2Vt X3Bpbl9pbnZhbGlkX3ZtYSIpIHsKPiA+KwkJZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0KCk7Cj4g PisJfQo+ID4rCj4gPisJLyogRm9sbG93aW5nIHRlc3RzIG5lZWQgNDggQml0IFBQR1RUIHN1cHBv cnQgKi8KPiA+KwlpZ3Rfc3VidGVzdCgiZ2VtX3NvZnRwaW5fc3RyZXNzIikgewo+ID4rCQlnZW1f c29mdHBpbl9zdHJlc3NfdGVzdCgpOwo+ID4rCX0KPiA+KwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl9o aWdoX2FkZHJlc3MiKSB7Cj4gPisJCWdlbV9waW5faGlnaF9hZGRyZXNzX3Rlc3QoKTsKPiA+Kwl9 Cj4gPisJaWd0X3N1YnRlc3QoImdlbV9waW5fbmVhcl80OEJpdCIpIHsKPiA+KwkJZ2VtX3Bpbl9u ZWFyXzQ4Qml0X3Rlc3QoKTsKPiA+Kwl9Cj4gPisKPiA+KwlpZ3RfZXhpdCgpOwo+ID4rfQo+ID4K PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVs LWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0 cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0g CkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6 Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==