From mboxrd@z Thu Jan 1 00:00:00 1970 From: Martin Wilck Subject: Re: [RFC PATCH 2/5] move waiter code from libmultipath to multipathd Date: Sat, 10 Feb 2018 17:16:08 +0100 Message-ID: <1518279368.2937.27.camel@suse.com> References: <1518239251-29392-1-git-send-email-bmarzins@redhat.com> <1518239251-29392-3-git-send-email-bmarzins@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1518239251-29392-3-git-send-email-bmarzins@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com To: Benjamin Marzinski , device-mapper development List-Id: dm-devel.ids T24gRnJpLCAyMDE4LTAyLTA5IGF0IDIzOjA3IC0wNjAwLCBCZW5qYW1pbiBNYXJ6aW5za2kgd3Jv dGU6Cj4gT25seSBtdWx0aXBhdGhkIHVzZXMgdGhlIGNvZGUgaW4gd2FpdGVyLltjaF0gYW5kIHRo ZSBmdW5jdGlvbnMgdGhhdAo+IGNhbGwKPiBpdCBkaXJlY3RseSwgc28gdGhleSBzaG91bGQgYWxs IGxpdmUgaW4gdGhlIG11bHRpcGF0aGQKPiBkaXJlY3RvcnkuICBUaGlzCj4gcGF0Y2ggaXMgc2lt cGx5IG1vdmluZyB0aGUgd2FpdGVyLltjaF0gZmlsZXMgYW5kIHRoZSBmdW5jdGlvbnMgaW4KPiBz dHJ1Y3RzX3ZlYyB0aGF0IHVzZSB0aGVtLiBOb25lIG9mIHRoZSBtb3ZlZCBjb2RlIGhhcyBiZWVu IGNoYW5nZWQuCj4gCj4gU2lnbmVkLW9mZi1ieTogQmVuamFtaW4gTWFyemluc2tpIDxibWFyemlu c0ByZWRoYXQuY29tPgoKUmV2aWV3ZWQtYnk6IE1hcnRpbiBXaWxjayA8bXdpbGNrQHN1c2UuY29t PgoKPiAtLS0KPiAgbGlibXVsdGlwYXRoL01ha2VmaWxlICAgICAgfCAgIDIgKy0KPiAgbGlibXVs dGlwYXRoL3N0cnVjdHNfdmVjLmMgfCAgOTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIGxpYm11 bHRpcGF0aC9zdHJ1Y3RzX3ZlYy5oIHwgICA0ICstCj4gIGxpYm11bHRpcGF0aC93YWl0ZXIuYyAg ICAgIHwgMjE1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IC0tLS0tLS0tLS0t LQo+ICBsaWJtdWx0aXBhdGgvd2FpdGVyLmggICAgICB8ICAxNyAtLS0tCj4gIG11bHRpcGF0aGQv TWFrZWZpbGUgICAgICAgIHwgICAyICstCj4gIG11bHRpcGF0aGQvbWFpbi5jICAgICAgICAgIHwg IDk2ICsrKysrKysrKysrKysrKysrKysrCj4gIG11bHRpcGF0aGQvd2FpdGVyLmMgICAgICAgIHwg MjE1Cj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIG11 bHRpcGF0aGQvd2FpdGVyLmggICAgICAgIHwgIDE3ICsrKysKPiAgOSBmaWxlcyBjaGFuZ2VkLCAz MzIgaW5zZXJ0aW9ucygrKSwgMzM0IGRlbGV0aW9ucygtKQo+ICBkZWxldGUgbW9kZSAxMDA2NDQg bGlibXVsdGlwYXRoL3dhaXRlci5jCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJtdWx0aXBhdGgv d2FpdGVyLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IG11bHRpcGF0aGQvd2FpdGVyLmMKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IG11bHRpcGF0aGQvd2FpdGVyLmgKPiAKPiBkaWZmIC0tZ2l0IGEvbGli bXVsdGlwYXRoL01ha2VmaWxlIGIvbGlibXVsdGlwYXRoL01ha2VmaWxlCj4gaW5kZXggNjQ0N2Q4 ZC4uYTEwMDViMiAxMDA2NDQKPiAtLS0gYS9saWJtdWx0aXBhdGgvTWFrZWZpbGUKPiArKysgYi9s aWJtdWx0aXBhdGgvTWFrZWZpbGUKPiBAQCAtNDIsNyArNDIsNyBAQCBPQkpTID0gbWVtb3J5Lm8g cGFyc2VyLm8gdmVjdG9yLm8gZGV2bWFwcGVyLm8KPiBjYWxsb3V0Lm8gXAo+ICAJcGdwb2xpY2ll cy5vIGRlYnVnLm8gZGVmYXVsdHMubyB1ZXZlbnQubyB0aW1lLXV0aWwubyBcCj4gIAlzd2l0Y2hn cm91cC5vIHV4c29jay5vIHByaW50Lm8gYWxpYXMubyBsb2dfcHRocmVhZC5vIFwKPiAgCWxvZy5v IGNvbmZpZ3VyZS5vIHN0cnVjdHNfdmVjLm8gc3lzZnMubyBwcmlvLm8gY2hlY2tlcnMubyBcCj4g LQlsb2NrLm8gd2FpdGVyLm8gZmlsZS5vIHd3aWRzLm8gcHJpb3JpdGl6ZXJzL2FsdWFfcnRwZy5v Cj4gcHJrZXkubyBcCj4gKwlsb2NrLm8gZmlsZS5vIHd3aWRzLm8gcHJpb3JpdGl6ZXJzL2FsdWFf cnRwZy5vIHBya2V5Lm8gXAo+ICAJaW9fZXJyX3N0YXQubwo+ICAKPiAgYWxsOiAkKExJQlMpCj4g ZGlmZiAtLWdpdCBhL2xpYm11bHRpcGF0aC9zdHJ1Y3RzX3ZlYy5jIGIvbGlibXVsdGlwYXRoL3N0 cnVjdHNfdmVjLmMKPiBpbmRleCBhYmY1MzI3Li43N2IwNDViIDEwMDY0NAo+IC0tLSBhL2xpYm11 bHRpcGF0aC9zdHJ1Y3RzX3ZlYy5jCj4gKysrIGIvbGlibXVsdGlwYXRoL3N0cnVjdHNfdmVjLmMK PiBAQCAtMTAsNyArMTAsNiBAQAo+ICAjaW5jbHVkZSAic3RydWN0cy5oIgo+ICAjaW5jbHVkZSAi c3RydWN0c192ZWMuaCIKPiAgI2luY2x1ZGUgInN5c2ZzLmgiCj4gLSNpbmNsdWRlICJ3YWl0ZXIu aCIKPiAgI2luY2x1ZGUgImRldm1hcHBlci5oIgo+ICAjaW5jbHVkZSAiZG1wYXJzZXIuaCIKPiAg I2luY2x1ZGUgInByb3BzZWwuaCIKPiBAQCAtMTA3LDE3ICsxMDYsNiBAQCB2b2lkIG9ycGhhbl9w YXRocyh2ZWN0b3IgcGF0aHZlYywgc3RydWN0Cj4gbXVsdGlwYXRoICptcHApCj4gIAl9Cj4gIH0K PiAgCj4gLXN0YXRpYyB2b2lkCj4gLXNldF9tdWx0aXBhdGhfd3dpZCAoc3RydWN0IG11bHRpcGF0 aCAqIG1wcCkKPiAtewo+IC0JaWYgKHN0cmxlbihtcHAtPnd3aWQpKQo+IC0JCXJldHVybjsKPiAt Cj4gLQlkbV9nZXRfdXVpZChtcHAtPmFsaWFzLCBtcHAtPnd3aWQpOwo+IC19Cj4gLQo+IC0jZGVm aW5lIFBVUkdFX1ZFQyAxCj4gLQo+ICB2b2lkCj4gIHJlbW92ZV9tYXAoc3RydWN0IG11bHRpcGF0 aCAqIG1wcCwgc3RydWN0IHZlY3RvcnMgKiB2ZWNzLCBpbnQKPiBwdXJnZV92ZWMpCj4gIHsKPiBA QCAtMzc5LDkyICszNjcsNiBAQCBzeW5jX21hcF9zdGF0ZShzdHJ1Y3QgbXVsdGlwYXRoICptcHAp Cj4gIAl9Cj4gIH0KPiAgCj4gLWludAo+IC11cGRhdGVfbWFwIChzdHJ1Y3QgbXVsdGlwYXRoICpt cHAsIHN0cnVjdCB2ZWN0b3JzICp2ZWNzKQo+IC17Cj4gLQlpbnQgcmV0cmllcyA9IDM7Cj4gLQlj aGFyIHBhcmFtc1tQQVJBTVNfU0laRV0gPSB7MH07Cj4gLQo+IC1yZXRyeToKPiAtCWNvbmRsb2co NCwgIiVzOiB1cGRhdGluZyBuZXcgbWFwIiwgbXBwLT5hbGlhcyk7Cj4gLQlpZiAoYWRvcHRfcGF0 aHModmVjcy0+cGF0aHZlYywgbXBwKSkgewo+IC0JCWNvbmRsb2coMCwgIiVzOiBmYWlsZWQgdG8g YWRvcHQgcGF0aHMgZm9yIG5ldyBtYXAKPiB1cGRhdGUiLAo+IC0JCQltcHAtPmFsaWFzKTsKPiAt CQlyZXRyaWVzID0gLTE7Cj4gLQkJZ290byBmYWlsOwo+IC0JfQo+IC0JdmVyaWZ5X3BhdGhzKG1w cCwgdmVjcyk7Cj4gLQltcHAtPmFjdGlvbiA9IEFDVF9SRUxPQUQ7Cj4gLQo+IC0JZXh0cmFjdF9o d2VfZnJvbV9wYXRoKG1wcCk7Cj4gLQlpZiAoc2V0dXBfbWFwKG1wcCwgcGFyYW1zLCBQQVJBTVNf U0laRSkpIHsKPiAtCQljb25kbG9nKDAsICIlczogZmFpbGVkIHRvIHNldHVwIG5ldyBtYXAgaW4g dXBkYXRlIiwKPiBtcHAtPmFsaWFzKTsKPiAtCQlyZXRyaWVzID0gLTE7Cj4gLQkJZ290byBmYWls Owo+IC0JfQo+IC0JaWYgKGRvbWFwKG1wcCwgcGFyYW1zLCAxKSA8PSAwICYmIHJldHJpZXMtLSA+ IDApIHsKPiAtCQljb25kbG9nKDAsICIlczogbWFwX3VkYXRlIHNsZWVwIiwgbXBwLT5hbGlhcyk7 Cj4gLQkJc2xlZXAoMSk7Cj4gLQkJZ290byByZXRyeTsKPiAtCX0KPiAtCWRtX2xpYl9yZWxlYXNl KCk7Cj4gLQo+IC1mYWlsOgo+IC0JaWYgKHNldHVwX211bHRpcGF0aCh2ZWNzLCBtcHApKQo+IC0J CXJldHVybiAxOwo+IC0KPiAtCXN5bmNfbWFwX3N0YXRlKG1wcCk7Cj4gLQo+IC0JaWYgKHJldHJp ZXMgPCAwKQo+IC0JCWNvbmRsb2coMCwgIiVzOiBmYWlsZWQgcmVsb2FkIGluIG5ldyBtYXAgdXBk YXRlIiwKPiBtcHAtPmFsaWFzKTsKPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdHJ1Y3QgbXVs dGlwYXRoICphZGRfbWFwX3dpdGhvdXRfcGF0aCAoc3RydWN0IHZlY3RvcnMgKnZlY3MsIGNoYXIK PiAqYWxpYXMpCj4gLXsKPiAtCXN0cnVjdCBtdWx0aXBhdGggKiBtcHAgPSBhbGxvY19tdWx0aXBh dGgoKTsKPiAtCXN0cnVjdCBjb25maWcgKmNvbmY7Cj4gLQo+IC0JaWYgKCFtcHApCj4gLQkJcmV0 dXJuIE5VTEw7Cj4gLQlpZiAoIWFsaWFzKSB7Cj4gLQkJRlJFRShtcHApOwo+IC0JCXJldHVybiBO VUxMOwo+IC0JfQo+IC0KPiAtCW1wcC0+YWxpYXMgPSBTVFJEVVAoYWxpYXMpOwo+IC0KPiAtCWlm IChkbV9nZXRfaW5mbyhtcHAtPmFsaWFzLCAmbXBwLT5kbWkpKSB7Cj4gLQkJY29uZGxvZygzLCAi JXM6IGNhbm5vdCBhY2Nlc3MgdGFibGUiLCBtcHAtPmFsaWFzKTsKPiAtCQlnb3RvIG91dDsKPiAt CX0KPiAtCXNldF9tdWx0aXBhdGhfd3dpZChtcHApOwo+IC0JY29uZiA9IGdldF9tdWx0aXBhdGhf Y29uZmlnKCk7Cj4gLQltcHAtPm1wZSA9IGZpbmRfbXBlKGNvbmYtPm1wdGFibGUsIG1wcC0+d3dp ZCk7Cj4gLQlwdXRfbXVsdGlwYXRoX2NvbmZpZyhjb25mKTsKPiAtCj4gLQlpZiAodXBkYXRlX211 bHRpcGF0aF90YWJsZShtcHAsIHZlY3MtPnBhdGh2ZWMsIDEpKQo+IC0JCWdvdG8gb3V0Owo+IC0J aWYgKHVwZGF0ZV9tdWx0aXBhdGhfc3RhdHVzKG1wcCkpCj4gLQkJZ290byBvdXQ7Cj4gLQo+IC0J aWYgKCF2ZWN0b3JfYWxsb2Nfc2xvdCh2ZWNzLT5tcHZlYykpCj4gLQkJZ290byBvdXQ7Cj4gLQo+ IC0JdmVjdG9yX3NldF9zbG90KHZlY3MtPm1wdmVjLCBtcHApOwo+IC0KPiAtCWlmICh1cGRhdGVf bWFwKG1wcCwgdmVjcykgIT0gMCkgLyogbWFwIHJlbW92ZWQgKi8KPiAtCQlyZXR1cm4gTlVMTDsK PiAtCj4gLQlpZiAoc3RhcnRfd2FpdGVyX3RocmVhZChtcHAsIHZlY3MpKQo+IC0JCWdvdG8gb3V0 Owo+IC0KPiAtCXJldHVybiBtcHA7Cj4gLW91dDoKPiAtCXJlbW92ZV9tYXAobXBwLCB2ZWNzLCBQ VVJHRV9WRUMpOwo+IC0JcmV0dXJuIE5VTEw7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkCj4gIGZp bmRfZXhpc3RpbmdfYWxpYXMgKHN0cnVjdCBtdWx0aXBhdGggKiBtcHAsCj4gIAkJICAgICBzdHJ1 Y3QgdmVjdG9ycyAqdmVjcykKPiBkaWZmIC0tZ2l0IGEvbGlibXVsdGlwYXRoL3N0cnVjdHNfdmVj LmggYi9saWJtdWx0aXBhdGgvc3RydWN0c192ZWMuaAo+IGluZGV4IGQ2ZTE3YmIuLmNlYWI2ZDkg MTAwNjQ0Cj4gLS0tIGEvbGlibXVsdGlwYXRoL3N0cnVjdHNfdmVjLmgKPiArKysgYi9saWJtdWx0 aXBhdGgvc3RydWN0c192ZWMuaAo+IEBAIC0yNiwxMiArMjYsMTIgQEAgaW50IHVwZGF0ZV9tdWx0 aXBhdGhfc3RyaW5ncyAoc3RydWN0IG11bHRpcGF0aAo+ICptcHAsIHZlY3RvciBwYXRodmVjLAo+ ICAJCQkgICAgICBpbnQgaXNfZGFlbW9uKTsKPiAgdm9pZCBleHRyYWN0X2h3ZV9mcm9tX3BhdGgo c3RydWN0IG11bHRpcGF0aCAqIG1wcCk7Cj4gIAo+ICsjZGVmaW5lIFBVUkdFX1ZFQyAxCj4gKwo+ ICB2b2lkIHJlbW92ZV9tYXAgKHN0cnVjdCBtdWx0aXBhdGggKiBtcHAsIHN0cnVjdCB2ZWN0b3Jz ICogdmVjcywgaW50Cj4gcHVyZ2VfdmVjKTsKPiAgdm9pZCByZW1vdmVfbWFwcyAoc3RydWN0IHZl Y3RvcnMgKiB2ZWNzKTsKPiAgCj4gIHZvaWQgc3luY19tYXBfc3RhdGUgKHN0cnVjdCBtdWx0aXBh dGggKik7Cj4gLWludCB1cGRhdGVfbWFwIChzdHJ1Y3QgbXVsdGlwYXRoICptcHAsIHN0cnVjdCB2 ZWN0b3JzICp2ZWNzKTsKPiAtc3RydWN0IG11bHRpcGF0aCAqIGFkZF9tYXBfd2l0aG91dF9wYXRo IChzdHJ1Y3QgdmVjdG9ycyAqIHZlY3MsIGNoYXIKPiAqIGFsaWFzKTsKPiAgc3RydWN0IG11bHRp cGF0aCAqIGFkZF9tYXBfd2l0aF9wYXRoIChzdHJ1Y3QgdmVjdG9ycyAqIHZlY3MsCj4gIAkJCQlz dHJ1Y3QgcGF0aCAqIHBwLCBpbnQgYWRkX3ZlYyk7Cj4gIGludCB1cGRhdGVfbXVsdGlwYXRoIChz dHJ1Y3QgdmVjdG9ycyAqdmVjcywgY2hhciAqbWFwbmFtZSwgaW50Cj4gcmVzZXQpOwo+IGRpZmYg LS1naXQgYS9saWJtdWx0aXBhdGgvd2FpdGVyLmMgYi9saWJtdWx0aXBhdGgvd2FpdGVyLmMKPiBk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCBjYjk3MDhiLi4wMDAwMDAwCj4gLS0tIGEv bGlibXVsdGlwYXRoL3dhaXRlci5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDIxNSArMCwwIEBA Cj4gLS8qCj4gLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBDaHJpc3RvcGhlIFZhcm9xdWkK PiAtICogQ29weXJpZ2h0IChjKSAyMDA1IEtpeW9zaGkgVWVkYSwgTkVDCj4gLSAqIENvcHlyaWdo dCAoYykgMjAwNSBCZW5qYW1pbiBNYXJ6aW5za2ksIFJlZGhhdAo+IC0gKiBDb3B5cmlnaHQgKGMp IDIwMDUgRWR3YXJkIEdvZ2dpbiwgRU1DCj4gLSAqLwo+IC0jaW5jbHVkZSA8dW5pc3RkLmg+Cj4g LSNpbmNsdWRlIDxsaWJkZXZtYXBwZXIuaD4KPiAtI2luY2x1ZGUgPHN5cy9tbWFuLmg+Cj4gLSNp bmNsdWRlIDxwdGhyZWFkLmg+Cj4gLSNpbmNsdWRlIDxzaWduYWwuaD4KPiAtI2luY2x1ZGUgPHVy Y3UuaD4KPiAtCj4gLSNpbmNsdWRlICJ2ZWN0b3IuaCIKPiAtI2luY2x1ZGUgIm1lbW9yeS5oIgo+ IC0jaW5jbHVkZSAiY2hlY2tlcnMuaCIKPiAtI2luY2x1ZGUgImNvbmZpZy5oIgo+IC0jaW5jbHVk ZSAic3RydWN0cy5oIgo+IC0jaW5jbHVkZSAic3RydWN0c192ZWMuaCIKPiAtI2luY2x1ZGUgImRl dm1hcHBlci5oIgo+IC0jaW5jbHVkZSAiZGVidWcuaCIKPiAtI2luY2x1ZGUgImxvY2suaCIKPiAt I2luY2x1ZGUgIndhaXRlci5oIgo+IC0KPiAtcHRocmVhZF9hdHRyX3Qgd2FpdGVyX2F0dHI7Cj4g LQo+IC1zdGF0aWMgc3RydWN0IGV2ZW50X3RocmVhZCAqYWxsb2Nfd2FpdGVyICh2b2lkKQo+IC17 Cj4gLQo+IC0Jc3RydWN0IGV2ZW50X3RocmVhZCAqd3A7Cj4gLQo+IC0Jd3AgPSAoc3RydWN0IGV2 ZW50X3RocmVhZCAqKU1BTExPQyhzaXplb2Yoc3RydWN0Cj4gZXZlbnRfdGhyZWFkKSk7Cj4gLQlt ZW1zZXQod3AsIDAsIHNpemVvZihzdHJ1Y3QgZXZlbnRfdGhyZWFkKSk7Cj4gLQo+IC0JcmV0dXJu IHdwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBmcmVlX3dhaXRlciAodm9pZCAqZGF0YSkKPiAt ewo+IC0Jc3RydWN0IGV2ZW50X3RocmVhZCAqd3AgPSAoc3RydWN0IGV2ZW50X3RocmVhZCAqKWRh dGE7Cj4gLQo+IC0JaWYgKHdwLT5kbXQpCj4gLQkJZG1fdGFza19kZXN0cm95KHdwLT5kbXQpOwo+ IC0KPiAtCXJjdV91bnJlZ2lzdGVyX3RocmVhZCgpOwo+IC0JRlJFRSh3cCk7Cj4gLX0KPiAtCj4g LXZvaWQgc3RvcF93YWl0ZXJfdGhyZWFkIChzdHJ1Y3QgbXVsdGlwYXRoICptcHAsIHN0cnVjdCB2 ZWN0b3JzCj4gKnZlY3MpCj4gLXsKPiAtCXB0aHJlYWRfdCB0aHJlYWQ7Cj4gLQo+IC0JaWYgKG1w cC0+d2FpdGVyID09IChwdGhyZWFkX3QpMCkgewo+IC0JCWNvbmRsb2coMywgIiVzOiBldmVudCBj aGVja2VyIHRocmVhZCBhbHJlYWR5Cj4gc3RvcHBlZCIsCj4gLQkJCW1wcC0+YWxpYXMpOwo+IC0J CXJldHVybjsKPiAtCX0KPiAtCWNvbmRsb2coMiwgIiVzOiBzdG9wIGV2ZW50IGNoZWNrZXIgdGhy ZWFkICglbHUpIiwgbXBwLQo+ID5hbGlhcywKPiAtCQltcHAtPndhaXRlcik7Cj4gLQl0aHJlYWQg PSBtcHAtPndhaXRlcjsKPiAtCW1wcC0+d2FpdGVyID0gKHB0aHJlYWRfdCkwOwo+IC0JcHRocmVh ZF9jYW5jZWwodGhyZWFkKTsKPiAtCXB0aHJlYWRfa2lsbCh0aHJlYWQsIFNJR1VTUjIpOwo+IC19 Cj4gLQo+IC0vKgo+IC0gKiByZXR1cm5zIHRoZSByZXNjaGVkdWxlIGRlbGF5Cj4gLSAqIG5lZ2F0 aXZlIG1lYW5zICpzdG9wKgo+IC0gKi8KPiAtc3RhdGljIGludCB3YWl0ZXZlbnRsb29wIChzdHJ1 Y3QgZXZlbnRfdGhyZWFkICp3YWl0ZXIpCj4gLXsKPiAtCXNpZ3NldF90IHNldCwgb2xkc2V0Owo+ IC0JaW50IGV2ZW50X25yOwo+IC0JaW50IHI7Cj4gLQo+IC0JaWYgKCF3YWl0ZXItPmV2ZW50X25y KQo+IC0JCXdhaXRlci0+ZXZlbnRfbnIgPSBkbV9nZXRldmVudG5yKHdhaXRlci0+bWFwbmFtZSk7 Cj4gLQo+IC0JaWYgKCEod2FpdGVyLT5kbXQgPQo+IGxpYm1wX2RtX3Rhc2tfY3JlYXRlKERNX0RF VklDRV9XQUlURVZFTlQpKSkgewo+IC0JCWNvbmRsb2coMCwgIiVzOiBkZXZtYXAgZXZlbnQgIyVp IGRtX3Rhc2tfY3JlYXRlCj4gZXJyb3IiLAo+IC0JCQkJd2FpdGVyLT5tYXBuYW1lLCB3YWl0ZXIt PmV2ZW50X25yKTsKPiAtCQlyZXR1cm4gMTsKPiAtCX0KPiAtCj4gLQlpZiAoIWRtX3Rhc2tfc2V0 X25hbWUod2FpdGVyLT5kbXQsIHdhaXRlci0+bWFwbmFtZSkpIHsKPiAtCQljb25kbG9nKDAsICIl czogZGV2bWFwIGV2ZW50ICMlaSBkbV90YXNrX3NldF9uYW1lCj4gZXJyb3IiLAo+IC0JCQkJd2Fp dGVyLT5tYXBuYW1lLCB3YWl0ZXItPmV2ZW50X25yKTsKPiAtCQlkbV90YXNrX2Rlc3Ryb3kod2Fp dGVyLT5kbXQpOwo+IC0JCXdhaXRlci0+ZG10ID0gTlVMTDsKPiAtCQlyZXR1cm4gMTsKPiAtCX0K PiAtCj4gLQlpZiAod2FpdGVyLT5ldmVudF9uciAmJiAhZG1fdGFza19zZXRfZXZlbnRfbnIod2Fp dGVyLT5kbXQsCj4gLQkJCQkJCSAgICAgIHdhaXRlci0KPiA+ZXZlbnRfbnIpKSB7Cj4gLQkJY29u ZGxvZygwLCAiJXM6IGRldm1hcCBldmVudCAjJWkKPiBkbV90YXNrX3NldF9ldmVudF9uciBlcnJv ciIsCj4gLQkJCQl3YWl0ZXItPm1hcG5hbWUsIHdhaXRlci0+ZXZlbnRfbnIpOwo+IC0JCWRtX3Rh c2tfZGVzdHJveSh3YWl0ZXItPmRtdCk7Cj4gLQkJd2FpdGVyLT5kbXQgPSBOVUxMOwo+IC0JCXJl dHVybiAxOwo+IC0JfQo+IC0KPiAtCWRtX3Rhc2tfbm9fb3Blbl9jb3VudCh3YWl0ZXItPmRtdCk7 Cj4gLQo+IC0JLyogd2FpdCAqLwo+IC0Jc2lnZW1wdHlzZXQoJnNldCk7Cj4gLQlzaWdhZGRzZXQo JnNldCwgU0lHVVNSMik7Cj4gLQlwdGhyZWFkX3NpZ21hc2soU0lHX1VOQkxPQ0ssICZzZXQsICZv bGRzZXQpOwo+IC0KPiAtCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwo+IC0JciA9IGRtX3Rhc2tfcnVu KHdhaXRlci0+ZG10KTsKPiAtCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwo+IC0KPiAtCXB0aHJlYWRf c2lnbWFzayhTSUdfU0VUTUFTSywgJm9sZHNldCwgTlVMTCk7Cj4gLQlkbV90YXNrX2Rlc3Ryb3ko d2FpdGVyLT5kbXQpOwo+IC0Jd2FpdGVyLT5kbXQgPSBOVUxMOwo+IC0KPiAtCWlmICghcikJLyog d2FpdCBpbnRlcnJ1cHRlZCBieSBzaWduYWwgKi8KPiAtCQlyZXR1cm4gLTE7Cj4gLQo+IC0Jd2Fp dGVyLT5ldmVudF9ucisrOwo+IC0KPiAtCS8qCj4gLQkgKiB1cG9uIGV2ZW50IC4uLgo+IC0JICov Cj4gLQl3aGlsZSAoMSkgewo+IC0JCWNvbmRsb2coMywgIiVzOiBkZXZtYXAgZXZlbnQgIyVpIiwK PiAtCQkJCXdhaXRlci0+bWFwbmFtZSwgd2FpdGVyLT5ldmVudF9ucik7Cj4gLQo+IC0JCS8qCj4g LQkJICogZXZlbnQgbWlnaHQgYmUgOgo+IC0JCSAqCj4gLQkJICogMSkgYSB0YWJsZSByZWxvYWQs IHdoaWNoIG1lYW5zIG91ciBtcHAgc3RydWN0dXJlCj4gaXMKPiAtCQkgKiAgICBvYnNvbGV0ZSA6 IHJlZnJlc2ggaXQgdGhyb3VnaAo+IHVwZGF0ZV9tdWx0aXBhdGgoKQo+IC0JCSAqIDIpIGEgcGF0 aCBmYWlsZWQgYnkgRE0gOiBtYXJrIGFzIHN1Y2ggdGhyb3VnaAo+IC0JCSAqICAgIHVwZGF0ZV9t dWx0aXBhdGgoKQo+IC0JCSAqIDMpIG1hcCBoYXMgZ29uZSBhd2F5IDogc3RvcCB0aGUgdGhyZWFk Lgo+IC0JCSAqIDQpIGEgcGF0aCByZWluc3RhdGUgOiBub3RoaW5nIHRvIGRvCj4gLQkJICogNSkg YSBzd2l0Y2ggZ3JvdXAgOiBub3RoaW5nIHRvIGRvCj4gLQkJICovCj4gLQkJcHRocmVhZF9jbGVh bnVwX3B1c2goY2xlYW51cF9sb2NrLCAmd2FpdGVyLT52ZWNzLQo+ID5sb2NrKTsKPiAtCQlsb2Nr KCZ3YWl0ZXItPnZlY3MtPmxvY2spOwo+IC0JCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwo+IC0JCXIg PSB1cGRhdGVfbXVsdGlwYXRoKHdhaXRlci0+dmVjcywgd2FpdGVyLT5tYXBuYW1lLAo+IDEpOwo+ IC0JCWxvY2tfY2xlYW51cF9wb3Aod2FpdGVyLT52ZWNzLT5sb2NrKTsKPiAtCj4gLQkJaWYgKHIp IHsKPiAtCQkJY29uZGxvZygyLCAiJXM6IGV2ZW50IGNoZWNrZXIgZXhpdCIsCj4gLQkJCQl3YWl0 ZXItPm1hcG5hbWUpOwo+IC0JCQlyZXR1cm4gLTE7IC8qIHN0b3AgdGhlIHRocmVhZCAqLwo+IC0J CX0KPiAtCj4gLQkJZXZlbnRfbnIgPSBkbV9nZXRldmVudG5yKHdhaXRlci0+bWFwbmFtZSk7Cj4g LQo+IC0JCWlmICh3YWl0ZXItPmV2ZW50X25yID09IGV2ZW50X25yKQo+IC0JCQlyZXR1cm4gMTsg LyogdXBvbiBwcm9ibGVtIHJlc2NoZWR1bGUgMXMKPiBsYXRlciAqLwo+IC0KPiAtCQl3YWl0ZXIt PmV2ZW50X25yID0gZXZlbnRfbnI7Cj4gLQl9Cj4gLQlyZXR1cm4gLTE7IC8qIG5ldmVyIHJlYWNo IHRoZXJlICovCj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkICp3YWl0ZXZlbnQgKHZvaWQgKmV0KQo+ IC17Cj4gLQlpbnQgcjsKPiAtCXN0cnVjdCBldmVudF90aHJlYWQgKndhaXRlcjsKPiAtCj4gLQlt bG9ja2FsbChNQ0xfQ1VSUkVOVCB8IE1DTF9GVVRVUkUpOwo+IC0KPiAtCXdhaXRlciA9IChzdHJ1 Y3QgZXZlbnRfdGhyZWFkICopZXQ7Cj4gLQlwdGhyZWFkX2NsZWFudXBfcHVzaChmcmVlX3dhaXRl ciwgZXQpOwo+IC0KPiAtCXJjdV9yZWdpc3Rlcl90aHJlYWQoKTsKPiAtCXdoaWxlICgxKSB7Cj4g LQkJciA9IHdhaXRldmVudGxvb3Aod2FpdGVyKTsKPiAtCj4gLQkJaWYgKHIgPCAwKQo+IC0JCQli cmVhazsKPiAtCj4gLQkJc2xlZXAocik7Cj4gLQl9Cj4gLQo+IC0JcHRocmVhZF9jbGVhbnVwX3Bv cCgxKTsKPiAtCXJldHVybiBOVUxMOwo+IC19Cj4gLQo+IC1pbnQgc3RhcnRfd2FpdGVyX3RocmVh ZCAoc3RydWN0IG11bHRpcGF0aCAqbXBwLCBzdHJ1Y3QgdmVjdG9ycwo+ICp2ZWNzKQo+IC17Cj4g LQlzdHJ1Y3QgZXZlbnRfdGhyZWFkICp3cDsKPiAtCj4gLQlpZiAoIW1wcCkKPiAtCQlyZXR1cm4g MDsKPiAtCj4gLQl3cCA9IGFsbG9jX3dhaXRlcigpOwo+IC0KPiAtCWlmICghd3ApCj4gLQkJZ290 byBvdXQ7Cj4gLQo+IC0Jc3RybmNweSh3cC0+bWFwbmFtZSwgbXBwLT5hbGlhcywgV1dJRF9TSVpF IC0gMSk7Cj4gLQl3cC0+dmVjcyA9IHZlY3M7Cj4gLQo+IC0JaWYgKHB0aHJlYWRfY3JlYXRlKCZ3 cC0+dGhyZWFkLCAmd2FpdGVyX2F0dHIsIHdhaXRldmVudCwKPiB3cCkpIHsKPiAtCQljb25kbG9n KDAsICIlczogY2Fubm90IGNyZWF0ZSBldmVudCBjaGVja2VyIiwgd3AtCj4gPm1hcG5hbWUpOwo+ IC0JCWdvdG8gb3V0MTsKPiAtCX0KPiAtCW1wcC0+d2FpdGVyID0gd3AtPnRocmVhZDsKPiAtCWNv bmRsb2coMiwgIiVzOiBldmVudCBjaGVja2VyIHN0YXJ0ZWQiLCB3cC0+bWFwbmFtZSk7Cj4gLQo+ IC0JcmV0dXJuIDA7Cj4gLW91dDE6Cj4gLQlmcmVlX3dhaXRlcih3cCk7Cj4gLQltcHAtPndhaXRl ciA9IChwdGhyZWFkX3QpMDsKPiAtb3V0Ogo+IC0JY29uZGxvZygwLCAiZmFpbGVkIHRvIHN0YXJ0 IHdhaXRlciB0aHJlYWQiKTsKPiAtCXJldHVybiAxOwo+IC19Cj4gZGlmZiAtLWdpdCBhL2xpYm11 bHRpcGF0aC93YWl0ZXIuaCBiL2xpYm11bHRpcGF0aC93YWl0ZXIuaAo+IGRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDBjZmFlNDYuLjAwMDAwMDAKPiAtLS0gYS9saWJtdWx0aXBhdGgv d2FpdGVyLmgKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMTcgKzAsMCBAQAo+IC0jaWZuZGVmIF9X QUlURVJfSAo+IC0jZGVmaW5lIF9XQUlURVJfSAo+IC0KPiAtZXh0ZXJuIHB0aHJlYWRfYXR0cl90 IHdhaXRlcl9hdHRyOwo+IC0KPiAtc3RydWN0IGV2ZW50X3RocmVhZCB7Cj4gLQlzdHJ1Y3QgZG1f dGFzayAqZG10Owo+IC0JcHRocmVhZF90IHRocmVhZDsKPiAtCWludCBldmVudF9ucjsKPiAtCWNo YXIgbWFwbmFtZVtXV0lEX1NJWkVdOwo+IC0Jc3RydWN0IHZlY3RvcnMgKnZlY3M7Cj4gLX07Cj4g LQo+IC12b2lkIHN0b3Bfd2FpdGVyX3RocmVhZCAoc3RydWN0IG11bHRpcGF0aCAqbXBwLCBzdHJ1 Y3QgdmVjdG9ycwo+ICp2ZWNzKTsKPiAtaW50IHN0YXJ0X3dhaXRlcl90aHJlYWQgKHN0cnVjdCBt dWx0aXBhdGggKm1wcCwgc3RydWN0IHZlY3RvcnMKPiAqdmVjcyk7Cj4gLQo+IC0jZW5kaWYgLyog X1dBSVRFUl9IICovCj4gZGlmZiAtLWdpdCBhL211bHRpcGF0aGQvTWFrZWZpbGUgYi9tdWx0aXBh dGhkL01ha2VmaWxlCj4gaW5kZXggZTZmMTQwYi4uODVmMjlhNyAxMDA2NDQKPiAtLS0gYS9tdWx0 aXBhdGhkL01ha2VmaWxlCj4gKysrIGIvbXVsdGlwYXRoZC9NYWtlZmlsZQo+IEBAIC0yMiw3ICsy Miw3IEBAIGlmZGVmIFNZU1RFTUQKPiAgCWVuZGlmCj4gIGVuZGlmCj4gIAo+IC1PQkpTID0gbWFp bi5vIHBpZGZpbGUubyB1eGxzbnIubyB1eGNsbnQubyBjbGkubyBjbGlfaGFuZGxlcnMubwo+ICtP QkpTID0gbWFpbi5vIHBpZGZpbGUubyB1eGxzbnIubyB1eGNsbnQubyBjbGkubyBjbGlfaGFuZGxl cnMubwo+IHdhaXRlci5vCj4gIAo+ICBFWEVDID0gbXVsdGlwYXRoZAo+ICAKPiBkaWZmIC0tZ2l0 IGEvbXVsdGlwYXRoZC9tYWluLmMgYi9tdWx0aXBhdGhkL21haW4uYwo+IGluZGV4IDcyYzNjMmYu Ljk0YjI0MDYgMTAwNjQ0Cj4gLS0tIGEvbXVsdGlwYXRoZC9tYWluLmMKPiArKysgYi9tdWx0aXBh dGhkL21haW4uYwo+IEBAIC0zMTEsNiArMzExLDEwMiBAQCByZW1vdmVfbWFwc19hbmRfc3RvcF93 YWl0ZXJzKHN0cnVjdCB2ZWN0b3JzCj4gKnZlY3MpCj4gIAlyZW1vdmVfbWFwcyh2ZWNzKTsKPiAg fQo+ICAKPiArc3RhdGljIHZvaWQKPiArc2V0X211bHRpcGF0aF93d2lkIChzdHJ1Y3QgbXVsdGlw YXRoICogbXBwKQo+ICt7Cj4gKwlpZiAoc3RybGVuKG1wcC0+d3dpZCkpCj4gKwkJcmV0dXJuOwo+ ICsKPiArCWRtX2dldF91dWlkKG1wcC0+YWxpYXMsIG1wcC0+d3dpZCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQKPiArdXBkYXRlX21hcCAoc3RydWN0IG11bHRpcGF0aCAqbXBwLCBzdHJ1Y3QgdmVj dG9ycyAqdmVjcykKPiArewo+ICsJaW50IHJldHJpZXMgPSAzOwo+ICsJY2hhciBwYXJhbXNbUEFS QU1TX1NJWkVdID0gezB9Owo+ICsKPiArcmV0cnk6Cj4gKwljb25kbG9nKDQsICIlczogdXBkYXRp bmcgbmV3IG1hcCIsIG1wcC0+YWxpYXMpOwo+ICsJaWYgKGFkb3B0X3BhdGhzKHZlY3MtPnBhdGh2 ZWMsIG1wcCkpIHsKPiArCQljb25kbG9nKDAsICIlczogZmFpbGVkIHRvIGFkb3B0IHBhdGhzIGZv ciBuZXcgbWFwCj4gdXBkYXRlIiwKPiArCQkJbXBwLT5hbGlhcyk7Cj4gKwkJcmV0cmllcyA9IC0x Owo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiArCXZlcmlmeV9wYXRocyhtcHAsIHZlY3MpOwo+ICsJ bXBwLT5hY3Rpb24gPSBBQ1RfUkVMT0FEOwo+ICsKPiArCWV4dHJhY3RfaHdlX2Zyb21fcGF0aCht cHApOwo+ICsJaWYgKHNldHVwX21hcChtcHAsIHBhcmFtcywgUEFSQU1TX1NJWkUpKSB7Cj4gKwkJ Y29uZGxvZygwLCAiJXM6IGZhaWxlZCB0byBzZXR1cCBuZXcgbWFwIGluIHVwZGF0ZSIsCj4gbXBw LT5hbGlhcyk7Cj4gKwkJcmV0cmllcyA9IC0xOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiArCWlm IChkb21hcChtcHAsIHBhcmFtcywgMSkgPD0gMCAmJiByZXRyaWVzLS0gPiAwKSB7Cj4gKwkJY29u ZGxvZygwLCAiJXM6IG1hcF91ZGF0ZSBzbGVlcCIsIG1wcC0+YWxpYXMpOwo+ICsJCXNsZWVwKDEp Owo+ICsJCWdvdG8gcmV0cnk7Cj4gKwl9Cj4gKwlkbV9saWJfcmVsZWFzZSgpOwo+ICsKPiArZmFp bDoKPiArCWlmIChzZXR1cF9tdWx0aXBhdGgodmVjcywgbXBwKSkKPiArCQlyZXR1cm4gMTsKPiAr Cj4gKwlzeW5jX21hcF9zdGF0ZShtcHApOwo+ICsKPiArCWlmIChyZXRyaWVzIDwgMCkKPiArCQlj b25kbG9nKDAsICIlczogZmFpbGVkIHJlbG9hZCBpbiBuZXcgbWFwIHVwZGF0ZSIsCj4gbXBwLT5h bGlhcyk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBtdWx0aXBhdGgg Kgo+ICthZGRfbWFwX3dpdGhvdXRfcGF0aCAoc3RydWN0IHZlY3RvcnMgKnZlY3MsIGNoYXIgKmFs aWFzKQo+ICt7Cj4gKwlzdHJ1Y3QgbXVsdGlwYXRoICogbXBwID0gYWxsb2NfbXVsdGlwYXRoKCk7 Cj4gKwlzdHJ1Y3QgY29uZmlnICpjb25mOwo+ICsKPiArCWlmICghbXBwKQo+ICsJCXJldHVybiBO VUxMOwo+ICsJaWYgKCFhbGlhcykgewo+ICsJCUZSRUUobXBwKTsKPiArCQlyZXR1cm4gTlVMTDsK PiArCX0KPiArCj4gKwltcHAtPmFsaWFzID0gU1RSRFVQKGFsaWFzKTsKPiArCj4gKwlpZiAoZG1f Z2V0X2luZm8obXBwLT5hbGlhcywgJm1wcC0+ZG1pKSkgewo+ICsJCWNvbmRsb2coMywgIiVzOiBj YW5ub3QgYWNjZXNzIHRhYmxlIiwgbXBwLT5hbGlhcyk7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4g KwlzZXRfbXVsdGlwYXRoX3d3aWQobXBwKTsKPiArCWNvbmYgPSBnZXRfbXVsdGlwYXRoX2NvbmZp ZygpOwo+ICsJbXBwLT5tcGUgPSBmaW5kX21wZShjb25mLT5tcHRhYmxlLCBtcHAtPnd3aWQpOwo+ ICsJcHV0X211bHRpcGF0aF9jb25maWcoY29uZik7Cj4gKwo+ICsJaWYgKHVwZGF0ZV9tdWx0aXBh dGhfdGFibGUobXBwLCB2ZWNzLT5wYXRodmVjLCAxKSkKPiArCQlnb3RvIG91dDsKPiArCWlmICh1 cGRhdGVfbXVsdGlwYXRoX3N0YXR1cyhtcHApKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCWlmICgh dmVjdG9yX2FsbG9jX3Nsb3QodmVjcy0+bXB2ZWMpKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCXZl Y3Rvcl9zZXRfc2xvdCh2ZWNzLT5tcHZlYywgbXBwKTsKPiArCj4gKwlpZiAodXBkYXRlX21hcCht cHAsIHZlY3MpICE9IDApIC8qIG1hcCByZW1vdmVkICovCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ ICsJaWYgKHN0YXJ0X3dhaXRlcl90aHJlYWQobXBwLCB2ZWNzKSkKPiArCQlnb3RvIG91dDsKPiAr Cj4gKwlyZXR1cm4gbXBwOwo+ICtvdXQ6Cj4gKwlyZW1vdmVfbWFwKG1wcCwgdmVjcywgUFVSR0Vf VkVDKTsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50Cj4gIGNvYWxlc2Nl X21hcHMoc3RydWN0IHZlY3RvcnMgKnZlY3MsIHZlY3RvciBubXB2KQo+ICB7Cj4gZGlmZiAtLWdp dCBhL211bHRpcGF0aGQvd2FpdGVyLmMgYi9tdWx0aXBhdGhkL3dhaXRlci5jCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5jYjk3MDhiCj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL211bHRpcGF0aGQvd2FpdGVyLmMKPiBAQCAtMCwwICsxLDIxNSBAQAo+ICsvKgo+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgQ2hyaXN0b3BoZSBWYXJvcXVpCj4gKyAqIENvcHlyaWdo dCAoYykgMjAwNSBLaXlvc2hpIFVlZGEsIE5FQwo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQmVu amFtaW4gTWFyemluc2tpLCBSZWRoYXQKPiArICogQ29weXJpZ2h0IChjKSAyMDA1IEVkd2FyZCBH b2dnaW4sIEVNQwo+ICsgKi8KPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ICsjaW5jbHVkZSA8bGli ZGV2bWFwcGVyLmg+Cj4gKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgo+ICsjaW5jbHVkZSA8cHRocmVh ZC5oPgo+ICsjaW5jbHVkZSA8c2lnbmFsLmg+Cj4gKyNpbmNsdWRlIDx1cmN1Lmg+Cj4gKwo+ICsj aW5jbHVkZSAidmVjdG9yLmgiCj4gKyNpbmNsdWRlICJtZW1vcnkuaCIKPiArI2luY2x1ZGUgImNo ZWNrZXJzLmgiCj4gKyNpbmNsdWRlICJjb25maWcuaCIKPiArI2luY2x1ZGUgInN0cnVjdHMuaCIK PiArI2luY2x1ZGUgInN0cnVjdHNfdmVjLmgiCj4gKyNpbmNsdWRlICJkZXZtYXBwZXIuaCIKPiAr I2luY2x1ZGUgImRlYnVnLmgiCj4gKyNpbmNsdWRlICJsb2NrLmgiCj4gKyNpbmNsdWRlICJ3YWl0 ZXIuaCIKPiArCj4gK3B0aHJlYWRfYXR0cl90IHdhaXRlcl9hdHRyOwo+ICsKPiArc3RhdGljIHN0 cnVjdCBldmVudF90aHJlYWQgKmFsbG9jX3dhaXRlciAodm9pZCkKPiArewo+ICsKPiArCXN0cnVj dCBldmVudF90aHJlYWQgKndwOwo+ICsKPiArCXdwID0gKHN0cnVjdCBldmVudF90aHJlYWQgKilN QUxMT0Moc2l6ZW9mKHN0cnVjdAo+IGV2ZW50X3RocmVhZCkpOwo+ICsJbWVtc2V0KHdwLCAwLCBz aXplb2Yoc3RydWN0IGV2ZW50X3RocmVhZCkpOwo+ICsKPiArCXJldHVybiB3cDsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgZnJlZV93YWl0ZXIgKHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBl dmVudF90aHJlYWQgKndwID0gKHN0cnVjdCBldmVudF90aHJlYWQgKilkYXRhOwo+ICsKPiArCWlm ICh3cC0+ZG10KQo+ICsJCWRtX3Rhc2tfZGVzdHJveSh3cC0+ZG10KTsKPiArCj4gKwlyY3VfdW5y ZWdpc3Rlcl90aHJlYWQoKTsKPiArCUZSRUUod3ApOwo+ICt9Cj4gKwo+ICt2b2lkIHN0b3Bfd2Fp dGVyX3RocmVhZCAoc3RydWN0IG11bHRpcGF0aCAqbXBwLCBzdHJ1Y3QgdmVjdG9ycwo+ICp2ZWNz KQo+ICt7Cj4gKwlwdGhyZWFkX3QgdGhyZWFkOwo+ICsKPiArCWlmIChtcHAtPndhaXRlciA9PSAo cHRocmVhZF90KTApIHsKPiArCQljb25kbG9nKDMsICIlczogZXZlbnQgY2hlY2tlciB0aHJlYWQg YWxyZWFkeQo+IHN0b3BwZWQiLAo+ICsJCQltcHAtPmFsaWFzKTsKPiArCQlyZXR1cm47Cj4gKwl9 Cj4gKwljb25kbG9nKDIsICIlczogc3RvcCBldmVudCBjaGVja2VyIHRocmVhZCAoJWx1KSIsIG1w cC0KPiA+YWxpYXMsCj4gKwkJbXBwLT53YWl0ZXIpOwo+ICsJdGhyZWFkID0gbXBwLT53YWl0ZXI7 Cj4gKwltcHAtPndhaXRlciA9IChwdGhyZWFkX3QpMDsKPiArCXB0aHJlYWRfY2FuY2VsKHRocmVh ZCk7Cj4gKwlwdGhyZWFkX2tpbGwodGhyZWFkLCBTSUdVU1IyKTsKPiArfQo+ICsKPiArLyoKPiAr ICogcmV0dXJucyB0aGUgcmVzY2hlZHVsZSBkZWxheQo+ICsgKiBuZWdhdGl2ZSBtZWFucyAqc3Rv cCoKPiArICovCj4gK3N0YXRpYyBpbnQgd2FpdGV2ZW50bG9vcCAoc3RydWN0IGV2ZW50X3RocmVh ZCAqd2FpdGVyKQo+ICt7Cj4gKwlzaWdzZXRfdCBzZXQsIG9sZHNldDsKPiArCWludCBldmVudF9u cjsKPiArCWludCByOwo+ICsKPiArCWlmICghd2FpdGVyLT5ldmVudF9ucikKPiArCQl3YWl0ZXIt PmV2ZW50X25yID0gZG1fZ2V0ZXZlbnRucih3YWl0ZXItPm1hcG5hbWUpOwo+ICsKPiArCWlmICgh KHdhaXRlci0+ZG10ID0KPiBsaWJtcF9kbV90YXNrX2NyZWF0ZShETV9ERVZJQ0VfV0FJVEVWRU5U KSkpIHsKPiArCQljb25kbG9nKDAsICIlczogZGV2bWFwIGV2ZW50ICMlaSBkbV90YXNrX2NyZWF0 ZQo+IGVycm9yIiwKPiArCQkJCXdhaXRlci0+bWFwbmFtZSwgd2FpdGVyLT5ldmVudF9ucik7Cj4g KwkJcmV0dXJuIDE7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFkbV90YXNrX3NldF9uYW1lKHdhaXRlci0+ ZG10LCB3YWl0ZXItPm1hcG5hbWUpKSB7Cj4gKwkJY29uZGxvZygwLCAiJXM6IGRldm1hcCBldmVu dCAjJWkgZG1fdGFza19zZXRfbmFtZQo+IGVycm9yIiwKPiArCQkJCXdhaXRlci0+bWFwbmFtZSwg d2FpdGVyLT5ldmVudF9ucik7Cj4gKwkJZG1fdGFza19kZXN0cm95KHdhaXRlci0+ZG10KTsKPiAr CQl3YWl0ZXItPmRtdCA9IE5VTEw7Cj4gKwkJcmV0dXJuIDE7Cj4gKwl9Cj4gKwo+ICsJaWYgKHdh aXRlci0+ZXZlbnRfbnIgJiYgIWRtX3Rhc2tfc2V0X2V2ZW50X25yKHdhaXRlci0+ZG10LAo+ICsJ CQkJCQkgICAgICB3YWl0ZXItCj4gPmV2ZW50X25yKSkgewo+ICsJCWNvbmRsb2coMCwgIiVzOiBk ZXZtYXAgZXZlbnQgIyVpCj4gZG1fdGFza19zZXRfZXZlbnRfbnIgZXJyb3IiLAo+ICsJCQkJd2Fp dGVyLT5tYXBuYW1lLCB3YWl0ZXItPmV2ZW50X25yKTsKPiArCQlkbV90YXNrX2Rlc3Ryb3kod2Fp dGVyLT5kbXQpOwo+ICsJCXdhaXRlci0+ZG10ID0gTlVMTDsKPiArCQlyZXR1cm4gMTsKPiArCX0K PiArCj4gKwlkbV90YXNrX25vX29wZW5fY291bnQod2FpdGVyLT5kbXQpOwo+ICsKPiArCS8qIHdh aXQgKi8KPiArCXNpZ2VtcHR5c2V0KCZzZXQpOwo+ICsJc2lnYWRkc2V0KCZzZXQsIFNJR1VTUjIp Owo+ICsJcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmc2V0LCAmb2xkc2V0KTsKPiArCj4g KwlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKPiArCXIgPSBkbV90YXNrX3J1bih3YWl0ZXItPmRtdCk7 Cj4gKwlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKPiArCj4gKwlwdGhyZWFkX3NpZ21hc2soU0lHX1NF VE1BU0ssICZvbGRzZXQsIE5VTEwpOwo+ICsJZG1fdGFza19kZXN0cm95KHdhaXRlci0+ZG10KTsK PiArCXdhaXRlci0+ZG10ID0gTlVMTDsKPiArCj4gKwlpZiAoIXIpCS8qIHdhaXQgaW50ZXJydXB0 ZWQgYnkgc2lnbmFsICovCj4gKwkJcmV0dXJuIC0xOwo+ICsKPiArCXdhaXRlci0+ZXZlbnRfbnIr KzsKPiArCj4gKwkvKgo+ICsJICogdXBvbiBldmVudCAuLi4KPiArCSAqLwo+ICsJd2hpbGUgKDEp IHsKPiArCQljb25kbG9nKDMsICIlczogZGV2bWFwIGV2ZW50ICMlaSIsCj4gKwkJCQl3YWl0ZXIt Pm1hcG5hbWUsIHdhaXRlci0+ZXZlbnRfbnIpOwo+ICsKPiArCQkvKgo+ICsJCSAqIGV2ZW50IG1p Z2h0IGJlIDoKPiArCQkgKgo+ICsJCSAqIDEpIGEgdGFibGUgcmVsb2FkLCB3aGljaCBtZWFucyBv dXIgbXBwIHN0cnVjdHVyZQo+IGlzCj4gKwkJICogICAgb2Jzb2xldGUgOiByZWZyZXNoIGl0IHRo cm91Z2gKPiB1cGRhdGVfbXVsdGlwYXRoKCkKPiArCQkgKiAyKSBhIHBhdGggZmFpbGVkIGJ5IERN IDogbWFyayBhcyBzdWNoIHRocm91Z2gKPiArCQkgKiAgICB1cGRhdGVfbXVsdGlwYXRoKCkKPiAr CQkgKiAzKSBtYXAgaGFzIGdvbmUgYXdheSA6IHN0b3AgdGhlIHRocmVhZC4KPiArCQkgKiA0KSBh IHBhdGggcmVpbnN0YXRlIDogbm90aGluZyB0byBkbwo+ICsJCSAqIDUpIGEgc3dpdGNoIGdyb3Vw IDogbm90aGluZyB0byBkbwo+ICsJCSAqLwo+ICsJCXB0aHJlYWRfY2xlYW51cF9wdXNoKGNsZWFu dXBfbG9jaywgJndhaXRlci0+dmVjcy0KPiA+bG9jayk7Cj4gKwkJbG9jaygmd2FpdGVyLT52ZWNz LT5sb2NrKTsKPiArCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKPiArCQlyID0gdXBkYXRlX211bHRp cGF0aCh3YWl0ZXItPnZlY3MsIHdhaXRlci0+bWFwbmFtZSwKPiAxKTsKPiArCQlsb2NrX2NsZWFu dXBfcG9wKHdhaXRlci0+dmVjcy0+bG9jayk7Cj4gKwo+ICsJCWlmIChyKSB7Cj4gKwkJCWNvbmRs b2coMiwgIiVzOiBldmVudCBjaGVja2VyIGV4aXQiLAo+ICsJCQkJd2FpdGVyLT5tYXBuYW1lKTsK PiArCQkJcmV0dXJuIC0xOyAvKiBzdG9wIHRoZSB0aHJlYWQgKi8KPiArCQl9Cj4gKwo+ICsJCWV2 ZW50X25yID0gZG1fZ2V0ZXZlbnRucih3YWl0ZXItPm1hcG5hbWUpOwo+ICsKPiArCQlpZiAod2Fp dGVyLT5ldmVudF9uciA9PSBldmVudF9ucikKPiArCQkJcmV0dXJuIDE7IC8qIHVwb24gcHJvYmxl bSByZXNjaGVkdWxlIDFzCj4gbGF0ZXIgKi8KPiArCj4gKwkJd2FpdGVyLT5ldmVudF9uciA9IGV2 ZW50X25yOwo+ICsJfQo+ICsJcmV0dXJuIC0xOyAvKiBuZXZlciByZWFjaCB0aGVyZSAqLwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCAqd2FpdGV2ZW50ICh2b2lkICpldCkKPiArewo+ICsJaW50IHI7 Cj4gKwlzdHJ1Y3QgZXZlbnRfdGhyZWFkICp3YWl0ZXI7Cj4gKwo+ICsJbWxvY2thbGwoTUNMX0NV UlJFTlQgfCBNQ0xfRlVUVVJFKTsKPiArCj4gKwl3YWl0ZXIgPSAoc3RydWN0IGV2ZW50X3RocmVh ZCAqKWV0Owo+ICsJcHRocmVhZF9jbGVhbnVwX3B1c2goZnJlZV93YWl0ZXIsIGV0KTsKPiArCj4g KwlyY3VfcmVnaXN0ZXJfdGhyZWFkKCk7Cj4gKwl3aGlsZSAoMSkgewo+ICsJCXIgPSB3YWl0ZXZl bnRsb29wKHdhaXRlcik7Cj4gKwo+ICsJCWlmIChyIDwgMCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJ CXNsZWVwKHIpOwo+ICsJfQo+ICsKPiArCXB0aHJlYWRfY2xlYW51cF9wb3AoMSk7Cj4gKwlyZXR1 cm4gTlVMTDsKPiArfQo+ICsKPiAraW50IHN0YXJ0X3dhaXRlcl90aHJlYWQgKHN0cnVjdCBtdWx0 aXBhdGggKm1wcCwgc3RydWN0IHZlY3RvcnMKPiAqdmVjcykKPiArewo+ICsJc3RydWN0IGV2ZW50 X3RocmVhZCAqd3A7Cj4gKwo+ICsJaWYgKCFtcHApCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJd3Ag PSBhbGxvY193YWl0ZXIoKTsKPiArCj4gKwlpZiAoIXdwKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiAr CXN0cm5jcHkod3AtPm1hcG5hbWUsIG1wcC0+YWxpYXMsIFdXSURfU0laRSAtIDEpOwo+ICsJd3At PnZlY3MgPSB2ZWNzOwo+ICsKPiArCWlmIChwdGhyZWFkX2NyZWF0ZSgmd3AtPnRocmVhZCwgJndh aXRlcl9hdHRyLCB3YWl0ZXZlbnQsCj4gd3ApKSB7Cj4gKwkJY29uZGxvZygwLCAiJXM6IGNhbm5v dCBjcmVhdGUgZXZlbnQgY2hlY2tlciIsIHdwLQo+ID5tYXBuYW1lKTsKPiArCQlnb3RvIG91dDE7 Cj4gKwl9Cj4gKwltcHAtPndhaXRlciA9IHdwLT50aHJlYWQ7Cj4gKwljb25kbG9nKDIsICIlczog ZXZlbnQgY2hlY2tlciBzdGFydGVkIiwgd3AtPm1hcG5hbWUpOwo+ICsKPiArCXJldHVybiAwOwo+ ICtvdXQxOgo+ICsJZnJlZV93YWl0ZXIod3ApOwo+ICsJbXBwLT53YWl0ZXIgPSAocHRocmVhZF90 KTA7Cj4gK291dDoKPiArCWNvbmRsb2coMCwgImZhaWxlZCB0byBzdGFydCB3YWl0ZXIgdGhyZWFk Iik7Cj4gKwlyZXR1cm4gMTsKPiArfQo+IGRpZmYgLS1naXQgYS9tdWx0aXBhdGhkL3dhaXRlci5o IGIvbXVsdGlwYXRoZC93YWl0ZXIuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMC4uMGNmYWU0Ngo+IC0tLSAvZGV2L251bGwKPiArKysgYi9tdWx0aXBhdGhkL3dhaXRlci5o Cj4gQEAgLTAsMCArMSwxNyBAQAo+ICsjaWZuZGVmIF9XQUlURVJfSAo+ICsjZGVmaW5lIF9XQUlU RVJfSAo+ICsKPiArZXh0ZXJuIHB0aHJlYWRfYXR0cl90IHdhaXRlcl9hdHRyOwo+ICsKPiArc3Ry dWN0IGV2ZW50X3RocmVhZCB7Cj4gKwlzdHJ1Y3QgZG1fdGFzayAqZG10Owo+ICsJcHRocmVhZF90 IHRocmVhZDsKPiArCWludCBldmVudF9ucjsKPiArCWNoYXIgbWFwbmFtZVtXV0lEX1NJWkVdOwo+ ICsJc3RydWN0IHZlY3RvcnMgKnZlY3M7Cj4gK307Cj4gKwo+ICt2b2lkIHN0b3Bfd2FpdGVyX3Ro cmVhZCAoc3RydWN0IG11bHRpcGF0aCAqbXBwLCBzdHJ1Y3QgdmVjdG9ycwo+ICp2ZWNzKTsKPiAr aW50IHN0YXJ0X3dhaXRlcl90aHJlYWQgKHN0cnVjdCBtdWx0aXBhdGggKm1wcCwgc3RydWN0IHZl Y3RvcnMKPiAqdmVjcyk7Cj4gKwo+ICsjZW5kaWYgLyogX1dBSVRFUl9IICovCgotLSAKRHIuIE1h cnRpbiBXaWxjayA8bXdpbGNrQHN1c2UuY29tPiwgVGVsLiArNDkgKDApOTExIDc0MDUzIDIxMDcK U1VTRSBMaW51eCBHbWJILCBHRjogRmVsaXggSW1lbmTDtnJmZmVyLCBKYW5lIFNtaXRoYXJkLCBH cmFoYW0gTm9ydG9uCkhSQiAyMTI4NCAoQUcgTsO8cm5iZXJnKQoKLS0KZG0tZGV2ZWwgbWFpbGlu ZyBsaXN0CmRtLWRldmVsQHJlZGhhdC5jb20KaHR0cHM6Ly93d3cucmVkaGF0LmNvbS9tYWlsbWFu L2xpc3RpbmZvL2RtLWRldmVs