From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v3 04/14] drm/edid: parse YCBCR 420 videomodes from EDID Date: Thu, 15 Jun 2017 19:59:29 +0300 Message-ID: <20170615165929.GF12629@intel.com> References: <1497462465-14066-1-git-send-email-shashank.sharma@intel.com> <1497462465-14066-5-git-send-email-shashank.sharma@intel.com> <20170615144312.GC12629@intel.com> <61012ee7-eb13-2487-c6ca-39c2add259a2@intel.com> <20170615161254.GE12629@intel.com> <4c7df00c-2419-4e6a-c445-bbe5a5279439@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <4c7df00c-2419-4e6a-c445-bbe5a5279439@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Sharma, Shashank" Cc: ander.conselvan.de.oliveira@intel.com, intel-gfx@lists.freedesktop.org, Jose Abreu , dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdW4gMTUsIDIwMTcgYXQgMTA6MTg6NDBQTSArMDUzMCwgU2hhcm1hLCBTaGFzaGFu ayB3cm90ZToKPiBSZWdhcmRzCj4gCj4gU2hhc2hhbmsKPiAKPiAKPiBPbiA2LzE1LzIwMTcgOTo0 MiBQTSwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+ID4gT24gVGh1LCBKdW4gMTUsIDIwMTcgYXQg MDk6MDU6MTBQTSArMDUzMCwgU2hhcm1hLCBTaGFzaGFuayB3cm90ZToKPiA+PiBSZWdhcmRzCj4g Pj4KPiA+PiBTaGFzaGFuawo+ID4+Cj4gPj4KPiA+PiBPbiA2LzE1LzIwMTcgODoxMyBQTSwgVmls bGUgU3lyasOkbMOkIHdyb3RlOgo+ID4+PiBPbiBXZWQsIEp1biAxNCwgMjAxNyBhdCAxMToxNzoz NVBNICswNTMwLCBTaGFzaGFuayBTaGFybWEgd3JvdGU6Cj4gPj4+PiBIRE1JIDIuMCBzcGVjIGFk ZHMgc3VwcG9ydCBmb3IgWUNCQ1I0MjAgc3ViLXNhbXBsZWQgb3V0cHV0Lgo+ID4+Pj4gQ0VBLTg2 MS1GIGFkZHMgdHdvIG5ldyBibG9ja3MgaW4gRURJRCdzIENFQSBleHRlbnNpb24gYmxvY2tzLAo+ ID4+Pj4gdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCBzaW5rJ3MgWUNCQ1I0MjAgb3V0cHV0 IGNhcGFiaWxpdGllcy4KPiA+Pj4+Cj4gPj4+PiBUaGVzZSBibG9ja3MgYXJlOgo+ID4+Pj4KPiA+ Pj4+IC0gWUNCQ1I0MjB2ZGIoWUNCQ1IgNDIwIHZpZGVvIGRhdGEgYmxvY2spOgo+ID4+Pj4gVGhp cyBibG9jayBjb250YWlucyBWSUNzIG9mIHZpZGVvIG1vZGVzLCB3aGljaCBjYW4gYmUgc29wcG9y dGVkIG9ubHkKPiA+Pj4+IGluIFlDQkNSNDIwIG91dHB1dCBtb2RlIChOb3QgaW4gUkdCL1lDQkNS NDQ0LzQyMi4gSXRzIGxpa2UgYSBub3JtYWwKPiA+Pj4+IFNWRCBibG9jaywgdmFsaWQgZm9yIFlD QkNSNDIwIG1vZGVzIG9ubHkuCj4gPj4+Pgo+ID4+Pj4gLSBZQ0JDUjQyMGNtZGIoWUNCQ1IgNDIw IGNhcGFiaWxpdHkgbWFwIGRhdGEgYmxvY2spOgo+ID4+Pj4gVGhpcyBibG9jayBnaXZlcyBpbmZv cm1hdGlvbiBhYm91dCB2aWRlbyBtb2RlcyB3aGljaCBjYW4gc3VwcG9ydAo+ID4+Pj4gWUNCQ1I0 MjAgb3V0cHV0IG1vZGUgYWxzbyAoYWxvbmcgd2l0aCBSR0IsWUNCQ1I0NDQvNDIyIGV0YykgVGhp cwo+ID4+Pj4gYmxvY2sgY29udGFpbnMgYSBiaXRtYXAgaW5kZXggb2Ygbm9ybWFsIHN2ZCB2aWRl b21vZGVzLCB3aGljaCBjYW4KPiA+Pj4+IHN1cHBvcnQgWUNCQ1I0MjAgb3V0cHV0IHRvby4KPiA+ Pj4+IFNvIGlmIGJpdCAwIGZyb20gZmlyc3QgdmNiIGJ5dGUgaXMgc2V0LCBmaXJzdCB2aWRlbyBt b2RlIGluIHRoZSBzdmQKPiA+Pj4+IGxpc3QgY2FuIHN1cHBvcnQgWUNCQ1I0MjAgb3V0cHV0IHRv by4gQml0IDEgbWVhbnMgc2Vjb25kIHZpZGVvIG1vZGUKPiA+Pj4+IGZyb20gc3ZkIGxpc3QgY2Fu IHN1cHBvcnQgWUNCQ1I0MjAgb3V0cHV0IHRvbywgYW5kIHNvIG9uLgo+ID4+Pj4KPiA+Pj4+IFRo aXMgcGF0Y2ggYWRkcyB0d28gYml0bWFwcyBpbiBkaXNwbGF5J3MgaGRtaV9pbmZvIHN0cnVjdHVy ZSwgb25lIGVhY2gKPiA+Pj4+IGZvciBWQ0IgYW5kIFZEQiBtb2Rlcy4gSWYgdGhlIHNvdXJjZSBp cyBIRE1JIDIuMCBjYXBhYmxlLCB0aGlzIHBhdGNoCj4gPj4+PiBhZGRzOgo+ID4+Pj4gLSBWREIg bW9kZXMgKFlDQkNSIDQyMCBvbmx5IG1vZGVzKSBpbiBjb25uZWN0b3IncyBtb2RlIGxpc3QsIGFs c28gbWFrZXMKPiA+Pj4+ICAgICBhbiBlbnRyeSBpbiB0aGUgdmRiX2JpdG1hcCBwZXIgdmljLgo+ ID4+Pj4gLSBWQ0IgbW9kZXMgKFlDQkNSIDQyMCBhbHNvIG1vZGVzKSBvbmx5IGVudHJ5IGluIHRo ZSB2Y2JfYml0bWFwLgo+ID4+Pj4KPiA+Pj4+IENjOiBWaWxsZSBTeXJqYWxhIDx2aWxsZS5zeXJq YWxhQGxpbnV4LmludGVsLmNvbT4KPiA+Pj4+IENjOiBKb3NlIEFicmV1IDxqb2FicmV1QHN5bm9w c3lzLmNvbT4KPiA+Pj4+IENjOiBFbWlsIFZlbGlrb3YgPGVtaWwubC52ZWxpa292QGdtYWlsLmNv bT4KPiA+Pj4+Cj4gPj4+PiBWMjogQWRkcmVzc2VkCj4gPj4+PiAgICAgICBSZXZpZXcgY29tbWVu dHMgZnJvbSBFbWlsOgo+ID4+Pj4gICAgICAgLSBVc2UgMVVMTDw8aSBpbnN0ZWFkIG9mIDE8PGkg dG8gbWFrZSBzdXJlIHRoZSBvdXRwdXQgaXMgNjRiaXQuCj4gPj4+PiAgICAgICAtIFVzZSB0aGUg c3VnZ2VzdGVkIG1ldGhvZCBmb3IgdXBkYXRpbmcgZGJtYXAuCj4gPj4+PiAgICAgICAtIEFkZCBk b2N1bWVudGF0aW9uIGZvciBZQ0JDUjQyMF92Y2JfbWFwIHRvIGZpeCBrYnVpbGQgd2FybmluZy4K PiA+Pj4+Cj4gPj4+PiAgICAgICBSZXZpZXcgY29tbWVudHMgZnJvbSBWaWxsZToKPiA+Pj4+ICAg ICAgIC0gRG8gbm90IGV4cG9zZSB0aGUgWUNCQ1I0MjAgZmxhZ3MgaW4gdWFiaSBsYXllciwga2Vl cCBpdCBpbnRlcm5hbC4KPiA+Pj4+ICAgICAgIC0gU2F2ZSBhIG1hcCBvZiBZQ0JDUjQyMCBtb2Rl cyBmb3IgZnV0dXJlIHJlZmVyZW5jZS4KPiA+Pj4+ICAgICAgIC0gQ2hlY2sgZGIgbGVuZ3RoIGJl Zm9yZSB0cnlpbmcgdG8gcGFyc2UgZXh0ZW5kZWQgdGFnLgo+ID4+Pj4gICAgICAgLSBBZGQgYSB3 YXJuaW5nIGlmIHRoZXJlIGFyZSA+IDY0IG1vZGVzIGluIGNhcGFiaWxpdHkgbWFwIGJsb2NrLgo+ ID4+Pj4gICAgICAgLSBVc2UgeTQyMGNtZGIgaW4gZnVuY3Rpb24gbmFtZXMgYW5kIG1hY3JvcyB3 aGlsZSBkZWFsaW5nIHdpdGggdmNiCj4gPj4+PiAgICAgICAgIHRvIGJlIGFsaWduZWQgd2l0aCBz cGVjLgo+ID4+Pj4gICAgICAgLSBNb3ZlIHRoZSBkaXNwbGF5IGluZm9ybWF0aW9uIHBhcnNpbmcg YmxvY2sgYWhlYWQgb2YgbW9kZSBwYXJzaW5nCj4gPj4+PiAgICAgICAgIGJsb2Nrcy4KPiA+Pj4+ Cj4gPj4+PiBWMzogQWRkcmVzc2VkIGRlc2lnbi9yZXZpZXcgY29tbWVudHMgZnJvbSBWaWxsZQo+ ID4+Pj4gICAgICAgLSBEbyBub3QgYWRkIGZsYWdzIGluIHZpZGVvIG1vZGVzLCBlbHNlIHdlIGhh dmUgdG8gZXhwb3NlIHRoZW0gdG8gdXNlcgo+ID4+Pj4gICAgICAgLSBUaGVyZSBzaG91bGQgbm90 IGJlIGEgVUFCSSBjaGFuZ2UsIGFuZCBrZXJuZWwgc2hvdWxkIGRldGVjdCB0aGUKPiA+Pj4+ICAg ICAgICAgY2hvaWNlIG9mIHRoZSBvdXRwdXQgYmFzZWQgb24gdHlwZSBvZiBtb2RlLCBhbmQgdGhl IGJpdG1hcHMuCj4gPj4+PiAgICAgICAtIFVzZSBzdGFuZGFyZCBiaXRvcHMgZnJvbSBrZXJuZWwg Yml0bWFwIGhlYWRlciwgaW5zdGVhZCBvZiBjYWxjdWxhdGluZwo+ID4+Pj4gICAgICAgICBiaXQg cG9zaXRpb25zIG1hbnVhbGx5Lgo+ID4+Pj4KPiA+Pj4+IFNpZ25lZC1vZmYtYnk6IFNoYXNoYW5r IFNoYXJtYSA8c2hhc2hhbmsuc2hhcm1hQGludGVsLmNvbT4KPiA+Pj4+IC0tLQo+ID4+Pj4gICAg ZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgIHwgMTkzICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tCj4gPj4+PiAgICBpbmNsdWRlL2RybS9kcm1fY29ubmVjdG9y LmggfCAgMjMgKysrKysrCj4gPj4+PiAgICAyIGZpbGVzIGNoYW5nZWQsIDIxMSBpbnNlcnRpb25z KCspLCA1IGRlbGV0aW9ucygtKQo+ID4+Pj4KPiA+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2VkaWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCj4gPj4+PiBpbmRl eCA2ZmQ4YTk4Li40OTUzZjg3IDEwMDY0NAo+ID4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9lZGlkLmMKPiA+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCj4gPj4+PiBA QCAtMjc4MSw3ICsyNzgxLDkgQEAgYWRkX2RldGFpbGVkX21vZGVzKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsIHN0cnVjdCBlZGlkICplZGlkLAo+ID4+Pj4gICAgI2RlZmluZSBWSURF T19CTE9DSyAgICAgMHgwMgo+ID4+Pj4gICAgI2RlZmluZSBWRU5ET1JfQkxPQ0sgICAgMHgwMwo+ ID4+Pj4gICAgI2RlZmluZSBTUEVBS0VSX0JMT0NLCTB4MDQKPiA+Pj4+IC0jZGVmaW5lIFZJREVP X0NBUEFCSUxJVFlfQkxPQ0sJMHgwNwo+ID4+Pj4gKyNkZWZpbmUgVklERU9fQ0FQQUJJTElUWV9C TE9DSyAweDA3Cj4gPj4+PiArI2RlZmluZSBWSURFT19EQVRBX0JMT0NLXzQyMAkweDBFCj4gPj4+ PiArI2RlZmluZSBWSURFT19DQVBfQkxPQ0tfWTQyMENNREIgMHgwRgo+ID4+Pj4gICAgI2RlZmlu ZSBFRElEX0JBU0lDX0FVRElPCSgxIDw8IDYpCj4gPj4+PiAgICAjZGVmaW5lIEVESURfQ0VBX1lD UkNCNDQ0CSgxIDw8IDUpCj4gPj4+PiAgICAjZGVmaW5lIEVESURfQ0VBX1lDUkNCNDIyCSgxIDw8 IDQpCj4gPj4+PiBAQCAtMzE0MywxNSArMzE0NSwxMDMgQEAgZHJtX2Rpc3BsYXlfbW9kZV9mcm9t X3ZpY19pbmRleChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4+Pj4gICAgCXJl dHVybiBuZXdtb2RlOwo+ID4+Pj4gICAgfQo+ID4+Pj4gICAgCj4gPj4+PiArLyoKPiA+Pj4+ICsg KiBkb195Y2Jjcl80MjBfdmRiX21vZGVzIC0gUGFyc2UgWUNCQ1IgNDIwIG9ubHkgbW9kZXMKPiA+ Pj4+ICsgKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgY29ycmVzcG9uZGluZyB0byB0aGUgSERNSSBz aW5rCj4gPj4+PiArICogQHN2ZHM6IHN0YXJ0IG9mIHRoZSBkYXRhIGJsb2NrIG9mIENFQSBZQ0JD UiA0MjAgVkRCCj4gPj4+PiArICogQGxlbjogbGVuZ3RoIG9mIHRoZSBDRUEgWUNCQ1IgNDIwIFZE Qgo+ID4+Pj4gKyAqCj4gPj4+PiArICogQ0VBLTg2MS1GIGhhcyBhZGRlZCBhIG5ldyB2aWRlbyBi bG9jayBjYWxsZWQgWUNCQ1IgNDIwIFZpZGVvCj4gPj4+PiArICogRGF0YSBCbG9jayAoeWNiY3Ig NDIwIHZkYikuIFRoaXMgYmxvY2sgY29udGFpbnMgbW9kZXMgd2hpY2gKPiA+Pj4+ICsgKiBzdXBw b3J0IFlDQkNSIDQyMCBIRE1JIG91dHB1dCAob25seSBZQ0JDUiA0MjApLiBUaGlzIGZ1bmN0aW9u Cj4gPj4+PiArICogcGFyc2VzIHRoZSBibG9jayBhbmQgYWRkcyB0aGVzZSBtb2RlcyBpbnRvIGNv bm5lY3RvcidzIG1vZGUgbGlzdC4KPiA+Pj4gU2VlbXMgYSBiaXQgdmVyYm9zZS4gTWF5YmUgc29t ZXRoaW5nIGxpa2U6Cj4gPj4+ICJQYXJzZSB0aGUgQ0VBLTg2MS1GIFlDYkNyIDQ6MjowIFZpZGVv IERhdGEgQmxvY2sgKFk0MjBWREIpCj4gPj4+IHdoaWNoIGNvbnRhaW5zIG1vZGVzIHdoaWNoIG9u bHkgc3VwcG9ydCBZQ2JDciA0OjI6MCBvdXRwdXQuIgo+ID4+IEdvdCBpdC4KPiA+Pj4+ICsgKi8K PiA+Pj4+ICtzdGF0aWMgaW50IGRvX3ljYmNyXzQyMF92ZGJfbW9kZXMoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciwKPiA+Pj4+ICsJCQkJICAgY29uc3QgdTggKnN2ZHMsIHU4IHN2ZHNf bGVuKQo+ID4+PiBQcm9iYWJseSB3ZSBjb3VsZCBzL3ljYmNyXzQyMF92ZGIveTQyMHZkYi8gYWxs IG92ZXIgdG8ga2VlcCB0aGluZ3MKPiA+Pj4gc2hvcnRlciBhbmQgbWF0Y2ggdGhlIHRlcm1pbm9s b2d5IGluIHRoZSBzcGVjLiBTYW1lIGZvciB5NDIwY21kYi4KPiA+PiBHb3QgaXQuCj4gPj4+PiAr ewo+ID4+Pj4gKwlpbnQgbW9kZXMgPSAwLCBpOwo+ID4+Pj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4gPj4+PiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpu ZXdtb2RlOwo+ID4+PiBUaGlzIHZhcmlhYmxlIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSBsb29wIHNj b3BlLgo+ID4+IE9rLgo+ID4+Pj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbyA9ICZj b25uZWN0b3ItPmRpc3BsYXlfaW5mbzsKPiA+Pj4+ICsJc3RydWN0IGRybV9oZG1pX2luZm8gKmhk bWkgPSAmaW5mby0+aGRtaTsKPiA+Pj4+ICsKPiA+Pj4+ICsJZm9yIChpID0gMDsgaSA8IHN2ZHNf bGVuOyBpKyspIHsKPiA+Pj4+ICsJCXU4IHZpYyA9IHN2ZHNbaV0gJiAweDdmOwo+ID4+PiBXaGF0 J3MgdGhlIDB4N2YgaGVyZT8gTmF0aXZlIGJpdCBzdHVmZj8gSSdtIHRoaW5raWduIHdlIHByb2Jh Ymx5IHdhbnQKPiA+Pj4gc29tZSBraW5kIG9mIHN2ZF90b192aWMoKSBmdW5jdGlvbiB0byBtYWtl IHN1cmUgZXZlcnlvbmUgZGVhbHMgd2l0aAo+ID4+PiB0aGlzIHN0dWZmIGNvcnJlY3RseS4KPiA+ PiBDdXJyZW50IFZJQ3MgYXJlIDEgPCBWSUMgPCAxMDgsIHNvIHNldmVuIGJpdHMgcmVxdWlyZWQg dG8gc2hvdyBhIFZJQy4KPiA+PiBUaGlzIGlzIGluc3BpcmVkIGZyb20KPiA+PiBkcm1fbW9kZV9m cm9tX2NlYV92aWNfaW5kZXgoKS4KPiA+Pj4+ICsKPiA+Pj4+ICsJCW5ld21vZGUgPSBkcm1fbW9k ZV9kdXBsaWNhdGUoZGV2LCAmZWRpZF9jZWFfbW9kZXNbdmljXSk7Cj4gPj4+PiArCQlpZiAoIW5l d21vZGUpCj4gPj4+PiArCQkJYnJlYWs7Cj4gPj4+PiArCQkvKgo+ID4+Pj4gKwkJICogeWNiY3I0 MjBfdmRiX21vZGVzIGlzIGEgZml4IHBvc2l0aW9uIDEyOCBiaXQgYml0bWFwLgo+ID4+Pj4gKwkJ ICogRXZlcnkgYml0IGhlcmUgcmVwcmVzZW50cyBhIFZJQywgZnJvbSBDRUEtODYxLUYgbGlzdC4K PiA+Pj4+ICsJCSAqIFNvIGlmIGJpdFtuXSBpcyBzZXQsIGl0IGluZGljYXRlcyB2aWNbbisxXSBz dXBwb3J0cwo+ID4+Pj4gKwkJICogWUNCQ1I0MjAgb3V0cHV0LiBCaXQgMCBpcyBkdW1teSwgYXMg VklDcyBzdGFydCBhdCAxLgo+ID4+Pj4gKwkJICogeWNiY3I0MjBfdmNiX21vZGVzWzBdID0gfFZJ Qz02NCB8VklDPTYzIHwuLi4uLnxWSUM9MiB8VklDPTEgfAo+ID4+Pj4gKwkJICogeWNiY3I0MjBf dmNiX21vZGVzWzFdID0gfFZJQz0xMjh8VklDPTEyN3wuLi4uLnxWSUM9NjZ8VklDPTY1fAo+ID4+ Pj4gKwkJICovCj4gPj4+IEkgdGhpbmsgcGVvcGxlIGNhbiBmaWd1cmUgb3V0IGhvdyB0aGUgc3Rh bmRhcmQgYml0bWFwcyB3b3JrIHdpdGhvdXQKPiA+Pj4gaGF2aW5nIHRvIGV4cGxhaW4gaXQgd2l0 aCBzdWNoIGRldGFpbC4gSWYgeW91IHdhbnQgdG8gZWxhYm9yYXRlIG9uIHRoZQo+ID4+PiBjb250 ZW50cyBvZiB0aGUgYml0bWFwLCB0aGVuIEkgdGhpbmsgdGhlIGNvbW1lbnQgc2hvdWxkIGJlIG5l eHQgdG8KPiA+Pj4gd2hlcmUgdGhlIGJpdG1hcCBpcyBkZWZpbmVkLgo+ID4+IFRoZXJlIGlzIGFs cmVhZHkgc2ltaWxhciBleHBsYW5hdGlvbiA6KSwgSSB3aWxsIHByb2JhYmx5IHJlbW92ZSB0aGlz Lgo+ID4+Pj4gKwkJYml0bWFwX3NldChoZG1pLT55Y2JjcjQyMF92ZGJfbW9kZXMsIHZpYywgMSk7 Cj4gPj4+IF9fc2V0X2JpdCgpCj4gPj4gQW55IGhhcm0gb24gYml0bWFwX3NldCA/IEkgZ3Vlc3Mg dGhpcyBpcyBzcGVjaWFsbHkgZm9yIGJpdG1hcHMgLi4uCj4gPj4+PiArCQlkcm1fbW9kZV9wcm9i ZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7Cj4gPj4+PiArCQltb2RlcysrOwo+ID4+Pj4gKwl9 Cj4gPj4+PiArCj4gPj4+PiArCWlmIChtb2RlcyA+IDApCj4gPj4+PiArCQlpbmZvLT5jb2xvcl9m b3JtYXRzIHw9IERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0MjA7Cj4gPj4+PiArCXJldHVybiBtb2Rl czsKPiA+Pj4+ICt9Cj4gPj4+PiArCj4gPj4+PiArLyoKPiA+Pj4+ICsgKiBkcm1fYWRkX3ZjYl9t b2RlcyAtIEFkZCBhIFlDQkNSIDQyMCBtb2RlIGludG8gYml0bWFwCj4gPj4+PiArICogQGNvbm5l Y3RvcjogY29ubmVjdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEhETUkgc2luawo+ID4+Pj4gKyAq IEB2aWM6IENFQSB2aWMgZm9yIHRoZSB2aWRlbyBtb2RlIHRvIGJlIGFkZGVkIGluIHRoZSBtYXAK PiA+Pj4+ICsgKgo+ID4+Pj4gKyAqIE1ha2VzIGFuIGVudHJ5IGZvciBhIHZpZGVvbW9kZSBpbiB0 aGUgWUNCQ1IgNDIwIGJpdG1hcAo+ID4+Pj4gKyAqLwo+ID4+Pj4gK3N0YXRpYyB2b2lkCj4gPj4+ PiArZHJtX2FkZF92Y2JfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgdTgg dmljKQo+ID4+PiBUaGUgInZjYiIgdGVybSBkb2Vzbid0IHNlZW0gdG8gYmUgaW4gdGhlIHNwZWMu IFNob3VsZCBiZSAiY21kYiIgbWF5YmU/Cj4gPj4+Cj4gPj4+IE9yIG1heWJlIHdlIHdhbnQgeWNi Y3I0MjBfdmRiX21vZGVzIGFuZCB5Y2JjcjQyMF95NDIwdmRiX21vZGVzIGp1c3QgdG8KPiA+Pj4g bWFrZSBpdCBjbGVhciB0byB3aGljaCBWREIgdGhleSByZWxhdGUgd2l0aC4KPiA+PiBjbWRiIHNl ZW1zIGFwcHJvcHJpYXRlLCB3aGljaCBpcyBhbGlnbmVkIHRvIHRoZSBzcGVjIHRvbywgd2lsbCBk byB0aGUKPiA+PiBjaGFuZ2UuCj4gPj4+PiArewo+ID4+Pj4gKwlzdHJ1Y3QgZHJtX2hkbWlfaW5m byAqaGRtaSA9ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZG1pOwo+ID4+Pj4gKwo+ID4+Pj4g KwkvKiBWSUNzIGFyZSAxIHRvIDEyNygxMDcgZGVmaW5lZCB0aWxsIENFQS04NjEtRikgKi8KPiA+ Pj4+ICsJdmljICY9IDEyNzsKPiA+Pj4+ICsKPiA+Pj4+ICsJLyoKPiA+Pj4+ICsJICogeWNiY3I0 MjBfdmNiX21vZGVzIGlzIGEgZml4IHBvc2l0aW9uIDEyOCBiaXQgYml0bWFwLgo+ID4+Pj4gKwkg KiBFdmVyeSBiaXQgaGVyZSByZXByZXNlbnRzIGEgVklDLCBmcm9tIENFQS04NjEtRiBsaXN0Lgo+ ID4+Pj4gKwkgKiBTbyBpZiBiaXRbbl0gaXMgc2V0LCBpdCBpbmRpY2F0ZXMgdmljW24rMV0gc3Vw cG9ydHMKPiA+Pj4+ICsJICogWUNCQ1I0MjAgb3V0cHV0LiBCaXQgMCBpcyBkdW1teSwgYXMgVklD cyBzdGFydCBhdCAxLgo+ID4+Pj4gKwkgKiB5Y2JjcjQyMF92Y2JfbW9kZXNbMF0gPSB8VklDPTY0 IHxWSUM9NjMgfC4uLi4ufFZJQz0yIHxWSUM9MSB8Cj4gPj4+PiArCSAqIHljYmNyNDIwX3ZjYl9t b2Rlc1sxXSA9IHxWSUM9MTI4fFZJQz0xMjd8Li4uLi58VklDPTY2fFZJQz02NXwKPiA+Pj4+ICsJ ICogRGlmZmVyZW5jZSBiZXR3ZWVuIGEgdmNiX21vZGUgYW5kIHZkYl9tb2RlIGlzIHRoYXQgYSB2 Y2JfbW9kZQo+ID4+Pj4gKwkgKiBjYW4gc3VwcG9ydCBvdGhlciBIRE1JIG91dHB1dHMgbGlrZSBS R0IvWUNCQ1I0NDQvNDIyIGFsc28KPiA+Pj4+ICsJICogYWxvbmcgd2l0aCBZQ0JDUiAyNDAsIHdo ZXJlYXMgYSB2ZGJfbW9kZSBjYW4gb25seSBzdXBwb3J0IFlDQkNSCj4gPj4+PiArCSAqIDQyMCBI RE1JIG91dHB1dC4KPiA+Pj4+ICsJICovCj4gPj4+PiArCWJpdG1hcF9zZXQoaGRtaS0+eWNiY3I0 MjBfdmNiX21vZGVzLCB2aWMsIDEpOwo+ID4+Pj4gK30KPiA+Pj4+ICsKPiA+Pj4+ICAgIHN0YXRp YyBpbnQKPiA+Pj4+ICAgIGRvX2NlYV9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBjb25zdCB1OCAqZGIsIHU4IGxlbikKPiA+Pj4+ICAgIHsKPiA+Pj4+ICAgIAlpbnQgaSwg bW9kZXMgPSAwOwo+ID4+Pj4gKwlzdHJ1Y3QgZHJtX2hkbWlfaW5mbyAqaGRtaSA9ICZjb25uZWN0 b3ItPmRpc3BsYXlfaW5mby5oZG1pOwo+ID4+Pj4gICAgCj4gPj4+PiAgICAJZm9yIChpID0gMDsg aSA8IGxlbjsgaSsrKSB7Cj4gPj4+PiAgICAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl Owo+ID4+Pj4gICAgCQltb2RlID0gZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3ZpY19pbmRleChjb25u ZWN0b3IsIGRiLCBsZW4sIGkpOwo+ID4+Pj4gICAgCQlpZiAobW9kZSkgewo+ID4+Pj4gKwkJCS8q Cj4gPj4+PiArCQkJICogWUNCQ1I0MjAgY2FwYWJpbGl0eSBibG9jayBjb250YWlucyBhIGJpdG1h cCB3aGljaAo+ID4+Pj4gKwkJCSAqIGdpdmVzIHRoZSBpbmRleCBvZiBDRUEgbW9kZXMgZnJvbSBD RUEgVkRCLCB3aGljaAo+ID4+Pj4gKwkJCSAqIGNhbiBzdXBwb3J0IFlDQkNSIDQyMCBzYW1wbGlu ZyBvdXRwdXQgYWxzbyAoYXBhcnQKPiA+Pj4+ICsJCQkgKiBmcm9tIFJHQi9ZQ0JDUjQ0NCBldGMp Lgo+ID4+Pj4gKwkJCSAqIEZvciBleGFtcGxlLCBpZiB0aGUgYml0IDAgaW4gYml0bWFwIGlzIHNl dCwKPiA+Pj4+ICsJCQkgKiBmaXJzdCBtb2RlIGluIFZEQiBjYW4gc3VwcG9ydCBZQ0JDUjQyMCBv dXRwdXQgdG9vLgo+ID4+Pj4gKwkJCSAqIEFkZCBZQ0JDUjQyMCBtb2RlcyBvbmx5IGlmIHNpbmsg aXMgSERNSSAyLjAgY2FwYWJsZS4KPiA+Pj4+ICsJCQkgKi8KPiA+Pj4+ICsJCQlpZiAoY29ubmVj dG9yLT5pc19oZG1pMl9zcmMgJiYKPiA+Pj4gSG1tLiBJIHdvbmRlciBpZiBuZWVkIHRoaXMgaGVy ZSBhdCBhbGwuIEkgZ3Vlc3Mgd2UgZG8gbmVlZCBzb21ldGhpbmcgZm9yCj4gPj4+IHRoZSAiNDIw IG9ubHkiIG1vZGVzLCBidXQgbm90IHN1cmUgaWYgaXQgc2hvdWxkIGJlIGhlcmUgb3IgaWYgd2Ug c2hvdWxkCj4gPj4+IHJlamVjdCB0aGVtIG9ubHkgZHVyaW5nIG1vZGUgdmFsaWRhdGlvbi4gVGhl IGxhdHRlciB3b3VsZCBiZSBuaWNlCj4gPj4+IGJlY2F1c2UgaXQgd291bGQgdGhlbiBsZWF2ZSBh IG1lc3NhZ2UgaW50byB0aGUgbG9nIHRoYXQgdGhlIG1vZGUgd2FzCj4gPj4+IHByZXNlbnQgYnV0 IHdhcyByZWplY3RlZC4KPiA+PiBTZWVtcyBsaWtlIGEgZ29vZCBpZGVhLCB0aGUgb25seSBiZW5l Zml0IG9mIGRvaW5nIHRoaXMgaXMsIHRoaXMgaXMgaW4KPiA+PiBEUk0gbGF5ZXIsIGFuZCB3aWxs IHByb3RlY3Qgb3RoZXIgZHJpdmVycwo+ID4+IGZyb20gYWNjaWRlbnRhbGx5IGFkZGluZyA0MjBf dmNiIG1vZGVzLiBNb2RlIHZhbGlkIHdvdWxkIGJlIGludGVybmFsIHRvCj4gPj4gZHJpdmVyLCBh bmQgYXBwbGljYWJsZSBpbiBJOTE1IGxheWVyLgo+ID4gTm8sIHdlIHNob3VsZCBwdXQgaW50byB0 aGUgcHJvYmUgaGVscGVycyBzdGFuZGFyZCBtb2RlIHZhbGlkYXRpb24gc3R1ZmYuCj4gPiBObyBk cml2ZXIgc3BlY2lmaWNzIG5lZWRlZCBhcGFydCBmcm9tIHNldHRpbmcgdGhlIHN1cHBvcnRfeWNi Y3I0MjAgb3IKPiA+IHdoYXRldmVyIGZsYWcuCj4gT2ssIGdvdCBpdC4KPiA+Cj4gPj4gU28geW91 ciB3aXNoIGlzIG15IGNvbW1hbmQgOikKPiA+Pj4gSSdtIHRoaW5raW5nIHdlIHNob3VsZCBwcm9i YWJseSBjYWxsIHRoaXMKPiA+Pj4gZmxhZyB5Y2JjcjQyMF9hbGxvd2VkIG9yIHNvbWV0aGluZyBs aWtlIHRoYXQgdG8gbWF0Y2ggdGhlIG90aGVyCj4gPj4+IGZvb19hbGxvd2VkIGZsYWdzIHdlIGhh dmUgaW4gdGhlIGNvbm5lY3RvciBmb3IgbW9kZSB2YWxpZGF0aW9uLgo+ID4+IEkgZG9uJ3QgbGlr ZSB0aGF0IGhvbmVzdGx5LiBJIGFtIGhvcGluZyB0aGF0IHRoaXMgZmxhZyB3b3VsZCBiZSB1c2Vk Cj4gPj4gZnVydGhlciwgdG8gaWRlbnRpZnkgYSBIRE1JIDIuMCBzcmMgb3ZlciBIRE1JIDEuNAo+ ID4gQW5kIHdoYXQgaGFwcGVucyB3aGVuIHdoZW4geW91IGhhdmUgYW4gb3RoZXJ3aXNlIEhETUkg Mi4wIGNhcGFibGUKPiA+IHNvdXJjZSB0aGF0IGNhbid0IG91dHB1dCBZQ2JDciA0OjI6MD8KPiBU aGlzIG1ha2VzIGVxdWF0aW9uIGRpZmZpY3VsdCwgYnV0IGluIHRoaXMgd2F5LCB3ZSBtaWdodCBu ZWVkIGZsYWdzIGZvciAKPiBhbGwgc3ViLWZlYXR1cmVzIGxpa2UKPiA0a0A2MCwgc2NyYW1ibGlu Zywgc2NkYywgc2NkY19yciwgeWNiY3I0MjAuIE1heSBiZSwgSSB3aWxsIGFkZCBhIGNvbW1lbnQg CgpZZXMsIHdlIHNob3VsZCBjaGVjayBmb3IgZmVhdHVyZXMsIG5vdCBmb3Igc29tZSBzdGFuZGFy ZCB2ZXJzaW9uIHRoYXQKaW1wbGVtZW50cyBzb21lL2FsbCBvZiB0aG9zZSBmZWF0dXJlcy4gQnV0 IG5vdCBjb252aW5jZWQgd2UgbmVlZCBhbnkKZmVhdHVyIGZsYWdzIGZvciB0aGUgb3RoZXIgdGhp bmdzIHlvdSBsaXN0ZWQuIEFyZW4ndCB3ZSBhbHJlYWR5IGRvaW5nCmFsbCB0aG9zZSB0aGluZ3Mg YW55d2F5PwoKPiB0aGF0IGlmIHlvdQo+IGVuYWJsZSB0aGlzIGZsYWcsIHRoaXMgaXMgZ29pbmcg dG8gaGFwcGVuIG9yIHNvbWV0aGluZyA/Cj4gPj4gc291cmNlLCBiZXlvbmQgWUNCQ1I0MjAgZmVh dHVyZSwgYW5kIGF0IHRoYXQgdGltZSwgaXQgbWlnaHQgYmUgbW9yZQo+ID4+IHN1aXRhYmxlIHRv IGhhdmUgaGRtaV8yX3NyYy4gRG9lcyBpdCBtYWtlIHNlbnNlID8KPiA+Pj4gU28gSSB0aGluayB0 aGlzIGNvdWxkIHBlcmhhcHMganVzdCBiZSBhbiB1bmNvZGl0aW9uYWwKPiA+Pj4gaWYgKHRlc3Rf Yml0KGksIC4uLikpCj4gPj4+IAlfX3NldF9iaXQodmljLCAuLi4pOwo+ID4+Pgo+ID4+Pj4gKwkJ CQl0ZXN0X2JpdChpLCAmaGRtaS0+eWNiY3I0MjBfdmNiX21hcCkpCj4gPj4+PiArCQkJCWRybV9h ZGRfdmNiX21vZGVzKGNvbm5lY3RvciwgZGJbaV0pOwo+ID4+Pj4gKwo+ID4+Pj4gICAgCQkJZHJt X21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOwo+ID4+Pj4gICAgCQkJbW9kZXMrKzsK PiA+Pj4+ICAgIAkJfQo+ID4+Pj4gQEAgLTM0MjcsNiArMzUxNywxMiBAQCBkb19oZG1pX3ZzZGJf bW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgY29uc3QgdTggKmRiLCB1OCBs ZW4sCj4gPj4+PiAgICB9Cj4gPj4+PiAgICAKPiA+Pj4+ICAgIHN0YXRpYyBpbnQKPiA+Pj4+ICtj ZWFfZGJfZXh0ZW5kZWRfdGFnKGNvbnN0IHU4ICpkYikKPiA+Pj4+ICt7Cj4gPj4+PiArCXJldHVy biBkYlsxXTsKPiA+Pj4+ICt9Cj4gPj4+IENvdWxkIHlvdSBjbGVhbiB1cCB0aGUgY3VycmVudCBl eHRlbmRlZCB0YWcgdXNhZ2UgYXMgYSBzZXBhcmF0ZQo+ID4+PiBwcmVwIHBhdGNoPyBXb3VsZCBi ZSBuaWNlIHRvIGF2b2lkIHRoZSBjb25mdXNpb24gb2YgY2FsbGluZyB0aGUKPiA+Pj4gIlVzZSBl eHRlbmRlZCB0YWciIHRhZyBWSURFT19DQVBBQklMSVRZX0JMT0NLLgo+ID4+IFN1cmUsIGFkZGlu ZyBpbiBteSB0by1kbyBsaXN0Lgo+ID4+Pj4gKwo+ID4+Pj4gK3N0YXRpYyBpbnQKPiA+Pj4+ICAg IGNlYV9kYl9wYXlsb2FkX2xlbihjb25zdCB1OCAqZGIpCj4gPj4+PiAgICB7Cj4gPj4+PiAgICAJ cmV0dXJuIGRiWzBdICYgMHgxZjsKPiA+Pj4+IEBAIC0zNDg3LDkgKzM1ODMsODEgQEAgc3RhdGlj IGJvb2wgY2VhX2RiX2lzX2hkbWlfZm9ydW1fdnNkYihjb25zdCB1OCAqZGIpCj4gPj4+PiAgICAJ cmV0dXJuIG91aSA9PSBIRE1JX0ZPUlVNX0lFRUVfT1VJOwo+ID4+Pj4gICAgfQo+ID4+Pj4gICAg Cj4gPj4+PiArc3RhdGljIGJvb2wgY2VhX2RiX2lzX3ljYmNyXzQyMF9jbWRiKGNvbnN0IHU4ICpk YikKPiA+Pj4+ICt7Cj4gPj4+PiArCXU4IGxlbiA9IGNlYV9kYl9wYXlsb2FkX2xlbihkYik7Cj4g Pj4+ICdsZW4nIHNlZW1zIGxpa2UgYSBmYWlybHkgcG9pbnRsZXNzIHZhcmlhYmxlIHNpbmNlIGl0 J3MgdXNlZCBleGFjdGx5Cj4gPj4+IG9uY2UuCj4gPj4gQWdyZWUsCj4gPj4+PiArCj4gPj4+PiAr CWlmIChjZWFfZGJfdGFnKGRiKSAhPSBWSURFT19DQVBBQklMSVRZX0JMT0NLKQo+ID4+Pj4gKwkJ cmV0dXJuIGZhbHNlOwo+ID4+Pj4gKwo+ID4+Pj4gKwlpZiAoIWxlbikKPiA+Pj4+ICsJCXJldHVy biBmYWxzZTsKPiA+Pj4+ICsKPiA+Pj4+ICsJaWYgKGNlYV9kYl9leHRlbmRlZF90YWcoZGIpICE9 IFZJREVPX0NBUF9CTE9DS19ZNDIwQ01EQikKPiA+Pj4+ICsJCXJldHVybiBmYWxzZTsKPiA+Pj4+ ICsKPiA+Pj4+ICsJcmV0dXJuIHRydWU7Cj4gPj4+PiArfQo+ID4+Pj4gKwo+ID4+Pj4gK3N0YXRp YyBib29sIGNlYV9kYl9pc195Y2Jjcl80MjBfdmRiKGNvbnN0IHU4ICpkYikKPiA+Pj4+ICt7Cj4g Pj4+PiArCWlmIChjZWFfZGJfdGFnKGRiKSAhPSBWSURFT19DQVBBQklMSVRZX0JMT0NLKQo+ID4+ Pj4gKwkJcmV0dXJuIGZhbHNlOwo+ID4+Pj4gKwo+ID4+PiBMZW5ndGggY2hlY2sgbWlzc2luZy4K PiA+PiBPb3BzLCBnb3QgaXQuCj4gPj4+PiArCWlmIChjZWFfZGJfZXh0ZW5kZWRfdGFnKGRiKSAh PSBWSURFT19EQVRBX0JMT0NLXzQyMCkKPiA+Pj4+ICsJCXJldHVybiBmYWxzZTsKPiA+Pj4+ICsK PiA+Pj4+ICsJcmV0dXJuIHRydWU7Cj4gPj4+PiArfQo+ID4+Pj4gKwo+ID4+Pj4gICAgI2RlZmlu ZSBmb3JfZWFjaF9jZWFfZGIoY2VhLCBpLCBzdGFydCwgZW5kKSBcCj4gPj4+PiAgICAJZm9yICgo aSkgPSAoc3RhcnQpOyAoaSkgPCAoZW5kKSAmJiAoaSkgKyBjZWFfZGJfcGF5bG9hZF9sZW4oJihj ZWEpWyhpKV0pIDwgKGVuZCk7IChpKSArPSBjZWFfZGJfcGF5bG9hZF9sZW4oJihjZWEpWyhpKV0p ICsgMSkKPiA+Pj4+ICAgIAo+ID4+Pj4gK3N0YXRpYyB2b2lkIGRybV9wYXJzZV95NDIwY21kYl9i aXRtYXAoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+Pj4+ICsJCQkJICAgICBj b25zdCB1OCAqZGIpCj4gPj4+PiArewo+ID4+Pj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAq aW5mbyA9ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5mbzsKPiA+Pj4+ICsJc3RydWN0IGRybV9oZG1p X2luZm8gKmhkbWkgPSAmaW5mby0+aGRtaTsKPiA+Pj4+ICsJdTggbWFwX2xlbiA9IGNlYV9kYl9w YXlsb2FkX2xlbihkYikgLSAxOwo+ID4+Pj4gKwl1OCBjb3VudDsKPiA+Pj4+ICsJdTY0IG1hcCA9 IDA7Cj4gPj4+PiArCj4gPj4+PiArCWlmICghZGIpCj4gPj4+PiArCQlyZXR1cm47Cj4gPj4+IENh bid0IGhhcHBlbi4KPiA+PiBJIGFzc3VtZWQgeW91IHdlcmUgY29udmluY2Ugb24gbXkgcHJldmlv dXMgKGxhbWUpIGV4Y3VzZSBvZiBjb3JydXB0IGRiIDopCj4gPj4gV2lsbCByZW1vdmUgdGhpcyBj aGVjay4KPiA+Pj4+ICsKPiA+Pj4+ICsJaWYgKG1hcF9sZW4gPT0gMCkgewo+ID4+Pj4gKwkJLyog QWxsIENFQSBtb2RlcyBzdXBwb3J0IHljYmNyNDIwIHNhbXBsaW5nIGFsc28uKi8KPiA+Pj4+ICsJ CWhkbWktPnljYmNyNDIwX3ZjYl9tYXAgPSBVNjRfTUFYOwo+ID4+Pj4gKwkJaW5mby0+Y29sb3Jf Zm9ybWF0cyB8PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIwOwo+ID4+Pj4gKwkJcmV0dXJuOwo+ ID4+Pj4gKwl9Cj4gPj4+PiArCj4gPj4+PiArCS8qCj4gPj4+PiArCSAqIFRoaXMgbWFwIGluZGlj YXRlcyB3aGljaCBvZiB0aGUgZXhpc3RpbmcgQ0VBIGJsb2NrIG1vZGVzCj4gPj4+PiArCSAqIGZy b20gVkRCIGNhbiBzdXBwb3J0IFlDQkNSNDIwIG91dHB1dCB0b28uIFNvIGlmIGJpdD0wIGlzCj4g Pj4+PiArCSAqIHNldCwgZmlyc3QgbW9kZSBmcm9tIFZEQiBjYW4gc3VwcG9ydCBZQ0JDUjQyMCBv dXRwdXQgdG9vLgo+ID4+Pj4gKwkgKiBXZSB3aWxsIHBhcnNlIGFuZCBrZWVwIHRoaXMgbWFwLCBi ZWZvcmUgcGFyc2luZyBWREIgaXRzZWxmCj4gPj4+PiArCSAqIHRvIGF2b2lkIGdvaW5nIHRocm91 Z2ggdGhlIHNhbWUgYmxvY2sgYWdhaW4gYW5kIGFnYWluLgo+ID4+Pj4gKwkgKgo+ID4+Pj4gKwkg KiBTcGVjIGlzIG5vdCBjbGVhciBhYm91dCBtYXggcG9zc2libGUgc2l6ZSBvZiB0aGlzIGJsb2Nr Lgo+ID4+Pj4gKwkgKiBDbGFtcGluZyBtYXggYml0bWFwIGJsb2NrIHNpemUgYXQgOCBieXRlcy4g RXZlcnkgYnl0ZSBjYW4KPiA+Pj4+ICsJICogYWRkcmVzcyA4IENFQSBtb2RlcywgaW4gdGhpcyB3 YXkgdGhpcyBtYXAgY2FuIGFkZHJlc3MKPiA+Pj4+ICsJICogOCo4ID0gZmlyc3QgNjQgU1ZEcy4K PiA+Pj4+ICsJICovCj4gPj4+PiArCWlmIChXQVJOX09OX09OQ0UobWFwX2xlbiA+IDgpKQo+ID4+ Pj4gKwkJbWFwX2xlbiA9IDg7Cj4gPj4+PiArCj4gPj4+PiArCWZvciAoY291bnQgPSAwOyBjb3Vu dCA8IG1hcF9sZW47IGNvdW50KyspCj4gPj4+PiArCQltYXAgfD0gKHU2NClkYlsyICsgY291bnRd IDw8ICg4ICogY291bnQpOwo+ID4+Pj4gKwo+ID4+Pj4gKwlpZiAobWFwKSB7Cj4gPj4+PiArCQlE Uk1fREVCVUdfS01TKCJTaW5rIHN1cHBvcnRzIHljYmNyIDQyMFxuIik7Cj4gPj4+IElmIHdlIHdh bnQgdG8gcHJpbnQgc29tZXRoaW5nIGFib3V0IHRoZSBzaW5rcyBjb2xvciBjYXBhYmlsaXRpZXMg SSB0aGluawo+ID4+PiBpdCBzaG91bGQgYmUgaW4gY2VudHJhbCBwbGFjZSBpbnN0ZWFkIG9mIGJl aW5nIHNwcmlua2xlZCBhbGwgb3ZlciB0aGUKPiA+Pj4gcGxhY2UuCj4gPj4gWWVzLCBzZWVtcyBs aWtlIGEgZ29vZCBpZGVhLiBJIHdpbGwgcmVtb3ZlIHRoaXMsIGFuZCBtYXkgYmUgYWRkIGEKPiA+ PiBzZXBhcmF0ZSBwYXRjaCB0byBkdW1wCj4gPj4gc2luayBjYXBhYmlsaXRpZXMuCj4gPj4+PiAr CQlpbmZvLT5jb2xvcl9mb3JtYXRzIHw9IERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0MjA7Cj4gPj4+ PiArCX0KPiA+Pj4+ICsKPiA+Pj4+ICsJaGRtaS0+eWNiY3I0MjBfdmNiX21hcCA9IG1hcDsKPiA+ Pj4+ICt9Cj4gPj4+PiArCj4gPj4+PiAgICBzdGF0aWMgaW50Cj4gPj4+PiAgICBhZGRfY2VhX21v ZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBlZGlkICplZGlkKQo+ ID4+Pj4gICAgewo+ID4+Pj4gQEAgLTM1MTIsMTAgKzM2ODAsMTcgQEAgYWRkX2NlYV9tb2Rlcyhz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZWRpZCAqZWRpZCkKPiA+Pj4+ ICAgIAkJCQl2aWRlbyA9IGRiICsgMTsKPiA+Pj4+ICAgIAkJCQl2aWRlb19sZW4gPSBkYmw7Cj4g Pj4+PiAgICAJCQkJbW9kZXMgKz0gZG9fY2VhX21vZGVzKGNvbm5lY3RvciwgdmlkZW8sIGRibCk7 Cj4gPj4+PiAtCQkJfQo+ID4+Pj4gLQkJCWVsc2UgaWYgKGNlYV9kYl9pc19oZG1pX3ZzZGIoZGIp KSB7Cj4gPj4+PiArCQkJfSBlbHNlIGlmIChjZWFfZGJfaXNfaGRtaV92c2RiKGRiKSkgewo+ID4+ Pj4gICAgCQkJCWhkbWkgPSBkYjsKPiA+Pj4+ICAgIAkJCQloZG1pX2xlbiA9IGRibDsKPiA+Pj4+ ICsJCQl9IGVsc2UgaWYgKGNlYV9kYl9pc195Y2Jjcl80MjBfdmRiKGRiKSAmJgo+ID4+Pj4gKwkJ CQkJY29ubmVjdG9yLT5pc19oZG1pMl9zcmMpIHsKPiA+Pj4gQnJva2VuIGluZGVudGF0aW9uIGlu IGEgYnVuY2ggb2YgcGxhY2VzLgo+ID4+IERhbW4sIEkgdGhvdWdodCBJIGFtIGltcHJvdmluZyA6 KAo+ID4+Pj4gKwkJCQljb25zdCB1OCAqdmRiNDIwID0gJmRiWzJdOwo+ID4+Pj4gKwo+ID4+Pj4g KwkJCQkvKiBBZGQgNDoyOjAob25seSkgbW9kZXMgcHJlc2VudCBpbiBFRElEICovCj4gPj4+PiAr CQkJCW1vZGVzICs9IGRvX3ljYmNyXzQyMF92ZGJfbW9kZXMoY29ubmVjdG9yLAo+ID4+Pj4gKwkJ CQkJCQkJdmRiNDIwLAo+ID4+Pj4gKwkJCQkJCQkJZGJsIC0gMSk7Cj4gPj4+PiAgICAJCQl9Cj4g Pj4+PiAgICAJCX0KPiA+Pj4+ICAgIAl9Cj4gPj4+PiBAQCAtNDE5Niw2ICs0MzcxLDggQEAgc3Rh dGljIHZvaWQgZHJtX3BhcnNlX2NlYV9leHQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKPiA+Pj4+ICAgIAkJCWRybV9wYXJzZV9oZG1pX3ZzZGJfdmlkZW8oY29ubmVjdG9yLCBkYik7 Cj4gPj4+PiAgICAJCWlmIChjZWFfZGJfaXNfaGRtaV9mb3J1bV92c2RiKGRiKSkKPiA+Pj4+ICAg IAkJCWRybV9wYXJzZV9oZG1pX2ZvcnVtX3ZzZGIoY29ubmVjdG9yLCBkYik7Cj4gPj4+PiArCQlp ZiAoY2VhX2RiX2lzX3ljYmNyXzQyMF9jbWRiKGRiKSkKPiA+Pj4+ICsJCQlkcm1fcGFyc2VfeTQy MGNtZGJfYml0bWFwKGNvbm5lY3RvciwgZGIpOwo+ID4+Pj4gICAgCX0KPiA+Pj4+ICAgIH0KPiA+ Pj4+ICAgIAo+ID4+Pj4gQEAgLTQ0MzAsNiArNDYwNywxMyBAQCBpbnQgZHJtX2FkZF9lZGlkX21v ZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBlZGlkICplZGlkKQo+ ID4+Pj4gICAgCXF1aXJrcyA9IGVkaWRfZ2V0X3F1aXJrcyhlZGlkKTsKPiA+Pj4+ICAgIAo+ID4+ Pj4gICAgCS8qCj4gPj4+PiArCSAqIENFQS04NjEtRiBhZGRzIHljYmNyIGNhcGFiaWxpdHkgbWFw IGJsb2NrLCBmb3IgSERNSSAyLjAgc2lua3MuCj4gPj4+PiArCSAqIFRvIGF2b2lkIG11bHRpcGxl IHBhcnNpbmcgb2Ygc2FtZSBibG9jaywgbGV0cyBnZXQgdGhlIHNpbmsgaW5mbwo+ID4+Pj4gKwkg KiBiZWZvcmUgcGFyc2luZyBDRUEgbW9kZXMuCj4gPj4+PiArCSAqLwo+ID4+Pj4gKwlkcm1fYWRk X2Rpc3BsYXlfaW5mbyhjb25uZWN0b3IsIGVkaWQpOwo+ID4+Pj4gKwo+ID4+Pj4gKwkvKgo+ID4+ Pj4gICAgCSAqIEVESUQgc3BlYyBzYXlzIG1vZGVzIHNob3VsZCBiZSBwcmVmZXJyZWQgaW4gdGhp cyBvcmRlcjoKPiA+Pj4+ICAgIAkgKiAtIHByZWZlcnJlZCBkZXRhaWxlZCBtb2RlCj4gPj4+PiAg ICAJICogLSBvdGhlciBkZXRhaWxlZCBtb2RlcyBmcm9tIGJhc2UgYmxvY2sKPiA+Pj4+IEBAIC00 NDUwLDE0ICs0NjM0LDEzIEBAIGludCBkcm1fYWRkX2VkaWRfbW9kZXMoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQpCj4gPj4+PiAgICAJbnVtX21vZGVz ICs9IGFkZF9jZWFfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKPiA+Pj4+ICAgIAludW1fbW9kZXMg Kz0gYWRkX2FsdGVybmF0ZV9jZWFfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKPiA+Pj4+ICAgIAlu dW1fbW9kZXMgKz0gYWRkX2Rpc3BsYXlpZF9kZXRhaWxlZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQp Owo+ID4+Pj4gKwo+ID4+Pj4gICAgCWlmIChlZGlkLT5mZWF0dXJlcyAmIERSTV9FRElEX0ZFQVRV UkVfREVGQVVMVF9HVEYpCj4gPj4+PiAgICAJCW51bV9tb2RlcyArPSBhZGRfaW5mZXJyZWRfbW9k ZXMoY29ubmVjdG9yLCBlZGlkKTsKPiA+Pj4+ICAgIAo+ID4+Pj4gICAgCWlmIChxdWlya3MgJiAo RURJRF9RVUlSS19QUkVGRVJfTEFSR0VfNjAgfCBFRElEX1FVSVJLX1BSRUZFUl9MQVJHRV83NSkp Cj4gPj4+PiAgICAJCWVkaWRfZml4dXBfcHJlZmVycmVkKGNvbm5lY3RvciwgcXVpcmtzKTsKPiA+ Pj4+ICAgIAo+ID4+Pj4gLQlkcm1fYWRkX2Rpc3BsYXlfaW5mbyhjb25uZWN0b3IsIGVkaWQpOwo+ ID4+Pj4gLQo+ID4+PiBJIHRoaW5rIHRoaXMgY291bGQgYmUgYSBzZXBhcmF0ZSBwYXRjaCwganVz dCBpbiBjYXNlIGl0IGNhdXNlcyBhCj4gPj4+IHJlZ3Jlc3Npb24uCj4gPj4gR290IGl0Lgo+ID4+ Pj4gICAgCWlmIChxdWlya3MgJiBFRElEX1FVSVJLX0ZPUkNFXzZCUEMpCj4gPj4+PiAgICAJCWNv bm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyA9IDY7Cj4gPj4+PiAgICAKPiA+Pj4+IGRpZmYgLS1n aXQgYS9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9yLmggYi9pbmNsdWRlL2RybS9kcm1fY29ubmVj dG9yLmgKPiA+Pj4+IGluZGV4IDM5MDMxOWMuLjVhNDdjMzMgMTAwNjQ0Cj4gPj4+PiAtLS0gYS9p bmNsdWRlL2RybS9kcm1fY29ubmVjdG9yLmgKPiA+Pj4+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9j b25uZWN0b3IuaAo+ID4+Pj4gQEAgLTEzNyw2ICsxMzcsMjggQEAgc3RydWN0IGRybV9zY2RjIHsK PiA+Pj4+ICAgIHN0cnVjdCBkcm1faGRtaV9pbmZvIHsKPiA+Pj4+ICAgIAkvKiogQHNjZGM6IHNp bmsncyBzY2RjIHN1cHBvcnQgYW5kIGNhcGFiaWxpdGllcyAqLwo+ID4+Pj4gICAgCXN0cnVjdCBk cm1fc2NkYyBzY2RjOwo+ID4+Pj4gKwo+ID4+Pj4gKwkvKioKPiA+Pj4+ICsJICogQHljYmNyNDIw X3ZkYl9tb2RlczogYml0bWFwIG9mIG1vZGVzIHdoaWNoIGNhbiBzdXBwb3J0IHljYmNyNDIwCj4g Pj4+PiArCSAqIG91dHB1dCBvbmx5IChub3Qgbm9ybWFsIFJHQi9ZQ0JDUjQ0NC80MjIgb3V0cHV0 cykuIFRoZXJlIGFyZSB0b3RhbAo+ID4+Pj4gKwkgKiAxMDcgVklDcyBkZWZpbmVkIGJ5IENFQS04 NjEtRiBzcGVjLCBzbyB0aGUgc2l6ZSBpcyAxMjggYml0cyB0byBtYXAKPiA+Pj4+ICsJICogdXB0 byAxMjggVklDczsKPiA+Pj4+ICsJICovCj4gPj4+PiArCXVuc2lnbmVkIGxvbmcgeWNiY3I0MjBf dmRiX21vZGVzW0JJVFNfVE9fTE9OR1MoMTI4KV07Cj4gPj4+PiArCj4gPj4+PiArCS8qKgo+ID4+ Pj4gKwkgKiBAeWNiY3I0MjBfdmNiX21vZGVzOiBiaXRtYXAgb2YgbW9kZXMgd2hpY2ggY2FuIHN1 cHBvcnQgeWNiY3I0MjAKPiA+Pj4+ICsJICogb3V0cHV0IGFsc28sIGFsb25nIHdpdGggbm9ybWFs IEhETUkgb3V0cHV0cy4gVGhlcmUgYXJlIHRvdGFsIDEwNwo+ID4+Pj4gKwkgKiBWSUNzIGRlZmlu ZWQgYnkgQ0VBLTg2MS1GIHNwZWMsIHNvIHRoZSBzaXplIGlzIDEyOCBiaXRzIHRvIG1hcCB1cHRv Cj4gPj4+PiArCSAqIDEyOCBWSUNzOwo+ID4+Pj4gKwkgKi8KPiA+Pj4+ICsJdW5zaWduZWQgbG9u ZyB5Y2JjcjQyMF92Y2JfbW9kZXNbQklUU19UT19MT05HUygxMjgpXTsKPiA+Pj4+ICsKPiA+Pj4+ ICsJLyoqIEB5Y2JjcjQyMF92Y2JfbWFwOiBiaXRtYXAgb2YgU1ZEIGluZGV4LCB0byBleHRyYXh0 IHZjYiBtb2RlcyAqLwo+ID4+Pj4gKwl1bnNpZ25lZCBsb25nIHljYmNyNDIwX3ZjYl9tYXA7Cj4g Pj4+PiArCj4gPj4+PiArCS8qKiBAeWNiY3I0MjBfZGNfbW9kZXM6IGJpdG1hcCBvZiBkZWVwIGNv bG9yIHN1cHBvcnQgaW5kZXggKi8KPiA+Pj4+ICsJdTggeWNiY3I0MjBfZGNfbW9kZXM7Cj4gPj4+ IHVudXNlZAo+ID4+IEl0cyB1c2VkLiBXZSBhcmUgcGFyc2luZyA0MjAgZGVlcCBjb2xvciBpbmZv IGFuZCBjaGVja2luZyB0aGUgaXQgaW4KPiA+PiBoZG1pXzEyYnBjX3Bvc3NpYmxlKCkKPiA+IE5v dCBpbiB0aGlzIHBhdGNoLgo+IFllcywgYWN0dWFsbHkgdGhhdCdzIGluIG5leHQgcGF0Y2ggKHBh cnNlIHljYmNyXzQyMF9kZWVwX2NvbG9yKS4gSSB3aWxsIAo+IG1vdmUgaXQgaW4gbmV4dCBwYXRj aC4KPiAKPiAtIFNoYXNoYW5rCj4gPgo+ID4+IFNoYXNoYW5rCj4gPj4+PiAgICB9Owo+ID4+Pj4g ICAgCj4gPj4+PiAgICAvKioKPiA+Pj4+IEBAIC0yMDAsNiArMjIyLDcgQEAgc3RydWN0IGRybV9k aXNwbGF5X2luZm8gewo+ID4+Pj4gICAgI2RlZmluZSBEUk1fQ09MT1JfRk9STUFUX1JHQjQ0NAkJ KDE8PDApCj4gPj4+PiAgICAjZGVmaW5lIERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0NDQJKDE8PDEp Cj4gPj4+PiAgICAjZGVmaW5lIERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0MjIJKDE8PDIpCj4gPj4+ PiArI2RlZmluZSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIwCSgxPDwzKQo+ID4+Pj4gICAgCj4g Pj4+PiAgICAJLyoqCj4gPj4+PiAgICAJICogQGNvbG9yX2Zvcm1hdHM6IEhETUkgQ29sb3IgZm9y bWF0cywgc2VsZWN0cyBiZXR3ZWVuIFJHQiBhbmQgWUNyQ2IKPiA+Pj4+IC0tIAo+ID4+Pj4gMi43 LjQKCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=