From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH i-g-t 3/9] Add i915/gem_ctx_persistence Date: Thu, 24 Oct 2019 11:54:43 +0100 Message-ID: <20191024105449.31948-3-chris@chris-wilson.co.uk> References: <20191024105449.31948-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id AAE696E26F for ; Thu, 24 Oct 2019 10:55:16 +0000 (UTC) In-Reply-To: <20191024105449.31948-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org U2FuaXR5IHRlc3QgZXhpc3RpbmcgcGVyc2lzdGVuY2UgYW5kIG5ldyBleGNpdGluZyBub24tcGVy c2lzdGVudCBjb250ZXh0CmJlaGF2aW91ci4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFo dGluZW5AbGludXguaW50ZWwuY29tPgpDYzogTWljaGHFgiBXaW5pYXJza2kgPG1pY2hhbC53aW5p YXJza2lAaW50ZWwuY29tPgpDYzogSm9uIEJsb29tZmllbGQgPGpvbi5ibG9vbWZpZWxkQGludGVs LmNvbT4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CkNjOiBB bmRpIFNoeXRpIDxhbmRpLnNoeXRpQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IEFuZGkgU2h5dGkg PGFuZGkuc2h5dGlAaW50ZWwuY29tPgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICAgICAg ICAgIHwgICAzICsKIHRlc3RzL2k5MTUvZ2VtX2N0eF9wZXJzaXN0ZW5jZS5jIHwgNTM4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgICAg ICAgIHwgICAxICsKIDMgZmlsZXMgY2hhbmdlZCwgNTQyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0ZXN0cy9pOTE1L2dlbV9jdHhfcGVyc2lzdGVuY2UuYwoKZGlmZiAtLWdpdCBh L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDM0 M2JlMDUwMC4uMDkzZWI1N2YzIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisr KyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTE1NCw2ICsxNTQsOSBAQCBnZW1fY3R4X2lz b2xhdGlvbl9TT1VSQ0VTID0gaTkxNS9nZW1fY3R4X2lzb2xhdGlvbi5jCiBURVNUU19wcm9ncyAr PSBnZW1fY3R4X3BhcmFtCiBnZW1fY3R4X3BhcmFtX1NPVVJDRVMgPSBpOTE1L2dlbV9jdHhfcGFy YW0uYwogCitURVNUU19wcm9ncyArPSBnZW1fY3R4X3BlcnNpc3RlbmNlCitnZW1fY3R4X3BlcnNp c3RlbmNlX1NPVVJDRVMgPSBpOTE1L2dlbV9jdHhfcGVyc2lzdGVuY2UuYworCiBURVNUU19wcm9n cyArPSBnZW1fY3R4X3NoYXJlZAogZ2VtX2N0eF9zaGFyZWRfU09VUkNFUyA9IGk5MTUvZ2VtX2N0 eF9zaGFyZWQuYwogCmRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9jdHhfcGVyc2lzdGVuY2Uu YyBiL3Rlc3RzL2k5MTUvZ2VtX2N0eF9wZXJzaXN0ZW5jZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMC4uMjc4MGQ1M2NjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaTkx NS9nZW1fY3R4X3BlcnNpc3RlbmNlLmMKQEAgLTAsMCArMSw1MzggQEAKKy8qCisgKiBDb3B5cmln aHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us CisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAq IElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxz Y2hlZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNp bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImRy bXRlc3QuaCIgLyogZ2VtX3F1aWVzY2VudF9ncHUoKSEgKi8KKyNpbmNsdWRlICJpOTE1L2dlbV9j b250ZXh0LmgiCisjaW5jbHVkZSAiaTkxNS9nZW1fc3VibWlzc2lvbi5oIgorI2luY2x1ZGUgImln dF9kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAiaWd0X2R1bW15bG9hZC5oIgorI2luY2x1ZGUgImlndF9z eXNmcy5oIgorI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiIC8qIGdlbV93YWl0KCkhICovCisj aW5jbHVkZSAic3dfc3luYy5oIgorCitzdGF0aWMgYm9vbCBoYXNfcGVyc2lzdGVuY2UoaW50IGk5 MTUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHAgPSB7CisJCS5wYXJh bSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9QRVJTSVNURU5DRSwKKwl9OworCXVpbnQ2NF90IHNhdmVk OworCisJaWYgKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGk5MTUsICZwKSkKKwkJcmV0dXJuIGZh bHNlOworCisJc2F2ZWQgPSBwLnZhbHVlOworCXAudmFsdWUgPSAwOworCWlmIChfX2dlbV9jb250 ZXh0X3NldF9wYXJhbShpOTE1LCAmcCkpCisJCXJldHVybiBmYWxzZTsKKworCXAudmFsdWUgPSBz YXZlZDsKKwlyZXR1cm4gX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApID09IDA7Cit9 CisKK3N0YXRpYyBib29sIF9fZW5hYmxlX2hhbmdjaGVjayhpbnQgZGlyLCBib29sIHN0YXRlKQor eworCXJldHVybiBpZ3Rfc3lzZnNfc2V0KGRpciwgImVuYWJsZV9oYW5nY2hlY2siLCBzdGF0ZSA/ ICIxIiA6ICIwIik7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9oYW5nY2hlY2soaW50IGk5MTUp Cit7CisJaW50IGRpcjsKKworCWRpciA9IGlndF9zeXNmc19vcGVuX3BhcmFtZXRlcnMoaTkxNSk7 CisJaWYgKGRpciA8IDApIC8qIG5vIHBhcmFtZXRlcnMsIG11c3QgYmUgZGVmYXVsdCEgKi8KKwkJ cmV0dXJuOworCisJLyogSWYgaTkxNS5oYW5nY2hlY2sgaXMgcmVtb3ZlZCwgYXNzdW1lIHRoZSBk ZWZhdWx0IGlzIGdvb2QgKi8KKwlfX2VuYWJsZV9oYW5nY2hlY2soZGlyLCB0cnVlKTsKKwljbG9z ZShkaXIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2lkZW1wb3RlbnQoaW50IGk5MTUpCit7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHAgPSB7CisJCS5wYXJhbSA9IEk5MTVf Q09OVEVYVF9QQVJBTV9QRVJTSVNURU5DRSwKKwl9OworCWludCBleHBlY3RlZDsKKworCS8qCisJ ICogU2ltcGxlIHRlc3QgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGFibGUgdG8gcmVhZCBiYWNrIHRo ZSBzYW1lIGJvb2xlYW4KKwkgKiB2YWx1ZSBhcyB3ZSBzZXQuCisJICoKKwkgKiBFYWNoIHRpbWUg d2UgaW52ZXJ0IHRoZSBjdXJyZW50IHZhbHVlIHNvIHRoYXQgYXQgdGhlIGVuZCBvZiB0aGUgdGVz dCwKKwkgKiBpZiBzdWNjZXNzZnVsLCB3ZSBsZWF2ZSB0aGUgY29udGV4dCBpbiB0aGUgb3JpZ2lu YWwgc3RhdGUuCisJICovCisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oaTkxNSwgJnApOworCWV4 cGVjdGVkID0gISFwLnZhbHVlOworCisJZXhwZWN0ZWQgPSAhZXhwZWN0ZWQ7CisJcC52YWx1ZSA9 IGV4cGVjdGVkOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7CisJZ2VtX2NvbnRl eHRfZ2V0X3BhcmFtKGk5MTUsICZwKTsKKwlpZ3RfYXNzZXJ0X2VxKHAudmFsdWUsIGV4cGVjdGVk KTsKKworCWV4cGVjdGVkID0gIWV4cGVjdGVkOyAvKiBhbmQgcmVzdG9yZXMgKi8KKwlwLnZhbHVl ID0gZXhwZWN0ZWQ7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKKwlnZW1fY29u dGV4dF9nZXRfcGFyYW0oaTkxNSwgJnApOworCWlndF9hc3NlcnRfZXEocC52YWx1ZSwgZXhwZWN0 ZWQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3BlcnNpc3RlbmNlKGludCBpOTE1KQoreworCWln dF9zcGluX3QgKnNwaW47CisJaW50NjRfdCB0aW1lb3V0OworCXVpbnQzMl90IGN0eDsKKworCS8q CisJICogRGVmYXVsdCBiZWhhdmlvdXIgYXJlIGNvbnRleHRzIHJlbWFpbiBhbGl2ZSB1bnRpbCB0 aGVpciBsYXN0IGFjdGl2ZQorCSAqIHJlcXVlc3QgaXMgcmV0aXJlZCAtLSBubyBlYXJseSB0ZXJt aW5hdGlvbi4KKwkgKi8KKworCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKKwlnZW1f Y29udGV4dF9zZXRfcGVyc2lzdGVuY2UoaTkxNSwgY3R4LCB0cnVlKTsKKworCXNwaW4gPSBpZ3Rf c3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1RfU1BJTl9GRU5DRV9PVVQpOworCWdlbV9j b250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKKworCXRpbWVvdXQgPSBOU0VDX1BFUl9TRUMgLyA1 OworCWlndF9hc3NlcnRfZXEoZ2VtX3dhaXQoaTkxNSwgc3Bpbi0+aGFuZGxlLCAmdGltZW91dCks IC1FVElNRSk7CisKKwlpZ3Rfc3Bpbl9lbmQoc3Bpbik7CisKKwl0aW1lb3V0ID0gTlNFQ19QRVJf U0VDIC8gNTsKKwlpZ3RfYXNzZXJ0X2VxKGdlbV93YWl0KGk5MTUsIHNwaW4tPmhhbmRsZSwgJnRp bWVvdXQpLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNfZmVuY2Vfc3RhdHVzKHNwaW4tPm91dF9m ZW5jZSksIDEpOworCisJaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluKTsKKwlnZW1fcXVpZXNjZW50 X2dwdShpOTE1KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ub25wZXJzaXN0ZW50X2NsZWFudXAo aW50IGk5MTUpCit7CisJaW50NjRfdCB0aW1lb3V0ID0gTlNFQ19QRVJfU0VDIC8gNTsKKwlpZ3Rf c3Bpbl90ICpzcGluOworCXVpbnQzMl90IGN0eDsKKworCS8qCisJICogQSBub25wZXJzaXN0ZW50 IGNvbnRleHQgaXMgdGVybWluYXRlZCBpbW1lZGlhdGVseSB1cG9uIGNsb3N1cmUsCisJICogYW55 IGluZmxpZ2h0IHJlcXVlc3QgaXMgY2FuY2VsbGVkLgorCSAqLworCisJY3R4ID0gZ2VtX2NvbnRl eHRfY3JlYXRlKGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9wZXJzaXN0ZW5jZShpOTE1LCBjdHgs IGZhbHNlKTsKKworCXNwaW4gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1Rf U1BJTl9GRU5DRV9PVVQpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKKworCWln dF9hc3NlcnRfZXEoZ2VtX3dhaXQoaTkxNSwgc3Bpbi0+aGFuZGxlLCAmdGltZW91dCksIDApOwor CWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV9zdGF0dXMoc3Bpbi0+b3V0X2ZlbmNlKSwgLUVJTyk7 CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW4pOworCWdlbV9xdWllc2NlbnRfZ3B1KGk5MTUp OworfQorCitzdGF0aWMgdm9pZCB0ZXN0X25vbnBlcnNpc3RlbnRfbWl4ZWQoaW50IGk5MTUpCit7 CisJaW50IGZlbmNlWzNdOworCisJLyoKKwkgKiBPbmx5IGEgbm9ucGVyc2lzdGVudCBjb250ZXh0 IGlzIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkgdXBvbgorCSAqIGNsb3N1cmUsIGFueSBpbmZsaWdo dCByZXF1ZXN0IGlzIGNhbmNlbGxlZC4gSWYgdGhlcmUgaXMgYWxzbworCSAqIGFuIGFjdGl2ZSBw ZXJzaXN0ZW50IGNvbnRleHQgY2xvc2VkLCBpdCBzaG91bGQgYmUgdW5hZmZmZWN0ZWQuCisJICov CisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmVuY2UpOyBpKyspIHsKKwkJaWd0 X3NwaW5fdCAqc3BpbjsKKwkJdWludDMyX3QgY3R4OworCisJCWN0eCA9IGdlbV9jb250ZXh0X2Ny ZWF0ZShpOTE1KTsKKwkJZ2VtX2NvbnRleHRfc2V0X3BlcnNpc3RlbmNlKGk5MTUsIGN0eCwgaSAm IDEpOworCisJCXNwaW4gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1RfU1BJ Tl9GRU5DRV9PVVQpOworCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisKKwkJZmVu Y2VbaV0gPSBzcGluLT5vdXRfZmVuY2U7CisJfQorCisJLyogT3V0ZXIgcGFpciBvZiBjb250ZXh0 cyB3ZXJlIG5vbi1wZXJzaXN0ZW50IGFuZCBraWxsZWQgKi8KKwlpZ3RfYXNzZXJ0X2VxKHN5bmNf ZmVuY2Vfd2FpdChmZW5jZVswXSwgTVNFQ19QRVJfU0VDIC8gNSksIDApOworCWlndF9hc3NlcnRf ZXEoc3luY19mZW5jZV9zdGF0dXMoZmVuY2VbMF0pLCAtRUlPKTsKKworCWlndF9hc3NlcnRfZXEo c3luY19mZW5jZV93YWl0KGZlbmNlWzJdLCBNU0VDX1BFUl9TRUMgLyA1KSwgMCk7CisJaWd0X2Fz c2VydF9lcShzeW5jX2ZlbmNlX3N0YXR1cyhmZW5jZVsyXSksIC1FSU8pOworCisJLyogQnV0IHRo ZSBtaWRkbGUgY29udGV4dCBpcyBzdGlsbCBydW5uaW5nICovCisJaWd0X2Fzc2VydF9lcShzeW5j X2ZlbmNlX3dhaXQoZmVuY2VbMV0sIDApLCAtRVRJTUUpOworCisJZ2VtX3F1aWVzY2VudF9ncHUo aTkxNSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfbm9ucGVyc2lzdGVudF9ob3N0aWxlKGludCBp OTE1KQoreworCWludDY0X3QgdGltZW91dCA9IE5TRUNfUEVSX1NFQyAvIDI7CisJaWd0X3NwaW5f dCAqc3BpbjsKKwl1aW50MzJfdCBjdHg7CisKKwkvKgorCSAqIElmIHdlIGNhbm5vdCBjbGVhbmx5 IGNhbmNlbCB0aGUgbm9uLXBlcnNpc3RlbnQgY29udGV4dCBvbiBjbG9zdXJlLAorCSAqIGUuZy4g cHJlZW1wdGlvbiBmYWlscywgd2UgYXJlIGZvcmNlZCB0byByZXNldCB0aGUgR1BVIHRvIHRlcm1p bmF0ZQorCSAqIHRoZSByZXF1ZXN0cyBhbmQgY2xlYW51cCB0aGUgY29udGV4dC4KKwkgKi8KKwor CWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKKwlnZW1fY29udGV4dF9zZXRfcGVyc2lz dGVuY2UoaTkxNSwgY3R4LCBmYWxzZSk7CisKKwlzcGluID0gaWd0X3NwaW5fbmV3KGk5MTUsIGN0 eCwgLmZsYWdzID0gSUdUX1NQSU5fTk9fUFJFRU1QVElPTik7CisJZ2VtX2NvbnRleHRfZGVzdHJv eShpOTE1LCBjdHgpOworCisJaWd0X2Fzc2VydF9lcShnZW1fd2FpdChpOTE1LCBzcGluLT5oYW5k bGUsICZ0aW1lb3V0KSwgMCk7CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW4pOworCWdlbV9x dWllc2NlbnRfZ3B1KGk5MTUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X25vbnBlcnNpc3RlbnRf aG9zdGlsZV9wcmVlbXB0KGludCBpOTE1KQoreworCWludDY0X3QgdGltZW91dCA9IE5TRUNfUEVS X1NFQyAvIDI7CisJaWd0X3NwaW5fdCAqc3BpblsyXTsKKwl1aW50MzJfdCBjdHg7CisKKwkvKgor CSAqIERvdWJsZSBwbHVzIHVuZ29vZC4KKwkgKgorCSAqIEhlcmUgd2Ugd291bGQgbm90IGJlIGFi bGUgdG8gY2FuY2VsIHRoZSBob3N0aWxlIG5vbi1wZXJzaXN0ZW50CisJICogY29udGV4dCBhbmQg d2UgY2Fubm90IHByZWVtcHQtdG8taWRsZSBhcyBpdCBpcyBhbHJlYWR5IHdhaXRpbmcKKwkgKiBv biBwcmVlbXB0aW9uIGZvciBpdHNlbGYuIExldCdzIGhvcGUgdGhlIGtlcm5lbCBjYW4gc2F2ZSB0 aGUKKwkgKiBkYXkgd2l0aCBhIHJlc2V0LgorCSAqLworCisJaWd0X3JlcXVpcmUoZ2VtX3NjaGVk dWxlcl9oYXNfcHJlZW1wdGlvbihpOTE1KSk7CisKKwljdHggPSBnZW1fY29udGV4dF9jcmVhdGUo aTkxNSk7CisJZ2VtX2NvbnRleHRfc2V0X3BlcnNpc3RlbmNlKGk5MTUsIGN0eCwgdHJ1ZSk7CisJ Z2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGk5MTUsIGN0eCwgMCk7CisJc3BpblswXSA9IGlndF9z cGluX25ldyhpOTE1LCBjdHgsCisJCQkgICAgICAgLmZsYWdzID0gKElHVF9TUElOX05PX1BSRUVN UFRJT04gfAorCQkJCQkgSUdUX1NQSU5fUE9MTF9SVU4pKTsKKwlnZW1fY29udGV4dF9kZXN0cm95 KGk5MTUsIGN0eCk7CisKKwlpZ3Rfc3Bpbl9idXN5d2FpdF91bnRpbF9zdGFydGVkKHNwaW5bMF0p OworCisJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9w ZXJzaXN0ZW5jZShpOTE1LCBjdHgsIGZhbHNlKTsKKwlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHko aTkxNSwgY3R4LCAxKTsgLyogaGlnaGVyIHByaW9yaXR5IHRoYW4gMCAqLworCXNwaW5bMV0gPSBp Z3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1RfU1BJTl9OT19QUkVFTVBUSU9OKTsK KwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisKKwlpZ3RfYXNzZXJ0X2VxKGdlbV93 YWl0KGk5MTUsIHNwaW5bMV0tPmhhbmRsZSwgJnRpbWVvdXQpLCAwKTsKKworCWlndF9zcGluX2Zy ZWUoaTkxNSwgc3BpblsxXSk7CisJaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluWzBdKTsKKwlnZW1f cXVpZXNjZW50X2dwdShpOTE1KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ub2hhbmdjaGVja19o b3N0aWxlKGludCBpOTE1KQoreworCWludDY0X3QgdGltZW91dCA9IE5TRUNfUEVSX1NFQyAvIDI7 CisJaWd0X3NwaW5fdCAqc3BpbjsKKwl1aW50MzJfdCBjdHg7CisJaW50IGRpcjsKKworCS8qCisJ ICogRXZlbiBpZiB0aGUgdXNlciBkaXNhYmxlcyBoYW5nY2hlY2sgZHVyaW5nIHRoZWlyIGNvbnRl eHQsCisJICogd2UgZm9yY2libHkgdGVybWluYXRlIHRoYXQgY29udGV4dC4KKwkgKi8KKworCWRp ciA9IGlndF9zeXNmc19vcGVuX3BhcmFtZXRlcnMoaTkxNSk7CisJaWd0X3JlcXVpcmUoZGlyICE9 IC0xKTsKKworCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKKworCWlndF9yZXF1aXJl KF9fZW5hYmxlX2hhbmdjaGVjayhkaXIsIGZhbHNlKSk7CisKKwlzcGluID0gaWd0X3NwaW5fbmV3 KGk5MTUsIGN0eCwgLmZsYWdzID0gSUdUX1NQSU5fTk9fUFJFRU1QVElPTik7CisJZ2VtX2NvbnRl eHRfZGVzdHJveShpOTE1LCBjdHgpOworCisJaWd0X2Fzc2VydF9lcShnZW1fd2FpdChpOTE1LCBz cGluLT5oYW5kbGUsICZ0aW1lb3V0KSwgMCk7CisKKwlpZ3RfcmVxdWlyZShfX2VuYWJsZV9oYW5n Y2hlY2soZGlyLCB0cnVlKSk7CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW4pOworCWdlbV9x dWllc2NlbnRfZ3B1KGk5MTUpOworCWNsb3NlKGRpcik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf bm9ucGVyc2lzdGVudF9maWxlKGludCBpOTE1KQoreworCWludCBkZWJ1Z2ZzID0gaTkxNTsKKwlp Z3Rfc3Bpbl90ICpzcGluOworCXVpbnQzMl90IGN0eDsKKworCS8qCisJICogQSBjb250ZXh0IG1h eSBsaXZlIGJleW9uZCBpdHMgaW5pdGlhbCBzdHJ1Y3QgZmlsZSwgZXhjZXB0IGlmIGl0CisJICog aGFzIGJlZW4gbWFkZSBub25wZXJzaXN0ZW50LCBpbiB3aGljaCBjYXNlIGl0IG11c3QgYmUgdGVy bWluYXRlZC4KKwkgKi8KKworCWk5MTUgPSBnZW1fcmVvcGVuX2RyaXZlcihpOTE1KTsKKwlnZW1f cXVpZXNjZW50X2dwdShpOTE1KTsKKworCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsK KwlnZW1fY29udGV4dF9zZXRfcGVyc2lzdGVuY2UoaTkxNSwgY3R4LCBmYWxzZSk7CisKKwlzcGlu ID0gaWd0X3NwaW5fbmV3KGk5MTUsIGN0eCwgLmZsYWdzID0gSUdUX1NQSU5fRkVOQ0VfT1VUKTsK KworCWNsb3NlKGk5MTUpOworCXJjdV9iYXJyaWVyKGRlYnVnZnMpOyAvKiBmb3JjZSB0aGUgZGVs YXllZCBmcHV0KCkgKi8KKworCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV93YWl0KHNwaW4tPm91 dF9mZW5jZSwgTVNFQ19QRVJfU0VDIC8gNSksIDApOworCWlndF9hc3NlcnRfZXEoc3luY19mZW5j ZV9zdGF0dXMoc3Bpbi0+b3V0X2ZlbmNlKSwgLUVJTyk7CisKKwlzcGluLT5oYW5kbGUgPSAwOwor CWlndF9zcGluX2ZyZWUoLTEsIHNwaW4pOworfQorCitzdGF0aWMgdm9pZCBzZW5kZmQoaW50IHNv Y2tldCwgaW50IGZkKQoreworCWNoYXIgYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKGZkKSldOworCXN0 cnVjdCBpb3ZlYyBpbyA9IHsgLmlvdl9iYXNlID0gKGNoYXIgKikiQUJDIiwgLmlvdl9sZW4gPSAz IH07CisJc3RydWN0IG1zZ2hkciBtc2cgPSB7CisJCS5tc2dfaW92ID0gJmlvLAorCQkubXNnX2lv dmxlbiA9IDEsCisJCS5tc2dfY29udHJvbCA9IGJ1ZiwKKwkJLm1zZ19jb250cm9sbGVuID0gQ01T R19MRU4oc2l6ZW9mKGZkKSksCisJfTsKKwlzdHJ1Y3QgY21zZ2hkciAqY21zZyA9IENNU0dfRklS U1RIRFIoJm1zZyk7CisKKwljbXNnLT5jbXNnX2xldmVsID0gU09MX1NPQ0tFVDsKKwljbXNnLT5j bXNnX3R5cGUgPSBTQ01fUklHSFRTOworCWNtc2ctPmNtc2dfbGVuID0gbXNnLm1zZ19jb250cm9s bGVuOworCSooaW50ICopQ01TR19EQVRBKGNtc2cpID0gZmQ7CisKKwlpZ3RfYXNzZXJ0KHNlbmRt c2coc29ja2V0LCAmbXNnLCAwKSAhPSAtMSk7Cit9CisKK3N0YXRpYyBpbnQgcmVjdmZkKGludCBz b2NrZXQpCit7CisJY2hhciBtX2J1ZmZlclsyNTZdLCBjX2J1ZmZlclsyNTZdOworCXN0cnVjdCBp b3ZlYyBpbyA9IHsKKwkJLmlvdl9iYXNlID0gbV9idWZmZXIsCisJCS5pb3ZfbGVuID0gc2l6ZW9m KG1fYnVmZmVyKSwKKwl9OworCXN0cnVjdCBtc2doZHIgbXNnID0geworCQkubXNnX2lvdiA9ICZp bywKKwkJLm1zZ19pb3ZsZW4gPSAxLAorCQkubXNnX2NvbnRyb2wgPSBjX2J1ZmZlciwKKwkJLm1z Z19jb250cm9sbGVuID0gc2l6ZW9mKGNfYnVmZmVyKSwKKwl9OworCisJaWd0X2Fzc2VydChyZWN2 bXNnKHNvY2tldCwgJm1zZywgMCkgIT0gLTEpOworCXJldHVybiAqKGludCAqKUNNU0dfREFUQShD TVNHX0ZJUlNUSERSKCZtc2cpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ub25wZXJzaXN0ZW50 X3Byb2Nlc3MoaW50IGk5MTUpCit7CisJaW50IGZlbmNlWzJdLCBzdlsyXTsKKworCS8qCisJICog SWYgYSBwcm9jZXNzIGRpZXMgZWFybHksIGFueSBub25wZXJzaXN0ZW50IGNvbnRleHRzIGl0IGhh ZAorCSAqIG9wZW4gbXVzdCBiZSB0ZXJtaW5hdGVkIHRvby4gQnV0IGFueSBwZXJzaXN0ZW50IGNv bnRleHRzLAorCSAqIHNob3VsZCBzdXJ2aXZlIHVudGlsIHRoZWlyIHJlcXVlc3RzIGFyZSBjb21w bGV0ZS4KKwkgKi8KKworCWlndF9yZXF1aXJlKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19ER1JB TSwgMCwgc3YpID09IDApOworCisJaWd0X2ZvcmsoY2hpbGQsIDEpIHsKKwkJaTkxNSA9IGdlbV9y ZW9wZW5fZHJpdmVyKGk5MTUpOworCQlnZW1fcXVpZXNjZW50X2dwdShpOTE1KTsKKworCQlmb3Ig KGludCBwZXJzaXN0cyA9IDA7IHBlcnNpc3RzIDw9IDE7IHBlcnNpc3RzKyspIHsKKwkJCWlndF9z cGluX3QgKnNwaW47CisJCQl1aW50MzJfdCBjdHg7CisKKwkJCWN0eCA9IGdlbV9jb250ZXh0X2Ny ZWF0ZShpOTE1KTsKKwkJCWdlbV9jb250ZXh0X3NldF9wZXJzaXN0ZW5jZShpOTE1LCBjdHgsIHBl cnNpc3RzKTsKKworCQkJc3BpbiA9IGlndF9zcGluX25ldyhpOTE1LCBjdHgsCisJCQkJCSAgICAu ZmxhZ3MgPSBJR1RfU1BJTl9GRU5DRV9PVVQpOworCisJCQlzZW5kZmQoc3ZbMF0sIHNwaW4tPm91 dF9mZW5jZSk7CisKKwkJCWlndF9saXN0X2RlbCgmc3Bpbi0+bGluayk7IC8qIHByZXZlbnQgYXV0 b2NsZWFudXAgKi8KKwkJfQorCX0KKwljbG9zZShzdlswXSk7CisJaWd0X3dhaXRjaGlsZHJlbigp OworCisJZmVuY2VbMF0gPSByZWN2ZmQoc3ZbMV0pOworCWZlbmNlWzFdID0gcmVjdmZkKHN2WzFd KTsKKwljbG9zZShzdlsxXSk7CisKKwkvKiBGaXJzdCBmZW5jZSBpcyBub24tcGVyc2lzdGVudCwg c28gc2hvdWxkIGJlIHJlc2V0ICovCisJaWd0X2Fzc2VydF9lcShzeW5jX2ZlbmNlX3dhaXQoZmVu Y2VbMF0sIE1TRUNfUEVSX1NFQyAvIDUpLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNfZmVuY2Vf c3RhdHVzKGZlbmNlWzBdKSwgLUVJTyk7CisJY2xvc2UoZmVuY2VbMF0pOworCisJLyogU2Vjb25k IGZlbmNlIGlzIHBlcnNpc3RlbnQsIHNvIHNob3VsZCBiZSBzdGlsbCBzcGlubmluZyAqLworCWln dF9hc3NlcnRfZXEoc3luY19mZW5jZV93YWl0KGZlbmNlWzFdLCAwKSwgLUVUSU1FKTsKKwljbG9z ZShmZW5jZVsxXSk7CisKKwkvKiBXZSBoYXZlIHRvIG1hbnVhbGx5IGNsZWFuIHVwIHRoZSBvcnBo YW5lZCBzcGlubmVyICovCisJaWd0X2Ryb3BfY2FjaGVzX3NldChpOTE1LCBEUk9QX1JFU0VUX0FD VElWRSk7CisKKwlnZW1fcXVpZXNjZW50X2dwdShpOTE1KTsKK30KKworc3RhdGljIHZvaWQgc2ln aWduKGludCBzaWcpCit7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbWl4ZWRfcHJvY2VzcyhpbnQg aTkxNSkKK3sKKwlzdHJ1Y3QgeworCQlpbnQgc3ZbMl07CisJfSBwWzJdOworCisJLyoKKwkgKiBJ ZiBvbmUgcHJvY2VzcyBkaWVzIGVhcmx5IGFuZCB0cmlnZ2VycyBpdHMgbm9ucGVyc2lzdGVudAor CSAqIGNvbnRleHQgYXJlIGNsZWFuZWQgdXAsIGJ1dCBpdCBzaG91bGQgbm90IGFmZmVjdCBhIHNl Y29uZCBwcm9jZXNzLgorCSAqLworCisJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7CisJZm9yIChp bnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHApOyBpKyspIHsKKwkJaWd0X3JlcXVpcmUoc29ja2V0 cGFpcihBRl9VTklYLCBTT0NLX0RHUkFNLCAwLCBwW2ldLnN2KSA9PSAwKTsKKworCQlpZ3RfZm9y ayhjaGlsZCwgMSkgeworCQkJaWd0X3NwaW5fdCAqc3BpbjsKKwkJCWludCBwaWQ7CisKKwkJCWk5 MTUgPSBnZW1fcmVvcGVuX2RyaXZlcihpOTE1KTsKKwkJCWdlbV9jb250ZXh0X3NldF9wZXJzaXN0 ZW5jZShpOTE1LCAwLCBpKTsKKworCQkJc3BpbiA9IGlndF9zcGluX25ldyhpOTE1LCAuZmxhZ3Mg PSBJR1RfU1BJTl9GRU5DRV9PVVQpOworCQkJLyogcHJldmVudCBhdXRvY2xlYW51cCAqLworCQkJ aWd0X2xpc3RfZGVsKCZzcGluLT5saW5rKTsKKworCQkJc2VuZGZkKHBbaV0uc3ZbMF0sIHNwaW4t Pm91dF9mZW5jZSk7CisKKwkJCS8qIFdhaXQgdW50aWwgd2UgYXJlIHRvbGQgdG8gZGllICovCisJ CQlwaWQgPSBnZXRwaWQoKTsKKwkJCXdyaXRlKHBbaV0uc3ZbMF0sICZwaWQsIHNpemVvZihwaWQp KTsKKwkJCXNpZ25hbChTSUdJTlQsIHNpZ2lnbik7CisJCQlwYXVzZSgpOworCQl9CisJfQorCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHApOyBpKyspIHsKKwkJaW50IGZlbmNlLCBw aWQ7CisKKwkJLyogVGhlIHByb2Nlc3MgaXMgbm90IGRlYWQgeWV0LCBzbyB0aGUgY29udGV4dCBj YW4gc3Bpbi4gKi8KKwkJZmVuY2UgPSByZWN2ZmQocFtpXS5zdlsxXSk7CisJCWlndF9hc3NlcnRf ZXEoc3luY19mZW5jZV93YWl0KGZlbmNlLCAwKSwgLUVUSU1FKTsKKworCQkvKiBLaWxsICp0aGlz KiBwcm9jZXNzICovCisJCXJlYWQocFtpXS5zdlsxXSwgJnBpZCwgc2l6ZW9mKHBpZCkpOworCQlp Z3RfYXNzZXJ0KGtpbGwocGlkLCBTSUdJTlQpID09IDApOworCisJCS8qCisJCSAqIEEgbGl0dGxl IGJpdCBvZiBzbGFjayByZXF1aXJlZCBmb3IgdGhlIHNpZ25hbCB0byB0ZXJtaW5hdGUKKwkJICog dGhlIHByb2Nlc3MgYW5kIGZvciB0aGUgc3lzdGVtIHRvIGNsZWFudXAgdGhlIGZkLgorCQkgKi8K KwkJc2NoZWRfeWllbGQoKTsKKwkJY2xvc2UocFtpXS5zdlswXSk7CisJCWNsb3NlKHBbaV0uc3Zb MV0pOworCQlyY3VfYmFycmllcihpOTE1KTsKKworCQlpZiAoaSA9PSAwKSB7CisJCQkvKiBGaXJz dCBwcm9jZXNzIGlzIG5vbi1wZXJzaXN0ZW50LCBzbyBzaG91bGQgYmUgcmVzZXQgKi8KKwkJCWln dF9hc3NlcnRfZXEoc3luY19mZW5jZV93YWl0KGZlbmNlLAorCQkJCQkJICAgICAgTVNFQ19QRVJf U0VDIC8gNSksIDApOworCQkJaWd0X2Fzc2VydF9lcShzeW5jX2ZlbmNlX3N0YXR1cyhmZW5jZSks IC1FSU8pOworCQl9IGVsc2UgeworCQkJLyogU2Vjb25kIGZlbmNlIGlzIHBlcnNpc3RlbnQsIHNv IHN0aWxsIHNwaW5uaW5nICovCisJCQlpZ3RfYXNzZXJ0X2VxKHN5bmNfZmVuY2Vfd2FpdChmZW5j ZSwgMCksIC1FVElNRSk7CisJCX0KKwkJY2xvc2UoZmVuY2UpOworCX0KKwlpZ3Rfd2FpdGNoaWxk cmVuKCk7CisKKwkvKiBXZSBoYXZlIHRvIG1hbnVhbGx5IGNsZWFuIHVwIHRoZSBvcnBoYW5lZCBz cGlubmVyICovCisJaWd0X2Ryb3BfY2FjaGVzX3NldChpOTE1LCBEUk9QX1JFU0VUX0FDVElWRSk7 CisJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7Cit9CisKK2lndF9tYWluCit7CisJaW50IGk5MTU7 CisKKwlpZ3RfZml4dHVyZSB7CisJCWk5MTUgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVM KTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGk5MTUpOworCisJCWlndF9yZXF1aXJlKGhhc19wZXJzaXN0 ZW5jZShpOTE1KSk7CisJCWVuYWJsZV9oYW5nY2hlY2soaTkxNSk7CisJfQorCisJaWd0X3N1YnRl c3RfZ3JvdXAgeworCQlpZ3Rfc3VidGVzdCgiaWRlbXBvdGVudCIpCisJCQl0ZXN0X2lkZW1wb3Rl bnQoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoInBlcnNpc3RlbmNlIikKKwkJCXRlc3RfcGVyc2lz dGVuY2UoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoImNsZWFudXAiKQorCQkJdGVzdF9ub25wZXJz aXN0ZW50X2NsZWFudXAoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoIm1peGVkIikKKwkJCXRlc3Rf bm9ucGVyc2lzdGVudF9taXhlZChpOTE1KTsKKworCQlpZ3Rfc3VidGVzdCgiaG9zdGlsZSIpCisJ CQl0ZXN0X25vbnBlcnNpc3RlbnRfaG9zdGlsZShpOTE1KTsKKworCQlpZ3Rfc3VidGVzdCgiaG9z dGlsZS1wcmVlbXB0IikKKwkJCXRlc3Rfbm9ucGVyc2lzdGVudF9ob3N0aWxlX3ByZWVtcHQoaTkx NSk7CisKKwkJaWd0X3N1YnRlc3QoImhhbmdjaGVjayIpCisJCQl0ZXN0X25vaGFuZ2NoZWNrX2hv c3RpbGUoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoImZpbGUiKQorCQkJdGVzdF9ub25wZXJzaXN0 ZW50X2ZpbGUoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoInByb2Nlc3MiKQorCQkJdGVzdF9ub25w ZXJzaXN0ZW50X3Byb2Nlc3MoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoIm1peGVkLXByb2Nlc3Nl cyIpCisJCQl0ZXN0X21peGVkX3Byb2Nlc3MoaTkxNSk7CisJfQorCisJaWd0X2ZpeHR1cmUgewor CQljbG9zZShpOTE1KTsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rl c3RzL21lc29uLmJ1aWxkCmluZGV4IDdlM2Y5ZTBhNC4uM2YzZWVlMjc3IDEwMDY0NAotLS0gYS90 ZXN0cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtMTIxLDYgKzEyMSw3 IEBAIGk5MTVfcHJvZ3MgPSBbCiAJJ2dlbV9jdHhfZXhlYycsCiAJJ2dlbV9jdHhfaXNvbGF0aW9u JywKIAknZ2VtX2N0eF9wYXJhbScsCisJJ2dlbV9jdHhfcGVyc2lzdGVuY2UnLAogCSdnZW1fY3R4 X3NoYXJlZCcsCiAJJ2dlbV9jdHhfc3dpdGNoJywKIAknZ2VtX2N0eF90aHJhc2gnLAotLSAKMi4y NC4wLnJjMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BF258CA9EBC for ; Thu, 24 Oct 2019 10:55:28 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9F3D720679 for ; Thu, 24 Oct 2019 10:55:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9F3D720679 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4DA0B893B9; Thu, 24 Oct 2019 10:55:28 +0000 (UTC) Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id AAE696E26F for ; Thu, 24 Oct 2019 10:55:16 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 18947983-1500050 for multiple; Thu, 24 Oct 2019 11:54:51 +0100 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Thu, 24 Oct 2019 11:54:43 +0100 Message-Id: <20191024105449.31948-3-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.24.0.rc0 In-Reply-To: <20191024105449.31948-1-chris@chris-wilson.co.uk> References: <20191024105449.31948-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t 3/9] Add i915/gem_ctx_persistence X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191024105443.CRcyHUNVQxxrfHhh_cSTWrjigMQ36UAZxdFxQahLj6M@z> U2FuaXR5IHRlc3QgZXhpc3RpbmcgcGVyc2lzdGVuY2UgYW5kIG5ldyBleGNpdGluZyBub24tcGVy c2lzdGVudCBjb250ZXh0CmJlaGF2aW91ci4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFo dGluZW5AbGludXguaW50ZWwuY29tPgpDYzogTWljaGHFgiBXaW5pYXJza2kgPG1pY2hhbC53aW5p YXJza2lAaW50ZWwuY29tPgpDYzogSm9uIEJsb29tZmllbGQgPGpvbi5ibG9vbWZpZWxkQGludGVs LmNvbT4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CkNjOiBB bmRpIFNoeXRpIDxhbmRpLnNoeXRpQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IEFuZGkgU2h5dGkg PGFuZGkuc2h5dGlAaW50ZWwuY29tPgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICAgICAg ICAgIHwgICAzICsKIHRlc3RzL2k5MTUvZ2VtX2N0eF9wZXJzaXN0ZW5jZS5jIHwgNTM4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgICAg ICAgIHwgICAxICsKIDMgZmlsZXMgY2hhbmdlZCwgNTQyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0ZXN0cy9pOTE1L2dlbV9jdHhfcGVyc2lzdGVuY2UuYwoKZGlmZiAtLWdpdCBh L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDM0 M2JlMDUwMC4uMDkzZWI1N2YzIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisr KyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTE1NCw2ICsxNTQsOSBAQCBnZW1fY3R4X2lz b2xhdGlvbl9TT1VSQ0VTID0gaTkxNS9nZW1fY3R4X2lzb2xhdGlvbi5jCiBURVNUU19wcm9ncyAr PSBnZW1fY3R4X3BhcmFtCiBnZW1fY3R4X3BhcmFtX1NPVVJDRVMgPSBpOTE1L2dlbV9jdHhfcGFy YW0uYwogCitURVNUU19wcm9ncyArPSBnZW1fY3R4X3BlcnNpc3RlbmNlCitnZW1fY3R4X3BlcnNp c3RlbmNlX1NPVVJDRVMgPSBpOTE1L2dlbV9jdHhfcGVyc2lzdGVuY2UuYworCiBURVNUU19wcm9n cyArPSBnZW1fY3R4X3NoYXJlZAogZ2VtX2N0eF9zaGFyZWRfU09VUkNFUyA9IGk5MTUvZ2VtX2N0 eF9zaGFyZWQuYwogCmRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9jdHhfcGVyc2lzdGVuY2Uu YyBiL3Rlc3RzL2k5MTUvZ2VtX2N0eF9wZXJzaXN0ZW5jZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMC4uMjc4MGQ1M2NjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaTkx NS9nZW1fY3R4X3BlcnNpc3RlbmNlLmMKQEAgLTAsMCArMSw1MzggQEAKKy8qCisgKiBDb3B5cmln aHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us CisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAq IElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxz Y2hlZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNp bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImRy bXRlc3QuaCIgLyogZ2VtX3F1aWVzY2VudF9ncHUoKSEgKi8KKyNpbmNsdWRlICJpOTE1L2dlbV9j b250ZXh0LmgiCisjaW5jbHVkZSAiaTkxNS9nZW1fc3VibWlzc2lvbi5oIgorI2luY2x1ZGUgImln dF9kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAiaWd0X2R1bW15bG9hZC5oIgorI2luY2x1ZGUgImlndF9z eXNmcy5oIgorI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiIC8qIGdlbV93YWl0KCkhICovCisj aW5jbHVkZSAic3dfc3luYy5oIgorCitzdGF0aWMgYm9vbCBoYXNfcGVyc2lzdGVuY2UoaW50IGk5 MTUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHAgPSB7CisJCS5wYXJh bSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9QRVJTSVNURU5DRSwKKwl9OworCXVpbnQ2NF90IHNhdmVk OworCisJaWYgKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGk5MTUsICZwKSkKKwkJcmV0dXJuIGZh bHNlOworCisJc2F2ZWQgPSBwLnZhbHVlOworCXAudmFsdWUgPSAwOworCWlmIChfX2dlbV9jb250 ZXh0X3NldF9wYXJhbShpOTE1LCAmcCkpCisJCXJldHVybiBmYWxzZTsKKworCXAudmFsdWUgPSBz YXZlZDsKKwlyZXR1cm4gX19nZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApID09IDA7Cit9 CisKK3N0YXRpYyBib29sIF9fZW5hYmxlX2hhbmdjaGVjayhpbnQgZGlyLCBib29sIHN0YXRlKQor eworCXJldHVybiBpZ3Rfc3lzZnNfc2V0KGRpciwgImVuYWJsZV9oYW5nY2hlY2siLCBzdGF0ZSA/ ICIxIiA6ICIwIik7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9oYW5nY2hlY2soaW50IGk5MTUp Cit7CisJaW50IGRpcjsKKworCWRpciA9IGlndF9zeXNmc19vcGVuX3BhcmFtZXRlcnMoaTkxNSk7 CisJaWYgKGRpciA8IDApIC8qIG5vIHBhcmFtZXRlcnMsIG11c3QgYmUgZGVmYXVsdCEgKi8KKwkJ cmV0dXJuOworCisJLyogSWYgaTkxNS5oYW5nY2hlY2sgaXMgcmVtb3ZlZCwgYXNzdW1lIHRoZSBk ZWZhdWx0IGlzIGdvb2QgKi8KKwlfX2VuYWJsZV9oYW5nY2hlY2soZGlyLCB0cnVlKTsKKwljbG9z ZShkaXIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2lkZW1wb3RlbnQoaW50IGk5MTUpCit7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHAgPSB7CisJCS5wYXJhbSA9IEk5MTVf Q09OVEVYVF9QQVJBTV9QRVJTSVNURU5DRSwKKwl9OworCWludCBleHBlY3RlZDsKKworCS8qCisJ ICogU2ltcGxlIHRlc3QgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGFibGUgdG8gcmVhZCBiYWNrIHRo ZSBzYW1lIGJvb2xlYW4KKwkgKiB2YWx1ZSBhcyB3ZSBzZXQuCisJICoKKwkgKiBFYWNoIHRpbWUg d2UgaW52ZXJ0IHRoZSBjdXJyZW50IHZhbHVlIHNvIHRoYXQgYXQgdGhlIGVuZCBvZiB0aGUgdGVz dCwKKwkgKiBpZiBzdWNjZXNzZnVsLCB3ZSBsZWF2ZSB0aGUgY29udGV4dCBpbiB0aGUgb3JpZ2lu YWwgc3RhdGUuCisJICovCisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oaTkxNSwgJnApOworCWV4 cGVjdGVkID0gISFwLnZhbHVlOworCisJZXhwZWN0ZWQgPSAhZXhwZWN0ZWQ7CisJcC52YWx1ZSA9 IGV4cGVjdGVkOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7CisJZ2VtX2NvbnRl eHRfZ2V0X3BhcmFtKGk5MTUsICZwKTsKKwlpZ3RfYXNzZXJ0X2VxKHAudmFsdWUsIGV4cGVjdGVk KTsKKworCWV4cGVjdGVkID0gIWV4cGVjdGVkOyAvKiBhbmQgcmVzdG9yZXMgKi8KKwlwLnZhbHVl ID0gZXhwZWN0ZWQ7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKKwlnZW1fY29u dGV4dF9nZXRfcGFyYW0oaTkxNSwgJnApOworCWlndF9hc3NlcnRfZXEocC52YWx1ZSwgZXhwZWN0 ZWQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3BlcnNpc3RlbmNlKGludCBpOTE1KQoreworCWln dF9zcGluX3QgKnNwaW47CisJaW50NjRfdCB0aW1lb3V0OworCXVpbnQzMl90IGN0eDsKKworCS8q CisJICogRGVmYXVsdCBiZWhhdmlvdXIgYXJlIGNvbnRleHRzIHJlbWFpbiBhbGl2ZSB1bnRpbCB0 aGVpciBsYXN0IGFjdGl2ZQorCSAqIHJlcXVlc3QgaXMgcmV0aXJlZCAtLSBubyBlYXJseSB0ZXJt aW5hdGlvbi4KKwkgKi8KKworCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKKwlnZW1f Y29udGV4dF9zZXRfcGVyc2lzdGVuY2UoaTkxNSwgY3R4LCB0cnVlKTsKKworCXNwaW4gPSBpZ3Rf c3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1RfU1BJTl9GRU5DRV9PVVQpOworCWdlbV9j b250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKKworCXRpbWVvdXQgPSBOU0VDX1BFUl9TRUMgLyA1 OworCWlndF9hc3NlcnRfZXEoZ2VtX3dhaXQoaTkxNSwgc3Bpbi0+aGFuZGxlLCAmdGltZW91dCks IC1FVElNRSk7CisKKwlpZ3Rfc3Bpbl9lbmQoc3Bpbik7CisKKwl0aW1lb3V0ID0gTlNFQ19QRVJf U0VDIC8gNTsKKwlpZ3RfYXNzZXJ0X2VxKGdlbV93YWl0KGk5MTUsIHNwaW4tPmhhbmRsZSwgJnRp bWVvdXQpLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNfZmVuY2Vfc3RhdHVzKHNwaW4tPm91dF9m ZW5jZSksIDEpOworCisJaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluKTsKKwlnZW1fcXVpZXNjZW50 X2dwdShpOTE1KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ub25wZXJzaXN0ZW50X2NsZWFudXAo aW50IGk5MTUpCit7CisJaW50NjRfdCB0aW1lb3V0ID0gTlNFQ19QRVJfU0VDIC8gNTsKKwlpZ3Rf c3Bpbl90ICpzcGluOworCXVpbnQzMl90IGN0eDsKKworCS8qCisJICogQSBub25wZXJzaXN0ZW50 IGNvbnRleHQgaXMgdGVybWluYXRlZCBpbW1lZGlhdGVseSB1cG9uIGNsb3N1cmUsCisJICogYW55 IGluZmxpZ2h0IHJlcXVlc3QgaXMgY2FuY2VsbGVkLgorCSAqLworCisJY3R4ID0gZ2VtX2NvbnRl eHRfY3JlYXRlKGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9wZXJzaXN0ZW5jZShpOTE1LCBjdHgs IGZhbHNlKTsKKworCXNwaW4gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1Rf U1BJTl9GRU5DRV9PVVQpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKKworCWln dF9hc3NlcnRfZXEoZ2VtX3dhaXQoaTkxNSwgc3Bpbi0+aGFuZGxlLCAmdGltZW91dCksIDApOwor CWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV9zdGF0dXMoc3Bpbi0+b3V0X2ZlbmNlKSwgLUVJTyk7 CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW4pOworCWdlbV9xdWllc2NlbnRfZ3B1KGk5MTUp OworfQorCitzdGF0aWMgdm9pZCB0ZXN0X25vbnBlcnNpc3RlbnRfbWl4ZWQoaW50IGk5MTUpCit7 CisJaW50IGZlbmNlWzNdOworCisJLyoKKwkgKiBPbmx5IGEgbm9ucGVyc2lzdGVudCBjb250ZXh0 IGlzIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkgdXBvbgorCSAqIGNsb3N1cmUsIGFueSBpbmZsaWdo dCByZXF1ZXN0IGlzIGNhbmNlbGxlZC4gSWYgdGhlcmUgaXMgYWxzbworCSAqIGFuIGFjdGl2ZSBw ZXJzaXN0ZW50IGNvbnRleHQgY2xvc2VkLCBpdCBzaG91bGQgYmUgdW5hZmZmZWN0ZWQuCisJICov CisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmVuY2UpOyBpKyspIHsKKwkJaWd0 X3NwaW5fdCAqc3BpbjsKKwkJdWludDMyX3QgY3R4OworCisJCWN0eCA9IGdlbV9jb250ZXh0X2Ny ZWF0ZShpOTE1KTsKKwkJZ2VtX2NvbnRleHRfc2V0X3BlcnNpc3RlbmNlKGk5MTUsIGN0eCwgaSAm IDEpOworCisJCXNwaW4gPSBpZ3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1RfU1BJ Tl9GRU5DRV9PVVQpOworCQlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisKKwkJZmVu Y2VbaV0gPSBzcGluLT5vdXRfZmVuY2U7CisJfQorCisJLyogT3V0ZXIgcGFpciBvZiBjb250ZXh0 cyB3ZXJlIG5vbi1wZXJzaXN0ZW50IGFuZCBraWxsZWQgKi8KKwlpZ3RfYXNzZXJ0X2VxKHN5bmNf ZmVuY2Vfd2FpdChmZW5jZVswXSwgTVNFQ19QRVJfU0VDIC8gNSksIDApOworCWlndF9hc3NlcnRf ZXEoc3luY19mZW5jZV9zdGF0dXMoZmVuY2VbMF0pLCAtRUlPKTsKKworCWlndF9hc3NlcnRfZXEo c3luY19mZW5jZV93YWl0KGZlbmNlWzJdLCBNU0VDX1BFUl9TRUMgLyA1KSwgMCk7CisJaWd0X2Fz c2VydF9lcShzeW5jX2ZlbmNlX3N0YXR1cyhmZW5jZVsyXSksIC1FSU8pOworCisJLyogQnV0IHRo ZSBtaWRkbGUgY29udGV4dCBpcyBzdGlsbCBydW5uaW5nICovCisJaWd0X2Fzc2VydF9lcShzeW5j X2ZlbmNlX3dhaXQoZmVuY2VbMV0sIDApLCAtRVRJTUUpOworCisJZ2VtX3F1aWVzY2VudF9ncHUo aTkxNSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfbm9ucGVyc2lzdGVudF9ob3N0aWxlKGludCBp OTE1KQoreworCWludDY0X3QgdGltZW91dCA9IE5TRUNfUEVSX1NFQyAvIDI7CisJaWd0X3NwaW5f dCAqc3BpbjsKKwl1aW50MzJfdCBjdHg7CisKKwkvKgorCSAqIElmIHdlIGNhbm5vdCBjbGVhbmx5 IGNhbmNlbCB0aGUgbm9uLXBlcnNpc3RlbnQgY29udGV4dCBvbiBjbG9zdXJlLAorCSAqIGUuZy4g cHJlZW1wdGlvbiBmYWlscywgd2UgYXJlIGZvcmNlZCB0byByZXNldCB0aGUgR1BVIHRvIHRlcm1p bmF0ZQorCSAqIHRoZSByZXF1ZXN0cyBhbmQgY2xlYW51cCB0aGUgY29udGV4dC4KKwkgKi8KKwor CWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKKwlnZW1fY29udGV4dF9zZXRfcGVyc2lz dGVuY2UoaTkxNSwgY3R4LCBmYWxzZSk7CisKKwlzcGluID0gaWd0X3NwaW5fbmV3KGk5MTUsIGN0 eCwgLmZsYWdzID0gSUdUX1NQSU5fTk9fUFJFRU1QVElPTik7CisJZ2VtX2NvbnRleHRfZGVzdHJv eShpOTE1LCBjdHgpOworCisJaWd0X2Fzc2VydF9lcShnZW1fd2FpdChpOTE1LCBzcGluLT5oYW5k bGUsICZ0aW1lb3V0KSwgMCk7CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW4pOworCWdlbV9x dWllc2NlbnRfZ3B1KGk5MTUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X25vbnBlcnNpc3RlbnRf aG9zdGlsZV9wcmVlbXB0KGludCBpOTE1KQoreworCWludDY0X3QgdGltZW91dCA9IE5TRUNfUEVS X1NFQyAvIDI7CisJaWd0X3NwaW5fdCAqc3BpblsyXTsKKwl1aW50MzJfdCBjdHg7CisKKwkvKgor CSAqIERvdWJsZSBwbHVzIHVuZ29vZC4KKwkgKgorCSAqIEhlcmUgd2Ugd291bGQgbm90IGJlIGFi bGUgdG8gY2FuY2VsIHRoZSBob3N0aWxlIG5vbi1wZXJzaXN0ZW50CisJICogY29udGV4dCBhbmQg d2UgY2Fubm90IHByZWVtcHQtdG8taWRsZSBhcyBpdCBpcyBhbHJlYWR5IHdhaXRpbmcKKwkgKiBv biBwcmVlbXB0aW9uIGZvciBpdHNlbGYuIExldCdzIGhvcGUgdGhlIGtlcm5lbCBjYW4gc2F2ZSB0 aGUKKwkgKiBkYXkgd2l0aCBhIHJlc2V0LgorCSAqLworCisJaWd0X3JlcXVpcmUoZ2VtX3NjaGVk dWxlcl9oYXNfcHJlZW1wdGlvbihpOTE1KSk7CisKKwljdHggPSBnZW1fY29udGV4dF9jcmVhdGUo aTkxNSk7CisJZ2VtX2NvbnRleHRfc2V0X3BlcnNpc3RlbmNlKGk5MTUsIGN0eCwgdHJ1ZSk7CisJ Z2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGk5MTUsIGN0eCwgMCk7CisJc3BpblswXSA9IGlndF9z cGluX25ldyhpOTE1LCBjdHgsCisJCQkgICAgICAgLmZsYWdzID0gKElHVF9TUElOX05PX1BSRUVN UFRJT04gfAorCQkJCQkgSUdUX1NQSU5fUE9MTF9SVU4pKTsKKwlnZW1fY29udGV4dF9kZXN0cm95 KGk5MTUsIGN0eCk7CisKKwlpZ3Rfc3Bpbl9idXN5d2FpdF91bnRpbF9zdGFydGVkKHNwaW5bMF0p OworCisJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOworCWdlbV9jb250ZXh0X3NldF9w ZXJzaXN0ZW5jZShpOTE1LCBjdHgsIGZhbHNlKTsKKwlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHko aTkxNSwgY3R4LCAxKTsgLyogaGlnaGVyIHByaW9yaXR5IHRoYW4gMCAqLworCXNwaW5bMV0gPSBp Z3Rfc3Bpbl9uZXcoaTkxNSwgY3R4LCAuZmxhZ3MgPSBJR1RfU1BJTl9OT19QUkVFTVBUSU9OKTsK KwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eCk7CisKKwlpZ3RfYXNzZXJ0X2VxKGdlbV93 YWl0KGk5MTUsIHNwaW5bMV0tPmhhbmRsZSwgJnRpbWVvdXQpLCAwKTsKKworCWlndF9zcGluX2Zy ZWUoaTkxNSwgc3BpblsxXSk7CisJaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluWzBdKTsKKwlnZW1f cXVpZXNjZW50X2dwdShpOTE1KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ub2hhbmdjaGVja19o b3N0aWxlKGludCBpOTE1KQoreworCWludDY0X3QgdGltZW91dCA9IE5TRUNfUEVSX1NFQyAvIDI7 CisJaWd0X3NwaW5fdCAqc3BpbjsKKwl1aW50MzJfdCBjdHg7CisJaW50IGRpcjsKKworCS8qCisJ ICogRXZlbiBpZiB0aGUgdXNlciBkaXNhYmxlcyBoYW5nY2hlY2sgZHVyaW5nIHRoZWlyIGNvbnRl eHQsCisJICogd2UgZm9yY2libHkgdGVybWluYXRlIHRoYXQgY29udGV4dC4KKwkgKi8KKworCWRp ciA9IGlndF9zeXNmc19vcGVuX3BhcmFtZXRlcnMoaTkxNSk7CisJaWd0X3JlcXVpcmUoZGlyICE9 IC0xKTsKKworCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKKworCWlndF9yZXF1aXJl KF9fZW5hYmxlX2hhbmdjaGVjayhkaXIsIGZhbHNlKSk7CisKKwlzcGluID0gaWd0X3NwaW5fbmV3 KGk5MTUsIGN0eCwgLmZsYWdzID0gSUdUX1NQSU5fTk9fUFJFRU1QVElPTik7CisJZ2VtX2NvbnRl eHRfZGVzdHJveShpOTE1LCBjdHgpOworCisJaWd0X2Fzc2VydF9lcShnZW1fd2FpdChpOTE1LCBz cGluLT5oYW5kbGUsICZ0aW1lb3V0KSwgMCk7CisKKwlpZ3RfcmVxdWlyZShfX2VuYWJsZV9oYW5n Y2hlY2soZGlyLCB0cnVlKSk7CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW4pOworCWdlbV9x dWllc2NlbnRfZ3B1KGk5MTUpOworCWNsb3NlKGRpcik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf bm9ucGVyc2lzdGVudF9maWxlKGludCBpOTE1KQoreworCWludCBkZWJ1Z2ZzID0gaTkxNTsKKwlp Z3Rfc3Bpbl90ICpzcGluOworCXVpbnQzMl90IGN0eDsKKworCS8qCisJICogQSBjb250ZXh0IG1h eSBsaXZlIGJleW9uZCBpdHMgaW5pdGlhbCBzdHJ1Y3QgZmlsZSwgZXhjZXB0IGlmIGl0CisJICog aGFzIGJlZW4gbWFkZSBub25wZXJzaXN0ZW50LCBpbiB3aGljaCBjYXNlIGl0IG11c3QgYmUgdGVy bWluYXRlZC4KKwkgKi8KKworCWk5MTUgPSBnZW1fcmVvcGVuX2RyaXZlcihpOTE1KTsKKwlnZW1f cXVpZXNjZW50X2dwdShpOTE1KTsKKworCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsK KwlnZW1fY29udGV4dF9zZXRfcGVyc2lzdGVuY2UoaTkxNSwgY3R4LCBmYWxzZSk7CisKKwlzcGlu ID0gaWd0X3NwaW5fbmV3KGk5MTUsIGN0eCwgLmZsYWdzID0gSUdUX1NQSU5fRkVOQ0VfT1VUKTsK KworCWNsb3NlKGk5MTUpOworCXJjdV9iYXJyaWVyKGRlYnVnZnMpOyAvKiBmb3JjZSB0aGUgZGVs YXllZCBmcHV0KCkgKi8KKworCWlndF9hc3NlcnRfZXEoc3luY19mZW5jZV93YWl0KHNwaW4tPm91 dF9mZW5jZSwgTVNFQ19QRVJfU0VDIC8gNSksIDApOworCWlndF9hc3NlcnRfZXEoc3luY19mZW5j ZV9zdGF0dXMoc3Bpbi0+b3V0X2ZlbmNlKSwgLUVJTyk7CisKKwlzcGluLT5oYW5kbGUgPSAwOwor CWlndF9zcGluX2ZyZWUoLTEsIHNwaW4pOworfQorCitzdGF0aWMgdm9pZCBzZW5kZmQoaW50IHNv Y2tldCwgaW50IGZkKQoreworCWNoYXIgYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKGZkKSldOworCXN0 cnVjdCBpb3ZlYyBpbyA9IHsgLmlvdl9iYXNlID0gKGNoYXIgKikiQUJDIiwgLmlvdl9sZW4gPSAz IH07CisJc3RydWN0IG1zZ2hkciBtc2cgPSB7CisJCS5tc2dfaW92ID0gJmlvLAorCQkubXNnX2lv dmxlbiA9IDEsCisJCS5tc2dfY29udHJvbCA9IGJ1ZiwKKwkJLm1zZ19jb250cm9sbGVuID0gQ01T R19MRU4oc2l6ZW9mKGZkKSksCisJfTsKKwlzdHJ1Y3QgY21zZ2hkciAqY21zZyA9IENNU0dfRklS U1RIRFIoJm1zZyk7CisKKwljbXNnLT5jbXNnX2xldmVsID0gU09MX1NPQ0tFVDsKKwljbXNnLT5j bXNnX3R5cGUgPSBTQ01fUklHSFRTOworCWNtc2ctPmNtc2dfbGVuID0gbXNnLm1zZ19jb250cm9s bGVuOworCSooaW50ICopQ01TR19EQVRBKGNtc2cpID0gZmQ7CisKKwlpZ3RfYXNzZXJ0KHNlbmRt c2coc29ja2V0LCAmbXNnLCAwKSAhPSAtMSk7Cit9CisKK3N0YXRpYyBpbnQgcmVjdmZkKGludCBz b2NrZXQpCit7CisJY2hhciBtX2J1ZmZlclsyNTZdLCBjX2J1ZmZlclsyNTZdOworCXN0cnVjdCBp b3ZlYyBpbyA9IHsKKwkJLmlvdl9iYXNlID0gbV9idWZmZXIsCisJCS5pb3ZfbGVuID0gc2l6ZW9m KG1fYnVmZmVyKSwKKwl9OworCXN0cnVjdCBtc2doZHIgbXNnID0geworCQkubXNnX2lvdiA9ICZp bywKKwkJLm1zZ19pb3ZsZW4gPSAxLAorCQkubXNnX2NvbnRyb2wgPSBjX2J1ZmZlciwKKwkJLm1z Z19jb250cm9sbGVuID0gc2l6ZW9mKGNfYnVmZmVyKSwKKwl9OworCisJaWd0X2Fzc2VydChyZWN2 bXNnKHNvY2tldCwgJm1zZywgMCkgIT0gLTEpOworCXJldHVybiAqKGludCAqKUNNU0dfREFUQShD TVNHX0ZJUlNUSERSKCZtc2cpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ub25wZXJzaXN0ZW50 X3Byb2Nlc3MoaW50IGk5MTUpCit7CisJaW50IGZlbmNlWzJdLCBzdlsyXTsKKworCS8qCisJICog SWYgYSBwcm9jZXNzIGRpZXMgZWFybHksIGFueSBub25wZXJzaXN0ZW50IGNvbnRleHRzIGl0IGhh ZAorCSAqIG9wZW4gbXVzdCBiZSB0ZXJtaW5hdGVkIHRvby4gQnV0IGFueSBwZXJzaXN0ZW50IGNv bnRleHRzLAorCSAqIHNob3VsZCBzdXJ2aXZlIHVudGlsIHRoZWlyIHJlcXVlc3RzIGFyZSBjb21w bGV0ZS4KKwkgKi8KKworCWlndF9yZXF1aXJlKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19ER1JB TSwgMCwgc3YpID09IDApOworCisJaWd0X2ZvcmsoY2hpbGQsIDEpIHsKKwkJaTkxNSA9IGdlbV9y ZW9wZW5fZHJpdmVyKGk5MTUpOworCQlnZW1fcXVpZXNjZW50X2dwdShpOTE1KTsKKworCQlmb3Ig KGludCBwZXJzaXN0cyA9IDA7IHBlcnNpc3RzIDw9IDE7IHBlcnNpc3RzKyspIHsKKwkJCWlndF9z cGluX3QgKnNwaW47CisJCQl1aW50MzJfdCBjdHg7CisKKwkJCWN0eCA9IGdlbV9jb250ZXh0X2Ny ZWF0ZShpOTE1KTsKKwkJCWdlbV9jb250ZXh0X3NldF9wZXJzaXN0ZW5jZShpOTE1LCBjdHgsIHBl cnNpc3RzKTsKKworCQkJc3BpbiA9IGlndF9zcGluX25ldyhpOTE1LCBjdHgsCisJCQkJCSAgICAu ZmxhZ3MgPSBJR1RfU1BJTl9GRU5DRV9PVVQpOworCisJCQlzZW5kZmQoc3ZbMF0sIHNwaW4tPm91 dF9mZW5jZSk7CisKKwkJCWlndF9saXN0X2RlbCgmc3Bpbi0+bGluayk7IC8qIHByZXZlbnQgYXV0 b2NsZWFudXAgKi8KKwkJfQorCX0KKwljbG9zZShzdlswXSk7CisJaWd0X3dhaXRjaGlsZHJlbigp OworCisJZmVuY2VbMF0gPSByZWN2ZmQoc3ZbMV0pOworCWZlbmNlWzFdID0gcmVjdmZkKHN2WzFd KTsKKwljbG9zZShzdlsxXSk7CisKKwkvKiBGaXJzdCBmZW5jZSBpcyBub24tcGVyc2lzdGVudCwg c28gc2hvdWxkIGJlIHJlc2V0ICovCisJaWd0X2Fzc2VydF9lcShzeW5jX2ZlbmNlX3dhaXQoZmVu Y2VbMF0sIE1TRUNfUEVSX1NFQyAvIDUpLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHN5bmNfZmVuY2Vf c3RhdHVzKGZlbmNlWzBdKSwgLUVJTyk7CisJY2xvc2UoZmVuY2VbMF0pOworCisJLyogU2Vjb25k IGZlbmNlIGlzIHBlcnNpc3RlbnQsIHNvIHNob3VsZCBiZSBzdGlsbCBzcGlubmluZyAqLworCWln dF9hc3NlcnRfZXEoc3luY19mZW5jZV93YWl0KGZlbmNlWzFdLCAwKSwgLUVUSU1FKTsKKwljbG9z ZShmZW5jZVsxXSk7CisKKwkvKiBXZSBoYXZlIHRvIG1hbnVhbGx5IGNsZWFuIHVwIHRoZSBvcnBo YW5lZCBzcGlubmVyICovCisJaWd0X2Ryb3BfY2FjaGVzX3NldChpOTE1LCBEUk9QX1JFU0VUX0FD VElWRSk7CisKKwlnZW1fcXVpZXNjZW50X2dwdShpOTE1KTsKK30KKworc3RhdGljIHZvaWQgc2ln aWduKGludCBzaWcpCit7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbWl4ZWRfcHJvY2VzcyhpbnQg aTkxNSkKK3sKKwlzdHJ1Y3QgeworCQlpbnQgc3ZbMl07CisJfSBwWzJdOworCisJLyoKKwkgKiBJ ZiBvbmUgcHJvY2VzcyBkaWVzIGVhcmx5IGFuZCB0cmlnZ2VycyBpdHMgbm9ucGVyc2lzdGVudAor CSAqIGNvbnRleHQgYXJlIGNsZWFuZWQgdXAsIGJ1dCBpdCBzaG91bGQgbm90IGFmZmVjdCBhIHNl Y29uZCBwcm9jZXNzLgorCSAqLworCisJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7CisJZm9yIChp bnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHApOyBpKyspIHsKKwkJaWd0X3JlcXVpcmUoc29ja2V0 cGFpcihBRl9VTklYLCBTT0NLX0RHUkFNLCAwLCBwW2ldLnN2KSA9PSAwKTsKKworCQlpZ3RfZm9y ayhjaGlsZCwgMSkgeworCQkJaWd0X3NwaW5fdCAqc3BpbjsKKwkJCWludCBwaWQ7CisKKwkJCWk5 MTUgPSBnZW1fcmVvcGVuX2RyaXZlcihpOTE1KTsKKwkJCWdlbV9jb250ZXh0X3NldF9wZXJzaXN0 ZW5jZShpOTE1LCAwLCBpKTsKKworCQkJc3BpbiA9IGlndF9zcGluX25ldyhpOTE1LCAuZmxhZ3Mg PSBJR1RfU1BJTl9GRU5DRV9PVVQpOworCQkJLyogcHJldmVudCBhdXRvY2xlYW51cCAqLworCQkJ aWd0X2xpc3RfZGVsKCZzcGluLT5saW5rKTsKKworCQkJc2VuZGZkKHBbaV0uc3ZbMF0sIHNwaW4t Pm91dF9mZW5jZSk7CisKKwkJCS8qIFdhaXQgdW50aWwgd2UgYXJlIHRvbGQgdG8gZGllICovCisJ CQlwaWQgPSBnZXRwaWQoKTsKKwkJCXdyaXRlKHBbaV0uc3ZbMF0sICZwaWQsIHNpemVvZihwaWQp KTsKKwkJCXNpZ25hbChTSUdJTlQsIHNpZ2lnbik7CisJCQlwYXVzZSgpOworCQl9CisJfQorCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHApOyBpKyspIHsKKwkJaW50IGZlbmNlLCBw aWQ7CisKKwkJLyogVGhlIHByb2Nlc3MgaXMgbm90IGRlYWQgeWV0LCBzbyB0aGUgY29udGV4dCBj YW4gc3Bpbi4gKi8KKwkJZmVuY2UgPSByZWN2ZmQocFtpXS5zdlsxXSk7CisJCWlndF9hc3NlcnRf ZXEoc3luY19mZW5jZV93YWl0KGZlbmNlLCAwKSwgLUVUSU1FKTsKKworCQkvKiBLaWxsICp0aGlz KiBwcm9jZXNzICovCisJCXJlYWQocFtpXS5zdlsxXSwgJnBpZCwgc2l6ZW9mKHBpZCkpOworCQlp Z3RfYXNzZXJ0KGtpbGwocGlkLCBTSUdJTlQpID09IDApOworCisJCS8qCisJCSAqIEEgbGl0dGxl IGJpdCBvZiBzbGFjayByZXF1aXJlZCBmb3IgdGhlIHNpZ25hbCB0byB0ZXJtaW5hdGUKKwkJICog dGhlIHByb2Nlc3MgYW5kIGZvciB0aGUgc3lzdGVtIHRvIGNsZWFudXAgdGhlIGZkLgorCQkgKi8K KwkJc2NoZWRfeWllbGQoKTsKKwkJY2xvc2UocFtpXS5zdlswXSk7CisJCWNsb3NlKHBbaV0uc3Zb MV0pOworCQlyY3VfYmFycmllcihpOTE1KTsKKworCQlpZiAoaSA9PSAwKSB7CisJCQkvKiBGaXJz dCBwcm9jZXNzIGlzIG5vbi1wZXJzaXN0ZW50LCBzbyBzaG91bGQgYmUgcmVzZXQgKi8KKwkJCWln dF9hc3NlcnRfZXEoc3luY19mZW5jZV93YWl0KGZlbmNlLAorCQkJCQkJICAgICAgTVNFQ19QRVJf U0VDIC8gNSksIDApOworCQkJaWd0X2Fzc2VydF9lcShzeW5jX2ZlbmNlX3N0YXR1cyhmZW5jZSks IC1FSU8pOworCQl9IGVsc2UgeworCQkJLyogU2Vjb25kIGZlbmNlIGlzIHBlcnNpc3RlbnQsIHNv IHN0aWxsIHNwaW5uaW5nICovCisJCQlpZ3RfYXNzZXJ0X2VxKHN5bmNfZmVuY2Vfd2FpdChmZW5j ZSwgMCksIC1FVElNRSk7CisJCX0KKwkJY2xvc2UoZmVuY2UpOworCX0KKwlpZ3Rfd2FpdGNoaWxk cmVuKCk7CisKKwkvKiBXZSBoYXZlIHRvIG1hbnVhbGx5IGNsZWFuIHVwIHRoZSBvcnBoYW5lZCBz cGlubmVyICovCisJaWd0X2Ryb3BfY2FjaGVzX3NldChpOTE1LCBEUk9QX1JFU0VUX0FDVElWRSk7 CisJZ2VtX3F1aWVzY2VudF9ncHUoaTkxNSk7Cit9CisKK2lndF9tYWluCit7CisJaW50IGk5MTU7 CisKKwlpZ3RfZml4dHVyZSB7CisJCWk5MTUgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVM KTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGk5MTUpOworCisJCWlndF9yZXF1aXJlKGhhc19wZXJzaXN0 ZW5jZShpOTE1KSk7CisJCWVuYWJsZV9oYW5nY2hlY2soaTkxNSk7CisJfQorCisJaWd0X3N1YnRl c3RfZ3JvdXAgeworCQlpZ3Rfc3VidGVzdCgiaWRlbXBvdGVudCIpCisJCQl0ZXN0X2lkZW1wb3Rl bnQoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoInBlcnNpc3RlbmNlIikKKwkJCXRlc3RfcGVyc2lz dGVuY2UoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoImNsZWFudXAiKQorCQkJdGVzdF9ub25wZXJz aXN0ZW50X2NsZWFudXAoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoIm1peGVkIikKKwkJCXRlc3Rf bm9ucGVyc2lzdGVudF9taXhlZChpOTE1KTsKKworCQlpZ3Rfc3VidGVzdCgiaG9zdGlsZSIpCisJ CQl0ZXN0X25vbnBlcnNpc3RlbnRfaG9zdGlsZShpOTE1KTsKKworCQlpZ3Rfc3VidGVzdCgiaG9z dGlsZS1wcmVlbXB0IikKKwkJCXRlc3Rfbm9ucGVyc2lzdGVudF9ob3N0aWxlX3ByZWVtcHQoaTkx NSk7CisKKwkJaWd0X3N1YnRlc3QoImhhbmdjaGVjayIpCisJCQl0ZXN0X25vaGFuZ2NoZWNrX2hv c3RpbGUoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoImZpbGUiKQorCQkJdGVzdF9ub25wZXJzaXN0 ZW50X2ZpbGUoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoInByb2Nlc3MiKQorCQkJdGVzdF9ub25w ZXJzaXN0ZW50X3Byb2Nlc3MoaTkxNSk7CisKKwkJaWd0X3N1YnRlc3QoIm1peGVkLXByb2Nlc3Nl cyIpCisJCQl0ZXN0X21peGVkX3Byb2Nlc3MoaTkxNSk7CisJfQorCisJaWd0X2ZpeHR1cmUgewor CQljbG9zZShpOTE1KTsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rl c3RzL21lc29uLmJ1aWxkCmluZGV4IDdlM2Y5ZTBhNC4uM2YzZWVlMjc3IDEwMDY0NAotLS0gYS90 ZXN0cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtMTIxLDYgKzEyMSw3 IEBAIGk5MTVfcHJvZ3MgPSBbCiAJJ2dlbV9jdHhfZXhlYycsCiAJJ2dlbV9jdHhfaXNvbGF0aW9u JywKIAknZ2VtX2N0eF9wYXJhbScsCisJJ2dlbV9jdHhfcGVyc2lzdGVuY2UnLAogCSdnZW1fY3R4 X3NoYXJlZCcsCiAJJ2dlbV9jdHhfc3dpdGNoJywKIAknZ2VtX2N0eF90aHJhc2gnLAotLSAKMi4y NC4wLnJjMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4