From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: [PATCH v3.1 01/15] drm: Move format-related helpers to drm_fourcc.c Date: Thu, 9 Jun 2016 12:54:08 +0300 Message-ID: <1465466048-2020-1-git-send-email-laurent.pinchart@ideasonboard.com> References: <20160609083618.GL3363@phenom.ffwll.local> 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 [185.26.127.97]) by gabe.freedesktop.org (Postfix) with ESMTPS id F27956EB16 for ; Thu, 9 Jun 2016 09:54:11 +0000 (UTC) In-Reply-To: <20160609083618.GL3363@phenom.ffwll.local> 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 L2RybV9mb3VyY2MuaAoKQ2hhbmdlcyBzaW5jZSB2MzoKCi0gTW92ZWQgdGhlIGRvY3VtZW50YXRp b24gdG8gYSBuZXcgc3Vic2VjdGlvbiBvZiB0aGUgbW9kZXNldHRpbmcgY2hhcHRlcgoKZGlmZiAt LWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbCBiL0RvY3VtZW50YXRpb24vRG9j Qm9vay9ncHUudG1wbAppbmRleCA3NTg2YmY3NWY2MmUuLjcwNDNiMjcwY2Y1NCAxMDA2NDQKLS0t IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9j Qm9vay9ncHUudG1wbApAQCAtMTAxOCw2ICsxMDE4LDExIEBAIGludCBtYXhfd2lkdGgsIG1heF9o ZWlnaHQ7PC9zeW5vcHNpcz4KICAgICAgIDwvcGFyYT4KICAgICA8L3NlY3QyPgogICAgIDxzZWN0 Mj4KKyAgICAgIDx0aXRsZT5EUk0gRm9ybWF0IEhhbmRsaW5nPC90aXRsZT4KKyFJaW5jbHVkZS9k cm0vZHJtX2ZvdXJjYy5oCishRWRyaXZlcnMvZ3B1L2RybS9kcm1fZm91cmNjLmMKKyAgICA8L3Nl Y3QyPgorICAgIDxzZWN0Mj4KICAgICAgIDx0aXRsZT5EdW1iIEJ1ZmZlciBPYmplY3RzPC90aXRs ZT4KICAgICAgIDxwYXJhPgogCVRoZSBLTVMgQVBJIGRvZXNuJ3Qgc3RhbmRhcmRpemUgYmFja2lu ZyBzdG9yYWdlIG9iamVjdCBjcmVhdGlvbiBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCBiZTQzYWZiMDhjNjku LmFhMjRhZjM1YzA2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtOCw3ICs4LDcgQEAgZHJtLXkgICAgICAgOj0J ZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9jYWNoZS5vIFwKIAkJZHJtX2xvY2subyBkcm1fbWVt b3J5Lm8gZHJtX2Rydi5vIGRybV92bS5vIFwKIAkJZHJtX3NjYXR0ZXIubyBkcm1fcGNpLm8gXAog CQlkcm1fcGxhdGZvcm0ubyBkcm1fc3lzZnMubyBkcm1faGFzaHRhYi5vIGRybV9tbS5vIFwKLQkJ ZHJtX2NydGMubyBkcm1fbW9kZXMubyBkcm1fZWRpZC5vIFwKKwkJZHJtX2NydGMubyBkcm1fZm91 cmNjLm8gZHJtX21vZGVzLm8gZHJtX2VkaWQubyBcCiAJCWRybV9pbmZvLm8gZHJtX2RlYnVnZnMu byBkcm1fZW5jb2Rlcl9zbGF2ZS5vIFwKIAkJZHJtX3RyYWNlX3BvaW50cy5vIGRybV9nbG9iYWwu byBkcm1fcHJpbWUubyBcCiAJCWRybV9yZWN0Lm8gZHJtX3ZtYV9tYW5hZ2VyLm8gZHJtX2ZsaXBf d29yay5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jIGIvZHJpdmVy cy9ncHUvZHJtL2RybV9jcnRjLmMKaW5kZXggMGUzY2M2NmFhOGI3Li5lNTM2OTUyOWFmMDYgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fY3J0Yy5jCkBAIC0yMzksMzcgKzIzOSw2IEBAIGNvbnN0IGNoYXIgKmRybV9nZXRfc3Vi cGl4ZWxfb3JkZXJfbmFtZShlbnVtIHN1YnBpeGVsX29yZGVyIG9yZGVyKQogfQogRVhQT1JUX1NZ TUJPTChkcm1fZ2V0X3N1YnBpeGVsX29yZGVyX25hbWUpOwogCi1zdGF0aWMgY2hhciBwcmludGFi bGVfY2hhcihpbnQgYykKLXsKLQlyZXR1cm4gaXNhc2NpaShjKSAmJiBpc3ByaW50KGMpID8gYyA6 ICc/JzsKLX0KLQotLyoqCi0gKiBkcm1fZ2V0X2Zvcm1hdF9uYW1lIC0gcmV0dXJuIGEgc3RyaW5n IGZvciBkcm0gZm91cmNjIGZvcm1hdAotICogQGZvcm1hdDogZm9ybWF0IHRvIGNvbXB1dGUgbmFt ZSBvZgotICoKLSAqIE5vdGUgdGhhdCB0aGUgYnVmZmVyIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBp cyBnbG9iYWxseSBzaGFyZWQgYW5kIG93bmVkIGJ5Ci0gKiB0aGUgZnVuY3Rpb24gaXRzZWxmLgot ICoKLSAqIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBtdWx0aXRocmVhZGluZyBzYWZlLgotICov Ci1jb25zdCBjaGFyICpkcm1fZ2V0X2Zvcm1hdF9uYW1lKHVpbnQzMl90IGZvcm1hdCkKLXsKLQlz dGF0aWMgY2hhciBidWZbMzJdOwotCi0Jc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKLQkJICIl YyVjJWMlYyAlcy1lbmRpYW4gKDB4JTA4eCkiLAotCQkgcHJpbnRhYmxlX2NoYXIoZm9ybWF0ICYg MHhmZiksCi0JCSBwcmludGFibGVfY2hhcigoZm9ybWF0ID4+IDgpICYgMHhmZiksCi0JCSBwcmlu dGFibGVfY2hhcigoZm9ybWF0ID4+IDE2KSAmIDB4ZmYpLAotCQkgcHJpbnRhYmxlX2NoYXIoKGZv cm1hdCA+PiAyNCkgJiAweDdmKSwKLQkJIGZvcm1hdCAmIERSTV9GT1JNQVRfQklHX0VORElBTiA/ ICJiaWciIDogImxpdHRsZSIsCi0JCSBmb3JtYXQpOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLUVYUE9S VF9TWU1CT0woZHJtX2dldF9mb3JtYXRfbmFtZSk7Ci0KIC8qCiAgKiBJbnRlcm5hbCBmdW5jdGlv biB0byBhc3NpZ24gYSBzbG90IGluIHRoZSBvYmplY3QgaWRyIGFuZCBvcHRpb25hbGx5CiAgKiBy ZWdpc3RlciB0aGUgb2JqZWN0IGludG8gdGhlIGlkci4KQEAgLTU1NDQsMjY0ICs1NTEzLDYgQEAg aW50IGRybV9tb2RlX2Rlc3Ryb3lfZHVtYl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAog fQogCiAvKioKLSAqIGRybV9mYl9nZXRfYnBwX2RlcHRoIC0gZ2V0IHRoZSBicHAvZGVwdGggdmFs dWVzIGZvciBmb3JtYXQKLSAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCAoRFJNX0ZPUk1BVF8qKQot ICogQGRlcHRoOiBzdG9yYWdlIGZvciB0aGUgZGVwdGggdmFsdWUKLSAqIEBicHA6IHN0b3JhZ2Ug Zm9yIHRoZSBicHAgdmFsdWUKLSAqCi0gKiBUaGlzIG9ubHkgc3VwcG9ydHMgUkdCIGZvcm1hdHMg aGVyZSBmb3IgY29tcGF0IHdpdGggY29kZSB0aGF0IGRvZXNuJ3QgdXNlCi0gKiBwaXhlbCBmb3Jt YXRzIGRpcmVjdGx5IHlldC4KLSAqLwotdm9pZCBkcm1fZmJfZ2V0X2JwcF9kZXB0aCh1aW50MzJf dCBmb3JtYXQsIHVuc2lnbmVkIGludCAqZGVwdGgsCi0JCQkgIGludCAqYnBwKQotewotCXN3aXRj aCAoZm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX0M4OgotCWNhc2UgRFJNX0ZPUk1BVF9SR0Iz MzI6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUjIzMzoKLQkJKmRlcHRoID0gODsKLQkJKmJwcCA9IDg7 Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKLQljYXNlIERSTV9GT1JNQVRf WEJHUjE1NTU6Ci0JY2FzZSBEUk1fRk9STUFUX1JHQlg1NTUxOgotCWNhc2UgRFJNX0ZPUk1BVF9C R1JYNTU1MToKLQljYXNlIERSTV9GT1JNQVRfQVJHQjE1NTU6Ci0JY2FzZSBEUk1fRk9STUFUX0FC R1IxNTU1OgotCWNhc2UgRFJNX0ZPUk1BVF9SR0JBNTU1MToKLQljYXNlIERSTV9GT1JNQVRfQkdS QTU1NTE6Ci0JCSpkZXB0aCA9IDE1OwotCQkqYnBwID0gMTY7Ci0JCWJyZWFrOwotCWNhc2UgRFJN X0ZPUk1BVF9SR0I1NjU6Ci0JY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKLQkJKmRlcHRoID0gMTY7 Ci0JCSpicHAgPSAxNjsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKLQljYXNl IERSTV9GT1JNQVRfQkdSODg4OgotCQkqZGVwdGggPSAyNDsKLQkJKmJwcCA9IDI0OwotCQlicmVh azsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4 OgotCWNhc2UgRFJNX0ZPUk1BVF9SR0JYODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6 Ci0JCSpkZXB0aCA9IDI0OwotCQkqYnBwID0gMzI7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1B VF9YUkdCMjEwMTAxMDoKLQljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6Ci0JY2FzZSBEUk1f Rk9STUFUX1JHQlgxMDEwMTAyOgotCWNhc2UgRFJNX0ZPUk1BVF9CR1JYMTAxMDEwMjoKLQljYXNl IERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgot CWNhc2UgRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMjoKLQljYXNlIERSTV9GT1JNQVRfQkdSQTEwMTAx MDI6Ci0JCSpkZXB0aCA9IDMwOwotCQkqYnBwID0gMzI7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZP Uk1BVF9BUkdCODg4ODoKLQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Ci0JY2FzZSBEUk1fRk9S TUFUX1JHQkE4ODg4OgotCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKLQkJKmRlcHRoID0gMzI7 Ci0JCSpicHAgPSAzMjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFJNX0RFQlVHX0tNUygidW5z dXBwb3J0ZWQgcGl4ZWwgZm9ybWF0ICVzXG4iLAotCQkJICAgICAgZHJtX2dldF9mb3JtYXRfbmFt ZShmb3JtYXQpKTsKLQkJKmRlcHRoID0gMDsKLQkJKmJwcCA9IDA7Ci0JCWJyZWFrOwotCX0KLX0K LUVYUE9SVF9TWU1CT0woZHJtX2ZiX2dldF9icHBfZGVwdGgpOwotCi0vKioKLSAqIGRybV9mb3Jt YXRfbnVtX3BsYW5lcyAtIGdldCB0aGUgbnVtYmVyIG9mIHBsYW5lcyBmb3IgZm9ybWF0Ci0gKiBA Zm9ybWF0OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKLSAqCi0gKiBSZXR1cm5zOgotICog VGhlIG51bWJlciBvZiBwbGFuZXMgdXNlZCBieSB0aGUgc3BlY2lmaWVkIHBpeGVsIGZvcm1hdC4K LSAqLwotaW50IGRybV9mb3JtYXRfbnVtX3BsYW5lcyh1aW50MzJfdCBmb3JtYXQpCi17Ci0Jc3dp dGNoIChmb3JtYXQpIHsKLQljYXNlIERSTV9GT1JNQVRfWVVWNDEwOgotCWNhc2UgRFJNX0ZPUk1B VF9ZVlU0MTA6Ci0JY2FzZSBEUk1fRk9STUFUX1lVVjQxMToKLQljYXNlIERSTV9GT1JNQVRfWVZV NDExOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6Ci0JY2FzZSBEUk1fRk9STUFUX1lWVTQyMDoK LQljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjI6Ci0JY2Fz ZSBEUk1fRk9STUFUX1lVVjQ0NDoKLQljYXNlIERSTV9GT1JNQVRfWVZVNDQ0OgotCQlyZXR1cm4g MzsKLQljYXNlIERSTV9GT1JNQVRfTlYxMjoKLQljYXNlIERSTV9GT1JNQVRfTlYyMToKLQljYXNl IERSTV9GT1JNQVRfTlYxNjoKLQljYXNlIERSTV9GT1JNQVRfTlY2MToKLQljYXNlIERSTV9GT1JN QVRfTlYyNDoKLQljYXNlIERSTV9GT1JNQVRfTlY0MjoKLQkJcmV0dXJuIDI7Ci0JZGVmYXVsdDoK LQkJcmV0dXJuIDE7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChkcm1fZm9ybWF0X251bV9wbGFuZXMp OwotCi0vKioKLSAqIGRybV9mb3JtYXRfcGxhbmVfY3BwIC0gZGV0ZXJtaW5lIHRoZSBieXRlcyBw ZXIgcGl4ZWwgdmFsdWUKLSAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCAoRFJNX0ZPUk1BVF8qKQot ICogQHBsYW5lOiBwbGFuZSBpbmRleAotICoKLSAqIFJldHVybnM6Ci0gKiBUaGUgYnl0ZXMgcGVy IHBpeGVsIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHBsYW5lLgotICovCi1pbnQgZHJtX2Zvcm1h dF9wbGFuZV9jcHAodWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpCi17Ci0JdW5zaWduZWQgaW50 IGRlcHRoOwotCWludCBicHA7Ci0KLQlpZiAocGxhbmUgPj0gZHJtX2Zvcm1hdF9udW1fcGxhbmVz KGZvcm1hdCkpCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoIChmb3JtYXQpIHsKLQljYXNlIERSTV9G T1JNQVRfWVVZVjoKLQljYXNlIERSTV9GT1JNQVRfWVZZVToKLQljYXNlIERSTV9GT1JNQVRfVVlW WToKLQljYXNlIERSTV9GT1JNQVRfVllVWToKLQkJcmV0dXJuIDI7Ci0JY2FzZSBEUk1fRk9STUFU X05WMTI6Ci0JY2FzZSBEUk1fRk9STUFUX05WMjE6Ci0JY2FzZSBEUk1fRk9STUFUX05WMTY6Ci0J Y2FzZSBEUk1fRk9STUFUX05WNjE6Ci0JY2FzZSBEUk1fRk9STUFUX05WMjQ6Ci0JY2FzZSBEUk1f Rk9STUFUX05WNDI6Ci0JCXJldHVybiBwbGFuZSA/IDIgOiAxOwotCWNhc2UgRFJNX0ZPUk1BVF9Z VVY0MTA6Ci0JY2FzZSBEUk1fRk9STUFUX1lWVTQxMDoKLQljYXNlIERSTV9GT1JNQVRfWVVWNDEx OgotCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTE6Ci0JY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKLQlj YXNlIERSTV9GT1JNQVRfWVZVNDIwOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjI6Ci0JY2FzZSBE Uk1fRk9STUFUX1lWVTQyMjoKLQljYXNlIERSTV9GT1JNQVRfWVVWNDQ0OgotCWNhc2UgRFJNX0ZP Uk1BVF9ZVlU0NDQ6Ci0JCXJldHVybiAxOwotCWRlZmF1bHQ6Ci0JCWRybV9mYl9nZXRfYnBwX2Rl cHRoKGZvcm1hdCwgJmRlcHRoLCAmYnBwKTsKLQkJcmV0dXJuIGJwcCA+PiAzOwotCX0KLX0KLUVY UE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9wbGFuZV9jcHApOwotCi0vKioKLSAqIGRybV9mb3JtYXRf aG9yel9jaHJvbWFfc3Vic2FtcGxpbmcgLSBnZXQgdGhlIGhvcml6b250YWwgY2hyb21hIHN1YnNh bXBsaW5nIGZhY3RvcgotICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0IChEUk1fRk9STUFUXyopCi0g KgotICogUmV0dXJuczoKLSAqIFRoZSBob3Jpem9udGFsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0 b3IgZm9yIHRoZQotICogc3BlY2lmaWVkIHBpeGVsIGZvcm1hdC4KLSAqLwotaW50IGRybV9mb3Jt YXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcodWludDMyX3QgZm9ybWF0KQotewotCXN3aXRjaCAo Zm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX1lVVjQxMToKLQljYXNlIERSTV9GT1JNQVRfWVZV NDExOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MTA6Ci0JY2FzZSBEUk1fRk9STUFUX1lWVTQxMDoK LQkJcmV0dXJuIDQ7Ci0JY2FzZSBEUk1fRk9STUFUX1lVWVY6Ci0JY2FzZSBEUk1fRk9STUFUX1lW WVU6Ci0JY2FzZSBEUk1fRk9STUFUX1VZVlk6Ci0JY2FzZSBEUk1fRk9STUFUX1ZZVVk6Ci0JY2Fz ZSBEUk1fRk9STUFUX05WMTI6Ci0JY2FzZSBEUk1fRk9STUFUX05WMjE6Ci0JY2FzZSBEUk1fRk9S TUFUX05WMTY6Ci0JY2FzZSBEUk1fRk9STUFUX05WNjE6Ci0JY2FzZSBEUk1fRk9STUFUX1lVVjQy MjoKLQljYXNlIERSTV9GT1JNQVRfWVZVNDIyOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6Ci0J Y2FzZSBEUk1fRk9STUFUX1lWVTQyMDoKLQkJcmV0dXJuIDI7Ci0JZGVmYXVsdDoKLQkJcmV0dXJu IDE7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBs aW5nKTsKLQotLyoqCi0gKiBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nIC0gZ2V0 IHRoZSB2ZXJ0aWNhbCBjaHJvbWEgc3Vic2FtcGxpbmcgZmFjdG9yCi0gKiBAZm9ybWF0OiBwaXhl bCBmb3JtYXQgKERSTV9GT1JNQVRfKikKLSAqCi0gKiBSZXR1cm5zOgotICogVGhlIHZlcnRpY2Fs IGNocm9tYSBzdWJzYW1wbGluZyBmYWN0b3IgZm9yIHRoZQotICogc3BlY2lmaWVkIHBpeGVsIGZv cm1hdC4KLSAqLwotaW50IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcodWludDMy X3QgZm9ybWF0KQotewotCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9STUFUX1lVVjQx MDoKLQljYXNlIERSTV9GT1JNQVRfWVZVNDEwOgotCQlyZXR1cm4gNDsKLQljYXNlIERSTV9GT1JN QVRfWVVWNDIwOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6Ci0JY2FzZSBEUk1fRk9STUFUX05W MTI6Ci0JY2FzZSBEUk1fRk9STUFUX05WMjE6Ci0JCXJldHVybiAyOwotCWRlZmF1bHQ6Ci0JCXJl dHVybiAxOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJz YW1wbGluZyk7Ci0KLS8qKgotICogZHJtX2Zvcm1hdF9wbGFuZV93aWR0aCAtIHdpZHRoIG9mIHRo ZSBwbGFuZSBnaXZlbiB0aGUgZmlyc3QgcGxhbmUKLSAqIEB3aWR0aDogd2lkdGggb2YgdGhlIGZp cnN0IHBsYW5lCi0gKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQKLSAqIEBwbGFuZTogcGxhbmUgaW5k ZXgKLSAqCi0gKiBSZXR1cm5zOgotICogVGhlIHdpZHRoIG9mIEBwbGFuZSwgZ2l2ZW4gdGhhdCB0 aGUgd2lkdGggb2YgdGhlIGZpcnN0IHBsYW5lIGlzIEB3aWR0aC4KLSAqLwotaW50IGRybV9mb3Jt YXRfcGxhbmVfd2lkdGgoaW50IHdpZHRoLCB1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSkKLXsK LQlpZiAocGxhbmUgPj0gZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZvcm1hdCkpCi0JCXJldHVybiAw OwotCi0JaWYgKHBsYW5lID09IDApCi0JCXJldHVybiB3aWR0aDsKLQotCXJldHVybiB3aWR0aCAv IGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcoZm9ybWF0KTsKLX0KLUVYUE9SVF9T WU1CT0woZHJtX2Zvcm1hdF9wbGFuZV93aWR0aCk7Ci0KLS8qKgotICogZHJtX2Zvcm1hdF9wbGFu ZV9oZWlnaHQgLSBoZWlnaHQgb2YgdGhlIHBsYW5lIGdpdmVuIHRoZSBmaXJzdCBwbGFuZQotICog QGhlaWdodDogaGVpZ2h0IG9mIHRoZSBmaXJzdCBwbGFuZQotICogQGZvcm1hdDogcGl4ZWwgZm9y bWF0Ci0gKiBAcGxhbmU6IHBsYW5lIGluZGV4Ci0gKgotICogUmV0dXJuczoKLSAqIFRoZSBoZWln aHQgb2YgQHBsYW5lLCBnaXZlbiB0aGF0IHRoZSBoZWlnaHQgb2YgdGhlIGZpcnN0IHBsYW5lIGlz IEBoZWlnaHQuCi0gKi8KLWludCBkcm1fZm9ybWF0X3BsYW5lX2hlaWdodChpbnQgaGVpZ2h0LCB1 aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSkKLXsKLQlpZiAocGxhbmUgPj0gZHJtX2Zvcm1hdF9u dW1fcGxhbmVzKGZvcm1hdCkpCi0JCXJldHVybiAwOwotCi0JaWYgKHBsYW5lID09IDApCi0JCXJl dHVybiBoZWlnaHQ7Ci0KLQlyZXR1cm4gaGVpZ2h0IC8gZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9z dWJzYW1wbGluZyhmb3JtYXQpOwotfQotRVhQT1JUX1NZTUJPTChkcm1fZm9ybWF0X3BsYW5lX2hl aWdodCk7Ci0KLS8qKgogICogZHJtX3JvdGF0aW9uX3NpbXBsaWZ5KCkgLSBUcnkgdG8gc2ltcGxp ZnkgdGhlIHJvdGF0aW9uCiAgKiBAcm90YXRpb246IFJvdGF0aW9uIHRvIGJlIHNpbXBsaWZpZWQK ICAqIEBzdXBwb3J0ZWRfcm90YXRpb25zOiBTdXBwb3J0ZWQgcm90YXRpb25zCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvdXJjYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3Vy Y2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA2NDVjODVkNWY5 NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm91cmNjLmMKQEAgLTAs MCArMSwzMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgTGF1cmVudCBQaW5jaGFydCA8 bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgorICoKKyAqIERSTSBjb3JlIGZvcm1h dCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1l bnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHBy b3ZpZGVkIHRoYXQKKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwg Y29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQK KyAqIHRoYXQgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vdCBiZSB1c2VkIGlu IGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24g b2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9yIHBlcm1p c3Npb24uICBUaGUgY29weXJpZ2h0IGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbnMKKyAq IGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4g IEl0IGlzIHByb3ZpZGVkICJhcworICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdh cnJhbnR5LgorICoKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBESVNDTEFJTSBBTEwgV0FSUkFO VElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorICogSU5DTFVESU5HIEFMTCBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTworICog RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJ QUwsIElORElSRUNUIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMg V0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKKyAqIERBVEEgT1IgUFJPRklU UywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIK KyAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UKKyAqIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lu Y2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8 bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CisKK3N0YXRpYyBjaGFyIHBy aW50YWJsZV9jaGFyKGludCBjKQoreworCXJldHVybiBpc2FzY2lpKGMpICYmIGlzcHJpbnQoYykg PyBjIDogJz8nOworfQorCisvKioKKyAqIGRybV9nZXRfZm9ybWF0X25hbWUgLSByZXR1cm4gYSBz dHJpbmcgZm9yIGRybSBmb3VyY2MgZm9ybWF0CisgKiBAZm9ybWF0OiBmb3JtYXQgdG8gY29tcHV0 ZSBuYW1lIG9mCisgKgorICogTm90ZSB0aGF0IHRoZSBidWZmZXIgdXNlZCBieSB0aGlzIGZ1bmN0 aW9uIGlzIGdsb2JhbGx5IHNoYXJlZCBhbmQgb3duZWQgYnkKKyAqIHRoZSBmdW5jdGlvbiBpdHNl bGYuCisgKgorICogRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG11bHRpdGhyZWFkaW5nIHNhZmUu CisgKi8KK2NvbnN0IGNoYXIgKmRybV9nZXRfZm9ybWF0X25hbWUodWludDMyX3QgZm9ybWF0KQor eworCXN0YXRpYyBjaGFyIGJ1ZlszMl07CisKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLAor CQkgIiVjJWMlYyVjICVzLWVuZGlhbiAoMHglMDh4KSIsCisJCSBwcmludGFibGVfY2hhcihmb3Jt YXQgJiAweGZmKSwKKwkJIHByaW50YWJsZV9jaGFyKChmb3JtYXQgPj4gOCkgJiAweGZmKSwKKwkJ IHByaW50YWJsZV9jaGFyKChmb3JtYXQgPj4gMTYpICYgMHhmZiksCisJCSBwcmludGFibGVfY2hh cigoZm9ybWF0ID4+IDI0KSAmIDB4N2YpLAorCQkgZm9ybWF0ICYgRFJNX0ZPUk1BVF9CSUdfRU5E SUFOID8gImJpZyIgOiAibGl0dGxlIiwKKwkJIGZvcm1hdCk7CisKKwlyZXR1cm4gYnVmOworfQor RVhQT1JUX1NZTUJPTChkcm1fZ2V0X2Zvcm1hdF9uYW1lKTsKKworLyoqCisgKiBkcm1fZmJfZ2V0 X2JwcF9kZXB0aCAtIGdldCB0aGUgYnBwL2RlcHRoIHZhbHVlcyBmb3IgZm9ybWF0CisgKiBAZm9y bWF0OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKKyAqIEBkZXB0aDogc3RvcmFnZSBmb3Ig dGhlIGRlcHRoIHZhbHVlCisgKiBAYnBwOiBzdG9yYWdlIGZvciB0aGUgYnBwIHZhbHVlCisgKgor ICogVGhpcyBvbmx5IHN1cHBvcnRzIFJHQiBmb3JtYXRzIGhlcmUgZm9yIGNvbXBhdCB3aXRoIGNv ZGUgdGhhdCBkb2Vzbid0IHVzZQorICogcGl4ZWwgZm9ybWF0cyBkaXJlY3RseSB5ZXQuCisgKi8K K3ZvaWQgZHJtX2ZiX2dldF9icHBfZGVwdGgodWludDMyX3QgZm9ybWF0LCB1bnNpZ25lZCBpbnQg KmRlcHRoLAorCQkJICBpbnQgKmJwcCkKK3sKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgRFJN X0ZPUk1BVF9DODoKKwljYXNlIERSTV9GT1JNQVRfUkdCMzMyOgorCWNhc2UgRFJNX0ZPUk1BVF9C R1IyMzM6CisJCSpkZXB0aCA9IDg7CisJCSpicHAgPSA4OworCQlicmVhazsKKwljYXNlIERSTV9G T1JNQVRfWFJHQjE1NTU6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNTU1OgorCWNhc2UgRFJNX0ZP Uk1BVF9SR0JYNTU1MToKKwljYXNlIERSTV9GT1JNQVRfQkdSWDU1NTE6CisJY2FzZSBEUk1fRk9S TUFUX0FSR0IxNTU1OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTU1NToKKwljYXNlIERSTV9GT1JN QVRfUkdCQTU1NTE6CisJY2FzZSBEUk1fRk9STUFUX0JHUkE1NTUxOgorCQkqZGVwdGggPSAxNTsK KwkJKmJwcCA9IDE2OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCWNhc2Ug RFJNX0ZPUk1BVF9CR1I1NjU6CisJCSpkZXB0aCA9IDE2OworCQkqYnBwID0gMTY7CisJCWJyZWFr OworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwkJ KmRlcHRoID0gMjQ7CisJCSpicHAgPSAyNDsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hS R0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdC WDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4OgorCQkqZGVwdGggPSAyNDsKKwkJKmJw cCA9IDMyOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJY2FzZSBE Uk1fRk9STUFUX1hCR1IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JYMTAxMDEwMjoKKwlj YXNlIERSTV9GT1JNQVRfQkdSWDEwMTAxMDI6CisJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEw OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTEw MTAxMDI6CisJY2FzZSBEUk1fRk9STUFUX0JHUkExMDEwMTAyOgorCQkqZGVwdGggPSAzMDsKKwkJ KmJwcCA9IDMyOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6CisJY2FzZSBE Uk1fRk9STUFUX0FCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwljYXNlIERS TV9GT1JNQVRfQkdSQTg4ODg6CisJCSpkZXB0aCA9IDMyOworCQkqYnBwID0gMzI7CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCURSTV9ERUJVR19LTVMoInVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAl c1xuIiwKKwkJCSAgICAgIGRybV9nZXRfZm9ybWF0X25hbWUoZm9ybWF0KSk7CisJCSpkZXB0aCA9 IDA7CisJCSpicHAgPSAwOworCQlicmVhazsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9n ZXRfYnBwX2RlcHRoKTsKKworLyoqCisgKiBkcm1fZm9ybWF0X251bV9wbGFuZXMgLSBnZXQgdGhl IG51bWJlciBvZiBwbGFuZXMgZm9yIGZvcm1hdAorICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0IChE Uk1fRk9STUFUXyopCisgKgorICogUmV0dXJuczoKKyAqIFRoZSBudW1iZXIgb2YgcGxhbmVzIHVz ZWQgYnkgdGhlIHNwZWNpZmllZCBwaXhlbCBmb3JtYXQuCisgKi8KK2ludCBkcm1fZm9ybWF0X251 bV9wbGFuZXModWludDMyX3QgZm9ybWF0KQoreworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBE Uk1fRk9STUFUX1lVVjQxMDoKKwljYXNlIERSTV9GT1JNQVRfWVZVNDEwOgorCWNhc2UgRFJNX0ZP Uk1BVF9ZVVY0MTE6CisJY2FzZSBEUk1fRk9STUFUX1lWVTQxMToKKwljYXNlIERSTV9GT1JNQVRf WVVWNDIwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6CisJY2FzZSBEUk1fRk9STUFUX1lVVjQy MjoKKwljYXNlIERSTV9GT1JNQVRfWVZVNDIyOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0NDQ6CisJ Y2FzZSBEUk1fRk9STUFUX1lWVTQ0NDoKKwkJcmV0dXJuIDM7CisJY2FzZSBEUk1fRk9STUFUX05W MTI6CisJY2FzZSBEUk1fRk9STUFUX05WMjE6CisJY2FzZSBEUk1fRk9STUFUX05WMTY6CisJY2Fz ZSBEUk1fRk9STUFUX05WNjE6CisJY2FzZSBEUk1fRk9STUFUX05WMjQ6CisJY2FzZSBEUk1fRk9S TUFUX05WNDI6CisJCXJldHVybiAyOworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KK0VY UE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9udW1fcGxhbmVzKTsKKworLyoqCisgKiBkcm1fZm9ybWF0 X3BsYW5lX2NwcCAtIGRldGVybWluZSB0aGUgYnl0ZXMgcGVyIHBpeGVsIHZhbHVlCisgKiBAZm9y bWF0OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKKyAqIEBwbGFuZTogcGxhbmUgaW5kZXgK KyAqCisgKiBSZXR1cm5zOgorICogVGhlIGJ5dGVzIHBlciBwaXhlbCB2YWx1ZSBmb3IgdGhlIHNw ZWNpZmllZCBwbGFuZS4KKyAqLworaW50IGRybV9mb3JtYXRfcGxhbmVfY3BwKHVpbnQzMl90IGZv cm1hdCwgaW50IHBsYW5lKQoreworCXVuc2lnbmVkIGludCBkZXB0aDsKKwlpbnQgYnBwOworCisJ aWYgKHBsYW5lID49IGRybV9mb3JtYXRfbnVtX3BsYW5lcyhmb3JtYXQpKQorCQlyZXR1cm4gMDsK KworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX1lVWVY6CisJY2FzZSBEUk1f Rk9STUFUX1lWWVU6CisJY2FzZSBEUk1fRk9STUFUX1VZVlk6CisJY2FzZSBEUk1fRk9STUFUX1ZZ VVk6CisJCXJldHVybiAyOworCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCWNhc2UgRFJNX0ZPUk1B VF9OVjIxOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjE2OgorCWNhc2UgRFJNX0ZPUk1BVF9OVjYxOgor CWNhc2UgRFJNX0ZPUk1BVF9OVjI0OgorCWNhc2UgRFJNX0ZPUk1BVF9OVjQyOgorCQlyZXR1cm4g cGxhbmUgPyAyIDogMTsKKwljYXNlIERSTV9GT1JNQVRfWVVWNDEwOgorCWNhc2UgRFJNX0ZPUk1B VF9ZVlU0MTA6CisJY2FzZSBEUk1fRk9STUFUX1lVVjQxMToKKwljYXNlIERSTV9GT1JNQVRfWVZV NDExOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6CisJY2FzZSBEUk1fRk9STUFUX1lWVTQyMDoK KwljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjI6CisJY2Fz ZSBEUk1fRk9STUFUX1lVVjQ0NDoKKwljYXNlIERSTV9GT1JNQVRfWVZVNDQ0OgorCQlyZXR1cm4g MTsKKwlkZWZhdWx0OgorCQlkcm1fZmJfZ2V0X2JwcF9kZXB0aChmb3JtYXQsICZkZXB0aCwgJmJw cCk7CisJCXJldHVybiBicHAgPj4gMzsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mb3JtYXRf cGxhbmVfY3BwKTsKKworLyoqCisgKiBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5n IC0gZ2V0IHRoZSBob3Jpem9udGFsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0b3IKKyAqIEBmb3Jt YXQ6IHBpeGVsIGZvcm1hdCAoRFJNX0ZPUk1BVF8qKQorICoKKyAqIFJldHVybnM6CisgKiBUaGUg aG9yaXpvbnRhbCBjaHJvbWEgc3Vic2FtcGxpbmcgZmFjdG9yIGZvciB0aGUKKyAqIHNwZWNpZmll ZCBwaXhlbCBmb3JtYXQuCisgKi8KK2ludCBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBs aW5nKHVpbnQzMl90IGZvcm1hdCkKK3sKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgRFJNX0ZP Uk1BVF9ZVVY0MTE6CisJY2FzZSBEUk1fRk9STUFUX1lWVTQxMToKKwljYXNlIERSTV9GT1JNQVRf WVVWNDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTA6CisJCXJldHVybiA0OworCWNhc2UgRFJN X0ZPUk1BVF9ZVVlWOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgorCWNhc2UgRFJNX0ZPUk1BVF9V WVZZOgorCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCWNh c2UgRFJNX0ZPUk1BVF9OVjIxOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjE2OgorCWNhc2UgRFJNX0ZP Uk1BVF9OVjYxOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjI6CisJY2FzZSBEUk1fRk9STUFUX1lW VTQyMjoKKwljYXNlIERSTV9GT1JNQVRfWVVWNDIwOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6 CisJCXJldHVybiAyOworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KK0VYUE9SVF9TWU1C T0woZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyk7CisKKy8qKgorICogZHJtX2Zv cm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyAtIGdldCB0aGUgdmVydGljYWwgY2hyb21hIHN1 YnNhbXBsaW5nIGZhY3RvcgorICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0IChEUk1fRk9STUFUXyop CisgKgorICogUmV0dXJuczoKKyAqIFRoZSB2ZXJ0aWNhbCBjaHJvbWEgc3Vic2FtcGxpbmcgZmFj dG9yIGZvciB0aGUKKyAqIHNwZWNpZmllZCBwaXhlbCBmb3JtYXQuCisgKi8KK2ludCBkcm1fZm9y bWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCkKK3sKKwlzd2l0Y2gg KGZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MTA6CisJY2FzZSBEUk1fRk9STUFUX1lW VTQxMDoKKwkJcmV0dXJuIDQ7CisJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKKwljYXNlIERSTV9G T1JNQVRfWVZVNDIwOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9O VjIxOgorCQlyZXR1cm4gMjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9Cit9CitFWFBPUlRf U1lNQk9MKGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcpOworCisvKioKKyAqIGRy bV9mb3JtYXRfcGxhbmVfd2lkdGggLSB3aWR0aCBvZiB0aGUgcGxhbmUgZ2l2ZW4gdGhlIGZpcnN0 IHBsYW5lCisgKiBAd2lkdGg6IHdpZHRoIG9mIHRoZSBmaXJzdCBwbGFuZQorICogQGZvcm1hdDog cGl4ZWwgZm9ybWF0CisgKiBAcGxhbmU6IHBsYW5lIGluZGV4CisgKgorICogUmV0dXJuczoKKyAq IFRoZSB3aWR0aCBvZiBAcGxhbmUsIGdpdmVuIHRoYXQgdGhlIHdpZHRoIG9mIHRoZSBmaXJzdCBw bGFuZSBpcyBAd2lkdGguCisgKi8KK2ludCBkcm1fZm9ybWF0X3BsYW5lX3dpZHRoKGludCB3aWR0 aCwgdWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpCit7CisJaWYgKHBsYW5lID49IGRybV9mb3Jt YXRfbnVtX3BsYW5lcyhmb3JtYXQpKQorCQlyZXR1cm4gMDsKKworCWlmIChwbGFuZSA9PSAwKQor CQlyZXR1cm4gd2lkdGg7CisKKwlyZXR1cm4gd2lkdGggLyBkcm1fZm9ybWF0X2hvcnpfY2hyb21h X3N1YnNhbXBsaW5nKGZvcm1hdCk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mb3JtYXRfcGxhbmVf d2lkdGgpOworCisvKioKKyAqIGRybV9mb3JtYXRfcGxhbmVfaGVpZ2h0IC0gaGVpZ2h0IG9mIHRo ZSBwbGFuZSBnaXZlbiB0aGUgZmlyc3QgcGxhbmUKKyAqIEBoZWlnaHQ6IGhlaWdodCBvZiB0aGUg Zmlyc3QgcGxhbmUKKyAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdAorICogQHBsYW5lOiBwbGFuZSBp bmRleAorICoKKyAqIFJldHVybnM6CisgKiBUaGUgaGVpZ2h0IG9mIEBwbGFuZSwgZ2l2ZW4gdGhh dCB0aGUgaGVpZ2h0IG9mIHRoZSBmaXJzdCBwbGFuZSBpcyBAaGVpZ2h0LgorICovCitpbnQgZHJt X2Zvcm1hdF9wbGFuZV9oZWlnaHQoaW50IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCBpbnQgcGxh bmUpCit7CisJaWYgKHBsYW5lID49IGRybV9mb3JtYXRfbnVtX3BsYW5lcyhmb3JtYXQpKQorCQly ZXR1cm4gMDsKKworCWlmIChwbGFuZSA9PSAwKQorCQlyZXR1cm4gaGVpZ2h0OworCisJcmV0dXJu IGhlaWdodCAvIGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcoZm9ybWF0KTsKK30K K0VYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9wbGFuZV9oZWlnaHQpOwpkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IDg0ZjFhOGVlZmJkYi4u Yzg4NzkwNTcwODRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1QLmgKKysrIGIvaW5jbHVk ZS9kcm0vZHJtUC5oCkBAIC02Niw2ICs2Niw3IEBACiAKICNpbmNsdWRlIDxkcm0vZHJtX2FncHN1 cHBvcnQuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Zv dXJjYy5oPgogI2luY2x1ZGUgPGRybS9kcm1fZ2xvYmFsLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9o YXNodGFiLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9tZW1fdXRpbC5oPgpkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggZDE1NTlj ZDA0ZTNkLi4xYjgwYzAyNjhkOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgK KysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaApAQCAtMjU0MCwxNSArMjU0MCw2IEBAIGV4dGVy biBpbnQgZHJtX21vZGVfcGxhbmVfc2V0X29ial9wcm9wKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAogZXh0ZXJuIGludCBkcm1fbW9kZV9hdG9taWNfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKIAkJCQkgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogCi1leHRl cm4gdm9pZCBkcm1fZmJfZ2V0X2JwcF9kZXB0aCh1aW50MzJfdCBmb3JtYXQsIHVuc2lnbmVkIGlu dCAqZGVwdGgsCi0JCQkJIGludCAqYnBwKTsKLWV4dGVybiBpbnQgZHJtX2Zvcm1hdF9udW1fcGxh bmVzKHVpbnQzMl90IGZvcm1hdCk7Ci1leHRlcm4gaW50IGRybV9mb3JtYXRfcGxhbmVfY3BwKHVp bnQzMl90IGZvcm1hdCwgaW50IHBsYW5lKTsKLWV4dGVybiBpbnQgZHJtX2Zvcm1hdF9ob3J6X2No cm9tYV9zdWJzYW1wbGluZyh1aW50MzJfdCBmb3JtYXQpOwotZXh0ZXJuIGludCBkcm1fZm9ybWF0 X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCk7Ci1leHRlcm4gaW50IGRy bV9mb3JtYXRfcGxhbmVfd2lkdGgoaW50IHdpZHRoLCB1aW50MzJfdCBmb3JtYXQsIGludCBwbGFu ZSk7Ci1leHRlcm4gaW50IGRybV9mb3JtYXRfcGxhbmVfaGVpZ2h0KGludCBoZWlnaHQsIHVpbnQz Ml90IGZvcm1hdCwgaW50IHBsYW5lKTsKLWV4dGVybiBjb25zdCBjaGFyICpkcm1fZ2V0X2Zvcm1h dF9uYW1lKHVpbnQzMl90IGZvcm1hdCk7CiBleHRlcm4gc3RydWN0IGRybV9wcm9wZXJ0eSAqZHJt X21vZGVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ CQkJCQkJICAgICAgdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlvbnMpOwogZXh0ZXJuIHVu c2lnbmVkIGludCBkcm1fcm90YXRpb25fc2ltcGxpZnkodW5zaWduZWQgaW50IHJvdGF0aW9uLApk aWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oIGIvaW5jbHVkZS9kcm0vZHJtX2Zv dXJjYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2Y5MGEzOTZj ZjJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oCkBAIC0wLDAg KzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgTGF1cmVudCBQaW5jaGFydCA8bGF1 cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNl LCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0 cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0 aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFw cGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVu dGF0aW9uLCBhbmQKKyAqIHRoYXQgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5v dCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBk aXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVu IHByaW9yIHBlcm1pc3Npb24uICBUaGUgY29weXJpZ2h0IGhvbGRlcnMgbWFrZSBubyByZXByZXNl bnRhdGlvbnMKKyAqIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBh bnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcworICogaXMiIHdpdGhvdXQgZXhwcmVzcyBv ciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBESVNDTEFJ TSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorICogSU5DTFVE SU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT LCBJTiBOTworICogRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG T1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1Ig QU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKKyAqIERB VEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VO Q0UgT1IgT1RIRVIKKyAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UKKyAqIE9GIFRISVMgU09GVFdBUkUu CisgKi8KKyNpZm5kZWYgX19EUk1fRk9VUkNDX0hfXworI2RlZmluZSBfX0RSTV9GT1VSQ0NfSF9f CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPHVhcGkvZHJtL2RybV9mb3Vy Y2MuaD4KKwordm9pZCBkcm1fZmJfZ2V0X2JwcF9kZXB0aCh1aW50MzJfdCBmb3JtYXQsIHVuc2ln bmVkIGludCAqZGVwdGgsIGludCAqYnBwKTsKK2ludCBkcm1fZm9ybWF0X251bV9wbGFuZXModWlu dDMyX3QgZm9ybWF0KTsKK2ludCBkcm1fZm9ybWF0X3BsYW5lX2NwcCh1aW50MzJfdCBmb3JtYXQs IGludCBwbGFuZSk7CitpbnQgZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyh1aW50 MzJfdCBmb3JtYXQpOworaW50IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcodWlu dDMyX3QgZm9ybWF0KTsKK2ludCBkcm1fZm9ybWF0X3BsYW5lX3dpZHRoKGludCB3aWR0aCwgdWlu dDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpOworaW50IGRybV9mb3JtYXRfcGxhbmVfaGVpZ2h0KGlu dCBoZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwgaW50IHBsYW5lKTsKK2NvbnN0IGNoYXIgKmRybV9n ZXRfZm9ybWF0X25hbWUodWludDMyX3QgZm9ybWF0KTsKKworI2VuZGlmIC8qIF9fRFJNX0ZPVVJD Q19IX18gKi8KLS0gClJlZ2FyZHMsCgpMYXVyZW50IFBpbmNoYXJ0CgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK