From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 53E406E0A2 for ; Sat, 15 Sep 2018 00:04:42 +0000 (UTC) Date: Fri, 14 Sep 2018 17:04:41 -0700 From: Tarun Vyas Message-ID: <20180915000441.GA65070@otc-chromeosbuild-5> References: <20180901041806.2627-1-rodrigo.vivi@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Subject: Re: [igt-dev] [PATCH i-g-t 1/6] tools: Add a simple tool to read/write/decode dpcd registers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Dhinakaran Pandiyan Cc: igt-dev@lists.freedesktop.org, Rodrigo Vivi List-ID: T24gVHVlLCBTZXAgMDQsIDIwMTggYXQgMDU6NDg6MDJQTSAtMDcwMCwgRGhpbmFrYXJhbiBQYW5k aXlhbiB3cm90ZToKPiBPbiBGcmksIDIwMTgtMDgtMzEgYXQgMjE6MTggLTA3MDAsIFJvZHJpZ28g Vml2aSB3cm90ZToKPiA+IEZyb206IFRhcnVuIFZ5YXMgPHRhcnVuLnZ5YXNAaW50ZWwuY29tPgo+ ID4gCj4gPiBUaGlzIHRvb2wgc2VydmVzIGFzIGEgd3JhcHBlciBhcm91bmQgdGhlIGNvbnN0cnVj dHMgcHJvdmlkZWQgYnkgdGhlCj4gPiBkcm1fZHBjZF9hdXhfZGV2IGtlcm5lbCBtb2R1bGUgYnkg d29ya2luZyBvbiB0aGUgL2Rldi9kcm1fZHBfYXV4W25dCj4gPiBkZXZpY2VzIGNyZWF0ZWQgYnkg dGhlIGtlcm5lbCBtb2R1bGUuCj4gPiBJdCBzdXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5nIGRw Y2QgcmVnaXN0ZXJzIG9uIHRoZSBjb25uZWN0ZWQgYXV4Cj4gPiBjaGFubmVscy4KPiA+IEluIHRo ZSBmb2xsb3ctdXAgcGF0Y2gsIHN1cHBvcnQgZm9yIGRlY29kaW5nIHRoZXNlIHJlZ2lzdGVycyB3 aWxsIGJlCj4gPiBhZGRlZCB0byBmYWNpbGF0ZSBkZWJ1Z2dpbmcgcGFuZWwgcmVsYXRlZCBpc3N1 ZXMuCj4gPiAKPiA+IHYyOiAoRml4ZXMgYnkgUm9kcmlnbyBidXQgbm8gZnVuY3Rpb25hbCBjaGFu Z2VzIHlldCk6Cj4gPiAgICAgLSBJbmRlbnRhdGlvbnMsIFR5cG8sIE1pc3NlZCBzcGFjZXMKPiA+ ICAgICAtIFJlbW92aW5nIG1lbnRpb25pbmcgdG8gZGVjb2RlIGFuZCBzcGVjIHRoYXQgaXMgbm90 IGltcGxlbWVudGVkCj4gPiB5ZXQuCj4gPiAgICAgLSBBZGQgTWFrZWZpbGUuc291cmNlcyBiYWNr Cj4gPiAgICAgLSBNaXNzZWQgcy9wcmludGYvaWd0X3dhcm4KPiA+IAo+ID4gU3VnZ2VzdGVkLWJ5 OiBEaGluYWthcmFuIFBhbmRpeWFuIDxkaGluYWthcmFuLnBhbmRpeWFuQGludGVsLmNvbT4KPiA+ IFNpZ25lZC1vZmYtYnk6IFRhcnVuIFZ5YXMgPHRhcnVuLnZ5YXNAaW50ZWwuY29tPgo+ID4gU2ln bmVkLW9mZi1ieTogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgo+ID4gLS0t Cj4gPiAgdG9vbHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4gPiAgdG9vbHMvZHBjZF9yZWcu YyAgICAgICB8IDIwOQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiA+ICB0b29scy9tZXNvbi5idWlsZCAgICAgIHwgICAxICsKPiA+ICAzIGZpbGVzIGNoYW5n ZWQsIDIxMSBpbnNlcnRpb25zKCspCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2RwY2Rf cmVnLmMKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMgYi90b29s cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiBpbmRleCBhYmQyM2EwZi4uNTA3MDZmNDEgMTAwNjQ0Cj4g PiAtLS0gYS90b29scy9NYWtlZmlsZS5zb3VyY2VzCj4gPiArKysgYi90b29scy9NYWtlZmlsZS5z b3VyY2VzCj4gPiBAQCAtNyw2ICs3LDcgQEAgbm9pbnN0X1BST0dSQU1TID0JCVwKPiA+ICAKPiA+ ICB0b29sc19wcm9nX2xpc3RzID0JCVwKPiA+ICAJaWd0X3N0YXRzCQlcCj4gPiArCWRwY2RfcmVn CQlcCj4gPiAgCWludGVsX2F1ZGlvX2R1bXAJXAo+ID4gIAlpbnRlbF9yZWcJCVwKPiA+ICAJaW50 ZWxfYmFja2xpZ2h0CQlcCj4gPiBkaWZmIC0tZ2l0IGEvdG9vbHMvZHBjZF9yZWcuYyBiL3Rvb2xz L2RwY2RfcmVnLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMC4u MzlkZGUyYzkKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL3Rvb2xzL2RwY2RfcmVnLmMKPiA+ IEBAIC0wLDAgKzEsMjA5IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRl bCBDb3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPiA+IG9idGFpbmluZyBhCj4gPiArICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZQo+ID4gIlNvZnR3YXJlIiksCj4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQKPiA+IGxpbWl0YXRpb24KPiA+ICsg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwKPiA+IHN1YmxpY2Vuc2UsCj4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20KPiA+IHRoZQo+ID4gKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCj4g PiBjb25kaXRpb25zOgo+ID4gKyAqCj4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZwo+ID4gdGhlIG5leHQKPiA+ICsg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwKPiA+IHBvcnRpb25zIG9mIHRoZQo+ID4gKyAqIFNvZnR3YXJlLgo+ID4gKyAqCj4gPiArICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsCj4gPiBFWFBSRVNTIE9SCj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+ID4gTUVSQ0hBTlRBQklMSVRZLAo+ID4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTwo+ID4gRVZFTlQgU0hBTEwKPiA+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwo+ID4gT1IgT1RIRVIKPiA+ICsg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwKPiA+IEFSSVNJTkcgRlJPTSwKPiA+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCj4gPiBERUFMSU5HUyBJTiBU SEUKPiA+ICsgKiBTT0ZUV0FSRS4KPiA+ICsgKgo+ID4gKyAqIERQQ0QgcmVnaXN0ZXIgcmVhZC93 cml0ZSB0b29sCj4gPiArICogVGhpcyB0b29sIHdyYXBzIGFyb3VuZCBEUk1fRFBfQVVYX0RFViBt b2R1bGUgdG8gcHJvdmlkZSBEUENECj4gPiByZWdpc3RlciByZWFkCj4gPiArICogYW5kIHdyaXRl LCBzbyBDT05GSUdfRFJNX0RQX0FVWF9ERVYgbmVlZHMgdG8gYmUgc2V0Lgo+ID4gKyAqLwo+ID4g Kwo+ID4gKyNpbmNsdWRlICJpZ3RfY29yZS5oIgo+ID4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ID4g KyNpbmNsdWRlIDxmY250bC5oPgo+ID4gKwo+ID4gKyNkZWZpbmUgSU5WQUxJRAkweGZmCj4gPiAr Cj4gPiArY29uc3QgY2hhciBhdXhfZGV2W10gPSAiL2Rldi9kcm1fZHBfYXV4IjsKPiA+ICsKPiA+ ICtzdGF0aWMgdm9pZCBwcmludF91c2FnZShjaGFyICp0b29sLCBpbnQgaGVscCkKPiA+ICt7Cj4g PiArCWlndF9pbmZvKCJEUENEIHJlZ2lzdGVyIHJlYWQgYW5kIHdyaXRlIHRvb2xcblxuIik7Cj4g PiArCWlndF9pbmZvKCJUaGlzIHRvb2wgcmVxdWlyZXMgQ09ORklHX0RSTV9EUF9BVVhfQ0hBUkRF VlxuIgo+ID4gKwkJICJ0byBiZSBzZXQgaW4gdGhlIGtlcm5lbCBjb25maWcuXG5cbiIpOwo+ID4g KwlpZ3RfaW5mbygiVXNhZ2U6ICVzIFtPUFRJT04gLi4uXSBDT01NQU5EXG5cbiIsIHRvb2wpOwo+ ID4gKwlpZ3RfaW5mbygiQ09NTUFORCBpcyBvbmUgb2Y6XG4iKTsKPiA+ICsJaWd0X2luZm8oIiAg cmVhZDoJUmVhZCBbY291bnRdIGJ5dGVzIGRwY2QgcmVnIGF0IGFuCj4gPiBvZmZzZXRcbiIpOwo+ ID4gKwlpZ3RfaW5mbygiICB3cml0ZToJV3JpdGUgYSBkcGNkIHJlZyBhdCBhbgo+ID4gb2Zmc2V0 XG5cbiIpOwo+ID4gKwlpZ3RfaW5mbygiT3B0aW9ucyBmb3IgdGhlIGFib3ZlIENPTU1BTkRTIGFy ZVxuIik7Cj4gPiArCWlndF9pbmZvKCIgLS1kZXZpY2U9REVWSUQgCUF1eCBkZXZpY2UgaWQsIGFz IGxpc3RlZAo+ID4gaW4gL2Rldi9kcm1fZHBfYXV4X2RldltuXVxuIik7Cj4gPiArCWlndF9pbmZv KCIgLS1vZmZzZXQ9UkVHX0FERFIJRFBDRCByZWdpc3RlciBvZmZzZXQgaW4KPiA+IGhleFxuIik7 Cj4gPiArCWlndF9pbmZvKCIgLS1jb3VudD1CWVRFUwlGb3IgcmVhZHMsIHNwZWNpZnkgbnVtYmVy IG9mCj4gPiBieXRlcyB0byBiZSByZWFkIGZyb20gdGhlIG9mZnNldFxuIik7Cj4gPiArCWlndF9p bmZvKCIgLS12YWw9QllURQkJRm9yIHdyaXRlcywgc3BlY2lmeSBhCj4gPiBCWVRFIHNpemVkIHZh bHVlIHRvIGJlIHdyaXR0ZW5pXG5cbiIpOwo+IEkgZGlkbid0IGdldCB0aGlzLiBJc24ndCB0aGUg c2l6ZSBhbHdheXMgMSBieXRlPwo+IAo+ID4gKwo+ID4gKwlpZ3RfaW5mbygiIC0taGVscDogcHJp bnQgdGhlIHVzYWdlXG4iKTsKPiA+ICsKPiA+ICsJZXhpdCgoaGVscCA9PSAxKT8gRVhJVF9TVUND RVNTIDogRVhJVF9GQUlMVVJFKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkcGNkX3Jl YWQoY2hhciAqZGV2aWNlLCBjb25zdCB1aW50MzJfdCBvZmZzZXQsIHNpemVfdAo+ID4gY291bnQp Cj4gPiArewo+ID4gKwlpbnQgZmQsIHJldCwgaTsKPiA+ICsJdm9pZCAqYnVmID0gbWFsbG9jKHNp emVvZih1aW50OF90KSAqIGNvdW50KTsKPiA+ICsKPiA+ICsJaWYgKE5VTEwgIT0gYnVmKQo+ID4g KwkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKHVpbnQ4X3QpICogY291bnQpOwo+IGNhbGxvYygpCj4g Cj4gPiArCWVsc2Ugewo+ID4gKwkJaWd0X3dhcm4oIkNhbid0IGFsbG9jYXRlIHJlYWQgYnVmZmVy XG4iKTsKPiA+ICsJCXJldHVybiBFWElUX0ZBSUxVUkU7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZmQg PSBvcGVuKGRldmljZSwgT19SRE9OTFkpOwo+ID4gKwlpZiAoZmQgPiAwKSB7Cj4gMCBpcyB2YWxp ZCwgaXNuJ3QgaXQ/Cj4gCj4gPiArCQlyZXQgPSBwcmVhZChmZCwgYnVmLCBjb3VudCwgb2Zmc2V0 KTsKPiA+ICsJCWNsb3NlKGZkKTsKPiA+ICsJCWlmIChyZXQgIT0gY291bnQpIHsKPiA+ICsJCQlp Z3Rfd2FybigiRmFpbGVkIHRvIHJlYWQgZnJvbSAlcyBhdXggZGV2aWNlCj4gPiAtIGVycm9yICVz XG4iLCBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArCQkJcmV0ID0gRVhJVF9GQUlMVVJF Owo+ID4gKwkJCWdvdG8gb3V0Owo+ID4gKwkJfQo+IAo+IENoZWNrIGVycm5vIGFuZCByZXR1cm4g dG8gdGhlIHVzZXIuCj4gCj4gPiArCj4gPiArCQlpZ3RfaW5mbygiUmVhZCAlenUgYnl0ZShzKSBz dGFydGluZyBhdCBvZmZzZXQKPiA+ICV4XG5cbiIsIGNvdW50LCBvZmZzZXQpOwo+IGlndF9pbmZv KCkgaXNuJ3QgbmVlZGVkLCBhbnkgcmVhc29uIG5vdCB0byBwcmludCB0byBzdGRvdXQgZGlyZWN0 bHk/Cj4gQXBwbGllcyB0byBpZ3RfZm9vKCkgZnVuY3Rpb25zIHlvdSBhcmUgdXNpbmcuCj4gCj4g PiArCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKPiA+ICsJCQlpZ3RfaW5mbygiJXhcbiIs ICooKCh1aW50OF90ICopKGJ1ZikpICsgaSkpOwo+ID4gKwl9Cj4gPiArCWVsc2Ugewo+ID4gKwkJ aWd0X3dhcm4oIkZhaWxlZCB0byBvcGVuICVzIGF1eCBkZXZpY2UgLSBlcnJvcjoKPiA+ICVzXG4i LCBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArCQlyZXQgPSBFWElUX0ZBSUxVUkU7Cj4g PiArCX0KPiA+ICtvdXQ6Cj4gPiArCWZyZWUoYnVmKTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBkcGNkX3dyaXRlKGNoYXIgKmRldmljZSwgY29uc3QgdWlu dDMyX3Qgb2Zmc2V0LCBjb25zdAo+ID4gdWludDhfdCAqdmFsKQo+ID4gK3sKPiA+ICsJaW50IGZk LCByZXQ7Cj4gPiArCj4gPiArCWZkID0gb3BlbihkZXZpY2UsIE9fUkRXUik7Cj4gPiArCWlmIChm ZCA+IDApIHsKPiA+ICsJCXJldCA9IHB3cml0ZShmZCwgKGNvbnN0IHZvaWQgKil2YWwsIHNpemVv Zih1aW50OF90KSwKPiAgCj4gV2h5IHBhc3MgdmFsIGFzIGEgcG9pbnRlciBpZiBpdCdzIGEganVz dCBhIDEgYnl0ZSB2YWx1ZT8KPiAKPiAKPiA+IG9mZnNldCk7Cj4gCj4gT2Zmc2V0IG5lZWRzIGNo ZWNrcyBmb3IgYm91bmRhcmllcy4KPgp2MyBrZWVwcyB0aGlzIGF0IDB4ZjAyZmYgcGVyIHRoZSBE UCBzcGVjLiAKPiA+ICsJCWNsb3NlKGZkKTsKPiA+ICsJCWlmIChyZXQgPCAwKSB7Cj4gPiArCQkJ aWd0X3dhcm4oIkZhaWxlZCB0byB3cml0ZSB0byAlcyBhdXggZGV2aWNlIC0KPiA+IGVycm9yICVz XG4iLCBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArCQkJcmV0ID0gRVhJVF9GQUlMVVJF Owo+ID4gKwkJCWdvdG8gb3V0Owo+ID4gKwkJfQo+ID4gKwkJcmV0ID0gZHBjZF9yZWFkKGRldmlj ZSwgb2Zmc2V0LCBzaXplb2YodWludDhfdCkpOwo+ID4gKwl9Cj4gV2h5IHJlYWQgYmFjaz8gTGV0 IHRoZSB1c2VyIGRlY2lkZSB0byByZWFkIGJhY2suCj4gCj4gPiArCWVsc2Ugewo+ID4gKwkJaWd0 X3dhcm4oIkZhaWxlZCB0byBvcGVuICVzIGF1eCBkZXZpY2UgLSBlcnJvcjoKPiA+ICVzXG4iLCBk ZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArCQlyZXQgPSBFWElUX0ZBSUxVUkU7Cj4gPiAr CX0KPiA+ICtvdXQ6Cj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKPiA+ICt7Cj4gPiArCWNoYXIgZGV2X25hbWVbMjBdOwo+ ID4gKwlpbnQgcmV0LCBkZXZpZCwgaGVscF9mbGc7Cj4gPiArCXVpbnQzMl90IG9mZnNldDsKPiA+ ICsJdWludDhfdCB2YWw7Cj4gPiArCXNpemVfdCBjb3VudDsKPiA+ICsKPiA+ICsJZW51bSBjb21t YW5kIHsKPiA+ICsJCUlOViA9IC0xLAo+ID4gKwkJUkVBRCA9IDIsCj4gPiArCQlXUklURSwKPiA+ ICsJfSBjbWQgPSBJTlY7Cj4gPiArCj4gPiArCXN0cnVjdCBvcHRpb24gbG9uZ29wdHMgW10gPSB7 Cj4gPiArCQl7Cj4gPiAiY291bnQiLCAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCAgICAgIE5VTEws ICAgICAgJ2MnIH0sCj4gPiArCQl7ICJkZXZpY2UiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwg Cj4gCj4gTWFrZSB0aGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0IHRvIGRldmljZSBJRCAwPwp2MyBv ZiB0aGlzIHBhdGNoIGtlZXBzIHRoZSBhcmd1bWVudCBhcyByZXF1aXJlZCwgYnV0IGlmIHRoaXMg b3B0aW9uIGlzIG5vdCBwYXNzZWQgYXQgYWxsIHRoZW4gaXQgZGVmYXVsdHMgdG8gMC4KPiA+ICAg ICAgJ2QnIH0sCj4gPiArCQl7ICJoZWxwIiwgCW5vX2FyZ3VtZW50LCAJCSZoZWxwCj4gCQkJIF4J CSAgICBeIHdoaXRlIHNwYWNlCj4gPiBfZmxnLCAgMiAgfSwKPiBXaHkgbm90ICdoJz8KPiAKPiA+ ICsJCXsgIm9mZnNldCIsCXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLAo+IAkJICAib2Zmc2V0IGlu IGhleCIgPwo+ID4gCSAgICdvJyB9LAo+ID4gKwkJeyAidmFsIiwJcmVxdWlyZWRfYXJndW1lbnQs CU5VTEwsCQo+ID4gICAgJ3YnIH0sCj4gCQkidmFsdWUgaW4gaGV4Igo+ID4gKwkJeyAwIH0KPiA+ ICsJfTsKPiA+ICsKPiA+ICsJb2Zmc2V0ID0gdmFsID0gY291bnQgPSBJTlZBTElEOwo+ID4gKwlk ZXZpZCA9IC0xOwo+ID4gKwo+ID4gKwl3aGlsZSAoKHJldCA9IGdldG9wdF9sb25nKGFyZ2MsIGFy Z3YsICItOmM6ZDpvOnM6OnY6IiwKPiA+IGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpIHsKPiA+ICsJ CXN3aXRjaCAocmV0KSB7Cj4gPiArCQljYXNlICdjJzoKPiA+ICsJCQljb3VudCA9IHN0cnRvdWwo b3B0YXJnLCBOVUxMLCAxMCk7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQljYXNlICdkJzoKPiA+ICsJ CQlkZXZpZCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAxMCk7Cj4gPiArCQkJYnJlYWs7Cj4gPiAr CQljYXNlICdvJzoKPiA+ICsJCQlvZmZzZXQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMTYpOwo+ ID4gKwkJCWJyZWFrOwo+ID4gKwkJY2FzZSAndic6Cj4gPiArCQkJdmFsID0gc3RydG91bChvcHRh cmcsIE5VTEwsIDE2KTsKPiBDaGVjayBmb3IgZXJyb3IgcmV0dXJucy4KPiAKPiA+ICsJCQlicmVh azsKPiA+ICsJCS8qIEZhbGwgdGhyb3VnaCBmb3IgLS1oZWxwICovCj4gVGhlcmUgaXMgbm8gZmFs bCB0aHJvdWdoIGhlcmUgXgo+IAo+ID4gKwkJY2FzZSAwOgo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJ LyogQ29tbWFuZCBwYXJzaW5nICovCj4gPiArCQljYXNlIDE6Cj4gV2hlbiBpcyAxIHJldHVybmVk Pwo+IAoxIHdpbGwgYmUgcmV0dXJuZWQgZm9yIGFsbCAqbm9uLW9wdGlvbiogYXJndW1lbnRzLCB3 aGljaCBpcyB3aGF0IGlzIGludGVuZGVkIGZvciBjb21tYW5kcyBzdWNoIGFzIHJlYWQsIHdyaXRl LCBkZWNvZGUsIGR1bXAgZXRjLgo+ID4gKwkJCWlmIChzdHJjbXAob3B0YXJnLCAicmVhZCIpID09 IDApCj4gPiArCQkJCWNtZCA9IFJFQUQ7Cj4gPiArCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywg IndyaXRlIikgPT0gMCkKPiA+ICsJCQkJY21kID0gV1JJVEU7Cj4gPiArCQkJYnJlYWs7Cj4gPiAr CQljYXNlICc6JzoKPiA+ICsJCQlpZ3Rfd2FybigiVGhlIC0lYyBvcHRpb24gb2YgJXMgcmVxdWly ZXMgYW4gCj4gCj4gV2h5IHVzZSBpZ3Rfd2FybigpIGluc2lkZSBhIHRvb2w/IFRoYXQgaXMgbWVh bnQgZm9yIHRlc3RzLAo+IHByaW50X3VzYWdlKCkgaXMgc3VmZmljaWVudCBoZXJlLgo+IAo+ID4g YXJndW1lbnRcbiIsCj4gPiArCQkJCSBvcHRvcHQsIGFyZ3ZbMF0pOwo+ID4gKwkJCXByaW50X3Vz YWdlKGFyZ3ZbMF0sIDApOwo+IAo+IFRoZSBzZWNvbmQgYXJndW1lbnQgbG9va3Mgb2RkLCBwcmlu dF91c2FnZSgpIGJhcmVseSBkb2VzIGFueXRoaW5nIHdpdGgKPiBpdC4gCj4gCj4gCj4gPiArCQlj YXNlICc/JzoKPiA+ICsJCWRlZmF1bHQgOgo+ID4gKwkJCWlndF93YXJuKCIlcyAtIG9wdGlvbiAl YyBpcyBpbnZhbGlkXG4iLAo+ID4gYXJndlswXSwKPiA+ICsJCQkJIG9wdG9wdCk7Cj4gPiArCQkJ cHJpbnRfdXNhZ2UoYXJndlswXSwgMCk7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYg KGhlbHBfZmxnID09IDIpCj4gPiArCQlwcmludF91c2FnZShhcmd2WzBdLCAxKTsKPiA+ICsKPiA+ ICsJaWYgKGRldmlkID09IC0xIHx8IG9mZnNldCA9PSBJTlZBTElEKSB7Cj4gPiArCQlpZ3Rfd2Fy bigiQXV4IGRldmljZSBpZCBhbmQvb3Igb2Zmc2V0IG1pc3NpbmdcbiIpOwo+IFVzaW5nIGEgZGVm YXVsdCBkZXYgSUQgd2lsbCBhdm9pZCB0aGlzLgo+IAo+ID4gKwkJcHJpbnRfdXNhZ2UoYXJndlsw XSwgMCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJbWVtc2V0KGRldl9uYW1lLCAnXDAnLCAyMCk7Cj4g PiArCXNucHJpbnRmKGRldl9uYW1lLCBzaXplb2YoYXV4X2RldikgKyAyLCAiJXMlZCIsIGF1eF9k ZXYsCj4gPiBkZXZpZCk7Cj4gCj4gVXNlIHN0cmxlbigpIGFuZCBkbyB0aGlzIGFmdGVyIHZhbGlk YXRpbmcgYWxsIGFyZ3VtZW50cy4KPiA+ICsKPiA+ICsJc3dpdGNoIChjbWQpIHsKPiA+ICsJY2Fz ZSBSRUFEOgo+ID4gKwkJaWYgKGNvdW50ID09IElOVkFMSUQpIHsKPiA+ICsJCQlpZ3Rfd2Fybigi UGxlYXNlIHNwZWNpZnkgdGhlIGNvdW50IGluCj4gPiBieXRlc1xuIik7Cj4gPiArCQkJcHJpbnRf dXNhZ2UoYXJndlswXSwgMCk7Cj4gPiArCQl9Cj4gPiArCQlyZXQgPSBkcGNkX3JlYWQoZGV2X25h bWUsIG9mZnNldCwgY291bnQpOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgV1JJVEU6Cj4gPiAr CQlpZiAodmFsID09IElOVkFMSUQpIHsKPiA+ICsJCQlpZ3Rfd2FybigiV3JpdGUgdmFsdWUgaXMg bWlzc2luZ1xuIik7Cj4gPiArCQkJcHJpbnRfdXNhZ2UoYXJndlswXSwgMCk7Cj4gPiArCQl9Cj4g PiArCQlyZXQgPSBkcGNkX3dyaXRlKGRldl9uYW1lLCBvZmZzZXQsICZ2YWwpOwo+ID4gKwkJYnJl YWs7Cj4gPiArCWNhc2UgSU5WOgo+ID4gKwlkZWZhdWx0Ogo+ID4gKwkJaWd0X3dhcm4oIlBsZWFz ZSBzcGVjaWZ5IGEgY29tbWFuZDogcmVhZC93cml0ZS4gU2VlCj4gPiB1c2FnZVxuIik7Cj4gPiAr CQlwcmludF91c2FnZShhcmd2WzBdLCAwKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0 Owo+ID4gK30KPiA+IGRpZmYgLS1naXQgYS90b29scy9tZXNvbi5idWlsZCBiL3Rvb2xzL21lc29u LmJ1aWxkCj4gPiBpbmRleCBlNDUxN2Q2Ni4uNzlmMzZhYTkgMTAwNjQ0Cj4gPiAtLS0gYS90b29s cy9tZXNvbi5idWlsZAo+ID4gKysrIGIvdG9vbHMvbWVzb24uYnVpbGQKPiA+IEBAIC0zNiw2ICsz Niw3IEBAIHRvb2xzX3Byb2dzID0gWwo+ID4gIAknaW50ZWxfd2F0ZXJtYXJrJywKPiA+ICAJJ2lu dGVsX2dlbV9pbmZvJywKPiA+ICAJJ2ludGVsX2d2dGdfdGVzdCcsCj4gPiArCSdkcGNkX3JlZycs Cj4gPiAgXQo+ID4gIHRvb2xfZGVwcyA9IGlndF9kZXBzCj4gPiAgCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1k ZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaWd0LWRldgo=