From mboxrd@z Thu Jan 1 00:00:00 1970 From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" Subject: [PATCH 06/12] dma-buf: add optional invalidate_mappings callback v5 Date: Fri, 26 Apr 2019 14:36:32 +0200 Message-ID: <20190426123638.40221-6-christian.koenig@amd.com> References: <20190426123638.40221-1-christian.koenig@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr1-x444.google.com (mail-wr1-x444.google.com [IPv6:2a00:1450:4864:20::444]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3D1B889261 for ; Fri, 26 Apr 2019 12:36:46 +0000 (UTC) Received: by mail-wr1-x444.google.com with SMTP id v16so1836795wrp.1 for ; Fri, 26 Apr 2019 05:36:46 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:5545:e552:48cc:b52f]) by smtp.gmail.com with ESMTPSA id y125sm37196159wmc.39.2019.04.26.05.36.43 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 26 Apr 2019 05:36:43 -0700 (PDT) In-Reply-To: <20190426123638.40221-1-christian.koenig@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RWFjaCBpbXBvcnRlciBjYW4gbm93IHByb3ZpZGUgYW4gaW52YWxpZGF0ZV9tYXBwaW5ncyBjYWxs YmFjay4KClRoaXMgYWxsb3dzIHRoZSBleHBvcnRlciB0byBwcm92aWRlIHRoZSBtYXBwaW5ncyB3 aXRob3V0IHRoZSBuZWVkIHRvIHBpbgp0aGUgYmFja2luZyBzdG9yZS4KCnYyOiBkb24ndCB0cnkg dG8gaW52YWxpZGF0ZSBtYXBwaW5ncyB3aGVuIHRoZSBjYWxsYmFjayBpcyBOVUxMLAogICAgbG9j ayB0aGUgcmVzZXJ2YXRpb24gb2JqIHdoaWxlIHVzaW5nIHRoZSBhdHRhY2htZW50cywKICAgIGFk ZCBoZWxwZXIgdG8gc2V0IHRoZSBjYWxsYmFjawp2MzogbW92ZSBmbGFnIGZvciBpbnZhbGlkYXRp b24gc3VwcG9ydCBpbnRvIHRoZSBETUEtYnVmLAogICAgdXNlIG5ldyBhdHRhY2hfaW5mbyBzdHJ1 Y3R1cmUgdG8gc2V0IHRoZSBjYWxsYmFjawp2NDogdXNlIGltcG9ydGVyX3ByaXYgZmllbGQgaW5z dGVhZCBvZiBtYW5nbGluZyBleHBvcnRlciBwcml2Lgp2NTogZHJvcCBpbnZhbGlkYXRpb25fc3Vw cG9ydGVkIGZsYWcKClNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5r b2VuaWdAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIHwgNTEgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBpbmNsdWRlL2xpbnV4L2RtYS1idWYu aCAgIHwgMzAgKysrKysrKysrKysrKysrKysrKysrLS0KIDIgZmlsZXMgY2hhbmdlZCwgNzEgaW5z ZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVm L2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKaW5kZXggOTViY2QyZWQ3OTVi Li4xYjVjZGFlNjhjZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKKysr IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwpAQCAtNjA3LDcgKzYwNyw5IEBAIGRtYV9idWZf YXR0YWNoKGNvbnN0IHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9pbmZvICppbmZvKQogCQlpZiAocmV0 KQogCQkJZ290byBlcnJfYXR0YWNoOwogCX0KKwlyZXNlcnZhdGlvbl9vYmplY3RfbG9jayhkbWFi dWYtPnJlc3YsIE5VTEwpOwogCWxpc3RfYWRkKCZhdHRhY2gtPm5vZGUsICZkbWFidWYtPmF0dGFj aG1lbnRzKTsKKwlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGRtYWJ1Zi0+cmVzdik7CiAKIAlt dXRleF91bmxvY2soJmRtYWJ1Zi0+bG9jayk7CiAKQEAgLTY1MSw3ICs2NTMsOSBAQCB2b2lkIGRt YV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmF0dGFjaCkKIAkJCQkJICAgRE1BX0JJRElSRUNUSU9OQUwpOwogCiAJbXV0ZXhfbG9j aygmZG1hYnVmLT5sb2NrKTsKKwlyZXNlcnZhdGlvbl9vYmplY3RfbG9jayhkbWFidWYtPnJlc3Ys IE5VTEwpOwogCWxpc3RfZGVsKCZhdHRhY2gtPm5vZGUpOworCXJlc2VydmF0aW9uX29iamVjdF91 bmxvY2soZG1hYnVmLT5yZXN2KTsKIAlpZiAoZG1hYnVmLT5vcHMtPmRldGFjaCkKIAkJZG1hYnVm LT5vcHMtPmRldGFjaChkbWFidWYsIGF0dGFjaCk7CiAKQEAgLTY3MiwxMCArNjc2LDcgQEAgRVhQ T1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9kZXRhY2gpOwogICogUmV0dXJucyBzZ190YWJsZSBjb250 YWluaW5nIHRoZSBzY2F0dGVybGlzdCB0byBiZSByZXR1cm5lZDsgcmV0dXJucyBFUlJfUFRSCiAg KiBvbiBlcnJvci4gTWF5IHJldHVybiAtRUlOVFIgaWYgaXQgaXMgaW50ZXJydXB0ZWQgYnkgYSBz aWduYWwuCiAgKgotICogQSBtYXBwaW5nIG11c3QgYmUgdW5tYXBwZWQgYnkgdXNpbmcgZG1hX2J1 Zl91bm1hcF9hdHRhY2htZW50KCkuIE5vdGUgdGhhdAotICogdGhlIHVuZGVybHlpbmcgYmFja2lu ZyBzdG9yYWdlIGlzIHBpbm5lZCBmb3IgYXMgbG9uZyBhcyBhIG1hcHBpbmcgZXhpc3RzLAotICog dGhlcmVmb3JlIHVzZXJzL2ltcG9ydGVycyBzaG91bGQgbm90IGhvbGQgb250byBhIG1hcHBpbmcg Zm9yIHVuZHVlIGFtb3VudHMgb2YKLSAqIHRpbWUuCisgKiBBIG1hcHBpbmcgbXVzdCBiZSB1bm1h cHBlZCBieSB1c2luZyBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoKS4KICAqLwogc3RydWN0IHNn X3RhYmxlICoKIGRtYV9idWZfbWFwX2F0dGFjaG1lbnRfbG9ja2VkKHN0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQgKmF0dGFjaCwKQEAgLTY5MCwxMSArNjkxLDIyIEBAIGRtYV9idWZfbWFwX2F0dGFj aG1lbnRfbG9ja2VkKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKIAlpZiAoYXR0 YWNoLT5zZ3QpCiAJCXJldHVybiBhdHRhY2gtPnNndDsKIAotCXIgPSBkbWFfYnVmX3BpbihhdHRh Y2gtPmRtYWJ1Zik7Ci0JaWYgKHIpCi0JCXJldHVybiBFUlJfUFRSKHIpOworCWlmIChhdHRhY2gt PmludmFsaWRhdGUpIHsKKwkJLyoKKwkJICogTWFwcGluZyBhIERNQS1idWYgY2FuIHRyaWdnZXIg aXRzIGludmFsaWRhdGlvbiwgcHJldmVudAorCQkgKiBzZW5kaW5nIHRoaXMgZXZlbnQgdG8gdGhl IGNhbGxlciBieSB0ZW1wb3JhcnkgcmVtb3ZpbmcKKwkJICogdGhpcyBhdHRhY2htZW50IGZyb20g dGhlIGxpc3QuCisJCSAqLworCQlsaXN0X2RlbCgmYXR0YWNoLT5ub2RlKTsKKwl9IGVsc2Ugewor CQlyID0gZG1hX2J1Zl9waW4oYXR0YWNoLT5kbWFidWYpOworCQlpZiAocikKKwkJCXJldHVybiBF UlJfUFRSKHIpOworCX0KIAogCXNnX3RhYmxlID0gYXR0YWNoLT5kbWFidWYtPm9wcy0+bWFwX2Rt YV9idWYoYXR0YWNoLCBkaXJlY3Rpb24pOworCWlmIChhdHRhY2gtPmludmFsaWRhdGUpCisJCWxp c3RfYWRkKCZhdHRhY2gtPm5vZGUsICZhdHRhY2gtPmRtYWJ1Zi0+YXR0YWNobWVudHMpOwogCWlm ICghc2dfdGFibGUpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCkBAIC03NjEsNyArNzcz LDggQEAgdm9pZCBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnRfbG9ja2VkKHN0cnVjdCBkbWFfYnVm X2F0dGFjaG1lbnQgKmF0dGFjaCwKIAogCWF0dGFjaC0+ZG1hYnVmLT5vcHMtPnVubWFwX2RtYV9i dWYoYXR0YWNoLCBzZ190YWJsZSwKIAkJCQkJCWRpcmVjdGlvbik7Ci0JZG1hX2J1Zl91bnBpbihh dHRhY2gtPmRtYWJ1Zik7CisJaWYgKCFhdHRhY2gtPmludmFsaWRhdGUpCisJCWRtYV9idWZfdW5w aW4oYXR0YWNoLT5kbWFidWYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl91bm1hcF9h dHRhY2htZW50X2xvY2tlZCk7CiAKQEAgLTc5Myw2ICs4MDYsMjYgQEAgdm9pZCBkbWFfYnVmX3Vu bWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAogfQogRVhQ T1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KTsKIAorLyoqCisgKiBkbWFf YnVmX2ludmFsaWRhdGVfbWFwcGluZ3MgLSBpbnZhbGlkYXRlIGFsbCBtYXBwaW5ncyBvZiB0aGlz IGRtYV9idWYKKyAqCisgKiBAZG1hYnVmOglbaW5dCWJ1ZmZlciB3aGljaCBtYXBwaW5ncyBzaG91 bGQgYmUgaW52YWxpZGF0ZWQKKyAqCisgKiBJbmZvcm1zIGFsbCBhdHRhY2htZW5zdCB0aGF0IHRo ZXkgbmVlZCB0byBkZXN0cm95IGFuZCByZWNyZWF0ZWQgYWxsIHRoZWlyCisgKiBtYXBwaW5ncy4K KyAqLwordm9pZCBkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3Moc3RydWN0IGRtYV9idWYgKmRt YWJ1ZikKK3sKKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7CisKKwlyZXNlcnZh dGlvbl9vYmplY3RfYXNzZXJ0X2hlbGQoZG1hYnVmLT5yZXN2KTsKKworCWxpc3RfZm9yX2VhY2hf ZW50cnkoYXR0YWNoLCAmZG1hYnVmLT5hdHRhY2htZW50cywgbm9kZSkKKwkJaWYgKGF0dGFjaC0+ aW52YWxpZGF0ZSkKKwkJCWF0dGFjaC0+aW52YWxpZGF0ZShhdHRhY2gpOworfQorRVhQT1JUX1NZ TUJPTF9HUEwoZG1hX2J1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKTsKKwogLyoqCiAgKiBET0M6IGNw dSBhY2Nlc3MKICAqCkBAIC0xMjA1LDEwICsxMjM4LDEyIEBAIHN0YXRpYyBpbnQgZG1hX2J1Zl9k ZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQogCQlzZXFfcHV0cyhz LCAiXHRBdHRhY2hlZCBEZXZpY2VzOlxuIik7CiAJCWF0dGFjaF9jb3VudCA9IDA7CiAKKwkJcmVz ZXJ2YXRpb25fb2JqZWN0X2xvY2soYnVmX29iai0+cmVzdiwgTlVMTCk7CiAJCWxpc3RfZm9yX2Vh Y2hfZW50cnkoYXR0YWNoX29iaiwgJmJ1Zl9vYmotPmF0dGFjaG1lbnRzLCBub2RlKSB7CiAJCQlz ZXFfcHJpbnRmKHMsICJcdCVzXG4iLCBkZXZfbmFtZShhdHRhY2hfb2JqLT5kZXYpKTsKIAkJCWF0 dGFjaF9jb3VudCsrOwogCQl9CisJCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2soYnVmX29iai0+ cmVzdik7CiAKIAkJc2VxX3ByaW50ZihzLCAiVG90YWwgJWQgZGV2aWNlcyBhdHRhY2hlZFxuXG4i LAogCQkJCWF0dGFjaF9jb3VudCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYu aCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCmluZGV4IGY3ZDZmYzA0OWIzOS4uZDI3ZTkxYmJk Nzk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAorKysgYi9pbmNsdWRlL2xp bnV4L2RtYS1idWYuaApAQCAtMzM0LDYgKzMzNCw5IEBAIHN0cnVjdCBkbWFfYnVmIHsKICAqIEBk ZXY6IGRldmljZSBhdHRhY2hlZCB0byB0aGUgYnVmZmVyLgogICogQG5vZGU6IGxpc3Qgb2YgZG1h X2J1Zl9hdHRhY2htZW50LgogICogQHByaXY6IGV4cG9ydGVyIHNwZWNpZmljIGF0dGFjaG1lbnQg ZGF0YS4KKyAqIEBpbXBvcnRlcl9wcml2OiBpbXBvcnRlciBzcGVjaWZpYyBhdHRhY2htZW50IGRh dGEuCisgKiBAaW52YWxpZGF0ZTogaW52YWxpZGF0ZSBjYWxsYmFjaywgc2VlICZkbWFfYnVmX2F0 dGFjaF9pbmZvLmludmFsaWRhdGUgZm9yCisgKgkJbW9yZSBpbmZvcm1hdGlvbi4KICAqCiAgKiBU aGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgYXR0YWNobWVudCBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRo ZSBkbWFfYnVmIGJ1ZmZlcgogICogYW5kIGl0cyB1c2VyIGRldmljZShzKS4gVGhlIGxpc3QgY29u dGFpbnMgb25lIGF0dGFjaG1lbnQgc3RydWN0IHBlciBkZXZpY2UKQEAgLTM1MCw2ICszNTMsOCBA QCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJ c3RydWN0IHNnX3RhYmxlICpzZ3Q7CiAJdm9pZCAqcHJpdjsKKwl2b2lkICppbXBvcnRlcl9wcml2 OworCXZvaWQgKCppbnZhbGlkYXRlKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gp OwogfTsKIAogLyoqCkBAIC0zODgsMTUgKzM5MywzNSBAQCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRf aW5mbyB7CiAKIC8qKgogICogc3RydWN0IGRtYV9idWZfYXR0YWNoX2luZm8gLSBob2xkcyBpbmZv cm1hdGlvbiBuZWVkZWQgdG8gYXR0YWNoIHRvIGEgZG1hX2J1ZgotICogQGRtYWJ1ZjoJdGhlIGV4 cG9ydGVkIGRtYV9idWYKLSAqIEBkZXY6CXRoZSBkZXZpY2Ugd2hpY2ggd2FudHMgdG8gaW1wb3J0 IHRoZSBhdHRhY2htZW50CisgKiBAZG1hYnVmOgkJdGhlIGV4cG9ydGVkIGRtYV9idWYKKyAqIEBk ZXY6CQl0aGUgZGV2aWNlIHdoaWNoIHdhbnRzIHRvIGltcG9ydCB0aGUgYXR0YWNobWVudAorICog QGltcG9ydGVyX3ByaXY6CXByaXZhdGUgZGF0YSBvZiBpbXBvcnRlciB0byB0aGlzIGF0dGFjaG1l bnQKKyAqIEBpbnZhbGlkYXRlOgkJb3B0aW9uYWwgY2FsbGJhY2sgcHJvdmlkZWQgYnkgdGhlIGlt cG9ydGVyCiAgKgogICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIGluZm9ybWF0aW9uIHJlcXVp cmVkIHRvIGF0dGFjaCB0byBhIGJ1ZmZlci4gVXNlZAogICogd2l0aCBkbWFfYnVmX2F0dGFjaCgp IG9ubHkuCisgKgorICogT25seSBpZiB0aGUgaW52YWxpZGF0ZSBjYWxsYmFjayBpcyBwcm92aWRl ZCB0aGUgZnJhbWV3b3JrIGNhbiBhdm9pZCBwaW5uaW5nCisgKiB0aGUgYmFja2luZyBzdG9yZSB3 aGlsZSBtYXBwaW5ncyBleGlzdHMuCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2l0 aCB0aGUgbG9jayBvZiB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0CisgKiBhc3NvY2lhdGVkIHdpdGgg dGhlIGRtYV9idWYgaGVsZCBhbmQgdGhlIG1hcHBpbmcgZnVuY3Rpb24gbXVzdCBiZQorICogY2Fs bGVkIHdpdGggdGhpcyBsb2NrIGhlbGQgYXMgd2VsbC4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgbm8g bWFwcGluZworICogaXMgY3JlYXRlZCBjb25jdXJyZW50bHkgd2l0aCBhbiBvbmdvaW5nIGludmFs aWRhdGlvbi4KKyAqCisgKiBBZnRlciB0aGUgY2FsbGJhY2sgYWxsIGV4aXN0aW5nIG1hcHBpbmdz IGFyZSBzdGlsbCB2YWxpZCB1bnRpbCBhbGwKKyAqIGZlbmNlcyBpbiB0aGUgZG1hX2J1ZnMgcmVz ZXJ2YXRpb24gb2JqZWN0IGFyZSBzaWduYWxlZC4gQWZ0ZXIgZ2V0dGluZyBhbgorICogaW52YWxp ZGF0aW9uIGNhbGxiYWNrIGFsbCBtYXBwaW5ncyBzaG91bGQgYmUgZGVzdHJveWVkIGJ5IHRoZSBp bXBvcnRlciB1c2luZworICogdGhlIG5vcm1hbCBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoKSBm dW5jdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLgorICoKKyAqIE5ldyBtYXBwaW5ncyBjYW4gYmUg Y3JlYXRlZCBpbW1lZGlhdGVseSwgYnV0IGNhbid0IGJlIHVzZWQgYmVmb3JlIHRoZQorICogZXhj bHVzaXZlIGZlbmNlIGluIHRoZSBkbWFfYnVmcyByZXNlcnZhdGlvbiBvYmplY3QgaXMgc2lnbmFs ZWQuCiAgKi8KIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9pbmZvIHsKIAlzdHJ1Y3QgZG1hX2J1ZiAq ZG1hYnVmOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkICppbXBvcnRlcl9wcml2OworCXZv aWQgKCppbnZhbGlkYXRlKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwogfTsK IAogLyoqCkBAIC00MzYsNiArNDYxLDcgQEAgdm9pZCBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnRf bG9ja2VkKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKiwKIAkJCQkgICAgIGVudW0gZG1hX2Rh dGFfZGlyZWN0aW9uKTsKIHZvaWQgZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KHN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKiwgc3RydWN0IHNnX3RhYmxlICosCiAJCQkJZW51bSBkbWFfZGF0YV9k aXJlY3Rpb24pOwordm9pZCBkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3Moc3RydWN0IGRtYV9i dWYgKmRtYV9idWYpOwogaW50IGRtYV9idWZfYmVnaW5fY3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1 ZiAqZG1hX2J1ZiwKIAkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKIGludCBk bWFfYnVmX2VuZF9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAotLSAKMi4xNy4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=