From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v2 04/12] drm/fb-helper: No need to cache rotation and sw_rotations Date: Sun, 7 Apr 2019 18:52:35 +0200 Message-ID: <20190407165243.54043-5-noralf@tronnes.org> References: <20190407165243.54043-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190407165243.54043-1-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= List-Id: dri-devel@lists.freedesktop.org R2V0dGluZyByb3RhdGlvbiBpbmZvIGlzIGNoZWFwIHNvIHdlIGNhbiBkbyBpdCBvbiBkZW1hbmQu CgpUaGlzIGlzIGRvbmUgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSByZW1vdmFsIG9mIHN0cnVjdCBk cm1fZmJfaGVscGVyX2NydGMuCgpDYzogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNv bT4KU2lnbmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+CkFj a2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgfCAxMzEgKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLS0KIGluY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCAgICAgfCAgIDggLS0KIDIgZmls ZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgNzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZmJfaGVscGVyLmMKaW5kZXggZWRhOGI2M2YzNTBkLi4yZjcxMTYwY2M5MDQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9mYl9oZWxwZXIuYwpAQCAtMzg4LDYgKzM4OCw0OSBAQCBpbnQgZHJtX2ZiX2hlbHBlcl9kZWJ1 Z19sZWF2ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hl bHBlcl9kZWJ1Z19sZWF2ZSk7CiAKKy8qIENoZWNrIGlmIHRoZSBwbGFuZSBjYW4gaHcgcm90YXRl IHRvIG1hdGNoIHBhbmVsIG9yaWVudGF0aW9uICovCitzdGF0aWMgYm9vbCBkcm1fZmJfaGVscGVy X3BhbmVsX3JvdGF0aW9uKHN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQsCisJCQkJCSB1bnNp Z25lZCBpbnQgKnJvdGF0aW9uKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ig PSBtb2Rlc2V0LT5jb25uZWN0b3JzWzBdOworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gbW9k ZXNldC0+Y3J0Yy0+cHJpbWFyeTsKKwl1NjQgdmFsaWRfbWFzayA9IDA7CisJdW5zaWduZWQgaW50 IGk7CisKKwlpZiAoIW1vZGVzZXQtPm51bV9jb25uZWN0b3JzKQorCQlyZXR1cm4gZmFsc2U7CisK Kwlzd2l0Y2ggKGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnBhbmVsX29yaWVudGF0aW9uKSB7CisJ Y2FzZSBEUk1fTU9ERV9QQU5FTF9PUklFTlRBVElPTl9CT1RUT01fVVA6CisJCSpyb3RhdGlvbiA9 IERSTV9NT0RFX1JPVEFURV8xODA7CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfUEFORUxfT1JJ RU5UQVRJT05fTEVGVF9VUDoKKwkJKnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzkwOworCQli cmVhazsKKwljYXNlIERSTV9NT0RFX1BBTkVMX09SSUVOVEFUSU9OX1JJR0hUX1VQOgorCQkqcm90 YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMjcwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqcm90 YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKKwl9CisKKwkvKgorCSAqIFRPRE86IHN1cHBvcnQg OTAgLyAyNzAgZGVncmVlIGhhcmR3YXJlIHJvdGF0aW9uLAorCSAqIGRlcGVuZGluZyBvbiB0aGUg aGFyZHdhcmUgdGhpcyBtYXkgcmVxdWlyZSB0aGUgZnJhbWVidWZmZXIKKwkgKiB0byBiZSBpbiBh IHNwZWNpZmljIHRpbGluZyBmb3JtYXQuCisJICovCisJaWYgKCpyb3RhdGlvbiAhPSBEUk1fTU9E RV9ST1RBVEVfMTgwIHx8ICFwbGFuZS0+cm90YXRpb25fcHJvcGVydHkpCisJCXJldHVybiBmYWxz ZTsKKworCWZvciAoaSA9IDA7IGkgPCBwbGFuZS0+cm90YXRpb25fcHJvcGVydHktPm51bV92YWx1 ZXM7IGkrKykKKwkJdmFsaWRfbWFzayB8PSAoMVVMTCA8PCBwbGFuZS0+cm90YXRpb25fcHJvcGVy dHktPnZhbHVlc1tpXSk7CisKKwlpZiAoISgqcm90YXRpb24gJiB2YWxpZF9tYXNrKSkKKwkJcmV0 dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBpbnQgcmVzdG9yZV9mYmRl dl9tb2RlX2F0b21pYyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLCBib29sIGFjdGl2 ZSkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7CkBAIC00Mjgs MTAgKzQ3MSwxMyBAQCBzdGF0aWMgaW50IHJlc3RvcmVfZmJkZXZfbW9kZV9hdG9taWMoc3RydWN0 IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgYm9vbCBhY3RpdgogCWZvciAoaSA9IDA7IGkgPCBm Yl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rl X3NldCA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKIAkJc3RydWN0IGRybV9w bGFuZSAqcHJpbWFyeSA9IG1vZGVfc2V0LT5jcnRjLT5wcmltYXJ5OworCQl1bnNpZ25lZCBpbnQg cm90YXRpb247CiAKLQkJLyogQ2Fubm90IGZhaWwgYXMgd2UndmUgYWxyZWFkeSBnb3R0ZW4gdGhl IHBsYW5lIHN0YXRlIGFib3ZlICovCi0JCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3 X3BsYW5lX3N0YXRlKHN0YXRlLCBwcmltYXJ5KTsKLQkJcGxhbmVfc3RhdGUtPnJvdGF0aW9uID0g ZmJfaGVscGVyLT5jcnRjX2luZm9baV0ucm90YXRpb247CisJCWlmIChkcm1fZmJfaGVscGVyX3Bh bmVsX3JvdGF0aW9uKG1vZGVfc2V0LCAmcm90YXRpb24pKSB7CisJCQkvKiBDYW5ub3QgZmFpbCBh cyB3ZSd2ZSBhbHJlYWR5IGdvdHRlbiB0aGUgcGxhbmUgc3RhdGUgYWJvdmUgKi8KKwkJCXBsYW5l X3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X3BsYW5lX3N0YXRlKHN0YXRlLCBwcmltYXJ5KTsK KwkJCXBsYW5lX3N0YXRlLT5yb3RhdGlvbiA9IHJvdGF0aW9uOworCQl9CiAKIAkJcmV0ID0gX19k cm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnKG1vZGVfc2V0LCBzdGF0ZSk7CiAJCWlmIChyZXQg IT0gMCkKQEAgLTg3MSw3ICs5MTcsNiBAQCBpbnQgZHJtX2ZiX2hlbHBlcl9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiAJCWlmICghZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQu Y29ubmVjdG9ycykKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCWZiX2hlbHBlci0+Y3J0Y19pbmZvW2ld Lm1vZGVfc2V0Lm51bV9jb25uZWN0b3JzID0gMDsKLQkJZmJfaGVscGVyLT5jcnRjX2luZm9baV0u cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKIAl9CiAKIAlpID0gMDsKQEAgLTI1MDAsNjIg KzI1NDUsNiBAQCBzdGF0aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVy ICpmYl9oZWxwZXIsCiAJcmV0dXJuIGJlc3Rfc2NvcmU7CiB9CiAKLS8qCi0gKiBUaGlzIGZ1bmN0 aW9uIGNoZWNrcyBpZiByb3RhdGlvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiBwYW5lbCBvcmll bnRhdGlvbgotICogYW5kIGlmIGl0IGlzLCBpZiBpdCBpcyBzdXBwb3J0ZWQuCi0gKiBJZiByb3Rh dGlvbiBpcyBuZWNlc3NhcnkgYW5kIHN1cHBvcnRlZCwgaXQgZ2V0cyBzZXQgaW4gZmJfY3J0Yy5y b3RhdGlvbi4KLSAqIElmIHJvdGF0aW9uIGlzIG5lY2Vzc2FyeSBidXQgbm90IHN1cHBvcnRlZCwg YSBEUk1fTU9ERV9ST1RBVEVfKiBmbGFnIGdldHMKLSAqIG9yLWVkIGludG8gZmJfaGVscGVyLT5z d19yb3RhdGlvbnMuIEluIGRybV9zZXR1cF9jcnRjc19mYigpIHdlIGNoZWNrIGlmIG9ubHkKLSAq IG9uZSBiaXQgaXMgc2V0IGFuZCB0aGVuIHdlIHNldCBmYl9pbmZvLmZiY29uX3JvdGF0ZV9oaW50 IHRvIG1ha2UgZmJjb24gZG8KLSAqIHRoZSB1bnN1cHBvcnRlZCByb3RhdGlvbi4KLSAqLwotc3Rh dGljIHZvaWQgZHJtX3NldHVwX2NydGNfcm90YXRpb24oc3RydWN0IGRybV9mYl9oZWxwZXIgKmZi X2hlbHBlciwKLQkJCQkgICAgc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqZmJfY3J0YywKLQkJ CQkgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSA9IGZiX2NydGMtPm1vZGVfc2V0LmNydGMtPnByaW1hcnk7Ci0JdWludDY0X3Qg dmFsaWRfbWFzayA9IDA7Ci0JaW50IGksIHJvdGF0aW9uOwotCi0JZmJfY3J0Yy0+cm90YXRpb24g PSBEUk1fTU9ERV9ST1RBVEVfMDsKLQotCXN3aXRjaCAoY29ubmVjdG9yLT5kaXNwbGF5X2luZm8u cGFuZWxfb3JpZW50YXRpb24pIHsKLQljYXNlIERSTV9NT0RFX1BBTkVMX09SSUVOVEFUSU9OX0JP VFRPTV9VUDoKLQkJcm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMTgwOwotCQlicmVhazsKLQlj YXNlIERSTV9NT0RFX1BBTkVMX09SSUVOVEFUSU9OX0xFRlRfVVA6Ci0JCXJvdGF0aW9uID0gRFJN X01PREVfUk9UQVRFXzkwOwotCQlicmVhazsKLQljYXNlIERSTV9NT0RFX1BBTkVMX09SSUVOVEFU SU9OX1JJR0hUX1VQOgotCQlyb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8yNzA7Ci0JCWJyZWFr OwotCWRlZmF1bHQ6Ci0JCXJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzA7Ci0JfQotCi0JLyoK LQkgKiBUT0RPOiBzdXBwb3J0IDkwIC8gMjcwIGRlZ3JlZSBoYXJkd2FyZSByb3RhdGlvbiwKLQkg KiBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIHRoaXMgbWF5IHJlcXVpcmUgdGhlIGZyYW1lYnVm ZmVyCi0JICogdG8gYmUgaW4gYSBzcGVjaWZpYyB0aWxpbmcgZm9ybWF0LgotCSAqLwotCWlmIChy b3RhdGlvbiAhPSBEUk1fTU9ERV9ST1RBVEVfMTgwIHx8ICFwbGFuZS0+cm90YXRpb25fcHJvcGVy dHkpIHsKLQkJZmJfaGVscGVyLT5zd19yb3RhdGlvbnMgfD0gcm90YXRpb247Ci0JCXJldHVybjsK LQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcGxhbmUtPnJvdGF0aW9uX3Byb3BlcnR5LT5udW1fdmFs dWVzOyBpKyspCi0JCXZhbGlkX21hc2sgfD0gKDFVTEwgPDwgcGxhbmUtPnJvdGF0aW9uX3Byb3Bl cnR5LT52YWx1ZXNbaV0pOwotCi0JaWYgKCEocm90YXRpb24gJiB2YWxpZF9tYXNrKSkgewotCQlm Yl9oZWxwZXItPnN3X3JvdGF0aW9ucyB8PSByb3RhdGlvbjsKLQkJcmV0dXJuOwotCX0KLQotCWZi X2NydGMtPnJvdGF0aW9uID0gcm90YXRpb247Ci0JLyogUm90YXRpbmcgaW4gaGFyZHdhcmUsIGZi Y29uIHNob3VsZCBub3Qgcm90YXRlICovCi0JZmJfaGVscGVyLT5zd19yb3RhdGlvbnMgfD0gRFJN X01PREVfUk9UQVRFXzA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjICoK IGRybV9mYl9oZWxwZXJfY3J0YyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLCBzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCiB7CkBAIC0yODAxLDcgKzI3OTAsNiBAQCBzdGF0aWMgdm9pZCBk cm1fc2V0dXBfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJZHJtX2Zi X2hlbHBlcl9tb2Rlc2V0X3JlbGVhc2UoZmJfaGVscGVyLAogCQkJCQkgICAgICAmZmJfaGVscGVy LT5jcnRjX2luZm9baV0ubW9kZV9zZXQpOwogCi0JZmJfaGVscGVyLT5zd19yb3RhdGlvbnMgPSAw OwogCWRybV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBlciwgaSkgewogCQlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IG1vZGVzW2ldOwogCQlzdHJ1Y3QgZHJtX2Zi X2hlbHBlcl9jcnRjICpmYl9jcnRjID0gY3J0Y3NbaV07CkBAIC0yODIxLDcgKzI4MDksNiBAQCBz dGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBl ciwKIAkJCW1vZGVzZXQtPm1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LAogCQkJCQkJCSAg IGZiX2NydGMtPmRlc2lyZWRfbW9kZSk7CiAJCQlkcm1fY29ubmVjdG9yX2dldChjb25uZWN0b3Ip OwotCQkJZHJtX3NldHVwX2NydGNfcm90YXRpb24oZmJfaGVscGVyLCBmYl9jcnRjLCBjb25uZWN0 b3IpOwogCQkJbW9kZXNldC0+Y29ubmVjdG9yc1ttb2Rlc2V0LT5udW1fY29ubmVjdG9ycysrXSA9 IGNvbm5lY3RvcjsKIAkJCW1vZGVzZXQtPnggPSBvZmZzZXQtPng7CiAJCQltb2Rlc2V0LT55ID0g b2Zmc2V0LT55OwpAQCAtMjg0NCwxMSArMjgzMSwyMyBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBf Y3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIHN0YXRpYyB2b2lkIGRybV9z ZXR1cF9jcnRjc19mYihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogewogCXN0cnVj dCBmYl9pbmZvICppbmZvID0gZmJfaGVscGVyLT5mYmRldjsKKwl1bnNpZ25lZCBpbnQgcm90YXRp b24sIHN3X3JvdGF0aW9ucyA9IDA7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVs cGVyLT5jcnRjX2NvdW50OyBpKyspCi0JCWlmIChmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2Rl X3NldC5udW1fY29ubmVjdG9ycykKLQkJCWZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0 LmZiID0gZmJfaGVscGVyLT5mYjsKKwlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2Nv dW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldCA9ICZmYl9oZWxwZXIt PmNydGNfaW5mb1tpXS5tb2RlX3NldDsKKworCQlpZiAoIW1vZGVzZXQtPm51bV9jb25uZWN0b3Jz KQorCQkJY29udGludWU7CisKKwkJbW9kZXNldC0+ZmIgPSBmYl9oZWxwZXItPmZiOworCisJCWlm IChkcm1fZmJfaGVscGVyX3BhbmVsX3JvdGF0aW9uKG1vZGVzZXQsICZyb3RhdGlvbikpCisJCQkv KiBSb3RhdGluZyBpbiBoYXJkd2FyZSwgZmJjb24gc2hvdWxkIG5vdCByb3RhdGUgKi8KKwkJCXN3 X3JvdGF0aW9ucyB8PSBEUk1fTU9ERV9ST1RBVEVfMDsKKwkJZWxzZQorCQkJc3dfcm90YXRpb25z IHw9IHJvdGF0aW9uOworCX0KIAogCW11dGV4X2xvY2soJmZiX2hlbHBlci0+ZGV2LT5tb2RlX2Nv bmZpZy5tdXRleCk7CiAJZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVy LCBpKSB7CkBAIC0yODY0LDcgKzI4NjMsNyBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Nf ZmIoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKIAl9CiAJbXV0ZXhfdW5sb2NrKCZm Yl9oZWxwZXItPmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCi0Jc3dpdGNoIChmYl9oZWxwZXIt PnN3X3JvdGF0aW9ucykgeworCXN3aXRjaCAoc3dfcm90YXRpb25zKSB7CiAJY2FzZSBEUk1fTU9E RV9ST1RBVEVfMDoKIAkJaW5mby0+ZmJjb25fcm90YXRlX2hpbnQgPSBGQl9ST1RBVEVfVVI7CiAJ CWJyZWFrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oIGIvaW5jbHVk ZS9kcm0vZHJtX2ZiX2hlbHBlci5oCmluZGV4IDRkYjdkZTE5YTQ5MS4uZDk1NGY0OGM5NjM2IDEw MDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9kcm0v ZHJtX2ZiX2hlbHBlci5oCkBAIC01MCw3ICs1MCw2IEBAIHN0cnVjdCBkcm1fZmJfaGVscGVyX2Ny dGMgewogCXN0cnVjdCBkcm1fbW9kZV9zZXQgbW9kZV9zZXQ7CiAJc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmRlc2lyZWRfbW9kZTsKIAlpbnQgeCwgeTsKLQlpbnQgcm90YXRpb247CiB9OwogCiAv KioKQEAgLTE1MCwxMyArMTQ5LDYgQEAgc3RydWN0IGRybV9mYl9oZWxwZXIgewogCXN0cnVjdCBk cm1fZmJfaGVscGVyX2NydGMgKmNydGNfaW5mbzsKIAlpbnQgY29ubmVjdG9yX2NvdW50OwogCWlu dCBjb25uZWN0b3JfaW5mb19hbGxvY19jb3VudDsKLQkvKioKLQkgKiBAc3dfcm90YXRpb25zOgot CSAqIEJpdG1hc2sgb2YgYWxsIHJvdGF0aW9ucyByZXF1ZXN0ZWQgZm9yIHBhbmVsLW9yaWVudGF0 aW9uIHdoaWNoCi0JICogY291bGQgbm90IGJlIGhhbmRsZWQgaW4gaGFyZHdhcmUuIElmIG9ubHkg b25lIGJpdCBpcyBzZXQKLQkgKiBmYmRldi0+ZmJjb25fcm90YXRlX2hpbnQgZ2V0cyBzZXQgdG8g dGhlIHJlcXVlc3RlZCByb3RhdGlvbi4KLQkgKi8KLQlpbnQgc3dfcm90YXRpb25zOwogCS8qKgog CSAqIEBjb25uZWN0b3JfaW5mbzoKIAkgKgotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=