From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau =?iso-8859-1?Q?Monn=E9?= Subject: Re: [PATCH v4 16/28] x86/vvtd: Add queued invalidation (QI) support Date: Mon, 12 Feb 2018 14:36:10 +0000 Message-ID: <20180212143610.6gess2ckeoxjpts6@MacBook-Pro-de-Roger.local> References: <1510899755-40237-1-git-send-email-chao.gao@intel.com> <1510899755-40237-17-git-send-email-chao.gao@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1510899755-40237-17-git-send-email-chao.gao@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Chao Gao Cc: Lan Tianyu , Kevin Tian , Stefano Stabellini , Wei Liu , George Dunlap , Ian Jackson , Tim Deegan , xen-devel@lists.xen.org, Jan Beulich , Andrew Cooper List-Id: xen-devel@lists.xenproject.org T24gRnJpLCBOb3YgMTcsIDIwMTcgYXQgMDI6MjI6MjNQTSArMDgwMCwgQ2hhbyBHYW8gd3JvdGU6 Cj4gUXVldWVkIEludmFsaWRhdGlvbiBJbnRlcmZhY2UgaXMgYW4gZXhwYW5kZWQgaW52YWxpZGF0 aW9uIGludGVyZmFjZSB3aXRoCj4gZXh0ZW5kZWQgY2FwYWJpbGl0aWVzLiBIYXJkd2FyZSBpbXBs ZW1lbnRhdGlvbnMgcmVwb3J0IHN1cHBvcnQgZm9yIHF1ZXVlZAo+IGludmFsaWRhdGlvbiBpbnRl cmZhY2UgdGhyb3VnaCB0aGUgRXh0ZW5kZWQgQ2FwYWJpbGl0eSBSZWdpc3Rlci4gVGhlIHF1ZXVl ZAo+IGludmFsaWRhdGlvbiBpbnRlcmZhY2UgdXNlcyBhbiBJbnZhbGlkYXRpb24gUXVldWUgKElR KSwgd2hpY2ggaXMgYSBjaXJjdWxhcgo+IGJ1ZmZlciBpbiBzeXN0ZW0gbWVtb3J5LiBTb2Z0d2Fy ZSBzdWJtaXRzIGNvbW1hbmRzIGJ5IHdyaXRpbmcgSW52YWxpZGF0aW9uCj4gRGVzY3JpcHRvcnMg dG8gdGhlIElRLgo+IAo+IEluIHRoaXMgcGF0Y2gsIGEgbmV3IGZ1bmN0aW9uIHZpb21tdV9wcm9j ZXNzX2lxKCkgaXMgdXNlZCBmb3IgZW11bGF0aW5nIGhvdwo+IGhhcmR3YXJlIGhhbmRsZXMgaW52 YWxpZGF0aW9uIHJlcXVlc3RzIHRocm91Z2ggUUkuCgpZb3Ugc2hvdWxkIG1lbnRpb24gdGhhdCBR SSBpcyBtYW5kYXRvcnkgaW4gb3JkZXIgdG8gc3VwcG9ydCBpbnRlcnJ1cHQKcmVtYXBwaW5nLgoK SSB3YXMgYWJvdXQgdG8gYXNrIHdoZXRoZXIgUUkgY291bGQgYmUgZGVmZXJyZWQgdG8gYSBsYXRl ciBzdGFnZSwgYnV0CkFGQUlDVCB0aGlzIGlzIG5vdCBhbiBvcHRpb24uCgo+IFNpZ25lZC1vZmYt Ynk6IENoYW8gR2FvIDxjaGFvLmdhb0BpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTGFuIFRp YW55dSA8dGlhbnl1LmxhbkBpbnRlbC5jb20+Cj4gCj4gLS0tCj4gdjQ6Cj4gIC0gSW50cm9kdWNl IGEgbG9jayB0byBwcm90ZWN0IGludmFsaWRhdGlvbiByZWxhdGVkIHJlZ2lzdGVycy4KPiAtLS0K PiAgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmggfCAgMjQgKysrLQo+ICB4ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jICB8IDI3MSArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0KPiAgMiBmaWxlcyBjaGFuZ2VkLCAyOTMgaW5zZXJ0aW9ucygrKSwg MiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gv dnRkL2lvbW11LmggYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaAo+IGluZGV4 IGI3MWRhYjguLmRlOTE4OGIgMTAwNjQ0Cj4gLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gv dnRkL2lvbW11LmgKPiArKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaAo+ IEBAIC00Nyw3ICs0NywxMiBAQAo+ICAjZGVmaW5lIERNQVJfSVFIX1JFRyAgICAgICAgICAgIDB4 ODAgLyogaW52YWxpZGF0aW9uIHF1ZXVlIGhlYWQgKi8KPiAgI2RlZmluZSBETUFSX0lRVF9SRUcg ICAgICAgICAgICAweDg4IC8qIGludmFsaWRhdGlvbiBxdWV1ZSB0YWlsICovCj4gICNkZWZpbmUg RE1BUl9JUUFfUkVHICAgICAgICAgICAgMHg5MCAvKiBpbnZhbGlkYXRpb24gcXVldWUgYWRkciAq Lwo+ICsjZGVmaW5lIERNQVJfSVFVQV9SRUcgICAgICAgICAgIDB4OTQgLyogaW52YWxpZGF0aW9u IHF1ZXVlIHVwcGVyIGFkZHIgKi8KPiArI2RlZmluZSBETUFSX0lDU19SRUcgICAgICAgICAgICAw eDljIC8qIGludmFsaWRhdGlvbiBjb21wbGV0aW9uIHN0YXR1cyAqLwo+ICAjZGVmaW5lIERNQVJf SUVDVExfUkVHICAgICAgICAgIDB4YTAgLyogaW52YWxpZGF0aW9uIGV2ZW50IGNvbnRyb2wgcmVn aXN0ZXIgKi8KPiArI2RlZmluZSBETUFSX0lFREFUQV9SRUcgICAgICAgICAweGE0IC8qIGludmFs aWRhdGlvbiBldmVudCBkYXRhIHJlZ2lzdGVyICovCj4gKyNkZWZpbmUgRE1BUl9JRUFERFJfUkVH ICAgICAgICAgMHhhOCAvKiBpbnZhbGlkYXRpb24gZXZlbnQgYWRkcmVzcyByZWdpc3RlciAqLwo+ ICsjZGVmaW5lIERNQVJfSUVVQUREUl9SRUcgICAgICAgIDB4YWMgLyogdXBwZXIgYWRkcmVzcyBy ZWdpc3RlciAqLwo+ICAjZGVmaW5lIERNQVJfSVJUQV9SRUcgICAgICAgICAgIDB4YjggLyogYmFz ZSBhZGRyZXNzIG9mIGludHIgcmVtYXAgdGFibGUgKi8KPiAgI2RlZmluZSBETUFSX0lSVFVBX1JF RyAgICAgICAgICAweGJjIC8qIHVwcGVyIGFkZHJlc3Mgb2YgaW50ciByZW1hcCB0YWJsZSAqLwo+ ICAKPiBAQCAtMTc1LDYgKzE4MCwyMSBAQAo+ICAjZGVmaW5lIERNQV9JUlRBX1ModmFsKSAgICAg ICAgICh2YWwgJiAweGYpCj4gICNkZWZpbmUgRE1BX0lSVEFfU0laRSh2YWwpICAgICAgKDFVTCA8 PCAoRE1BX0lSVEFfUyh2YWwpICsgMSkpCj4gIAo+ICsvKiBJUUFfUkVHICovCj4gKyNkZWZpbmUg RE1BX0lRQV9BRERSKHZhbCkgICAgICAgKHZhbCAmIH4weGZmZlVMTCkKPiArI2RlZmluZSBETUFf SVFBX1FTKHZhbCkgICAgICAgICAodmFsICYgMHg3KQo+ICsjZGVmaW5lIERNQV9JUUFfUlNWRCAg ICAgICAgICAgIDB4ZmY4VUxMCj4gKwo+ICsvKiBJRUNUTF9SRUcgKi8KPiArI2RlZmluZSBETUFf SUVDVExfSU1fU0hJRlQgMzEKPiArI2RlZmluZSBETUFfSUVDVExfSU0gICAgICAgICAgICAoMVUg PDwgRE1BX0lFQ1RMX0lNX1NISUZUKQo+ICsjZGVmaW5lIERNQV9JRUNUTF9JUF9TSElGVCAzMAo+ ICsjZGVmaW5lIERNQV9JRUNUTF9JUCAgICAgICAgICAgICgxVSA8PCBETUFfSUVDVExfSVBfU0hJ RlQpCj4gKwo+ICsvKiBJQ1NfUkVHICovCj4gKyNkZWZpbmUgRE1BX0lDU19JV0NfU0hJRlQgICAg ICAgMAo+ICsjZGVmaW5lIERNQV9JQ1NfSVdDICAgICAgICAgICAgICgxVSA8PCBETUFfSUNTX0lX Q19TSElGVCkKPiArCj4gIC8qIFBNRU5fUkVHICovCj4gICNkZWZpbmUgRE1BX1BNRU5fRVBNICAg ICgoKHUzMikxKSA8PCAzMSkKPiAgI2RlZmluZSBETUFfUE1FTl9QUlMgICAgKCgodTMyKTEpIDw8 IDApCj4gQEAgLTIwNSwxMyArMjI1LDE0IEBACj4gIC8qIEZTVFNfUkVHICovCj4gICNkZWZpbmUg RE1BX0ZTVFNfUEZPX1NISUZUICAwCj4gICNkZWZpbmUgRE1BX0ZTVFNfUFBGX1NISUZUICAxCj4g KyNkZWZpbmUgRE1BX0ZTVFNfSVFFX1NISUZUICA0Cj4gICNkZWZpbmUgRE1BX0ZTVFNfUFJPX1NI SUZUICA3Cj4gIAo+ICAjZGVmaW5lIERNQV9GU1RTX1BGTyAgICAgICAgKCh1aW50MzJfdCkxIDw8 IERNQV9GU1RTX1BGT19TSElGVCkKPiAgI2RlZmluZSBETUFfRlNUU19QUEYgICAgICAgICgodWlu dDMyX3QpMSA8PCBETUFfRlNUU19QUEZfU0hJRlQpCj4gICNkZWZpbmUgRE1BX0ZTVFNfQUZPICAg ICAgICAoKHVpbnQzMl90KTEgPDwgMikKPiAgI2RlZmluZSBETUFfRlNUU19BUEYgICAgICAgICgo dWludDMyX3QpMSA8PCAzKQo+IC0jZGVmaW5lIERNQV9GU1RTX0lRRSAgICAgICAgKCh1aW50MzJf dCkxIDw8IDQpCj4gKyNkZWZpbmUgRE1BX0ZTVFNfSVFFICAgICAgICAoKHVpbnQzMl90KTEgPDwg RE1BX0ZTVFNfSVFFX1NISUZUKQo+ICAjZGVmaW5lIERNQV9GU1RTX0lDRSAgICAgICAgKCh1aW50 MzJfdCkxIDw8IDUpCj4gICNkZWZpbmUgRE1BX0ZTVFNfSVRFICAgICAgICAoKHVpbnQzMl90KTEg PDwgNikKPiAgI2RlZmluZSBETUFfRlNUU19QUk8gICAgICAgICgodWludDMyX3QpMSA8PCBETUFf RlNUU19QUk9fU0hJRlQpCj4gQEAgLTU1NSw2ICs1NzYsNyBAQCBzdHJ1Y3QgcWludmFsX2VudHJ5 IHsKPiAgCj4gIC8qIFF1ZXVlIGludmFsaWRhdGlvbiBoZWFkL3RhaWwgc2hpZnQgKi8KPiAgI2Rl ZmluZSBRSU5WQUxfSU5ERVhfU0hJRlQgNAo+ICsjZGVmaW5lIFFJTlZBTF9JTkRFWF9NQVNLICAw eDdmZmYwVUxMCj4gIAo+ICAjZGVmaW5lIHFpbnZhbF9wcmVzZW50KHYpICgodikubG8gJiAxKQo+ ICAjZGVmaW5lIHFpbnZhbF9mYXVsdF9kaXNhYmxlKHYpICgoKHYpLmxvID4+IDEpICYgMSkKPiBk aWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z2dGQuYyBiL3hlbi9kcml2 ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dnRkLmMKPiBpbmRleCBhMmZhNjRhLi44MTE3MGVjIDEwMDY0 NAo+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dnRkLmMKPiArKysgYi94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jCj4gQEAgLTI3LDYgKzI3LDcgQEAKPiAgI2lu Y2x1ZGUgPGFzbS9ldmVudC5oPgo+ICAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KPiAgI2luY2x1 ZGUgPGFzbS9odm0vZG9tYWluLmg+Cj4gKyNpbmNsdWRlIDxhc20vaHZtL3N1cHBvcnQuaD4KPiAg I2luY2x1ZGUgPGFzbS9wMm0uaD4KPiAgCj4gICNpbmNsdWRlICJpb21tdS5oIgo+IEBAIC02OCw2 ICs2OSw5IEBAIHN0cnVjdCB2dnRkIHsKPiAgCj4gICAgICBzdHJ1Y3QgaHZtX2h3X3Z2dGQgaHc7 Cj4gICAgICB2b2lkICppcnRfYmFzZTsKPiArICAgIHZvaWQgKmludl9xdWV1ZV9iYXNlOwoKV2h5 IG5vdCBkZWNsYXJlIHRoaXMgYXM6CgpzdHJ1Y3QgcWludmFsX2VudHJ5ICoKCj4gKyAgICAvKiBU aGlzIGxvY2sgcHJvdGVjdHMgaW52YWxpZGF0aW9uIHJlbGF0ZWQgcmVnaXN0ZXJzICovCj4gKyAg ICBzcGlubG9ja190IGllX2xvY2s7CgpBcyBub3RlZCBpbiBhbm90aGVyIHBhdGNoLCBJIHRoaW5r IHRoZSBmaXJzdCBhcHByb2FjaCBzaG91bGQgYmUgdG8gdXNlCmEgc2luZ2xlIGxvY2sgdGhhdCBz ZXJpYWxpemVzIGFjY2VzcyB0byB0aGUgd2hvbGUgdklPTU1VIHJlZ2lzdGVyCnNwYWNlLiBMYXRl ciB3ZSBjYW4gc2VlIGFib3V0IG1vcmUgZmluZSBncmFpbmVkIGxvY2tpbmcuCgo+ICB9Owo+ICAK PiAgLyogU2V0dGluZyB2aW9tbXVfdmVyYm9zZSBlbmFibGVzIGRlYnVnZ2luZyBtZXNzYWdlcyBv ZiB2SU9NTVUgKi8KPiBAQCAtMjg0LDYgKzI4OCwxMiBAQCBzdGF0aWMgdm9pZCB2dnRkX25vdGlm eV9mYXVsdChjb25zdCBzdHJ1Y3QgdnZ0ZCAqdnZ0ZCkKPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0ZFREFUQV9SRUcpKTsKPiAgfQo+ICAKPiAr c3RhdGljIHZvaWQgdnZ0ZF9ub3RpZnlfaW52X2NvbXBsZXRpb24oY29uc3Qgc3RydWN0IHZ2dGQg KnZ2dGQpCj4gK3sKPiArICAgIHZ2dGRfZ2VuZXJhdGVfaW50ZXJydXB0KHZ2dGQsIHZ2dGRfZ2V0 X3JlZ19xdWFkKHZ2dGQsIERNQVJfSUVBRERSX1JFRyksCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2dnRkX2dldF9yZWcodnZ0ZCwgRE1BUl9JRURBVEFfUkVHKSk7Cj4gK30KPiArCj4g IC8qIENvbXB1dGluZyB0aGUgSVJURSBpbmRleCBmb3IgYSBnaXZlbiBpbnRlcnJ1cHQgcmVxdWVz dC4gV2hlbiBzdWNjZXNzLCByZXR1cm4KPiAgICogMCBhbmQgc2V0IGluZGV4IHRvIHJlZmVyZW5j ZSB0aGUgY29ycmVzcG9uZGluZyBJUlRFLiBPdGhlcndpc2UsIHJldHVybiA8IDAsCj4gICAqIGku ZS4gLTEgd2hlbiB0aGUgaXJxIHJlcXVlc3QgaXNuJ3QgYW4gcmVtYXBwaW5nIGZvcm1hdC4KPiBA QCAtNDc4LDYgKzQ4OCwxODkgQEAgc3RhdGljIGludCB2dnRkX3JlY29yZF9mYXVsdChzdHJ1Y3Qg dnZ0ZCAqdnZ0ZCwKPiAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Cj4gIH0KPiAgCj4gKy8qCj4g KyAqIFByb2Nlc3MgYW4gaW52YWxpZGF0aW9uIGRlc2NyaXB0b3IuIEN1cnJlbnRseSwgb25seSB0 d28gdHlwZXMgZGVzY3JpcHRvcnMsCj4gKyAqIEludGVycnVwdCBFbnRyeSBDYWNoZSBJbnZhbGlk YXRpb24gRGVzY3JpdG9yIGFuZCBJbnZhbGlkYXRpb24gV2FpdAo+ICsgKiBEZXNjcmlwdG9yIGFy ZSBoYW5kbGVkLgo+ICsgKiBAdnZ0ZDogdGhlIHZpcnR1YWwgdnRkIGluc3RhbmNlCj4gKyAqIEBp OiB0aGUgaW5kZXggb2YgdGhlIGludmFsaWRhdGlvbiBkZXNjcmlwdG9yIHRvIGJlIHByb2Nlc3Nl ZAo+ICsgKgo+ICsgKiBJZiBzdWNjZXNzIHJldHVybiAwLCBvciByZXR1cm4gbm9uLXplcm8gd2hl biBmYWlsdXJlLgo+ICsgKi8KPiArc3RhdGljIGludCBwcm9jZXNzX2lxZShzdHJ1Y3QgdnZ0ZCAq dnZ0ZCwgdWludDMyX3QgaSkKPiArewo+ICsgICAgc3RydWN0IHFpbnZhbF9lbnRyeSBxaW52YWw7 Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArCj4gKyAgICBpZiAoICF2dnRkLT5pbnZfcXVldWVfYmFz ZSApCj4gKyAgICB7Cj4gKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgIkludmFsaWRhdGlv biBxdWV1ZSBiYXNlIGlzbid0IHNldFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwoKSWYgeW91 IGp1c3QgcmV0dXJuIC0xIG9yIDAgcGxlYXNlIHVzZSBib29sIGluc3RlYWQuIE9yIHJldHVybiBw cm9wZXIKZXJyb3IgY29kZXMuCgo+ICsgICAgfQo+ICsgICAgcWludmFsID0gKChzdHJ1Y3QgcWlu dmFsX2VudHJ5ICopdnZ0ZC0+aW52X3F1ZXVlX2Jhc2UpW2ldOwoKU2VlIG15IGNvbW1lbnQgYWJv dmUgcmVnYXJkaW5nIGhvdyBpbnZfcXVldWVfYmFzZSBpcyBkZWNsYXJlZCwgSSdtIG5vdApzdXJl IHdoeSB0aGUgY29weSBpcyBuZWVkZWQgaGVyZS4KCj4gKwo+ICsgICAgc3dpdGNoICggcWludmFs LnEuaW52X3dhaXRfZHNjLmxvLnR5cGUgKQo+ICsgICAgewo+ICsgICAgY2FzZSBUWVBFX0lOVkFM X1dBSVQ6Cj4gKyAgICAgICAgaWYgKCBxaW52YWwucS5pbnZfd2FpdF9kc2MubG8uc3cgKQo+ICsg ICAgICAgIHsKPiArICAgICAgICAgICAgdWludDMyX3QgZGF0YSA9IHFpbnZhbC5xLmludl93YWl0 X2RzYy5sby5zZGF0YTsKPiArICAgICAgICAgICAgdWludDY0X3QgYWRkciA9IHFpbnZhbC5xLmlu dl93YWl0X2RzYy5oaS5zYWRkciA8PCAyOwo+ICsKPiArICAgICAgICAgICAgcmV0ID0gaHZtX2Nv cHlfdG9fZ3Vlc3RfcGh5cyhhZGRyLCAmZGF0YSwgc2l6ZW9mKGRhdGEpLCBjdXJyZW50KTsKPiAr ICAgICAgICAgICAgaWYgKCByZXQgKQo+ICsgICAgICAgICAgICAgICAgdnZ0ZF9pbmZvKCJGYWls ZWQgdG8gd3JpdGUgc3RhdHVzIGFkZHJlc3NcbiIpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAg ICAgLyoKPiArICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGNvZGUgZ2VuZXJhdGVzIGFuIGludmFs aWRhdGlvbiBjb21wbGV0aW9uIGV2ZW50Cj4gKyAgICAgICAgICogaW5kaWNhdGluZyB0aGUgaW52 YWxpZGF0aW9uIHdhaXQgZGVzY3JpcHRvciBjb21wbGV0aW9uLiBOb3RlIHRoYXQKPiArICAgICAg ICAgKiB0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQgaXMgbm90IHRlc3RlZCBwcm9wZXJseS4K PiArICAgICAgICAgKi8KPiArICAgICAgICBpZiAoIHFpbnZhbC5xLmludl93YWl0X2RzYy5sby5p ZmxhZyApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpZiAoICF2dnRkX3Rlc3RfYW5kX3Nl dF9iaXQodnZ0ZCwgRE1BUl9JQ1NfUkVHLCBETUFfSUNTX0lXQ19TSElGVCkgKQo+ICsgICAgICAg ICAgICB7Cj4gKyAgICAgICAgICAgICAgICB2dnRkX3NldF9iaXQodnZ0ZCwgRE1BUl9JRUNUTF9S RUcsIERNQV9JRUNUTF9JUF9TSElGVCk7Cj4gKyAgICAgICAgICAgICAgICBpZiAoICF2dnRkX3Rl c3RfYml0KHZ2dGQsIERNQVJfSUVDVExfUkVHLCBETUFfSUVDVExfSU1fU0hJRlQpICkKPiArICAg ICAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgICAgICB2dnRkX25vdGlmeV9pbnZfY29t cGxldGlvbih2dnRkKTsKPiArICAgICAgICAgICAgICAgICAgICB2dnRkX2NsZWFyX2JpdCh2dnRk LCBETUFSX0lFQ1RMX1JFRywgRE1BX0lFQ1RMX0lQX1NISUZUKTsKPiArICAgICAgICAgICAgICAg IH0KPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgICAgICBicmVhazsKPiArCj4g KyAgICBjYXNlIFRZUEVfSU5WQUxfSUVDOgo+ICsgICAgICAgIC8qIE5vIGNhY2hlIGlzIHByZXNl cnZlZCBpbiB2dnRkLCBub3RoaW5nIGlzIG5lZWRlZCB0byBiZSBmbHVzaGVkICovCj4gKyAgICAg ICAgYnJlYWs7Cj4gKwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICB2dnRkX2RlYnVnKCJkJWQ6 IEludmFsaWRhdGlvbiB0eXBlICgleCkgaXNuJ3Qgc3VwcG9ydGVkXG4iLAo+ICsgICAgICAgICAg ICAgICAgICAgdnZ0ZC0+ZG9tYWluLT5kb21haW5faWQsIHFpbnZhbC5xLmludl93YWl0X2RzYy5s by50eXBlKTsKPiArICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJu IHJldDsKPiArfQo+ICsKPiArLyoKPiArICogSW52YWxpZGF0ZSBhbGwgdGhlIGRlc2NyaXB0b3Jz IGluIEludmFsaWRhdGlvbiBRdWV1ZS4KPiArICovCj4gK3N0YXRpYyB2b2lkIHZ2dGRfcHJvY2Vz c19pcShzdHJ1Y3QgdnZ0ZCAqdnZ0ZCkKPiArewo+ICsgICAgdWludDMyX3QgbWF4X2VudHJ5LCBp LCBpcWgsIGlxdDsKPiArICAgIGludCBlcnIgPSAwOwo+ICsKPiArICAgIC8qIFRyeWxvY2sgYXZv aWRzIG1vcmUgdGhhbiAxIGNhbGxlciBkZWFsaW5nIHdpdGggaW52YWxpZGF0aW9uIHJlcXVlc3Rz ICovCj4gKyAgICBpZiAoICFzcGluX3RyeWxvY2soJnZ2dGQtPmllX2xvY2spICkKClVoLCBpcyB0 aGlzIGNvcnJlY3Q/IFlvdSBhcmUgcmV0dXJuaW5nIHdpdGhvdXQgdGhlIHF1ZXVlIGJlaW5nCmlu dmFsaWRhdGVkIEFGQUlDVC4KCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIGlxaCA9IE1B U0tfRVhUUih2dnRkX2dldF9yZWdfcXVhZCh2dnRkLCBETUFSX0lRSF9SRUcpLCBRSU5WQUxfSU5E RVhfTUFTSyk7Cj4gKyAgICBpcXQgPSBNQVNLX0VYVFIodnZ0ZF9nZXRfcmVnX3F1YWQodnZ0ZCwg RE1BUl9JUVRfUkVHKSwgUUlOVkFMX0lOREVYX01BU0spOwo+ICsgICAgLyoKPiArICAgICAqIE5v IG5ldyBkZXNjcmlwdG9yIGlzIGZldGNoZWQgZnJvbSB0aGUgSW52YWxpZGF0aW9uIFF1ZXVlIHVu dGlsCj4gKyAgICAgKiBzb2Z0d2FyZSBjbGVhcnMgdGhlIElRRSBmaWVsZCBpbiB0aGUgRmF1bHQg U3RhdHVzIFJlZ2lzdGVyCj4gKyAgICAgKi8KPiArICAgIGlmICggdnZ0ZF90ZXN0X2JpdCh2dnRk LCBETUFSX0ZTVFNfUkVHLCBETUFfRlNUU19JUUVfU0hJRlQpICkKPiArICAgIHsKPiArICAgICAg ICBzcGluX3VubG9jaygmdnZ0ZC0+aWVfbG9jayk7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAg fQo+ICsKPiArICAgIG1heF9lbnRyeSA9IDEgPDwgKFFJTlZBTF9FTlRSWV9PUkRFUiArCj4gKyAg ICAgICAgICAgICAgICAgICAgICBETUFfSVFBX1FTKHZ2dGRfZ2V0X3JlZ19xdWFkKHZ2dGQsIERN QVJfSVFBX1JFRykpKTsKPiArCj4gKyAgICBBU1NFUlQoaXF0IDwgbWF4X2VudHJ5KTsKCklzIGl0 IHBvc3NpYmxlIGZvciB0aGUgdXNlciB0byB3cml0ZSBhIHZhbGlkIHZhbHVlIHRvIERNQVJfSVFU X1JFRyBhbmQKdGhlbiBjaGFuZ2UgRE1BUl9JUUFfUkVHIGluIG9yZGVyIHRvIG1ha2UgdGhlIGFi b3ZlIEFTU0VSVCB0cmlnZ2VyPwoKPiArICAgIGlmICggaXFoID09IGlxdCApCj4gKyAgICB7Cj4g KyAgICAgICAgc3Bpbl91bmxvY2soJnZ2dGQtPmllX2xvY2spOwo+ICsgICAgICAgIHJldHVybjsK PiArICAgIH0KPiArCj4gKyAgICBmb3IgKCBpID0gaXFoOyBpICE9IGlxdDsgaSA9IChpICsgMSkg JSBtYXhfZW50cnkgKQo+ICsgICAgewo+ICsgICAgICAgIGVyciA9IHByb2Nlc3NfaXFlKHZ2dGQs IGkpOwo+ICsgICAgICAgIGlmICggZXJyICkKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIHNldCBJUUggYmVmb3JlIGNoZWNraW5nIGVycm9yLCBi ZWNhdXNlIElRSCBzaG91bGQgcmVmZXJlbmNlCj4gKyAgICAgKiB0aGUgZGVzcmlwdG9yIGFzc29j aWF0ZWQgd2l0aCB0aGUgZXJyb3Igd2hlbiBhbiBlcnJvciBpcyBzZWVuCj4gKyAgICAgKiBieSBn dWVzdAo+ICsgICAgICovCj4gKyAgICB2dnRkX3NldF9yZWdfcXVhZCh2dnRkLCBETUFSX0lRSF9S RUcsIGkgPDwgUUlOVkFMX0lOREVYX1NISUZUKTsKPiArCj4gKyAgICBzcGluX3VubG9jaygmdnZ0 ZC0+aWVfbG9jayk7Cj4gKyAgICBpZiAoIGVyciApCj4gKyAgICB7Cj4gKyAgICAgICAgc3Bpbl9s b2NrKCZ2dnRkLT5mZV9sb2NrKTsKPiArICAgICAgICB2dnRkX3JlcG9ydF9ub25fcmVjb3ZlcmFi bGVfZmF1bHQodnZ0ZCwgRE1BX0ZTVFNfSVFFX1NISUZUKTsKPiArICAgICAgICBzcGluX3VubG9j aygmdnZ0ZC0+ZmVfbG9jayk7Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZ2dGRf d3JpdGVfaXF0KHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCB2YWwpCj4gK3sKPiArICAgIHVp bnQzMl90IG1heF9lbnRyeTsKPiArCj4gKyAgICBpZiAoIHZhbCAmIH5RSU5WQUxfSU5ERVhfTUFT SyApCj4gKyAgICB7Cj4gKyAgICAgICAgdnZ0ZF9pbmZvKCJhdHRlbXB0cyB0byBzZXQgcmVzZXJ2 ZWQgYml0cyBpbiBJUVRcbiIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAg ICBtYXhfZW50cnkgPSAxVSA8PCAoUUlOVkFMX0VOVFJZX09SREVSICsKPiArICAgICAgICAgICAg ICAgICAgICAgICBETUFfSVFBX1FTKHZ2dGRfZ2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfSVFBX1JF RykpKTsKPiArICAgIGlmICggTUFTS19FWFRSKHZhbCwgUUlOVkFMX0lOREVYX01BU0spID49IG1h eF9lbnRyeSApCj4gKyAgICB7Cj4gKyAgICAgICAgdnZ0ZF9pbmZvKCJJUVQ6IFZhbHVlICV4IGV4 Y2VlZGVkIHN1cHBvcnRlZCBtYXggaW5kZXguIiwgdmFsKTsKPiArICAgICAgICByZXR1cm47Cj4g KyAgICB9Cj4gKwo+ICsgICAgdnZ0ZF9zZXRfcmVnKHZ2dGQsIERNQVJfSVFUX1JFRywgdmFsKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgdnZ0ZF93cml0ZV9pcWEoc3RydWN0IHZ2dGQgKnZ2dGQs IHVpbnQzMl90IHZhbCwgYm9vbCBoaWdoKQo+ICt7Cj4gKyAgICB1aW50NjRfdCBjYXAgPSB2dnRk X2dldF9yZWdfcXVhZCh2dnRkLCBETUFSX0NBUF9SRUcpOwo+ICsgICAgdWludDY0X3Qgb2xkID0g dnZ0ZF9nZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9JUUFfUkVHKTsKPiArICAgIHVpbnQ2NF90IG5l dzsKPiArCj4gKyAgICBpZiAoIGhpZ2ggKQo+ICsgICAgICAgIG5ldyA9ICgodWludDY0X3QpdmFs IDw8IDMyKSB8IChvbGQgJiAweGZmZmZmZmZmKTsKPiArICAgIGVsc2UKPiArICAgICAgICBuZXcg PSAoKG9sZCA+PiAzMikgPDwgMzIpIHwgdmFsOwoKWW91IGNhbiBhbHNvIHVzZSBvbGQgJiB+MHhm ZmZmZmZmZlVMCgo+ICsKPiArICAgIGlmICggbmV3ICYgKH4oKDFVTEwgPDwgY2FwX21nYXcoY2Fw KSkgLSAxKSB8IERNQV9JUUFfUlNWRCkgKQo+ICsgICAgewo+ICsgICAgICAgIHZ2dGRfaW5mbygi QXR0ZW1wdCB0byBzZXQgcmVzZXJ2ZWQgYml0cyBpbiBJUUFcbiIpOwo+ICsgICAgICAgIHJldHVy bjsKPiArICAgIH0KPiArCj4gKyAgICB2dnRkX3NldF9yZWdfcXVhZCh2dnRkLCBETUFSX0lRQV9S RUcsIG5ldyk7Cj4gKyAgICBpZiAoIGhpZ2ggJiYgIXZ2dGQtPmludl9xdWV1ZV9iYXNlICkKPiAr ICAgICAgICB2dnRkLT5pbnZfcXVldWVfYmFzZSA9IG1hcF9ndWVzdF9wYWdlcyh2dnRkLT5kb21h aW4sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZO X0RPV04oRE1BX0lRQV9BRERSKG5ldykpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEgPDwgRE1BX0lRQV9RUyhuZXcpKTsKCkRvbid0IHlvdSBuZWVk IHRvIHBpY2sgYSByZWZlcmVuY2UgdG8gdGhpcyBwYWdlKHMpPwoKPiArICAgIGVsc2UgaWYgKCAh aGlnaCAmJiB2dnRkLT5pbnZfcXVldWVfYmFzZSApCgpJJ20gbm90IHN1cmUgSSBmb2xsb3cgdGhl IGxvZ2ljIHdpdGggaGlnaCBoZXJlLgoKPiArICAgIHsKPiArICAgICAgICB1bm1hcF9ndWVzdF9w YWdlcyh2dnRkLT5pbnZfcXVldWVfYmFzZSwgMSA8PCBETUFfSVFBX1FTKG9sZCkpOwo+ICsgICAg ICAgIHZ2dGQtPmludl9xdWV1ZV9iYXNlID0gTlVMTDsKPiArICAgIH0KPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgdnZ0ZF93cml0ZV9pY3Moc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHZhbCkK PiArewo+ICsgICAgaWYgKCB2YWwgJiBETUFfSUNTX0lXQyApCj4gKyAgICB7Cj4gKyAgICAgICAg dnZ0ZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9JQ1NfUkVHLCBETUFfSUNTX0lXQ19TSElGVCk7Cj4g KyAgICAgICAgLyogV2hlbiBJV0MgZmllbGQgaXMgY2xlYXJlZCwgdGhlIElQIGZpZWxkIG5lZWRz IHRvIGJlIGNsZWFyZWQgKi8KPiArICAgICAgICB2dnRkX2NsZWFyX2JpdCh2dnRkLCBETUFSX0lF Q1RMX1JFRywgRE1BX0lFQ1RMX0lQX1NISUZUKTsKPiArICAgIH0KPiArfQo+ICsKPiAgc3RhdGlj IGludCB2dnRkX3dyaXRlX2ZyY2QzKHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCB2YWwpCj4g IHsKPiAgICAgIC8qIFdyaXRpbmcgYSAxIG1lYW5zIGNsZWFyIGZhdWx0ICovCj4gQEAgLTQ4OSw2 ICs2ODIsMjAgQEAgc3RhdGljIGludCB2dnRkX3dyaXRlX2ZyY2QzKHN0cnVjdCB2dnRkICp2dnRk LCB1aW50MzJfdCB2YWwpCj4gICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwo+ICB9Cj4gIAo+ICtz dGF0aWMgdm9pZCB2dnRkX3dyaXRlX2llY3RsKHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCB2 YWwpCj4gK3sKPiArICAgIC8qIE9ubHkgRE1BX0lFQ1RMX0lNIGJpdCBpcyB3cml0YWJsZS4gR2Vu ZXJhdGUgcGVuZGluZyBldmVudCB3aGVuIHVubWFzayAqLwo+ICsgICAgaWYgKCAhKHZhbCAmIERN QV9JRUNUTF9JTSkgKQo+ICsgICAgewo+ICsgICAgICAgIC8qIENsZWFyIElNIGFuZCBjbGVhciBJ UCAqLwo+ICsgICAgICAgIHZ2dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJfSUVDVExfUkVHLCBETUFf SUVDVExfSU1fU0hJRlQpOwo+ICsgICAgICAgIGlmICggdnZ0ZF90ZXN0X2FuZF9jbGVhcl9iaXQo dnZ0ZCwgRE1BUl9JRUNUTF9SRUcsIERNQV9JRUNUTF9JUF9TSElGVCkgKQo+ICsgICAgICAgICAg ICB2dnRkX25vdGlmeV9pbnZfY29tcGxldGlvbih2dnRkKTsKPiArICAgIH0KPiArICAgIGVsc2UK PiArICAgICAgICB2dnRkX3NldF9iaXQodnZ0ZCwgRE1BUl9JRUNUTF9SRUcsIERNQV9JRUNUTF9J TV9TSElGVCk7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkIHZ2dGRfd3JpdGVfZmVjdGwoc3RydWN0 IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHZhbCkKPiAgewo+ICAgICAgLyoKPiBAQCAtNjgxLDYgKzg4 OCw0OCBAQCBzdGF0aWMgdm9pZCB2dnRkX3dyaXRlX2ZhdWx0X3JlZ3Moc3RydWN0IHZ2dGQgKnZ2 dGQsIHVuc2lnbmVkIGxvbmcgdmFsLAo+ICAgICAgc3Bpbl91bmxvY2soJnZ2dGQtPmZlX2xvY2sp Owo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCB2dnRkX3dyaXRlX2ludmFsaWRhdGlvbl9yZWdzKHN0 cnVjdCB2dnRkICp2dnRkLCB1bnNpZ25lZCBsb25nIHZhbCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQg bGVuKQo+ICt7Cj4gKyAgICBzcGluX2xvY2soJnZ2dGQtPmllX2xvY2spOwo+ICsgICAgZm9yICgg OyBsZW4gOyBsZW4gLT0gNCwgb2Zmc2V0ICs9IDQsIHZhbCA9IHZhbCA+PiAzMikKClNhbWUgY29t bWVudCBhcyBpbiB0aGUgcHJldmlvdXMgcGF0Y2gsIEkgZG9uJ3QgcmVhbGx5IGxpa2UgdGhlIGZv cgpsb29wLCBidXQgSSBndWVzcyA2NGJpdCBhY2Nlc3MgbXVzdCBiZSBhbGxvd2VkIHRvIHRoZXNl IGdydXAgb2YKcmVnaXN0ZXJzPwoKPiArICAgIHsKPiArICAgICAgICBzd2l0Y2ggKCBvZmZzZXQg KQo+ICsgICAgICAgIHsKPiArICAgICAgICBjYXNlIERNQVJfSUVDVExfUkVHOgo+ICsgICAgICAg ICAgICB2dnRkX3dyaXRlX2llY3RsKHZ2dGQsIHZhbCk7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ ICsKPiArICAgICAgICBjYXNlIERNQVJfSUNTX1JFRzoKPiArICAgICAgICAgICAgdnZ0ZF93cml0 ZV9pY3ModnZ0ZCwgdmFsKTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgIGNh c2UgRE1BUl9JUVRfUkVHOgo+ICsgICAgICAgICAgICB2dnRkX3dyaXRlX2lxdCh2dnRkLCB2YWwp Owo+ICsgICAgICAgICAgICBicmVhazsKPiArCj4gKyAgICAgICAgY2FzZSBETUFSX0lRQV9SRUc6 Cj4gKyAgICAgICAgICAgIHZ2dGRfd3JpdGVfaXFhKHZ2dGQsIHZhbCwgMCk7Cj4gKyAgICAgICAg ICAgIGJyZWFrOwo+ICsKPiArICAgICAgICBjYXNlIERNQVJfSVFVQV9SRUc6Cj4gKyAgICAgICAg ICAgIHZ2dGRfd3JpdGVfaXFhKHZ2dGQsIHZhbCwgMSk7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ ICsKPiArICAgICAgICBjYXNlIERNQVJfSUVEQVRBX1JFRzoKPiArICAgICAgICBjYXNlIERNQVJf SUVBRERSX1JFRzoKPiArICAgICAgICBjYXNlIERNQVJfSUVVQUREUl9SRUc6Cj4gKyAgICAgICAg ICAgIHZ2dGRfc2V0X3JlZyh2dnRkLCBvZmZzZXQsIHZhbCk7Cj4gKyAgICAgICAgICAgIGJyZWFr Owo+ICsKPiArICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAg ICB9Cj4gKyAgICB9Cj4gKyAgICBzcGluX3VubG9jaygmdnZ0ZC0+aWVfbG9jayk7Cj4gKwo+ICt9 Cj4gKwo+ICBzdGF0aWMgaW50IHZ2dGRfd3JpdGUoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxv bmcgYWRkciwKPiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4sIHVuc2ln bmVkIGxvbmcgdmFsKQo+ICB7Cj4gQEAgLTcxOSw2ICs5NjgsMTcgQEAgc3RhdGljIGludCB2dnRk X3dyaXRlKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGFkZHIsCj4gICAgICAgICAgdnZ0 ZF93cml0ZV9mYXVsdF9yZWdzKHZ2dGQsIHZhbCwgb2Zmc2V0LCBsZW4pOwo+ICAgICAgICAgIGJy ZWFrOwo+ICAKPiArICAgIGNhc2UgRE1BUl9JRUNUTF9SRUc6Cj4gKyAgICBjYXNlIERNQVJfSUNT X1JFRzoKPiArICAgIGNhc2UgRE1BUl9JUVRfUkVHOgo+ICsgICAgY2FzZSBETUFSX0lRQV9SRUc6 Cj4gKyAgICBjYXNlIERNQVJfSVFVQV9SRUc6Cj4gKyAgICBjYXNlIERNQVJfSUVEQVRBX1JFRzoK PiArICAgIGNhc2UgRE1BUl9JRUFERFJfUkVHOgo+ICsgICAgY2FzZSBETUFSX0lFVUFERFJfUkVH Ogo+ICsgICAgICAgIHZ2dGRfd3JpdGVfaW52YWxpZGF0aW9uX3JlZ3ModnZ0ZCwgdmFsLCBvZmZz ZXQsIGxlbik7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKwo+ICAgICAgZGVmYXVsdDoKPiAgICAgICAg ICBpZiAoIChvZmZzZXQgPT0gKGZhdWx0X29mZnNldCArIERNQV9GUkNEMl9PRkZTRVQpKSB8fAo+ ICAgICAgICAgICAgICAgKG9mZnNldCA9PSAoZmF1bHRfb2Zmc2V0ICsgRE1BX0ZSQ0QzX09GRlNF VCkpICkKPiBAQCAtODQwLDcgKzExMDAsOCBAQCBzdGF0aWMgaW50IHZ2dGRfaGFuZGxlX2lycV9y ZXF1ZXN0KGNvbnN0IHN0cnVjdCBkb21haW4gKmQsCj4gICAgICAgICAgICAgICAgICAgICAgICAg IGlydGUucmVtYXAudG0pOwo+ICAKPiAgIG91dDoKPiAtICAgIGF0b21pY19kZWMoJnZ2dGQtPmlu ZmxpZ2h0X2ludHIpOwo+ICsgICAgaWYgKCAhYXRvbWljX2RlY19hbmRfdGVzdCgmdnZ0ZC0+aW5m bGlnaHRfaW50cikgKQo+ICsgICAgICAgIHZ2dGRfcHJvY2Vzc19pcSh2dnRkKTsKPiAgICAgIHJl dHVybiByZXQ7Cj4gIH0KPiAgCj4gQEAgLTkxMSw2ICsxMTcyLDcgQEAgc3RhdGljIGludCB2dnRk X2NyZWF0ZShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgdmlvbW11ICp2aW9tbXUpCj4gICAgICB2 dnRkLT5kb21haW4gPSBkOwo+ICAgICAgcmVnaXN0ZXJfbW1pb19oYW5kbGVyKGQsICZ2dnRkX21t aW9fb3BzKTsKPiAgICAgIHNwaW5fbG9ja19pbml0KCZ2dnRkLT5mZV9sb2NrKTsKPiArICAgIHNw aW5fbG9ja19pbml0KCZ2dnRkLT5pZV9sb2NrKTsKPiAgCj4gICAgICB2aW9tbXUtPnByaXYgPSB2 dnRkOwo+ICAKPiBAQCAtOTMwLDYgKzExOTIsMTMgQEAgc3RhdGljIGludCB2dnRkX2Rlc3Ryb3ko c3RydWN0IHZpb21tdSAqdmlvbW11KQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKHN0cnVjdCBpcmVtYXBfZW50cnkpKSk7Cj4gICAgICAgICAgICAgIHZ2dGQt PmlydF9iYXNlID0gTlVMTDsKPiAgICAgICAgICB9Cj4gKyAgICAgICAgaWYgKCB2dnRkLT5pbnZf cXVldWVfYmFzZSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICB1aW50NjRfdCBvbGQgPSB2 dnRkX2dldF9yZWdfcXVhZCh2dnRkLCBETUFSX0lRQV9SRUcpOwo+ICsKPiArICAgICAgICAgICAg dW5tYXBfZ3Vlc3RfcGFnZXModnZ0ZC0+aW52X3F1ZXVlX2Jhc2UsIDEgPDwgRE1BX0lRQV9RUyhv bGQpKTsKCkRvbid0IHlvdSBhbHNvIG5lZWQgdG8gdW5tYXAgdGhpcyBwYWdlKHMpIHdoZW4gUUlF IGlzIGRpc2FibGVkPwoKVGhhbmtzLCBSb2dlci4KCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s aXN0aW5mby94ZW4tZGV2ZWw=