From mboxrd@z Thu Jan 1 00:00:00 1970 From: Huang Rui Subject: Re: [PATCH 1/8] drm/amdgpu: add some VM PD/PT iterators v2 Date: Thu, 13 Sep 2018 14:58:03 +0800 Message-ID: <20180913065801.GA3371@hr-amur2> References: <20180912085445.3245-1-christian.koenig@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180912085445.3245-1-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: Christian =?iso-8859-1?Q?K=F6nig?= Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org T24gV2VkLCBTZXAgMTIsIDIwMTggYXQgMTA6NTQ6MzhBTSArMDIwMCwgQ2hyaXN0aWFuIEvDtm5p ZyB3cm90ZToKPiBCb3RoIGEgbGVhZiBhcyB3ZWxsIGFzIGRmcyBpdGVyYXRvciB0byB3YWxrIG92 ZXIgYWxsIHRoZSBQRHMvUFRzLgo+IAo+IHYyOiB1cGRhdGUgY29tbWVudHMgYW5kIGZpeCBmb3Jf ZWFjaF9hbWRncHVfdm1fcHRfZGZzX3NhZmUKPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpc3RpYW4g S8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+CgpTZXJpZXMgYXJlIFJldmlld2VkLWJ5 OiBIdWFuZyBSdWkgPHJheS5odWFuZ0BhbWQuY29tPgoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMgfCAyMjQgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCj4gIDEgZmlsZSBjaGFuZ2VkLCAyMjQgaW5zZXJ0aW9ucygrKQo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4gaW5kZXggMTM2YjAwNDEyZGM4Li43ODdhMjAw Y2Y3OTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Zt LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+IEBAIC0z NTUsNiArMzU1LDIzMCBAQCBzdGF0aWMgc3RydWN0IGFtZGdwdV92bV9wdCAqYW1kZ3B1X3ZtX3B0 X3BhcmVudChzdHJ1Y3QgYW1kZ3B1X3ZtX3B0ICpwdCkKPiAgCXJldHVybiBsaXN0X2ZpcnN0X2Vu dHJ5KCZwYXJlbnQtPnZhLCBzdHJ1Y3QgYW1kZ3B1X3ZtX3B0LCBiYXNlLmJvX2xpc3QpOwo+ICB9 Cj4gIAo+ICsvKioKPiArICogYW1kZ3B1X3ZtX3B0X2N1cnNvciAtIHN0YXRlIGZvciBmb3JfZWFj aF9hbWRncHVfdm1fcHQKPiArICovCj4gK3N0cnVjdCBhbWRncHVfdm1fcHRfY3Vyc29yIHsKPiAr CXVpbnQ2NF90IHBmbjsKPiArCXN0cnVjdCBhbWRncHVfdm1fcHQgKnBhcmVudDsKPiArCXN0cnVj dCBhbWRncHVfdm1fcHQgKmVudHJ5Owo+ICsJdW5zaWduZWQgbGV2ZWw7Cj4gK307Cj4gKwo+ICsv KioKPiArICogYW1kZ3B1X3ZtX3B0X3N0YXJ0IC0gc3RhcnQgUEQvUFQgd2Fsawo+ICsgKgo+ICsg KiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVyCj4gKyAqIEB2bTogYW1kZ3B1X3ZtIHN0cnVj dHVyZQo+ICsgKiBAc3RhcnQ6IHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHdhbGsKPiArICogQGN1cnNv cjogc3RhdGUgdG8gaW5pdGlhbGl6ZQo+ICsgKgo+ICsgKiBJbml0aWFsaXplIGEgYW1kZ3B1X3Zt X3B0X2N1cnNvciB0byBzdGFydCBhIHdhbGsuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBhbWRncHVf dm1fcHRfc3RhcnQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gKwkJCSAgICAgICBzdHJ1 Y3QgYW1kZ3B1X3ZtICp2bSwgdWludDY0X3Qgc3RhcnQsCj4gKwkJCSAgICAgICBzdHJ1Y3QgYW1k Z3B1X3ZtX3B0X2N1cnNvciAqY3Vyc29yKQo+ICt7Cj4gKwljdXJzb3ItPnBmbiA9IHN0YXJ0Owo+ ICsJY3Vyc29yLT5wYXJlbnQgPSBOVUxMOwo+ICsJY3Vyc29yLT5lbnRyeSA9ICZ2bS0+cm9vdDsK PiArCWN1cnNvci0+bGV2ZWwgPSBhZGV2LT52bV9tYW5hZ2VyLnJvb3RfbGV2ZWw7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBhbWRncHVfdm1fcHRfZGVzY2VuZGFudCAtIGdvIHRvIGNoaWxkIG5vZGUK PiArICoKPiArICogQGFkZXY6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgo+ICsgKiBAY3Vyc29yOiBj dXJyZW50IHN0YXRlCj4gKyAqCj4gKyAqIFdhbGsgdG8gdGhlIGNoaWxkIG5vZGUgb2YgdGhlIGN1 cnJlbnQgbm9kZS4KPiArICogUmV0dXJuczoKPiArICogVHJ1ZSBpZiB0aGUgd2FsayB3YXMgcG9z c2libGUsIGZhbHNlIG90aGVyd2lzZS4KPiArICovCj4gK3N0YXRpYyBib29sIGFtZGdwdV92bV9w dF9kZXNjZW5kYW50KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICsJCQkJICAgIHN0cnVj dCBhbWRncHVfdm1fcHRfY3Vyc29yICpjdXJzb3IpCj4gK3sKPiArCXVuc2lnbmVkIG51bV9lbnRy aWVzLCBzaGlmdCwgaWR4Owo+ICsKPiArCWlmICghY3Vyc29yLT5lbnRyeS0+ZW50cmllcykKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJQlVHX09OKCFjdXJzb3ItPmVudHJ5LT5iYXNlLmJvKTsK PiArCW51bV9lbnRyaWVzID0gYW1kZ3B1X3ZtX251bV9lbnRyaWVzKGFkZXYsIGN1cnNvci0+bGV2 ZWwpOwo+ICsJc2hpZnQgPSBhbWRncHVfdm1fbGV2ZWxfc2hpZnQoYWRldiwgY3Vyc29yLT5sZXZl bCk7Cj4gKwo+ICsJKytjdXJzb3ItPmxldmVsOwo+ICsJaWR4ID0gKGN1cnNvci0+cGZuID4+IHNo aWZ0KSAlIG51bV9lbnRyaWVzOwo+ICsJY3Vyc29yLT5wYXJlbnQgPSBjdXJzb3ItPmVudHJ5Owo+ ICsJY3Vyc29yLT5lbnRyeSA9ICZjdXJzb3ItPmVudHJ5LT5lbnRyaWVzW2lkeF07Cj4gKwlyZXR1 cm4gdHJ1ZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFtZGdwdV92bV9wdF9zaWJsaW5nIC0gZ28g dG8gc2libGluZyBub2RlCj4gKyAqCj4gKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIK PiArICogQGN1cnNvcjogY3VycmVudCBzdGF0ZQo+ICsgKgo+ICsgKiBXYWxrIHRvIHRoZSBzaWJs aW5nIG5vZGUgb2YgdGhlIGN1cnJlbnQgbm9kZS4KPiArICogUmV0dXJuczoKPiArICogVHJ1ZSBp ZiB0aGUgd2FsayB3YXMgcG9zc2libGUsIGZhbHNlIG90aGVyd2lzZS4KPiArICovCj4gK3N0YXRp YyBib29sIGFtZGdwdV92bV9wdF9zaWJsaW5nKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ ICsJCQkJIHN0cnVjdCBhbWRncHVfdm1fcHRfY3Vyc29yICpjdXJzb3IpCj4gK3sKPiArCXVuc2ln bmVkIHNoaWZ0LCBudW1fZW50cmllczsKPiArCj4gKwkvKiBSb290IGRvZXNuJ3QgaGF2ZSBhIHNp YmxpbmcgKi8KPiArCWlmICghY3Vyc29yLT5wYXJlbnQpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsK PiArCS8qIEdvIHRvIG91ciBwYXJlbnRzIGFuZCBzZWUgaWYgd2UgZ290IGEgc2libGluZyAqLwo+ ICsJc2hpZnQgPSBhbWRncHVfdm1fbGV2ZWxfc2hpZnQoYWRldiwgY3Vyc29yLT5sZXZlbCAtIDEp Owo+ICsJbnVtX2VudHJpZXMgPSBhbWRncHVfdm1fbnVtX2VudHJpZXMoYWRldiwgY3Vyc29yLT5s ZXZlbCAtIDEpOwo+ICsKPiArCWlmIChjdXJzb3ItPmVudHJ5ID09ICZjdXJzb3ItPnBhcmVudC0+ ZW50cmllc1tudW1fZW50cmllcyAtIDFdKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwljdXJz b3ItPnBmbiArPSAxVUxMIDw8IHNoaWZ0Owo+ICsJY3Vyc29yLT5wZm4gJj0gfigoMVVMTCA8PCBz aGlmdCkgLSAxKTsKPiArCSsrY3Vyc29yLT5lbnRyeTsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogYW1kZ3B1X3ZtX3B0X2FuY2VzdG9yIC0gZ28gdG8gcGFyZW50IG5vZGUK PiArICoKPiArICogQGN1cnNvcjogY3VycmVudCBzdGF0ZQo+ICsgKgo+ICsgKiBXYWxrIHRvIHRo ZSBwYXJlbnQgbm9kZSBvZiB0aGUgY3VycmVudCBub2RlLgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBU cnVlIGlmIHRoZSB3YWxrIHdhcyBwb3NzaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLgo+ICsgKi8KPiAr c3RhdGljIGJvb2wgYW1kZ3B1X3ZtX3B0X2FuY2VzdG9yKHN0cnVjdCBhbWRncHVfdm1fcHRfY3Vy c29yICpjdXJzb3IpCj4gK3sKPiArCWlmICghY3Vyc29yLT5wYXJlbnQpCj4gKwkJcmV0dXJuIGZh bHNlOwo+ICsKPiArCS0tY3Vyc29yLT5sZXZlbDsKPiArCWN1cnNvci0+ZW50cnkgPSBjdXJzb3It PnBhcmVudDsKPiArCWN1cnNvci0+cGFyZW50ID0gYW1kZ3B1X3ZtX3B0X3BhcmVudChjdXJzb3It PnBhcmVudCk7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFtZGdwdV92 bV9wdF9uZXh0IC0gZ2V0IG5leHQgUEQvUFQgaW4gaGllcmF0Y2h5Cj4gKyAqCj4gKyAqIEBhZGV2 OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKPiArICogQGN1cnNvcjogY3VycmVudCBzdGF0ZQo+ICsg Kgo+ICsgKiBXYWxrIHRoZSBQRC9QVCB0cmVlIHRvIHRoZSBuZXh0IG5vZGUuCj4gKyAqLwo+ICtz dGF0aWMgdm9pZCBhbWRncHVfdm1fcHRfbmV4dChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwK PiArCQkJICAgICAgc3RydWN0IGFtZGdwdV92bV9wdF9jdXJzb3IgKmN1cnNvcikKPiArewo+ICsJ LyogRmlyc3QgdHJ5IGEgbmV3Ym9ybiBjaGlsZCAqLwo+ICsJaWYgKGFtZGdwdV92bV9wdF9kZXNj ZW5kYW50KGFkZXYsIGN1cnNvcikpCj4gKwkJcmV0dXJuOwo+ICsKPiArCS8qIElmIHRoYXQgZGlk bid0IHdvcmtlZCB0cnkgdG8gZmluZCBhIHNpYmxpbmcgKi8KPiArCXdoaWxlICghYW1kZ3B1X3Zt X3B0X3NpYmxpbmcoYWRldiwgY3Vyc29yKSkgewo+ICsJCS8qIE5vIHNpYmxpbmcsIGdvIHRvIG91 ciBwYXJlbnRzIGFuZCBncmFuZHBhcmVudHMgKi8KPiArCQlpZiAoIWFtZGdwdV92bV9wdF9hbmNl c3RvcihjdXJzb3IpKSB7Cj4gKwkJCWN1cnNvci0+cGZuID0gfjBsbDsKPiArCQkJcmV0dXJuOwo+ ICsJCX0KPiArCX0KPiArfQo+ICsKPiArLyoqCj4gKyAqIGFtZGdwdV92bV9wdF9maXJzdF9sZWFm IC0gZ2V0IGZpcnN0IGxlYWYgUEQvUFQKPiArICoKPiArICogQGFkZXY6IGFtZGdwdV9kZXZpY2Ug cG9pbnRlcgo+ICsgKiBAdm06IGFtZGdwdV92bSBzdHJ1Y3R1cmUKPiArICogQHN0YXJ0OiBzdGFy dCBhZGRyIG9mIHRoZSB3YWxrCj4gKyAqIEBjdXJzb3I6IHN0YXRlIHRvIGluaXRpYWxpemUKPiAr ICoKPiArICogU3RhcnQgYSB3YWxrIGFuZCBnbyBkaXJlY3RseSB0byB0aGUgbGVhZiBub2RlLgo+ ICsgKi8KPiArc3RhdGljIHZvaWQgYW1kZ3B1X3ZtX3B0X2ZpcnN0X2xlYWYoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsCj4gKwkJCQkgICAgc3RydWN0IGFtZGdwdV92bSAqdm0sIHVpbnQ2NF90 IHN0YXJ0LAo+ICsJCQkJICAgIHN0cnVjdCBhbWRncHVfdm1fcHRfY3Vyc29yICpjdXJzb3IpCj4g K3sKPiArCWFtZGdwdV92bV9wdF9zdGFydChhZGV2LCB2bSwgc3RhcnQsIGN1cnNvcik7Cj4gKwl3 aGlsZSAoYW1kZ3B1X3ZtX3B0X2Rlc2NlbmRhbnQoYWRldiwgY3Vyc29yKSk7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBhbWRncHVfdm1fcHRfbmV4dF9sZWFmIC0gZ2V0IG5leHQgbGVhZiBQRC9QVAo+ ICsgKgo+ICsgKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVyCj4gKyAqIEBjdXJzb3I6IGN1 cnJlbnQgc3RhdGUKPiArICoKPiArICogV2FsayB0aGUgUEQvUFQgdHJlZSB0byB0aGUgbmV4dCBs ZWFmIG5vZGUuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBhbWRncHVfdm1fcHRfbmV4dF9sZWFmKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICsJCQkJICAgc3RydWN0IGFtZGdwdV92bV9wdF9j dXJzb3IgKmN1cnNvcikKPiArewo+ICsJYW1kZ3B1X3ZtX3B0X25leHQoYWRldiwgY3Vyc29yKTsK PiArCXdoaWxlIChhbWRncHVfdm1fcHRfZGVzY2VuZGFudChhZGV2LCBjdXJzb3IpKTsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIGZvcl9lYWNoX2FtZGdwdV92bV9wdF9sZWFmIC0gd2FsayBvdmVyIGFs bCBsZWFmIFBEcy9QVHMgaW4gdGhlIGhpZXJhcmNoeQo+ICsgKi8KPiArI2RlZmluZSBmb3JfZWFj aF9hbWRncHVfdm1fcHRfbGVhZihhZGV2LCB2bSwgc3RhcnQsIGVuZCwgY3Vyc29yKQkJXAo+ICsJ Zm9yIChhbWRncHVfdm1fcHRfZmlyc3RfbGVhZigoYWRldiksICh2bSksIChzdGFydCksICYoY3Vy c29yKSk7CQlcCj4gKwkgICAgIChjdXJzb3IpLnBmbiA8PSBlbmQ7IGFtZGdwdV92bV9wdF9uZXh0 X2xlYWYoKGFkZXYpLCAmKGN1cnNvcikpKQo+ICsKPiArLyoqCj4gKyAqIGFtZGdwdV92bV9wdF9m aXJzdF9kZnMgLSBzdGFydCBhIGRlZXAgZmlyc3Qgc2VhcmNoCj4gKyAqCj4gKyAqIEBhZGV2OiBh bWRncHVfZGV2aWNlIHN0cnVjdHVyZQo+ICsgKiBAdm06IGFtZGdwdV92bSBzdHJ1Y3R1cmUKPiAr ICogQGN1cnNvcjogc3RhdGUgdG8gaW5pdGlhbGl6ZQo+ICsgKgo+ICsgKiBTdGFydHMgYSBkZWVw IGZpcnN0IHRyYXZlcnNhbCBvZiB0aGUgUEQvUFQgdHJlZS4KPiArICovCj4gK3N0YXRpYyB2b2lk IGFtZGdwdV92bV9wdF9maXJzdF9kZnMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gKwkJ CQkgICBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwKPiArCQkJCSAgIHN0cnVjdCBhbWRncHVfdm1fcHRf Y3Vyc29yICpjdXJzb3IpCj4gK3sKPiArCWFtZGdwdV92bV9wdF9zdGFydChhZGV2LCB2bSwgMCwg Y3Vyc29yKTsKPiArCXdoaWxlIChhbWRncHVfdm1fcHRfZGVzY2VuZGFudChhZGV2LCBjdXJzb3Ip KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFtZGdwdV92bV9wdF9uZXh0X2RmcyAtIGdldCB0aGUg bmV4dCBub2RlIGZvciBhIGRlZXAgZmlyc3Qgc2VhcmNoCj4gKyAqCj4gKyAqIEBhZGV2OiBhbWRn cHVfZGV2aWNlIHN0cnVjdHVyZQo+ICsgKiBAY3Vyc29yOiBjdXJyZW50IHN0YXRlCj4gKyAqCj4g KyAqIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBub2RlIGluIGEgZGVlcCBmaXJzdCBzZWFy Y2guCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBhbWRncHVfdm1fcHRfbmV4dF9kZnMoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCj4gKwkJCQkgIHN0cnVjdCBhbWRncHVfdm1fcHRfY3Vyc29yICpj dXJzb3IpCj4gK3sKPiArCWlmICghY3Vyc29yLT5lbnRyeSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ aWYgKCFjdXJzb3ItPnBhcmVudCkKPiArCQljdXJzb3ItPmVudHJ5ID0gTlVMTDsKPiArCWVsc2Ug aWYgKGFtZGdwdV92bV9wdF9zaWJsaW5nKGFkZXYsIGN1cnNvcikpCj4gKwkJd2hpbGUgKGFtZGdw dV92bV9wdF9kZXNjZW5kYW50KGFkZXYsIGN1cnNvcikpOwo+ICsJZWxzZQo+ICsJCWFtZGdwdV92 bV9wdF9hbmNlc3RvcihjdXJzb3IpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZm9yX2VhY2hfYW1k Z3B1X3ZtX3B0X2Rmc19zYWZlIC0gc2FmZSBkZWVwIGZpcnN0IHNlYXJjaCBvZiBhbGwgUERzL1BU cwo+ICsgKi8KPiArI2RlZmluZSBmb3JfZWFjaF9hbWRncHVfdm1fcHRfZGZzX3NhZmUoYWRldiwg dm0sIGN1cnNvciwgZW50cnkpCQkJXAo+ICsJZm9yIChhbWRncHVfdm1fcHRfZmlyc3RfZGZzKChh ZGV2KSwgKHZtKSwgJihjdXJzb3IpKSwJCQlcCj4gKwkgICAgIChlbnRyeSkgPSAoY3Vyc29yKS5l bnRyeSwgYW1kZ3B1X3ZtX3B0X25leHRfZGZzKChhZGV2KSwgJihjdXJzb3IpKTtcCj4gKwkgICAg IChlbnRyeSk7IChlbnRyeSkgPSAoY3Vyc29yKS5lbnRyeSwJCQkJCVwKPiArCSAgICAgYW1kZ3B1 X3ZtX3B0X25leHRfZGZzKChhZGV2KSwgJihjdXJzb3IpKSkKPiArCj4gIC8qKgo+ICAgKiBhbWRn cHVfdm1fZ2V0X3BkX2JvIC0gYWRkIHRoZSBWTSBQRCB0byBhIHZhbGlkYXRpb24gbGlzdAo+ICAg Kgo+IC0tIAo+IDIuMTQuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QKPiBhbWQtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vYW1kLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK