From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhang, Jerry (Junwei)" Subject: Re: [PATCH 3/3] drm/amdgpu: improve VM state machine documentation Date: Mon, 3 Sep 2018 10:56:24 +0800 Message-ID: <5B8CA2D8.5030008@amd.com> References: <20180901180509.1442-1-christian.koenig@amd.com> <20180901180509.1442-3-christian.koenig@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180901180509.1442-3-christian.koenig-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: =?UTF-8?B?Q2hyaXN0aWFuIEvDtm5pZw==?= , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org T24gMDkvMDIvMjAxOCAwMjowNSBBTSwgQ2hyaXN0aWFuIEvDtm5pZyB3cm90ZToKPiBTaW5jZSB3 ZSBoYXZlIGEgbG90IG9mIEZBUSBvbiB0aGUgVk0gc3RhdGUgbWFjaGluZSB0cnkgdG8gaW1wcm92 ZSB0aGUKPiBkb2N1bWVudGF0aW9uIGJ5IGFkZGluZyBmdW5jdGlvbnMgZm9yIGVhY2ggc3RhdGUg bW92ZS4KPgo+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2Vu aWdAYW1kLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92 bS5jIHwgMTM5ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQo+ICAgMSBmaWxlIGNo YW5nZWQsIDEwOCBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4gaW5kZXggNjU5NzdlN2M5NGRjLi5jZTI1MmVhZDJl ZTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+IEBAIC0yMDQs NiArMjA0LDk1IEBAIHN0YXRpYyB1bnNpZ25lZCBhbWRncHVfdm1fYm9fc2l6ZShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwgdW5zaWduZWQgbGV2ZWwpCj4gICAJcmV0dXJuIEFNREdQVV9HUFVf UEFHRV9BTElHTihhbWRncHVfdm1fbnVtX2VudHJpZXMoYWRldiwgbGV2ZWwpICogOCk7Cj4gICB9 Cj4KPiArLyoqCj4gKyAqIGFtZGdwdV92bV9ib19ldmljdGVkIC0gdm1fYm8gaXMgZXZpY3RlZAo+ ICsgKgo+ICsgKiBAdm1fYm86IHZtX2JvIHdoaWNoIGlzIGV2aWN0ZWQKPiArICoKPiArICogU3Rh dGUgZm9yIFBEcy9QVHMgYW5kIHBlciBWTSBCT3Mgd2hpY2ggYXJlIG5vdCBhdCB0aGUgbG9jYXRp b24gdGhleSBzaG91bGQKPiArICogYmUuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBhbWRncHVfdm1f Ym9fZXZpY3RlZChzdHJ1Y3QgYW1kZ3B1X3ZtX2JvX2Jhc2UgKnZtX2JvKQo+ICt7Cj4gKwlzdHJ1 Y3QgYW1kZ3B1X3ZtICp2bSA9IHZtX2JvLT52bTsKPiArCXN0cnVjdCBhbWRncHVfYm8gKmJvID0g dm1fYm8tPmJvOwo+ICsKPiArCXZtX2JvLT5tb3ZlZCA9IHRydWU7Cj4gKwlpZiAoYm8tPnRiby50 eXBlID09IHR0bV9ib190eXBlX2tlcm5lbCkKPiArCQlsaXN0X21vdmUoJnZtX2JvLT52bV9zdGF0 dXMsICZ2bS0+ZXZpY3RlZCk7Cj4gKwllbHNlCj4gKwkJbGlzdF9tb3ZlX3RhaWwoJnZtX2JvLT52 bV9zdGF0dXMsICZ2bS0+ZXZpY3RlZCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBhbWRncHVfdm1f Ym9fcmVsb2NhdGVkIC0gdm1fYm8gaXMgcmVsb2FjdGVkCj4gKyAqCj4gKyAqIEB2bV9ibzogdm1f Ym8gd2hpY2ggaXMgcmVsb2NhdGVkCj4gKyAqCj4gKyAqIFN0YXRlIGZvciBQRHMvUFRzIHdoaWNo IG5lZWRzIHRvIHVwZGF0ZSB0aGVpciBwYXJlbnQgUEQuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBh bWRncHVfdm1fYm9fcmVsb2NhdGVkKHN0cnVjdCBhbWRncHVfdm1fYm9fYmFzZSAqdm1fYm8pCj4g K3sKPiArCWxpc3RfbW92ZSgmdm1fYm8tPnZtX3N0YXR1cywgJnZtX2JvLT52bS0+cmVsb2NhdGVk KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFtZGdwdV92bV9ib19tb3ZlZCAtIHZtX2JvIGlzIG1v dmVkCj4gKyAqCj4gKyAqIEB2bV9ibzogdm1fYm8gd2hpY2ggaXMgbW92ZWQKPiArICoKPiArICog U3RhdGUgZm9yIHBlciBWTSBCT3Mgd2hpY2ggYXJlIG1vdmVkLCBidXQgdGhhdCBjaGFuZ2UgaXMg bm90IHlldCByZWZsZWN0ZWQKPiArICogaW4gdGhlIHBhZ2UgdGFibGVzLgo+ICsgKi8KPiArc3Rh dGljIHZvaWQgYW1kZ3B1X3ZtX2JvX21vdmVkKHN0cnVjdCBhbWRncHVfdm1fYm9fYmFzZSAqdm1f Ym8pCj4gK3sKPiArCWxpc3RfbW92ZSgmdm1fYm8tPnZtX3N0YXR1cywgJnZtX2JvLT52bS0+bW92 ZWQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogYW1kZ3B1X3ZtX2JvX2lkbGUgLSB2bV9ibyBpcyBp ZGxlCj4gKyAqCj4gKyAqIEB2bV9ibzogdm1fYm8gd2hpY2ggaXMgbm93IGlkbGUKPiArICoKPiAr ICogU3RhdGUgZm9yIFBEcy9QVHMgYW5kIHBlciBWTSBCT3Mgd2hpY2ggaGF2ZSBnb25lIHRocm91 Z2ggdGhlIHN0YXRlIG1hY2hpbmUKPiArICogYW5kIGFyZSBub3cgaWRsZS4KPiArICovCj4gK3N0 YXRpYyB2b2lkIGFtZGdwdV92bV9ib19pZGxlKHN0cnVjdCBhbWRncHVfdm1fYm9fYmFzZSAqdm1f Ym8pCj4gK3sKPiArCWxpc3RfbW92ZSgmdm1fYm8tPnZtX3N0YXR1cywgJnZtX2JvLT52bS0+aWRs ZSk7Cj4gKwl2bV9iby0+bW92ZWQgPSBmYWxzZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFtZGdw dV92bV9ib19pbnZhbGlkYXRlZCAtIHZtX2JvIGlzIGludmFsaWRhdGVkCj4gKyAqCj4gKyAqIEB2 bV9ibzogdm1fYm8gd2hpY2ggaXMgbm93IGludmFsaWRhdGVkCj4gKyAqCj4gKyAqIFN0YXRlIGZv ciBub3JtYWwgQk9zIHdoaWNoIGFyZSBpbnZhbGlkYXRlZCBhbmQgdGhhdCBjaGFuZ2Ugbm90IHll dCByZWZsZWN0ZWQKPiArICogaW4gdGhlIFBUcy4KPiArICovCj4gK3N0YXRpYyB2b2lkIGFtZGdw dV92bV9ib19pbnZhbGlkYXRlZChzdHJ1Y3QgYW1kZ3B1X3ZtX2JvX2Jhc2UgKnZtX2JvKQo+ICt7 Cj4gKwlzcGluX2xvY2soJnZtX2JvLT52bS0+aW52YWxpZGF0ZWRfbG9jayk7Cj4gKwlsaXN0X21v dmUoJnZtX2JvLT52bV9zdGF0dXMsICZ2bV9iby0+dm0tPmlkbGUpOwoKSXMgdGhhdCBhIHR5cG8/ IG1vdmUgdG8gdm0tPmludmFsaWRhdGVkPwoKQXBhcnQgZnJvbSB0aGF0LCBpdCdzClJldmlld2Vk LWJ5OiBKdW53ZWkgWmhhbmcgPEplcnJ5LlpoYW5nQGFtZC5jb20+CgpSZWdhcmRzLApKZXJyeQoK PiArCXNwaW5fdW5sb2NrKCZ2bV9iby0+dm0tPmludmFsaWRhdGVkX2xvY2spOwo+ICt9Cj4gKwo+ ICsvKioKPiArICogYW1kZ3B1X3ZtX2JvX2RvbmUgLSB2bV9ibyBpcyBkb25lCj4gKyAqCj4gKyAq IEB2bV9ibzogdm1fYm8gd2hpY2ggaXMgbm93IGRvbmUKPiArICoKPiArICogU3RhdGUgZm9yIG5v cm1hbCBCT3Mgd2hpY2ggYXJlIGludmFsaWRhdGVkIGFuZCB0aGF0IGNoYW5nZSBoYXMgYmVlbiB1 cGRhdGVkCj4gKyAqIGluIHRoZSBQVHMuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBhbWRncHVfdm1f Ym9fZG9uZShzdHJ1Y3QgYW1kZ3B1X3ZtX2JvX2Jhc2UgKnZtX2JvKQo+ICt7Cj4gKwlzcGluX2xv Y2soJnZtX2JvLT52bS0+aW52YWxpZGF0ZWRfbG9jayk7Cj4gKwlsaXN0X2RlbF9pbml0KCZ2bV9i by0+dm1fc3RhdHVzKTsKPiArCXNwaW5fdW5sb2NrKCZ2bV9iby0+dm0tPmludmFsaWRhdGVkX2xv Y2spOwo+ICt9Cj4gKwo+ICAgLyoqCj4gICAgKiBhbWRncHVfdm1fYm9fYmFzZV9pbml0IC0gQWRk cyBibyB0byB0aGUgbGlzdCBvZiBib3MgYXNzb2NpYXRlZCB3aXRoIHRoZSB2bQo+ICAgICoKPiBA QCAtMjMyLDkgKzMyMSw5IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV92bV9ib19iYXNlX2luaXQoc3Ry dWN0IGFtZGdwdV92bV9ib19iYXNlICpiYXNlLAo+Cj4gICAJdm0tPmJ1bGtfbW92ZWFibGUgPSBm YWxzZTsKPiAgIAlpZiAoYm8tPnRiby50eXBlID09IHR0bV9ib190eXBlX2tlcm5lbCkKPiAtCQls aXN0X21vdmUoJmJhc2UtPnZtX3N0YXR1cywgJnZtLT5yZWxvY2F0ZWQpOwo+ICsJCWFtZGdwdV92 bV9ib19yZWxvY2F0ZWQoYmFzZSk7Cj4gICAJZWxzZQo+IC0JCWxpc3RfbW92ZSgmYmFzZS0+dm1f c3RhdHVzLCAmdm0tPmlkbGUpOwo+ICsJCWFtZGdwdV92bV9ib19pZGxlKGJhc2UpOwo+Cj4gICAJ aWYgKGJvLT5wcmVmZXJyZWRfZG9tYWlucyAmCj4gICAJICAgIGFtZGdwdV9tZW1fdHlwZV90b19k b21haW4oYm8tPnRiby5tZW0ubWVtX3R5cGUpKQo+IEBAIC0yNDUsOCArMzM0LDcgQEAgc3RhdGlj IHZvaWQgYW1kZ3B1X3ZtX2JvX2Jhc2VfaW5pdChzdHJ1Y3QgYW1kZ3B1X3ZtX2JvX2Jhc2UgKmJh c2UsCj4gICAJICogaXMgY3VycmVudGx5IGV2aWN0ZWQuIGFkZCB0aGUgYm8gdG8gdGhlIGV2aWN0 ZWQgbGlzdCB0byBtYWtlIHN1cmUgaXQKPiAgIAkgKiBpcyB2YWxpZGF0ZWQgb24gbmV4dCB2bSB1 c2UgdG8gYXZvaWQgZmF1bHQuCj4gICAJICogKi8KPiAtCWxpc3RfbW92ZV90YWlsKCZiYXNlLT52 bV9zdGF0dXMsICZ2bS0+ZXZpY3RlZCk7Cj4gLQliYXNlLT5tb3ZlZCA9IHRydWU7Cj4gKwlhbWRn cHVfdm1fYm9fZXZpY3RlZChiYXNlKTsKPiAgIH0KPgo+ICAgLyoqCj4gQEAgLTM0Miw3ICs0MzAs NyBAQCBpbnQgYW1kZ3B1X3ZtX3ZhbGlkYXRlX3B0X2JvcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwgc3RydWN0IGFtZGdwdV92bSAqdm0sCj4gICAJCQlicmVhazsKPgo+ICAgCQlpZiAoYm8t PnRiby50eXBlICE9IHR0bV9ib190eXBlX2tlcm5lbCkgewo+IC0JCQlsaXN0X21vdmUoJmJvX2Jh c2UtPnZtX3N0YXR1cywgJnZtLT5tb3ZlZCk7Cj4gKwkJCWFtZGdwdV92bV9ib19tb3ZlZChib19i YXNlKTsKPiAgIAkJfSBlbHNlIHsKPiAgIAkJCWlmICh2bS0+dXNlX2NwdV9mb3JfdXBkYXRlKQo+ ICAgCQkJCXIgPSBhbWRncHVfYm9fa21hcChibywgTlVMTCk7Cj4gQEAgLTM1MCw3ICs0MzgsNyBA QCBpbnQgYW1kZ3B1X3ZtX3ZhbGlkYXRlX3B0X2JvcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diwgc3RydWN0IGFtZGdwdV92bSAqdm0sCj4gICAJCQkJciA9IGFtZGdwdV90dG1fYWxsb2NfZ2Fy dCgmYm8tPnRibyk7Cj4gICAJCQlpZiAocikKPiAgIAkJCQlicmVhazsKPiAtCQkJbGlzdF9tb3Zl KCZib19iYXNlLT52bV9zdGF0dXMsICZ2bS0+cmVsb2NhdGVkKTsKPiArCQkJYW1kZ3B1X3ZtX2Jv X3JlbG9jYXRlZChib19iYXNlKTsKPiAgIAkJfQo+ICAgCX0KPgo+IEBAIC0xMTIxLDggKzEyMDks NyBAQCBpbnQgYW1kZ3B1X3ZtX3VwZGF0ZV9kaXJlY3RvcmllcyhzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiwKPiAgIAkJYm9fYmFzZSA9IGxpc3RfZmlyc3RfZW50cnkoJnZtLT5yZWxvY2F0ZWQs Cj4gICAJCQkJCSAgIHN0cnVjdCBhbWRncHVfdm1fYm9fYmFzZSwKPiAgIAkJCQkJICAgdm1fc3Rh dHVzKTsKPiAtCQlib19iYXNlLT5tb3ZlZCA9IGZhbHNlOwo+IC0JCWxpc3RfbW92ZSgmYm9fYmFz ZS0+dm1fc3RhdHVzLCAmdm0tPmlkbGUpOwo+ICsJCWFtZGdwdV92bV9ib19pZGxlKGJvX2Jhc2Up Owo+Cj4gICAJCWJvID0gYm9fYmFzZS0+Ym8tPnBhcmVudDsKPiAgIAkJaWYgKCFibykKPiBAQCAt MTI0MSw3ICsxMzI4LDcgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X3ZtX2hhbmRsZV9odWdlX3BhZ2Vz KHN0cnVjdCBhbWRncHVfcHRlX3VwZGF0ZV9wYXJhbXMgKnAsCj4gICAJCWlmIChlbnRyeS0+aHVn ZSkgewo+ICAgCQkJLyogQWRkIHRoZSBlbnRyeSB0byB0aGUgcmVsb2NhdGVkIGxpc3QgdG8gdXBk YXRlIGl0LiAqLwo+ICAgCQkJZW50cnktPmh1Z2UgPSBmYWxzZTsKPiAtCQkJbGlzdF9tb3ZlKCZl bnRyeS0+YmFzZS52bV9zdGF0dXMsICZwLT52bS0+cmVsb2NhdGVkKTsKPiArCQkJYW1kZ3B1X3Zt X2JvX3JlbG9jYXRlZCgmZW50cnktPmJhc2UpOwo+ICAgCQl9Cj4gICAJCXJldHVybjsKPiAgIAl9 Cj4gQEAgLTE3NDAsMTMgKzE4MjcsMTEgQEAgaW50IGFtZGdwdV92bV9ib191cGRhdGUoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gICAJCXVpbnQzMl90IG1lbV90eXBlID0gYm8tPnRiby5t ZW0ubWVtX3R5cGU7Cj4KPiAgIAkJaWYgKCEoYm8tPnByZWZlcnJlZF9kb21haW5zICYgYW1kZ3B1 X21lbV90eXBlX3RvX2RvbWFpbihtZW1fdHlwZSkpKQo+IC0JCQlsaXN0X21vdmVfdGFpbCgmYm9f dmEtPmJhc2Uudm1fc3RhdHVzLCAmdm0tPmV2aWN0ZWQpOwo+ICsJCQlhbWRncHVfdm1fYm9fZXZp Y3RlZCgmYm9fdmEtPmJhc2UpOwo+ICAgCQllbHNlCj4gLQkJCWxpc3RfbW92ZSgmYm9fdmEtPmJh c2Uudm1fc3RhdHVzLCAmdm0tPmlkbGUpOwo+ICsJCQlhbWRncHVfdm1fYm9faWRsZSgmYm9fdmEt PmJhc2UpOwo+ICAgCX0gZWxzZSB7Cj4gLQkJc3Bpbl9sb2NrKCZ2bS0+aW52YWxpZGF0ZWRfbG9j ayk7Cj4gLQkJbGlzdF9kZWxfaW5pdCgmYm9fdmEtPmJhc2Uudm1fc3RhdHVzKTsKPiAtCQlzcGlu X3VubG9jaygmdm0tPmludmFsaWRhdGVkX2xvY2spOwo+ICsJCWFtZGdwdV92bV9ib19kb25lKCZi b192YS0+YmFzZSk7Cj4gICAJfQo+Cj4gICAJbGlzdF9zcGxpY2VfaW5pdCgmYm9fdmEtPmludmFs aWRzLCAmYm9fdmEtPnZhbGlkcyk7Cj4gQEAgLTI0NjgsMzAgKzI1NTMsMjIgQEAgdm9pZCBhbWRn cHVfdm1fYm9faW52YWxpZGF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPgo+ICAgCWxp c3RfZm9yX2VhY2hfZW50cnkoYm9fYmFzZSwgJmJvLT52YSwgYm9fbGlzdCkgewo+ICAgCQlzdHJ1 Y3QgYW1kZ3B1X3ZtICp2bSA9IGJvX2Jhc2UtPnZtOwo+IC0JCWJvb2wgd2FzX21vdmVkID0gYm9f YmFzZS0+bW92ZWQ7Cj4KPiAtCQlib19iYXNlLT5tb3ZlZCA9IHRydWU7Cj4gICAJCWlmIChldmlj dGVkICYmIGJvLT50Ym8ucmVzdiA9PSB2bS0+cm9vdC5iYXNlLmJvLT50Ym8ucmVzdikgewo+IC0J CQlpZiAoYm8tPnRiby50eXBlID09IHR0bV9ib190eXBlX2tlcm5lbCkKPiAtCQkJCWxpc3RfbW92 ZSgmYm9fYmFzZS0+dm1fc3RhdHVzLCAmdm0tPmV2aWN0ZWQpOwo+IC0JCQllbHNlCj4gLQkJCQls aXN0X21vdmVfdGFpbCgmYm9fYmFzZS0+dm1fc3RhdHVzLAo+IC0JCQkJCSAgICAgICAmdm0tPmV2 aWN0ZWQpOwo+ICsJCQlhbWRncHVfdm1fYm9fZXZpY3RlZChib19iYXNlKTsKPiAgIAkJCWNvbnRp bnVlOwo+ICAgCQl9Cj4KPiAtCQlpZiAod2FzX21vdmVkKQo+ICsJCWlmIChib19iYXNlLT5tb3Zl ZCkKPiAgIAkJCWNvbnRpbnVlOwo+ICsJCWJvX2Jhc2UtPm1vdmVkID0gdHJ1ZTsKPgo+IC0JCWlm IChiby0+dGJvLnR5cGUgPT0gdHRtX2JvX3R5cGVfa2VybmVsKSB7Cj4gLQkJCWxpc3RfbW92ZSgm Ym9fYmFzZS0+dm1fc3RhdHVzLCAmdm0tPnJlbG9jYXRlZCk7Cj4gLQkJfSBlbHNlIGlmIChiby0+ dGJvLnJlc3YgPT0gdm0tPnJvb3QuYmFzZS5iby0+dGJvLnJlc3YpIHsKPiAtCQkJbGlzdF9tb3Zl KCZib19iYXNlLT52bV9zdGF0dXMsICZ2bS0+bW92ZWQpOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCXNw aW5fbG9jaygmdm0tPmludmFsaWRhdGVkX2xvY2spOwo+IC0JCQlsaXN0X21vdmUoJmJvX2Jhc2Ut PnZtX3N0YXR1cywgJnZtLT5pbnZhbGlkYXRlZCk7Cj4gLQkJCXNwaW5fdW5sb2NrKCZ2bS0+aW52 YWxpZGF0ZWRfbG9jayk7Cj4gLQkJfQo+ICsJCWlmIChiby0+dGJvLnR5cGUgPT0gdHRtX2JvX3R5 cGVfa2VybmVsKQo+ICsJCQlhbWRncHVfdm1fYm9fcmVsb2NhdGVkKGJvX2Jhc2UpOwo+ICsJCWVs c2UgaWYgKGJvLT50Ym8ucmVzdiA9PSB2bS0+cm9vdC5iYXNlLmJvLT50Ym8ucmVzdikKPiArCQkJ YW1kZ3B1X3ZtX2JvX21vdmVkKGJvX2Jhc2UpOwo+ICsJCWVsc2UKPiArCQkJYW1kZ3B1X3ZtX2Jv X2ludmFsaWRhdGVkKGJvX2Jhc2UpOwo+ICAgCX0KPiAgIH0KPgo+Cl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=