From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3] usb: warm-reset ports on hub resume, if requested From: Jan-Marek Glogowski Message-Id: Date: Thu, 31 Jan 2019 19:52:39 +0100 To: Alan Stern Cc: Mathias Nyman , linux-usb@vger.kernel.org, Greg Kroah-Hartman , Kai-Heng Feng , Nicolas Boichat , Nicolas Saenz Julienne , Jon Flatley , Oliver Neukum List-ID: QW0gMzEuIEphbnVhciAyMDE5IDE3OjUzOjEzIE1FWiBzY2hyaWViIEFsYW4gU3Rlcm4gPHN0ZXJu QHJvd2xhbmQuaGFydmFyZC5lZHU+Ogo+VGhpcyB0aHJlYWQgaGFzIGJlZW4gaGFyZCB0byBmb2xs b3cuICBJJ2xsIHRyeSB0byBhbnN3ZXIgc29tZSBvZiB5b3VyCj5jb25jZXJucyBiZWxvdy4uLgo+ Cj5PbiBUaHUsIDMxIEphbiAyMDE5LCBKYW4tTWFyZWsgR2xvZ293c2tpIHdyb3RlOgo+Cj4+IEFt IDMxLjAxLjE5IHVtIDE1OjU2IHNjaHJpZWIgTWF0aGlhcyBOeW1hbjoKPj4gPiBPbiAzMS4wMS4y MDE5IDEyOjQyLCBKYW4tTWFyZWsgR2xvZ293c2tpIHdyb3RlOgo+PiA+PiBBbSAzMC4wMS4xOSB1 bSAxNzo1NiBzY2hyaWViIEphbi1NYXJlayBHbG9nb3dza2k6Cj4+ID4+PiBBbSAzMC4wMS4xOSB1 bSAxNTo1OCBzY2hyaWViIE1hdGhpYXMgTnltYW46Cj4+ID4+Pj4gT24gMzAuMDEuMjAxOSAxNDoz OCwgSmFuLU1hcmVrIEdsb2dvd3NraSB3cm90ZToKPj4gPj4+Pgo+PiA+Pj4+IFRoZSBodWItPmV2 ZW50IGJpdHMgYXJlIHNldCB3aGVuIHJvb3RodWIgcG9sbGluZyB0aW1lciBmdW5jdGlvbgo+Z2V0 cyBkYXRhIGZyb20KPj4gPj4+PiBodWJfc3RhdHVzX2RhdGEoKSwgd3JpdGVzIHRoZSBkYXRhIHRv IGEgc3RhdHVzIHVyYiwgYW5kIHJldHVybnMKPnRoZSB1cmIuCj4KPllvdSBoYXZlIGJlZW4gY29u Y2VudHJhdGluZyBvbiB3aGF0IGhhcHBlbnMgd2l0aCByb290IGh1YnMgCj4odW5kZXJzdGFuZGFi bGUsIHNpbmNlIHRoYXQncyB3aGVyZSB5b3VyIHByb2JsZW0gb2NjdXJzKS4gIEJ1dCBpbiBvcmRl cgo+Cj50byB1bmRlcnN0YW5kIHRoZSBjb2RlLCB5b3UgaGF2ZSB0byByZWFsaXplIHRoYXQgaXQg aXMgbWVhbnQgdG8gYXBwbHkgCj50byBfYWxsXyBodWJzLCBib3RoIHJvb3QgYW5kIGV4dGVybmFs Lgo+Cj4+ID4+Pj4gTm9ybWFsIG9wZXJhdGlvbjoKPj4gPj4+PiB1c2JfaGNkX3BvbGxfcmhfc3Rh dHVzKCnCoMKgwqDCoMKgwqDCoCAvLyByb290aHViIHBvbGxpbmcgdGltZXIKPmZ1bmN0aW9uCj4+ ID4+Pj4gwqDCoCBoY2QtPmRyaXZlci0+aHViX3N0YXR1c19kYXRhKGhjZCwgYnVmZmVyKcKgwqAg LT4KPnhoY2lfaHViX3N0YXR1c19kYXRhKCkKPj4gPj4+PiDCoMKgwqDCoCB4aGNpX2h1Yl9zdGF0 dXNfZGF0YSgpwqDCoMKgwqDCoCAvL3JldHVybnMgYnVmZmVyIHdpdGggYml0cyBzZXQKPmlmIGEg cG9ydCBuZWVkcyBhdHRlbnRpb24KPj4gPj4+PiDCoMKgIGlmIChidWZmZXIgJiYgdXJiKQo+PiA+ Pj4+IMKgwqDCoMKgIG1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmZmVyKcKgwqDCoMKg wqDCoCAvLyBjb3B5IGJ1ZmZlcgo+Yml0cyB0byB1cmIKPj4gPj4+PiDCoMKgwqDCoCB1c2JfaGNk X2dpdmViYWNrX3VyYih1cmIpwqAgLT4gaHViX2lyccKgwqDCoMKgwqAgLy8gY2FsbHMgdXJiCj5j b21wbGV0ZSBjYWxsYmFjayBmdW5jdGlvbgo+PiA+Pj4+IMKgwqDCoMKgwqDCoCBodWJfaXJxKCkK Pj4gPj4+PiDCoMKgwqDCoMKgwqDCoMKgIGh1Yi0+ZXZlbnRfYml0cyA9IHVyYi0+dHJhbnNmZXJf YnVmZmVyIC8vCj4+ID4+Pj4gwqDCoCBtb2RfdGltZXIodXNiX2hjZF9wb2xsX3JoX3N0YXR1cywg ZnV0dXJlKcKgwqDCoCAvLyByZXNjaGVkdWxlCj5yb290aHViIHBvbGxpbmcgdGltZXIKPj4gPj4+ Pgo+PiA+Pj4+IEknbSBndWVzc2luZyB1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKCkgbmV2ZXIgcHJv cGVybHkgY29tcGxldGVzIGEKPlVSQiBpbiB5b3VyIGNhc2UuCj4KPkl0J3Mgbm90IGp1c3QgYSBx dWVzdGlvbiBvZiBhIHRpbWVyIGV4cGlyaW5nLiAgSWYgd2Ugd2VyZSBkZWFsaW5nIHdpdGggCj5h biBleHRlcm5hbCBodWIsIHRoZSBjb2RlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiBhY3R1 YWwgVVNCIAo+dHJhbnNmZXIgaGFkIGNvbXBsZXRlZC4gIFRoZXJlJ3Mgbm8gd2F5IHRvIGF2b2lk IHRoYXQgd2FpdC4KPgo+PiA+Pj4+IFRoaXMgY291bGQgYmUgcG9zc2libGUgaWYgcm9vdGh1YiBp cyBwb2xsZWQgYmVmb3JlIHByb3Blcmx5Cj5yZXN1bWVkLCB0aGVuIHRoZSBVUkIgd291bGRuJ3QK Pj4gPj4+PiBiZSBhdmFpbGFibGUgeWV0LCBhbmQgbm8gaHViLT5ldmVudF9iaXRzIGFyZSBzZXQu Cj4+ID4+Pj4gQmVjYXVzZSBubyBiaXRzIGFyZSBzZXQgdGhlIGh1YiBzdGFydHMgc3VzcGVuZGlu ZyBhZ2FpbiBhZnRlcgo+cmVzdW1lLCBwcm9iYWJseSBiZWZvcmUgcm9vdGh1Ygo+PiA+Pj4+IHRp bWVyIHBvbGxzIHJvb3RodWIgYWdhaW4uCj4+ID4+Pj4gc3VzcGVuZCBmYWlscyB3aGVuIGl0IG1h bnVhbGx5IGNoZWNrcwo+aGNkLT5kcml2ZXItPmh1Yl9zdGF0dXNfZGF0YSgpIGZvciBhY3Rpdml0 eSwgYW5kCj4+ID4+Pj4gaXQgc3RhcnQgcmVzdW1pbmcgYWdhaW4sIGFuZCBjb250aW51ZXMgdGhp cyBpbiBhIGxvb3AuCj4+ID4+Pj4KPj4gPj4+PiBFaXRoZXIgcm9vdGh1YiBwb2xsaW5nIGlzIHN0 b3BwZWQgYXQgdGhlIHN1c3BlbmQgYXR0ZW1wdCwgb3IKPm1heWJlIGNvbnRpbnVvdXNseSByZXNj aGVkdWxlZAo+PiA+Pj4+IGludG8gdGhlIGZ1dHVyZSBiZWNhdXNlIGFzIGEgcGFydCBvZiBzdXNw ZW5kIGF0dGVtcHQvcmVzdW1lCj5sb29wLgo+PiA+Pgo+PiA+PiBTbyBhcyB5b3UgZXhwZWN0ZWQg dGhlIHN0YXR1c191cmIgaXMgYWx3YXlzIE5VTEwuCj4+ID4+Cj4+ID4+IEkgdHJpZWQgdG8gdW5k ZXJzdGFuZCBtb3JlIG9mIHRoZSBjb2RlIGJ5IGFkZGluZyBzb21lIG1vcmUgZGVidWcKPm1lc3Nh Z2UuCj4+ID4+Cj4+ID4+IEkgbG9va2VkIGF0IHVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViLCB3aGlj aCBpcyBjYWxsZWQgd2hlbiB3ZSBzZWUKPnRoZSAicmVzdW1lIHJvb3QgaHViIiBkbWVzZy4KPj4g Pj4gVGhpcyBqdXN0IHF1ZXVlcyB0aGUgaGNkLT53YWtldXBfd29yaywgc28gaW5kZWVkLCBpZgo+ dXNiX2hjZF9wb2xsX3JoX3N0YXR1cyBpcyBsYXRlciBjYWxsZWQsCj4+ID4+IHRoZSBodWIgbWln aHQgbm90IGhhdmUgcmVzdW1lZCB5ZXQgYW5kIHBvbGxpbmcgc3RhcnRzLiBTbyBteQo+c2ltcGxl IGFwcHJvYWNoIHdhcyB0byBhZGQgYQo+PiA+PiBmdW5jdGlvbiB0byBjYWxsIGZsdXNoX3dvcmso JmhjZC0+d2FrZXVwX3dvcmspIGJlZm9yZQo+dXNiX2hjZF9wb2xsX3JoX3N0YXR1cy4gQWxsIHZh cmlhbnRzIEkKPj4gPj4gdGVzdGVkIGtpbGxlZCB0aGUga2VybmVsLiBJIGFsc28gdHJpZWQgdG8g YWRkIGEgdWRlbGF5IHRvIG5vCj5hdmFpbC4KPj4gPiAKPj4gPiBJIHRoaW5rIHRoZSBpZGVhIGlz IHRoYXQgaWYgdXNiX2hjZF9wb2xsX3JoX3N0YXR1cygpIGZpbmRzIGEgcG9ydAo+dGhhdCBuZWVk cyBhdHRlbnRpb24sIGJ1dAo+PiA+IHRoZSBpcyBVUkIgbWlzc2luZywgdGhlbiBhIEhDRF9GTEFH X1BPTExfUEVORElORyBmbGFnIGlzIHNldC4KPj4gPiAKPj4gPiBUaGlzIGZsYWcgaXMgY2hlY2tl ZCBpbiByZXN1bWUgd2hlbiBzdWJtaXR0aW5nIHRoZSBodWIgVVJCLCBhbmQKPmlkZWEgaXMgdG8g cmVhY3Qgb24gaXQ6Cj4+ID4gCj4+ID4gaHViX2FjdGl2YXRlKEhVQl9SRVNVTUUpCj4+ID4gwqDC oMKgIHVzYl9zdWJtaXRfdXJiKGh1Yi0+dXJiKQo+PiA+IMKgwqDCoMKgIHJoX3VyYl9lbnF1ZXVl KCkKPj4gPiDCoMKgwqDCoMKgwqAgcmhfcXVldWVfc3RhdHVzKCkKPj4gPiDCoMKgwqDCoMKgwqDC oMKgwqAgaGNkLT5zdGF0dXNfdXJiID0gdXJiOwo+PiA+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAo SENEX1BPTExfUEVORElORyhoY2QpCj4+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vZF90 aW1lcigmaGNkLT5yaF90aW1lciwgamlmZmllcyk7Cj4+ID4gCj4+ID4gSXQgdHJpZXMgdG8gdHJp Z2dlciB1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKCkgaW1tZWRpYXRlbHkgYnkKPm1vZGlmeWluZyB0 aGUgdGltZXIsCj4+ID4gYnV0IGZyb20geW91ciBsb2dzIGl0IHNlZW1zIHRoYXQgaXQncyBub3Qg ZmFzdCBlbm91Z2g6Cj4+ID4gCj4+ID4gW8KgIDQ4NS4zMDE4MDZdIHVzYmNvcmU6aHViX3Jlc3Vt ZTogaHViIDItMDoxLjA6IGh1Yl9yZXN1bWUKPj4gPiBbwqAgNDg1LjMwMTgxOV0geGhjaV9oY2Q6 eGhjaV9odWJfY29udHJvbDogeGhjaV9oY2QgMDAwMDowMDoxNC4wOgo+Z2V0IHBvcnQgc3RhdHVz LCBhY3R1YWwgcG9ydCAwIHN0YXR1c8KgID0gMHgyYTAKPj4gPiDCoC4uLgo+PiA+IFvCoCA0ODUu MzAxOTM2XSB1c2Jjb3JlOmh1Yl9ldmVudDogaHViIDItMDoxLjA6IHN0YXRlIDcgcG9ydHMgNiBj aGcKPjAwMDAgZXZ0IDAwMDAKPj4gPiBbwqAgNDg1LjMwMTk1Ml0geGhjaV9oY2Q6eGhjaV9odWJf Y29udHJvbDogeGhjaV9oY2QgMDAwMDowMDoxNC4wOgo+c2V0IHBvcnQgcmVtb3RlIHdha2UgbWFz aywgYWN0dWFsIHBvcnQgMCBzdGF0dXPCoCA9IDB4ZTAwMDJhMAo+PiA+IC4uLgo+PiA+IFvCoCA0 ODUuMzAyMDM0XSB1c2Jjb3JlOmh1Yl9zdXNwZW5kOiBodWIgMi0wOjEuMDogaHViX3N1c3BlbmQK Pj4gPiBbwqAgNDg1LjMwMjA0OF0gdXNiY29yZTpoY2RfYnVzX3N1c3BlbmQ6IHVzYiB1c2IyOiBi dXMgYXV0by1zdXNwZW5kLAo+d2FrZXVwIDEKPj4gPiBbwqAgNDg1LjMwMjA2N10gdXNiY29yZTpo Y2RfYnVzX3N1c3BlbmQ6IHVzYiB1c2IyOiBzdXNwZW5kIHJhY2VkCj53aXRoIHdha2V1cCBldmVu dAo+PiA+IFvCoCA0ODUuMzAyMDcxXSB1c2Jjb3JlOmhjZF9idXNfcmVzdW1lOiB1c2IgdXNiMjog dXNiIGF1dG8tcmVzdW1lCj4+ID4gW8KgIDQ4NS4zMDk3NjVdIHVzYiB1c2IyOiB1c2JfaGNkX3Bv bGxfcmhfc3RhdHVzLCBsZW5ndGggMSwKPmhjZC0+ZmxhZ3MgMHgxOGQsIHN0YXR1c191cmIgTlVM TAo+PiA+IAo+PiA+IGhjZC0+ZmxhZ3MgMHgxOGQgbWVhbnMgSENEX0ZMQUdfUE9MTF9QRU5ESU5H wqAgd2FzIHNldCwgYnV0Cj5odWJfZXZlbnQoKSB3b3JrcXVldWUgYW5kIGh1Yl9zdXNwZW5kKCkK Pj4gPiBhcmUgcnVuIGJlZm9yZSBwb2xsaW5nIHRoZSByb290IGh1YiwgYW5kIEkgZ3Vlc3MgdGhl IFVSQiBnZXRzCj5yZW1vdmVkIGF0IHNvbWUgcG9pbnQgZHVyaW5nIHN1c3BzZW5kLgo+PiA+IAo+ PiA+IFRoaXMgdGhlbiBnb2VzIG9uIGluIGEgbG9vcC4KPj4gPiAKPj4gPiBZb3UgY291bGQgdHJ5 IHJ1bm5pbmcgdXNiX2hjZF9wb2xsX3JoX3N0YXR1cygpIGRpcmVjbHkgaW5zdGVhZCBvZgo+anVz dCBraWNraW5nIHRoZSB0aW1lciBhbmQgc2VlIGlmCj4+ID4gaXQgd29ya3M6Cj4+ID4gCj4+ID4g QEAgLTgyMiw4ICs4MjYsMTEgQEAgc3RhdGljIGludCByaF9xdWV1ZV9zdGF0dXMgKHN0cnVjdCB1 c2JfaGNkCj4qaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCj4+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIG1vZF90aW1lcigmaGNkLT5yaF90aW1lciwgKGppZmZpZXMvKEhaLzQpICsgMSkg Kgo+KEhaLzQpKTsKPj4gPiDCoAo+PiA+IMKgwqDCoMKgwqDCoMKgIC8qIElmIGEgc3RhdHVzIGNo YW5nZSBoYXMgYWxyZWFkeSBvY2N1cnJlZCwgcmVwb3J0IGl0IEFTQVAKPiovCj4+ID4gLcKgwqDC oMKgwqDCoCBlbHNlIGlmIChIQ0RfUE9MTF9QRU5ESU5HKGhjZCkpCj4+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbW9kX3RpbWVyKCZoY2QtPnJoX3RpbWVyLCBqaWZmaWVzKTsKPj4g PiArwqDCoMKgwqDCoMKgIGVsc2UgaWYgKEhDRF9QT0xMX1BFTkRJTkcoaGNkKSkgewo+PiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZoY2Rf cm9vdF9odWJfbG9jaywgZmxhZ3MpOwo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHVzYl9oY2RfcG9sbF9yaF9zdGF0dXMoaGNkKTsKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gMDsKPj4gPiArwqDCoMKgwqDCoMKgIH0KPj4gPiDCoMKgwqDCoMKgwqDC oCByZXR2YWwgPSAwOwo+PiA+IMKgIGRvbmU6Cj4+ID4gwqDCoMKgwqDCoMKgwqAgc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSAoJmhjZF9yb290X2h1Yl9sb2NrLCBmbGFncyk7Cj4+ID4gCj4+ID4gCj4+ ID4gSSBkaWRuJ3QgY2hlY2sgbG9ja2luZyBvciBydW5uaW5nIGNvbnRleHRzIGlmIGl0J3Mgb2sg dG8gZG8gdGhpcywKPnRoZXJlJ3MgY291bGQgYmUgYSByZWFzb24KPj4gPiB3aHkgaXQgd2Fzbid0 IGRvbmUgbGlrZSB0aGlzIGluIHRoZSBmaXJzdCBwbGFjZS4KPj4gPiBXb3J0aCBhIHNob3Qgc3Rp bGwuCj4KPkl0J3Mgbm90IGEgZ29vZCBpZGVhLiAgRGVmZXJyaW5nIHRoZSBvcGVyYXRpb24gdG8g YSB0aW1lciBrZWVwcyB0aGluZ3MKPmRlY291cGxlZCAocnVubmluZyBpbiBkaWZmZXJlbnQgY29u dGV4dHMgd2l0aCBkaWZmZXJlbnQgc3RhY2tzKTsgZG9pbmcKPmEgZGlyZWN0IGNhbGwgY291bGQg Z2V0IGludG8gYSBsb29wIG9mIG5lc3RlZCBjYWxscyB0aGF0IHdvdWxkIGtlZXAKPmdvaW5nIGRl ZXBlciBhbmQgZGVlcGVyIHVudGlsIGl0IGV4aGF1c3RlZCB0aGUga2VybmVsIHN0YWNrLgo+Cj5Q ZXJoYXBzIHlvdSBkaWRuJ3Qgbm90aWNlIHRoYXQgYXQgdGhlIGVuZCwgaHViX2FjdGl2YXRlKCkg Y2FsbHMKPmtpY2tfaHViX3dxKCkuICBUaGF0IHJvdXRpbmUgY2FsbHMKPnVzYl9hdXRvcG1fZ2V0 X2ludGVyZmFjZV9ub19yZXN1bWUoKSwgd2hpY2ggd2lsbCBwcmV2ZW50IHRoZSBodWIgdHJpbQo+ c3VzcGVuZGluZyB1bnRpbCBodWJfZXZlbnQoKSBjYWxscyB1c2JfYXV0b3BtX3B1dF9pbnRlcmZh Y2UoKS4gIAo+VGhlcmVmb3JlIHRvIG1ha2UgdGhpbmdzIHdvcmsgY29ycmVjdGx5LCBodWJfYWN0 aXZhdGUoKSBoYXMgdG8gZW5zdXJlCj50aGF0IHRoZSBodWItPmV2ZW50X2JpdHMgYW5kIGh1Yi0+ Y2hhbmdlX2JpdHMgZmllbGRzIGFyZSBzZXQgY29ycmVjdGx5LAo+c28gdGhhdCBodWJfZXZlbnQo KSB3aWxsIGRvIHRoZSByaWdodCB0aGluZyB3aGVuIGl0IHJ1bnMgKGJlZm9yZSB0aGUgCj5odWIg aXMgYWxsb3dlZCB0byBnbyBiYWNrIGludG8gc3VzcGVuZCkuCj4KPlRoZXJlZm9yZSBpZiBhIHBv cnQgaXMgaW4gYSBmdW5ueSBzdGF0ZSwgaHViX2FjdGl2YXRlKCkgc2hvdWxkIGRldGVjdAo+dGhp cyBhbmQgc2V0IG9uZSBvZiB0aGVzZSBiaXQgZmllbGRzIGFwcHJvcHJpYXRlbHkuICBUaGF0J3Mg b25lIHJlYXNvbgo+d2h5IGl0IGNvbnRhaW5zIGFsbCB0aG9zZSB0ZXN0cyBmb3IgcG9ydHN0YXR1 cyBhbmQgcG9ydGNoYW5nZS4gIElmIGEKPm1pc3NpbmcgdGVzdCBuZWVkcyB0byBiZSBhZGRlZCwg dGhhdCdzIHdoYXQgeW91IHNob3VsZCBkby4KClRoYXQgd291bGQgYmUgbGlrZSB0aGUgdjMgb2Yg bXkgcGF0Y2gsIHdoaWNoIHN0YXJ0ZWQgdGhpcyB0aHJlYWQgYW5kIGRldGVjdGVkIGFuZCBoYW5k bGVkIHRoZSB3YXJtLXJlc2V0IHJlcXVlc3Qgb2YgdGhlIHBvcnQgaW4gaHViX2FjdGl2YXRlKCkg b24gcmVzdW1lLiBNYXliZSB3ZSBjYW4gc2V0IHNvbWUgb2YgdGhlc2UgYml0cyBpbnN0ZWFkLCBv ciBpdHMgYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSBodWJfcG9ydF9yZXNldCgpIGNhbGw7IGhhdmUg dG8gY2hlY2suCgpJIGFsc28gaW5jbHVkZWQgYSBwYXRjaCBpbiBzb21lIHByZXZpb3VzIG1haWwg YWZ0ZXIgTWF0aGlhcyBOeW1hbiBjb21tZW50ZWQgYWJvdXQgdGhlIE5VTEwgc3RhdHVzX3VyYiwg d2hpY2ggYWRkZWQgdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyBkaXJlY3RseSBhZnRlciB0aGUgcm9v dCBodWJzIHVzYl9yZW1vdGVfd2FrZXVwIGNhbGwuCgpBIGxvdCBvZiBzdHVmZiBpcyBkZWZlcnJl ZCB2aWEgd29ya3F1ZXVlIG9yIHBvbGxlZC4gQXMgSSB1bmRlcnN0YW5kIGl0IC0gaW4gbXkgY2Fz ZSAtIHJlc3VtZSwgc3VzcGVuZCBhbmQgc3RhdHVzIHJhY2UgYW5kIG1pc3MgZWFjaCBvdGhlciBp biBzb21lIGVuZGxlc3MgbG9vcC4KCkFzIHRoaW5ncyBhcmUsIEkganVzdCBoYXZlIHRoZSBuZXcg ZGVza3RvcCBIV3MgYW5kIGEgc2luZ2xlIHVzYi1jIGRldmljZSB0byB0ZXN0IHRoZSBwb3J0cyBv ZiB0aGVtLiBJIGhhdmUgbm8gaWRlYSB3aGF0IHdvdWxkIGhhcHBlbiB3aXRoIGFuIGFkZGl0aW9u YWwgbm9uLXJvb3QgaHViLCBidXQgSSBjYW4gcHJvYmFibHkgb3JnYW5pemUgb25lLCBpZiBJIGhh dmUgdG8gdGVzdCBpdC4KCkphbi1NYXJlawo=