From mboxrd@z Thu Jan 1 00:00:00 1970 From: Imre Deak Subject: Re: [PATCH v2 21/23] drm/i915: Add state verification for the TypeC port mode Date: Tue, 25 Jun 2019 22:23:51 +0300 Message-ID: <20190625192351.GC5455@ideak-desk.fi.intel.com> References: <20190620140600.11357-1-imre.deak@intel.com> <20190620140600.11357-22-imre.deak@intel.com> <20190625141252.GJ5942@intel.com> Reply-To: imre.deak@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 ESMTPS id 1ADDE6E179 for ; Tue, 25 Jun 2019 19:23:58 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190625141252.GJ5942@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBKdW4gMjUsIDIwMTkgYXQgMDU6MTI6NTJQTSArMDMwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFRodSwgSnVuIDIwLCAyMDE5IGF0IDA1OjA1OjU4UE0gKzAzMDAsIEltcmUg RGVhayB3cm90ZToKPiA+IEFkZCBzdGF0ZSB2ZXJpZmljYXRpb24gZm9yIHRoZSBUeXBlQyBwb3J0 IG1vZGUgd3J0LiB0aGUgcG9ydCdzIEFVWCBwb3dlcgo+ID4gd2VsbCBlbmFibGluZy9kaXNhYmxp bmcuIEFsc28gY2hlY2sgdGhlIGNvcnJlY3RuZXNzIG9mIGNoYW5naW5nIHRoZSBwb3J0Cj4gPiBt b2RlOgo+ID4gLSBXaGVuIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgQVVYIHBvd2VyIHdlbGwgZm9y IGEgVHlwZUMgcG9ydCB3ZSBtdXN0IGhvbGQKPiA+ICAgYWxyZWFkeSB0aGUgVHlwZUMgcG9ydCBs b2NrLgo+ID4gLSBXaGVuIGNoYW5naW5nIHRoZSBUeXBlQyBwb3J0IG1vZGUgdGhlIHBvcnQncyBB VVggcG93ZXIgZG9tYWluIG11c3QgYmUKPiA+ICAgZGlzYWJsZWQuCj4gPiAKPiA+IENjOiBKb3PD qSBSb2JlcnRvIGRlIFNvdXphIDxqb3NlLnNvdXphQGludGVsLmNvbT4KPiA+IENjOiBSb2RyaWdv IFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBJbXJlIERl YWsgPGltcmUuZGVha0BpbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICAuLi4vZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMgICAgfCA5OSArKysrKysrKysrKysrKysrKy0tCj4gPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF90Yy5jICAgICAgIHwgIDIgKwo+ID4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfdGMuaCAgICAgICB8IDEwICstCj4g PiAgMyBmaWxlcyBjaGFuZ2VkLCAxMDIgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKPiA+ IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlz cGxheV9wb3dlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 X3Bvd2VyLmMKPiA+IGluZGV4IGZkMTNjZDY4ZGVhZS4uZjQ2MTNlMTBjM2IzIDEwMDY0NAo+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMK PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dl ci5jCj4gPiBAQCAtMTcsNiArMTcsNyBAQAo+ID4gICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiA+ ICAjaW5jbHVkZSAiaW50ZWxfaG90cGx1Zy5oIgo+ID4gICNpbmNsdWRlICJpbnRlbF9zaWRlYmFu ZC5oIgo+ID4gKyNpbmNsdWRlICJpbnRlbF90Yy5oIgo+ID4gIAo+ID4gIGJvb2wgaW50ZWxfZGlz cGxheV9wb3dlcl93ZWxsX2lzX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ID4gIAkJCQkJIGVudW0gaTkxNV9wb3dlcl93ZWxsX2lkIHBvd2VyX3dlbGxfaWQpOwo+ ID4gQEAgLTQ0NywyNiArNDQ4LDExMCBAQCBpY2xfY29tYm9fcGh5X2F1eF9wb3dlcl93ZWxsX2Rp c2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gICNkZWZpbmUgSUNM X1RCVF9BVVhfUFdfVE9fQ0gocHdfaWR4KQlcCj4gPiAgCSgocHdfaWR4KSAtIElDTF9QV19DVExf SURYX0FVWF9UQlQxICsgQVVYX0NIX0MpCj4gPiAgCj4gPiArc3RhdGljIGVudW0gYXV4X2NoIGlj bF90Y19waHlfYXV4X2NoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICsJ CQkJICAgICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQo+ID4gK3sKPiA+ICsJ aW50IHB3X2lkeCA9IHBvd2VyX3dlbGwtPmRlc2MtPmhzdy5pZHg7Cj4gPiArCj4gPiArCXJldHVy biBwb3dlcl93ZWxsLT5kZXNjLT5oc3cuaXNfdGNfdGJ0ID8gSUNMX1RCVF9BVVhfUFdfVE9fQ0go cHdfaWR4KSA6Cj4gPiArCQkJCQkJIElDTF9BVVhfUFdfVE9fQ0gocHdfaWR4KTsKPiA+ICt9Cj4g PiArCj4gPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X0RFQlVHX1JVTlRJTUVfUE0p Cj4gPiArCj4gPiArc3RhdGljIHU2NCBhc3luY19wdXRfZG9tYWluc19tYXNrKHN0cnVjdCBpOTE1 X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMpOwo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgcG93 ZXJfd2VsbF9hc3luY19yZWZfY291bnQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+ID4gKwkJCQkgICAgICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQo+ID4g K3sKPiA+ICsJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW47Cj4gPiArCXU2 NCBhc3luY19kb21haW5zID0gYXN5bmNfcHV0X2RvbWFpbnNfbWFzaygmZGV2X3ByaXYtPnBvd2Vy X2RvbWFpbnMpOwo+ID4gKwlpbnQgcmVmcyA9IDA7Cj4gPiArCj4gPiArCWZvcl9lYWNoX3Bvd2Vy X2RvbWFpbihkb21haW4sIHBvd2VyX3dlbGwtPmRlc2MtPmRvbWFpbnMpCj4gPiArCQlyZWZzICs9 ICEhKGFzeW5jX2RvbWFpbnMgJiBCSVRfVUxMKGRvbWFpbikpOwo+ID4gKwo+ID4gKwlXQVJOX09O KHJlZnMgPiBwb3dlcl93ZWxsLT5jb3VudCk7Cj4gCj4gaHdlaWdodDY0KCkgbm90IHN1ZmZpY2ll bnQgaGVyZT8KCkFoLCBqdXN0IHJldHVybiBod2VpZ2h0NjQocG93ZXJfd2VsbC0+ZGVzYy0+ZG9t YWlucyAmIGFzeW5jX2RvbWFpbnMpPwpZZXAsIHRoYXQgd291bGQgd29yaywgZGlkbid0IG9jY3Vy IHRvIG1lLi4KCj4gCj4gPiArCj4gPiArCXJldHVybiByZWZzOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgdm9pZCBpY2xfdGNfcG9ydF9hc3NlcnRfcmVmX2hlbGQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ID4gKwkJCQkJc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJf d2VsbCkKPiA+ICt7Cj4gPiArCWVudW0gYXV4X2NoIGF1eF9jaCA9IGljbF90Y19waHlfYXV4X2No KGRldl9wcml2LCBwb3dlcl93ZWxsKTsKPiA+ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAq ZGlnX3BvcnQgPSBOVUxMOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiA+ ICsKPiA+ICsJLyogQnlwYXNzIHRoZSBjaGVjayBpZiBhbGwgcmVmZXJlbmNlcyBhcmUgcmVsZWFz ZWQgYXN5bmNocm9ub3VzbHkgKi8KPiA+ICsJaWYgKHBvd2VyX3dlbGxfYXN5bmNfcmVmX2NvdW50 KGRldl9wcml2LCBwb3dlcl93ZWxsKSA9PQo+ID4gKwkgICAgcG93ZXJfd2VsbC0+Y291bnQpCj4g PiArCQlyZXR1cm47Cj4gPiArCj4gPiArCWF1eF9jaCA9IGljbF90Y19waHlfYXV4X2NoKGRldl9w cml2LCBwb3dlcl93ZWxsKTsKPiA+ICsKPiA+ICsJZm9yX2VhY2hfaW50ZWxfZW5jb2RlcigmZGV2 X3ByaXYtPmRybSwgZW5jb2Rlcikgewo+ID4gKwkJaWYgKCFpbnRlbF9wb3J0X2lzX3RjKGRldl9w cml2LCBlbmNvZGVyLT5wb3J0KSkKPiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCS8qIFdl J2xsIGNoZWNrIHRoZSBNU1QgcHJpbWFyeSBwb3J0ICovCj4gPiArCQlpZiAoZW5jb2Rlci0+dHlw ZSA9PSBJTlRFTF9PVVRQVVRfRFBfTVNUKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJ ZGlnX3BvcnQgPSBlbmNfdG9fZGlnX3BvcnQoJmVuY29kZXItPmJhc2UpOwo+ID4gKwkJaWYgKFdB Uk5fT04oIWRpZ19wb3J0KSkKPiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCWlmIChkaWdf cG9ydC0+YXV4X2NoICE9IGF1eF9jaCkgewo+ID4gKwkJCWRpZ19wb3J0ID0gTlVMTDsKPiA+ICsJ CQljb250aW51ZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCj4g PiArCWlmIChXQVJOX09OKCFkaWdfcG9ydCkpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCVdB Uk5fT04oIWludGVsX3RjX3BvcnRfcmVmX2hlbGQoZGlnX3BvcnQpKTsKPiA+ICt9Cj4gPiArCj4g PiArI2Vsc2UKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBpY2xfdGNfcG9ydF9hc3NlcnRfcmVmX2hl bGQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJCQkJc3RydWN0IGk5 MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiA+ICt7Cj4gPiArfQo+ID4gKwo+ID4gKyNlbmRp Zgo+ID4gKwo+ID4gIHN0YXRpYyB2b2lkCj4gPiAgaWNsX3RjX3BoeV9hdXhfcG93ZXJfd2VsbF9l bmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gIAkJCQkgc3RydWN0 IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiA+ICB7Cj4gPiAtCWludCBwd19pZHggPSBw b3dlcl93ZWxsLT5kZXNjLT5oc3cuaWR4Owo+ID4gLQlib29sIGlzX3RidCA9IHBvd2VyX3dlbGwt PmRlc2MtPmhzdy5pc190Y190YnQ7Cj4gPiAtCWVudW0gYXV4X2NoIGF1eF9jaDsKPiA+ICsJZW51 bSBhdXhfY2ggYXV4X2NoID0gaWNsX3RjX3BoeV9hdXhfY2goZGV2X3ByaXYsIHBvd2VyX3dlbGwp Owo+ID4gIAl1MzIgdmFsOwo+ID4gIAo+ID4gLQlhdXhfY2ggPSBpc190YnQgPyBJQ0xfVEJUX0FV WF9QV19UT19DSChwd19pZHgpIDoKPiA+IC0JCQkgIElDTF9BVVhfUFdfVE9fQ0gocHdfaWR4KTsK PiA+ICsJaWNsX3RjX3BvcnRfYXNzZXJ0X3JlZl9oZWxkKGRldl9wcml2LCBwb3dlcl93ZWxsKTsK PiA+ICsKPiA+ICAJdmFsID0gSTkxNV9SRUFEKERQX0FVWF9DSF9DVEwoYXV4X2NoKSk7Cj4gPiAg CXZhbCAmPSB+RFBfQVVYX0NIX0NUTF9UQlRfSU87Cj4gPiAtCWlmIChpc190YnQpCj4gPiArCWlm IChwb3dlcl93ZWxsLT5kZXNjLT5oc3cuaXNfdGNfdGJ0KQo+ID4gIAkJdmFsIHw9IERQX0FVWF9D SF9DVExfVEJUX0lPOwo+ID4gIAlJOTE1X1dSSVRFKERQX0FVWF9DSF9DVEwoYXV4X2NoKSwgdmFs KTsKPiA+ICAKPiA+ICAJaHN3X3Bvd2VyX3dlbGxfZW5hYmxlKGRldl9wcml2LCBwb3dlcl93ZWxs KTsKPiA+ICB9Cj4gPiAgCj4gPiArc3RhdGljIHZvaWQKPiA+ICtpY2xfdGNfcGh5X2F1eF9wb3dl cl93ZWxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJ CQkgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4gPiArewo+ID4gKwlpY2xf dGNfcG9ydF9hc3NlcnRfcmVmX2hlbGQoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwo+ID4gKwo+ID4g Kwloc3dfcG93ZXJfd2VsbF9kaXNhYmxlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsKPiA+ICt9Cj4g PiArCj4gPiAgLyoKPiA+ICAgKiBXZSBzaG91bGQgb25seSB1c2UgdGhlIHBvd2VyIHdlbGwgaWYg d2UgZXhwbGljaXRseSBhc2tlZCB0aGUgaGFyZHdhcmUgdG8KPiA+ICAgKiBlbmFibGUgaXQsIHNv IGNoZWNrIGlmIGl0J3MgZW5hYmxlZCBhbmQgYWxzbyBjaGVjayBpZiB3ZSd2ZSByZXF1ZXN0ZWQg aXQgdG8KPiA+IEBAIC0zMTE5LDcgKzMyMDQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVf cG93ZXJfd2VsbF9vcHMgaWNsX2NvbWJvX3BoeV9hdXhfcG93ZXJfd2VsbF9vcHMgPSB7Cj4gPiAg c3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfb3BzIGljbF90Y19waHlfYXV4X3Bv d2VyX3dlbGxfb3BzID0gewo+ID4gIAkuc3luY19odyA9IGhzd19wb3dlcl93ZWxsX3N5bmNfaHcs Cj4gPiAgCS5lbmFibGUgPSBpY2xfdGNfcGh5X2F1eF9wb3dlcl93ZWxsX2VuYWJsZSwKPiA+IC0J LmRpc2FibGUgPSBoc3dfcG93ZXJfd2VsbF9kaXNhYmxlLAo+ID4gKwkuZGlzYWJsZSA9IGljbF90 Y19waHlfYXV4X3Bvd2VyX3dlbGxfZGlzYWJsZSwKPiA+ICAJLmlzX2VuYWJsZWQgPSBoc3dfcG93 ZXJfd2VsbF9lbmFibGVkLAo+ID4gIH07Cj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF90Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF90Yy5jCj4gPiBpbmRleCBjODkwNDkxMWU4NDEuLjZjNDNiZWNmOTdmNyAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfdGMuYwo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF90Yy5jCj4gPiBAQCAtMzAz LDYgKzMwMyw4IEBAIHN0YXRpYyB2b2lkIGludGVsX3RjX3BvcnRfcmVzZXRfbW9kZShzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCwKPiA+ICAJZW51bSB0Y19wb3J0X21vZGUgb2xk X3RjX21vZGUgPSBkaWdfcG9ydC0+dGNfbW9kZTsKPiA+ICAKPiA+ICAJaW50ZWxfZGlzcGxheV9w b3dlcl9mbHVzaF93b3JrKGRldl9wcml2KTsKPiA+ICsJV0FSTl9PTihpbnRlbF9kaXNwbGF5X3Bv d2VyX2lzX2VuYWJsZWQoZGV2X3ByaXYsCj4gPiArCQkJCQkgICAgICAgaW50ZWxfYXV4X3Bvd2Vy X2RvbWFpbihkaWdfcG9ydCkpKTsKPiA+ICAKPiA+ICAJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGRp Z19wb3J0KTsKPiA+ICAJaWNsX3RjX3BoeV9jb25uZWN0KGRpZ19wb3J0LCByZXF1aXJlZF9sYW5l cyk7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF90 Yy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF90Yy5oCj4gPiBpbmRleCAz MWFmN2JlOTYwNzAuLjhhZGMxMDdjZGJjYiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfdGMuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF90Yy5oCj4gPiBAQCAtNyw4ICs3LDggQEAKPiA+ICAjZGVmaW5lIF9fSU5U RUxfVENfSF9fCj4gPiAgCj4gPiAgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gPiAtCj4gPiAt c3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydDsKPiA+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4K PiA+ICsjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gPiAgCj4gPiAgdm9pZCBpY2xfdGNfcGh5X2Rp c2Nvbm5lY3Qoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpOwo+ID4gIAo+ID4g QEAgLTIzLDYgKzIzLDEyIEBAIHZvaWQgaW50ZWxfdGNfcG9ydF9nZXRfbGluayhzdHJ1Y3QgaW50 ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCwKPiA+ICAJCQkgICAgaW50IHJlcXVpcmVkX2xhbmVz KTsKPiA+ICB2b2lkIGludGVsX3RjX3BvcnRfcHV0X2xpbmsoc3RydWN0IGludGVsX2RpZ2l0YWxf cG9ydCAqZGlnX3BvcnQpOwo+ID4gIAo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IGludGVsX3RjX3Bv cnRfcmVmX2hlbGQoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpCj4gPiArewo+ ID4gKwlyZXR1cm4gbXV0ZXhfaXNfbG9ja2VkKCZkaWdfcG9ydC0+dGNfbG9jaykgfHwKPiA+ICsJ ICAgICAgIGRpZ19wb3J0LT50Y19saW5rX3JlZmNvdW50Owo+IAo+IFRoaXMgd2lsbCBhbGxvdyB0 Y19sb2NrIHRvIG5vdCBiZSBoZWxkIGlmIHRoZSByZWZjb3VudCBpcyBlbGV2YXRlZC4gV2FzCj4g dGhhdCB0aGUgaW50ZW50aW9uPyBUaGUgY29tbWl0IG1lc3NhZ2Ugc2F5cyB0aGUgbG9jayBzaG91 bGQgYWx3YXlzIGJlCj4gaGVsZC4KClJpZ2h0LCB0aGUgY29tbWl0IG1lc3NhZ2UgaXMgbm90IHBy ZWNpc2UsIGl0IHNob3VsZCBiZToKCi0gV2hlbiBlbmFibGluZy9kaXNhYmxpbmcgdGhlIEFVWCBw b3dlciB3ZWxsIGZvciBhIFR5cGVDIHBvcnQgd2UgbXVzdCBob2xkCiAgdGhlIFR5cGVDIHBvcnQg bG9jayAtIHRoZSBjYXNlIGZvciBBVVggdHJhbnNmZXJzIC0gb3IgaG9sZCBhIFR5cGUgQwogIHBv cnQgbGluayByZWZlcmVuY2UgLSB0aGUgY2FzZSBmb3IgbW9kZXNldCBlbmFibGluZy9kaXNhYmxp bmcuCgpEb2VzIHRoYXQgbWFrZSBzZW5zZT8KCj4gCj4gU2hvdWxkIHdlIGRvIGEgbG9ja2RlcCBh c3NlcnQgaGVyZSBpZiBsb2NrZGVwIGlzIGVuYWJsZWQ/CgpJZiB0aGUgYWJvdmUgY3JpdGVyaWEg Zm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgcG93ZXIgd2VsbHMgc291bmRzIG9rLCB0aGVuCm11 dGV4X2lzX2xvY2tlZCh0Y19sb2NrKSB8fCB0Y19saW5rX3JlZmNvdW50IHdvdWxkIGJlIGVub3Vn aC4KCj4gCj4gPiArfQo+ID4gKwo+ID4gIHZvaWQgaW50ZWxfdGNfcG9ydF9pbml0KHN0cnVjdCBp bnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0LCBib29sIGlzX2xlZ2FjeSk7Cj4gPiAgCj4gPiAg I2VuZGlmIC8qIF9fSU5URUxfVENfSF9fICovCj4gPiAtLSAKPiA+IDIuMTcuMQo+ID4gCj4gPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdAo+ID4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK PiAKPiAtLSAKPiBWaWxsZSBTeXJqw6Rsw6QKPiBJbnRlbApfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZng=