From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan De Oliveira Subject: Re: [PATCH i-g-t v2 06/15] igt_kms: Change PIPE_ANY behavior to mean unassigned Date: Thu, 21 Jul 2016 12:23:13 +0300 Message-ID: <1469092993.2625.3.camel@gmail.com> References: <1467798955-7324-1-git-send-email-maarten.lankhorst@linux.intel.com> <1467798955-7324-7-git-send-email-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pf0-x242.google.com (mail-pf0-x242.google.com [IPv6:2607:f8b0:400e:c00::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 40E686E9B7 for ; Thu, 21 Jul 2016 09:23:22 +0000 (UTC) Received: by mail-pf0-x242.google.com with SMTP id g202so5161064pfb.1 for ; Thu, 21 Jul 2016 02:23:22 -0700 (PDT) In-Reply-To: <1467798955-7324-7-git-send-email-maarten.lankhorst@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE2LTA3LTA2IGF0IDExOjU1ICswMjAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBOb25lIG9mIHRoZSB0ZXN0cyByZXF1aXJlcyB0aGF0IGEgb3V0cHV0IGJvdW5kIHRvIFBJ UEVfQU5ZIGlzIGFzc2lnbmVkLAo+IHNvIGRvbid0IGRvIGl0LiBGaXggdGhlIGRpc3BsYXkgY29t bWl0IHRvIGl0ZXJhdGUgb3ZlciBjcnRjJ3MgaW5zdGVhZAo+IG9mIG91dHB1dHMgdG8gcHJvcGVy bHkgZGlzYWJsZSBwaXBlcyB3aXRob3V0IG91dHB1dHMuCj4gCj4gVGhpcyBhbHNvIG1lYW5zIHRo YXQgb3V0cHV0LT52YWxpZCBpcyBvbmx5IHNldCBhZnRlciBjb25uZWN0aW5nIGEKPiBvdXRwdXQg dG8gYSBwaXBlLCBzbyBubyBsb25nZXIgZGVwZW5kIG9uIGl0IGluIGZvcl9lYWNoX2Nvbm5lY3Rl ZF9vdXRwdXQKPiBhbmQgc2ltaWxhciBtYWNyb3MuCj4gCj4gU2lnbmVkLW9mZi1ieTogTWFhcnRl biBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiDC oGxpYi9pZ3Rfa21zLmMgfCAyNDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gLQo+IMKgbGliL2lndF9rbXMuaCB8wqDCoDE4ICsrKyst Cj4gwqAyIGZpbGVzIGNoYW5nZWQsIDEzNSBpbnNlcnRpb25zKCspLCAxMjkgZGVsZXRpb25zKC0p Cj4gCj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3Rfa21zLmMgYi9saWIvaWd0X2ttcy5jCj4gaW5kZXgg Y2U4YWEyNDU1MzQ4Li44OGNhZTdkNTE3ODcgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9rbXMuYwo+ ICsrKyBiL2xpYi9pZ3Rfa21zLmMKPiBAQCAtODY5LDE4ICs4NjksMjAgQEAgc3RhdGljIGJvb2wg X2ttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyhpbnQgZHJtX2ZkLAo+IHVpbnQzMl90IGNvbm5lY3Rv cl9pZCwKPiDCoAnCoCovCj4gwqAJX2ttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZ19jcnRjX21hc2so ZHJtX2ZkLCBjb25uZWN0b3IsIGNvbmZpZyk7Cj4gwqAKPiArCWlmICgha21zdGVzdF9nZXRfY29u bmVjdG9yX2RlZmF1bHRfbW9kZShkcm1fZmQsIGNvbm5lY3RvciwKPiArCQkJCQkJJmNvbmZpZy0+ ZGVmYXVsdF9tb2RlKSkKPiArCQlnb3RvIGVycjM7Cj4gKwo+ICsJY29uZmlnLT5jb25uZWN0b3Ig PSBjb25uZWN0b3I7Cj4gKwo+IMKgCWNydGNfaWR4X21hc2sgJj0gY29uZmlnLT52YWxpZF9jcnRj X2lkeF9tYXNrOwo+IMKgCWlmICghY3J0Y19pZHhfbWFzaykKPiAtCQlnb3RvIGVycjM7Cj4gKwkJ LyogS2VlcCBjb25maWctPmNvbm5lY3RvciAqLwo+ICsJCWdvdG8gZXJyMjsKPiDCoAo+IMKgCWNv bmZpZy0+cGlwZSA9IGZmcyhjcnRjX2lkeF9tYXNrKSAtIDE7Cj4gwqAKPiAtCWlmICgha21zdGVz dF9nZXRfY29ubmVjdG9yX2RlZmF1bHRfbW9kZShkcm1fZmQsIGNvbm5lY3RvciwKPiAtCQkJCQkJ JmNvbmZpZy0+ZGVmYXVsdF9tb2RlKSkKPiAtCQlnb3RvIGVycjM7Cj4gLQo+IMKgCWNvbmZpZy0+ ZW5jb2RlciA9IF9rbXN0ZXN0X2Nvbm5lY3Rvcl9jb25maWdfZmluZF9lbmNvZGVyKGRybV9mZCwK PiBjb25uZWN0b3IsIGNvbmZpZy0+cGlwZSk7Cj4gLQljb25maWctPmNvbm5lY3RvciA9IGNvbm5l Y3RvcjsKPiDCoAljb25maWctPmNydGMgPSBkcm1Nb2RlR2V0Q3J0Yyhkcm1fZmQsIHJlc291cmNl cy0+Y3J0Y3NbY29uZmlnLQo+ID5waXBlXSk7Cj4gwqAKPiDCoAlkcm1Nb2RlRnJlZVJlc291cmNl cyhyZXNvdXJjZXMpOwo+IEBAIC05NDAsOCArOTQyLDEzIEBAIGJvb2wga21zdGVzdF9wcm9iZV9j b25uZWN0b3JfY29uZmlnKGludCBkcm1fZmQsIHVpbnQzMl90Cj4gY29ubmVjdG9yX2lkLAo+IMKg dm9pZCBrbXN0ZXN0X2ZyZWVfY29ubmVjdG9yX2NvbmZpZyhzdHJ1Y3Qga21zdGVzdF9jb25uZWN0 b3JfY29uZmlnICpjb25maWcpCj4gwqB7Cj4gwqAJZHJtTW9kZUZyZWVDcnRjKGNvbmZpZy0+Y3J0 Yyk7Cj4gKwljb25maWctPmNydGMgPSBOVUxMOwo+ICsKPiDCoAlkcm1Nb2RlRnJlZUVuY29kZXIo Y29uZmlnLT5lbmNvZGVyKTsKPiArCWNvbmZpZy0+ZW5jb2RlciA9IE5VTEw7Cj4gKwo+IMKgCWRy bU1vZGVGcmVlQ29ubmVjdG9yKGNvbmZpZy0+Y29ubmVjdG9yKTsKPiArCWNvbmZpZy0+Y29ubmVj dG9yID0gTlVMTDsKPiDCoH0KPiDCoAo+IMKgLyoqCj4gQEAgLTExOTcsOCArMTIwNCw3IEBAIHN0 YXRpYyB2b2lkIGlndF9vdXRwdXRfcmVmcmVzaChpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKPiDCoAkv KiB3ZSBtYXNrIG91dCB0aGUgcGlwZXMgYWxyZWFkeSBpbiB1c2UgKi8KPiDCoAljcnRjX2lkeF9t YXNrID0gb3V0cHV0LT5wZW5kaW5nX2NydGNfaWR4X21hc2sgJiB+ZGlzcGxheS0KPiA+cGlwZXNf aW5fdXNlOwo+IMKgCj4gLQlpZiAob3V0cHV0LT52YWxpZCkKPiAtCQlrbXN0ZXN0X2ZyZWVfY29u bmVjdG9yX2NvbmZpZygmb3V0cHV0LT5jb25maWcpOwo+ICsJa21zdGVzdF9mcmVlX2Nvbm5lY3Rv cl9jb25maWcoJm91dHB1dC0+Y29uZmlnKTsKPiDCoAo+IMKgCXJldCA9IGttc3Rlc3RfZ2V0X2Nv bm5lY3Rvcl9jb25maWcoZGlzcGxheS0+ZHJtX2ZkLAo+IMKgCQkJCQnCoMKgwqBvdXRwdXQtPmlk LAo+IEBAIC0xMjA5LDE5ICsxMjE1LDE5IEBAIHN0YXRpYyB2b2lkIGlndF9vdXRwdXRfcmVmcmVz aChpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKPiDCoAllbHNlCj4gwqAJCW91dHB1dC0+dmFsaWQgPSBm YWxzZTsKPiDCoAo+IC0JaWYgKCFvdXRwdXQtPnZhbGlkKQo+IC0JCXJldHVybjsKPiAtCj4gLQlp ZiAob3V0cHV0LT51c2Vfb3ZlcnJpZGVfbW9kZSkKPiAtCQlvdXRwdXQtPmNvbmZpZy5kZWZhdWx0 X21vZGUgPSBvdXRwdXQtPm92ZXJyaWRlX21vZGU7Cj4gLQo+IC0JaWYgKCFvdXRwdXQtPm5hbWUp IHsKPiArCWlmICghb3V0cHV0LT5uYW1lICYmIG91dHB1dC0+Y29uZmlnLmNvbm5lY3Rvcikgewo+ IMKgCQlkcm1Nb2RlQ29ubmVjdG9yICpjID0gb3V0cHV0LT5jb25maWcuY29ubmVjdG9yOwo+IMKg Cj4gwqAJCWlndF9hc3NlcnRfbmVxKGFzcHJpbnRmKCZvdXRwdXQtPm5hbWUsICIlcy0lZCIsCj4g a21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoYy0+Y29ubmVjdG9yX3R5cGUpLCBjLT5jb25uZWN0 b3JfdHlwZV9pZCksCj4gwqAJCQnCoMKgwqDCoMKgwqDCoC0xKTsKPiDCoAl9Cj4gwqAKPiArCWlm ICghb3V0cHV0LT52YWxpZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKG91dHB1dC0+dXNlX292 ZXJyaWRlX21vZGUpCj4gKwkJb3V0cHV0LT5jb25maWcuZGVmYXVsdF9tb2RlID0gb3V0cHV0LT5v dmVycmlkZV9tb2RlOwo+ICsKPiDCoAlMT0coZGlzcGxheSwgIiVzOiBTZWxlY3RpbmcgcGlwZSAl c1xuIiwgb3V0cHV0LT5uYW1lLAo+IMKgCcKgwqDCoMKga21zdGVzdF9waXBlX25hbWUob3V0cHV0 LT5jb25maWcucGlwZSkpOwo+IMKgCj4gQEAgLTEyNTksMTAgKzEyNjUsMTAgQEAgZ2V0X2NydGNf cHJvcGVydHkoaW50IGRybV9mZCwgdWludDMyX3QgY3J0Y19pZCwgY29uc3QKPiBjaGFyICpuYW1l LAo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgdm9pZAo+IC1pZ3RfY3J0Y19zZXRfcHJvcGVydHkoaWd0 X291dHB1dF90ICpvdXRwdXQsIHVpbnQzMl90IHByb3BfaWQsIHVpbnQ2NF90IHZhbHVlKQo+ICtp Z3RfY3J0Y19zZXRfcHJvcGVydHkoaWd0X3BpcGVfdCAqcGlwZSwgdWludDMyX3QgcHJvcF9pZCwg dWludDY0X3QgdmFsdWUpCj4gwqB7Cj4gLQlkcm1Nb2RlT2JqZWN0U2V0UHJvcGVydHkob3V0cHV0 LT5kaXNwbGF5LT5kcm1fZmQsCj4gLQkJb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwgRFJN X01PREVfT0JKRUNUX0NSVEMsIHByb3BfaWQsCj4gdmFsdWUpOwo+ICsJZHJtTW9kZU9iamVjdFNl dFByb3BlcnR5KHBpcGUtPmRpc3BsYXktPmRybV9mZCwKPiArCQlwaXBlLT5jcnRjX2lkLCBEUk1f TU9ERV9PQkpFQ1RfQ1JUQywgcHJvcF9pZCwgdmFsdWUpOwo+IMKgfQo+IMKgCj4gwqAvKgo+IEBA IC0xMzI1LDE1ICsxMzMxLDM3IEBAIHZvaWQgaWd0X2Rpc3BsYXlfaW5pdChpZ3RfZGlzcGxheV90 ICpkaXNwbGF5LCBpbnQKPiBkcm1fZmQpCj4gwqAJCWludCBwID0gSUdUX1BMQU5FXzI7Cj4gwqAJ CWludCBqLCB0eXBlOwo+IMKgCQl1aW50OF90IG5fcGxhbmVzID0gMDsKPiArCQl1aW50NjRfdCBw cm9wX3ZhbHVlOwo+IMKgCj4gwqAJCXBpcGUtPmNydGNfaWQgPSByZXNvdXJjZXMtPmNydGNzW2ld Owo+IMKgCQlwaXBlLT5kaXNwbGF5ID0gZGlzcGxheTsKPiDCoAkJcGlwZS0+cGlwZSA9IGk7Cj4g wqAKPiArCQlnZXRfY3J0Y19wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIHBpcGUtPmNydGNfaWQs Cj4gKwkJCQnCoMKgwqDCoCJiYWNrZ3JvdW5kX2NvbG9yIiwKPiArCQkJCcKgwqDCoMKgJnBpcGUt PmJhY2tncm91bmRfcHJvcGVydHksCj4gKwkJCQnCoMKgwqDCoCZwcm9wX3ZhbHVlLAo+ICsJCQkJ wqDCoMKgwqBOVUxMKTsKPiArCQlwaXBlLT5iYWNrZ3JvdW5kID0gKHVpbnQzMl90KXByb3BfdmFs dWU7Cj4gKwkJZ2V0X2NydGNfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBwaXBlLT5jcnRjX2lk LAo+ICsJCQkJwqDCoCJERUdBTU1BX0xVVCIsCj4gKwkJCQnCoMKgJnBpcGUtPmRlZ2FtbWFfcHJv cGVydHksCj4gKwkJCQnCoMKgTlVMTCwKPiArCQkJCcKgwqBOVUxMKTsKPiArCQlnZXRfY3J0Y19w cm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIHBpcGUtPmNydGNfaWQsCj4gKwkJCQnCoMKgIkNUTSIs Cj4gKwkJCQnCoMKgJnBpcGUtPmN0bV9wcm9wZXJ0eSwKPiArCQkJCcKgwqBOVUxMLAo+ICsJCQkJ wqDCoE5VTEwpOwo+ICsJCWdldF9jcnRjX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgcGlwZS0+ Y3J0Y19pZCwKPiArCQkJCcKgwqAiR0FNTUFfTFVUIiwKPiArCQkJCcKgwqAmcGlwZS0+Z2FtbWFf cHJvcGVydHksCj4gKwkJCQnCoMKgTlVMTCwKPiArCQkJCcKgwqBOVUxMKTsKPiArCgpJIHRoaW5r IGl0IG1pZ2h0IGJlIHdvcnRoIHNwbGl0dGluZyB0aGUgZHJtIHByb3BlcnR5IHJlbGF0ZWQgY2hh bmdlcyB0byBhCnNlcGFyYXRlIHBhdGNoLiBUaGV5IHNlZW0gZmFpcmx5IHNlbGYgY29udGFpbmVk IGFuZCB0aGlzIGlzIGEgc29tZXdoYXQgbG9uZwpwYXRjaC4KCj4gwqAJCS8qIGFkZCB0aGUgcGxh bmVzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGF0IHBpcGUgKi8KPiDCoAkJZm9yIChqID0gMDsg aiA8IHBsYW5lX3Jlc291cmNlcy0+Y291bnRfcGxhbmVzOyBqKyspIHsKPiDCoAkJCWRybU1vZGVQ bGFuZSAqZHJtX3BsYW5lOwo+IC0JCQl1aW50NjRfdCBwcm9wX3ZhbHVlOwo+IMKgCj4gwqAJCQlk cm1fcGxhbmUgPSBkcm1Nb2RlR2V0UGxhbmUoZGlzcGxheS0+ZHJtX2ZkLAo+IMKgCQkJCQkJwqDC oMKgwqBwbGFuZV9yZXNvdXJjZXMtCj4gPnBsYW5lc1tqXSk7Cj4gQEAgLTE0NDAsNDcgKzE0Njgs MTcgQEAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGludAo+ IGRybV9mZCkKPiDCoAlpZ3RfYXNzZXJ0KGRpc3BsYXktPm91dHB1dHMpOwo+IMKgCj4gwqAJZm9y IChpID0gMDsgaSA8IGRpc3BsYXktPm5fb3V0cHV0czsgaSsrKSB7Cj4gLQkJaW50IGo7Cj4gwqAJ CWlndF9vdXRwdXRfdCAqb3V0cHV0ID0gJmRpc3BsYXktPm91dHB1dHNbaV07Cj4gwqAKPiDCoAkJ LyoKPiAtCQnCoCogV2UncmUgZnJlZSB0byBzZWxlY3QgYW55IHBpcGUgdG8gZHJpdmUgdGhhdCBv dXRwdXQgdW50aWwKPiAtCQnCoCogYSBjb25zdHJhaW50IGlzIHNldCB3aXRoIGlndF9vdXRwdXRf c2V0X3BpcGUoKS4KPiArCQnCoCogV2UgZG9uJ3QgYXNzaWduIGVhY2ggb3V0cHV0IGEgcGlwZSB1 bmxlc3MKPiArCQnCoCogYSBwaXBlIGlzIHNldCB3aXRoIGlndF9vdXRwdXRfc2V0X3BpcGUoKS4K PiDCoAkJwqAqLwo+IC0JCW91dHB1dC0+cGVuZGluZ19jcnRjX2lkeF9tYXNrID0gLTFVTDsKPiAr CQlvdXRwdXQtPnBlbmRpbmdfY3J0Y19pZHhfbWFzayA9IDA7Cj4gwqAJCW91dHB1dC0+aWQgPSBy ZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV07Cj4gwqAJCW91dHB1dC0+ZGlzcGxheSA9IGRpc3BsYXk7 Cj4gwqAKPiDCoAkJaWd0X291dHB1dF9yZWZyZXNoKG91dHB1dCk7Cj4gLQo+IC0JCWZvciAoaiA9 IDA7IGogPCBkaXNwbGF5LT5uX3BpcGVzOyBqKyspIHsKPiAtCQkJdWludDY0X3QgcHJvcF92YWx1 ZTsKPiAtCQkJaWd0X3BpcGVfdCAqcGlwZSA9ICZkaXNwbGF5LT5waXBlc1tqXTsKPiAtCj4gLQkJ CWlmIChvdXRwdXQtPmNvbmZpZy5jcnRjKSB7Cj4gLQkJCQlnZXRfY3J0Y19wcm9wZXJ0eShkaXNw bGF5LT5kcm1fZmQsIG91dHB1dC0KPiA+Y29uZmlnLmNydGMtPmNydGNfaWQsCj4gLQkJCQkJCcKg wqDCoCJiYWNrZ3JvdW5kX2NvbG9yIiwKPiAtCQkJCQkJwqDCoMKgJnBpcGUtCj4gPmJhY2tncm91 bmRfcHJvcGVydHksCj4gLQkJCQkJCcKgwqDCoCZwcm9wX3ZhbHVlLAo+IC0JCQkJCQnCoMKgwqBO VUxMKTsKPiAtCQkJCXBpcGUtPmJhY2tncm91bmQgPSAodWludDMyX3QpcHJvcF92YWx1ZTsKPiAt CQkJCWdldF9jcnRjX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LQo+ID5jb25maWcu Y3J0Yy0+Y3J0Y19pZCwKPiAtCQkJCQkJwqDCoCJERUdBTU1BX0xVVCIsCj4gLQkJCQkJCcKgwqAm cGlwZS0+ZGVnYW1tYV9wcm9wZXJ0eSwKPiAtCQkJCQkJwqDCoE5VTEwsCj4gLQkJCQkJCcKgwqBO VUxMKTsKPiAtCQkJCWdldF9jcnRjX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LQo+ ID5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKPiAtCQkJCQkJwqDCoCJDVE0iLAo+IC0JCQkJCQnCoMKg JnBpcGUtPmN0bV9wcm9wZXJ0eSwKPiAtCQkJCQkJwqDCoE5VTEwsCj4gLQkJCQkJCcKgwqBOVUxM KTsKPiAtCQkJCWdldF9jcnRjX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LQo+ID5j b25maWcuY3J0Yy0+Y3J0Y19pZCwKPiAtCQkJCQkJwqDCoCJHQU1NQV9MVVQiLAo+IC0JCQkJCQnC oMKgJnBpcGUtPmdhbW1hX3Byb3BlcnR5LAo+IC0JCQkJCQnCoMKgTlVMTCwKPiAtCQkJCQkJwqDC oE5VTEwpOwo+IC0JCQl9Cj4gLQkJfQo+IMKgCX0KPiDCoAo+IMKgCWRybU1vZGVGcmVlUGxhbmVS ZXNvdXJjZXMocGxhbmVfcmVzb3VyY2VzKTsKPiBAQCAtMTU0NSw3ICsxNTQzLDcgQEAgc3RhdGlj IHZvaWQgaWd0X2Rpc3BsYXlfcmVmcmVzaChpZ3RfZGlzcGxheV90ICpkaXNwbGF5KQo+IMKgwqDC oMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5uX291dHB1dHM7IGkrKykgewo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZ3Rfb3V0cHV0X3QgKmEgPSAmZGlz cGxheS0+b3V0cHV0c1tpXTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChhLT5wZW5kaW5nX2NydGNfaWR4X21hc2sgPT0gLTFVTCkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoIWEtPnBlbmRpbmdfY3J0Y19pZHhfbWFzaykKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+IMKg Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoaiA9IDA7IGogPCBkaXNw bGF5LT5uX291dHB1dHM7IGorKykgewo+IEBAIC0xNTU0LDkgKzE1NTIsNiBAQCBzdGF0aWMgdm9p ZCBpZ3RfZGlzcGxheV9yZWZyZXNoKGlndF9kaXNwbGF5X3QgKmRpc3BsYXkpCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoaSA9PSBqKQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGNvbnRpbnVlOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChiLT5wZW5kaW5nX2NydGNfaWR4X21hc2sgPT0gLTFVTCkKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGNvbnRpbnVlOwo+IC0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnRfZihhLT5wZW5kaW5nX2NydGNfaWR4X21hc2sgIT0K PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYi0+cGVuZGluZ19jcnRjX2lkeF9tYXNrLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAiJXMgYW5kICVzIGFyZSBib3RoIHRyeWluZyB0byB1c2UgcGlwZQo+ICVzXG4i LAo+IEBAIC0xNTY1LDI1ICsxNTYwLDkgQEAgc3RhdGljIHZvaWQgaWd0X2Rpc3BsYXlfcmVmcmVz aChpZ3RfZGlzcGxheV90ICpkaXNwbGF5KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9Cj4gwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLQkvKgo+IC0JwqAqIFRoZSBwaXBl IGFsbG9jYXRpb24gaGFzIHRvIGJlIGRvbmUgaW4gdHdvIHBoYXNlczoKPiAtCcKgKsKgwqDCoC0g Zmlyc3QsIHRyeSB0byBzYXRpc2Z5IHRoZSBvdXRwdXRzIHdoZXJlIGEgcGlwZSBoYXMgYmVlbgo+ IHNwZWNpZmllZAo+IC0JwqAqwqDCoMKgLSB0aGVuLCBhbGxvY2F0ZSB0aGUgb3V0cHV0cyB3aXRo IFBJUEVfQU5ZCj4gLQnCoCovCj4gwqAJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fb3V0cHV0 czsgaSsrKSB7Cj4gwqAJCWlndF9vdXRwdXRfdCAqb3V0cHV0ID0gJmRpc3BsYXktPm91dHB1dHNb aV07Cj4gwqAKPiAtCQlpZiAob3V0cHV0LT5wZW5kaW5nX2NydGNfaWR4X21hc2sgPT0gLTFVTCkK PiAtCQkJY29udGludWU7Cj4gLQo+IC0JCWlndF9vdXRwdXRfcmVmcmVzaChvdXRwdXQpOwo+IC0J fQo+IC0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fb3V0cHV0czsgaSsrKSB7Cj4gLQkJaWd0 X291dHB1dF90ICpvdXRwdXQgPSAmZGlzcGxheS0+b3V0cHV0c1tpXTsKPiAtCj4gLQkJaWYgKG91 dHB1dC0+cGVuZGluZ19jcnRjX2lkeF9tYXNrICE9IC0xVUwpCj4gLQkJCWNvbnRpbnVlOwo+IC0K PiDCoAkJaWd0X291dHB1dF9yZWZyZXNoKG91dHB1dCk7Cj4gwqAJfQo+IMKgfQo+IEBAIC0xNTkz LDEyICsxNTcyLDExIEBAIHN0YXRpYyBpZ3RfcGlwZV90Cj4gKmlndF9vdXRwdXRfZ2V0X2RyaXZp bmdfcGlwZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKPiDCoAlpZ3RfZGlzcGxheV90ICpkaXNwbGF5 ID0gb3V0cHV0LT5kaXNwbGF5Owo+IMKgCWVudW0gcGlwZSBwaXBlOwo+IMKgCj4gLQlpZiAob3V0 cHV0LT5wZW5kaW5nX2NydGNfaWR4X21hc2sgPT0gLTFVTCkgewo+ICsJaWYgKCFvdXRwdXQtPnBl bmRpbmdfY3J0Y19pZHhfbWFzaykgewo+IMKgCQkvKgo+IC0JCcKgKiBUaGUgdXNlciBoYXNuJ3Qg c3BlY2lmaWVkIGEgcGlwZSB0byB1c2UsIHRha2UgdGhlIG9uZQo+IC0JCcKgKiBjb25maWd1cmVk IGJ5IHRoZSBsYXN0IHJlZnJlc2goKQo+ICsJCcKgKiBUaGUgdXNlciBoYXNuJ3Qgc3BlY2lmaWVk IGEgcGlwZSB0byB1c2UsIHJldHVybiBub25lLgo+IMKgCQnCoCovCj4gLQkJcGlwZSA9IG91dHB1 dC0+Y29uZmlnLnBpcGU7Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gwqAJfSBlbHNlIHsKPiDCoAkJLyoK PiDCoAkJwqAqIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBwZW5kaW5nIHBpcGUgKGllIHRoZSBwaXBl IHRoYXQKPiBzaG91bGQKPiBAQCAtMTYyOCw2ICsxNjA2LDIxIEBAIHN0YXRpYyBpZ3RfcGxhbmVf dCAqaWd0X3BpcGVfZ2V0X3BsYW5lKGlndF9waXBlX3QKPiAqcGlwZSwgZW51bSBpZ3RfcGxhbmUg cGxhbmUpCj4gwqAJcmV0dXJuICZwaXBlLT5wbGFuZXNbaWR4XTsKPiDCoH0KPiDCoAo+ICtzdGF0 aWMgaWd0X291dHB1dF90ICppZ3RfcGlwZV9nZXRfb3V0cHV0KGlndF9waXBlX3QgKnBpcGUpCj4g K3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSBwaXBlLT5kaXNwbGF5Owo+ICsJaW50IGk7 Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fb3V0cHV0czsgaSsrKSB7Cj4gKwkJ aWd0X291dHB1dF90ICpvdXRwdXQgPSAmZGlzcGxheS0+b3V0cHV0c1tpXTsKPiArCj4gKwkJaWYg KG91dHB1dC0+cGVuZGluZ19jcnRjX2lkeF9tYXNrID09ICgxIDw8IHBpcGUtPnBpcGUpKQo+ICsJ CQlyZXR1cm4gb3V0cHV0Owo+ICsJfQo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+IMKg Ym9vbCBpZ3RfcGlwZV9nZXRfcHJvcGVydHkoaWd0X3BpcGVfdCAqcGlwZSwgY29uc3QgY2hhciAq bmFtZSwKPiDCoAkJCcKgwqDCoHVpbnQzMl90ICpwcm9wX2lkLCB1aW50NjRfdCAqdmFsdWUsCj4g wqAJCQnCoMKgwqBkcm1Nb2RlUHJvcGVydHlQdHIgKnByb3ApCj4gQEAgLTE3NDEsMTAgKzE3MzQs MTAgQEAgaWd0X2F0b21pY19wcmVwYXJlX3BsYW5lX2NvbW1pdChpZ3RfcGxhbmVfdCAqcGxhbmUs Cj4gaWd0X291dHB1dF90ICpvdXRwdXQsCj4gwqAgKiB0ZXN0cyB0aGF0IGV4cGVjdCBhIHNwZWNp ZmljIGVycm9yIGNvZGUpLgo+IMKgICovCj4gwqBzdGF0aWMgaW50IGlndF9kcm1fcGxhbmVfY29t bWl0KGlndF9wbGFuZV90ICpwbGFuZSwKPiAtCQkJCWlndF9vdXRwdXRfdCAqb3V0cHV0LAo+ICsJ CQkJaWd0X3BpcGVfdCAqcGlwZSwKPiDCoAkJCQlib29sIGZhaWxfb25fZXJyb3IpCj4gwqB7Cj4g LQlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gb3V0cHV0LT5kaXNwbGF5Owo+ICsJaWd0X2Rpc3Bs YXlfdCAqZGlzcGxheSA9IHBpcGUtPmRpc3BsYXk7Cj4gwqAJdWludDMyX3QgZmJfaWQsIGNydGNf aWQ7Cj4gwqAJaW50IHJldDsKPiDCoAl1aW50MzJfdCBzcmNfeDsKPiBAQCAtMTc2MywxMyArMTc1 NiwxMiBAQCBzdGF0aWMgaW50IGlndF9kcm1fcGxhbmVfY29tbWl0KGlndF9wbGFuZV90ICpwbGFu ZSwKPiDCoAkJwqDCoMKgIXBsYW5lLT5yb3RhdGlvbl9jaGFuZ2VkKTsKPiDCoAo+IMKgCWZiX2lk ID0gaWd0X3BsYW5lX2dldF9mYl9pZChwbGFuZSk7Cj4gLQljcnRjX2lkID0gb3V0cHV0LT5jb25m aWcuY3J0Yy0+Y3J0Y19pZDsKPiArCWNydGNfaWQgPSBwaXBlLT5jcnRjX2lkOwo+IMKgCj4gwqAJ aWYgKChwbGFuZS0+ZmJfY2hhbmdlZCB8fCBwbGFuZS0+c2l6ZV9jaGFuZ2VkKSAmJiBmYl9pZCA9 PSAwKSB7Cj4gwqAJCUxPRyhkaXNwbGF5LAo+IC0JCcKgwqDCoMKgIiVzOiBTZXRQbGFuZSBwaXBl ICVzLCBwbGFuZSAlZCwgZGlzYWJsaW5nXG4iLAo+IC0JCcKgwqDCoMKgaWd0X291dHB1dF9uYW1l KG91dHB1dCksCj4gLQkJwqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShvdXRwdXQtPmNvbmZpZy5w aXBlKSwKPiArCQnCoMKgwqDCoCJTZXRQbGFuZSBwaXBlICVzLCBwbGFuZSAlZCwgZGlzYWJsaW5n XG4iLAo+ICsJCcKgwqDCoMKga21zdGVzdF9waXBlX25hbWUocGlwZS0+cGlwZSksCj4gwqAJCcKg wqDCoMKgcGxhbmUtPmluZGV4KTsKPiDCoAo+IMKgCQlyZXQgPSBkcm1Nb2RlU2V0UGxhbmUoZGlz cGxheS0+ZHJtX2ZkLAo+IEBAIC0xNzk3LDEwICsxNzg5LDkgQEAgc3RhdGljIGludCBpZ3RfZHJt X3BsYW5lX2NvbW1pdChpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gwqAJCWNydGNfaCA9IHBsYW5lLT5j cnRjX2g7Cj4gwqAKPiDCoAkJTE9HKGRpc3BsYXksCj4gLQkJwqDCoMKgwqAiJXM6IFNldFBsYW5l ICVzLiVkLCBmYiAldSwgc3JjID0gKCVkLCAlZCkgIgo+ICsJCcKgwqDCoMKgIlNldFBsYW5lICVz LiVkLCBmYiAldSwgc3JjID0gKCVkLCAlZCkgIgo+IMKgCQkJIiV1eCV1IGRzdCA9ICgldSwgJXUp ICV1eCV1XG4iLAo+IC0JCcKgwqDCoMKgaWd0X291dHB1dF9uYW1lKG91dHB1dCksCj4gLQkJwqDC oMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShvdXRwdXQtPmNvbmZpZy5waXBlKSwKPiArCQnCoMKgwqDC oGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUtPnBpcGUpLAo+IMKgCQnCoMKgwqDCoHBsYW5lLT5pbmRl eCwKPiDCoAkJwqDCoMKgwqBmYl9pZCwKPiDCoAkJwqDCoMKgwqBzcmNfeCA+PiAxNiwgc3JjX3kg Pj4gMTYsIHNyY193ID4+IDE2LCBzcmNfaCA+PiAxNiwKPiBAQCAtMTg0MSwxMSArMTgzMiwxMSBA QCBzdGF0aWMgaW50IGlndF9kcm1fcGxhbmVfY29tbWl0KGlndF9wbGFuZV90ICpwbGFuZSwKPiDC oCAqIGNvZGUpLgo+IMKgICovCj4gwqBzdGF0aWMgaW50IGlndF9jdXJzb3JfY29tbWl0X2xlZ2Fj eShpZ3RfcGxhbmVfdCAqY3Vyc29yLAo+IC0JCQkJwqDCoMKgwqBpZ3Rfb3V0cHV0X3QgKm91dHB1 dCwKPiArCQkJCcKgwqDCoMKgaWd0X3BpcGVfdCAqcGlwZSwKPiDCoAkJCQnCoMKgwqDCoGJvb2wg ZmFpbF9vbl9lcnJvcikKPiDCoHsKPiAtCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSBvdXRwdXQt PmRpc3BsYXk7Cj4gLQl1aW50MzJfdCBjcnRjX2lkID0gb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0 Y19pZDsKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSBwaXBlLT5kaXNwbGF5Owo+ICsJdWlu dDMyX3QgY3J0Y19pZCA9IHBpcGUtPmNydGNfaWQ7Cj4gwqAJaW50IHJldDsKPiDCoAo+IMKgCWlm IChjdXJzb3ItPmZiX2NoYW5nZWQpIHsKPiBAQCAtMTg1Myw5ICsxODQ0LDggQEAgc3RhdGljIGlu dCBpZ3RfY3Vyc29yX2NvbW1pdF9sZWdhY3koaWd0X3BsYW5lX3QgKmN1cnNvciwKPiDCoAo+IMKg CQlpZiAoZ2VtX2hhbmRsZSkgewo+IMKgCQkJTE9HKGRpc3BsYXksCj4gLQkJCcKgwqDCoMKgIiVz OiBTZXRDdXJzb3IgcGlwZSAlcywgZmIgJXUgJWR4JWRcbiIsCj4gLQkJCcKgwqDCoMKgaWd0X291 dHB1dF9uYW1lKG91dHB1dCksCj4gLQkJCcKgwqDCoMKga21zdGVzdF9waXBlX25hbWUob3V0cHV0 LT5jb25maWcucGlwZSksCj4gKwkJCcKgwqDCoMKgIlNldEN1cnNvciBwaXBlICVzLCBmYiAldSAl ZHglZFxuIiwKPiArCQkJwqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlLT5waXBlKSwKPiDC oAkJCcKgwqDCoMKgZ2VtX2hhbmRsZSwKPiDCoAkJCcKgwqDCoMKgY3Vyc29yLT5jcnRjX3csIGN1 cnNvci0+Y3J0Y19oKTsKPiDCoAo+IEBAIC0xODY1LDkgKzE4NTUsOCBAQCBzdGF0aWMgaW50IGln dF9jdXJzb3JfY29tbWl0X2xlZ2FjeShpZ3RfcGxhbmVfdCAqY3Vyc29yLAo+IMKgCQkJCQnCoMKg wqDCoMKgwqDCoGN1cnNvci0+Y3J0Y19oKTsKPiDCoAkJfSBlbHNlIHsKPiDCoAkJCUxPRyhkaXNw bGF5LAo+IC0JCQnCoMKgwqDCoCIlczogU2V0Q3Vyc29yIHBpcGUgJXMsIGRpc2FibGluZ1xuIiwK PiAtCQkJwqDCoMKgwqBpZ3Rfb3V0cHV0X25hbWUob3V0cHV0KSwKPiAtCQkJwqDCoMKgwqBrbXN0 ZXN0X3BpcGVfbmFtZShvdXRwdXQtPmNvbmZpZy5waXBlKSk7Cj4gKwkJCcKgwqDCoMKgIlNldEN1 cnNvciBwaXBlICVzLCBkaXNhYmxpbmdcbiIsCj4gKwkJCcKgwqDCoMKga21zdGVzdF9waXBlX25h bWUocGlwZS0+cGlwZSkpOwo+IMKgCj4gwqAJCQlyZXQgPSBkcm1Nb2RlU2V0Q3Vyc29yKGRpc3Bs YXktPmRybV9mZCwgY3J0Y19pZCwKPiDCoAkJCQkJwqDCoMKgwqDCoMKgwqAwLCAwLCAwKTsKPiBA QCAtMTg4Myw5ICsxODcyLDggQEAgc3RhdGljIGludCBpZ3RfY3Vyc29yX2NvbW1pdF9sZWdhY3ko aWd0X3BsYW5lX3QgKmN1cnNvciwKPiDCoAkJaW50IHkgPSBjdXJzb3ItPmNydGNfeTsKPiDCoAo+ IMKgCQlMT0coZGlzcGxheSwKPiAtCQnCoMKgwqDCoCIlczogTW92ZUN1cnNvciBwaXBlICVzLCAo JWQsICVkKVxuIiwKPiAtCQnCoMKgwqDCoGlndF9vdXRwdXRfbmFtZShvdXRwdXQpLAo+IC0JCcKg wqDCoMKga21zdGVzdF9waXBlX25hbWUob3V0cHV0LT5jb25maWcucGlwZSksCj4gKwkJwqDCoMKg wqAiTW92ZUN1cnNvciBwaXBlICVzLCAoJWQsICVkKVxuIiwKPiArCQnCoMKgwqDCoGttc3Rlc3Rf cGlwZV9uYW1lKHBpcGUtPnBpcGUpLAo+IMKgCQnCoMKgwqDCoHgsIHkpOwo+IMKgCj4gwqAJCXJl dCA9IGRybU1vZGVNb3ZlQ3Vyc29yKGRpc3BsYXktPmRybV9mZCwgY3J0Y19pZCwgeCwgeSk7Cj4g QEAgLTE5MDIsMTAgKzE4OTAsMTEgQEAgc3RhdGljIGludCBpZ3RfY3Vyc29yX2NvbW1pdF9sZWdh Y3koaWd0X3BsYW5lX3QKPiAqY3Vyc29yLAo+IMKgICogKHNldG1vZGUpLgo+IMKgICovCj4gwqBz dGF0aWMgaW50IGlndF9wcmltYXJ5X3BsYW5lX2NvbW1pdF9sZWdhY3koaWd0X3BsYW5lX3QgKnBy aW1hcnksCj4gLQkJCQkJwqDCoMKgaWd0X291dHB1dF90ICpvdXRwdXQsCj4gKwkJCQkJwqDCoMKg aWd0X3BpcGVfdCAqcGlwZSwKPiDCoAkJCQkJwqDCoMKgYm9vbCBmYWlsX29uX2Vycm9yKQo+IMKg ewo+IMKgCXN0cnVjdCBpZ3RfZGlzcGxheSAqZGlzcGxheSA9IHByaW1hcnktPnBpcGUtPmRpc3Bs YXk7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dCA9IGlndF9waXBlX2dldF9vdXRwdXQocGlwZSk7 Cj4gwqAJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+IMKgCXVpbnQzMl90IGZiX2lkLCBjcnRjX2lk Owo+IMKgCWludCByZXQ7Cj4gQEAgLTE5MjAsNyArMTkwOSw3IEBAIHN0YXRpYyBpbnQgaWd0X3By aW1hcnlfcGxhbmVfY29tbWl0X2xlZ2FjeShpZ3RfcGxhbmVfdAo+ICpwcmltYXJ5LAo+IMKgCQkh cHJpbWFyeS0+c2l6ZV9jaGFuZ2VkICYmICFwcmltYXJ5LT5wYW5uaW5nX2NoYW5nZWQpCj4gwqAJ CXJldHVybiAwOwo+IMKgCj4gLQljcnRjX2lkID0gb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19p ZDsKPiArCWNydGNfaWQgPSBwaXBlLT5jcnRjX2lkOwo+IMKgCWZiX2lkID0gaWd0X3BsYW5lX2dl dF9mYl9pZChwcmltYXJ5KTsKPiDCoAlpZiAoZmJfaWQpCj4gwqAJCW1vZGUgPSBpZ3Rfb3V0cHV0 X2dldF9tb2RlKG91dHB1dCk7Cj4gQEAgLTE5MzIsNyArMTkyMSw3IEBAIHN0YXRpYyBpbnQgaWd0 X3ByaW1hcnlfcGxhbmVfY29tbWl0X2xlZ2FjeShpZ3RfcGxhbmVfdAo+ICpwcmltYXJ5LAo+IMKg CQnCoMKgwqDCoCIlczogU2V0Q3J0YyBwaXBlICVzLCBmYiAldSwgcGFubmluZyAoJWQsICVkKSwg Igo+IMKgCQnCoMKgwqDCoCJtb2RlICVkeCVkXG4iLAo+IMKgCQnCoMKgwqDCoGlndF9vdXRwdXRf bmFtZShvdXRwdXQpLAoKSGVyZSB5b3Uga2VwdCB0aGUgb3V0cHV0IG5hbWUgaW4gdGhlIGxvZyB3 aGlsZSBpdCB3YXMgcmVtb3ZlZCBpbiBhbGwgb3RoZXIgTE9HKCkKaW5zdGFuY2VzLiBTaG91bGQg aXQgYmUgcmVtb3ZlZCBmcm9tIGhlcmUgdG9vIGZvciBjb25zaXN0ZW5jeT8KCgpMb29rcyBnb29k IG90aGVyd2lzZS4KCkFuZGVyCgo+IC0JCcKgwqDCoMKga21zdGVzdF9waXBlX25hbWUob3V0cHV0 LT5jb25maWcucGlwZSksCj4gKwkJwqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlLT5waXBl KSwKPiDCoAkJwqDCoMKgwqBmYl9pZCwKPiDCoAkJwqDCoMKgwqBwcmltYXJ5LT5wYW5feCwgcHJp bWFyeS0+cGFuX3ksCj4gwqAJCcKgwqDCoMKgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5 KTsKPiBAQCAtMTk0Niw5ICsxOTM1LDggQEAgc3RhdGljIGludCBpZ3RfcHJpbWFyeV9wbGFuZV9j b21taXRfbGVnYWN5KGlndF9wbGFuZV90Cj4gKnByaW1hcnksCj4gwqAJCQkJwqDCoMKgwqDCoG1v ZGUpOwo+IMKgCX0gZWxzZSB7Cj4gwqAJCUxPRyhkaXNwbGF5LAo+IC0JCcKgwqDCoMKgIiVzOiBT ZXRDcnRjIHBpcGUgJXMsIGRpc2FibGluZ1xuIiwKPiAtCQnCoMKgwqDCoGlndF9vdXRwdXRfbmFt ZShvdXRwdXQpLAo+IC0JCcKgwqDCoMKga21zdGVzdF9waXBlX25hbWUob3V0cHV0LT5jb25maWcu cGlwZSkpOwo+ICsJCcKgwqDCoMKgIlNldENydGMgcGlwZSAlcywgZGlzYWJsaW5nXG4iLAo+ICsJ CcKgwqDCoMKga21zdGVzdF9waXBlX25hbWUocGlwZS0+cGlwZSkpOwo+IMKgCj4gwqAJCXJldCA9 IGRybU1vZGVTZXRDcnRjKGRpc3BsYXktPmRybV9mZCwKPiDCoAkJCQnCoMKgwqDCoMKgY3J0Y19p ZCwKPiBAQCAtMTk3NiwxNyArMTk2NCwxNyBAQCBzdGF0aWMgaW50IGlndF9wcmltYXJ5X3BsYW5l X2NvbW1pdF9sZWdhY3koaWd0X3BsYW5lX3QKPiAqcHJpbWFyeSwKPiDCoCAqIHdoaWNoIEFQSSBp cyB1c2VkIHRvIGRvIHRoZSBwcm9ncmFtbWluZy4KPiDCoCAqLwo+IMKgc3RhdGljIGludCBpZ3Rf cGxhbmVfY29tbWl0KGlndF9wbGFuZV90ICpwbGFuZSwKPiAtCQkJwqDCoMKgwqBpZ3Rfb3V0cHV0 X3QgKm91dHB1dCwKPiArCQkJwqDCoMKgwqBpZ3RfcGlwZV90ICpwaXBlLAo+IMKgCQkJwqDCoMKg wqBlbnVtIGlndF9jb21taXRfc3R5bGUgcywKPiDCoAkJCcKgwqDCoMKgYm9vbCBmYWlsX29uX2Vy cm9yKQo+IMKgewo+IMKgCWlmIChwbGFuZS0+aXNfY3Vyc29yICYmIHMgPT0gQ09NTUlUX0xFR0FD WSkgewo+IC0JCXJldHVybiBpZ3RfY3Vyc29yX2NvbW1pdF9sZWdhY3kocGxhbmUsIG91dHB1dCwK PiBmYWlsX29uX2Vycm9yKTsKPiArCQlyZXR1cm4gaWd0X2N1cnNvcl9jb21taXRfbGVnYWN5KHBs YW5lLCBwaXBlLCBmYWlsX29uX2Vycm9yKTsKPiDCoAl9IGVsc2UgaWYgKHBsYW5lLT5pc19wcmlt YXJ5ICYmIHMgPT0gQ09NTUlUX0xFR0FDWSkgewo+IC0JCXJldHVybiBpZ3RfcHJpbWFyeV9wbGFu ZV9jb21taXRfbGVnYWN5KHBsYW5lLCBvdXRwdXQsCj4gKwkJcmV0dXJuIGlndF9wcmltYXJ5X3Bs YW5lX2NvbW1pdF9sZWdhY3kocGxhbmUsIHBpcGUsCj4gwqAJCQkJCQnCoMKgwqDCoMKgwqDCoGZh aWxfb25fZXJyb3IpOwo+IMKgCX0gZWxzZSB7Cj4gLQkJCXJldHVybiBpZ3RfZHJtX3BsYW5lX2Nv bW1pdChwbGFuZSwgb3V0cHV0LAo+IGZhaWxfb25fZXJyb3IpOwo+ICsJCQlyZXR1cm4gaWd0X2Ry bV9wbGFuZV9jb21taXQocGxhbmUsIHBpcGUsCj4gZmFpbF9vbl9lcnJvcik7Cj4gwqAJfQo+IMKg fQo+IMKgCj4gQEAgLTIwMDAsMzEgKzE5ODgsMjggQEAgc3RhdGljIGludCBpZ3RfcGxhbmVfY29t bWl0KGlndF9wbGFuZV90ICpwbGFuZSwKPiDCoCAqIGZ1cnRoZXIgcHJvZ3JhbW1pbmcgd2lsbCB0 YWtlIHBsYWNlLCB3aGljaCBtYXkgcmVzdWx0IGluIHNvbWUgY2hhbmdlcwo+IMKgICogdGFraW5n IGVmZmVjdCBhbmQgb3RoZXJzIG5vdCB0YWtpbmcgZWZmZWN0Lgo+IMKgICovCj4gLXN0YXRpYyBp bnQgaWd0X291dHB1dF9jb21taXQoaWd0X291dHB1dF90ICpvdXRwdXQsCj4gLQkJCcKgwqDCoMKg wqBlbnVtIGlndF9jb21taXRfc3R5bGUgcywKPiAtCQkJwqDCoMKgwqDCoGJvb2wgZmFpbF9vbl9l cnJvcikKPiArc3RhdGljIGludCBpZ3RfcGlwZV9jb21taXQoaWd0X3BpcGVfdCAqcGlwZSwKPiAr CQkJwqDCoMKgZW51bSBpZ3RfY29tbWl0X3N0eWxlIHMsCj4gKwkJCcKgwqDCoGJvb2wgZmFpbF9v bl9lcnJvcikKPiDCoHsKPiAtCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSBvdXRwdXQtPmRpc3Bs YXk7Cj4gLQlpZ3RfcGlwZV90ICpwaXBlOwo+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9IHBp cGUtPmRpc3BsYXk7Cj4gwqAJaW50IGk7Cj4gwqAJaW50IHJldDsKPiDCoAlib29sIG5lZWRfd2Fp dF9mb3JfdmJsYW5rID0gZmFsc2U7Cj4gwqAKPiAtCXBpcGUgPSBpZ3Rfb3V0cHV0X2dldF9kcml2 aW5nX3BpcGUob3V0cHV0KTsKPiAtCj4gwqAJaWYgKHBpcGUtPmJhY2tncm91bmRfY2hhbmdlZCkg ewo+IC0JCWlndF9jcnRjX3NldF9wcm9wZXJ0eShvdXRwdXQsIHBpcGUtPmJhY2tncm91bmRfcHJv cGVydHksCj4gKwkJaWd0X2NydGNfc2V0X3Byb3BlcnR5KHBpcGUsIHBpcGUtPmJhY2tncm91bmRf cHJvcGVydHksCj4gwqAJCQlwaXBlLT5iYWNrZ3JvdW5kKTsKPiDCoAo+IMKgCQlwaXBlLT5iYWNr Z3JvdW5kX2NoYW5nZWQgPSBmYWxzZTsKPiDCoAl9Cj4gwqAKPiDCoAlpZiAocGlwZS0+Y29sb3Jf bWdtdF9jaGFuZ2VkKSB7Cj4gLQkJaWd0X2NydGNfc2V0X3Byb3BlcnR5KG91dHB1dCwgcGlwZS0+ ZGVnYW1tYV9wcm9wZXJ0eSwKPiArCQlpZ3RfY3J0Y19zZXRfcHJvcGVydHkocGlwZSwgcGlwZS0+ ZGVnYW1tYV9wcm9wZXJ0eSwKPiDCoAkJCQnCoMKgwqDCoMKgwqBwaXBlLT5kZWdhbW1hX2Jsb2Ip Owo+IC0JCWlndF9jcnRjX3NldF9wcm9wZXJ0eShvdXRwdXQsIHBpcGUtPmN0bV9wcm9wZXJ0eSwK PiArCQlpZ3RfY3J0Y19zZXRfcHJvcGVydHkocGlwZSwgcGlwZS0+Y3RtX3Byb3BlcnR5LAo+IMKg CQkJCcKgwqDCoMKgwqDCoHBpcGUtPmN0bV9ibG9iKTsKPiAtCQlpZ3RfY3J0Y19zZXRfcHJvcGVy dHkob3V0cHV0LCBwaXBlLT5nYW1tYV9wcm9wZXJ0eSwKPiArCQlpZ3RfY3J0Y19zZXRfcHJvcGVy dHkocGlwZSwgcGlwZS0+Z2FtbWFfcHJvcGVydHksCj4gwqAJCQkJwqDCoMKgwqDCoMKgcGlwZS0+ Z2FtbWFfYmxvYik7Cj4gwqAKPiDCoAkJcGlwZS0+Y29sb3JfbWdtdF9jaGFuZ2VkID0gZmFsc2U7 Cj4gQEAgLTIwMzYsNyArMjAyMSw3IEBAIHN0YXRpYyBpbnQgaWd0X291dHB1dF9jb21taXQoaWd0 X291dHB1dF90ICpvdXRwdXQsCj4gwqAJCWlmIChwbGFuZS0+ZmJfY2hhbmdlZCB8fCBwbGFuZS0+ cG9zaXRpb25fY2hhbmdlZCB8fCBwbGFuZS0KPiA+c2l6ZV9jaGFuZ2VkKQo+IMKgCQkJbmVlZF93 YWl0X2Zvcl92YmxhbmsgPSB0cnVlOwo+IMKgCj4gLQkJcmV0ID0gaWd0X3BsYW5lX2NvbW1pdChw bGFuZSwgb3V0cHV0LCBzLCBmYWlsX29uX2Vycm9yKTsKPiArCQlyZXQgPSBpZ3RfcGxhbmVfY29t bWl0KHBsYW5lLCBwaXBlLCBzLCBmYWlsX29uX2Vycm9yKTsKPiDCoAkJQ0hFQ0tfUkVUVVJOKHJl dCwgZmFpbF9vbl9lcnJvcik7Cj4gwqAJfQo+IMKgCj4gQEAgLTIwNjAsNiArMjA0NSw5IEBAIHN0 YXRpYyB2b2lkIGlndF9hdG9taWNfcHJlcGFyZV9jcnRjX2NvbW1pdChpZ3Rfb3V0cHV0X3QKPiAq b3V0cHV0LCBkcm1Nb2RlQXRvbWljUmUKPiDCoAo+IMKgCWlndF9waXBlX3QgKnBpcGVfb2JqID0g aWd0X291dHB1dF9nZXRfZHJpdmluZ19waXBlKG91dHB1dCk7Cj4gwqAKPiArCWlmICghcGlwZV9v YmopCj4gKwkJcmV0dXJuOwo+ICsKPiDCoAlpZiAocGlwZV9vYmotPmJhY2tncm91bmRfY2hhbmdl ZCkKPiDCoAkJaWd0X2F0b21pY19wb3B1bGF0ZV9jcnRjX3JlcShyZXEsIG91dHB1dCwKPiBJR1Rf Q1JUQ19CQUNLR1JPVU5ELCBwaXBlX29iai0+YmFja2dyb3VuZCk7Cj4gwqAKPiBAQCAtMjEyNSw2 ICsyMTEzLDggQEAgc3RhdGljIGludCBpZ3RfYXRvbWljX2NvbW1pdChpZ3RfZGlzcGxheV90ICpk aXNwbGF5KQo+IMKgCj4gwqAKPiDCoAkJcGlwZV9vYmogPSBpZ3Rfb3V0cHV0X2dldF9kcml2aW5n X3BpcGUob3V0cHV0KTsKPiArCQlpZiAoIXBpcGVfb2JqKQo+ICsJCQljb250aW51ZTsKPiDCoAo+ IMKgCQlwaXBlID0gcGlwZV9vYmotPnBpcGU7Cj4gwqAKPiBAQCAtMjE2NywxNCArMjE1NywxNCBA QCBzdGF0aWMgaW50IGRvX2Rpc3BsYXlfY29tbWl0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksCj4g wqAKPiDCoAl9Cj4gwqAKPiAtCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5uX291dHB1dHM7IGkr Kykgewo+IC0JCWlndF9vdXRwdXRfdCAqb3V0cHV0ID0gJmRpc3BsYXktPm91dHB1dHNbaV07Cj4g Kwlmb3JfZWFjaF9waXBlKGRpc3BsYXksIGkpIHsKPiArCQlpZ3RfcGlwZV90ICpwaXBlX29iaiA9 ICZkaXNwbGF5LT5waXBlc1tpXTsKPiArCQlpZ3Rfb3V0cHV0X3QgKm91dHB1dCA9IGlndF9waXBl X2dldF9vdXRwdXQocGlwZV9vYmopOwo+IMKgCj4gLQkJaWYgKCFvdXRwdXQtPnZhbGlkKQo+IC0J CQljb250aW51ZTsKPiArCQlpZiAob3V0cHV0ICYmIG91dHB1dC0+dmFsaWQpCj4gKwkJCXZhbGlk X291dHMrKzsKPiDCoAo+IC0JCXZhbGlkX291dHMrKzsKPiAtCQlyZXQgPSBpZ3Rfb3V0cHV0X2Nv bW1pdChvdXRwdXQsIHMsIGZhaWxfb25fZXJyb3IpOwo+ICsJCXJldCA9IGlndF9waXBlX2NvbW1p dChwaXBlX29iaiwgcywgZmFpbF9vbl9lcnJvcik7Cj4gwqAJCUNIRUNLX1JFVFVSTihyZXQsIGZh aWxfb25fZXJyb3IpOwo+IMKgCX0KPiDCoAo+IEBAIC0yMjgyLDkgKzIyNzIsOSBAQCB2b2lkIGln dF9vdXRwdXRfc2V0X3BpcGUoaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0gcGlwZQo+IHBpcGUp Cj4gwqB7Cj4gwqAJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9IG91dHB1dC0+ZGlzcGxheTsKPiDC oAo+IC0JaWYgKHBpcGUgPT0gUElQRV9BTlkpIHsKPiArCWlmIChwaXBlID09IFBJUEVfTk9ORSkg ewo+IMKgCQlMT0coZGlzcGxheSwgIiVzOiBzZXRfcGlwZShhbnkpXG4iLCBpZ3Rfb3V0cHV0X25h bWUob3V0cHV0KSk7Cj4gLQkJb3V0cHV0LT5wZW5kaW5nX2NydGNfaWR4X21hc2sgPSAtMVVMOwo+ ICsJCW91dHB1dC0+cGVuZGluZ19jcnRjX2lkeF9tYXNrID0gMDsKPiDCoAl9IGVsc2Ugewo+IMKg CQlMT0coZGlzcGxheSwgIiVzOiBzZXRfcGlwZSglcylcbiIsIGlndF9vdXRwdXRfbmFtZShvdXRw dXQpLAo+IMKgCQnCoMKgwqDCoGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKTsKPiBAQCAtMjI5Nyw2 ICsyMjg3LDggQEAgaWd0X3BsYW5lX3QgKmlndF9vdXRwdXRfZ2V0X3BsYW5lKGlndF9vdXRwdXRf dCAqb3V0cHV0LAo+IGVudW0gaWd0X3BsYW5lIHBsYW5lKQo+IMKgCWlndF9waXBlX3QgKnBpcGU7 Cj4gwqAKPiDCoAlwaXBlID0gaWd0X291dHB1dF9nZXRfZHJpdmluZ19waXBlKG91dHB1dCk7Cj4g KwlpZ3RfYXNzZXJ0KHBpcGUpOwo+ICsKPiDCoAlyZXR1cm4gaWd0X3BpcGVfZ2V0X3BsYW5lKHBp cGUsIHBsYW5lKTsKPiDCoH0KPiDCoAo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2ttcy5oIGIvbGli L2lndF9rbXMuaAo+IGluZGV4IGRjNmJlNWU1M2I3NC4uMzUzMWRjMjBiNmUwIDEwMDY0NAo+IC0t LSBhL2xpYi9pZ3Rfa21zLmgKPiArKysgYi9saWIvaWd0X2ttcy5oCj4gQEAgLTMzNCwxNyArMzM0 LDMxIEBAIHZvaWQgaWd0X2ZiX3NldF9zaXplKHN0cnVjdCBpZ3RfZmIgKmZiLCBpZ3RfcGxhbmVf dAo+ICpwbGFuZSwKPiDCoAo+IMKgdm9pZCBpZ3Rfd2FpdF9mb3JfdmJsYW5rKGludCBkcm1fZmQs IGVudW0gcGlwZSBwaXBlKTsKPiDCoAo+ICtzdGF0aWMgaW5saW5lIGJvb2wgaWd0X291dHB1dF9p c19jb25uZWN0ZWQoaWd0X291dHB1dF90ICpvdXRwdXQpCj4gK3sKPiArCS8qIFNvbWV0aGluZyB3 ZW50IHdyb25nIGR1cmluZyBwcm9iZT8gKi8KPiArCWlmICghb3V0cHV0LT5jb25maWcuY29ubmVj dG9yKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAob3V0cHV0LT5jb25maWcuY29ubmVj dG9yLT5jb25uZWN0aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCkKPiArCQlyZXR1cm4gdHJ1ZTsK PiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gwqBzdGF0aWMgaW5saW5lIGJvb2wgaWd0 X3BpcGVfY29ubmVjdG9yX3ZhbGlkKGVudW0gcGlwZSBwaXBlLAo+IMKgCQkJCQnCoMKgwqDCoGln dF9vdXRwdXRfdCAqb3V0cHV0KQo+IMKgewo+IC0JcmV0dXJuIG91dHB1dC0+dmFsaWQgJiYgKG91 dHB1dC0+Y29uZmlnLnZhbGlkX2NydGNfaWR4X21hc2sgJiAoMSA8PAo+IHBpcGUpKTsKPiArCXJl dHVybiBpZ3Rfb3V0cHV0X2lzX2Nvbm5lY3RlZChvdXRwdXQpICYmCj4gKwnCoMKgwqDCoMKgwqDC oChvdXRwdXQtPmNvbmZpZy52YWxpZF9jcnRjX2lkeF9tYXNrICYgKDEgPDwgcGlwZSkpOwo+IMKg fQo+IMKgCj4gwqAjZGVmaW5lIGZvcl9lYWNoX2lmKGNvbmRpdGlvbikgaWYgKCEoY29uZGl0aW9u KSkge30gZWxzZQo+IMKgCj4gwqAjZGVmaW5lIGZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoZGlz cGxheSwgb3V0cHV0KQkJXAo+IMKgCWZvciAoaW50IGlfXyA9IDA7wqDCoGlfXyA8IChkaXNwbGF5 KS0+bl9vdXRwdXRzOyBpX18rKykJXAo+IC0JCWZvcl9lYWNoX2lmICgoKG91dHB1dCA9ICYoZGlz cGxheSktPm91dHB1dHNbaV9fXSksIG91dHB1dC0KPiA+dmFsaWQpKQo+ICsJCWZvcl9lYWNoX2lm ICgoKG91dHB1dCA9ICYoZGlzcGxheSktPm91dHB1dHNbaV9fXSksIFwKPiArCQkJwqDCoMKgwqDC oMKgaWd0X291dHB1dF9pc19jb25uZWN0ZWQob3V0cHV0KSkpCj4gwqAKPiDCoCNkZWZpbmUgZm9y X2VhY2hfcGlwZShkaXNwbGF5LCBwaXBlKQkJCQkJXAo+IMKgCWZvciAocGlwZSA9IDA7IHBpcGUg PCBpZ3RfZGlzcGxheV9nZXRfbl9waXBlcyhkaXNwbGF5KTsgcGlwZSsrKQkKPiBcCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=