From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Mika Kuoppala Date: Thu, 14 Nov 2019 16:14:00 +0200 Message-Id: <20191114141400.27197-1-mika.kuoppala@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] Add tests/gem_exec_parse_blt List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-ID: RnJvbTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5jb20+CgpGb3IgdGVzdGlu ZyBibGl0dGVyIGVuZ2luZSBjb21tYW5kIHBhcnNlciBvbiBnZW45LgoKdjI6IGJhZCBqdW1wIG9m ZnNldAp2MzogcmViYXNlCnY0OiBpbXByb3ZlIGJiIHN0YXJ0IGFuZCBzdWJjYXNlIGl0CnY1OiBm aXggcHJlc3VtZWQgb2Zmc2V0cyAoSm9uKQp2NjogbmFtZSwgcmVtb3ZlIHNwdXJpb3VzIGdlbV9z eW5jcyAoQ2hyaXMpCgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ ClNpZ25lZC1vZmYtYnk6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAbGludXguaW50ZWwu Y29tPgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgICAgfCAgIDcgKy0K IHRlc3RzL2k5MTUvZ2VtX2V4ZWNfcGFyc2VfYmx0LmMgICAgICAgfCA5NzIgKysrKysrKysrKysr KysrKysrKysrKysrKysKIHRlc3RzL2ludGVsLWNpL2Zhc3QtZmVlZGJhY2sudGVzdGxpc3QgfCAg IDEgKwogdGVzdHMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiA0IGZp bGVzIGNoYW5nZWQsIDk3OSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHRlc3RzL2k5MTUvZ2VtX2V4ZWNfcGFyc2VfYmx0LmMKCmRpZmYgLS1naXQgYS90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA2YjFk NGNiMi4uMzNhNDU1OWQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIv dGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtMjA2LDggKzIwNiw4IEBAIGdlbV9leGVjX2Jhc2lj X1NPVVJDRVMgPSBpOTE1L2dlbV9leGVjX2Jhc2ljLmMKIFRFU1RTX3Byb2dzICs9IGdlbV9leGVj X2JpZwogZ2VtX2V4ZWNfYmlnX1NPVVJDRVMgPSBpOTE1L2dlbV9leGVjX2JpZy5jCiAKLVRFU1RT X3Byb2dzICs9IGdlbV9leGVjX2JsdAotZ2VtX2V4ZWNfYmx0X1NPVVJDRVMgPSBpOTE1L2dlbV9l eGVjX2JsdC5jCitURVNUU19wcm9ncyArPSBnZW1fZXhlY19wYXJzZV9ibHQKK2dlbV9leGVjX2Js dF9TT1VSQ0VTID0gaTkxNS9nZW1fZXhlY19wYXJzZV9ibHQuYwogCiBURVNUU19wcm9ncyArPSBn ZW1fZXhlY19jYXB0dXJlCiBnZW1fZXhlY19jYXB0dXJlX1NPVVJDRVMgPSBpOTE1L2dlbV9leGVj X2NhcHR1cmUuYwpAQCAtMjQ1LDYgKzI0NSw5IEBAIGdlbV9leGVjX3BhcmFtc19TT1VSQ0VTID0g aTkxNS9nZW1fZXhlY19wYXJhbXMuYwogVEVTVFNfcHJvZ3MgKz0gZ2VtX2V4ZWNfcGFyc2UKIGdl bV9leGVjX3BhcnNlX1NPVVJDRVMgPSBpOTE1L2dlbV9leGVjX3BhcnNlLmMKIAorVEVTVFNfcHJv Z3MgKz0gZ2VtX2JsdF9wYXJzZQorZ2VtX2JsdF9wYXJzZV9TT1VSQ0VTID0gaTkxNS9nZW1fYmx0 X3BhcnNlLmMKKwogVEVTVFNfcHJvZ3MgKz0gZ2VtX2V4ZWNfcmVsb2MKIGdlbV9leGVjX3JlbG9j X1NPVVJDRVMgPSBpOTE1L2dlbV9leGVjX3JlbG9jLmMKIApkaWZmIC0tZ2l0IGEvdGVzdHMvaTkx NS9nZW1fZXhlY19wYXJzZV9ibHQuYyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfcGFyc2VfYmx0LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmM0NDFjNmI3Ci0tLSAvZGV2L251 bGwKKysrIGIvdGVzdHMvaTkxNS9nZW1fZXhlY19wYXJzZV9ibHQuYwpAQCAtMCwwICsxLDk3MiBA QAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAi aWd0LmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVk ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8ZHJtLmg+CisKKy8q IFRvIGhlbHAgY3JhZnQgY29tbWFuZHMga25vd24gdG8gYmUgaW52YWxpZCBhY3Jvc3MgYWxsIGVu Z2luZXMgKi8KKyNkZWZpbmUgSU5TVFJfQ0xJRU5UX1NISUZUCTI5CisjZGVmaW5lICAgSU5TVFJf SU5WQUxJRF9DTElFTlQgIDB4NworCisjZGVmaW5lIE1JX0xPQURfUkVHSVNURVJfUkVHICgweDJh IDw8IDIzKQorI2RlZmluZSBNSV9TVE9SRV9SRUdJU1RFUl9NRU0gKDB4MjQgPDwgMjMpCisjZGVm aW5lIE1JX0FSQl9PTl9PRkYgKDB4OCA8PCAyMykKKyNkZWZpbmUgTUlfVVNFUl9JTlRFUlJVUFQg KDB4MDIgPDwgMjMpCisjZGVmaW5lIE1JX0ZMVVNIX0RXICgweDI2IDw8IDIzKQorI2RlZmluZSBN SV9BUkJfQ0hFQ0sgKDB4MDUgPDwgMjMpCisjZGVmaW5lIE1JX1JFUE9SVF9IRUFEICgweDA3IDw8 IDIzKQorI2RlZmluZSBNSV9TVVNQRU5EX0ZMVVNIICgweDBiIDw8IDIzKQorI2RlZmluZSBNSV9M T0FEX1NDQU5fTElORVNfRVhDTCAoMHgxMyA8PCAyMykKKyNkZWZpbmUgTUlfVVBEQVRFX0dUVCAo MHgyMyA8PCAyMykKKworI2RlZmluZSBCQ1NfU1dDVFJMICAgICAweDIyMjAwCisjZGVmaW5lIEJD U19HUFJfQkFTRSAgIDB4MjI2MDAKKyNkZWZpbmUgQkNTX0dQUihuKSAgICAgKDB4MjI2MDAgKyAo bikgKiA4KQorI2RlZmluZSBCQ1NfR1BSX1VEVyhuKSAoMHgyMjYwMCArIChuKSAqIDggKyA0KQor CisjZGVmaW5lIEhBTkRMRV9TSVpFICA0MDk2CisKK3N0YXRpYyBpbnQgcGFyc2VyX3ZlcnNpb247 CisKK3N0YXRpYyBpbnQgY29tbWFuZF9wYXJzZXJfdmVyc2lvbihpbnQgZmQpCit7CisJaW50IHZl cnNpb24gPSAtMTsKKwlkcm1faTkxNV9nZXRwYXJhbV90IGdwOworCisJZ3AucGFyYW0gPSBJOTE1 X1BBUkFNX0NNRF9QQVJTRVJfVkVSU0lPTjsKKwlncC52YWx1ZSA9ICZ2ZXJzaW9uOworCisJaWYg KGRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKSA9PSAwKQorCQlyZXR1 cm4gdmVyc2lvbjsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCAgX19leGVjX2JhdGNo X3BhdGNoZWQoaW50IGZkLCBpbnQgZW5naW5lLAorCQkJCSB1aW50MzJfdCBjbWRfYm8sIGNvbnN0 IHVpbnQzMl90ICpjbWRzLCBpbnQgc2l6ZSwKKwkJCQkgdWludDMyX3QgdGFyZ2V0X2JvLCB1aW50 NjRfdCB0YXJnZXRfb2Zmc2V0LCB1aW50NjRfdCB0YXJnZXRfZGVsdGEpCit7CisJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyIG9ialsyXTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkg cmVsb2NbMV07CisKKwlnZW1fd3JpdGUoZmQsIGNtZF9ibywgMCwgY21kcywgc2l6ZSk7CisKKwlt ZW1zZXQob2JqLCAwLCBzaXplb2Yob2JqKSk7CisJb2JqWzBdLmhhbmRsZSA9IHRhcmdldF9ibzsK KwlvYmpbMV0uaGFuZGxlID0gY21kX2JvOworCisJbWVtc2V0KHJlbG9jLCAwLCBzaXplb2YocmVs b2MpKTsKKwlyZWxvY1swXS5vZmZzZXQgPSB0YXJnZXRfb2Zmc2V0OworCXJlbG9jWzBdLnRhcmdl dF9oYW5kbGUgPSB0YXJnZXRfYm87CisJcmVsb2NbMF0uZGVsdGEgPSB0YXJnZXRfZGVsdGE7CisJ cmVsb2NbMF0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJcmVsb2Nb MF0ud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJcmVsb2NbMF0ucHJl c3VtZWRfb2Zmc2V0ID0gLTE7CisKKwlvYmpbMV0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRl cihyZWxvYyk7CisJb2JqWzFdLnJlbG9jYXRpb25fY291bnQgPSAxOworCisJbWVtc2V0KCZleGVj YnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2Vy X3BvaW50ZXIob2JqKTsKKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDI7CisJZXhlY2J1Zi5iYXRj aF9sZW4gPSBzaXplOworCWV4ZWNidWYuZmxhZ3MgPSBlbmdpbmU7CisKKwlyZXR1cm4gX19nZW1f ZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworfQorCitzdGF0aWMgdm9pZCBleGVjX2JhdGNoX3BhdGNo ZWQoaW50IGZkLCBpbnQgZW5naW5lLAorCQkJICAgICAgIHVpbnQzMl90IGNtZF9ibywgY29uc3Qg dWludDMyX3QgKmNtZHMsCisJCQkgICAgICAgaW50IHNpemUsIGludCBwYXRjaF9vZmZzZXQsCisJ CQkgICAgICAgbG9uZyBpbnQgZXhwZWN0ZWRfdmFsdWUpCit7CisJY29uc3QgdWludDMyX3QgdGFy Z2V0X2JvID0gZ2VtX2NyZWF0ZShmZCwgSEFORExFX1NJWkUpOworCXVpbnQ2NF90IGFjdHVhbF92 YWx1ZSA9IDA7CisJbG9uZyBpbnQgcmV0OworCisJcmV0ID0gX19leGVjX2JhdGNoX3BhdGNoZWQo ZmQsIGVuZ2luZSwgY21kX2JvLCBjbWRzLCBzaXplLCB0YXJnZXRfYm8sIHBhdGNoX29mZnNldCwg MCk7CisJaWYgKHJldCkgeworCQlpZ3RfYXNzZXJ0X2x0KHJldCwgMCk7CisJCWdlbV9jbG9zZShm ZCwgdGFyZ2V0X2JvKTsKKwkJaWd0X2Fzc2VydF9lcShyZXQsIGV4cGVjdGVkX3ZhbHVlKTsKKwkJ cmV0dXJuOworCX0KKworCWdlbV9yZWFkKGZkLCB0YXJnZXRfYm8sIDAsICZhY3R1YWxfdmFsdWUs IHNpemVvZihhY3R1YWxfdmFsdWUpKTsKKworCWdlbV9jbG9zZShmZCwgdGFyZ2V0X2JvKTsKKwor CWlndF9hc3NlcnRfZXEoYWN0dWFsX3ZhbHVlLCBleHBlY3RlZF92YWx1ZSk7Cit9CisKK3N0YXRp YyBpbnQgX19leGVjX2JhdGNoKGludCBmZCwgaW50IGVuZ2luZSwgdWludDMyX3QgY21kX2JvLAor CQkJY29uc3QgdWludDMyX3QgKmNtZHMsIGludCBzaXplKQoreworCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0 MiBvYmpbMV07CisJaW50IHJldDsKKworCWdlbV93cml0ZShmZCwgY21kX2JvLCAwLCBjbWRzLCBz aXplKTsKKworCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKKwlvYmpbMF0uaGFuZGxlID0g Y21kX2JvOworCisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNi dWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsKKwlleGVjYnVmLmJ1ZmZlcl9j b3VudCA9IDE7CisJZXhlY2J1Zi5iYXRjaF9sZW4gPSBzaXplOworCWV4ZWNidWYuZmxhZ3MgPSBl bmdpbmU7CisKKwlyZXQgPSAgX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCisJcmV0dXJu IHJldDsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkIHByaW50X2JhdGNoKGNvbnN0IHVpbnQzMl90 ICpjbWRzLCBjb25zdCB1aW50MzJfdCBzeikKK3sKKwljb25zdCBpbnQgY29tbWFuZHMgPSBzeiAv IDQ7CisJaW50IGk7CisKKwlpZ3RfaW5mbygiQmF0Y2ggc2l6ZSAlZFxuIiwgc3opOworCWZvciAo aSA9IDA7IGkgPCBjb21tYW5kczsgaSsrKQorCQlpZ3RfaW5mbygiMHglMDh4OiAweCUwOHhcbiIs IGksIGNtZHNbaV0pOworfQorI2Vsc2UKKyNkZWZpbmUgcHJpbnRfYmF0Y2goY21kcywgc2l6ZSkK KyNlbmRpZgorCisjZGVmaW5lIGV4ZWNfYmF0Y2goZmQsIGVuZ2luZSwgYm8sIGNtZHMsIHN6LCBl eHBlY3RlZCkJXAorCXByaW50X2JhdGNoKGNtZHMsIHN6KTsgXAorCWlndF9hc3NlcnRfZXEoX19l eGVjX2JhdGNoKGZkLCBlbmdpbmUsIGJvLCBjbWRzLCBzeiksIGV4cGVjdGVkKQorCitzdGF0aWMg dm9pZCBleGVjX3NwbGl0X2JhdGNoKGludCBmZCwgaW50IGVuZ2luZSwgY29uc3QgdWludDMyX3Qg KmNtZHMsCisJCQkgICAgIGludCBzaXplLCBpbnQgZXhwZWN0ZWRfcmV0KQoreworCXN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiBvYmpbMV07CisJdWludDMyX3QgY21kX2JvOworCWNvbnN0IHVpbnQzMl90IG5v b3BbMTAyNF0gPSB7IDAgfTsKKwljb25zdCBpbnQgYWxsb2Nfc2l6ZSA9IDQwOTYgKiAyOworCWNv bnN0IGludCBhY3R1YWxfc3RhcnRfb2Zmc2V0ID0gNDA5Ni1zaXplb2YodWludDMyX3QpOworCisJ LyogQWxsb2NhdGUgYW5kIGZpbGwgYSAyLXBhZ2UgYmF0Y2ggd2l0aCBub29wcyAqLworCWNtZF9i byA9IGdlbV9jcmVhdGUoZmQsIGFsbG9jX3NpemUpOworCWdlbV93cml0ZShmZCwgY21kX2JvLCAw LCBub29wLCBzaXplb2Yobm9vcCkpOworCWdlbV93cml0ZShmZCwgY21kX2JvLCA0MDk2LCBub29w LCBzaXplb2Yobm9vcCkpOworCisJLyogV3JpdGUgdGhlIHByb3ZpZGVkIGNvbW1hbmRzIHN1Y2gg dGhhdCB0aGUgZmlyc3QgZHdvcmQKKwkgKiBvZiB0aGUgY29tbWFuZCBidWZmZXIgaXMgdGhlIGxh c3QgZHdvcmQgb2YgdGhlIGZpcnN0CisJICogcGFnZSAoaS5lLiB0aGUgY29tbWFuZCBpcyBzcGxp dCBhY3Jvc3MgdGhlIHR3byBwYWdlcykuCisJICovCisJZ2VtX3dyaXRlKGZkLCBjbWRfYm8sIGFj dHVhbF9zdGFydF9vZmZzZXQsIGNtZHMsIHNpemUpOworCisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9m KG9iaikpOworCW9ialswXS5oYW5kbGUgPSBjbWRfYm87CisKKwltZW1zZXQoJmV4ZWNidWYsIDAs IHNpemVvZihleGVjYnVmKSk7CisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRl cihvYmopOworCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMTsKKwkvKiBOQjogV2Ugd2FudCBiYXRj aF9zdGFydF9vZmZzZXQgYW5kIGJhdGNoX2xlbiB0byBwb2ludCB0byB0aGUgYmxvY2sKKwkgKiBv ZiB0aGUgYWN0dWFsIGNvbW1hbmRzIChpLmUuIGF0IHRoZSBsYXN0IGR3b3JkIG9mIHRoZSBmaXJz dCBwYWdlKSwKKwkgKiBidXQgaGF2ZSB0byBhZGp1c3QgYm90aCB0aGUgc3RhcnQgb2Zmc2V0IGFu ZCBsZW5ndGggdG8gbWVldCB0aGUKKwkgKiBrZXJuZWwgZHJpdmVyJ3MgcmVxdWlyZW1lbnRzIG9u IHRoZSBhbGlnbm1lbnQgb2YgdGhvc2UgZmllbGRzLgorCSAqLworCWV4ZWNidWYuYmF0Y2hfc3Rh cnRfb2Zmc2V0ID0gYWN0dWFsX3N0YXJ0X29mZnNldCAmIH4weDc7CisJZXhlY2J1Zi5iYXRjaF9s ZW4gPQorCQlBTElHTihzaXplICsgYWN0dWFsX3N0YXJ0X29mZnNldCAtIGV4ZWNidWYuYmF0Y2hf c3RhcnRfb2Zmc2V0LAorCQkgICAgICAweDgpOworCWV4ZWNidWYuZmxhZ3MgPSBlbmdpbmU7CisK KwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKSwgZXhwZWN0ZWRfcmV0 KTsKKworCWdlbV9jbG9zZShmZCwgY21kX2JvKTsKK30KKworc3RhdGljIHZvaWQgZXhlY19iYXRj aF9jaGFpbmVkKGludCBmZCwgaW50IGVuZ2luZSwKKwkJCSAgICAgICB1aW50MzJfdCBjbWRfYm8s IGNvbnN0IHVpbnQzMl90ICpjbWRzLAorCQkJICAgICAgIGludCBzaXplLCBpbnQgcGF0Y2hfb2Zm c2V0LAorCQkJICAgICAgIHVpbnQ2NF90IGV4cGVjdGVkX3ZhbHVlLAorCQkJICAgICAgIGludCBl eHBlY3RlZF9yZXR1cm4pCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVj YnVmOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialszXTsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2NbMV07CisJc3RydWN0IGRybV9pOTE1 X2dlbV9yZWxvY2F0aW9uX2VudHJ5IGZpcnN0X2xldmVsX3JlbG9jOworCisJY29uc3QgdWludDMy X3QgdGFyZ2V0X2JvID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisJY29uc3QgdWludDMyX3QgZmly c3RfbGV2ZWxfYm8gPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwl1aW50NjRfdCBhY3R1YWxfdmFs dWUgPSAwOworCWludCByZXQ7CisKKwljb25zdCB1aW50MzJfdCBmaXJzdF9sZXZlbF9jbWRzW10g PSB7CisJCU1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSB8 IDEsCisJCTAsCisJCTAsCisJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJfTsKKworCWdlbV93cml0 ZShmZCwgZmlyc3RfbGV2ZWxfYm8sIDAsCisJCSAgZmlyc3RfbGV2ZWxfY21kcywgc2l6ZW9mKGZp cnN0X2xldmVsX2NtZHMpKTsKKwlnZW1fd3JpdGUoZmQsIGNtZF9ibywgMCwgY21kcywgc2l6ZSk7 CisKKwltZW1zZXQob2JqLCAwLCBzaXplb2Yob2JqKSk7CisJb2JqWzBdLmhhbmRsZSA9IHRhcmdl dF9ibzsKKwlvYmpbMV0uaGFuZGxlID0gY21kX2JvOworCW9ialsyXS5oYW5kbGUgPSBmaXJzdF9s ZXZlbF9ibzsKKworCW1lbXNldChyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7CisJcmVsb2NbMF0u b2Zmc2V0ID0gcGF0Y2hfb2Zmc2V0OworCXJlbG9jWzBdLmRlbHRhID0gMDsKKwlyZWxvY1swXS50 YXJnZXRfaGFuZGxlID0gdGFyZ2V0X2JvOworCXJlbG9jWzBdLnJlYWRfZG9tYWlucyA9IEk5MTVf R0VNX0RPTUFJTl9DT01NQU5EOworCXJlbG9jWzBdLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RP TUFJTl9DT01NQU5EOworCXJlbG9jWzBdLnByZXN1bWVkX29mZnNldCA9IC0xOworCisJb2JqWzFd LnJlbG9jYXRpb25fY291bnQgPSAxOworCW9ialsxXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2lu dGVyKCZyZWxvYyk7CisKKwltZW1zZXQoJmZpcnN0X2xldmVsX3JlbG9jLCAwLCBzaXplb2YoZmly c3RfbGV2ZWxfcmVsb2MpKTsKKwlmaXJzdF9sZXZlbF9yZWxvYy5vZmZzZXQgPSA0OworCWZpcnN0 X2xldmVsX3JlbG9jLmRlbHRhID0gMDsKKwlmaXJzdF9sZXZlbF9yZWxvYy50YXJnZXRfaGFuZGxl ID0gY21kX2JvOworCWZpcnN0X2xldmVsX3JlbG9jLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RP TUFJTl9DT01NQU5EOworCWZpcnN0X2xldmVsX3JlbG9jLndyaXRlX2RvbWFpbiA9IDA7CisJb2Jq WzJdLnJlbG9jYXRpb25fY291bnQgPSAxOworCW9ialsyXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9w b2ludGVyKCZmaXJzdF9sZXZlbF9yZWxvYyk7CisKKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVv ZihleGVjYnVmKSk7CisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmop OworCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMzsKKwlleGVjYnVmLmJhdGNoX2xlbiA9IHNpemVv ZihmaXJzdF9sZXZlbF9jbWRzKTsKKwlleGVjYnVmLmZsYWdzID0gZW5naW5lOworCisJcmV0ID0g X19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCWlmIChleHBlY3RlZF9yZXR1cm4gJiYgcmV0 ID09IGV4cGVjdGVkX3JldHVybikKKwkJZ290byBvdXQ7CisKKwlnZW1fcmVhZChmZCx0YXJnZXRf Ym8sIDAsICZhY3R1YWxfdmFsdWUsIHNpemVvZihhY3R1YWxfdmFsdWUpKTsKKworb3V0OgorCWlm ICghZXhwZWN0ZWRfcmV0dXJuKQorCQlpZ3RfYXNzZXJ0X2VxKGV4cGVjdGVkX3ZhbHVlLCBhY3R1 YWxfdmFsdWUpOworCWVsc2UKKwkJaWd0X2Fzc2VydF9uZXEoZXhwZWN0ZWRfdmFsdWUsIGFjdHVh bF92YWx1ZSk7CisKKwlnZW1fY2xvc2UoZmQsIGZpcnN0X2xldmVsX2JvKTsKKwlnZW1fY2xvc2Uo ZmQsIHRhcmdldF9ibyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfc2VjdXJlX2JhdGNoZXMoY29u c3QgaW50IGZkKQoreworCWludCB2ID0gLTE7CisJZHJtX2k5MTVfZ2V0cGFyYW1fdCBncDsKKwor CWdwLnBhcmFtID0gSTkxNV9QQVJBTV9IQVNfU0VDVVJFX0JBVENIRVM7CisJZ3AudmFsdWUgPSAm djsKKworCWlndF9hc3NlcnRfZXEoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFN LCAmZ3ApLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHYsIDApOworfQorCitzdHJ1Y3QgY21kIHsKKwl1 aW50MzJfdCBjbWQ7CisJaW50IGxlbjsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworI2RlZmlu ZSBDTUQoQywgTCkgeyAuY21kID0gKEMpLCAubGVuID0gKEwpLCAubmFtZSA9ICNDIH0KKyNkZWZp bmUgQ01EX04oQykgeyAuY21kID0gKEMpLCAubGVuID0gMSwgLm5hbWUgPSAjQyB9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgY21kIGFsbG93ZWRfY21kc1tdID0geworCUNNRF9OKE1JX05PT1ApLAor CUNNRF9OKE1JX1VTRVJfSU5URVJSVVBUKSwKKwlDTURfTihNSV9XQUlUX0ZPUl9FVkVOVCksCisJ Q01EKE1JX0ZMVVNIX0RXLCA1KSwKKwlDTURfTihNSV9BUkJfQ0hFQ0spLAorCUNNRF9OKE1JX1JF UE9SVF9IRUFEKSwKKwlDTURfTihNSV9GTFVTSCksCisJQ01EX04oTUlfQVJCX09OX09GRiksCisJ Q01EX04oTUlfU1VTUEVORF9GTFVTSCksCisJQ01EKE1JX0xPQURfU0NBTl9MSU5FU19JTkNMLCAy KSwKKwlDTUQoTUlfTE9BRF9TQ0FOX0xJTkVTX0VYQ0wsIDIpLAorfTsKKworc3RhdGljIHVpbnQz Ml90ICppbmplY3RfY21kKHVpbnQzMl90ICpiYXRjaCwgY29uc3QgdWludDMyX3QgY21kLCBpbnQg bGVuKQoreworCWludCBpID0gMDsKKworCWJhdGNoW2krK10gPSBjbWQ7CisKKwl3aGlsZSAoLS1s ZW4pCisJCWJhdGNoW2krK10gPSAwOworCisJcmV0dXJuICZiYXRjaFtpXTsKK30KKworc3RhdGlj IHVuc2lnbmVkIGxvbmcgYmF0Y2hfbnVtX2NtZHMoY29uc3QgdWludDMyX3QgKiBjb25zdCBiYXRj aF9zdGFydCwKKwkJCQkgICAgY29uc3QgdWludDMyX3QgKiBjb25zdCBiYXRjaF9lbmQpCit7CisJ aWd0X2Fzc2VydF9sdGUoKHVuc2lnbmVkIGxvbmcpYmF0Y2hfc3RhcnQsICh1bnNpZ25lZCBsb25n KWJhdGNoX2VuZCk7CisKKwlyZXR1cm4gYmF0Y2hfZW5kIC0gYmF0Y2hfc3RhcnQ7Cit9CisKK3N0 YXRpYyB1bnNpZ25lZCBsb25nIGJhdGNoX2J5dGVzKGNvbnN0IHVpbnQzMl90ICogY29uc3QgYmF0 Y2hfc3RhcnQsCisJCQkJIGNvbnN0IHVpbnQzMl90ICogY29uc3QgYmF0Y2hfZW5kKQoreworCWNv bnN0IHVuc2lnbmVkIGxvbmcgYnl0ZXMgPSBiYXRjaF9udW1fY21kcyhiYXRjaF9zdGFydCwgYmF0 Y2hfZW5kKSAqIDQ7CisKKwlpZ3RfYXNzZXJ0KCEoYnl0ZXMgJiAweDcpKTsKKworCXJldHVybiBi eXRlczsKK30KKworc3RhdGljIHZvaWQgdGVzdF9hbGxvd2VkX2FsbChjb25zdCBpbnQgZmQsIGNv bnN0IHVpbnQzMl90IGhhbmRsZSkKK3sKKwl1aW50MzJfdCBiYXRjaFs0MDk2XTsKKwl1aW50MzJf dCAqYiA9ICZiYXRjaFswXTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGxv d2VkX2NtZHMpOyBpKyspCisJCWIgPSBpbmplY3RfY21kKGIsIGFsbG93ZWRfY21kc1tpXS5jbWQs CisJCQkgICAgICAgYWxsb3dlZF9jbWRzW2ldLmxlbik7CisKKwlpZiAoIShiYXRjaF9udW1fY21k cyhiYXRjaCwgYikgJSAyKSkKKwkJYiA9IGluamVjdF9jbWQoYiwgTUlfTk9PUCwgMSk7CisKKwli ID0gaW5qZWN0X2NtZChiLCBNSV9CQVRDSF9CVUZGRVJfRU5ELCAxKTsKKworCWV4ZWNfYmF0Y2go ZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwgYmF0Y2gsIGJhdGNoX2J5dGVzKGJhdGNoLCBiKSwg MCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfYWxsb3dlZF9zaW5nbGUoY29uc3QgaW50IGZkLCBj b25zdCB1aW50MzJfdCBoYW5kbGUpCit7CisJdWludDMyX3QgYmF0Y2hbNDA5Nl07CisJaW50IHJl dDsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGxvd2VkX2NtZHMpOyBpKysp IHsKKwkJdWludDMyX3QgKmIgPSAmYmF0Y2hbMF07CisKKwkJYiA9IGluamVjdF9jbWQoYiwgYWxs b3dlZF9jbWRzW2ldLmNtZCwKKwkJCSAgICAgICBhbGxvd2VkX2NtZHNbaV0ubGVuKTsKKworCQlp ZiAoIShiYXRjaF9udW1fY21kcyhiYXRjaCwgYikgJSAyKSkKKwkJCWIgPSBpbmplY3RfY21kKGIs IE1JX05PT1AsIDEpOworCisJCWIgPSBpbmplY3RfY21kKGIsIE1JX0JBVENIX0JVRkZFUl9FTkQs IDEpOworCisJCXJldCA9IF9fZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAor CQkJCSAgIGJhdGNoLCBiYXRjaF9ieXRlcyhiYXRjaCwgYikpOworCisJCWlndF9hc3NlcnRfZXEo cmV0LCAwKTsKKwl9OworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2JiX3NlY3VyZShjb25zdCBpbnQg ZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNi dWZmZXIyIGV4ZWNidWY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzFd OworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1sxXTsKKwlpbnQg cmV0OworCisJY29uc3QgdWludDMyX3QgYmF0Y2hfc2VjdXJlW10gPSB7CisJCU1JX0JBVENIX0JV RkZFUl9TVEFSVCB8IDEsCisJCTEyLAorCQkwLAorCQlNSV9OT09QLAorCQlNSV9OT09QLAorCQlN SV9CQVRDSF9CVUZGRVJfRU5ELAorCX07CisKKwlnZW1fd3JpdGUoZmQsIGhhbmRsZSwgMCwgYmF0 Y2hfc2VjdXJlLCBzaXplb2YoYmF0Y2hfc2VjdXJlKSk7CisKKwltZW1zZXQob2JqLCAwLCBzaXpl b2Yob2JqKSk7CisJb2JqWzBdLmhhbmRsZSA9IGhhbmRsZTsKKworCW1lbXNldChyZWxvYywgMCwg c2l6ZW9mKHJlbG9jKSk7CisJcmVsb2NbMF0ub2Zmc2V0ID0gMSAqIHNpemVvZih1aW50MzJfdCk7 CisJcmVsb2NbMF0udGFyZ2V0X2hhbmRsZSA9IGhhbmRsZTsKKwlyZWxvY1swXS5kZWx0YSA9IDQg KiBzaXplb2YodWludDMyX3QpOworCXJlbG9jWzBdLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RP TUFJTl9DT01NQU5EOworCXJlbG9jWzBdLndyaXRlX2RvbWFpbiA9IDA7CisJcmVsb2NbMF0ucHJl c3VtZWRfb2Zmc2V0ID0gLTE7CisKKwlvYmpbMF0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRl cihyZWxvYyk7CisJb2JqWzBdLnJlbG9jYXRpb25fY291bnQgPSAxOworCisJbWVtc2V0KCZleGVj YnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2Vy X3BvaW50ZXIob2JqKTsKKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDE7CisJZXhlY2J1Zi5iYXRj aF9sZW4gPSBzaXplb2YoYmF0Y2hfc2VjdXJlKTsKKwlleGVjYnVmLmZsYWdzID0gSTkxNV9FWEVD X0JMVDsKKworCXJldCA9IF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKKworCWlndF9hc3Nl cnRfZXEocmV0LCAtRUFDQ0VTKTsKK30KKworI2RlZmluZSBCQl9TVEFSVF9QQVJBTSAwCisjZGVm aW5lIEJCX1NUQVJUX09VVCAgIDEKKyNkZWZpbmUgQkJfU1RBUlRfQ01EICAgMgorCitzdGF0aWMg dm9pZCB0ZXN0X2JiX3N0YXJ0KGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlLCBp bnQgdGVzdCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzJdOworCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1szXTsKKwljb25zdCB1aW50MzJfdCB0YXJnZXRf Ym8gPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwl1aW50MzJfdCAqZHN0OworCWludCByZXQ7CisJ dW5zaWduZWQgaW50IGp1bXBfb2ZmOworCisJY29uc3QgdWludDMyX3QgYmF0Y2hbXSA9IHsKKwkJ TUlfTk9PUCwKKwkJTUlfTk9PUCwKKwkJTUlfTk9PUCwKKwkJTUlfTk9PUCwKKwkJTUlfU1RPUkVf RFdPUkRfSU1NLAorCQkwLAorCQkwLAorCQkxLAorCQlNSV9TVE9SRV9EV09SRF9JTU0sCisJCTQs CisJCTAsCisJCTIsCisJCU1JX0NPTkRfQkFUQ0hfQlVGRkVSX0VORCB8IDEsCisJCTAsCisJCTAs CisJCTAsCisJCU1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2 NSB8IDEsCisJCTAsCisJCTAsCisJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJfTsKKworCWlndF9y ZXF1aXJlKGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQsIEk5MTVfRVhFQ19CTFQpKTsKKworCXN3aXRj aCAodGVzdCkgeworCWNhc2UgQkJfU1RBUlRfUEFSQU06CisJCWp1bXBfb2ZmID0gNSAqIHNpemVv Zih1aW50MzJfdCk7CisJCWJyZWFrOworCWNhc2UgQkJfU1RBUlRfQ01EOgorCQlqdW1wX29mZiA9 IDggKiBzaXplb2YodWludDMyX3QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlqdW1wX29mZiA9 IDB4ZjAwZDAwMDA7CisJfQorCisJZ2VtX3dyaXRlKGZkLCBoYW5kbGUsIDAsIGJhdGNoLCBzaXpl b2YoYmF0Y2gpKTsKKworCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKKwlvYmpbMF0uaGFu ZGxlID0gdGFyZ2V0X2JvOworCW9ialsxXS5oYW5kbGUgPSBoYW5kbGU7CisKKwltZW1zZXQocmVs b2MsIDAsIHNpemVvZihyZWxvYykpOworCXJlbG9jWzBdLm9mZnNldCA9IDUgKiBzaXplb2YodWlu dDMyX3QpOworCXJlbG9jWzBdLnRhcmdldF9oYW5kbGUgPSBvYmpbMF0uaGFuZGxlOworCXJlbG9j WzBdLmRlbHRhID0gMDsKKwlyZWxvY1swXS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5f Q09NTUFORDsKKwlyZWxvY1swXS53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ09NTUFO RDsKKwlyZWxvY1swXS5wcmVzdW1lZF9vZmZzZXQgPSAtMTsKKworCXJlbG9jWzFdLm9mZnNldCA9 IDkgKiBzaXplb2YodWludDMyX3QpOworCXJlbG9jWzFdLnRhcmdldF9oYW5kbGUgPSBvYmpbMF0u aGFuZGxlOworCXJlbG9jWzFdLmRlbHRhID0gMSAqIHNpemVvZih1aW50MzJfdCk7CisJcmVsb2Nb MV0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJcmVsb2NbMV0ud3Jp dGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQ7CisJcmVsb2NbMV0ucHJlc3VtZWRf b2Zmc2V0ID0gLTE7CisKKwlyZWxvY1syXS5vZmZzZXQgPSAxNyAqIHNpemVvZih1aW50MzJfdCk7 CisJcmVsb2NbMl0udGFyZ2V0X2hhbmRsZSA9IG9ialsxXS5oYW5kbGU7CisJcmVsb2NbMl0uZGVs dGEgPSBqdW1wX29mZjsKKwlyZWxvY1syXS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5f Q09NTUFORDsKKwlyZWxvY1syXS53cml0ZV9kb21haW4gPSAwOworCXJlbG9jWzJdLnByZXN1bWVk X29mZnNldCA9IC0xOworCisJb2JqWzFdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIocmVs b2MpOworCW9ialsxXS5yZWxvY2F0aW9uX2NvdW50ID0gMzsKKworCW1lbXNldCgmZXhlY2J1Ziwg MCwgc2l6ZW9mKGV4ZWNidWYpKTsKKwlleGVjYnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2lu dGVyKG9iaik7CisJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAyOworCWV4ZWNidWYuYmF0Y2hfbGVu ID0gc2l6ZW9mKGJhdGNoKTsKKwlleGVjYnVmLmZsYWdzID0gSTkxNV9FWEVDX0JMVDsKKworCWRz dCA9IGdlbV9tbWFwX19jcHUoZmQsIG9ialswXS5oYW5kbGUsIDAsIDQwOTYsCisJCQkgICAgUFJP VF9SRUFEIHwgUFJPVF9XUklURSk7CisKKwlpZ3RfYXNzZXJ0X2VxKGRzdFswXSwgMCk7CisJaWd0 X2Fzc2VydF9lcShkc3RbMV0sIDApOworCisJcmV0ID0gX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNi dWYpOworCisJc3dpdGNoICh0ZXN0KSB7CisJY2FzZSBCQl9TVEFSVF9QQVJBTToKKwkJaWd0X2Fz c2VydF9lcShyZXQsIC1FSU5WQUwpOworCQlicmVhazsKKwljYXNlIEJCX1NUQVJUX0NNRDoKKwkJ aWd0X2Fzc2VydF9lcShyZXQsIDApOworCisJCXdoaWxlIChSRUFEX09OQ0UoZHN0WzBdKSA9PSAw KQorCQkgICAgICAgOworCisJCXdoaWxlIChSRUFEX09OQ0UoZHN0WzFdKSA9PSAwKQorCQkJOwor CisJCWlndF9hc3NlcnRfZXEoZHN0WzBdLCAxKTsKKwkJaWd0X2Fzc2VydF9lcShkc3RbMV0sIDIp OworCisJCWlndF9pbmZvKCJ2YWx1ZXMgbm93ICV4ICV4XG4iLCBkc3RbMF0sIGRzdFsxXSk7CisK KwkJZHN0WzBdID0gMDsKKworCQlpZ3RfaW5mbygidmFsdWVzIG5vdyAleCAleFxuIiwgZHN0WzBd LCBkc3RbMV0pOworCisJCWlndF9hc3NlcnRfZXEoZHN0WzBdLCAwKTsKKwkJaWd0X2Fzc2VydF9l cShkc3RbMV0sIDIpOworCisJCWJyZWFrOworCisJY2FzZSBCQl9TVEFSVF9PVVQ6CisJCWlndF9h c3NlcnRfZXEocmV0LCAtRUlOVkFMKTsKKwkJYnJlYWs7CisJfQorCisJZ2VtX211bm1hcChkc3Qs IDQwOTYpOworCWdlbV9jbG9zZShmZCwgdGFyZ2V0X2JvKTsKK30KKworc3RhdGljIHZvaWQgdGVz dF9iYl9jaGFpbmVkKGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlKQoreworCWNv bnN0IHVpbnQzMl90IGJhdGNoW10gPSB7CisJCSgweDIwIDw8IDIzKSB8IDIsIC8qIE1JX1NUT1JF X0RBVEFfSU1NICovCisJCTAsCisJCTAsCisJCTB4YmFhZGYwMGQsCisJCU1JX05PT1AsCisJCU1J X0JBVENIX0JVRkZFUl9FTkQsCisJfTsKKworCWV4ZWNfYmF0Y2hfY2hhaW5lZChmZCwgSTkxNV9F WEVDX1JFTkRFUiwKKwkJCSAgIGhhbmRsZSwKKwkJCSAgIGJhdGNoLCBzaXplb2YoYmF0Y2gpLAor CQkJICAgNCwKKwkJCSAgIDB4YmFhZGYwMGQsCisJCQkgICAwKTsKKworCWV4ZWNfYmF0Y2hfY2hh aW5lZChmZCwgSTkxNV9FWEVDX0JMVCwKKwkJCSAgIGhhbmRsZSwKKwkJCSAgIGJhdGNoLCBzaXpl b2YoYmF0Y2gpLAorCQkJICAgNCwKKwkJCSAgIDB4YmFhZGYwMGQsCisJCQkgICBFUEVSTSk7Cit9 CisKK3N0YXRpYyB2b2lkIHRlc3RfY21kX2Nyb3NzaW5nX3BhZ2UoY29uc3QgaW50IGZkLCBjb25z dCB1aW50MzJfdCBoYW5kbGUpCit7CisJY29uc3QgdWludDMyX3QgbHJpX29rW10gPSB7CisJCU1J X0xPQURfUkVHSVNURVJfSU1NLAorCQlCQ1NfR1BSKDApLAorCQkweGJhYWRmMDBkLAorCQlNSV9C QVRDSF9CVUZGRVJfRU5ELAorCX07CisJY29uc3QgdWludDMyX3Qgc3RvcmVfcmVnW10gPSB7CisJ CU1JX1NUT1JFX1JFR0lTVEVSX01FTSB8ICg0IC0gMiksCisJCUJDU19HUFIoMCksCisJCTAsIC8q IHJlbG9jICovCisJCTAsIC8qIHJlbG9jICovCisJCU1JX05PT1AsCisJCU1JX0JBVENIX0JVRkZF Ul9FTkQsCisJfTsKKworCWV4ZWNfc3BsaXRfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsCisJCQkg bHJpX29rLCBzaXplb2YobHJpX29rKSwKKwkJCSAwKTsKKworCWV4ZWNfYmF0Y2hfcGF0Y2hlZChm ZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAorCQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3RvcmVf cmVnKSwKKwkJCSAgIDIgKiBzaXplb2YodWludDMyX3QpLCAvKiByZWxvYyAqLworCQkJICAgMHhi YWFkZjAwZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9sZW5ndGgoY29uc3QgaW50 IGZkLCBjb25zdCB1aW50MzJfdCBoYW5kbGUpCit7CisJY29uc3QgdWludDMyX3Qgb2tfdmFsID0g MHhiYWFkZjAwZDsKKwljb25zdCB1aW50MzJfdCBiYWRfdmFsID0gMHhmMDBkYmFhZDsKKwljb25z dCB1aW50MzJfdCBub29wc1s4MTkyXSA9IHsgMCwgfTsKKworCWNvbnN0IHVpbnQzMl90IGxyaV9v a1tdID0geworCQlNSV9MT0FEX1JFR0lTVEVSX0lNTSwKKwkJQkNTX0dQUigwKSwKKwkJb2tfdmFs LAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAorCX07CisKKwljb25zdCB1aW50MzJfdCBscmlfYmFk W10gPSB7CisJCU1JX0xPQURfUkVHSVNURVJfSU1NLAorCQlCQ1NfR1BSKDApLAorCQliYWRfdmFs LAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAorCX07CisKKwljb25zdCB1aW50MzJfdCBzdG9yZV9y ZWdbXSA9IHsKKwkJTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgKDQgLSAyKSwKKwkJQkNTX0dQUigw KSwKKwkJMCwgLyogcmVsb2MgKi8KKwkJMCwgLyogcmVsb2MgKi8KKwkJTUlfTk9PUCwKKwkJTUlf QkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JMVCwg aGFuZGxlLAorCQkgICBscmlfb2ssIHNpemVvZihscmlfb2spLAorCQkgICAwKTsKKworCWV4ZWNf YmF0Y2hfcGF0Y2hlZChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAorCQkJICAgc3RvcmVfcmVn LCBzaXplb2Yoc3RvcmVfcmVnKSwKKwkJCSAgIDIgKiBzaXplb2YodWludDMyX3QpLCAvKiByZWxv YyAqLworCQkJICAgb2tfdmFsKTsKKworCWV4ZWNfYmF0Y2goZmQsIEk5MTVfRVhFQ19CTFQsIGhh bmRsZSwKKwkJICAgbHJpX2JhZCwgMCwKKwkJICAgMCk7CisKKwlleGVjX2JhdGNoX3BhdGNoZWQo ZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJCSAgIHN0b3JlX3JlZywgc2l6ZW9mKHN0b3Jl X3JlZyksCisJCQkgICAyICogc2l6ZW9mKHVpbnQzMl90KSwgLyogcmVsb2MgKi8KKwkJCSAgIG9r X3ZhbCk7CisKKwlleGVjX2JhdGNoKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCisJCSAgIGxy aV9vaywgNDA5NiwKKwkJICAgMCk7CisKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX3dyaXRlKGZkLCBo YW5kbGUsIDAsIG5vb3BzLCA0MDk3KSwgLUVJTlZBTCk7Cit9CisKK3N0cnVjdCByZWcgeworCXVp bnQzMl90IGFkZHI7CisJdWludDMyX3QgbWFzazsKKwlib29sIG1hc2tlZF93cml0ZTsKKwlib29s IHByaXZpbGVnZWQ7Cit9OworCisjZGVmaW5lIFJFR19NKEFERFIsIE1BU0ssIFdNLCBQKSB7IChB RERSKSwgKE1BU0spLCAoV00pLCAoUCkgfQorI2RlZmluZSBSRUcoQUREUikgUkVHX00oQUREUiwg MHhmZmZmZmZmZiwgZmFsc2UsIGZhbHNlKQorI2RlZmluZSBSRUdfUChBRERSKSBSRUdfTShBRERS LCAweGZmZmZmZmZmLCBmYWxzZSwgdHJ1ZSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWcgcmVn c1tdID0geworCVJFR19NKEJDU19TV0NUUkwsIDB4MywgdHJ1ZSwgZmFsc2UpLAorCVJFRyhCQ1Nf R1BSKDApKSwKKwlSRUcoQkNTX0dQUl9VRFcoMCkpLAorCVJFRyhCQ1NfR1BSKDEpKSwKKwlSRUco QkNTX0dQUl9VRFcoMSkpLAorCVJFRyhCQ1NfR1BSKDIpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMikp LAorCVJFRyhCQ1NfR1BSKDMpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMykpLAorCVJFRyhCQ1NfR1BS KDQpKSwKKwlSRUcoQkNTX0dQUl9VRFcoNCkpLAorCVJFRyhCQ1NfR1BSKDUpKSwKKwlSRUcoQkNT X0dQUl9VRFcoNSkpLAorCVJFRyhCQ1NfR1BSKDYpKSwKKwlSRUcoQkNTX0dQUl9VRFcoNikpLAor CVJFRyhCQ1NfR1BSKDcpKSwKKwlSRUcoQkNTX0dQUl9VRFcoNykpLAorCVJFRyhCQ1NfR1BSKDgp KSwKKwlSRUcoQkNTX0dQUl9VRFcoOCkpLAorCVJFRyhCQ1NfR1BSKDkpKSwKKwlSRUcoQkNTX0dQ Ul9VRFcoOSkpLAorCVJFRyhCQ1NfR1BSKDEwKSksCisJUkVHKEJDU19HUFJfVURXKDEwKSksCisJ UkVHKEJDU19HUFIoMTEpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMTEpKSwKKwlSRUcoQkNTX0dQUigx MikpLAorCVJFRyhCQ1NfR1BSX1VEVygxMikpLAorCVJFRyhCQ1NfR1BSKDEzKSksCisJUkVHKEJD U19HUFJfVURXKDEzKSksCisJUkVHKEJDU19HUFIoMTQpKSwKKwlSRUcoQkNTX0dQUl9VRFcoMTQp KSwKKwlSRUcoQkNTX0dQUigxNSkpLAorCVJFRyhCQ1NfR1BSX1VEVygxNSkpLAorCisJUkVHX1Ao MCksCisJUkVHX1AoMjAwMDAwKSwKKworCVJFR19QKEJDU19TV0NUUkwgLSAxKSwKKwlSRUdfUChC Q1NfU1dDVFJMIC0gMiksCisJUkVHX1AoQkNTX1NXQ1RSTCAtIDMpLAorCVJFR19QKEJDU19TV0NU UkwgLSA0KSwKKwlSRUdfUChCQ1NfU1dDVFJMICsgNCksCisKKwlSRUdfUChCQ1NfR1BSKDApIC0g MSksCisJUkVHX1AoQkNTX0dQUigwKSAtIDIpLAorCVJFR19QKEJDU19HUFIoMCkgLSAzKSwKKwlS RUdfUChCQ1NfR1BSKDApIC0gNCksCisJUkVHX1AoQkNTX0dQUl9VRFcoMTUpICsgNCksCit9Owor CitzdGF0aWMgdm9pZCB0ZXN0X3JlZ2lzdGVyKGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3Qg aGFuZGxlLAorCQkJICBjb25zdCBzdHJ1Y3QgcmVnICpyKQoreworCWNvbnN0IHVpbnQzMl90IGxy aV96ZXJvW10gPSB7CisJCU1JX0xPQURfUkVHSVNURVJfSU1NLAorCQlyLT5hZGRyLAorCQlyLT5t YXNrZWRfd3JpdGUgPyAweGZmZmYwMDAwIDogMCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9 OworCisJY29uc3QgdWludDMyX3QgbHJpX21hc2tbXSA9IHsKKwkJTUlfTE9BRF9SRUdJU1RFUl9J TU0sCisJCXItPmFkZHIsCisJCXItPm1hc2tlZF93cml0ZSA/IChyLT5tYXNrIDw8IDE2KSB8IHIt Pm1hc2sgOiByLT5tYXNrLAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAorCX07CisKKwljb25zdCB1 aW50MzJfdCBzdG9yZV9yZWdbXSA9IHsKKwkJTUlfU1RPUkVfUkVHSVNURVJfTUVNIHwgKDQgLSAy KSwKKwkJci0+YWRkciwKKwkJMCwgLyogcmVsb2MgKi8KKwkJMCwgLyogcmVsb2MgKi8KKwkJTUlf Tk9PUCwKKwkJTUlfQkFUQ0hfQlVGRkVSX0VORCwKKwl9OworCisJZXhlY19iYXRjaChmZCwgSTkx NV9FWEVDX0JMVCwgaGFuZGxlLAorCQkgICBscmlfbWFzaywgc2l6ZW9mKGxyaV9tYXNrKSwKKwkJ ICAgci0+cHJpdmlsZWdlZCA/IC1FQUNDRVMgOiAwKTsKKworCWV4ZWNfYmF0Y2hfcGF0Y2hlZChm ZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAorCQkJICAgc3RvcmVfcmVnLCBzaXplb2Yoc3RvcmVf cmVnKSwKKwkJCSAgIDIgKiBzaXplb2YodWludDMyX3QpLCAvKiByZWxvYyAqLworCQkJICAgci0+ cHJpdmlsZWdlZCA/IC1FQUNDRVMgOiByLT5tYXNrKTsKKworCWV4ZWNfYmF0Y2goZmQsIEk5MTVf RVhFQ19CTFQsIGhhbmRsZSwKKwkJICAgbHJpX3plcm8sIHNpemVvZihscmlfemVybyksCisJCSAg IHItPnByaXZpbGVnZWQgPyAtRUFDQ0VTIDogMCk7CisKKwlleGVjX2JhdGNoX3BhdGNoZWQoZmQs IEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJCSAgIHN0b3JlX3JlZywgc2l6ZW9mKHN0b3JlX3Jl ZyksCisJCQkgICAyICogc2l6ZW9mKHVpbnQzMl90KSwgLyogcmVsb2MgKi8KKwkJCSAgIHItPnBy aXZpbGVnZWQgPyAtRUFDQ0VTIDogMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfdmFsaWRfcmVn aXN0ZXJzKGNvbnN0IGludCBmZCwgY29uc3QgdWludDMyX3QgaGFuZGxlKQoreworCWludCBpOwor CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVncyk7IGkrKykKKwkJdGVzdF9yZWdpc3Rl cihmZCwgaGFuZGxlLCAmcmVnc1tpXSk7Cit9CisKK3N0YXRpYyBsb25nIGludCByZWFkX3JlZyhj b25zdCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSwKKwkJCSBjb25zdCB1aW50MzJfdCBh ZGRyKQoreworCWNvbnN0IHVpbnQzMl90IHN0b3JlX3JlZ1tdID0geworCQlNSV9TVE9SRV9SRUdJ U1RFUl9NRU0gfCAoNCAtIDIpLAorCQlhZGRyLAorCQkwLCAvKiByZWxvYyAqLworCQkwLCAvKiBy ZWxvYyAqLworCQlNSV9OT09QLAorCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAorCX07CisJdWludDMy X3QgdGFyZ2V0X2JvOworCXVpbnQzMl90IHZhbHVlOworCWxvbmcgaW50IHJldDsKKworCXRhcmdl dF9ibyA9IGdlbV9jcmVhdGUoZmQsIEhBTkRMRV9TSVpFKTsKKworCXJldCA9IF9fZXhlY19iYXRj aF9wYXRjaGVkKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCisJCQkJICAgc3RvcmVfcmVnLCBz aXplb2Yoc3RvcmVfcmVnKSwKKwkJCQkgICB0YXJnZXRfYm8sIDIgKiBzaXplb2YodWludDMyX3Qp LCAwKTsKKworCWlmIChyZXQpIHsKKwkJaWd0X2Fzc2VydF9sdChyZXQsIDApOworCQlnZW1fY2xv c2UoZmQsIHRhcmdldF9ibyk7CisJCXJldHVybiByZXQ7CisJfQorCisJZ2VtX3JlYWQoZmQsIHRh cmdldF9ibywgMCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKworCWdlbV9jbG9zZShmZCwgdGFy Z2V0X2JvKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGludCB3cml0ZV9yZWcoY29u c3QgaW50IGZkLCBjb25zdCB1aW50MzJfdCBoYW5kbGUsCisJCSAgICAgY29uc3QgdWludDMyX3Qg YWRkciwgY29uc3QgdWludDMyX3QgdmFsKQoreworCWNvbnN0IHVpbnQzMl90IGxyaVtdID0gewor CQlNSV9MT0FEX1JFR0lTVEVSX0lNTSwKKwkJYWRkciwKKwkJdmFsLAorCQlNSV9CQVRDSF9CVUZG RVJfRU5ELAorCX07CisKKwlyZXR1cm4gX19leGVjX2JhdGNoKGZkLCBJOTE1X0VYRUNfQkxULCBo YW5kbGUsCisJCQkgICAgbHJpLCBzaXplb2YobHJpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf dW5hbGlnbmVkX2FjY2Vzcyhjb25zdCBpbnQgZmQsIGNvbnN0IHVpbnQzMl90IGhhbmRsZSkKK3sK Kwljb25zdCB1aW50MzJfdCBhZGRyID0gQkNTX0dQUig0KTsKKwljb25zdCB1aW50MzJfdCB2YWwg PSAweGJhYWRmZWFkOworCWNvbnN0IHVpbnQzMl90IHByZSA9IDB4MTIzNDU2Nzg7CisJY29uc3Qg dWludDMyX3QgcG9zdCA9IDB4ODc2NTQzMjE7CisKKwlpZ3RfYXNzZXJ0X2VxKHdyaXRlX3JlZyhm ZCwgaGFuZGxlLCBhZGRyIC0gNCwgcHJlKSwgIDApOworCWlndF9hc3NlcnRfZXEod3JpdGVfcmVn KGZkLCBoYW5kbGUsIGFkZHIsIHZhbCksICAgICAgMCk7CisJaWd0X2Fzc2VydF9lcSh3cml0ZV9y ZWcoZmQsIGhhbmRsZSwgYWRkciArIDQsIHBvc3QpLCAwKTsKKworCWlndF9hc3NlcnRfZXEocmVh ZF9yZWcoZmQsIGhhbmRsZSwgYWRkciAtIDQpLCBwcmUpOworCWlndF9hc3NlcnRfZXEocmVhZF9y ZWcoZmQsIGhhbmRsZSwgYWRkciksICAgICB2YWwpOworCWlndF9hc3NlcnRfZXEocmVhZF9yZWco ZmQsIGhhbmRsZSwgYWRkciArIDQpLCBwb3N0KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgNDsg aSsrKSB7CisJCWlndF9hc3NlcnRfZXEod3JpdGVfcmVnKGZkLCBoYW5kbGUsIGFkZHIgKyBpLCB2 YWwpLCAwKTsKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRyKSwgdmFs KTsKKworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgKyAxKSwgdmFs KTsKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRyICsgMiksIHZhbCk7 CisJCWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciArIDMpLCB2YWwpOwor CQlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgKyA0KSwgcG9zdCk7CisJ CWlndF9hc3NlcnRfZXEocmVhZF9yZWcoZmQsIGhhbmRsZSwgYWRkciAtIDMpLCBwcmUpOworCQlp Z3RfYXNzZXJ0X2VxKHJlYWRfcmVnKGZkLCBoYW5kbGUsIGFkZHIgLSAyKSwgcHJlKTsKKwkJaWd0 X2Fzc2VydF9lcShyZWFkX3JlZyhmZCwgaGFuZGxlLCBhZGRyIC0gMSksIHByZSk7CisJfQorfQor CitpZ3RfbWFpbgoreworCXVpbnQzMl90IGhhbmRsZTsKKwlpbnQgZmQ7CisKKwlpZ3RfZml4dHVy ZSB7CisJCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7CisJCWlndF9yZXF1aXJl X2dlbShmZCk7CisJCWdlbV9yZXF1aXJlX2JsaXR0ZXIoZmQpOworCisJCXBhcnNlcl92ZXJzaW9u ID0gY29tbWFuZF9wYXJzZXJfdmVyc2lvbihmZCk7CisJCS8qIGlndF9yZXF1aXJlKHBhcnNlcl92 ZXJzaW9uID09IDEwKTsgKi8KKworCQlpZ3RfcmVxdWlyZShnZW1fdXNlc19wcGd0dChmZCkpOwor CQlpZ3RfcmVxdWlyZShnZW1faGFzX2JsdChmZCkpOworCQlpZ3RfcmVxdWlyZShpbnRlbF9nZW4o aW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpID09IDkpOworCisJCWhhbmRsZSA9IGdlbV9jcmVhdGUo ZmQsIEhBTkRMRV9TSVpFKTsKKworCQlpZ3RfZm9ya19oYW5nX2RldGVjdG9yKGZkKTsKKwl9CisK KwlpZ3Rfc3VidGVzdCgic2VjdXJlLWJhdGNoZXMiKQorCQl0ZXN0X3NlY3VyZV9iYXRjaGVzKGZk KTsKKworCWlndF9zdWJ0ZXN0KCJhbGxvd2VkLWFsbCIpCisJCXRlc3RfYWxsb3dlZF9hbGwoZmQs IGhhbmRsZSk7CisKKwlpZ3Rfc3VidGVzdCgiYWxsb3dlZC1zaW5nbGUiKQorCQl0ZXN0X2FsbG93 ZWRfc2luZ2xlKGZkLCBoYW5kbGUpOworCisJaWd0X3N1YnRlc3QoImJiLXN0YXJ0LXBhcmFtIikK KwkJdGVzdF9iYl9zdGFydChmZCwgaGFuZGxlLCBCQl9TVEFSVF9QQVJBTSk7CisKKwlpZ3Rfc3Vi dGVzdCgiYmItc3RhcnQtb3V0IikKKwkJdGVzdF9iYl9zdGFydChmZCwgaGFuZGxlLCBCQl9TVEFS VF9PVVQpOworCisJaWd0X3N1YnRlc3QoImJiLXNlY3VyZSIpCisJCXRlc3RfYmJfc2VjdXJlKGZk LCBoYW5kbGUpOworCisJaWd0X3N1YnRlc3QoImJiLWNoYWluZWQiKQorCQl0ZXN0X2JiX2NoYWlu ZWQoZmQsIGhhbmRsZSk7CisKKwlpZ3Rfc3VidGVzdCgiY21kLWNyb3NzaW5nLXBhZ2UiKQorCQl0 ZXN0X2NtZF9jcm9zc2luZ19wYWdlKGZkLCBoYW5kbGUpOworCisJaWd0X3N1YnRlc3QoImJhdGNo LXdpdGhvdXQtZW5kIikgeworCQljb25zdCB1aW50MzJfdCBub29wWzEwMjRdID0geyAwIH07CisK KwkJZXhlY19iYXRjaChmZCwgSTkxNV9FWEVDX0JMVCwgaGFuZGxlLAorCQkJICAgbm9vcCwgc2l6 ZW9mKG5vb3ApLAorCQkJICAgLUVJTlZBTCk7CisJfQorCisJaWd0X3N1YnRlc3QoImJhdGNoLXpl cm8tbGVuZ3RoIikgeworCQljb25zdCB1aW50MzJfdCBub29wW10gPSB7IDAsIE1JX0JBVENIX0JV RkZFUl9FTkQgfTsKKworCQlleGVjX2JhdGNoKGZkLCBJOTE1X0VYRUNfQkxULCBoYW5kbGUsCisJ CQkgICBub29wLCAwLAorCQkJICAgLUVJTlZBTCk7CisJfQorCisJaWd0X3N1YnRlc3QoImJhdGNo LWludmFsaWQtbGVuZ3RoIikKKwkJdGVzdF9pbnZhbGlkX2xlbmd0aChmZCwgaGFuZGxlKTsKKwor CWlndF9zdWJ0ZXN0KCJiYXNpYy1yZWplY3RlZCIpIHsKKwkJY29uc3QgdWludDMyX3QgaW52YWxp ZF9jbWRbXSA9IHsKKwkJCUlOU1RSX0lOVkFMSURfQ0xJRU5UIDw8IElOU1RSX0NMSUVOVF9TSElG VCwKKwkJCU1JX0JBVENIX0JVRkZFUl9FTkQsCisJCX07CisJCWNvbnN0IHVpbnQzMl90IGludmFs aWRfc2V0X2NvbnRleHRbXSA9IHsKKwkJCU1JX1NFVF9DT05URVhUIHwgMzIsIC8qIGludmFsaWQg bGVuZ3RoICovCisJCQlNSV9CQVRDSF9CVUZGRVJfRU5ELAorCQl9OworCisJCWV4ZWNfYmF0Y2go ZmQsIEk5MTVfRVhFQ19CTFQsIGhhbmRsZSwKKwkJCSAgIGludmFsaWRfY21kLCBzaXplb2YoaW52 YWxpZF9jbWQpLAorCQkJICAgLUVJTlZBTCk7CisKKwkJZXhlY19iYXRjaChmZCwgSTkxNV9FWEVD X0JMVCwgaGFuZGxlLAorCQkJICAgaW52YWxpZF9zZXRfY29udGV4dCwgc2l6ZW9mKGludmFsaWRf c2V0X2NvbnRleHQpLAorCQkJICAgLUVJTlZBTCk7CisJfQorCisJaWd0X3N1YnRlc3QoInZhbGlk LXJlZ2lzdGVycyIpCisJCXRlc3RfdmFsaWRfcmVnaXN0ZXJzKGZkLCBoYW5kbGUpOworCisJaWd0 X3N1YnRlc3QoInVuYWxpZ25lZC1hY2Nlc3MiKQorCQl0ZXN0X3VuYWxpZ25lZF9hY2Nlc3MoZmQs IGhhbmRsZSk7CisKKwlpZ3Rfc3VidGVzdF9ncm91cCB7CisJCWlndF9oYW5nX3QgaGFuZzsKKwor CQlpZ3RfZml4dHVyZSBpZ3RfYWxsb3dfaGFuZyhmZCwgMCwgMCk7CisKKwkJaWd0X3N1YnRlc3Qo ImJiLXN0YXJ0LWNtZCIpCisJCQl0ZXN0X2JiX3N0YXJ0KGZkLCBoYW5kbGUsIEJCX1NUQVJUX0NN RCk7CisKKwkJaWd0X2ZpeHR1cmUgaWd0X2Rpc2FsbG93X2hhbmcoZmQsIGhhbmcpOworCX0KKwor CWlndF9maXh0dXJlIHsKKwkJaWd0X3N0b3BfaGFuZ19kZXRlY3RvcigpOworCQlnZW1fY2xvc2Uo ZmQsIGhhbmRsZSk7CisKKwkJY2xvc2UoZmQpOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2lu dGVsLWNpL2Zhc3QtZmVlZGJhY2sudGVzdGxpc3QgYi90ZXN0cy9pbnRlbC1jaS9mYXN0LWZlZWRi YWNrLnRlc3RsaXN0CmluZGV4IGRlYzZmZGRhLi40N2JhZDY4YyAxMDA2NDQKLS0tIGEvdGVzdHMv aW50ZWwtY2kvZmFzdC1mZWVkYmFjay50ZXN0bGlzdAorKysgYi90ZXN0cy9pbnRlbC1jaS9mYXN0 LWZlZWRiYWNrLnRlc3RsaXN0CkBAIC0yMDQsMyArMjA0LDQgQEAgaWd0QGk5MTVfbW9kdWxlX2xv YWRAcmVsb2FkCiBpZ3RAaTkxNV9tb2R1bGVfbG9hZEByZWxvYWQtbm8tZGlzcGxheQogaWd0QGk5 MTVfbW9kdWxlX2xvYWRAcmVsb2FkLXdpdGgtZmF1bHQtaW5qZWN0aW9uCiBpZ3RAaTkxNV9wbV9y cG1AbW9kdWxlLXJlbG9hZAoraWd0QGdlbV9ibHRfcGFyc2VAYmItc3RhcnQgI2V4cGVjdGVkIGhh bmcgc28gbGFzdApkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5i dWlsZAppbmRleCA0NGJkZGQwMi4uNzU1ZmM5ZTYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1 aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBAIC0xNDksNiArMTQ5LDcgQEAgaTkxNV9wcm9n cyA9IFsKIAknZ2VtX2V4ZWNfcGFyYWxsZWwnLAogCSdnZW1fZXhlY19wYXJhbXMnLAogCSdnZW1f ZXhlY19wYXJzZScsCisJJ2dlbV9leGVjX3BhcnNlX2JsdCcsCiAJJ2dlbV9leGVjX3JlbG9jJywK IAknZ2VtX2V4ZWNfcmV1c2UnLAogCSdnZW1fZXhlY19zY2hlZHVsZScsCi0tIAoyLjE3LjEKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFp bGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==