From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 02/15] drm/i915: Embedded microcontroller (uC) firmware loading support Date: Wed, 17 Jun 2015 14:05:33 +0200 Message-ID: <20150617120533.GR23637@phenom.ffwll.local> References: <1434393394-21002-1-git-send-email-david.s.gordon@intel.com> <1434393394-21002-3-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f180.google.com (mail-wi0-f180.google.com [209.85.212.180]) by gabe.freedesktop.org (Postfix) with ESMTP id 719A26EC79 for ; Wed, 17 Jun 2015 05:02:49 -0700 (PDT) Received: by wibdq8 with SMTP id dq8so50867080wib.1 for ; Wed, 17 Jun 2015 05:02:48 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1434393394-21002-3-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBKdW4gMTUsIDIwMTUgYXQgMDc6MzY6MjBQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3Jv dGU6Cj4gQ3VycmVudCBkZXZpY2VzIG1heSBjb250YWluIG9uZSBvciBtb3JlIHByb2dyYW1tYWJs ZSBtaWNyb2NvbnRyb2xsZXJzCj4gdGhhdCBuZWVkIHRvIGhhdmUgYSBmaXJtd2FyZSBpbWFnZSAo YWthICJiaW5hcnkgYmxvYiIpIGxvYWRlZCBmcm9tIGFuCj4gZXh0ZXJuYWwgbWVkaXVtIGFuZCB0 cmFuc2ZlcnJlZCB0byB0aGUgZGV2aWNlJ3MgbWVtb3J5Lgo+IAo+IFRoaXMgZmlsZSBwcm92aWRl cyBnZW5lcmljIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBkb2luZyB0aGlzOyB0aGV5IGNhbgo+IHRo ZW4gYmUgdXNlZCBieSBlYWNoIHVDLXNwZWNpZmljIGxvYWRlciwgdGh1cyByZWR1Y2luZyBjb2Rl IGR1cGxpY2F0aW9uCj4gYW5kIHRlc3RpbmcgZWZmb3J0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IERh dmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogQWxl eCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+CgpHaXZlbiB0aGF0IEknbSBqdXN0IHNocmVkZGluZyB0 aGUgc3luY2hyb25pemF0aW9uIHVzZWQgYnkgdGhlIGRtYyBsb2FkZXIKSSdtIG5vdCBjb252aW5j ZWQgdGhpcyBpcyBhIGdvb2QgaWRlYS4gQWJzdHJhY3Rpb24gaGFzIGNvc3QsIGFuZCBhIGJpdCBv Zgpjb3B5LXBhc3RlIGZvciBzaW1pbGFyIHNvdW5kaW5nIGJ1dCBzbGlnaHRseSBkaWZmZXJlbnQg dGhpbmdzIGRvZXNuJ3QKc291bmQgYXdmdWwgdG8gbWUuIEFuZCB0aGUgY3JpdGljYWwgYml0IGlu IGFsbCB0aGUgZmlybXdhcmUgbG9hZGluZyBJJ3ZlCnNlZW4gdGh1cyBmYXIgaXMgaW4gc3luY2hy b25pemluZyB0aGUgbG9hZGluZyB3aXRoIG90aGVyIG9wZXJhdGlvbnMsCmhpZGluZyB0aGF0IGlz bid0IGEgZ29vZCBpZGVhLiBXb3JzZSBpZiB3ZSBlbmZvcmNlIHN0dWZmIGxpa2UgcmVxdWlyaW5n CmRldi0+c3RydWN0X211dGV4LgotRGFuaWVsCgoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUgICAgICAgICAgfCAgICAzICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfdWNfbG9hZGVyLmMgfCAgMzEyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5oIHwgICA4MiArKysrKysrKysK PiAgMyBmaWxlcyBjaGFuZ2VkLCAzOTcgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVyLmMKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5oCj4gCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKPiBpbmRleCBiN2RkZjQ4Li42MDdmYTJhIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKPiBAQCAtMzgsNiArMzgsOSBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAo+ ICAJICBpbnRlbF9yaW5nYnVmZmVyLm8gXAo+ICAJICBpbnRlbF91bmNvcmUubwo+ICAKPiArIyBn ZW5lcmljIGFuY2lsbGlhcnkgbWljcm9jb250cm9sbGVyIHN1cHBvcnQKPiAraTkxNS15ICs9IGlu dGVsX3VjX2xvYWRlci5vCj4gKwo+ICAjIGF1dG9nZW5lcmF0ZWQgbnVsbCByZW5kZXIgc3RhdGUK PiAgaTkxNS15ICs9IGludGVsX3JlbmRlcnN0YXRlX2dlbjYubyBcCj4gIAkgIGludGVsX3JlbmRl cnN0YXRlX2dlbjcubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3VjX2xvYWRlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVyLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjI2ZjBmYmUKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVyLmMKPiBAQCAt MCwwICsxLDMxMiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3Jh dGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3I6Cj4gKyAq CURhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+Cj4gKyAqLwo+ICsjaW5jbHVk ZSA8bGludXgvZmlybXdhcmUuaD4KPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNpbmNsdWRl ICJpbnRlbF91Y19sb2FkZXIuaCIKPiArCj4gKy8qKgo+ICsgKiBET0M6IEdlbmVyaWMgZW1iZWRk ZWQgbWljcm9jb250cm9sbGVyICh1QykgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0Cj4gKyAqCj4g KyAqIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHByb3ZpZGUgYSBnZW5lcmljIHdheSB0byBs b2FkIHRoZSBmaXJtd2FyZSB0aGF0Cj4gKyAqIG1heSBiZSByZXF1aXJlZCBieSBhbiBlbWJlZGRl ZCBtaWNyb2NvbnRyb2xsZXIgKHVDKS4KPiArICoKPiArICogVGhlIGZ1bmN0aW9uIGludGVsX3Vj X2Z3X2luaXQoKSBzaG91bGQgYmUgY2FsbGVkIGVhcmx5LCBhbmQgd2lsbCBpbml0aWF0ZQo+ICsg KiBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCB0byBmZXRjaCB0aGUgZmlybXdhcmUgaW1hZ2UgKGFr YSAiYmluYXJ5IGJsb2IiKS4KPiArICogV2hlbiB0aGUgaW1hZ2UgaGFzIGJlZW4gZmV0Y2hlZCBp bnRvIG1lbW9yeSwgdGhlIGtlcm5lbCB3aWxsIGNhbGwgYmFjayB0bwo+ICsgKiB1Y19md19mZXRj aF9jYWxsYmFjaygpIHdob3NlIGZ1bmN0aW9uIGlzIHNpbXBseSB0byByZWNvcmQgdGhlIGNvbXBs ZXRpb24KPiArICogc3RhdHVzLCBhbmQgc3Rhc2ggdGhlIGZpcm13YXJlIGJsb2IgZm9yIGxhdGVy Lgo+ICsgKgo+ICsgKiBBdCBzb21lIGNvbnZlbmllbnQgcG9pbnQgYWZ0ZXIgR0VNIGluaXRpYWxp c2F0aW9uLCB0aGUgZHJpdmVyIHNob3VsZCBjYWxsCj4gKyAqIGludGVsX3VjX2Z3X2NoZWNrKCk7 IHRoaXMgd2lsbCBjaGVjayB3aGV0aGVyIHRoZSBhc3luY2hyb25vdXMgdGhyZWFkIGhhcwo+ICsg KiBjb21wbGV0ZWQgYW5kIHdhaXQgZm9yIGl0IGlmIG5vdCwgY2hlY2sgd2hldGhlciB0aGUgaW1h Z2Ugd2FzIHN1Y2Nlc3NmdWxseQo+ICsgKiBmZXRjaGVkOyBhbmQgdGhlbiBhbGxvdyB0aGUgY2Fs bGJhY2soKSBmdW5jdGlvbiAoaWYgcHJvdmlkZWQpIHRvIHZhbGlkYXRlCj4gKyAqIHRoZSBpbWFn ZSBhbmQvb3Igc2F2ZSB0aGUgZGF0YSBpbiBhIEdFTSBvYmplY3QuCj4gKyAqCj4gKyAqIFRoZXJl YWZ0ZXIgdGhlIHVDLXNwZWNpZmljIGNvZGUgY2FuIHRyYW5zZmVyIHRoZSBkYXRhIGluIHRoZSBH RU0gb2JqZWN0Cj4gKyAqIHRvIHRoZSB1QydzIG1lbW9yeSAoaW4gc29tZSB1Qy1zcGVjaWZpYyB3 YXksIG5vdCBoYW5kbGVkIGhlcmUpLgo+ICsgKgo+ICsgKiBEdXJpbmcgZHJpdmVyIHNodXRkb3du LCBvciBpZiBkcml2ZXIgbG9hZCBpcyBhYm9ydGVkLCBpbnRlbF91Y19md19maW5pKCkKPiArICog c2hvdWxkIGJlIGNhbGxlZCB0byByZWxlYXNlIGFueSByZW1haW5pbmcgcmVzb3VyY2VzLgo+ICsg Ki8KPiArCj4gKwo+ICsvKgo+ICsgKiBDYWxsZWQgb25jZSBwZXIgdUMsIGxhdGUgaW4gZHJpdmVy IGluaXRpYWxpc2F0aW9uLiBHRU0gaXMgbm93IHJlYWR5LCBhbmQgc28KPiArICogd2UgY2FuIG5v dyBjcmVhdGUgYSBHRU0gb2JqZWN0IHRvIGhvbGQgdGhlIHVDIGZpcm13YXJlLiBCdXQgZmlyc3Qs IHdlIG11c3QKPiArICogc3luY2hyb25pc2Ugd2l0aCB0aGUgZmlybXdhcmUtZmV0Y2hpbmcgdGhy ZWFkIHRoYXQgd2FzIGluaXRpYXRlZCBkdXJpbmcKPiArICogZWFybHkgZHJpdmVyIGxvYWQsIGlu IGludGVsX3VjX2Z3X2luaXQoKSwgYW5kIHNlZSB3aGV0aGVyIGl0IHN1Y2Nlc3NmdWxseQo+ICsg KiBmZXRjaGVkIHRoZSBmaXJtd2FyZSBibG9iLgo+ICsgKi8KPiArc3RhdGljIHZvaWQKPiArdWNf ZndfZmV0Y2hfd2FpdChzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3LAo+ICsJCSBib29sIGNhbGxi YWNrKHN0cnVjdCBpbnRlbF91Y19mdyAqKSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IHVjX2Z3LT51Y19kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ ICsJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJi ZWZvcmUgd2FpdGluZzogJXMgZncgZmV0Y2ggc3RhdHVzICVkLCBmdyAlcFxuIiwKPiArCQl1Y19m dy0+dWNfbmFtZSwgdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cywgdWNfZnctPnVjX2Z3X2Jsb2Ip Owo+ICsKPiArCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsK PiArCVdBUk5fT04odWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyAhPSBJTlRFTF9VQ19GSVJNV0FS RV9QRU5ESU5HKTsKPiArCj4gKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ1Y19mdy0+dWNfZndfZmV0 Y2hlZCk7Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiYWZ0ZXIgd2FpdGluZzogJXMgZncgZmV0 Y2ggc3RhdHVzICVkLCBmdyAlcFxuIiwKPiArCQl1Y19mdy0+dWNfbmFtZSwgdWNfZnctPnVjX2Z3 X2ZldGNoX3N0YXR1cywgdWNfZnctPnVjX2Z3X2Jsb2IpOwo+ICsKPiArCWZ3ID0gdWNfZnctPnVj X2Z3X2Jsb2I7Cj4gKwlpZiAoIWZ3KSB7Cj4gKwkJLyogbm8gZmlybXdhcmUgZm91bmQ7IHRyeSBh Z2FpbiBpbiBjYXNlIEZTIHdhcyBub3QgbW91bnRlZCAqLwo+ICsJCURSTV9ERUJVR19EUklWRVIo InJldHJ5IGZldGNoaW5nICVzIGZ3IGZyb20gPCVzPlxuIiwKPiArCQkJdWNfZnctPnVjX25hbWUs IHVjX2Z3LT51Y19md19wYXRoKTsKPiArCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIHVjX2Z3 LT51Y19md19wYXRoLCAmZGV2LT5wZGV2LT5kZXYpKQo+ICsJCQlnb3RvIGZhaWw7Cj4gKwkJaWYg KCFmdykKPiArCQkJZ290byBmYWlsOwo+ICsJCURSTV9ERUJVR19EUklWRVIoImZldGNoICVzIGZ3 IGZyb20gPCVzPiBzdWNjZWVkZWQsIGZ3ICVwXG4iLAo+ICsJCQl1Y19mdy0+dWNfbmFtZSwgdWNf ZnctPnVjX2Z3X3BhdGgsIGZ3KTsKPiArCQl1Y19mdy0+dWNfZndfYmxvYiA9IGZ3Owo+ICsJfQo+ ICsKPiArCS8qIENhbGxiYWNrIHRvIHRoZSBvcHRpb25hbCB1Qy1zcGVjaWZpYyBmdW5jdGlvbiwg aWYgc3VwcGxpZWQgKi8KPiArCWlmIChjYWxsYmFjayAmJiAhY2FsbGJhY2sodWNfZncpKQo+ICsJ CWdvdG8gZmFpbDsKPiArCj4gKwkvKiBDYWxsYmFjayBtYXkgaGF2ZSBkb25lIHRoZSBvYmplY3Qg YWxsb2NhdGlvbiAmIHdyaXRlIGl0c2VsZiAqLwo+ICsJb2JqID0gdWNfZnctPnVjX2Z3X29iajsK PiArCWlmICghb2JqKSB7Cj4gKwkJc2l6ZV90IHBhZ2VzID0gcm91bmRfdXAoZnctPnNpemUsIFBB R0VfU0laRSk7Cj4gKwkJb2JqID0gaTkxNV9nZW1fYWxsb2Nfb2JqZWN0KGRldiwgcGFnZXMpOwo+ ICsJCWlmICghb2JqKQo+ICsJCQlnb3RvIGZhaWw7Cj4gKwo+ICsJCXVjX2Z3LT51Y19md19vYmog PSBvYmo7Cj4gKwkJdWNfZnctPnVjX2Z3X3NpemUgPSBmdy0+c2l6ZTsKPiArCQlpZiAoaTkxNV9n ZW1fb2JqZWN0X3dyaXRlKG9iaiwgZnctPmRhdGEsIGZ3LT5zaXplKSkKPiArCQkJZ290byBmYWls Owo+ICsJfQo+ICsKPiArCURSTV9ERUJVR19EUklWRVIoIiVzIGZ3IGZldGNoIHN0YXR1cyBTVUND RVNTXG4iLCB1Y19mdy0+dWNfbmFtZSk7Cj4gKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKPiArCXVj X2Z3LT51Y19md19ibG9iID0gTlVMTDsKPiArCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJ TlRFTF9VQ19GSVJNV0FSRV9TVUNDRVNTOwo+ICsJcmV0dXJuOwo+ICsKPiArZmFpbDoKPiArCURS TV9ERUJVR19EUklWRVIoIiVzIGZ3IGZldGNoIHN0YXR1cyBGQUlMOyBmdyAlcCwgb2JqICVwXG4i LAo+ICsJCXVjX2Z3LT51Y19uYW1lLCBmdywgdWNfZnctPnVjX2Z3X29iaik7Cj4gKwlEUk1fRVJS T1IoIkZhaWxlZCB0byBmZXRjaCAlcyBmaXJtd2FyZSBmcm9tIDwlcz5cbiIsCj4gKwkJICB1Y19m dy0+dWNfbmFtZSwgdWNfZnctPnVjX2Z3X3BhdGgpOwo+ICsKPiArCW9iaiA9IHVjX2Z3LT51Y19m d19vYmo7Cj4gKwlpZiAob2JqKQo+ICsJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmot PmJhc2UpOwo+ICsJdWNfZnctPnVjX2Z3X29iaiA9IE5VTEw7Cj4gKwo+ICsJcmVsZWFzZV9maXJt d2FyZShmdyk7CQkvKiBPSyBldmVuIGlmIGZ3IGlzIE5VTEwgKi8KPiArCXVjX2Z3LT51Y19md19i bG9iID0gTlVMTDsKPiArCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJN V0FSRV9GQUlMOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaW50ZWxfdWNfZndfY2hlY2soKSAtIGNo ZWNrIHRoZSBzdGF0dXMgb2YgdGhlIGZpcm13YXJlIGZldGNoaW5nIHByb2Nlc3MKPiArICogQHVj X2Z3OglpbnRlbF91Y19mdyBzdHJ1Y3R1cmUKPiArICogQGNhbGxiYWNrOglvcHRpb25hbCBjYWxs YmFjayBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhbmQvb3Igc2F2ZSB0aGUgaW1hZ2UKPiArICoKPiAr ICogSWYgdGhlIGZldGNoIGlzIHN0aWxsIFBFTkRJTkcsIHdhaXQgZm9yIGNvbXBsZXRpb24gZmly c3QsIHRoZW4gY2hlY2sgYW5kCj4gKyAqIHJldHVybiB0aGUgb3V0Y29tZS4gU3Vic2VxdWVudCBj YWxscyB3aWxsIGp1c3QgcmV0dXJuIHRoZSBzYW1lIG91dGNvbWUKPiArICogYmFzZWQgb24gdGhl IHJlY29yZGVkIGZldGNoIHN0YXR1cywgd2l0aG91dCB0cmlnZ2VyaW5nIGFub3RoZXIgZmV0Y2gK PiArICogYW5kIHdpdGhvdXQgY2FsbGluZyBAY2FsbGJhY2soKS4KPiArICoKPiArICogQWZ0ZXIg dGhpcyBjYWxsLCBAdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyB3aWxsIHNob3cgd2hldGhlciB0 aGUgZmlybXdhcmUKPiArICogaW1hZ2Ugd2FzIHN1Y2Nlc3NmdWxseSBmZXRjaGVkIGFuZCB0cmFu c2ZlcnJlZCB0byBhIEdFTSBvYmplY3QuIElmIGl0IGlzCj4gKyAqIElOVEVMX1VDX0ZJUk1XQVJF X1NVQ0NFU1MsIEB1Y19mdy0+dWNfZndfb2JqIHdpbGwgYmUgcG9pbnQgdG8gdGhlIEdFTQo+ICsg KiBvYmplY3QsIGFuZCB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2Ugd2lsbCBiZSBpbiBAdWNfZnctPnVj X2Z3X3NpemUuICBGb3IgYW55Cj4gKyAqIG90aGVyIHN0YXR1cyB2YWx1ZSwgdGhlc2UgbWVtYmVy cyBhcmUgdW5kZWZpbmVkLgo+ICsgKgo+ICsgKiBUaGUgQGNhbGxiYWNrKCkgcGFyYW1ldGVyIGFs bG93cyB0aGUgdUMtc3BlY2lmaWMgY29kZSB0byB2YWxpZGF0ZSB0aGUKPiArICogaW1hZ2UgYmVm b3JlIGl0IGlzIHNhdmVkLCBhbmQgYWxzbyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBzYXZlIG1l Y2hhbmlzbQo+ICsgKiBpZiByZXF1aXJlZC4gV2hlbiBpdCBpcyBjYWxsZWQsIEB1Y19mdy0+dWNf ZndfYmxvYiByZWZlcnMgdG8gdGhlIGZldGNoZWQKPiArICogZmlybXdhcmUgaW1hZ2UsIGFuZCBA dWNfZnctPnVjX2Z3X29iaiBpcyBOVUxMLgo+ICsgKgo+ICsgKiBJZiBAY2FsbGJhY2soKSByZXR1 cm5zIEZBTFNFLCB0aGUgZmV0Y2hlZCBpbWFnZSBpcyBjb25zaWRlcmVkIGludmFsaWQuCj4gKyAq IFRoZSBmZXRjaCBzdGF0dXMgd2lsbCBiZSBzZXQgdG8gRkFJTCwgYW5kIHRoaXMgZnVuY3Rpb24g d2lsbCByZXR1cm4gLUVJTy4KPiArICoKPiArICogSWYgQGNhbGxiYWNrKCkgcmV0dXJucyBUUlVF IGJ1dCBkb2Vzbid0IHNldCBAdWNfZnctPnVjX2Z3X29iaiwgdGhlIGltYWdlCj4gKyAqIGlzIGNv bnNpZGVyZWQgZ29vZDsgaXQgd2lsbCBiZSBzYXZlZCBpbiBhIEdFTSBvYmplY3QgYXMgZGVzY3Jp YmVkIGFib3ZlLgo+ICsgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmIG5vIEBjYWxsYmFjaygpIGlz IHN1cHBsaWVkLgo+ICsgKgo+ICsgKiBJZiBAY2FsbGJhY2soKSByZXR1cm5zIFRSVUUgYWZ0ZXIg c2V0dGluZyBAdWNfZnctPnVjX2Z3X29iaiwgdGhpcyBtZWFucwo+ICsgKiB0aGF0IHRoZSBpbWFn ZSBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkIGJ5IEBjYWxsYmFjaygpIGl0c2VsZi4gVGhpcyBhbGxv d3MKPiArICogQGNhbGxiYWNrKCkgdG8gY3VzdG9taXNlIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEg aW4gdGhlIEdFTSBvYmplY3QsIGZvcgo+ICsgKiBleGFtcGxlIGlmIGl0IG5lZWRzIHRvIHNhdmUg b25seSBhIHBvcnRpb24gb2YgdGhlIGxvYWRlZCBpbWFnZS4KPiArICoKPiArICogSW4gYWxsIGNh c2VzIHRoZSBmaXJtd2FyZSBibG9iIGlzIHJlbGVhc2VkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJl dHVybnMuCj4gKyAqCj4gKyAqIFJldHVybjoJbm9uLXplcm8gY29kZSBvbiBlcnJvcgo+ICsgKi8K PiAraW50Cj4gK2ludGVsX3VjX2Z3X2NoZWNrKHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncsCj4g KwkJICBib29sIGNhbGxiYWNrKHN0cnVjdCBpbnRlbF91Y19mdyAqKSkKPiArewo+ICsJV0FSTl9P TighbXV0ZXhfaXNfbG9ja2VkKCZ1Y19mdy0+dWNfZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiArCj4g KwlpZiAodWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9PSBJTlRFTF9VQ19GSVJNV0FSRV9QRU5E SU5HKSB7Cj4gKwkJLyogV2Ugb25seSBjb21lIGhlcmUgb25jZSAqLwo+ICsJCXVjX2Z3X2ZldGNo X3dhaXQodWNfZncsIGNhbGxiYWNrKTsKPiArCQkvKiBzdGF0ZSBtdXN0IG5vdyBiZSBGQUlMIG9y IFNVQ0NFU1MgKi8KPiArCX0KPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCIlcyBmdyBmZXRjaCBz dGF0dXMgJWRcbiIsCj4gKwkJdWNfZnctPnVjX25hbWUsIHVjX2Z3LT51Y19md19mZXRjaF9zdGF0 dXMpOwo+ICsKPiArCXN3aXRjaCAodWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cykgewo+ICsJY2Fz ZSBJTlRFTF9VQ19GSVJNV0FSRV9GQUlMOgo+ICsJCS8qIHNvbWV0aGluZyB3ZW50IHdyb25nIDoo ICovCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9OT05F Ogo+ICsJCS8qIG5vIGZpcm13YXJlLCBub3RoaW5nIHRvIGRvIChub3QgYW4gZXJyb3IpICovCj4g KwkJcmV0dXJuIDA7Cj4gKwo+ICsJY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9QRU5ESU5HOgo+ICsJ ZGVmYXVsdDoKPiArCQkvKiAiY2FuJ3QgaGFwcGVuIiAqLwo+ICsJCVdBUk5fT05DRSgxLCAiJXMg ZncgPCVzPiBpbnZhbGlkIHVjX2Z3X2ZldGNoX3N0YXR1cyAlZCFcbiIsCj4gKwkJCXVjX2Z3LT51 Y19uYW1lLCB1Y19mdy0+dWNfZndfcGF0aCwKPiArCQkJdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1 cyk7Cj4gKwkJcmV0dXJuIC1FTlhJTzsKPiArCj4gKwljYXNlIElOVEVMX1VDX0ZJUk1XQVJFX1NV Q0NFU1M6Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gK30KPiArCj4gKy8qCj4gKyAqIENhbGxiYWNr IGZyb20gdGhlIGtlcm5lbCdzIGFzeW5jaHJvbm91cyBmaXJtd2FyZS1mZXRjaGluZyBzdWJzeXN0 ZW0uCj4gKyAqIEFsbCB3ZSBoYXZlIHRvIGRvIGhlcmUgaXMgc3Rhc2ggdGhlIGJsb2IgYW5kIHNp Z25hbCBjb21wbGV0aW9uLgo+ICsgKiBFcnJvciBjaGVja2luZyAoZS5nLiBubyBmaXJtd2FyZSBm b3VuZCkgaXMgbGVmdCB0byBtYWlubGluZSBjb2RlLgo+ICsgKiBXZSBkb24ndCBoYXZlIChhbmQg ZG9uJ3Qgd2FudCBvciBuZWVkIHRvIGFjcXVpcmUpIHRoZSBzdHJ1Y3RfbXV0ZXggaGVyZS4KPiAr ICovCj4gK3N0YXRpYyB2b2lkCj4gK3VjX2Z3X2ZldGNoX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBm aXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF91Y19mdyAq dWNfZncgPSBjb250ZXh0Owo+ICsKPiArCVdBUk5fT04odWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1 cyAhPSBJTlRFTF9VQ19GSVJNV0FSRV9QRU5ESU5HKTsKPiArCURSTV9ERUJVR19EUklWRVIoIiVz IGZpcm13YXJlIGZldGNoIGZyb20gPCVzPiBzdGF0dXMgJWQsIGZ3ICVwXG4iLAo+ICsJCQl1Y19m dy0+dWNfbmFtZSwgdWNfZnctPnVjX2Z3X3BhdGgsCj4gKwkJCXVjX2Z3LT51Y19md19mZXRjaF9z dGF0dXMsIGZ3KTsKPiArCj4gKwl1Y19mdy0+dWNfZndfYmxvYiA9IGZ3Owo+ICsJY29tcGxldGUo JnVjX2Z3LT51Y19md19mZXRjaGVkKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGludGVsX3VjX2Z3 X2luaXQoKSAtIGluaXRpYXRlIHRoZSBmZXRjaGluZyBvZiBmaXJtd2FyZQo+ICsgKiBAZGV2Oglk cm0gZGV2aWNlCj4gKyAqIEB1Y19mdzoJaW50ZWxfdWNfZncgc3RydWN0dXJlCj4gKyAqIEBuYW1l OglodW1hbi1yZWFkYWJsZSBkZXZpY2UgbmFtZSAoZS5nLiAiR3VDIikgZm9yIG1lc3NhZ2VzCj4g KyAqIEBmd19wYXRoOgkodHJhaWxpbmcgcGFydHMgb2YpIHBhdGggdG8gZmlybXdhcmUgKGUuZy4g Imk5MTUvZ3VjX2Z3LmJpbiIpCj4gKyAqIAkJQGZ3X3BhdGggPT0gTlVMTCBtZWFucyAibm8gZmly bXdhcmUgZXhwZWN0ZWQiIChub3QgYW4gZXJyb3IpLAo+ICsgKiAJCUBmd19wYXRoID09ICIiIChl bXB0eSBzdHJpbmcpIG1lYW5zICJmaXJtd2FyZSB1bmtub3duIiBpLmUuCj4gKyAqIAkJdGhlIHVD IHJlcXVpcmVzIGZpcm13YXJlLCBidXQgdGhlIGRyaXZlciBkb2Vzbid0IGtub3cgd2hlcmUKPiAr ICogCQl0byBmaW5kIHRoZSBwcm9wZXIgdmVyc2lvbi4gVGhpcyB3aWxsIGJlIGxvZ2dlZCBhcyBh biBlcnJvci4KPiArICoKPiArICogVGhpcyBpcyBjYWxsZWQganVzdCBvbmNlIHBlciB1QywgZHVy aW5nIGRyaXZlciBsb2FkaW5nLiBJdCBpcyB0aGVyZWZvcmUKPiArICogYXV0b21hdGljYWxseSBz aW5nbGUtdGhyZWFkZWQgYW5kIGRvZXMgbm90IG5lZWQgdG8gYWNxdWlyZSBhbnkgbXV0ZXhlcwo+ ICsgKiBvciBzcGlubG9ja3MuIE9UT0gsIEdFTSBpcyBub3QgeWV0IGZ1bGx5IGluaXRpYWxpc2Vk LCBzbyB3ZSBjYW4ndCBkbwo+ICsgKiB2ZXJ5IG11Y2ggaGVyZS4KPiArICoKPiArICogVGhlIG1h aW4gdGFzayBoZXJlIGlzIHRvIGluaXRpYXRlIHRoZSBmZXRjaGluZyBvZiB0aGUgdUMgZmlybXdh cmUgaW50bwo+ICsgKiBtZW1vcnksIHVzaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgZmlybXdhcmUg ZmV0Y2hpbmcgc3VwcG9ydC4gIFRoZSBhY3R1YWwKPiArICogZmV0Y2hpbmcgd2lsbCB0aGVuIHBy b2NlZWQgYXN5bmNocm9ub3VzbHkgYW5kIGluIHBhcmFsbGVsIHdpdGggdGhlIHJlc3QKPiArICog b2YgZHJpdmVyIGluaXRpYWxpc2F0aW9uOyBsYXRlciBpbiB0aGUgbG9hZGluZyBwcm9jZXNzIHdl IHdpbGwgc3luY2hyb25pc2UKPiArICogd2l0aCB0aGUgZmlybXdhcmUtZmV0Y2hpbmcgdGhyZWFk IGJlZm9yZSB0cmFuc2ZlcnJpbmcgdGhlIGZpcm13YXJlIGltYWdlCj4gKyAqIGZpcnN0bHkgaW50 byBhIEdFTSBvYmplY3QgYW5kIHRoZW4gaW50byB0aGUgdUMncyBtZW1vcnkuCj4gKyAqLwo+ICt2 b2lkCj4gK2ludGVsX3VjX2Z3X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGlu dGVsX3VjX2Z3ICp1Y19mdywKPiArCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZndf cGF0aCkKPiArewo+ICsJdWNfZnctPnVjX2RldiA9IGRldjsKPiArCXVjX2Z3LT51Y19uYW1lID0g bmFtZTsKPiArCXVjX2Z3LT51Y19md19wYXRoID0gZndfcGF0aDsKPiArCXVjX2Z3LT51Y19md19m ZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9OT05FOwo+ICsJdWNfZnctPnVjX2Z3X2xv YWRfc3RhdHVzID0gSU5URUxfVUNfRklSTVdBUkVfTk9ORTsKPiArCWluaXRfY29tcGxldGlvbigm dWNfZnctPnVjX2Z3X2ZldGNoZWQpOwo+ICsKPiArCWlmIChmd19wYXRoID09IE5VTEwpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCWlmICgqZndfcGF0aCA9PSAnXDAnKSB7Cj4gKwkJRFJNX0VSUk9SKCJO byAlcyBmaXJtd2FyZSBrbm93biBmb3IgdGhpcyBwbGF0Zm9ybVxuIiwgbmFtZSk7Cj4gKwkJdWNf ZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX0ZBSUw7Cj4gKwkJcmV0 dXJuOwo+ICsJfQo+ICsKPiArCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19G SVJNV0FSRV9QRU5ESU5HOwo+ICsKPiArCWlmIChyZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElT X01PRFVMRSwgdHJ1ZSwgZndfcGF0aCwKPiArCQkJCSAgICAmZGV2LT5wZGV2LT5kZXYsCj4gKwkJ CQkgICAgR0ZQX0tFUk5FTCwgdWNfZncsCj4gKwkJCQkgICAgdWNfZndfZmV0Y2hfY2FsbGJhY2sp KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVxdWVzdCAlcyBmaXJtd2FyZSBmcm9tIDwl cz5cbiIsCj4gKwkJCSAgbmFtZSwgZndfcGF0aCk7Cj4gKwkJdWNfZnctPnVjX2Z3X2ZldGNoX3N0 YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX0ZBSUw7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiAr CS8qIGZpcm13YXJlIGZldGNoIGluaXRpYXRlZCwgY2FsbGJhY2sgd2lsbCBzaWduYWwgY29tcGxl dGlvbiAqLwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiaW5pdGlhdGVkIGZldGNoaW5nICVzIGZpcm13 YXJlIGZyb20gPCVzPlxuIiwKPiArCQluYW1lLCBmd19wYXRoKTsKPiArfQo+ICsKPiArLyoqCj4g KyAqIGludGVsX3VjX2Z3X2ZpbmkoKSAtIGNsZWFuIHVwIGFsbCB1QyBmaXJtd2FyZS1yZWxhdGVk IGRhdGEKPiArICogQHVjX2Z3OglpbnRlbF91Y19mdyBzdHJ1Y3R1cmUKPiArICovCj4gK3ZvaWQK PiAraW50ZWxfdWNfZndfZmluaShzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KQo+ICt7Cj4gKwlX QVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnVjX2Z3LT51Y19kZXYtPnN0cnVjdF9tdXRleCkpOwo+ ICsKPiArCS8qCj4gKwkgKiBHZW5lcmFsbHksIHRoZSBibG9iIHNob3VsZCBoYXZlIGJlZW4gcmVs ZWFzZWQgZWFybGllciwgYnV0Cj4gKwkgKiBpZiB0aGUgZHJpdmVyIGxvYWQgd2VyZSBhYm9ydGVk IGFmdGVyIHRoZSBmZXRjaCBoYWQgYmVlbgo+ICsJICogaW5pdGlhdGVkIGJ1dCBub3QgY29tcGxl dGVkIGl0IG1pZ2h0IHN0aWxsIGJlIGFyb3VuZAo+ICsJICovCj4gKwlpZiAodWNfZnctPnVjX2Z3 X2ZldGNoX3N0YXR1cyA9PSBJTlRFTF9VQ19GSVJNV0FSRV9QRU5ESU5HKQo+ICsJCXdhaXRfZm9y X2NvbXBsZXRpb24oJnVjX2Z3LT51Y19md19mZXRjaGVkKTsKPiArCXJlbGVhc2VfZmlybXdhcmUo dWNfZnctPnVjX2Z3X2Jsb2IpOwkvKiBPSyBldmVuIGlmIE5VTEwgKi8KPiArCXVjX2Z3LT51Y19m d19ibG9iID0gTlVMTDsKPiArCj4gKwlpZiAodWNfZnctPnVjX2Z3X29iaikKPiArCQlkcm1fZ2Vt X29iamVjdF91bnJlZmVyZW5jZSgmdWNfZnctPnVjX2Z3X29iai0+YmFzZSk7Cj4gKwl1Y19mdy0+ dWNfZndfb2JqID0gTlVMTDsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF91Y19sb2FkZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRl ci5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4yMjUwMmVhCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5o Cj4gQEAgLTAsMCArMSw4MiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBD b3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM Cj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3I6 Cj4gKyAqCURhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+Cj4gKyAqLwo+ICsj aWZuZGVmIF9JTlRFTF9VQ19MT0FERVJfSAo+ICsjZGVmaW5lIF9JTlRFTF9VQ19MT0FERVJfSAo+ ICsKPiArLyoKPiArICogTWljcm9jb250cm9sbGVyICh1QykgZmlybXdhcmUgbG9hZGluZyBzdXBw b3J0Cj4gKyAqLwo+ICsKPiArLyoKPiArICogVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHRvIHRyYWNr IHRoZSBzdGFnZXMgb2YgZ2V0dGluZyB0aGUgcmVxdWlyZWQgZmlybXdhcmUKPiArICogaW50byBh biBvbmJvYXJkIG1pY3JvY29udHJvbGxlci4gVGhlIGNvbW1vbiBjb2RlIHRyYWNrcyB0aGUgcGhh c2VzIG9mCj4gKyAqIGZldGNoaW5nIHRoZSBmaXJtd2FyZSAoYWthICJiaW5hcnkgYmxvYiIpIGZy b20gYW4gZXh0ZXJuYWwgZmlsZSBpbnRvIGEgR0VNCj4gKyAqIG9iamVjdCBpbiB0aGUgJ3VjX2Z3 X2ZldGNoX3N0YXR1cycgZmllbGQgYmVsb3c7IHRoZSB1Qy1zcGVjaWZpYyBETUEgY29kZQo+ICsg KiB1c2VzIHRoZSAndWNfZndfbG9hZF9zdGF0dXMnIGZpZWxkIHRvIHRyYWNrIHRoZSB0cmFuc2Zl ciBmcm9tIEdFTSBvYmplY3QKPiArICogdG8gdUMgbWVtb3J5Lgo+ICsgKgo+ICsgKiBGb3IgdGhl IGZpcnN0IChmZXRjaCkgc3RhZ2UsIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgdmFsdWVzIGlz Ogo+ICsgKiBOT05FIC0gbm8gZmlybXdhcmUgaXMgYmVpbmcgZmV0Y2hlZCBlLmcuIGJlY2F1c2Ug dGhlcmUgaXMgbm8gdUMKPiArICogUEVORElORyAtIGZpcm13YXJlIGZldGNoIGluaXRpYXRlZDsg Y2FsbGJhY2sgd2lsbCBjb21wbGV0ZSAndWNfZndfZmV0Y2hlZCcKPiArICogU1VDQ0VTUyAtIHVD IGZpcm13YXJlIGZldGNoZWQgaW50byBhIEdFTSBvYmplY3QgYW5kIHJlYWR5IGZvciB1c2UKPiAr ICogRkFJTCAtIHNvbWV0aGluZyB3ZW50IHdyb25nOyB1QyBmaXJtd2FyZSBpcyBub3QgYXZhaWxh YmxlCj4gKyAqCj4gKyAqIFRoZSBzZWNvbmQgKGxvYWQpIHN0YWdlIGlzIHNpbXBsZXIgYXMgdGhl cmUgaXMgbm8gYXN5bmNocm9ub3VzIGhhbmRvZmY6Cj4gKyAqIE5PTkUgLSBubyBmaXJtd2FyZSBp cyBiZWluZyBsb2FkZWQgZS5nLiBiZWNhdXNlIHRoZXJlIGlzIG5vIHVDCj4gKyAqIFBFTkRJTkcg LSBmaXJtd2FyZSBETUEgbG9hZCBpbiBwcm9ncmVzcwo+ICsgKiBTVUNDRVNTIC0gdUMgZmlybXdh cmUgbG9hZGVkIGludG8gdUMgbWVtb3J5IGFuZCByZWFkeSBmb3IgdXNlCj4gKyAqIEZBSUwgLSBz b21ldGhpbmcgd2VudCB3cm9uZzsgdUMgZmlybXdhcmUgaXMgbm90IGF2YWlsYWJsZQo+ICsgKi8K PiArZW51bSBpbnRlbF91Y19md19zdGF0dXMgewo+ICsJSU5URUxfVUNfRklSTVdBUkVfRkFJTCA9 IC0xLAo+ICsJSU5URUxfVUNfRklSTVdBUkVfTk9ORSA9IDAsCj4gKwlJTlRFTF9VQ19GSVJNV0FS RV9QRU5ESU5HLAo+ICsJSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUwo+ICt9Owo+ICsKPiArLyoK PiArICogVGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzIGFsbCB0aGUgZGF0YSBuZWVkZWQgZHVy aW5nIHRoZSBwcm9jZXNzIG9mCj4gKyAqIGZldGNoaW5nLCBjYWNoaW5nLCBhbmQgbG9hZGluZyB0 aGUgZmlybXdhcmUgaW1hZ2UgaW50byB0aGUgdUMuCj4gKyAqLwo+ICtzdHJ1Y3QgaW50ZWxfdWNf Zncgewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKgkJdWNfZGV2Owo+ICsJY29uc3QgY2hhciAqCQkJ dWNfbmFtZTsKPiArCWNvbnN0IGNoYXIgKgkJCXVjX2Z3X3BhdGg7Cj4gKwljb25zdCBzdHJ1Y3Qg ZmlybXdhcmUgKgkJdWNfZndfYmxvYjsKPiArCXN0cnVjdCBjb21wbGV0aW9uCQl1Y19md19mZXRj aGVkOwo+ICsJc2l6ZV90CQkJCXVjX2Z3X3NpemU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqCXVjX2Z3X29iajsKPiArCWVudW0gaW50ZWxfdWNfZndfc3RhdHVzCQl1Y19md19mZXRj aF9zdGF0dXM7Cj4gKwllbnVtIGludGVsX3VjX2Z3X3N0YXR1cwkJdWNfZndfbG9hZF9zdGF0dXM7 Cj4gK307Cj4gKwo+ICt2b2lkIGludGVsX3VjX2Z3X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdywKPiArCQljb25zdCBjaGFyICp1Y19uYW1lLCBj b25zdCBjaGFyICpmd19wYXRoKTsKPiAraW50IGludGVsX3VjX2Z3X2NoZWNrKHN0cnVjdCBpbnRl bF91Y19mdyAqdWNfZncsCj4gKwkJYm9vbCBjYWxsYmFjayhzdHJ1Y3QgaW50ZWxfdWNfZncgKikp Owo+ICt2b2lkIGludGVsX3VjX2Z3X2Zpbmkoc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdyk7Cj4g Kwo+ICsjZW5kaWYKPiAtLSAKPiAxLjcuOS41Cj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVu Z2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=