From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhang, Jerry (Junwei)" Subject: Re: [PATCH v3 4/5] drm/amdgpu: use bulk moves for efficient VM LRU handling (v3) Date: Tue, 14 Aug 2018 10:26:43 +0800 Message-ID: <5B723DE3.50005@amd.com> References: <1534154331-11810-1-git-send-email-ray.huang@amd.com> <1534154331-11810-5-git-send-email-ray.huang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1534154331-11810-5-git-send-email-ray.huang@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Huang Rui , dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Cc: =?UTF-8?B?Q2hyaXN0aWFuIEvDtm5pZw==?= List-Id: dri-devel@lists.freedesktop.org T24gMDgvMTMvMjAxOCAwNTo1OCBQTSwgSHVhbmcgUnVpIHdyb3RlOgo+IEkgY29udGludWUgdG8g d29yayBmb3IgYnVsayBtb3ZpbmcgdGhhdCBiYXNlZCBvbiB0aGUgcHJvcG9zYWwgYnkgQ2hyaXN0 aWFuLgo+Cj4gQmFja2dyb3VuZDoKPiBhbWRncHUgZHJpdmVyIHdpbGwgbW92ZSBhbGwgUEQvUFQg YW5kIFBlclZNIEJPcyBpbnRvIGlkbGUgbGlzdC4gVGhlbiBtb3ZlIGFsbCBvZgo+IHRoZW0gb24g dGhlIGVuZCBvZiBMUlUgbGlzdCBvbmUgYnkgb25lLiBUaHVzLCB0aGF0IGNhdXNlIHNvIG1hbnkg Qk9zIG1vdmVkIHRvCj4gdGhlIGVuZCBvZiB0aGUgTFJVLCBhbmQgaW1wYWN0IHBlcmZvcm1hbmNl IHNlcmlvdXNseS4KPgo+IFRoZW4gQ2hyaXN0aWFuIHByb3ZpZGVkIGEgd29ya2Fyb3VuZCB0byBu b3QgbW92ZSBQRC9QVCBCT3Mgb24gTFJVIHdpdGggYmVsb3cKPiBwYXRjaDoKPiAiZHJtL2FtZGdw dTogYmFuZCBhaWQgdmFsaWRhdGluZyBWTSBQVHMiCj4gQ29tbWl0IDBiYmYzMjAyNmNmNWJhNDFl OTkyMmIzMGUyNmUxYmVkMWVjZDM4YWUKPgo+IEhvd2V2ZXIsIHRoZSBmaW5hbCBzb2x1dGlvbiBz aG91bGQgYnVsayBtb3ZlIGFsbCBQRC9QVCBhbmQgUGVyVk0gQk9zIG9uIHRoZSBMUlUKPiBpbnN0 ZWFkIG9mIG9uZSBieSBvbmUuCj4KPiBXaGVuZXZlciBhbWRncHVfdm1fdmFsaWRhdGVfcHRfYm9z KCkgaXMgY2FsbGVkIGFuZCB3ZSBoYXZlIEJPcyB3aGljaCBuZWVkIHRvIGJlCj4gdmFsaWRhdGVk IHdlIG1vdmUgYWxsIEJPcyB0b2dldGhlciB0byB0aGUgZW5kIG9mIHRoZSBMUlUgd2l0aG91dCBk cm9wcGluZyB0aGUKPiBsb2NrIGZvciB0aGUgTFJVLgo+Cj4gV2hpbGUgZG9pbmcgc28gd2Ugbm90 ZSB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhpcyBibG9jayBpbiB0aGUgTFJVIGxpc3QuCj4K PiBOb3cgd2hlbiBhbWRncHVfdm1fdmFsaWRhdGVfcHRfYm9zKCkgaXMgY2FsbGVkIGFuZCB3ZSBk b24ndCBoYXZlIGFueXRoaW5nIHRvIGRvLAo+IHdlIGRvbid0IG1vdmUgZXZlcnkgQk8gb25lIGJ5 IG9uZSwgYnV0IGluc3RlYWQgY3V0IHRoZSBMUlUgbGlzdCBpbnRvIHBpZWNlcyBzbwo+IHRoYXQg d2UgYnVsayBtb3ZlIGV2ZXJ5dGhpbmcgdG8gdGhlIGVuZCBpbiBqdXN0IG9uZSBvcGVyYXRpb24u Cj4KPiBUZXN0IGRhdGE6Cj4gKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiB8ICAgICAg ICAgICAgICB8VGhlIFRhbG9zICAgICAgICB8Q2xwZWFrKE9DTCl8QnVzU3BlZWRSZWFkYmFjayhP Q0wpICAgICAgICAgICAgICAgICAgfAo+IHwgICAgICAgICAgICAgIHxQcmluY2lwbGUoVnVsa2Fu KXwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4g Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiB8ICAgICAgICAgICAgICB8ICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICB8MC4zMTkgbXMoMWspIDAuMzE0IG1zKDJLKSAwLjMwOCBtcyg0 SykgfAo+IHwgT3JpZ2luYWwgICAgIHwgIDE0Ny43IEZQUyAgICAgIHwgIDc2Ljg2IHVzIHwwLjMw NyBtcyg4SykgMC4zMTAgbXMoMTZLKSAgICAgICAgICAgICB8Cj4gKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKPiB8IE9yaWduaWFsICsgV0F8ICAgICAgICAgICAgICAgICB8ICAgICAgICAg ICB8MC4yNTQgbXMoMUspIDAuMjQxIG1zKDJLKSAgICAgICAgICAgICAgfAo+IHwoZG9uJ3QgbW92 ZSAgIHwgIDE2Mi4xIEZQUyAgICAgIHwgIDQyLjE1IHVzIHwwLjIzMCBtcyg0SykgMC4yMjMgbXMo OEspIDAuMjA0IG1zKDE2Syl8Cj4gfFBUIEJPcyBvbiBMUlUpfCAgICAgICAgICAgICAgICAgfCAg ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+IHwgQnVsayBtb3ZlICAgIHwgIDE2My4xIEZQUyAg ICAgIHwgIDQwLjUyIHVzIHwwLjI0NCBtcygxSykgMC4yNTIgbXMoMkspIDAuMjEzIG1zKDRLKSB8 Cj4gfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfDAuMjE0IG1z KDhLKSAwLjIyNSBtcygxNkspICAgICAgICAgICAgIHwKPiArLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKwo+Cj4gQWZ0ZXIgdGVzdCB0aGVtIHdpdGggYWJvdmUgdGhyZWUgYmVuY2htYXJrcyBp bmNsdWRlIHZ1bGthbiBhbmQgb3BlbmNsLiBXZSBjYW4KPiBzZWUgdGhlIHZpc2libGUgaW1wcm92 ZW1lbnQgdGhhbiBvcmlnaW5hbCwgYW5kIGV2ZW4gYmV0dGVyIHRoYW4gb3JpZ2luYWwgd2l0aAo+ IHdvcmthcm91bmQuCj4KPiB2MjogbW92ZSBhbGwgQk9zIGluY2x1ZGUgaWRsZSwgcmVsb2NhdGVk LCBhbmQgbW92ZWQgbGlzdCB0byB0aGUgZW5kIG9mIExSVSBhbmQKPiBwdXQgdGhlbSB0b2dldGhl ci4KPiB2MzogcmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYW5kIHVzZSBsaXN0X2Zvcl9lYWNoX2Vu dHJ5IGluc3RlYWQgb2YgdGhlIG9uZSB3aXRoCj4gc2F2ZSBlbnRyeS4KPgo+IFNpZ25lZC1vZmYt Ynk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KPiBTaWduZWQt b2ZmLWJ5OiBIdWFuZyBSdWkgPHJheS5odWFuZ0BhbWQuY29tPgo+IFRlc3RlZC1ieTogTWlrZSBM b3RoaWFuIDxtaWtlQGZpcmVidXJuLmNvLnVrPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3ZtLmMgfCA3MyArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0t LS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uaCB8ICA0ICsrCj4g ICAyIGZpbGVzIGNoYW5nZWQsIDYxIGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQo+Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMKPiBpbmRleCA5Yzg0NzcwLi5lZTFh ZjUzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMKPiBAQCAtMjY4 LDYgKzI2OCw1MyBAQCB2b2lkIGFtZGdwdV92bV9nZXRfcGRfYm8oc3RydWN0IGFtZGdwdV92bSAq dm0sCj4gICB9Cj4KPiAgIC8qKgo+ICsgKiBhbWRncHVfdm1fbW92ZV90b19scnVfdGFpbCAtIG1v dmUgb25lIGxpc3Qgb2YgQk9zIHRvIGVuZCBvZiBMUlUKPiArICoKPiArICogQHZtOiB2bSBwcm92 aWRpbmcgdGhlIEJPcwo+ICsgKiBAbGlzdDogdGhlIGxpc3QgdGhhdCBzdG9yZWQgQk9zCj4gKyAq Cj4gKyAqIE1vdmUgb25lIGxpc3Qgb2YgQk9zIHRvIHRoZSBlbmQgb2YgTFJVIGFuZCB1cGRhdGUg dGhlIHBvc2l0aW9ucy4KPiArICovCj4gK3N0YXRpYyB2b2lkCj4gK2FtZGdwdV92bV9tb3ZlX3Rv X2xydV90YWlsX2J5X2xpc3Qoc3RydWN0IGFtZGdwdV92bSAqdm0sIHN0cnVjdCBsaXN0X2hlYWQg Kmxpc3QpCj4gK3sKPiArCXN0cnVjdCBhbWRncHVfdm1fYm9fYmFzZSAqYm9fYmFzZTsKPiArCj4g KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJvX2Jhc2UsIGxpc3QsIHZtX3N0YXR1cykgewo+ICsJCXN0 cnVjdCBhbWRncHVfYm8gKmJvID0gYm9fYmFzZS0+Ym87Cj4gKwo+ICsJCWlmICghYm8tPnBhcmVu dCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXR0bV9ib19tb3ZlX3RvX2xydV90YWlsKCZiby0+ dGJvLCAmdm0tPmxydV9idWxrX21vdmUpOwo+ICsJCWlmIChiby0+c2hhZG93KQo+ICsJCQl0dG1f Ym9fbW92ZV90b19scnVfdGFpbCgmYm8tPnNoYWRvdy0+dGJvLAo+ICsJCQkJCQkmdm0tPmxydV9i dWxrX21vdmUpOwo+ICsJfQo+ICt9Cj4gKwo+ICsvKioKPiArICogYW1kZ3B1X3ZtX21vdmVfdG9f bHJ1X3RhaWwgLSBtb3ZlIGFsbCBCT3MgdG8gdGhlIGVuZCBvZiBMUlUKPiArICoKPiArICogQGFk ZXY6IGFtZGdwdSBkZXZpY2UgcG9pbnRlcgo+ICsgKiBAdm06IHZtIHByb3ZpZGluZyB0aGUgQk9z Cj4gKyAqCj4gKyAqIE1vdmUgYWxsIEJPcyB0byB0aGUgZW5kIG9mIExSVSBhbmQgcmVtZW1iZXIg dGhlaXIgcG9zaXRpb25zIHRvIHB1dCB0aGVtCj4gKyAqIHRvZ2V0aGVyLgo+ICsgKi8KPiArc3Rh dGljIHZvaWQKPiArYW1kZ3B1X3ZtX21vdmVfdG9fbHJ1X3RhaWwoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsIHN0cnVjdCBhbWRncHVfdm0gKnZtKQo+ICt7Cj4gKwlzdHJ1Y3QgdHRtX2JvX2ds b2JhbCAqZ2xvYiA9IGFkZXYtPm1tYW4uYmRldi5nbG9iOwo+ICsKPiArCXNwaW5fbG9jaygmZ2xv Yi0+bHJ1X2xvY2spOwo+ICsJYW1kZ3B1X3ZtX21vdmVfdG9fbHJ1X3RhaWxfYnlfbGlzdCh2bSwg JnZtLT5pZGxlKTsKPiArCWFtZGdwdV92bV9tb3ZlX3RvX2xydV90YWlsX2J5X2xpc3Qodm0sICZ2 bS0+cmVsb2NhdGVkKTsKPiArCWFtZGdwdV92bV9tb3ZlX3RvX2xydV90YWlsX2J5X2xpc3Qodm0s ICZ2bS0+bW92ZWQpOwoKTW92ZWQgbGlzdCBpcyB3b3JraW5nIHVuZGVyIHZtLT5tb3ZlZF9sb2Nr LCBzbyB3ZSBtYXkgaG9sZCB0aGF0IGFzIHdlbGwuCm90aGVyd2lzZSwgdG8gdXNlIHRoZSBzYW1l IG9uZS4KKG5vdCBzdXJlIHRoZSBkZXRhaWwgb2YgaGlzdG9yeSBhYm91dCBtb3ZlZF9sb2NrKQoK PiArCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7Cj4gK30KPiArCj4gKy8qKgo+ICAgICog YW1kZ3B1X3ZtX3ZhbGlkYXRlX3B0X2JvcyAtIHZhbGlkYXRlIHRoZSBwYWdlIHRhYmxlIEJPcwo+ ICAgICoKPiAgICAqIEBhZGV2OiBhbWRncHUgZGV2aWNlIHBvaW50ZXIKPiBAQCAtMjg2LDYgKzMz Myw3IEBAIGludCBhbWRncHVfdm1fdmFsaWRhdGVfcHRfYm9zKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LCBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwKPiAgIHsKPiAgIAlzdHJ1Y3QgdHRtX2JvX2ds b2JhbCAqZ2xvYiA9IGFkZXYtPm1tYW4uYmRldi5nbG9iOwo+ICAgCXN0cnVjdCBhbWRncHVfdm1f Ym9fYmFzZSAqYm9fYmFzZSwgKnRtcDsKPiArCWJvb2wgdmFsaWRhdGVkID0gZmFsc2U7Cj4gICAJ aW50IHIgPSAwOwo+Cj4gICAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJvX2Jhc2UsIHRtcCwg JnZtLT5ldmljdGVkLCB2bV9zdGF0dXMpIHsKPiBAQCAtMjk1LDE0ICszNDMsOSBAQCBpbnQgYW1k Z3B1X3ZtX3ZhbGlkYXRlX3B0X2JvcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgc3RydWN0 IGFtZGdwdV92bSAqdm0sCj4gICAJCQlyID0gdmFsaWRhdGUocGFyYW0sIGJvKTsKPiAgIAkJCWlm IChyKQo+ICAgCQkJCWJyZWFrOwo+IC0KPiAtCQkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7 Cj4gLQkJCXR0bV9ib19tb3ZlX3RvX2xydV90YWlsKCZiby0+dGJvLCBOVUxMKTsKPiAtCQkJaWYg KGJvLT5zaGFkb3cpCj4gLQkJCQl0dG1fYm9fbW92ZV90b19scnVfdGFpbCgmYm8tPnNoYWRvdy0+ dGJvLCBOVUxMKTsKPiAtCQkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKPiAgIAkJfQo+ Cj4gKwkJdmFsaWRhdGVkID0gdHJ1ZTsKPiAgIAkJaWYgKGJvLT50Ym8udHlwZSAhPSB0dG1fYm9f dHlwZV9rZXJuZWwpIHsKPiAgIAkJCXNwaW5fbG9jaygmdm0tPm1vdmVkX2xvY2spOwo+ICAgCQkJ bGlzdF9tb3ZlKCZib19iYXNlLT52bV9zdGF0dXMsICZ2bS0+bW92ZWQpOwo+IEBAIC0zMTIsMTgg KzM1NSwxNiBAQCBpbnQgYW1kZ3B1X3ZtX3ZhbGlkYXRlX3B0X2JvcyhzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwgc3RydWN0IGFtZGdwdV92bSAqdm0sCj4gICAJCX0KPiAgIAl9Cj4KPiAtCXNw aW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShib19iYXNl LCAmdm0tPmlkbGUsIHZtX3N0YXR1cykgewo+IC0JCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gYm9f YmFzZS0+Ym87Cj4gKwlpZiAoIXZhbGlkYXRlZCkgewo+ICsJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1 X2xvY2spOwo+ICsJCXR0bV9ib19idWxrX21vdmVfbHJ1X3RhaWwoJnZtLT5scnVfYnVsa19tb3Zl KTsKClRvIGNvbmZpcm0Kd2Ugb25seSBkbyBhY3R1YWwgYnVsayBtb3ZlIHdoZW4gbm8gZXZpY3Rl ZCBvciB2YWxpZGF0ZSBmYWlsdXJlPwoKUmVnYXJkcywKSmVycnkKCj4gKwkJc3Bpbl91bmxvY2so Jmdsb2ItPmxydV9sb2NrKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPgo+IC0JCWlmICghYm8tPnBh cmVudCkKPiAtCQkJY29udGludWU7Cj4gKwltZW1zZXQoJnZtLT5scnVfYnVsa19tb3ZlLCAwLCBz aXplb2Yodm0tPmxydV9idWxrX21vdmUpKTsKPgo+IC0JCXR0bV9ib19tb3ZlX3RvX2xydV90YWls KCZiby0+dGJvLCBOVUxMKTsKPiAtCQlpZiAoYm8tPnNoYWRvdykKPiAtCQkJdHRtX2JvX21vdmVf dG9fbHJ1X3RhaWwoJmJvLT5zaGFkb3ctPnRibywgTlVMTCk7Cj4gLQl9Cj4gLQlzcGluX3VubG9j aygmZ2xvYi0+bHJ1X2xvY2spOwo+ICsJYW1kZ3B1X3ZtX21vdmVfdG9fbHJ1X3RhaWwoYWRldiwg dm0pOwo+Cj4gICAJcmV0dXJuIHI7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X3ZtLmgKPiBpbmRleCA2N2ExNWQ0Li45MjcyNWFjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3ZtLmgKPiBAQCAtMjksNiArMjksNyBAQAo+ICAgI2luY2x1ZGUgPGxp bnV4L3JidHJlZS5oPgo+ICAgI2luY2x1ZGUgPGRybS9ncHVfc2NoZWR1bGVyLmg+Cj4gICAjaW5j bHVkZSA8ZHJtL2RybV9maWxlLmg+Cj4gKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9ib19kcml2ZXIu aD4KPgo+ICAgI2luY2x1ZGUgImFtZGdwdV9zeW5jLmgiCj4gICAjaW5jbHVkZSAiYW1kZ3B1X3Jp bmcuaCIKPiBAQCAtMjI2LDYgKzIyNyw5IEBAIHN0cnVjdCBhbWRncHVfdm0gewo+Cj4gICAJLyog U29tZSBiYXNpYyBpbmZvIGFib3V0IHRoZSB0YXNrICovCj4gICAJc3RydWN0IGFtZGdwdV90YXNr X2luZm8gdGFza19pbmZvOwo+ICsKPiArCS8qIFN0b3JlIHBvc2l0aW9ucyBvZiBncm91cCBvZiBC T3MgKi8KPiArCXN0cnVjdCB0dG1fbHJ1X2J1bGtfbW92ZSBscnVfYnVsa19tb3ZlOwo+ICAgfTsK Pgo+ICAgc3RydWN0IGFtZGdwdV92bV9tYW5hZ2VyIHsKPgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK