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=-12.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 C7FEEC4742A for ; Wed, 23 Sep 2020 10:22:54 +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 92A7821BE5 for ; Wed, 23 Sep 2020 10:22:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 92A7821BE5 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1329D6E943; Wed, 23 Sep 2020 10:22:19 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 832706E973; Wed, 23 Sep 2020 10:22:15 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 54B69B282; Wed, 23 Sep 2020 10:22:51 +0000 (UTC) From: Thomas Zimmermann To: alexander.deucher@amd.com, christian.koenig@amd.com, airlied@linux.ie, daniel@ffwll.ch, linux@armlinux.org.uk, maarten.lankhorst@linux.intel.com, mripard@kernel.org, l.stach@pengutronix.de, christian.gmeiner@gmail.com, inki.dae@samsung.com, jy0922.shim@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, kgene@kernel.org, krzk@kernel.org, patrik.r.jakobsson@gmail.com, jani.nikula@linux.intel.com, joonas.lahtinen@linux.intel.com, rodrigo.vivi@intel.com, chunkuang.hu@kernel.org, p.zabel@pengutronix.de, matthias.bgg@gmail.com, robdclark@gmail.com, sean@poorly.run, bskeggs@redhat.com, tomi.valkeinen@ti.com, eric@anholt.net, hjc@rock-chips.com, heiko@sntech.de, thierry.reding@gmail.com, jonathanh@nvidia.com, rodrigosiqueiramelo@gmail.com, hamohammed.sa@gmail.com, oleksandr_andrushchenko@epam.com, hyun.kwon@xilinx.com, laurent.pinchart@ideasonboard.com, michal.simek@xilinx.com, sumit.semwal@linaro.org, evan.quan@amd.com, Hawking.Zhang@amd.com, tianci.yin@amd.com, marek.olsak@amd.com, hdegoede@redhat.com, andrey.grodzovsky@amd.com, Felix.Kuehling@amd.com, xinhui.pan@amd.com, aaron.liu@amd.com, nirmoy.das@amd.com, chris@chris-wilson.co.uk, matthew.auld@intel.com, tvrtko.ursulin@linux.intel.com, andi.shyti@intel.com, sam@ravnborg.org, miaoqinglang@huawei.com, emil.velikov@collabora.com, laurentiu.palcu@oss.nxp.com, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com Subject: [PATCH v3 13/22] drm/radeon: Introduce GEM object functions Date: Wed, 23 Sep 2020 12:21:50 +0200 Message-Id: <20200923102159.24084-14-tzimmermann@suse.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200923102159.24084-1-tzimmermann@suse.de> References: <20200923102159.24084-1-tzimmermann@suse.de> MIME-Version: 1.0 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-samsung-soc@vger.kernel.org, linux-arm-msm@vger.kernel.org, intel-gfx@lists.freedesktop.org, etnaviv@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-mediatek@lists.infradead.org, amd-gfx@lists.freedesktop.org, Thomas Zimmermann , nouveau@lists.freedesktop.org, linux-tegra@vger.kernel.org, xen-devel@lists.xenproject.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" R0VNIG9iamVjdCBmdW5jdGlvbnMgZGVwcmVjYXRlIHNldmVyYWwgc2ltaWxhciBjYWxsYmFjayBp bnRlcmZhY2VzIGluCnN0cnVjdCBkcm1fZHJpdmVyLiBUaGlzIHBhdGNoIHJlcGxhY2VzIHRoZSBw ZXItZHJpdmVyIGNhbGxiYWNrcyB3aXRoCnBlci1pbnN0YW5jZSBjYWxsYmFja3MgaW4gcmFkZW9u LgoKdjI6CgkqIG1vdmUgb2JqZWN0LWZ1bmN0aW9uIGluc3RhbmNlIHRvIHJhZGVvbl9nZW0uYyAo Q2hyaXN0aWFuKQoJKiBzZXQgY2FsbGJhY2tzIGluIHJhZGVvbl9nZW1fb2JqZWN0X2NyZWF0ZSgp IChDaHJpc3RpYW4pCgpTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1h bm5Ac3VzZS5kZT4KUmV2aWV3ZWQtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2Vu aWdAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyB8IDIz ICstLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2Vt LmMgfCAzMSArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAy OCBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9u X2Rydi5jCmluZGV4IDRjZDMwNjEzZmExZC4uNjUwNjFjOTQ5YWVlIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFk ZW9uL3JhZGVvbl9kcnYuYwpAQCAtMTI0LDEzICsxMjQsNiBAQCB2b2lkIHJhZGVvbl9kcml2ZXJf aXJxX3ByZWluc3RhbGxfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50IHJhZGVvbl9k cml2ZXJfaXJxX3Bvc3RpbnN0YWxsX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQg cmFkZW9uX2RyaXZlcl9pcnFfdW5pbnN0YWxsX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK IGlycXJldHVybl90IHJhZGVvbl9kcml2ZXJfaXJxX2hhbmRsZXJfa21zKGludCBpcnEsIHZvaWQg KmFyZyk7Ci12b2lkIHJhZGVvbl9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopOwotaW50IHJhZGVvbl9nZW1fb2JqZWN0X29wZW4oc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmosCi0JCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotdm9pZCByYWRlb25fZ2Vt X29iamVjdF9jbG9zZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKLQkJCQlzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdik7Ci1zdHJ1Y3QgZG1hX2J1ZiAqcmFkZW9uX2dlbV9wcmltZV9leHBv cnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqLAotCQkJCQlpbnQgZmxhZ3MpOwogZXh0ZXJu IGludCByYWRlb25fZ2V0X2NydGNfc2Nhbm91dHBvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1 bnNpZ25lZCBpbnQgY3J0YywKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCAqdnBv cywgaW50ICpocG9zLAogCQkJCSAgICAgIGt0aW1lX3QgKnN0aW1lLCBrdGltZV90ICpldGltZSwK QEAgLTE0NSwxNCArMTM4LDkgQEAgaW50IHJhZGVvbl9tb2RlX2R1bWJfbW1hcChzdHJ1Y3QgZHJt X2ZpbGUgKmZpbHAsCiBpbnQgcmFkZW9uX21vZGVfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCiAJCQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1 Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOwotc3RydWN0IHNnX3RhYmxlICpyYWRlb25f Z2VtX3ByaW1lX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKnJhZGVvbl9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCQkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqLAog CQkJCQkJCXN0cnVjdCBzZ190YWJsZSAqc2cpOwotaW50IHJhZGVvbl9nZW1fcHJpbWVfcGluKHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKLXZvaWQgcmFkZW9uX2dlbV9wcmltZV91bnBpbihz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci12b2lkICpyYWRlb25fZ2VtX3ByaW1lX3ZtYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwotdm9pZCByYWRlb25fZ2VtX3ByaW1lX3Z1bm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOwogCiAvKiBhdHB4IGhh bmRsZXIgKi8KICNpZiBkZWZpbmVkKENPTkZJR19WR0FfU1dJVENIRVJPTykKQEAgLTU1MCw3ICs1 MzgsNyBAQCBsb25nIHJhZGVvbl9kcm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJfQogCiAJ cmV0ID0gZHJtX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKLQkKKwogCXBtX3J1bnRpbWVfbWFya19s YXN0X2J1c3koZGV2LT5kZXYpOwogCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGRldi0+ZGV2 KTsKIAlyZXR1cm4gcmV0OwpAQCAtNjA5LDIyICs1OTcsMTMgQEAgc3RhdGljIHN0cnVjdCBkcm1f ZHJpdmVyIGttc19kcml2ZXIgPSB7CiAJLmlycV91bmluc3RhbGwgPSByYWRlb25fZHJpdmVyX2ly cV91bmluc3RhbGxfa21zLAogCS5pcnFfaGFuZGxlciA9IHJhZGVvbl9kcml2ZXJfaXJxX2hhbmRs ZXJfa21zLAogCS5pb2N0bHMgPSByYWRlb25faW9jdGxzX2ttcywKLQkuZ2VtX2ZyZWVfb2JqZWN0 X3VubG9ja2VkID0gcmFkZW9uX2dlbV9vYmplY3RfZnJlZSwKLQkuZ2VtX29wZW5fb2JqZWN0ID0g cmFkZW9uX2dlbV9vYmplY3Rfb3BlbiwKLQkuZ2VtX2Nsb3NlX29iamVjdCA9IHJhZGVvbl9nZW1f b2JqZWN0X2Nsb3NlLAogCS5kdW1iX2NyZWF0ZSA9IHJhZGVvbl9tb2RlX2R1bWJfY3JlYXRlLAog CS5kdW1iX21hcF9vZmZzZXQgPSByYWRlb25fbW9kZV9kdW1iX21tYXAsCiAJLmZvcHMgPSAmcmFk ZW9uX2RyaXZlcl9rbXNfZm9wcywKIAogCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3By aW1lX2hhbmRsZV90b19mZCwKIAkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9m ZF90b19oYW5kbGUsCi0JLmdlbV9wcmltZV9leHBvcnQgPSByYWRlb25fZ2VtX3ByaW1lX2V4cG9y dCwKLQkuZ2VtX3ByaW1lX3BpbiA9IHJhZGVvbl9nZW1fcHJpbWVfcGluLAotCS5nZW1fcHJpbWVf dW5waW4gPSByYWRlb25fZ2VtX3ByaW1lX3VucGluLAotCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxl ID0gcmFkZW9uX2dlbV9wcmltZV9nZXRfc2dfdGFibGUsCiAJLmdlbV9wcmltZV9pbXBvcnRfc2df dGFibGUgPSByYWRlb25fZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwKLQkuZ2VtX3ByaW1lX3Zt YXAgPSByYWRlb25fZ2VtX3ByaW1lX3ZtYXAsCi0JLmdlbV9wcmltZV92dW5tYXAgPSByYWRlb25f Z2VtX3ByaW1lX3Z1bm1hcCwKIAogCS5uYW1lID0gRFJJVkVSX05BTUUsCiAJLmRlc2MgPSBEUklW RVJfREVTQywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5j IGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2VtLmMKaW5kZXggZTVjNDI3MWU2NGVk Li4wY2NkNzIxM2U0MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9u X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCkBAIC0zNSw3 ICszNSwxNyBAQAogCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAKLXZvaWQgcmFkZW9uX2dlbV9vYmpl Y3RfZnJlZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmopCitzdHJ1Y3QgZG1hX2J1ZiAqcmFk ZW9uX2dlbV9wcmltZV9leHBvcnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqLAorCQkJCQlp bnQgZmxhZ3MpOworc3RydWN0IHNnX3RhYmxlICpyYWRlb25fZ2VtX3ByaW1lX2dldF9zZ190YWJs ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitpbnQgcmFkZW9uX2dlbV9wcmltZV9waW4o c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCByYWRlb25fZ2VtX3ByaW1lX3VucGlu KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgKnJhZGVvbl9nZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cit2b2lkIHJhZGVvbl9nZW1fcHJpbWVfdnVu bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2b2lkICp2YWRkcik7CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3MgcmFkZW9uX2dlbV9vYmplY3RfZnVuY3M7 CisKK3N0YXRpYyB2b2lkIHJhZGVvbl9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpnb2JqKQogewogCXN0cnVjdCByYWRlb25fYm8gKnJvYmogPSBnZW1fdG9fcmFkZW9uX2Jv KGdvYmopOwogCkBAIC04NSw2ICs5NSw3IEBAIGludCByYWRlb25fZ2VtX29iamVjdF9jcmVhdGUo c3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJcmV0dXJu IHI7CiAJfQogCSpvYmogPSAmcm9iai0+dGJvLmJhc2U7CisJKCpvYmopLT5mdW5jcyA9ICZyYWRl b25fZ2VtX29iamVjdF9mdW5jczsKIAlyb2JqLT5waWQgPSB0YXNrX3BpZF9ucihjdXJyZW50KTsK IAogCW11dGV4X2xvY2soJnJkZXYtPmdlbS5tdXRleCk7CkBAIC0xNDYsNyArMTU3LDcgQEAgdm9p ZCByYWRlb25fZ2VtX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAgKiBDYWxsIGZy b20gZHJtX2dlbV9oYW5kbGVfY3JlYXRlIHdoaWNoIGFwcGVhciBpbiBib3RoIG5ldyBhbmQgb3Bl biBpb2N0bAogICogY2FzZS4KICAqLwotaW50IHJhZGVvbl9nZW1fb2JqZWN0X29wZW4oc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQorc3RhdGlj IGludCByYWRlb25fZ2VtX29iamVjdF9vcGVuKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2JvICpyYm8gPSBn ZW1fdG9fcmFkZW9uX2JvKG9iaik7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSByYm8t PnJkZXY7CkBAIC0xNzYsOCArMTg3LDggQEAgaW50IHJhZGVvbl9nZW1fb2JqZWN0X29wZW4oc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcmkKIAlyZXR1 cm4gMDsKIH0KIAotdm9pZCByYWRlb25fZ2VtX29iamVjdF9jbG9zZShzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iaiwKLQkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCitzdGF0aWMg dm9pZCByYWRlb25fZ2VtX29iamVjdF9jbG9zZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwK KwkJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJc3RydWN0IHJhZGVvbl9i byAqcmJvID0gZ2VtX3RvX3JhZGVvbl9ibyhvYmopOwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpy ZGV2ID0gcmJvLT5yZGV2OwpAQCAtMjE2LDYgKzIyNywxOCBAQCBzdGF0aWMgaW50IHJhZGVvbl9n ZW1faGFuZGxlX2xvY2t1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHIpCiAJcmV0 dXJuIHI7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3RfZnVuY3MgcmFk ZW9uX2dlbV9vYmplY3RfZnVuY3MgPSB7CisJLmZyZWUgPSByYWRlb25fZ2VtX29iamVjdF9mcmVl LAorCS5vcGVuID0gcmFkZW9uX2dlbV9vYmplY3Rfb3BlbiwKKwkuY2xvc2UgPSByYWRlb25fZ2Vt X29iamVjdF9jbG9zZSwKKwkuZXhwb3J0ID0gcmFkZW9uX2dlbV9wcmltZV9leHBvcnQsCisJLnBp biA9IHJhZGVvbl9nZW1fcHJpbWVfcGluLAorCS51bnBpbiA9IHJhZGVvbl9nZW1fcHJpbWVfdW5w aW4sCisJLmdldF9zZ190YWJsZSA9IHJhZGVvbl9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS52 bWFwID0gcmFkZW9uX2dlbV9wcmltZV92bWFwLAorCS52dW5tYXAgPSByYWRlb25fZ2VtX3ByaW1l X3Z1bm1hcCwKK307CisKIC8qCiAgKiBHRU0gaW9jdGxzLgogICovCi0tIAoyLjI4LjAKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGlu ZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=