From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH 20/24] drm/i915: clean up atomic plane check functions Date: Mon, 1 Jun 2015 15:27:23 +0200 Message-ID: <1433165247-15928-21-git-send-email-maarten.lankhorst@linux.intel.com> References: <1433165247-15928-1-git-send-email-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTP id 559186E604 for ; Mon, 1 Jun 2015 06:27:45 -0700 (PDT) In-Reply-To: <1433165247-15928-1-git-send-email-maarten.lankhorst@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org QnkgcGFzc2luZyBjcnRjX3N0YXRlIHRvIHRoZSBjaGVja19wbGFuZSBmdW5jdGlvbnMgYSBsb3Qg b2YgZHVwbGljYXRlZApjb2RlIGNhbiBiZSByZW1vdmVkLiBBbmQgbm93IHRoYXQgdGhlIHRyYW5z aXRpb25hbCBoZWxwZXJzIGFyZSBnb25lIHRoZQpjcnRjX3N0YXRlIGNhbiBiZSByZWxpYWJseSBv YnRhaW5lZC4KClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmto b3JzdEBsaW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRv bWljX3BsYW5lLmMgfCAyMCArKysrKy0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMgICAgICB8IDQ4ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICAgICAgIHwgIDEgKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgICAgICAgfCAxMyArKystLS0tLS0KIDQgZmlsZXMg Y2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgNTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYwppbmRleCBjNzljMDdlZjY2NWMuLjRkMTEyZjZl YjEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5l LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMKQEAgLTEx Nyw5ICsxMTcsMTEgQEAgc3RhdGljIGludCBpbnRlbF9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCiAJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9zdGF0 ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKHN0YXRlKTsKIAlpbnQgcmV0OwogCi0JY3J0YyA9IGNy dGMgPyBjcnRjIDogcGxhbmUtPmNydGM7CisJY3J0YyA9IGNydGMgPyBjcnRjIDogcGxhbmUtPnN0 YXRlLT5jcnRjOwogCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwogCisJaW50ZWxf c3RhdGUtPnZpc2libGUgPSBmYWxzZTsKKwogCS8qCiAJICogQm90aCBjcnRjIGFuZCBwbGFuZS0+ Y3J0YyBjb3VsZCBiZSBOVUxMIGlmIHdlJ3JlIHVwZGF0aW5nIGEKIAkgKiBwcm9wZXJ0eSB3aGls ZSB0aGUgcGxhbmUgaXMgZGlzYWJsZWQuICBXZSBkb24ndCBhY3R1YWxseSBoYXZlCkBAIC0xMjks MTYgKzEzMSw4IEBAIHN0YXRpYyBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAogCWlmICghY3J0YykKIAkJcmV0dXJuIDA7CiAKLQkvKiBGSVhNRTog dGVtcG9yYXJ5IGhhY2sgbmVjZXNzYXJ5IHdoaWxlIHdlIHN0aWxsIHVzZSB0aGUgcGxhbmUgdXBk YXRlCi0JICogaGVscGVyLiAqLwotCWlmIChzdGF0ZS0+c3RhdGUpIHsKLQkJY3J0Y19zdGF0ZSA9 Ci0JCQlpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBpbnRlbF9jcnRj KTsKLQkJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkKLQkJCXJldHVybiBQVFJfRVJSKGNydGNfc3Rh dGUpOwotCX0gZWxzZSB7Ci0JCWNydGNfc3RhdGUgPSBpbnRlbF9jcnRjLT5jb25maWc7Ci0JfQor CWNydGNfc3RhdGUgPSB0b19pbnRlbF9jcnRjX3N0YXRlKAorCQlkcm1fYXRvbWljX2dldF9leGlz dGluZ19jcnRjX3N0YXRlKHN0YXRlLT5zdGF0ZSwgY3J0YykpOwogCiAJLyoKIAkgKiBUaGUgb3Jp Z2luYWwgc3JjL2Rlc3QgY29vcmRpbmF0ZXMgYXJlIHN0b3JlZCBpbiBzdGF0ZS0+YmFzZSwgYnV0 CkBAIC0xODYsOCArMTgwLDggQEAgc3RhdGljIGludCBpbnRlbF9wbGFuZV9hdG9taWNfY2hlY2so c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCX0KIAl9CiAKLQlyZXQgPSBpbnRlbF9wbGFuZS0+ Y2hlY2tfcGxhbmUocGxhbmUsIGludGVsX3N0YXRlKTsKLQlpZiAocmV0IHx8ICFzdGF0ZS0+c3Rh dGUpCisJcmV0ID0gaW50ZWxfcGxhbmUtPmNoZWNrX3BsYW5lKHBsYW5lLCBjcnRjX3N0YXRlLCBp bnRlbF9zdGF0ZSk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldHVybiBpbnRlbF9w bGFuZV9hdG9taWNfY2FsY19jaGFuZ2VzKCZjcnRjX3N0YXRlLT5iYXNlLCBzdGF0ZSk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggNTMwMDBhOThmODY1Li5mMzFlZDUxNzYw ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTEzMzc0LDM2ICsxMzM3 NCwyNSBAQCBza2xfbWF4X3NjYWxlKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZQogCiBzdGF0aWMgaW50CiBpbnRlbF9jaGVj a19wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJICBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJCSAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKIAlzdHJ1 Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOwotCXN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjOwotCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwogCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmJhc2UuZmI7Ci0Jc3RydWN0IGRybV9y ZWN0ICpkZXN0ID0gJnN0YXRlLT5kc3Q7Ci0Jc3RydWN0IGRybV9yZWN0ICpzcmMgPSAmc3RhdGUt PnNyYzsKLQljb25zdCBzdHJ1Y3QgZHJtX3JlY3QgKmNsaXAgPSAmc3RhdGUtPmNsaXA7Ci0JYm9v bCBjYW5fcG9zaXRpb24gPSBmYWxzZTsKLQlpbnQgbWF4X3NjYWxlID0gRFJNX1BMQU5FX0hFTFBF Ul9OT19TQ0FMSU5HOwogCWludCBtaW5fc2NhbGUgPSBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJ Tkc7CisJaW50IG1heF9zY2FsZSA9IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORzsKKwlib29s IGNhbl9wb3NpdGlvbiA9IGZhbHNlOwogCi0JY3J0YyA9IGNydGMgPyBjcnRjIDogcGxhbmUtPmNy dGM7Ci0JaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Ci0JY3J0Y19zdGF0ZSA9IHN0 YXRlLT5iYXNlLnN0YXRlID8KLQkJaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLT5i YXNlLnN0YXRlLCBpbnRlbF9jcnRjKSA6IE5VTEw7Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5n ZW4gPj0gOSkgewotCQkvKiB1c2Ugc2NhbGVyIHdoZW4gY29sb3JrZXkgaXMgbm90IHJlcXVpcmVk ICovCi0JCWlmIChzdGF0ZS0+Y2tleS5mbGFncyA9PSBJOTE1X1NFVF9DT0xPUktFWV9OT05FKSB7 Ci0JCQltaW5fc2NhbGUgPSAxOwotCQkJbWF4X3NjYWxlID0gc2tsX21heF9zY2FsZShpbnRlbF9j cnRjLCBjcnRjX3N0YXRlKTsKLQkJfQorCS8qIHVzZSBzY2FsZXIgd2hlbiBjb2xvcmtleSBpcyBu b3QgcmVxdWlyZWQgKi8KKwlpZiAoSU5URUxfSU5GTyhwbGFuZS0+ZGV2KS0+Z2VuID49IDkgJiYK KwkgICAgc3RhdGUtPmNrZXkuZmxhZ3MgPT0gSTkxNV9TRVRfQ09MT1JLRVlfTk9ORSkgeworCQlt aW5fc2NhbGUgPSAxOworCQltYXhfc2NhbGUgPSBza2xfbWF4X3NjYWxlKHRvX2ludGVsX2NydGMo Y3J0YyksIGNydGNfc3RhdGUpOwogCQljYW5fcG9zaXRpb24gPSB0cnVlOwogCX0KIAotCXJldHVy biBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShwbGFuZSwgY3J0YywgZmIsCi0JCQkJCSAg ICAgc3JjLCBkZXN0LCBjbGlwLAorCXJldHVybiBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0 ZShwbGFuZSwgY3J0YywgZmIsICZzdGF0ZS0+c3JjLAorCQkJCQkgICAgICZzdGF0ZS0+ZHN0LCAm c3RhdGUtPmNsaXAsCiAJCQkJCSAgICAgbWluX3NjYWxlLCBtYXhfc2NhbGUsCiAJCQkJCSAgICAg Y2FuX3Bvc2l0aW9uLCB0cnVlLAogCQkJCQkgICAgICZzdGF0ZS0+dmlzaWJsZSk7CkBAIC0xMzYw MSwyNCArMTM1OTAsMTcgQEAgdm9pZCBpbnRlbF9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGludGVsX3BsYW5lICoKIAogc3RhdGljIGludAog aW50ZWxfY2hlY2tfY3Vyc29yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCQkJIHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqc3RhdGUpCiB7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjID0gc3RhdGUtPmJhc2Uu Y3J0YzsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKKwlzdHJ1Y3QgZHJt X2NydGMgKmNydGMgPSBjcnRjX3N0YXRlLT5iYXNlLmNydGM7CiAJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIgPSBzdGF0ZS0+YmFzZS5mYjsKLQlzdHJ1Y3QgZHJtX3JlY3QgKmRlc3QgPSAmc3Rh dGUtPmRzdDsKLQlzdHJ1Y3QgZHJtX3JlY3QgKnNyYyA9ICZzdGF0ZS0+c3JjOwotCWNvbnN0IHN0 cnVjdCBkcm1fcmVjdCAqY2xpcCA9ICZzdGF0ZS0+Y2xpcDsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKGZiKTsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50 ZWxfY3J0YzsKIAl1bnNpZ25lZCBzdHJpZGU7CiAJaW50IHJldDsKIAotCWNydGMgPSBjcnRjID8g Y3J0YyA6IHBsYW5lLT5jcnRjOwotCWludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwot Ci0JcmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIGNydGMsIGZiLAot CQkJCQkgICAgc3JjLCBkZXN0LCBjbGlwLAorCXJldCA9IGRybV9wbGFuZV9oZWxwZXJfY2hlY2tf dXBkYXRlKHBsYW5lLCBjcnRjLCBmYiwgJnN0YXRlLT5zcmMsCisJCQkJCSAgICAmc3RhdGUtPmRz dCwgJnN0YXRlLT5jbGlwLAogCQkJCQkgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAog CQkJCQkgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAogCQkJCQkgICAgdHJ1ZSwgdHJ1 ZSwgJnN0YXRlLT52aXNpYmxlKTsKQEAgLTEzNjMwLDcgKzEzNjEyLDcgQEAgaW50ZWxfY2hlY2tf Y3Vyc29yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQlyZXR1cm4gMDsKIAogCS8q IENoZWNrIGZvciB3aGljaCBjdXJzb3IgdHlwZXMgd2Ugc3VwcG9ydCAqLwotCWlmICghY3Vyc29y X3NpemVfb2soZGV2LCBzdGF0ZS0+YmFzZS5jcnRjX3csIHN0YXRlLT5iYXNlLmNydGNfaCkpIHsK KwlpZiAoIWN1cnNvcl9zaXplX29rKHBsYW5lLT5kZXYsIHN0YXRlLT5iYXNlLmNydGNfdywgc3Rh dGUtPmJhc2UuY3J0Y19oKSkgewogCQlEUk1fREVCVUcoIkN1cnNvciBkaW1lbnNpb24gJWR4JWQg bm90IHN1cHBvcnRlZFxuIiwKIAkJCSAgc3RhdGUtPmJhc2UuY3J0Y193LCBzdGF0ZS0+YmFzZS5j cnRjX2gpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXgg YWJmOTAyNDUxNDY2Li43OWUxODFiM2Y3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBA IC02MDIsNiArNjAyLDcgQEAgc3RydWN0IGludGVsX3BsYW5lIHsKIAl2b2lkICgqZGlzYWJsZV9w bGFuZSkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMg KmNydGMsIGJvb2wgZm9yY2UpOwogCWludCAoKmNoZWNrX3BsYW5lKShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKKwkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCQkJ ICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSk7CiAJdm9pZCAoKmNvbW1pdF9wbGFu ZSkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQkgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3By aXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwppbmRleCAxOTg4ZjBm MDM2NGIuLjU0NTdjOGRhZmYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfc3ByaXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKQEAg LTc0MywxMSArNzQzLDEyIEBAIGlsa19kaXNhYmxlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGJvb2wgZm9yY2UpCiAKIHN0YXRpYyBpbnQKIGlu dGVsX2NoZWNrX3Nwcml0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCSBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJCSBzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2Owot CXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhzdGF0ZS0+YmFz ZS5jcnRjKTsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOworCXN0cnVjdCBpbnRlbF9jcnRjICpp bnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmlu dGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmUpOwogCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiID0gc3RhdGUtPmJhc2UuZmI7CiAJaW50IGNydGNfeCwgY3J0Y195OwpAQCAtNzYxLDE0 ICs3NjIsOCBAQCBpbnRlbF9jaGVja19zcHJpdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCiAJYm9vbCBjYW5fc2NhbGU7CiAJaW50IHBpeGVsX3NpemU7CiAKLQlpbnRlbF9jcnRjID0g aW50ZWxfY3J0YyA/IGludGVsX2NydGMgOiB0b19pbnRlbF9jcnRjKHBsYW5lLT5jcnRjKTsKLQlj cnRjX3N0YXRlID0gc3RhdGUtPmJhc2Uuc3RhdGUgPwotCQlpbnRlbF9hdG9taWNfZ2V0X2NydGNf c3RhdGUoc3RhdGUtPmJhc2Uuc3RhdGUsIGludGVsX2NydGMpIDogTlVMTDsKLQotCWlmICghZmIp IHsKLQkJc3RhdGUtPnZpc2libGUgPSBmYWxzZTsKKwlpZiAoIWZiKQogCQlyZXR1cm4gMDsKLQl9 CiAKIAkvKiBEb24ndCBtb2RpZnkgYW5vdGhlciBwaXBlJ3MgcGxhbmUgKi8KIAlpZiAoaW50ZWxf cGxhbmUtPnBpcGUgIT0gaW50ZWxfY3J0Yy0+cGlwZSkgewotLSAKMi4xLjAKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==