From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH 07/11] drm/fbdevdrm: Add DRM <-> fbdev pixel-format conversion Date: Tue, 26 Mar 2019 10:17:40 +0100 Message-ID: <20190326091744.11542-8-tzimmermann@suse.de> References: <20190326091744.11542-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 604A96E7B5 for ; Tue, 26 Mar 2019 09:17:57 +0000 (UTC) In-Reply-To: <20190326091744.11542-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: airlied@linux.ie, daniel@ffwll.ch, b.zolnierkie@samsung.com Cc: linux-fbdev@vger.kernel.org, Thomas Zimmermann , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org U2lnbmVkLW9mZi1ieTogVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Ci0t LQogZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIGRy aXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9mb3JtYXQuYyB8IDQ0MSArKysrKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9mb3JtYXQuaCB8 ICAyNiArKwogMyBmaWxlcyBjaGFuZ2VkLCA0NjggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9mb3JtYXQuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9mb3JtYXQuaAoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9mYmRldmRybS9NYWtlZmlsZQppbmRleCBiOGZhYjlkNTJmYWEuLmFlZjYwZDBmNDg4 OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2ZiZGV2ZHJtL01ha2VmaWxlCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9mYmRldmRybS9NYWtlZmlsZQpAQCAtMiw2ICsyLDcgQEAgY2NmbGFncy15 ID0gLUlpbmNsdWRlL2RybQogZmJkZXZkcm0teSA6PSBmYmRldmRybV9iby5vIFwKIAkgICAgICBm YmRldmRybV9kZXZpY2UubyBcCiAJICAgICAgZmJkZXZkcm1fZHJ2Lm8gXAorCSAgICAgIGZiZGV2 ZHJtX2Zvcm1hdC5vIFwKIAkgICAgICBmYmRldmRybV9tb2Rlc2V0Lm8gXAogCSAgICAgIGZiZGV2 ZHJtX3R0bS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRy bV9mb3JtYXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9mb3JtYXQuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjIwOGY3YzYwZTUyNQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9mb3JtYXQu YwpAQCAtMCwwICsxLDQ0MSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b3ItbGF0ZXIKKyAqCisgKiBPbmUgcHVycG9zZSBvZiB0aGlzIGRyaXZlciBpcyB0byBhbGxvdyBm b3IgZWFzeSBjb252ZXJzaW9uIG9mIGZyYW1lYnVmZmVyCisgKiBkcml2ZXJzIHRvIERSTS4gQXMg YSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdQTCwgeW91IGFyZSBhbGxvd2VkIHRvCisg KiByZWxpY2Vuc2UgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIGxpY2Vuc2Ugb2YgeW91 ciBjaG9pY2UgaWYgeW91J3JlCisgKiBwb3J0aW5nIGEgZnJhbWVidWZmZXIgZHJpdmVyLiBJbiBv cmRlciB0byBkbyBzbywgdXBkYXRlIHRoZSBTUERYIGxpY2Vuc2UKKyAqIGlkZW50aWZpZXIgdG8g dGhlIG5ldyBsaWNlbnNlIGFuZCByZW1vdmUgdGhpcyBleGNlcHRpb24uCisgKgorICogSWYgeW91 IGFkZCBjb2RlIHRvIHRoaXMgZmlsZSwgcGxlYXNlIGVuc3VyZSB0aGF0IGl0J3MgY29tcGF0aWJs ZSB3aXRoIHRoZQorICogc3RhdGVkIGV4Y2VwdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZmJkZXZk cm1fZm9ybWF0LmgiCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4 L2ZiLmg+CisKKyNpZiBkZWZpbmVkIF9fQklHX0VORElBTgorI2RlZmluZSBIT1NUX0ZVTkMoX2Z1 bmMpIFwKKwlfZnVuYyAjIyBfYmUKKyNlbGlmIGRlZmluZWQgX19MSVRUTEVfRU5ESUFOCisjZGVm aW5lIEhPU1RfRlVOQyhfZnVuYykgXAorCV9mdW5jICMjIF9sZQorI2Vsc2UKKyNlcnJvciAiVW5z dXBwb3J0ZWQgZW5kaWFuZXNzIgorI2VuZGlmCisKK3N0YXRpYyBib29sIGlzX2M4KGNvbnN0IHN0 cnVjdCBmYl9pbmZvKiBmYl9pbmZvKQoreworCXJldHVybiBmYl9pbmZvLT52YXIuYml0c19wZXJf cGl4ZWwgPT0gODsKK30KKworc3RhdGljIGJvb2wgaXNfcmdiNTY1X2JlKGNvbnN0IHN0cnVjdCBm Yl9pbmZvKiBmYl9pbmZvKQoreworCXJldHVybiAoZmJfaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVs ID09IDE2KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQgPT0gMCkgJiYKKwkg ICAgICAgKGZiX2luZm8tPnZhci5yZWQubGVuZ3RoID09IDUpICYmCisJICAgICAgIChmYl9pbmZv LT52YXIuZ3JlZW4ub2Zmc2V0ID09IDUpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIuZ3JlZW4u bGVuZ3RoID09IDYpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIuYmx1ZS5vZmZzZXQgPT0gMTEp ICYmCisJICAgICAgIChmYl9pbmZvLT52YXIuYmx1ZS5sZW5ndGggPT0gNSk7Cit9CisKK3N0YXRp YyBib29sIGlzX2JncjU2NV9iZShjb25zdCBzdHJ1Y3QgZmJfaW5mbyogZmJfaW5mbykKK3sKKwly ZXR1cm4gKGZiX2luZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSAxNikgJiYKKwkgICAgICAgKGZi X2luZm8tPnZhci5yZWQub2Zmc2V0ID09IDExKSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLnJl ZC5sZW5ndGggPT0gNSkgJiYKKwkgICAgICAgKGZiX2luZm8tPnZhci5ncmVlbi5vZmZzZXQgPT0g NSkgJiYKKwkgICAgICAgKGZiX2luZm8tPnZhci5ncmVlbi5sZW5ndGggPT0gNikgJiYKKwkgICAg ICAgKGZiX2luZm8tPnZhci5ibHVlLm9mZnNldCA9PSAwKSAmJgorCSAgICAgICAoZmJfaW5mby0+ dmFyLmJsdWUubGVuZ3RoID09IDUpOworfQorCitzdGF0aWMgYm9vbCBpc19yZ2I4ODhfYmUoY29u c3Qgc3RydWN0IGZiX2luZm8qIGZiX2luZm8pCit7CisJcmV0dXJuIChmYl9pbmZvLT52YXIuYml0 c19wZXJfcGl4ZWwgPT0gMjQpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIucmVkLm9mZnNldCA9 PSAwKSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLnJlZC5sZW5ndGggPT0gOCkgJiYKKwkgICAg ICAgKGZiX2luZm8tPnZhci5ncmVlbi5vZmZzZXQgPT0gOCkgJiYKKwkgICAgICAgKGZiX2luZm8t PnZhci5ncmVlbi5sZW5ndGggPT0gOCkgJiYKKwkgICAgICAgKGZiX2luZm8tPnZhci5ibHVlLm9m ZnNldCA9PSAxNikgJiYKKwkgICAgICAgKGZiX2luZm8tPnZhci5ibHVlLmxlbmd0aCA9PSA4KTsK K30KKworc3RhdGljIGJvb2wgaXNfYmdyODg4X2JlKGNvbnN0IHN0cnVjdCBmYl9pbmZvKiBmYl9p bmZvKQoreworCXJldHVybiAoZmJfaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDI0KSAmJgor CSAgICAgICAoZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQgPT0gMTYpICYmCisJICAgICAgIChmYl9p bmZvLT52YXIucmVkLmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmdyZWVu Lm9mZnNldCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9PSA4 KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmJsdWUub2Zmc2V0ID09IDApICYmCisJICAgICAg IChmYl9pbmZvLT52YXIuYmx1ZS5sZW5ndGggPT0gOCk7Cit9CisKK3N0YXRpYyBib29sIGlzX3hy Z2I4ODg4X2JlKGNvbnN0IHN0cnVjdCBmYl9pbmZvKiBmYl9pbmZvKQoreworCXJldHVybiAoZmJf aW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDMyKSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFy LnJlZC5vZmZzZXQgPT0gOCkgJiYKKwkgICAgICAgKGZiX2luZm8tPnZhci5yZWQubGVuZ3RoID09 IDgpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID09IDE2KSAmJgorCSAg ICAgICAoZmJfaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5m by0+dmFyLmJsdWUub2Zmc2V0ID09IDI0KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmJsdWUu bGVuZ3RoID09IDgpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9PSAw KTsKK30KKworc3RhdGljIGJvb2wgaXNfeGJncjg4ODhfYmUoY29uc3Qgc3RydWN0IGZiX2luZm8q IGZiX2luZm8pCit7CisJcmV0dXJuIChmYl9pbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gMzIp ICYmCisJICAgICAgIChmYl9pbmZvLT52YXIucmVkLm9mZnNldCA9PSAyNCkgJiYKKwkgICAgICAg KGZiX2luZm8tPnZhci5yZWQubGVuZ3RoID09IDgpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIu Z3JlZW4ub2Zmc2V0ID09IDE2KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmdyZWVuLmxlbmd0 aCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmJsdWUub2Zmc2V0ID09IDgpICYmCisJ ICAgICAgIChmYl9pbmZvLT52YXIuYmx1ZS5sZW5ndGggPT0gOCkgJiYKKwkgICAgICAgKGZiX2lu Zm8tPnZhci50cmFuc3AubGVuZ3RoID09IDApOworfQorCitzdGF0aWMgYm9vbCBpc19yZ2J4ODg4 OF9iZShjb25zdCBzdHJ1Y3QgZmJfaW5mbyogZmJfaW5mbykKK3sKKwlyZXR1cm4gKGZiX2luZm8t PnZhci5iaXRzX3Blcl9waXhlbCA9PSAzMikgJiYKKwkgICAgICAgKGZiX2luZm8tPnZhci5yZWQu b2Zmc2V0ID09IDApICYmCisJICAgICAgIChmYl9pbmZvLT52YXIucmVkLmxlbmd0aCA9PSA4KSAm JgorCSAgICAgICAoZmJfaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9PSA4KSAmJgorCSAgICAgICAo ZmJfaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFy LmJsdWUub2Zmc2V0ID09IDE2KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmJsdWUubGVuZ3Ro ID09IDgpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIudHJhbnNwLmxlbmd0aCA9PSAwKTsKK30K Kworc3RhdGljIGJvb2wgaXNfYmdyeDg4ODhfYmUoY29uc3Qgc3RydWN0IGZiX2luZm8qIGZiX2lu Zm8pCit7CisJcmV0dXJuIChmYl9pbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gMzIpICYmCisJ ICAgICAgIChmYl9pbmZvLT52YXIucmVkLm9mZnNldCA9PSAxNikgJiYKKwkgICAgICAgKGZiX2lu Zm8tPnZhci5yZWQubGVuZ3RoID09IDgpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIuZ3JlZW4u b2Zmc2V0ID09IDgpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID09IDgp ICYmCisJICAgICAgIChmYl9pbmZvLT52YXIuYmx1ZS5vZmZzZXQgPT0gMCkgJiYKKwkgICAgICAg KGZiX2luZm8tPnZhci5ibHVlLmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFy LnRyYW5zcC5sZW5ndGggPT0gMCk7Cit9CisKK3N0YXRpYyBib29sIGlzX2FyZ2I4ODg4X2JlKGNv bnN0IHN0cnVjdCBmYl9pbmZvKiBmYl9pbmZvKQoreworCXJldHVybiAoZmJfaW5mby0+dmFyLmJp dHNfcGVyX3BpeGVsID09IDMyKSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQg PT0gOCkgJiYKKwkgICAgICAgKGZiX2luZm8tPnZhci5yZWQubGVuZ3RoID09IDgpICYmCisJICAg ICAgIChmYl9pbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID09IDE2KSAmJgorCSAgICAgICAoZmJfaW5m by0+dmFyLmdyZWVuLmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmJsdWUu b2Zmc2V0ID09IDI0KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmJsdWUubGVuZ3RoID09IDgp ICYmCisJICAgICAgIChmYl9pbmZvLT52YXIudHJhbnNwLm9mZnNldCA9PSAwKSAmJgorCSAgICAg ICAoZmJfaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPT0gOCk7Cit9CisKK3N0YXRpYyBib29sIGlz X2FiZ3I4ODg4X2JlKGNvbnN0IHN0cnVjdCBmYl9pbmZvKiBmYl9pbmZvKQoreworCXJldHVybiAo ZmJfaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDMyKSAmJgorCSAgICAgICAoZmJfaW5mby0+ dmFyLnJlZC5vZmZzZXQgPT0gMjQpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIucmVkLmxlbmd0 aCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9PSAxNikgJiYK KwkgICAgICAgKGZiX2luZm8tPnZhci5ncmVlbi5sZW5ndGggPT0gOCkgJiYKKwkgICAgICAgKGZi X2luZm8tPnZhci5ibHVlLm9mZnNldCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmJs dWUubGVuZ3RoID09IDgpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIudHJhbnNwLm9mZnNldCA9 PSAwKSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPT0gOCk7Cit9CisK K3N0YXRpYyBib29sIGlzX3JnYmE4ODg4X2JlKGNvbnN0IHN0cnVjdCBmYl9pbmZvKiBmYl9pbmZv KQoreworCXJldHVybiAoZmJfaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDMyKSAmJgorCSAg ICAgICAoZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQgPT0gMCkgJiYKKwkgICAgICAgKGZiX2luZm8t PnZhci5yZWQubGVuZ3RoID09IDgpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIuZ3JlZW4ub2Zm c2V0ID09IDgpICYmCisJICAgICAgIChmYl9pbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID09IDgpICYm CisJICAgICAgIChmYl9pbmZvLT52YXIuYmx1ZS5vZmZzZXQgPT0gMTYpICYmCisJICAgICAgIChm Yl9pbmZvLT52YXIuYmx1ZS5sZW5ndGggPT0gOCkgJiYKKwkgICAgICAgKGZiX2luZm8tPnZhci50 cmFuc3Aub2Zmc2V0ID09IDI0KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLnRyYW5zcC5sZW5n dGggPT0gOCk7Cit9CisKK3N0YXRpYyBib29sIGlzX2JncmE4ODg4X2JlKGNvbnN0IHN0cnVjdCBm Yl9pbmZvKiBmYl9pbmZvKQoreworCXJldHVybiAoZmJfaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVs ID09IDMyKSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQgPT0gMTYpICYmCisJ ICAgICAgIChmYl9pbmZvLT52YXIucmVkLmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5m by0+dmFyLmdyZWVuLm9mZnNldCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmdyZWVu Lmxlbmd0aCA9PSA4KSAmJgorCSAgICAgICAoZmJfaW5mby0+dmFyLmJsdWUub2Zmc2V0ID09IDAp ICYmCisJICAgICAgIChmYl9pbmZvLT52YXIuYmx1ZS5sZW5ndGggPT0gOCkgJiYKKwkgICAgICAg KGZiX2luZm8tPnZhci50cmFuc3Aub2Zmc2V0ID09IDI0KSAmJgorCSAgICAgICAoZmJfaW5mby0+ dmFyLnRyYW5zcC5sZW5ndGggPT0gOCk7Cit9CisKKyNkZWZpbmUgaXNfcmdiNTY1X2xlIGlzX2Jn cjU2NV9iZQorI2RlZmluZSBpc19iZ3I1NjVfbGUgaXNfcmdiNTY1X2JlCisjZGVmaW5lIGlzX3Jn Yjg4OF9sZSBpc19iZ3I4ODhfYmUKKyNkZWZpbmUgaXNfYmdyODg4X2xlIGlzX3JnYjg4OF9iZQor I2RlZmluZSBpc194cmdiODg4OF9sZSBpc19iZ3J4ODg4OF9iZQorI2RlZmluZSBpc194YmdyODg4 OF9sZSBpc19yZ2J4ODg4OF9iZQorI2RlZmluZSBpc19yZ2J4ODg4OF9sZSBpc194YmdyODg4OF9i ZQorI2RlZmluZSBpc19iZ3J4ODg4OF9sZSBpc194cmdiODg4OF9iZQorI2RlZmluZSBpc19hcmdi ODg4OF9sZSBpc19iZ3JhODg4OF9iZQorI2RlZmluZSBpc19hYmdyODg4OF9sZSBpc19yZ2JhODg4 OF9iZQorI2RlZmluZSBpc19yZ2JhODg4OF9sZSBpc19hYmdyODg4OF9iZQorI2RlZmluZSBpc19i Z3JhODg4OF9sZSBpc19hcmdiODg4OF9iZQorCitzdHJ1Y3QgZm9ybWF0X21hcCB7CisJYm9vbCAo KmlzX2Zvcm1hdCkoY29uc3Qgc3RydWN0IGZiX2luZm8qKTsKKwl1aW50MzJfdCBmb3JtYXQ7Cit9 OworCit1aW50MzJfdCBmYmRldmRybV9mb3JtYXRfb2ZfZmJfaW5mbyhjb25zdCBzdHJ1Y3QgZmJf aW5mbyAqZmJfaW5mbykKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGZvcm1hdF9tYXAgbWFwW10g PSB7CisJCXsgaXNfYzgsICAgICAgICAgICAgICAgICAgRFJNX0ZPUk1BVF9DOCB9LCAgICAgIC8q IDI1Ni1jb2xvciBwYWxldHRlICovCisJCXsgSE9TVF9GVU5DKGlzX3JnYjU2NSksICAgRFJNX0ZP Uk1BVF9SR0I1NjUgfSwKKwkJeyBIT1NUX0ZVTkMoaXNfYmdyNTY1KSwgICBEUk1fRk9STUFUX0JH UjU2NSB9LAorCQl7IEhPU1RfRlVOQyhpc19yZ2I4ODgpLCAgIERSTV9GT1JNQVRfUkdCODg4IH0s CisJCXsgSE9TVF9GVU5DKGlzX2Jncjg4OCksICAgRFJNX0ZPUk1BVF9CR1I4ODggfSwKKwkJeyBI T1NUX0ZVTkMoaXNfeHJnYjg4ODgpLCBEUk1fRk9STUFUX1hSR0I4ODg4IH0sCisJCXsgSE9TVF9G VU5DKGlzX3hiZ3I4ODg4KSwgRFJNX0ZPUk1BVF9YQkdSODg4OCB9LAorCQl7IEhPU1RfRlVOQyhp c19yZ2J4ODg4OCksIERSTV9GT1JNQVRfUkdCWDg4ODggfSwKKwkJeyBIT1NUX0ZVTkMoaXNfYmdy eDg4ODgpLCBEUk1fRk9STUFUX0JHUlg4ODg4IH0sCisJCXsgSE9TVF9GVU5DKGlzX2FyZ2I4ODg4 KSwgRFJNX0ZPUk1BVF9BUkdCODg4OCB9LAorCQl7IEhPU1RfRlVOQyhpc19hYmdyODg4OCksIERS TV9GT1JNQVRfQUJHUjg4ODggfSwKKwkJeyBIT1NUX0ZVTkMoaXNfcmdiYTg4ODgpLCBEUk1fRk9S TUFUX1JHQkE4ODg4IH0sCisJCXsgSE9TVF9GVU5DKGlzX2JncmE4ODg4KSwgRFJNX0ZPUk1BVF9C R1JBODg4OCB9CisJfTsKKworCXNpemVfdCBpOworCisJaWYgKGZiX2luZm8tPmZpeC50eXBlICE9 IEZCX1RZUEVfUEFDS0VEX1BJWEVMUykKKwkJZ290byBlcnI7IC8qIG11bHRpLXBsYW5lIGZvcm1h dHMgYXJlIG5vdCBzdXBwb3J0ZWQgKi8KKwlpZiAoZmJfaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVs IDwgOCkKKwkJZ290byBlcnI7IC8qIGF0IGxlYXN0IDgtYml0IGNvbG9yIHJlcXVpcmVkICovCisJ aWYgKGZiX2luZm8tPnZhci5ncmF5c2NhbGUgPT0gMSkKKwkJZ290byBlcnI7IC8qIGdyYXlzY2Fs ZSBvdXRwdXQgaXMgbm90IHN1cHBvcnRlZCAqLworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUobWFwKTsgKytpKSB7CisJCWlmIChtYXBbaV0uaXNfZm9ybWF0KGZiX2luZm8pKQorCQkJcmV0 dXJuIG1hcFtpXS5mb3JtYXQ7CisJfQorCitlcnI6CisJcmV0dXJuIERSTV9GT1JNQVRfSU5WQUxJ RDsKK30KKworc3RhdGljIHZvaWQgc2V0X2ZiX2JpdGZpZWxkKHN0cnVjdCBmYl9iaXRmaWVsZCAq Yml0cywgX191MzIgb2Zmc2V0LAorCQkJICAgIF9fdTMyIGxlbmd0aCkKK3sKKwliaXRzLT5vZmZz ZXQgPSBvZmZzZXQ7CisJYml0cy0+bGVuZ3RoID0gbGVuZ3RoOworCWJpdHMtPm1zYl9yaWdodCA9 IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jOChzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmZi X3ZhcikKK3sKKwlmYl92YXItPmJpdHNfcGVyX3BpeGVsID0gODsKKwlmYl92YXItPmdyYXlzY2Fs ZSA9IDA7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPnJlZCwgICAgMCwgOCk7CisJc2V0X2Zi X2JpdGZpZWxkKCZmYl92YXItPmdyZWVuLCAgMCwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92 YXItPmJsdWUsICAgMCwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPnRyYW5zcCwgMCwg MCk7CisJZmJfdmFyLT5ub25zdGQgPSAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfcmdiNTY1X2Jl KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQoreworCWZiX3Zhci0+Yml0c19wZXJf cGl4ZWwgPSAxNjsKKwlmYl92YXItPmdyYXlzY2FsZSA9IDA7CisJc2V0X2ZiX2JpdGZpZWxkKCZm Yl92YXItPnJlZCwgICAgMCwgNSk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPmdyZWVuLCAg NSwgNik7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPmJsdWUsICAxMSwgNSk7CisJc2V0X2Zi X2JpdGZpZWxkKCZmYl92YXItPnRyYW5zcCwgMCwgMCk7CisJZmJfdmFyLT5ub25zdGQgPSAwOwor fQorCitzdGF0aWMgdm9pZCBzZXRfYmdyNTY1X2JlKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAq ZmJfdmFyKQoreworCWZiX3Zhci0+Yml0c19wZXJfcGl4ZWwgPSAxNjsKKwlmYl92YXItPmdyYXlz Y2FsZSA9IDA7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPnJlZCwgICAxMSwgNSk7CisJc2V0 X2ZiX2JpdGZpZWxkKCZmYl92YXItPmdyZWVuLCAgNSwgNik7CisJc2V0X2ZiX2JpdGZpZWxkKCZm Yl92YXItPmJsdWUsICAgMCwgNSk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPnRyYW5zcCwg MCwgMCk7CisJZmJfdmFyLT5ub25zdGQgPSAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfcmdiODg4 X2JlKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQoreworCWZiX3Zhci0+Yml0c19w ZXJfcGl4ZWwgPSAyNDsKKwlmYl92YXItPmdyYXlzY2FsZSA9IDA7CisJc2V0X2ZiX2JpdGZpZWxk KCZmYl92YXItPnJlZCwgICAgMCwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPmdyZWVu LCAgOCwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPmJsdWUsICAxNiwgOCk7CisJc2V0 X2ZiX2JpdGZpZWxkKCZmYl92YXItPnRyYW5zcCwgMCwgMCk7CisJZmJfdmFyLT5ub25zdGQgPSAw OworfQorCitzdGF0aWMgdm9pZCBzZXRfYmdyODg4X2JlKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5m byAqZmJfdmFyKQoreworCWZiX3Zhci0+Yml0c19wZXJfcGl4ZWwgPSAyNDsKKwlmYl92YXItPmdy YXlzY2FsZSA9IDA7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPnJlZCwgICAxNiwgOCk7CisJ c2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPmdyZWVuLCAgOCwgOCk7CisJc2V0X2ZiX2JpdGZpZWxk KCZmYl92YXItPmJsdWUsICAgMCwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPnRyYW5z cCwgMCwgMCk7CisJZmJfdmFyLT5ub25zdGQgPSAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfeHJn Yjg4ODhfYmUoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92YXIpCit7CisJZmJfdmFyLT5i aXRzX3Blcl9waXhlbCA9IDMyOworCWZiX3Zhci0+Z3JheXNjYWxlID0gMDsKKwlzZXRfZmJfYml0 ZmllbGQoJmZiX3Zhci0+cmVkLCAgICA4LCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+ Z3JlZW4sIDE2LCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Ymx1ZSwgIDI0LCA4KTsK KwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+dHJhbnNwLCAwLCAwKTsKKwlmYl92YXItPm5vbnN0 ZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF94YmdyODg4OF9iZShzdHJ1Y3QgZmJfdmFyX3Nj cmVlbmluZm8gKmZiX3ZhcikKK3sKKwlmYl92YXItPmJpdHNfcGVyX3BpeGVsID0gMzI7CisJZmJf dmFyLT5ncmF5c2NhbGUgPSAwOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT5yZWQsICAgMjQs IDgpOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT5ncmVlbiwgMTYsIDgpOworCXNldF9mYl9i aXRmaWVsZCgmZmJfdmFyLT5ibHVlLCAgIDgsIDgpOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFy LT50cmFuc3AsIDAsIDApOworCWZiX3Zhci0+bm9uc3RkID0gMDsKK30KKworc3RhdGljIHZvaWQg c2V0X3JnYng4ODg4X2JlKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQoreworCWZi X3Zhci0+Yml0c19wZXJfcGl4ZWwgPSAzMjsKKwlmYl92YXItPmdyYXlzY2FsZSA9IDA7CisJc2V0 X2ZiX2JpdGZpZWxkKCZmYl92YXItPnJlZCwgICAgIDAsIDgpOworCXNldF9mYl9iaXRmaWVsZCgm ZmJfdmFyLT5ncmVlbiwgICA4LCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Ymx1ZSwg ICAxNiwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPnRyYW5zcCwgMjQsIDApOworCWZi X3Zhci0+bm9uc3RkID0gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X2Jncng4ODg4X2JlKHN0cnVj dCBmYl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQoreworCWZiX3Zhci0+Yml0c19wZXJfcGl4ZWwg PSAzMjsKKwlmYl92YXItPmdyYXlzY2FsZSA9IDA7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXIt PnJlZCwgICAgMTYsIDgpOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT5ncmVlbiwgICA4LCA4 KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Ymx1ZSwgICAgMCwgOCk7CisJc2V0X2ZiX2Jp dGZpZWxkKCZmYl92YXItPnRyYW5zcCwgMjQsIDApOworCWZiX3Zhci0+bm9uc3RkID0gMDsKK30K Kworc3RhdGljIHZvaWQgc2V0X2FyZ2I4ODg4X2JlKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAq ZmJfdmFyKQoreworCWZiX3Zhci0+Yml0c19wZXJfcGl4ZWwgPSAzMjsKKwlmYl92YXItPmdyYXlz Y2FsZSA9IDA7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPnJlZCwgICAgOCwgOCk7CisJc2V0 X2ZiX2JpdGZpZWxkKCZmYl92YXItPmdyZWVuLCAxNiwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZm Yl92YXItPmJsdWUsICAyNCwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPnRyYW5zcCwg MCwgOCk7CisJZmJfdmFyLT5ub25zdGQgPSAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfYWJncjg4 ODhfYmUoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92YXIpCit7CisJZmJfdmFyLT5iaXRz X3Blcl9waXhlbCA9IDMyOworCWZiX3Zhci0+Z3JheXNjYWxlID0gMDsKKwlzZXRfZmJfYml0Zmll bGQoJmZiX3Zhci0+cmVkLCAgIDI0LCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Z3Jl ZW4sIDE2LCA4KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Ymx1ZSwgICA4LCA4KTsKKwlz ZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+dHJhbnNwLCAwLCA4KTsKKwlmYl92YXItPm5vbnN0ZCA9 IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yZ2JhODg4OF9iZShzdHJ1Y3QgZmJfdmFyX3NjcmVl bmluZm8gKmZiX3ZhcikKK3sKKwlmYl92YXItPmJpdHNfcGVyX3BpeGVsID0gMzI7CisJZmJfdmFy LT5ncmF5c2NhbGUgPSAwOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT5yZWQsICAgICAwLCA4 KTsKKwlzZXRfZmJfYml0ZmllbGQoJmZiX3Zhci0+Z3JlZW4sICAgOCwgOCk7CisJc2V0X2ZiX2Jp dGZpZWxkKCZmYl92YXItPmJsdWUsICAgMTYsIDgpOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFy LT50cmFuc3AsIDI0LCA4KTsKKwlmYl92YXItPm5vbnN0ZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lk IHNldF9iZ3JhODg4OF9iZShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmZiX3ZhcikKK3sKKwlm Yl92YXItPmJpdHNfcGVyX3BpeGVsID0gMzI7CisJZmJfdmFyLT5ncmF5c2NhbGUgPSAwOworCXNl dF9mYl9iaXRmaWVsZCgmZmJfdmFyLT5yZWQsICAgIDE2LCA4KTsKKwlzZXRfZmJfYml0ZmllbGQo JmZiX3Zhci0+Z3JlZW4sICAgOCwgOCk7CisJc2V0X2ZiX2JpdGZpZWxkKCZmYl92YXItPmJsdWUs ICAgIDAsIDgpOworCXNldF9mYl9iaXRmaWVsZCgmZmJfdmFyLT50cmFuc3AsIDI0LCA4KTsKKwlm Yl92YXItPm5vbnN0ZCA9IDA7Cit9CisKKyNkZWZpbmUgc2V0X3JnYjU2NV9sZSBzZXRfYmdyNTY1 X2JlCisjZGVmaW5lIHNldF9iZ3I1NjVfbGUgc2V0X3JnYjU2NV9iZQorI2RlZmluZSBzZXRfcmdi ODg4X2xlIHNldF9iZ3I4ODhfYmUKKyNkZWZpbmUgc2V0X2Jncjg4OF9sZSBzZXRfcmdiODg4X2Jl CisjZGVmaW5lIHNldF94cmdiODg4OF9sZSBzZXRfYmdyeDg4ODhfYmUKKyNkZWZpbmUgc2V0X3hi Z3I4ODg4X2xlIHNldF9yZ2J4ODg4OF9iZQorI2RlZmluZSBzZXRfcmdieDg4ODhfbGUgc2V0X3hi Z3I4ODg4X2JlCisjZGVmaW5lIHNldF9iZ3J4ODg4OF9sZSBzZXRfeHJnYjg4ODhfYmUKKyNkZWZp bmUgc2V0X2FyZ2I4ODg4X2xlIHNldF9iZ3JhODg4OF9iZQorI2RlZmluZSBzZXRfYWJncjg4ODhf bGUgc2V0X3JnYmE4ODg4X2JlCisjZGVmaW5lIHNldF9yZ2JhODg4OF9sZSBzZXRfYWJncjg4ODhf YmUKKyNkZWZpbmUgc2V0X2JncmE4ODg4X2xlIHNldF9hcmdiODg4OF9iZQorCitpbnQgZmJkZXZk cm1fdXBkYXRlX2ZiX3Zhcl9zY3JlZW5pbmZvX2Zyb21fZm9ybWF0KAorCXN0cnVjdCBmYl92YXJf c2NyZWVuaW5mbyAqZmJfdmFyLCB1aW50MzJfdCBmb3JtYXQpCit7CisJc3dpdGNoIChmb3JtYXQp IHsKKwljYXNlIERSTV9GT1JNQVRfQzg6CisJCXNldF9jOChmYl92YXIpOworCQlicmVhazsKKwlj YXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCQlIT1NUX0ZVTkMoc2V0X3JnYjU2NSkoZmJfdmFyKTsK KwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKKwkJSE9TVF9GVU5DKHNldF9iZ3I1 NjUpKGZiX3Zhcik7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJCUhPU1Rf RlVOQyhzZXRfcmdiODg4KShmYl92YXIpOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQkdS ODg4OgorCQlIT1NUX0ZVTkMoc2V0X2Jncjg4OCkoZmJfdmFyKTsKKwkJYnJlYWs7CisJY2FzZSBE Uk1fRk9STUFUX1hSR0I4ODg4OgorCQlIT1NUX0ZVTkMoc2V0X3hyZ2I4ODg4KShmYl92YXIpOwor CQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJCUhPU1RfRlVOQyhzZXRfeGJn cjg4ODgpKGZiX3Zhcik7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0JYODg4ODoKKwkJ SE9TVF9GVU5DKHNldF9yZ2J4ODg4OCkoZmJfdmFyKTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9S TUFUX0JHUlg4ODg4OgorCQlIT1NUX0ZVTkMoc2V0X2Jncng4ODg4KShmYl92YXIpOworCQlicmVh azsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJCUhPU1RfRlVOQyhzZXRfYXJnYjg4ODgp KGZiX3Zhcik7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJSE9TVF9G VU5DKHNldF9hYmdyODg4OCkoZmJfdmFyKTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1JH QkE4ODg4OgorCQlIT1NUX0ZVTkMoc2V0X3JnYmE4ODg4KShmYl92YXIpOworCQlicmVhazsKKwlj YXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6CisJCUhPU1RfRlVOQyhzZXRfYmdyYTg4ODgpKGZiX3Zh cik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4g MDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9mb3Jt YXQuaCBiL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9mb3JtYXQuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU4Mzc5NzhhYzhmYwotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9mYmRldmRybS9mYmRldmRybV9mb3JtYXQuaApAQCAt MCwwICsxLDI2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRl cgorICoKKyAqIE9uZSBwdXJwb3NlIG9mIHRoaXMgZHJpdmVyIGlzIHRvIGFsbG93IGZvciBlYXN5 IGNvbnZlcnNpb24gb2YgZnJhbWVidWZmZXIKKyAqIGRyaXZlcnMgdG8gRFJNLiBBcyBhIHNwZWNp YWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR1BMLCB5b3UgYXJlIGFsbG93ZWQgdG8KKyAqIHJlbGlj ZW5zZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBvZiB5b3VyIGNob2lj ZSBpZiB5b3UncmUKKyAqIHBvcnRpbmcgYSBmcmFtZWJ1ZmZlciBkcml2ZXIuIEluIG9yZGVyIHRv IGRvIHNvLCB1cGRhdGUgdGhlIFNQRFggbGljZW5zZQorICogaWRlbnRpZmllciB0byB0aGUgbmV3 IGxpY2Vuc2UgYW5kIHJlbW92ZSB0aGlzIGV4Y2VwdGlvbi4KKyAqCisgKiBJZiB5b3UgYWRkIGNv ZGUgdG8gdGhpcyBmaWxlLCBwbGVhc2UgZW5zdXJlIHRoYXQgaXQncyBjb21wYXRpYmxlIHdpdGgg dGhlCisgKiBzdGF0ZWQgZXhjZXB0aW9uLgorICovCisKKyNpZm5kZWYgRkJERVZEUk1fRk9STUFU X0gKKyNkZWZpbmUgRkJERVZEUk1fRk9STUFUX0gKKworI2luY2x1ZGUgPGRybS9kcm1fZm91cmNj Lmg+CisKK3N0cnVjdCBmYl9pbmZvOworc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvOworCit1aW50 MzJfdCBmYmRldmRybV9mb3JtYXRfb2ZfZmJfaW5mbyhjb25zdCBzdHJ1Y3QgZmJfaW5mbyAqZmJf aW5mbyk7CisKK2ludCBmYmRldmRybV91cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9fZnJvbV9mb3Jt YXQoCisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICpmYl92YXIsIHVpbnQzMl90IGZvcm1hdCk7 CisKKyNlbmRpZgotLSAKMi4yMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWw=