From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [PATCH v2 5/5] drm/vkms: Implement CRC debugfs API Date: Wed, 18 Jul 2018 14:44:18 -0400 Message-ID: <20180718184418.GD20359@art_vandelay> References: <20180716182256.GY20303@art_vandelay> <20180716235220.GA12258@haneenDRM> <20180717204316.GA20303@art_vandelay> <20180717210503.GC20359@art_vandelay> <20180718162434.GA1417@haneenDRM> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yb0-x231.google.com (mail-yb0-x231.google.com [IPv6:2607:f8b0:4002:c09::231]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8F8EF896FA for ; Wed, 18 Jul 2018 18:44:20 +0000 (UTC) Received: by mail-yb0-x231.google.com with SMTP id c3-v6so2240460ybi.13 for ; Wed, 18 Jul 2018 11:44:20 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180718162434.GA1417@haneenDRM> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Haneen Mohammed Cc: rodrigosiqueiramelo@gmail.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBKdWwgMTgsIDIwMTggYXQgMDc6MjQ6MzRQTSArMDMwMCwgSGFuZWVuIE1vaGFtbWVk IHdyb3RlOgo+IEZpcnN0LCBqdXN0IHNvIHlvdSBoYXZlIHRoZSBjb21wbGV0ZSB2aWV3LCB0aGlz IGlzIHRoZSBtaXNzaW5nIHBhcnQgaW4gdGhpcyBwYXRjaDoKPiAtLS0tLS0gdmttc19jcmMuYwo+ IHN0YXRpYyB1aW50MzJfdCBfdmttc19nZXRfY3JjKHN0cnVjdCB2a21zX2NyY19kYXRhICpjcmNf ZGF0YSkKPiB7Cj4gCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gJmNyY19kYXRhLT5mYjsK PiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqID0gZHJtX2dlbV9mYl9nZXRfb2JqKGZi LCAwKTsKPiAJc3RydWN0IHZrbXNfZ2VtX29iamVjdCAqdmttc19vYmogPSBkcm1fZ2VtX3RvX3Zr bXNfZ2VtKGdlbV9vYmopOwo+IAl1MzIgY3JjID0gMDsKPiAJaW50IGkgPSAwOwo+IAl1bnNpZ25l ZCBpbnQgeCA9IGNyY19kYXRhLT5zcmMueDEgPj4gMTY7Cj4gCXVuc2lnbmVkIGludCB5ID0gY3Jj X2RhdGEtPnNyYy55MSA+PiAxNjsKPiAJdW5zaWduZWQgaW50IGhlaWdodCA9IGRybV9yZWN0X2hl aWdodCgmY3JjX2RhdGEtPnNyYykgPj4gMTY7Cj4gCXVuc2lnbmVkIGludCB3aWR0aCA9IGRybV9y ZWN0X3dpZHRoKCZjcmNfZGF0YS0+c3JjKSA+PiAxNjsKPiAJdW5zaWduZWQgaW50IGNwcCA9IGZi LT5mb3JtYXQtPmNwcFswXTsKPiAJdW5zaWduZWQgaW50IHNyY19vZmZzZXQ7Cj4gCXVuc2lnbmVk IGludCBzaXplX2J5dGUgPSB3aWR0aCAqIGNwcDsKPiAJdm9pZCAqdmFkZHIgPSB2a21zX29iai0+ dmFkZHI7Cj4gCj4gCWlmIChXQVJOX09OKCF2YWRkcikpCj4gCQlyZXR1cm4gY3JjOwo+IAo+IAlm b3IgKGkgPSB5OyBpIDwgeSArIGhlaWdodDsgaSsrKSB7Cj4gCQlzcmNfb2Zmc2V0ID0gZmItPm9m ZnNldHNbMF0gKyAoaSAqIGZiLT5waXRjaGVzWzBdKSArICh4ICogY3BwKTsKPiAJCWNyYyA9IGNy YzMyX2xlKGNyYywgdmFkZHIgKyBzcmNfb2Zmc2V0LCBzaXplX2J5dGUpOwo+IAl9Cj4gCj4gCXJl dHVybiBjcmM7Cj4gfQo+IAo+IHZvaWQgdmttc19jcmNfd29ya19oYW5kbGUoc3RydWN0IHdvcmtf c3RydWN0ICp3b3JrKQo+IHsKPiAJc3RydWN0IHZrbXNfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9 IGNvbnRhaW5lcl9vZih3b3JrLAo+IAkJCQkJCXN0cnVjdCB2a21zX2NydGNfc3RhdGUsCj4gCQkJ CQkJY3JjX3dvcmspOwo+IAlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBjcnRjX3N0YXRlLT5iYXNl LmNydGM7Cj4gCXN0cnVjdCB2a21zX291dHB1dCAqb3V0ID0gZHJtX2NydGNfdG9fdmttc19vdXRw dXQoY3J0Yyk7Cj4gCj4gCWlmIChjcnRjX3N0YXRlICYmIG91dC0+Y3JjX2VuYWJsZWQpIHsKPiAJ CXUzMiBjcmMzMiA9IF92a21zX2dldF9jcmMoJmNydGNfc3RhdGUtPmRhdGEpOwo+IAkJdW5zaWdu ZWQgaW50IG5fZnJhbWUgPSBjcnRjX3N0YXRlLT5uX2ZyYW1lOwo+IAo+IAkJZHJtX2NydGNfYWRk X2NyY19lbnRyeShjcnRjLCB0cnVlLCBuX2ZyYW1lLCAmY3JjMzIpOwo+IAl9Cj4gfQo+IAo+IGlu dCB2a21zX3NldF9jcmNfc291cmNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgY29uc3QgY2hhciAq c3JjX25hbWUsCj4gCQkJc2l6ZV90ICp2YWx1ZXNfY250KQo+IHsKPiAJc3RydWN0IHZrbXNfb3V0 cHV0ICpvdXQgPSBkcm1fY3J0Y190b192a21zX291dHB1dChjcnRjKTsKPiAKPiAJaWYgKCFzcmNf bmFtZSkgewo+IAkJb3V0LT5jcmNfZW5hYmxlZCA9IGZhbHNlOwo+IAl9IGVsc2UgaWYgKHN0cmNt cChzcmNfbmFtZSwgImF1dG8iKSA9PSAwKSB7Cj4gCQlvdXQtPmNyY19lbmFibGVkID0gdHJ1ZTsK PiAJfSBlbHNlIHsKPiAJCW91dC0+Y3JjX2VuYWJsZWQgPSBmYWxzZTsKPiAJCXJldHVybiAtRUlO VkFMOwo+IAl9Cj4gCj4gCSp2YWx1ZXNfY250ID0gMTsKPiAKPiAJcmV0dXJuIDA7Cj4gfQo+IC0t LSBlbmQgdmttc19jcmMuYwoKL3NuaXAKCj4gPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCB2a21zX2Ny dGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ID4gPiA+ID4gKwkJCQkg ICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQo+ID4gPiA+ID4gPiArewo+ ID4gPiA+ID4gPiArCXN0cnVjdCB2a21zX291dHB1dCAqdmttc19vdXRwdXQgPSBkcm1fY3J0Y190 b192a21zX291dHB1dChjcnRjKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCXNwaW5fbG9j a19pcnEoJnZrbXNfb3V0cHV0LT5sb2NrKTsKPiA+ID4gPiA+IAo+ID4gPiA+ID4gSG1tLCB5b3Ug Y2FuJ3QgbG9jayBhY3Jvc3MgYXRvbWljX2JlZ2luL2ZsdXNoLiBXaGF0IGlzIHRoaXMgcHJvdGVj dGluZyBhZ2FpbnN0Pwo+ID4gPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gSSBkaWQgdGhpcyBwZXIg RGFuaWVsIHJlY29tbWVuZGF0aW9uOgo+ID4gPiA+IDEtIHNwaW5fbG9ja19pcnEgLT4gdmttc19j cnRjX2F0b21pY19iZWdpbgo+ID4gPiA+IDItIHVwZGF0ZSB2a21zX2NyY19kYXRhIGFuZCBnZXQg cmVmIHRvIGZiIC0+IHZrbXNfcHJpbWFyeV9wbGFuZV91cGRhdGUKPiA+ID4gPiAzLSBzcGluX3Vu bG9ja19pcnEgYWZ0ZXIgdmJsYW5rIGV2ZW50IC0+IHZrbXNfY3J0Y19hdG9taWNfZmx1c2gKPiA+ ID4gCj4gPiA+IEkgdGhpbmsgSSdtIGludGVycHJldGluZyBoaXMgbWFpbCBhIGxpdHRsZSBkaWZm ZXJlbnRseS4gVGhlIHBvaW50IG9mIHRoZQo+ID4gPiBzcGlubG9jayBpcyB0byBwcm90ZWN0IHRo ZSBwb2ludGVyIHRvIHRoZSBjcmNfZGF0YSBpbiB2a21zX2NydGMgKHJpZ2h0IG5vdyBpdCdzCj4g PiA+IG5vdCBhIHBvaW50ZXIsIGJ1dCBpdCBzaG91bGQgYmUpLgo+ID4gPiAKPiA+ID4gU28gSSB0 aGluayB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgo+ID4gPiAtIENoYW5nZSBjcmNfZGF0 YSB0byBhIHBvaW50ZXIKPiA+ID4gLSBJbiBwbGFuZV91cGRhdGUsIGFsbG9jYXRlIG5ldyBtZW1v cnkgdG8gaG9sZCBjcmNfZGF0YSBhbmQsIHVuZGVyIHRoZSBzcGlubG9jaywKPiA+ID4gICB1cGRh dGUgdGhlIGNyY19kYXRhIHRvIHBvaW50IHRvIHRoZSBuZXcgbWVtb3J5IChhZGQgYSBXQVJOX09O IGlmIHRoZSBwb2ludGVyCj4gPiA+ICAgaXMgTlVMTCkKPiA+ID4gLSBJbiB0aGUgaHJ0aW1lciwg d2hpbGUgaG9sZGluZyB0aGUgc3BpbmxvY2ssIHRha2UgdGhlIHBvaW50ZXIgZnJvbSBjcmNfZGF0 YQo+ID4gPiAgIGludG8gYSBsb2NhbCB2YXJpYWJsZSBhbmQgY2xlYXIgdGhlIGNydGMtPmNyY19k YXRhIHBvaW50ZXIKPiA+ID4gLSBQYXNzIHRoZSBwb2ludGVyIChmcm9tIHRoZSBsb2NhbCB2YXJp YWJsZSkgdG8gdGhlIGNyY193b3JrZXIKPiA+ID4gCj4gCj4gVGhlIHByb2JsZW0gd2l0aCB0aGlz IGFwcHJvYWNoIGlzIG1hbmFnaW5nIHRoZSBwb2ludGVyIGFsbG9jYXRpb24gYW5kCj4gZGVhbGxv Y2F0aW9uLiBJZiBJIGdyYWIgaXQgaW4gdGhlIGhydGltZXIsIHRoZW4gd2hlcmUvd2hlbiBzaG91 bGQgSSBmcmVlIGl0Pwo+IEkgY2FuJ3QgYWZ0ZXIgdGhlIGNyYyB3b3JrZXIgaXMgZG9uZSB3aXRo IGl0IGJlY2F1c2Ugd2hhdCBJIG5vdGljZWQgaXMKPiB0aGF0IHRoZSBjcmMgY29tcHV0YXRpb24g aXMgZXhwZWN0ZWQgdG8gcnVuIG11bHRpcGxlIHRpbWVzIGFmdGVyIG9uZQo+IHBsYW5lX2F0b21p Y191cGRhdGUuCj4gCj4gPiA+IEkgZG9uJ3QgdGhpbmsgeW91IG5lZWQgdG8gaG9sZCB0aGUgc3Bp bmxvY2sgYWNyb3NzIHRoZSBhdG9taWMgaG9va3MsIGp1c3QgZ3JhYgo+ID4gPiBpdCBpbiBwbGFu ZV91cGRhdGUuCj4gPiAKPiAKPiBJIGFza2VkIERhbmllbCBpbiBpcmMgYWJvdXQgcmVsZWFzaW5n IHRoZSB2a21zX291dHB1dC0+bG9jayBpbiB0aGUgYmVnZ2lubmluZyBvZiBhdG9taWNfZmx1c2gK PiB0byBhdm9pZCBtb2RpZnlpbmcgdGhlIGV2ZW50X2xvY2sgYW5kIGhlIG1lbnRpb25lZCB0aGF0 ICJvdXRwdXQtPmxvY2sgbXVzdCB3cmFwIHRoZSBldmVudAo+IGhhbmRsaW5nIGNvZGUgY29tcGxl dGVseSBzaW5jZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmbGlwIGV2ZW50Cj4gYW5k IHRoZSBjcmMgYWxsIG1hdGNoIHVwIi4KPiAKPiBTbyBtYXliZSBJIGNhbiBncmFiIHRoZSBzcGlu bG9jayBpbiBwbGFuZV9hdG9taWNfdXBkYXRlIGFuZCByZWxlYXNlIGl0IGF0Cj4gdGhlIGVuZCBv ZiBjcnRjX2F0b21pY19mbHVzaD8gSXMgcGxhbmVfYXRvbWljX3VwZGF0ZSBhbHdheXMgY2FsbGVk Cj4gYmVmb3JlIGNydGNfYXRvbWljX2ZsdXNoPwo+IAo+IE90aGVyd2lzZSBpZiBJIGdyYWIgdGhl IHNwaW5sb2NrIGluIGF0b21pY19iZWdpbiBJIHdvbid0IGJlIGFibGUgdG8KPiB1c2UgcG9pbnRl ciBmb3IgY3JjX2RhdGEgYW5kIGFsbG9jYXRlIGl0IGluIHBsYW5lX2F0b21pY191cGRhdGUgc2lu Y2UKPiBJJ2xsIGJlIGhvbGRpbmcgYSBzcGlubG9jayBhbHJlYWR5LiAKPiAKPiBJIGhhdmUgYmFz ZWQgdGhpcyBwYXRjaCBvbiBEYW5pZWwncyBzZWNvbmQgZmVlZGJhY2sgdG8gbXkgZW1haWwKPiAi W1BBVENIXSBkcm0vdmttczogVXBkYXRlIENSQyBzdXBwb3J0IGFmdGVyIGxvY2sgcmV2aWV3IiB3 aGljaCBJIGRpZG4ndAo+IGNjIHRoZSBkcmkgbWFpbGluZyBsaXN0IGluIGl0LCBxdW90aW5nIERh bmllbDoKPiAKPiAiT3ZlcmFsbCBmbG93Ogo+IDEuIGluIGNydGNfZnVuY3MtPmF0b21pY19iZWdp biBncmFiIHRoZSBzcGlubG9jaywgdG8gbWFrZSBzdXJlCj4gZXZlcnl0aGluZyBpcyB2aXNpYmxl IGNvbXBsZXRlbHkgb3Igbm90IGF0IGFsbCB0byB0aGUgdmJsYW5rIGhhbmRsZXIuCj4gQWxzbyB1 cGRhdGUgYSBwb2ludGVyIHRvIHRoZSB2a21zX2NydGNfc3RhdGUgaW4gdmttc19vdXRwdXQtPmNy Y19kYXRhCj4gKG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuCj4gMi4gY29weSB0aGUgcGxhbmUgZGF0 YSAobGlrZSB5b3UgZG8gaGVyZSkgaW4gcGxhbmVfZnVuY3MtPmF0b21pY19jb21taXQuCj4gMy4g ZHJvcCB0aGUgc3BpbmxvY2sgaW4gY3J0Y19mdW5jcy0+YXRvbWljX2ZsdXNoIGFmdGVyIHRoZSB2 YmxhbmsKPiBldmVudCBpcyBhcm1lZC4KPiAKPiBJbiB0aGUgdmJsYW5rIGhydGltZXIgaGFuZGxl cjoKPiAxLiBncmFiIHRoZSBzcGlubG9jawo+IDIuIGRybV9jcnRjX2hhbmRsZV92YmxhbmsoKSAt IHdlIG11c3QgZG8gdGhpcyB3aGlsZSBob2xkaW5nIHRoZQo+IHNwaW5sb2NrLCBvdGhlcndpc2Ug dGhlIGV2ZW50IGFuZCBjcmMgbWlnaHQgZ2V0IG91dCBvZiBzeW5jLiBBbHNvIGdyYWIKPiB0aGUg Y3VycmVudCB2YmxhbmsgbnVtYmVyIGhlcmUgYW5kIHN0b3JlIGl0IHNvbWV3aGVyZSBpbgo+IHZr bXNfY3J0Y19zdGF0ZSBzbyB0aGF0IHRoZSB3b3JrZXIgY2FuIHVzZSB0aGUgcmlnaHQgb25lLgo+ IDMuIGxhdW5jaCB0aGUgd29ya2VyLiBOb3RlIHRoYXQgdGhlIHN0cnVjdF93b3JrIG5lZWRzIHRv IGJlIHdpdGhpbiB0aGUKPiB2a21zX2NydGNfc3RhdGUgc3RydWN0dXJlLCBvdGhlcndpc2UgdGhl IGNyYyBjb21wdXRhdGlvbiB3b3JrZXIKPiBkb2Vzbid0IGtub3cgcmVhbGx5IGZvciB3aGljaCBk YXRhIGl0IHNob3VsZCBjb21wdXRlIHRoZSBjcmMgLSBqdXN0Cj4gaGF2aW5nIG9uZSBjb3B5IGlu IGRhdGFbMV0gZG9lc24ndCByZWFsbHkgc29sdmUgdGhpcyByYWNlLgo+IDQuIGRyb3Agc3Bpbmxv Y2sKCk9rLCBJIHRoaW5rIEkgdW5kZXJzdGFuZCB3aGF0IHdlJ3JlIHRyeWluZyB0byBkby4gSXQg c2VlbXMgbGlrZSB0aGUgc3BpbmxvY2sgaXMKc2ltdWxhdGluZyB3aGF0IHdlIHdvdWxkIGRvIGlu IGh3IGJ5IHRlbGxpbmcgdGhlIGRpc3BsYXkgY29udHJvbGxlciBub3QgdG8gbGF0Y2gKaW4gbmV3 IGFkZHJlc3NlcyB1bnRpbCB3ZSdyZSByZWFkeS4gQnkgYmxvY2tpbmcgdGhlIHZibGFuayBoYW5k bGVyIChhbmQsIGJ5CmV4dGVuc2lvbiwgdGhlIGV2ZW50KSwgd2UncmUgZGVsYXkgc2VuZGluZyBh biBldmVudCBvdXQgdW50aWwgdGhlIGNyYyBkYXRhIGlzCmNvbXBsZXRlLiBJbiBodywgdGhpcyB3 b3VsZCBiZSBhIGRyb3BwZWQgZnJhbWUuCgpJJ2QgcHJvYmFibHkgcHJlZmVyIGRvaW5nIHNvbWV0 aGluZyBtb3JlIHNpbWlsYXIgdG8gaHcuIFNvbWV0aGluZyBsaWtlIHNpbXVsYXRpbmcKYSBsYXRj aCB0byB0ZWxsIHRoZSB2YmxhbmsgaGFuZGxlciB0byBza2lwIHNlbmRpbmcgdGhlIGV2ZW50IHVu dGlsIHRoZSBuZXh0CnRpbWVyIGludGVycnVwdCwgaW5zdGVhZCBvZiBibG9ja2luZyBpdC4gSSB0 aGluayB0aGF0IHdvdWxkIGF2b2lkIGhhdmluZyB0byBob2xkCnRoZSBzcGlubG9jayBhY3Jvc3Mg YmVnaW4vPGV2ZXJ5dGhpbmc+L2ZsdXNoLiBIb3dldmVyIERhbmllbCBpcyBzbWFydGVyIHRoYW4g SSBhbSwKc28gSSdsbCBnbyB3aXRoIGhpcyBzdWdnZXN0aW9uIHNpbmNlIEknbSBzdXJlIHRoZXJl J3MgYSB2ZXJ5IGdvb2QgcmVhc29uIHRoaXMgaXMgYQp2ZXJ5IGJhZCBpZGVhIDotKQoKSW4gdGhh dCBjYXNlLCB3aGF0IHlvdSBoYXZlIG1ha2VzIHNlbnNlIHRvIG1lLCBzbyBpZiB3ZSBjb3VsZCBm bHVzaCB0aGUgd29yawppdGVtIGluc3RlYWQgb2YgdGhlIHdob2xlIHF1ZXVlLCBJIHRoaW5rIHdl J3JlIHRoZXJlLgoKU2VhbgoKCj4gCj4gU28gb25lIGJpZyBwcm9ibGVtIHdlIGhhdmUgaGVyZSBz dGlsbCBpcyB3aGF0IGhhcHBlbnMgaWYgdGhlIGNyYwo+IHdvcmtlciBmYWxscyBiZWhpbmQgd2l0 aCBjb21wdXRpbmcgY3Jjcy4gVGhlcmUncyAyIGNhc2VzLCBsZXQncyBmaXJzdAo+IGxvb2sgYXQg aG93IHRvIGZpeGUgdGhlIGNyYyB3b3JrZXIgZmFsbGluZyBiZWhpbmQgYXRvbWljIHVwZGF0ZXMu IFRoZQo+IHByb2JsZW0gdGhlcmUgaXMgdGhhdCB0aGUgbmV4dCBhdG9taWMgdXBkYXRlIG1pZ2h0 IGZyZWUgdGhlCj4gdmttc19jcnRjX3N0YXRlIHN0cnVjdHVyZSBiZWZvcmUgdGhlIHdvcmtlciBp cyBkb25lIHdpdGggaXQuIFRoYXQncwo+IGZhaXJseSBlYXN5IHRvIGZpeDoKPiAtIGFkZCBhIGZs dXNoX3dvcmsgY2FsbCB0byB5b3VyIHZrbXNfY3J0Y19zdGF0ZV9kZXN0cm95IGZ1bmN0aW9uLiBU aGlzCj4gbWVhbnMgeW91IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgd29yayBhbHJlYWR5IGluCj4g dmttc19jcnRjX3N0YXRlX2R1cGxpY2F0ZSAoeW91J2xsIGNyZWF0ZSBib3RoIG9mIHRoZXNlIHdo ZW4gZG9pbmcgdGhlCj4gdmttc19jcnRjX3N0YXRlIHN1YmNsYXNzaW5nKS4KPiAtIDJuZCB3ZSBu ZWVkIHRvIG1ha2Ugc3VyZSBjcmMgd29ya2VycyBhcmUgcnVuIGluIG9yZGVyIGVhc2llc3QgZml4 Cj4gZm9yIHRoYXQgaXMgdG8gY3JlYXRlIHlvdXIgb3duIHByaXZhdGUgY3JjIHdvcmsgcXVldWUg KDEgcGVyIGNydGMgd2UKPiBoYXZlKSB3aXRoIHRoZSBXUV9PUkRFUkVEIGZsYWcuCj4gCj4gMm5k IGlzc3VlIGlmIHRoZSB2YmxhbmtzIGdldCBhaGVhZCBvZiB0aGUgY3JjIHdvcmtlci4gVGhpcyBo YXBwZW5zCj4gd2hlbiBlLmcuIHRoZXJlJ3Mgbm8gYXRvbWljIHVwZGF0ZXMsIGJ1dCAgd2Ugc3Rp bGwgd2FudCB0byBnZW5lcmF0ZSAxCj4gdmJsYW5rIHBlciBmcmFtZS4gVGhpcyBpcyBwcm9iYWJs eSBiZXR0ZXIgZG9uZSBpbiBhIGZvbGxvdy11cCBwYXRjaCwKPiBidXQgcm91Z2ggc29sdXRpb24g aXM6Cj4gLSBpbiB0aGUgdmJsYW5rIGhydGltZXIgY2hlY2sgd2hldGhlciB0aGUgd29yayBpcyBz dGlsbCBzY2hlZHVsZWQgYW5kCj4gbm90IHlldCBjb21wbGV0ZSAod2hpbGUgaG9sZGluZyB0aGUg c3BpbmxvY2spLiBpbiB0aGF0IGNhc2Ugc2ltcGx5Cj4gdGVsbCB0aGUgd29ya2VyIHRvIGZpbGwg b3V0IHRoZSBzYW1lIGNyYyBmb3IgbXVsdGlwbGUgdmJsYW5rcywgYnkKPiB1c2luZyBhIHZibGFu a19zZXFub19zdGFydC9lbmQuCj4gLSBpZiB0aGUgd29ya2VyIGlzIG5vdCBidXN5LCB0aGVuIHdl IHRlbGwgaXQgdG8gY29tcHV0ZSBhIG5ldyBjcmMgKGluCj4gY2FzZSBzb21ldGhpbmcgaW4gdGhl IGJ1ZmZlcnMgaGFzIGNoYW5nZWQgLSBpbiB0aGUgZnV0dXJlIHdlIG1pZ2h0Cj4gY2hhbmdlIHRo aXMgYmVoYXZpb3VyKS4iCj4gCj4gPiBTbyB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IHRoaXMsIEkg ZG9uJ3QgdGhpbmsgaXQncyBxdWl0ZSByaWdodC4gUGVyaGFwcyBJJ20KPiA+IG1pc3NpbmcgYW4g ZW1haWwgZnJvbSBEYW5pZWwsIG9yIChtb3JlIGxpa2VseSkgbWlzdW5kZXJzdGFuZGluZyB3aGF0 IHlvdSdyZQo+ID4gdHJ5aW5nIHRvIGRvLiBIb3dldmVyLCB0aGUgZW1haWwgSSByZWFkIHN1Z2dl c3RlZCBzdG9yaW5nIHRoZSBjcmNfZGF0YQo+ID4gdG8gYmUgY29uc3VtZWQgYnkgdGhlIGNyYyB3 b3JrZXIgaW4gdmttc19jcnRjLiBIb3dldmVyIGluIHRoaXMgcGF0Y2ggaXQncyBiZWluZwo+ID4g c3RvcmVkIChhbG9uZyB3aXRoIHRoZSB3b3JrIGl0ZW0pIGluIGNydGMgc3RhdGUuIEZ1cnRoZXIs IHRoZSBzdGF0ZSBjYW5ub3QgYmUKPiA+IGRlc3Ryb3llZCB3aXRob3V0IGNvbXBsZXRpbmcgdGhl IGNyY193b3JrLCB3aGljaCBraW5kIG9mIGRlZmVhdHMgdGhlIHB1cnBvc2Ugb2YKPiA+IHRoZSB3 b3JrcXVldWUgaW4gdGhlIGZpcnN0IHBsYWNlLgo+ID4gCj4gPiBTdG9yaW5nIGEgY29weSBvZiB0 aGUgY3JjX2RhdGEgaW4gY3J0YyBhbGxvd3MgeW91IHRvIGZyZWUgdGhlIGNydGNfc3RhdGUsIHNv IHlvdQo+ID4gY2FuIHN0YXJ0IHdvcmtpbmcgb24gdGhlIG5leHQgZnJhbWUgd2hpbGUgdGhlIGNy YyB3b3JrZXIgaXMgc2NoZWR1bGVkIGFuZCBwaWNrcwo+ID4gdXAgdGhlIGNyY19kYXRhIGZyb20g Y3J0Yy4gU3RvcmluZyB0aGUgY3JjX2RhdGEgaW4gY3J0Y19zdGF0ZSBhbmQgd2FpdGluZyBmb3IK PiA+IHRoZSB3b3JrIHRvIGZpbmlzaCBpcyBlYXNpZXIgc2luY2UgeW91IGRvbid0IG5lZWQgdG8g d29ycnkgYWJvdXQgY29weWluZyBhbmQKPiA+IGxvY2tpbmcgKHNvIG11Y2gpLiBIb3dldmVyLCBp dCBzZWVtcyBsaWtlIHdlJ3JlIGRvaW5nIGJvdGggaW4gdGhpcyBwYXRjaC4KPiA+IAo+ID4gQWdh aW4sIEknbSBsaWtlbHkganVzdCBub3QgdW5kZXJzdGFuZGluZyB3aGF0IHRoZSBnb2FsIG9mIHRo aXMgaXMsIHNvIGFueQo+ID4gY2xhcmlmaWNhdGlvbiB3b3VsZCBiZSBncmVhdGx5IGFwcHJlY2lh dGVkIDopCj4gPiAKPiA+IFNlYW4KPiA+IAo+ID4gPiAKPiA+ID4gU2Vhbgo+ID4gPiAKPiA+ID4g PiAKPiA+ID4gPiA+ID4gK30KPiA+ID4gPiA+ID4gKwoKL3NuaXAKCi0tIApTZWFuIFBhdWwsIFNv ZnR3YXJlIEVuZ2luZWVyLCBHb29nbGUgLyBDaHJvbWl1bSBPUwpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK