From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] tests/gem_softpin: New tests for softpin feature Date: Wed, 2 Dec 2015 10:24:50 +0000 Message-ID: <565EC6F2.6030000@linux.intel.com> References: <1448968818-2118-1-git-send-email-vinay.belgaumkar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 1DAF16E925 for ; Wed, 2 Dec 2015 02:24:53 -0800 (PST) In-Reply-To: <1448968818-2118-1-git-send-email-vinay.belgaumkar@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Vinay Belgaumkar , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMDEvMTIvMTUgMTE6MjAsIFZpbmF5IEJlbGdhdW1rYXIgd3JvdGU6Cj4gVGhlc2UgdGVzdHMg ZXhlcmNpc2UgdGhlIHVzZXJwdHIgaW9jdGwgdG8gY3JlYXRlIHNoYXJlZCBidWZmZXJzCj4gYmV0 d2VlbiBDUFUgYW5kIEdQVS4gVGhleSBjb250YWluIGVycm9yIGFuZCBub3JtYWwgdXNhZ2Ugc2Nl bmFyaW9zLgo+IFRoZXkgYWxzbyBjb250YWluIGEgY291cGxlIG9mIHN0cmVzcyB0ZXN0cyB3aGlj aCBjb3B5IGJ1ZmZlcnMgYmV0d2Vlbgo+IENQVSBhbmQgR1BVLiBUaGVzZSB0ZXN0cyByZWx5IG9u IHRoZSBzb2Z0cGluIHBhdGNoIGluIG9yZGVyIHRvIHBpbiBidWZmZXJzCj4gdG8gYSBjZXJ0YWlu IFZBLgo+Cj4gQ2F2ZWF0OiBUaGVzZSB0ZXN0cyB3ZXJlIGRlc2lnbmVkIHRvIHJ1biBvbiA2NC1i aXQgc3lzdGVtLiBGdXR1cmUgd29yawo+IGluY2x1ZGVzIGFkZGluZyBsb2dpYyB0byBlbnN1cmUg dGhlc2UgdGVzdHMgY2FuIHJ1biBvbiAzMi1iaXQgc3lzdGVtcyB3aXRoCj4gUFBHVFQgc3VwcG9y dC4gU29tZSB0ZXN0cyBhcmUgY3VycmVudGx5IGRpc2FibGVkIGZvciAzMi1iaXQgc3lzdGVtcyBm b3IgdGhhdAo+IHJlYXNvbi4KPgo+IHYyOiBBZGRlZCBjYyBhbmQgc2lnbmVkLW9mZi1ieSBmaWVs ZHMKPgo+IHYzOiBGaXhlZCByZXZpZXcgY29tbWVudHMsIGFkZGVkIGhlbHBlciBmdW5jdGlvbnMu IFJlbW92ZWQgdXNlcnB0ciBlcnJvcgo+IHNjZW5hcmlvcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHVz ZXJwdHIgdGVzdHMuIE1vZGlmaWVkIHN0cmVzcyB0ZXN0IHRvIGhhdmUKPiAxMDBLIGJ1ZmZlcnMs IGl0IG5vdyBydW5zIGZvciB+MzAgbWlucywgY2hlY2tzIGV2ZXJ5IGVsZW1lbnQgaGFzIGJlZW4g d3JpdHRlbgo+IHRvIGNvcnJlY3RseSwgYW5kIHBpbnMgYnVmZmVycyBhdCBkaWZmZXJlbnQgVk1B cy4KPgo+IHY0OiBDaGFuZ2VkIG5hbWUgdG8gZ2VtX3NvZnRwaW4KPgo+IHY1OiBNb3JlIGZpeGVz LiBSZW1vdmVkIHRoZSBmaWxlIGJhc2VkIHRlc3RzLCB3aWxsIG1vdmUgdGhlbSB0byB1c2VycHRy IHRlc3RzLgo+IEFkZGVkIGEgZnVuY3Rpb24gdGhhdCB2YWxpZGF0ZXMgYXBwcm9wcmlhdGUgUFBH VFQgc3VwcG9ydCBiZWZvcmUgcnVubmluZyB0ZXN0cy4KPiBPcHRpbWl6ZWQgc3RhY2sgc3BhY2Ug YW5kIG1lbW9yeSBmb290cHJpbnQgaW4gc3RyZXNzIHRlc3QuIFJlbW92ZWQgdGhlIGV2aWN0aW9u Cj4gdGVzdCwgd2lsbCBhZGQgaXQgYmFjayBhZnRlciB2ZXJpZnlpbmcgcHJvcGVyIGZ1bmN0aW9u YWxpdHkuCj4KPiB2NjogU3BsaXQgYmFzaWMgdGVzdCBpbnRvIHVzZXJwdHIgYW5kIGJvCj4gRml4 ZWQgc29tZSBjb2Rpbmcgc3R5bGUgaXNzdWVzLgo+Cj4gdjc6IEVuaGFuY2VkIGludmFsaWQgdm1h IHBpbm5pbmcgdGVzdCB0byB2ZXJpZnkgMzItYml0IFBQR1RUIGZ1bmN0aW9uYWxpdHkuCj4gRW5h YmxlZCB0aGUgdGVzdCBmb3IgMzItYml0IFBQR1RUIHN5c3RlbXMsIGFuZCB2ZXJpZnkgcGlubmlu ZyBmYWlscyBhYm92ZQo+IDMyLWJpdCBhZGRyZXNzZXMuIEVuaGFuY2VkIHRoZSBoaWdoIGFkcmVz cyBwaW5uaW5nIHRlc3QgdG8gZW5zdXJlIHBpbm5pbmcKPiBmYWlscyB3aGVuIEVYRUNfT0JKRUNU X1BJTk5FRCBmbGFnIGlzIG5vdCB1c2VkLiBTb21lIG1vcmUgY29zbWV0aWMgZml4ZXMgdG8KPiBj bG9zZSBidWZmZXIgaGFuZGxlcy4gQ2hhbmdlZCB1c2VycHRyIGZ1bmN0aW9uIHRvIHVzZWQgc3lu Y2hyb25pemVkIG9wZXJhdGlvbnMuCj4KPiB2ODogTWlub3IgY2hhbmdlIHRvIGhpZ2ggYWRkcmVz cyBwaW5uaW5nIHRlc3QgYXMgcGVyIGNvbW1lbnQuCj4KPiBDYzogTWljaGVsIFRoaWVycnkgPG1p Y2hlbC50aGllcnJ5QGludGVsLmNvbT4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1 bGluQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBWaW5heSBCZWxnYXVta2FyIDx2aW5heS5i ZWxnYXVta2FyQGludGVsLmNvbT4KPiAtLS0KPiAgIHRlc3RzLy5naXRpZ25vcmUgICAgICAgfCAg ICAxICsKPiAgIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgICAxICsKPiAgIHRlc3RzL2dlbV9z b2Z0cGluLmMgICAgfCAxMDQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+ICAgMyBmaWxlcyBjaGFuZ2VkLCAxMDUxIGluc2VydGlvbnMoKykKPiAgIGNy ZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9nZW1fc29mdHBpbi5jCgpJIGNvdWxkIGZpbmQgc29tZSBt b3JlIHN0eWxlIGlzc3VlcyBidXQgaXQgbG9va3MgZnVuY3Rpb25hbGx5IHJlYXNvbmFibGUgCmZv ciB0aGUgYmFzaWMgY292ZXJhZ2UuIFNvOgoKICAgUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGlu IDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CgpOb3cgY29tZXMgdGhlIGhhcmQgcGFydCAtIGZv bGxvd2luZyB1cCBvbiB0aGUgcHJvbWlzZSB0byBleHRlbmQgd2l0aCAKbW9yZSB0ZXN0IGNhc2Vz IGhlcmUgYW5kIGVsc2V3aGVyZS4gOikKClJlZ2FyZHMsCgpUdnJ0a28KCj4gZGlmZiAtLWdpdCBh L3Rlc3RzLy5naXRpZ25vcmUgYi90ZXN0cy8uZ2l0aWdub3JlCj4gaW5kZXggODBhZjlhNy4uNDI0 ODcwYiAxMDA2NDQKPiAtLS0gYS90ZXN0cy8uZ2l0aWdub3JlCj4gKysrIGIvdGVzdHMvLmdpdGln bm9yZQo+IEBAIC0yMSw2ICsyMSw3IEBAIGdlbV9iYWRfYmxpdAo+ICAgZ2VtX2JhZF9sZW5ndGgK PiAgIGdlbV9iYWRfcmVsb2MKPiAgIGdlbV9iYXNpYwo+ICtnZW1fc29mdHBpbgo+ICAgZ2VtX2Nh Y2hpbmcKPiAgIGdlbV9jbG9zZV9yYWNlCj4gICBnZW1fY29uY3VycmVudF9hbGwKPiBkaWZmIC0t Z2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBp bmRleCA4ZmIyZGU4Li4yMDA4ZDRhIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTExLDYgKzExLDcgQEAgVEVT VFNfcHJvZ3NfTSA9IFwKPiAgIAlkcnZfaGFuZ21hbiBcCj4gICAJZ2VtX2JhZF9yZWxvYyBcCj4g ICAJZ2VtX2Jhc2ljIFwKPiArCWdlbV9zb2Z0cGluIFwKPiAgIAlnZW1fY2FjaGluZyBcCj4gICAJ Z2VtX2Nsb3NlX3JhY2UgXAo+ICAgCWdlbV9jb25jdXJyZW50X2JsaXQgXAo+IGRpZmYgLS1naXQg YS90ZXN0cy9nZW1fc29mdHBpbi5jIGIvdGVzdHMvZ2VtX3NvZnRwaW4uYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uODI2NTY0Mwo+IC0tLSAvZGV2L251bGwKPiArKysg Yi90ZXN0cy9nZW1fc29mdHBpbi5jCj4gQEAgLTAsMCArMSwxMDQ5IEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsg Kgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29m dHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdB UkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAgIFZpbmF5IEJlbGdhdW1rYXIgPHZpbmF5 LmJlbGdhdW1rYXJAaW50ZWwuY29tPgo+ICsgKiAgICBUaG9tYXMgRGFuaWVsIDx0aG9tYXMuZGFu aWVsQGludGVsLmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4g KyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsjaW5jbHVkZSA8 c3RkaW8uaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiAr I2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVkZSA8 c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsjaW5jbHVkZSA8c3lzL3Rp bWUuaD4KPiArI2luY2x1ZGUgPG1hbGxvYy5oPgo+ICsjaW5jbHVkZSAiZHJtLmgiCj4gKyNpbmNs dWRlICJpb2N0bF93cmFwcGVycy5oIgo+ICsjaW5jbHVkZSAiZHJtdGVzdC5oIgo+ICsjaW5jbHVk ZSAiaW50ZWxfY2hpcHNldC5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfaW8uaCIKPiArI2luY2x1ZGUg Imk5MTVfZHJtLmgiCj4gKyNpbmNsdWRlIDxhc3NlcnQuaD4KPiArI2luY2x1ZGUgPHN5cy93YWl0 Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvaXBjLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc2htLmg+Cj4gKyNp bmNsdWRlICJpZ3Rfa21zLmgiCj4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+ICsjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ICsKPiArI2RlZmluZSBCT19T SVpFIDQwOTYKPiArI2RlZmluZSBNVUxUSVBBR0VfQk9fU0laRSAyICogQk9fU0laRQo+ICsjZGVm aW5lIFNUT1JFX0JBVENIX0JVRkZFUl9TSVpFIDQKPiArI2RlZmluZSBFWEVDX09CSkVDVF9QSU5O RUQJKDE8PDQpCj4gKyNkZWZpbmUgRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MgKDE8 PDMpCj4gKyNkZWZpbmUgU0hBUkVEX0JVRkZFUl9TSVpFIDQwOTYKPiArCj4gK3R5cGVkZWYgc3Ry dWN0IGRybV9pOTE1X2dlbV91c2VycHRyIGk5MTVfZ2VtX3VzZXJwdHI7Cj4gKwo+ICtzdGF0aWMg dWludDMyX3QgaW5pdF91c2VycHRyKGludCBmZCwgaTkxNV9nZW1fdXNlcnB0ciAqLCB2b2lkICpw dHIsIHVpbnQ2NF90IHNpemUpOwo+ICtzdGF0aWMgdm9pZCAqY3JlYXRlX21lbV9idWZmZXIodWlu dDY0X3Qgc2l6ZSk7Cj4gK3N0YXRpYyBpbnQgZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bChpbnQgZmQs IGk5MTVfZ2VtX3VzZXJwdHIgKnVzZXJwdHIpOwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX3VzZXJw dHJfdGVzdCh2b2lkKTsKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9ib190ZXN0KHZvaWQpOwo+ICtz dGF0aWMgdm9pZCBnZW1fcGluX2ludmFsaWRfdm1hX3Rlc3Qodm9pZCk7Cj4gK3N0YXRpYyB2b2lk IGdlbV9waW5fb3ZlcmxhcF90ZXN0KHZvaWQpOwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX2hpZ2hf YWRkcmVzc190ZXN0KHZvaWQpOwo+ICsKPiArI2RlZmluZSBOT19QUEdUVCAwCj4gKyNkZWZpbmUg QUxJQVNJTkdfUFBHVFQgMQo+ICsjZGVmaW5lIEZVTExfMzJfQklUX1BQR1RUIDIKPiArI2RlZmlu ZSBGVUxMXzQ4X0JJVF9QUEdUVCAzCj4gKy8qIHVzZXNfZnVsbF9wcGd0dAo+ICsgKiBGaW5kcyBz dXBwb3J0ZWQgUFBHVFQgZGV0YWlscy4KPiArICogQGZkIERSTSBmZAo+ICsgKiBAbWluIGNhbiBi ZQo+ICsgKiAwIC0gTm8gUFBHVFQKPiArICogMSAtIEFsaWFzaW5nIFBQR1RUCj4gKyAqIDIgLSBG dWxsIFBQR1RUICgzMmIpCj4gKyAqIDMgLSBGdWxsIFBQR1RUICg0OGIpCj4gKyAqIFJFVFVSTlMg dHJ1ZS9mYWxzZSBpZiBtaW4gc3VwcG9ydCBpcyBwcmVzZW50Cj4gKyovCj4gK3N0YXRpYyBib29s IHVzZXNfZnVsbF9wcGd0dChpbnQgZmQsIGludCBtaW4pCj4gK3sKPiArCXN0cnVjdCBkcm1faTkx NV9nZXRwYXJhbSBncDsKPiArCWludCB2YWwgPSAwOwo+ICsKPiArCW1lbXNldCgmZ3AsIDAsIHNp emVvZihncCkpOwo+ICsJZ3AucGFyYW0gPSAxODsgLyogSEFTX0FMSUFTSU5HX1BQR1RUICovCj4g KwlncC52YWx1ZSA9ICZ2YWw7Cj4gKwo+ICsJaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkx NV9HRVRQQVJBTSwgJmdwKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwllcnJubyA9IDA7Cj4gKwly ZXR1cm4gdmFsID49IG1pbjsKPiArfQo+ICsKPiArCj4gKy8qIGdlbV9jYWxsX3VzZXJwdHJfaW9j dGwKPiArICogSGVscGVyIHRvIGNhbGwgaW9jdGwgLSBUT0RPOiBtb3ZlIHRvIGxpYgo+ICsgKiBA ZmQgLSBkcm0gZmQKPiArICogQHVzZXJwdHIgLSBwb2ludGVyIHRvIGluaXRpYWxpc2VkIHVzZXJw dHIKPiArICogUkVUVVJOUyBzdGF0dXMgb2YgaW9jdGwgY2FsbAo+ICsqLwo+ICtzdGF0aWMgaW50 IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoaW50IGZkLCBpOTE1X2dlbV91c2VycHRyICp1c2VycHRy KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExf STkxNV9HRU1fVVNFUlBUUiwgdXNlcnB0cik7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlyZXQgPSBl cnJubzsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKiBpbml0X3VzZXJwdHIKPiAr ICogSGVscGVyIHRoYXQgaW5pdHMgdXNlcnB0ciBhbiByZXR1cm5zIGhhbmRsZQo+ICsgKiBAZmQg LSBkcm0gZmQKPiArICogQHVzZXJwdHIgLSBwb2ludGVyIHRvIGVtcHR5IHVzZXJwdHIKPiArICog QHB0ciAtIGJ1ZmZlciB0byBiZSBzaGFyZWQKPiArICogQHNpemUgLSBzaXplIG9mIGJ1ZmZlcgo+ ICsgKiBAcm8gLSByZWFkIG9ubHkgZmxhZwo+ICsgKiBSRVRVUk5TIGhhbmRsZSB0byBzaGFyZWQg YnVmZmVyCj4gKyovCj4gK3N0YXRpYyB1aW50MzJfdCBpbml0X3VzZXJwdHIoaW50IGZkLCBpOTE1 X2dlbV91c2VycHRyICp1c2VycHRyLCB2b2lkICpwdHIsCj4gKwkJCSAgICAgdWludDY0X3Qgc2l6 ZSkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwltZW1zZXQoKHZvaWQqKXVzZXJwdHIsIDAsIHNp emVvZihpOTE1X2dlbV91c2VycHRyKSk7Cj4gKwo+ICsJdXNlcnB0ci0+dXNlcl9wdHIgPSAodWlu dDY0X3QpcHRyOyAvKiBOZWVkIHRoZSBjYXN0IHRvIG92ZXJjb21lIGNvbXBpbGVyIHdhcm5pbmcg Ki8KPiArCXVzZXJwdHItPnVzZXJfc2l6ZSA9IHNpemU7Cj4gKwl1c2VycHRyLT5mbGFncyA9IDA7 IC8qIHVzZSBzeW5jaHJvbml6ZWQgb3BlcmF0aW9uICovCj4gKwo+ICsJcmV0ID0gZ2VtX2NhbGxf dXNlcnB0cl9pb2N0bChmZCwgdXNlcnB0cik7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4g Kwo+ICsJcmV0dXJuIHVzZXJwdHItPmhhbmRsZTsKPiArfQo+ICsKPiArLyogY3JlYXRlX21lbV9i dWZmZXIKPiArICogQ3JlYXRlcyBhIDRLIGFsaWduZWQgQ1BVIGJ1ZmZlcgo+ICsgKiBAc2l6ZSAt IHNpemUgb2YgYnVmZmVyCj4gKyAqIFJFVFVSTlMgcG9pbnRlciB0byBidWZmZXIgb2YgQHNpemUK PiArKi8KPiArc3RhdGljIHZvaWQgKmNyZWF0ZV9tZW1fYnVmZmVyKHVpbnQ2NF90IHNpemUpCj4g K3sKPiArCXZvaWQgKmFkZHI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHBvc2l4X21lbWFs aWduKCZhZGRyLCA0MDk2LCBzaXplKTsKPiArCWlndF9hc3NlcnQocmV0ID09IDApOwo+ICsKPiAr CXJldHVybiBhZGRyOwo+ICt9Cj4gKwo+ICsvKiBzZXR1cF9leGVjX29iago+ICsgKiBwb3B1bGF0 ZSBleGVjIG9iamVjdAo+ICsgKiBAZXhlYyAtIGV4ZWMgb2JqZWN0Cj4gKyAqIEBoYW5kbGUgLSBo YW5kbGUgdG8gZ2VtIGJ1ZmZlcgo+ICsgKiBAZmxhZ3MgLSBhbnkgZmxhZ3MKPiArICogQG9mZnNl dCAtIHJlcXVlc3RlZCBWTUEKPiArKi8KPiArc3RhdGljIHZvaWQgc2V0dXBfZXhlY19vYmooc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWMsCj4gKwkJCSAgIHVpbnQzMl90IGhh bmRsZSwgdWludDMyX3QgZmxhZ3MsCj4gKwkJCSAgIHVpbnQ2NF90IG9mZnNldCkKPiArewo+ICsJ bWVtc2V0KGV4ZWMsIDAsIHNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0Mikp Owo+ICsJZXhlYy0+aGFuZGxlID0gaGFuZGxlOwo+ICsJZXhlYy0+ZmxhZ3MgPSBmbGFnczsKPiAr CWV4ZWMtPm9mZnNldCA9IG9mZnNldDsKPiArfQo+ICsKPiArLyogZ2VtX3N0b3JlX2RhdGFfc3Zt Cj4gKyAqIHBvcHVsYXRlIGJhdGNoIGJ1ZmZlciB3aXRoIE1JX1NUT1JFX0RXT1JEX0lNTSBjb21t YW5kCj4gKyAqIEBmZDogZHJtIGZpbGUgZGVzY3JpcHRvcgo+ICsgKiBAY21kX2J1ZjogYmF0Y2gg YnVmZmVyCj4gKyAqIEB2YWRkcjogZGVzdGluYXRpb24gVmlydHVhbCBhZGRyZXNzCj4gKyAqIEBk YXRhOiBkYXRhIHRvIGJlIHN0b3JlIGF0IGRlc3RpbmF0aW9uCj4gKyAqIEBlbmQ6IHdoZXRoZXIg dG8gZW5kIGJhdGNoIGJ1ZmZlciBvciBub3QKPiArKi8KPiArc3RhdGljIGludCBnZW1fc3RvcmVf ZGF0YV9zdm0oaW50IGZkLCB1aW50MzJfdCAqY21kX2J1ZiwgdWludDY0X3QgdmFkZHIsCj4gKwkJ CSAgICAgIHVpbnQzMl90IGRhdGEsIGJvb2wgZW5kKQo+ICt7Cj4gKwlpbnQgaSA9IDA7Cj4gKwo+ ICsJY21kX2J1ZltpKytdID0gTUlfU1RPUkVfRFdPUkRfSU1NOwo+ICsJY21kX2J1ZltpKytdID0g dmFkZHIgJiAweEZGRkZGRkZDOwo+ICsJY21kX2J1ZltpKytdID0gKHZhZGRyID4+IDMyKSAmIDB4 RkZGRjsgLyogYml0cyAzMjo0NyAqLwo+ICsKPiArCWNtZF9idWZbaSsrXSA9IGRhdGE7Cj4gKwlp ZiAoZW5kKSB7Cj4gKwkJY21kX2J1ZltpKytdID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiArCQlj bWRfYnVmW2krK10gPSAwOwo+ICsJfQo+ICsKPiArCXJldHVybihpICogc2l6ZW9mKHVpbnQzMl90 KSk7Cj4gK30KPiArCj4gKy8qIGdlbV9zdG9yZV9kYXRhCj4gKyAqIHBvcHVsYXRlIGJhdGNoIGJ1 ZmZlciB3aXRoIE1JX1NUT1JFX0RXT1JEX0lNTSBjb21tYW5kCj4gKyAqIFRoaXMgb25lIGZpbGxz IHVwIHJlbG9jIGJ1ZmZlciBhcyB3ZWxsCj4gKyAqIEBmZDogZHJtIGZpbGUgZGVzY3JpcHRvcgo+ ICsgKiBAY21kX2J1ZjogYmF0Y2ggYnVmZmVyCj4gKyAqIEBkYXRhOiBkYXRhIHRvIGJlIHN0b3Jl IGF0IGRlc3RpbmF0aW9uCj4gKyAqIEByZWxvYyAtIHJlbG9jYXRpb24gZW50cnkKPiArICogQGVu ZDogd2hldGhlciB0byBlbmQgYmF0Y2ggYnVmZmVyIG9yIG5vdAo+ICsqLwo+ICtzdGF0aWMgaW50 IGdlbV9zdG9yZV9kYXRhKGludCBmZCwgdWludDMyX3QgKmNtZF9idWYsCj4gKwkJCSAgdWludDMy X3QgaGFuZGxlLCB1aW50MzJfdCBkYXRhLAo+ICsJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVs b2NhdGlvbl9lbnRyeSAqcmVsb2MsCj4gKwkJCSAgYm9vbCBlbmQpCj4gK3sKPiArCWludCBpID0g MDsKPiArCj4gKwljbWRfYnVmW2krK10gPSBNSV9TVE9SRV9EV09SRF9JTU07Cj4gKwljbWRfYnVm W2krK10gPSAwOyAvKiBsb3dlciAzMSBiaXRzIG9mIDQ4IGJpdCBhZGRyZXNzIC0gMCByZWxvYyBu ZWVkZWQgKi8KPiArCWNtZF9idWZbaSsrXSA9IDA7IC8qIHVwcGVyIDE1IGJpdHMgb2YgNDggYml0 IGFkZHJlc3MgLSAwIHJlbG9jIG5lZWRlZCAqLwo+ICsJcmVsb2MtPm9mZnNldCA9IDEgKiBzaXpl b2YodWludDMyX3QpOwo+ICsJcmVsb2MtPmRlbHRhID0gMDsKPiArCXJlbG9jLT50YXJnZXRfaGFu ZGxlID0gaGFuZGxlOwo+ICsJcmVsb2MtPnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9S RU5ERVI7Cj4gKwlyZWxvYy0+d3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsK PiArCXJlbG9jLT5wcmVzdW1lZF9vZmZzZXQgPSAwOwo+ICsJY21kX2J1ZltpKytdID0gZGF0YTsK PiArCWlmIChlbmQpIHsKPiArCQljbWRfYnVmW2krK10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ ICsJCWNtZF9idWZbaSsrXSA9IDA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIChpICogc2l6ZW9mKHVp bnQzMl90KSk7Cj4gK30KPiArCj4gKy8qIHNldHVwX2V4ZWNidWZmZXIKPiArICogaGVscGVyIGZv ciBidWZmZXIgZXhlY3V0aW9uCj4gKyAqIEBleGVjYnVmIC0gcG9pbnRlciB0byBleGVjYnVmZmVy Cj4gKyAqIEBleGVjX29iamVjdCAtIHBvaW50ZXIgdG8gZXhlYyBvYmplY3QyIHN0cnVjdAo+ICsg KiBAcmluZyAtIHJpbmcgdG8gYmUgdXNlZAo+ICsgKiBAYnVmZmVyX2NvdW50IC0gaG93IG1hbnUg YnVmZmVycyB0byBzdWJtaXQKPiArICogQGJhdGNoX2xlbmd0aCAtIGxlbmd0aCBvZiBiYXRjaCBi dWZmZXIKPiArKi8KPiArc3RhdGljIHZvaWQgc2V0dXBfZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjYnVmLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY19vYmplY3QyICpleGVjX29iamVjdCwKPiArCQkJICAgICBpbnQgcmluZywgaW50IGJ1 ZmZlcl9jb3VudCwgaW50IGJhdGNoX2xlbmd0aCkKPiArewo+ICsJZXhlY2J1Zi0+YnVmZmVyc19w dHIgPSAodWludDY0X3QpZXhlY19vYmplY3Q7Cj4gKwlleGVjYnVmLT5idWZmZXJfY291bnQgPSBi dWZmZXJfY291bnQ7Cj4gKwlleGVjYnVmLT5iYXRjaF9zdGFydF9vZmZzZXQgPSAwOwo+ICsJZXhl Y2J1Zi0+YmF0Y2hfbGVuID0gYmF0Y2hfbGVuZ3RoOwo+ICsJZXhlY2J1Zi0+Y2xpcHJlY3RzX3B0 ciA9IDA7Cj4gKwlleGVjYnVmLT5udW1fY2xpcHJlY3RzID0gMDsKPiArCWV4ZWNidWYtPkRSMSA9 IDA7Cj4gKwlleGVjYnVmLT5EUjQgPSAwOwo+ICsJZXhlY2J1Zi0+ZmxhZ3MgPSByaW5nOwo+ICsJ aTkxNV9leGVjYnVmZmVyMl9zZXRfY29udGV4dF9pZCgqZXhlY2J1ZiwgMCk7Cj4gKwlleGVjYnVm LT5yc3ZkMiA9IDA7Cj4gK30KPiArCj4gKy8qIHN1Ym1pdF9hbmRfc3luYwo+ICsgKiBIZWxwZXIg ZnVuY3Rpb24gZm9yIGV4ZWMgYW5kIHN5bmMgZnVuY3Rpb25zCj4gKyAqIEBmZCAtIGRybSBmZAo+ ICsgKiBAZXhlY2J1ZiAtIHBvaW50ZXIgdG8gZXhlY2J1ZmZlcgo+ICsgKiBAYmF0Y2hfYnVmX2hh bmRsZSAtIGJhdGNoIGJ1ZmZlciBoYW5kbGUKPiArKi8KPiArc3RhdGljIHZvaWQgc3VibWl0X2Fu ZF9zeW5jKGludCBmZCwgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlY2J1ZiwK PiArCQkJICAgIHVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUpCj4gK3sKPiArCWdlbV9leGVjYnVm KGZkLCBleGVjYnVmKTsKPiArCWdlbV9zeW5jKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArfQo+ ICsKPiArLyogZ2VtX3VzZXJwdHJfc3luYwo+ICsgKiBoZWxwZXIgZm9yIHN5bmNpbmcgdG8gQ1BV IGRvbWFpbiAtIGNvcHkvcGFzdGUgZnJvbSB1c2VyYmxpdAo+ICsgKiBAZmQgLSBkcm0gZmQKPiAr ICogQGhhbmRsZSAtIGJ1ZmZlciBoYW5kbGUgdG8gc3luYwo+ICsqLwo+ICtzdGF0aWMgdm9pZCBn ZW1fdXNlcnB0cl9zeW5jKGludCBmZCwgdWludDMyX3QgaGFuZGxlKQo+ICt7Cj4gKwlnZW1fc2V0 X2RvbWFpbihmZCwgaGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5f Q1BVKTsKPiArfQo+ICsKPiArCj4gKy8qIGdlbV9waW5fdXNlcnB0cl90ZXN0Cj4gKyAqIFRoaXMg dGVzdCB3aWxsIGNyZWF0ZSBhIHNoYXJlZCBidWZmZXIsIGFuZCBjcmVhdGUgYSBjb21tYW5kCj4g KyAqIGZvciBHUFUgdG8gd3JpdGUgZGF0YSBpbiBpdAo+ICsgKiBDUFUgd2lsbCByZWFkIGFuZCBt YWtlIHN1cmUgZXhwZWN0ZWQgdmFsdWUgaXMgb2J0YWluZWQKPiArICogTWFsbG9jIGEgNEsgYnVm ZmVyCj4gKyAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9j dGwKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3Jk IG9mIGJ1ZmZlcgo+ICsgKiBVc2UgMHgxMDAwIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVz cyBpbiBiYXRjaCBidWZmZXIKPiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4 ZWMgb2JqZWN0Cj4gKyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byAweDEwMDAKPiAr ICogU3VibWl0IGV4ZWNidWZmZXIKPiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGlu IHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5f dXNlcnB0cl90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiAr CWludCBmZDsKPiArCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ICsJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgZXhlY19vYmplY3QyWzJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW1NUT1JFX0JB VENIX0JVRkZFUl9TSVpFICsgMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFy ZWRfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRh ID0gMHgxMjM0NTY3ODsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHgxMDAwOwo+ICsK PiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1 c2VzX2Z1bGxfcHBndHQoZmQsIEFMSUFTSU5HX1BQR1RUKSk7Cj4gKwliYXRjaF9idWZfaGFuZGxl ID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNwdSBidWZmZXIg Ki8KPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCQo+ ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2Vy cHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCQkgQk9fU0laRSk7Cj4gKwo+ ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ICsJbGVu ID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIHBpbm5pbmdfb2Zmc2V0LCBk YXRhLCB0cnVlKTsKPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hf YnVmZmVyLCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJc2V0 dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gKwkJICAg ICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ICsJc2V0dXBfZXhlY19v YmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJcmlu ZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1Ziwg ZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhl Y2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRf YnVmX2hhbmRsZSk7Cj4gKwo+ICsJLyogQ2hlY2sgaWYgZHJpdmVyIHBpbm5lZCB0aGUgYnVmZmVy IGFzIHJlcXVlc3RlZCAqLwo+ICsJaWd0X2ZhaWxfb25fZihleGVjX29iamVjdDJbMF0ub2Zmc2V0 ICE9IHBpbm5pbmdfb2Zmc2V0LAo+ICsJCQkiXG5GYWlsZWQgdG8gcGluIGF0IHJlcXVlc3RlZCBv ZmZzZXQiKTsKPiArCS8qIGNoZWNrIG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcyAqLwo+ ICsJaWd0X2ZhaWxfb25fZihzaGFyZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gKwkJICAgICAgIlxu Q1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BVIHdyaXRlLFwKPiArCQkJZXhwZWN0ZWQ6IDB4JXgs IGdvdDogMHgleFxuIiwKPiArCQkJZGF0YSwgc2hhcmVkX2J1ZmZlclswXSk7Cj4gKwo+ICsJZ2Vt X2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1 Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ ICsKPiArLyogZ2VtX3Bpbl9ibwo+ICsgKiBUaGlzIHRlc3Qgd2lsbCB0ZXN0IHNvZnRwaW5uaW5n IG9mIGEgZ2VtIGJ1ZmZlciBvYmplY3QKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIENy ZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBidWZmZXIK PiArICogVXNlIDB4MTAwMCBhZGRyZXNzIGFzIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gYmF0Y2gg YnVmZmVyCj4gKyAqIFNldCBFWEVDX09CSkVDVF9QSU5ORUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ ICsgKiBTZXQgJ29mZnNldCcgaW4gZXhlYyBvYmplY3QgdG8gMHgxMDAwCj4gKyAqIFN1Ym1pdCBl eGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBwaW5uZWQgb2Zmc2V0IG1hdGNoZXMgdGhlIHJl cXVlc3QKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9ib190ZXN0KHZvaWQpCj4gK3sKPiAr CWludCBmZDsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiAr CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVp bnQzMl90IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJdOwo+ICsJdWlu dDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgdW5zaGFyZWRfYnVmX2hhbmRsZTsKPiArCXN0cnVjdCBk cm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1s0XTsKPiArCWludCByaW5nLCBsZW47 Cj4gKwl1aW50MzJfdCB2YWx1ZTsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4 Owo+ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDEwMDA7Cj4gKwo+ICsJZmQgPSBkcm1f b3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0 dChmZCwgQUxJQVNJTkdfUFBHVFQpKTsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRl KGZkLCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgZ2VtIGJ1ZmZlciAqLwo+ICsJdW5zaGFy ZWRfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsJCj4gKwkvKiBjcmVh dGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlsZW4gPSBnZW1fc3Rv cmVfZGF0YShmZCwgYmF0Y2hfYnVmZmVyLCB1bnNoYXJlZF9idWZfaGFuZGxlLCBkYXRhLAo+ICsJ CQkJcmVsb2MsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBi YXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4g KwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCB1bnNoYXJlZF9idWZfaGFuZGxlLAo+ ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNldHVw X2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsJ ZXhlY19vYmplY3QyWzFdLnJlbG9jYXRpb25fY291bnQgPSAxOwo+ICsJZXhlY19vYmplY3QyWzFd LnJlbG9jc19wdHIgPSAodWludDY0X3QpcmVsb2M7Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhFQ19S RU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCBy aW5nLCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVm X2hhbmRsZSk7Cj4gKwo+ICsJLyogQ2hlY2sgaWYgZHJpdmVyIHBpbm5lZCB0aGUgYnVmZmVyIGFz IHJlcXVlc3RlZCAqLwo+ICsJaWd0X2ZhaWxfb25fZihleGVjX29iamVjdDJbMF0ub2Zmc2V0ICE9 IHBpbm5pbmdfb2Zmc2V0LAo+ICsJCQkiXG5GYWlsZWQgdG8gcGluIGF0IHJlcXVlc3RlZCBvZmZz ZXQiKTsKPiArCWdlbV9yZWFkKGZkLCB1bnNoYXJlZF9idWZfaGFuZGxlLCAwLCAodm9pZCopJnZh bHVlLCA0KTsKPiArCWlndF9hc3NlcnQodmFsdWUgPT0gZGF0YSk7Cj4gKwo+ICsJZ2VtX2Nsb3Nl KGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgdW5zaGFyZWRfYnVmX2hh bmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gK30KPiArCj4gKwo+ICsvKiBnZW1fbXVsdGlwbGVfcHJv Y2Vzc190ZXN0Cj4gKyAqIFJ1biBiYXNpYyB0ZXN0IHNpbXVsdGFuZW91c2x5IHdpdGggbXVsdGlw bGUgcHJvY2Vzc2VzCj4gKyAqIFRoaXMgd2lsbCB0ZXN0IHBpbm5pbmcgc2FtZSBWQSBzZXBhcmF0 ZWx5IGluIGVhY2ggcHJvY2Vzcwo+ICsKPiArICogZm9yaygpOwo+ICsgKiBFeGVjdXRlIGJhc2lj IHRlc3QgaW4gcGFyZW50L2NoaWxkIHByb2Nlc3Nlcwo+ICsqLwo+ICsjZGVmaW5lIE1BWF9OVU1f UFJPQ0VTU0VTIDEwCj4gKwo+ICtzdGF0aWMgdm9pZCBnZW1fbXVsdGlwbGVfcHJvY2Vzc190ZXN0 KHZvaWQpCj4gK3sKPiArCWlndF9mb3JrKGNoaWxkLCBNQVhfTlVNX1BST0NFU1NFUykgewo+ICsJ CWdlbV9waW5fdXNlcnB0cl90ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfd2FpdGNoaWxkcmVuKCk7Cj4g K30KPiArCj4gKwo+ICsvKiBnZW1fcmVwaW5fdGVzdAo+ICsgKiBUaGlzIHRlc3QgdHJpZXMgdG8g cmVwaW4gYSBidWZmZXIgYXQgYSBwcmV2aW91c2x5IHBpbm5lZCB2bWEKPiArICogZnJvbSBhIGRp ZmZlcmVudCBleGVjYnVmLgo+ICsgKiBNYWxsb2MgYSA0SyBidWZmZXIKPiArICogU2hhcmUgYnVm ZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0 Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAqIFVz ZSAweDEwMDAgYWRkcmVzcyBhcyBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIGJhdGNoIGJ1ZmZlcgo+ ICsgKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmplY3QKPiArICogU2V0 ICdvZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIDB4MTAwMCBWTUEKPiArICogU3VibWl0IGV4ZWNi dWZmZXIKPiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIg bWF0Y2hlcyBEQVRBCj4gKwo+ICsgKiBDcmVhdGUgc2Vjb25kIHNoYXJlZCBidWZmZXIKPiArICog Rm9sbG93IGFsbCBzdGVwcyBhYm92ZQo+ICsgKiBFeGVjcHQsIGZvciBvZmZzZXQsIHVzZSBWTUEg b2YgZmlyc3QgYnVmZmVyIGFib3ZlCj4gKyAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIFZlcmlm eSB2YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzZWNvbmQgc2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERB VEEKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3JlcGluX3Rlc3Qodm9pZCkKPiArewo+ICsJaTkx NV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyMTsKPiAr CWludCBmZDsKPiArCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ICsJdWludDMyX3QgKnNoYXJl ZF9idWZmZXIxOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzJdOwo+ICsJ dWludDMyX3QgYmF0Y2hfYnVmZmVyW1NUT1JFX0JBVENIX0JVRkZFUl9TSVpFICsgMl07Cj4gKwl1 aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9o YW5kbGUxOwo+ICsJaW50IHJpbmcsIGxlbjsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEy MzQ1Njc4Owo+ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDEwMDA7Cj4gKwo+ICsJLyog Q3JlYXRlIGdlbSBvYmplY3QgKi8KPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRF TCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFMSUFTSU5HX1BQR1RUKSk7 Cj4gKwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsK PiArCS8qIGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgZmlyc3QgZWxlbWVudHMgdG8gMHgwICovCj4g KwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwlzaGFyZWRf YnVmZmVyMSA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJc2hhcmVkX2J1ZmZlclsw XSA9IDB4MDsKPiArCXNoYXJlZF9idWZmZXIxWzBdID0gMHgwOwo+ICsKPiArCS8qIHNoYXJlIHdp dGggR1BVIGFuZCBnZXQgaGFuZGxlcyAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3Vz ZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLAo+ICsJCQkJCSBCT19TSVpFKTsKPiAr CXNoYXJlZF9idWZfaGFuZGxlMSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIxLCBzaGFyZWRf YnVmZmVyMSwKPiArCQkJCQkgIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1 ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiArCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2bShm ZCwgYmF0Y2hfYnVmZmVyLCBwaW5uaW5nX29mZnNldCwgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1fd3Jp dGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkv KiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVj dDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQs IHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJh dGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwg bGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUp Owo+ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsKPiArCWln dF9hc3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNldCA9PSBwaW5uaW5nX29mZnNldCk7Cj4gKwlp Z3RfYXNzZXJ0KCpzaGFyZWRfYnVmZmVyID09IGRhdGEpOwo+ICsKPiArCS8qIFNlY29uZCBidWZm ZXIgKi8KPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8K PiArCXBpbm5pbmdfb2Zmc2V0ID0gZXhlY19vYmplY3QyWzBdLm9mZnNldDsKPiArCWxlbiA9IGdl bV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBwaW5uaW5nX29mZnNldCwgZGF0YSwg dHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZl ciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCS8qIFBpbiBh dCBzaGFyZWRfYnVmZmVyLCBub3Qgc2hhcmVkX2J1ZmZlcjEgKi8KPiArCS8qIFdlIGFyZSByZXF1 ZXN0aW5nIGFkZHJlc3Mgd2hlcmUgYW5vdGhlciBidWZmZXIgd2FzIHBpbm5lZCBwcmV2aW91c2x5 ICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRs ZTEsCj4gKwkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ICsJ c2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7 Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZl cigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9z eW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fdXNlcnB0cl9zeW5j KGZkLCBzaGFyZWRfYnVmX2hhbmRsZTEpOwo+ICsKPiArCWlndF9hc3NlcnQoZXhlY19vYmplY3Qy WzBdLm9mZnNldCA9PSBwaW5uaW5nX29mZnNldCk7Cj4gKwlpZ3RfYXNzZXJ0KCpzaGFyZWRfYnVm ZmVyMSA9PSBkYXRhKTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ ICsJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwo+ ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcjEpOwo+ICt9Cj4g Kwo+ICsKPiArLyogZ2VtX3JlcGluX292ZXJsYXBfdGVzdAo+ICsgKiBUaGlzIHRlc3Qgd2lsbCBh dHRlbXB0IHRvIHBpbiB0d28gYnVmZmVycyBhdCB0aGUgc2FtZSBWTUEgYXMgcGFydCBvZiB0aGUg c2FtZQo+ICsgICBleGVjYnVmZmVyIG9iamVjdAo+ICsKPiArICogTWFsbG9jIGEgNEsgYnVmZmVy Cj4gKyAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwK PiArICogQ3JlYXRlIHNlY29uZCBzaGFyZWQgYnVmZmVyCj4gKyAqIENyZWF0ZSBiYXRjaCBidWZm ZXIgdG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBlYWNoIGJ1ZmZlcgo+ICsgKiBVc2Ug c2FtZSB2aXJ0dWFsIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVzc2VzIGluIGJhdGNoIGJ1 ZmZlcgo+ICsgKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gYm90aCBleGVjIG9iamVj dHMKPiArICogU2V0ICdvZmZzZXQnIGluIGJvdGggZXhlYyBvYmplY3RzIHRvIHNhbWUgVk1BCj4g KyAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIENvbW1hbmQgc2hvdWxkIHJldHVybiBFSU5WQUws IHNpbmNlIHdlIGFyZSB0cnlpbmcgdG8gcGluIHRvIHNhbWUgVk1BCj4gKyovCj4gK3N0YXRpYyB2 b2lkIGdlbV9waW5fb3ZlcmxhcF90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIg dXNlcnB0cjsKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjE7Cj4gKwlpbnQgZmQsIHJldDsK PiArCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXIx Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzNdOwo+ICsJdWludDMyX3Qg c2hhcmVkX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlMTsKPiArCWludCByaW5nLCBsZW47 Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4MTAwMDsKPiArCj4gKwlmZCA9IGRybV9v cGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0 KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ICsKPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVt X2J1ZmZlcihCT19TSVpFKTsKPiArCXNoYXJlZF9idWZmZXIxID0gY3JlYXRlX21lbV9idWZmZXIo Qk9fU0laRSAqIDIpOwo+ICsKPiArCS8qIHNoYXJlIHdpdGggR1BVICovCj4gKwlzaGFyZWRfYnVm X2hhbmRsZSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsCj4gKwkJ CQkJIEJPX1NJWkUpOwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUxID0gaW5pdF91c2VycHRyKGZkLCAm dXNlcnB0cjEsIHNoYXJlZF9idWZmZXIxLAo+ICsJCQkJCSAgQk9fU0laRSAqIDIpOwo+ICsKPiAr CS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2Jq ZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gKwkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5F RCwgcGlubmluZ19vZmZzZXQpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwg c2hhcmVkX2J1Zl9oYW5kbGUxLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5p bmdfb2Zmc2V0KTsKPiArCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCj4gKwlzZXR1 cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7Cj4gKwo+ ICsJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMiwgJmV4 ZWNidWYpOwo+ICsKPiArCS8qIGV4cGVjdCB0byBmYWlsICovCj4gKwlpZ3RfYXNzZXJ0X25lcShy ZXQsIDApOwo+ICsJaWd0X2Fzc2VydChlcnJubyA9PSBFSU5WQUwpOwo+ICsKPiArCWNsb3NlKGZk KTsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIxKTsKPiAr fQo+ICsKPiArLyogZ2VtX3NvZnRwaW5fc3RyZXNzX3Rlc3QKPiArICogU3RyZXNzIHRlc3Qgd2hp Y2ggY3JlYXRlcyAxMEsgYnVmZmVycyBhbmQgc2hhcmVzIHdpdGggR1BVCj4gKyAqIENyZWF0ZSAx MDBLIHVpbnQzMiBidWZmZXJzIG9mIHNpemUgNEsgZWFjaAo+ICsgKiBTaGFyZSB3aXRoIEdQVSB1 c2luZyB1c2VycHRyIGlvY3RsCj4gKyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFU QSBpbiBmaXJzdCBlbGVtZW50IG9mIGVhY2ggYnVmZmVyCj4gKyAqIFBpbiBlYWNoIGJ1ZmZlciB0 byB2YXJ5aW5nIGFkZHJlc3NlcyBzdGFydGluZyBmcm9tIDB4ODAwMDAwMDAwMDAwIGdvaW5nIGJl bG93Cj4gKyAqIEV4ZWN1dGUgQmF0Y2ggQnVmZmVyIG9uIEJsaXQgcmluZyBTVFJFU1NfTlVNX0xP T1BTIHRpbWVzCj4gKyAqIFZhbGlkYXRlIGV2ZXJ5IGJ1ZmZlciBoYXMgREFUQSBpbiBmaXJzdCBl bGVtZW50Cj4gKyAqIFJpbnNlIGFuZCBSZXBlYXQgb24gUmVuZGVyIHJpbmcKPiArKi8KPiArI2Rl ZmluZSBTVFJFU1NfTlVNX0JVRkZFUlMgMTAwMDAwCj4gKyNkZWZpbmUgU1RSRVNTX05VTV9MT09Q UyAxMDAKPiArI2RlZmluZSBTVFJFU1NfU1RPUkVfQ09NTUFORFMgNCAqIFNUUkVTU19OVU1fQlVG RkVSUwo+ICsKPiArc3RhdGljIHZvaWQgZ2VtX3NvZnRwaW5fc3RyZXNzX3Rlc3Qodm9pZCkKPiAr ewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaW50IGZkOwo+ICsJdWludDMyX3Qg KipzaGFyZWRfYnVmZmVyOwo+ICsJdWludDMyX3QgKnNoYXJlZF9oYW5kbGU7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNfb2JqZWN0MiAqZXhlY19vYmplY3QyOwo+ICsJdWludDMyX3QgKmJhdGNoX2J1ZmZlcjsK PiArCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJaW50 IGJ1ZiwgbG9vcDsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHg4MDAwMDAwMDAwMDA7 Cj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1 aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF80OF9CSVRfUFBHVFQpKTsKPiArCj4gKwo+ICsJ LyogQWxsb2NhdGUgYmxvYnMgZm9yIGFsbCBkYXRhIHN0cnVjdHVyZXMgKi8KPiArCXNoYXJlZF9o YW5kbGUgPSBjYWxsb2MoU1RSRVNTX05VTV9CVUZGRVJTLCBzaXplb2YodWludDMyX3QpKTsKPiAr CXNoYXJlZF9idWZmZXIgPSBjYWxsb2MoU1RSRVNTX05VTV9CVUZGRVJTLCBzaXplb2YodWludDMy X3QgKikpOwo+ICsJZXhlY19vYmplY3QyID0gY2FsbG9jKFNUUkVTU19OVU1fQlVGRkVSUyArIDEs Cj4gKwkJCQlzaXplb2Yoc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIpKTsKPiArCS8q IDQgZHdvcmRzIHBlciBidWZmZXIgKyAyIGZvciB0aGUgZW5kIG9mIGJhdGNoYnVmZmVyICovCj4g KwliYXRjaF9idWZmZXIgPSBjYWxsb2MoU1RSRVNTX1NUT1JFX0NPTU1BTkRTICsgMiwgc2l6ZW9m KHVpbnQzMl90KSk7Cj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgKFNUUkVT U19TVE9SRV9DT01NQU5EUyArIDIpKjQpOwo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZl ciB3aXRoIHdyaXRlIGNvbW1hbmRzICovCj4gKwlsZW4gPSAwOwo+ICsJZm9yKGJ1ZiA9IDA7IGJ1 ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKyspIHsKPiArCQlzaGFyZWRfYnVmZmVyW2J1Zl0g PSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCQkqc2hhcmVkX2J1ZmZlcltidWZdID0g MHhGRkZGRkZGRjsKPiArCj4gKwkJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCQlzaGFyZWRfaGFu ZGxlW2J1Zl0gPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLAo+ICsJCQkJCQkgIHNoYXJlZF9i dWZmZXJbYnVmXSwKPiArCQkJCQkJICBCT19TSVpFKTsKPiArCj4gKwkJc2V0dXBfZXhlY19vYmoo JmV4ZWNfb2JqZWN0MltidWZdLCBzaGFyZWRfaGFuZGxlW2J1Zl0sCj4gKwkJCSAgICAgICBFWEVD X09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCQlsZW4gKz0gZ2VtX3N0b3JlX2Rh dGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIgKyAobGVuLzQpLAo+ICsJCQkJCSAgcGlubmluZ19vZmZz ZXQsIGJ1ZiwKPiArCQkJCQkgIChidWYgPT0gU1RSRVNTX05VTV9CVUZGRVJTLTEpPyBcCj4gKwkJ CQkJICB0cnVlOmZhbHNlKTsKPiArCQkKPiArCQkvKiBkZWNyZW1lbnRhbCA0SyBhbGlnbmVkIGFk ZHJlc3MgKi8KPiArCQlwaW5uaW5nX29mZnNldCAtPSBBTElHTihCT19TSVpFLCA0MDk2KTsKPiAr CX0KPiArCj4gKwkvKiBzZXR1cCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJZ2VtX3dyaXRlKGZkLCBi YXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwlzZXR1cF9leGVjX29i aigmZXhlY19vYmplY3QyW1NUUkVTU19OVU1fQlVGRkVSU10sIGJhdGNoX2J1Zl9oYW5kbGUsCj4g KwkJICAgICAgIDAsIDApOwo+ICsKPiArCS8qIFdlIHdhbnQgdG8gcnVuIHRoaXMgb24gQkxUIHJp bmcgaWYgcG9zc2libGUgKi8KPiArCWlmIChIQVNfQkxUX1JJTkcoaW50ZWxfZ2V0X2RybV9kZXZp ZChmZCkpKSB7Cj4gKwkJcmluZyA9IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJCXNldHVwX2V4ZWNi dWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywKPiArCQkJCSBTVFJFU1NfTlVNX0JV RkZFUlMgKyAxLCBsZW4pOwo+ICsKPiArCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgU1RSRVNTX05V TV9MT09QUzsgbG9vcCsrKSB7Cj4gKwkJCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJh dGNoX2J1Zl9oYW5kbGUpOwo+ICsJCQkvKiBTZXQgcGlubmluZyBvZmZzZXQgYmFjayB0byBvcmln aW5hbCB2YWx1ZSAqLwo+ICsJCQlwaW5uaW5nX29mZnNldCA9IDB4ODAwMDAwMDAwMDAwOwo+ICsJ CQlmb3IoYnVmID0gMDsgYnVmIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBidWYrKykgewo+ICsJCQkJ Z2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2hhbmRsZVtidWZdKTsKPiArCQkJCWlndF9hc3Nl cnQoZXhlY19vYmplY3QyW2J1Zl0ub2Zmc2V0ID09IHBpbm5pbmdfb2Zmc2V0KTsKPiArCQkJCWln dF9mYWlsX29uX2YoKnNoYXJlZF9idWZmZXJbYnVmXSAhPSBidWYsIFwKPiArCQkJCSJNaXNtYXRj aCBpbiBidWZmZXIgJWQsIGl0ZXJhdGlvbiAlZDogMHglMDhYXG4iLCBcCj4gKwkJCQlidWYsIGxv b3AsICpzaGFyZWRfYnVmZmVyW2J1Zl0pOwo+ICsJCQkJcGlubmluZ19vZmZzZXQgLT0gQUxJR04o Qk9fU0laRSwgNDA5Nik7Cj4gKwkJCX0KPiArCQkJLyogUmVzZXQgdGhlIGJ1ZmZlciBlbnRyaWVz IGZvciBuZXh0IGl0ZXJhdGlvbiAqLwo+ICsJCQlmb3IoYnVmID0gMDsgYnVmIDwgU1RSRVNTX05V TV9CVUZGRVJTOyBidWYrKykgewo+ICsJCQkJKnNoYXJlZF9idWZmZXJbYnVmXSA9IDB4RkZGRkZG RkY7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogTm93IFJlbmRlciBSaW5nICovCj4g KwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYs IGV4ZWNfb2JqZWN0MiwgcmluZywKPiArCQkJIFNUUkVTU19OVU1fQlVGRkVSUyArIDEsIGxlbik7 Cj4gKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgU1RSRVNTX05VTV9MT09QUzsgbG9vcCsrKSB7Cj4g KwkJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwkJ cGlubmluZ19vZmZzZXQgPSAweDgwMDAwMDAwMDAwMDsKPiArCQlmb3IoYnVmID0gMDsgYnVmIDwg U1RSRVNTX05VTV9CVUZGRVJTOyBidWYrKykgewo+ICsJCQlnZW1fdXNlcnB0cl9zeW5jKGZkLCBz aGFyZWRfaGFuZGxlW2J1Zl0pOwo+ICsJCQlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MltidWZdLm9m ZnNldCA9PSBwaW5uaW5nX29mZnNldCk7Cj4gKwkJCWlndF9mYWlsX29uX2YoKnNoYXJlZF9idWZm ZXJbYnVmXSAhPSBidWYsIFwKPiArCQkJIk1pc21hdGNoIGluIGJ1ZmZlciAlZCwgXAo+ICsJCQlp dGVyYXRpb24gJWQ6IDB4JTA4WFxuIiwgYnVmLCBsb29wLCAqc2hhcmVkX2J1ZmZlcltidWZdKTsK PiArCQkJcGlubmluZ19vZmZzZXQgLT0gQUxJR04oQk9fU0laRSwgNDA5Nik7Cj4gKwkJfQo+ICsJ CS8qIFJlc2V0IHRoZSBidWZmZXIgZW50cmllcyBmb3IgbmV4dCBpdGVyYXRpb24gKi8KPiArCQlm b3IoYnVmID0gMDsgYnVmIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBidWYrKykgewo+ICsJCQkqc2hh cmVkX2J1ZmZlcltidWZdID0gMHhGRkZGRkZGRjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZm9yKGJ1 ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKyspIHsKPiArCQlnZW1fY2xvc2Uo ZmQsIHNoYXJlZF9oYW5kbGVbYnVmXSk7Cj4gKwkJZnJlZShzaGFyZWRfYnVmZmVyW2J1Zl0pOwo+ ICsJfQo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWNsb3NlKGZkKTsK PiArCj4gKwlmcmVlKHNoYXJlZF9oYW5kbGUpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiAr CWZyZWUoZXhlY19vYmplY3QyKTsKPiArCWZyZWUoYmF0Y2hfYnVmZmVyKTsKPiArfQo+ICsKPiAr LyogZ2VtX3dyaXRlX211bHRpcGFnZV9idWZmZXIKPiArICogQ3JlYXRlIGEgYnVmZmVyIHNwYW5u aW5nIG11bHRpcGxlIHBhZ2VzLCBhbmQgc2hhcmUgd2l0aCBHUFUuCj4gKyAqIFdyaXRlIHRvIGV2 ZXJ5IGVsZW1lbnQgb2YgdGhlIGJ1ZmZlcgo+ICsgKiBhbmQgdmVyaWZ5IGNvcnJlY3QgY29udGVu dHMuCj4gKwo+ICsgKiBDcmVhdGUgOEsgYnVmZmVyCj4gKyAqIFNoYXJlIHdpdGggR1BVIHVzaW5n IHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIGlu IGFsbCBlbGVtZW50cyBvZiBidWZmZXIKPiArICogRXhlY3V0ZSBCYXRjaCBCdWZmZXIKPiArICog VmFsaWRhdGUgZXZlcnkgZWxlbWVudCBoYXMgREFUQQo+ICsqLwo+ICsKPiArI2RlZmluZSBEV09S RF9TSVpFIHNpemVvZih1aW50MzJfdCkKPiArI2RlZmluZSBCQl9TSVpFICgoTVVMVElQQUdFX0JP X1NJWkUgLyBEV09SRF9TSVpFKSAqIFNUT1JFX0JBVENIX0JVRkZFUl9TSVpFKSArIDIKPiArI2Rl ZmluZSBOVU1fRFdPUkRTIChNVUxUSVBBR0VfQk9fU0laRS9zaXplb2YodWludDMyX3QpKQo+ICtz dGF0aWMgdm9pZCBnZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZlcl90ZXN0KHZvaWQpCj4gK3sKPiAr CWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWludCBmZDsKPiArCXVpbnQzMl90ICpzaGFy ZWRfYnVmZmVyOwo+ICsJdWludDMyX3Qgc2hhcmVkX2hhbmRsZTsKPiArCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltCQl9TSVpF XTsKPiArCXVpbnQzMl90IGJhdGNoX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuLCBqOwo+ ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQ9MHgxMDAwOwo+ICsJdWludDY0X3QgdmFkZHI7Cj4g Kwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJl KHVzZXNfZnVsbF9wcGd0dChmZCwgQUxJQVNJTkdfUFBHVFQpKTsKPiArCj4gKwliYXRjaF9idWZf aGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZW9mKGJhdGNoX2J1ZmZlcikpOwo+ICsJc2hhcmVk X2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKE1VTFRJUEFHRV9CT19TSVpFKTsKPiArCj4gKwls ZW4gPSAwOwo+ICsJbWVtc2V0KGJhdGNoX2J1ZmZlciwgMCwgc2l6ZW9mKGJhdGNoX2J1ZmZlcikp Owo+ICsJbWVtc2V0KHNoYXJlZF9idWZmZXIsIDAsIE1VTFRJUEFHRV9CT19TSVpFKTsKPiArCj4g KwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJc2hhcmVkX2hhbmRsZSA9IGluaXRfdXNlcnB0cihm ZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsCj4gKwkJCQkgICAgIE1VTFRJUEFHRV9CT19TSVpF KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9oYW5kbGUsCj4g KwkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ICsKPiArCS8q IGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmRzICovCj4gKwl2YWRkciA9 IHBpbm5pbmdfb2Zmc2V0Owo+ICsJZm9yKGo9MDsgajwgTlVNX0RXT1JEUzsgaisrKSB7Cj4gKwkJ bGVuICs9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyICsgKGxlbi80KSwgdmFk ZHIsCj4gKwkJCQkJICBqLAo+ICsJCQkJCSAgKGogPT0gTlVNX0RXT1JEUyAtIDEpID8gdHJ1ZTpm YWxzZSk7Cj4gKwkJdmFkZHIgKz0gc2l6ZW9mKHNoYXJlZF9idWZmZXJbMF0pOyAgLyogNCBieXRl cyAqLwo+ICsJfQo+ICsKPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0 Y2hfYnVmZmVyLCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJ c2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7 Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwlzZXR1cF9leGVjYnVmZmVyKCZl eGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7Cj4gKwlzdWJtaXRfYW5kX3N5bmMo ZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV91c2VycHRyX3N5bmMoZmQs IHNoYXJlZF9oYW5kbGUpOwo+ICsKPiArCWlndF9hc3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNl dCA9PSBwaW5uaW5nX29mZnNldCk7Cj4gKwlmb3IoaiA9IDA7IGogPCAoTVVMVElQQUdFX0JPX1NJ WkUvc2l6ZW9mKHVpbnQzMl90KSk7IGorKykgewo+ICsJCWlndF9mYWlsX29uX2Yoc2hhcmVkX2J1 ZmZlcltqXSAhPSBqLAo+ICsJCSJNaXNtYXRjaCBpbiBpbmRleCAlZDogMHglMDhYXG4iLCBqLCBz aGFyZWRfYnVmZmVyW2pdKTsKPiArCX0KPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9o YW5kbGUpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRfaGFuZGxlKTsKPiArCWNsb3NlKGZkKTsK PiArCj4gKwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICt9Cj4gKwo+ICsvKiBnZW1fcGluX2ludmFs aWRfdm1hX3Rlc3QKPiArICogVGhpcyB0ZXN0IHdpbGwgcmVxdWVzdCB0byBwaW4gYSBzaGFyZWQg YnVmZmVyIHRvIGFuIGludmFsaWQKPiArICogVk1BICA+IDQ4LWJpdCBhZGRyZXNzIGlmIHN5c3Rl bSBzdXBwb3J0cyA0OEIgUFBHVFQKPiArICogSWYgc3lzdGVtIHN1cHBvcnRzIDMyQiBQUEdUVCwg aXQgd2lsbCB0ZXN0IHRoZSBlcXVpdmFsZW50IGludmFsaWQgVk1BCj4gKyAqIENyZWF0ZSBzaGFy ZWQgYnVmZmVyIG9mIHNpemUgNEsKPiArICogVHJ5IGFuZCBQaW4gb2JqZWN0IHRvIGludmFsaWQg YWRkcmVzcwo+ICsqLwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX2ludmFsaWRfdm1hX3Rlc3Qodm9p ZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaW50IGZkLCByZXQ7Cj4g Kwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1 ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNf b2JqZWN0MlsxXTsKPiArCXVpbnQzMl90IHNoYXJlZF9idWZfaGFuZGxlOwo+ICsJaW50IHJpbmc7 Cj4gKwl1aW50NjRfdCBpbnZhbGlkX2FkZHJlc3NfZm9yXzQ4YiA9IDB4OTAwMDAwMDAwMDAwMDsg LyogNTIgYml0IGFkZHJlc3MgKi8KPiArCXVpbnQ2NF90IGludmFsaWRfYWRkcmVzc19mb3JfMzJi ID0gMHg5MDAwMDAwMDA7IC8qIDM2IGJpdCBhZGRyZXNzICovCj4gKwo+ICsJZmQgPSBkcm1fb3Bl bl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChm ZCwgRlVMTF80OF9CSVRfUFBHVFQpIHx8Cj4gKwkJICAgIHVzZXNfZnVsbF9wcGd0dChmZCwgRlVM TF8zMl9CSVRfUFBHVFQpKTsKPiArCj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZm ZXIoQk9fU0laRSk7Cj4gKwkqc2hhcmVkX2J1ZmZlciA9IDB4RkZGRkZGRkY7Cj4gKwkKPiArCS8q IHNoYXJlIHdpdGggR1BVICovCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9IGluaXRfdXNlcnB0cihm ZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsIEJPX1NJWkUpOwo+ICsKPiArCWlmICh1c2VzX2Z1 bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSkgewo+ICsJCXNldHVwX2V4ZWNfb2JqKCZl eGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCQkgICAgICAgRVhFQ19PQkpF Q1RfUElOTkVELCBpbnZhbGlkX2FkZHJlc3NfZm9yXzQ4Yik7Cj4gKwl9IGVsc2Ugewo+ICsJCXNl dHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCQkg ICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBpbnZhbGlkX2FkZHJlc3NfZm9yXzMyYik7Cj4gKwl9 Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZl cigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAxLCAwKTsKPiArCj4gKwkvKiBFeHBlY3Qg ZXhlY2J1ZiB0byBmYWlsICovCj4gKwlyZXQgPSBkcm1Jb2N0bChmZCwKPiArCQkgICAgICAgRFJN X0lPQ1RMX0k5MTVfR0VNX0VYRUNCVUZGRVIyLAo+ICsJCSAgICAgICAmZXhlY2J1Zik7Cj4gKwo+ ICsJaWd0X2Fzc2VydChlcnJubyA9PSBFTk9TUEMpOwo+ICsJaWd0X2Fzc2VydF9uZXEocmV0LCAw KTsKPiArCQo+ICsJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShm ZCk7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICt9Cj4gKwo+ICsKPiArLyogZ2VtX3Bpbl9o aWdoX2FkZHJlc3NfdGVzdAo+ICsgKiBUaGlzIHRlc3Qgd2lsbCBjcmVhdGUgYSBzaGFyZWQgYnVm ZmVyLCBhbmQgY3JlYXRlIGEgY29tbWFuZAo+ICsgKiBmb3IgR1BVIHRvIHdyaXRlIGRhdGEgaW4g aXQuIEl0IHdpbGwgYXR0ZW1wdCB0byBwaW4gdGhlIGJ1ZmZlciBhdCBhZGRyZXNzID4gMzIgYml0 cy4KPiArICogQ1BVIHdpbGwgcmVhZCBhbmQgbWFrZSBzdXJlIGV4cGVjdGVkIHZhbHVlIGlzIG9i dGFpbmVkCj4gKwo+ICsgKiBNYWxsb2MgYSA0SyBidWZmZXIKPiArICogU2hhcmUgYnVmZmVyIHdp dGggd2l0aCBHUFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVm ZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAqIFVzZSB2aXJ0 dWFsIGFkZHJlc3Mgb2YgYnVmZmVyIGFzIDB4MTEwMDAwMDAwMCAoPiAzMiBiaXQpCj4gKyAqIFNl dCBFWEVDX09CSkVDVF9QSU5ORUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ICsgKiBTZXQgJ29mZnNl dCcgaW4gZXhlYyBvYmplY3QgdG8gc2hhcmVkIGJ1ZmZlciBWTUEKPiArICogU3VibWl0IGV4ZWNi dWZmZXIKPiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIg bWF0Y2hlcyBEQVRBCj4gKyAqIE5vdyB0cnkgc2FtZSB0ZXN0IHdpdGhvdXQgdXNpbmcgNDhCSVQg ZmxhZwo+ICsgKiB0ZXN0IHNob3VsZCBwYXNzIHdpdGggcmVxdWVzdGVkIHBpbm5pbmcgYWRkcmVz cwo+ICsqLwo+ICsKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9oaWdoX2FkZHJlc3NfdGVzdCh2b2lk KQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpbnQgZmQ7Cj4gKwl1aW50 MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIg ZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0 MlsyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSAr IDJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4g KwlpbnQgcmluZywgbGVuOwo+ICsJY29uc3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4g Kwl1aW50NjRfdCBoaWdoX2FkZHJlc3MgPSAweDExMTFGRkZGMDAwOyAvKiA0NCBiaXQgYWRkcmVz cyAqLwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3Rf cmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSk7Cj4gKwo+ICsJ YmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNy ZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8gYWxsIDB4RidzICovCj4gKwlzaGFyZWRfYnVmZmVyID0g Y3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwkqc2hhcmVkX2J1ZmZlciA9IDB4RkZGRkZG RkY7Cj4gKwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0g aW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwgQk9fU0laRSk7Cj4gKwo+ ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ICsJbGVu ID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIGhpZ2hfYWRkcmVzcywgZGF0 YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1 ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCXNldHVw X2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCSAgICAg ICBFWEVDX09CSkVDVF9QSU5ORUQgfCBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVTUywg aGlnaF9hZGRyZXNzKTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNo X2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsK PiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVu KTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsKPiArCWlndF9h c3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNldCA9PSBoaWdoX2FkZHJlc3MpOwo+ICsJLyogY2hl Y2sgb24gQ1BVIHRvIHNlZSBpZiB2YWx1ZSBjaGFuZ2VzICovCj4gKwlpZ3RfZmFpbF9vbl9mKHNo YXJlZF9idWZmZXJbMF0gIT0gZGF0YSwKPiArCQkiXG5DUFUgcmVhZCBkb2VzIG5vdCBtYXRjaCBH UFUgd3JpdGUsIFwKPiArCQlleHBlY3RlZDogMHgleCwgZ290OiAweCV4XG4iLCBkYXRhLCBzaGFy ZWRfYnVmZmVyWzBdKTsKPiArCj4gKwkvKiBOb3cgdHJ5IHBpbm5pbmcgdG8gaGlnaCBhZGRyZXNz IHdpdGhvdXQgNDhCSVQgZmxhZyAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0Mlsw XSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gKwkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgaGln aF9hZGRyZXNzKTsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0Miwg cmluZywgMiwgbGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1 Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ ICsKPiArCWlndF9hc3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNldCA9PSBoaWdoX2FkZHJlc3Mp Owo+ICsKPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fY2xvc2Uo ZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCWNsb3NlKGZkKTsKPiArCWZyZWUoc2hhcmVkX2J1 ZmZlcik7Cj4gK30KPiArCj4gKy8qIGdlbV9waW5fbmVhcl80OEJpdF90ZXN0Cj4gKyAqIFRoaXMg dGVzdCB3aWxsIGNyZWF0ZSBhIHNoYXJlZCBidWZmZXIsCj4gKyAqIGFuZCBjcmVhdGUgYSBjb21t YW5kIGZvciBHUFUgdG8gd3JpdGUgZGF0YSBpbiBpdC4gSXQgd2lsbCBhdHRlbXB0Cj4gKyAqIHRv IHBpbiB0aGUgYnVmZmVyIGF0IGFkZHJlc3MgPiA0NyBiaXRzIDw9IDQ4LWJpdC4KPiArICogQ1BV IHdpbGwgcmVhZCBhbmQgbWFrZSBzdXJlIGV4cGVjdGVkIHZhbHVlIGlzIG9idGFpbmVkCj4gKwo+ ICsgKiBNYWxsb2MgYSA0SyBidWZmZXIKPiArICogU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBHUFUg YnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRl IERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAqIFVzZSB2aXJ0dWFsIGFkZHJlc3Mg b2YgYnVmZmVyIGFzIHJhbmdlIGJldHdlZW4gNDctYml0IGFuZCA0OC1iaXQKPiArICogU2V0IEVY RUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gKyAqIFNldCAnb2Zmc2V0JyBp biBleGVjIG9iamVjdCB0byBzaGFyZWQgYnVmZmVyIFZNQQo+ICsgKiBTdWJtaXQgZXhlY2J1ZmZl cgo+ICsgKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2hhcmVkIGJ1ZmZlciBtYXRj aGVzIERBVEEKPiArKi8KPiArI2RlZmluZSBCRUdJTl9ISUdIX0FERFJFU1MgMHg3RkZGRkZGRkYw MDAKPiArI2RlZmluZSBFTkRfSElHSF9BRERSRVNTIDB4RkZGRkZGRkZDMDAwCj4gKyNkZWZpbmUg QUREUkVTU19JTkNSRU1FTlQgMHgyMDAwMDAwMDAwCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fbmVh cl80OEJpdF90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiAr CWludCBmZDsKPiArCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ICsJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgZXhlY19vYmplY3QyWzJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW0JPX1NJWkVd Owo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlp bnQgcmluZywgbGVuOwo+ICsJY29uc3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1 aW50NjRfdCBoaWdoX2FkZHJlc3M7Cj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVS X0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF80OF9CSVRf UFBHVFQpKTsKPiArCj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0la RSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNwdSBidWZmZXIsIHNldCB0byBhbGwgMHhGJ3MgKi8KPiAr CXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCSpzaGFyZWRf YnVmZmVyID0gMHhGRkZGRkZGRjsKPiArCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJc2hh cmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVy LCBCT19TSVpFKTsKPiArCj4gKwlmb3IgKGhpZ2hfYWRkcmVzcyA9IEJFR0lOX0hJR0hfQUREUkVT UzsgaGlnaF9hZGRyZXNzIDw9IEVORF9ISUdIX0FERFJFU1M7Cj4gKwkJCQkJCWhpZ2hfYWRkcmVz cys9QUREUkVTU19JTkNSRU1FTlQpIHsKPiArCQkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0 aCB3cml0ZSBjb21tYW5kICovCj4gKwkJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRj aF9idWZmZXIsIGhpZ2hfYWRkcmVzcywKPiArCQkJCQlkYXRhLCB0cnVlKTsKPiArCQlnZW1fd3Jp dGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCQkvKiBz dWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3Qy WzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCB8 IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTLAo+ICsJCQkgICAgICAgaGlnaF9hZGRy ZXNzKTsKPiArCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFu ZGxlLCAwLCAwKTsKPiArCj4gKwkJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwkJc2V0dXBf ZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsJCXN1 Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJCWdlbV91 c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCj4gKwkJaWd0X2Fzc2VydChl eGVjX29iamVjdDJbMF0ub2Zmc2V0ID09IGhpZ2hfYWRkcmVzcyk7Cj4gKwkJLyogY2hlY2sgb24g Q1BVIHRvIHNlZSBpZiB2YWx1ZSBjaGFuZ2VzICovCj4gKwkJaWd0X2ZhaWxfb25fZihzaGFyZWRf YnVmZmVyWzBdICE9IGRhdGEsCj4gKwkJIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BVIHdy aXRlLCBleHBlY3RlZDogMHgleCwgXAo+ICsJCWdvdDogMHgleFxuLCAweCUiUFJJeDY0IiIsIGRh dGEsIHNoYXJlZF9idWZmZXJbMF0sIGhpZ2hfYWRkcmVzcyk7Cj4gKwl9Cj4gKwo+ICsJZ2VtX2Ns b3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9o YW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ICsK PiArCj4gK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCj4gK3sKPiArCWlndF9zdWJ0 ZXN0X2luaXQoYXJnYywgYXJndik7Cj4gKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gKwo+ ICsJLyogQWxsIHRlc3RzIG5lZWQgUFBHVFQgc3VwcG9ydCAqLwo+ICsJaWd0X3N1YnRlc3QoImdl bV9waW5fdXNlcnB0ciIpIHsKPiArCQlnZW1fcGluX3VzZXJwdHJfdGVzdCgpOwo+ICsJfQo+ICsJ aWd0X3N1YnRlc3QoImdlbV9waW5fYm8iKSB7Cj4gKwkJZ2VtX3Bpbl9ib190ZXN0KCk7Cj4gKwl9 Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX211bHRpcGxlX3Byb2Nlc3MiKSB7Cj4gKwkJZ2VtX211bHRp cGxlX3Byb2Nlc3NfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9yZXBpbiIpIHsK PiArCQlnZW1fcmVwaW5fdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5fb3Zl cmxhcCIpIHsKPiArCQlnZW1fcGluX292ZXJsYXBfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRl c3QoImdlbV93cml0ZV9tdWx0aXBhZ2VfYnVmZmVyIikgewo+ICsJCWdlbV93cml0ZV9tdWx0aXBh Z2VfYnVmZmVyX3Rlc3QoKTsKPiArCX0KPiArCj4gKwkvKiBGb2xsb3dpbmcgdGVzdHMgbmVlZCAz Mi80OCBCaXQgUFBHVFQgc3VwcG9ydCAqLwo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5faW52YWxp ZF92bWEiKSB7Cj4gKwkJZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0KCk7Cj4gKwl9Cj4gKwo+ICsJ LyogRm9sbG93aW5nIHRlc3RzIG5lZWQgNDggQml0IFBQR1RUIHN1cHBvcnQgKi8KPiArCWlndF9z dWJ0ZXN0KCJnZW1fc29mdHBpbl9zdHJlc3MiKSB7Cj4gKwkJZ2VtX3NvZnRwaW5fc3RyZXNzX3Rl c3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX2hpZ2hfYWRkcmVzcyIpIHsKPiAr CQlnZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2Vt X3Bpbl9uZWFyXzQ4Qml0Iikgewo+ICsJCWdlbV9waW5fbmVhcl80OEJpdF90ZXN0KCk7Cj4gKwl9 Cj4gKwo+ICsJaWd0X2V4aXQoKTsKPiArfQo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==