From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [RFC v4 03/25] drm/fb-helper: No need to cache rotation and sw_rotations Date: Fri, 13 Apr 2018 18:53:32 +0200 Message-ID: <20180413165354.8331-4-noralf@tronnes.org> References: <20180413165354.8331-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180413165354.8331-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, Hans de Goede , =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , laurent.pinchart@ideasonboard.com, mstaudt@suse.de, dh.herrmann@gmail.com List-Id: dri-devel@lists.freedesktop.org R2V0dGluZyByb3RhdGlvbiBpbmZvIGlzIGNoZWFwIHNvIHdlIGNhbiBkbyBpdCBvbiBkZW1hbmQu CgpUaGlzIGlzIGRvbmUgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSByZW1vdmFsIG9mIHN0cnVjdCBk cm1fZmJfaGVscGVyX2NydGMuCgpDYzogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNv bT4KU2lnbmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+Ci0t LQogZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyB8IDEzMSArKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggICAg IHwgICA4IC0tLQogMiBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCA3NCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJp dmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCAwNjQ2YjEwODAzMGIuLmU0OGFjZTJk NTVmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCkBAIC0zNjEsNiArMzYxLDQ4IEBAIGludCBk cm1fZmJfaGVscGVyX2RlYnVnX2xlYXZlKHN0cnVjdCBmYl9pbmZvICppbmZvKQogfQogRVhQT1JU X1NZTUJPTChkcm1fZmJfaGVscGVyX2RlYnVnX2xlYXZlKTsKIAorLyogQ2hlY2sgaWYgdGhlIHBs YW5lIGNhbiBodyByb3RhdGUgdG8gbWF0Y2ggcGFuZWwgb3JpZW50YXRpb24gKi8KK3N0YXRpYyBi b29sIGRybV9mYl9oZWxwZXJfcGFuZWxfcm90YXRpb24oc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKKwkJCQkJIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCQkgdW5zaWduZWQg aW50ICpyb3RhdGlvbikKK3sKKwl1aW50NjRfdCB2YWxpZF9tYXNrID0gMDsKKwl1bnNpZ25lZCBp bnQgaTsKKworCWlmICghY29ubmVjdG9yKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzd2l0Y2ggKGNv bm5lY3Rvci0+ZGlzcGxheV9pbmZvLnBhbmVsX29yaWVudGF0aW9uKSB7CisJY2FzZSBEUk1fTU9E RV9QQU5FTF9PUklFTlRBVElPTl9CT1RUT01fVVA6CisJCSpyb3RhdGlvbiA9IERSTV9NT0RFX1JP VEFURV8xODA7CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfUEFORUxfT1JJRU5UQVRJT05fTEVG VF9VUDoKKwkJKnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzkwOworCQlicmVhazsKKwljYXNl IERSTV9NT0RFX1BBTkVMX09SSUVOVEFUSU9OX1JJR0hUX1VQOgorCQkqcm90YXRpb24gPSBEUk1f TU9ERV9ST1RBVEVfMjcwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqcm90YXRpb24gPSBEUk1f TU9ERV9ST1RBVEVfMDsKKwl9CisKKwkvKgorCSAqIFRPRE86IHN1cHBvcnQgOTAgLyAyNzAgZGVn cmVlIGhhcmR3YXJlIHJvdGF0aW9uLAorCSAqIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgdGhp cyBtYXkgcmVxdWlyZSB0aGUgZnJhbWVidWZmZXIKKwkgKiB0byBiZSBpbiBhIHNwZWNpZmljIHRp bGluZyBmb3JtYXQuCisJICovCisJaWYgKCpyb3RhdGlvbiAhPSBEUk1fTU9ERV9ST1RBVEVfMTgw IHx8ICFwbGFuZS0+cm90YXRpb25fcHJvcGVydHkpCisJCXJldHVybiBmYWxzZTsKKworCWZvciAo aSA9IDA7IGkgPCBwbGFuZS0+cm90YXRpb25fcHJvcGVydHktPm51bV92YWx1ZXM7IGkrKykKKwkJ dmFsaWRfbWFzayB8PSAoMVVMTCA8PCBwbGFuZS0+cm90YXRpb25fcHJvcGVydHktPnZhbHVlc1tp XSk7CisKKwlpZiAoISgqcm90YXRpb24gJiB2YWxpZF9tYXNrKSkKKwkJcmV0dXJuIGZhbHNlOwor CisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBpbnQgcmVzdG9yZV9mYmRldl9tb2RlX2F0b21p YyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLCBib29sIGFjdGl2ZSkKIHsKIAlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7CkBAIC00MDYsMTAgKzQ0OCwxMyBA QCBzdGF0aWMgaW50IHJlc3RvcmVfZmJkZXZfbW9kZV9hdG9taWMoc3RydWN0IGRybV9mYl9oZWxw ZXIgKmZiX2hlbHBlciwgYm9vbCBhY3RpdgogCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNy dGNfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldCA9ICZmYl9o ZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKIAkJc3RydWN0IGRybV9wbGFuZSAqcHJpbWFy eSA9IG1vZGVfc2V0LT5jcnRjLT5wcmltYXJ5OworCQl1bnNpZ25lZCBpbnQgcm90YXRpb247CiAK LQkJLyogQ2Fubm90IGZhaWwgYXMgd2UndmUgYWxyZWFkeSBnb3R0ZW4gdGhlIHBsYW5lIHN0YXRl IGFib3ZlICovCi0JCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X3BsYW5lX3N0YXRl KHN0YXRlLCBwcmltYXJ5KTsKLQkJcGxhbmVfc3RhdGUtPnJvdGF0aW9uID0gZmJfaGVscGVyLT5j cnRjX2luZm9baV0ucm90YXRpb247CisJCWlmIChkcm1fZmJfaGVscGVyX3BhbmVsX3JvdGF0aW9u KG1vZGVfc2V0LT5jb25uZWN0b3JzWzBdLCBwcmltYXJ5LCAmcm90YXRpb24pKSB7CisJCQkvKiBD YW5ub3QgZmFpbCBhcyB3ZSd2ZSBhbHJlYWR5IGdvdHRlbiB0aGUgcGxhbmUgc3RhdGUgYWJvdmUg Ki8KKwkJCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X3BsYW5lX3N0YXRlKHN0YXRl LCBwcmltYXJ5KTsKKwkJCXBsYW5lX3N0YXRlLT5yb3RhdGlvbiA9IHJvdGF0aW9uOworCQl9CiAK IAkJcmV0ID0gX19kcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnKG1vZGVfc2V0LCBzdGF0ZSk7 CiAJCWlmIChyZXQgIT0gMCkKQEAgLTg0MSw3ICs4ODYsNiBAQCBpbnQgZHJtX2ZiX2hlbHBlcl9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCWlmICghZmJfaGVscGVyLT5jcnRjX2luZm9b aV0ubW9kZV9zZXQuY29ubmVjdG9ycykKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCWZiX2hlbHBlci0+ Y3J0Y19pbmZvW2ldLm1vZGVfc2V0Lm51bV9jb25uZWN0b3JzID0gMDsKLQkJZmJfaGVscGVyLT5j cnRjX2luZm9baV0ucm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKIAl9CiAKIAlpID0gMDsK QEAgLTI0MTQsNjIgKzI0NTgsNiBAQCBzdGF0aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVjdCBk cm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJcmV0dXJuIGJlc3Rfc2NvcmU7CiB9CiAKLS8qCi0g KiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiByb3RhdGlvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBv ZiBwYW5lbCBvcmllbnRhdGlvbgotICogYW5kIGlmIGl0IGlzLCBpZiBpdCBpcyBzdXBwb3J0ZWQu Ci0gKiBJZiByb3RhdGlvbiBpcyBuZWNlc3NhcnkgYW5kIHN1cHBvcnRlZCwgaXRzIGdldHMgc2V0 IGluIGZiX2NydGMucm90YXRpb24uCi0gKiBJZiByb3RhdGlvbiBpcyBuZWNlc3NhcnkgYnV0IG5v dCBzdXBwb3J0ZWQsIGEgRFJNX01PREVfUk9UQVRFXyogZmxhZyBnZXRzCi0gKiBvci1lZCBpbnRv IGZiX2hlbHBlci0+c3dfcm90YXRpb25zLiBJbiBkcm1fc2V0dXBfY3J0Y3NfZmIoKSB3ZSBjaGVj ayBpZiBvbmx5Ci0gKiBvbmUgYml0IGlzIHNldCBhbmQgdGhlbiB3ZSBzZXQgZmJfaW5mby5mYmNv bl9yb3RhdGVfaGludCB0byBtYWtlIGZiY29uIGRvCi0gKiB0aGUgdW5zdXBwb3J0ZWQgcm90YXRp b24uCi0gKi8KLXN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjX3JvdGF0aW9uKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpmYl9oZWxwZXIsCi0JCQkJICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMg KmZiX2NydGMsCi0JCQkJICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0J c3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBmYl9jcnRjLT5tb2RlX3NldC5jcnRjLT5wcmltYXJ5 OwotCXVpbnQ2NF90IHZhbGlkX21hc2sgPSAwOwotCWludCBpLCByb3RhdGlvbjsKLQotCWZiX2Ny dGMtPnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzA7Ci0KLQlzd2l0Y2ggKGNvbm5lY3Rvci0+ ZGlzcGxheV9pbmZvLnBhbmVsX29yaWVudGF0aW9uKSB7Ci0JY2FzZSBEUk1fTU9ERV9QQU5FTF9P UklFTlRBVElPTl9CT1RUT01fVVA6Ci0JCXJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzE4MDsK LQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9QQU5FTF9PUklFTlRBVElPTl9MRUZUX1VQOgotCQly b3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV85MDsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9Q QU5FTF9PUklFTlRBVElPTl9SSUdIVF9VUDoKLQkJcm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVf MjcwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8w OwotCX0KLQotCS8qCi0JICogVE9ETzogc3VwcG9ydCA5MCAvIDI3MCBkZWdyZWUgaGFyZHdhcmUg cm90YXRpb24sCi0JICogZGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSB0aGlzIG1heSByZXF1aXJl IHRoZSBmcmFtZWJ1ZmZlcgotCSAqIHRvIGJlIGluIGEgc3BlY2lmaWMgdGlsaW5nIGZvcm1hdC4K LQkgKi8KLQlpZiAocm90YXRpb24gIT0gRFJNX01PREVfUk9UQVRFXzE4MCB8fCAhcGxhbmUtPnJv dGF0aW9uX3Byb3BlcnR5KSB7Ci0JCWZiX2hlbHBlci0+c3dfcm90YXRpb25zIHw9IHJvdGF0aW9u OwotCQlyZXR1cm47Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHBsYW5lLT5yb3RhdGlvbl9wcm9w ZXJ0eS0+bnVtX3ZhbHVlczsgaSsrKQotCQl2YWxpZF9tYXNrIHw9ICgxVUxMIDw8IHBsYW5lLT5y b3RhdGlvbl9wcm9wZXJ0eS0+dmFsdWVzW2ldKTsKLQotCWlmICghKHJvdGF0aW9uICYgdmFsaWRf bWFzaykpIHsKLQkJZmJfaGVscGVyLT5zd19yb3RhdGlvbnMgfD0gcm90YXRpb247Ci0JCXJldHVy bjsKLQl9Ci0KLQlmYl9jcnRjLT5yb3RhdGlvbiA9IHJvdGF0aW9uOwotCS8qIFJvdGF0aW5nIGlu IGhhcmR3YXJlLCBmYmNvbiBzaG91bGQgbm90IHJvdGF0ZSAqLwotCWZiX2hlbHBlci0+c3dfcm90 YXRpb25zIHw9IERSTV9NT0RFX1JPVEFURV8wOwotfQotCiBzdGF0aWMgdm9pZCBkcm1fc2V0dXBf Y3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJCSAgICB1MzIgd2lkdGgs IHUzMiBoZWlnaHQpCiB7CkBAIC0yNTI5LDcgKzI1MTcsNiBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0 dXBfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJZHJtX2ZiX2hlbHBl cl9tb2Rlc2V0X3JlbGVhc2UoZmJfaGVscGVyLAogCQkJCQkgICAgICAmZmJfaGVscGVyLT5jcnRj X2luZm9baV0ubW9kZV9zZXQpOwogCi0JZmJfaGVscGVyLT5zd19yb3RhdGlvbnMgPSAwOwogCWRy bV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBlciwgaSkgewogCQlzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IG1vZGVzW2ldOwogCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBl cl9jcnRjICpmYl9jcnRjID0gY3J0Y3NbaV07CkBAIC0yNTQ5LDcgKzI1MzYsNiBAQCBzdGF0aWMg dm9pZCBkcm1fc2V0dXBfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJ CW1vZGVzZXQtPm1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LAogCQkJCQkJCSAgIGZiX2Ny dGMtPmRlc2lyZWRfbW9kZSk7CiAJCQlkcm1fY29ubmVjdG9yX2dldChjb25uZWN0b3IpOwotCQkJ ZHJtX3NldHVwX2NydGNfcm90YXRpb24oZmJfaGVscGVyLCBmYl9jcnRjLCBjb25uZWN0b3IpOwog CQkJbW9kZXNldC0+Y29ubmVjdG9yc1ttb2Rlc2V0LT5udW1fY29ubmVjdG9ycysrXSA9IGNvbm5l Y3RvcjsKIAkJCW1vZGVzZXQtPnggPSBvZmZzZXQtPng7CiAJCQltb2Rlc2V0LT55ID0gb2Zmc2V0 LT55OwpAQCAtMjU3MiwxMSArMjU1OCwyNCBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Mo c3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9j cnRjc19mYihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogewogCXN0cnVjdCBmYl9p bmZvICppbmZvID0gZmJfaGVscGVyLT5mYmRldjsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24sIHN3 X3JvdGF0aW9ucyA9IDA7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5j cnRjX2NvdW50OyBpKyspCi0JCWlmIChmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5u dW1fY29ubmVjdG9ycykKLQkJCWZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0LmZiID0g ZmJfaGVscGVyLT5mYjsKKwlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBp KyspIHsKKwkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldCA9ICZmYl9oZWxwZXItPmNydGNf aW5mb1tpXS5tb2RlX3NldDsKKworCQlpZiAoIW1vZGVzZXQtPm51bV9jb25uZWN0b3JzKQorCQkJ Y29udGludWU7CisKKwkJbW9kZXNldC0+ZmIgPSBmYl9oZWxwZXItPmZiOworCisJCWlmIChkcm1f ZmJfaGVscGVyX3BhbmVsX3JvdGF0aW9uKG1vZGVzZXQtPmNvbm5lY3RvcnNbMF0sCisJCQkJCQkg bW9kZXNldC0+Y3J0Yy0+cHJpbWFyeSwgJnJvdGF0aW9uKSkKKwkJCS8qIFJvdGF0aW5nIGluIGhh cmR3YXJlLCBmYmNvbiBzaG91bGQgbm90IHJvdGF0ZSAqLworCQkJc3dfcm90YXRpb25zIHw9IERS TV9NT0RFX1JPVEFURV8wOworCQllbHNlCisJCQlzd19yb3RhdGlvbnMgfD0gcm90YXRpb247CisJ fQogCiAJbXV0ZXhfbG9jaygmZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlk cm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGkpIHsKQEAgLTI1OTIs NyArMjU5MSw3IEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjc19mYihzdHJ1Y3QgZHJtX2Zi X2hlbHBlciAqZmJfaGVscGVyKQogCX0KIAltdXRleF91bmxvY2soJmZiX2hlbHBlci0+ZGV2LT5t b2RlX2NvbmZpZy5tdXRleCk7CiAKLQlzd2l0Y2ggKGZiX2hlbHBlci0+c3dfcm90YXRpb25zKSB7 CisJc3dpdGNoIChzd19yb3RhdGlvbnMpIHsKIAljYXNlIERSTV9NT0RFX1JPVEFURV8wOgogCQlp bmZvLT5mYmNvbl9yb3RhdGVfaGludCA9IEZCX1JPVEFURV9VUjsKIAkJYnJlYWs7CmRpZmYgLS1n aXQgYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVs cGVyLmgKaW5kZXggYjA2OTQzM2U3ZmMxLi5kMWU0NWM4MzJjZDUgMTAwNjQ0Ci0tLSBhL2luY2x1 ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgK QEAgLTQ5LDcgKzQ5LDYgQEAgc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyB7CiAJc3RydWN0IGRy bV9tb2RlX3NldCBtb2RlX3NldDsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZGVzaXJlZF9t b2RlOwogCWludCB4LCB5OwotCWludCByb3RhdGlvbjsKIH07CiAKIC8qKgpAQCAtMTYwLDEzICsx NTksNiBAQCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlciB7CiAJc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0 YyAqY3J0Y19pbmZvOwogCWludCBjb25uZWN0b3JfY291bnQ7CiAJaW50IGNvbm5lY3Rvcl9pbmZv X2FsbG9jX2NvdW50OwotCS8qKgotCSAqIEBzd19yb3RhdGlvbnM6Ci0JICogQml0bWFzayBvZiBh bGwgcm90YXRpb25zIHJlcXVlc3RlZCBmb3IgcGFuZWwtb3JpZW50YXRpb24gd2hpY2gKLQkgKiBj b3VsZCBub3QgYmUgaGFuZGxlZCBpbiBoYXJkd2FyZS4gSWYgb25seSBvbmUgYml0IGlzIHNldAot CSAqIGZiZGV2LT5mYmNvbl9yb3RhdGVfaGludCBnZXRzIHNldCB0byB0aGUgcmVxdWVzdGVkIHJv dGF0aW9uLgotCSAqLwotCWludCBzd19yb3RhdGlvbnM7CiAJLyoqCiAJICogQGNvbm5lY3Rvcl9p bmZvOgogCSAqCi0tIAoyLjE1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=