From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Kalamarz, Lukasz" Subject: Re: [PATCH i-g-t] tests/gem_mocs_settings: Fix LNCFCMOCS testing and extract the subtests Date: Fri, 30 Jun 2017 12:14:10 +0000 Message-ID: <1498824563.5220.8.camel@intel.com> References: <20170628154145.9914-1-michal.winiarski@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 45E4D6E7D2 for ; Fri, 30 Jun 2017 12:14:14 +0000 (UTC) In-Reply-To: <20170628154145.9914-1-michal.winiarski@intel.com> Content-Language: en-US Content-ID: <9081913C0A1FBA49AB433F648910552A@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Winiarski, Michal" , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE3LTA2LTI4IGF0IDE3OjQxICswMjAwLCBNaWNoYcWCIFdpbmlhcnNraSB3cm90 ZToNCj4gVGVzdGluZyBMTkNGQ01PQ1MgdmFsdWVzIG9uIG5vbi1yZW5kZXIgZW5naW5lcyBpcyB0 cmlja3kuIFRoZSB2YWx1ZXMNCj4gaW4NCj4gdGhvc2UgcmVnaXN0ZXJzIGFyZSBsb3N0IG9uIFJD Niwgd2hpY2ggbWVhbnMgdGhhdCBpZiB1c2VycyBvZiBub24tDQo+IHJlbmRlcg0KPiBlbmdpbmVz IHdhbnQgdG8gc2VlIHRoZSBwcm9wZXIgdmFsdWVzLCB0aGV5IG5lZWQgdG8gb2J0YWluIGENCj4g Zm9yY2V3YWtlDQo+IGFuZCBleGVjdXRlIHNvbWV0aGluZyBvbiByZW5kZXIgKHJlbHlpbmcgb24g aXQgdG8gcmVzdG9yZSB0aGUgdmFsdWVzKQ0KPiBiZWZvcmUgdXNpbmcgbm9uLXJlbmRlciBlbmdp bmUuDQo+IFByZXZpb3VzIHZlcnNpb24gb2YgdGhlIHRlc3QgZGlkIGV4YWN0bHkgdGhhdCAtIHdl IHdlcmUgcmVseWluZyBvbg0KPiB0aGUNCj4gZmFjdCB0aGF0IHdlJ3JlIHRha2luZyBmb3JjZXdh a2UgKGhpZGRlbiBieQ0KPiBpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdCwNCj4gZXZlbiB0aG91 Z2ggdGhlIHRlc3QgaXMgbm90IGRvaW5nIGFueSBtbWlvIGFjY2Vzc2VzKSBiZWZvcmUgaXRlcmF0 aW5nDQo+IHRocm91Z2ggZW5naW5lcyAoYW5kIHJlbmRlciBpcyBiZWZvcmUgb3RoZXIgZW5naW5l cywgc28gam9iIGRvbmUpLg0KPiBJIHJlYWxseSBob3BlIHRoYXQgdGhpcyBpcyBub3QgYW4gQUJJ IGFuZCB0aG9zZSByZWdpc3RlcnMgYXJlIG5vdA0KPiB1c2VkDQo+IG9uIG5vbi1yZW5kZXIgaW4g YW55IHdheS4gTGV0J3MgbGltaXQgdGVzdGluZyBMTkNGQ01PQ1MgdG8gcmVuZGVyDQo+IGVuZ2lu ZSBvbmx5Lg0KPiBUaGUgb3RoZXIgbm9uLXJlbmRlciBpc3N1ZSBpcyB0aGF0IHdoZW4gd2UncmUg dXNpbmcgSTkxNV9FWEVDX0JTRCwgd2UNCj4gY2FuJ3QgYmUgc3VyZSB3aGljaCBCU0QgcmluZyB3 ZSdsbCBlbmQgdXAgZXhlY3V0aW5nIG9uLiBMZXQncw0KPiBleHBsaWNpdGx5IHNlbGVjdCBCU0Qx IGFuZCBCU0QyIGluIG91ciB0ZXN0cy4NCj4gV2hpbGUgd2UncmUgaGVyZSwgbGV0J3MgYWxzbyBy ZW1vdmUgdGhlIGR1cGxpY2F0ZWQgY29kZSBhbmQgYWRkIHNvbWUNCj4gc3RydWN0dXJlIGJ5IGV4 dHJhY3RpbmcgbW92aW5nIG1vcmUgY29udGVudCBpbnRvIHN1YnRlc3RzLg0KPiBXZSdyZSBvbmx5 IGRvaW5nIHRlc3RzIHRoYXQgaW52b2x2ZSAiZGlydHlpbmciIHRoZSByZWdpc3RlcnMgZm9yIHRo ZQ0KPiByZW5kZXIgZW5naW5lIC0gc2luY2UgaXQncyB0aGUgb25seSBvbmUgdGhhdCBoYXMgdGhv c2UgcmVnaXN0ZXJzIGluDQo+IGl0cw0KPiBjb250ZXh0Lg0KPiANCj4gQ2M6IEFya2FkaXVzeiBI aWxlciA8YXJrYWRpdXN6LmhpbGVyQGludGVsLmNvbT4NCj4gQ2M6IENocmlzIFdpbHNvbiA8Y2hy aXNAY2hyaXMtd2lsc29uLmNvLnVrPg0KPiBDYzogRGF2aWQgV2VpbmVoYWxsIDxkYXZpZC53ZWlu ZWhhbGxAbGludXguaW50ZWwuY29tPg0KPiBDYzogxYF1a2FzeiBLYcWCYW1hcnogPGx1a2Fzei5r YWxhbWFyekBpbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IE1pY2hhxYIgV2luaWFyc2tpIDxt aWNoYWwud2luaWFyc2tpQGludGVsLmNvbT4NCg0KUmV2aWV3ZWQtQnk6IEx1a2FzeiBLYWxhbWFy eiA8bHVrYXN6LmthbGFtYXJ6QGludGVsLmNvbT4NCg0KLS3CoA0KTHVrYXN6DQoNCj4gLS0tDQo+ IMKgdGVzdHMvZ2VtX21vY3Nfc2V0dGluZ3MuYyB8IDM1MyArKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLS0tLS0tDQo+IC0tLS0tLS0tLS0tLQ0KPiDCoDEgZmlsZSBjaGFuZ2VkLCAxMDggaW5z ZXJ0aW9ucygrKSwgMjQ1IGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2dl bV9tb2NzX3NldHRpbmdzLmMgYi90ZXN0cy9nZW1fbW9jc19zZXR0aW5ncy5jDQo+IGluZGV4IGE5 NmFhNjYuLjk3NjBjMGUgMTAwNjQ0DQo+IC0tLSBhL3Rlc3RzL2dlbV9tb2NzX3NldHRpbmdzLmMN Cj4gKysrIGIvdGVzdHMvZ2VtX21vY3Nfc2V0dGluZ3MuYw0KPiBAQCAtMzIsMTQgKzMyLDI4IEBA DQo+IMKgI2luY2x1ZGUgImlndF9zeXNmcy5oIg0KPiDCoA0KPiDCoCNkZWZpbmUgTUFYX05VTUJF Ul9NT0NTX1JFR0lTVEVSUwkoNjQpDQo+IC0NCj4gwqBlbnVtIHsNCj4gwqAJTk9ORSwNCj4gwqAJ UkVTRVQsDQo+ICsJUkM2LA0KPiDCoAlTVVNQRU5ELA0KPiAtCUhJQkVSTkFURQ0KPiArCUhJQkVS TkFURSwNCj4gKwlNQVhfTU9DU19URVNUX01PREVTDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29u c3QgY2hhciAqIGNvbnN0IHRlc3RfbW9kZXNbXSA9IHsNCj4gKwlbTk9ORV0gPSAic2V0dGluZ3Mi LA0KPiArCVtSRVNFVF0gPSAicmVzZXQiLA0KPiArCVtSQzZdID0gInJjNiIsDQo+ICsJW1NVU1BF TkRdID0gInN1c3BlbmQiLA0KPiArCVtISUJFUk5BVEVdID0gImhpYmVybmF0ZSINCj4gwqB9Ow0K PiDCoA0KPiArI2RlZmluZSBNT0NTX05PTl9ERUZBVUxUX0NUWAkoMTw8MCkNCj4gKyNkZWZpbmUg TU9DU19ESVJUWV9WQUxVRVMJKDE8PDEpDQo+ICsjZGVmaW5lIEFMTF9NT0NTX0ZMQUdTCQkoTU9D U19OT05fREVGQVVMVF9DVFggfCBcDQo+ICsJCQkJwqBNT0NTX0RJUlRZX1ZBTFVFUykNCj4gKw0K PiDCoCNkZWZpbmUgR0VOOV9MTkNGQ01PQ1MwCQkoMHhCMDIwKQkvKiBMMyBDYWNoZQ0KPiBDb250 cm9sIGJhc2UgKi8NCj4gwqAjZGVmaW5lIEdFTjlfR0ZYX01PQ1NfMAkJKDB4YzgwMCkJLyogR3Jh cGhpY3MNCj4gTU9DUyBiYXNlIHJlZ2lzdGVyKi8NCj4gwqAjZGVmaW5lIEdFTjlfTUZYMF9NT0NT XzAJKDB4YzkwMCkJLyogTWVkaWEgMCBNT0NTIGJhc2UNCj4gcmVnaXN0ZXIqLw0KPiBAQCAtMTE3 LDE5ICsxMzEsMTggQEAgc3RhdGljIGJvb2wgZ2V0X21vY3Nfc2V0dGluZ3MoaW50IGZkLCBzdHJ1 Y3QNCj4gbW9jc190YWJsZSAqdGFibGUsIGJvb2wgZGlydHkpDQo+IMKgCXJldHVybiByZXN1bHQ7 DQo+IMKgfQ0KPiDCoA0KPiArI2RlZmluZSBMT0NBTF9JOTE1X0VYRUNfQlNEMSAoSTkxNV9FWEVD X0JTRCB8ICgxPDwxMykpDQo+ICsjZGVmaW5lIExPQ0FMX0k5MTVfRVhFQ19CU0QyIChJOTE1X0VY RUNfQlNEIHwgKDI8PDEzKSkNCj4gKw0KPiDCoHN0YXRpYyB1aW50MzJfdCBnZXRfZW5naW5lX2Jh c2UodWludDMyX3QgZW5naW5lKQ0KPiDCoHsNCj4gLQkvKiBOb3RlIHdlIGNhbm5vdCB0ZXN0IEJT RDEgb3IgQlNEMiBkdWUgdG8gbGltaXRhdGlvbnMgb2YNCj4gY3VycmVudCBBTkkgKi8NCj4gwqAJ c3dpdGNoIChlbmdpbmUpIHsNCj4gLQljYXNlIEk5MTVfRVhFQ19CU0Q6CXJldHVybiBHRU45X01G WDBfTU9DU18wOw0KPiAtLyoNCj4gLQljYXNlIEk5MTVfRVhFQ19CU0QxOglyZXR1cm4gR0VOOV9N RlgwX01PQ1NfMDsNCj4gLQljYXNlIEk5MTVfRVhFQ19CU0QyOglyZXR1cm4gR0VOOV9NRlgxX01P Q1NfMDsNCj4gLSovDQo+IC0JY2FzZSBJOTE1X0VYRUNfUkVOREVSOglyZXR1cm4gR0VOOV9HRlhf TU9DU18wOw0KPiAtCWNhc2UgSTkxNV9FWEVDX0JMVDoJcmV0dXJuIEdFTjlfQkxUX01PQ1NfMDsN Cj4gLQljYXNlIEk5MTVfRVhFQ19WRUJPWDoJcmV0dXJuIEdFTjlfVkVCT1hfTU9DU18wOw0KPiAt CWRlZmF1bHQ6CQlyZXR1cm4gMDsNCj4gKwljYXNlIExPQ0FMX0k5MTVfRVhFQ19CU0QxOglyZXR1 cm4gR0VOOV9NRlgwX01PQ1NfMDsNCj4gKwljYXNlIExPQ0FMX0k5MTVfRVhFQ19CU0QyOglyZXR1 cm4gR0VOOV9NRlgxX01PQ1NfMDsNCj4gKwljYXNlIEk5MTVfRVhFQ19SRU5ERVI6CQlyZXR1cm4N Cj4gR0VOOV9HRlhfTU9DU18wOw0KPiArCWNhc2UgSTkxNV9FWEVDX0JMVDoJCXJldHVybiBHRU45 X0JMVF9NT0NTXzA7DQo+ICsJY2FzZSBJOTE1X0VYRUNfVkVCT1g6CQlyZXR1cm4NCj4gR0VOOV9W RUJPWF9NT0NTXzA7DQo+ICsJZGVmYXVsdDoJCQlyZXR1cm4gMDsNCj4gwqAJfQ0KPiDCoH0NCj4g wqANCj4gQEAgLTI1Miw3ICsyNjUsNyBAQCBzdGF0aWMgdm9pZCBjaGVja19jb250cm9sX3JlZ2lz dGVycyhpbnQgZmQsDQo+IMKgCQkJCcKgwqDCoMKgdWludDMyX3QgY3R4X2lkLA0KPiDCoAkJCQnC oMKgwqDCoGJvb2wgZGlydHkpDQo+IMKgew0KPiAtCWNvbnN0IHVpbnQzMl90IHJlZ19iYXNlwqDC oD0gZ2V0X2VuZ2luZV9iYXNlKGVuZ2luZSk7DQo+ICsJY29uc3QgdWludDMyX3QgcmVnX2Jhc2Ug PSBnZXRfZW5naW5lX2Jhc2UoZW5naW5lKTsNCj4gwqAJdWludDMyX3QgZHN0X2hhbmRsZSA9IGdl bV9jcmVhdGUoZmQsIDQwOTYpOw0KPiDCoAl1aW50MzJfdCAqcmVhZF9yZWdzOw0KPiDCoAlzdHJ1 Y3QgbW9jc190YWJsZSB0YWJsZTsNCj4gQEAgLTI5OSw2ICszMTIsNyBAQCBzdGF0aWMgdm9pZCBj aGVja19sM2NjX3JlZ2lzdGVycyhpbnQgZmQsDQo+IMKgCXJlYWRfcmVncyA9IGdlbV9tbWFwX19j cHUoZmQsIGRzdF9oYW5kbGUsIDAsIDQwOTYsDQo+IFBST1RfUkVBRCk7DQo+IMKgDQo+IMKgCWdl bV9zZXRfZG9tYWluKGZkLCBkc3RfaGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsNCj4g Kw0KPiDCoAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0YWJsZS5zaXplIC8gMjsgaW5kZXgrKykg ew0KPiDCoAkJaWd0X2Fzc2VydF9lcV91MzIocmVhZF9yZWdzW2luZGV4XSAmIDB4ZmZmZiwNCj4g wqAJCQkJwqDCoHRhYmxlLnRhYmxlW2luZGV4ICoNCj4gMl0ubDNjY192YWx1ZSk7DQo+IEBAIC0z MTQsMTgzICszMjgsNjUgQEAgc3RhdGljIHZvaWQgY2hlY2tfbDNjY19yZWdpc3RlcnMoaW50IGZk LA0KPiDCoAlnZW1fY2xvc2UoZmQsIGRzdF9oYW5kbGUpOw0KPiDCoH0NCj4gwqANCj4gLXN0YXRp YyB2b2lkIHRlc3RfY29udGV4dF9tb2NzX3ZhbHVlcyhpbnQgZmQsIHVuc2lnbmVkIGVuZ2luZSkN Cj4gLXsNCj4gLQlpbnQgbG9jYWxfZmQ7DQo+IC0JdWludDMyX3QgY3R4X2lkID0gMDsNCj4gLQ0K PiAtCWxvY2FsX2ZkID0gZmQ7DQo+IC0JaWYgKGxvY2FsX2ZkID09IC0xKQ0KPiAtCQlsb2NhbF9m ZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0lOVEVMKTsNCj4gLQ0KPiAtCWNoZWNr X2NvbnRyb2xfcmVnaXN0ZXJzKGxvY2FsX2ZkLCBlbmdpbmUsIGN0eF9pZCwgZmFsc2UpOw0KPiAt CWNoZWNrX2wzY2NfcmVnaXN0ZXJzKGxvY2FsX2ZkLCBlbmdpbmUsIGN0eF9pZCwgZmFsc2UpOw0K PiAtDQo+IC0JaWYgKGVuZ2luZSA9PSBJOTE1X0VYRUNfUkVOREVSKSB7DQo+IC0JCWN0eF9pZCA9 IGdlbV9jb250ZXh0X2NyZWF0ZShsb2NhbF9mZCk7DQo+IC0NCj4gLQkJY2hlY2tfY29udHJvbF9y ZWdpc3RlcnMobG9jYWxfZmQsIGVuZ2luZSwgY3R4X2lkLA0KPiBmYWxzZSk7DQo+IC0JCWNoZWNr X2wzY2NfcmVnaXN0ZXJzKGxvY2FsX2ZkLCBlbmdpbmUsIGN0eF9pZCwNCj4gZmFsc2UpOw0KPiAt DQo+IC0JCWdlbV9jb250ZXh0X2Rlc3Ryb3kobG9jYWxfZmQsIGN0eF9pZCk7DQo+IC0JfQ0KPiAt DQo+IC0JaWYgKGxvY2FsX2ZkICE9IGZkKQ0KPiAtCQljbG9zZShsb2NhbF9mZCk7DQo+IC19DQo+ IMKgDQo+IC1zdGF0aWMgYm9vbCBsb2NhbF9oYXNfcmluZyhpbnQgZmQsIHVuc2lnbmVkIGVuZ2lu ZSkNCj4gK3N0YXRpYyB1aW50MzJfdCByYzZfcmVzaWRlbmN5KGludCBkaXIpDQo+IMKgew0KPiAt CWJvb2wgaGFzX3Jpbmc7DQo+IC0JaW50IGxvY2FsX2ZkOw0KPiAtDQo+IC0JaWYgKGdldF9lbmdp bmVfYmFzZShlbmdpbmUpID09IDApDQo+IC0JCXJldHVybiBmYWxzZTsNCj4gLQ0KPiAtCWlmIChm ZCA9PSAtMSkNCj4gLQkJbG9jYWxfZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9J TlRFTCk7DQo+IC0JZWxzZQ0KPiAtCQlsb2NhbF9mZCA9IGZkOw0KPiAtDQo+IC0JaGFzX3Jpbmcg PSBnZW1faGFzX3JpbmcobG9jYWxfZmQsIGVuZ2luZSk7DQo+IC0JaWYgKGxvY2FsX2ZkICE9IGZk KQ0KPiAtCQljbG9zZShsb2NhbF9mZCk7DQo+IC0NCj4gLQlyZXR1cm4gaGFzX3Jpbmc7DQo+ICsJ cmV0dXJuIGlndF9zeXNmc19nZXRfdTMyKGRpciwgInBvd2VyL3JjNl9yZXNpZGVuY3lfbXMiKTsN Cj4gwqB9DQo+IMKgDQo+IC1zdGF0aWMgdm9pZCB0ZXN0X21vY3NfdmFsdWVzKGludCBmZCkNCj4g K3N0YXRpYyB2b2lkIHJjNl93YWl0KGludCBmZCkNCj4gwqB7DQo+IC0JY29uc3Qgc3RydWN0IGlu dGVsX2V4ZWN1dGlvbl9lbmdpbmUgKmU7DQo+ICsJaW50IHN5c2ZzOw0KPiArCXVpbnQzMl90IHJl c2lkZW5jeTsNCj4gwqANCj4gLQlmb3IgKGUgPSBpbnRlbF9leGVjdXRpb25fZW5naW5lczsgZS0+ bmFtZTsgZSsrKSB7DQo+IC0JCXVuc2lnbmVkIGVuZ2luZSA9IGUtPmV4ZWNfaWQgfCBlLT5mbGFn czsNCj4gKwlzeXNmcyA9IGlndF9zeXNmc19vcGVuKGZkLCBOVUxMKTsNCj4gKwlpZ3RfYXNzZXJ0 X2x0ZSgwLCBzeXNmcyk7DQo+IMKgDQo+IC0JCWlmICghbG9jYWxfaGFzX3JpbmcoZmQsIGVuZ2lu ZSkpDQo+IC0JCQljb250aW51ZTsNCj4gKwlyZXNpZGVuY3kgPSByYzZfcmVzaWRlbmN5KHN5c2Zz KTsNCj4gKwlpZ3RfcmVxdWlyZShpZ3Rfd2FpdChyYzZfcmVzaWRlbmN5KHN5c2ZzKSAhPSByZXNp ZGVuY3ksDQo+IDEwMDAwLCAyKSk7DQo+IMKgDQo+IC0JCWlndF9kZWJ1ZygiVGVzdGluZyAlc1xu IiwgZS0+bmFtZSk7DQo+IC0JCXRlc3RfY29udGV4dF9tb2NzX3ZhbHVlcyhmZCwgZW5naW5lKTsN Cj4gLQl9DQo+ICsJY2xvc2Uoc3lzZnMpOw0KPiDCoH0NCj4gwqANCj4gLXN0YXRpYyB2b2lkIGRl ZmF1bHRfY29udGV4dF90ZXN0cyh1bnNpZ25lZCBtb2RlKQ0KPiArc3RhdGljIHZvaWQgY2hlY2tf bW9jc192YWx1ZXMoaW50IGZkLCB1bnNpZ25lZCBlbmdpbmUsIHVpbnQzMl90DQo+IGN0eF9pZCwg Ym9vbCBkaXJ0eSkNCj4gwqB7DQo+IC0JaW50IGZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihE UklWRVJfSU5URUwpOw0KPiArCWNoZWNrX2NvbnRyb2xfcmVnaXN0ZXJzKGZkLCBlbmdpbmUsIGN0 eF9pZCwgZGlydHkpOw0KPiDCoA0KPiAtCWlndF9kZWJ1ZygiVGVzdGluZyBOb24vRGVmYXVsdCBD b250ZXh0IEVuZ2luZXNcbiIpOw0KPiAtCXRlc3RfbW9jc192YWx1ZXMoZmQpOw0KPiAtDQo+IC0J c3dpdGNoIChtb2RlKSB7DQo+IC0JY2FzZSBOT05FOglicmVhazsNCj4gLQljYXNlIFJFU0VUOglp Z3RfZm9yY2VfZ3B1X3Jlc2V0KGZkKTsJYnJlYWs7DQo+IC0JY2FzZSBTVVNQRU5EOglpZ3Rfc3lz dGVtX3N1c3BlbmRfYXV0b3Jlc3VtZShTVVNQRU5EX1MNCj4gVEFURV9NRU0sDQo+IC0JCQkJCQnC oMKgwqDCoMKgwqBTVVNQRU5EX1RFU1RfTg0KPiBPTkUpOyBicmVhazsNCj4gLQljYXNlIEhJQkVS TkFURToJaWd0X3N5c3RlbV9zdXNwZW5kX2F1dG9yZXN1bWUoU1VTUEVORA0KPiBfU1RBVEVfRElT SywNCj4gLQkJCQkJCcKgwqDCoMKgwqDCoFNVU1BFTkRfVEVTVF9ODQo+IE9ORSk7IGJyZWFrOw0K PiAtCX0NCj4gLQ0KPiAtCXRlc3RfbW9jc192YWx1ZXMoZmQpOw0KPiAtCWNsb3NlKGZkKTsNCj4g LQ0KPiAtCWlndF9kZWJ1ZygiVGVzdGluZyBQcmlzdGluZSBEZWZhdWx0c1xuIik7DQo+IC0JdGVz dF9tb2NzX3ZhbHVlcygtMSk7DQo+ICsJaWYgKGVuZ2luZSA9PSBJOTE1X0VYRUNfUkVOREVSKQ0K PiArCQljaGVja19sM2NjX3JlZ2lzdGVycyhmZCwgZW5naW5lLCBjdHhfaWQsIGRpcnR5KTsNCj4g wqB9DQo+IMKgDQo+IC1zdGF0aWMgdm9pZCBkZWZhdWx0X2RpcnR5X3Rlc3RzKHVuc2lnbmVkIG1v ZGUpDQo+ICtzdGF0aWMgdm9pZCB3cml0ZV9kaXJ0eV9tb2NzKGludCBmZCwgdW5zaWduZWQgZW5n aW5lLCB1aW50MzJfdA0KPiBjdHhfaWQpDQo+IMKgew0KPiAtCWNvbnN0IHN0cnVjdCBpbnRlbF9l eGVjdXRpb25fZW5naW5lICplOw0KPiAtCWludCBmZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIo RFJJVkVSX0lOVEVMKTsNCj4gLQ0KPiAtCWlndF9kZWJ1ZygiVGVzdGluZyBEaXJ0eSBEZWZhdWx0 IENvbnRleHQgRW5naW5lc1xuIik7DQo+IC0JdGVzdF9tb2NzX3ZhbHVlcyhmZCk7DQo+IC0NCj4g LQlmb3IgKGUgPSBpbnRlbF9leGVjdXRpb25fZW5naW5lczsgZS0+bmFtZTsgZSsrKSB7DQo+IC0J CXVuc2lnbmVkIGVuZ2luZSA9IGUtPmV4ZWNfaWQgfCBlLT5mbGFnczsNCj4gKwl3cml0ZV9yZWdp c3RlcnMoZmQsIGN0eF9pZCwgZ2V0X2VuZ2luZV9iYXNlKGVuZ2luZSksDQo+ICsJCQl3cml0ZV92 YWx1ZXMsIEFSUkFZX1NJWkUod3JpdGVfdmFsdWVzKSwNCj4gKwkJCWVuZ2luZSk7DQo+IMKgDQo+ IC0JCWlmICghbG9jYWxfaGFzX3JpbmcoZmQsIGVuZ2luZSkpDQo+IC0JCQljb250aW51ZTsNCj4g LQ0KPiAtCQl3cml0ZV9yZWdpc3RlcnMoZmQsIDAsDQo+IC0JCQkJR0VOOV9HRlhfTU9DU18wLA0K PiArCWlmIChlbmdpbmUgPT0gSTkxNV9FWEVDX1JFTkRFUikNCj4gKwkJd3JpdGVfcmVnaXN0ZXJz KGZkLCBjdHhfaWQsIEdFTjlfTE5DRkNNT0NTMCwNCj4gwqAJCQkJd3JpdGVfdmFsdWVzLA0KPiBB UlJBWV9TSVpFKHdyaXRlX3ZhbHVlcyksDQo+IMKgCQkJCWVuZ2luZSk7DQo+IC0NCj4gLQkJd3Jp dGVfcmVnaXN0ZXJzKGZkLCAwLA0KPiAtCQkJCUdFTjlfTE5DRkNNT0NTMCwNCj4gLQkJCQl3cml0 ZV92YWx1ZXMsDQo+IEFSUkFZX1NJWkUod3JpdGVfdmFsdWVzKSwNCj4gLQkJCQllbmdpbmUpOw0K PiAtCX0NCj4gLQ0KPiAtCXN3aXRjaCAobW9kZSkgew0KPiAtCWNhc2UgTk9ORToJYnJlYWs7DQo+ IC0JY2FzZSBSRVNFVDoJaWd0X2ZvcmNlX2dwdV9yZXNldChmZCk7CWJyZWFrOw0KPiAtCWNhc2Ug U1VTUEVORDoJaWd0X3N5c3RlbV9zdXNwZW5kX2F1dG9yZXN1bWUoU1VTUEVORF9TDQo+IFRBVEVf TUVNLA0KPiAtCQkJCQkJwqDCoMKgwqDCoMKgU1VTUEVORF9URVNUX04NCj4gT05FKTsgYnJlYWs7 DQo+IC0JY2FzZSBISUJFUk5BVEU6CWlndF9zeXN0ZW1fc3VzcGVuZF9hdXRvcmVzdW1lKFNVU1BF TkQNCj4gX1NUQVRFX0RJU0ssDQo+IC0JCQkJCQnCoMKgwqDCoMKgwqBTVVNQRU5EX1RFU1RfTg0K PiBPTkUpOyBicmVhazsNCj4gLQl9DQo+IC0NCj4gLQljbG9zZShmZCk7DQo+IC0NCj4gLQlpZ3Rf ZGVidWcoIlRlc3RpbmcgUHJpc3RpbmUgYWZ0ZXIgRGlydHkgRGVmYXVsdHNcbiIpOw0KPiAtCXRl c3RfbW9jc192YWx1ZXMoLTEpOw0KPiDCoH0NCj4gwqANCj4gLXN0YXRpYyB2b2lkIGNvbnRleHRf c2F2ZV9yZXN0b3JlX3Rlc3QodW5zaWduZWQgbW9kZSkNCj4gK3N0YXRpYyB2b2lkIHJ1bl90ZXN0 KGludCBmZCwgdW5zaWduZWQgZW5naW5lLCB1bnNpZ25lZCBmbGFncywNCj4gdW5zaWduZWQgbW9k ZSkNCj4gwqB7DQo+IC0JaW50IGZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfSU5U RUwpOw0KPiAtCXVpbnQzMl90IGN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7DQo+ICsJ dWludDMyX3QgY3R4X2lkID0gMDsNCj4gKwl1aW50MzJfdCBjdHhfY2xlYW5faWQ7DQo+ICsJdWlu dDMyX3QgY3R4X2RpcnR5X2lkOw0KPiDCoA0KPiAtCWlndF9kZWJ1ZygiVGVzdGluZyBTYXZlIFJl c3RvcmVcbiIpOw0KPiArCS8qIFNraXAgaWYgd2UgZG9uJ3Qga25vdyB3aGVyZSB0aGUgcmVnaXN0 ZXJzIGFyZSBmb3IgdGhpcw0KPiBlbmdpbmUgKi8NCj4gKwlpZ3RfcmVxdWlyZShnZXRfZW5naW5l X2Jhc2UoZW5naW5lKSk7DQo+IMKgDQo+IC0JY2hlY2tfY29udHJvbF9yZWdpc3RlcnMoZmQsIEk5 MTVfRVhFQ19SRU5ERVIsIGN0eF9pZCwNCj4gZmFsc2UpOw0KPiAtCWNoZWNrX2wzY2NfcmVnaXN0 ZXJzKGZkLCBJOTE1X0VYRUNfUkVOREVSLCBjdHhfaWQsIGZhbHNlKTsNCj4gKwlpZiAoZmxhZ3Mg JiBNT0NTX05PTl9ERUZBVUxUX0NUWCkNCj4gKwkJY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRl KGZkKTsNCj4gwqANCj4gLQlzd2l0Y2ggKG1vZGUpIHsNCj4gLQljYXNlIE5PTkU6CWJyZWFrOw0K PiAtCWNhc2UgUkVTRVQ6CWlndF9mb3JjZV9ncHVfcmVzZXQoZmQpOwlicmVhazsNCj4gLQljYXNl IFNVU1BFTkQ6CWlndF9zeXN0ZW1fc3VzcGVuZF9hdXRvcmVzdW1lKFNVU1BFTkRfUw0KPiBUQVRF X01FTSwNCj4gLQkJCQkJCcKgwqDCoMKgwqDCoFNVU1BFTkRfVEVTVF9ODQo+IE9ORSk7IGJyZWFr Ow0KPiAtCWNhc2UgSElCRVJOQVRFOglpZ3Rfc3lzdGVtX3N1c3BlbmRfYXV0b3Jlc3VtZShTVVNQ RU5EDQo+IF9TVEFURV9ESVNLLA0KPiAtCQkJCQkJwqDCoMKgwqDCoMKgU1VTUEVORF9URVNUX04N Cj4gT05FKTsgYnJlYWs7DQo+ICsJaWYgKGZsYWdzICYgTU9DU19ESVJUWV9WQUxVRVMpIHsNCj4g KwkJY3R4X2RpcnR5X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsNCj4gKwkJd3JpdGVfZGly dHlfbW9jcyhmZCwgZW5naW5lLCBjdHhfZGlydHlfaWQpOw0KPiArCQljaGVja19tb2NzX3ZhbHVl cyhmZCwgZW5naW5lLCBjdHhfZGlydHlfaWQsIHRydWUpOw0KPiDCoAl9DQo+IMKgDQo+IC0JY2hl Y2tfY29udHJvbF9yZWdpc3RlcnMoZmQsIEk5MTVfRVhFQ19SRU5ERVIsIGN0eF9pZCwNCj4gZmFs c2UpOw0KPiAtCWNoZWNrX2wzY2NfcmVnaXN0ZXJzKGZkLCBJOTE1X0VYRUNfUkVOREVSLCBjdHhf aWQsIGZhbHNlKTsNCj4gLQ0KPiAtCWNsb3NlKGZkKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZv aWQgY29udGV4dF9kaXJ0eV90ZXN0KHVuc2lnbmVkIG1vZGUpDQo+IC17DQo+IC0JaW50IGZkID0g ZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfSU5URUwpOw0KPiAtCXVpbnQzMl90IGN0eF9p ZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7DQo+IC0NCj4gLQlpZ3RfZGVidWcoIlRlc3Rpbmcg RGlydHkgQ29udGV4dFxuIik7DQo+IC0JdGVzdF9tb2NzX3ZhbHVlcyhmZCk7DQo+IC0NCj4gLQlj aGVja19jb250cm9sX3JlZ2lzdGVycyhmZCwgSTkxNV9FWEVDX1JFTkRFUiwgY3R4X2lkLA0KPiBm YWxzZSk7DQo+IC0JY2hlY2tfbDNjY19yZWdpc3RlcnMoZmQsIEk5MTVfRVhFQ19SRU5ERVIsIGN0 eF9pZCwgZmFsc2UpOw0KPiAtDQo+IC0JLyogWFhYICFSQ1MgYXMgd2VsbCAqLw0KPiAtDQo+IC0J d3JpdGVfcmVnaXN0ZXJzKGZkLA0KPiAtCQkJY3R4X2lkLA0KPiAtCQkJR0VOOV9HRlhfTU9DU18w LA0KPiAtCQkJd3JpdGVfdmFsdWVzLA0KPiAtCQkJQVJSQVlfU0laRSh3cml0ZV92YWx1ZXMpLA0K PiAtCQkJSTkxNV9FWEVDX1JFTkRFUik7DQo+IC0NCj4gLQl3cml0ZV9yZWdpc3RlcnMoZmQsDQo+ IC0JCQljdHhfaWQsDQo+IC0JCQlHRU45X0xOQ0ZDTU9DUzAsDQo+IC0JCQl3cml0ZV92YWx1ZXMs DQo+IC0JCQlBUlJBWV9TSVpFKHdyaXRlX3ZhbHVlcyksDQo+IC0JCQlJOTE1X0VYRUNfUkVOREVS KTsNCj4gLQ0KPiAtCWNoZWNrX2NvbnRyb2xfcmVnaXN0ZXJzKGZkLCBJOTE1X0VYRUNfUkVOREVS LCBjdHhfaWQsIHRydWUpOw0KPiAtCWNoZWNrX2wzY2NfcmVnaXN0ZXJzKGZkLCBJOTE1X0VYRUNf UkVOREVSLCBjdHhfaWQsIHRydWUpOw0KPiArCWNoZWNrX21vY3NfdmFsdWVzKGZkLCBlbmdpbmUs IGN0eF9pZCwgZmFsc2UpOw0KPiDCoA0KPiDCoAlzd2l0Y2ggKG1vZGUpIHsNCj4gwqAJY2FzZSBO T05FOglicmVhazsNCj4gQEAgLTQ5OSw5OSArMzk1LDY2IEBAIHN0YXRpYyB2b2lkIGNvbnRleHRf ZGlydHlfdGVzdCh1bnNpZ25lZCBtb2RlKQ0KPiDCoAkJCQkJCcKgwqDCoMKgwqDCoFNVU1BFTkRf VEVTVF9ODQo+IE9ORSk7IGJyZWFrOw0KPiDCoAljYXNlIEhJQkVSTkFURToJaWd0X3N5c3RlbV9z dXNwZW5kX2F1dG9yZXN1bWUoU1VTUEVORA0KPiBfU1RBVEVfRElTSywNCj4gwqAJCQkJCQnCoMKg wqDCoMKgwqBTVVNQRU5EX1RFU1RfTg0KPiBPTkUpOyBicmVhazsNCj4gKwljYXNlIFJDNjoJcmM2 X3dhaXQoZmQpOwkJCWJyZWFrOw0KPiDCoAl9DQo+IMKgDQo+IC0JY2hlY2tfY29udHJvbF9yZWdp c3RlcnMoZmQsIEk5MTVfRVhFQ19SRU5ERVIsIGN0eF9pZCwgdHJ1ZSk7DQo+IC0JY2hlY2tfbDNj Y19yZWdpc3RlcnMoZmQsIEk5MTVfRVhFQ19SRU5ERVIsIGN0eF9pZCwgdHJ1ZSk7DQo+IC0NCj4g LQljbG9zZShmZCk7DQo+IC0NCj4gLQkvKiBDaGVjayB0aGF0IHVubW9kaWZpZWQgY29udGV4dHMg YXJlIHByaXN0aW5lICovDQo+IC0JaWd0X2RlYnVnKCJUZXN0aW5nIFByZXN0aW5lIENvbnRleHQg KGFmdGVyIGRpcnR5KVxuIik7DQo+IC0JdGVzdF9tb2NzX3ZhbHVlcygtMSk7DQo+IC19DQo+IC0N Cj4gLXN0YXRpYyB2b2lkIHJ1bl90ZXN0cyh1bnNpZ25lZCBtb2RlKQ0KPiAtew0KPiAtCXN0cnVj dCBwY2lfZGV2aWNlICpwY2lfZGV2Ow0KPiAtCWludCBmZDsNCj4gLQ0KPiAtCXBjaV9kZXYgPSBp bnRlbF9nZXRfcGNpX2RldmljZSgpOw0KPiAtCWlndF9yZXF1aXJlKHBjaV9kZXYpOw0KPiAtDQo+ IC0JZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7DQo+IC0JaW50ZWxf cmVnaXN0ZXJfYWNjZXNzX2luaXQocGNpX2RldiwgMCwgZmQpOw0KPiAtCWNsb3NlKGZkKTsNCj4g LQ0KPiAtCWRlZmF1bHRfY29udGV4dF90ZXN0cyhtb2RlKTsNCj4gLQlkZWZhdWx0X2RpcnR5X3Rl c3RzKG1vZGUpOw0KPiAtCWNvbnRleHRfc2F2ZV9yZXN0b3JlX3Rlc3QobW9kZSk7DQo+IC0JY29u dGV4dF9kaXJ0eV90ZXN0KG1vZGUpOw0KPiArCWNoZWNrX21vY3NfdmFsdWVzKGZkLCBlbmdpbmUs IGN0eF9pZCwgZmFsc2UpOw0KPiDCoA0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCk7 DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgcmM2X3Jlc2lkZW5jeShpbnQgZGlyKQ0KPiAtew0K PiAtCXJldHVybiBpZ3Rfc3lzZnNfZ2V0X3UzMihkaXIsICJwb3dlci9yYzZfcmVzaWRlbmN5X21z Iik7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGNvbnRleHRfcmM2X3Rlc3Qodm9pZCkNCj4g LXsNCj4gLQlpbnQgZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsNCj4gLQl1aW50 MzJfdCBjdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOw0KPiAtCWludCByZXNpZGVuY3k7 DQo+IC0JaW50IHRpbWVvdXQ7DQo+IC0JaW50IHN5c2ZzOw0KPiAtDQo+IC0JaWd0X2RlYnVnKCJS QzYgQ29udGV4dCBUZXN0XG4iKTsNCj4gLQljaGVja19jb250cm9sX3JlZ2lzdGVycyhmZCwgSTkx NV9FWEVDX1JFTkRFUiwgY3R4X2lkLA0KPiBmYWxzZSk7DQo+IC0JY2hlY2tfbDNjY19yZWdpc3Rl cnMoZmQsIEk5MTVfRVhFQ19SRU5ERVIsIGN0eF9pZCwgZmFsc2UpOw0KPiAtDQo+IC0Jc3lzZnMg PSBpZ3Rfc3lzZnNfb3BlbihmZCwgTlVMTCk7DQo+IC0NCj4gLQl0aW1lb3V0ID0gMzAwMCAvIDI7 DQo+IC0JcmVzaWRlbmN5ID0gcmM2X3Jlc2lkZW5jeShzeXNmcyk7DQo+IC0Jd2hpbGUgKHJjNl9y ZXNpZGVuY3koc3lzZnMpID09IHJlc2lkZW5jeSAmJiAtLXRpbWVvdXQpDQo+IC0JCXVzbGVlcCgy MDAwKTsNCj4gLQlpZ3RfcmVxdWlyZSh0aW1lb3V0KTsNCj4gLQ0KPiAtCWNsb3NlKHN5c2ZzKTsN Cj4gKwlpZiAoZmxhZ3MgJiBNT0NTX0RJUlRZX1ZBTFVFUykgew0KPiArCQljdHhfY2xlYW5faWQg PSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOw0KPiArCQljaGVja19tb2NzX3ZhbHVlcyhmZCwgZW5n aW5lLCBjdHhfZGlydHlfaWQsIHRydWUpOw0KPiArCQljaGVja19tb2NzX3ZhbHVlcyhmZCwgZW5n aW5lLCBjdHhfY2xlYW5faWQsIGZhbHNlKTsNCj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwg Y3R4X2RpcnR5X2lkKTsNCj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4X2NsZWFuX2lk KTsNCj4gKwl9DQo+IMKgDQo+IC0JY2hlY2tfY29udHJvbF9yZWdpc3RlcnMoZmQsIEk5MTVfRVhF Q19SRU5ERVIsIGN0eF9pZCwNCj4gZmFsc2UpOw0KPiAtCWNoZWNrX2wzY2NfcmVnaXN0ZXJzKGZk LCBJOTE1X0VYRUNfUkVOREVSLCBjdHhfaWQsIGZhbHNlKTsNCj4gLQljbG9zZShmZCk7DQo+ICsJ aWYgKGN0eF9pZCkNCj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4X2lkKTsNCj4gwqB9 DQo+IMKgDQo+IC0NCj4gLXN0YXRpYyB2b2lkIHRlc3RfcmVxdWlyZW1lbnRzKHZvaWQpDQo+ICtp Z3RfbWFpbg0KPiDCoHsNCj4gLQlpbnQgZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZF Ul9JTlRFTCk7DQo+ICsJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUgKmU7DQo+ IMKgCXN0cnVjdCBtb2NzX3RhYmxlIHRhYmxlOw0KPiArCWludCBmZCA9IC0xOw0KPiDCoA0KPiAt CWdlbV9yZXF1aXJlX21vY3NfcmVnaXN0ZXJzKGZkKTsNCj4gLQlpZ3RfcmVxdWlyZShnZXRfbW9j c19zZXR0aW5ncyhmZCwgJnRhYmxlLCBmYWxzZSkpOw0KPiAtCWNsb3NlKGZkKTsNCj4gLX0NCj4g LQ0KPiAtaWd0X21haW4NCj4gLXsNCj4gwqAJaWd0X2ZpeHR1cmUgew0KPiAtCQl0ZXN0X3JlcXVp cmVtZW50cygpOw0KPiArCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOw0KPiAr CQlpZ3RfcmVxdWlyZV9nZW0oZmQpOw0KPiArCQlnZW1fcmVxdWlyZV9tb2NzX3JlZ2lzdGVycyhm ZCk7DQo+ICsJCWlndF9yZXF1aXJlKGdldF9tb2NzX3NldHRpbmdzKGZkLCAmdGFibGUsIGZhbHNl KSk7DQo+IMKgCX0NCj4gwqANCj4gLQlpZ3Rfc3VidGVzdCgibW9jcy1zZXR0aW5ncyIpDQo+IC0J CXJ1bl90ZXN0cyhOT05FKTsNCj4gLQ0KPiAtCWlndF9zdWJ0ZXN0KCJtb2NzLXJjNiIpDQo+IC0J CWNvbnRleHRfcmM2X3Rlc3QoKTsNCj4gLQ0KPiAtCWlndF9zdWJ0ZXN0KCJtb2NzLXJlc2V0IikN Cj4gLQkJcnVuX3Rlc3RzKFJFU0VUKTsNCj4gKwlmb3IgKGUgPSBpbnRlbF9leGVjdXRpb25fZW5n aW5lczsgZS0+bmFtZTsgZSsrKSB7DQo+ICsJCS8qIFdlIGRvbid0IGtub3cgd2hpY2ggZW5naW5l IHdpbGwgYmUgYXNzaWduZWQgdG8gdXMNCj4gaWYgd2UncmUNCj4gKwkJwqAqIHVzaW5nIHBsYWlu IEk5MTVfRVhFQ19CU0QsIEk5MTVfRVhFQ19ERUZBVUxUIGlzDQo+IGp1c3QNCj4gKwkJwqAqIGR1 cGxpY2F0aW5nIHJlbmRlcg0KPiArCQnCoCovDQo+ICsJCWlmIChlLT5leGVjX2lkID09IEk5MTVf RVhFQ19CU0QgfHwNCj4gKwkJwqDCoMKgwqBlLT5leGVjX2lkID09IEk5MTVfRVhFQ19ERUZBVUxU KQ0KPiArCQkJY29udGludWU7DQo+IMKgDQo+IC0JaWd0X3N1YnRlc3QoIm1vY3Mtc3VzcGVuZCIp DQo+IC0JCXJ1bl90ZXN0cyhTVVNQRU5EKTsNCj4gKwkJZm9yICh1bnNpZ25lZCBtb2RlID0gTk9O RTsgbW9kZSA8DQo+IE1BWF9NT0NTX1RFU1RfTU9ERVM7IG1vZGUrKykgew0KPiArCQkJZm9yICh1 bnNpZ25lZCBmbGFncyA9IDA7IGZsYWdzIDwNCj4gQUxMX01PQ1NfRkxBR1MgKyAxOyBmbGFncysr KSB7DQo+ICsJCQkJLyogVHJ5aW5nIHRvIHRlc3Qgbm9uLXJlbmRlciBlbmdpbmVzDQo+IGZvciBk aXJ0eWluZyBNT0NTDQo+ICsJCQkJwqAqIHZhbHVlcyBmcm9tIG9uZSBjb250ZXh0IGhhdmluZw0K PiBlZmZlY3Qgb24gZGlmZmVyZW50DQo+ICsJCQkJwqAqIGNvbnRleHQgaXMgYm91bmQgdG8gZmFp bCAtIG9ubHkNCj4gcmVuZGVyIGVuZ2luZSBpcw0KPiArCQkJCcKgKiBkb2luZyBjb250ZXh0IHNh dmUvcmVzdG9yZSBvZg0KPiBNT0NTIHJlZ2lzdGVycw0KPiArCQkJCcKgKi8NCj4gKwkJCQlpZiAo ZmxhZ3MgJiBNT0NTX0RJUlRZX1ZBTFVFUyAmJiBlLQ0KPiA+ZXhlY19pZCAhPSBJOTE1X0VYRUNf UkVOREVSKQ0KPiArCQkJCQljb250aW51ZTsNCj4gKw0KPiArCQkJCWlndF9zdWJ0ZXN0X2YoIm1v Y3MtJXMlcyVzLSVzIiwNCj4gKwkJCQkJwqDCoMKgwqDCoMKgdGVzdF9tb2Rlc1ttb2RlXSwNCj4g KwkJCQkJwqDCoMKgwqDCoMKgZmxhZ3MgJg0KPiBNT0NTX05PTl9ERUZBVUxUX0NUWCA/ICItY3R4 IjogIiIsDQo+ICsJCQkJCcKgwqDCoMKgwqDCoGZsYWdzICYNCj4gTU9DU19ESVJUWV9WQUxVRVMg PyAiLWRpcnR5IiA6ICIiLA0KPiArCQkJCQnCoMKgwqDCoMKgwqBlLT5uYW1lKSB7DQo+ICsJCQkJ CXJ1bl90ZXN0KGZkLCBlLT5leGVjX2lkIHwgZS0NCj4gPmZsYWdzLCBmbGFncywgbW9kZSk7DQo+ ICsJCQkJfQ0KPiArCQkJfQ0KPiArCQl9DQo+ICsJfQ0KPiDCoA0KPiAtCWlndF9zdWJ0ZXN0KCJt b2NzLWhpYmVybmF0ZSIpDQo+IC0JCXJ1bl90ZXN0cyhISUJFUk5BVEUpOw0KPiArCWlndF9maXh0 dXJlDQo+ICsJCWNsb3NlKGZkKTsNCj4gwqB9Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=