From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Subject: [PATCH] console/fbcon: Add support for deferred console takeover Date: Mon, 28 May 2018 15:30:42 +0200 Message-ID: <20180528133042.29675-2-hdegoede@redhat.com> References: <20180528133042.29675-1-hdegoede@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by gabe.freedesktop.org (Postfix) with ESMTPS id 054306E2FF for ; Mon, 28 May 2018 13:30:47 +0000 (UTC) In-Reply-To: <20180528133042.29675-1-hdegoede@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Bartlomiej Zolnierkiewicz Cc: Hans de Goede , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org Q3VycmVudGx5IGZiY29uIGNsYWltcyBmYmRldnMgYXMgc29vbiBhcyB0aGV5IGFyZSByZWdpc3Rl cmVkIGFuZCB0YWtlcyBvdmVyCnRoZSBjb25zb2xlIGFzIHNvb24gYXMgdGhlIGZpcnN0IGZiZGV2 IGdldHMgcmVnaXN0ZXJlZC4KClRoaXMgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUgaW4gY2FzZXMg d2hlcmUgYSBzbW9vdGggZ3JhcGhpY2FsIGJvb3R1cCBpcwpkZXNpcmVkLCBpbiBzdWNoIGNhc2Vz IHdlIHR5cGljYWxseSB3YW50IHRoZSBjb250ZW50cyBvZiB0aGUgZnJhbWVidWZmZXIKKHR5cGlj YWxseSBhIHZlbmRvciBsb2dvKSB0byBzdGF5IGluIHBsYWNlIGFzIGlzLgoKVGhlIGN1cnJlbnQg c29sdXRpb24gZm9yIHRoaXMgcHJvYmxlbSAob24gZW1iZWRkZWQgc3lzdGVtcykgaXMgdG8gbm90 CmVuYWJsZSBmYmNvbi4KClRoaXMgY29tbWl0IGFkZHMgYSBuZXcgRlJBTUVCVUZGRVJfQ09OU09M RV9ERUZFUlJFRF9UQUtFT1ZFUiBjb25maWcgb3B0aW9uLAp3aGljaCB3aGVuIGVuYWJsZWQgZGVm ZXJzIGZiY29uIHRha2luZyBvdmVyIHRoZSBjb25zb2xlIGZyb20gdGhlIGR1bW15CmNvbnNvbGUg dW50aWwgdGhlIGZpcnN0IHRleHQgaXMgZGlzcGxheWVkIG9uIHRoZSBjb25zb2xlLiBUb2dldGhl ciB3aXRoIHRoZQoicXVpZXQiIGtlcm5lbCBjb21tYW5kbGluZSBvcHRpb24sIHRoaXMgYWxsb3dz IGZiY29uIHRvIHN0aWxsIGJlIHVzZWQKdG9nZXRoZXIgd2l0aCBhIHNtb290aCBncmFwaGljYWwg Ym9vdHVwLCBoYXZpbmcgaXQgdGFrZSBvdmVyIHRoZSBjb25zb2xlIGFzCnNvb24gYXMgZS5nLiBh biBlcnJvciBtZXNzYWdlIGlzIGxvZ2dlZC4KClNpZ25lZC1vZmYtYnk6IEhhbnMgZGUgR29lZGUg PGhkZWdvZWRlQHJlZGhhdC5jb20+Ci0tLQogZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcg ICAgfCAxMSArKysrKysKIGRyaXZlcnMvdmlkZW8vY29uc29sZS9kdW1teWNvbi5jIHwgNDYgKysr KysrKysrKysrKysrKysrKystLQogZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMgfCA2 NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9jb25zb2xl LmggICAgICAgICAgfCAgNSArKysKIDQgZmlsZXMgY2hhbmdlZCwgMTI0IGluc2VydGlvbnMoKyks IDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25m aWcgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZwppbmRleCA0MTEwYmE3ZDdjYTkuLmU5 MWVkZWY5ODYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKKysr IGIvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKQEAgLTE1MCw2ICsxNTAsMTcgQEAgY29u ZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04KICAgICAgICAgIHN1Y2ggdGhhdCBvdGhl ciB1c2VycyBvZiB0aGUgZnJhbWVidWZmZXIgd2lsbCByZW1haW4gbm9ybWFsbHkKICAgICAgICAg IG9yaWVudGVkLgogCitjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ERUZFUlJFRF9UQUtFT1ZF UgorCWJvb2wgIkZyYW1lYnVmZmVyIENvbnNvbGUgRGVmZXJyZWQgVGFrZW92ZXIiCisJZGVwZW5k cyBvbiBGUkFNRUJVRkZFUl9DT05TT0xFPXkgJiYgRFVNTVlfQ09OU09MRT15CisJaGVscAorCSAg SWYgZW5hYmxlZCB0aGlzIGRlZmVycyB0aGUgZnJhbWVidWZmZXIgY29uc29sZSB0YWtpbmcgb3Zl ciB0aGUKKwkgIGNvbnNvbGUgZnJvbSB0aGUgZHVtbXkgY29uc29sZSB1bnRpbCB0aGUgZmlyc3Qg dGV4dCBpcyBkaXNwbGF5ZWQgb24KKwkgIHRoZSBjb25zb2xlLiBUaGlzIGlzIHVzZWZ1bCBpbiBj b21iaW5hdGlvbiB3aXRoIHRoZSAicXVpZXQiIGtlcm5lbAorCSAgY29tbWFuZGxpbmUgb3B0aW9u IHRvIGtlZXAgdGhlIGZyYW1lYnVmZmVyIGNvbnRlbnRzIGluaXRpYWxseSBwdXQgdXAKKwkgIGJ5 IHRoZSBmaXJtd2FyZSBpbiBwbGFjZSwgcmF0aGVyIHRoZW4gcmVwbGFjaW5nIHRoZSBjb250ZW50 cyB3aXRoIGEKKwkgIGJsYWNrIHNjcmVlbiBhcyBzb29uIGFzIGZiY29uIGxvYWRzLgorCiBjb25m aWcgU1RJX0NPTlNPTEUKICAgICAgICAgYm9vbCAiU1RJIHRleHQgY29uc29sZSIKIAlkZXBlbmRz IG9uIFBBUklTQyAmJiBIQVNfSU9NRU0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29s ZS9kdW1teWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2R1bW15Y29uLmMKaW5kZXggZjJl YWZlMmVkOTgwLi40MDI0MDliOGM1NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29s ZS9kdW1teWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9kdW1teWNvbi5jCkBAIC0y Niw2ICsyNiw0OSBAQAogI2RlZmluZSBEVU1NWV9ST1dTCUNPTkZJR19EVU1NWV9DT05TT0xFX1JP V1MKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVGRVJSRURf VEFLRU9WRVIKKy8qIFRoZXNlIGFyZSBib3RoIHByb3RlY3RlZCBieSB0aGUgY29uc29sZV9sb2Nr ICovCitzdGF0aWMgUkFXX05PVElGSUVSX0hFQUQoZHVtbXljb25fb3V0cHV0X25oKTsKK3N0YXRp YyBib29sIGR1bW15Y29uX3B1dGNfY2FsbGVkOworCit2b2lkIGR1bW15Y29uX3JlZ2lzdGVyX291 dHB1dF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJhd19ub3RpZmll cl9jaGFpbl9yZWdpc3RlcigmZHVtbXljb25fb3V0cHV0X25oLCBuYik7CisKKwlpZiAoZHVtbXlj b25fcHV0Y19jYWxsZWQpCisJCW5iLT5ub3RpZmllcl9jYWxsKG5iLCAwLCBOVUxMKTsKK30KKwor dm9pZCBkdW1teWNvbl91bnJlZ2lzdGVyX291dHB1dF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJf YmxvY2sgKm5iKQoreworCXJhd19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZkdW1teWNvbl9v dXRwdXRfbmgsIG5iKTsKK30KKworc3RhdGljIHZvaWQgZHVtbXljb25fcHV0YyhzdHJ1Y3QgdmNf ZGF0YSAqdmMsIGludCBjLCBpbnQgeXBvcywgaW50IHhwb3MpCit7CisJZHVtbXljb25fcHV0Y19j YWxsZWQgPSB0cnVlOworCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZkdW1teWNvbl9vdXRwdXRf bmgsIDAsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBkdW1teWNvbl9wdXRjcyhzdHJ1Y3QgdmNf ZGF0YSAqdmMsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzLAorCQkJICAgaW50IGNvdW50LCBpbnQg eXBvcywgaW50IHhwb3MpCit7CisJaWYgKCFkdW1teWNvbl9wdXRjX2NhbGxlZCkgeworCQkvKiBJ Z25vcmUgZXJhc2VzICovCisJCWlmIChzWzBdID09IHZjLT52Y192aWRlb19lcmFzZV9jaGFyKQor CQkJcmV0dXJuOworCisJCWR1bW15Y29uX3B1dGNfY2FsbGVkID0gdHJ1ZTsKKwl9CisKKwlyYXdf bm90aWZpZXJfY2FsbF9jaGFpbigmZHVtbXljb25fb3V0cHV0X25oLCAwLCBOVUxMKTsKK30KKyNl bHNlCitzdGF0aWMgdm9pZCBkdW1teWNvbl9wdXRjKHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGMs IGludCB5cG9zLCBpbnQgeHBvcykgeyB9CitzdGF0aWMgdm9pZCBkdW1teWNvbl9wdXRjcyhzdHJ1 Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzLAorCQkJICAgaW50IGNvdW50 LCBpbnQgeXBvcywgaW50IHhwb3MpIHsgfQorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBjaGFyICpk dW1teWNvbl9zdGFydHVwKHZvaWQpCiB7CiAgICAgcmV0dXJuICJkdW1teSBkZXZpY2UiOwpAQCAt NDQsOSArODcsNiBAQCBzdGF0aWMgdm9pZCBkdW1teWNvbl9pbml0KHN0cnVjdCB2Y19kYXRhICp2 YywgaW50IGluaXQpCiBzdGF0aWMgdm9pZCBkdW1teWNvbl9kZWluaXQoc3RydWN0IHZjX2RhdGEg KnZjKSB7IH0KIHN0YXRpYyB2b2lkIGR1bW15Y29uX2NsZWFyKHN0cnVjdCB2Y19kYXRhICp2Yywg aW50IHN5LCBpbnQgc3gsIGludCBoZWlnaHQsCiAJCQkgICBpbnQgd2lkdGgpIHsgfQotc3RhdGlj IHZvaWQgZHVtbXljb25fcHV0YyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBjLCBpbnQgeXBvcywg aW50IHhwb3MpIHsgfQotc3RhdGljIHZvaWQgZHVtbXljb25fcHV0Y3Moc3RydWN0IHZjX2RhdGEg KnZjLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcywKLQkJCSAgIGludCBjb3VudCwgaW50IHlwb3Ms IGludCB4cG9zKSB7IH0KIHN0YXRpYyB2b2lkIGR1bW15Y29uX2N1cnNvcihzdHJ1Y3QgdmNfZGF0 YSAqdmMsIGludCBtb2RlKSB7IH0KIAogc3RhdGljIGJvb2wgZHVtbXljb25fc2Nyb2xsKHN0cnVj dCB2Y19kYXRhICp2YywgdW5zaWduZWQgaW50IHRvcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlk ZW8vZmJkZXYvY29yZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMK aW5kZXggM2UzMzBlMGY1NmVkLi5mNThjOTI1NzFjN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlk ZW8vZmJkZXYvY29yZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNv bi5jCkBAIC0xMjksNiArMTI5LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmYmNvbl9tYXBfb3Zl cnJpZGUodm9pZCkKIH0KICNlbmRpZiAvKiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRF Q1RfUFJJTUFSWSAqLwogCisjaWZkZWYgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVGRVJS RURfVEFLRU9WRVIKK3N0YXRpYyBib29sIGRlZmVycmVkX3Rha2VvdmVyID0gdHJ1ZTsKKyNlbHNl CisjZGVmaW5lIGRlZmVycmVkX3Rha2VvdmVyIGZhbHNlCisjZW5kaWYKKwogLyogZm9udCBkYXRh ICovCiBzdGF0aWMgY2hhciBmb250bmFtZVs0MF07CiAKQEAgLTQ5OSw2ICs1MDUsMTIgQEAgc3Rh dGljIGludCBfX2luaXQgZmJfY29uc29sZV9zZXR1cChjaGFyICp0aGlzX29wdCkKIAkJCQltYXJn aW5fY29sb3IgPSBzaW1wbGVfc3RydG91bChvcHRpb25zLCAmb3B0aW9ucywgMCk7CiAJCQljb250 aW51ZTsKIAkJfQorI2lmZGVmIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFRkVSUkVEX1RB S0VPVkVSCisJCWlmICghc3RyY21wKG9wdGlvbnMsICJub2RlZmVyIikpIHsKKwkJCWRlZmVycmVk X3Rha2VvdmVyID0gZmFsc2U7CisJCQljb250aW51ZTsKKwkJfQorI2VuZGlmCiAJfQogCXJldHVy biAxOwogfQpAQCAtMzA5Myw2ICszMTA1LDkgQEAgc3RhdGljIGludCBmYmNvbl9mYl91bnJlZ2lz dGVyZWQoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJaW50IGksIGlkeDsKIAorCWlmIChkZWZl cnJlZF90YWtlb3ZlcikKKwkJcmV0dXJuIDA7CisKIAlpZHggPSBpbmZvLT5ub2RlOwogCWZvciAo aSA9IGZpcnN0X2ZiX3ZjOyBpIDw9IGxhc3RfZmJfdmM7IGkrKykgewogCQlpZiAoY29uMmZiX21h cFtpXSA9PSBpZHgpCkBAIC0zMTMwLDYgKzMxNDUsMTQgQEAgc3RhdGljIGludCBmYmNvbl9mYl91 bnJlZ2lzdGVyZWQoc3RydWN0IGZiX2luZm8gKmluZm8pCiBzdGF0aWMgdm9pZCBmYmNvbl9yZW1h cF9hbGwoaW50IGlkeCkKIHsKIAlpbnQgaTsKKworCWlmIChkZWZlcnJlZF90YWtlb3Zlcikgewor CQlmb3IgKGkgPSBmaXJzdF9mYl92YzsgaSA8PSBsYXN0X2ZiX3ZjOyBpKyspCisJCQljb24yZmJf bWFwX2Jvb3RbaV0gPSBpZHg7CisJCWZiY29uX21hcF9vdmVycmlkZSgpOworCQlyZXR1cm47CisJ fQorCiAJZm9yIChpID0gZmlyc3RfZmJfdmM7IGkgPD0gbGFzdF9mYl92YzsgaSsrKQogCQlzZXRf Y29uMmZiX21hcChpLCBpZHgsIDApOwogCkBAIC0zMTc5LDYgKzMyMDIsMTEgQEAgc3RhdGljIGlu dCBmYmNvbl9mYl9yZWdpc3RlcmVkKHN0cnVjdCBmYl9pbmZvICppbmZvKQogCWlkeCA9IGluZm8t Pm5vZGU7CiAJZmJjb25fc2VsZWN0X3ByaW1hcnkoaW5mbyk7CiAKKwlpZiAoZGVmZXJyZWRfdGFr ZW92ZXIpIHsKKwkJcHJfaW5mbygiZmJjb246IERlZmVycmluZyBjb25zb2xlIHRha2Utb3Zlclxu Iik7CisJCXJldHVybiAwOworCX0KKwogCWlmIChpbmZvX2lkeCA9PSAtMSkgewogCQlmb3IgKGkg PSBmaXJzdF9mYl92YzsgaSA8PSBsYXN0X2ZiX3ZjOyBpKyspIHsKIAkJCWlmIChjb24yZmJfbWFw X2Jvb3RbaV0gPT0gaWR4KSB7CkBAIC0zNTU0LDggKzM1ODIsNDUgQEAgc3RhdGljIGludCBmYmNv bl9pbml0X2RldmljZSh2b2lkKQogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0ZSQU1F QlVGRkVSX0NPTlNPTEVfREVGRVJSRURfVEFLRU9WRVIKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJf YmxvY2sgZmJjb25fb3V0cHV0X25iOworCisvKiBjYWxsZWQgd2l0aCBjb25zb2xlX2xvY2sgaGVs ZCAqLworc3RhdGljIGludCBmYmNvbl9vdXRwdXRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Js b2NrICpuYiwKKwkJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCit7CisJaW50 IGk7CisKKwlwcl9pbmZvKCJmYmNvbjogVGFraW5nIG92ZXIgY29uc29sZVxuIik7CisKKwlkdW1t eWNvbl91bnJlZ2lzdGVyX291dHB1dF9ub3RpZmllcigmZmJjb25fb3V0cHV0X25iKTsKKwlkZWZl cnJlZF90YWtlb3ZlciA9IGZhbHNlOworCWxvZ29fc2hvd24gPSBGQkNPTl9MT0dPX0RPTlRTSE9X OworCisJZm9yIChpID0gMDsgaSA8IEZCX01BWDsgaSsrKSB7CisJCWlmIChyZWdpc3RlcmVkX2Zi W2ldKQorCQkJZmJjb25fZmJfcmVnaXN0ZXJlZChyZWdpc3RlcmVkX2ZiW2ldKTsKKwl9CisKKwly ZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgdm9pZCBmYmNvbl9yZWdpc3Rlcl9vdXRwdXRf bm90aWZpZXIodm9pZCkKK3sKKwlmYmNvbl9vdXRwdXRfbmIubm90aWZpZXJfY2FsbCA9IGZiY29u X291dHB1dF9ub3RpZmllcjsKKwlkdW1teWNvbl9yZWdpc3Rlcl9vdXRwdXRfbm90aWZpZXIoJmZi Y29uX291dHB1dF9uYik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGZiY29uX3JlZ2lz dGVyX291dHB1dF9ub3RpZmllcih2b2lkKSB7fQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIGZiY29u X3N0YXJ0KHZvaWQpCiB7CisJaWYgKGRlZmVycmVkX3Rha2VvdmVyKSB7CisJCWZiY29uX3JlZ2lz dGVyX291dHB1dF9ub3RpZmllcigpOworCQlyZXR1cm47CisJfQorCiAJaWYgKG51bV9yZWdpc3Rl cmVkX2ZiKSB7CiAJCWludCBpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUu aCBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCmluZGV4IGRmZDZiMGU5Nzg1NS4uZjU5ZjNkYmNh NjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xp bnV4L2NvbnNvbGUuaApAQCAtMjEsNiArMjEsNyBAQCBzdHJ1Y3QgY29uc29sZV9mb250X29wOwog c3RydWN0IGNvbnNvbGVfZm9udDsKIHN0cnVjdCBtb2R1bGU7CiBzdHJ1Y3QgdHR5X3N0cnVjdDsK K3N0cnVjdCBub3RpZmllcl9ibG9jazsKIAogLyoKICAqIHRoaXMgaXMgd2hhdCB0aGUgdGVybWlu YWwgYW5zd2VycyB0byBhIEVTQy1aIG9yIGNzaTBjIHF1ZXJ5LgpAQCAtMjIwLDQgKzIyMSw4IEBA IHN0YXRpYyBpbmxpbmUgYm9vbCB2Z2Fjb25fdGV4dF9mb3JjZSh2b2lkKSB7IHJldHVybiBmYWxz ZTsgfQogCiBleHRlcm4gdm9pZCBjb25zb2xlX2luaXQodm9pZCk7CiAKKy8qIEZvciBkZWZlcnJl ZCBjb25zb2xlIHRha2VvdmVyICovCit2b2lkIGR1bW15Y29uX3JlZ2lzdGVyX291dHB1dF9ub3Rp ZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK3ZvaWQgZHVtbXljb25fdW5yZWdpc3Rl cl9vdXRwdXRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CisKICNlbmRpZiAv KiBfTElOVVhfQ09OU09MRV9IICovCi0tIAoyLjE3LjAKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=