From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: [PATCH v3 01/15] drm: Move format-related helpers to drm_fourcc.c Date: Thu, 9 Jun 2016 02:32:05 +0300 Message-ID: <1465428739-26529-2-git-send-email-laurent.pinchart@ideasonboard.com> References: <1465428739-26529-1-git-send-email-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from galahad.ideasonboard.com (galahad.ideasonboard.com [IPv6:2001:4b98:dc2:45:216:3eff:febb:480d]) by gabe.freedesktop.org (Postfix) with ESMTPS id 68AB36E5A8 for ; Wed, 8 Jun 2016 23:32:25 +0000 (UTC) In-Reply-To: <1465428739-26529-1-git-send-email-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Daniel Vetter , Tomi Valkeinen List-Id: dri-devel@lists.freedesktop.org VGhlIGRybV9jcnRjLmMgZmlsZSBpcyBhIG1lc3MsIG1ha2luZyB0aGUgQUJJIGRvY3VtZW50YXRp b24gY29uZnVzaW5nCnNpbmNlIGFsbCBmdW5jdGlvbnMgYXJlIGluIHRoZSBzYW1lIGJhZy4gU3Bs aXQgdGhlIGZvcm1hdC1yZWxhdGVkCmhlbHBlcnMgdG8gYSBuZXcgZHJtX2ZvdXJjYy5jIGZpbGUu CgpTaWduZWQtb2ZmLWJ5OiBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFz b25ib2FyZC5jb20+Ci0tLQogRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsIHwgICA1ICsK IGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJt L2RybV9jcnRjLmMgICAgIHwgMjg5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fZm91cmNjLmMgICB8IDMyMCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vZHJtUC5oICAgICAgICAgICAg IHwgICAxICsKIGluY2x1ZGUvZHJtL2RybV9jcnRjLmggICAgICAgICB8ICAgOSAtLQogaW5jbHVk ZS9kcm0vZHJtX2ZvdXJjYy5oICAgICAgIHwgIDM3ICsrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDM2 NCBpbnNlcnRpb25zKCspLCAyOTkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJt L2RybV9mb3VyY2MuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1w bCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbAppbmRleCA3NTg2YmY3NWY2MmUuLmQz MjM2M2NiMWZmMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsCisr KyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbApAQCAtMTY1Niw2ICsxNjU2LDExIEBA IHZvaWQgaW50ZWxfY3J0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKICFFZHJpdmVycy9n cHUvZHJtL2RybV9yZWN0LmMKICAgICA8L3NlY3QyPgogICAgIDxzZWN0Mj4KKyAgICAgIDx0aXRs ZT5Gb3JtYXRzIFV0aWxpdGllcyBSZWZlcmVuY2U8L3RpdGxlPgorIUlpbmNsdWRlL2RybS9kcm1f Zm91cmNjLmgKKyFFZHJpdmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYworICAgIDwvc2VjdDI+Cisg ICAgPHNlY3QyPgogICAgICAgPHRpdGxlPkZsaXAtd29yayBIZWxwZXIgUmVmZXJlbmNlPC90aXRs ZT4KICFQaW5jbHVkZS9kcm0vZHJtX2ZsaXBfd29yay5oIGZsaXAgdXRpbHMKICFJaW5jbHVkZS9k cm0vZHJtX2ZsaXBfd29yay5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggYmU0M2FmYjA4YzY5Li5hYTI0YWYzNWMw NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUKQEAgLTgsNyArOCw3IEBAIGRybS15ICAgICAgIDo9CWRybV9hdXRoLm8g ZHJtX2J1ZnMubyBkcm1fY2FjaGUubyBcCiAJCWRybV9sb2NrLm8gZHJtX21lbW9yeS5vIGRybV9k cnYubyBkcm1fdm0ubyBcCiAJCWRybV9zY2F0dGVyLm8gZHJtX3BjaS5vIFwKIAkJZHJtX3BsYXRm b3JtLm8gZHJtX3N5c2ZzLm8gZHJtX2hhc2h0YWIubyBkcm1fbW0ubyBcCi0JCWRybV9jcnRjLm8g ZHJtX21vZGVzLm8gZHJtX2VkaWQubyBcCisJCWRybV9jcnRjLm8gZHJtX2ZvdXJjYy5vIGRybV9t b2Rlcy5vIGRybV9lZGlkLm8gXAogCQlkcm1faW5mby5vIGRybV9kZWJ1Z2ZzLm8gZHJtX2VuY29k ZXJfc2xhdmUubyBcCiAJCWRybV90cmFjZV9wb2ludHMubyBkcm1fZ2xvYmFsLm8gZHJtX3ByaW1l Lm8gXAogCQlkcm1fcmVjdC5vIGRybV92bWFfbWFuYWdlci5vIGRybV9mbGlwX3dvcmsubyBcCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fY3J0Yy5jCmluZGV4IDBlM2NjNjZhYThiNy4uZTUzNjk1MjlhZjA2IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMu YwpAQCAtMjM5LDM3ICsyMzksNiBAQCBjb25zdCBjaGFyICpkcm1fZ2V0X3N1YnBpeGVsX29yZGVy X25hbWUoZW51bSBzdWJwaXhlbF9vcmRlciBvcmRlcikKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2dl dF9zdWJwaXhlbF9vcmRlcl9uYW1lKTsKIAotc3RhdGljIGNoYXIgcHJpbnRhYmxlX2NoYXIoaW50 IGMpCi17Ci0JcmV0dXJuIGlzYXNjaWkoYykgJiYgaXNwcmludChjKSA/IGMgOiAnPyc7Ci19Ci0K LS8qKgotICogZHJtX2dldF9mb3JtYXRfbmFtZSAtIHJldHVybiBhIHN0cmluZyBmb3IgZHJtIGZv dXJjYyBmb3JtYXQKLSAqIEBmb3JtYXQ6IGZvcm1hdCB0byBjb21wdXRlIG5hbWUgb2YKLSAqCi0g KiBOb3RlIHRoYXQgdGhlIGJ1ZmZlciB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgZ2xvYmFsbHkg c2hhcmVkIGFuZCBvd25lZCBieQotICogdGhlIGZ1bmN0aW9uIGl0c2VsZi4KLSAqCi0gKiBGSVhN RTogVGhpcyBpc24ndCByZWFsbHkgbXVsdGl0aHJlYWRpbmcgc2FmZS4KLSAqLwotY29uc3QgY2hh ciAqZHJtX2dldF9mb3JtYXRfbmFtZSh1aW50MzJfdCBmb3JtYXQpCi17Ci0Jc3RhdGljIGNoYXIg YnVmWzMyXTsKLQotCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0JCSAiJWMlYyVjJWMgJXMt ZW5kaWFuICgweCUwOHgpIiwKLQkJIHByaW50YWJsZV9jaGFyKGZvcm1hdCAmIDB4ZmYpLAotCQkg cHJpbnRhYmxlX2NoYXIoKGZvcm1hdCA+PiA4KSAmIDB4ZmYpLAotCQkgcHJpbnRhYmxlX2NoYXIo KGZvcm1hdCA+PiAxNikgJiAweGZmKSwKLQkJIHByaW50YWJsZV9jaGFyKChmb3JtYXQgPj4gMjQp ICYgMHg3ZiksCi0JCSBmb3JtYXQgJiBEUk1fRk9STUFUX0JJR19FTkRJQU4gPyAiYmlnIiA6ICJs aXR0bGUiLAotCQkgZm9ybWF0KTsKLQotCXJldHVybiBidWY7Ci19Ci1FWFBPUlRfU1lNQk9MKGRy bV9nZXRfZm9ybWF0X25hbWUpOwotCiAvKgogICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gYXNzaWdu IGEgc2xvdCBpbiB0aGUgb2JqZWN0IGlkciBhbmQgb3B0aW9uYWxseQogICogcmVnaXN0ZXIgdGhl IG9iamVjdCBpbnRvIHRoZSBpZHIuCkBAIC01NTQ0LDI2NCArNTUxMyw2IEBAIGludCBkcm1fbW9k ZV9kZXN0cm95X2R1bWJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIH0KIAogLyoqCi0g KiBkcm1fZmJfZ2V0X2JwcF9kZXB0aCAtIGdldCB0aGUgYnBwL2RlcHRoIHZhbHVlcyBmb3IgZm9y bWF0Ci0gKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKLSAqIEBkZXB0aDog c3RvcmFnZSBmb3IgdGhlIGRlcHRoIHZhbHVlCi0gKiBAYnBwOiBzdG9yYWdlIGZvciB0aGUgYnBw IHZhbHVlCi0gKgotICogVGhpcyBvbmx5IHN1cHBvcnRzIFJHQiBmb3JtYXRzIGhlcmUgZm9yIGNv bXBhdCB3aXRoIGNvZGUgdGhhdCBkb2Vzbid0IHVzZQotICogcGl4ZWwgZm9ybWF0cyBkaXJlY3Rs eSB5ZXQuCi0gKi8KLXZvaWQgZHJtX2ZiX2dldF9icHBfZGVwdGgodWludDMyX3QgZm9ybWF0LCB1 bnNpZ25lZCBpbnQgKmRlcHRoLAotCQkJICBpbnQgKmJwcCkKLXsKLQlzd2l0Y2ggKGZvcm1hdCkg ewotCWNhc2UgRFJNX0ZPUk1BVF9DODoKLQljYXNlIERSTV9GT1JNQVRfUkdCMzMyOgotCWNhc2Ug RFJNX0ZPUk1BVF9CR1IyMzM6Ci0JCSpkZXB0aCA9IDg7Ci0JCSpicHAgPSA4OwotCQlicmVhazsK LQljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IxNTU1Ogot CWNhc2UgRFJNX0ZPUk1BVF9SR0JYNTU1MToKLQljYXNlIERSTV9GT1JNQVRfQkdSWDU1NTE6Ci0J Y2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1OgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTU1NToKLQlj YXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUkE1NTUxOgotCQkq ZGVwdGggPSAxNTsKLQkJKmJwcCA9IDE2OwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfUkdC NTY1OgotCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6Ci0JCSpkZXB0aCA9IDE2OwotCQkqYnBwID0g MTY7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6Ci0JY2FzZSBEUk1fRk9STUFU X0JHUjg4ODoKLQkJKmRlcHRoID0gMjQ7Ci0JCSpicHAgPSAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBE Uk1fRk9STUFUX1hSR0I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKLQljYXNlIERS TV9GT1JNQVRfUkdCWDg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4OgotCQkqZGVwdGgg PSAyNDsKLQkJKmJwcCA9IDMyOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEw MTA6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9SR0JY MTAxMDEwMjoKLQljYXNlIERSTV9GT1JNQVRfQkdSWDEwMTAxMDI6Ci0JY2FzZSBEUk1fRk9STUFU X0FSR0IyMTAxMDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKLQljYXNlIERSTV9G T1JNQVRfUkdCQTEwMTAxMDI6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUkExMDEwMTAyOgotCQkqZGVw dGggPSAzMDsKLQkJKmJwcCA9IDMyOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfQVJHQjg4 ODg6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4 ODoKLQljYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6Ci0JCSpkZXB0aCA9IDMyOwotCQkqYnBwID0g MzI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9ERUJVR19LTVMoInVuc3VwcG9ydGVkIHBp eGVsIGZvcm1hdCAlc1xuIiwKLQkJCSAgICAgIGRybV9nZXRfZm9ybWF0X25hbWUoZm9ybWF0KSk7 Ci0JCSpkZXB0aCA9IDA7Ci0JCSpicHAgPSAwOwotCQlicmVhazsKLQl9Ci19Ci1FWFBPUlRfU1lN Qk9MKGRybV9mYl9nZXRfYnBwX2RlcHRoKTsKLQotLyoqCi0gKiBkcm1fZm9ybWF0X251bV9wbGFu ZXMgLSBnZXQgdGhlIG51bWJlciBvZiBwbGFuZXMgZm9yIGZvcm1hdAotICogQGZvcm1hdDogcGl4 ZWwgZm9ybWF0IChEUk1fRk9STUFUXyopCi0gKgotICogUmV0dXJuczoKLSAqIFRoZSBudW1iZXIg b2YgcGxhbmVzIHVzZWQgYnkgdGhlIHNwZWNpZmllZCBwaXhlbCBmb3JtYXQuCi0gKi8KLWludCBk cm1fZm9ybWF0X251bV9wbGFuZXModWludDMyX3QgZm9ybWF0KQotewotCXN3aXRjaCAoZm9ybWF0 KSB7Ci0JY2FzZSBEUk1fRk9STUFUX1lVVjQxMDoKLQljYXNlIERSTV9GT1JNQVRfWVZVNDEwOgot CWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MTE6Ci0JY2FzZSBEUk1fRk9STUFUX1lWVTQxMToKLQljYXNl IERSTV9GT1JNQVRfWVVWNDIwOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6Ci0JY2FzZSBEUk1f Rk9STUFUX1lVVjQyMjoKLQljYXNlIERSTV9GT1JNQVRfWVZVNDIyOgotCWNhc2UgRFJNX0ZPUk1B VF9ZVVY0NDQ6Ci0JY2FzZSBEUk1fRk9STUFUX1lWVTQ0NDoKLQkJcmV0dXJuIDM7Ci0JY2FzZSBE Uk1fRk9STUFUX05WMTI6Ci0JY2FzZSBEUk1fRk9STUFUX05WMjE6Ci0JY2FzZSBEUk1fRk9STUFU X05WMTY6Ci0JY2FzZSBEUk1fRk9STUFUX05WNjE6Ci0JY2FzZSBEUk1fRk9STUFUX05WMjQ6Ci0J Y2FzZSBEUk1fRk9STUFUX05WNDI6Ci0JCXJldHVybiAyOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAx OwotCX0KLX0KLUVYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9udW1fcGxhbmVzKTsKLQotLyoqCi0g KiBkcm1fZm9ybWF0X3BsYW5lX2NwcCAtIGRldGVybWluZSB0aGUgYnl0ZXMgcGVyIHBpeGVsIHZh bHVlCi0gKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKLSAqIEBwbGFuZTog cGxhbmUgaW5kZXgKLSAqCi0gKiBSZXR1cm5zOgotICogVGhlIGJ5dGVzIHBlciBwaXhlbCB2YWx1 ZSBmb3IgdGhlIHNwZWNpZmllZCBwbGFuZS4KLSAqLwotaW50IGRybV9mb3JtYXRfcGxhbmVfY3Bw KHVpbnQzMl90IGZvcm1hdCwgaW50IHBsYW5lKQotewotCXVuc2lnbmVkIGludCBkZXB0aDsKLQlp bnQgYnBwOwotCi0JaWYgKHBsYW5lID49IGRybV9mb3JtYXRfbnVtX3BsYW5lcyhmb3JtYXQpKQot CQlyZXR1cm4gMDsKLQotCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX1lVWVY6 Ci0JY2FzZSBEUk1fRk9STUFUX1lWWVU6Ci0JY2FzZSBEUk1fRk9STUFUX1VZVlk6Ci0JY2FzZSBE Uk1fRk9STUFUX1ZZVVk6Ci0JCXJldHVybiAyOwotCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgotCWNh c2UgRFJNX0ZPUk1BVF9OVjIxOgotCWNhc2UgRFJNX0ZPUk1BVF9OVjE2OgotCWNhc2UgRFJNX0ZP Uk1BVF9OVjYxOgotCWNhc2UgRFJNX0ZPUk1BVF9OVjI0OgotCWNhc2UgRFJNX0ZPUk1BVF9OVjQy OgotCQlyZXR1cm4gcGxhbmUgPyAyIDogMTsKLQljYXNlIERSTV9GT1JNQVRfWVVWNDEwOgotCWNh c2UgRFJNX0ZPUk1BVF9ZVlU0MTA6Ci0JY2FzZSBEUk1fRk9STUFUX1lVVjQxMToKLQljYXNlIERS TV9GT1JNQVRfWVZVNDExOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6Ci0JY2FzZSBEUk1fRk9S TUFUX1lWVTQyMDoKLQljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgotCWNhc2UgRFJNX0ZPUk1BVF9Z VlU0MjI6Ci0JY2FzZSBEUk1fRk9STUFUX1lVVjQ0NDoKLQljYXNlIERSTV9GT1JNQVRfWVZVNDQ0 OgotCQlyZXR1cm4gMTsKLQlkZWZhdWx0OgotCQlkcm1fZmJfZ2V0X2JwcF9kZXB0aChmb3JtYXQs ICZkZXB0aCwgJmJwcCk7Ci0JCXJldHVybiBicHAgPj4gMzsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9M KGRybV9mb3JtYXRfcGxhbmVfY3BwKTsKLQotLyoqCi0gKiBkcm1fZm9ybWF0X2hvcnpfY2hyb21h X3N1YnNhbXBsaW5nIC0gZ2V0IHRoZSBob3Jpem9udGFsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0 b3IKLSAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCAoRFJNX0ZPUk1BVF8qKQotICoKLSAqIFJldHVy bnM6Ci0gKiBUaGUgaG9yaXpvbnRhbCBjaHJvbWEgc3Vic2FtcGxpbmcgZmFjdG9yIGZvciB0aGUK LSAqIHNwZWNpZmllZCBwaXhlbCBmb3JtYXQuCi0gKi8KLWludCBkcm1fZm9ybWF0X2hvcnpfY2hy b21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCkKLXsKLQlzd2l0Y2ggKGZvcm1hdCkgewot CWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MTE6Ci0JY2FzZSBEUk1fRk9STUFUX1lWVTQxMToKLQljYXNl IERSTV9GT1JNQVRfWVVWNDEwOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTA6Ci0JCXJldHVybiA0 OwotCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgotCWNhc2Ug RFJNX0ZPUk1BVF9VWVZZOgotCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgotCWNhc2UgRFJNX0ZPUk1B VF9OVjEyOgotCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgotCWNhc2UgRFJNX0ZPUk1BVF9OVjE2Ogot CWNhc2UgRFJNX0ZPUk1BVF9OVjYxOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjI6Ci0JY2FzZSBE Uk1fRk9STUFUX1lWVTQyMjoKLQljYXNlIERSTV9GT1JNQVRfWVVWNDIwOgotCWNhc2UgRFJNX0ZP Uk1BVF9ZVlU0MjA6Ci0JCXJldHVybiAyOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAxOwotCX0KLX0K LUVYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyk7Ci0KLS8q KgotICogZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyAtIGdldCB0aGUgdmVydGlj YWwgY2hyb21hIHN1YnNhbXBsaW5nIGZhY3RvcgotICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0IChE Uk1fRk9STUFUXyopCi0gKgotICogUmV0dXJuczoKLSAqIFRoZSB2ZXJ0aWNhbCBjaHJvbWEgc3Vi c2FtcGxpbmcgZmFjdG9yIGZvciB0aGUKLSAqIHNwZWNpZmllZCBwaXhlbCBmb3JtYXQuCi0gKi8K LWludCBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCkK LXsKLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MTA6Ci0JY2FzZSBE Uk1fRk9STUFUX1lWVTQxMDoKLQkJcmV0dXJuIDQ7Ci0JY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoK LQljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgotCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgotCWNhc2Ug RFJNX0ZPUk1BVF9OVjIxOgotCQlyZXR1cm4gMjsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMTsKLQl9 Ci19Ci1FWFBPUlRfU1lNQk9MKGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcpOwot Ci0vKioKLSAqIGRybV9mb3JtYXRfcGxhbmVfd2lkdGggLSB3aWR0aCBvZiB0aGUgcGxhbmUgZ2l2 ZW4gdGhlIGZpcnN0IHBsYW5lCi0gKiBAd2lkdGg6IHdpZHRoIG9mIHRoZSBmaXJzdCBwbGFuZQot ICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0Ci0gKiBAcGxhbmU6IHBsYW5lIGluZGV4Ci0gKgotICog UmV0dXJuczoKLSAqIFRoZSB3aWR0aCBvZiBAcGxhbmUsIGdpdmVuIHRoYXQgdGhlIHdpZHRoIG9m IHRoZSBmaXJzdCBwbGFuZSBpcyBAd2lkdGguCi0gKi8KLWludCBkcm1fZm9ybWF0X3BsYW5lX3dp ZHRoKGludCB3aWR0aCwgdWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpCi17Ci0JaWYgKHBsYW5l ID49IGRybV9mb3JtYXRfbnVtX3BsYW5lcyhmb3JtYXQpKQotCQlyZXR1cm4gMDsKLQotCWlmIChw bGFuZSA9PSAwKQotCQlyZXR1cm4gd2lkdGg7Ci0KLQlyZXR1cm4gd2lkdGggLyBkcm1fZm9ybWF0 X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKGZvcm1hdCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRybV9m b3JtYXRfcGxhbmVfd2lkdGgpOwotCi0vKioKLSAqIGRybV9mb3JtYXRfcGxhbmVfaGVpZ2h0IC0g aGVpZ2h0IG9mIHRoZSBwbGFuZSBnaXZlbiB0aGUgZmlyc3QgcGxhbmUKLSAqIEBoZWlnaHQ6IGhl aWdodCBvZiB0aGUgZmlyc3QgcGxhbmUKLSAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdAotICogQHBs YW5lOiBwbGFuZSBpbmRleAotICoKLSAqIFJldHVybnM6Ci0gKiBUaGUgaGVpZ2h0IG9mIEBwbGFu ZSwgZ2l2ZW4gdGhhdCB0aGUgaGVpZ2h0IG9mIHRoZSBmaXJzdCBwbGFuZSBpcyBAaGVpZ2h0Lgot ICovCi1pbnQgZHJtX2Zvcm1hdF9wbGFuZV9oZWlnaHQoaW50IGhlaWdodCwgdWludDMyX3QgZm9y bWF0LCBpbnQgcGxhbmUpCi17Ci0JaWYgKHBsYW5lID49IGRybV9mb3JtYXRfbnVtX3BsYW5lcyhm b3JtYXQpKQotCQlyZXR1cm4gMDsKLQotCWlmIChwbGFuZSA9PSAwKQotCQlyZXR1cm4gaGVpZ2h0 OwotCi0JcmV0dXJuIGhlaWdodCAvIGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmco Zm9ybWF0KTsKLX0KLUVYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9wbGFuZV9oZWlnaHQpOwotCi0v KioKICAqIGRybV9yb3RhdGlvbl9zaW1wbGlmeSgpIC0gVHJ5IHRvIHNpbXBsaWZ5IHRoZSByb3Rh dGlvbgogICogQHJvdGF0aW9uOiBSb3RhdGlvbiB0byBiZSBzaW1wbGlmaWVkCiAgKiBAc3VwcG9y dGVkX3JvdGF0aW9uczogU3VwcG9ydGVkIHJvdGF0aW9ucwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2RybV9mb3VyY2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm91cmNjLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wNjQ1Yzg1ZDVmOTUKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvdXJjYy5jCkBAIC0wLDAgKzEsMzIwIEBA CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGlu Y2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KKyAqCisgKiBEUk0gY29yZSBmb3JtYXQgcmVsYXRlZCBm dW5jdGlvbnMKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmli dXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9y IGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0 CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQg dGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kCisgKiB0aGF0IHRo ZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2lu ZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0 d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGhl IGNvcHlyaWdodCBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zCisgKiBhYm91dCB0aGUg c3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92 aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAq CisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBS RUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8KKyAqIEVWRU5UIFNIQUxM IFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVD VCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIg UkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCisgKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCisgKiBUT1JUSU9V UyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9S IFBFUkZPUk1BTkNFCisgKiBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51 eC9idWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9y dC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgorCitzdGF0aWMgY2hhciBwcmludGFibGVfY2hh cihpbnQgYykKK3sKKwlyZXR1cm4gaXNhc2NpaShjKSAmJiBpc3ByaW50KGMpID8gYyA6ICc/JzsK K30KKworLyoqCisgKiBkcm1fZ2V0X2Zvcm1hdF9uYW1lIC0gcmV0dXJuIGEgc3RyaW5nIGZvciBk cm0gZm91cmNjIGZvcm1hdAorICogQGZvcm1hdDogZm9ybWF0IHRvIGNvbXB1dGUgbmFtZSBvZgor ICoKKyAqIE5vdGUgdGhhdCB0aGUgYnVmZmVyIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBnbG9i YWxseSBzaGFyZWQgYW5kIG93bmVkIGJ5CisgKiB0aGUgZnVuY3Rpb24gaXRzZWxmLgorICoKKyAq IEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBtdWx0aXRocmVhZGluZyBzYWZlLgorICovCitjb25z dCBjaGFyICpkcm1fZ2V0X2Zvcm1hdF9uYW1lKHVpbnQzMl90IGZvcm1hdCkKK3sKKwlzdGF0aWMg Y2hhciBidWZbMzJdOworCisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKKwkJICIlYyVjJWMl YyAlcy1lbmRpYW4gKDB4JTA4eCkiLAorCQkgcHJpbnRhYmxlX2NoYXIoZm9ybWF0ICYgMHhmZiks CisJCSBwcmludGFibGVfY2hhcigoZm9ybWF0ID4+IDgpICYgMHhmZiksCisJCSBwcmludGFibGVf Y2hhcigoZm9ybWF0ID4+IDE2KSAmIDB4ZmYpLAorCQkgcHJpbnRhYmxlX2NoYXIoKGZvcm1hdCA+ PiAyNCkgJiAweDdmKSwKKwkJIGZvcm1hdCAmIERSTV9GT1JNQVRfQklHX0VORElBTiA/ICJiaWci IDogImxpdHRsZSIsCisJCSBmb3JtYXQpOworCisJcmV0dXJuIGJ1ZjsKK30KK0VYUE9SVF9TWU1C T0woZHJtX2dldF9mb3JtYXRfbmFtZSk7CisKKy8qKgorICogZHJtX2ZiX2dldF9icHBfZGVwdGgg LSBnZXQgdGhlIGJwcC9kZXB0aCB2YWx1ZXMgZm9yIGZvcm1hdAorICogQGZvcm1hdDogcGl4ZWwg Zm9ybWF0IChEUk1fRk9STUFUXyopCisgKiBAZGVwdGg6IHN0b3JhZ2UgZm9yIHRoZSBkZXB0aCB2 YWx1ZQorICogQGJwcDogc3RvcmFnZSBmb3IgdGhlIGJwcCB2YWx1ZQorICoKKyAqIFRoaXMgb25s eSBzdXBwb3J0cyBSR0IgZm9ybWF0cyBoZXJlIGZvciBjb21wYXQgd2l0aCBjb2RlIHRoYXQgZG9l c24ndCB1c2UKKyAqIHBpeGVsIGZvcm1hdHMgZGlyZWN0bHkgeWV0LgorICovCit2b2lkIGRybV9m Yl9nZXRfYnBwX2RlcHRoKHVpbnQzMl90IGZvcm1hdCwgdW5zaWduZWQgaW50ICpkZXB0aCwKKwkJ CSAgaW50ICpicHApCit7CisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfQzg6 CisJY2FzZSBEUk1fRk9STUFUX1JHQjMzMjoKKwljYXNlIERSTV9GT1JNQVRfQkdSMjMzOgorCQkq ZGVwdGggPSA4OworCQkqYnBwID0gODsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hSR0Ix NTU1OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTU1NToKKwljYXNlIERSTV9GT1JNQVRfUkdCWDU1 NTE6CisJY2FzZSBEUk1fRk9STUFUX0JHUlg1NTUxOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTU1 NToKKwljYXNlIERSTV9GT1JNQVRfQUJHUjE1NTU6CisJY2FzZSBEUk1fRk9STUFUX1JHQkE1NTUx OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNTU1MToKKwkJKmRlcHRoID0gMTU7CisJCSpicHAgPSAx NjsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwljYXNlIERSTV9GT1JNQVRf QkdSNTY1OgorCQkqZGVwdGggPSAxNjsKKwkJKmJwcCA9IDE2OworCQlicmVhazsKKwljYXNlIERS TV9GT1JNQVRfUkdCODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6CisJCSpkZXB0aCA9IDI0 OworCQkqYnBwID0gMjQ7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwlj YXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4OgorCWNh c2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKKwkJKmRlcHRoID0gMjQ7CisJCSpicHAgPSAzMjsKKwkJ YnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9Y QkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfUkdCWDEwMTAxMDI6CisJY2FzZSBEUk1fRk9S TUFUX0JHUlgxMDEwMTAyOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwljYXNlIERS TV9GT1JNQVRfQUJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFUX1JHQkExMDEwMTAyOgorCWNh c2UgRFJNX0ZPUk1BVF9CR1JBMTAxMDEwMjoKKwkJKmRlcHRoID0gMzA7CisJCSpicHAgPSAzMjsK KwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9B QkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JH UkE4ODg4OgorCQkqZGVwdGggPSAzMjsKKwkJKmJwcCA9IDMyOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlEUk1fREVCVUdfS01TKCJ1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQgJXNcbiIsCisJCQkg ICAgICBkcm1fZ2V0X2Zvcm1hdF9uYW1lKGZvcm1hdCkpOworCQkqZGVwdGggPSAwOworCQkqYnBw ID0gMDsKKwkJYnJlYWs7CisJfQorfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfZ2V0X2JwcF9kZXB0 aCk7CisKKy8qKgorICogZHJtX2Zvcm1hdF9udW1fcGxhbmVzIC0gZ2V0IHRoZSBudW1iZXIgb2Yg cGxhbmVzIGZvciBmb3JtYXQKKyAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCAoRFJNX0ZPUk1BVF8q KQorICoKKyAqIFJldHVybnM6CisgKiBUaGUgbnVtYmVyIG9mIHBsYW5lcyB1c2VkIGJ5IHRoZSBz cGVjaWZpZWQgcGl4ZWwgZm9ybWF0LgorICovCitpbnQgZHJtX2Zvcm1hdF9udW1fcGxhbmVzKHVp bnQzMl90IGZvcm1hdCkKK3sKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9Z VVY0MTA6CisJY2FzZSBEUk1fRk9STUFUX1lWVTQxMDoKKwljYXNlIERSTV9GT1JNQVRfWVVWNDEx OgorCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTE6CisJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKKwlj YXNlIERSTV9GT1JNQVRfWVZVNDIwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjI6CisJY2FzZSBE Uk1fRk9STUFUX1lWVTQyMjoKKwljYXNlIERSTV9GT1JNQVRfWVVWNDQ0OgorCWNhc2UgRFJNX0ZP Uk1BVF9ZVlU0NDQ6CisJCXJldHVybiAzOworCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCWNhc2Ug RFJNX0ZPUk1BVF9OVjIxOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjE2OgorCWNhc2UgRFJNX0ZPUk1B VF9OVjYxOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjI0OgorCWNhc2UgRFJNX0ZPUk1BVF9OVjQyOgor CQlyZXR1cm4gMjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9Cit9CitFWFBPUlRfU1lNQk9M KGRybV9mb3JtYXRfbnVtX3BsYW5lcyk7CisKKy8qKgorICogZHJtX2Zvcm1hdF9wbGFuZV9jcHAg LSBkZXRlcm1pbmUgdGhlIGJ5dGVzIHBlciBwaXhlbCB2YWx1ZQorICogQGZvcm1hdDogcGl4ZWwg Zm9ybWF0IChEUk1fRk9STUFUXyopCisgKiBAcGxhbmU6IHBsYW5lIGluZGV4CisgKgorICogUmV0 dXJuczoKKyAqIFRoZSBieXRlcyBwZXIgcGl4ZWwgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgcGxh bmUuCisgKi8KK2ludCBkcm1fZm9ybWF0X3BsYW5lX2NwcCh1aW50MzJfdCBmb3JtYXQsIGludCBw bGFuZSkKK3sKKwl1bnNpZ25lZCBpbnQgZGVwdGg7CisJaW50IGJwcDsKKworCWlmIChwbGFuZSA+ PSBkcm1fZm9ybWF0X251bV9wbGFuZXMoZm9ybWF0KSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2gg KGZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVllV OgorCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgorCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgorCQlyZXR1 cm4gMjsKKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwljYXNlIERSTV9GT1JNQVRfTlYyMToKKwlj YXNlIERSTV9GT1JNQVRfTlYxNjoKKwljYXNlIERSTV9GT1JNQVRfTlY2MToKKwljYXNlIERSTV9G T1JNQVRfTlYyNDoKKwljYXNlIERSTV9GT1JNQVRfTlY0MjoKKwkJcmV0dXJuIHBsYW5lID8gMiA6 IDE7CisJY2FzZSBEUk1fRk9STUFUX1lVVjQxMDoKKwljYXNlIERSTV9GT1JNQVRfWVZVNDEwOgor CWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MTE6CisJY2FzZSBEUk1fRk9STUFUX1lWVTQxMToKKwljYXNl IERSTV9GT1JNQVRfWVVWNDIwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6CisJY2FzZSBEUk1f Rk9STUFUX1lVVjQyMjoKKwljYXNlIERSTV9GT1JNQVRfWVZVNDIyOgorCWNhc2UgRFJNX0ZPUk1B VF9ZVVY0NDQ6CisJY2FzZSBEUk1fRk9STUFUX1lWVTQ0NDoKKwkJcmV0dXJuIDE7CisJZGVmYXVs dDoKKwkJZHJtX2ZiX2dldF9icHBfZGVwdGgoZm9ybWF0LCAmZGVwdGgsICZicHApOworCQlyZXR1 cm4gYnBwID4+IDM7CisJfQorfQorRVhQT1JUX1NZTUJPTChkcm1fZm9ybWF0X3BsYW5lX2NwcCk7 CisKKy8qKgorICogZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyAtIGdldCB0aGUg aG9yaXpvbnRhbCBjaHJvbWEgc3Vic2FtcGxpbmcgZmFjdG9yCisgKiBAZm9ybWF0OiBwaXhlbCBm b3JtYXQgKERSTV9GT1JNQVRfKikKKyAqCisgKiBSZXR1cm5zOgorICogVGhlIGhvcml6b250YWwg Y2hyb21hIHN1YnNhbXBsaW5nIGZhY3RvciBmb3IgdGhlCisgKiBzcGVjaWZpZWQgcGl4ZWwgZm9y bWF0LgorICovCitpbnQgZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyh1aW50MzJf dCBmb3JtYXQpCit7CisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfWVVWNDEx OgorCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTE6CisJY2FzZSBEUk1fRk9STUFUX1lVVjQxMDoKKwlj YXNlIERSTV9GT1JNQVRfWVZVNDEwOgorCQlyZXR1cm4gNDsKKwljYXNlIERSTV9GT1JNQVRfWVVZ VjoKKwljYXNlIERSTV9GT1JNQVRfWVZZVToKKwljYXNlIERSTV9GT1JNQVRfVVlWWToKKwljYXNl IERSTV9GT1JNQVRfVllVWToKKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwljYXNlIERSTV9GT1JN QVRfTlYyMToKKwljYXNlIERSTV9GT1JNQVRfTlYxNjoKKwljYXNlIERSTV9GT1JNQVRfTlY2MToK KwljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjI6CisJY2Fz ZSBEUk1fRk9STUFUX1lVVjQyMDoKKwljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgorCQlyZXR1cm4g MjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mb3Jt YXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcpOworCisvKioKKyAqIGRybV9mb3JtYXRfdmVydF9j aHJvbWFfc3Vic2FtcGxpbmcgLSBnZXQgdGhlIHZlcnRpY2FsIGNocm9tYSBzdWJzYW1wbGluZyBm YWN0b3IKKyAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCAoRFJNX0ZPUk1BVF8qKQorICoKKyAqIFJl dHVybnM6CisgKiBUaGUgdmVydGljYWwgY2hyb21hIHN1YnNhbXBsaW5nIGZhY3RvciBmb3IgdGhl CisgKiBzcGVjaWZpZWQgcGl4ZWwgZm9ybWF0LgorICovCitpbnQgZHJtX2Zvcm1hdF92ZXJ0X2No cm9tYV9zdWJzYW1wbGluZyh1aW50MzJfdCBmb3JtYXQpCit7CisJc3dpdGNoIChmb3JtYXQpIHsK KwljYXNlIERSTV9GT1JNQVRfWVVWNDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTA6CisJCXJl dHVybiA0OworCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6CisJY2FzZSBEUk1fRk9STUFUX1lWVTQy MDoKKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKKwljYXNlIERSTV9GT1JNQVRfTlYyMToKKwkJcmV0 dXJuIDI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorfQorRVhQT1JUX1NZTUJPTChkcm1f Zm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKTsKKworLyoqCisgKiBkcm1fZm9ybWF0X3Bs YW5lX3dpZHRoIC0gd2lkdGggb2YgdGhlIHBsYW5lIGdpdmVuIHRoZSBmaXJzdCBwbGFuZQorICog QHdpZHRoOiB3aWR0aCBvZiB0aGUgZmlyc3QgcGxhbmUKKyAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1h dAorICogQHBsYW5lOiBwbGFuZSBpbmRleAorICoKKyAqIFJldHVybnM6CisgKiBUaGUgd2lkdGgg b2YgQHBsYW5lLCBnaXZlbiB0aGF0IHRoZSB3aWR0aCBvZiB0aGUgZmlyc3QgcGxhbmUgaXMgQHdp ZHRoLgorICovCitpbnQgZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChpbnQgd2lkdGgsIHVpbnQzMl90 IGZvcm1hdCwgaW50IHBsYW5lKQoreworCWlmIChwbGFuZSA+PSBkcm1fZm9ybWF0X251bV9wbGFu ZXMoZm9ybWF0KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocGxhbmUgPT0gMCkKKwkJcmV0dXJuIHdp ZHRoOworCisJcmV0dXJuIHdpZHRoIC8gZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGlu Zyhmb3JtYXQpOworfQorRVhQT1JUX1NZTUJPTChkcm1fZm9ybWF0X3BsYW5lX3dpZHRoKTsKKwor LyoqCisgKiBkcm1fZm9ybWF0X3BsYW5lX2hlaWdodCAtIGhlaWdodCBvZiB0aGUgcGxhbmUgZ2l2 ZW4gdGhlIGZpcnN0IHBsYW5lCisgKiBAaGVpZ2h0OiBoZWlnaHQgb2YgdGhlIGZpcnN0IHBsYW5l CisgKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQKKyAqIEBwbGFuZTogcGxhbmUgaW5kZXgKKyAqCisg KiBSZXR1cm5zOgorICogVGhlIGhlaWdodCBvZiBAcGxhbmUsIGdpdmVuIHRoYXQgdGhlIGhlaWdo dCBvZiB0aGUgZmlyc3QgcGxhbmUgaXMgQGhlaWdodC4KKyAqLworaW50IGRybV9mb3JtYXRfcGxh bmVfaGVpZ2h0KGludCBoZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwgaW50IHBsYW5lKQoreworCWlm IChwbGFuZSA+PSBkcm1fZm9ybWF0X251bV9wbGFuZXMoZm9ybWF0KSkKKwkJcmV0dXJuIDA7CisK KwlpZiAocGxhbmUgPT0gMCkKKwkJcmV0dXJuIGhlaWdodDsKKworCXJldHVybiBoZWlnaHQgLyBk cm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKGZvcm1hdCk7Cit9CitFWFBPUlRfU1lN Qk9MKGRybV9mb3JtYXRfcGxhbmVfaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2Ry bVAuaCBiL2luY2x1ZGUvZHJtL2RybVAuaAppbmRleCA4NGYxYThlZWZiZGIuLmM4ODc5MDU3MDg0 ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAu aApAQCAtNjYsNiArNjYsNyBAQAogCiAjaW5jbHVkZSA8ZHJtL2RybV9hZ3BzdXBwb3J0Lmg+CiAj aW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KICNp bmNsdWRlIDxkcm0vZHJtX2dsb2JhbC5oPgogI2luY2x1ZGUgPGRybS9kcm1faGFzaHRhYi5oPgog I2luY2x1ZGUgPGRybS9kcm1fbWVtX3V0aWwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2Ry bV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCmluZGV4IGQxNTU5Y2QwNGUzZC4uMWI4 MGMwMjY4ZDhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCisrKyBiL2luY2x1 ZGUvZHJtL2RybV9jcnRjLmgKQEAgLTI1NDAsMTUgKzI1NDAsNiBAQCBleHRlcm4gaW50IGRybV9t b2RlX3BsYW5lX3NldF9vYmpfcHJvcChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIGV4dGVybiBp bnQgZHJtX21vZGVfYXRvbWljX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJIHZv aWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIAotZXh0ZXJuIHZvaWQgZHJt X2ZiX2dldF9icHBfZGVwdGgodWludDMyX3QgZm9ybWF0LCB1bnNpZ25lZCBpbnQgKmRlcHRoLAot CQkJCSBpbnQgKmJwcCk7Ci1leHRlcm4gaW50IGRybV9mb3JtYXRfbnVtX3BsYW5lcyh1aW50MzJf dCBmb3JtYXQpOwotZXh0ZXJuIGludCBkcm1fZm9ybWF0X3BsYW5lX2NwcCh1aW50MzJfdCBmb3Jt YXQsIGludCBwbGFuZSk7Ci1leHRlcm4gaW50IGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2Ft cGxpbmcodWludDMyX3QgZm9ybWF0KTsKLWV4dGVybiBpbnQgZHJtX2Zvcm1hdF92ZXJ0X2Nocm9t YV9zdWJzYW1wbGluZyh1aW50MzJfdCBmb3JtYXQpOwotZXh0ZXJuIGludCBkcm1fZm9ybWF0X3Bs YW5lX3dpZHRoKGludCB3aWR0aCwgdWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpOwotZXh0ZXJu IGludCBkcm1fZm9ybWF0X3BsYW5lX2hlaWdodChpbnQgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQs IGludCBwbGFuZSk7Ci1leHRlcm4gY29uc3QgY2hhciAqZHJtX2dldF9mb3JtYXRfbmFtZSh1aW50 MzJfdCBmb3JtYXQpOwogZXh0ZXJuIHN0cnVjdCBkcm1fcHJvcGVydHkgKmRybV9tb2RlX2NyZWF0 ZV9yb3RhdGlvbl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJCSAgICAg IHVuc2lnbmVkIGludCBzdXBwb3J0ZWRfcm90YXRpb25zKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQg ZHJtX3JvdGF0aW9uX3NpbXBsaWZ5KHVuc2lnbmVkIGludCByb3RhdGlvbiwKZGlmZiAtLWdpdCBh L2luY2x1ZGUvZHJtL2RybV9mb3VyY2MuaCBiL2luY2x1ZGUvZHJtL2RybV9mb3VyY2MuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdmOTBhMzk2Y2YyYgotLS0gL2Rl di9udWxsCisrKyBiL2luY2x1ZGUvZHJtL2RybV9mb3VyY2MuaApAQCAtMCwwICsxLDM3IEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDE2IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hh cnRAaWRlYXNvbmJvYXJkLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3Vt ZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBw cm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxs IGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5k CisgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3QgYmUgdXNlZCBp biBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9u IG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJt aXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zCisg KiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2Uu ICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3 YXJyYW50eS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xBSU0gQUxMIFdBUlJB TlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKyAqIElOQ0xVRElORyBBTEwgSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8KKyAq IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVD SUFMLCBJTkRJUkVDVCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VT IFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCisgKiBEQVRBIE9SIFBST0ZJ VFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVS CisgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCisgKiBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaWZu ZGVmIF9fRFJNX0ZPVVJDQ19IX18KKyNkZWZpbmUgX19EUk1fRk9VUkNDX0hfXworCisjaW5jbHVk ZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDx1YXBpL2RybS9kcm1fZm91cmNjLmg+CisKK3Zv aWQgZHJtX2ZiX2dldF9icHBfZGVwdGgodWludDMyX3QgZm9ybWF0LCB1bnNpZ25lZCBpbnQgKmRl cHRoLCBpbnQgKmJwcCk7CitpbnQgZHJtX2Zvcm1hdF9udW1fcGxhbmVzKHVpbnQzMl90IGZvcm1h dCk7CitpbnQgZHJtX2Zvcm1hdF9wbGFuZV9jcHAodWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUp OworaW50IGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcodWludDMyX3QgZm9ybWF0 KTsKK2ludCBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1h dCk7CitpbnQgZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChpbnQgd2lkdGgsIHVpbnQzMl90IGZvcm1h dCwgaW50IHBsYW5lKTsKK2ludCBkcm1fZm9ybWF0X3BsYW5lX2hlaWdodChpbnQgaGVpZ2h0LCB1 aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSk7Citjb25zdCBjaGFyICpkcm1fZ2V0X2Zvcm1hdF9u YW1lKHVpbnQzMl90IGZvcm1hdCk7CisKKyNlbmRpZiAvKiBfX0RSTV9GT1VSQ0NfSF9fICovCi0t IApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFydAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==