From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH v2 2/6] drm/i915/guc: Add GuC css header parser Date: Fri, 25 Sep 2015 17:45:35 +0300 Message-ID: <87a8samub4.fsf@intel.com> References: <1441929372-26140-1-git-send-email-yu.dai@intel.com> <1442954925-4022-1-git-send-email-yu.dai@intel.com> <1442954925-4022-3-git-send-email-yu.dai@intel.com> <56040778.6050103@intel.com> <56044229.8030308@intel.com> <5604494E.4040609@intel.com> <56045BAB.60207@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 29F3C6E103 for ; Fri, 25 Sep 2015 07:42:18 -0700 (PDT) In-Reply-To: <56045BAB.60207@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Yu Dai , Dave Gordon , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAyNCBTZXAgMjAxNSwgWXUgRGFpIDx5dS5kYWlAaW50ZWwuY29tPiB3cm90ZToKPiBP biAwOS8yNC8yMDE1IDEyOjA0IFBNLCBEYXZlIEdvcmRvbiB3cm90ZToKPj4gT24gMjQvMDkvMTUg MTk6MzQsIFl1IERhaSB3cm90ZToKPj4gPgo+PiA+Cj4+ID4gT24gMDkvMjQvMjAxNSAwNzoyMyBB TSwgRGF2ZSBHb3Jkb24gd3JvdGU6Cj4+ID4+IE9uIDIyLzA5LzE1IDIxOjQ4LCB5dS5kYWlAaW50 ZWwuY29tIHdyb3RlOgo+PiA+PiA+IEZyb206IEFsZXggRGFpIDx5dS5kYWlAaW50ZWwuY29tPgo+ PiA+PiA+Cj4+ID4+ID4gQnkgdXNpbmcgaW5mb3JtYXRpb24gZnJvbSBHdUMgY3NzIGhlYWRlciwg d2UgY2FuIGVsaW1pbmF0ZSBzb21lCj4+ID4+ID4gaGFyZCBjb2RlIHcuci50IHNpemUgb2Ygc29t ZSBjb21wb25lbnRzIG9mIGZpcm13YXJlLgo+PiA+PiA+Cj4+ID4+ID4gdjI6IEFkZCBpbmRlbnQg aW50byBET0MgdG8gbWFrZSBmaXhlZC13aWR0aCBmb3JtYXQgcmF0aGVyIHRoYW4KPj4gPj4gPiBj aGFuZ2UgdGhlIHRtcGwuCj4+ID4+ID4KPj4gPj4gPiB2MTogMSkgZ3VjX2Nzc19oZWFkZXIgaXMg ZGVmaW5lZCBhcyBfX3BhY2tlZCBub3cKPj4gPj4gPiAgICAgIDIpIEFkZCBhbmQgY29ycmVjdCBH dUMgcmVsYXRlZCB0b3BpY3MgaW4ga2VybmVsL0RvYwo+PiA+PiA+Cj4+ID4+ID4gU2lnbmVkLW9m Zi1ieTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+Cj4+ID4+ID4gLS0tCj4+ID4+ID4gICBE b2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwgICAgICAgICAgfCAgIDkgKystCj4+ID4+ID4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCAgICAgICAgfCAgIDIgKy0KPj4gPj4g PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19md2lmLmggICB8ICAzNiArKysrKysr KysrKwo+PiA+PiA+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jIHwg MTA3Cj4+ID4+ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCj4+ID4+ID4gICA0IGZp bGVzIGNoYW5nZWQsIDExNyBpbnNlcnRpb25zKCspLCAzNyBkZWxldGlvbnMoLSkKPj4gPj4gPgo+ PiA+PiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwKPj4gPj4g Yi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwKPj4gPj4gPiBpbmRleCA2NmJjNjQ2Li4x MTYzMzJmIDEwMDY0NAo+PiA+PiA+IC0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0udG1w bAo+PiA+PiA+ICsrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0udG1wbAo+PiA+PiA+IEBA IC00MTU1LDE0ICs0MTU1LDE5IEBAIGludCBudW1faW9jdGxzOzwvc3lub3BzaXM+Cj4+ID4+ID4g ICAgICAgICA8dGl0bGU+R3VDLWJhc2VkIENvbW1hbmQgU3VibWlzc2lvbjwvdGl0bGU+Cj4+ID4+ ID4gICAgICAgICA8c2VjdDI+Li4vbGludXgtaW1hZ2UtNC4zLjAtcmMyLWRzZy0xMTAyMi1nOTc2 NWNhZi1kc2ctaW50ZWwtbmlnaHRseV80LjMuMC1yYzItZHNnLTExMDIyLWc5NzY1Y2FmLWRzZy1p bnRlbC1uaWdodGx5LTdfYW1kNjQuZGViCj4+ID4+ID4gICAgICAgICAgIDx0aXRsZT5HdUM8L3Rp dGxlPgo+PiA+PiA+IC0hUGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYyBH dUMtc3BlY2lmaWMgZmlybXdhcmUgbG9hZGVyCj4+ID4+ID4gKyFQZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3VjX2xvYWRlci5jIEd1Qwo+PiA+PiA+ICAgIUlkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9ndWNfbG9hZGVyLmMKPj4gPj4gPiAgICAgICAgIDwvc2VjdDI+Cj4+ID4+ID4gICAg ICAgICA8c2VjdDI+Cj4+ID4+ID4gICAgICAgICAgIDx0aXRsZT5HdUMgQ2xpZW50PC90aXRsZT4K Pj4gPj4gPiAtIVBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMgR3VD LWJhc2VkIGNvbW1hbmQKPj4gPj4gc3VibWlzc2lzb24KPj4gPj4gPiArIVBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMgR3VDIENsaWVudAo+PiA+PiA+ICAgIUlkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKPj4gPj4gPiAgICAgICAgIDwv c2VjdDI+Cj4+ID4+ID4gKyAgICAgIDxzZWN0Mj4KPj4gPj4gPiArICAgICAgICA8dGl0bGU+R3VD IEZpcm13YXJlIExheW91dDwvdGl0bGU+Cj4+ID4+ID4gKyFQZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZ3VjX2xvYWRlci5jIEd1QyBGaXJtd2FyZSBMYXlvdXQKPj4gPj4gPiArIUlkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMKPj4gPj4gPiArICAgICAgPC9zZWN0Mj4K Pj4gPj4gPiAgICAgICA8L3NlY3QxPgo+PiA+PiA+Cj4+ID4+ID4gICAgICAgPHNlY3QxPgo+PiA+ PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAo+PiA+PiBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4+ID4+ID4gaW5kZXggNGVjMmQyNy4u ZTEzODlmYyAxMDA2NDQKPj4gPj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9n dWMuaAo+PiA+PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4+ID4+ ID4gQEAgLTcxLDYgKzcxLDcgQEAgc3RydWN0IGludGVsX2d1Y19mdyB7Cj4+ID4+ID4gICAgICAg c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKiAgICBndWNfZndfb2JqOwo+PiA+PiA+ICAgICAg IGVudW0gaW50ZWxfZ3VjX2Z3X3N0YXR1cyAgICBndWNfZndfZmV0Y2hfc3RhdHVzOwo+PiA+PiA+ ICAgICAgIGVudW0gaW50ZWxfZ3VjX2Z3X3N0YXR1cyAgICBndWNfZndfbG9hZF9zdGF0dXM7Cj4+ ID4+ID4gKyAgICBzdHJ1Y3QgZ3VjX2Nzc19oZWFkZXIgICAgICAgIGd1Y19md19oZWFkZXI7Cj4+ ID4+ID4KPj4gPj4gPiAgICAgICB1aW50MTZfdCAgICAgICAgICAgIGd1Y19md19tYWpvcl93YW50 ZWQ7Cj4+ID4+ID4gICAgICAgdWludDE2X3QgICAgICAgICAgICBndWNfZndfbWlub3Jfd2FudGVk Owo+PiA+PiA+IEBAIC04MCw3ICs4MSw2IEBAIHN0cnVjdCBpbnRlbF9ndWNfZncgewo+PiA+PiA+ Cj4+ID4+ID4gICBzdHJ1Y3QgaW50ZWxfZ3VjIHsKPj4gPj4gPiAgICAgICBzdHJ1Y3QgaW50ZWxf Z3VjX2Z3IGd1Y19mdzsKPj4gPj4gPiAtCj4+ID4+ID4gICAgICAgdWludDMyX3QgbG9nX2ZsYWdz Owo+PiA+PiA+ICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpsb2dfb2JqOwo+PiA+ PiA+Cj4+ID4+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19m d2lmLmgKPj4gPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oCj4+ID4+ ID4gaW5kZXggZTFmNDdiYS4uMDA2ZGMwZCAxMDA2NDQKPj4gPj4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oCj4+ID4+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaAo+PiA+PiA+IEBAIC0xMjIsNiArMTIyLDQyIEBACj4+ID4+ ID4KPj4gPj4gPiAgICNkZWZpbmUgR1VDX0NUTF9NQVhfRFdPUkRTICAgICAgICAoR1VDX0NUTF9S U1JWRCArIDEpCj4+ID4+ID4KPj4gPj4gPiArc3RydWN0IGd1Y19jc3NfaGVhZGVyIHsKPj4gPj4g PiArICAgIHVpbnQzMl90IG1vZHVsZV90eXBlOwo+PiA+PiA+ICsgICAgdWludDMyX3QgaGVhZGVy X2xlbjsgLyogaGVhZGVyIGxlbmd0aCBwbHVzIHNpemUgb2YgYWxsIG90aGVyCj4+ID4+IGtleXMg Ki8KPj4gPj4gPiArICAgIHVpbnQzMl90IGhlYWRlcl92ZXJzaW9uOwo+PiA+PiA+ICsgICAgdWlu dDMyX3QgbW9kdWxlX2lkOwo+PiA+PiA+ICsgICAgdWludDMyX3QgbW9kdWxlX3ZlbmRvcjsKPj4g Pj4gPiArICAgIHVuaW9uIHsKPj4gPj4gPiArICAgICAgICBzdHJ1Y3Qgewo+PiA+PiA+ICsgICAg ICAgICAgICB1aW50OF90IGRheTsKPj4gPj4gPiArICAgICAgICAgICAgdWludDhfdCBtb250aDsK Pj4gPj4gPiArICAgICAgICAgICAgdWludDE2X3QgeWVhcjsKPj4gPj4gPiArICAgICAgICB9Owo+ PiA+PiA+ICsgICAgICAgIHVpbnQzMl90IGRhdGU7Cj4+ID4+ID4gKyAgICB9Owo+PiA+PiA+ICsg ICAgdWludDMyX3Qgc2l6ZTsgLyogdUNvZGUgc2l6ZSBwbHVzIGhlYWRlcl9sZW4gKi8KPj4gPj4g PiArICAgIHVpbnQzMl90IGtleV9zaXplOwo+PiA+PiA+ICsgICAgdWludDMyX3QgbW9kdWx1c19z aXplOwo+PiA+PiA+ICsgICAgdWludDMyX3QgZXhwb25lbnRfc2l6ZTsKPj4gPj4gPiArICAgIHVu aW9uIHsKPj4gPj4gPiArICAgICAgICBzdHJ1Y3Qgewo+PiA+PiA+ICsgICAgICAgICAgICB1aW50 OF90IGhvdXI7Cj4+ID4+ID4gKyAgICAgICAgICAgIHVpbnQ4X3QgbWluOwo+PiA+PiA+ICsgICAg ICAgICAgICB1aW50MTZfdCBzZWM7Cj4+ID4+ID4gKyAgICAgICAgfTsKPj4gPj4gPiArICAgICAg ICB1aW50MzJfdCB0aW1lOwo+PiA+PiA+ICsgICAgfTsKPj4gPj4gPiArCj4+ID4+ID4gKyAgICBj aGFyIHVzZXJuYW1lWzhdOwo+PiA+PiA+ICsgICAgY2hhciBidWlsZG51bWJlclsxMl07Cj4+ID4+ ID4gKyAgICB1aW50MzJfdCBkZXZpY2VfaWQ7Cj4+ID4+ID4gKyAgICB1aW50MzJfdCBndWNfc3df dmVyc2lvbjsKPj4gPj4gPiArICAgIHVpbnQzMl90IHByb2RfcHJlcHJvZF9mdzsKPj4gPj4gPiAr ICAgIHVpbnQzMl90IHJlc2VydmVkWzEyXTsKPj4gPj4gPiArICAgIHVpbnQzMl90IGhlYWRlcl9p bmZvOwo+PiA+PiA+ICt9IF9fcGFja2VkOwo+PiA+PiA+ICsKPj4gPj4gPiAgIHN0cnVjdCBndWNf ZG9vcmJlbGxfaW5mbyB7Cj4+ID4+ID4gICAgICAgdTMyIGRiX3N0YXR1czsKPj4gPj4gPiAgICAg ICB1MzIgY29va2llOwo+PiA+PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9ndWNfbG9hZGVyLmMKPj4gPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNf bG9hZGVyLmMKPj4gPj4gPiBpbmRleCA0MDI0MWYzLi5hNjcwM2I0IDEwMDY0NAo+PiA+PiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwo+PiA+PiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwo+PiA+PiA+IEBAIC0yMTUs MTggKzIxNSwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZ3VjX3Vjb2RlX3Jlc3BvbnNlKHN0cnVj dAo+PiA+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gPj4gPiAgICAgICAgICAgKCh2 YWwgJiBHU19NSUFfQ09SRV9TVEFURSkgJiYgdWtfdmFsID09Cj4+ID4+IEdTX1VLRVJORUxfTEFQ SUNfRE9ORSkpOwo+PiA+PiA+ICAgfQo+PiA+PiA+Cj4+ID4+ID4gLS8qCj4+ID4+ID4gLSAqIFRy YW5zZmVyIHRoZSBmaXJtd2FyZSBpbWFnZSB0byBSQU0gZm9yIGV4ZWN1dGlvbiBieSB0aGUKPj4g Pj4gbWljcm9jb250cm9sbGVyLgo+PiA+PiA+ICsvKioKPj4gPj4gPiArICogRE9DOiBHdUMgRmly bXdhcmUgTGF5b3V0Cj4+ID4+ID4gICAgKgo+PiA+PiA+IC0gKiBHdUMgRmlybXdhcmUgbGF5b3V0 Ogo+PiA+PiA+IC0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIC0tLS0KPj4g Pj4gPiAtICogfCAgICAgICAgICBDU1MgaGVhZGVyICAgICAgICAgICB8ICAxMjhCCj4+ID4+ID4g LSAqIHwgY29udGFpbnMgbWFqb3IvbWlub3IgdmVyc2lvbiAgfAo+PiA+PiA+IC0gKiArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIC0tLS0KPj4gPj4gPiAtICogfCAgICAgICAgICAg ICB1Q29kZSAgICAgICAgICAgICB8Cj4+ID4+ID4gLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKyAgLS0tLQo+PiA+PiA+IC0gKiB8ICAgICAgICAgUlNBIHNpZ25hdHVyZSAgICAg ICAgIHwgIDI1NkIKPj4gPj4gPiAtICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r ICAtLS0tCj4+ID4+ID4gKyAqIFRoZSBHdUMgZmlybXdhcmUgbGF5b3V0IGxvb2tzIGxpa2UgdGhp czoKPj4gPj4gPiArICoKPj4gPj4gPiArICogICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKwo+PiA+PiA+ICsgKiAgICAgfCAgICAgICAgZ3VjX2Nzc19oZWFkZXIgICAgICAgICB8 Cj4+ID4+ID4gKyAqICAgICB8IGNvbnRhaW5zIG1ham9yL21pbm9yIHZlcnNpb24gIHwKPj4gPj4g PiArICogICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+PiA+PiA+ICsgKiAg ICAgfCAgICAgICAgICAgICB1Q29kZSAgICAgICAgICAgICB8Cj4+ID4+ID4gKyAqICAgICArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPj4gPj4gPiArICogICAgIHwgICAgICAgICBS U0Egc2lnbmF0dXJlICAgICAgICAgfAo+PiA+PiA+ICsgKiAgICAgKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rCj4+ID4+ID4gKyAqICAgICB8ICAgICAgICAgIG1vZHVsdXMga2V5ICAg ICAgICAgIHwKPj4gPj4gPiArICogICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Kwo+PiA+PiA+ICsgKiAgICAgfCAgICAgICAgICBleHBvbmVudCB2YWwgICAgICAgICB8Cj4+ID4+ ID4gKyAqICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPj4gPj4gPiArICoK Pj4gPj4gPiArICogVGhlIGZpcm13YXJlIG1heSBvciBtYXkgbm90IGhhdmUgbW9kdWx1cyBrZXkg YW5kIGV4cG9uZW50IGRhdGEuCj4+ID4+IFRoZSBoZWFkZXIsCj4+ID4+ID4gKyAqIHVDb2RlIGFu ZCBSU0Egc2lnbmF0dXJlIGFyZSBtdXN0LWhhdmUgY29tcG9uZW50cyB0aGF0IHdpbGwgYmUKPj4g Pj4gdXNlZCBieSBkcml2ZXIuCj4+ID4+ID4gKyAqIFNpemUgb2YgZWFjaCBjb21wb25lbnRzIChp biBkd29yZHMpIGNhbiBiZSBmb3VuZCBpbiBoZWFkZXIuIEluCj4+ID4+IHRoZSBjYXNlIHRoYXQK Pj4gPj4gPiArICogbW9kdWx1cyBhbmQgZXhwb25lbnQgYXJlIG5vdCBwcmVzZW50IGluIGZ3LCB0 aGUgc2l6ZSB2YWx1ZSBzdGlsbAo+PiA+PiBhcHBlYXJzIGluCj4+ID4+ID4gKyAqIGhlYWRlci4K Pj4gPj4KPj4gPj4gSSB0aGluayB0aGlzIHBpY3R1cmUgJiBjb21tZW50YXJ5IGJlbG9uZ3MganVz dCBhaGVhZCBvZiB0aGUgc3RydWN0dXJlCj4+ID4+IGRlZmluaXRpb24gaW4gaW50ZWxfZ3VjX2Z3 aWYuaCwgcmF0aGVyIHRoYW4gd2l0aCB0aGUgY29kZSBoZXJlLiBBbHNvLAo+PiA+Cj4+ID4gWWVz LCB0aGlzIGNhbiBiZSBtb3ZlZCB0byBpbnRlbF9ndWNfZndpZi5oIHJpZ2h0IGJlZm9yZSBjc3Nf aGVhZGVyCj4+ID4gc3RydWN0dXJlIGRlZmluaXRpb24uCj4+ID4KPj4gPj4gcGVyaGFwcyB3ZSBu ZWRlIGEgYml0IG1vcmUgZXhwbGFuYXRpb24gb2YgdGhlICcqc2l6ZScgZmllbGRzLCBzaW5jZSB0 aGV5Cj4+ID4+IGhhdmUgYmVlbiBkZWZpbmVkIGluIHN1Y2ggYSBjb3VudGVyLWludHVpdGl2ZSB3 YXkgOiggIEkgc3VnZ2VzdDoKPj4gPj4KPj4gPj4gICAgKiBBbGwgdGhlICdzaXplcycgaW4gdGhl IENTUyBoZWFkZXIgYXJlIGV4cHJlc3NlZCBhcyBudW1iZXJzIG9mCj4+ID4+ICAgICogImR3b3Jk cyIsIGFuZCB0aGVyZWZvcmUgaGF2ZSB0byBiZSBtdWx0aXBsaWVkIGJ5IHNpemVvZiAodTMyKSB0 bwo+PiA+PiAgICAqIGdldCBhY3R1YWwgc2l6ZXMgKGluIHRoZSBub3JtYWwgc2Vuc2Ugb2YgYnl0 ZSBjb3VudHMpLgo+PiA+PiAgICAqCj4+ID4KPj4gPiBJbiBjb21tZW50cywgSSBjbGVhcmx5IG1l bnRpb24gdGhhdCBhbGwgc2l6ZSBvZiB0aGVzZSBndWMgY29tcG9uZW50cyBhcmUKPj4gPiBpbiBk d29yZHMuIEluIG5leHQgdmVyc2lvbiwgSSBjYW4gYWRkIHN1cmZpeCBfZHdvcmQgdG8gYXZvaWQg Y29uZnVzZS4KPj4KPj4gVGhlIG5hbWVzIGFyZSBzeXN0ZW1hdGljYWxseSAoaWYgbm90IHlldCBh dXRvbWF0aWNhbGx5KSBkZXJpdmVkIGZyb20gdGhlCj4+IEd1QyBoZWFkZXIgdmVyc2lvbiwgc28g YmVzdCBub3QgdG8gY2hhbmdlIHRoZW0uIFRoZSBjb21tZW50ICppbiB0aGUKPj4gaGVhZGVyIGZp bGUqIHdpbGwgc3VmZmljZS4KPj4KPj4gPj4gICAgKiBUaGUgJ3NpemUnIGZpZWxkIGlzIHRoZSB0 b3RhbCBzaXplIG9mIHRoZSBkYXRhIGluIHRoZSBwaWN0dXJlCj4+ID4+ICAgICogYWJvdmUsIGFu ZCBzaG91bGQgbWF0Y2ggdGhlIHNpemUgb2YgdGhlIGZpbGUgYXMgcHJvdmlkZWQgYnkgdGhlCj4+ ID4+ICAgICogbG9hZGVyOyB0aGUgZmlsZSBpcyBpbnZhbGlkIGlmIHRoaXMgc2l6ZSBmaWVsZCBp cyBncmVhdGVyIHRoYW4KPj4gPj4gICAgKiB0aGUgYWN0dWFsIGZpbGVzaXplLgo+PiA+Cj4+ID4g VGhpcyBpcyBub3QgcmlnaHQgYXNzdW1wdGlvbi4gQW5kLCB0aGF0IHdpbGwgY2hhbmdlIHNvbWUg ZXhwZWN0YXRpb24KPj4gPiBiZWxvdyByZWxhdGVkIHRvIHNpemUgY2hlY2tpbmcuIEkgc2hvdWxk IGhhdmUgbWFrZSBteSBjb21tZW50cyBtb3JlCj4+ID4gY2xlYXIuIEJ1dAo+Pgo+PiBPSywgSSBz ZWUsIHdlJ3JlIGdvaW5nIHRvIGFsbG93IGEgdHJ1bmNhdGVkIGltYWdlIGZpbGUsIGFzIGxvbmcg YXMgb25seQo+PiB1bnVzZWQgc2VjdGlvbnMgYXJlIG1pc3NpbmcgLi4uCj4+Cj4+ID4gIlRoZSBm aXJtd2FyZSBtYXkgb3IgbWF5IG5vdCBoYXZlIG1vZHVsdXMga2V5IGFuZCBleHBvbmVudCBkYXRh IC4uLiBJbgo+PiA+IHRoZSBjYXNlIHRoYXQgbW9kdWx1cyBhbmQgZXhwb25lbnQgYXJlIG5vdCBw cmVzZW50IGluIGZ3LCB0aGUgc2l6ZSB2YWx1ZQo+PiA+IHN0aWxsIGFwcGVhcnMgaW4gaGVhZGVy LiIKPj4gPgo+PiA+IFdlIGhhdmUgZGlzY3Vzc2VkIHRoaXMgd2l0aCBmaXJtd2FyZSB0ZWFtLiBT aW5jZSB0aGUgJ3NpemUnIChhY3R1YWxseQo+PiA+IHRoZSBoZWFkZXIpIGlzIHVzZWQgdG8gZ2Vu ZXJhdGUgUlNBIGtleSwgd2UgY2FuJ3QgY2hhbmdlIGl0IGFmdGVyCj4+ID4gc2lnbmluZy4gU28s IHdlIGhhdmUgaW5mb3JtYXRpb24gb2YgbW9kdWx1cyBldGMuIGJ1dCBkcml2ZXIgZG9lc24ndCBu ZWVkCj4+ID4gdGhlbSB0byBsb2FkIGZpcm13YXJlLiBMaWtlbHkgdGhleSBhcmUgbm90IHBhcnQg b2YgdGhlIHJlbGVhc2UgYmluIGZpbGUuCj4+ID4gU28gdGhlICdzaXplJyBtYXkgYmUgbGFyZ2Vy IHRoYW4gdGhlIGJpbiBmaWxlIHNpemUuIEN1cnJlbnRseSwgZncgY2hlY2sKPj4gPiBpcyBiYXNl ZCBvbiB0aGUgZm9sbG93aW5nIHJ1bGVzIChtYXliZSBJIG5lZWQgYWRkIHRoZXNlIHRvIHRoZSBj b21tZW50Cj4+ID4gdG9vKToKPj4gPgo+PiA+IDEuIEhlYWRlciwgdUNvZGUgYW5kIFJTQSBhcmUg bXVzdC1oYXZlIGNvbXBvbmVudHMuCj4+ID4gMi4gQWxsIGZpcm13YXJlIGNvbXBvbmVudHMsIGlm IHRoZXkgcHJlc2VudCwgYXJlIGluIHRoZSBzZXF1ZW5jZQo+PiA+ICAgICBpbGx1c3RyYXRlZCBp biB0aGUgbGF5b3V0IHRhYmxlLgo+PiA+IDMuIFNpemUgaW5mbyBvZiBlYWNoIGNvbXBvbmVudCBj YW4gYmUgZm91bmQgaW4gaGVhZGVyLCBpbiBkd29yZHMuCj4+ID4gNC4gTW9kdWx1cyBhbmQgZXhw b25lbnQga2V5IGFyZSBub3QgcmVxdWlyZWQgYnkgZHJpdmVyLiBUaGV5IG1heSBub3QKPj4gPiAg ICAgYXBwZWFyIGluIGZ3IGJ1dCB0aGVpciBzaXplIGluZm8gYXJlIHJlY29yZGVkIGluIGhlYWRl ciBhbnl3YXkuCj4+ID4KPj4gPj4gICAgKiBUaGUgJ2hlYWRlcl9sZW4nIGZpZWxkIGNvbnRhaW5z IHRoZSB0b3RhbCBzaXplIG9mIHRoZSBub24tdUNvZGUKPj4gPj4gICAgKiBzZWN0aW9ucyBvZiB0 aGUgZmlsZSAoaS5lLiB0aGUgc3VtIG9mIHRoZSBzaXplcyBvZiB0aGUgQ1NTIGhlYWRlciwKPj4g Pj4gICAgKiB0aGUgUlNBIHNpZ25hdHVyZSwgdGhlIG1vZHVsdXMga2V5IGFuZCB0aGUgZXhwb25l bnQpLiBUaHVzLCB0byBmaW5kCj4+ID4+ICAgICogdGhlIHNpemUgb2YgdGhlIHVDb2RlIHdlIHN1 YnRyYWN0IHRoaXMgdG90YWwgZnJvbSAnc2l6ZScsIGJ1dCB0bwo+PiA+PiAgICAqIGZpbmQgdGhl IHNpemUgb2YgdGhlIENTUyBoZWFkZXIgKHdoaWNoIGFsc28gZGVmaW5lcyB0aGUgc3RhcnQgb2YK Pj4gPj4gICAgKiB0aGUgdUNvZGUpLCB3ZSBzdWJ0cmFjdCB0aGUgb3RoZXIgdGhyZWUgc2l6ZXMg ZnJvbSB0aGlzIHRvdGFsLiBUaGUKPj4gPj4gICAgKiBzaXplIG9mIHRoZSBDU1MgaGVhZGVyIHRo dXMgY2FsY3VsYXRlZCBzaG91bGQgbWF0Y2ggc2l6ZW9mKHN0cnVjdAo+PiA+PiAgICAqIGd1Y19j c3NfaGVhZGVyKSAob3IgZXhjZWVkIGl0OyBhbGxvd2luZyBpdCB0byBiZSBsYXJnZXIgcGVybWl0 cwo+PiA+PiAgICAqIGZ1dHVyZSBleHBhbnNpb24gb2YgdGhlIENTUyBoZWFkZXIgb3IgaW5zZXJ0 aW9uIG9mIGV4dHJhIHNlY3Rpb25zCj4+ID4+ICAgICogaGVyZSkuIFRoZSBmaWxlIGlzIGludmFs aWQgaWYgdGhpcyBjYWxjdWxhdGVkIHNpemUgaXMgbGVzcyB0aGFuCj4+ID4+ICAgICogc2l6ZW9m KHN0cnVjdCBndWNfY3NzX2hlYWRlcikuCj4+ID4+ICAgICoKPj4gPj4gICAgKiBUaGUgc2l6ZSBv ZiB0aGUgUlNBIHNpZ25hdHVyZSBtdXN0IG5vdCBleGNlZWQgdGhhdCBleHBlY3RlZCBieSB0aGUK Pj4gPj4gICAgKiBoYXJkd2FyZS4gVGhlIGZpbGUgaXMgaW52YWxpZCBpZiB0aGUgdmFsdWUgb2Yg dGhpcyBmaWVsZCBpcyBtb3JlCj4+ID4+ICAgICogdGhhbiB0aGUgc2l6ZSBvZiB0aGUgc2lnbmF0 dXJlIGFyZWEgaW4gdGhlIEd1QyByZWdpc3RlciBzcGFjZSwKPj4gPj4gICAgKiBjdXJyZW50bHkg MHgxMDAgYnl0ZXMuCj4+ID4+ICAgICoKPj4gPj4gICAgKiBEdWUgdG8gdGhlIHJlcXVpcmVtZW50 cyBvZiB0aGUgRE1BIGVuZ2luZSwgdGhlIHRvdGFsIHNpemUgb2YgdGhlCj4+ID4+ICAgICogc2Vj dGlvbnMgdGhhdCBhcmUgRE1BJ2QgaW50byB0aGUgR3VDJ3MgbWVtb3J5IChDU1MgaGVhZGVyIHBs dXMKPj4gPj4gICAgKiB1Q29kZSkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBjYWNoZSBsaW5l IHNpemUuIFRoZSBmaWxlIGlzCj4+ID4+ICAgICogaW52YWxpZCBpZiB0aGlzIHJlcXVpcmVtZW50 IGlzIG5vdCBtZXQuCj4+ID4KPj4gPiBBbGwgc3VnZ2VzdGlvbnMgYWJvdmUgYXJlIHZhbGlkIGF0 IHNvbWUgcG9pbnRzLiBIb3dldmVyLCBiZSBub3RlIHRoYXQsCj4+ID4gdGhlIGZpcm13YXJlIHNp emUgY2hlY2tpbmcgSSBwdXQgaW50byBjb2RlIGlzIGFjdHVhbGx5IHRvIHByb3RlY3QgZHJpdmVy Cj4+ID4gLSBqdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGEgYnVnIGNoZWNrIGR1ZSB0byBt ZW1vcnkgYWNjZXNzCj4+ID4gdmlvbGF0aW9uLiBObyBtYXR0ZXIgaG93IG11Y2ggcHJvdGVjdGlv biB5b3UgcHV0IGludG8gZHJpdmVyLCB5b3Ugc3RpbGwKPj4gPiBjYW4ndCByZWplY3QgdGhlIGNh c2UgYnkgZHJpdmVyIGlmIHNvbWVvbmUgbW9kaWZpZXMgb25lIGJ5dGUgb2YgdUNvZGUuCj4+ID4g U28sIGFzIGxvbmcgYXMgd2UgaGF2ZSB0aGUgYml0cyBvZiBoZWFkZXIsIHVDb2RlIGFuZCBSU0Es IHdlIHdpbGwgbG9hZAo+PiA+IGl0LiBIVyB3aWxsIGZhaWwgaXQgYW55d2F5IGlmIGFueXRoaW5n IGdvZXMgd3JvbmcuCj4+Cj4+IEFsbCB0aGUgY2hlY2tzIEkgc3VnZ2VzdGVkIHdlcmUgb2YgdGhp cyB0eXBlLiBGb3IgZXhhbXBsZSwgdGhlIGNoYW5nZQo+PiBmcm9tIHVzaW5nIFVPU19SU0FfU0lH X1NJWkUgdG8gdGhlIGNhbGN1bGF0ZWQgUlNBLXNpZ25hdHVyZS1zaXplIHdvdWxkCj4+IGhhdmUg YWxsb3dlZCBhIG1hbGZvcm1lZCBmaWxlIHRvIHRyaWdnZXIgd3JpdGluZyBiZXlvbmQgdGhlIDI1 NiBieXRlcyBvZgo+PiBzaWduYXR1cmUtcmVnaXN0ZXIgc3BhY2UsIHdpdGggdW5wcmVkaWN0YWJs ZSBlZmZlY3RzLgo+Pgo+PiBFdmVuIGlmIHRoZSB0cmFpbGluZyBzZWN0aW9ucyB0aGVtc2VsdmVz IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlCj4+IGltYWdlIGZpbGUsIHRoZSBhc3NlcnRpb25z IGFib3V0IHRoZSBudW1lcmljYWwgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZQo+PiAnKnNpemUn IHZhbHVlcyBpbiB0aGUgQ1NTIGhlYWRlciByZW1haW4gdmFsaWQgYW5kIHNob3VsZCBiZSBjaGVj a2VkLgo+Pgo+PiA+PiBUaGUgcmVzdCBvZiB0aGlzIGNvbW1lbnQgY2FuIHN0YXkgd2l0aCB0aGUg Y29kZSAuLi4KPj4gPj4KPj4gPj4gPiAgICAqCj4+ID4+ID4gICAgKiBBcmNoaXRlY3R1cmFsbHks IHRoZSBETUEgZW5naW5lIGlzIGJpZGlyZWN0aW9uYWwsIGFuZCBjYW4KPj4gPj4gcG90ZW50aWFs bHkgZXZlbgo+PiA+PiA+ICAgICogdHJhbnNmZXIgYmV0d2VlbiBHVFQgbG9jYXRpb25zLiBUaGlz IGZ1bmN0aW9uYWxpdHkgaXMgbGVmdCBvdXQKPj4gPj4gb2YgdGhlIEFQSQo+PiA+PiA+IEBAIC0y MzYsMzAgKzI0Nyw0MiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZ3VjX3Vjb2RlX3Jlc3BvbnNlKHN0 cnVjdAo+PiA+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gPj4gPiAgICAqIERNQSBl bmdpbmUgaW4gb25lIG9wZXJhdGlvbiwgd2hlcmVhcyB0aGUgUlNBIHNpZ25hdHVyZSBpcwo+PiA+ PiBsb2FkZWQgdmlhIE1NSU8uCj4+ID4+ID4gICAgKi8KPj4gPj4gPgo+PiA+PiA+IC0jZGVmaW5l IFVPU19DU1NfSEVBREVSX09GRlNFVCAgICAgICAgMAo+PiA+PiA+IC0jZGVmaW5lIFVPU19WRVJf TUlOT1JfT0ZGU0VUICAgICAgICAweDQ0Cj4+ID4+ID4gLSNkZWZpbmUgVU9TX1ZFUl9NQUpPUl9P RkZTRVQgICAgICAgIDB4NDYKPj4gPj4gPiAtI2RlZmluZSBVT1NfQ1NTX0hFQURFUl9TSVpFICAg ICAgICAweDgwCj4+ID4+ID4gLSNkZWZpbmUgVU9TX1JTQV9TSUdfU0laRSAgICAgICAgMHgxMDAK Pj4gPj4gPiAtCj4+ID4+ID4gKy8qCj4+ID4+ID4gKyAqIFRyYW5zZmVyIHRoZSBmaXJtd2FyZSBp bWFnZSB0byBSQU0gZm9yIGV4ZWN1dGlvbiBieSB0aGUKPj4gPj4gbWljcm9jb250cm9sbGVyLgo+ PiA+PiA+ICsgKi8KPj4gPj4gPiAgIHN0YXRpYyBpbnQgZ3VjX3Vjb2RlX3hmZXJfZG1hKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gPj4gPiAgIHsKPj4gPj4gPiAgICAgICBz dHJ1Y3QgaW50ZWxfZ3VjX2Z3ICpndWNfZncgPSAmZGV2X3ByaXYtPmd1Yy5ndWNfZnc7Cj4+ID4+ ID4gKyAgICBzdHJ1Y3QgZ3VjX2Nzc19oZWFkZXIgKmhlYWRlciA9ICZndWNfZnctPmd1Y19md19o ZWFkZXI7Cj4+ID4+ID4gICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmZ3X29iaiA9 IGd1Y19mdy0+Z3VjX2Z3X29iajsKPj4gPj4gPiAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldDsK Pj4gPj4gPiAgICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnNnID0gZndfb2JqLT5wYWdlczsKPj4gPj4g PiAtICAgIHUzMiBzdGF0dXMsIHVjb2RlX3NpemUsIHJzYVtVT1NfUlNBX1NJR19TSVpFIC8gc2l6 ZW9mKHUzMildOwo+PiA+PiA+ICsgICAgdTMyIHN0YXR1cywgaGVhZGVyX3NpemUsIHJzYV9zaXpl LCB1Y29kZV9zaXplLCAqcnNhOwo+PiA+PiA+ICAgICAgIGludCBpLCByZXQgPSAwOwo+PiA+Pgo+ PiA+PiBJIGRvbid0IGxpa2UgZG9pbmcgdGhlIGNvbXBsaWNhdGVkIHNpemUtYmFzZWQgY2FsY3Vs YXRpb25zIGluIHRoZSBETUEKPj4gPj4gcm91dGluZTsgSSdkIHJhdGhlciB0aGUgaW1wb3J0YW50 IHZhbHVlcyAoUlNBIHN0YXJ0L3NpemUsIENTUyt1Q29kZQo+PiA+PiBzdGFydC9zaXplKSB3ZXJl IHByZWNhbGN1bGF0ZWQgZHVyaW5nIGxvYWRpbmcgYW5kIHNhdmVkIGluIHRoZSBzdHJ1Y3QKPj4g Pj4gaW50ZWxfZ3VjX2Z3IG9yIGEgbWVtYmVyIHRoZXJlb2Ygc28gdGhhdCB0aGlzIGNvZGUgYWxy ZWFkeSBoYXMgdGhlIGV4YWN0Cj4+ID4+IG51bWJlcnMgaXQgbmVlZHMgd2l0aG91dCBhbnkgZnVy dGhlciBjb21wdXRhdGlvbi4KPj4gPgo+PiA+IFRoaXMgaXMgYSBnb29kIHBvaW50Lgo+PiA+Cj4+ ID4+ID4gLSAgICAvKiB1Q29kZSBzaXplLCBhbHNvIGlzIHdoZXJlIFJTQSBzaWduYXR1cmUgc3Rh cnRzICovCj4+ID4+ID4gLSAgICBvZmZzZXQgPSB1Y29kZV9zaXplID0gZ3VjX2Z3LT5ndWNfZndf c2l6ZSAtIFVPU19SU0FfU0lHX1NJWkU7Cj4+ID4+ID4gLSAgICBJOTE1X1dSSVRFKERNQV9DT1BZ X1NJWkUsIHVjb2RlX3NpemUpOwo+PiA+PiA+ICsgICAgLyogVGhlIGhlYWRlciBwbHVzIHVDb2Rl IHdpbGwgYmUgY29waWVkIHRvIFdPUENNIHZpYSBETUEsCj4+ID4+IGV4Y2x1ZGluZyBhbnkKPj4g Pj4gPiArICAgICAqIG90aGVyIGNvbXBvbmVudHMgKi8KPj4gPj4gPiArICAgIGhlYWRlcl9zaXpl ID0gKGhlYWRlci0+aGVhZGVyX2xlbiAtIGhlYWRlci0+a2V5X3NpemUgLQo+PiA+PiA+ICsgICAg ICAgIGhlYWRlci0+bW9kdWx1c19zaXplIC0gaGVhZGVyLT5leHBvbmVudF9zaXplKSAqIHNpemVv Zih1MzIpOwo+PiA+PiA+ICsgICAgdWNvZGVfc2l6ZSA9IChoZWFkZXItPnNpemUgLSBoZWFkZXIt PmhlYWRlcl9sZW4pICogc2l6ZW9mKHUzMik7Cj4+ID4+ID4gKwo+PiA+PiA+ICsgICAgSTkxNV9X UklURShETUFfQ09QWV9TSVpFLCBoZWFkZXJfc2l6ZSArIHVjb2RlX3NpemUpOwo+PiA+PiA+ICsK Pj4gPj4gPiArICAgIC8qIHdoZXJlIFJTQSBzaWduYXR1cmUgc3RhcnRzICovCj4+ID4+ID4gKyAg ICBvZmZzZXQgPSBoZWFkZXJfc2l6ZSArIHVjb2RlX3NpemU7Cj4+ID4+ID4gKwo+PiA+PiA+ICsg ICAgcnNhX3NpemUgPSBoZWFkZXItPmtleV9zaXplICogc2l6ZW9mKHUzMik7Cj4+IChoZWFkZXIt PmtleV9zaXplIG1pZ2h0IGJlLCBzYXksIDB4ODApID0+IHJzYV9zaXplIGlzIDB4MjAwCj4+ID4+ ID4gKyAgICByc2EgPSBrbWFsbG9jKHJzYV9zaXplLCBHRlBfS0VSTkVMKTsKPj4gPj4gPiArICAg IGlmICghcnNhKQo+PiA+PiA+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+PiA+PiA+Cj4+ID4+ ID4gICAgICAgLyogQ29weSBSU0Egc2lnbmF0dXJlIGZyb20gdGhlIGZ3IGltYWdlIHRvIEhXIGZv ciB2ZXJpZmljYXRpb24gKi8KPj4gPj4gPiAtICAgIHNnX3Bjb3B5X3RvX2J1ZmZlcihzZy0+c2ds LCBzZy0+bmVudHMsIHJzYSwgVU9TX1JTQV9TSUdfU0laRSwKPj4gPj4gb2Zmc2V0KTsKPj4gPj4g PiAtICAgIGZvciAoaSA9IDA7IGkgPCBVT1NfUlNBX1NJR19TSVpFIC8gc2l6ZW9mKHUzMik7IGkr KykKPj4gPj4gPiArICAgIHNnX3Bjb3B5X3RvX2J1ZmZlcihzZy0+c2dsLCBzZy0+bmVudHMsIHJz YSwgcnNhX3NpemUsIG9mZnNldCk7Cj4+ID4+ID4gKyAgICBmb3IgKGkgPSAwOyBpIDwgcnNhX3Np emUgLyBzaXplb2YodTMyKTsgaSsrKQo+PiA+PiA+ICAgICAgICAgICBJOTE1X1dSSVRFKFVPU19S U0FfU0NSQVRDSF8wICsgaSAqIHNpemVvZih1MzIpLCByc2FbaV0pOwo+PiBpKnNpemVvZih1MzIp IGhhZCBiZXR0ZXIgbm90IGV4Y2VlZCAweDEwMCEgT09QUyEKPj4gPj4gPgo+PiA+PiA+ICsgICAg a2ZyZWUocnNhKTsKPj4gPj4gPiArCj4+ID4+ID4gICAgICAgLyogU2V0IHRoZSBzb3VyY2UgYWRk cmVzcyBmb3IgdGhlIG5ldyBibG9iICovCj4+ID4+ID4gICAgICAgb2Zmc2V0ID0gaTkxNV9nZW1f b2JqX2dndHRfb2Zmc2V0KGZ3X29iaik7Cj4+ID4+ID4gICAgICAgSTkxNV9XUklURShETUFfQURE Ul8wX0xPVywgbG93ZXJfMzJfYml0cyhvZmZzZXQpKTsKPj4gPj4gPiBAQCAtNDY1LDEwICs0ODgs OCBAQCBzdGF0aWMgdm9pZCBndWNfZndfZmV0Y2goc3RydWN0IGRybV9kZXZpY2UKPj4gPj4gKmRl diwgc3RydWN0IGludGVsX2d1Y19mdyAqZ3VjX2Z3KQo+PiA+PiA+ICAgewo+PiA+PiA+ICAgICAg IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4+ID4+ID4gICAgICAgY29uc3Qgc3Ry dWN0IGZpcm13YXJlICpmdzsKPj4gPj4gPiAtICAgIGNvbnN0IHU4ICpjc3NfaGVhZGVyOwo+PiA+ PiA+IC0gICAgY29uc3Qgc2l6ZV90IG1pbnNpemUgPSBVT1NfQ1NTX0hFQURFUl9TSVpFICsgVU9T X1JTQV9TSUdfU0laRTsKPj4gPj4gPiAtICAgIGNvbnN0IHNpemVfdCBtYXhzaXplID0gR1VDX1dP UENNX1NJWkVfVkFMVUUgKyBVT1NfUlNBX1NJR19TSVpFCj4+ID4+ID4gLSAgICAgICAgICAgIC0g MHg4MDAwOyAvKiAzMmsgcmVzZXJ2ZWQgKDhLIHN0YWNrICsgMjRrIGNvbnRleHQpICovCj4+ID4+ ID4gKyAgICBzdHJ1Y3QgZ3VjX2Nzc19oZWFkZXIgKmNzc19oZWFkZXIgPSAmZ3VjX2Z3LT5ndWNf ZndfaGVhZGVyOwo+PiA+PiA+ICsgICAgc2l6ZV90IHNpemU7Cj4+ID4+ID4gICAgICAgaW50IGVy cjsKPj4gPj4gPgo+PiA+PiA+ICAgICAgIERSTV9ERUJVR19EUklWRVIoImJlZm9yZSByZXF1ZXN0 aW5nIGZpcm13YXJlOiBHdUMgZncgZmV0Y2gKPj4gPj4gc3RhdHVzICVzXG4iLAo+PiA+PiA+IEBA IC00ODIsMTIgKzUwMywzMSBAQCBzdGF0aWMgdm9pZCBndWNfZndfZmV0Y2goc3RydWN0IGRybV9k ZXZpY2UKPj4gPj4gKmRldiwgc3RydWN0IGludGVsX2d1Y19mdyAqZ3VjX2Z3KQo+PiA+PiA+Cj4+ ID4+ID4gICAgICAgRFJNX0RFQlVHX0RSSVZFUigiZmV0Y2ggR3VDIGZ3IGZyb20gJXMgc3VjY2Vl ZGVkLCBmdyAlcFxuIiwKPj4gPj4gPiAgICAgICAgICAgZ3VjX2Z3LT5ndWNfZndfcGF0aCwgZncp Owo+PiA+PiA+IC0gICAgRFJNX0RFQlVHX0RSSVZFUigiZmlybXdhcmUgZmlsZSBzaXplICV6dSAo bWluaW11bSAlenUsIG1heGltdW0KPj4gPj4gJXp1KVxuIiwKPj4gPj4gPiAtICAgICAgICBmdy0+ c2l6ZSwgbWluc2l6ZSwgbWF4c2l6ZSk7Cj4+ID4+ID4KPj4gPj4gPiAtICAgIC8qIENoZWNrIHRo ZSBzaXplIG9mIHRoZSBibG9iIGJlZm9lIGV4YW1pbmluZyBidWZmZXIgY29udGVudHMgKi8KPj4g Pj4gPiAtICAgIGlmIChmdy0+c2l6ZSA8IG1pbnNpemUgfHwgZnctPnNpemUgPiBtYXhzaXplKQo+ PiA+PiA+ICsgICAgLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIGJsb2IgYmVmb3JlIGV4YW1pbmlu ZyBidWZmZXIgY29udGVudHMgKi8KPj4gPj4gPiArICAgIGlmIChmdy0+c2l6ZSA8IHNpemVvZihz dHJ1Y3QgZ3VjX2Nzc19oZWFkZXIpKSB7Cj4+ID4+ID4gKyAgICAgICAgRFJNX0VSUk9SKCJGaXJt d2FyZSBoZWFkZXIgaXMgbWlzc2luZ1xuIik7Cj4+ID4+ID4gKyAgICAgICAgZ290byBmYWlsOwo+ PiA+PiA+ICsgICAgfQo+PiA+PiA+ICsKPj4gPj4gPiArICAgIG1lbWNweShjc3NfaGVhZGVyLCBm dy0+ZGF0YSwgc2l6ZW9mKHN0cnVjdCBndWNfY3NzX2hlYWRlcikpOwo+PiA+PiA+ICsKPj4gPj4g PiArICAgIC8qIEF0IGxlYXN0LCBpdCBzaG91bGQgaGF2ZSBoZWFkZXIsIHVDb2RlIGFuZCBSU0Eu IFNpemUgb2YgYWxsCj4+ID4+IHRocmVlLiAqLwo+PiA+PiA+ICsgICAgc2l6ZSA9IChjc3NfaGVh ZGVyLT5zaXplIC0gY3NzX2hlYWRlci0+bW9kdWx1c19zaXplIC0KPj4gPj4gPiArICAgICAgICAg ICAgY3NzX2hlYWRlci0+ZXhwb25lbnRfc2l6ZSkgKiBzaXplb2YodTMyKTsKPj4gPj4gPiArICAg IGlmIChmdy0+c2l6ZSA8IHNpemUpIHsKPj4gPj4gPiArICAgICAgICBEUk1fRVJST1IoIk1pc3Np bmcgZmlybXdhcmUgY29tcG9uZW50c1xuIik7Cj4+ID4+ID4gICAgICAgICAgIGdvdG8gZmFpbDsK Pj4gPj4gPiArICAgIH0KPj4gPj4gPiArCj4+ID4+ID4gKyAgICAvKiBIZWFkZXIgYW5kIHVDb2Rl IHdpbGwgYmUgbG9hZGVkIHRvIFdPUENNLiBTaXplIG9mIHRoZSB0d28uICovCj4+ID4+ID4gKyAg ICBzaXplIC09IGNzc19oZWFkZXItPmtleV9zaXplICogc2l6ZW9mKHUzMik7Cj4+ID4+ID4gKwo+ PiA+PiA+ICsgICAgLyogVG9wIDMyayBvZiBXT1BDTSBpcyByZXNlcnZlZCAoOEsgc3RhY2sgKyAy NGsgUkM2IGNvbnRleHQpLiAqLwo+PiA+PiA+ICsgICAgaWYgKHNpemUgPiBHVUNfV09QQ01fU0la RV9WQUxVRSAtIDB4ODAwMCkgewo+PiA+PiA+ICsgICAgICAgIERSTV9FUlJPUigiRmlybXdhcmUg aXMgdG9vIGxhcmdlIHRvIGZpdCBpbiBXT1BDTVxuIik7Cj4+ID4+ID4gKyAgICAgICAgZ290byBm YWlsOwo+PiA+PiA+ICsgICAgfQo+PiA+PiA+Cj4+ID4+ID4gICAgICAgLyoKPj4gPj4gPiAgICAg ICAgKiBUaGUgR3VDIGZpcm13YXJlIGltYWdlIGhhcyB0aGUgdmVyc2lvbiBudW1iZXIgZW1iZWRk ZWQgYXQgYQo+PiA+PiB3ZWxsLWtub3duCj4+ID4+ID4gQEAgLTQ5NSw5ICs1MzUsOCBAQCBzdGF0 aWMgdm9pZCBndWNfZndfZmV0Y2goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4gPj4gc3RydWN0 IGludGVsX2d1Y19mdyAqZ3VjX2Z3KQo+PiA+PiA+ICAgICAgICAqIFRXTyBieXRlcyBlYWNoIChp LmUuIHUxNiksIGFsdGhvdWdoIGFsbCBwb2ludGVycyBhbmQKPj4gPj4gb2Zmc2V0cyBhcmUgZGVm aW5lZAo+PiA+PiA+ICAgICAgICAqIGluIHRlcm1zIG9mIGJ5dGVzICh1OCkuCj4+ID4+ID4gICAg ICAgICovCj4+ID4+ID4gLSAgICBjc3NfaGVhZGVyID0gZnctPmRhdGEgKyBVT1NfQ1NTX0hFQURF Ul9PRkZTRVQ7Cj4+ID4+ID4gLSAgICBndWNfZnctPmd1Y19md19tYWpvcl9mb3VuZCA9ICoodTE2 ICopKGNzc19oZWFkZXIgKwo+PiA+PiBVT1NfVkVSX01BSk9SX09GRlNFVCk7Cj4+ID4+ID4gLSAg ICBndWNfZnctPmd1Y19md19taW5vcl9mb3VuZCA9ICoodTE2ICopKGNzc19oZWFkZXIgKwo+PiA+ PiBVT1NfVkVSX01JTk9SX09GRlNFVCk7Cj4+ID4+ID4gKyAgICBndWNfZnctPmd1Y19md19tYWpv cl9mb3VuZCA9IGNzc19oZWFkZXItPmd1Y19zd192ZXJzaW9uID4+IDE2Owo+PiA+PiA+ICsgICAg Z3VjX2Z3LT5ndWNfZndfbWlub3JfZm91bmQgPSBjc3NfaGVhZGVyLT5ndWNfc3dfdmVyc2lvbiAm IDB4RkZGRjsKPj4gPj4gPgo+PiA+PiA+ICAgICAgIGlmIChndWNfZnctPmd1Y19md19tYWpvcl9m b3VuZCAhPSBndWNfZnctPmd1Y19md19tYWpvcl93YW50ZWQgfHwKPj4gPj4gPiAgICAgICAgICAg Z3VjX2Z3LT5ndWNfZndfbWlub3JfZm91bmQgPCBndWNfZnctPmd1Y19md19taW5vcl93YW50ZWQp IHsKPj4gPj4gPgo+PiA+Pgo+PiA+PiBXZSBuZWVkIHRvIHZhbGlkYXRlIGVhY2ggb2YgdGhlIHNp emVzIHJlYWQgZnJvbSB0aGUgYmluYXJ5IGJsb2IgYmVmb3JlCj4+ID4+IHVzaW5nIHRoZW0gaW4g Y2FsY3VsYXRpb25zLCBhbmQgd2UgdGhlbiBhbHNvIG5lZWQgdG8gdmFsaWRhdGUgdGhlCj4+ID4+ IHJlc3VsdHMgb2YgdGhlIGNhbGN1bGF0aW9ucywgdG8gcHJldmVudCBhbnlvbmUgc3Bvb2Zpbmcg dGhlIGxvYWRlciBpbnRvCj4+ID4+IHdyaXRpbmcgd2hlcmUgaXQgc2hvdWxkbid0Lgo+PiA+Pgo+ PiA+PiBJbiBwYXJ0aWN1bGFyLCB3ZSBuZWVkIHRvIGNoZWNrOgo+PiA+Pgo+PiA+PiAgICAgZnct PnNpemUgICAgICAgICAgICA+PSBzaXplb2Yoc3RydWN0IGd1Y19jc3NfaGVhZGVyKQo+PiA+PiAg ICAgY3NzX2hlYWRlci0+c2l6ZSAoKjQpICAgICAgICA8PSBmdy0+c2l6ZQo+PiA+PiAgICAgY3Nz X2hlYWRlci0+aGVhZGVyX2xlbiAgICAgICAgPD0gY3NzX2hlYWRlci0+c2l6ZQo+PiA+PiAgICAg PT4gKHVDb2RlX3NpemUgPSBjc3NfaGVhZGVyLT5zaXplIC0gY3NzX2hlYWRlcl9sZW4pID49IDAK Pj4gPj4gICAgIGNzc19oZWFkZXItPmtleV9zaXplICgqNCkgICAgPD0gSFdfU0lHX1NJWkUgKDB4 MTAwKQo+PiA+PiAgICAgY3NzX2hlYWRlci0+a2V5X3NpemUgICAgICAgIDw9IGNzc19oZWFkZXIt PmhlYWRlcl9sZW4KPj4gPj4gICAgIGNzc19oZWFkZXItPm1vZHVsdXNfc2l6ZSAgICA8PSBjc3Nf aGVhZGVyLT5oZWFkZXJfbGVuCj4+ID4+ICAgICBjc3NfaGVhZGVyLT5leHBvbmVudF9zaXplICAg IDw9IGNzc19oZWFkZXItPmhlYWRlcl9sZW4KPj4gPj4gICAgIGNzc19oZWFkZXItPmhlYWRlcl9s ZW4gICAgICAgID49IGNzc19oZWFkZXItPmtleV9zaXplICsKPj4gPj4gICAgICAgICAgICAgICAg ICAgICAgICBjc3NfaGVhZGVyLT5tb2R1bHVzX3NpemUgKwo+PiA+PiAgICAgICAgICAgICAgICAg ICAgICAgIGNzc19oZWFkZXItPmV4cG9uZW50X3NpemU7Cj4+ID4+ICAgICA9PiAoY3NzX2hlYWRl cl9zaXplID0gY3NzX2hlYWRlci0+aGVhZGVyX2xlbgo+PiA+PiAgICAgICAgICAgICAgICAgLSBj c3NfaGVhZGVyLT5rZXlfc2l6ZQo+PiA+PiAgICAgICAgICAgICAgICAgLSBjc3NfaGVhZGVyLT5t b2R1bHVzX3NpemUKPj4gPj4gICAgICAgICAgICAgICAgIC0gY3NzX2hlYWRlci0+ZXhwb25lbnRf c2l6ZSkgPj0gMAo+PiA+PiAgICAgY3NzX2hlYWRlcl9zaXplICsgdUNvZGVfc2l6ZSAgICA9PSAw IG1vZCBjYWNoZWxpbmVzaXplCj4+ID4+Cj4+ID4+IChTaW5jZSBhbGwgdGhlc2Ugc2l6ZXMgYXJl IHVuc2lnbmVkLCB3ZSBjYW4ndCAoYW5kIGRvbid0IG5lZWQgdG8pIGNoZWNrCj4+ID4+IGZvciBu ZWdhdGl2ZSByZXN1bHRzIGZyb20gdGhlIHN1YnRyYWN0aW9ucywgYnV0IHdlIGNhbiBjaGVjayB0 aGF0IGVhY2gKPj4gPj4gdmFsdWUgdGhhdCdzIGRlZmluZWQgYXMgaW5jbHVkaW5nIHRoZSBzdW0g b2Ygb3RoZXIgdmFsdWVzIGlzIGFjdHVhbGx5Cj4+ID4+IGxhcmdlIGVub3VnaCBzbyB0aGF0IHRo ZSBzdWJ0cmFjdGlvbnMgZ2l2ZSBtZWFuaW5nZnVsIHJlc3VsdHMpLgo+PiA+Pgo+PiA+PiBTb21l IG9mIHRoZXNlIGNoZWNrcyBhcmUgYWxyZWFkeSB0aGVyZSwgYnV0IEkgdGhpbmsgd2Ugc2hvdWxk IGNvbXBsZXRlCj4+ID4+IGFsbCBvZiB0aGVtIHRvIGNhdGNoIGFueSBvdGhlciBpbnZhbGlkIGNv bWJpbmF0aW9ucyBvZiB2YWx1ZXMuIEFuZCB0aGVuCj4+ID4+IHNhdmUgdGhlIGNvbXB1dGVkIHN0 YXJ0L3NpemUgdmFsdWVzIHNvIHRoZSBETUEgY29kZSBjYW4ganVzdCByZXRyaWV2ZQo+PiA+PiB0 aGUgcHJlY2FsY3VsYXRlZCB2YWx1ZXMuCj4+ID4KPj4gPiBJIG9ubHkgYWdyZWUgd2l0aCBjaGVj ayBiZXR3ZWVuIGhlYWRlciBzaXplIGFuZCBmdyBzaXplLiBUaGlzIGFsbG93cwo+PiA+IGRyaXZl ciBrZWVwcyBnb2luZyB3aXRob3V0IGJ1ZyBjaGVjay4gQWxsIG90aGVycyBiZXR3ZWVuIG1lbWJl cnMgd2l0aGluCj4+ID4gY3NzX2hlYWRlciBhcmUgbm90IG5lZWRlZC4gVGhlIHJlYXNvbiBpcyBz aW1wbGUuIElmIHlvdSB0cnVzdCBjb250ZW50IG9mCj4+ID4gY3NzX2hlYWRlciwgdGhlbiB5b3Ug ZG9uJ3QgbmVlZCB0byB2YWxpZGF0ZSB0aGVtLiBJZiB5b3UgZG9uJ3QgdHJ1c3QgaXQsCj4+ID4g bm8gbmVlZCB0byBjaGVjayBpdCBhbnl3YXkuIEFnYWluLCBhcyBsb25nIGFzIHdlIGhhdmUgZW5v dWdoIGJpdHMgdG8KPj4gPiBsb2FkIHRvIEhXLCB3ZSB3aWxsIGxldCBpdCBnby4KPj4gPgo+PiA+ IFRoYW5rcywKPj4gPiBBbGV4Cj4+Cj4+IFdlIGNhbid0IHRydXN0IHRoZSBDU1MgaGVhZGVyICp1 bmxlc3MqIHdlIHZhbGlkYXRlIGl0LCBpbiB0aGUgc2Vuc2Ugb2YKPj4gZW5zdXJpbmcgdGhhdCBi YWQgdmFsdWVzIGluIGl0IHdvbid0IGNhdXNlIHRoZSBkcml2ZXIgdG8gZG8gYW55dGhpbmcgaXQK Pj4gc2hvdWxkbid0IChlLmcuIG91dCBvZiByYW5nZSBhY2Nlc3NlcykuIEZvciBleGFtcGxlLCB3 aGF0IGhhcHBlbnMgaWYgSQo+PiBzZXQgaGVhZGVyX2xlbiB0byAweDEwMCBhbmQgbW9kdWx1c19z aXplIHRvIDB4ZmZmZmZlMDA/Cj4+Cj4KPiBXZSB3aWxsIHVzZSB3aGF0ZXZlciBwcm92aWRlZCBm cm9tIGhlYWRlciB0byBjYWxjdWxhdGUgdUNvZGUgc2l6ZSBhbmQgCj4gUlNBIG9mZnNldCBldGMu IElmIGFsbCBvZiB0aGVtIGFyZSB3aXRoaW4gdGhlIGJpbiBmaWxlIHJhbmdlLCB3ZSB3aWxsIAo+ IGxvYWQgaXQuIE90aGVyd2lzZSwgcmVqZWN0IGl0IHRvIGF2b2lkIFNXIG1lbW9yeSBhY2Nlc3Mg dmlvbGF0aW9uLiBUaGlzIAo+IGlzIGFscmVhZHkgaW1wbGVtZW50ZWQuIE15IHBvaW50IGlzOiBp ZiB3ZSBjYW4ndCB0cnVzdCB0aGUgQ1NTIGhlYWRlciwgCj4gdGhlbiB0aGUgY2hlY2sgc3VjaCBh cyAoY3NzX2hlYWRlci5BID49IGNzc19oZWFkZXIuQiAtIGNzc19oZWFkZXIuQykgCj4gaXRzZWxm IGlzIGluc2lnbmlmaWNhbnQuIFllcywgaGVhZGVyIGRhdGEgbWlnaHQgYmUgY29ycnVwdGVkLiBI VyB3aWxsIAo+IHZlcmlmeSBpdCBhcyBwYXJ0IG9mIFJTQSBrZXkgYXV0aGVudGljYXRpb24gYW55 d2F5LgoKSSBndWVzcyBJIHdhcyBsYXRlIHRvIHRoZSBwYXJ0eSBhbmQgY29tbWVudGVkIG9uIGFu IG9sZCB2ZXJzaW9uIFsxXS4gQnV0CkknbSB3aXRoIERhdmUgaGVyZTsgeW91IG5lZWQgdG8gbWFr ZSBzdXJlIG5vdGhpbmcgaW4ga2VybmVsIGJyZWFrcyB3aXRoCnRoZSBkYXRhIHlvdSByZWFkIGZy b20gdGhlIGZpcm13YXJlIGJsb2IuCgpJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQg eW91J3JlIHNhZmUgd2hlbiB5b3Ugd3JpdGUgbWFsaWNpb3VzCmRhdGEgdG8gRE1BX0NPUFlfU0la RSwgb3IgeW91IHdyaXRlIG91dCBvZiBib3VuZHMgb2YgVU9TX1JTQV9TQ1JBVENIXzAsCmZvciBl eGFtcGxlLiBZb3UgKm11c3QqIG1ha2Ugc3VyZSB0aGV5IGFyZSB3aXRoaW4gc2Vuc2libGUgbGlt aXRzLgoKQlIsCkphbmkuCgoKWzFdIGh0dHA6Ly9taWQuZ21hbmUub3JnLzg3ZDF4Nm11cTIuZnNm QGludGVsLmNvbQoKPgo+IC1BbGV4Cj4KPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNl IFRlY2hub2xvZ3kgQ2VudGVyCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==