From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 1/6] drm/fourcc: Add char_per_block, block_w and block_h in drm_format_info Date: Thu, 11 Oct 2018 10:29:42 +0200 Message-ID: <20181011082942.GU31561@phenom.ffwll.local> References: <20181005092606.21100-1-alexandru-cosmin.gheorghe@arm.com> <20181005092606.21100-2-alexandru-cosmin.gheorghe@arm.com> <20181005145148.GF31561@phenom.ffwll.local> <20181008095202.GA3455@e114479-lin.cambridge.arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x541.google.com (mail-ed1-x541.google.com [IPv6:2a00:1450:4864:20::541]) by gabe.freedesktop.org (Postfix) with ESMTPS id 247086E3AA for ; Thu, 11 Oct 2018 08:29:49 +0000 (UTC) Received: by mail-ed1-x541.google.com with SMTP id b7-v6so7424986edd.9 for ; Thu, 11 Oct 2018 01:29:49 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20181008095202.GA3455@e114479-lin.cambridge.arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Alexandru-Cosmin Gheorghe Cc: Charles Xu , nd , Matt Szczesiak , "airlied@linux.ie" , Liviu Dudau , "dri-devel@lists.freedesktop.org" , David Garbett , "seanpaul@chromium.org" , Lisa Wu , "daniel.vetter@ffwll.ch" , "malidp@foss.arm.com" , Ayan Halder , "james qian wang (Arm Technology China)" List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBPY3QgMDgsIDIwMTggYXQgMDk6NTI6MDRBTSArMDAwMCwgQWxleGFuZHJ1LUNvc21p biBHaGVvcmdoZSB3cm90ZToKPiBIaSBEYW5pZWwsCj4gCj4gVGhhbmtzIGZvciBoYXZpbmcgYSBs b29rLgo+IAo+IE9uIEZyaSwgT2N0IDA1LCAyMDE4IGF0IDA0OjUxOjQ4UE0gKzAyMDAsIERhbmll bCBWZXR0ZXIgd3JvdGU6Cj4gPiBPbiBGcmksIE9jdCAwNSwgMjAxOCBhdCAwOToyNjo0N0FNICsw MDAwLCBBbGV4YW5kcnUtQ29zbWluIEdoZW9yZ2hlIHdyb3RlOgo+ID4gPiBGb3Igc29tZSBwaXhl bCBmb3JtYXRzIC5jcHAgc3RydWN0dXJlIGluIGRybV9mb3JtYXQgaW5mbyBpdCdzIG5vdAo+ID4g PiBlbm91Z2ggdG8gZGVzY3JpYmUgdGhlIHBlY3VsaWFyaXRpZXMgb2YgdGhlIHBpeGVsIGxheW91 dCwgZm9yIGV4YW1wbGUKPiA+ID4gdGlsZWQgZm9ybWF0cyBvciBwYWNrZWQgZm9ybWF0cyBhdCBi aXQgbGV2ZWwuCj4gPiA+IAo+ID4gPiBXaGF0J3MgaW1wbGVtZW50ZWQgaGVyZSBpcyB0byBhZGQg dGhyZWUgbmV3IG1lbWJlcnMgdG8gZHJtX2Zvcm1hdF9pbmZvCj4gPiA+IHRoYXQgY291bGQgZGVz Y3JpYmUgc3VjaCBmb3JtYXRzOgo+ID4gPiAKPiA+ID4gLSBjaGFyX3Blcl9ibG9ja1szXQo+ID4g PiAtIGJsb2NrX3dbM10KPiA+ID4gLSBibG9ja19oWzNdCj4gPiA+IAo+ID4gPiBjaGFyX3Blcl9i bG9jayB3aWxsIGJlIHB1dCBpbiBhIHVuaW9uIGFsb25nc2lkZSBjcHAsIGZvciB0cmFuc3BhcmVu dAo+ID4gPiBjb21wYXRpYmlsaXR5ICB3aXRoIHRoZSBleGlzdGluZyBmb3JtYXQgZGVzY3JpcHRp b25zLgo+ID4gPiAKPiA+ID4gUmVnYXJkaW5nLCBibG9ja193IGFuZCBibG9ja19oIHRoZXkgYXJl IGludGVuZGVkIHRvIGJlIHVzZWQgdGhyb3VnaAo+ID4gPiB0aGVpciBlcXVpdmFsZW50IGdldHRl cnMgZHJtX2Zvcm1hdF9pbmZvX2Jsb2NrX3dpZHRoIC8KPiA+ID4gZHJtX2Zvcm1hdF9pbmZvX2Js b2NrX2hlaWdodCwgdGhlIHJlYXNvbiBvZiB0aGUgZ2V0dGVycyBpcyB0byBhYnN0cmFjdAo+ID4g PiB0aGUgZmFjdCB0aGF0IGZvciBub3JtYWwgZm9ybWF0cyBibG9ja193IGFuZCBibG9ja19oIHdp bGwgYmUgdW5zZXQvMCwKPiA+ID4gYnV0IHRoZSBtZXRob2RzIHdpbGwgYmUgcmV0dXJuaW5nIDEu Cj4gPiA+IAo+ID4gPiBVc2luZyB0aGF0IHRoZSBmb2xsb3dpbmcgZHJtIGNvcmUgZnVuY3Rpb25z IGhhZCBiZWVuIHVwZGF0ZWQgdG8KPiA+ID4gZ2VuZXJpY2FsbHkgaGFuZGxlIGJvdGggYmxvY2sg YW5kIG5vbi1ibG9jayBmb3JtYXRzOgo+ID4gPiAKPiA+ID4gLSBkcm1fZmJfY21hX2dldF9nZW1f YWRkcjogZm9yIGJsb2NrIGZvcm1hdHMgaXQgd2lsbCBqdXN0IHJldHVybiB0aGUKPiA+ID4gICBi ZWdpbm5pbmcgb2YgdGhlIGJsb2NrLgo+ID4gPiAtIGZyYW1lYnVmZmVyX2NoZWNrOiBVcGRhdGVk IHRvIGNvbXB1dGUgdGhlIG1pbmltdW0gcGl0Y2ggYXMKPiA+ID4gCURJVl9ST1VORF9VUCh3aWR0 aCAqIGNoYXJfcGVyX2Jsb2NrLCBkcm1fZm9ybWF0X2luZm9fYmxvY2tfd2lkdGgoaW5mbywgaSkK PiA+ID4gCSogZHJtX2Zvcm1hdF9pbmZvX2Jsb2NrX2hlaWdodChpbmZvLCBpKSkKPiA+ID4gLSBk cm1fZ2VtX2ZiX2NyZWF0ZV93aXRoX2Z1bmNzOiBVcGRhdGVkIHRvIGNvbXB1dGUgdGhlIHNpemUg b2YgdGhlCj4gPiA+ICAgbGFzdCBsaW5lIG9mIHBpeGVscyB3aXRoIHRoZSBzYW1lIGZvcm11bGEg YXMgZm9yIHRoZSBtaW5pbXVtIHBpdGNoLgo+ID4gPiAtIEluIHBsYWNlcyB3aGVyZSBpcyBub3Qg ZXhwZWN0aW5nIHRvIGhhbmRsZSBibG9jayBmb3JtYXRzLCBsaWtlIGZiZGV2Cj4gPiA+ICAgaGVs cGVycyBJIGp1c3QgYWRkZWQgc29tZSB3YXJuaW5ncyBpbiBjYXNlIHRoZSBibG9jayB3aWR0aC9o ZWlnaHQKPiA+ID4gICBhcmUgZ3JlYXRlciB0aGFuIDEuCj4gPiA+IAo+ID4gPiBTaWduZWQtb2Zm LWJ5OiBBbGV4YW5kcnUgR2hlb3JnaGUgPGFsZXhhbmRydS1jb3NtaW4uZ2hlb3JnaGVAYXJtLmNv bT4KPiA+ID4gUmV2aWV3ZWQtYnk6IExpdml1IER1ZGF1IDxsaXZpdS5kdWRhdUBhcm0uY29tPgo+ ID4gPiAtLS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfY21hX2hlbHBlci5jICAgICAg ICAgIHwgMjEgKysrKysrKystLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIu YyAgICAgICAgICAgICAgfCAgNiArKysKPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZm91cmNj LmMgICAgICAgICAgICAgICAgIHwgNDAgKysrKysrKysrKysrKysrKysrKysKPiA+ID4gIGRyaXZl cnMvZ3B1L2RybS9kcm1fZnJhbWVidWZmZXIuYyAgICAgICAgICAgIHwgIDkgKysrLS0KPiA+ID4g IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5jIHwgIDQgKy0KPiA+ ID4gIGluY2x1ZGUvZHJtL2RybV9mb3VyY2MuaCAgICAgICAgICAgICAgICAgICAgIHwgMjkgKysr KysrKysrKysrKy0KPiA+ID4gIDYgZmlsZXMgY2hhbmdlZCwgMTAxIGluc2VydGlvbnMoKyksIDgg ZGVsZXRpb25zKC0pCj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9mYl9jbWFfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2NtYV9oZWxwZXIuYwo+ ID4gPiBpbmRleCA0N2UwZTJmNjY0MmQuLmY4MjkzZjRkOTZjZiAxMDA2NDQKPiA+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2RybV9mYl9jbWFfaGVscGVyLmMKPiA+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2RybV9mYl9jbWFfaGVscGVyLmMKPiA+ID4gQEAgLTcyLDcgKzcyLDkgQEAgc3RydWN0 IGRybV9nZW1fY21hX29iamVjdCAqZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiwKPiA+ID4gIEVYUE9SVF9TWU1CT0xfR1BMKGRybV9mYl9jbWFfZ2V0X2dl bV9vYmopOwo+ID4gPiAgCj4gPiA+ICAvKioKPiA+ID4gLSAqIGRybV9mYl9jbWFfZ2V0X2dlbV9h ZGRyKCkgLSBHZXQgcGh5c2ljYWwgYWRkcmVzcyBmb3IgZnJhbWVidWZmZXIKPiA+ID4gKyAqIGRy bV9mYl9jbWFfZ2V0X2dlbV9hZGRyKCkgLSBHZXQgcGh5c2ljYWwgYWRkcmVzcyBmb3IgZnJhbWVi dWZmZXIsIGZvciBwaXhlbAo+ID4gPiArICogZm9ybWF0cyB3aGVyZSB2YWx1ZXMgYXJlIGdyb3Vw ZWQgaW4gYmxvY2tzIHRoaXMgd2lsbCBnZXQgeW91IHRoZSBiZWdpbm5pbmcgb2YKPiA+ID4gKyAq IHRoZSBibG9jawo+ID4gPiAgICogQGZiOiBUaGUgZnJhbWVidWZmZXIKPiA+ID4gICAqIEBzdGF0 ZTogV2hpY2ggc3RhdGUgb2YgZHJtIHBsYW5lCj4gPiA+ICAgKiBAcGxhbmU6IFdoaWNoIHBsYW5l Cj4gPiA+IEBAIC04Nyw2ICs4OSwxNCBAQCBkbWFfYWRkcl90IGRybV9mYl9jbWFfZ2V0X2dlbV9h ZGRyKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ID4gPiAgCXN0cnVjdCBkcm1fZ2VtX2Nt YV9vYmplY3QgKm9iajsKPiA+ID4gIAlkbWFfYWRkcl90IHBhZGRyOwo+ID4gPiAgCXU4IGhfZGl2 ID0gMSwgdl9kaXYgPSAxOwo+ID4gPiArCXUzMiBibG9ja193ID0gZHJtX2Zvcm1hdF9pbmZvX2Js b2NrX3dpZHRoKGZiLT5mb3JtYXQsIHBsYW5lKTsKPiA+ID4gKwl1MzIgYmxvY2tfaCA9IGRybV9m b3JtYXRfaW5mb19ibG9ja19oZWlnaHQoZmItPmZvcm1hdCwgcGxhbmUpOwo+ID4gPiArCXUzMiBi bG9ja19zaXplID0gZmItPmZvcm1hdC0+Y2hhcl9wZXJfYmxvY2tbcGxhbmVdOwo+ID4gPiArCXUz MiBzYW1wbGVfeDsKPiA+ID4gKwl1MzIgc2FtcGxlX3k7Cj4gPiA+ICsJdTMyIGJsb2NrX3N0YXJ0 X3k7Cj4gPiA+ICsJdTMyIG51bV9oYmxvY2tzOwo+ID4gPiArCj4gPiA+ICAKPiA+ID4gIAlvYmog PSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCBwbGFuZSk7Cj4gPiA+ICAJaWYgKCFvYmopCj4g PiA+IEBAIC05OSw4ICsxMDksMTMgQEAgZG1hX2FkZHJfdCBkcm1fZmJfY21hX2dldF9nZW1fYWRk cihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiA+ID4gIAkJdl9kaXYgPSBmYi0+Zm9ybWF0 LT52c3ViOwo+ID4gPiAgCX0KPiA+ID4gIAo+ID4gPiAtCXBhZGRyICs9IChmYi0+Zm9ybWF0LT5j cHBbcGxhbmVdICogKHN0YXRlLT5zcmNfeCA+PiAxNikpIC8gaF9kaXY7Cj4gPiA+IC0JcGFkZHIg Kz0gKGZiLT5waXRjaGVzW3BsYW5lXSAqIChzdGF0ZS0+c3JjX3kgPj4gMTYpKSAvIHZfZGl2Owo+ ID4gPiArCXNhbXBsZV94ID0gKHN0YXRlLT5zcmNfeCA+PiAxNikgLyBoX2RpdjsKPiA+ID4gKwlz YW1wbGVfeSA9IChzdGF0ZS0+c3JjX3kgPj4gMTYpIC8gdl9kaXY7Cj4gPiA+ICsJYmxvY2tfc3Rh cnRfeSA9IChzYW1wbGVfeSAvIGJsb2NrX2gpICogYmxvY2tfaDsKPiA+ID4gKwludW1faGJsb2Nr cyA9IHNhbXBsZV94IC8gYmxvY2tfdzsKPiA+ID4gKwo+ID4gPiArCXBhZGRyICs9IGZiLT5waXRj aGVzW3BsYW5lXSAqIGJsb2NrX3N0YXJ0X3k7Cj4gPiA+ICsJcGFkZHIgKz0gYmxvY2tfc2l6ZSAq IG51bV9oYmxvY2tzOwo+ID4gPiAgCj4gPiA+ICAJcmV0dXJuIHBhZGRyOwo+ID4gPiAgfQo+ID4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fZmJfaGVscGVyLmMKPiA+ID4gaW5kZXggYTUwNGE1ZTA1Njc2Li45YWRkMGQ3 ZGE3NDQgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMK PiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwo+ID4gPiBAQCAtMTU5 NSw2ICsxNTk1LDEwIEBAIGludCBkcm1fZmJfaGVscGVyX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFy X3NjcmVlbmluZm8gKnZhciwKPiA+ID4gIAlpZiAodmFyLT5waXhjbG9jayAhPSAwIHx8IGluX2Ri Z19tYXN0ZXIoKSkKPiA+ID4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICAKPiA+ID4gKwlpZiAo KGRybV9mb3JtYXRfaW5mb19ibG9ja193aWR0aChmYi0+Zm9ybWF0LCAwKSA+IDEpIHx8Cj4gPiA+ ICsJICAgIChkcm1fZm9ybWF0X2luZm9fYmxvY2tfaGVpZ2h0KGZiLT5mb3JtYXQsIDApID4gMSkp Cj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiArCj4gPiA+ICAJLyoKPiA+ID4gIAkgKiBD aGFuZ2VzIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBhcmUgY3VycmVudGx5IG5vdCBwdXNoZWQg YmFjawo+ID4gPiAgCSAqIHRvIEtNUywgaGVuY2UgZmFpbCBpZiBkaWZmZXJlbnQgc2V0dGluZ3Mg YXJlIHJlcXVlc3RlZC4KPiA+ID4gQEAgLTE5NjksNiArMTk3Myw4IEBAIHZvaWQgZHJtX2ZiX2hl bHBlcl9maWxsX3ZhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGRybV9mYl9oZWxwZXIg KmZiX2hlbHBlCj4gPiA+ICB7Cj4gPiA+ICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBm Yl9oZWxwZXItPmZiOwo+ID4gPiAgCj4gPiA+ICsJV0FSTl9PTigoZHJtX2Zvcm1hdF9pbmZvX2Js b2NrX3dpZHRoKGZiLT5mb3JtYXQsIDApID4gMSkgfHwKPiA+ID4gKwkJKGRybV9mb3JtYXRfaW5m b19ibG9ja19oZWlnaHQoZmItPmZvcm1hdCwgMCkgPiAxKSk7Cj4gPiA+ICAJaW5mby0+cHNldWRv X3BhbGV0dGUgPSBmYl9oZWxwZXItPnBzZXVkb19wYWxldHRlOwo+ID4gPiAgCWluZm8tPnZhci54 cmVzX3ZpcnR1YWwgPSBmYi0+d2lkdGg7Cj4gPiA+ICAJaW5mby0+dmFyLnlyZXNfdmlydHVhbCA9 IGZiLT5oZWlnaHQ7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvdXJj Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYwo+ID4gPiBpbmRleCBhMTU0NzYzMjU3 YWUuLjBjOTcyNWZmZDVlOSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9m b3VyY2MuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvdXJjYy5jCj4gPiA+IEBA IC00MDMsMyArNDAzLDQzIEBAIGludCBkcm1fZm9ybWF0X3BsYW5lX2hlaWdodChpbnQgaGVpZ2h0 LCB1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSkKPiA+ID4gIAlyZXR1cm4gaGVpZ2h0IC8gaW5m by0+dnN1YjsKPiA+ID4gIH0KPiA+ID4gIEVYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9wbGFuZV9o ZWlnaHQpOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGRybV9mb3JtYXRfaW5mb19ibG9j a193aWR0aCAtIHdpZHRoIGluIHBpeGVscyBvZiBibG9jay4KPiA+ID4gKyAqIEBpbmZvOiBwaXhl bCBmb3JtYXQgaW5mbwo+ID4gPiArICogQHBsYW5lOiBwbGFuZSBpbmRleAo+ID4gPiArICoKPiA+ ID4gKyAqIFJldHVybnM6Cj4gPiA+ICsgKiBUaGUgd2lkdGggaW4gcGl4ZWxzIG9mIGEgYmxvY2ss IGRlcGVuZGluZyBvbiB0aGUgcGxhbmUgaW5kZXguCj4gPiA+ICsgKi8KPiA+ID4gK3Vuc2lnbmVk IGludCBkcm1fZm9ybWF0X2luZm9fYmxvY2tfd2lkdGgoY29uc3Qgc3RydWN0IGRybV9mb3JtYXRf aW5mbyAqaW5mbywKPiA+ID4gKwkJCQkJIGludCBwbGFuZSkKPiA+ID4gK3sKPiA+ID4gKwlpZiAo IWluZm8gfHwgcGxhbmUgPj0gaW5mby0+bnVtX3BsYW5lcykKPiA+ID4gKwkJcmV0dXJuIDA7Cj4g PiA+ICsKPiA+ID4gKwlpZiAoIWluZm8tPmJsb2NrX3dbcGxhbmVdKQo+ID4gPiArCQlyZXR1cm4g MTsKPiA+ID4gKwlyZXR1cm4gaW5mby0+YmxvY2tfd1twbGFuZV07Cj4gPiA+ICt9Cj4gPiA+ICtF WFBPUlRfU1lNQk9MKGRybV9mb3JtYXRfaW5mb19ibG9ja193aWR0aCk7Cj4gPiA+ICsKPiA+ID4g Ky8qKgo+ID4gPiArICogZHJtX2Zvcm1hdF9pbmZvX2Jsb2NrX2hlaWdodCAtIGhlaWdodCBpbiBw aXhlbHMgb2YgYSBibG9jawo+ID4gPiArICogQGluZm86IHBpeGVsIGZvcm1hdCBpbmZvCj4gPiA+ ICsgKiBAcGxhbmU6IHBsYW5lIGluZGV4Cj4gPiA+ICsgKgo+ID4gPiArICogUmV0dXJuczoKPiA+ ID4gKyAqIFRoZSBoZWlnaHQgaW4gcGl4ZWxzIG9mIGEgYmxvY2ssIGRlcGVuZGluZyBvbiB0aGUg cGxhbmUgaW5kZXguCj4gPiA+ICsgKi8KPiA+ID4gK3Vuc2lnbmVkIGludCBkcm1fZm9ybWF0X2lu Zm9fYmxvY2tfaGVpZ2h0KGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm8sCj4gPiA+ ICsJCQkJCSAgaW50IHBsYW5lKQo+ID4gPiArewo+ID4gPiArCWlmICghaW5mbyB8fCBwbGFuZSA+ PSBpbmZvLT5udW1fcGxhbmVzKQo+ID4gPiArCQlyZXR1cm4gMDsKPiA+ID4gKwo+ID4gPiArCWlm ICghaW5mby0+YmxvY2tfaFtwbGFuZV0pCj4gPiA+ICsJCXJldHVybiAxOwo+ID4gPiArCXJldHVy biBpbmZvLT5ibG9ja19oW3BsYW5lXTsKPiA+ID4gK30KPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJt X2Zvcm1hdF9pbmZvX2Jsb2NrX2hlaWdodCk7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVy LmMKPiA+ID4gaW5kZXggM2JmNzI5ZDBhYWU1Li40ZTE0MDEzNzg4Y2QgMTAwNjQ0Cj4gPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZmZXIuYwo+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMKPiA+ID4gQEAgLTE5NSwyMCArMTk1LDIzIEBAIHN0 YXRpYyBpbnQgZnJhbWVidWZmZXJfY2hlY2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ID4g IAlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3BsYW5lczsgaSsrKSB7Cj4gPiA+ICAJCXVuc2ln bmVkIGludCB3aWR0aCA9IGZiX3BsYW5lX3dpZHRoKHItPndpZHRoLCBpbmZvLCBpKTsKPiA+ID4g IAkJdW5zaWduZWQgaW50IGhlaWdodCA9IGZiX3BsYW5lX2hlaWdodChyLT5oZWlnaHQsIGluZm8s IGkpOwo+ID4gPiAtCQl1bnNpZ25lZCBpbnQgY3BwID0gaW5mby0+Y3BwW2ldOwo+ID4gPiArCQl1 bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZSA9IGluZm8tPmNoYXJfcGVyX2Jsb2NrW2ldOwo+ID4gPiAr CQl1NjQgbWluX3BpdGNoID0gRElWX1JPVU5EX1VQKCh1NjQpd2lkdGggKiBibG9ja19zaXplLAo+ ID4gPiArCQkJCQlkcm1fZm9ybWF0X2luZm9fYmxvY2tfd2lkdGgoaW5mbywgaSkgKgo+ID4gPiAr CQkJCQlkcm1fZm9ybWF0X2luZm9fYmxvY2tfaGVpZ2h0KGluZm8sIGkpKTsKPiA+IAo+ID4gSSB0 aGluayBhIGhlbHBlciB0byBjb21wdXRlIHRoZSBkcm1fcGl0Y2gsIGluY2x1ZGluZyBzb21lIGtl cm5lbC1kb2MgdGhhdAo+ID4gZXhwbGFpbnMgd2hhdCBleGFjdGx5IGl0IGlzIChhbmQgd2h5KSB3 b3VsZCBiZSBnb29kLiBGb3IgY2xlYW5lciBjb2RlLAo+ID4gbGVzcyBkdXBsaWNhdGlvbiBhbmQg dG8gaGF2ZSBhIGdvb2Qgc3BvdCBmb3IgZG9jcy4KPiAKPiBTdGFyazN5IGhhZCB0aGUgc2FtZSBz dWdnZXN0aW9uIGR1cmluZyBvdXIgaW50ZXJuYWwgcmV2aWV3IDopLgoKQ2FuIHdlIGRvIG1vcmUg b2YgdGhhdCBpbnRlcm5hbCByZXZpZXcgaW4gcHVibGljIHBsZWFzZT8gQWRkaW5nIHItYiB0YWdz CmZyb20gaW50ZXJuYWwgc3R1ZmYgd2hlcmUgdGhlcmUncyAwIHJlYXNvbnMgZm9yIGludGVybmFs IHJldmlldyAoaXQncyBub3QKYW4gZW1iYXJnb2VkIGZlYXR1cmUpIGlzbid0IGdyZWF0LgoKSWYg dGhlIGlzc3VlIGlzIHRoYXQgeW91IGNhbid0IGZpbmQgeW91ciBzdHVmZiBvbiBkcmktZGV2ZWws IHRoZW4gbWF5YmUKY3JlYXRlIHlvdXIgb3duIHByaXZhdGUgdHVyZiBsaWtlIGFtZC9pbnRlbCBo YXZlLiBCdXQgSSB0aGluayBhcm0gaXMgc21hbGwKZW5vdWdoIHN0aWxsIHRoYXQgdGhpcyBkb2Vz bid0IG1ha2UgYW55IHNlbnNlLgoKCj4gRG9lcyB0aGlzIHNvdW5kcyBnb29kIHRvIHlvdT8KPiBk cm1fZm9ybWF0X2luZm9fbWluX3BpdGNoKGluZm8sIHBsYW5lLCBidWZmZXJfd2lkdGgpCgpBY2su Cgo+ID4gPiAgCQlpZiAoIXItPmhhbmRsZXNbaV0pIHsKPiA+ID4gIAkJCURSTV9ERUJVR19LTVMo Im5vIGJ1ZmZlciBvYmplY3QgaGFuZGxlIGZvciBwbGFuZSAlZFxuIiwgaSk7Cj4gPiA+ICAJCQly ZXR1cm4gLUVJTlZBTDsKPiA+ID4gIAkJfQo+ID4gPiAgCj4gPiA+IC0JCWlmICgodWludDY0X3Qp IHdpZHRoICogY3BwID4gVUlOVF9NQVgpCj4gPiA+ICsJCWlmIChtaW5fcGl0Y2ggPiBVSU5UX01B WCkKPiA+ID4gIAkJCXJldHVybiAtRVJBTkdFOwo+ID4gPiAgCj4gPiA+ICAJCWlmICgodWludDY0 X3QpIGhlaWdodCAqIHItPnBpdGNoZXNbaV0gKyByLT5vZmZzZXRzW2ldID4gVUlOVF9NQVgpCj4g PiA+ICAJCQlyZXR1cm4gLUVSQU5HRTsKPiA+ID4gIAo+ID4gPiAtCQlpZiAoci0+cGl0Y2hlc1tp XSA8IHdpZHRoICogY3BwKSB7Cj4gPiA+ICsJCWlmIChyLT5waXRjaGVzW2ldIDwgbWluX3BpdGNo KSB7Cj4gPiA+ICAJCQlEUk1fREVCVUdfS01TKCJiYWQgcGl0Y2ggJXUgZm9yIHBsYW5lICVkXG4i LCByLT5waXRjaGVzW2ldLCBpKTsKPiA+ID4gIAkJCXJldHVybiAtRUlOVkFMOwo+ID4gPiAgCQl9 Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9o ZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5jCj4g PiA+IGluZGV4IGRlZDdhMzc5YWMzNS4uZTM0MjUxMTM3MGU3IDEwMDY0NAo+ID4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuYwo+ID4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuYwo+ID4gPiBAQCAtMTcx LDcgKzE3MSw5IEBAIGRybV9nZW1fZmJfY3JlYXRlX3dpdGhfZnVuY3Moc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlLAo+ID4gPiAgCQl9Cj4gPiA+ICAKPiA+ID4g IAkJbWluX3NpemUgPSAoaGVpZ2h0IC0gMSkgKiBtb2RlX2NtZC0+cGl0Y2hlc1tpXQo+ID4gPiAt CQkJICsgd2lkdGggKiBpbmZvLT5jcHBbaV0KPiA+ID4gKwkJCSArIERJVl9ST1VORF9VUCgodTY0 KXdpZHRoICogaW5mby0+Y2hhcl9wZXJfYmxvY2tbaV0sCj4gPiA+ICsJCQkJCWRybV9mb3JtYXRf aW5mb19ibG9ja193aWR0aChpbmZvLCBpKSAqCj4gPiA+ICsJCQkJCWRybV9mb3JtYXRfaW5mb19i bG9ja19oZWlnaHQoaW5mbywgaSkpCj4gPiA+ICAJCQkgKyBtb2RlX2NtZC0+b2Zmc2V0c1tpXTsK PiA+ID4gIAo+ID4gPiAgCQlpZiAob2Jqc1tpXS0+c2l6ZSA8IG1pbl9zaXplKSB7Cj4gPiA+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZm91cmNjLmggYi9pbmNsdWRlL2RybS9kcm1fZm91 cmNjLmgKPiA+ID4gaW5kZXggODY1ZWY2MGMxN2FmLi4zMDVlODA4NDdhYmMgMTAwNjQ0Cj4gPiA+ IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9mb3VyY2MuaAo+ID4gPiArKysgYi9pbmNsdWRlL2RybS9k cm1fZm91cmNjLmgKPiA+ID4gQEAgLTU4LDYgKzU4LDI0IEBAIHN0cnVjdCBkcm1fbW9kZV9mYl9j bWQyOwo+ID4gPiAgICoJdXNlIGluIG5ldyBjb2RlIGFuZCBzZXQgdG8gMCBmb3IgbmV3IGZvcm1h dHMuCj4gPiA+ICAgKiBAbnVtX3BsYW5lczogTnVtYmVyIG9mIGNvbG9yIHBsYW5lcyAoMSB0byAz KQo+ID4gPiAgICogQGNwcDogTnVtYmVyIG9mIGJ5dGVzIHBlciBwaXhlbCAocGVyIHBsYW5lKQo+ ID4gCj4gPiBOZWVkIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBhbGlhc2VzIHdpdGggQGNoYXJfcGVy X2Jsb2NrIGFuZCBpcyBkZXByZWNhdGVkLgo+ID4gU2FtZSBmb3IgQGNoYXJfcGVyX2Jsb2NrLgo+ ID4gCj4gPiA+ICsgKiBAY2hhcl9wZXJfYmxvY2s6ICBOdW1iZXIgb2YgYnl0ZXMgcGVyIGJsb2Nr IChwZXIgcGxhbmUpLCB3aGVyZSBibG9ja3MgYXJlCj4gPiA+ICsgKglkZWZpbmVkIGFzIGEgcmVj dGFuZ2xlIG9mIHBpeGVscyB3aGljaCBhcmUgc3RvcmVkIG5leHQgdG8gZWFjaCBvdGhlciBpbgo+ ID4gPiArICoJYSBieXRlIGFsaWduZWQgbWVtb3J5IHJlZ2lvbi4KPiA+ID4gKyAqCVRvZ2V0aGVy IHdpdGggYmxvY2tfdyBhbmQgYmxvY2tfaCB0aGlzIGNvdWxkIGJlIHVzZWQgdG8gcHJvcGVybHkK PiA+IHMvY291bGQvaXMvCj4gPiAKPiA+ID4gKyAqCWRlc2NyaWJlIHRpbGVzIGluIHRpbGVkIGZv cm1hdHMgb3IgdG8gZGVzY3JpYmUgZ3JvdXBzIG9mIHBpeGVscyBpbgo+ID4gPiArICoJcGFja2Vk IGZvcm1hdHMgZm9yIHdoaWNoIHRoZSBtZW1vcnkgbmVlZGVkIGZvciBhIHNpbmdsZSBwaXhlbCBp dCdzIG5vdAo+ID4gPiArICoJYnl0ZSBhbGlnbmVkLgo+ID4gPiArICogICAgICBDcHAgaGFkIGJl ZW4ga2VwdCBmcm9tIGhpc3RvcmljYWwgcmVhc29ucyBiZWNhdXNlIHRoZXJlIGFyZSBhIGxvdCBv Zgo+ID4gCj4gPiBzL0NwcC9AY3BwLyBmb3IgcHJvcGVyIGhpZ2hsaWdodGluZyBpbiB0aGUgb3V0 cHV0Lgo+ID4gCj4gPiA+ICsgKglwbGFjZXMgaW4gZHJpdmVycyB3aGVyZSBpdCdzIHVzZWQuIElu IGRybSBjb3JlIGZvciBnZW5lcmljIGNvZGUgcGF0aHMKPiA+ID4gKyAqCXRoZSBwcmVmZXJyZWQg d2F5IGlzIHRvIHVzZSBjaGFyX3Blcl9ibG9jaywgZHJtX2Zvcm1hdF9pbmZvX2Jsb2NrX3dpZHRo Cj4gPiBAY2hhcl9wZXJfYmxvY2sgYW5kIGRybV9mb3JtYXRfaW5mb19ibG9ja193aWR0aCgpIGZv ciBoeXBlcmxpbmtzLiBTaW1pbGFyCj4gPiB3aXRoIGFsbCB0aGUgb3RoZXIgb2NjdXJlbmNlcyBv ZiBhIGZ1bmN0aW9uIG5hbWUuCj4gPiAKPiA+ID4gKyAqCWFuZCBkcm1fZm9ybWF0X2luZm9fYmxv Y2tfaGVpZ2h0IHdoaWNoIHNob3VsZCBhbGxvdyBoYW5kbGluZyBib3RoIGJsb2NrCj4gPiAKPiA+ IHMvc2hvdWxkLy8gLSBJIGhvcGUgeW91ciBjb2RlIGFjdHVhbGx5IHdvcmtzIDotKQo+ID4gCj4g PiA+ICsgKglhbmQgbm9uLWJsb2NrIGZvcm1hdHMgaW4gdGhlIHNhbWUgd2F5Lgo+ID4gPiArICoJ Rm9yIGZvcm1hdHMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBqdXN0IHdpdGggbW9kaWZp ZXJzLCBjcHAvCj4gPiA+ICsgKgljaGFyX3Blcl9ibG9jayBtdXN0IGJlIDAuCj4gPiAKPiA+IFRo aXMgaXMgYSBiaXQgdmFndWUgaW1vLiBXaGF0IGFib3V0Ogo+ID4gCj4gPiAiRm9yIGZvcm1hdHMg dGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbmx5IHdpdGggbm9uLWxpbmVhciBtb2RpZmll cnMsCj4gPiBib3RoIEBjcHAgYW5kIEBjaGFyX3Blcl9ibG9jayBtdXN0IGJlIDAgaW4gdGhlIGdl bmVyaWMgZm9ybWF0IHRhYmxlLgo+ID4gRHJpdmVycyBzaG91bGQgc3VwcGx5IGFjY3VyYXRlIGlu Zm9ybWF0aW9uIGZyb20gdGhlaXIKPiA+ICZkcm1fbW9kZV9jb25maWcuZ2V0X2Zvcm1hdF9pbmZv IGhvb2sgdGhvdWdoLiIKPiA+IAo+ID4gU2luY2UgSSdtIGFzc3VtaW5nIHRoYXQgb25jZSB5b3Ug a25vdyB0aGUgZXhhY3QgbW9kaWZpZXIsIHlvdSBjYW4gZW5saXN0Cj4gPiB0aGUgY29yZSBmb3Jt YXQgY2hlY2tpbmcgY29kZSB0byBoZWxwIHZhbGlkYXRlIGl0Lgo+ID4gCj4gPiA+ICsgKiBAYmxv Y2tfdzogQmxvY2sgd2lkdGggaW4gcGl4ZWxzLCB0aGlzIGlzIGludGVuZGVkIHRvIGJlIGFjY2Vz c2VkIHRocm91Z2gKPiA+ID4gKyAqCWRybV9mb3JtYXRfaW5mb19ibG9ja193aWR0aAo+ID4gCj4g PiBTaW5jZSB5b3UgYWxpYXMgY3BwIGFuZCBjaGFyX3Blcl9ibG9jaywgcGxzIG1ha2UgaXQgcmVh bGx5LCByZWFsbHkgY2xlYXIKPiA+IHRoYXQgaWYgdGhpcyBpc24ndCBzZXQsIHRoZW4gdGhlIGNv ZGUgdXNlcyAxIGFzIHRoZSBkZWZhdWx0Lgo+ID4gCj4gPiA+ICsgKiBAYmxvY2tfaDogQmxvY2sg aGVpZ2h0IGluIHBpeGVscywgdGhpcyBpcyBpbnRlbmRlZCB0byBiZSBhY2Nlc3NlZCB0aHJvdWdo Cj4gPiA+ICsgKglkcm1fZm9ybWF0X2luZm9fYmxvY2tfaGVpZ2h0Cj4gPiAKPiA+IFNhbWUgaGVy ZS4KPiA+IAo+ID4gUGxlYXNlIHVzZSB0aGUgaW5saW5lIGtlcm5lbGRvYyBzdHlsZSwgaXQncyBt dWNoIG1vcmUgcmVhZGFibGUgZm9yIGxvbmcKPiA+IHN0dWZmIGxpa2UgaGVyZS4gSWYgdGhlIGlu Y29uc2lzdGVuY3kgaXJrcyB5b3UsIHRoZW4gcGxlYXNlIGp1c3QgbW92ZSB0aGVtCj4gPiBhbGwg dG8gdGhlIGlubGluZSBzdHlsZS4gSW5saW5lIHN0eWxlIGFsc28gYWxsb3dzIHlvdSB0byBoYXZl IHByb3Blcgo+ID4gcGFyYWdyYXBoIGJyZWFrcyB3aXRoIGVtcHR5IGxpbmVzLgo+ID4gCj4gPiA+ ICAgKiBAaHN1YjogSG9yaXpvbnRhbCBjaHJvbWEgc3Vic2FtcGxpbmcgZmFjdG9yCj4gPiA+ICAg KiBAdnN1YjogVmVydGljYWwgY2hyb21hIHN1YnNhbXBsaW5nIGZhY3Rvcgo+ID4gPiAgICogQGhh c19hbHBoYTogRG9lcyB0aGUgZm9ybWF0IGVtYmVkcyBhbiBhbHBoYSBjb21wb25lbnQ/Cj4gPiA+ IEBAIC02Nyw3ICs4NSwxMiBAQCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvIHsKPiA+ID4gIAl1MzIg Zm9ybWF0Owo+ID4gPiAgCXU4IGRlcHRoOwo+ID4gPiAgCXU4IG51bV9wbGFuZXM7Cj4gPiA+IC0J dTggY3BwWzNdOwo+ID4gPiArCXVuaW9uIHsKPiA+ID4gKwkJdTggY3BwWzNdOwo+ID4gPiArCQl1 OCBjaGFyX3Blcl9ibG9ja1szXTsKPiA+ID4gKwl9Owo+ID4gPiArCXU4IGJsb2NrX3dbM107Cj4g PiA+ICsJdTggYmxvY2tfaFszXTsKPiA+ID4gIAl1OCBoc3ViOwo+ID4gPiAgCXU4IHZzdWI7Cj4g PiA+ICAJYm9vbCBoYXNfYWxwaGE7Cj4gPiA+IEBAIC05Niw2ICsxMTksMTAgQEAgaW50IGRybV9m b3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcodWludDMyX3QgZm9ybWF0KTsKPiA+ID4gIGlu dCBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCk7Cj4g PiA+ICBpbnQgZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChpbnQgd2lkdGgsIHVpbnQzMl90IGZvcm1h dCwgaW50IHBsYW5lKTsKPiA+ID4gIGludCBkcm1fZm9ybWF0X3BsYW5lX2hlaWdodChpbnQgaGVp Z2h0LCB1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSk7Cj4gPiA+ICt1bnNpZ25lZCBpbnQgZHJt X2Zvcm1hdF9pbmZvX2Jsb2NrX3dpZHRoKGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmlu Zm8sCj4gPiA+ICsJCQkJCSBpbnQgcGxhbmUpOwo+ID4gPiArdW5zaWduZWQgaW50IGRybV9mb3Jt YXRfaW5mb19ibG9ja19oZWlnaHQoY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbywK PiA+ID4gKwkJCQkJICBpbnQgcGxhbmUpOwo+ID4gPiAgY29uc3QgY2hhciAqZHJtX2dldF9mb3Jt YXRfbmFtZSh1aW50MzJfdCBmb3JtYXQsIHN0cnVjdCBkcm1fZm9ybWF0X25hbWVfYnVmICpidWYp Owo+ID4gPiAgCj4gPiA+ICAjZW5kaWYgLyogX19EUk1fRk9VUkNDX0hfXyAqLwo+ID4gCj4gPiBX aXRoIHRoZSBwb2xpc2ggYWRkcmVzc2VkLCB0aGlzIGxndG0uCj4gCj4gQWxsIG9mIHRoZW0gYXJl IHJlYXNvbmFibGUgdG8gbWUsIHNvIEknbGwgYXBwbHkgdGhlbSBpbiB0aGUgbmV4dAo+IHZlcnNp b24uCj4gCj4gPiAKPiA+IE9uZSBxdWVzdGlvbiBJIGhhdmUgaXMgdmFsaWRhdGluZyB0aGlzLiBJ IHRoaW5rIGEgYnVuY2ggb2YgdW5pdCB0ZXN0cywKPiA+IGludGVncmF0ZWQgaW50byB0aGUgZXhp c3Rpbmcga21zIHNlbGZ0ZXN0cyB3ZSBhbHJlYWR5IChzbyB0aGF0Cj4gPiBpbnRlbC1nZngtY2kg YW5kIG90aGVyIENJIGNhbiBydW4gaXQpIHdvdWxkIGJlIGdyZWF0LiBCb3RoIGZvciB0aGUgc21h bGwKPiA+IGhlbHBlciBmdW5jdGlvbnMgKGJsb2NrIHdpZHRoL2hlaWdodCwgYnV0IGVzcGVjaWFs bHkgZHJtX3BpdGNoKSwgYnV0IGFsc28KPiA+IGZvciB0aGUgZHJtX2ZyYW1lYnVmZmVyX2NyZWF0 ZSBmdW5jdGlvbnMsIHNvIHRoYXQgd2UgY2FuIGV4ZXJjaXNlIHRoZQo+ID4gbWV0cmljIHBpbGUg b2YgdmFsaWRhdGlvbiBjb3JuZXIgY2FzZXMuCj4gPiAtRGFuaWVsCj4gCj4gU28sIHlvdSBhcmUg dGhpbmtpbmcgb2YgYWRkaW5nIHRlc3RzIGhlcmUgZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy8g Pwo+IExvb2tpbmcgaW5zaWRlIHRoZSBmb2xkZXIsIGl0IHNlZW1zIG1vcmUgbGlrZSBhIHN0dWIg dGhhbiBwcm9wZXIKPiB0ZXN0IHN1aXRlIGZvciB0aGUgZHJtIGZyYW1ld29yaywgb3IgYW0gSSBt aXNzaW5nIHNvbWV0aGluZyA/CgpJdCdzIGluZGVlZCB2ZXJ5IGluY29tcGxldGUgc3RpbGwuCgo+ IEkgZGlkIHJ1biB0ZXN0cyBmb3IgYWxsIHN1cHBvcnRlZCBmb3JtYXRzIGJ5IHRoZSBtYWxpLWRw LCB3aXRoIG91cgo+IGludGVybmFsIHRlc3RzdWl0ZSBhbmQgZXZlcnl0aGluZyB3YXMgT0sgZm9y IGFsbCB0aGUgZm91cmNjIGVuYWJsZWQKPiBpbiBtYWxpLWRwCgpZb3VyIGludGVybmFsIHRlc3Qg c3VpdGUgaXMgdG8gbm8gdmFsdWUgdG8gdGhlIG92ZXJhbGwgY29tbXVuaXR5IDotKSBDYW4Kd2Ug Z2V0IHRob3NlIHVwc3RyZWFtZWQgc29tZXdoZXJlLCBpZGVhbGx5IGFzIHBhcnQgb2YgaWd0PwoK PiBJJ20gcGxhbm5pbmcgdG8gcnVuIHRoZSBpZ3Qgb24gdG9wIG9mIG1hbGktZHAsIGp1c3QgdG8g ZG91YmxlIGNoZWNrIEkKPiBkaWRuJ3QgY2hhbmdlIGFueSBvZiB0aGUgYmVoYXZpb3Vycy4gQW55 IGlkZWEgaWYgdGhlcmUgaXMgYW55IHB1YmxpYwo+IGlndCBDSSB0aGF0IEkgY291bGQgcG9pbnQg dG8gYSBrZXJuZWwgYnJhbmNoLCB0byB0ZXN0IHRoaXMgY2hhbmdlIG9uCj4gc29tZXRoaW5nIGVs c2Ugb3RoZXIgdGhhbiBtYWxpLWRwPwoKQXRtIG9ubHkgd2F5IHRvIGdldCBpdCB0byBwcmUtbWVy Z2UgdGVzdCBzdHVmZiBpcyBDYzogaW50ZWwtZ2Z4IG0tbC4KCj4gU2hvdWxkbid0IHRoYXQgYmUg ZW5vdWdoIGZvciB2YWxpZGF0aW5nIHRoaXMgcGF0Y2hlcz8gCgpJIGRvbid0IHRoaW5rIHNvLCBy aWdodCBub3cgd2UgZG9uJ3QgaGF2ZSBzcGVjaWZpYyB0ZXN0cyBmb3IgZS5nLiB0aGUgbmV3Cm1p bl9waXRjaCBmdW5jdGlvbiB5b3UncmUgYWRkaW5nLiBJZ3QgaXMgc3RpbGwgZmFpcmx5IGZhciBh d2F5IGZyb20KcHJvdmlkaW5nIGZ1bGwgY292ZXJhZ2UuIEFuZCBpdCBjYW4ndCBwcm92aWRlIGNv dmVyYWdlIGZvciBuZXcgZmVhdHVyZXMKb2ZjLCB3aXRob3V0IHNvbWVvbmUgYWRkaW5nIHRob3Nl IHRlc3RzLgoKQWxzbywgSSdtIG5vdCB3b3JyaWVkIGFib3V0IHlvdSB2YWxpZGF0aW5nIHRoaXMg Y29ycmVjdGx5LCB0aGF0J3Mga2luZGEKeW91ciBwcm9ibGVtLiBJJ20gd29ycmllZCBhYm91dCBr ZWVwaW5nIHRoaW5ncyB3b3JraW5nIGdvaW5nIGZvcndhcmQsIGFuZApmb3IgdGhhdCB3ZSBuZWVk OgotIHB1YmxpYyB0ZXN0cwotIHJ1biBpbiBhIHB1YmxpYyBDSQoKWWVzIEkga25vdyBmb3IgdGhl IDJuZCBwb2ludCBpbnRlbC1nZngtY2kgaXNuJ3QgdGhlcmUgeWV0LCBidXQgbXkKbG9uZy10ZXJt IHBsYW4gaXMgdG8gcnVuIGFsbCB0aGUgZ2VuZXJpYyBpZ3QgdGVzdHMgcGx1cyBrZXJuZWwgc2Vs Zi10ZXN0cwpvbiB2aXJ0dWFsIG1hY2hpbmVzIChvbiB0b3Agb2Ygdmttcyt2Z2VtKSBpbiBnaXRs YWIgQ0kuCgpDaGVlcnMsIERhbmllbAotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVl ciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==