From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: Re: [PATCH 02/15] drm/i915: Embedded microcontroller (uC) firmware loading support Date: Mon, 06 Jul 2015 19:24:37 +0100 Message-ID: <559AC7E5.805@intel.com> References: <1435926637-30892-1-git-send-email-david.s.gordon@intel.com> <1435926637-30892-3-git-send-email-david.s.gordon@intel.com> <20150706140630.GE2156@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 0600C6E3EB for ; Mon, 6 Jul 2015 11:24:38 -0700 (PDT) In-Reply-To: <20150706140630.GE2156@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMDYvMDcvMTUgMTU6MDYsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gT24gRnJpLCBKdWwgMDMs IDIwMTUgYXQgMDE6MzA6MjRQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3JvdGU6Cj4+IEN1cnJlbnQg ZGV2aWNlcyBtYXkgY29udGFpbiBvbmUgb3IgbW9yZSBwcm9ncmFtbWFibGUgbWljcm9jb250cm9s bGVycwo+PiB0aGF0IG5lZWQgdG8gaGF2ZSBhIGZpcm13YXJlIGltYWdlIChha2EgImJpbmFyeSBi bG9iIikgbG9hZGVkIGZyb20gYW4KPj4gZXh0ZXJuYWwgbWVkaXVtIGFuZCB0cmFuc2ZlcnJlZCB0 byB0aGUgZGV2aWNlJ3MgbWVtb3J5Lgo+Pgo+PiBUaGlzIGZpbGUgcHJvdmlkZXMgY29tbW9uIHN1 cHBvcnQgZnVuY3Rpb25zIGZvciBkb2luZyB0aGlzOyB0aGV5IGNhbgo+PiB0aGVuIGJlIHVzZWQg YnkgZWFjaCB1Qy1zcGVjaWZpYyBsb2FkZXIsIHRodXMgcmVkdWNpbmcgY29kZSBkdXBsaWNhdGlv bgo+PiBhbmQgdGVzdGluZyBlZmZvcnQuCj4+Cj4+IHYyOgo+PiAgICAgIExvY2FsIGZ1bmN0aW9u cyBzaG91bGQgcGFzcyBkZXZfcHJpdiByYXRoZXIgdGhhbiBkZXYgW0NocmlzIFdpbHNvbl0KPj4g ICAgICBWYXJpb3VzIG90aGVyIGltcHJvdmVtZW50cyBwZXIgQ2hyaXMgV2lsc29uJ3MgcmV2aWV3 IGNvbW1lbnRzCj4+Cj4+IHYzOgo+PiAgICAgIERlZmVhdHVyZWQgdmVyc2lvbiB3aXRob3V0IGFz eW5jIHByZWZldGNoIFtEYW5pZWwgVmV0dGVyXQo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBEYXZlIEdv cmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBBbGV4IERh aSA8eXUuZGFpQGludGVsLmNvbT4KPj4gLS0tCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUgICAgICAgICAgfCAgIDMgKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Vj X2xvYWRlci5jIHwgMzEwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5oIHwgIDkyICsrKysrKysrKysKPj4g ICAzIGZpbGVzIGNoYW5nZWQsIDQwNSBpbnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5jCj4+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5oCj4+Cj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCj4+IGluZGV4IGRlMjE5NjUuLmYxZjgwZmMgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlCj4+IEBAIC0zOSw2ICszOSw5IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJz ZXIubyBcCj4+ICAgCSAgaW50ZWxfcmluZ2J1ZmZlci5vIFwKPj4gICAJICBpbnRlbF91bmNvcmUu bwo+Pgo+PiArIyBnZW5lcmljIGFuY2lsbGlhcnkgbWljcm9jb250cm9sbGVyIHN1cHBvcnQKPj4g K2k5MTUteSArPSBpbnRlbF91Y19sb2FkZXIubwo+PiArCj4+ICAgIyBhdXRvZ2VuZXJhdGVkIG51 bGwgcmVuZGVyIHN0YXRlCj4+ICAgaTkxNS15ICs9IGludGVsX3JlbmRlcnN0YXRlX2dlbjYubyBc Cj4+ICAgCSAgaW50ZWxfcmVuZGVyc3RhdGVfZ2VuNy5vIFwKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfdWNfbG9hZGVyLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAw MC4uYThmYzFkZAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3VjX2xvYWRlci5jCj4+IEBAIC0wLDAgKzEsMzEwIEBACj4+ICsvKgo+PiArICogQ29w eXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPj4gKyAqCj4+ICsgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQo+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPj4g KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAo+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4+ICsgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ogo+PiArICoKPj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPj4gKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK Pj4gKyAqIFNvZnR3YXJlLgo+PiArICoKPj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4+ICsgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKPj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+PiArICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKPj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4+ ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4+ICsgKgo+PiArICogQXV0aG9yOgo+PiArICoJRGF2ZSBH b3Jkb24gPGRhdmlkLnMuZ29yZG9uQGludGVsLmNvbT4KPj4gKyAqLwo+PiArI2luY2x1ZGUgPGxp bnV4L2Zpcm13YXJlLmg+Cj4+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPj4gKyNpbmNsdWRlICJp bnRlbF91Y19sb2FkZXIuaCIKPj4gKwo+PiArLyoqCj4+ICsgKiBET0M6IENvbW1vbiBmdW5jdGlv bnMgZm9yIGVtYmVkZGVkIG1pY3JvY29udHJvbGxlciAodUMpIGZpcm13YXJlIGxvYWRpbmcKPj4g KyAqCj4+ICsgKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBwcm92aWRlIGNvbW1vbiBzdXBw b3J0IGNvZGUgZm9yIGxvYWRpbmcgdGhlCj4+ICsgKiBmaXJtd2FyZSB0aGF0IG1heSBiZSByZXF1 aXJlZCBieSBhbiBlbWJlZGRlZCBtaWNyb2NvbnRyb2xsZXIgKHVDKS4KPj4gKyAqCj4+ICsgKiBU aGUgZnVuY3Rpb24gaW50ZWxfdWNfZndfaW5pdCgpIHNob3VsZCBiZSBjYWxsZWQgZmlyc3Q7IGl0 IHJlcXVpcmVzIG5vCj4+ICsgKiBsb2NraW5nLCBhbmQgY2FuIGJlIGNhbGxlZCBldmVuIGJlZm9y ZSBHRU0gaGFzIGJlZW4gaW5pdGlhbGlzZWQuIEl0IGp1c3QKPj4gKyAqIGluaXRpYWxpc2VzIHRo ZSB0cmFja2luZyBkYXRhIGFuZCBzdG9yZXMgaXRzIHBhcmFtZXRlcnMgZm9yIHRoZSBzdWJzZXF1 ZW50Cj4+ICsgKiBjYWxsIHRvIGludGVsX3VjX2Z3X2ZldGNoKCkuCj4+ICsgKgo+PiArICogQXQg c29tZSBjb252ZW5pZW50IHBvaW50IGFmdGVyIEdFTSBpbml0aWFsaXNhdGlvbiwgdGhlIGRyaXZl ciBzaG91bGQgY2FsbAo+PiArICogaW50ZWxfdWNfZndfZmV0Y2goKS4gVGhlIGZpcnN0IHRpbWUs IHRoaXMgd2lsbCB1c2UgdGhlIExpbnV4IGtlcm5lbCdzCj4+ICsgKiByZXF1ZXN0X2Zpcm13YXJl KCkgY2FsbCB0byBvcGVuIGFuZCByZWFkIHRoZSBmaXJtd2FyZSBpbWFnZSBpbnRvIG1lbW9yeS4K Pj4gKyAqIChPbiBzdWJzZXF1ZW50IGNhbGxzLCB0aGlzIGlzIHNraXBwZWQsIGFzIGVpdGhlciB0 aGUgZmlybXdhcmUgaGFzIGFscmVhZHkKPj4gKyAqIGJlZW4gZmV0Y2hlZCBpbnRvIG1lbW9yeSwg b3IgaXQgaXMgYWxyZWFkeSBrbm93biB0aGF0IG5vIHZhbGlkIGZpcm13YXJlCj4+ICsgKiBpbWFn ZSBjb3VsZCBiZSBmb3VuZCkuCj4+ICsgKgo+PiArICogVGhlIGNhbGxiYWNrKCkgZnVuY3Rpb24g cGFzc2VkIHRvIGludGVsX3VjX2Z3X2ZldGNoKCkgY2FuIGZ1cnRoZXIgY2hlY2sKPj4gKyAqIHRo ZSBmaXJtd2FyZSBpbWFnZSBiZWZvcmUgaXQgaXMgc2F2ZWQuIFRoaXMgZnVuY3Rpb24gY2FuIHJl amVjdCB0aGUgaW1hZ2UKPj4gKyAqIGJ5IHJldHVybmluZyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUg KGUuZy4gLUVOT0VYRUMpLCBvciBhY2NlcHQgaXQuIEluIHRoZQo+PiArICogbGF0dGVyIGNhc2Us IGl0IGNhbiByZXR1cm4gSU5URUxfVUNfRldfR09PRCAod2hpY2ggaXMgYWxzbyB0aGUgZGVmYXVs dCBpZgo+PiArICogbm8gY2FsbGJhY2soKSBpcyBzdXBwbGllZCksIGFuZCB0aGUgY29tbW9uIGNv ZGUgaGVyZSB3aWxsIHNhdmUgdGhlIHdob2xlCj4+ICsgKiBvZiB0aGUgZmlybXdhcmUgaW1hZ2Ug aW4gYSAocGFnZWFibGUsIHNobWZzLWJhY2tlZCkgR0VNIG9iamVjdC4KPj4gKyAqCj4+ICsgKiBJ ZiBzYXZpbmcgdGhlIHdob2xlIGltYWdlIHVubW9kaWZpZWQgaXMgbm90IGFwcHJvcHJpYXRlIChm b3IgZXhhbXBsZSwgaWYKPj4gKyAqIG9ubHkgYSBzbWFsbCBwYXJ0IG9mIHRoZSBpbWFnZSBpcyBu ZWVkZWQgbGF0ZXIsIG9yIHRoZSBkYXRhIG5lZWRzIHRvIGJlCj4+ICsgKiByZW9yZ2FuaXNlZCBi ZWZvcmUgc2F2aW5nKSwgdGhlIGNhbGxiYWNrKCkgZnVuY3Rpb24gY2FuIGluc3RlYWQgbWFrZSBp dHMKPj4gKyAqIG93biBhcnJhbmdlbWVudHMgZm9yIHNhdmluZyB0aGUgcmVxdWlyZWQgZGF0YSBp biBhIEdFTSBvYmplY3Qgb3Igb3RoZXJ3aXNlCj4+ICsgKiBhbmQgdGhlbiByZXR1cm4gSU5URUxf VUNfRldfU0FWRUQuCj4+ICsgKgo+PiArICogKElmIHN1Y2ggYSBjYWxsYmFjayBkb2VzIHN0YXNo IChzb21lIG9mKSB0aGUgaW1hZ2UgZGF0YSBpbiBhIEdFTSBvYmplY3QsCj4+ICsgKiBpdCBjYW4g dXNlIHRoZSB1Y19md19vYmogYW5kIHVjX2Z3X3NpemUgZmllbGRzOyB0aGUgY29tbW9uIGZyYW1l d29yayB3aWxsCj4+ICsgKiB0aGVuIGhhbmRsZSBkZWFsbG9jYXRpbmcgdGhlIG9iamVjdCBvbiBm YWlsdXJlIG9yIGZpbmFsaXNhdGlvbi4gT3RoZXJ3aXNlCj4+ICsgKiBhbnkgYWxsb2NhdGVkIHJl c291cmNlcyB3aWxsIGhhdmUgdG8gYmUgbWFuYWdlZCBieSB0aGUgdUMtc3BlY2lmaWMgY29kZSku Cj4+ICsgKgo+PiArICogQWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgdG8gaW50ZWxfdWNfZndfZmV0 Y2goKSwgdGhlIHVDLXNwZWNpZmljIGNvZGUgY2FuCj4+ICsgKiB0cmFuc2ZlciB0aGUgZGF0YSBp biB0aGUgR0VNIG9iamVjdCAob3IgaXRzIG93biBhbHRlcm5hdGl2ZSkgdG8gdGhlIHVDJ3MKPj4g KyAqIG1lbW9yeSAoaW4gc29tZSB1Qy1zcGVjaWZpYyB3YXksIG5vdCBoYW5kbGVkIGhlcmUpLgo+ PiArICoKPj4gKyAqIER1cmluZyBkcml2ZXIgc2h1dGRvd24sIG9yIGlmIGRyaXZlciBsb2FkIGlz IGFib3J0ZWQsIGludGVsX3VjX2Z3X2ZpbmkoKQo+PiArICogc2hvdWxkIGJlIGNhbGxlZCB0byBy ZWxlYXNlIGFueSByZW1haW5pbmcgcmVzb3VyY2VzLgo+PiArICovCj4+ICsKPj4gKy8qIFVzZXIt ZnJpZW5kbHkgcmVwcmVzZW50YXRpb24gb2YgYW4gZW51bSAqLwo+PiArY29uc3QgY2hhciAqaW50 ZWxfdWNfZndfc3RhdHVzX3JlcHIoZW51bSBpbnRlbF91Y19md19zdGF0dXMgc3RhdHVzKQo+PiAr ewo+PiArCXN3aXRjaCAoc3RhdHVzKSB7Cj4+ICsJY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9GQUlM Ogo+PiArCQlyZXR1cm4gIkZBSUwiOwo+PiArCWNhc2UgSU5URUxfVUNfRklSTVdBUkVfTk9ORToK Pj4gKwkJcmV0dXJuICJOT05FIjsKPj4gKwljYXNlIElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkc6 Cj4+ICsJCXJldHVybiAiUEVORElORyI7Cj4+ICsJY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9TVUND RVNTOgo+PiArCQlyZXR1cm4gIlNVQ0NFU1MiOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCXJldHVybiAi VU5LTk9XTiEiOwo+PiArCX0KPj4gK307Cj4+ICsKPj4gKy8qCj4+ICsgKiBDYWxsZWQgb25jZSBw ZXIgdUMsIGxhdGUgaW4gZHJpdmVyIGluaXRpYWxpc2F0aW9uLCBhZnRlciBHRU0gaXMgc2V0IHVw Lgo+PiArICogRmlyc3QsIHdlIGZldGNoIHRoZSBmaXJtd2FyZSBpbWFnZSB1c2luZyByZXF1ZXN0 X2Zpcm13YXJlKCksIHRoZW4gYWxsb3cKPj4gKyAqIHRoZSBvcHRpb25hbCBjYWxsYmFjaygpIGZ1 bmN0aW9uIHRvIGNoZWNrIGl0LiBJZiBpdCdzIGdvb2QsIGFuZCBjYWxsYmFjaygpCj4+ICsgKiBk b2Vzbid0IHNheSBpdCdzIGFscmVhZHkgc2F2ZWQgdGhlIGltYWdlLCB3ZSB3aWxsIHNhdmUgaXQg aGVyZSBieSBjb3B5aW5nCj4+ICsgKiB0aGUgd2hvbGUgdGhpbmcgaW50byBhIChwYWdlYWJsZSwg c2htZnMtYmFja2VkKSBHRU0gb2JqZWN0LAo+PiArICovCj4+ICtzdGF0aWMgdm9pZAo+PiArdWNf ZndfZmV0Y2goc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdywKPj4gKwkgICAgaW50IGNhbGxiYWNr KHN0cnVjdCBpbnRlbF91Y19mdyAqKSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gdWNfZnctPnVjX2RldjsKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ PiArCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Cj4+ICsJaW50IGNiX3N0YXR1cyA9IElOVEVM X1VDX0ZXX0dPT0Q7Cj4+ICsKPj4gKwlEUk1fREVCVUdfRFJJVkVSKCJiZWZvcmUgd2FpdGluZzog JXMgZncgZmV0Y2ggc3RhdHVzICVzLCBmdyAlcFxuIiwKPj4gKwkJdWNfZnctPnVjX25hbWUsCj4+ ICsJCWludGVsX3VjX2Z3X3N0YXR1c19yZXByKHVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMpLAo+ PiArCQl1Y19mdy0+dWNfZndfYmxvYik7Cj4+ICsKPj4gKwlXQVJOX09OKCFtdXRleF9pc19sb2Nr ZWQoJmRldi0+c3RydWN0X211dGV4KSk7Cj4+ICsJV0FSTl9PTih1Y19mdy0+dWNfZndfZmV0Y2hf c3RhdHVzICE9IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkcpOwo+PiArCj4+ICsJaWYgKHJlcXVl c3RfZmlybXdhcmUoJmZ3LCB1Y19mdy0+dWNfZndfcGF0aCwgJmRldi0+cGRldi0+ZGV2KSkKPj4g KwkJZ290byBmYWlsOwo+PiArCWlmICghZncpCj4+ICsJCWdvdG8gZmFpbDsKPj4gKwo+PiArCURS TV9ERUJVR19EUklWRVIoImZldGNoICVzIGZ3IGZyb20gJXMgc3VjY2VlZGVkLCBmdyAlcFxuIiwK Pj4gKwkJdWNfZnctPnVjX25hbWUsIHVjX2Z3LT51Y19md19wYXRoLCBmdyk7Cj4+ICsJdWNfZnct PnVjX2Z3X2Jsb2IgPSBmdzsKPj4gKwo+PiArCS8qIENhbGxiYWNrIHRvIHRoZSBvcHRpb25hbCB1 Qy1zcGVjaWZpYyBmdW5jdGlvbiwgaWYgc3VwcGxpZWQgKi8KPj4gKwlpZiAoY2FsbGJhY2spCj4+ ICsJCWNiX3N0YXR1cyA9IGNhbGxiYWNrKHVjX2Z3KTsKPj4gKwlpZiAoY2Jfc3RhdHVzIDwgMCkK Pj4gKwkJZ290byBmYWlsOwo+PiArCXN3aXRjaCAoY2Jfc3RhdHVzKSB7Cj4+ICsJZGVmYXVsdDoK Pj4gKwkJV0FSTigxLCAiSW52YWxpZCBzdGF0dXMgJWQgZnJvbSBmdyBjaGVja2luZyBjYWxsYmFj ayAlcGZcbiIsCj4+ICsJCQkJY2Jfc3RhdHVzLCBjYWxsYmFjayk7Cj4+ICsJCWdvdG8gZmFpbDsK Pj4gKwo+PiArCWNhc2UgSU5URUxfVUNfRldfU0FWRUQ6Cj4+ICsJCS8vIEdvb2QsIGFscmVhZHkg c2F2ZWQsIG5vdGhpbmcgdG8gZG8KPj4gKwkJYnJlYWs7Cj4+ICsKPj4gKwljYXNlIElOVEVMX1VD X0ZXX0dPT0Q6Cj4+ICsJCS8vIEdvb2QsIHNhdmUgaW4gR0VNIG9iamVjdAo+PiArCQlvYmogPSBp OTE1X2dlbV9vYmplY3RfY3JlYXRlX2Zyb21fZGF0YShkZXYsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7 Cj4+ICsJCWlmICghb2JqKQo+PiArCQkJZ290byBmYWlsOwo+PiArCj4+ICsJCXVjX2Z3LT51Y19m d19vYmogPSBvYmo7Cj4+ICsJCXVjX2Z3LT51Y19md19zaXplID0gZnctPnNpemU7Cj4+ICsJfQo+ PiArCj4+ICsJRFJNX0RFQlVHX0RSSVZFUigiJXMgZncgZmV0Y2ggc3RhdHVzIFNVQ0NFU1MsIGNi ICVkLCBvYmogJXBcbiIsCj4+ICsJCQl1Y19mdy0+dWNfbmFtZSwgY2Jfc3RhdHVzLCB1Y19mdy0+ dWNfZndfb2JqKTsKPj4gKwo+PiArCXJlbGVhc2VfZmlybXdhcmUoZncpOwo+PiArCXVjX2Z3LT51 Y19md19ibG9iID0gTlVMTDsKPj4gKwl1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzID0gSU5URUxf VUNfRklSTVdBUkVfU1VDQ0VTUzsKPj4gKwlyZXR1cm47Cj4+ICsKPj4gK2ZhaWw6Cj4+ICsJRFJN X0RFQlVHX0RSSVZFUigiJXMgZncgZmV0Y2ggc3RhdHVzIEZBSUw7IGZ3ICVwLCBvYmogJXBcbiIs Cj4+ICsJCXVjX2Z3LT51Y19uYW1lLCBmdywgdWNfZnctPnVjX2Z3X29iaik7Cj4+ICsJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gZmV0Y2ggJXMgZmlybXdhcmUgZnJvbSAlc1xuIiwKPj4gKwkJICB1Y19m dy0+dWNfbmFtZSwgdWNfZnctPnVjX2Z3X3BhdGgpOwo+PiArCj4+ICsJb2JqID0gdWNfZnctPnVj X2Z3X29iajsKPj4gKwlpZiAob2JqKQo+PiArCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgm b2JqLT5iYXNlKTsKPj4gKwl1Y19mdy0+dWNfZndfb2JqID0gTlVMTDsKPj4gKwo+PiArCXJlbGVh c2VfZmlybXdhcmUoZncpOwkJLyogT0sgZXZlbiBpZiBmdyBpcyBOVUxMICovCj4+ICsJdWNfZnct PnVjX2Z3X2Jsb2IgPSBOVUxMOwo+PiArCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJTlRF TF9VQ19GSVJNV0FSRV9GQUlMOwo+PiArfQo+Cj4gU28gbG9va2luZyBhdCB0aGlzIHRoZSBlbnRp cmUgbGlicmFyeSBub3cgYm9pbHMgZG93biB0byBhIGdsb3JpZmllZAo+IHZlcnNpb24gb2YKPgo+ IAlpZiAocmVxdWVzdF9maXJtd2FyZSAhPSAwKSB7Cj4gCQlEUk1fREVCVUdfR0VNKCJndWMgZmly bXdhcmUgbG9hZGluZyBmYWlsZWRcbiIpOwo+IAkJcmV0dXJuIGZhaWw7Cj4gCX0KPgo+IAlnZW1f b2JqX2NyZWF0ZV9mcm9tX2RhdGUoZncpCj4gCXJlbGFzZV9maXJtd2FyZQo+Cj4gQ2FuIEkgaGF2 ZSB0aGF0IGlubGluZWQgKG9yIGFzIGEgc2ltcGxlIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb24pIGlu dG8gdGhlCj4gY2FsbHNpdGUgcGxlYXNlPyBZZXMgdGhhdCB1bmZvcnR1bmF0ZWx5IG1lYW5zIEkg YXNrIHlvdSB0byBjYW4gdGhlIHJlYWxseQo+IGdyZWF0IGtlcm5lbGRvYyB5b3UndmUgZG9uZSAo SSdkIHJlYWxseSBsaWtlIGFsbCBwYXRjaGVzIHRvIGxvb2sgdGhpcwo+IGdyZWF0IHdydCBkb2Nz KSwgYnV0IEkgYWxzbyB0aGluayB0aGF0IHRoZSBhYnN0cmFjdGlvbiByZWFsbHkgZG9lc24ndCBw YXkKPiBvZmYuIEZpcm13YXJlLWxvYWRpbmcgdXNpbmcgcmVxdWVzdF9maXJtd2FyZSBpcyBub3Qg c29tZXRoaW5nIHRyaWNreQo+IGVub3VnaCB0byBqdXN0aWZ5IGFkZGVkIGFic3RyYWN0aW9uLiBZ ZXMgdGhlcmUgd2FzIHRoZQo+IHN5bmNocm9uaXphdGlvbi9jb21wbGV0aW9uIHN0dWZmIGluIHRo ZXJlIGJlZm9yZSwgYnV0IGFzIGV4cGxhaW5lZCBpbiB0aGUKPiBwcmV2aW91cyBkaXNjdXNzaW9u IEkgZG9uJ3QgZXhwZWN0IHVzIHRvIGJlIGFibGUgdG8gc2hhcmUgdGhhdCBwYXJ0IGF0Cj4gYWxs LCBhbmQgSSdkIGxpa2UgYW55IGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIHRvIGJlIG9wZW4tY29k ZWQgdXNpbmcKPiBub3JtYWwga2VybmVsIHByaW1pdGl2ZXMgKGxpa2UgZmx1c2hfd29yayBvciBz aW1pbGFyKSB0byBtYWtlIGl0IHJlYWxseQo+IHN0aWNrIG91dCB0byByZXZpZXdlcnMuCj4KPiBU aGFua3MsIERhbmllbAoKV2VsbCwgSSAvY291bGQvIHNxdWFzaCB0aGVzZSBmdW5jdGlvbnMgaW50 byB0aGUgR3VDLXNwZWNpZmljIGxvYWRlciBhbmQgCnB1dCBhICJnIiBvbiB0aGUgZnJvbnQgb2Yg YWxsIHRoZSBuYW1lcywgYnV0IHRoYXQgd291bGQganVzdCByZXN1bHQgaW4gCnRoZSB3aG9sZSBs b3QgZ2V0dGluZyBjb3B5cGFzdGVkIHdoZW4gd2UgY29tZSB0byBkbyB0aGUgbmV4dCBsZXR0ZXIg b2YgCnRoZSBhbHBoYWJldCA6KAoKT3Igd29yc2Ugc3RpbGwsIHNvbWVvbmUgZWxzZSB3b3VsZCB3 cml0ZSBhIGNvbXBsZXRlbHkgbmV3IHZlcnNpb24gZnJvbSAKc2NyYXRjaCwgd2hpY2ggd291bGQg YmUgYSB3YXN0ZSBvZiBlZmZvcnQgYm90aCBmb3IgdGhlbSBhbmQgZm9yIHRob3NlIAp3aG8gd291 bGQgdGhlbiBoYXZlIHRvIHJldmlldyB0aGUgbmV3IGNvZGUsIHNwb3QgdGhlIHNpbWlsYXJpdGll cyBhbmQgCmRpZmZlcmVuY2VzLCBhbmQgYXNrIGZvciBpdCBhbGwgdG8gYmUgcmV3cml0dGVuIHRv IGJlIG1vcmUgbGlrZSB0aGUgCmJ5LXRoZW4tZXhpc3RpbmcgR3VDIGNvZGUuCgpJdCdzIGFsc28g bm90IHF1aXRlIGFzIHNpbXBsZSBhcyB5b3VyIHBhcmFwaHJhc2U7IGV2ZW4gd2l0aG91dCB0aGUg CnByZWZldGNoIGNvZGUsIGl0IGFsc28gZGVhbHMgd2l0aCB0aGUgZG8tdGhpcy1vbmNlIGxvZ2lj LCBhbmQgY29ycmVjdGx5IApmcmVlaW5nIHJlc291cmNlcyBpbiBhbGwgZXJyb3IgcGF0aHM7IG5v dCBlbm9ybW91c2x5IGNvbXBsaWNhdGVkIGJ1dCB3aHkgCnJlcGVhdCBzaW1pbGFyIGNvZGUgaW4g c2V2ZXJhbCBwbGFjZXMgd2hlbiB5b3UgY2FuIGp1c3Qgc2hhcmUgdGhlIG9uZSAKaW5zdGFuY2Ug KGFuZCB0aGVyZSAvd2lsbC8gYmUgb3RoZXIgdXNlcnMgZm9yIHRoaXMgY29kZSkuIEFuZCB3ZSBt YXkgCndlbGwgYWRkIG90aGVyIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGhlcmUsIHNob3VsZCBpdCB0 dXJuIG91dCB1c2VmdWwgZm9yIAptb3JlIHRoYW4gb25lIHVDLiBZb3UncmUganVzdCBhc2tpbmcg dG8gaW5jcmVhc2UgdGhlIG1haW50ZW5hbmNlIGVmZm9ydCAKYnkgZHVwbGljYXRpbmcgdGhlIGxv YWRlciBjb2RlIHJhdGhlciB0aGFuIHNoYXJpbmcgaXQgOigKCkNvbnZlcnNlbHksIGlmIHlvdSB0 aGluayBpdCBhZGRzIGxpdHRsZSBmdW5jdGlvbmFsaXR5LCBpdCBhbHNvIGFkZHMgCmxpdHRsZSBv dmVyaGVhZC4gSSB3b3VsZG4ndCBtdWNoIHdhbnQgdG8gaW5saW5lIHRoZSBjdXJyZW50bHktZ2Vu ZXJpYyAKZnVuY3Rpb25zIGludG8gdGhlaXIgY2FsbGVycyBhbHNvIGJlY2F1c2UgdGhhdCB3b3Vs ZCBibG9hdCB0aGVtIHRvbyAKbXVjaDsgYXQgdGhlIG1vbWVudCwgd2l0aCB0aGUgc3BsaXQgYmV0 d2VlbiBHdUMtc3BlY2lmaWMgYW5kIGNvbW1vbiAKZnVuY3Rpb25zLCB0aGUgYmlnZ2VzdCBmdW5j dGlvbnMgdHVybiBvdXQgdG8gYmUgYWJvdXQgb25lIHNjcmVlbmZ1bC4gSWYgCndlICJvcGVuLWNv ZGUiIGl0IGFsbCB3ZSBlbmQgdXAgd2l0aCBtb25zdHJvdXMgMzAwLWxpbmUtcGx1cyBmdW5jdGlv bnMgCndpdGggYW55IG51bWJlciBvZiBlcnJvciBwYXRocywgd2hpY2ggaXMganVzdCBub3Qgbmlj ZS4KClNvIEknZCByZWFsbHkgcHJlZmVyIHRvIGtlZXAgdGhlIHV0aWxpdHkgY29kZSBhbmQgdGhl IEd1Qy1zcGVjaWZpYyBzdHVmZiAKdGlkaWx5IHNlcGFyYXRlZCBldmVuIGJlZm9yZSB3ZSBoYXZl IHRoZSBvdGhlciBwb3RlbnRpYWwgdXNlcnMgb2YgdGhpcyAKc3VwcG9ydCBjb2RlIGluIHVwc3Ry ZWFtLgoKLkRhdmUuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=