From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 1/3] drm: Add support for panic message output Date: Mon, 11 Mar 2019 20:29:52 +0100 Message-ID: <20190311192952.GS2665@phenom.ffwll.local> References: <20190311174218.51899-1-noralf@tronnes.org> <20190311174218.51899-2-noralf@tronnes.org> <20190311192338.GR2665@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190311192338.GR2665@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: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, darwish.07@gmail.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBNYXIgMTEsIDIwMTkgYXQgMDg6MjM6MzhQTSArMDEwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBNb24sIE1hciAxMSwgMjAxOSBhdCAwNjo0MjoxNlBNICswMTAwLCBOb3JhbGYg VHLDuG5uZXMgd3JvdGU6Cj4gPiBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igb3V0cHV0dGluZyBrZXJu ZWwgbWVzc2FnZXMgb24gcGFuaWMoKS4KPiA+IEEga2VybmVsIG1lc3NhZ2UgZHVtcGVyIGlzIHVz ZWQgdG8gZHVtcCB0aGUgbG9nLiBUaGUgZHVtcGVyIGl0ZXJhdGVzCj4gPiBvdmVyIGVhY2ggRFJN IGRldmljZSBhbmQgaXQncyBjcnRjJ3MgdG8gZmluZCBzdWl0YWJsZSBmcmFtZWJ1ZmZlcnMuCj4g PiAKPiA+IEFsbCB0aGUgb3RoZXIgZHVtcGVycyBhcmUgcnVuIGJlZm9yZSB0aGlzIG9uZSBleGNl cHQgbXRkb29wcy4KPiA+IE9ubHkgYXRvbWljIGRyaXZlcnMgYXJlIHN1cHBvcnRlZC4KPiA+IAo+ ID4gU2lnbmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+Cj4g Cj4gQnVuY2ggb2YgY29tbWVudHMvaWRlYXMgZm9yIHlvdSBvciBEYXJ3aXNoIGJlbG93LCB3aG9l dmVyIHBpY2tzIHRoaXMgdXAuCj4gLURhbmllbAo+IAo+ID4gLS0tCj4gPiAgZHJpdmVycy9ncHUv ZHJtL0tjb25maWcgICAgICAgICAgIHwgICAzICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2Ry di5jICAgICAgICAgfCAgIDMgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZmZXIu YyB8IDExNyArKysrKysrKysrCj4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oICAg IHwgICA0ICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmljLmMgICAgICAgfCAzNjMgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgaW5jbHVkZS9kcm0vZHJtX2ZyYW1lYnVm ZmVyLmggICAgIHwgIDQxICsrKysKPiA+ICA2IGZpbGVzIGNoYW5nZWQsIDUzMSBpbnNlcnRpb25z KCspCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fcGFuaWMuYwo+ ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dw dS9kcm0vS2NvbmZpZwo+ID4gaW5kZXggYmQ5NDNhNzE3NTZjLi43NGMzNzU0MmY4NTcgMTAwNjQ0 Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL0tjb25maWcKPiA+IEBAIC0xNCw2ICsxNCw5IEBAIG1lbnVjb25maWcgRFJNCj4gPiAgCXNl bGVjdCBJMkNfQUxHT0JJVAo+ID4gIAlzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVIKPiA+ICAJc2Vs ZWN0IFNZTkNfRklMRQo+ID4gKwlzZWxlY3QgRk9OVF9TVVBQT1JUCj4gPiArCXNlbGVjdCBGT05U Xzh4OAo+ID4gKwlzZWxlY3QgRk9OVF84eDE2Cj4gPiAgCWhlbHAKPiA+ICAJICBLZXJuZWwtbGV2 ZWwgc3VwcG9ydCBmb3IgdGhlIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkK PiA+ICAJICBpbnRyb2R1Y2VkIGluIFhGcmVlODYgNC4wLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91 IG5lZWQgdG8gc2VsZWN0Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiA+IGluZGV4IDUwZDg0OWQxYmM2ZS4uYjBi ODcwYjVkZDU1IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwo+ID4gQEAgLTExNDcsNiArMTE0Nyw3IEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRybV9zdHViX2ZvcHMgPSB7Cj4g PiAgCj4gPiAgc3RhdGljIHZvaWQgZHJtX2NvcmVfZXhpdCh2b2lkKQo+ID4gIHsKPiA+ICsJZHJt X3BhbmljX2V4aXQoZHJtX2RlYnVnZnNfcm9vdCk7Cj4gPiAgCXVucmVnaXN0ZXJfY2hyZGV2KERS TV9NQUpPUiwgImRybSIpOwo+ID4gIAlkZWJ1Z2ZzX3JlbW92ZShkcm1fZGVidWdmc19yb290KTsK PiA+ICAJZHJtX3N5c2ZzX2Rlc3Ryb3koKTsKPiA+IEBAIC0xMTc4LDYgKzExNzksOCBAQCBzdGF0 aWMgaW50IF9faW5pdCBkcm1fY29yZV9pbml0KHZvaWQpCj4gPiAgCWlmIChyZXQgPCAwKQo+ID4g IAkJZ290byBlcnJvcjsKPiA+ICAKPiA+ICsJZHJtX3BhbmljX2luaXQoZHJtX2RlYnVnZnNfcm9v dCk7Cj4gPiArCj4gPiAgCWRybV9jb3JlX2luaXRfY29tcGxldGUgPSB0cnVlOwo+ID4gIAo+ID4g IAlEUk1fREVCVUcoIkluaXRpYWxpemVkXG4iKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVy LmMKPiA+IGluZGV4IGQ4ZDc1ZTI1ZjZmYi4uZGEyMjg1YzVhZTkwIDEwMDY0NAo+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2ZyYW1lYnVmZmVyLmMKPiA+IEBAIC0xMDg3LDMgKzEwODcsMTIwIEBAIGludCBkcm1f ZnJhbWVidWZmZXJfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQo+ID4gIAkJ CQltaW5vci0+ZGVidWdmc19yb290LCBtaW5vcik7Cj4gPiAgfQo+ID4gICNlbmRpZgo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIGRybV9mcmFtZWJ1ZmZlcl9wYW5pY19kcmF3X3h5IC0gZHJhdyBwaXhl bCBvbiBmYiBkdXJpbmcgcGFuaWMoKQo+ID4gKyAqIEBmYjogRFJNIGZyYW1lYnVmZmVyCj4gPiAr ICogQHZtYXA6IExpbmVhciB2aXJ0dWFsIG1hcHBpbmcKPiA+ICsgKiBAeDogWCBjb29yZGluYXRl Cj4gPiArICogQHk6IFkgY29vcmRpbmF0ZQo+ID4gKyAqIEBmb3JlZ3JvdW5kOiBGb3JlZ3JvdW5k IHBpeGVsCj4gPiArICoKPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRyYXcg YSBwaXhlbCBkdXJpbmcgcGFuaWMgbWVzc2FnZSByZW5kZXJpbmcuCj4gPiArICogSXQgcmVxdWly ZXMgQHZtYXAgdG8gYmUgYSBsaW5lYXIgbWFwcGluZy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBs ZW1lbnRhdGlvbgo+ID4gKyAqIHVzZWQgaWYgJmRybV9mcmFtZWJ1ZmZlcl9mdW5jcy0+cGFuaWNf ZHJhd194eSBpcyBub3Qgc2V0Lgo+ID4gKyAqLwo+ID4gK3ZvaWQgZHJtX2ZyYW1lYnVmZmVyX3Bh bmljX2RyYXdfeHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHZvaWQgKnZtYXAsCj4gPiAr CQkJCSAgIGludCB4LCBpbnQgeSwgYm9vbCBmb3JlZ3JvdW5kKQo+ID4gK3sKPiA+ICsJdm9pZCAq cGl4ID0gdm1hcCArIGZiLT5vZmZzZXRzWzBdICsgKHkgKiBmYi0+cGl0Y2hlc1swXSk7Cj4gPiAr CXU4ICpwaXg4ID0gcGl4Owo+ID4gKwl1MTYgKnBpeDE2ID0gcGl4Owo+ID4gKwl1MzIgKnBpeDMy ID0gcGl4Owo+ID4gKwo+ID4gKwlzd2l0Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCAmIH5EUk1fRk9S TUFUX0JJR19FTkRJQU4pIHsKPiA+ICsJY2FzZSBEUk1fRk9STUFUX0M4Ogo+ID4gKwo+ID4gKwlj YXNlIERSTV9GT1JNQVRfUkdCMzMyOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfQkdSMjMzOgo+ID4g Kwo+ID4gKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKPiA+ICsJY2FzZSBEUk1fRk9STUFUX05WMjE6 Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjE2Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfTlY2MToK PiA+ICsJY2FzZSBEUk1fRk9STUFUX05WMjQ6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjQyOgo+ ID4gKwo+ID4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDEwOgo+ID4gKwljYXNlIERSTV9GT1JNQVRf WVZVNDEwOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDExOgo+ID4gKwljYXNlIERSTV9GT1JN QVRfWVZVNDExOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDIwOgo+ID4gKwljYXNlIERSTV9G T1JNQVRfWVZVNDIwOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgo+ID4gKwljYXNlIERS TV9GT1JNQVRfWVZVNDIyOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDQ0Ogo+ID4gKwljYXNl IERSTV9GT1JNQVRfWVZVNDQ0Ogo+ID4gKwkJcGl4OFt4XSA9IGZvcmVncm91bmQgPyAweGZmIDog MHgwMDsKPiA+ICsJCWJyZWFrOwo+ID4gKwo+ID4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjQ0NDQ6 Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCNDQ0NDoKPiA+ICsJY2FzZSBEUk1fRk9STUFUX1hC R1I0NDQ0Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfQUJHUjQ0NDQ6Cj4gPiArCQlwaXgxNlt4XSA9 IGZvcmVncm91bmQgPyAweGZmZmYgOiAweGYwMDA7Cj4gPiArCQlicmVhazsKPiA+ICsKPiA+ICsJ Y2FzZSBEUk1fRk9STUFUX1JHQlg0NDQ0Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTQ0NDQ6 Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JYNDQ0NDoKPiA+ICsJY2FzZSBEUk1fRk9STUFUX0JH UkE0NDQ0Ogo+ID4gKwkJcGl4MTZbeF0gPSBmb3JlZ3JvdW5kID8gMHhmZmZmIDogMHgwMDBmOwo+ ID4gKwkJYnJlYWs7Cj4gPiArCj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKPiA+ICsJ Y2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjE1NTU6 Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTU1NToKPiA+ICsJCXBpeDE2W3hdID0gZm9yZWdy b3VuZCA/IDB4ZmZmZiA6IDB4ODAwMDsKPiA+ICsJCWJyZWFrOwo+ID4gKwo+ID4gKwljYXNlIERS TV9GT1JNQVRfUkdCWDU1NTE6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JBNTU1MToKPiA+ICsJ Y2FzZSBEUk1fRk9STUFUX0JHUlg1NTUxOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfQkdSQTU1NTE6 Cj4gPiArCQlwaXgxNlt4XSA9IGZvcmVncm91bmQgPyAweGZmZmYgOiAweDAwMDE7Cj4gPiArCQli cmVhazsKPiA+ICsKPiA+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiA+ICsJY2FzZSBEUk1f Rk9STUFUX0JHUjU2NToKPiA+ICsJCXBpeDE2W3hdID0gZm9yZWdyb3VuZCA/IDB4ZmZmZiA6IDB4 MDAwMDsKPiA+ICsJCWJyZWFrOwo+ID4gKwo+ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+ ID4gKwljYXNlIERSTV9GT1JNQVRfQkdSODg4Ogo+ID4gKwkJcGl4OFt4ICogM10gPSBmb3JlZ3Jv dW5kID8gMHhmZiA6IDB4MDA7Cj4gPiArCQlwaXg4Wyh4ICogMykgKyAxXSA9IHBpeDhbeF07Cj4g PiArCQlwaXg4Wyh4ICogMykgKyAyXSA9IHBpeDhbeF07Cj4gPiArCQlicmVhazsKPiA+ICsKPiA+ ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4 ODg6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKPiA+ICsJY2FzZSBEUk1fRk9STUFU X0FCR1I4ODg4Ogo+ID4gKwkJcGl4MzJbeF0gPSBmb3JlZ3JvdW5kID8gMHhmZmZmZmZmZiA6IDB4 ZmYwMDAwMDA7Cj4gPiArCQlicmVhazsKPiA+ICsKPiA+ICsJY2FzZSBEUk1fRk9STUFUX1JHQlg4 ODg4Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6Cj4gPiArCWNhc2UgRFJNX0ZPUk1B VF9CR1JYODg4ODoKPiA+ICsJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4Ogo+ID4gKwkJcGl4MzJb eF0gPSBmb3JlZ3JvdW5kID8gMHhmZmZmZmZmZiA6IDB4MDAwMDAwZmY7Cj4gPiArCQlicmVhazsK PiA+ICsKPiA+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgo+ID4gKwljYXNlIERSTV9G T1JNQVRfQVJHQjIxMDEwMTA6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKPiA+ ICsJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgo+ID4gKwkJcGl4MzJbeF0gPSBmb3JlZ3Jv dW5kID8gMHhmZmZmZmZmZiA6IDB4YzAwMDAwMDA7Cj4gPiArCQlicmVhazsKPiA+ICsKPiA+ICsJ Y2FzZSBEUk1fRk9STUFUX1JHQlgxMDEwMTAyOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTEw MTAxMDI6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JYMTAxMDEwMjoKPiA+ICsJY2FzZSBEUk1f Rk9STUFUX0JHUkExMDEwMTAyOgo+ID4gKwkJcGl4MzJbeF0gPSBmb3JlZ3JvdW5kID8gMHhmZmZm ZmZmZiA6IDB4MDAwMDAwMDM7Cj4gPiArCQlicmVhazsKPiA+ICsJfQo+ID4gK30KPiA+ICtFWFBP UlRfU1lNQk9MKGRybV9mcmFtZWJ1ZmZlcl9wYW5pY19kcmF3X3h5KTsKPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVybmFsLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lu dGVybmFsLmgKPiA+IGluZGV4IDI1MWQ2N2UwNGMyZC4uNjk0YTU4MDNhYzNjIDEwMDY0NAo+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oCj4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX2ludGVybmFsLmgKPiA+IEBAIC0xOTEsMyArMTkxLDcgQEAgaW50IGRybV9zeW5j b2JqX3NpZ25hbF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ID4g IHZvaWQgZHJtX2ZyYW1lYnVmZmVyX3ByaW50X2luZm8oc3RydWN0IGRybV9wcmludGVyICpwLCB1 bnNpZ25lZCBpbnQgaW5kZW50LAo+ID4gIAkJCQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYik7Cj4gPiAgaW50IGRybV9mcmFtZWJ1ZmZlcl9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9t aW5vciAqbWlub3IpOwo+ID4gKwo+ID4gKy8qIGRybV9wYW5pYy5jICovCj4gPiArdm9pZCBkcm1f cGFuaWNfaW5pdChzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3QpOwo+ID4gK3ZvaWQgZHJtX3Bh bmljX2V4aXQoc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290KTsKPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZHJtX3BhbmljLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmljLmMK PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjRiY2E3ZjBi YzM2OQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wYW5p Yy5jCj4gPiBAQCAtMCwwICsxLDM2MyBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCj4gPiArLy8gQ29weXJpZ2h0IDIwMTggTm9yYWxmIFRyw7hubmVzCj4gPiArCj4g PiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZm9udC5o Pgo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgva21z Z19kdW1wLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Cj4gPiArI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+ID4gKwo+ID4g KyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2Uu aD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9m aWxlLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZnJhbWVidWZmZXIuaD4KPiA+ICsjaW5jbHVk ZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZS5oPgo+ ID4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+ Cj4gPiArCj4gPiArI2luY2x1ZGUgImRybV9pbnRlcm5hbC5oIgo+ID4gKwo+ID4gKy8qCj4gPiAr ICogVGhlIGxvZyBsaW5lcyBpbiBhbiBBUk0gc3RhY2sgZHVtcCBhcmUgOTIgY2hhcmFjdGVycyBs b25nCj4gPiArICogYW5kIDEyMCBpcyBhIG5pY2UgbXVsdGlwbGUgZm9yIEhEIGFuZCA0Sy4KPiA+ ICsgKi8KPiA+ICsjZGVmaW5lIERSTV9QQU5JQ19DT0xVTU5fV0lEVEgJMTIwCj4gCj4gSSB0aGlu ayB3ZSBzaG91bGQgY29tcHV0ZSB0aGlzIGR5bmFtaWNhbGx5IGZyb20gdGhlIGFjdHVhbCBmYiB3 aWR0aCBhbmQKPiBmb250IHdpdGR0aC4KPiAKPiA+ICsKPiA+ICtzdHJ1Y3QgZHJtX3BhbmljX2N0 eCB7Cj4gPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ID4gKwl1bnNpZ25lZCBpbnQg d2lkdGg7Cj4gPiArCXVuc2lnbmVkIGludCBoZWlnaHQ7Cj4gPiArCXZvaWQgKnZtYXA7Cj4gPiAr Cj4gPiArCWNvbnN0IHN0cnVjdCBmb250X2Rlc2MgKmZvbnQ7Cj4gPiArCXVuc2lnbmVkIGludCBj b2xfd2lkdGg7Cj4gPiArCXVuc2lnbmVkIGludCBib3R0b21feTsKPiA+ICsJc2l6ZV90IG1heF9s aW5lX2xlbmd0aDsKPiA+ICsKPiA+ICsJdW5zaWduZWQgaW50IHg7Cj4gPiArCXVuc2lnbmVkIGlu dCB5Owo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmb250X2Rlc2MgKmRy bV9wYW5pY19mb250OHg4LCAqZHJtX3BhbmljX2ZvbnQ4eDE2Owo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkIGRybV9wYW5pY19kcmF3X3h5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB2b2lkICp2 bWFwLAo+ID4gKwkJCSAgICAgIGludCB4LCBpbnQgeSwgYm9vbCBmZykKPiA+ICt7Cj4gPiArCWlm IChmYi0+ZnVuY3MtPnBhbmljX2RyYXdfeHkpCj4gPiArCQlmYi0+ZnVuY3MtPnBhbmljX2RyYXdf eHkoZmIsIHZtYXAsIHgsIHksIGZnKTsKPiA+ICsJZWxzZQo+ID4gKwkJZHJtX2ZyYW1lYnVmZmVy X3BhbmljX2RyYXdfeHkoZmIsIHZtYXAsIHgsIHksIGZnKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQgZHJtX3BhbmljX3JlbmRlcl9jaGFyKHN0cnVjdCBkcm1fcGFuaWNfY3R4ICpjdHgs Cj4gPiArCQkJCSAgdW5zaWduZWQgaW50IG9mZnNldCwgY2hhciBjKQo+ID4gK3sKPiA+ICsJdW5z aWduZWQgaW50IGgsIHcsIHgsIHk7Cj4gPiArCXU4IGZvbnRsaW5lOwo+ID4gKwo+ID4gKwlmb3Ig KGggPSAwOyBoIDwgY3R4LT5mb250LT5oZWlnaHQ7IGgrKykgewo+ID4gKwkJZm9udGxpbmUgPSAq KHU4ICopKGN0eC0+Zm9udC0+ZGF0YSArIGMgKiBjdHgtPmZvbnQtPmhlaWdodCArIGgpOwo+ID4g Kwo+ID4gKwkJZm9yICh3ID0gMDsgdyA8IGN0eC0+Zm9udC0+d2lkdGg7IHcrKykgewo+ID4gKwkJ CXggPSBjdHgtPnggKyAob2Zmc2V0ICogY3R4LT5mb250LT53aWR0aCkgKyB3Owo+ID4gKwkJCXkg PSBjdHgtPnkgKyBoOwo+ID4gKwkJCWRybV9wYW5pY19kcmF3X3h5KGN0eC0+ZmIsIGN0eC0+dm1h cCwgeCwgeSwKPiA+ICsJCQkJCSAgZm9udGxpbmUgJiBCSVQoNyAtIHcpKTsKPiA+ICsJCX0KPiA+ ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfcmVuZGVyX2xpbmUo c3RydWN0IGRybV9wYW5pY19jdHggKmN0eCwKPiA+ICsJCQkJICBjb25zdCBjaGFyICpsaW5lLCBz aXplX3QgbGVuKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiArCj4gPiArCWZvciAo aSA9IDA7IGkgPCBsZW47IGkrKykKPiA+ICsJCWRybV9wYW5pY19yZW5kZXJfY2hhcihjdHgsIGks IGxpbmVbaV0pOwo+ID4gKwo+ID4gKwkvKiBDbGVhciBvdXQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUg Ki8KPiA+ICsJZm9yIChpID0gbGVuOyBpIDwgY3R4LT5tYXhfbGluZV9sZW5ndGg7IGkrKykKPiA+ ICsJCWRybV9wYW5pY19yZW5kZXJfY2hhcihjdHgsIGksICcgJyk7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBib29sIGRybV9wYW5pY19uZXdsaW5lKHN0cnVjdCBkcm1fcGFuaWNfY3R4ICpjdHgp Cj4gPiArewo+ID4gKwlpZiAoY3R4LT54ID09IDAgJiYgY3R4LT55ID09IDApCj4gPiArCQlyZXR1 cm4gZmFsc2U7Cj4gPiArCWlmIChjdHgtPnkgPT0gMCkgewo+ID4gKwkJY3R4LT54IC09IGN0eC0+ Y29sX3dpZHRoOwo+ID4gKwkJY3R4LT55ID0gY3R4LT5ib3R0b21feTsKPiA+ICsJfSBlbHNlIHsK PiA+ICsJCWN0eC0+eSAtPSBjdHgtPmZvbnQtPmhlaWdodDsKPiA+ICsJfQo+ID4gKwo+ID4gKwly ZXR1cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArLyogUmVuZGVyIGZyb20gYm90dG9tIHJpZ2h0 IG1vc3QgY29sdW1uICovCj4gPiArc3RhdGljIGJvb2wgZHJtX3BhbmljX3JlbmRlcl9saW5lcyhz dHJ1Y3QgZHJtX3BhbmljX2N0eCAqY3R4LAo+ID4gKwkJCQkgICBjb25zdCBjaGFyICpzdHIsIHNp emVfdCBsZW4pCj4gPiArewo+ID4gKwlzaXplX3QgbCwgbGluZV9sZW5ndGg7Cj4gPiArCWNvbnN0 IGNoYXIgKnBvczsKPiA+ICsJaW50IGk7Cj4gPiArCj4gPiArCXdoaWxlIChsZW4pIHsKPiA+ICsJ CXBvcyA9IHN0ciArIGxlbiAtIDE7Cj4gPiArCj4gPiArCQlpZiAoKnBvcyA9PSAnXG4nKSB7Cj4g PiArCQkJbGVuLS07Cj4gPiArCQkJaWYgKCFkcm1fcGFuaWNfbmV3bGluZShjdHgpKQo+ID4gKwkJ CQlyZXR1cm4gZmFsc2U7Cj4gPiArCQkJY29udGludWU7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQl3 aGlsZSAocG9zID4gc3RyICYmICoocG9zIC0gMSkgIT0gJ1xuJykKPiA+ICsJCQlwb3MtLTsKPiA+ ICsKPiA+ICsJCWxpbmVfbGVuZ3RoID0gbGVuIC0gKHBvcyAtIHN0cik7Cj4gPiArCj4gPiArCQlp ZiAoIWxpbmVfbGVuZ3RoIHx8IGxlbiA8IGxpbmVfbGVuZ3RoKSB7Cj4gPiArCQkJcHJfZXJyKCIl czogQnVnISBsaW5lX2xlbmd0aD0lenUgbGVuPSV6dVxuIiwKPiA+ICsJCQkgICAgICAgX19mdW5j X18sIGxpbmVfbGVuZ3RoLCBsZW4pOwo+ID4gKwkJCXJldHVybiBmYWxzZTsKPiA+ICsJCX0KPiA+ ICsKPiA+ICsJCWxlbiAtPSBsaW5lX2xlbmd0aDsKPiA+ICsKPiA+ICsJCWZvciAoaSA9IERJVl9S T1VORF9VUChsaW5lX2xlbmd0aCwgY3R4LT5tYXhfbGluZV9sZW5ndGgpIC0gMTsgaSA+PSAwOyBp LS0pIHsKPiA+ICsJCQlsID0gbWluKGN0eC0+bWF4X2xpbmVfbGVuZ3RoLCBsaW5lX2xlbmd0aCAt IGkgKiBjdHgtPm1heF9saW5lX2xlbmd0aCk7Cj4gPiArCQkJZHJtX3BhbmljX3JlbmRlcl9saW5l KGN0eCwgcG9zICsgKGkgKiBjdHgtPm1heF9saW5lX2xlbmd0aCksIGwpOwo+ID4gKwkJCWlmIChp ICYmICFkcm1fcGFuaWNfbmV3bGluZShjdHgpKQo+ID4gKwkJCQlyZXR1cm4gZmFsc2U7Cj4gPiAr CQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHRydWU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB2b2lkIGRybV9wYW5pY19rbXNnX3JlbmRlcl9zY3JlZW4oc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCj4gPiArCQkJCQkgc3RydWN0IGttc2dfZHVtcGVyICpkdW1wZXIpCj4gPiArewo+ID4g KwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lLT5zdGF0ZS0+ZmI7Cj4gPiArCWJv b2wgZmlyc3RfaXRlcmF0aW9uID0gdHJ1ZTsKPiA+ICsJc3RydWN0IGRybV9wYW5pY19jdHggY3R4 Owo+ID4gKwlzdGF0aWMgY2hhciB0ZXh0WzEwMjRdOwo+ID4gKwlzaXplX3QgbGVuOwo+ID4gKwo+ ID4gKwljdHgudm1hcCA9IGZiLT5mdW5jcy0+cGFuaWNfdm1hcChmYik7Cj4gPiArCj4gPiArCS8q IFByaW50IHNvbWUgaW5mbyB3aGVuIHRlc3RpbmcgKi8KPiA+ICsJaWYgKGR1bXBlci0+bWF4X3Jl YXNvbiA9PSBLTVNHX0RVTVBfT09QUykgewo+ID4gKwkJc3RydWN0IGRybV9mb3JtYXRfbmFtZV9i dWYgZm9ybWF0X25hbWU7Cj4gPiArCj4gPiArCQlwcl9pbmZvKCIlczogW0ZCOiVkXSAldXgldSBm b3JtYXQ9JXMgdm1hcD0lcFxuIiwKPiA+ICsJCQlfX2Z1bmNfXywgZmItPmJhc2UuaWQsIGZiLT53 aWR0aCwgZmItPmhlaWdodCwKPiA+ICsJCQlkcm1fZ2V0X2Zvcm1hdF9uYW1lKGZiLT5mb3JtYXQt PmZvcm1hdCwgJmZvcm1hdF9uYW1lKSwKPiA+ICsJCQljdHgudm1hcCk7Cj4gPiArCX0KPiA+ICsK PiA+ICsJaWYgKCFjdHgudm1hcCkKPiA+ICsJCXJldHVybjsKPiAKPiBGb3Igc29tZSBmcmFtZWJ1 ZmZlcnMgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIG5vdCByZXF1aXJlIHZtYXAsIGJ1dCBpbnN0ZWFk Cj4gaGF2ZSBzb21lIHBhZ2UtYnktcGFnZSBraW5kIG9mIGFjY2VzcyBoZWxwZXIuIFNpbmNlIHBy ZWVtcHRpdmVseSBzZXR0aW5nCj4gdXAgYSB2bWFwIGZvciBhbGwgdGhlIG5vbi1jb250aW5vdXMg YnVmZmVycyBpcyBhIGJpdCBtdWNoLCBhbmQgd2UgcmVhbGx5Cj4gY2FuJ3Qgc2V0IHVwIHRoZSB2 bWFwIGluIHRoZSBwYW5pYyBoYW5kbGVyLgo+IAo+IE1heWJlIHdlIHNob3VsZCBjYWxsIHRoaXMg cGFuaWNfcHJlcGFyZS9wYW5pY19maW5pc2ggYW5kCj4gcy92bWFwL2Nvb2tpZS8sIHRvIG1ha2Ug aXQgZW50aXJlbHkgb3BhcXVlPwo+IAo+IEJ1dCBhIGJpdCBvdmVyZW5naW5lZXJpbmcgcGVyaGFw cyA6LSkKPiAKPiA+ICsKPiA+ICsJY3R4LmZiID0gZmI7Cj4gPiArCWN0eC53aWR0aCA9IGRybV9y ZWN0X3dpZHRoKCZwbGFuZS0+c3RhdGUtPnNyYykgPj4gMTY7Cj4gPiArCWN0eC5oZWlnaHQgPSBk cm1fcmVjdF9oZWlnaHQoJnBsYW5lLT5zdGF0ZS0+c3JjKSA+PiAxNjsKPiA+ICsKPiA+ICsJLyoK PiA+ICsJICogVE9ETzoKPiA+ICsJICogRmluZCB3aGljaCBwYXJ0IG9mIHRoZSBmYiB0aGF0IGlz IHZpc2libGUuCj4gPiArCSAqIFdpZHRoIGFuZCBoZWlnaHQgYXJlIHplcm8gb24gdmM0Cj4gPiAr CSAqLwo+ID4gKwlpZiAoIWN0eC53aWR0aCB8fCAhY3R4LmhlaWdodCkgewo+ID4gKwkJY3R4Lndp ZHRoID0gZmItPndpZHRoOwo+ID4gKwkJY3R4LmhlaWdodCA9IGZiLT5oZWlnaHQ7Cj4gPiArCX0K PiA+ICsKPiA+ICsJLyogVHJ5IHRvIGZpdCA1MCBsaW5lcyAqLwo+ID4gKwlpZiAoY3R4LmhlaWdo dCA8IDUwICogMTYgJiYgZHJtX3BhbmljX2ZvbnQ4eDgpCj4gPiArCQljdHguZm9udCA9IGRybV9w YW5pY19mb250OHg4Owo+ID4gKwllbHNlCj4gPiArCQljdHguZm9udCA9IGRybV9wYW5pY19mb250 OHgxNjsKPiA+ICsKPiA+ICsJY3R4LmNvbF93aWR0aCA9IERSTV9QQU5JQ19DT0xVTU5fV0lEVEgg KiBjdHguZm9udC0+d2lkdGg7Cj4gPiArCWN0eC5ib3R0b21feSA9ICgoY3R4LmhlaWdodCAvIGN0 eC5mb250LT5oZWlnaHQpIC0gMSkgKiBjdHguZm9udC0+aGVpZ2h0Owo+ID4gKwo+ID4gKwlpZiAo Y3R4LndpZHRoIDwgMiAqIGN0eC5jb2xfd2lkdGgpCj4gPiArCQljdHgubWF4X2xpbmVfbGVuZ3Ro ID0gY3R4LndpZHRoIC8gY3R4LmZvbnQtPndpZHRoOwo+ID4gKwllbHNlCj4gPiArCQljdHgubWF4 X2xpbmVfbGVuZ3RoID0gRFJNX1BBTklDX0NPTFVNTl9XSURUSCAtIDI7IC8qIGJvcmRlcj0yICov Cj4gPiArCj4gPiArCWN0eC54ID0gMDsKPiA+ICsJY3R4LnkgPSBjdHguYm90dG9tX3k7Cj4gPiAr CWlmIChjdHgud2lkdGggPiBjdHguY29sX3dpZHRoKQo+ID4gKwkJY3R4LnggPSAoKGN0eC53aWR0 aCAvIGN0eC5jb2xfd2lkdGgpIC0gMSkgKiBjdHguY29sX3dpZHRoOwo+ID4gKwo+ID4gKwlwcl9k ZWJ1ZygiJXM6IGZvbnQ9JXMgJXV4JXUgbWF4X2xpbmVfbGVuZ3RoPSV6dSAoJXUsJXUpXG4iLAo+ ID4gKwkJIF9fZnVuY19fLCBjdHguZm9udC0+bmFtZSwgY3R4LndpZHRoLCBjdHguaGVpZ2h0LAo+ ID4gKwkJIGN0eC5tYXhfbGluZV9sZW5ndGgsIGN0eC54LCBjdHgueSk7Cj4gPiArCj4gPiArCWtt c2dfZHVtcF9yZXdpbmQoZHVtcGVyKTsKPiA+ICsKPiA+ICsJLyogVGhlIGxhdGVzdCBtZXNzYWdl cyBhcmUgZmV0Y2hlZCBmaXJzdCAqLwo+ID4gKwl3aGlsZSAoa21zZ19kdW1wX2dldF9idWZmZXIo ZHVtcGVyLCBmYWxzZSwgdGV4dCwgc2l6ZW9mKHRleHQpLCAmbGVuKSkgewo+ID4gKwkJLyogU3Ry aXAgb2ZmIHRoZSB2ZXJ5IGxhc3QgbmV3bGluZSBzbyB3ZSBzdGFydCBhdCB0aGUgYm90dG9tICov Cj4gPiArCQlpZiAoZmlyc3RfaXRlcmF0aW9uKSB7Cj4gPiArCQkJbGVuLS07Cj4gPiArCQkJZmly c3RfaXRlcmF0aW9uID0gZmFsc2U7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZiAoIWRybV9wYW5p Y19yZW5kZXJfbGluZXMoJmN0eCwgdGV4dCwgbGVuKSkKPiA+ICsJCQlicmVhazsKPiA+ICsJfQo+ ID4gKwo+ID4gKwlpZiAoZmItPmZ1bmNzLT5wYW5pY192dW5tYXApCj4gPiArCQlmYi0+ZnVuY3Mt PnBhbmljX3Z1bm1hcChmYiwgdm1hcCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGRy bV9wYW5pY190cnlfZGV2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrbXNnX2R1bXBl ciAqZHVtcGVyKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gPiAr CXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4g PiArCj4gPiArCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9BVE9NSUMp KQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlpZiAoZHVtcGVyLT5tYXhfcmVhc29uID09IEtN U0dfRFVNUF9PT1BTKQo+ID4gKwkJcHJfaW5mbygiJXM6ICVzIG9uIG1pbm9yICVkXG4iLCBfX2Z1 bmNfXywgZGV2LT5kcml2ZXItPm5hbWUsCj4gPiArCQkJZGV2LT5wcmltYXJ5LT5pbmRleCk7Cj4g PiArCj4gPiArCWRybV9mb3JfZWFjaF9jcnRjKGNydGMsIGRldikgewo+ID4gKwkJaWYgKCF3d19t dXRleF90cnlsb2NrKCZjcnRjLT5tdXRleC5tdXRleCkpCj4gPiArCQkJY29udGludWU7Cj4gPiAr Cj4gPiArCQlpZiAoIWNydGMtPmVuYWJsZWQgfHwgIWNydGMtPnByaW1hcnkpCj4gPiArCQkJZ290 byBjcnRjX3VubG9jazsKPiA+ICsKPiA+ICsJCWlmICghY3J0Yy0+c3RhdGUgfHwgIWNydGMtPnN0 YXRlLT5hY3RpdmUpCj4gPiArCQkJZ290byBjcnRjX3VubG9jazsKPiA+ICsKPiA+ICsJCXBsYW5l ID0gY3J0Yy0+cHJpbWFyeTsKPiA+ICsJCWlmICghd3dfbXV0ZXhfdHJ5bG9jaygmcGxhbmUtPm11 dGV4Lm11dGV4KSkKPiA+ICsJCQlnb3RvIGNydGNfdW5sb2NrOwo+ID4gKwo+ID4gKwkJLyoKPiA+ ICsJCSAqIFRPRE86IFNob3VsZCB3ZSBjaGVjayBwbGFuZV9zdGF0ZS0+dmlzaWJsZT8KPiA+ICsJ CSAqIEl0IGlzIG5vdCBzZXQgb24gdmM0Cj4gCj4gSSB0aGluayB3ZSBzaG91bGQuIFdlIHNob3Vs ZCBhbHNvIGNoZWNrIHdoZXRoZXIgdGhhdCBwcmltYXJ5IGlzIGNvbm5lY3RlZAo+IHRvIHRoZSBj cnRjIChzb21lIGh3IHlvdSBjYW4gcmVhc3NpZ24gcGxhbmVzIGZyZWVseSBiZXR3ZWVuIGNydGMs IGFuZCB0aGUKPiBjcnRjLT5wcmltYXJ5IHBvaW50ZXIgaXMgb25seSB1c2VkIGZvciBjb21wYXQg d2l0aCBsZWdhY3kgaW9jdGwpLgo+IAo+ID4gKwkJaWYgKCFwbGFuZS0+c3RhdGUgfHwgIXBsYW5l LT5zdGF0ZS0+dmlzaWJsZSkKPiA+ICsJCSAqLwo+ID4gKwkJaWYgKCFwbGFuZS0+c3RhdGUpCj4g PiArCQkJZ290byBwbGFuZV91bmxvY2s7Cj4gPiArCj4gPiArCQlmYiA9IHBsYW5lLT5zdGF0ZS0+ ZmI7Cj4gPiArCQlpZiAoIWZiIHx8ICFmYi0+ZnVuY3MtPnBhbmljX3ZtYXApCj4gCj4gRG9jcyBz YXlzIHRoaXMgaXMgb3B0aW9uYWwsIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbGwgdGhhdCBvcHRpb25h bC4gSSdkCj4gY2hlY2sgZm9yIHRoaXMgb3IgYSBkcml2ZXItc3BlY2lmaWMgLT5wYW5pY19kcmF3 X3h5IGluc3RlYWQuCj4gPiArCQkJZ290byBwbGFuZV91bmxvY2s7Cj4gPiArCj4gPiArCQkvKgo+ ID4gKwkJICogZmJjb24gcHV0cyBvdXQgcGFuaWMgbWVzc2FnZXMgc28gc3RheSBhd2F5IHRvIGF2 b2lkIGp1bWJsZWQKPiA+ICsJCSAqIG91dHB1dC4gSWYgdmMtPnZjX21vZGUgIT0gS0RfVEVYVCBm YmNvbiB3b24ndCBwdXQgb3V0Cj4gPiArCQkgKiBtZXNzYWdlcyAoc2VlIHZ0X2NvbnNvbGVfcHJp bnQpLgo+ID4gKwkJICovCj4gPiArCQlpZiAoZGV2LT5mYl9oZWxwZXIgJiYgZGV2LT5mYl9oZWxw ZXItPmZiID09IGZiKQoKVGhpcyBpcyBhIGJpdCBhIGxheWVyaW5nIHZpb2xhdGlvbi4gQ291bGQg d2UgaW5zdGVhZCB0ZWxsIGZiY29uIHRoYXQgaXQKc2hvdWxkbid0IGRvIHBhbmljIGhhbmRsaW5n IGZvciBkcm0gZHJpdmVycz8gSSB0aGluayB0aGF0IHdvdWxkIHJlc29sdmUKdGhpcyBvdmVybGFw IGhlcmUgaW4gYSBtdWNoIGNsZWFuZXIgd2F5LiBkcm0gZmJkZXYgaGVscGVycyBhbHJlYWR5IGhh dmUKbG90cyBvZiBvb3BzX2luX3Byb2dyZXNzIGNoZWNrcyBhbGwgb3ZlciB0byBtYWtlIHN1cmUg ZmJjb24gZG9lc24ndCBkbwphbnl0aGluZyBiYWQuIFRoYXQgb25seSBsZWF2ZXMgdGhlIGFjdHVh bCByZW5kZXJpbmcsIHdoaWNoIEkgdGhpbmsgd2UgY2FuCnN0b3AgdG9vIHdpdGggYSBzaW1wbGUg ZmxhZy4KCk9mYyBvbmx5IGZvciBhdG9taWMgZHJpdmVycyB3aGljaCBoYXZlIHRoaXMgcGFuaWMg aGFuZGxpbmcgbW9kZSBoZXJlCmltcGxlbWVudGVkLgotRGFuaWVsCgo+ID4gKwkJCWdvdG8gcGxh bmVfdW5sb2NrOwo+ID4gKwo+ID4gKwkJZHJtX3BhbmljX2ttc2dfcmVuZGVyX3NjcmVlbihwbGFu ZSwgZHVtcGVyKTsKPiA+ICtwbGFuZV91bmxvY2s6Cj4gPiArCQl3d19tdXRleF91bmxvY2soJnBs YW5lLT5tdXRleC5tdXRleCk7Cj4gPiArY3J0Y191bmxvY2s6Cj4gPiArCQl3d19tdXRleF91bmxv Y2soJmNydGMtPm11dGV4Lm11dGV4KTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg aW50IGRybV9wYW5pY19kZXZfaXRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4g PiArewo+ID4gKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Owo+ID4gKwo+ID4gKwlpZiAobWlub3IgJiYgbWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX1BSSU1B UlkpCj4gPiArCQlkcm1fcGFuaWNfdHJ5X2RldihtaW5vci0+ZGV2LCBkYXRhKTsKPiA+ICsKPiA+ ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGRybV9wYW5pY19rbXNn X2R1bXAoc3RydWN0IGttc2dfZHVtcGVyICpkdW1wZXIsCj4gPiArCQkJCWVudW0ga21zZ19kdW1w X3JlYXNvbiByZWFzb24pCj4gPiArewo+ID4gKwljbGFzc19mb3JfZWFjaF9kZXZpY2UoZHJtX2Ns YXNzLCBOVUxMLCBkdW1wZXIsIGRybV9wYW5pY19kZXZfaXRlcik7Cj4gCj4gY2xhc3NfZm9yX2Vh Y2hfZGV2aWNlIHVzZXMga2xpc3QsIHdoaWNoIG9ubHkgdXNlcyBhbiBpcnFzYXZlIHNwaW5sb2Nr LiBJCj4gdGhpbmsgdGhhdCdzIGdvb2QgZW5vdWdoLiBDb21tZW50IHRvIHRoYXQgZWZmZWN0IHdv dWxkIGJlIGdvb2QgZS5nLgo+IAo+IAkvKiBiYXNlZCBvbiBrbGlzdCwgd2hpY2ggdXNlcyBvbmx5 IGEgc3Bpbl9sb2NrX2lycXNhdmUsIHdoaWNoIHdlCj4gCSAqIGFzc3VtZSBzdGlsbCB3b3JrcyAq Lwo+IAo+IElmIHdlIGFpbSBmb3IgcGVyZmVjdCB0aGlzIHNob3VsZCBiZSBhIHRyeWxvY2sgc3Rp bGwsIG1heWJlIHVzaW5nIG91ciBvd24KPiBkZXZpY2UgbGlzdC4KPiAKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHN0cnVjdCBrbXNnX2R1bXBlciBkcm1fcGFuaWNfa21zZ19kdW1wZXIgPSB7Cj4g PiArCS5kdW1wID0gZHJtX3BhbmljX2ttc2dfZHVtcCwKPiA+ICsJLm1heF9yZWFzb24gPSBLTVNH X0RVTVBfUEFOSUMsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVfdCBkcm1fcGFuaWNf ZmlsZV9wYW5pY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKPiA+ICsJCQkJCSAgY29uc3QgY2hh ciBfX3VzZXIgKnVzZXJfYnVmLAo+ID4gKwkJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBv cykKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7Cj4gPiArCWNoYXIgYnVmWzI0 XTsKPiA+ICsJc2l6ZV90IHNpemU7Cj4gPiArCXNzaXplX3QgcmV0Owo+ID4gKwo+ID4gKwlzaXpl ID0gbWluKHNpemVvZihidWYpIC0gMSwgY291bnQpOwo+ID4gKwlpZiAoY29weV9mcm9tX3VzZXIo YnVmLCB1c2VyX2J1Ziwgc2l6ZSkpCj4gPiArCQlyZXR1cm4gLUVGQVVMVDsKPiA+ICsKPiA+ICsJ YnVmW3NpemVdID0gJ1wwJzsKPiA+ICsJcmV0ID0ga3N0cnRvdWxsKGJ1ZiwgMCwgJnZhbCk7Cj4g PiArCWlmIChyZXQpCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlkcm1fcGFuaWNfa21z Z19kdW1wZXIubWF4X3JlYXNvbiA9IEtNU0dfRFVNUF9PT1BTOwo+ID4gKwl3bWIoKTsKPiA+ICsK PiA+ICsJLyogRG8gYSByZWFsIHRlc3Qgd2l0aDogZWNobyBjID4gL3Byb2Mvc3lzcnEtdHJpZ2dl ciAqLwo+ID4gKwo+ID4gKwlpZiAodmFsID09IDApIHsKPiA+ICsJCXByX2luZm8oIlRlc3QgcGFu aWMgc2NyZWVuIHVzaW5nIGttc2dfZHVtcChPT1BTKVxuIik7Cj4gPiArCQlrbXNnX2R1bXAoS01T R19EVU1QX09PUFMpOwo+ID4gKwl9IGVsc2UgaWYgKHZhbCA9PSAxKSB7Cj4gPiArCQljaGFyICpu dWxsX3BvaW50ZXIgPSBOVUxMOwo+ID4gKwo+ID4gKwkJcHJfaW5mbygiVGVzdCBwYW5pYyBzY3Jl ZW4gdXNpbmcgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlXG4iKTsKPiA+ICsJCSpudWxsX3BvaW50 ZXIgPSAxOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCX0KPiAK PiBUaGlzIGlzbid0IHF1aXRlIHdoYXQgSSBoYWQgaW4gbWluZCwgc2luY2UgaXQgc3RpbGwga2ls bHMgdGhlIGtlcm5lbCAobGlrZQo+IHN5c3JxLXRyaWdnZXIpLiBJbnN0ZWFkIHdoYXQgSSBoYWQg aW4gbWluZCBpcyB0byByZWNyZWF0ZSB0aGUgd29yc3QKPiBwb3NzaWJsZSBwYW5pYyBjb250ZXh0 IGFzIG11Y2ggYXMgZmVhc2libGUgKGRpc2FibGluZyBpbnRlcnJ1cHRzIHNob3VsZCBiZQo+IGEg Z29vZCBzdGFydCwgbWF5YmUgd2UgY2FuIGV2ZW4gZG8gYW4gbm1pIGNhbGxiYWNrKSwgYW5kIHRo ZW4gY2FsbCBvdXIKPiBwYW5pYyBpbXBsZW1lbnRhdGlvbi4gVGhhdCB3YXkgd2UgY2FuIHRlc3Qg dGhlIHBhbmljIGhhbmRsZXIgaW4gYQo+IG5vbi1kZXN0cnVjdGl2ZSB3YXkgKGkuZS4gYXNpZGUg ZnJvbSBsYXN0IGRtZXNnIGxpbmVzIHByaW50ZWQgdG8gdGhlCj4gc2NyZWVuIG5vdGhpbmcgYmFk IGhhcHBlbnMgdG8gdGhlIGtlcm5lbDogTm8gcmVhbCBwYW5pYywgbm8gb29wcywgbm8KPiB0YWlu dGluZykuCj4gCj4gQW5kIGlndCB0ZXN0Y2FzZSBjb3VsZCB0aGVuIGV4ZXJjaXNlIHRoaXMsIGFu ZCBDSSBydW4gaXQuCj4gCj4gPiArCj4gPiArCXJldHVybiBjb3VudDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJtX3BhbmljX3BhbmljX29w cyA9IHsKPiA+ICsJLndyaXRlID0gICAgICAgIGRybV9wYW5pY19maWxlX3BhbmljX3dyaXRlLAo+ ID4gKwkub3BlbiA9ICAgICAgICAgc2ltcGxlX29wZW4sCj4gPiArCS5sbHNlZWsgPSAgICAgICBk ZWZhdWx0X2xsc2VlaywKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpk cm1fcGFuaWNfZF9wYW5pYzsKPiA+ICsKPiA+ICt2b2lkIF9faW5pdCBkcm1fcGFuaWNfaW5pdChz dHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3QpCj4gPiArewo+ID4gKwlkcm1fcGFuaWNfZm9udDh4 OCA9IGZpbmRfZm9udCgiVkdBOHg4Iik7Cj4gPiArCWRybV9wYW5pY19mb250OHgxNiA9IGZpbmRf Zm9udCgiVkdBOHgxNiIpOwo+ID4gKwlpZiAoIWRybV9wYW5pY19mb250OHgxNikgewo+ID4gKwkJ RFJNX1dBUk4oIkNvdWxkbid0IGZpbmQgZm9udCwgcGFuaWMgc2NyZWVuIGRpc2FibGVkXG4iKTsK PiA+ICsJCXJldHVybjsKPiA+ICsJfQo+ID4gKwo+ID4gKwlkcm1fcGFuaWNfZF9wYW5pYyA9IGRl YnVnZnNfY3JlYXRlX2ZpbGUoInBhbmljLXRlc3QiLCAwMjAwLAo+ID4gKwkJCQkJCWRlYnVnZnNf cm9vdCwgTlVMTCwKPiA+ICsJCQkJCQkmZHJtX3BhbmljX3BhbmljX29wcyk7Cj4gPiArCWttc2df ZHVtcF9yZWdpc3RlcigmZHJtX3BhbmljX2ttc2dfZHVtcGVyKTsKPiA+ICt9Cj4gPiArCj4gPiAr dm9pZCBkcm1fcGFuaWNfZXhpdChzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3QpCj4gPiArewo+ ID4gKwlrbXNnX2R1bXBfdW5yZWdpc3RlcigmZHJtX3BhbmljX2ttc2dfZHVtcGVyKTsKPiA+ICsJ ZGVidWdmc19yZW1vdmUoZHJtX3BhbmljX2RfcGFuaWMpOwo+ID4gK30KPiA+IGRpZmYgLS1naXQg YS9pbmNsdWRlL2RybS9kcm1fZnJhbWVidWZmZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mcmFtZWJ1 ZmZlci5oCj4gPiBpbmRleCBmMGIzNGM5NzdlYzUuLmYzMjc0Nzk4ZWNmZSAxMDA2NDQKPiA+IC0t LSBhL2luY2x1ZGUvZHJtL2RybV9mcmFtZWJ1ZmZlci5oCj4gPiArKysgYi9pbmNsdWRlL2RybS9k cm1fZnJhbWVidWZmZXIuaAo+ID4gQEAgLTk0LDYgKzk0LDQ0IEBAIHN0cnVjdCBkcm1fZnJhbWVi dWZmZXJfZnVuY3Mgewo+ID4gIAkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgdW5z aWduZWQgZmxhZ3MsCj4gPiAgCQkgICAgIHVuc2lnbmVkIGNvbG9yLCBzdHJ1Y3QgZHJtX2NsaXBf cmVjdCAqY2xpcHMsCj4gPiAgCQkgICAgIHVuc2lnbmVkIG51bV9jbGlwcyk7Cj4gPiArCj4gPiAr CS8qKgo+ID4gKwkgKiBAcGFuaWNfdm1hcDoKPiA+ICsJICoKPiA+ICsJICogT3B0aW9uYWwgY2Fs bGJhY2sgZm9yIHBhbmljIGhhbmRsaW5nLgo+ID4gKwkgKgo+ID4gKwkgKiBGb3Igdm1hcHBpbmcg dGhlIHNlbGVjdGVkIGZyYW1lYnVmZmVyIGluIGEgcGFuaWMgY29udGV4dC4gTXVzdAo+ID4gKwkg KiBiZSBzdXBlciBjYXJlZnVsIGFib3V0IGxvY2tpbmcgKG9ubHkgdHJ5bG9ja2luZyBhbGxvd2Vk KS4KPiA+ICsJICoKPiA+ICsJICogUkVUVVJOUzoKPiA+ICsJICoKPiA+ICsJICogTlVMTCBpZiBp dCBkaWRuJ3Qgd29yayBvdXQsIG90aGVyd2lzZSBhbiBvcGFxdWUgY29va2llIHdoaWNoIGlzCj4g PiArCSAqIHBhc3NlZCB0byBAcGFuaWNfZHJhd194eS4gSXQgY2FuIGJlIGFueXRoaW5nOiB2bWFw IGFyZWEsIHN0cnVjdHVyZQo+ID4gKwkgKiB3aXRoIG1vcmUgZGV0YWlscywganVzdCBhIGZldyBm bGFncywgLi4uCj4gPiArCSAqLwo+ID4gKwl2b2lkICooKnBhbmljX3ZtYXApKHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiKTsKPiA+ICsKPiA+ICsJLyoqCj4gPiArCSAqIEBwYW5pY192dW5tYXA6 Cj4gPiArCSAqCj4gPiArCSAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBjbGVhbmluZyB1cCBhZnRl ciBwYW5pYyB0ZXN0aW5nLgo+ID4gKwkgKgo+ID4gKwkgKiBDcnRjIGFuZCBwbGFuZSBsb2NrcyBh cmUgcmVsZWFzZWQgYWZ0ZXIgdGhpcyBjYWxsYmFjayBoYXMgcnVuLgo+ID4gKwkgKiB2bWFwIGlz IHRoZSBjb29raWUgcmV0dXJuZWQgYnkgQHBhbmljX3ZtYXAuCj4gPiArCSAqLwo+ID4gKwl2b2lk ICgqcGFuaWNfdnVubWFwKShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgdm9pZCAqdm1hcCk7 Cj4gPiArCj4gPiArCS8qKgo+ID4gKwkgKiBAcGFuaWNfZHJhd194eToKPiA+ICsJICoKPiA+ICsJ ICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRyYXdpbmcgcGl4ZWxzIGR1cmluZyBwYW5pYy4KPiA+ ICsJICoKPiA+ICsJICogRm9yIGRyYXdpbmcgcGl4ZWxzIG9udG8gYSBmcmFtZWJ1ZmZlciBwcmVw YXJlZCB3aXRoIEBwYW5pY192bWFwLgo+ID4gKwkgKiB2bWFwIGlzIHRoZSBjb29raWUgcmV0dXJu ZWQgYnkgQHBhbmljX3ZtYXAuCj4gPiArCSAqIElmIGl0J3Mgbm90IHNldCwgZHJtX2ZyYW1lYnVm ZmVyX3BhbmljX2RyYXdfeHkoKSBpcyB1c2VkLgo+ID4gKwkgKi8KPiA+ICsJdm9pZCAoKnBhbmlj X2RyYXdfeHkpKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB2b2lkICp2bWFwLAo+ID4gKwkJ CSAgICAgIGludCB4LCBpbnQgeSwgYm9vbCBmb3JlZ3JvdW5kKTsKPiA+ICB9Owo+ID4gIAo+ID4g IC8qKgo+ID4gQEAgLTI5Myw0ICszMzEsNyBAQCBpbnQgZHJtX2ZyYW1lYnVmZmVyX3BsYW5lX3dp ZHRoKGludCB3aWR0aCwKPiA+ICBpbnQgZHJtX2ZyYW1lYnVmZmVyX3BsYW5lX2hlaWdodChpbnQg aGVpZ2h0LAo+ID4gIAkJCQkgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBw bGFuZSk7Cj4gPiAgCj4gPiArdm9pZCBkcm1fZnJhbWVidWZmZXJfcGFuaWNfZHJhd194eShzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgdm9pZCAqdm1hcCwKPiA+ICsJCQkJICAgaW50IHgsIGlu dCB5LCBib29sIGZvcmVncm91bmQpOwo+ID4gKwo+ID4gICNlbmRpZgo+ID4gLS0gCj4gPiAyLjIw LjEKPiA+IAo+IAo+IC0tIAo+IERhbmllbCBWZXR0ZXIKPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50 ZWwgQ29ycG9yYXRpb24KPiBodHRwOi8vYmxvZy5mZndsbC5jaAoKLS0gCkRhbmllbCBWZXR0ZXIK U29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNo Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==