From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH v3 02/12] drm/i915: Read PSR caps/intermediate freqs/etc. only once on eDP Date: Fri, 29 Jul 2016 16:52:39 +0300 Message-ID: <1469800359-7087-1-git-send-email-ville.syrjala@linux.intel.com> References: <1469717448-4297-3-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id C07936E9C6 for ; Fri, 29 Jul 2016 13:52:42 +0000 (UTC) In-Reply-To: <1469717448-4297-3-git-send-email-ville.syrjala@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 RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCkN1 cnJlbnRseSB3ZSByZS1yZWFkIGEgYnVuY2ggb2Ygc3RhdGljIGVEUCBwYW5lbCBjYXBzIGZyb20g dGhlIERQQ0QKb3ZlciBhbmQgb3ZlciBhZ2Fpbi4gTGV0J3MgZG8gaXQgb25seSBvbmNlIHRvIHNh dmUgc29tZSB0aW1lIGFuZCBlZmZvcnQuCgp2MjogTWFrZSB0aGluZyBsZXNzIGNvbmZ1c2luZyB3 aXRoIGludGVsX2VkcF9pbml0X2RwY2QoKSAoQ2hyaXMpCiAgICBNb3ZlIG5vX2F1eF9oYW5kc2hh a2Ugc2V0dXAgaW4gdGhlcmUgYXMgd2VsbAp2MzogTW92ZSB0cHMzL3JhdGUgcHJpbnRvdXQgdG8g aW50ZWxfZHBfbG9uZ19wdWxzZSgpIHNvIHRoYXQKICAgIHdlJ2xsIHN0aWxsIGdldCB0aGVtIG9u IGVEUCBhcyB3ZWxsCgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ ClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRl bC5jb20+ClJldmlld2VkLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51 az4gKHYxKQotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgfCAxNjUgKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDg5IGlu c2VydGlvbnMoKyksIDc2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4 IDFmZTliYjc0NWRlNS4uMGQ4YzNjM2ZjY2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAg LTMzOTUsMjAgKzMzOTUsOTQgQEAgaW50ZWxfZHBfbGlua19kb3duKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCiB9CiAKIHN0YXRpYyBib29sCi1pbnRlbF9kcF9nZXRfZHBjZChzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKQoraW50ZWxfZHBfcmVhZF9kcGNkKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHApCiB7Ci0Jc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19k aWdfcG9ydChpbnRlbF9kcCk7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRpZ19wb3J0LT5i YXNlLmJhc2UuZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGV2KTsKLQogCWlmIChkcm1fZHBfZHBjZF9yZWFkKCZpbnRlbF9kcC0+YXV4LCAweDAwMCwg aW50ZWxfZHAtPmRwY2QsCiAJCQkgICAgIHNpemVvZihpbnRlbF9kcC0+ZHBjZCkpIDwgMCkKIAkJ cmV0dXJuIGZhbHNlOyAvKiBhdXggdHJhbnNmZXIgZmFpbGVkICovCiAKIAlEUk1fREVCVUdfS01T KCJEUENEOiAlKnBoXG4iLCAoaW50KSBzaXplb2YoaW50ZWxfZHAtPmRwY2QpLCBpbnRlbF9kcC0+ ZHBjZCk7CiAKLQlpZiAoaW50ZWxfZHAtPmRwY2RbRFBfRFBDRF9SRVZdID09IDApCi0JCXJldHVy biBmYWxzZTsgLyogRFBDRCBub3QgcHJlc2VudCAqLworCXJldHVybiBpbnRlbF9kcC0+ZHBjZFtE UF9EUENEX1JFVl0gIT0gMDsKK30KKworc3RhdGljIGJvb2wKK2ludGVsX2VkcF9pbml0X2RwY2Qo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPQorCQl0b19pOTE1KGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZS5iYXNl LmRldik7CisKKwkvKiB0aGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBvbmx5IG9u Y2UgKi8KKwlXQVJOX09OKGludGVsX2RwLT5kcGNkW0RQX0RQQ0RfUkVWXSAhPSAwKTsKKworCWlm ICghaW50ZWxfZHBfcmVhZF9kcGNkKGludGVsX2RwKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYg KGludGVsX2RwLT5kcGNkW0RQX0RQQ0RfUkVWXSA+PSAweDExKQorCQlkZXZfcHJpdi0+bm9fYXV4 X2hhbmRzaGFrZSA9IGludGVsX2RwLT5kcGNkW0RQX01BWF9ET1dOU1BSRUFEXSAmCisJCQlEUF9O T19BVVhfSEFORFNIQUtFX0xJTktfVFJBSU5JTkc7CisKKwkvKiBDaGVjayBpZiB0aGUgcGFuZWwg c3VwcG9ydHMgUFNSICovCisJZHJtX2RwX2RwY2RfcmVhZCgmaW50ZWxfZHAtPmF1eCwgRFBfUFNS X1NVUFBPUlQsCisJCQkgaW50ZWxfZHAtPnBzcl9kcGNkLAorCQkJIHNpemVvZihpbnRlbF9kcC0+ cHNyX2RwY2QpKTsKKwlpZiAoaW50ZWxfZHAtPnBzcl9kcGNkWzBdICYgRFBfUFNSX0lTX1NVUFBP UlRFRCkgeworCQlkZXZfcHJpdi0+cHNyLnNpbmtfc3VwcG9ydCA9IHRydWU7CisJCURSTV9ERUJV R19LTVMoIkRldGVjdGVkIEVEUCBQU1IgUGFuZWwuXG4iKTsKKwl9CisKKwlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA5ICYmCisJICAgIChpbnRlbF9kcC0+cHNyX2RwY2RbMF0gJiBEUF9QU1Iy X0lTX1NVUFBPUlRFRCkpIHsKKwkJdWludDhfdCBmcmFtZV9zeW5jX2NhcDsKKworCQlkZXZfcHJp di0+cHNyLnNpbmtfc3VwcG9ydCA9IHRydWU7CisJCWRybV9kcF9kcGNkX3JlYWQoJmludGVsX2Rw LT5hdXgsCisJCQkJIERQX1NJTktfREVWSUNFX0FVWF9GUkFNRV9TWU5DX0NBUCwKKwkJCQkgJmZy YW1lX3N5bmNfY2FwLCAxKTsKKwkJZGV2X3ByaXYtPnBzci5hdXhfZnJhbWVfc3luYyA9IGZyYW1l X3N5bmNfY2FwID8gdHJ1ZSA6IGZhbHNlOworCQkvKiBQU1IyIG5lZWRzIGZyYW1lIHN5bmMgYXMg d2VsbCAqLworCQlkZXZfcHJpdi0+cHNyLnBzcjJfc3VwcG9ydCA9IGRldl9wcml2LT5wc3IuYXV4 X2ZyYW1lX3N5bmM7CisJCURSTV9ERUJVR19LTVMoIlBTUjIgJXMgb24gc2luayIsCisJCQkgICAg ICBkZXZfcHJpdi0+cHNyLnBzcjJfc3VwcG9ydCA/ICJzdXBwb3J0ZWQiIDogIm5vdCBzdXBwb3J0 ZWQiKTsKKwl9CisKKwkvKiBSZWFkIHRoZSBlRFAgRGlzcGxheSBjb250cm9sIGNhcGFiaWxpdGll cyByZWdpc3RlcnMgKi8KKwlpZiAoKGludGVsX2RwLT5kcGNkW0RQX0VEUF9DT05GSUdVUkFUSU9O X0NBUF0gJiBEUF9EUENEX0RJU1BMQVlfQ09OVFJPTF9DQVBBQkxFKSAmJgorCSAgICBkcm1fZHBf ZHBjZF9yZWFkKCZpbnRlbF9kcC0+YXV4LCBEUF9FRFBfRFBDRF9SRVYsCisJCQkgICAgIGludGVs X2RwLT5lZHBfZHBjZCwgc2l6ZW9mKGludGVsX2RwLT5lZHBfZHBjZCkgPT0KKwkJCSAgICAgc2l6 ZW9mKGludGVsX2RwLT5lZHBfZHBjZCkpKQorCQlEUk1fREVCVUdfS01TKCJFRFAgRFBDRCA6ICUq cGhcbiIsIChpbnQpIHNpemVvZihpbnRlbF9kcC0+ZWRwX2RwY2QpLAorCQkJICAgICAgaW50ZWxf ZHAtPmVkcF9kcGNkKTsKKworCS8qIEludGVybWVkaWF0ZSBmcmVxdWVuY3kgc3VwcG9ydCAqLwor CWlmIChpbnRlbF9kcC0+ZWRwX2RwY2RbMF0gPj0gMHgwMykgeyAvKiBlRHAgdjEuNCBvciBoaWdo ZXIgKi8KKwkJX19sZTE2IHNpbmtfcmF0ZXNbRFBfTUFYX1NVUFBPUlRFRF9SQVRFU107CisJCWlu dCBpOworCisJCWRybV9kcF9kcGNkX3JlYWQoJmludGVsX2RwLT5hdXgsIERQX1NVUFBPUlRFRF9M SU5LX1JBVEVTLAorCQkJCXNpbmtfcmF0ZXMsIHNpemVvZihzaW5rX3JhdGVzKSk7CisKKwkJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2lua19yYXRlcyk7IGkrKykgeworCQkJaW50IHZhbCA9 IGxlMTZfdG9fY3B1KHNpbmtfcmF0ZXNbaV0pOworCisJCQlpZiAodmFsID09IDApCisJCQkJYnJl YWs7CisKKwkJCS8qIFZhbHVlIHJlYWQgaXMgaW4ga0h6IHdoaWxlIGRybSBjbG9jayBpcyBzYXZl ZCBpbiBkZWNhLWtIeiAqLworCQkJaW50ZWxfZHAtPnNpbmtfcmF0ZXNbaV0gPSAodmFsICogMjAw KSAvIDEwOworCQl9CisJCWludGVsX2RwLT5udW1fc2lua19yYXRlcyA9IGk7CisJfQorCisJcmV0 dXJuIHRydWU7Cit9CisKKworc3RhdGljIGJvb2wKK2ludGVsX2RwX2dldF9kcGNkKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApCit7CisJaWYgKCFpbnRlbF9kcF9yZWFkX2RwY2QoaW50ZWxfZHAp KQorCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoZHJtX2RwX2RwY2RfcmVhZCgmaW50ZWxfZHAtPmF1 eCwgRFBfU0lOS19DT1VOVCwKIAkJCSAgICAgJmludGVsX2RwLT5zaW5rX2NvdW50LCAxKSA8IDAp CkBAIC0zNDMxLDY4ICszNTA1LDYgQEAgaW50ZWxfZHBfZ2V0X2RwY2Qoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKIAlpZiAoIWlzX2VkcChpbnRlbF9kcCkgJiYgIWludGVsX2RwLT5zaW5rX2Nv dW50KQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKiBDaGVjayBpZiB0aGUgcGFuZWwgc3VwcG9ydHMg UFNSICovCi0JbWVtc2V0KGludGVsX2RwLT5wc3JfZHBjZCwgMCwgc2l6ZW9mKGludGVsX2RwLT5w c3JfZHBjZCkpOwotCWlmIChpc19lZHAoaW50ZWxfZHApKSB7Ci0JCWRybV9kcF9kcGNkX3JlYWQo JmludGVsX2RwLT5hdXgsIERQX1BTUl9TVVBQT1JULAotCQkJCSBpbnRlbF9kcC0+cHNyX2RwY2Qs Ci0JCQkJIHNpemVvZihpbnRlbF9kcC0+cHNyX2RwY2QpKTsKLQkJaWYgKGludGVsX2RwLT5wc3Jf ZHBjZFswXSAmIERQX1BTUl9JU19TVVBQT1JURUQpIHsKLQkJCWRldl9wcml2LT5wc3Iuc2lua19z dXBwb3J0ID0gdHJ1ZTsKLQkJCURSTV9ERUJVR19LTVMoIkRldGVjdGVkIEVEUCBQU1IgUGFuZWwu XG4iKTsKLQkJfQotCi0JCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA5ICYmCi0JCQkoaW50 ZWxfZHAtPnBzcl9kcGNkWzBdICYgRFBfUFNSMl9JU19TVVBQT1JURUQpKSB7Ci0JCQl1aW50OF90 IGZyYW1lX3N5bmNfY2FwOwotCi0JCQlkZXZfcHJpdi0+cHNyLnNpbmtfc3VwcG9ydCA9IHRydWU7 Ci0JCQlkcm1fZHBfZHBjZF9yZWFkKCZpbnRlbF9kcC0+YXV4LAotCQkJCQkgRFBfU0lOS19ERVZJ Q0VfQVVYX0ZSQU1FX1NZTkNfQ0FQLAotCQkJCQkgJmZyYW1lX3N5bmNfY2FwLCAxKTsKLQkJCWRl dl9wcml2LT5wc3IuYXV4X2ZyYW1lX3N5bmMgPSBmcmFtZV9zeW5jX2NhcCA/IHRydWUgOiBmYWxz ZTsKLQkJCS8qIFBTUjIgbmVlZHMgZnJhbWUgc3luYyBhcyB3ZWxsICovCi0JCQlkZXZfcHJpdi0+ cHNyLnBzcjJfc3VwcG9ydCA9IGRldl9wcml2LT5wc3IuYXV4X2ZyYW1lX3N5bmM7Ci0JCQlEUk1f REVCVUdfS01TKCJQU1IyICVzIG9uIHNpbmsiLAotCQkJCWRldl9wcml2LT5wc3IucHNyMl9zdXBw b3J0ID8gInN1cHBvcnRlZCIgOiAibm90IHN1cHBvcnRlZCIpOwotCQl9Ci0KLQkJLyogUmVhZCB0 aGUgZURQIERpc3BsYXkgY29udHJvbCBjYXBhYmlsaXRpZXMgcmVnaXN0ZXJzICovCi0JCW1lbXNl dChpbnRlbF9kcC0+ZWRwX2RwY2QsIDAsIHNpemVvZihpbnRlbF9kcC0+ZWRwX2RwY2QpKTsKLQkJ aWYgKChpbnRlbF9kcC0+ZHBjZFtEUF9FRFBfQ09ORklHVVJBVElPTl9DQVBdICYgRFBfRFBDRF9E SVNQTEFZX0NPTlRST0xfQ0FQQUJMRSkgJiYKLQkJCQkoZHJtX2RwX2RwY2RfcmVhZCgmaW50ZWxf ZHAtPmF1eCwgRFBfRURQX0RQQ0RfUkVWLAotCQkJCQkJaW50ZWxfZHAtPmVkcF9kcGNkLCBzaXpl b2YoaW50ZWxfZHAtPmVkcF9kcGNkKSkgPT0KLQkJCQkJCQkJc2l6ZW9mKGludGVsX2RwLT5lZHBf ZHBjZCkpKQotCQkJRFJNX0RFQlVHX0tNUygiRURQIERQQ0QgOiAlKnBoXG4iLCAoaW50KSBzaXpl b2YoaW50ZWxfZHAtPmVkcF9kcGNkKSwKLQkJCQkJaW50ZWxfZHAtPmVkcF9kcGNkKTsKLQl9Ci0K LQlEUk1fREVCVUdfS01TKCJEaXNwbGF5IFBvcnQgVFBTMyBzdXBwb3J0OiBzb3VyY2UgJXMsIHNp bmsgJXNcbiIsCi0JCSAgICAgIHllc25vKGludGVsX2RwX3NvdXJjZV9zdXBwb3J0c19oYnIyKGlu dGVsX2RwKSksCi0JCSAgICAgIHllc25vKGRybV9kcF90cHMzX3N1cHBvcnRlZChpbnRlbF9kcC0+ ZHBjZCkpKTsKLQotCS8qIEludGVybWVkaWF0ZSBmcmVxdWVuY3kgc3VwcG9ydCAqLwotCWlmIChp c19lZHAoaW50ZWxfZHApICYmIChpbnRlbF9kcC0+ZWRwX2RwY2RbMF0gPj0gMHgwMykpIHsgLyog ZURwIHYxLjQgb3IgaGlnaGVyICovCi0JCV9fbGUxNiBzaW5rX3JhdGVzW0RQX01BWF9TVVBQT1JU RURfUkFURVNdOwotCQlpbnQgaTsKLQotCQlkcm1fZHBfZHBjZF9yZWFkKCZpbnRlbF9kcC0+YXV4 LCBEUF9TVVBQT1JURURfTElOS19SQVRFUywKLQkJCQlzaW5rX3JhdGVzLCBzaXplb2Yoc2lua19y YXRlcykpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNpbmtfcmF0ZXMpOyBpKysp IHsKLQkJCWludCB2YWwgPSBsZTE2X3RvX2NwdShzaW5rX3JhdGVzW2ldKTsKLQotCQkJaWYgKHZh bCA9PSAwKQotCQkJCWJyZWFrOwotCi0JCQkvKiBWYWx1ZSByZWFkIGlzIGluIGtIeiB3aGlsZSBk cm0gY2xvY2sgaXMgc2F2ZWQgaW4gZGVjYS1rSHogKi8KLQkJCWludGVsX2RwLT5zaW5rX3JhdGVz W2ldID0gKHZhbCAqIDIwMCkgLyAxMDsKLQkJfQotCQlpbnRlbF9kcC0+bnVtX3NpbmtfcmF0ZXMg PSBpOwotCX0KLQotCWludGVsX2RwX3ByaW50X3JhdGVzKGludGVsX2RwKTsKLQogCWlmICghKGlu dGVsX2RwLT5kcGNkW0RQX0RPV05TVFJFQU1QT1JUX1BSRVNFTlRdICYKIAkgICAgICBEUF9EV05f U1RSTV9QT1JUX1BSRVNFTlQpKQogCQlyZXR1cm4gdHJ1ZTsgLyogbmF0aXZlIERQIHNpbmsgKi8K QEAgLTQyMzUsNiArNDI0NywxMiBAQCBpbnRlbF9kcF9sb25nX3B1bHNlKHN0cnVjdCBpbnRlbF9j b25uZWN0b3IgKmludGVsX2Nvbm5lY3RvcikKIAlpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSAhPSBJ TlRFTF9PVVRQVVRfRURQKQogCQlpbnRlbF9lbmNvZGVyLT50eXBlID0gSU5URUxfT1VUUFVUX0RQ OwogCisJRFJNX0RFQlVHX0tNUygiRGlzcGxheSBQb3J0IFRQUzMgc3VwcG9ydDogc291cmNlICVz LCBzaW5rICVzXG4iLAorCQkgICAgICB5ZXNubyhpbnRlbF9kcF9zb3VyY2Vfc3VwcG9ydHNfaGJy MihpbnRlbF9kcCkpLAorCQkgICAgICB5ZXNubyhkcm1fZHBfdHBzM19zdXBwb3J0ZWQoaW50ZWxf ZHAtPmRwY2QpKSk7CisKKwlpbnRlbF9kcF9wcmludF9yYXRlcyhpbnRlbF9kcCk7CisKIAlpbnRl bF9kcF9wcm9iZV9vdWkoaW50ZWxfZHApOwogCiAJcmV0ID0gaW50ZWxfZHBfcHJvYmVfbXN0KGlu dGVsX2RwKTsKQEAgLTUzOTYsMTQgKzU0MTQsOSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9lZHBfaW5p dF9jb25uZWN0b3Ioc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKIAlwcHNfdW5sb2NrKGludGVs X2RwKTsKIAogCS8qIENhY2hlIERQQ0QgYW5kIEVESUQgZm9yIGVkcC4gKi8KLQloYXNfZHBjZCA9 IGludGVsX2RwX2dldF9kcGNkKGludGVsX2RwKTsKKwloYXNfZHBjZCA9IGludGVsX2VkcF9pbml0 X2RwY2QoaW50ZWxfZHApOwogCi0JaWYgKGhhc19kcGNkKSB7Ci0JCWlmIChpbnRlbF9kcC0+ZHBj ZFtEUF9EUENEX1JFVl0gPj0gMHgxMSkKLQkJCWRldl9wcml2LT5ub19hdXhfaGFuZHNoYWtlID0K LQkJCQlpbnRlbF9kcC0+ZHBjZFtEUF9NQVhfRE9XTlNQUkVBRF0gJgotCQkJCURQX05PX0FVWF9I QU5EU0hBS0VfTElOS19UUkFJTklORzsKLQl9IGVsc2UgeworCWlmICghaGFzX2RwY2QpIHsKIAkJ LyogaWYgdGhpcyBmYWlscywgcHJlc3VtZSB0aGUgZGV2aWNlIGlzIGEgZ2hvc3QgKi8KIAkJRFJN X0lORk8oImZhaWxlZCB0byByZXRyaWV2ZSBsaW5rIGluZm8sIGRpc2FibGluZyBlRFBcbiIpOwog CQlnb3RvIG91dF92ZGRfb2ZmOwotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=