From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH v3 15/19] drm/i915: atomic plane updates in a nutshell Date: Mon, 22 Jun 2015 12:08:36 +0200 Message-ID: <5587DEA4.2070909@linux.intel.com> References: <1434364436-6366-1-git-send-email-maarten.lankhorst@linux.intel.com> <1434364436-6366-16-git-send-email-maarten.lankhorst@linux.intel.com> <20150618152824.GP5176@intel.com> <55839403.9000104@linux.intel.com> <20150622094916.GR5176@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 656BA6E73D for ; Mon, 22 Jun 2015 03:08:40 -0700 (PDT) In-Reply-To: <20150622094916.GR5176@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: =?windows-1252?Q?Ville_Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SGV5LAoKT3AgMjItMDYtMTUgb20gMTE6NDkgc2NocmVlZiBWaWxsZSBTeXJqw6Rsw6Q6Cj4gT24g RnJpLCBKdW4gMTksIDIwMTUgYXQgMDY6MDE6MDdBTSArMDIwMCwgTWFhcnRlbiBMYW5raG9yc3Qg d3JvdGU6Cj4+IE9wIDE4LTA2LTE1IG9tIDE3OjI4IHNjaHJlZWYgVmlsbGUgU3lyasOkbMOkOgo+ Pj4gT24gTW9uLCBKdW4gMTUsIDIwMTUgYXQgMTI6MzM6NTJQTSArMDIwMCwgTWFhcnRlbiBMYW5r aG9yc3Qgd3JvdGU6Cj4+Pj4gTm93IHRoYXQgYWxsIHBsYW5lcyBhcmUgYWRkZWQgZHVyaW5nIGEg bW9kZXNldCB3ZSBjYW4gdXNlIHRoZQo+Pj4+IGNhbGN1bGF0ZWQgY2hhbmdlcyBiZWZvcmUgZGlz YWJsaW5nIGEgcGxhbmUsIGFuZCB0aGVuIGVpdGhlciBjb21taXQKPj4+PiBvciBmb3JjZSBkaXNh YmxlIGEgcGxhbmUgYmVmb3JlIGRpc2FibGluZyB0aGUgY3J0Yy4KPj4+Pgo+Pj4+IFRoZSBjb2Rl IGlzIHNoYXJlZCB3aXRoIGF0b21pY19iZWdpbi9mbHVzaCwgZXhjZXB0IHdhdGVybWFyayB1cGRh dGluZwo+Pj4+IGFuZCB2YmxhbmsgZXZhc2lvbiBhcmUgbm90IHVzZWQuCj4+Pj4KPj4+PiBUaGlz IGlzIG5lZWRlZCBmb3IgcHJvcGVyIGF0b21pYyBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0Lgo+Pj4+ Cj4+Pj4gQnVnemlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dp P2lkPTkwODY4Cj4+Pj4gU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4u bGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPj4+PiAtLS0KPj4+PiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgMTAzICsrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCj4+Pj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jICB8ICAgNCAr LQo+Pj4+ICAyIGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDg0IGRlbGV0aW9ucygt KQo+Pj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3Bs YXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+Pj4+IGluZGV4IGNj NGNhNDk3MDcxNi4uYmViNjkyODFmNDVjIDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYwo+Pj4+IEBAIC0yMjE3LDI4ICsyMjE3LDYgQEAgc3RhdGljIHZvaWQgaW50 ZWxfZGlzYWJsZV9waXBlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+Pj4+ICAJCWludGVsX3dh aXRfZm9yX3BpcGVfb2ZmKGNydGMpOwo+Pj4+ICB9Cj4+Pj4gIAo+Pj4+IC0vKioKPj4+PiAtICog aW50ZWxfZW5hYmxlX3ByaW1hcnlfaHdfcGxhbmUgLSBlbmFibGUgdGhlIHByaW1hcnkgcGxhbmUg b24gYSBnaXZlbiBwaXBlCj4+Pj4gLSAqIEBwbGFuZTogIHBsYW5lIHRvIGJlIGVuYWJsZWQKPj4+ PiAtICogQGNydGM6IGNydGMgZm9yIHRoZSBwbGFuZQo+Pj4+IC0gKgo+Pj4+IC0gKiBFbmFibGUg QHBsYW5lIG9uIEBjcnRjLCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBwaXBlIGlzIHJ1bm5pbmcgZmly c3QuCj4+Pj4gLSAqLwo+Pj4+IC1zdGF0aWMgdm9pZCBpbnRlbF9lbmFibGVfcHJpbWFyeV9od19w bGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPj4+PiAtCQkJCQkgIHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKPj4+PiAtewo+Pj4+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBsYW5lLT5k ZXY7Cj4+Pj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOwo+Pj4+IC0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9j cnRjKGNydGMpOwo+Pj4+IC0KPj4+PiAtCS8qIElmIHRoZSBwaXBlIGlzbid0IGVuYWJsZWQsIHdl IGNhbid0IHB1bXAgcGl4ZWxzIGFuZCBtYXkgaGFuZyAqLwo+Pj4+IC0JYXNzZXJ0X3BpcGVfZW5h YmxlZChkZXZfcHJpdiwgaW50ZWxfY3J0Yy0+cGlwZSk7Cj4+Pj4gLQl0b19pbnRlbF9wbGFuZV9z dGF0ZShwbGFuZS0+c3RhdGUpLT52aXNpYmxlID0gdHJ1ZTsKPj4+PiAtCj4+Pj4gLQlkZXZfcHJp di0+ZGlzcGxheS51cGRhdGVfcHJpbWFyeV9wbGFuZShjcnRjLCBwbGFuZS0+ZmIsCj4+Pj4gLQkJ CQkJICAgICAgIGNydGMtPngsIGNydGMtPnkpOwo+Pj4+IC19Cj4+Pj4gLQo+Pj4+ICBzdGF0aWMg Ym9vbCBuZWVkX3Z0ZF93YShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+Pj4+ICB7Cj4+Pj4gICNp ZmRlZiBDT05GSUdfSU5URUxfSU9NTVUKPj4+PiBAQCAtNDUwOCwyMCArNDQ4Niw2IEBAIHN0YXRp YyB2b2lkIGlyb25sYWtlX3BmaXRfZW5hYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+Pj4+ ICAJfQo+Pj4+ICB9Cj4+Pj4gIAo+Pj4+IC1zdGF0aWMgdm9pZCBpbnRlbF9lbmFibGVfc3ByaXRl X3BsYW5lcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+Pj4gLXsKPj4+PiAtCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4+Pj4gLQllbnVtIHBpcGUgcGlwZSA9IHRvX2ludGVs X2NydGMoY3J0YyktPnBpcGU7Cj4+Pj4gLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPj4+PiAt CXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmU7Cj4+Pj4gLQo+Pj4+IC0JZHJtX2Zvcl9l YWNoX2xlZ2FjeV9wbGFuZShwbGFuZSwgJmRldi0+bW9kZV9jb25maWcucGxhbmVfbGlzdCkgewo+ Pj4+IC0JCWludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmUpOwo+Pj4+IC0JCWlmIChp bnRlbF9wbGFuZS0+cGlwZSA9PSBwaXBlKQo+Pj4+IC0JCQlpbnRlbF9wbGFuZV9yZXN0b3JlKCZp bnRlbF9wbGFuZS0+YmFzZSk7Cj4+Pj4gLQl9Cj4+Pj4gLX0KPj4+PiAtCj4+Pj4gIHZvaWQgaHN3 X2VuYWJsZV9pcHMoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4+Pj4gIHsKPj4+PiAgCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPj4+PiBAQCAtNDgxNywyNyArNDc4 MSw2IEBAIHN0YXRpYyB2b2lkIGludGVsX3ByZV9wbGFuZV91cGRhdGUoc3RydWN0IGludGVsX2Ny dGMgKmNydGMpCj4+Pj4gIAkJaW50ZWxfcHJlX2Rpc2FibGVfcHJpbWFyeSgmY3J0Yy0+YmFzZSk7 Cj4+Pj4gIH0KPj4+PiAgCj4+Pj4gLXN0YXRpYyB2b2lkIGludGVsX2NydGNfZW5hYmxlX3BsYW5l cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+Pj4gLXsKPj4+PiAtCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5kZXY7Cj4+Pj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9 IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4+Pj4gLQlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7 Cj4+Pj4gLQo+Pj4+IC0JaW50ZWxfZW5hYmxlX3ByaW1hcnlfaHdfcGxhbmUoY3J0Yy0+cHJpbWFy eSwgY3J0Yyk7Cj4+Pj4gLQlpbnRlbF9lbmFibGVfc3ByaXRlX3BsYW5lcyhjcnRjKTsKPj4+PiAt CWlmICh0b19pbnRlbF9wbGFuZV9zdGF0ZShjcnRjLT5jdXJzb3ItPnN0YXRlKS0+dmlzaWJsZSkK Pj4+PiAtCQlpbnRlbF9jcnRjX3VwZGF0ZV9jdXJzb3IoY3J0YywgdHJ1ZSk7Cj4+Pj4gLQo+Pj4+ IC0JaW50ZWxfcG9zdF9lbmFibGVfcHJpbWFyeShjcnRjKTsKPj4+PiAtCj4+Pj4gLQkvKgo+Pj4+ IC0JICogRklYTUU6IE9uY2Ugd2UgZ3JvdyBwcm9wZXIgbnVjbGVhciBmbGlwIHN1cHBvcnQgb3V0 IG9mIHRoaXMgd2UgbmVlZAo+Pj4+IC0JICogdG8gY29tcHV0ZSB0aGUgbWFzayBvZiBmbGlwIHBs YW5lcyBwcmVjaXNlbHkuIEZvciB0aGUgdGltZSBiZWluZwo+Pj4+IC0JICogY29uc2lkZXIgdGhp cyBhIGZsaXAgdG8gYSBOVUxMIHBsYW5lLgo+Pj4+IC0JICovCj4+Pj4gLQlpbnRlbF9mcm9udGJ1 ZmZlcl9mbGlwKGRldiwgSU5URUxfRlJPTlRCVUZGRVJfQUxMX01BU0socGlwZSkpOwo+Pj4+IC19 Cj4+Pj4gLQo+Pj4+ICBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2Rpc2FibGVfcGxhbmVzKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywgdW5zaWduZWQgcGxhbmVfbWFzaykKPj4+PiAgewo+Pj4+ICAJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPj4+PiBAQCAtNDg0NSwxMCArNDc4OCw2 IEBAIHN0YXRpYyB2b2lkIGludGVsX2NydGNfZGlzYWJsZV9wbGFuZXMoc3RydWN0IGRybV9jcnRj ICpjcnRjLCB1bnNpZ25lZCBwbGFuZV9tYXNrCj4+Pj4gIAlzdHJ1Y3QgZHJtX3BsYW5lICpwOwo+ Pj4+ICAJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+Pj4+ICAKPj4+PiAtCWludGVsX2Ny dGNfd2FpdF9mb3JfcGVuZGluZ19mbGlwcyhjcnRjKTsKPj4+PiAtCj4+Pj4gLQlpbnRlbF9wcmVf ZGlzYWJsZV9wcmltYXJ5KGNydGMpOwo+Pj4+IC0KPj4+PiAgCWludGVsX2NydGNfZHBtc19vdmVy bGF5X2Rpc2FibGUoaW50ZWxfY3J0Yyk7Cj4+Pj4gIAo+Pj4+ICAJZHJtX2Zvcl9lYWNoX3BsYW5l X21hc2socCwgZGV2LCBwbGFuZV9tYXNrKQo+Pj4+IEBAIC02MjcwLDYgKzYyMDksMTEgQEAgc3Rh dGljIHZvaWQgaW50ZWxfY3J0Y19kaXNhYmxlX25vYXRvbWljKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKPj4+PiAgCWlmICghaW50ZWxfY3J0Yy0+YWN0aXZlKQo+Pj4+ICAJCXJldHVybjsKPj4+PiAg Cj4+Pj4gKwlpZiAodG9faW50ZWxfcGxhbmVfc3RhdGUoY3J0Yy0+cHJpbWFyeS0+c3RhdGUpLT52 aXNpYmxlKSB7Cj4+Pj4gKwkJaW50ZWxfY3J0Y193YWl0X2Zvcl9wZW5kaW5nX2ZsaXBzKGNydGMp Owo+Pj4+ICsJCWludGVsX3ByZV9kaXNhYmxlX3ByaW1hcnkoY3J0Yyk7Cj4+Pj4gKwl9Cj4+Pj4g Kwo+Pj4+ICAJaW50ZWxfY3J0Y19kaXNhYmxlX3BsYW5lcyhjcnRjLCBjcnRjLT5zdGF0ZS0+cGxh bmVfbWFzayk7Cj4+Pj4gIAlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2FibGUoY3J0Yyk7Cj4+ Pj4gIAo+Pj4+IEBAIC0xMTc4MywxMCArMTE3MjcsNiBAQCBpbnQgaW50ZWxfcGxhbmVfYXRvbWlj X2NhbGNfY2hhbmdlcyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4+Pj4gIAlp ZiAob2xkX3BsYW5lX3N0YXRlLT5iYXNlLmZiICYmICFmYikKPj4+PiAgCQlpbnRlbF9jcnRjLT5h dG9taWMuZGlzYWJsZWRfcGxhbmVzIHw9IDEgPDwgaTsKPj4+PiAgCj4+Pj4gLQkvKiBkb24ndCBy dW4gcmVzdCBkdXJpbmcgbW9kZXNldCB5ZXQgKi8KPj4+PiAtCWlmICghaW50ZWxfY3J0Yy0+YWN0 aXZlIHx8IG1vZGVfY2hhbmdlZCkKPj4+PiAtCQlyZXR1cm4gMDsKPj4+PiAtCj4+Pj4gIAl3YXNf dmlzaWJsZSA9IG9sZF9wbGFuZV9zdGF0ZS0+dmlzaWJsZTsKPj4+PiAgCXZpc2libGUgPSB0b19p bnRlbF9wbGFuZV9zdGF0ZShwbGFuZV9zdGF0ZSktPnZpc2libGU7Cj4+Pj4gIAo+Pj4+IEBAIC0x MzI1NSwxNSArMTMxOTUsMTggQEAgc3RhdGljIGludCBfX2ludGVsX3NldF9tb2RlKHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPj4+PiAgCWRybV9hdG9taWNfaGVscGVyX3N3YXBfc3Rh dGUoZGV2LCBzdGF0ZSk7Cj4+Pj4gIAo+Pj4+ICAJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0 ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgewo+Pj4+ICsJCXN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPj4+PiArCj4+Pj4gIAkJaWYgKCFuZWVkc19t b2Rlc2V0KGNydGMtPnN0YXRlKSkKPj4+PiAgCQkJY29udGludWU7Cj4+Pj4gIAo+Pj4+ICAJCWFu eV9tcyA9IHRydWU7Cj4+Pj4gLQkJaWYgKCFjcnRjX3N0YXRlLT5hY3RpdmUpCj4+Pj4gLQkJCWNv bnRpbnVlOwo+Pj4+ICsJCWludGVsX3ByZV9wbGFuZV91cGRhdGUoaW50ZWxfY3J0Yyk7Cj4+Pj4g IAo+Pj4+IC0JCWludGVsX2NydGNfZGlzYWJsZV9wbGFuZXMoY3J0YywgY3J0Y19zdGF0ZS0+cGxh bmVfbWFzayk7Cj4+Pj4gLQkJZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlKGNydGMpOwo+ Pj4+ICsJCWlmIChjcnRjX3N0YXRlLT5hY3RpdmUpIHsKPj4+PiArCQkJaW50ZWxfY3J0Y19kaXNh YmxlX3BsYW5lcyhjcnRjLCBjcnRjX3N0YXRlLT5wbGFuZV9tYXNrKTsKPj4+PiArCQkJZGV2X3By aXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlKGNydGMpOwo+Pj4+ICsJCX0KPj4+PiAgCX0KPj4+PiAg Cj4+Pj4gIAkvKiBPbmx5IGFmdGVyIGRpc2FibGluZyBhbGwgb3V0cHV0IHBpcGVsaW5lcyB0aGF0 IHdpbGwgYmUgY2hhbmdlZCBjYW4gd2UKPj4+PiBAQCAtMTMyNzcsMTUgKzEzMjIwLDEyIEBAIHN0 YXRpYyBpbnQgX19pbnRlbF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUp Cj4+Pj4gIAo+Pj4+ICAJLyogTm93IGVuYWJsZSB0aGUgY2xvY2tzLCBwbGFuZSwgcGlwZSwgYW5k IGNvbm5lY3RvcnMgdGhhdCB3ZSBzZXQgdXAuICovCj4+Pj4gIAlmb3JfZWFjaF9jcnRjX2luX3N0 YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4+Pj4gLQkJZHJtX2F0b21pY19oZWxw ZXJfY29tbWl0X3BsYW5lc19vbl9jcnRjKGNydGNfc3RhdGUpOwo+Pj4+IC0KPj4+PiAtCQlpZiAo IW5lZWRzX21vZGVzZXQoY3J0Yy0+c3RhdGUpIHx8ICFjcnRjLT5zdGF0ZS0+YWN0aXZlKQo+Pj4+ IC0JCQljb250aW51ZTsKPj4+PiAtCj4+Pj4gLQkJdXBkYXRlX3NjYW5saW5lX29mZnNldCh0b19p bnRlbF9jcnRjKGNydGMpKTsKPj4+PiArCQlpZiAobmVlZHNfbW9kZXNldChjcnRjLT5zdGF0ZSkg JiYgY3J0Yy0+c3RhdGUtPmFjdGl2ZSkgewo+Pj4+ICsJCQl1cGRhdGVfc2NhbmxpbmVfb2Zmc2V0 KHRvX2ludGVsX2NydGMoY3J0YykpOwo+Pj4+ICsJCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Vu YWJsZShjcnRjKTsKPj4+PiArCQl9Cj4+Pj4gIAo+Pj4+IC0JCWRldl9wcml2LT5kaXNwbGF5LmNy dGNfZW5hYmxlKGNydGMpOwo+Pj4+IC0JCWludGVsX2NydGNfZW5hYmxlX3BsYW5lcyhjcnRjKTsK Pj4+PiArCQlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfcGxhbmVzX29uX2NydGMoY3J0Y19zdGF0 ZSk7Cj4+PiBXaHkgYXJlIHdlIHN0aWxsIGNvbW1pdGluZyBwbGFuZXMgb24gYSBkaXNhYmxlZCBw aXBlcz8KPj4+Cj4+PiBUaGUgd2F5IEkgZW52aXNpb25lZCB0aGUgbW9kZXNldCBwYXRoIGxvb2tp bmcgaXMgc29tZXRoaW5nIGxpa2UgdGhpczoKPj4+Cj4+PiAxLiBhdG9taWNhbGx5IGRpc2FibGUg YWxsIHBsYW5lcyBmb3IgcGlwZXMgZ2V0dGluZyBkaXNhYmxlZAo+Pj4gMi4gZGlzYWJsZSBhbGwg cGlwZXMgdGhhdCBuZWVkIGRpc2FibGluZwo+Pj4gMy4gZW5hYmxlIGFsbCBwaXBlcyB0aGF0IG5l ZWQgZW5hYmxpbmcKPj4+IDQuIGF0b21pY2FsbHkgdXBkYXRlIGFsbCBwbGFuZXMgdGhhdCByZXF1 aXJlIGl0IG9uIG5vdyBhY3RpdmUgcGlwZXMKPj4+Cj4+Pgo+PiBJIGxvb2tlZCBmb3Igb3RoZXIg d2F5cyB0byBkbyB0aGlzLCBidXQgdGhleSB3ZXJlIHVnbHkuIE9ubHkgdXBkYXRpbmcgc3cgc3Rh dGUgaW4gY29tbWl0X3BsYW5lcyBmb3IgZGlzYWJsZWQgY3J0YydzIG1hZGUgdGhpbmdzIGEgbG90 IGNsZWFuZXIgd2l0aG91dCB3b3JyeWluZyBhYm91dCBzcGVjaWFsIGNhc2VzLgo+IFRoZSBjb21t aXQgaG9va3Mgc2hvdWxkbid0IHVwZGF0ZSBhbnkgc3cgc3RhdGUuCj4KPiBBcyBmb3Igc3BlY2lh bCBjYXNlcywgdGhlIGN1cnJlbnQgY29kZSBoYXMgb25lIHNwZWNpYWwgY2FzZSBhZnRlciBhbm90 aGVyLAo+IGFuZCBpdCdzIGdpdmluZyBtZSBhIGhlYWRhY2hlIGV2ZXJ5IHRpbWUgSSBsb29rIGF0 IGl0LgpZZXMsIGJ1dCB0aGlzIHdpbGwgc2ltcGxpZnkgd2l0aCBhIHVuaWZpZWQgYXRvbWljIGNv bW1pdCBwYXRoLgo+PiBwbGFuZV9kaXNhYmxlIGRvZXNuJ3QgdXBkYXRlIHN3IHN0YXRlLCBzbyBp dCBwZXJmb3JtcyAxLiBUaGUgY29tbWl0IGZ1bmN0aW9uIGlzIHN0aWxsIGNhbGxlZCBiZWNhdXNl IHVwZGF0ZSBwbGFuZS0+ZmIKPj4gbmVlZHMgdG8gYmUgdXBkYXRlZCwgZXZlbiBmb3IgZGlzYWJs ZWQgY3J0YydzLiBDb25kaXRpb25hbGx5IGNhbGxpbmcgcGxhbmVfY29tbWl0IGNhdXNlZCBtb3Jl IGlzc3VlcyB0aGFuIGl0IHNvbHZlZC4KPiBwbGFuZS0+ZmIgc2hvdWxkIGJlIGNsZWFybHkgbW92 ZWQgb3V0IG9mIHRoZSBjb21taXQgaG9va3MgdG8gd2hlcmUgdGhlCj4gcmVzdCBvZiB0aGUgc3Rh dGUgZ2V0cyBzd2FwcGVkIChhc3N1bWluZyB3ZSBjYW4ndCBqdXN0IGdldCByaWQgb2YgaXQKSSBj b21wbGV0ZWx5IGFncmVlLCBidXQgdGhpcyBiZWNvbWVzIGEgbG90IGVhc2llciB3aGVuIGFsbCB0 cmFuc2l0aW9uYWwgaGVscGVycyBhcmUgZ29uZS4KCn5NYWFydGVuCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==