From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH] drm/i915: Use SSE4.1 movntdqa to accelerate reads from WC memory Date: Mon, 18 Jul 2016 12:15:32 +0100 Message-ID: <578CBA54.40107@linux.intel.com> References: <20160718100111.GD21839@nuc-i3427.alporthouse.com> <1468836434-29107-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 7F2F3891BA for ; Mon, 18 Jul 2016 11:15:34 +0000 (UTC) In-Reply-To: <1468836434-29107-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: Akash Goel , Mika Kuoppala List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE4LzA3LzE2IDExOjA3LCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4gVGhpcyBwYXRjaCBwcm92 aWRlcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIHBlcmZvcm1pbmcgYSAxNi1ieXRlIGFsaWduZWQK PiByZWFkIGZyb20gV0MgbWVtb3J5IHVzaW5nIG5vbi10ZW1wb3JhbCBpbnN0cnVjdGlvbnMgaW50 cm9kdWNlZCB3aXRoIHNzZTQuMS4KPiBVc2luZyBtb3ZudGRxYSB3ZSBjYW4gYnlwYXNzIHRoZSBD UFUgY2FjaGVzIGFuZCByZWFkIGRpcmVjdGx5IGZyb20gbWVtb3J5Cj4gYW5kIGlnbm9yaW5nIHRo ZSBwYWdlIGF0dHJpYnV0ZXMgc2V0IG9uIHRoZSBDUFUgUFRFIGkuZS4gbmVnYXRpbmcgdGhlCj4g aW1wYWN0IG9mIGFuIG90aGVyd2lzZSBVQyBhY2Nlc3MuIENvcHlpbmcgdXNpbmcgbW92bnRxZGEg ZnJvbSBXQyBpcyBhbG1vc3QKPiBhcyBmYXN0IGFzIHJlYWRpbmcgZnJvbSBXQiBtZW1vcnksIG1v ZHVsbyB0aGUgcG9zc2liaWxpdHkgb2YgYm90aCBoaXR0aW5nCj4gdGhlIENQVSBjYWNoZSBvciBs ZWF2aW5nIHRoZSBkYXRhIGluIHRoZSBDUFUgY2FjaGUgZm9yIHRoZSBuZXh0IGNvbnN1bWVyLgo+ IChUaGUgQ1BVIGNhY2hlIGl0c2VsZiBteSBiZSBmbHVzaGVkIGZvciB0aGUgcmVnaW9uIG9mIHRo ZSBtb3ZudGRxYSBhbmQgb24KPiBsYXRlciBhY2Nlc3MgdGhlIG1vdm50ZHFhIHJlYWRzIGZyb20g YSBzZXBhcmF0ZSBpbnRlcm5hbCBidWZmZXIgZm9yIHRoZQo+IGNhY2hlbGluZS4pIFRoZSB3cml0 ZSBiYWNrIHRvIHRoZSBtZW1vcnkgaXMgaG93ZXZlciBjYWNoZWQuCj4KPiBUaGlzIHdpbGwgYmUg dXNlZCBpbiBsYXRlciBwYXRjaGVzIHRvIGFjY2VsZXJhdGUgYWNjZXNzaW5nIFdDIG1lbW9yeS4K Pgo+IHYyOiBSZXBvcnQgd2hldGhlciB0aGUgYWNjZWxlcmF0ZWQgY29weSBpcyBzdWNjZXNzZnVs L3Bvc3NpYmxlLgo+IHYzOiBGdW5jdGlvbiBhbGlnbm1lbnQgb3ZlcnJpZGUgd2FzIG9ubHkgbmVj ZXNzYXJ5IHdoZW4gdXNpbmcgdGhlCj4gZnVuY3Rpb24gdGFyZ2V0KCJzc2U0LjEiKSAtIHdoaWNo IGlzIG5vdCBuZWNlc3NhcnkgZm9yIGVtaXR0aW5nIG1vdm50ZHFhCj4gZnJvbSBfX2FzbV9fLgo+ IHY0OiBJbXByb3ZlIG5vdGVzIG9uIENQVSBjYWNoZSBiZWhhdmlvdXIgdnMgbm9uLXRlbXBvcmFs IHN0b3Jlcy4KPiB2NTogRml4IGJ5dGUgb2Zmc2V0cyBmb3IgdW5yb2xsZWQgbW92ZXMuCj4gdjY6 IEZpbmQgYWxsIHJlbWFpbmluZyB0eXBvcyBvZiBtb3ZudHFkYSwgdXNlIGtlcm5lbF9mcHVfYmVn aW4uCj4KPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5j by51az4KPiBDYzogQWthc2ggR29lbCA8YWthc2guZ29lbEBpbnRlbC5jb20+Cj4gQ2M6IERhbWll biBMZXNwaWF1IDxkYW1pZW4ubGVzcGlhdUBpbnRlbC5jb20+Cj4gQ2M6IE1pa2EgS3VvcHBhbGEg PG1pa2Eua3VvcHBhbGFAaW50ZWwuY29tPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVy c3VsaW5AaW50ZWwuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg ICAgICB8ICAgMyArKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICB8ICAg MiArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgIHwgICAzICsrCj4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X21lbWNweS5jIHwgMTAxICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKPiAgIDQgZmlsZXMgY2hhbmdlZCwgMTA5IGluc2VydGlvbnMo KykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X21lbWNw eS5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IGRkYTcyNGYwNDQ0NS4uMzQxMjQxMzQw OGMwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMywxMiArMywxNSBAQAo+ICAgIyBE aXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIChEUkkpIGluIFhGcmVlODYgNC4xLjAgYW5k IGhpZ2hlci4KPgo+ICAgc3ViZGlyLWNjZmxhZ3MtJChDT05GSUdfRFJNX0k5MTVfV0VSUk9SKSA6 PSAtV2Vycm9yCj4gK3N1YmRpci1jY2ZsYWdzLXkgKz0gXAo+ICsJJChjYWxsIGFzLWluc3RyLG1v dm50ZHFhICglZWF4KSQoY29tbWEpJXhtbTAsLURDT05GSUdfQVNfTU9WTlREUUEpCj4KPiAgICMg UGxlYXNlIGtlZXAgdGhlc2UgYnVpbGQgbGlzdHMgc29ydGVkIQo+Cj4gICAjIGNvcmUgZHJpdmVy IGNvZGUKPiAgIGk5MTUteSA6PSBpOTE1X2Rydi5vIFwKPiAgIAkgIGk5MTVfaXJxLm8gXAo+ICsJ ICBpOTE1X21lbWNweS5vIFwKPiAgIAkgIGk5MTVfcGFyYW1zLm8gXAo+ICAgCSAgaTkxNV9wY2ku byBcCj4gICAgICAgICAgICAgaTkxNV9zdXNwZW5kLm8gXAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu Ywo+IGluZGV4IDY0MGUzYzM0ZDNjZC4uZjEwMzRlYjY4NTNiIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5jCj4gQEAgLTgyNyw2ICs4MjcsOCBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2lu aXRfZWFybHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgCW11dGV4X2lu aXQoJmRldl9wcml2LT53bS53bV9tdXRleCk7Cj4gICAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBw c19tdXRleCk7Cj4KPiArCWk5MTVfbWVtY3B5X2luaXRfZWFybHkoZGV2X3ByaXYpOwo+ICsKPiAg IAlyZXQgPSBpOTE1X3dvcmtxdWV1ZXNfaW5pdChkZXZfcHJpdik7Cj4gICAJaWYgKHJldCA8IDAp Cj4gICAJCXJldHVybiByZXQ7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggODZkY2Rl NTY0ZGUwLi5mOGFlM2YzZTNhZjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAt MzkxNiw0ICszOTE2LDcgQEAgc3RhdGljIGlubGluZSBib29sIF9faTkxNV9yZXF1ZXN0X2lycV9j b21wbGV0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiAgIAlyZXR1cm4gZmFs c2U7Cj4gICB9Cj4KPiArdm9pZCBpOTE1X21lbWNweV9pbml0X2Vhcmx5KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7Cj4gK2Jvb2wgaTkxNV9tZW1jcHlfZnJvbV93Yyh2b2lkICpk c3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBsZW4pOwo+ICsKPiAgICNlbmRpZgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X21lbWNweS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9tZW1jcHkuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMDAwMDAwLi41MGZjNTc5OTI1NWYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9tZW1jcHkuYwo+IEBAIC0wLDAgKzEsMTAxIEBACj4gKy8q Cj4gKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK PiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBU SEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o Pgo+ICsjaW5jbHVkZSA8YXNtL2ZwdS9hcGkuaD4KPiArCj4gKyNpbmNsdWRlICJpOTE1X2Rydi5o Igo+ICsKPiArREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoaGFzX21vdm50ZHFhKTsKPiArCj4gKyNp ZmRlZiBDT05GSUdfQVNfTU9WTlREUUEKPiArc3RhdGljIHZvaWQgX19tZW1jcHlfbnRkcWEodm9p ZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKQo+ICt7Cj4gKwlrZXJu ZWxfZnB1X2JlZ2luKCk7Cj4gKwo+ICsJbGVuID4+PSA0Owo+ICsJd2hpbGUgKGxlbiA+PSA0KSB7 Cj4gKwkJYXNtKCJtb3ZudGRxYSAgICglMCksICUleG1tMFxuIgo+ICsJCSAgICAibW92bnRkcWEg MTYoJTApLCAlJXhtbTFcbiIKPiArCQkgICAgIm1vdm50ZHFhIDMyKCUwKSwgJSV4bW0yXG4iCj4g KwkJICAgICJtb3ZudGRxYSA0OCglMCksICUleG1tM1xuIgo+ICsJCSAgICAibW92YXBzICUleG1t MCwgICAoJTEpXG4iCj4gKwkJICAgICJtb3ZhcHMgJSV4bW0xLCAxNiglMSlcbiIKPiArCQkgICAg Im1vdmFwcyAlJXhtbTIsIDMyKCUxKVxuIgo+ICsJCSAgICAibW92YXBzICUleG1tMywgNDgoJTEp XG4iCj4gKwkJICAgIDo6ICJyIiAoc3JjKSwgInIiIChkc3QpIDogIm1lbW9yeSIpOwo+ICsJCXNy YyArPSA2NDsKPiArCQlkc3QgKz0gNjQ7Cj4gKwkJbGVuIC09IDQ7Cj4gKwl9Cj4gKwl3aGlsZSAo bGVuLS0pIHsKPiArCQlhc20oIm1vdm50ZHFhICglMCksICUleG1tMFxuIgo+ICsJCSAgICAibW92 YXBzICUleG1tMCwgKCUxKVxuIgo+ICsJCSAgICA6OiAiciIgKHNyYyksICJyIiAoZHN0KSA6ICJt ZW1vcnkiKTsKPiArCQlzcmMgKz0gMTY7Cj4gKwkJZHN0ICs9IDE2OwoKSSBhbSBub3Qgc3VyZSBh Ym91dCB0aGlzLCBidXQgbG9va2luZyBhdCB0aGUgcmFpZDYgZm9yIGV4YW1wbGUsIGl0IGhhcyBh IApsb3QgbW9yZSBhbm5vdGF0aW9ucyBpbiBjYXNlcyBsaWtlIHRoaXMuCgpJdCBzZWVtcyB0byBi ZSB0ZWxsaW5nIHRoZSBjb21waWxlciB3aGljaCBtZW1vcnkgcmFuZ2VzIGRvZXMgZWFjaCAKaW5z dHJ1Y3Rpb24gYWNjZXNzLCBhbmQgYWxzbyB1c2VzICJhc20gdm9sYXRpbGUiIC0gd2hldGhlciBv ciBub3QgdGhhdCAKaXMgcmVhbGx5IG5lZWRlZCBJIGRvbid0IGtub3cuCgpGb3IgZXhhbXBsZToK ICAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUoIm1vdmRxYSAlMCwlJXhtbTQiIDo6ICJtIiAo ZHB0clt6MF1bZF0pKTsKCkFuZDoKICAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUoIm1vdmRx YSAlJXhtbTQsJTAiIDogIj1tIiAocVtkXSkpOwoKRWFjaCBvbmUgaXMgdGVsbGluZyB0aGUgY29t cGlsZXIgdGhlIGluc3RydWN0aW9uIGlzIGVpdGhlciByZWFkaW5nIG9yIAp3cml0aW5nIHJlc3Bl Y3RpdmVseSBmcm9tIGEgY2VydGFpbiBtZW1vcnkgYWRkcmVzcy4KCllvdSBkb24ndCBoYXZlIGFu eSBvZiB0aGF0LCBhbmQgZG9uJ3QgZXZlbiBzcGVjaWZ5IG5vdGhpbmcgYXMgYW4gb3V0cHV0IApw YXJhbWV0ZXIgc28gSSBhbSBub3Qgc3VyZSBpZiB5b3VyIGNvZGUgaXMgc2FmZS4KCj4gKwl9Cj4g Kwo+ICsJa2VybmVsX2ZwdV9lbmQoKTsKPiArfQo+ICsjZW5kaWYKPiArCj4gKy8qKgo+ICsgKiBp OTE1X21lbWNweV9mcm9tX3djOiBwZXJmb3JtIGFuIGFjY2VsZXJhdGVkICphbGlnbmVkKiByZWFk IGZyb20gV0MKPiArICogQGRzdDogZGVzdGluYXRpb24gcG9pbnRlcgo+ICsgKiBAc3JjOiBzb3Vy Y2UgcG9pbnRlcgo+ICsgKiBAbGVuOiBob3cgbWFueSBieXRlcyB0byBjb3B5Cj4gKyAqCj4gKyAq IGk5MTVfbWVtY3B5X2Zyb21fd2MgY29waWVzIEBsZW4gYnl0ZXMgZnJvbSBAc3JjIHRvIEBkc3Qg dXNpbmcKPiArICogbm9uLXRlbXBvcmFsIGluc3RydWN0aW9ucyB3aGVyZSBhdmFpbGFibGUuIE5v dGUgdGhhdCBhbGwgYXJndW1lbnRzCj4gKyAqIChAc3JjLCBAZHN0KSBtdXN0IGJlIGFsaWduZWQg dG8gMTYgYnl0ZXMgYW5kIEBsZW4gbXVzdCBiZSBhIG11bHRpcGxlCj4gKyAqIG9mIDE2Lgo+ICsg Kgo+ICsgKiBUbyB0ZXN0IHdoZXRoZXIgYWNjZWxlcmF0ZWQgcmVhZHMgZnJvbSBXQyBhcmUgc3Vw cG9ydGVkLCB1c2UKPiArICogaTkxNV9tZW1jcHlfZnJvbV93YyhOVUxMLCBOVUxMLCAwKTsKPiAr ICoKPiArICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb3B5IHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBp ZiB0aGUgcHJlY29uZGl0aW9ucwo+ICsgKiBhcmUgbm90IG1ldC4KPiArICovCj4gK2Jvb2wgaTkx NV9tZW1jcHlfZnJvbV93Yyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9u ZyBsZW4pCj4gK3sKPiArCWlmICh1bmxpa2VseSgoKHVuc2lnbmVkIGxvbmcpZHN0IHwgKHVuc2ln bmVkIGxvbmcpc3JjIHwgbGVuKSAmIDE1KSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsjaWZk ZWYgQ09ORklHX0FTX01PVk5URFFBCj4gKwlpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmhhc19t b3ZudGRxYSkpIHsKPiArCQlpZiAobGVuKQo+ICsJCQlfX21lbWNweV9udGRxYShkc3QsIHNyYywg bGVuKTsKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCX0KPiArI2VuZGlmCj4gKwo+ICsJcmV0dXJuIGZh bHNlOwo+ICt9Cj4gKwo+ICt2b2lkIGk5MTVfbWVtY3B5X2luaXRfZWFybHkoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlpZiAoc3RhdGljX2NwdV9oYXMoWDg2X0ZF QVRVUkVfWE1NNF8xKSkKPiArCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmaGFzX21vdm50ZHFhKTsK PiArfQo+CgpJIHdhcyBub3QgZmFtaWxpYXIgd2l0aCBzdGF0aWMga2V5IHN0dWZmIGFuZCB0aGUg b25seSB0aGluZyBJIGNhbiBub3RpY2UgCmlzIHRoYXQgaXQgaXMgdXNlZCB2ZXJ5IGxpdHRsZSB0 aHJvdWdob3V0IHRoZSBrZXJuZWwuIE9uIHRoZSBvdGhlciBoYW5kIApJIGhhdmVuJ3QgZm91bmQg YW55IHJlZmVyZW5jZXMgaW4gdGhlIGRvY3VtZW50YXRpb24gdGhhdCBpdCBzaG91bGQgYmUgCnVz ZWQgc3BhcmluZ2x5IG9yIHNvbWV0aGluZy4KCkJ1dCB0aGUgZ2VuZXJhbCBxdWVzdGlvbiB3b3Vs ZCBiZSAtIGlzIGl0IHdvcnRoIGl0IGhlcmU/IFN0YXRpYyBicmFuY2hlcyAKc2hvdWxkIGJlIHJl YWxseSBlZmZpY2llbnQgaW4gdGhlIG9mZiBjYXNlLCBjb3JyZWN0PyBBbmQgd2UgZG9uJ3QgcmVh bGx5IApjYXJlIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgb2ZmIGNhc2UgaGVyZS4gU28g d291bGQgaXQgYmUganVzdCBhcyAKZ29vZCB0byB1c2UgYSBub3JtYWwgYnJhbmNoPwoKT24gdGhl IG90aGVyIGhhbmQgbWF5YmUgdGhlcmUgaXMgbm8gc3BlY2lhbCByZWFzb24gd2h5IHRoZXNlIGFy ZSBub3QgCnVzZWQgbW9yZSBzbyBtYXliZSB5b3UgYXJlIGNvbXBsZXRlbHkgZmluZSB0byB1c2Ug dGhlbS4uLgoKUmVnYXJkcywKClR2cnRrbwoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK