From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id D05C56E071 for ; Mon, 26 Aug 2019 09:52:03 +0000 (UTC) Date: Mon, 26 Aug 2019 12:52:01 +0300 From: Petri Latvala Message-ID: <20190826095201.GL3698@platvala-desk.ger.corp.intel.com> References: <20190814173904.4279-1-anshuman.gupta@intel.com> <20190816102734.26929-1-anshuman.gupta@intel.com> <20190823142540.GF26896@ideak-desk.fi.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190823142540.GF26896@ideak-desk.fi.intel.com> Subject: Re: [igt-dev] [PATCH i-g-t v12 1/6] lib/igt_pm: igt lib helper routines to support DC5/6 tests 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: Imre Deak Cc: igt-dev@lists.freedesktop.org, Jyoti Yadav List-ID: T24gRnJpLCBBdWcgMjMsIDIwMTkgYXQgMDU6MjU6NDBQTSArMDMwMCwgSW1yZSBEZWFrIHdyb3Rl Ogo+IE9uIEZyaSwgQXVnIDE2LCAyMDE5IGF0IDAzOjU3OjM0UE0gKzA1MzAsIEFuc2h1bWFuIEd1 cHRhIHdyb3RlOgo+ID4gRnJvbTogSnlvdGkgWWFkYXYgPGp5b3RpLnIueWFkYXZAaW50ZWwuY29t Pgo+ID4gCj4gPiBUaGlzIHBhdGNoIGRvZXMgdGhlIGZvbGxvd2luZyBjaG5lZ3MgdG8gbGliL2ln dF9wbS5jCj4gPiAKPiA+IC1kbWNfbG9hZGVkKCkgd2lsbCBiZSB1c2VkIGJ5IG5ldyB0ZXN0IGk5 MTVfcG1fZGMuYyB3aGljaCB3aWxsIHZhbGlkYXRlCj4gPiAgRGlzcGxheSBDIFN0YXRlcy4gU28g bW92aW5nIHRoZSBzYW1lIHRvIGlndF9wbSBsaWJyYXJ5Lgo+ID4gCj4gPiAtSW50cm9kdWNlZCBp Z3RfZGlzYWJsZV9ydW50aW1lX3BtKCkgaW4gb3JkZXIgdG8gZGlzYWJsZSBydW50aW1lIHN1c3Bl bmQKPiA+ICBmb3IgdGhlIGZ1bmN0aW9uIHdoaWNoIHN1cHBvcnQgZGM5Lgo+ID4gCj4gPiAtQ2hh bmdlZCB0aGUgaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCgpIGFuZAo+ ID4gIGlndF9wbV9yZXN0b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KCkgaW4gb3JkZXIg dG8gc2F2ZQo+ID4gIGFuZCByZXN0b3JlIHRoZSBzYXRhIGxpbmsgcG93ZXIgcG9saWN5IGJ5IGFu IGV4aXQgaGFuZGxlci4KPiA+IAo+ID4gdjI6IFNpbXBsaWZ5IHRoZSBjb21tZW50IHNlY3Rpb24u Cj4gPiB2MzogUmVtb3ZlIC4gZnJvbSB0aGUgc3ViamVjdCBsaW5lLgo+ID4gdjQ6IFJlYmFzZWQs IHJlc29sdmUgY29uZmxpY3RzIGluIHBtX3JwbS5jCj4gPiAgICAgSW5jbHVkZWQgcGF0Y2ggc2V0 IHZlcnNpb24gY2hhbmdlIGxvZy4KPiA+IHY1OiBMaXN0aW5nIGFjdHVhbCBjaGFuZ2UgaW4gcGF0 Y2ggc2V0IGNoYW5nZWxvZyB0byBtYWtlIHJldmlldyBlYXNpZXIuCj4gPiB2NjogaWd0J3MgbGli IGFkZGVkIHN1cHBvcnQgZm9yIGRpc2FibGluZyBydW50aW1lIHN1c3BlbmQsCj4gPiAgICAgY2hh bmdlIGluIGNvbW1pdCBsb2cuIHJlYmFzZWQgZHVlIHRvIHRlc3QgbmFtZSBwbV9ycG0gY2hhbmdl ZAo+ID4gICAgIHRvIGk5MTVfcG1fcnBtLgo+ID4gdjc6IEFkZHJlc3NlZCByZXZpZXcgY29tbWVu dCBieSBzYXZpbmcgUE9XRVJfRElSIHZhbHVlcyBpbgo+ID4gICAgIGlndF9kaXNhYmxlX3J1bnRp bWVfcG0oKS4gW0ltcmVdCj4gPiB2ODogQWRkcmVzc2VkIHRoZSByZXZpZXcgY29tbWVudCwgaWd0 X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudAo+ID4gICAgIGZ1bmN0aW9uIHRv IHJlc3RvcmUgdGhlIG9yaWdpbmFsIFNBVEEgbGluayBwb3dlciBwb2xpY3kgaWYgdGhpbmdzIGZh aWwKPiA+ICAgICBieSB1c2luZyBhbiBleGl0IGhhbmRsZXIuIFtJbXJlXQo+ID4gdjk6IElHVCBm YWlsdXJlIGZpeHR1cmUgaW4gaTkxNV9wbV9iYWNrbGlnaHQgYW5kIGk5MTVfcG1fcnBtLgo+ID4g djEwOlJldmlldyBjb21tZW50IGZpeHVwIGluIHNhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50Cj4g PiAgICAgbGliIGZ1bmN0aW9ucy4gW0ltcmVdCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IEp5b3Rp IFlhZGF2IDxqeW90aS5yLnlhZGF2QGludGVsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IEFuc2h1 bWFuIEd1cHRhIDxhbnNodW1hbi5ndXB0YUBpbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBsaWIvaWd0 X3BtLmMgICAgICAgICAgICAgICAgICAgfCAyMTAgKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tCj4gPiAgbGliL2lndF9wbS5oICAgICAgICAgICAgICAgICAgIHwgICA2ICstCj4gPiAg dGVzdHMvaTkxNS9pOTE1X3BtX2JhY2tsaWdodC5jIHwgICA2ICstCj4gPiAgdGVzdHMvaTkxNS9p OTE1X3BtX3JwbS5jICAgICAgIHwgIDI0ICstLS0KPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDE3MiBp bnNlcnRpb25zKCspLCA3NCBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2xpYi9p Z3RfcG0uYyBiL2xpYi9pZ3RfcG0uYwo+ID4gaW5kZXggZmQyMjI3M2EuLmI5MWEwZjk2IDEwMDY0 NAo+ID4gLS0tIGEvbGliL2lndF9wbS5jCj4gPiArKysgYi9saWIvaWd0X3BtLmMKPiA+IEBAIC0z OCw2ICszOCw3IEBACj4gPiAgI2luY2x1ZGUgImRybXRlc3QuaCIKPiA+ICAjaW5jbHVkZSAiaWd0 X3BtLmgiCj4gPiAgI2luY2x1ZGUgImlndF9hdXguaCIKPiA+ICsjaW5jbHVkZSAiaWd0X3N5c2Zz LmgiCj4gPiAgCj4gPiAgLyoqCj4gPiAgICogU0VDVElPTjppZ3RfcG0KPiA+IEBAIC02MywxMSAr NjQsMTYgQEAgZW51bSB7Cj4gPiAgI2RlZmluZSBNSU5fUE9XRVJfU1RSCQkibWluX3Bvd2VyXG4i Cj4gPiAgLyogUmVtZW1iZXIgdG8gZml4IHRoaXMgaWYgYWRkaW5nIGxvbmdlciBzdHJpbmdzICov Cj4gPiAgI2RlZmluZSBNQVhfUE9MSUNZX1NUUkxFTglzdHJsZW4oTUFYX1BFUkZPUk1BTkNFX1NU UikKPiA+ICtpbnQ4X3QgKl9fc2F0YV9wbV9wb2xpY2llczsKPiA+ICtpbnQgX19zY3NpX2hvc3Rf Y250Owo+ID4gIAo+ID4gIHN0YXRpYyBjaGFyIF9faWd0X3BtX2F1ZGlvX3J1bnRpbWVfcG93ZXJf c2F2ZVs2NF07Cj4gPiAgc3RhdGljIGNoYXIgKiBfX2lndF9wbV9hdWRpb19ydW50aW1lX2NvbnRy b2xfcGF0aDsKPiA+ICBzdGF0aWMgY2hhciBfX2lndF9wbV9hdWRpb19ydW50aW1lX2NvbnRyb2xb NjRdOwo+ID4gIAo+ID4gK3N0YXRpYyB2b2lkIF9faWd0X3BtX3NhdGFfbGlua19wbV9leGl0X2hh bmRsZXIoaW50IHNpZyk7Cj4gPiArc3RhdGljIHZvaWQgX19pZ3RfcG1fcmVzdG9yZV9zYXRhX2xp bmtfcG93ZXJfbWFuYWdlbWVudCh2b2lkKTsKPiA+ICsKPiA+ICBzdGF0aWMgaW50IF9faWd0X3Bt X2F1ZGlvX3Jlc3RvcmVfcnVudGltZV9wbSh2b2lkKQo+ID4gIHsKPiA+ICAJaW50IGZkOwo+ID4g QEAgLTI4MCwzOSArMjg2LDI2IEBAIHZvaWQgaWd0X3BtX2VuYWJsZV9hdWRpb19ydW50aW1lX3Bt KHZvaWQpCj4gPiAgCQlpZ3RfZGVidWcoIkZhaWxlZCB0byBlbmFibGUgYXVkaW8gcnVudGltZSBQ TSEgKCVkKVxuIiwgLWVycik7Cj4gPiAgfQo+ID4gIAo+ID4gLS8qKgo+ID4gLSAqIGlndF9wbV9l bmFibGVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQ6Cj4gPiAtICoKPiA+IC0gKiBFbmFibGUg dGhlIG1pbl9wb3dlciBwb2xpY3kgZm9yIFNBVEEgbGluayBwb3dlciBtYW5hZ2VtZW50Lgo+ID4g LSAqIFdpdGhvdXQgdGhpcyB3ZSBjYW5ub3QgcmVhY2ggZGVlcCBydW50aW1lIHBvd2VyIHN0YXRl cy4KPiA+IC0gKgo+ID4gLSAqIFdlIGRvbid0IGhhdmUgYW55IGFzc2VydGlvbnMgb24gb3BlbiBz aW5jZSB0aGUgc3lzdGVtIG1pZ2h0IG5vdCBoYXZlCj4gPiAtICogYSBTQVRBIGhvc3QuCj4gPiAt ICoKPiA+IC0gKiBSZXR1cm5zOgo+ID4gLSAqIEFuIG9wYXF1ZSBwb2ludGVyIHRvIHRoZSBkYXRh IG5lZWRlZCB0byByZXN0b3JlIHRoZSBkZWZhdWx0IHZhbHVlcwo+ID4gLSAqIGFmdGVyIHRoZSB0 ZXN0IGhhcyB0ZXJtaW5hdGVkLCBvciBOVUxMIGlmIFNBVEEgbGluayBwb3dlciBtYW5hZ2VtZW50 Cj4gPiAtICogaXMgbm90IHN1cHBvcnRlZC4gVGhpcyBwb2ludGVyIHNob3VsZCBiZSBmcmVlZCB3 aGVuIG5vIGxvbmdlciB1c2VkCj4gPiAtICogKHR5cGljYWxseSBhZnRlciBoYXZpbmcgY2FsbGVk IHJlc3RvcmVfc2F0YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQoKSkuCj4gPiAtICovCj4gPiAtaW50 OF90ICppZ3RfcG1fZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KHZvaWQpCj4gPiAr c3RhdGljIHZvaWQgX19pZ3RfcG1fZW5hYmxlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KHZv aWQpCj4gPiAgewo+ID4gIAlpbnQgZmQsIGk7Cj4gPiAgCXNzaXplX3QgbGVuOwo+ID4gIAljaGFy ICpidWY7Cj4gPiAgCWNoYXIgKmZpbGVfbmFtZTsKPiA+IC0JaW50OF90ICpsaW5rX3BtX3BvbGlj aWVzID0gTlVMTDsKPiA+ICsJaW50OF90IHBvbGljeTsKPiA+ICAKPiA+ICAJZmlsZV9uYW1lID0g bWFsbG9jKFBBVEhfTUFYKTsKPiA+ICAJYnVmID0gbWFsbG9jKE1BWF9QT0xJQ1lfU1RSTEVOICsg MSk7Cj4gPiAgCj4gPiAtCWZvciAoaSA9IDA7IDsgaSsrKSB7Cj4gPiAtCQlpbnQ4X3QgcG9saWN5 Owo+ID4gLQo+ID4gKwlmb3IgKF9fc2NzaV9ob3N0X2NudCA9IDA7IDsgX19zY3NpX2hvc3RfY250 KyspIHsKPiA+ICAJCXNucHJpbnRmKGZpbGVfbmFtZSwgUEFUSF9NQVgsCj4gPiAgCQkJICIvc3lz L2NsYXNzL3Njc2lfaG9zdC9ob3N0JWQvbGlua19wb3dlcl9tYW5hZ2VtZW50X3BvbGljeSIsCj4g PiAtCQkJIGkpOwo+ID4gKwkJCSBfX3Njc2lfaG9zdF9jbnQpOwo+ID4gIAo+ID4gKwkJLyoKPiA+ ICsJCSAqIFdlIGRvbid0IGhhdmUgYW55IGFzc2VydGlvbnMgb24gb3BlbiBzaW5jZSB0aGUgc3lz dGVtCj4gPiArCQkgKiBtaWdodCBub3QgaGF2ZSBhIFNBVEEgaG9zdC4KPiA+ICsJCSAqLwo+ID4g IAkJZmQgPSBvcGVuKGZpbGVfbmFtZSwgT19SRFdSKTsKPiA+ICAJCWlmIChmZCA8IDApCj4gPiAg CQkJYnJlYWs7Cj4gPiBAQCAtMzMyLDEyICszMjUsMjYgQEAgaW50OF90ICppZ3RfcG1fZW5hYmxl X3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KHZvaWQpCj4gPiAgCQllbHNlCj4gPiAgCQkJcG9s aWN5ID0gUE9MSUNZX1VOS05PV047Cj4gPiAgCj4gPiAtCQlpZiAoIShpICUgMjU2KSkKPiA+IC0J CQlsaW5rX3BtX3BvbGljaWVzID0gcmVhbGxvYyhsaW5rX3BtX3BvbGljaWVzLAo+ID4gLQkJCQkJ CSAgIChpIC8gMjU2ICsgMSkgKiAyNTYgKyAxKTsKPiA+ICsJCWlmICghKF9fc2NzaV9ob3N0X2Nu dCAlIDI1NikpCj4gPiArCQkJX19zYXRhX3BtX3BvbGljaWVzID0gcmVhbGxvYyhfX3NhdGFfcG1f cG9saWNpZXMsCj4gPiArCQkJCQkJICAgICAoX19zY3NpX2hvc3RfY250IC8gMjU2ICsgMSkKPiA+ ICsJCQkJCQkgICAgICogMjU2ICsgMSk7Cj4gPiAgCj4gPiAtCQlsaW5rX3BtX3BvbGljaWVzW2ld ID0gcG9saWN5Owo+ID4gLQkJbGlua19wbV9wb2xpY2llc1tpICsgMV0gPSAwOwo+ID4gKwkJX19z YXRhX3BtX3BvbGljaWVzW19fc2NzaV9ob3N0X2NudF0gPSBwb2xpY3k7Cj4gPiArCQljbG9zZShm ZCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWd0X2luc3RhbGxfZXhpdF9oYW5kbGVyKF9faWd0X3Bt X3NhdGFfbGlua19wbV9leGl0X2hhbmRsZXIpOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwg X19zY3NpX2hvc3RfY250OyBpKyspIHsKPiA+ICsJCXNucHJpbnRmKGZpbGVfbmFtZSwgUEFUSF9N QVgsCj4gPiArCQkJICIvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0JWQvbGlua19wb3dlcl9tYW5h Z2VtZW50X3BvbGljeSIsCj4gPiArCQkJIGkpOwo+ID4gKwkJZmQgPSBvcGVuKGZpbGVfbmFtZSwg T19SRFdSKTsKPiA+ICsJCWlmIChmZCA8IDApCj4gPiArCQkJYnJlYWs7Cj4gPiArCj4gPiArCQlw b2xpY3kgPSBfX3NhdGFfcG1fcG9saWNpZXNbaV07Cj4gPiAgCj4gPiAgCQkvKiBJZiB0aGUgcG9s aWN5IGlzIHNvbWV0aGluZyB3ZSBkb24ndCBrbm93IGFib3V0LAo+ID4gIAkJICogZG9uJ3QgdG91 Y2ggaXQsIHNpbmNlIHdlIG1pZ2h0IHBvdGVudGlhbGx5IGJyZWFrIHRoaW5ncy4KPiA+IEBAIC0z NTUsMzkgKzM2MiwyNSBAQCBpbnQ4X3QgKmlndF9wbV9lbmFibGVfc2F0YV9saW5rX3Bvd2VyX21h bmFnZW1lbnQodm9pZCkKPiA+ICAJfQo+ID4gIAlmcmVlKGJ1Zik7Cj4gPiAgCWZyZWUoZmlsZV9u YW1lKTsKPiA+IC0KPiA+IC0JcmV0dXJuIGxpbmtfcG1fcG9saWNpZXM7Cj4gPiAgfQo+ID4gIAo+ ID4gLS8qKgo+ID4gLSAqIGlndF9wbV9yZXN0b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50 Ogo+ID4gLSAqIEBwbV9kYXRhOiBBbiBvcGFxdWUgcG9pbnRlciB3aXRoIHNhdmVkIGxpbmsgUE0g cG9saWNpZXM7Cj4gPiAtICogICAgICAgICAgIElmIE5VTEwgaXMgcGFzc2VkIHdlIGZvcmNlIGVu YWJsZSB0aGUgIm1heF9wZXJmb3JtYW5jZSIgcG9saWN5Lgo+ID4gLSAqCj4gPiAtICogUmVzdG9y ZSB0aGUgbGluayBwb3dlciBtYW5hZ2VtZW50IHBvbGljaWVzIHRvIHRoZSB2YWx1ZXMKPiA+IC0g KiBwcmlvciB0byBlbmFibGluZyBtaW5fcG93ZXIuCj4gPiAtICoKPiA+IC0gKiBDYXZlYXQ6IElm IHRoZSBzeXN0ZW0gc3VwcG9ydHMgaG90cGx1Z2dpbmcgYW5kIGhvdHBsdWdnaW5nIHRha2VzCj4g PiAtICogICAgICAgICBwbGFjZSBkdXJpbmcgb3VyIHRlc3Rpbmcgc28gdGhhdCB0aGUgaG9zdHMg Y2hhbmdlIG51bWJlcnMKPiA+IC0gKiAgICAgICAgIHdlIG1pZ2h0IHJlc3RvcmUgdGhlIHNldHRp bmdzIHRvIHRoZSB3cm9uZyBob3N0cy4KPiA+IC0gKi8KPiA+IC12b2lkIGlndF9wbV9yZXN0b3Jl X3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KGludDhfdCAqcG1fZGF0YSkKPiA+IC0KPiA+ICtz dGF0aWMgdm9pZCBfX2lndF9wbV9yZXN0b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KHZv aWQpCj4gPiAgewo+ID4gIAlpbnQgZmQsIGk7Cj4gPiAgCWNoYXIgKmZpbGVfbmFtZTsKPiA+ICAK PiA+ICsJaWYgKCFfX3NhdGFfcG1fcG9saWNpZXMpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiAg CS8qIERpc2sgcnVudGltZSBQTSBwb2xpY2llcy4gKi8KPiA+ICAJZmlsZV9uYW1lID0gbWFsbG9j KFBBVEhfTUFYKTsKPiA+IC0JZm9yIChpID0gMDsgOyBpKyspIHsKPiA+ICsJZm9yIChpID0gMDsg aSA8IF9fc2NzaV9ob3N0X2NudDsgaSsrKSB7Cj4gPiAgCQlpbnQ4X3QgcG9saWN5Owo+ID4gIAo+ ID4gLQkJaWYgKCFwbV9kYXRhKQo+ID4gLQkJCXBvbGljeSA9IFBPTElDWV9NQVhfUEVSRk9STUFO Q0U7Cj4gPiAtCQllbHNlIGlmIChwbV9kYXRhW2ldID09IFBPTElDWV9VTktOT1dOKQo+ID4gKwkJ aWYgKF9fc2F0YV9wbV9wb2xpY2llc1tpXSA9PSBQT0xJQ1lfVU5LTk9XTikKPiA+ICAJCQljb250 aW51ZTsKPiA+ICAJCWVsc2UKPiA+IC0JCQlwb2xpY3kgPSBwbV9kYXRhW2ldOwo+ID4gKwkJCXBv bGljeSA9IF9fc2F0YV9wbV9wb2xpY2llc1tpXTsKPiA+ICAKPiA+ICAJCXNucHJpbnRmKGZpbGVf bmFtZSwgUEFUSF9NQVgsCj4gPiAgCQkJICIvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0JWQvbGlu a19wb3dlcl9tYW5hZ2VtZW50X3BvbGljeSIsCj4gPiBAQCAtNDIxLDcgKzQxNCw0OSBAQCB2b2lk IGlndF9wbV9yZXN0b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2VtZW50KGludDhfdCAqcG1fZGF0 YSkKPiA+ICAJCWNsb3NlKGZkKTsKPiA+ICAJfQo+ID4gIAlmcmVlKGZpbGVfbmFtZSk7Cj4gPiAr CWZyZWUoX19zYXRhX3BtX3BvbGljaWVzKTsKPiA+ICsJX19zYXRhX3BtX3BvbGljaWVzID0gTlVM TDsKPiA+ICB9Cj4gPiArCj4gPiArLyoqCj4gPiArICogaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtf cG93ZXJfbWFuYWdlbWVudDoKPiA+ICsgKgo+ID4gKyAqIEVuYWJsZSB0aGUgbWluX3Bvd2VyIHBv bGljeSBmb3IgU0FUQSBsaW5rIHBvd2VyIG1hbmFnZW1lbnQuCj4gPiArICogV2l0aG91dCB0aGlz IHdlIGNhbm5vdCByZWFjaCBkZWVwIHJ1bnRpbWUgcG93ZXIgc3RhdGVzLgo+ID4gKyAqIFJldHVy bnM6IFZvaWQKPiAKPiBObyBuZWVkIGZvciBhIGNvbW1lbnQgb24gdm9pZCByZXR1cm5zLgo+IAo+ ID4gKyAqLwo+ID4gK3ZvaWQgaWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVu dCh2b2lkKQo+ID4gK3sKPiA+ICsJLyogQ2hlY2sgaWYgaGFzIGJlZW4gYWxyZWFkeSBzYXZlZC4g Ki8KPiA+ICsJaWYgKF9fc2F0YV9wbV9wb2xpY2llcykKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ ICsJIF9faWd0X3BtX2VuYWJsZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVudCgpOwo+ID4gK30K PiA+ICsKPiA+ICsvKioKPiA+ICsgKiBpZ3RfcG1fcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFu YWdlbWVudDoKPiA+ICsgKgo+ID4gKyAqIFJlc3RvcmUgdGhlIGxpbmsgcG93ZXIgbWFuYWdlbWVu dCBwb2xpY2llcyB0byB0aGUgdmFsdWVzCj4gPiArICogcHJpb3IgdG8gZW5hYmxpbmcgbWluX3Bv d2VyLgo+ID4gKyAqCj4gPiArICogQ2F2ZWF0OiBJZiB0aGUgc3lzdGVtIHN1cHBvcnRzIGhvdHBs dWdnaW5nIGFuZCBob3RwbHVnZ2luZyB0YWtlcwo+ID4gKyAqICAgICAgICAgcGxhY2UgZHVyaW5n IG91ciB0ZXN0aW5nIHNvIHRoYXQgdGhlIGhvc3RzIGNoYW5nZSBudW1iZXJzCj4gPiArICogICAg ICAgICB3ZSBtaWdodCByZXN0b3JlIHRoZSBzZXR0aW5ncyB0byB0aGUgd3JvbmcgaG9zdHMuCj4g PiArICovCj4gPiArdm9pZCBpZ3RfcG1fcmVzdG9yZV9zYXRhX2xpbmtfcG93ZXJfbWFuYWdlbWVu dCh2b2lkKQo+ID4gK3sKPiA+ICsJaWYgKCFfX3NhdGFfcG1fcG9saWNpZXMpCj4gPiArCQlyZXR1 cm47Cj4gPiArCj4gPiArCSBfX2lndF9wbV9yZXN0b3JlX3NhdGFfbGlua19wb3dlcl9tYW5hZ2Vt ZW50KCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIF9faWd0X3BtX3NhdGFfbGlua19w bV9leGl0X2hhbmRsZXIoaW50IHNpZykKPiA+ICt7Cj4gPiArCV9faWd0X3BtX3Jlc3RvcmVfc2F0 YV9saW5rX3Bvd2VyX21hbmFnZW1lbnQoKTsKPiA+ICt9Cj4gPiArCj4gPiAgI2RlZmluZSBQT1dF Ul9ESVIgIi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMC9wb3dlciIKPiA+ICAv KiBXZSBqdXN0IGxlYWsgdGhpcyBvbiBleGl0IC4uLiAqLwo+ID4gIGludCBwbV9zdGF0dXNfZmQg PSAtMTsKPiA+IEBAIC01ODUsNiArNjIwLDYxIEBAIGJvb2wgaWd0X3NldHVwX3J1bnRpbWVfcG0o dm9pZCkKPiA+ICAJcmV0dXJuIHRydWU7Cj4gPiAgfQo+ID4gIAo+ID4gK2Jvb2wgaWd0X2Rpc2Fi bGVfcnVudGltZV9wbSh2b2lkKQo+ID4gK3sKPiA+ICsJaW50IGZkOwo+ID4gKwlzc2l6ZV90IHNp emU7Cj4gPiArCWNoYXIgYnVmWzZdOwo+ID4gKwo+ID4gKwlpZiAocG1fc3RhdHVzX2ZkIDwgMCkg ewo+ID4gKwkJZmQgPSBvcGVuKFBPV0VSX0RJUiAiL2F1dG9zdXNwZW5kX2RlbGF5X21zIiwgT19S RFdSKTsKPiA+ICsJCWlmIChmZCA8IDApCj4gPiArCQkJcmV0dXJuIGZhbHNlOwo+ID4gKwo+ID4g KwkJc2l6ZSA9IHJlYWQoZmQsIF9faWd0X3BtX3J1bnRpbWVfYXV0b3N1c3BlbmQsCj4gPiArCQkJ ICAgIHNpemVvZihfX2lndF9wbV9ydW50aW1lX2F1dG9zdXNwZW5kKSk7Cj4gPiArCj4gPiArCQlp ZiAoc2l6ZSA8PSAwKSB7Cj4gPiArCQkJY2xvc2UoZmQpOwo+ID4gKwkJCXJldHVybiBmYWxzZTsK PiA+ICsJCX0KPiA+ICsKPiA+ICsJCXN0cmNob21wKF9faWd0X3BtX3J1bnRpbWVfYXV0b3N1c3Bl bmQpOwo+ID4gKwkJaWd0X2luc3RhbGxfZXhpdF9oYW5kbGVyKF9faWd0X3BtX3J1bnRpbWVfZXhp dF9oYW5kbGVyKTsKPiA+ICsJCWNsb3NlKGZkKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBXZSBr bm93IHdlIHN1cHBvcnQgcnVudGltZSBQTSwgbGV0J3MgdHJ5IHRvIGRpc2FibGUgaXQgbm93LiAq Lwo+ID4gKwlmZCA9IG9wZW4oUE9XRVJfRElSICIvY29udHJvbCIsIE9fUkRXUik7Cj4gPiArCWln dF9hc3NlcnRfZihmZCA+PSAwLCAiQ2FuJ3Qgb3BlbiAiIFBPV0VSX0RJUiAiL2NvbnRyb2xcbiIp Owo+ID4gKwo+ID4gKwlpZiAocG1fc3RhdHVzX2ZkIDwgMCkgewo+ID4gKwkJaWd0X2Fzc2VydChy ZWFkKGZkLCBfX2lndF9wbV9ydW50aW1lX2NvbnRyb2wsCj4gPiArCQkJCXNpemVvZihfX2lndF9w bV9ydW50aW1lX2NvbnRyb2wpKSA+IDApOwo+ID4gKwkJc3RyY2hvbXAoX19pZ3RfcG1fcnVudGlt ZV9jb250cm9sKTsKPiA+ICsKPiA+ICsJCWlndF9kZWJ1ZygiU2F2ZWQgcnVudGltZSBwb3dlciBt YW5hZ2VtZW50IGFzICclcycgYW5kICclcydcbiIsCj4gPiArCQkJICBfX2lndF9wbV9ydW50aW1l X2F1dG9zdXNwZW5kLAo+ID4gKwkJCSAgX19pZ3RfcG1fcnVudGltZV9jb250cm9sKTsKPiA+ICsJ fQo+IAo+IFdlIHJlcXVpcmUgdG8gY2FsbCBpZ3Rfc2V0dXBfcnVudGltZV9wbSgpIGJlZm9yZQo+ IGlndF9kaXNhYmxlX3J1bnRpbWVfcG0oKSwgc28gdGhlIG9yaWdpbmFsIHN0YXRlIHdpbGwgYmUg c2F2ZWQgYXdheQo+IGFscmVhZHksIHNvIGluc3RlYWQgb2YgdGhlIGFib3ZlIGR1cGxpY2F0aW9u IG9mIHNhdmluZyB0aGUgc3RhdGUgd2UKPiBzaG91bGQganVzdCBpZ3RfYXNzZXJ0KHBtX3N0YXR1 c19mZCA+PSAwKTsKCgpKdXN0IGEgZHJpdmUtYnkgY29tbWVudCBoZXJlLCB1c2UgaWd0X2Fzc2Vy dF9mZChwbV9zdGF0dXNfZmQpIGluc3RlYWQKb2Ygd3JpdGluZyBpdCBvdXQuCgoKLS0gClBldHJp IExhdHZhbGEKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K aWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2