From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5EE9A6E052 for ; Mon, 29 Jan 2018 08:44:28 +0000 (UTC) Message-ID: <1517215464.2602.13.camel@intel.com> From: Mika Kahola Date: Mon, 29 Jan 2018 10:44:24 +0200 In-Reply-To: <20180124105342.45025-1-maarten.lankhorst@linux.intel.com> References: <20180123145028.72938-1-maarten.lankhorst@linux.intel.com> <20180124105342.45025-1-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t] lib/fb: Add support for creating planar framebuffers, v3. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: mika.kahola@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Maarten Lankhorst , igt-dev@lists.freedesktop.org List-ID: T24gV2VkLCAyMDE4LTAxLTI0IGF0IDExOjUzICswMTAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBBZGQgc3VwcG9ydCB0byBjcmVhdGUgcGxhbmFyIGZyYW1lYnVmZmVycywgYnV0IGRvbid0 IGFkZCBmb3JtYXRzCj4gdGhhdCBzdXBwb3J0IHRoZW0geWV0LiBUaGlzIGZpcnN0IHJlcXVpcmVz IGNvbnZlcnNpb24gdG8gdGhlIFJHQjI0Cj4gZm9ybWF0Lgo+IAo+IENoYW5nZXMgc2luY2UgdjE6 Cj4gLSBEb24ndCBjcmFzaCBpbiBpZ3RfY3JlYXRlX2JvX3dpdGhfZGltZW5zaW9ucygpLgo+IENo YW5nZXMgc2luY2UgdjI6Cj4gLSBaZXJvIG9mZnNldHMgZm9yIGR1bWIgZmIgdG9vLgo+IAoKUmV2 aWV3ZWQtYnk6IE1pa2EgS2Fob2xhIDxtaWthLmthaG9sYUBpbnRlbC5jb20+Cgo+IFNpZ25lZC1v ZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5j b20+Cj4gLS0tCj4gwqBsaWIvaWd0X2ZiLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgNzYg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KPiAtLS0tLS0tLS0tCj4gwqBs aWIvaWd0X2ZiLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgMTAgKysrKysrKwo+IMKgbGli L2lvY3RsX3dyYXBwZXJzLmPCoMKgwqDCoMKgfCAxMSArKysrKy0tCj4gwqBsaWIvaW9jdGxfd3Jh cHBlcnMuaMKgwqDCoMKgwqB8wqDCoDIgKy0KPiDCoHRlc3RzL2ttc19kcmF3X2NyYy5jwqDCoMKg wqDCoHzCoMKgMiArLQo+IMKgdGVzdHMva21zX3JvdGF0aW9uX2NyYy5jIHzCoMKgNSArKy0tCj4g wqB0ZXN0cy9wcmltZV92Z2VtLmPCoMKgwqDCoMKgwqDCoHzCoMKgMiArLQo+IMKgNyBmaWxlcyBj aGFuZ2VkLCA4MSBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvbGliL2lndF9mYi5jIGIvbGliL2lndF9mYi5jCj4gaW5kZXggMTI1MWY0NjJkMjRlLi45ZDYw MjgwZjE5OGUgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9mYi5jCj4gKysrIGIvbGliL2lndF9mYi5j Cj4gQEAgLTE1OCwxNCArMTU4LDE5IEBAIHZvaWQgaWd0X2dldF9mYl90aWxlX3NpemUoaW50IGZk LCB1aW50NjRfdAo+IHRpbGluZywgaW50IGZiX2JwcCwKPiDCoAl9Cj4gwqB9Cj4gwqAKPiArc3Rh dGljIHVuc2lnbmVkIHBsYW5hcl93aWR0aChzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0ICpmb3Jt YXQsCj4gdW5zaWduZWQgd2lkdGgsIGludCBwbGFuZSkKPiArewo+ICsJaWYgKGZvcm1hdC0+ZHJt X2lkID09IERSTV9GT1JNQVRfTlYxMiAmJiBwbGFuZSA9PSAxKQo+ICsJCXJldHVybiAod2lkdGgg KyAxKSAvIDI7Cj4gKwo+ICsJcmV0dXJuIHdpZHRoOwo+ICt9Cj4gKwo+IMKgc3RhdGljIHVuc2ln bmVkIHBsYW5hcl9zdHJpZGUoc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAqZm9ybWF0LAo+IHVu c2lnbmVkIHdpZHRoLCBpbnQgcGxhbmUpCj4gwqB7Cj4gwqAJdW5zaWduZWQgY3BwID0gZm9ybWF0 LT5wbGFuZV9icHBbcGxhbmVdIC8gODsKPiDCoAo+IC0JaWYgKGZvcm1hdC0+ZHJtX2lkID09IERS TV9GT1JNQVRfTlYxMiAmJiBwbGFuZSA9PSAxKQo+IC0JCXJldHVybiAod2lkdGggKyAxKSAvIDIg KiBjcHA7Cj4gLQo+IC0JcmV0dXJuIHdpZHRoICogY3BwOwo+ICsJcmV0dXJuIHBsYW5hcl93aWR0 aChmb3JtYXQsIHdpZHRoLCBwbGFuZSkgKiBjcHA7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyB1bnNp Z25lZCBwbGFuYXJfaGVpZ2h0KHN0cnVjdCBmb3JtYXRfZGVzY19zdHJ1Y3QgKmZvcm1hdCwKPiB1 bnNpZ25lZCBoZWlnaHQsIGludCBwbGFuZSkKPiBAQCAtMzMxLDE3ICszMzYsMjUgQEAgc3RhdGlj IGludCBjcmVhdGVfYm9fZm9yX2ZiKGludCBmZCwgaW50IHdpZHRoLAo+IGludCBoZWlnaHQsCj4g wqAJCQnCoMKgwqDCoHN0cnVjdCBmb3JtYXRfZGVzY19zdHJ1Y3QgKmZvcm1hdCwKPiDCoAkJCcKg wqDCoMKgdWludDY0X3QgdGlsaW5nLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZAo+IHN0cmlkZSwK PiDCoAkJCcKgwqDCoMKgdW5zaWduZWQgKnNpemVfcmV0LCB1bnNpZ25lZAo+ICpzdHJpZGVfcmV0 LAo+IC0JCQnCoMKgwqDCoGJvb2wgKmlzX2R1bWIpCj4gKwkJCcKgwqDCoMKgdWludDMyX3QgKm9m ZnNldHMsIGJvb2wgKmlzX2R1bWIpCj4gwqB7Cj4gwqAJaW50IGJvOwo+IMKgCj4gwqAJaWd0X2Fz c2VydChmb3JtYXQpOwo+IMKgCj4gKwlpZiAob2Zmc2V0cykKPiArCQltZW1zZXQob2Zmc2V0cywg MCwgNCAqIHNpemVvZigqb2Zmc2V0cykpOwo+ICsKPiDCoAlpZiAodGlsaW5nIHx8IHNpemUgfHwg c3RyaWRlIHx8IGZvcm1hdC0+cGxhbmVzID4gMSkgewo+IMKgCQl1bnNpZ25lZCBjYWxjdWxhdGVk X3NpemUsIGNhbGN1bGF0ZWRfc3RyaWRlOwo+IMKgCj4gLQkJaWd0X2NhbGNfZmJfc2l6ZShmZCwg d2lkdGgsIGhlaWdodCwgZm9ybWF0LT5kcm1faWQsCj4gdGlsaW5nLAo+IC0JCQkJwqAmY2FsY3Vs YXRlZF9zaXplLAo+ICZjYWxjdWxhdGVkX3N0cmlkZSk7Cj4gKwkJaWYgKGZvcm1hdC0+cGxhbmVz ID4gMSkKPiArCQkJY2FsY19mYl9zaXplX3BsYW5hcihmZCwgd2lkdGgsIGhlaWdodCwKPiBmb3Jt YXQsIHRpbGluZywKPiArCQkJCQnCoMKgwqDCoCZjYWxjdWxhdGVkX3NpemUsCj4gJmNhbGN1bGF0 ZWRfc3RyaWRlLCBvZmZzZXRzKTsKPiArCQllbHNlCj4gKwkJCWNhbGNfZmJfc2l6ZV9wYWNrZWQo ZmQsIHdpZHRoLCBoZWlnaHQsCj4gZm9ybWF0LCB0aWxpbmcsCj4gKwkJCQkJwqDCoMKgwqAmY2Fs Y3VsYXRlZF9zaXplLAo+ICZjYWxjdWxhdGVkX3N0cmlkZSk7Cj4gKwo+IMKgCQlpZiAoc3RyaWRl ID09IDApCj4gwqAJCQlzdHJpZGUgPSBjYWxjdWxhdGVkX3N0cmlkZTsKPiDCoAkJaWYgKHNpemUg PT0gMCkKPiBAQCAtNDA3LDcgKzQyMCw3IEBAIGludCBpZ3RfY3JlYXRlX2JvX3dpdGhfZGltZW5z aW9ucyhpbnQgZmQsIGludAo+IHdpZHRoLCBpbnQgaGVpZ2h0LAo+IMKgCQkJCcKgwqB1bnNpZ25l ZCAqc3RyaWRlX3JldCwgYm9vbAo+ICppc19kdW1iKQo+IMKgewo+IMKgCXJldHVybiBjcmVhdGVf Ym9fZm9yX2ZiKGZkLCB3aWR0aCwgaGVpZ2h0LAo+IGxvb2t1cF9kcm1fZm9ybWF0KGZvcm1hdCks Cj4gLQkJCQltb2RpZmllciwgMCwgc3RyaWRlLCBzaXplX3JldCwKPiBzdHJpZGVfcmV0LCBpc19k dW1iKTsKPiArCQkJCW1vZGlmaWVyLCAwLCBzdHJpZGUsIHNpemVfcmV0LAo+IHN0cmlkZV9yZXQs IE5VTEwsIGlzX2R1bWIpOwo+IMKgfQo+IMKgCj4gwqAvKioKPiBAQCAtNzQ4LDE2ICs3NjEsMjAg QEAgaWd0X2NyZWF0ZV9mYl93aXRoX2JvX3NpemUoaW50IGZkLCBpbnQgd2lkdGgsCj4gaW50IGhl aWdodCwKPiDCoAkJCcKgwqDCoHN0cnVjdCBpZ3RfZmIgKmZiLCB1bnNpZ25lZCBib19zaXplLAo+ IMKgCQkJwqDCoMKgdW5zaWduZWQgYm9fc3RyaWRlKQo+IMKgewo+ICsJc3RydWN0IGZvcm1hdF9k ZXNjX3N0cnVjdCAqZiA9IGxvb2t1cF9kcm1fZm9ybWF0KGZvcm1hdCk7Cj4gwqAJdWludDMyX3Qg ZmJfaWQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2YoZiwgIkRSTSBmb3JtYXQgJTA4 eCBub3QgZm91bmRcbiIsIGZvcm1hdCk7Cj4gwqAKPiDCoAltZW1zZXQoZmIsIDAsIHNpemVvZigq ZmIpKTsKPiDCoAo+IMKgCWlndF9kZWJ1ZygiJXMod2lkdGg9JWQsIGhlaWdodD0lZCwgZm9ybWF0 PTB4JXgsCj4gdGlsaW5nPTB4JSJQUkl4NjQiLCBzaXplPSVkKVxuIiwKPiDCoAkJwqDCoF9fZnVu Y19fLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHRpbGluZywgYm9fc2l6ZSk7Cj4gLQlmYi0+Z2Vt X2hhbmRsZSA9IGNyZWF0ZV9ib19mb3JfZmIoZmQsIHdpZHRoLCBoZWlnaHQsCj4gLQkJCQkJwqDC oGxvb2t1cF9kcm1fZm9ybWF0KGZvcm1hdCksCj4gKwlmYi0+Z2VtX2hhbmRsZSA9IGNyZWF0ZV9i b19mb3JfZmIoZmQsIHdpZHRoLCBoZWlnaHQsIGYsCj4gwqAJCQkJCcKgwqB0aWxpbmcsIGJvX3Np emUsCj4gYm9fc3RyaWRlLAo+IC0JCQkJCcKgwqAmZmItPnNpemUsICZmYi0+c3RyaWRlLAo+ICZm Yi0+aXNfZHVtYik7Cj4gKwkJCQkJwqDCoCZmYi0+c2l6ZSwgJmZiLT5zdHJpZGUsCj4gKwkJCQkJ wqDCoGZiLT5vZmZzZXRzLCAmZmItCj4gPmlzX2R1bWIpOwo+IMKgCWlndF9hc3NlcnQoZmItPmdl bV9oYW5kbGUgPiAwKTsKPiDCoAo+IMKgCWlndF9kZWJ1ZygiJXMoaGFuZGxlPSVkLCBwaXRjaD0l ZClcbiIsCj4gQEAgLTc2NiwyMiArNzgzLDI0IEBAIGlndF9jcmVhdGVfZmJfd2l0aF9ib19zaXpl KGludCBmZCwgaW50IHdpZHRoLAo+IGludCBoZWlnaHQsCj4gwqAJaWYgKHRpbGluZyAhPSBMT0NB TF9EUk1fRk9STUFUX01PRF9OT05FICYmCj4gwqAJwqDCoMKgwqB0aWxpbmcgIT0gTE9DQUxfSTkx NV9GT1JNQVRfTU9EX1hfVElMRUQpIHsKPiDCoAkJZG9fb3JfZGllKF9fa21zX2FkZGZiKGZkLCBm Yi0+Z2VtX2hhbmRsZSwgd2lkdGgsCj4gaGVpZ2h0LAo+IC0JCQkJwqDCoMKgwqDCoMKgZmItPnN0 cmlkZSwgZm9ybWF0LCB0aWxpbmcsCj4gKwkJCQnCoMKgwqDCoMKgwqBmYi0+c3RyaWRlLCBmb3Jt YXQsIHRpbGluZywKPiBmYi0+b2Zmc2V0cywKPiDCoAkJCQnCoMKgwqDCoMKgwqBMT0NBTF9EUk1f TU9ERV9GQl9NT0RJRklFUlMsCj4gJmZiX2lkKSk7Cj4gwqAJfSBlbHNlIHsKPiDCoAkJdWludDMy X3QgaGFuZGxlc1s0XTsKPiDCoAkJdWludDMyX3QgcGl0Y2hlc1s0XTsKPiAtCQl1aW50MzJfdCBv ZmZzZXRzWzRdOwo+IMKgCj4gwqAJCW1lbXNldChoYW5kbGVzLCAwLCBzaXplb2YoaGFuZGxlcykp Owo+IMKgCQltZW1zZXQocGl0Y2hlcywgMCwgc2l6ZW9mKHBpdGNoZXMpKTsKPiAtCQltZW1zZXQo b2Zmc2V0cywgMCwgc2l6ZW9mKG9mZnNldHMpKTsKPiDCoAo+IMKgCQloYW5kbGVzWzBdID0gZmIt PmdlbV9oYW5kbGU7Cj4gwqAJCXBpdGNoZXNbMF0gPSBmYi0+c3RyaWRlOwo+ICsJCWZvciAoaSA9 IDA7IGkgPCBmLT5wbGFuZXM7IGkrKykgewo+ICsJCQloYW5kbGVzW2ldID0gZmItPmdlbV9oYW5k bGU7Cj4gKwkJCXBpdGNoZXNbaV0gPSBmYi0+c3RyaWRlOwo+ICsJCX0KPiDCoAo+IMKgCQlkb19v cl9kaWUoZHJtTW9kZUFkZEZCMihmZCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LAo+IC0JCQkJCWhh bmRsZXMsIHBpdGNoZXMsIG9mZnNldHMsCj4gKwkJCQkJaGFuZGxlcywgcGl0Y2hlcywgZmItCj4g Pm9mZnNldHMsCj4gwqAJCQkJCSZmYl9pZCwgMCkpOwo+IMKgCX0KPiDCoAo+IEBAIC03OTEsNiAr ODEwLDE3IEBAIGlndF9jcmVhdGVfZmJfd2l0aF9ib19zaXplKGludCBmZCwgaW50IHdpZHRoLAo+ IGludCBoZWlnaHQsCj4gwqAJZmItPmRybV9mb3JtYXQgPSBmb3JtYXQ7Cj4gwqAJZmItPmZiX2lk ID0gZmJfaWQ7Cj4gwqAJZmItPmZkID0gZmQ7Cj4gKwlmYi0+bnVtX3BsYW5lcyA9IGYtPnBsYW5l cyA/OiAxOwo+ICsJZmItPnBsYW5lX2JwcFswXSA9IGYtPmJwcDsKPiArCWZiLT5wbGFuZV9oZWln aHRbMF0gPSBoZWlnaHQ7Cj4gKwlmYi0+cGxhbmVfd2lkdGhbMF0gPSB3aWR0aDsKPiArCj4gKwkv KiBpZiBmLT5wbGFuZXMgaXMgc2V0LCB0aGVuIHBsYW5lX2JwcCBpcyB2YWxpZCB0b28gc28gdXNl Cj4gdGhhdC4gKi8KPiArCWZvciAoaSA9IDA7IGkgPCBmLT5wbGFuZXM7IGkrKykgewo+ICsJCWZi LT5wbGFuZV9icHBbaV0gPSBmLT5wbGFuZV9icHBbaV07Cj4gKwkJZmItPnBsYW5lX2hlaWdodFtp XSA9IHBsYW5hcl9oZWlnaHQoZiwgaGVpZ2h0LCBpKTsKPiArCQlmYi0+cGxhbmVfd2lkdGhbaV0g PSBwbGFuYXJfd2lkdGgoZiwgd2lkdGgsIGkpOwo+ICsJfQo+IMKgCj4gwqAJcmV0dXJuIGZiX2lk Owo+IMKgfQo+IEBAIC0xMTI3LDcgKzExNTcsOCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2NhaXJv X3N1cmZhY2VfX2JsaXQodm9pZAo+ICphcmcpCj4gwqAJCQkJwqDCoMKgMCwgMCwgLyogc3JjX3gs IHNyY195ICovCj4gwqAJCQkJwqDCoMKgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAo+IMKgCQkJCcKg wqDCoGlndF9kcm1fZm9ybWF0X3RvX2JwcChmYi0KPiA+ZHJtX2Zvcm1hdCksCj4gLQkJCQnCoMKg wqBmYi0+Z2VtX2hhbmRsZSwgMCwKPiArCQkJCcKgwqDCoGZiLT5nZW1faGFuZGxlLAo+ICsJCQkJ wqDCoMKgZmItPm9mZnNldHNbMF0sCj4gwqAJCQkJwqDCoMKgZmItPnN0cmlkZSwKPiDCoAkJCQnC oMKgwqBvYmpfdGlsaW5nLAo+IMKgCQkJCcKgwqDCoDAsIDAgLyogZHN0X3gsIGRzdF95ICovKTsK PiBAQCAtMTE0Myw2ICsxMTc0LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2Vf X2JsaXQoaW50IGZkLAo+IHN0cnVjdCBpZ3RfZmIgKmZiKQo+IMKgCXN0cnVjdCBmYl9ibGl0X3Vw bG9hZCAqYmxpdDsKPiDCoAljYWlyb19mb3JtYXRfdCBjYWlyb19mb3JtYXQ7Cj4gwqAJdW5zaWdu ZWQgaW50IG9ial90aWxpbmcgPSBpZ3RfZmJfbW9kX3RvX3RpbGluZyhmYi0+dGlsaW5nKTsKPiAr CXVpbnQzMl90IG9mZnNldHNbNF07Cj4gwqAKPiDCoAlibGl0ID0gbWFsbG9jKHNpemVvZigqYmxp dCkpOwo+IMKgCWlndF9hc3NlcnQoYmxpdCk7Cj4gQEAgLTExNTcsNyArMTE4OSw3IEBAIHN0YXRp YyB2b2lkIGNyZWF0ZV9jYWlyb19zdXJmYWNlX19ibGl0KGludCBmZCwKPiBzdHJ1Y3QgaWd0X2Zi ICpmYikKPiDCoAkJCQkJwqDCoMKgwqDCoMKgwqBMT0NBTF9EUk1fRk9STUFUX01PRF8KPiBOT05F LCAwLAo+IMKgCQkJCQnCoMKgwqDCoMKgwqDCoDAsICZibGl0LQo+ID5saW5lYXIuc2l6ZSwKPiDC oAkJCQkJwqDCoMKgwqDCoMKgwqAmYmxpdC0+bGluZWFyLnN0cmlkZSwKPiAtCQkJCQnCoMKgwqDC oMKgwqDCoCZibGl0LQo+ID5saW5lYXIuaXNfZHVtYik7Cj4gKwkJCQkJwqDCoMKgwqDCoMKgwqBv ZmZzZXRzLCAmYmxpdC0KPiA+bGluZWFyLmlzX2R1bWIpOwo+IMKgCj4gwqAJaWd0X2Fzc2VydChi bGl0LT5saW5lYXIuaGFuZGxlID4gMCk7Cj4gwqAKPiBAQCAtMTE2OSw3ICsxMjAxLDggQEAgc3Rh dGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2JsaXQoaW50IGZkLAo+IHN0cnVjdCBpZ3Rf ZmIgKmZiKQo+IMKgCQkJSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7Cj4gwqAKPiDCoAlpZ3RfYmxp dHRlcl9mYXN0X2NvcHlfX3JhdyhmZCwKPiAtCQkJCcKgwqDCoGZiLT5nZW1faGFuZGxlLCAwLAo+ ICsJCQkJwqDCoMKgZmItPmdlbV9oYW5kbGUsCj4gKwkJCQnCoMKgwqBmYi0+b2Zmc2V0c1swXSwK PiDCoAkJCQnCoMKgwqBmYi0+c3RyaWRlLAo+IMKgCQkJCcKgwqDCoG9ial90aWxpbmcsCj4gwqAJ CQkJwqDCoMKgMCwgMCwgLyogc3JjX3gsIHNyY195ICovCj4gQEAgLTEyNTcsMTQgKzEyOTAsMTcg QEAgc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2d0dChpbnQgZmQsCj4gc3RydWN0 IGlndF9mYiAqZmIpCj4gwqAgKiBAZmQ6IG9wZW4gZHJtIGZpbGUgZGVzY3JpcHRvcgo+IMKgICog QGZiOiBwb2ludGVyIHRvIGFuICNpZ3RfZmIgc3RydWN0dXJlCj4gwqAgKgo+IC0gKiBUaGlzIGZ1 bmN0aW9uIHN0b3JlcyB0aGUgY29udGVudHMgb2YgdGhlIHN1cHBsaWVkIGZyYW1lYnVmZmVyCj4g aW50byBhIGNhaXJvCj4gLSAqIHN1cmZhY2UgYW5kIHJldHVybnMgaXQuCj4gKyAqIFRoaXMgZnVu Y3Rpb24gc3RvcmVzIHRoZSBjb250ZW50cyBvZiB0aGUgc3VwcGxpZWQgZnJhbWVidWZmZXIncwo+ IHBsYW5lCj4gKyAqIGludG8gYSBjYWlybyBzdXJmYWNlIGFuZCByZXR1cm5zIGl0Lgo+IMKgICoK PiDCoCAqIFJldHVybnM6Cj4gwqAgKiBBIHBvaW50ZXIgdG8gYSBjYWlybyBzdXJmYWNlIHdpdGgg dGhlIGNvbnRlbnRzIG9mIHRoZQo+IGZyYW1lYnVmZmVyLgo+IMKgICovCj4gwqBjYWlyb19zdXJm YWNlX3QgKmlndF9nZXRfY2Fpcm9fc3VyZmFjZShpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQo+ IMKgewo+ICsJLyogVGhpcyBkb2Vzbid0IHdvcmsgZm9yIHBsYW5hciBmb3JtYXRzIGZvciBub3cs IGJ1dCB3ZSB3aWxsCj4gY29udmVydCB0aGVtIHRvIFJHQjI0IGluIHRoZSBmdXR1cmUuICovCj4g KwlpZ3RfYXNzZXJ0KGZiLT5udW1fcGxhbmVzIDwgMik7Cj4gKwo+IMKgCWlmIChmYi0+Y2Fpcm9f c3VyZmFjZSA9PSBOVUxMKSB7Cj4gwqAJCWlmIChmYi0+dGlsaW5nID09IExPQ0FMX0k5MTVfRk9S TUFUX01PRF9ZX1RJTEVEIHx8Cj4gwqAJCcKgwqDCoMKgZmItPnRpbGluZyA9PSBMT0NBTF9JOTE1 X0ZPUk1BVF9NT0RfWWZfVElMRUQpCj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZmIuaCBiL2xpYi9p Z3RfZmIuaAo+IGluZGV4IDE1Mjc5OGU5ODk2Yi4uNzdmZDg4YmI3YWNhIDEwMDY0NAo+IC0tLSBh L2xpYi9pZ3RfZmIuaAo+ICsrKyBiL2xpYi9pZ3RfZmIuaAo+IEBAIC01MCw2ICs1MCwxMSBAQAo+ IMKgICogQHNpemU6IHNpemUgaW4gYnl0ZXMgb2YgdGhlIHVuZGVybHlpbmcgYmFja2luZyBzdG9y YWdlCj4gwqAgKiBAY2Fpcm9fc3VyZmFjZTogb3B0aW9uYWxseSBhdHRhY2hlZCBjYWlybyBkcmF3 aW5nIHN1cmZhY2UKPiDCoCAqIEBkb21haW46IGN1cnJlbnQgZG9tYWluIGZvciBjYWNoZSBmbHVz aGluZyB0cmFja2luZyBvbiBpOTE1LmtvCj4gKyAqIEBudW1fcGxhbmVzOiBBbW91bnQgb2YgcGxh bmVzIG9uIHRoaXMgZmIuID4xIGZvciBwbGFuYXIgZm9ybWF0cy4KPiArICogQG9mZnNldHM6IE9m ZnNldCBmb3IgZWFjaCBwbGFuZSBpbiBieXRlcy4KPiArICogQHBsYW5lX2JwcDogVGhlIGJwcCBm b3IgZWFjaCBwbGFuZS4KPiArICogQHBsYW5lX3dpZHRoOiBUaGUgd2lkdGggZm9yIGVhY2ggcGxh bmUuCj4gKyAqIEBwbGFuZV9oZWlnaHQ6IFRoZSBoZWlnaHQgZm9yIGVhY2ggcGxhbmUuCj4gwqAg Kgo+IMKgICogVHJhY2tpbmcgc3RydWN0dXJlIGZvciBLTVMgZnJhbWVidWZmZXIgb2JqZWN0cy4K PiDCoCAqLwo+IEBAIC02Niw2ICs3MSwxMSBAQCB0eXBlZGVmIHN0cnVjdCBpZ3RfZmIgewo+IMKg CXVuc2lnbmVkIGludCBzaXplOwo+IMKgCWNhaXJvX3N1cmZhY2VfdCAqY2Fpcm9fc3VyZmFjZTsK PiDCoAl1bnNpZ25lZCBpbnQgZG9tYWluOwo+ICsJdW5zaWduZWQgaW50IG51bV9wbGFuZXM7Cj4g Kwl1aW50MzJfdCBvZmZzZXRzWzRdOwo+ICsJdW5zaWduZWQgaW50IHBsYW5lX2JwcFs0XTsKPiAr CXVuc2lnbmVkIGludCBwbGFuZV93aWR0aFs0XTsKPiArCXVuc2lnbmVkIGludCBwbGFuZV9oZWln aHRbNF07Cj4gwqB9IGlndF9mYl90Owo+IMKgCj4gwqAvKioKPiBkaWZmIC0tZ2l0IGEvbGliL2lv Y3RsX3dyYXBwZXJzLmMgYi9saWIvaW9jdGxfd3JhcHBlcnMuYwo+IGluZGV4IDM5ZTg0NjllMzk4 NS4uMTBkOTU4NzI2ZGE3IDEwMDY0NAo+IC0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5jCj4gKysr IGIvbGliL2lvY3RsX3dyYXBwZXJzLmMKPiBAQCAtMTY1OSwxMCArMTY1OSwxMCBAQCB2b2lkIGln dF9yZXF1aXJlX2ZiX21vZGlmaWVycyhpbnQgZmQpCj4gwqAKPiDCoGludCBfX2ttc19hZGRmYihp bnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90Cj4gaGVpZ2h0 LAo+IMKgCQl1aW50MzJfdCBzdHJpZGUsIHVpbnQzMl90IHBpeGVsX2Zvcm1hdCwgdWludDY0X3QK PiBtb2RpZmllciwKPiAtCQl1aW50MzJfdCBmbGFncywgdWludDMyX3QgKmJ1Zl9pZCkKPiArCQl1 aW50MzJfdCAqb2Zmc2V0cywgdWludDMyX3QgZmxhZ3MsIHVpbnQzMl90ICpidWZfaWQpCj4gwqB7 Cj4gwqAJc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgZjsKPiAtCWludCByZXQ7Cj4gKwlpbnQgcmV0 LCBpOwo+IMKgCj4gwqAJaWd0X3JlcXVpcmVfZmJfbW9kaWZpZXJzKGZkKTsKPiDCoAo+IEBAIC0x Njc2LDYgKzE2NzYsMTMgQEAgaW50IF9fa21zX2FkZGZiKGludCBmZCwgdWludDMyX3QgaGFuZGxl LAo+IHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCj4gwqAJZi5waXRjaGVzWzBdID0g c3RyaWRlOwo+IMKgCWYubW9kaWZpZXJbMF0gPSBtb2RpZmllcjsKPiDCoAo+ICsJZm9yIChpID0g MTsgaSA8IDQgJiYgb2Zmc2V0cyAmJiBvZmZzZXRzW2ldOyBpKyspIHsKPiArCQlmLmhhbmRsZXNb aV0gPSBoYW5kbGU7Cj4gKwkJZi5waXRjaGVzW2ldID0gc3RyaWRlOwo+ICsJCWYubW9kaWZpZXJb aV0gPSBtb2RpZmllcjsKPiArCQlmLm9mZnNldHNbaV0gPSBvZmZzZXRzW2ldOwo+ICsJfQo+ICsK PiDCoAlyZXQgPSBpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9NT0RFX0FEREZCMiwgJmYpOwo+IMKg Cj4gwqAJKmJ1Zl9pZCA9IGYuZmJfaWQ7Cj4gZGlmZiAtLWdpdCBhL2xpYi9pb2N0bF93cmFwcGVy cy5oIGIvbGliL2lvY3RsX3dyYXBwZXJzLmgKPiBpbmRleCBmNzc1MmFlYWIyYzQuLjEzZmJlM2Mx MDNjMCAxMDA2NDQKPiAtLS0gYS9saWIvaW9jdGxfd3JhcHBlcnMuaAo+ICsrKyBiL2xpYi9pb2N0 bF93cmFwcGVycy5oCj4gQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIGlndF9yZXF1aXJlX2ZiX21v ZGlmaWVycyhpbnQgZmQpOwo+IMKgICovCj4gwqBpbnQgX19rbXNfYWRkZmIoaW50IGZkLCB1aW50 MzJfdCBoYW5kbGUsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdAo+IGhlaWdodCwKPiDCoAkJdWlu dDMyX3Qgc3RyaWRlLCB1aW50MzJfdCBwaXhlbF9mb3JtYXQsIHVpbnQ2NF90Cj4gbW9kaWZpZXIs Cj4gLQkJdWludDMyX3QgZmxhZ3MsIHVpbnQzMl90ICpidWZfaWQpOwo+ICsJCXVpbnQzMl90ICpv ZmZzZXRzLCB1aW50MzJfdCBmbGFncywgdWludDMyX3QKPiAqYnVmX2lkKTsKPiDCoAo+IMKgLyoq Cj4gwqAgKiB0b191c2VyX3BvaW50ZXI6Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19kcmF3X2Ny Yy5jIGIvdGVzdHMva21zX2RyYXdfY3JjLmMKPiBpbmRleCA3MjNlN2ExODJjOTUuLjg2ZGNmMzky ODVmMyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9rbXNfZHJhd19jcmMuYwo+ICsrKyBiL3Rlc3RzL2tt c19kcmF3X2NyYy5jCj4gQEAgLTE2Myw3ICsxNjMsNyBAQCBzdGF0aWMgYm9vbCBmb3JtYXRfaXNf c3VwcG9ydGVkKHVpbnQzMl90IGZvcm1hdCwKPiB1aW50NjRfdCBtb2RpZmllcikKPiDCoAkJCQkJ CcKgwqDCoGZvcm1hdCwgbW9kaWZpZXIsCj4gwqAJCQkJCQnCoMKgwqAwLCBOVUxMLCAmc3RyaWRl LAo+IE5VTEwpOwo+IMKgCXJldCA9wqDCoF9fa21zX2FkZGZiKGRybV9mZCwgZ2VtX2hhbmRsZSwg NjQsIDY0LAo+IC0JCQnCoMKgwqBzdHJpZGUsIGZvcm1hdCwgbW9kaWZpZXIsCj4gKwkJCcKgwqDC oHN0cmlkZSwgZm9ybWF0LCBtb2RpZmllciwgTlVMTCwKPiDCoAkJCcKgwqDCoExPQ0FMX0RSTV9N T0RFX0ZCX01PRElGSUVSUywgJmZiX2lkKTsKPiDCoAlkcm1Nb2RlUm1GQihkcm1fZmQsIGZiX2lk KTsKPiDCoAlnZW1fY2xvc2UoZHJtX2ZkLCBnZW1faGFuZGxlKTsKPiBkaWZmIC0tZ2l0IGEvdGVz dHMva21zX3JvdGF0aW9uX2NyYy5jIGIvdGVzdHMva21zX3JvdGF0aW9uX2NyYy5jCj4gaW5kZXgg NWIxOTBhMGQwM2NiLi5mNjU1NjJiYWU5ZWIgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMva21zX3JvdGF0 aW9uX2NyYy5jCj4gKysrIGIvdGVzdHMva21zX3JvdGF0aW9uX2NyYy5jCj4gQEAgLTUyMCw3ICs1 MjAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BsYW5lX3JvdGF0aW9uX3l0aWxlZF9vYmooZGF0YV90 Cj4gKmRhdGEsCj4gwqAJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+IMKgCj4gwqAJZG9fb3JfZGll KF9fa21zX2FkZGZiKGZkLCBnZW1faGFuZGxlLCB3LCBoLCBzdHJpZGUsCj4gLQkJwqDCoGZvcm1h dCwgdGlsaW5nLCBMT0NBTF9EUk1fTU9ERV9GQl9NT0RJRklFUlMsCj4gKwkJwqDCoGZvcm1hdCwg dGlsaW5nLCBOVUxMLCBMT0NBTF9EUk1fTU9ERV9GQl9NT0RJRklFUlMsCj4gwqAJCcKgwqAmZGF0 YS0+ZmIuZmJfaWQpKTsKPiDCoAlkYXRhLT5mYi53aWR0aCA9IHc7Cj4gwqAJZGF0YS0+ZmIuaGVp Z2h0ID0gaDsKPiBAQCAtNjAxLDcgKzYwMSw4IEBAIHN0YXRpYyB2b2lkCj4gdGVzdF9wbGFuZV9y b3RhdGlvbl9leGhhdXN0X2ZlbmNlcyhkYXRhX3QgKmRhdGEsCj4gwqAJCX0KPiDCoAo+IMKgCQly ZXQgPSAoX19rbXNfYWRkZmIoZmQsIGdlbV9oYW5kbGUsIHcsIGgsIHN0cmlkZSwKPiAtCQnCoMKg wqDCoMKgwqDCoGZvcm1hdCwgdGlsaW5nLCBMT0NBTF9EUk1fTU9ERV9GQl9NT0RJRklFUlMsCj4g KwkJwqDCoMKgwqDCoMKgwqBmb3JtYXQsIHRpbGluZywgTlVMTCwKPiArCQnCoMKgwqDCoMKgwqDC oExPQ0FMX0RSTV9NT0RFX0ZCX01PRElGSUVSUywKPiDCoAkJwqDCoMKgwqDCoMKgwqAmZGF0YTJb aV0uZmIuZmJfaWQpKTsKPiDCoAkJaWYgKHJldCkgewo+IMKgCQkJaWd0X3dhcm4oImZhaWxlZCB0 byBjcmVhdGUgZnJhbWVidWZmZXJcbiIpOwo+IGRpZmYgLS1naXQgYS90ZXN0cy9wcmltZV92Z2Vt LmMgYi90ZXN0cy9wcmltZV92Z2VtLmMKPiBpbmRleCBhNWY3NWQ4ODhiZWYuLjc2M2M2MmU2MDZm NiAxMDA2NDQKPiAtLS0gYS90ZXN0cy9wcmltZV92Z2VtLmMKPiArKysgYi90ZXN0cy9wcmltZV92 Z2VtLmMKPiBAQCAtNzIzLDcgKzcyMyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZmxpcChpbnQgaTkx NSwgaW50IHZnZW0sCj4gdW5zaWduZWQgaGFuZykKPiDCoAo+IMKgCQlkb19vcl9kaWUoX19rbXNf YWRkZmIoaTkxNSwgaGFuZGxlW2ldLAo+IMKgCQkJCcKgwqDCoMKgwqDCoGJvW2ldLndpZHRoLCBi b1tpXS5oZWlnaHQsCj4gYm9baV0ucGl0Y2gsCj4gLQkJCQnCoMKgwqDCoMKgwqBEUk1fRk9STUFU X1hSR0I4ODg4LAo+IEk5MTVfVElMSU5HX05PTkUsCj4gKwkJCQnCoMKgwqDCoMKgwqBEUk1fRk9S TUFUX1hSR0I4ODg4LAo+IEk5MTVfVElMSU5HX05PTkUsIE5VTEwsCj4gwqAJCQkJwqDCoMKgwqDC oMKgTE9DQUxfRFJNX01PREVfRkJfTU9ESUZJRVJTLAo+ICZmYl9pZFtpXSkpOwo+IMKgCQlpZ3Rf YXNzZXJ0KGZiX2lkW2ldKTsKPiDCoAl9Ci0tIApNaWthIEthaG9sYSAtIEludGVsIE9UQwoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWls aW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==