From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: [PATCH i-g-t v2 2/2] tests/i915-query: add new tests for perf configurations queries Date: Tue, 12 Jun 2018 17:37:21 +0100 Message-ID: <20180612163721.17293-3-lionel.g.landwerlin@intel.com> References: <20180612163721.17293-1-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 65AD96E58E for ; Tue, 12 Jun 2018 16:37:25 +0000 (UTC) In-Reply-To: <20180612163721.17293-1-lionel.g.landwerlin@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhlc2UgbmV3IHRlc3RzIGFsbG93IHRvIGxpc3QgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9u cyBhbmQgYWxzbyB0bwpxdWVyeSB0aGUgZGF0YSB0aGF0IG1ha2VzIHVwIGEgY29uZmlndXJhdGlv bi4KCnYyOiBWZXJpZnkgdXVpZCBxdWVyaWVzIChMaW9uZWwpCgpTaWduZWQtb2ZmLWJ5OiBMaW9u ZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+Ci0tLQogdGVzdHMv aTkxNV9xdWVyeS5jIHwgNjA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDYwOCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEv dGVzdHMvaTkxNV9xdWVyeS5jIGIvdGVzdHMvaTkxNV9xdWVyeS5jCmluZGV4IGM3ZGU4Y2JkLi5m ZTIwOTBjZiAxMDA2NDQKLS0tIGEvdGVzdHMvaTkxNV9xdWVyeS5jCisrKyBiL3Rlc3RzL2k5MTVf cXVlcnkuYwpAQCAtMjIsNiArMjIsNyBAQAogICovCiAKICNpbmNsdWRlICJpZ3QuaCIKKyNpbmNs dWRlICJpZ3Rfc3lzZnMuaCIKIAogI2luY2x1ZGUgPGxpbWl0cy5oPgogCkBAIC00NzcsNiArNDc4 LDU5OCBAQCB0ZXN0X3F1ZXJ5X3RvcG9sb2d5X2tub3duX3BjaV9pZHMoaW50IGZkLCBpbnQgZGV2 aWQpCiAJZnJlZSh0b3BvX2luZm8pOwogfQogCitzdGF0aWMgYm9vbCBxdWVyeV9wZXJmX2NvbmZp Z19zdXBwb3J0ZWQoaW50IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9pdGVtIGl0ZW0g PSB7CisJCS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX1BFUkZfQ09ORklHLAorCQkuZmxhZ3Mg PSBEUk1fSTkxNV9RVUVSWV9QRVJGX0NPTkZJR19MSVNULAorCX07CisKKwlyZXR1cm4gX19pOTE1 X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSkgPT0gMCAmJiBpdGVtLmxlbmd0aCA+IDA7Cit9CisK Ky8qCisgKiBWZXJpZnkgdGhhdCBwZXJmIGNvbmZpZ3VyYXRpb24gcXVlcmllcyBmb3IgbGlzdCBv ZiBjb25maWd1cmF0aW9ucworICogcmVqZWN0cyBpbnZhbGlkIHBhcmFtZXRlcnMuCisgKi8KK3N0 YXRpYyB2b2lkIHRlc3RfcXVlcnlfcGVyZl9jb25maWdfbGlzdF9pbnZhbGlkKGludCBmZCkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfcGVyZl9jb25maWcgKnF1ZXJ5X2NvbmZpZ19wdHI7CisJ c3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbTsKKwlzaXplX3QgbGVuOworCXZvaWQgKmRh dGE7CisKKwkvKiBWZXJpZnkgaW52YWxpZCBmbGFncyBmb3IgcGVyZiBjb25maWcgcXVlcmllcyAq LworCW1lbXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKKwlpdGVtLnF1ZXJ5X2lkID0gRFJN X0k5MTVfUVVFUllfUEVSRl9DT05GSUc7CisJaXRlbS5mbGFncyA9IDQyOyAvKiBpbnZhbGlkICov CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOworCWlndF9hc3NlcnRfZXEoaXRlbS5s ZW5ndGgsIC1FSU5WQUwpOworCisJLyoKKwkgKiBBIHRvbyBzbWFsbCBkYXRhIGxlbmd0aCBpcyBp bnZhbGlkLiBXZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorCSAqIHRoZSB0ZXN0IGNvbmZpZyBsaXN0 LgorCSAqLworCW1lbXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKKwlpdGVtLnF1ZXJ5X2lk ID0gRFJNX0k5MTVfUVVFUllfUEVSRl9DT05GSUc7CisJaXRlbS5mbGFncyA9IERSTV9JOTE1X1FV RVJZX1BFUkZfQ09ORklHX0xJU1Q7CisJaXRlbS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGRybV9p OTE1X3F1ZXJ5X3BlcmZfY29uZmlnKTsgLyogaW52YWxpZCAqLworCWk5MTVfcXVlcnlfaXRlbXMo ZmQsICZpdGVtLCAxKTsKKwlpZ3RfYXNzZXJ0X2VxKGl0ZW0ubGVuZ3RoLCAtRUlOVkFMKTsKKwor CS8qIEZsYWdzIG9uIHRoZSBxdWVyeSBjb25maWcgZGF0YSBhcmUgaW52YWxpZC4gKi8KKwltZW1z ZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7CisJaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1X1FV RVJZX1BFUkZfQ09ORklHOworCWl0ZW0uZmxhZ3MgPSBEUk1fSTkxNV9RVUVSWV9QRVJGX0NPTkZJ R19MSVNUOworCWl0ZW0ubGVuZ3RoID0gMDsKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwg MSk7CisJaWd0X2Fzc2VydChpdGVtLmxlbmd0aCA+IHNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfcXVl cnlfcGVyZl9jb25maWcpKTsKKworCXF1ZXJ5X2NvbmZpZ19wdHIgPSBjYWxsb2MoMSwgaXRlbS5s ZW5ndGgpOworCXF1ZXJ5X2NvbmZpZ19wdHItPmZsYWdzID0gMTsgLyogaW52YWxpZCAqLworCWl0 ZW0uZGF0YV9wdHIgPSB0b191c2VyX3BvaW50ZXIocXVlcnlfY29uZmlnX3B0cik7CisJaTkxNV9x dWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOworCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIC1F SU5WQUwpOworCWZyZWUocXVlcnlfY29uZmlnX3B0cik7CisKKwkvKgorCSAqIEEgTlVMTCBkYXRh IHBvaW50ZXIgaXMgaW52YWxpZCB3aGVuIHRoZSBsZW5ndGggaXMgbG9uZworCSAqIGVub3VnaCBm b3IgaTkxNSB0byBjb3B5IGRhdGEgaW50byB0aGUgcG9pbnRlZCBtZW1vcnkuCisJICovCisJbWVt c2V0KCZpdGVtLCAwLCBzaXplb2YoaXRlbSkpOworCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9R VUVSWV9QRVJGX0NPTkZJRzsKKwlpdGVtLmZsYWdzID0gRFJNX0k5MTVfUVVFUllfUEVSRl9DT05G SUdfTElTVDsKKwlpdGVtLmxlbmd0aCA9IDA7CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0s IDEpOworCWlndF9hc3NlcnQoaXRlbS5sZW5ndGggPiBzaXplb2Yoc3RydWN0IGRybV9pOTE1X3F1 ZXJ5X3BlcmZfY29uZmlnKSk7CisKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7IC8q IGxlYXZlcyBkYXRhIHB0ciB0byBudWxsICovCisJaWd0X2Fzc2VydF9lcShpdGVtLmxlbmd0aCwg LUVGQVVMVCk7CisKKwkvKiBUcnlpbmcgdG8gd3JpdGUgaW50byByZWFkIG9ubHkgbWVtb3J5IHdp bGwgZmFpbC4gKi8KKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7CisJaXRlbS5xdWVy eV9pZCA9IERSTV9JOTE1X1FVRVJZX1BFUkZfQ09ORklHOworCWl0ZW0uZmxhZ3MgPSBEUk1fSTkx NV9RVUVSWV9QRVJGX0NPTkZJR19MSVNUOworCWl0ZW0ubGVuZ3RoID0gMDsKKwlpOTE1X3F1ZXJ5 X2l0ZW1zKGZkLCAmaXRlbSwgMSk7CisJaWd0X2Fzc2VydChpdGVtLmxlbmd0aCA+IHNpemVvZihz dHJ1Y3QgZHJtX2k5MTVfcXVlcnlfcGVyZl9jb25maWcpKTsKKworCWxlbiA9IEFMSUdOKGl0ZW0u bGVuZ3RoLCA0MDk2KTsKKwlkYXRhID0gbW1hcCgwLCBsZW4sIFBST1RfV1JJVEUsIE1BUF9QUklW QVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKwltZW1zZXQoZGF0YSwgMCwgbGVuKTsKKwltcHJvdGVj dChkYXRhLCBsZW4sIFBST1RfUkVBRCk7CisJaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRl cihkYXRhKTsgLyogaW52YWxpZCB3aXRoIHJlYWQgb25seSBkYXRhICovCisJaTkxNV9xdWVyeV9p dGVtcyhmZCwgJml0ZW0sIDEpOworCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIC1FRkFVTFQp OworCisJbXVubWFwKGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgcXVlcnlfcGVyZl9jb25m aWdfaWRfZGF0YShpbnQgZmQsIGludCBsZW5ndGgsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVf cXVlcnlfcGVyZl9jb25maWcgKnF1ZXJ5KQoreworCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9pdGVt IGl0ZW07CisKKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7CisJaXRlbS5xdWVyeV9p ZCA9IERSTV9JOTE1X1FVRVJZX1BFUkZfQ09ORklHOworCWl0ZW0uZmxhZ3MgPSBEUk1fSTkxNV9R VUVSWV9QRVJGX0NPTkZJR19EQVRBX0ZPUl9JRDsKKwlpdGVtLmxlbmd0aCA9IGxlbmd0aDsKKwlp dGVtLmRhdGFfcHRyID0gdG9fdXNlcl9wb2ludGVyKHF1ZXJ5KTsKKwlpOTE1X3F1ZXJ5X2l0ZW1z KGZkLCAmaXRlbSwgMSk7CisKKwlyZXR1cm4gaXRlbS5sZW5ndGg7Cit9CisKK3N0YXRpYyBpbnQg cXVlcnlfcGVyZl9jb25maWdfdXVpZF9kYXRhKGludCBmZCwgaW50IGxlbmd0aCwKKwkJCQkgICAg ICAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X3BlcmZfY29uZmlnICpxdWVyeSkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcXVlcnlfaXRlbSBpdGVtOworCisJbWVtc2V0KCZpdGVtLCAwLCBzaXplb2YoaXRl bSkpOworCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9QRVJGX0NPTkZJRzsKKwlpdGVt LmZsYWdzID0gRFJNX0k5MTVfUVVFUllfUEVSRl9DT05GSUdfREFUQV9GT1JfVVVJRDsKKwlpdGVt Lmxlbmd0aCA9IGxlbmd0aDsKKwlpdGVtLmRhdGFfcHRyID0gdG9fdXNlcl9wb2ludGVyKHF1ZXJ5 KTsKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7CisKKwlyZXR1cm4gaXRlbS5sZW5n dGg7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCBwZXJmIGNvbmZpZ3VyYXRpb24gcXVlcmllcyBm b3IgY29uZmlndXJhdGlvbiBkYXRhCisgKiByZWplY3RzIGludmFsaWQgcGFyYW1ldGVycy4KKyAq Lworc3RhdGljIHZvaWQgdGVzdF9xdWVyeV9wZXJmX2NvbmZpZ19kYXRhX2ludmFsaWQoaW50IGZk KQoreworCXN0cnVjdCB7CisJCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9wZXJmX2NvbmZpZyBxdWVy eTsKKwkJc3RydWN0IGRybV9pOTE1X3BlcmZfb2FfY29uZmlnIG9hOworCX0gcXVlcnk7CisJc3Ry dWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbTsKKwlzaXplX3QgbGVuOworCXZvaWQgKmRhdGE7 CisKKwkvKiBGbGFncyBhcmUgaW52YWxpZCBmb3IgcGVyZiBjb25maWcgcXVlcmllcyAqLworCW1l bXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKKwlpdGVtLnF1ZXJ5X2lkID0gRFJNX0k5MTVf UVVFUllfUEVSRl9DT05GSUc7CisJaXRlbS5mbGFncyA9IERSTV9JOTE1X1FVRVJZX1BFUkZfQ09O RklHX0RBVEFfRk9SX0lEICsgMTsgLyogaW52YWxpZCAqLworCWk5MTVfcXVlcnlfaXRlbXMoZmQs ICZpdGVtLCAxKTsKKwlpZ3RfYXNzZXJ0X2VxKGl0ZW0ubGVuZ3RoLCAtRUlOVkFMKTsKKworCS8q CisJICogQSB0b28gc21hbGwgZGF0YSBsZW5ndGggaXMgaW52YWxpZC4gV2Ugc2hvdWxkIGhhdmUg YXQgbGVhc3QKKwkgKiB0aGUgdGVzdCBjb25maWcgbGlzdC4KKwkgKi8KKwltZW1zZXQoJml0ZW0s IDAsIHNpemVvZihpdGVtKSk7CisJaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX1BFUkZf Q09ORklHOworCWl0ZW0uZmxhZ3MgPSBEUk1fSTkxNV9RVUVSWV9QRVJGX0NPTkZJR19EQVRBX0ZP Ul9JRDsKKwlpdGVtLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfcGVyZl9j b25maWcpOyAvKiBpbnZhbGlkICovCisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOwor CWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIC1FSU5WQUwpOworCisJbWVtc2V0KCZpdGVtLCAw LCBzaXplb2YoaXRlbSkpOworCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9QRVJGX0NP TkZJRzsKKwlpdGVtLmZsYWdzID0gRFJNX0k5MTVfUVVFUllfUEVSRl9DT05GSUdfREFUQV9GT1Jf SUQ7CisJaXRlbS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X3BlcmZfY29u ZmlnKSArCisJCXNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vYV9jb25maWcpIC0gMTsgLyog aW52YWxpZCAqLworCWk5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKKwlpZ3RfYXNzZXJ0 X2VxKGl0ZW0ubGVuZ3RoLCAtRUlOVkFMKTsKKworCS8qIEZsYWdzIG9uIHRoZSBxdWVyeSBjb25m aWcgZGF0YSBhcmUgaW52YWxpZC4gKi8KKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7 CisJaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX1BFUkZfQ09ORklHOworCWl0ZW0uZmxh Z3MgPSBEUk1fSTkxNV9RVUVSWV9QRVJGX0NPTkZJR19EQVRBX0ZPUl9JRDsKKwlpdGVtLmxlbmd0 aCA9IDA7CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOworCWlndF9hc3NlcnRfZXEo aXRlbS5sZW5ndGgsIHNpemVvZihxdWVyeSkpOworCisJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9m KHF1ZXJ5KSk7CisJcXVlcnkucXVlcnkuZmxhZ3MgPSAxOyAvKiBpbnZhbGlkICovCisJaXRlbS5k YXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcXVlcnkucXVlcnkpOworCWk5MTVfcXVlcnlfaXRl bXMoZmQsICZpdGVtLCAxKTsKKwlpZ3RfYXNzZXJ0X2VxKGl0ZW0ubGVuZ3RoLCAtRUlOVkFMKTsK KworCS8qIEludmFsaWQgVVVJRC4gKi8KKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7 CisJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHF1ZXJ5KSk7CisJaXRlbS5xdWVyeV9pZCA9IERS TV9JOTE1X1FVRVJZX1BFUkZfQ09ORklHOworCWl0ZW0uZmxhZ3MgPSBEUk1fSTkxNV9RVUVSWV9Q RVJGX0NPTkZJR19EQVRBX0ZPUl9VVUlEOworCWl0ZW0uZGF0YV9wdHIgPSB0b191c2VyX3BvaW50 ZXIoJnF1ZXJ5KTsKKwlpdGVtLmxlbmd0aCA9IHNpemVvZihxdWVyeSk7CisJaTkxNV9xdWVyeV9p dGVtcyhmZCwgJml0ZW0sIDEpOworCWlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIC1FTk9FTlQp OworCisJLyoKKwkgKiBBIE5VTEwgZGF0YSBwb2ludGVyIGlzIGludmFsaWQgd2hlbiB0aGUgbGVu Z3RoIGlzIGxvbmcKKwkgKiBlbm91Z2ggZm9yIGk5MTUgdG8gY29weSBkYXRhIGludG8gdGhlIHBv aW50ZWQgbWVtb3J5LgorCSAqLworCW1lbXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKKwlp dGVtLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllfUEVSRl9DT05GSUc7CisJaXRlbS5mbGFncyA9 IERSTV9JOTE1X1FVRVJZX1BFUkZfQ09ORklHX0RBVEFfRk9SX0lEOworCWl0ZW0ubGVuZ3RoID0g MDsKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7CisJaWd0X2Fzc2VydF9lcShpdGVt Lmxlbmd0aCwgc2l6ZW9mKHF1ZXJ5KSk7CisKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwg MSk7IC8qIGxlYXZlcyBkYXRhIHB0ciB0byBudWxsICovCisJaWd0X2Fzc2VydF9lcShpdGVtLmxl bmd0aCwgLUVGQVVMVCk7CisKKwlpdGVtLmRhdGFfcHRyID0gVUxPTkdfTUFYOyAvKiBpbnZhbGlk IHBvaW50ZXIgKi8KKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7CisJaWd0X2Fzc2Vy dF9lcShpdGVtLmxlbmd0aCwgLUVGQVVMVCk7CisKKwkvKiBUcnlpbmcgdG8gd3JpdGUgaW50byBy ZWFkIG9ubHkgbWVtb3J5IHdpbGwgZmFpbC4gKi8KKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihp dGVtKSk7CisJaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX1BFUkZfQ09ORklHOworCWl0 ZW0uZmxhZ3MgPSBEUk1fSTkxNV9RVUVSWV9QRVJGX0NPTkZJR19EQVRBX0ZPUl9JRDsKKwlpdGVt Lmxlbmd0aCA9IDA7CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOworCWlndF9hc3Nl cnRfZXEoaXRlbS5sZW5ndGgsIHNpemVvZihxdWVyeSkpOworCisJbGVuID0gQUxJR04oaXRlbS5s ZW5ndGgsIDQwOTYpOworCWRhdGEgPSBtbWFwKDAsIGxlbiwgUFJPVF9XUklURSwgTUFQX1BSSVZB VEUgfCBNQVBfQU5PTiwgLTEsIDApOworCW1lbXNldChkYXRhLCAwLCBsZW4pOworCSgoc3RydWN0 IGRybV9pOTE1X3F1ZXJ5X3BlcmZfY29uZmlnICopZGF0YSktPmNvbmZpZyA9IDE7IC8qIHRlc3Qg Y29uZmlnICovCisJbXByb3RlY3QoZGF0YSwgbGVuLCBQUk9UX1JFQUQpOworCWl0ZW0uZGF0YV9w dHIgPSB0b191c2VyX3BvaW50ZXIoZGF0YSk7IC8qIGludmFsaWQgd2l0aCByZWFkIG9ubHkgZGF0 YSAqLworCWk5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKKwlpZ3RfYXNzZXJ0X2VxKGl0 ZW0ubGVuZ3RoLCAtRUZBVUxUKTsKKworCW11bm1hcChkYXRhLCBsZW4pOworCisJLyogSW52YWxp ZCBtZW1vcnkgKE5VTEwpIGZvciBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4gKi8KKwltZW1zZXQo JnF1ZXJ5LCAwLCBzaXplb2YocXVlcnkpKTsKKwlxdWVyeS5xdWVyeS5jb25maWcgPSAxOyAvKiB0 ZXN0IGNvbmZpZyAqLworCWlndF9hc3NlcnRfZXEoc2l6ZW9mKHF1ZXJ5KSwKKwkJICAgICAgcXVl cnlfcGVyZl9jb25maWdfaWRfZGF0YShmZCwgc2l6ZW9mKHF1ZXJ5KSwgJnF1ZXJ5LnF1ZXJ5KSk7 CisKKwlpZ3RfZGVidWcoIlF1ZXJpZWQgdGVzdCBjb25maWcgJS4qc1xuIiwKKwkJICAoaW50KXNp emVvZihxdWVyeS5vYS51dWlkKSwgcXVlcnkub2EudXVpZCk7CisJaWd0X2RlYnVnKCIgIG5fbXV4 X3JlZ3M9JXUsIG5fYm9vbGVhbl9yZWdzPSV1LCBuX2ZsZXhfcmVncz0ldVxuIiwKKwkJICBxdWVy eS5vYS5uX211eF9yZWdzLCBxdWVyeS5vYS5uX2Jvb2xlYW5fcmVncywKKwkJICBxdWVyeS5vYS5u X2ZsZXhfcmVncyk7CisJaWd0X2Fzc2VydF9lcSgtRUZBVUxULAorCQkgICAgICBxdWVyeV9wZXJm X2NvbmZpZ19pZF9kYXRhKGZkLCBzaXplb2YocXVlcnkpLCAmcXVlcnkucXVlcnkpKTsKKworCS8q IEludmFsaWQgbWVtb3J5IChVTE9ORyBtYXgpIGZvciBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4g Ki8KKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2YocXVlcnkpKTsKKwlxdWVyeS5xdWVyeS5jb25m aWcgPSAxOyAvKiB0ZXN0IGNvbmZpZyAqLworCWlndF9hc3NlcnRfZXEoc2l6ZW9mKHF1ZXJ5KSwg cXVlcnlfcGVyZl9jb25maWdfaWRfZGF0YShmZCwgMCwgJnF1ZXJ5LnF1ZXJ5KSk7CisKKwlpZiAo cXVlcnkub2Eubl9tdXhfcmVncyA+IDApIHsKKwkJcXVlcnkub2EubXV4X3JlZ3NfcHRyID0gVUxP TkdfTUFYOworCQlxdWVyeS5vYS5uX2Jvb2xlYW5fcmVncyA9IDA7CisJCXF1ZXJ5Lm9hLm5fZmxl eF9yZWdzID0gMDsKKwkJaWd0X2Fzc2VydF9lcSgtRUZBVUxULCBxdWVyeV9wZXJmX2NvbmZpZ19p ZF9kYXRhKGZkLCBzaXplb2YocXVlcnkpLAorCQkJCQkJCQkgJnF1ZXJ5LnF1ZXJ5KSk7CisJfQor CisJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHF1ZXJ5KSk7CisJcXVlcnkucXVlcnkuY29uZmln ID0gMTsgLyogdGVzdCBjb25maWcgKi8KKwlpZ3RfYXNzZXJ0X2VxKHNpemVvZihxdWVyeSksCisJ CSAgICAgIHF1ZXJ5X3BlcmZfY29uZmlnX2lkX2RhdGEoZmQsIDAsICZxdWVyeS5xdWVyeSkpOwor CisJaWYgKHF1ZXJ5Lm9hLm5fYm9vbGVhbl9yZWdzID4gMCkgeworCQlxdWVyeS5vYS5ib29sZWFu X3JlZ3NfcHRyID0gVUxPTkdfTUFYOworCQlxdWVyeS5vYS5uX211eF9yZWdzID0gMDsKKwkJcXVl cnkub2Eubl9mbGV4X3JlZ3MgPSAwOworCQlpZ3RfYXNzZXJ0X2VxKC1FRkFVTFQsIHF1ZXJ5X3Bl cmZfY29uZmlnX2lkX2RhdGEoZmQsIHNpemVvZihxdWVyeSksCisJCQkJCQkJCSAmcXVlcnkucXVl cnkpKTsKKwl9CisKKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2YocXVlcnkpKTsKKwlxdWVyeS5x dWVyeS5jb25maWcgPSAxOyAvKiB0ZXN0IGNvbmZpZyAqLworCWlndF9hc3NlcnRfZXEoc2l6ZW9m KHF1ZXJ5KSwKKwkJICAgICAgcXVlcnlfcGVyZl9jb25maWdfaWRfZGF0YShmZCwgMCwgJnF1ZXJ5 LnF1ZXJ5KSk7CisKKwlpZiAocXVlcnkub2Eubl9mbGV4X3JlZ3MgPiAwKSB7CisJCXF1ZXJ5Lm9h LmZsZXhfcmVnc19wdHIgPSBVTE9OR19NQVg7CisJCXF1ZXJ5Lm9hLm5fbXV4X3JlZ3MgPSAwOwor CQlxdWVyeS5vYS5uX2Jvb2xlYW5fcmVncyA9IDA7CisJCWlndF9hc3NlcnRfZXEoLUVGQVVMVCwg cXVlcnlfcGVyZl9jb25maWdfaWRfZGF0YShmZCwgc2l6ZW9mKHF1ZXJ5KSwKKwkJCQkJCQkJICZx dWVyeS5xdWVyeSkpOworCX0KKworCS8qIFRvbyBzbWFsbCBudW1iZXIgb2YgcmVnaXN0ZXJzIHRv IHdyaXRlLiAqLworCW1lbXNldCgmcXVlcnksIDAsIHNpemVvZihxdWVyeSkpOworCXF1ZXJ5LnF1 ZXJ5LmNvbmZpZyA9IDE7IC8qIHRlc3QgY29uZmlnICovCisJaWd0X2Fzc2VydF9lcShzaXplb2Yo cXVlcnkpLCBxdWVyeV9wZXJmX2NvbmZpZ19pZF9kYXRhKGZkLCAwLCAmcXVlcnkucXVlcnkpKTsK KworCWlmIChxdWVyeS5vYS5uX211eF9yZWdzID4gMCkgeworCQlxdWVyeS5vYS5uX211eF9yZWdz LS07CisJCWlndF9hc3NlcnRfZXEoLUVJTlZBTCwgcXVlcnlfcGVyZl9jb25maWdfaWRfZGF0YShm ZCwgc2l6ZW9mKHF1ZXJ5KSwKKwkJCQkJCQkJICZxdWVyeS5xdWVyeSkpOworCX0KKworCW1lbXNl dCgmcXVlcnksIDAsIHNpemVvZihxdWVyeSkpOworCXF1ZXJ5LnF1ZXJ5LmNvbmZpZyA9IDE7IC8q IHRlc3QgY29uZmlnICovCisJaWd0X2Fzc2VydF9lcShzaXplb2YocXVlcnkpLAorCQkgICAgICBx dWVyeV9wZXJmX2NvbmZpZ19pZF9kYXRhKGZkLCAwLCAmcXVlcnkucXVlcnkpKTsKKworCWlmIChx dWVyeS5vYS5uX2Jvb2xlYW5fcmVncyA+IDApIHsKKwkJcXVlcnkub2Eubl9ib29sZWFuX3JlZ3Mt LTsKKwkJaWd0X2Fzc2VydF9lcSgtRUlOVkFMLCBxdWVyeV9wZXJmX2NvbmZpZ19pZF9kYXRhKGZk LCBzaXplb2YocXVlcnkpLAorCQkJCQkJCQkgJnF1ZXJ5LnF1ZXJ5KSk7CisJfQorCisJbWVtc2V0 KCZxdWVyeSwgMCwgc2l6ZW9mKHF1ZXJ5KSk7CisJcXVlcnkucXVlcnkuY29uZmlnID0gMTsgLyog dGVzdCBjb25maWcgKi8KKwlpZ3RfYXNzZXJ0X2VxKHNpemVvZihxdWVyeSksIHF1ZXJ5X3BlcmZf Y29uZmlnX2lkX2RhdGEoZmQsIDAsICZxdWVyeS5xdWVyeSkpOworCisJaWYgKHF1ZXJ5Lm9hLm5f ZmxleF9yZWdzID4gMCkgeworCQlxdWVyeS5vYS5uX2ZsZXhfcmVncy0tOworCQlpZ3RfYXNzZXJ0 X2VxKC1FSU5WQUwsIHF1ZXJ5X3BlcmZfY29uZmlnX2lkX2RhdGEoZmQsIHNpemVvZihxdWVyeSks CisJCQkJCQkJCSAmcXVlcnkucXVlcnkpKTsKKwl9CisKKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXpl b2YocXVlcnkpKTsKKwlxdWVyeS5xdWVyeS5jb25maWcgPSAxOyAvKiB0ZXN0IGNvbmZpZyAqLwor CWlndF9hc3NlcnRfZXEoc2l6ZW9mKHF1ZXJ5KSwKKwkJICAgICAgcXVlcnlfcGVyZl9jb25maWdf aWRfZGF0YShmZCwgMCwgJnF1ZXJ5LnF1ZXJ5KSk7CisKKwlpZiAocXVlcnkub2Eubl9ib29sZWFu X3JlZ3MgPiAwKSB7CisJCXF1ZXJ5Lm9hLmJvb2xlYW5fcmVnc19wdHIgPSBVTE9OR19NQVg7CisJ CXF1ZXJ5Lm9hLm5fbXV4X3JlZ3MgPSAwOworCQlxdWVyeS5vYS5uX2ZsZXhfcmVncyA9IDA7CisJ CWlndF9hc3NlcnRfZXEoLUVGQVVMVCwgcXVlcnlfcGVyZl9jb25maWdfaWRfZGF0YShmZCwgc2l6 ZW9mKHF1ZXJ5KSwKKwkJCQkJCQkJICZxdWVyeS5xdWVyeSkpOworCX0KKworCS8qIFJlYWQgb25s eSBtZW1vcnkgZm9yIHJlZ2lzdGVycy4gKi8KKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2YocXVl cnkpKTsKKwlxdWVyeS5xdWVyeS5jb25maWcgPSAxOyAvKiB0ZXN0IGNvbmZpZyAqLworCWlndF9h c3NlcnRfZXEoc2l6ZW9mKHF1ZXJ5KSwKKwkJICAgICAgcXVlcnlfcGVyZl9jb25maWdfaWRfZGF0 YShmZCwgc2l6ZW9mKHF1ZXJ5KSwgJnF1ZXJ5LnF1ZXJ5KSk7CisKKwlsZW4gPSBBTElHTihxdWVy eS5vYS5uX211eF9yZWdzICogc2l6ZW9mKHVpbnQzMl90KSAqIDIsIDQwOTYpOworCWRhdGEgPSBt bWFwKDAsIGxlbiwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwor CW1lbXNldChkYXRhLCAwLCBsZW4pOworCW1wcm90ZWN0KGRhdGEsIGxlbiwgUFJPVF9SRUFEKTsK KwlxdWVyeS5vYS5tdXhfcmVnc19wdHIgPSB0b191c2VyX3BvaW50ZXIoZGF0YSk7CisJaWd0X2Fz c2VydF9lcSgtRUZBVUxULAorCQkgICAgICBxdWVyeV9wZXJmX2NvbmZpZ19pZF9kYXRhKGZkLCBz aXplb2YocXVlcnkpLCAmcXVlcnkucXVlcnkpKTsKKworCW11bm1hcChkYXRhLCBsZW4pOworfQor CitzdGF0aWMgdWludDY0X3QgY3JlYXRlX3BlcmZfY29uZmlnKGludCBmZCwKKwkJCQkgICBjb25z dCBjaGFyICp1dWlkLAorCQkJCSAgIHVpbnQzMl90ICoqYm9vbGVhbl9yZWdzLAorCQkJCSAgIHVp bnQzMl90ICpuX2Jvb2xlYW5fcmVncywKKwkJCQkgICB1aW50MzJfdCAqKmZsZXhfcmVncywKKwkJ CQkgICB1aW50MzJfdCAqbl9mbGV4X3JlZ3MsCisJCQkJICAgdWludDMyX3QgKiptdXhfcmVncywK KwkJCQkgICB1aW50MzJfdCAqbl9tdXhfcmVncykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9v YV9jb25maWcgY29uZmlnOworCWludCBkZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZmQpOwor CWludCBpLCByZXQ7CisKKwkqbl9ib29sZWFuX3JlZ3MgPSByYW5kKCkgJSA1MDsKKwkqYm9vbGVh bl9yZWdzID0gY2FsbG9jKCpuX2Jvb2xlYW5fcmVncywgc2l6ZW9mKHVpbnQzMl90KSAqIDIpOwor CSpuX211eF9yZWdzID0gcmFuZCgpICUgNTA7CisJKm11eF9yZWdzID0gY2FsbG9jKCpuX211eF9y ZWdzLCBzaXplb2YodWludDMyX3QpICogMik7CisJaWYgKGludGVsX2dlbihkZXZpZCkgPCA4KSB7 CisJCS8qIGZsZXggcmVnaXN0ZXIgZG9uJ3QgZXhpc3Qgb24gZ2VuNyAqLworCQkqbl9mbGV4X3Jl Z3MgPSAwOworCQkqZmxleF9yZWdzID0gTlVMTDsKKwl9IGVsc2UgeworCQkqbl9mbGV4X3JlZ3Mg PSByYW5kKCkgJSA1MDsKKwkJKmZsZXhfcmVncyA9IGNhbGxvYygqbl9mbGV4X3JlZ3MsIHNpemVv Zih1aW50MzJfdCkgKiAyKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgKm5fYm9vbGVhbl9yZWdz OyBpKyspIHsKKwkJaWYgKHJhbmQoKSAlIDIpIHsKKwkJCS8qIE9BU1RBUlRUUklHWzEtOF0gKi8K KwkJCSgqYm9vbGVhbl9yZWdzKVtpICogMl0gPQorCQkJCTB4MjcxMCArICgocmFuZCgpICUgKDB4 MjczMCAtIDB4MjcxMCkpIC8gNCkgKiA0OworCQkJKCpib29sZWFuX3JlZ3MpW2kgKiAyICsgMV0g PSByYW5kKCk7CisJCX0gZWxzZSB7CisJCQkvKiBPQVJFUE9SVFRSSUdbMS04XSAqLworCQkJKCpi b29sZWFuX3JlZ3MpW2kgKiAyXSA9CisJCQkJMHgyNzQwICsgKChyYW5kKCkgJSAoMHgyNzVjIC0g MHgyNzQ0KSkgLyA0KSAqIDQ7CisJCQkoKmJvb2xlYW5fcmVncylbaSAqIDIgKyAxXSA9IHJhbmQo KTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCAqbl9tdXhfcmVnczsgaSsrKSB7CisJCSgq bXV4X3JlZ3MpW2kgKiAyXSA9IDB4OTgwMDsKKwkJKCptdXhfcmVncylbaSAqIDIgKyAxXSA9IHJh bmQoKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgKm5fZmxleF9yZWdzOyBpKyspIHsKKwkJY29u c3QgdWludDMyX3QgZmxleFtdID0geworCQkJMHhlNDU4LAorCQkJMHhlNTU4LAorCQkJMHhlNjU4 LAorCQkJMHhlNzU4LAorCQkJMHhlNDVjLAorCQkJMHhlNTVjLAorCQkJMHhlNjVjCisJCX07CisJ CSgqZmxleF9yZWdzKVtpICogMl0gPSBmbGV4W3JhbmQoKSAlIEFSUkFZX1NJWkUoZmxleCldOwor CQkoKmZsZXhfcmVncylbaSAqIDIgKyAxXSA9IHJhbmQoKTsKKwl9CisKKwltZW1zZXQoJmNvbmZp ZywgMCwgc2l6ZW9mKGNvbmZpZykpOworCW1lbWNweShjb25maWcudXVpZCwgdXVpZCwgc2l6ZW9m KGNvbmZpZy51dWlkKSk7CisKKwljb25maWcubl9ib29sZWFuX3JlZ3MgPSAqbl9ib29sZWFuX3Jl Z3M7CisJY29uZmlnLmJvb2xlYW5fcmVnc19wdHIgPSB0b191c2VyX3BvaW50ZXIoKmJvb2xlYW5f cmVncyk7CisJY29uZmlnLm5fZmxleF9yZWdzID0gKm5fZmxleF9yZWdzOworCWNvbmZpZy5mbGV4 X3JlZ3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKCpmbGV4X3JlZ3MpOworCWNvbmZpZy5uX211eF9y ZWdzID0gKm5fbXV4X3JlZ3M7CisJY29uZmlnLm11eF9yZWdzX3B0ciA9IHRvX3VzZXJfcG9pbnRl cigqbXV4X3JlZ3MpOworCisJcmV0ID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9QRVJG X0FERF9DT05GSUcsICZjb25maWcpOworCWlndF9hc3NlcnQocmV0ID4gMSk7IC8qIENvbmZpZyAw LzEgc2hvdWxkIGJlIHVzZWQgYnkgdGhlIGtlcm5lbCAqLworCisJaWd0X2RlYnVnKCJjcmVhdGVk IGNvbmZpZyBpZD0laSB1dWlkPSVzOlxuIiwgcmV0LCB1dWlkKTsKKwlpZ3RfZGVidWcoIlx0bl9i b29sZWFuX3JlZ3M9JXUgbl9mbGV4X3JlZ3M9JXUgbl9tdXhfcmVncz0ldVxuIiwKKwkJICBjb25m aWcubl9ib29sZWFuX3JlZ3MsIGNvbmZpZy5uX2ZsZXhfcmVncywKKwkJICBjb25maWcubl9tdXhf cmVncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfcGVyZl9jb25m aWcoaW50IGZkLCB1aW50NjRfdCBjb25maWdfaWQpCit7CisJaWd0X2Fzc2VydF9lcSgwLCBpZ3Rf aW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X1BFUkZfUkVNT1ZFX0NPTkZJRywKKwkJCQkgICAmY29u ZmlnX2lkKSk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBnZXRfY29uZmlnX2lkKGludCBmZCwgY29u c3QgY2hhciAqdXVpZCkKK3sKKwljaGFyIHJlbF9wYXRoWzEwMF07CisJdWludDY0X3QgcmV0Owor CWludCBzeXNmczsKKworCXN5c2ZzID0gaWd0X3N5c2ZzX29wZW4oZmQsIE5VTEwpOworCWlndF9h c3NlcnRfbHRlKDAsIHN5c2ZzKTsKKworCXNucHJpbnRmKHJlbF9wYXRoLCBzaXplb2YocmVsX3Bh dGgpLCAibWV0cmljcy8lcy9pZCIsIHV1aWQpOworCisJaWYgKGlndF9zeXNmc19zY2FuZihzeXNm cywgcmVsX3BhdGgsICIlbHUiLCAmcmV0KSA8IDApCisJCXJldCA9IDA7CisKKwljbG9zZShzeXNm cyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFZlcmlmaWVzIHRoYXQgY3JlYXRlZCBjb25m aWd1cmF0aW9ucyBhcHBlYXIgaW4gdGhlIHF1ZXJ5IG9mIGxpc3Qgb2YKKyAqIGNvbmZpZ3VyYXRp b24gYW5kIGFsc28gdmVyaWZ5IHRoZSBjb250ZW50IG9mIHRoZSBxdWVyaWVkCisgKiBjb25maWd1 cmF0aW9ucyBtYXRjaGVzIHdpdGggd2hhdCB3YXMgY3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQg dGVzdF9xdWVyeV9wZXJmX2NvbmZpZ3MoaW50IGZkKQoreworCXN0cnVjdCB7CisJCXVpbnQ2NF90 IGlkOworCisJCWNoYXIgdXVpZFs0MF07CisKKwkJdWludDMyX3QgKmJvb2xlYW5fcmVnczsKKwkJ dWludDMyX3Qgbl9ib29sZWFuX3JlZ3M7CisJCXVpbnQzMl90ICpmbGV4X3JlZ3M7CisJCXVpbnQz Ml90IG5fZmxleF9yZWdzOworCQl1aW50MzJfdCAqbXV4X3JlZ3M7CisJCXVpbnQzMl90IG5fbXV4 X3JlZ3M7CisJfSBjb25maWdzWzVdOworCXN0cnVjdCB7CisJCXN0cnVjdCBkcm1faTkxNV9xdWVy eV9wZXJmX2NvbmZpZyBxdWVyeTsKKwkJdWludDY0X3QgY29uZmlnX2lkc1tdOworCX0gKmxpc3Rf cXVlcnk7CisJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbTsKKwlpbnQgaTsKKworCXNy YW5kKHRpbWUoTlVMTCkpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29uZmlncyk7 IGkrKykgeworCQl1aW50NjRfdCBwcmV2X2NvbmZpZ19pZDsKKworCQlzbnByaW50Zihjb25maWdz W2ldLnV1aWQsIHNpemVvZihjb25maWdzW2ldLnV1aWQpLAorCQkJICIwMTIzNDU2Ny0lMDR1LTAx MjMtMDEyMy0wMTIzNDU2Nzg5YWIiLCBpKTsKKworCQlwcmV2X2NvbmZpZ19pZCA9IGdldF9jb25m aWdfaWQoZmQsIGNvbmZpZ3NbaV0udXVpZCk7CisJCWlmIChwcmV2X2NvbmZpZ19pZCkKKwkJCXJl bW92ZV9wZXJmX2NvbmZpZyhmZCwgcHJldl9jb25maWdfaWQpOworCisJCWNvbmZpZ3NbaV0uaWQg PQorCQkJY3JlYXRlX3BlcmZfY29uZmlnKGZkLCBjb25maWdzW2ldLnV1aWQsCisJCQkJCSAgICZj b25maWdzW2ldLmJvb2xlYW5fcmVncywKKwkJCQkJICAgJmNvbmZpZ3NbaV0ubl9ib29sZWFuX3Jl Z3MsCisJCQkJCSAgICZjb25maWdzW2ldLmZsZXhfcmVncywKKwkJCQkJICAgJmNvbmZpZ3NbaV0u bl9mbGV4X3JlZ3MsCisJCQkJCSAgICZjb25maWdzW2ldLm11eF9yZWdzLAorCQkJCQkgICAmY29u Zmlnc1tpXS5uX211eF9yZWdzKTsKKwl9CisKKwltZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVt KSk7CisJaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX1BFUkZfQ09ORklHOworCWl0ZW0u ZmxhZ3MgPSBEUk1fSTkxNV9RVUVSWV9QRVJGX0NPTkZJR19MSVNUOworCWl0ZW0ubGVuZ3RoID0g MDsKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7CisJaWd0X2Fzc2VydChpdGVtLmxl bmd0aCA+IHNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfcGVyZl9jb25maWcpKTsKKworCWxp c3RfcXVlcnkgPSBtYWxsb2MoaXRlbS5sZW5ndGgpOworCW1lbXNldChsaXN0X3F1ZXJ5LCAwLCBp dGVtLmxlbmd0aCk7CisJaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihsaXN0X3F1ZXJ5 KTsKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7CisJaWd0X2Fzc2VydChpdGVtLmxl bmd0aCA+IHNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfcGVyZl9jb25maWcpKTsKKworCWln dF9kZWJ1ZygibGlzdGVkIGNvbmZpZ3M6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdF9xdWVy eS0+cXVlcnkuY29uZmlnOyBpKyspCisJCWlndF9kZWJ1ZygiXHRpZD0lbHVcbiIsIGxpc3RfcXVl cnktPmNvbmZpZ19pZHNbaV0pOworCisJLyogVmVyaWZ5IHRoYXQgYWxsIGNyZWF0ZWQgY29uZmln cyBhcmUgbGlzdGVkLiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbmZpZ3MpOyBp KyspIHsKKwkJaW50IGo7CisJCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCQlmb3IgKGogPSAwOyBq IDwgbGlzdF9xdWVyeS0+cXVlcnkuY29uZmlnOyBqKyspIHsKKwkJCWlmIChsaXN0X3F1ZXJ5LT5j b25maWdfaWRzW2pdID09IGNvbmZpZ3NbaV0uaWQpIHsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJ YnJlYWs7CisJCQl9CisJCX0KKworCQlpZ3RfYXNzZXJ0KGZvdW5kKTsKKwl9CisKKwkvKiBWZXJp ZnkgdGhlIGNvbnRlbnQgb2YgdGhlIGNvbmZpZ3MuICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoY29uZmlncyk7IGkrKykgeworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGRybV9pOTE1X3F1 ZXJ5X3BlcmZfY29uZmlnIHF1ZXJ5OworCQkJc3RydWN0IGRybV9pOTE1X3BlcmZfb2FfY29uZmln IG9hOworCQl9IHF1ZXJ5OworCQl1aW50MzJfdCAqYm9vbGVhbl9yZWdzID0gTlVMTCwgKmZsZXhf cmVncyA9IE5VTEwsICptdXhfcmVncyA9IE5VTEw7CisKKwkJLyogRmlyc3QgcXVlcnkgd2l0aCBj b25maWd1cmF0aW9uIGlkLiAqLworCQltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2YocXVlcnkpKTsK KwkJcXVlcnkucXVlcnkuY29uZmlnID0gY29uZmlnc1tpXS5pZDsKKwkJaWd0X2Fzc2VydF9lcShz aXplb2YocXVlcnkpLAorCQkJICAgICAgcXVlcnlfcGVyZl9jb25maWdfaWRfZGF0YShmZCwgc2l6 ZW9mKHF1ZXJ5KSwKKwkJCQkJCQkmcXVlcnkucXVlcnkpKTsKKworCQlpZ3RfZGVidWcoInF1ZXJp ZWQgY29uZmlnIGRhdGEgaWQ9JWx1IHV1aWQ9JXM6XG4iLAorCQkJICBjb25maWdzW2ldLmlkLCBj b25maWdzW2ldLnV1aWQpOworCQlpZ3RfZGVidWcoIlx0bl9ib29sZWFuX3JlZ3M9JXUgbl9mbGV4 X3JlZ3M9JXUgbl9tdXhfcmVncz0ldVxuIiwKKwkJCSAgcXVlcnkub2Eubl9ib29sZWFuX3JlZ3Ms IHF1ZXJ5Lm9hLm5fZmxleF9yZWdzLAorCQkJICBxdWVyeS5vYS5uX211eF9yZWdzKTsKKworCQlp Z3RfYXNzZXJ0X2VxKHF1ZXJ5Lm9hLm5fYm9vbGVhbl9yZWdzLCBjb25maWdzW2ldLm5fYm9vbGVh bl9yZWdzKTsKKwkJaWd0X2Fzc2VydF9lcShxdWVyeS5vYS5uX2ZsZXhfcmVncywgY29uZmlnc1tp XS5uX2ZsZXhfcmVncyk7CisJCWlndF9hc3NlcnRfZXEocXVlcnkub2Eubl9tdXhfcmVncywgY29u Zmlnc1tpXS5uX211eF9yZWdzKTsKKworCQkvKiBRdWVyeSBhZ2FpbiB3aXRoIGNvbmZpZ3VyYXRp b24gdXVpZC4gKi8KKwkJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHF1ZXJ5KSk7CisJCW1lbWNw eShxdWVyeS5xdWVyeS51dWlkLCBjb25maWdzW2ldLnV1aWQsCisJCSAgICAgICBzaXplb2YocXVl cnkucXVlcnkudXVpZCkpOworCQlpZ3RfYXNzZXJ0X2VxKHNpemVvZihxdWVyeSksCisJCQkgICAg ICBxdWVyeV9wZXJmX2NvbmZpZ191dWlkX2RhdGEoZmQsIHNpemVvZihxdWVyeSksCisJCQkJCQkJ ICAmcXVlcnkucXVlcnkpKTsKKworCQlpZ3RfYXNzZXJ0X2VxKHF1ZXJ5Lm9hLm5fYm9vbGVhbl9y ZWdzLCBjb25maWdzW2ldLm5fYm9vbGVhbl9yZWdzKTsKKwkJaWd0X2Fzc2VydF9lcShxdWVyeS5v YS5uX2ZsZXhfcmVncywgY29uZmlnc1tpXS5uX2ZsZXhfcmVncyk7CisJCWlndF9hc3NlcnRfZXEo cXVlcnkub2Eubl9tdXhfcmVncywgY29uZmlnc1tpXS5uX211eF9yZWdzKTsKKworCQkvKiBOb3cg Z2V0IHRoZSByZWdpc3RlciBwcm9ncmFtbWluZyB2YWx1ZXMuICovCisJCWJvb2xlYW5fcmVncyA9 IGNhbGxvYyhxdWVyeS5vYS5uX2Jvb2xlYW5fcmVncyAqIDIsIHNpemVvZih1aW50MzJfdCkpOwor CQlpZiAocXVlcnkub2Eubl9mbGV4X3JlZ3MgPiAwKQorCQkJZmxleF9yZWdzID0gY2FsbG9jKHF1 ZXJ5Lm9hLm5fZmxleF9yZWdzICogMiwgc2l6ZW9mKHVpbnQzMl90KSk7CisJCW11eF9yZWdzID0g Y2FsbG9jKHF1ZXJ5Lm9hLm5fbXV4X3JlZ3MgKiAyLCBzaXplb2YodWludDMyX3QpKTsKKworCQlx dWVyeS5vYS5ib29sZWFuX3JlZ3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKGJvb2xlYW5fcmVncyk7 CisJCXF1ZXJ5Lm9hLmZsZXhfcmVnc19wdHIgPSB0b191c2VyX3BvaW50ZXIoZmxleF9yZWdzKTsK KwkJcXVlcnkub2EubXV4X3JlZ3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKG11eF9yZWdzKTsKKwor CQlpZ3RfYXNzZXJ0X2VxKHNpemVvZihxdWVyeSksCisJCQkgICAgICBxdWVyeV9wZXJmX2NvbmZp Z191dWlkX2RhdGEoZmQsIHNpemVvZihxdWVyeSksCisJCQkJCQkJICAmcXVlcnkucXVlcnkpKTsK KworCQlpZ3RfYXNzZXJ0X2VxKDAsIG1lbWNtcChjb25maWdzW2ldLmJvb2xlYW5fcmVncywKKwkJ CQkJYm9vbGVhbl9yZWdzLAorCQkJCQljb25maWdzW2ldLm5fYm9vbGVhbl9yZWdzICogMiAqIHNp emVvZih1aW50MzJfdCkpKTsKKwkJaWd0X2Fzc2VydF9lcSgwLCBtZW1jbXAoY29uZmlnc1tpXS5m bGV4X3JlZ3MsCisJCQkJCWZsZXhfcmVncywKKwkJCQkJY29uZmlnc1tpXS5uX2ZsZXhfcmVncyAq IDIgKiBzaXplb2YodWludDMyX3QpKSk7CisJCWlndF9hc3NlcnRfZXEoMCwgbWVtY21wKGNvbmZp Z3NbaV0ubXV4X3JlZ3MsCisJCQkJCW11eF9yZWdzLAorCQkJCQljb25maWdzW2ldLm5fbXV4X3Jl Z3MgKiAyICogc2l6ZW9mKHVpbnQzMl90KSkpOworCisJCWZyZWUoYm9vbGVhbl9yZWdzKTsKKwkJ ZnJlZShmbGV4X3JlZ3MpOworCQlmcmVlKG11eF9yZWdzKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShjb25maWdzKTsgaSsrKSB7CisJCXJlbW92ZV9wZXJmX2NvbmZpZyhmZCwg Y29uZmlnc1tpXS5pZCk7CisKKwkJZnJlZShjb25maWdzW2ldLmJvb2xlYW5fcmVncyk7CisJCWZy ZWUoY29uZmlnc1tpXS5mbGV4X3JlZ3MpOworCQlmcmVlKGNvbmZpZ3NbaV0ubXV4X3JlZ3MpOwor CX0KK30KKwogaWd0X21haW4KIHsKIAlpbnQgZmQgPSAtMTsKQEAgLTUyNCw2ICsxMTE3LDIxIEBA IGlndF9tYWluCiAJCXRlc3RfcXVlcnlfdG9wb2xvZ3lfa25vd25fcGNpX2lkcyhmZCwgZGV2aWQp OwogCX0KIAorCWlndF9zdWJ0ZXN0KCJxdWVyeS1wZXJmLWNvbmZpZy1saXN0LWludmFsaWQiKSB7 CisJCWlndF9yZXF1aXJlKHF1ZXJ5X3BlcmZfY29uZmlnX3N1cHBvcnRlZChmZCkpOworCQl0ZXN0 X3F1ZXJ5X3BlcmZfY29uZmlnX2xpc3RfaW52YWxpZChmZCk7CisJfQorCisJaWd0X3N1YnRlc3Qo InF1ZXJ5LXBlcmYtY29uZmlnLWRhdGEtaW52YWxpZCIpIHsKKwkJaWd0X3JlcXVpcmUocXVlcnlf cGVyZl9jb25maWdfc3VwcG9ydGVkKGZkKSk7CisJCXRlc3RfcXVlcnlfcGVyZl9jb25maWdfZGF0 YV9pbnZhbGlkKGZkKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgicXVlcnktcGVyZi1jb25maWdzIikg eworCQlpZ3RfcmVxdWlyZShxdWVyeV9wZXJmX2NvbmZpZ19zdXBwb3J0ZWQoZmQpKTsKKwkJdGVz dF9xdWVyeV9wZXJmX2NvbmZpZ3MoZmQpOworCX0KKwogCWlndF9maXh0dXJlIHsKIAkJY2xvc2Uo ZmQpOwogCX0KLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==