From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 04/13] drm/i915: Add EDID read in intel_dp_check_link_status() for Link CTS 4.2.2.1 Date: Thu, 16 Apr 2015 18:31:17 +0200 Message-ID: <20150416163117.GL5082@phenom.ffwll.local> References: <1428682372-21586-5-git-send-email-tprevite@gmail.com> <1428936789-13435-1-git-send-email-tprevite@gmail.com> <552E85A7.9070402@gmail.com> <552FD82D.9050202@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f169.google.com (mail-wi0-f169.google.com [209.85.212.169]) by gabe.freedesktop.org (Postfix) with ESMTP id 1FB976EA86 for ; Thu, 16 Apr 2015 09:29:18 -0700 (PDT) Received: by wiax7 with SMTP id x7so15587099wia.0 for ; Thu, 16 Apr 2015 09:29:17 -0700 (PDT) Content-Disposition: inline In-Reply-To: <552FD82D.9050202@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Todd Previte Cc: Intel Graphics Development List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBBcHIgMTYsIDIwMTUgYXQgMDg6NDE6MzNBTSAtMDcwMCwgVG9kZCBQcmV2aXRlIHdy b3RlOgo+IE9uIDQvMTUvMjAxNSAxMDo0MiBBTSwgUGF1bG8gWmFub25pIHdyb3RlOgo+ID4yMDE1 LTA0LTE1IDEyOjM3IEdNVC0wMzowMCBUb2RkIFByZXZpdGUgPHRwcmV2aXRlQGdtYWlsLmNvbT46 Cj4gPj5PbiA0LzE0LzIwMTUgOTo1MyBBTSwgUGF1bG8gWmFub25pIHdyb3RlOgo+ID4+PjIwMTUt MDQtMTMgMTE6NTMgR01ULTAzOjAwIFRvZGQgUHJldml0ZSA8dHByZXZpdGVAZ21haWwuY29tPjoK PiA+Pj4+QWRkcyBpbiBhbiBFRElEIHJlYWQgYWZ0ZXIgdGhlIERQQ0QgcmVhZCB0byBhY2NvbW1v ZGF0ZSB0ZXN0IDQuMi4yLjEgaW4KPiA+Pj4+dGhlCj4gPj4+PkRpc3BsYXlwb3J0IExpbmsgQ1RT IENvcmUgMS4yIHJldjEuMS4gVGhpcyB0ZXN0IHJlcXVpcmVzIGFuIEVESUQgcmVhZCBmb3IKPiA+ Pj4+YWxsIEhQRCBwbHVnIGV2ZW50cy4gVG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgY29kZSwgdGhp cyBFRElEIHJlYWQgaXMgYWxzbwo+ID4+Pj51c2VkIGZvciBMaW5rIENUUyB0ZXN0cyA0LjIuMi4z LCA0LjIuMi40LCA0LjIuMi41IGFuZCA0LjIuMi42LiBBY3R1YWwKPiA+Pj4+c3VwcG9ydCBmb3Ig dGhlc2UgdGVzdHMgaXMgaW1wbGVtZW50ZWQgaW4gbGF0ZXIgcGF0Y2hlcyBpbiB0aGlzIHNlcmll cy4KPiA+Pj4+Cj4gPj4+PlYyOgo+ID4+Pj4tIEZpeGVkIGNvbXBpbGF0aW9uIGVycm9yIGludHJv ZHVjZWQgZHVyaW5nIHJld29yawo+ID4+Pj4KPiA+Pj4+U2lnbmVkLW9mZi1ieTogVG9kZCBQcmV2 aXRlIDx0cHJldml0ZUBnbWFpbC5jb20+Cj4gPj4+Pi0tLQo+ID4+Pj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcC5jIHwgMTEgKysrKysrKysrKysKPiA+Pj4+ICAgMSBmaWxlIGNoYW5n ZWQsIDExIGluc2VydGlvbnMoKykKPiA+Pj4+Cj4gPj4+PmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gPj4+PmIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHAuYwo+ID4+Pj5pbmRleCAyMzE4NGIwLi43NWRmM2UyIDEwMDY0NAo+ID4+Pj4tLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gPj4+PisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2RwLmMKPiA+Pj4+QEAgLTM4OTAsNiArMzg5MCw5IEBAIGludGVsX2RwX2NoZWNr X2xpbmtfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcAo+ID4+Pj4qaW50ZWxfZHApCj4gPj4+PiAgIHsK PiA+Pj4+ICAgICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kcF90b19kZXYo aW50ZWxfZHApOwo+ID4+Pj4gICAgICAgICAgc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2Vu Y29kZXIgPQo+ID4+Pj4mZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApLT5iYXNlOwo+ID4+Pj4rICAg ICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPQo+ID4+Pj4maW50ZWxfZHAtPmF0 dGFjaGVkX2Nvbm5lY3Rvci0+YmFzZTsKPiA+Pj4+KyAgICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIg KmFkYXB0ZXIgPSAmaW50ZWxfZHAtPmF1eC5kZGM7Cj4gPj4+PisgICAgICAgc3RydWN0IGVkaWQg KmVkaWRfcmVhZCA9IE5VTEw7Cj4gPj4+PiAgICAgICAgICB1OCBzaW5rX2lycV92ZWN0b3I7Cj4g Pj4+PiAgICAgICAgICB1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKPiA+Pj4+ Cj4gPj4+PkBAIC0zOTA2LDYgKzM5MDksMTQgQEAgaW50ZWxfZHBfY2hlY2tfbGlua19zdGF0dXMo c3RydWN0IGludGVsX2RwCj4gPj4+PippbnRlbF9kcCkKPiA+Pj4+ICAgICAgICAgICAgICAgICAg cmV0dXJuOwo+ID4+Pj4gICAgICAgICAgfQo+ID4+Pj4KPiA+Pj4+KyAgICAgICAvKiBEaXNwbGF5 cG9ydCBMaW5rIENUUyBDb3JlIDEuMiByZXYxLjEgRURJRCB0ZXN0aW5nCj4gPj4+PisgICAgICAg ICogNC4yLjIuMSAtIEVESUQgcmVhZCByZXF1aXJlZCBmb3IgYWxsIEhQRCBldmVudHMKPiA+Pj4+ KyAgICAgICAgICovCj4gPj4+PisgICAgICAgIGVkaWRfcmVhZCA9IGRybV9nZXRfZWRpZChjb25u ZWN0b3IsIGFkYXB0ZXIpOwo+ID4+Pj4rICAgICAgICBpZiAoIWVkaWRfcmVhZCkgewo+ID4+Pj4r ICAgICAgICAgICAgICAgIERSTV9ERUJVR19EUklWRVIoIkludmFsaWQgRURJRCBkZXRlY3RlZFxu Iik7Cj4gPj4+PisgICAgICAgIH0KPiA+Pj4+Kwo+ID4+PldlIGFscmVhZHkgYnJpZWZseSBkaXNj dXNzZWQgdGhpcyBwYXRjaCBpbiBwcml2YXRlLCBzbyBJJ20gZ29pbmcgdG8KPiA+Pj5zdW1tYXJp emUgdGhlIGRpc2N1c3Npb24gYW5kIGFsc28gYWRkIHNvbWUgbW9yZSBwb2ludHMgaGVyZS4KPiA+ Pj4KPiA+Pj5GcmlzdCwgdGhlIGFjdHVhbCBkZXRhaWxlZCByZXZpZXc6IHRoZSBpbmRlbnRhdGlv biBoZXJlIGlzIHVzaW5nCj4gPj4+c3BhY2VzIGFuZCB3ZSdyZSBsZWFraW5nIHRoZSBFRElELiBU aGlzIHdpbGwgY2F1c2UgcmViYXNlcyB0byBhIGZldyBvZgo+ID4+PnRoZSBuZXh0IHBhdGNoZXMu Cj4gPj4+Cj4gPj4+QmFjayB0byB0aGUgaGlnaHQgbGV2ZWwgYXJjaGl0ZWN0dXJlOiB5b3VyIGlu aXRpYWwgdmVyc2lvbnMgb2YgdGhlCj4gPj4+c2VyaWVzIGNvbnRhaW5lZCBqdXN0IDEgZXh0cmEg RURJRCByZWFkLCBhbmQgaXQgd2FzIGNvbnRhaW5lZCBpbnNpZGUKPiA+Pj50aGUgY29tcGxpYW5j ZSB0ZXN0aW5nIGZ1bmN0aW9uLiBUaGVuIHRoZSB2ZXJzaW9ucyBzdWJtaXR0ZWQgYSBmZXcKPiA+ Pj5kYXlzIGFnbyBoYWQgMiBleHRyYSBFRElEIHJlYWRzLCB0aGVuIGFmdGVyIHNvbWUgZGlzY3Vz c2lvbiB5b3UKPiA+Pj5yZWR1Y2VkIHRvIDEgZXh0cmEgRURJRCByZWFkICh0aGUgb25lIG9uIHRo aXMgcGF0Y2gpLiBJIHByZXZpb3VzbHkKPiA+Pj5hc2tlZCAiQnV0IHdoYXQgYWJvdXQgdGhlIGF1 dG9tYXRpYyBFRElEIHJlYWQgd2UgZG8gd2hlbiB3ZSBnZXQgYQo+ID4+PmhvdHBsdWc/IENhbid0 IHdlIGp1c3QgcmVseSBvbiBpdD8iLiBJIGdvdCBzb21lIGFuc3dlcnMgdG8gdGhlCj4gPj4+cXVl c3Rpb24sIGJ1dCBJIHdhcyBub3QgcmVhbGx5IGNvbnZpbmNlZC4KPiA+Pj4KPiA+Pj5ZZXN0ZXJk YXkgSSB3YXMgYXJndWluZyB0aGF0IHRoaXMgZXh0cmEgRURJRCByZWFkIGlzIGdvaW5nIHRvIGFk ZCBhCj4gPj4+c21hbGwgZGVsYXkgdG8gZXZlcnkgaG90cGx1ZyBldmVudCB3ZSBnZXQsIHNvIG15 IGluaXRpYWwgc3VnZ2VzdGlvbgo+ID4+PndhcyB0byBvcmdhbml6ZSB0aGUgY29tcGxpYW5jZSB0 ZXN0aW5nIGluIGEgd2F5IHRoYXQgd291bGQgcmVxdWlyZSB0aGUKPiA+Pj51c2VyIHNwYWNlIHBy b2dyYW0gdG8gY2FsbCB0aGUgR2V0UmVzb3VyY2VzKCkgSU9DVEwgdG8gZm9yY2UgdGhlIEVESUQK PiA+Pj53aGVuIG5lZWRlZC4gWW91ciBhcmd1bWVudCB3YXMgdGhhdCB0aGVuIHRoZSBEUCBjb21w bGlhbmNlIHRlc3RpbmcKPiA+Pj5wcm9jZWR1cmUgd291bGQgYmUgdGVzdGluZyBvdXIgYXBwIGZv ciBjb21wbGlhbmNlLCBub3QgdGhlIEtlcm5lbC4KPiA+Pj4KPiA+Pj5CdXQgdG9kYXkgSSBkZWNp ZGVkIHRvIGZpbmFsbHkgZG8gc29tZSBkZWJ1Z2dpbmcgcmVnYXJkaW5nIHRoaXMsIGFuZCBJCj4g Pj4+d2FzIGFibGUgdG8gY29uZmlybSB0aGF0IHdlIGRvIGZvbGxvdyB0aGUgRFAgcmVxdWlyZW1l bnRzOiB3ZSBkbyBoYXZlCj4gPj4+YW4gYXV0b21hdGljIEVESUQgcmVhZCBkb25lIGJ5IHRoZSBL ZXJuZWwgd2hlbmV2ZXIgd2UgZG8gYSBob3RwbHVnOgo+ID4+Pmk5MTVfaG90cGx1Z193b3JrX2Z1 bmMoKSBjYWxscyBpbnRlbF9kcF9kZXRlY3QoKSwgd2hpY2ggZW5kcyBjYWxsaW5nCj4gPj4+ZHJt X2dldF9lZGlkKCkgYXQgc29tZSBwb2ludC4gVGhpcyBmdW5jdGlvbiBhbHNvIGRvZXMgb3RoZXIg c3R1ZmYgdGhhdAo+ID4+PmlzIHJlcXVpcmVkIGJ5IHRoZSBjb21wbGlhbmNlIHRlc3RpbmcsIHN1 Y2ggYXMgdGhlIERQQ0QgcmVhZHMuCj4gPj4+Cj4gPj4+Tm93IHRoZXJlJ3MgYSBwcm9ibGVtIHdp dGggdXNpbmcgaTkxNV9ob3RwbHVnX3dvcmtfZnVuYygpLCB3aGljaCBjb3VsZAo+ID4+PnRoZSBy ZWFzb24gd2h5IHlvdSByZWplY3RlZCBpdDogaXQgb25seSBoYXBwZW5zIGFmdGVyCj4gPj4+aW50 ZWxfZHBfaHBkX3B1bHNlKCksIHdoaWNoIG1lYW5zIHRoYXQgd2Ugb25seSByZWFsbHkgZG8gdGhl IEVESUQgcmVhZAo+ID4+PmFmdGVyIGludGVsX2RwX2hhbmRsZV90ZXN0X3JlcXVlc3QoKS4KPiA+ Pj4KPiA+Pj5JIGNvbnNpZGVyIGk5MTVfaG90cGx1Z193b3JrX2Z1bmMoKSBhIGZ1bmRhbWVudGFs IHBhcnQgb2Ygb3VyIERQCj4gPj4+ZnJhbWV3b3JrLCBhbmQgdGhlIERQIGNvbXBsaWFuY2UgdGVz dGluZyBzZWVtcyB0byBiZSBqdXN0IGlnbm9yaW5nIGl0cwo+ID4+PmV4aXN0ZW5jZS4gU28gbXkg aWRlYSBmb3IgYSBzb2x1dGlvbiBoZXJlIHdvdWxkIGJlIHRvIG1ha2UKPiA+Pj5pbnRlbF9kcF9o YW5kbGVfdGVzdF9yZXF1ZXN0KCkgcnVuIG9uIGl0cyBvd24gZGVsYXllZCB3b3JrIGZ1bmN0aW9u Lgo+ID4+Pkl0IHdvdWxkIHdhaXQgZm9yIGJvdGggaTkxNV9kaWdwb3J0X3dvcmtfZnVuYygpIGFu ZAo+ID4+Pmk5MTVfaG90cGx1Z193b3JrX2Z1bmMoKSB0byBmaW5pc2gsIGFuZCBvbmx5IHRoZW4g aXQgd291bGQgZG8gdGhlCj4gPj4+bm9ybWFsIHByb2Nlc3NpbmcuIFdpdGggdGhpcywgd2Ugd291 bGQgYmUgYWJsZSB0byBhdm9pZCB0aGUgZWRpZCByZWFkCj4gPj4+b24gdGhpcyBwYXRjaCwgd2Ug d291bGQgbWF5YmUgYmUgYWJsZSB0byBhdm9pZCBhdCBsZWFzdCBwYXJ0IG9mIHBhdGNoCj4gPj4+ Miwgd2Ugd291bGQgbWF5YmUgYmUgYWJsZSB0byBjb21wbGV0ZWx5IGF2b2lkIHBhdGNoIDcsIGFu ZCB0aGVuIG9uCj4gPj4+cGF0Y2ggOCB3ZSB3b3VsZCBzdGFydCB0b3VjaGluZyBpbnRlbF9kcF9n ZXRfZWRpZCgpIGluc3RlYWQuCj4gPj4+Cj4gPj4+SSBrbm93IHRoaXMgaXMgc29ydCBvZiBhIGZ1 bmRhbWVudGFsIGNoYW5nZSB0aGF0IGlzIGJlaW5nIHJlcXVlc3RlZCBhCj4gPj4+bGl0dGxlIGxh dGUgaW4gdGhlIHJldmlldyBwcm9jZXNzLCBhbmQgaXQgY2FuIGJlIGZydXN0cmF0aW5nLCBidXQg dGhpcwo+ID4+PmFzcGVjdCBvZiB0aGUgY29kZSBvbmx5IHJlY2VudGx5IGNoYW5nZWQgKEkgd2Fz IGZpbmUgd2l0aCB0aGUgRURJRAo+ID4+PnJlYWRzIGp1c3QgaW4gdGhlIGNvbXBsaWFuY2UgdGVz dGluZyBmdW5jdGlvbiksIGFuZCBzaW5jZSB0aGUgRFAKPiA+Pj5jb21wbGlhbmNlIGNvZGUgaXMg cXVpdGUgY29tcGxleCwgaXQgdG9vayBtZSBhIHdoaWxlIHRvIHJlYWxpemUKPiA+Pj5ldmVyeXRo aW5nIHRoYXQncyBnb2luZyBvbiBhbmQgd2hhdCBpcyB0aGUgcHVycG9zZSBvZiBlYWNoIHBpZWNl LiBJCj4gPj4+YWxzbyB0aGluayB0aGF0LCBzaW5jZSB0aGlzIGlkZWEgd2lsbCBhbGxvdyB0aGUg Y29tcGxpYW5jZSB0ZXN0aW5nIHRvCj4gPj4+dGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gdGhlIHdv cmsgZG9uZSBieSBpOTE1X2hvdHBsdWdfd29ya19mdW5jKCksCj4gPj4+Y29tcGxpYW5jZSB0ZXN0 aW5nIHdpbGwgYmV0dGVyIHJlZmxlY3QgdGhlIGJlaGF2aW9yIHRoYXQgaXMgYWN0dWFsbHkKPiA+ Pj5kb25lIGJ5IHRoZSBLZXJuZWwgd2hlbiBEUCBkZXZpY2VzIGFyZSBwbHVnZ2VkL3VucGx1Z2dl ZC4gQW5kIEkgZGlkCj4gPj4+YXNrIGFib3V0IHRob3NlIG5ldyBFRElEIHJlYWRzIGFzIHNvb24g YXMgSSBzdGFydGVkIHJldmlld2luZyB0aGUKPiA+Pj5wYXRjaCB0aGF0IGludHJvZHVjZWQgdGhl bS4KPiA+Pj4KPiA+Pj5Ob3csIHNpbmNlIEkga25vdyBob3cgZnJ1c3RyYXRpbmcgaXQgaXMgdG8g aGF2ZSB0byBjaGFuZ2UgYQo+ID4+PnNpZ25pZmljYW50IHBvcnRpb24gb2YgdGhlIGNvZGUgb25j ZSBhZ2FpbiwgSSB3aWxsIGxlYXZlIHRvIHRoZQo+ID4+Pm1haW50YWluZXJzIHRoZSBkZWNpc2lv biBvZiB3aGV0aGVyIHRoZSBjdXJyZW50IHByb3Bvc2VkCj4gPj4+aW1wbGVtZW50YXRpb24gaXMg YWNjZXB0YWJsZSBvciBpZiB3ZSB3YW50IHRvIG1ha2UgdGhlIERQIGNvbXBsaWFuY2UKPiA+Pj50 ZXN0aW5nIGNvZGUgdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gdGhlIHdvcmsgZG9uZSBieQo+ID4+ Pmk5MTVfaG90cGx1Z193b3JrX2Z1bmMoKS4gSSB3b3VsZCBhbHNvIGxpa2UgdG8ga25vdyB5b3Vy IG9waW5pb24gb24KPiA+Pj50aGlzLiBNYXliZSBteSBpZGVhIGp1c3QgZG9lc24ndCBtYWtlIHNl bnNlIGJlY2F1c2Ugb2Ygc29tZXRoaW5nIGVsc2UKPiA+Pj5JIGRpZG4ndCByZWFsaXplIDopCj4g Pj5JIGRvbid0IHRoaW5rIHRoaXMgaXMgYSBnb29kIGlkZWEuIFRoZSB3b3JrIGxvb3AgYXNwZWN0 IHNlZW1zIGxpa2UgYSB2ZXJ5Cj4gPj5jb21wbGV4IHNvbHV0aW9uIHNvbHV0aW9uIHRvIGEgcHJv YmxlbSB0aGF0IGlzIHJlbGF0aXZlbHkgc2ltcGxlLiBJbiBhCj4gPj5kaXNjdXNzaW9uIHdpdGgg RGFuaWVsLCBoZSBpbmRpY2F0ZWQgdGhhdCBhZGRpbmcgYSB3b3JrIGxvb3AgaXMgc29tZXRoaW5n IHRvCj4gPj5iZSBhdm9pZGVkIHVubGVzcyBpdCdzICpyZWFsbHkqIG5lY2Vzc2FyeSwgYXMgdGhl eSBhcmUgcHJvbmUgdG8gcmFjZQo+ID4+Y29uZGl0aW9ucy4gSW4gdGhpcyBjYXNlLCBJIGp1c3Qg ZG9uJ3Qgc2VlIHRoYXQgaXQncyBuZWNlc3NhcnkuCj4gPlRoZSB3b3JrcXVldWUgdGhpbmcgd2Fz IGp1c3QgYW4gaWRlYSB0byBpbXBsZW1lbnQgYSBzb2x1dGlvbiBmb3IgdGhlCj4gPnJlYWwgcHJv YmxlbS4gSSB0aGluayB3ZSBzaG91bGQgYmUgZm9jdXNpbmcgYWJvdXQgZGlzY3Vzc2luZyB0aGUg ZmFjdAo+ID50aGF0IHdlJ3JlIG5vdCB0YWtpbmcgaTkxNV9ob3RwbHVnX3dvcmtfZnVuYygpIGlu dG8gY29uc2lkZXJhdGlvbiB3aGVuCj4gPmRvaW5nIHRoZSBjb21wbGlhbmNlIHRlc3RpbmcsIG5v dCBvbiB0aGUgZmFjdCB0aGF0IG9uZSBvZiB0aGUgcG9zc2libGUKPiA+aW1wbGVtZW50YXRpb25z IGNvdWxkIHVzZSBhIHdvcmtxdWV1ZS4gSSdkIHN0aWxsIGxpa2UgdG8gaGVhciB5b3VyCj4gPmFy Z3VtZW50cyBvbiB0aGF0Lgo+IEZhaXIgZW5vdWdoLgo+IAo+IFNvIEkndmUgYmVlbiBsb29raW5n IGludG8gdGhpcyBhbmQgd2h5IHRoZSBpOTE1X2hvdHBsdWdfd29ya19mdW5jIHdhc24ndAo+IHBh cnQgb2YgdGhpcy4gSXQgaXMsIGFzIHlvdSBzYWlkLCBhIHJlbGF0aXZlbHkgZnVuZGFtZW50YWwg Y29kZSBwYXRoIGZvcgo+IERpc3BsYXlwb3J0IHRocm91Z2ggdGhlIGRyaXZlci4gV2hhdCBJIGRp c2NvdmVyZWQgd2FzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcwo+IG5ldmVyIGNhbGxlZCBvbiBIU1cg KG15IHByaW1hcnkgdGVzdCB2ZWhpY2xlKSwgbWFpbmx5IGJlY2F1c2UKPiBjaGVja19saW5rX3N0 YXR1cygpIHJldHVybnMgSVJRX0hBTkRMRUQgaW5zdGVhZCBvZiBJUlFfTk9ORS4gVGhlIHdvcmsK PiBmdW5jdGlvbiBmb3IgSFNXIGlzIGk5MTVfZGlncG9ydF93b3JrX2Z1bmMsIHNvIHdoZW4gaXQg Z2V0cyB0aGUgSVJRX0hBTkRMRUQKPiByZXR1cm4gY29kZSwgaXQgZG9lc24ndCBmYWxsIHRocm91 Z2ggdG8gdGhlIGxlZ2FjeSBpOTE1X2hvdHBsdWdfd29ya19mdW5jCj4gaGFuZGxlci4gVGhpcyBp cyBpbXBvcnRhbnQgYmVjYXVzZSB0aGlzIGhhbmRsZXIgY2FsbHMgaW50ZWxfaHBkX2lycV9ldmVu dAo+IHdoaWNoIGlzIHdoZXJlIHRoZSAtPmRldGVjdCBjb25uZWN0b3IgZnVuY3Rpb24gaXMgY2Fs bGVkLiBBbmQKPiBpbnRlbF9kcF9kZXRlY3QoKSBpcyB3aGVyZSBhbGwgdGhlIGhhcHB5IGdvb2Ru ZXNzIGZvciBEaXNwbGF5cG9ydCBiZWdpbnMuCj4gCj4gVXAgdW50aWwgSSBkaXNjb3ZlcmVkIHRo aXMsIEkgaGFkIG1pc3Rha2VubHkgcHJvcGFnYXRlZCB0aGF0IHByb2JsZW0gZm9yd2FyZAo+IGlu IHRvIHRoZSBTU1QgY2FzZSBpbiBpbnRlbF9kcF9ob3RfcHVsc2UoKSBpbiBwYXRjaCA2IGJ5IHJl dHVybmluZwo+IElSUV9IQU5ETEVEIGluc3RlYWQgb2YgSVJRX05PTkUsIHdoaWNoIGlzIHdoYXQg dGhlIGNvZGUgd2FzIGRvaW5nIGZvciBTU1QKPiBwcmlvciB0byBwYXRjaCA2LiBXaXRoIHRoaXMg cHJvYmxlbSBjb3JyZWN0ZWQgKGFzIGl0IGlzIGluIHRoZSBsYXRlc3QgdXBkYXRlCj4gaW4gcGF0 Y2ggc2V0IFY2KSB0aGUgd29yayBmdW5jdGlvbnMgYXJlIG5vdyBjYWxsZWQgYXMgdGhleSBzaG91 bGQgYmUuIFRoZQo+IHBvaW50IGJlaW5nIHRoYXQgdGhpcyBvcGVucyB1cCB0aGUgcG9zc2liaWxp dHkgb2YgdXNpbmcgZWxlbWVudHMgYWxvbmcgdGhpcwo+IHBhdGggdG8gcGFzcyBjb21wbGlhbmNl IHRlc3RpbmcsIHRoZXJlYnkgY3JlYXRpbmcgYSBtb3JlIHZhbGlkIHRlc3QgY2FzZS4KPiAKPiBX aXRoIHRoaXMgaW4gbWluZCwgSSBhbSBub3Qgb3Bwb3NlZCB0byB1c2luZyBlbGVtZW50cyBhbG9u ZyB0aGF0IHBhdGggdG8KPiBzYXRpc2Z5IGNvbXBsaWFuY2UgcmVxdWlyZW1lbnRzICh0aGF0J3Mg dGhlIHNwaXJpdCBvZiB0aGUgdGVzdHMsIGFueXdheXMpCj4gYnV0IGFzIEkndmUgaW5kaWNhdGVk LCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0byB0YWtlIHNwZWNpYWwgc3RlcHMKPiAo bGlrZSB0aGUgZWRpZF9jb3JydXB0IGZsYWcpIGluIG9yZGVyIHRvIGRvIHRoZSByaWdodCB0aGlu Z3MgdG8gcGFzcyB0aGUKPiB0ZXN0cy4gSSBoYXZlIGNvbmNlcm5zIGFib3V0IHRyeWluZyB0byBk byB0aGF0IGF0IHRoaXMgcG9pbnQsIGFzIGl0IHJlcXVpcmVzCj4gc3Vic3RhbnRpYWwgcmV3b3Jr IHRvIHRoYXQgY29kZSBwYXRoIHRoYXQgaGF2ZSBhIHNpZ25pZmljYW50IGNoYW5jZSBvZgo+IGJy ZWFraW5nIHRoaW5ncy4gU28gdG8gYXZvaWQgdGhhdCwgIEkgcHJvcG9zZSB0aGF0IHRoaXMgcGF0 Y2ggYmUgbWVyZ2VkIG5vdwo+IHNvIHRoYXQgYSB3b3JraW5nIHNvbHV0aW9uIGlzIGluIHBsYWNl LiBUaGlzIGRpc2N1c3Npb24gc2hvdWxkIGNvbnRpbnVlIGFuZAo+IHdlIGNhbiBkZWNpZGUgd2hl cmUgdG8gcHV0IHRoaW5ncyBpbiB0aGUgaG90cGx1Z193b3JrIHBhdGggdG8gc2F0aXNmeSB0aGUK PiBjb21wbGlhbmNlIHJlcXVpcmVzIG92ZXIgdGhlIGNvdXJzZSBvZiBzb21lIGZvbGxvd3VwIHBh dGNoZXMuCgpJJ3ZlIGxvb2tlZCBhIGJpdCBhdCBhbGwgdGhpcyBhbmQgSSB0aGluayB0aGUgb3Ro ZXIgaXNzdWUgaGVyZSBpcyB0aGUKcGxhY2VtZW50IG9mIGludGVsX2RwX2hhbmRsZV90ZXN0X3Jl cXVlc3QgaW4gY2hlY2tfbGlua19zdGF0dXMuIFRoaXMgaGFzCmJlZW4gZG9uZSBhbG1vc3QgNCB5 ZWFycyBhZ28gaW4KCmNvbW1pdCBhNjBmMGUzOGQ3MmE1ZTI0MDg1ZDZlN2UyN2E0Y2FkYzIwYWUy NjhhCkF1dGhvcjogSmVzc2UgQmFybmVzIDxqYmFybmVzQHZpcnR1b3VzZ2Vlay5vcmc+CkRhdGU6 ICAgVGh1IE9jdCAyMCAxNTowOToxNyAyMDExIC0wNzAwCgogICAgZHJtL2k5MTU6IGFkZCBEUCB0 ZXN0IHJlcXVlc3QgaGFuZGxpbmcKCmJ1dCBuZXZlciBjb250YWluZWQgKHVwIHRvIHRoaXMgcG9p bnQpIGFueSBmdW5jdGlvbmFsIGNvZGUuIEl0IHdhcyBob3dldmVyCmR1dGlmdWxseSBtb3ZlZCBh cm91bmQgdG9nZXRoZXIgd2l0aCB0aGUgb3RoZXIgY29kZS4gQW5kIHdheSBiYWNrIHRoZQpwbGFj ZW1lbnQgZXZlbiBtYWRlIHNvbWUgc2Vuc2UgLSBjaGVja19saW5rX3N0YXR1cyB3YXMgY2FsbGVk CnVuY29uZGl0aW9uYWxseSBmcm9tIG91ciBob3RfcGx1ZyBoYW5kbGVyLiBCdXQgc2luY2UgdGhl IE1TVCByZXdvcmsgKGFuZCBhCmZldyBvdGhlciB0aGluZ3MpIGhhcHBlbmVkIHRoYXQgaGFzIGJl ZW4gY2hhbmdlZCBwcmV0dHkgcmFkaWNhbGx5IGFuZCB0aGUKY3VycmVudCBwbGFjZSB3aGVyZSB0 aGUgdGVzdCByZXF1ZXN0IGhhbmRsZXIgaXMgY2FsbGVkIGp1c3QgZG9lc24ndCBzZWVtCnRvIG1h a2UgdGhhdCBtdWNoIHNlbnNlIGFueSBtb3JlLgoKV2hpbGUgSSBzdGFydGVkIHB1bGxpbmcgaW4g cGF0Y2hlcyBJIGFsc28gbm90aWNlZCBvdGhlciBwbGFjZXMgd2hlcmUgd2UKZHVwbGljYXRlIGV4 aXN0aW5nIGxvZ2ljIChlLmcuIHRoZSBkcGNkIHJlYWQpLCBzbyB0aGlzIGlzbid0IGp1c3QgYWJv dXQKdGhlIGVkaWQuCgpUaGUgb3RoZXIgYXNwZWN0IGhlcmUgaXMgdGhhdCBub3dhZGF5cyB3ZSBk byBjYWNoZSB0aGUgZWRpZCBmb3IgZHAgcG9ydHMKYWdncmVzc2l2ZWx5LCB3aGljaCBtZWFucyBp ZiB3ZSBkb24ndCByZWFkIHRoZSBlZGlkIHRoZSBrZXJuZWwgd2lsbCBpbmRlZWQKa2VlcCBvbiB1 c2luZyBhIHN0YWxlIG9uZS4gSGVuY2UgdGhlcmUncyBhIGdvb2QgcmlzayB0aGF0IHdlIGRvbid0 IGp1c3QKaGF2ZSBhIG1pbm9yIHBpZWNlIG9mIGR1Y3QtdGFwZSB0byBrZWVwIHRoZSBzb21ld2hh dCBzdHJhbmdlIGV4cGVjdGF0aW9ucwpvZiBEUCBjb21wbGlhbmNlIHRlc3RlcnMgaGFwcHkgYnV0 IG1pZ2h0IGJlIGhpZGluZyBhIHJlYWwgYnVnIGluIG91ciBEUApjb2RlLiBHaXZpbmcgaG93IG1h bnkgd2UndmUgaGFkIHRoYXQgc2VlbXMgZmFpcmx5IGxpa2VseSBhbmQgSSdtIG5vdCBoYXBweQp3 aXRoIHN3ZWVwaW5nIHRoaXMgdW5kZXIgdGhlIHJ1Zy4gVGhpcyBkZWZpbml0ZWx5IG5lZWRzIGEg c29saWQKYW5hbHlzaXMgYW5kIGV4cGxhbmF0aW9uIGVpdGhlciB3YXkgKGkuZS4gd2hldGhlciB0 aGlzIGlzIGEgYnVnIG9yIGp1c3QgYW4Kb3Zlcmx5IHN0cmljdCBkcCBjb21wbGlhbmNlIHRlc3Rl ciByZXF1aXJlbWVudCkuCgpGaW5hbGx5IHRoZXJlJ3MgdGhlIGRwIGhvdHBsdWcgaGFuZGxpbmcu IEV2ZXIgc2luY2UgTVNUIHN1cHBvcnQgd2FzIG1lcmdlZAp0aGlzIGhhcyBhIGJlZW4gYSBsb3Qg b2YgZnVuIGFuZCB0b29rIHVzIGEgd2hpbGUgdG8gbWFrZSBpdCB3b3JrIGNvcnJlY3RseQotIGxv dHMgb2YgZGVhZGxvY2tzIGFuZCBvdGhlciBpc3N1ZXMuIEFuZCBnaXZlbiB0aGUgYWJvdmUgd2Ug c3RpbGwgc2VlbSB0bwpoYXZlIHJlZ3Jlc3Npb25zIGR1ZSB0byBNU1Qgc3VwcG9ydCwgb3IgYXQg bGVhc3QgZXZpZGVuY2UgZm9yIHN1Y2guIFNpbmNlCnRoaXMgaXMgYSBmYWlybHkgZnJhZ2lsZSBw aWVjZSBvZiBjb2RlLCB3aGljaCBpcyBhbHNvIG5vdCB0aGF0IHdlbGwtdGVzdGVkCih3ZSBkb24n dCBoYXZlIGFueSBNU1QgaHcgaW4gb3VyIHRlc3QgbWF0cml4IHlldCkgSSBwcmVmZXIgdG8ga2Vl cCBjaGFuZ2VzCnRvIGEgbWluaW11bS4gTWVyZ2luZyB0aGVzZSBwYXRjaGVzIGhlcmUgZmlyc3Qg YW5kIHRoZW4gcG90ZW50aWFsbHkKdW5kb2luZyB0aGVtIGFnYWluIGJlY2F1c2UgdGhlIGJ1ZyBo YXMgYmVlbiB0aGUgKG1pcylwbGFjZW1lbnQgb2YgdGhlIHRlc3QKcmVxdWVzdCBoYW5kbGVyIGlu IHRoZSBNU1QgcGF0Y2hlcyBmZWVscyB0b28gcmlza3kuCgpHaXZlbiBhbGwgdGhhdCBJJ2QgbGlr ZSB0byBob2xkIG9mZiBtZXJnaW5nIHRoZXNlIHBhdGNoZXMgdGhhdCByZXdvcmsgdGhlCmNvZGUg YXJvdW5kIHRoZSBjaGVja19saW5rX3N0YXR1cyBmdW5jdGlvbiB1bnRpbCB3ZSBoYXZlIGNsYXJp dHkgaGVyZS4KCkkndmUgcHVsbGVkIGluIHRoZSBvdGhlciBwYXRjaGVzIG1lYW53aGlsZSB3aGlj aCBhcmUgcmV2aWV3ZWQgYW5kIHJlYWR5LiBJCmFsc28gdGhpbmsgd2UgY2FuIHB1bGwgaW4gdGhl IGRybV9lZGlkLmMgcGF0Y2ggd2l0aCB0aGUgc3RhdGlzdGljcyBjb2RlIHdlCm5lZWQgZm9yIGNv bXBsaWFuY2UgdGVzdGluZyBhaGVhZCBvZiByZXNvbHZpbmcgdGhlIGFib3ZlIG9wZW5zLiBBbmQg aXQKd291bGQgYmUgZ29vZCB0byBnZXQgc29tZSBmZWVkYmFjayBmcm9tIG90aGVyIChub24taW50 ZWwpIGRybSBkZXZlbG9wZXJzCmJlZm9yZWhhbmQsIHRoZSBjaGFuZ2VzIGFyZSBxdWl0ZSBpbnZh c2l2ZSBpbiBzb21lIHBhcnRzLgoKSSd2ZSBjaGF0dGVkIGEgbG90IHdpdGggVG9kZCBhbmQgUGF1 bG8gYW5kIEkgdGhpbmsgbXkgZGVjaXNpb24gaGVyZSBhbmQKdGhlIHJvdWdoIHBsYW4gbGFpZCBv dXQgaXMgdGhlIGJlc3QgY2hvaWNlIEkgaGF2ZSBmcm9tIGEgdGVjaG5pY2FsIHBvaW50Cm9mIHZp ZXcuCgpUaGFua3MsIERhbmllbAotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwg SW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK