From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH 2/2] drm/i915: Make sure we have enough memory bandwidth on ICL Date: Wed, 27 Mar 2019 15:12:21 +0100 Message-ID: <3a875644-9cee-637f-4c54-53c57488857c@linux.intel.com> References: <20190320214635.27814-1-ville.syrjala@linux.intel.com> <20190320214635.27814-2-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0D1816E1DE for ; Wed, 27 Mar 2019 14:12:27 +0000 (UTC) In-Reply-To: <20190320214635.27814-2-ville.syrjala@linux.intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville Syrjala , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T3AgMjAtMDMtMjAxOSBvbSAyMjo0NiBzY2hyZWVmIFZpbGxlIFN5cmphbGE6Cj4gRnJvbTogVmls bGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPgo+IElDTCBoYXMg c28gbWFueSBwbGFuZXMgdGhhdCBpdCBjYW4gZWFzaWx5IGV4Y2VlZCB0aGUgbWF4aW11bQo+IGVm ZmVjdGl2ZSBtZW1vcnkgYmFuZHdpZHRoIG9mIHRoZSBzeXN0ZW0uIFdlIG11c3QgdGhlcmVmb3Jl IGNoZWNrCj4gdGhhdCB3ZSBkb24ndCBleGNlZWQgdGhhdCBsaW1pdC4KPgo+IFRoZSBhbGdvcml0 aG0gaXMgdmVyeSBtYWdpYyBudW1iZXIgaGVhdnkgYW5kIGxhY2tzIHN1ZmZpY2llbnQKPiBleHBs YW5hdGlvbiBmb3Igbm93LiBXZSBhbHNvIGhhdmUgbm8gc2FuZSB3YXkgdG8gcXVlcnkgdGhlCj4g bWVtb3J5IGNsb2NrIGFuZCB0aW1pbmdzLCBzbyB3ZSBtdXN0IHJlbHkgb24gYSBjb21iaW5hdGlv biBvZgo+IHJhdyByZWFkb3V0IGZyb20gdGhlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBoYXJkY29k ZWQgYXNzdW1wdGlvbnMuCj4gVGhlIG1lbW9yeSBjb250cm9sbGVyIHZhbHVlcyBvYnZpb3VzbHkg Y2hhbmdlIGFzIHRoZSBzeXN0ZW0KPiBqdW1wcyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgU0FHViBw b2ludHMsIHNvIHdlIHRyeSB0byBzdGFiaWxpemUKPiBpdCBmaXJzdCBieSBkaXNhYmxpbmcgU0FH ViBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZWFkb3V0Lgo+Cj4gVGhlIHV0aWxpemVkIGJhbmR3 aWR0aCBpcyB0cmFja2VkIHZpYSBhIGRldmljZSB3aWRlIGF0b21pYwo+IHByaXZhdGUgb2JqZWN0 LiBUaGF0IGlzIGFjdHVhbGx5IG5vdCByb2J1c3QgYmVjYXVzZSB3ZSBjYW4ndAo+IGFmZm9yZCB0 byBlbmZvcmNlIHN0cmljdCBnbG9iYWwgb3JkZXJpbmcgYmV0d2VlbiB0aGUgcGlwZXMuCj4gVGh1 cyBJIHRoaW5rIEknbGwgbmVlZCB0byBjaGFuZ2UgdGhpcyB0byBzaW1wbHkgY2hvcCB1cCB0aGUK PiBhdmFpbGFibGUgYmFuZHdpZHRoIGJldHdlZW4gYWxsIHRoZSBhY3RpdmUgcGlwZXMuIEVhY2gg cGlwZQo+IGNhbiB0aGVuIGRvIHdoYXRldmVyIGl0IHdhbnRzIGFzIGxvbmcgYXMgaXQgZG9lc24n dCBleGNlZWQKPiBpdHMgYnVkZ2V0LiBUaGF0IHNjaGVtZSB3aWxsIGFsc28gcmVxdWlyZSB0aGF0 IHdlIGFzc3VtZSB0aGF0Cj4gYW55IG51bWJlciBvZiBwbGFuZXMgY291bGQgYmUgYWN0aXZlIGF0 IGFueSB0aW1lLgo+Cj4gVE9ETzogbWFrZSBpdCByb2J1c3QgYW5kIGRlYWwgd2l0aCBhbGwgdGhl IG9wZW4gcXVlc3Rpb25zCj4KPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxl LnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmMgICAgICAgICAgIHwgMzQ2ICsrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAgfCAgMTAgKwo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYyB8ICAyMCArKwo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9idy5jICAgICAgICAgICB8IDE5MCArKysrKysrKysrKysKPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICAgICAgfCAgMzkgKystCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICAgICAgIHwgIDMyICsrCj4gIDcgZmlsZXMgY2hhbmdl ZCwgNjM3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2J3LmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4g aW5kZXggNjhmZWNmMzU1NDcxLi4yZDI0YmRkNTAxYzQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQo+IEBAIC0xMjYsNiArMTI2LDcgQEAgaTkxNS15ICs9IGludGVsX2F1ZGlvLm8gXAo+ICAJICBp bnRlbF9hdG9taWMubyBcCj4gIAkgIGludGVsX2F0b21pY19wbGFuZS5vIFwKPiAgCSAgaW50ZWxf Ymlvcy5vIFwKPiArCSAgaW50ZWxfYncubyBcCj4gIAkgIGludGVsX2NkY2xrLm8gXAo+ICAJICBp bnRlbF9jb2xvci5vIFwKPiAgCSAgaW50ZWxfY29tYm9fcGh5Lm8gXAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYwo+IGluZGV4IDhiMzdlYzBlMDY3Ni4uMTM0ZDFiMWE5M2YxIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCj4gQEAgLTE0NTEsNiArMTQ1MSwzNDggQEAgYnh0X2dldF9kcmFtX2lu Zm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJcmV0dXJuIDA7Cj4gIH0K PiAgCj4gKyNkZWZpbmUgU0FfUEVSRl9TVEFUVVNfMF8wXzBfTUNIQkFSX1BDIF9NTUlPKE1DSEJB Ul9NSVJST1JfQkFTRV9TTkIgKyAweDU5MTgpCj4gKyNkZWZpbmUgIFNLTF9RQ0xLX1JBVElPX01B U0sgKDB4N2YgPDwgMCkKPiArI2RlZmluZSAgU0tMX1FDTEtfUkFUSU9fU0hJVCAwCj4gKyNkZWZp bmUgIFNLTF9RQ0xLX1JFRkVSRU5DRSAoMSA8PCA3KQo+ICsjZGVmaW5lICBDTkxfUUNMS19SQVRJ T19NQVNLICgweDdmIDw8IDIpCj4gKyNkZWZpbmUgIENOTF9RQ0xLX1JBVElPX1NISVQgMgo+ICsj ZGVmaW5lICBDTkxfUUNMS19SRUZFUkVOQ0UgKDEgPDwgOSkKPiArI2RlZmluZSAgSUNMX1FDTEtf UkFUSU9fTUFTSyAoMHhmZiA8PCAyKQo+ICsjZGVmaW5lICBJQ0xfUUNMS19SQVRJT19TSElUIDIK PiArI2RlZmluZSAgSUNMX1FDTEtfUkVGRVJFTkNFICgxIDw8IDEwKQo+ICsKPiArI2RlZmluZSBN Q0hCQVJfQ0gwX0NSX1RDX1BSRV8wXzBfMF9NQ0hCQVIgX01NSU8oTUNIQkFSX01JUlJPUl9CQVNF X1NOQiArIDB4NDAwMCkKPiArI2RlZmluZSBNQ0hCQVJfQ0gxX0NSX1RDX1BSRV8wXzBfMF9NQ0hC QVIgX01NSU8oTUNIQkFSX01JUlJPUl9CQVNFX1NOQiArIDB4NDQwMCkKPiArI2RlZmluZSAgU0tM X0RSQU1fVF9XUlBSRV9NQVNLICgweDdmIDw8IDI0KQo+ICsjZGVmaW5lICBTS0xfRFJBTV9UX1dS UFJFX1NISUZUIDI0Cj4gKyNkZWZpbmUgIFNLTF9EUkFNX1RfUkRQUkVfTUFTSyAoMHhmIDw8IDE2 KQo+ICsjZGVmaW5lICBTS0xfRFJBTV9UX1JEUFJFX1NISUZUIDE2Cj4gKyNkZWZpbmUgIFNLTF9E UkFNX1RfUkFTX01BU0sgKDB4N2YgPDwgOCkKPiArI2RlZmluZSAgU0tMX0RSQU1fVF9SQVNfU0hJ RlQgOAo+ICsjZGVmaW5lICBTS0xfRFJBTV9UX1JQQUJfRVhUX01BU0sgKDB4MyA8PCA2KQo+ICsj ZGVmaW5lICBTS0xfRFJBTV9UX1JQQUJfRVhUX1NISUZUIDYKPiArI2RlZmluZSAgU0tMX0RSQU1f VF9SUF9NQVNLICgweDNmIDw8IDApCj4gKyNkZWZpbmUgIFNLTF9EUkFNX1RfUlBfU0hJRlQgMAo+ ICsjZGVmaW5lICBDTkxfRFJBTV9UX1dSUFJFX01BU0sgKDB4ZmYgPDwgMjQpCj4gKyNkZWZpbmUg IENOTF9EUkFNX1RfV1JQUkVfU0hJRlQgMjQKPiArI2RlZmluZSAgQ05MX0RSQU1fVF9QUERfTUFT SyAoMHg3IDw8IDIxKQo+ICsjZGVmaW5lICBDTkxfRFJBTV9UX1BQRF9TSElGVCAyMQo+ICsjZGVm aW5lICBDTkxfRFJBTV9UX1JEUFJFX01BU0sgKDB4MWYgPDwgMTYpCj4gKyNkZWZpbmUgIENOTF9E UkFNX1RfUkRQUkVfU0hJRlQgMTYKPiArI2RlZmluZSAgQ05MX0RSQU1fVF9SQVNfTUFTSyAoMHg3 ZiA8PCA5KQo+ICsjZGVmaW5lICBDTkxfRFJBTV9UX1JBU19TSElGVCA5Cj4gKyNkZWZpbmUgIENO TF9EUkFNX1RfUlBBQl9FWFRfTUFTSyAoMHg3IDw8IDYpCj4gKyNkZWZpbmUgIENOTF9EUkFNX1Rf UlBBQl9FWFRfU0hJRlQgNgo+ICsjZGVmaW5lICBDTkxfRFJBTV9UX1JQX01BU0sgKDB4M2YgPDwg MCkKPiArI2RlZmluZSAgQ05MX0RSQU1fVF9SUF9TSElGVCAwCj4gKwo+ICtzdHJ1Y3QgaW50ZWxf ZHJhbV90aW1pbmdzIHsKPiArCXU4IHRfcnAsIHRfcmRwcmUsIHRfcmFzLCB0X2JsOwo+ICt9Owo+ ICsKPiArc3RhdGljIGludCBpY2xfZ2V0X2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+ICt7Cj4gKwlpbnQgcmF0aW8sIHJlZjsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdmFs ID0gSTkxNV9SRUFEKFNBX1BFUkZfU1RBVFVTXzBfMF8wX01DSEJBUl9QQyk7Cj4gKwo+ICsJRFJN X0RFQlVHX0tNUygiU0FfUEVSRiA9IDB4JXhcbiIsIHZhbCk7Cj4gKwlEUk1fREVCVUdfS01TKCJC SU9TX0RBVEEgPSAweCV4XG4iLAo+ICsJCSAgICAgIEk5MTVfUkVBRChTS0xfTUNfQklPU19EQVRB XzBfMF8wX01DSEJBUl9QQ1UpKTsKPiArCj4gKwlyYXRpbyA9ICh2YWwgJiBJQ0xfUUNMS19SQVRJ T19NQVNLKSA+PiBJQ0xfUUNMS19SQVRJT19TSElUOwo+ICsKPiArCWlmICh2YWwgJiBJQ0xfUUNM S19SRUZFUkVOQ0UpCj4gKwkJcmVmID0gNjsgLyogNiAqIDE2LjY2NiBNSHogPSAxMDAgTUh6ICov Cj4gKwllbHNlCj4gKwkJcmVmID0gODsgLyogOCAqIDE2LjY2NiBNSHogPSAxMzMgTUh6ICovCj4g Kwo+ICsJcmV0dXJuIHJhdGlvICogcmVmOwo+ICt9Cj4gKwo+ICsjaWYgMAo+ICtzdGF0aWMgdm9p ZCBza2xfZ2V0X2RyYW1fY2hfdGltaW5ncyhzdHJ1Y3QgaW50ZWxfZHJhbV90aW1pbmdzICp0LAo+ ICsJCQkJICAgIGludCBjaGFubmVsLCBlbnVtIGludGVsX2RyYW1fdHlwZSB0eXBlLAo+ICsJCQkJ ICAgIHUzMiB2YWwpCj4gK3sKPiArCXQtPnRfcnAgPSAodmFsICYgU0tMX0RSQU1fVF9SUF9NQVNL KSA+PiBTS0xfRFJBTV9UX1JQX1NISUZUOwo+ICsJdC0+dF9yZHByZSA9ICh2YWwgJiBTS0xfRFJB TV9UX1JEUFJFX01BU0spID4+IFNLTF9EUkFNX1RfUkRQUkVfU0hJRlQ7Cj4gKwl0LT50X3JhcyA9 ICh2YWwgJiBTS0xfRFJBTV9UX1JBU19NQVNLKSA+PiBTS0xfRFJBTV9UX1JBU19TSElGVDsKPiAr CXQtPnRfYmwgPSB0eXBlID09IElOVEVMX0RSQU1fRERSNCA/IDQgOiA4Owo+ICsKPiArCURSTV9E RUJVR19LTVMoIkNIJWQgdFJQPSVkIHRSRFBSRT0lZCB0UkFTPSVkIHRCTD0lZFxuIiwKPiArCQkg ICAgICBjaGFubmVsLCB0LT50X3JwLCB0LT50X3JkcHJlLCB0LT50X3JhcywgdC0+dF9ibCk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHNrbF9nZXRfZHJhbV90aW1pbmdzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCSBjb25zdCBzdHJ1Y3QgZHJhbV9pbmZvICpkcmFt LAo+ICsJCQkJIHN0cnVjdCBpbnRlbF9kcmFtX3RpbWluZ3MgKnQpCj4gK3sKPiArCWlmIChkcmFt LT5jaGFubmVscyAmIEJJVCgwKSkgewo+ICsJCXUzMiB2YWwgPSBJOTE1X1JFQUQoTUNIQkFSX0NI MF9DUl9UQ19QUkVfMF8wXzBfTUNIQkFSKTsKPiArCj4gKwkJc2tsX2dldF9kcmFtX2NoX3RpbWlu Z3ModCwgMCwgZHJhbS0+dHlwZSwgdmFsKTsKPiArCX0gZWxzZSBpZiAoZHJhbS0+Y2hhbm5lbHMg JiBCSVQoMSkpIHsKPiArCQl1MzIgdmFsID0gSTkxNV9SRUFEKE1DSEJBUl9DSDFfQ1JfVENfUFJF XzBfMF8wX01DSEJBUik7Cj4gKwo+ICsJCXNrbF9nZXRfZHJhbV9jaF90aW1pbmdzKHQsIDEsIGRy YW0tPnR5cGUsIHZhbCk7Cj4gKwl9Cj4gK30KPiArI2VuZGlmCj4gKwo+ICtzdGF0aWMgdm9pZCBj bmxfZ2V0X2RyYW1fY2hfdGltaW5ncyhzdHJ1Y3QgaW50ZWxfZHJhbV90aW1pbmdzICp0LAo+ICsJ CQkJICAgIGludCBjaGFubmVsLCBlbnVtIGludGVsX2RyYW1fdHlwZSB0eXBlLAo+ICsJCQkJICAg IHUzMiB2YWwpCj4gK3sKPiArCXQtPnRfcnAgPSAodmFsICYgQ05MX0RSQU1fVF9SUF9NQVNLKSA+ PiBDTkxfRFJBTV9UX1JQX1NISUZUOwo+ICsJdC0+dF9yZHByZSA9ICh2YWwgJiBDTkxfRFJBTV9U X1JEUFJFX01BU0spID4+IENOTF9EUkFNX1RfUkRQUkVfU0hJRlQ7Cj4gKwl0LT50X3JhcyA9ICh2 YWwgJiBDTkxfRFJBTV9UX1JBU19NQVNLKSA+PiBDTkxfRFJBTV9UX1JBU19TSElGVDsKPiArCXQt PnRfYmwgPSB0eXBlID09IElOVEVMX0RSQU1fRERSNCA/IDQgOiA4Owo+ICsKPiArCURSTV9ERUJV R19LTVMoIkNIJWQgdFJQPSVkIHRSRFBSRT0lZCB0UkFTPSVkIHRCTD0lZFxuIiwKPiArCQkgICAg ICBjaGFubmVsLCB0LT50X3JwLCB0LT50X3JkcHJlLCB0LT50X3JhcywgdC0+dF9ibCk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGNubF9nZXRfZHJhbV90aW1pbmdzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiArCQkJCSBjb25zdCBzdHJ1Y3QgZHJhbV9pbmZvICpkcmFtLAo+ ICsJCQkJIHN0cnVjdCBpbnRlbF9kcmFtX3RpbWluZ3MgKnQpCj4gK3sKPiArCXUzMiB2YWw7Cj4g Kwo+ICsJaWYgKGRyYW0tPmNoYW5uZWxzICYgQklUKDApKSB7Cj4gKwkJdmFsID0gSTkxNV9SRUFE KE1DSEJBUl9DSDBfQ1JfVENfUFJFXzBfMF8wX01DSEJBUik7Cj4gKwkJY25sX2dldF9kcmFtX2No X3RpbWluZ3ModCwgMCwgZHJhbS0+dHlwZSwgdmFsKTsKPiArCX0gZWxzZSBpZiAoZHJhbS0+Y2hh bm5lbHMgJiBCSVQoMSkpIHsKPiArCQl2YWwgPSBJOTE1X1JFQUQoTUNIQkFSX0NIMV9DUl9UQ19Q UkVfMF8wXzBfTUNIQkFSKTsKPiArCQljbmxfZ2V0X2RyYW1fY2hfdGltaW5ncyh0LCAxLCBkcmFt LT50eXBlLCB2YWwpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfc2Fndl9wb2ludCB7 Cj4gKwl1MTYgZGNsaywgdF9ycCwgdF9yZHByZSwgdF9yYywgdF9yYXMsIHRfcmNkOwo+ICt9Owo+ ICsKPiArc3RydWN0IGludGVsX3NhZ3ZfaW5mbyB7Cj4gKwlzdHJ1Y3QgaW50ZWxfc2Fndl9wb2lu dCBwb2ludHNbM107Cj4gKwlpbnQgbnVtX3BvaW50czsKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lk IGljbF9nZXRfc2Fndl9wb2ludHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ICsJCQkJc3RydWN0IGludGVsX3NhZ3ZfaW5mbyAqc2ksCj4gKwkJCQljb25zdCBzdHJ1Y3QgaW50 ZWxfZHJhbV90aW1pbmdzICp0KQo+ICt7Cj4gKwlpbnQgZGNsaywgaTsKPiArCj4gKwlkY2xrID0g aWNsX2dldF9kY2xrKGRldl9wcml2KTsKPiArCj4gKwlzaS0+bnVtX3BvaW50cyA9IDM7Cj4gKwo+ ICsJLyoKPiArCSAqIElDTCBIYXJkY29kZWQKPiArCSAqIE5hbWUgIERlc2NyaXB0aW9uICAgICAg ICAgTUMgY2xvY2soTUh6KSAgICAgRERSIGRhdGEgcmF0ZShNVCAvIHMpICBHZWFyCj4gKwkgKiBM b3cgICBNaW4gdm9sdGFnZSBwb2ludCAgIDEwNjYgICAgICAgICAgICAgIDIxMzMgICAgICAgICAg ICAgICAgICAgMgo+ICsJICogTWVkICAgTWF4IEREUiByYXRlIHBvaW50ICBNYXggRERSIGZyZXEg LyAyICBNYXggRERSIGZyZXEgICAgICAgICAgIDIKPiArCSAqIEhpZ2ggIE1pbiBsYXRlbmN5IHBv aW50ICAgMjY2NyAgICAgICAgICAgICAgU2FtZSBhcyBNQyBjbG9jayAgICAgICAxCj4gKwkgKi8K PiArCXNpLT5wb2ludHNbMF0uZGNsayA9IG1pbig2NCwgZGNsayk7Cj4gKwlzaS0+cG9pbnRzWzFd LmRjbGsgPSBkY2xrOwo+ICsJc2ktPnBvaW50c1syXS5kY2xrID0gbWluKDgwLCBkY2xrKTsKPiAr Cj4gKwlmb3IgKGkgPSAwOyBpIDwgc2ktPm51bV9wb2ludHM7IGkrKykgewo+ICsJCXN0cnVjdCBp bnRlbF9zYWd2X3BvaW50ICpzcCA9ICZzaS0+cG9pbnRzW2ldOwo+ICsKPiArCQkvKgo+ICsJCSAq IFdlIGFzc3VtZSB0aGVzZSBzY2FsZSBsaW5lYXJseS4KPiArCQkgKiBTZWVtcyB0byBtYXRjaCBv YnNlcnZlZCBiZWhhdmlvdXIuCj4gKwkJICovCj4gKwkJc3AtPnRfcnAgPSBESVZfUk9VTkRfVVAo dC0+dF9ycCAqIHNwLT5kY2xrLCBkY2xrKTsKPiArCQlzcC0+dF9yZHByZSA9IERJVl9ST1VORF9V UCh0LT50X3JkcHJlICogc3AtPmRjbGssIGRjbGspOwo+ICsJCXNwLT50X3JhcyA9IERJVl9ST1VO RF9VUCh0LT50X3JhcyAqIHNwLT5kY2xrLCBkY2xrKTsKPiArCj4gKwkJc3AtPnRfcmNkID0gc3At PnRfcnA7Cj4gKwkJc3AtPnRfcmMgPSBzcC0+dF9ycCArIHNwLT50X3JhczsKPiArCj4gKwkJRFJN X0RFQlVHX0tNUygiU0FHViAlZCBEQ0xLPSVkIHRSUD0lZCB0UkRQUkU9JWQgdFJBUz0lZCB0UkNE PSVkIHRSQz0lZFxuIiwKPiArCQkJICAgICAgaSwgc3AtPmRjbGssIHNwLT50X3JwLCBzcC0+dF9y ZHByZSwgc3AtPnRfcmFzLAo+ICsJCQkgICAgICBzcC0+dF9yY2QsIHNwLT50X3JjKTsKPiArCX0K PiArfQo+ICsKPiArc3RhdGljIGludCBpY2xfY2FsY19idyhpbnQgZGNsaywgaW50IG51bSwgaW50 IGRlbikKPiArewo+ICsJLyogbXVsdGlwbGVzIG9mIDIgeCAxNi42NjZNSHogKDEwMC82KSAqLwo+ ICsJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKG51bSAqIGRjbGsgKiAyICogMTAwLCBkZW4gKiA2 KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpY2xfc2Fndl9tYXhfZGNsayhjb25zdCBzdHJ1Y3Qg aW50ZWxfc2Fndl9pbmZvICpzaSkKPiArewo+ICsJdTE2IGRjbGsgPSAwOwo+ICsJaW50IGk7Cj4g Kwo+ICsJZm9yIChpID0gMDsgaSA8IHNpLT5udW1fcG9pbnRzOyBpKyspCj4gKwkJZGNsayA9IG1h eChkY2xrLCBzaS0+cG9pbnRzW2ldLmRjbGspOwo+ICsKPiArCXJldHVybiBkY2xrOwo+ICt9Cj4g Kwo+ICtzdHJ1Y3QgaW50ZWxfc2FfaW5mbyB7Cj4gKwl1OCBkZWJ1cnN0LCBtcGFnZXNpemUsIGRl cHJvZ2J3bGltaXQsIGRpc3BsYXlydGlkczsKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgaW50ZWxfc2FfaW5mbyBpY2xfc2FfaW5mbyA9IHsKPiArCS5kZWJ1cnN0ID0gOCwKPiArCS5t cGFnZXNpemUgPSAxNiwKPiArCS5kZXByb2did2xpbWl0ID0gMjUsIC8qIEdCL3MgKi8KPiArCS5k aXNwbGF5cnRpZHMgPSAxMjgsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBpY2xfZ2V0X2J3X2lu Zm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwljb25zdCBzdHJ1 Y3QgZHJhbV9pbmZvICpkcmFtID0gJmRldl9wcml2LT5kcmFtX2luZm87Cj4gKwlzdHJ1Y3QgaW50 ZWxfc2Fndl9pbmZvIHNpID0ge307Cj4gKwlzdHJ1Y3QgaW50ZWxfZHJhbV90aW1pbmdzIHQgPSB7 fTsKPiArCWNvbnN0IHN0cnVjdCBpbnRlbF9zYV9pbmZvICpzYSA9ICZpY2xfc2FfaW5mbzsKPiAr CWJvb2wgaXNfeV90aWxlID0gdHJ1ZTsgLyogYXNzdW1lIHkgdGlsZSBtYXkgYmUgdXNlZCAqLwo+ ICsJaW50IG51bV9jaGFubmVscyA9IGh3ZWlnaHQ4KGRyYW0tPmNoYW5uZWxzKTsKPiArCWludCBk ZWludGVybGVhdmU7Cj4gKyNpZiAwCj4gKwlpbnQgY2xwY2hwYmxvY2s7Cj4gKwlpbnQgcGFnZWxp bWl0Owo+ICsjZW5kaWYKPiArCWludCBpcHFkZXB0aCwgaXBxZGVwdGhwY2g7Cj4gKwlpbnQgZGNs a19tYXg7Cj4gKwlpbnQgbWF4ZGVidzsKPiArCWludCBpOwo+ICsKPiArCS8qCj4gKwkgKiBUcnkg dG8gbXV6emxlIFNBR1YgdG8gcHJldmVudCBpdCBmcm9tCj4gKwkgKiBtZXNzaW5nIHVwIHRoZSBt ZW1vcnkgY29udHJvbGxlciByZWFkb3V0Lgo+ICsJICovCj4gKwlpbnRlbF9kaXNhYmxlX3NhZ3Yo ZGV2X3ByaXYpOwo+ICsKPiArCS8qCj4gKwkgKiBNYWdpYyBzbGVlcCB0byBhdm9pZCBvYnNlcnZp bmcgdmVyeSBoaWdoIEREUiBjbG9jay4KPiArCSAqIE5vdCBzdXJlIHdoYXQncyBnb2luZyBvbiBi dXQgb24gYSBzeXN0ZW0gd2l0aCBERFI0LTMyMDAKPiArCSAqIGNsb2NrIG9mIDQ4MDAgTVQvcyBp cyBvZnRlbiBvYnNlcnZlZCBoZXJlLiBBIHNob3J0Cj4gKwkgKiBzbGVlcCBtYW5hZ2VzIHRvIGhp ZGUgdGhhdC4uIElzIHRoYXQgYWN0dWFsbHkKPiArCSAqIHRoZSAibWluIGxhdGVuY3kiIFNBR1Yg cG9pbnQ/LiBNYXliZSB0aGUgU0EgY2xvY2tzCj4gKwkgKiB0aGluZ3Mgd2F5IHVwIHdoZW4gdGhl cmUgaXMgbm8gbWVtb3J5IHRyYWZmaWM/Cj4gKwkgKiBCdXQgcG9sbGluZyB0aGUgcmVnaXN0ZXIg bmV2ZXIgc2VlbXMgdG8gc2hvdyB0aGlzCj4gKwkgKiBleGNlcHQgZHVyaW5nIGk5MTUgdW5sb2Fk L2xvYWQuIFNsZWVwaW5nIGJlZm9yZSB0aGUKPiArCSAqIFNBR1YgZGlzYWJsZSB1c3VhbGx5IHJl dHVybnMgMjEzMyBNVC9zLgo+ICsJICoKPiArCSAqIEZJWE1FIHdoYXQgaXMgZ29pbmcgb24/Cj4g KwkgKi8KPiArCW1zbGVlcCg1KTsKPiArCj4gKwljbmxfZ2V0X2RyYW1fdGltaW5ncyhkZXZfcHJp diwgZHJhbSwgJnQpOwo+ICsKPiArCWljbF9nZXRfc2Fndl9wb2ludHMoZGV2X3ByaXYsICZzaSwg JnQpOwo+ICsKPiArCWRlaW50ZXJsZWF2ZSA9IERJVl9ST1VORF9VUChudW1fY2hhbm5lbHMsIGlz X3lfdGlsZSA/IDQgOiAyKTsKPiArCWRjbGtfbWF4ID0gaWNsX3NhZ3ZfbWF4X2RjbGsoJnNpKTsK PiArCj4gKwlpcHFkZXB0aHBjaCA9IDE2Owo+ICsKPiArCW1heGRlYncgPSBtaW4oc2EtPmRlcHJv Z2J3bGltaXQgKiAxMDAwLAo+ICsJCSAgICAgIGljbF9jYWxjX2J3KGRjbGtfbWF4LCAxNiwgMSkg KiA2IC8gMTApOyAvKiA2MCUgKi8KPiArI2lmIDAKPiArCWNscGNocGJsb2NrID0gZGVpbnRlcmxl YXZlICogOCAvIG51bV9jaGFubmVsczsKPiArCXBhZ2VsaW1pdCA9IHNhLT5tcGFnZXNpemUgKiBk ZWludGVybGVhdmUgKiAyIC8gbnVtX2NoYW5uZWxzOwo+ICsjZW5kaWYKPiArCWlwcWRlcHRoID0g bWluKGlwcWRlcHRocGNoLCBzYS0+ZGlzcGxheXJ0aWRzIC8gbnVtX2NoYW5uZWxzKTsKPiArCj4g KwlEUk1fREVCVUdfS01TKCJtYXhkZWJ3ID0gJWRcbiIsIG1heGRlYncpOwo+ICsJRFJNX0RFQlVH X0tNUygiaXBxZGVwdGggPSAlZFxuIiwgaXBxZGVwdGgpOwo+ICsJRFJNX0RFQlVHX0tNUygiZGVp bnRlcmxlYXZlID0gJWRcbiIsIGRlaW50ZXJsZWF2ZSk7Cj4gKwlEUk1fREVCVUdfS01TKCJkY2xr X21heCA9ICVkXG4iLCBkY2xrX21heCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoZGV2X3ByaXYtPm1heF9idyk7IGkrKykgewo+ICsJCXN0cnVjdCBpbnRlbF9id19pbmZvICpi aSA9ICZkZXZfcHJpdi0+bWF4X2J3W2ldOwo+ICsJCWludCBjbHBjaGdyb3VwOwo+ICsJCWludCBq Owo+ICsKPiArCQljbHBjaGdyb3VwID0gKHNhLT5kZWJ1cnN0ICogZGVpbnRlcmxlYXZlIC8gbnVt X2NoYW5uZWxzKSA8PCBpOwo+ICsJCWJpLT5udW1fcGxhbmVzID0gKGlwcWRlcHRoIC0gY2xwY2hn cm91cCkgLyBjbHBjaGdyb3VwICsgMTsKPiArCj4gKwkJRFJNX0RFQlVHX0tNUygiY2xwY2hncm91 cCA9ICVkXG4iLCBjbHBjaGdyb3VwKTsKPiArCQlEUk1fREVCVUdfS01TKCJudW1fcGxhbmVzID0g JWRcbiIsIGJpLT5udW1fcGxhbmVzKTsKPiArCj4gKwkJZm9yIChqID0gMDsgaiA8IHNpLm51bV9w b2ludHM7IGorKykgewo+ICsJCQljb25zdCBzdHJ1Y3QgaW50ZWxfc2Fndl9wb2ludCAqc3AgPSAm c2kucG9pbnRzW2pdOwo+ICsJCQlpbnQgY3QsIGJ3Owo+ICsKPiArCQkJLyoKPiArCQkJICogTWF4 IHJvdyBjeWNsZSB0aW1lCj4gKwkJCSAqCj4gKwkJCSAqIEZJWE1FIHdoYXQgaXMgdGhlIGxvZ2lj IGJlaGluZCB0aGUKPiArCQkJICogYXNzdW1lZCBidXJzdCBsZW5ndGg/Cj4gKwkJCSAqLwo+ICsJ CQljdCA9IG1heF90KGludCwgc3AtPnRfcmMsIHNwLT50X3JwICsgc3AtPnRfcmNkICsKPiArCQkJ CSAgIChjbHBjaGdyb3VwIC0gMSkgKiB0LnRfYmwgKyBzcC0+dF9yZHByZSk7Cj4gKwkJCWJ3ID0g aWNsX2NhbGNfYncoc3AtPmRjbGssIGNscGNoZ3JvdXAgKiAzMiAqIG51bV9jaGFubmVscywgY3Qp Owo+ICsKPiArCQkJRFJNX0RFQlVHX0tNUygiY3QgPSAlZFxuIiwgY3QpOwo+ICsJCQlEUk1fREVC VUdfS01TKCJidyA9ICVkXG4iLCBidyk7Cj4gKwo+ICsJCQliaS0+ZGVyYXRlZGJ3W2pdID0gbWlu KG1heGRlYncsCj4gKwkJCQkJICAgICAgIGJ3ICogOSAvIDEwKTsgLyogOTAlICovCj4gKwkJfQo+ ICsKPiArCQlpZiAoYmktPm51bV9wbGFuZXMgPT0gMSkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gK30K PiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWNsX21heF9idyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gKwkJCSAgICAgICBpbnQgbnVtX3BsYW5lcywgaW50IHNhZ3YpCj4g K3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldl9wcml2 LT5tYXhfYncpOyBpKyspIHsKPiArCQljb25zdCBzdHJ1Y3QgaW50ZWxfYndfaW5mbyAqYmkgPQo+ ICsJCQkmZGV2X3ByaXYtPm1heF9id1tpXTsKPiArCj4gKwkJaWYgKG51bV9wbGFuZXMgPj0gYmkt Pm51bV9wbGFuZXMpCj4gKwkJCXJldHVybiBiaS0+ZGVyYXRlZGJ3W3NhZ3ZdOwo+ICsJfQo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt1bnNpZ25lZCBpbnQgaW50ZWxfbWF4X2RhdGFfcmF0 ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJCQkgaW50IG51bV9wbGFu ZXMpCj4gK3sKPiArCWlmIChJU19JQ0VMQUtFKGRldl9wcml2KSkKPiArCQkvKgo+ICsJCSAqIEZJ WE1FIHdpdGggU0FHViBkaXNhYmxlZCBtYXliZSB3ZSBjYW4gYXNzdW1lCj4gKwkJICogcG9pbnQg MSB3aWxsIGFsd2F5cyBiZSB1c2VkPyBTZWVtcyB0byBtYXRjaAo+ICsJCSAqIHRoZSBiZWhhdmlv dXIgb2JzZXJ2ZWQgaW4gdGhlIHdpbGQuCj4gKwkJICovCj4gKwkJcmV0dXJuIG1pbjMoaWNsX21h eF9idyhkZXZfcHJpdiwgbnVtX3BsYW5lcywgMCksCj4gKwkJCSAgICBpY2xfbWF4X2J3KGRldl9w cml2LCBudW1fcGxhbmVzLCAxKSwKPiArCQkJICAgIGljbF9tYXhfYncoZGV2X3ByaXYsIG51bV9w bGFuZXMsIDIpKTsKPiArCWVsc2UKPiArCQlyZXR1cm4gVUlOVF9NQVg7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGljbF9kdW1wX21heF9idyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRl dl9wcml2LT5tYXhfYncpOyBpKyspIHsKPiArCQljb25zdCBzdHJ1Y3QgaW50ZWxfYndfaW5mbyAq YmkgPSAmZGV2X3ByaXYtPm1heF9id1tpXTsKPiArCQlpbnQgajsKPiArCj4gKwkJZm9yIChqID0g MDsgaiA8IEFSUkFZX1NJWkUoYmktPmRlcmF0ZWRidyk7IGorKykgewo+ICsJCQlEUk1fREVCVUdf S01TKCJCVyVkIFNBR1YlZDogbnVtX3BsYW5lcz0lZCBkZXJhdGVkYnc9JWRcbiIsCj4gKwkJCQkg ICAgICBpLCBqLCBiaS0+bnVtX3BsYW5lcywgYmktPmRlcmF0ZWRid1tqXSk7Cj4gKwkJfQo+ICsJ fQo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZAo+ICBpbnRlbF9nZXRfZHJhbV9pbmZvKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+IEBAIC0xNjI5LDYgKzE5NzEsMTAgQEAg c3RhdGljIGludCBpOTE1X2RyaXZlcl9pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAgCSAqLwo+ICAJaW50ZWxfZ2V0X2RyYW1faW5mbyhkZXZfcHJpdik7Cj4gIAo+ ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpIHsKPiArCQlpY2xfZ2V0X2J3X2luZm8o ZGV2X3ByaXYpOwo+ICsJCWljbF9kdW1wX21heF9idyhkZXZfcHJpdik7Cj4gKwl9Cj4gIAo+ICAJ cmV0dXJuIDA7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IGY2MzhjMGM3NDk1 NS4uODI1YmVhMzE3NmZjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTU0LDYg KzU0LDcgQEAKPiAgI2luY2x1ZGUgPGRybS9kcm1fY2FjaGUuaD4KPiAgI2luY2x1ZGUgPGRybS9k cm1fdXRpbC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9kc2MuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5oPgo+ICAjaW5jbHVk ZSA8ZHJtL2k5MTVfbWVpX2hkY3BfaW50ZXJmYWNlLmg+Cj4gIAo+IEBAIC0xODQ1LDYgKzE4NDYs MTMgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+ICAJCX0gdHlwZTsKPiAgCX0gZHJhbV9p bmZvOwo+ICAKPiArCXN0cnVjdCBpbnRlbF9id19pbmZvIHsKPiArCQlpbnQgbnVtX3BsYW5lczsK PiArCQlpbnQgZGVyYXRlZGJ3WzNdOwo+ICsJfSBtYXhfYndbNl07Cj4gKwo+ICsJc3RydWN0IGRy bV9wcml2YXRlX29iaiBid19vYmo7Cj4gKwo+ICAJc3RydWN0IGk5MTVfcnVudGltZV9wbSBydW50 aW1lX3BtOwo+ICAKPiAgCXN0cnVjdCB7Cj4gQEAgLTI2MzQsNiArMjY0Miw4IEBAIGV4dGVybiB1 bnNpZ25lZCBsb25nIGk5MTVfbWNoX3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpOwo+ICBleHRlcm4gdW5zaWduZWQgbG9uZyBpOTE1X2dmeF92YWwoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgZXh0ZXJuIHZvaWQgaTkxNV91cGRhdGVfZ2Z4X3ZhbChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICBpbnQgdmx2X2ZvcmNlX2dmeF9j bG9jayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGJvb2wgb24pOwo+ICt1bnNp Z25lZCBpbnQgaW50ZWxfbWF4X2RhdGFfcmF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gKwkJCQkgaW50IG51bV9wbGFuZXMpOwo+ICAKPiAgaW50IGludGVsX2VuZ2luZXNf aW5pdF9tbWlvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIGludCBpbnRl bF9lbmdpbmVzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYwo+IGluZGV4IDlkMzJhNmZjZjg0 MC4uZGU2YjIzZWU2MzA2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2F0b21pY19wbGFuZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWlj X3BsYW5lLmMKPiBAQCAtMTExLDYgKzExMSwyMiBAQCBpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRl KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVz dHJveV9zdGF0ZShwbGFuZSwgc3RhdGUpOwo+ICB9Cj4gIAo+ICt1bnNpZ25lZCBpbnQgaW50ZWxf cGxhbmVfZGF0YV9yYXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl LAo+ICsJCQkJICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkK PiArewo+ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+ YmFzZS5mYjsKPiArCXVuc2lnbmVkIGludCBjcHAgPSAwOwo+ICsJaW50IGk7Cj4gKwo+ICsJaWYg KCFwbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWZvciAo aSA9IDA7IGkgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBpKyspCj4gKwkJY3BwICs9IGZiLT5m b3JtYXQtPmNwcFtpXTsKPiArCj4gKwlyZXR1cm4gY3BwICogY3J0Y19zdGF0ZS0+cGl4ZWxfcmF0 ZTsKClRoaXMgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCBwbGFuZSB3aWR0aC9oZWlnaHQ/IFN1 cmVseSB0aGF0IGFmZmVjdHMgYmFuZHdpZHRoIGFzIHdlbGw/CgpUaGlzIGJyZWFrcyBrbXNfYXRv bWljX3RyYW5zaXRpb24sIHdoaWNoIHRyaWVzIHRvIGRlY3JlYXNlIHBsYW5lIHNpemUgdG8gcmVk dWNlIGxvYWQgd2hlbiBtYXggcGxhbmUgd2lkdGgvaGVpZ2h0IGlzIG5vdCBzdXBwb3J0ZWQuCgpB Y2NvcmRpbmcgdG8gdGhpcyBjYWxjdWxhdGlvbiwgNiAyNTZ4MjU2IG92ZXJsYXkgcGxhbmVzIHdp bGwgdGFrZSB0aGUgc2FtZSBiYW5kd2lkdGggYXMgNiBwbGFuZXMgZmlsbGVkIHdpdGggNGsgZmIn cwoKfk1hYXJ0ZW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eA==