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=-8.2 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_SANE_2 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 F2FE8C433DF for ; Fri, 29 May 2020 13:34:35 +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 CB38820C09 for ; Fri, 29 May 2020 13:34:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CB38820C09 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 414A66E8F4; Fri, 29 May 2020 13:34:35 +0000 (UTC) Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9210B6E8F4 for ; Fri, 29 May 2020 13:34:33 +0000 (UTC) Received: from localhost (unknown [IPv6:2a01:e0a:2c:6930:5cf4:84a1:2763:fe0d]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 525682A4557; Fri, 29 May 2020 14:34:31 +0100 (BST) Date: Fri, 29 May 2020 15:34:28 +0200 From: Boris Brezillon To: Daniel Vetter Subject: Re: [PATCH] drm/shmem-helpers: Simplify dma-buf importing Message-ID: <20200529153428.50688049@collabora.com> In-Reply-To: <20200520180232.956489-1-daniel.vetter@ffwll.ch> References: <20200511093554.211493-10-daniel.vetter@ffwll.ch> <20200520180232.956489-1-daniel.vetter@ffwll.ch> Organization: Collabora X-Mailer: Claws Mail 3.17.5 (GTK+ 2.24.32; x86_64-redhat-linux-gnu) MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Zimmermann , Gerd Hoffmann , DRI Development Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" SGkgRGFuaWVsLAoKT24gV2VkLCAyMCBNYXkgMjAyMCAyMDowMjozMiArMDIwMApEYW5pZWwgVmV0 dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPiB3cm90ZToKCj4gLSBEaXRjaCB0aGUgLT5wYWdl cyBhcnJheQo+IC0gTWFrZSBpdCBhIHByaXZhdGUgZ2VtIGJvLCB3aGljaCBtZWFucyBubyBzaG1l bSBvYmplY3QsIHdoaWNoIG1lYW5zCj4gICBmaXJld29ya3MgaWYgYW55b25lIGNhbGxzIGRybV9n ZW1fb2JqZWN0X2dldF9wYWdlcy4gQnV0IHdlJ3ZlIGp1c3QKPiAgIG1hZGUgc3VyZSB0aGF0J3Mg YWxsIGNvdmVyZWQuCj4gCj4gdjI6IFJlYmFzZQo+IAo+IEFja2VkLWJ5OiBUaG9tYXMgWmltbWVy bWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KPiBDYzogR2VyZCBIb2ZmbWFubiA8a3JheGVsQHJl ZGhhdC5jb20+Cj4gQ2M6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+Cj4gQ2M6IE5vcmFs ZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgo+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBW ZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPgoKSSBzZWUgYSBidW5jaCBvZgoKWyAgIDM4 LjI2MTMxM10gLS0tLS0tLS0tLS0tWyBjdXQgaGVyZSBdLS0tLS0tLS0tLS0tClsgICAzOC4yNjE3 NDBdIFdBUk5JTkc6IENQVTogNCBQSUQ6IDI5NDUgYXQgZHJpdmVycy9ncHUvZHJtL2RybV9nZW1f c2htZW1faGVscGVyLmM6MTM3IGRybV9nZW1fc2htZW1fZnJlZV9vYmplY3QrMHhiNC8weGUwClsg ICAzOC4yNjI2NzZdIE1vZHVsZXMgbGlua2VkIGluOgpbICAgMzguMjYyOTQ5XSBDUFU6IDQgUElE OiAyOTQ1IENvbW06IFh3YXlsYW5kIE5vdCB0YWludGVkIDUuNy4wLXJjMS0wMDExMS1nOWM3ZTUy NmM0M2QwICM1MjAKWyAgIDM4LjI2MzY2N10gSGFyZHdhcmUgbmFtZTogUmFkeGEgUk9DSyBQaSA0 IChEVCkKWyAgIDM4LjI2NDA2Ml0gcHN0YXRlOiA2MDAwMDAwNSAoblpDdiBkYWlmIC1QQU4gLVVB TykKWyAgIDM4LjI2NDQ4Ml0gcGMgOiBkcm1fZ2VtX3NobWVtX2ZyZWVfb2JqZWN0KzB4YjQvMHhl MApbICAgMzguMjY0OTE2XSBsciA6IGRybV9nZW1fc2htZW1fZnJlZV9vYmplY3QrMHgzOC8weGUw ClsgICAzOC4yNjUzNDhdIHNwIDogZmZmZjgwMDAxMWNlYmJiMApbICAgMzguMjY1NjM5XSB4Mjk6 IGZmZmY4MDAwMTFjZWJiYjAgeDI4OiBmZmZmODAwMDExY2ViZDg4IApbICAgMzguMjY2MTAyXSB4 Mjc6IDAwMDAwMDAwMDAwMDAwMDAgeDI2OiBmZmZmMDAwMDcyYTFmNDAwIApbICAgMzguMjY2NTY2 XSB4MjU6IDAwMDAwMDAwMDAwMDAwMDkgeDI0OiBmZmZmMDAwMDcyYTFmNDAwIApbICAgMzguMjY3 MDI5XSB4MjM6IDAwMDAwMDAwMDAwMDAwMDIgeDIyOiBmZmZmMDAwMDc5NDA5MDgwIApbICAgMzgu MjY3NDkyXSB4MjE6IGZmZmYwMDAwNzk0MDkyODAgeDIwOiBmZmZmMDAwMDZjMzA0ODAwIApbICAg MzguMjY3OTU1XSB4MTk6IGZmZmYwMDAwNmMzMDQ4MDAgeDE4OiAwMDAwMDAwMDAwMDAwMDAwIApb ICAgMzguMjY4NDE3XSB4MTc6IDAwMDAwMDAwMDAwMDAwMDAgeDE2OiAwMDAwMDAwMDAwMDAwMDAw IApbICAgMzguMjY4ODgwXSB4MTU6IDAwMDAwMDAwMDAwMDAwMDAgeDE0OiAwMDAwMDAwMDAwMDAw MDAwIApbICAgMzguMjY5MzQzXSB4MTM6IDAwMDEwMDAwMDAwMDAwMDAgeDEyOiAwMDAwMDAwMDAw MDAwMDA4IApbICAgMzguMjY5ODA2XSB4MTE6IDAwMDAwMDAwMDAwMGZmZmYgeDEwOiAwMDAwMDAw MDAwMDAwMDAwIApbICAgMzguMjcwMjY5XSB4OSA6IDAwMDAwMDAwMDAwMDAwMDEgeDggOiAwMDAw MDAwMDAwMjEwZDAwIApbICAgMzguMjcwNzMyXSB4NyA6IDAwMDAwMDAwMDAwMDAwMDEgeDYgOiBm ZmZmODAwMDExMzA3OTgwIApbICAgMzguMjcxMTk1XSB4NSA6IGZmZmYwMDAwNjY0MWMyNDAgeDQg OiBmZmZmMDAwMDZlZTFiNDAwIApbICAgMzguMjcxNjU2XSB4MyA6IDAwMDAwMDAwMDAwMDAwMDQg eDIgOiBhYWZiYzZmMzM4Y2Y2MDAwIApbICAgMzguMjcyMTE5XSB4MSA6IDAwMDAwMDAwMDAwMDAw MDAgeDAgOiAwMDAwMDAwMGZmZmZmZmZmIApbICAgMzguMjcyNTgzXSBDYWxsIHRyYWNlOgpbICAg MzguMjcyNzk5XSAgZHJtX2dlbV9zaG1lbV9mcmVlX29iamVjdCsweGI0LzB4ZTAKWyAgIDM4LjI3 MzIwM10gIHBhbmZyb3N0X2dlbV9mcmVlX29iamVjdCsweGYwLzB4MTI4ClsgICAzOC4yNzM2MDhd ICBkcm1fZ2VtX29iamVjdF9mcmVlKzB4MTgvMHg0MApbICAgMzguMjczOTY3XSAgZHJtX2dlbV9v YmplY3RfaGFuZGxlX3B1dF91bmxvY2tlZCsweGU0LzB4ZTgKWyAgIDM4LjI3NDQzOV0gIGRybV9n ZW1fb2JqZWN0X3JlbGVhc2VfaGFuZGxlKzB4NmMvMHg5OApbICAgMzguMjc0ODcyXSAgZHJtX2dl bV9oYW5kbGVfZGVsZXRlKzB4ODQvMHgxNDAKWyAgIDM4LjI3NTI1M10gIGRybV9nZW1fY2xvc2Vf aW9jdGwrMHgyYy8weDQwClsgICAzOC4yNzU2MTJdICBkcm1faW9jdGxfa2VybmVsKzB4YjgvMHgx MDgKWyAgIDM4LjI3NTk1NF0gIGRybV9pb2N0bCsweDIxNC8weDQ1MApbICAgMzguMjc2MjU1XSAg a3N5c19pb2N0bCsweGEwLzB4ZTAKWyAgIDM4LjI3NjU0Nl0gIF9fYXJtNjRfc3lzX2lvY3RsKzB4 MWMvMHgyOApbICAgMzguMjc2ODkxXSAgZWwwX3N2Y19jb21tb24uY29uc3Rwcm9wLjArMHg2OC8w eDE2MApbICAgMzguMjc3MzEwXSAgZG9fZWwwX3N2YysweDIwLzB4ODAKWyAgIDM4LjI3NzYwMl0g IGVsMF9zeW5jX2hhbmRsZXIrMHgxMGMvMHgxNzgKWyAgIDM4LjI3Nzk1Ml0gIGVsMF9zeW5jKzB4 MTQwLzB4MTgwClsgICAzOC4yNzgyNDJdIC0tLVsgZW5kIHRyYWNlIGRiNTc1NGVmOGIyMTNjZTUg XS0tLQoKYWZ0ZXIgYXBwbHlpbmcgdGhhdCBwYXRjaC4gRGlkbid0IGhhdmUgdGltZSB0byBkaWcg dGhyb3VnaCBpdCwgdW5mb3J0dW5hdGVseS4KCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX3NobWVtX2hlbHBlci5jIHwgNTkgKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KPiAgMSBm aWxlIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDM2IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jCj4gaW5kZXggMDZjZWU4ZTk3ZDI3Li5mNjg1 NGFmMjA2ZDIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVs cGVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwo+IEBA IC0zNSwyMiArMzUsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5j cyBkcm1fZ2VtX3NobWVtX2Z1bmNzID0gewo+ICAJLm1tYXAgPSBkcm1fZ2VtX3NobWVtX21tYXAs Cj4gIH07Cj4gIAo+IC0vKioKPiAtICogZHJtX2dlbV9zaG1lbV9jcmVhdGUgLSBBbGxvY2F0ZSBh biBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc2l6ZQo+IC0gKiBAZGV2OiBEUk0gZGV2aWNlCj4gLSAq IEBzaXplOiBTaXplIG9mIHRoZSBvYmplY3QgdG8gYWxsb2NhdGUKPiAtICoKPiAtICogVGhpcyBm dW5jdGlvbiBjcmVhdGVzIGEgc2htZW0gR0VNIG9iamVjdC4KPiAtICoKPiAtICogUmV0dXJuczoK PiAtICogQSBzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKiBvbiBzdWNjZXNzIG9yIGFuIEVS Ul9QVFIoKS1lbmNvZGVkIG5lZ2F0aXZlCj4gLSAqIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiAt ICovCj4gLXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqZHJtX2dlbV9zaG1lbV9jcmVhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpCj4gK3N0YXRpYyBzdHJ1Y3QgZHJt X2dlbV9zaG1lbV9vYmplY3QgKgo+ICtfX2RybV9nZW1fc2htZW1fY3JlYXRlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBib29sIHByaXZhdGUpCj4gIHsKPiAgCXN0cnVjdCBk cm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW07Cj4gIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i ajsKPiAtCWludCByZXQ7Cj4gKwlpbnQgcmV0ID0gMDsKPiAgCj4gIAlzaXplID0gUEFHRV9BTElH TihzaXplKTsKPiAgCj4gQEAgLTY0LDcgKzU0LDEwIEBAIHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqZHJtX2dlbV9zaG1lbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90 Cj4gIAlpZiAoIW9iai0+ZnVuY3MpCj4gIAkJb2JqLT5mdW5jcyA9ICZkcm1fZ2VtX3NobWVtX2Z1 bmNzOwo+ICAKPiAtCXJldCA9IGRybV9nZW1fb2JqZWN0X2luaXQoZGV2LCBvYmosIHNpemUpOwo+ ICsJaWYgKHByaXZhdGUpCj4gKwkJZHJtX2dlbV9wcml2YXRlX29iamVjdF9pbml0KGRldiwgb2Jq LCBzaXplKTsKPiArCWVsc2UKPiArCQlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgb2Jq LCBzaXplKTsKPiAgCWlmIChyZXQpCj4gIAkJZ290byBlcnJfZnJlZTsKPiAgCj4gQEAgLTk2LDYg Kzg5LDIxIEBAIHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqZHJtX2dlbV9zaG1lbV9jcmVh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90Cj4gIAo+ICAJcmV0dXJuIEVSUl9QVFIo cmV0KTsKPiAgfQo+ICsvKioKPiArICogZHJtX2dlbV9zaG1lbV9jcmVhdGUgLSBBbGxvY2F0ZSBh biBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc2l6ZQo+ICsgKiBAZGV2OiBEUk0gZGV2aWNlCj4gKyAq IEBzaXplOiBTaXplIG9mIHRoZSBvYmplY3QgdG8gYWxsb2NhdGUKPiArICoKPiArICogVGhpcyBm dW5jdGlvbiBjcmVhdGVzIGEgc2htZW0gR0VNIG9iamVjdC4KPiArICoKPiArICogUmV0dXJuczoK PiArICogQSBzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKiBvbiBzdWNjZXNzIG9yIGFuIEVS Ul9QVFIoKS1lbmNvZGVkIG5lZ2F0aXZlCj4gKyAqIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiAr ICovCj4gK3N0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqZHJtX2dlbV9zaG1lbV9jcmVhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpCj4gK3sKPiArCXJldHVybiBfX2Ry bV9nZW1fc2htZW1fY3JlYXRlKGRldiwgc2l6ZSwgZmFsc2UpOwo+ICt9Cj4gIEVYUE9SVF9TWU1C T0xfR1BMKGRybV9nZW1fc2htZW1fY3JlYXRlKTsKPiAgCj4gIC8qKgo+IEBAIC0xMTUsNyArMTIz LDYgQEAgdm9pZCBkcm1fZ2VtX3NobWVtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKQo+ICAJaWYgKG9iai0+aW1wb3J0X2F0dGFjaCkgewo+ICAJCXNobWVtLT5wYWdlc191 c2VfY291bnQtLTsKPiAgCQlkcm1fcHJpbWVfZ2VtX2Rlc3Ryb3kob2JqLCBzaG1lbS0+c2d0KTsK PiAtCQlrdmZyZWUoc2htZW0tPnBhZ2VzKTsKPiAgCX0gZWxzZSB7Cj4gIAkJaWYgKHNobWVtLT5z Z3QpIHsKPiAgCQkJZG1hX3VubWFwX3NnKG9iai0+ZGV2LT5kZXYsIHNobWVtLT5zZ3QtPnNnbCwK PiBAQCAtMzcxLDcgKzM3OCw3IEBAIGRybV9nZW1fc2htZW1fY3JlYXRlX3dpdGhfaGFuZGxlKHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ICAJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0 ICpzaG1lbTsKPiAgCWludCByZXQ7Cj4gIAo+IC0Jc2htZW0gPSBkcm1fZ2VtX3NobWVtX2NyZWF0 ZShkZXYsIHNpemUpOwo+ICsJc2htZW0gPSBfX2RybV9nZW1fc2htZW1fY3JlYXRlKGRldiwgc2l6 ZSwgdHJ1ZSk7Cj4gIAlpZiAoSVNfRVJSKHNobWVtKSkKPiAgCQlyZXR1cm4gc2htZW07Cj4gIAo+ IEBAIC02OTUsMzYgKzcwMiwxNiBAQCBkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJs ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQkJICAgIHN0cnVjdCBzZ190YWJsZSAqc2d0 KQo+ICB7Cj4gIAlzaXplX3Qgc2l6ZSA9IFBBR0VfQUxJR04oYXR0YWNoLT5kbWFidWYtPnNpemUp Owo+IC0Jc2l6ZV90IG5wYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKPiAgCXN0cnVjdCBkcm1f Z2VtX3NobWVtX29iamVjdCAqc2htZW07Cj4gLQlpbnQgcmV0Owo+ICAKPiAgCXNobWVtID0gZHJt X2dlbV9zaG1lbV9jcmVhdGUoZGV2LCBzaXplKTsKPiAgCWlmIChJU19FUlIoc2htZW0pKQo+ICAJ CXJldHVybiBFUlJfQ0FTVChzaG1lbSk7Cj4gIAo+IC0Jc2htZW0tPnBhZ2VzID0ga3ZtYWxsb2Nf YXJyYXkobnBhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwo+IC0JaWYg KCFzaG1lbS0+cGFnZXMpIHsKPiAtCQlyZXQgPSAtRU5PTUVNOwo+IC0JCWdvdG8gZXJyX2ZyZWVf Z2VtOwo+IC0JfQo+IC0KPiAtCXJldCA9IGRybV9wcmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlz KHNndCwgc2htZW0tPnBhZ2VzLCBOVUxMLCBucGFnZXMpOwo+IC0JaWYgKHJldCA8IDApCj4gLQkJ Z290byBlcnJfZnJlZV9hcnJheTsKPiAtCj4gIAlzaG1lbS0+c2d0ID0gc2d0Owo+IC0Jc2htZW0t PnBhZ2VzX3VzZV9jb3VudCA9IDE7IC8qIFBlcm1hbmVudGx5IHBpbm5lZCBmcm9tIG91ciBwb2lu dCBvZiB2aWV3ICovCj4gIAo+ICAJRFJNX0RFQlVHX1BSSU1FKCJzaXplID0gJXp1XG4iLCBzaXpl KTsKPiAgCj4gIAlyZXR1cm4gJnNobWVtLT5iYXNlOwo+IC0KPiAtZXJyX2ZyZWVfYXJyYXk6Cj4g LQlrdmZyZWUoc2htZW0tPnBhZ2VzKTsKPiAtZXJyX2ZyZWVfZ2VtOgo+IC0JZHJtX2dlbV9vYmpl Y3RfcHV0KCZzaG1lbS0+YmFzZSk7Cj4gLQo+IC0JcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgfQo+ ICBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSk7 CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK