From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan de Oliveira Subject: [PATCH] Add a link training test (v2) Date: Fri, 11 Sep 2015 17:11:46 +0300 Message-ID: <1441980706-9241-1-git-send-email-ander.conselvan.de.oliveira@intel.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id C32B06E0D4 for ; Fri, 11 Sep 2015 07:12:06 -0700 (PDT) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: thomas.wood@intel.com Cc: Ander Conselvan de Oliveira , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhpcyBhZGRzIGEgdGVzdCB0aGF0IGNvbXBpbGVzIHRoZSBsaW5rIHRyYWluaW5nIGNvZGUgZnJv bSBpOTE1IGludG8gYQpzZXBhcmF0ZSBleGVjdXRhYmxlIGFuZCB1c2VzIGl0IHRvIHRyYWluIGEg ZmFrZSBzaW5rIGRldmljZS4gVGhlIHRlc3QKaXRlcmF0ZXMgb3ZlciBwb3NzaWJsZSBjb21iaW5h dGlvbnMgb2YgbWF4IHZvbHRhZ2Ugc3dpbmcsIHByZSBlbXBoYXNpcwphbmQgYml0IHJhdGVzLCB3 aXRoIHRoZSBzaW5rIGF0dGVtdGluZyB0byBnZXQgdGhlIGhpZ2hlc3QgdmFsdWVzCnBvc3NpYmxl LiBUaGUgdGVzdCBkb2Vzbid0IGNvdmVyIEhCUjIsIGhvd2V2ZXIuCgpBZGRpbmcgc2V2ZXJhbCBz dHVicyB3YXMgbmVjZXNzYXJ5IHRvIGdldCB0aGUgY29kZSB0byBjb21waWxlLiBTdHVicyBhcmUK cGxhY2VkIGluIHRoZSB1bml0LXRlc3QtaGVscGVyL2luY2x1ZGUgc3ViZGlyZWN0b3J5LiBUaG9z ZSBoZWFkZXJzIGFyZQpyZXBsYWNlbWVudCBmb3IgdGhlIGtlcm5lbCBoZWFkZXJzLCBvciB0aGV5 IHBlcmZvcm0gc29tZSBzdHViYmluZyBhbmQKdGhlbiBpbmNsdWRlIHRoZSBvcmlnaW5hbCBoZWFk ZXIgZnJvbSB0aGUga2VybmVsIHNyYyB0cmVlLgoKVGhlIHN0dWJzIGZvciBidWlsZGluZyB0aGUg ZHJtX2RwX2hlbHBlciBhcmUgbm90IHRoZXJlIHlldCwgc28gdGhlIGZldwpmdW5jdGlvbnMgbmVj ZXNzYXJ5IHdlcmUgY29waWVkIHRvIHRoZSB0ZXN0LiBJIHN0aWxsIGhhdmVuJ3QgZmlndXJlZCBv dXQKdGhlIGJlc3Qgd2F5IHRvIHNvbHZlIHRoaXMgaXNzdWUuCgp2MjogUHJvcGVyIGF1dG90b29s cyBpbnRlZ3JhdGlvbiAoVGhvbWFzKQogICAgTW92ZSB0byAuL3Rlc3RzIGFuZCBtYWtlIGl0IGEg cHJvcGVyIGlndCB0ZXN0LiAoVGhvbWFzKQogICAgRG9uJ3QgcHVsbCBpbiBkZXZpY2VfaW5mby4g KFZpbGxlKQotLS0KCk9uIFdlZCwgMjAxNS0wOS0wOSBhdCAxMTozMyArMDEwMCwgVGhvbWFzIFdv b2Qgd3JvdGU6Cj4gT24gOCBTZXB0ZW1iZXIgMjAxNSBhdCAxMzoyOCwgQW5kZXIgQ29uc2VsdmFu IGRlIE9saXZlaXJhCj4gPGFuZGVyLmNvbnNlbHZhbi5kZS5vbGl2ZWlyYUBpbnRlbC5jb20+IHdy b3RlOgo+ID4gCgo+ID4gZGlmZiAtLWdpdCBhL2xpbmstdHJhaW5pbmctdGVzdC9NYWtlZmlsZSBi L2xpbmstdHJhaW5pbmctdGVzdC9NYWtlZmlsZQo+IAo+IElmIHRoaXMgaXMgbWVhbnQgdG8gYmUg cGFydCBvZiB0aGUgdGVzdCBzdWl0ZSwgdGhlbiBpdCBuZWVkcyB0byBiZSBpbgo+IHRoZSB0ZXN0 cyBkaXJlY3RvcnkgYW5kIHVzZSB0aGUgaWd0IHRlc3QgaW5mcmFzdHJ1Y3R1cmUuIE90aGVyd2lz ZSBpdAo+IHNob3VsZCBiZSBwbGFjZWQgaW4gdG9vbHMgb3IgdG9vbHMvbGluay10cmFpbmluZy10 ZXN0LgoKSSBtYWRlIHRoZSB0ZXN0IHVzZSB0aGUgaWd0IGluZnJhc3RydWN0dXJlLCBidXQgSSdt IG5vdCBzdXJlIGlmIHRoaXMgaXMKYSBnb29kIGZpdCBmb3IgaXQuIFRoZSBkZXBlbmRlbmN5IG9u IHRoZSBrZXJuZWwgaXMgb24gYnVpbGQgdGltZSwgYnV0Cm9uY2UgY29tcGlsZWQgdGhpcyBjYW4g YmUgcnVuIG9uIGFueSBtYWNoaW5lLiBUaGlzIGNhbiBhbHNvIGludHJvZHVjZQpidWlsZCBmYWls dXJlcyBpZiB0aGUgdGVzdCBpcyBub3Qga2VwdCBpbiBzeW5jIHdpdGggdGhlIGRyaXZlciBzb3Vy Y2UuCklkZWFsbHkgdGhhdCBhIGZhaWx1cmUgdG8gYnVpbGQgdGhpcyB3b3VsZCBiZSByZXBvcnRl ZCBhcyB0aGUgdGVzdApmYWlsaW5nLCBidXQgSSBoYXZlIG5vIGlkZWEgb2YgaG93IHRvIGFjaGll dmUgdGhhdC4KCgo+ID4gLS0tIC9kZXYvbnVsCj4gPiArKysgYi9saW5rLXRyYWluaW5nLXRlc3Qv TWFrZWZpbGUKPiA+IEBAIC0wLDAgKzEsNDAgQEAKPiA+ICtLRVJORUxfU1JDX0RJUj0vaG9tZS9h Y29uc2Vsdi9saW51eAo+IAo+IEl0IG1heSBiZSBuZWNhc3NhcnkgdG8gbWFrZSB0aGUgYnVpbGRp bmcgb2YgdGhpcyB0ZXN0IG9wdGlvbmFsIGluCj4gY29uZmlndXJlIGFuZCBwcm92aWRlIGEgd2F5 IG9mIHNwZWNpZnlpbmcgdGhlIGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5LgoKSSBkaWQgdGhlIGlu dGVncmF0aW9uIHdpdGggYXV0b3Rvb2xzLiBJdCBtb3N0bHkgd29ya3MsIGJ1dCBvbiB0aGUgZmly c3QKYnVpbGQgbWFrZSBuZWVkcyB0byBjYWxsZWQgd2l0aCAtaywgc2luY2UgYSAuUG8gZmlsZSBp c24ndCBjcmVhdGVkIGZvcgp0aGUgc291cmNlIGZpbGUgY29waWVkIGZyb20gaTkxNSdzIHRyZWUu IEkgc3RpbGwgbmVlZCB0byBsb29rIGludG8gdGhpcwppc3N1ZS4KClRoYW5rcywKQW5kZXIKCgoK IE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCAr CiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjAg KwogdGVzdHMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE0 ICsKIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAx MSArCiB0ZXN0cy91bml0X2RwX2xpbmtfdHJhaW5pbmcuYyAgICAgICAgICAgICAgICAgICAgfCA1 NzcgKysrKysrKysrKysrKysrKysrKysrKysKIHVuaXQtdGVzdC1oZWxwZXIvTWFrZWZpbGUuYW0g ICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiB1bml0LXRlc3QtaGVscGVyL2k5MTUvTWFrZWZp bGUuYW0gICAgICAgICAgICAgICAgfCAgIDkgKwogdW5pdC10ZXN0LWhlbHBlci9pbmNsdWRlL2J1 aWxkX21hZ2ljLmggICAgICAgICAgIHwgIDI3ICsrCiB1bml0LXRlc3QtaGVscGVyL2luY2x1ZGUv ZHJtL2RybVAuaCAgICAgICAgICAgICAgfCAgMjQgKwogdW5pdC10ZXN0LWhlbHBlci9pbmNsdWRl L2RybS9kcm1fZHBfaGVscGVyLmggICAgIHwgIDE0ICsKIHVuaXQtdGVzdC1oZWxwZXIvaW5jbHVk ZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaCB8ICAgNyArCiB1bml0LXRlc3QtaGVscGVyL2luY2x1 ZGUvbGludXgvZGVsYXkuaCAgICAgICAgICAgfCAgIDAKIDEyIGZpbGVzIGNoYW5nZWQsIDcwOCBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvdW5pdF9kcF9saW5rX3RyYWlu aW5nLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB1bml0LXRlc3QtaGVscGVyL01ha2VmaWxlLmFtCiBj cmVhdGUgbW9kZSAxMDA2NDQgdW5pdC10ZXN0LWhlbHBlci9pOTE1L01ha2VmaWxlLmFtCiBjcmVh dGUgbW9kZSAxMDA2NDQgdW5pdC10ZXN0LWhlbHBlci9pbmNsdWRlL2J1aWxkX21hZ2ljLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCB1bml0LXRlc3QtaGVscGVyL2luY2x1ZGUvZHJtL2RybVAuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHVuaXQtdGVzdC1oZWxwZXIvaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBl ci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdW5pdC10ZXN0LWhlbHBlci9pbmNsdWRlL2RybS9kcm1f ZHBfbXN0X2hlbHBlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdW5pdC10ZXN0LWhlbHBlci9pbmNs dWRlL2xpbnV4L2RlbGF5LmgKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFt CmluZGV4IDRmNzFhM2EuLjVjZTlkNTggMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFtCisrKyBiL01h a2VmaWxlLmFtCkBAIC0zMSw2ICszMSwxMCBAQCBpZiBCVUlMRF9TSEFERVJfREVCVUdHRVIKIFNV QkRJUlMgKz0gZGVidWdnZXIKIGVuZGlmCiAKK2lmIEhBVkVfS0VSTkVMX1NSQ19ESVIKK1NVQkRJ UlMgKz0gdW5pdC10ZXN0LWhlbHBlcgorZW5kaWYKKwogaWYgQlVJTERfVEVTVFMKIFNVQkRJUlMg Kz0gdGVzdHMKIGVuZGlmCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMK aW5kZXggMTlmNmZhNC4uNTNlMWY2ZCAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2Nv bmZpZ3VyZS5hYwpAQCAtMTk5LDYgKzE5OSwxNyBAQCBpZiB0ZXN0ICJ4JHdpdGhfbGlidW53aW5k IiA9IHh5ZXM7IHRoZW4KIAkJCSAgQUNfTVNHX0VSUk9SKFtsaWJ1bndpbmQgbm90IGZvdW5kLiBV c2UgLS13aXRob3V0LWxpYnVud2luZCB0byBkaXNhYmxlIGxpYnVud2luZCBzdXBwb3J0Ll0pKQog ZmkKIAorQUNfQVJHX1dJVEgoa2VybmVsLXNyYy1kaXIsCisJICAgIEFTX0hFTFBfU1RSSU5HKFst LXdpdGgta2VybmVsLXNyYy1kaXJdLAorCQkJICAgW0tlcm5lbCBzcmMgZGlyZWN0b3J5LCB1c2Vk IGJ5IHRoZSBsaW5rIHRyYWluaW5nIHRlc3RdKSwKKwkgICAgW0tFUk5FTF9TUkNfRElSPSIkd2l0 aHZhbCJdLCBbS0VSTkVMX1NSQ19ESVI9IiJdKQoraWYgdGVzdCAtbiAiJEtFUk5FTF9TUkNfRElS IjsgdGhlbgorCUk5MTVfU1JDX0RJUj0iJHtLRVJORUxfU1JDX0RJUn0vZHJpdmVycy9ncHUvZHJt L2k5MTUiCisJQUNfU1VCU1QoW0tFUk5FTF9TUkNfRElSXSkKKwlBQ19TVUJTVChbSTkxNV9TUkNf RElSXSkKK2ZpCitBTV9DT05ESVRJT05BTChbSEFWRV9LRVJORUxfU1JDX0RJUl0sIHRlc3QgLW4g IiRLRVJORUxfU1JDX0RJUiIpCisKICMgZW5hYmxlIGRlYnVnIHN5bWJvbHMKIEFDX0FSR19FTkFC TEUoZGVidWcsCiAJICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1kZWJ1Z10sCkBAIC0y NjQsMTAgKzI3NSwxNiBAQCBBQ19DT05GSUdfRklMRVMoWwogCQkgYXNzZW1ibGVyL3Rlc3QvTWFr ZWZpbGUKIAkJIGFzc2VtYmxlci9pbnRlbC1nZW40YXNtLnBjCiAJCSBvdmVybGF5L01ha2VmaWxl CisJCSB1bml0LXRlc3QtaGVscGVyL01ha2VmaWxlCisJCSB1bml0LXRlc3QtaGVscGVyL2k5MTUv TWFrZWZpbGUKIAkJIF0pCiAKIEFDX0NPTkZJR19GSUxFUyhbdG9vbHMvaW50ZWxfYXViZHVtcF0s IFtjaG1vZCAreCB0b29scy9pbnRlbF9hdWJkdW1wXSkKIAoraWYgdGVzdCAtbiAiJHtLRVJORUxf U1JDX0RJUn0iOyB0aGVuCitBQ19DT05GSUdfTElOS1MoW3VuaXQtdGVzdC1oZWxwZXIva2VybmVs LXNyYzoiJHtLRVJORUxfU1JDX0RJUn0iXSkKK2ZpCisKIEFDX09VVFBVVAogCiAjIFByaW50IGEg c3VtbWFyeSBvZiB0aGUgY29tcGlsYXRpb24KQEAgLTI4Nyw2ICszMDQsOSBAQCBlY2hvICIgICAg ICAgRGVidWdnZXIgICAgICAgICAgIDogJHtlbmFibGVfZGVidWdnZXJ9IgogZWNobyAiICAgICAg IFB5dGhvbiBkdW1wZXIgICAgICA6ICR7RFVNUEVSfSIKIGVjaG8gIiAgICAgICBPdmVybGF5ICAg ICAgICAgICAgOiBYOiAke2VuYWJsZV9vdmVybGF5X3hsaWJ9LCBYdjogJHtlbmFibGVfb3Zlcmxh eV94dmxpYn0iCiBlY2hvICIiCitlY2hvICIg4oCiIFZhcmlhYmxlczoiCitlY2hvICIgICAgICAg S2VybmVsIHNyYyBkaXIgICAgIDogJHtLRVJORUxfU1JDX0RJUn0iCitlY2hvICIiCiBlY2hvICIg 4oCiIEFQSS1Eb2N1bWVudGF0aW9uICAgICAgOiAke2VuYWJsZV9ndGtfZG9jfSIKIGVjaG8gIiIK IApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQppbmRl eCBkY2FjMmYzLi45NjAyYTY3IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysgYi90 ZXN0cy9NYWtlZmlsZS5hbQpAQCAtNCw2ICs0LDEwIEBAIGlmIEhBVkVfTk9VVkVBVQogICAgIFRF U1RTX3Byb2dzX00gKz0gJChOT1VWRUFVX1RFU1RTX00pCiBlbmRpZgogCitpZiBIQVZFX0tFUk5F TF9TUkNfRElSCisgICAgVEVTVFNfcHJvZ3NfTSArPSAkKFVOSVRfVEVTVFNfTSkKK2VuZGlmCisK IGlmIEJVSUxEX1RFU1RTCiB0ZXN0LWxpc3QudHh0OiBNYWtlZmlsZS5zb3VyY2VzCiAJQGVjaG8g VEVTVExJU1QgPiAkQApAQCAtNTMsNiArNTcsMTEgQEAgTERBREQgPSAuLi9saWIvbGliaW50ZWxf dG9vbHMubGEgJChQQ0lBQ0NFU1NfTElCUykgJChEUk1fTElCUykgJChMSUJVTldJTkRfTElCUykK IExEQUREICs9ICQoQ0FJUk9fTElCUykgJChMSUJVREVWX0xJQlMpICQoR0xJQl9MSUJTKSAtbG0K IEFNX0NGTEFHUyArPSAkKENBSVJPX0NGTEFHUykgJChMSUJVREVWX0NGTEFHUykgJChHTElCX0NG TEFHUykKIAorVU5JVF9DRkxBR1MgPSBcCisJLUkkKHRvcF9zcmNkaXIpL3VuaXQtdGVzdC1oZWxw ZXIvaW5jbHVkZSBcCisJLWlxdW90ZSAkKEk5MTVfU1JDX0RJUikgXAorCS1pcXVvdGUgJCh0b3Bf YnVpbGRkaXIpCisKIGRybV9pbXBvcnRfZXhwb3J0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFRI UkVBRF9DRkxBR1MpCiBkcm1faW1wb3J0X2V4cG9ydF9MREFERCA9ICQoTERBREQpIC1scHRocmVh ZAogZ2VtX2Nsb3NlX3JhY2VfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoVEhSRUFEX0NGTEFHUykK QEAgLTkxLDUgKzEwMCwxMCBAQCBwcmltZV9udl9hcGlfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQo RFJNX05PVVZFQVVfQ0ZMQUdTKQogcHJpbWVfbnZfYXBpX0xEQUREID0gJChMREFERCkgJChEUk1f Tk9VVkVBVV9MSUJTKQogcHJpbWVfbnZfcGNvcHlfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoRFJN X05PVVZFQVVfQ0ZMQUdTKQogcHJpbWVfbnZfcGNvcHlfTERBREQgPSAkKExEQUREKSAkKERSTV9O T1VWRUFVX0xJQlMpCisKK2lmIEhBVkVfS0VSTkVMX1NSQ19ESVIKK3VuaXRfZHBfbGlua190cmFp bmluZ19DRkxBR1MgPSAkKFVOSVRfQ0ZMQUdTKSAkKEFNX0NGTEFHUykKK2VuZGlmCisKIGVuZGlm CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzCmluZGV4IGVmNjkyOTkuLmIzM2E0YTkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtMTg1LDYgKzE4NSwxNiBA QCBURVNUU19zY3JpcHRzID0gXAogCXRvb2xzX3Rlc3QgXAogCSQoTlVMTCkKIAorVU5JVF9URVNU U19NID0gXAorCXVuaXRfZHBfbGlua190cmFpbmluZworCitpZiBIQVZFX0tFUk5FTF9TUkNfRElS Cit1bml0X2RwX2xpbmtfdHJhaW5pbmdfU09VUkNFUyA9IFwKKwl1bml0X2RwX2xpbmtfdHJhaW5p bmcuYyBcCisJJCh0b3BfYnVpbGRkaXIpL3VuaXQtdGVzdC1oZWxwZXIvaTkxNS9pbnRlbF9kcF9s aW5rX3RyYWluaW5nLmMKK2VuZGlmCisKKyMKICMgVGhpcyB0YXJnZXQgY29udGFpbnMgdGVzdGNh c2VzIHdoaWNoIHN1cHBvcnQgYXV0b21hZ2ljIHN1YnRlc3QgZW51bWVyYXRpb24KICMgZnJvbSB0 aGUgcGlnbGl0IHRlc3RydW5uZXIgd2l0aCAtLWxpc3Qtc3VidGVzdHMgYW5kIHJ1bm5pbmcgaW5k aXZpZHVhbAogIyBzdWJ0ZXN0cyB3aXRoIC0tcnVuLXN1YnRlc3QgPHRlc3RuYW1lPgpAQCAtMTk0 LDYgKzIwNCw3IEBAIFRFU1RTX3NjcmlwdHMgPSBcCiBtdWx0aV9rZXJuZWxfdGVzdHMgPSBcCiAJ JChURVNUU19wcm9nc19NKSBcCiAJJChURVNUU19zY3JpcHRzX00pIFwKKwkkKFVOSVRfVEVTVFNf cHJvZ3NfTSkgXAogCSQoTlVMTCkKIAogIyBUaGlzIHRhcmdldCBpcyBmb3Igc2ltcGxlIHRlc3Rj YXNlIHdoaWNoIGRvbid0IGV4cG9zZSBhbnkgc3VidGVzdC4KZGlmZiAtLWdpdCBhL3Rlc3RzL3Vu aXRfZHBfbGlua190cmFpbmluZy5jIGIvdGVzdHMvdW5pdF9kcF9saW5rX3RyYWluaW5nLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzYjJiZgotLS0gL2Rldi9udWxsCisr KyBiL3Rlc3RzL3VuaXRfZHBfbGlua190cmFpbmluZy5jCkBAIC0wLDAgKzEsNTc3IEBACisvKgor ICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAor ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEFuZGVy IENvbnNlbHZhbiBkZSBPbGl2ZWlyYSA8YW5kZXIuY29uc2VsdmFuLmRlLm9saXZlaXJhQGludGVs LmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgImlndF9jb3JlLmgiCisKKyNpbmNsdWRlICJ1bml0 LXRlc3QtaGVscGVyL2tlcm5lbC1zcmMvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuaCIK KworCisvKioKKyAqIEFSUkFZX1NJWkU6CisgKiBAYXJyOiBzdGF0aWMgYXJyYXkKKyAqCisgKiBN YWNybyB0byBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBzdGF0aWMgYXJyYXkgQGFyci4KKyAqLwor I2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpL3NpemVvZihhcnJbMF0pKQorCisK KyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAoKHNpemVfdCkgJigoVFlQRSAqKTApLT5N RU1CRVIpCisjZGVmaW5lIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikgKHsJCQlcCisJ Y29uc3QgdHlwZW9mKCgodHlwZSAqKTApLT5tZW1iZXIpICogX19tcHRyID0gKHB0cik7CVwKKwko dHlwZSAqKSgoY2hhciAqKV9fbXB0ciAtIG9mZnNldG9mKHR5cGUsIG1lbWJlcikpOyB9KQorCisK K3N0cnVjdCBzaW5rX2RldmljZSB7CisJc3NpemVfdCAoKmRwY2Rfd3JpdGUpKHN0cnVjdCBzaW5r X2RldmljZSAqc2luaywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgICAgIHZvaWQgKmJ1ZmZl ciwgc2l6ZV90IHNpemUpOworCWJvb2wgKCpnZXRfbGlua19zdGF0dXMpKHN0cnVjdCBzaW5rX2Rl dmljZSAqc2luaywKKwkJCQl1aW50OF90IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVd KTsKKworCXN0cnVjdCB7CisJCWJvb2wgbGFuZV9jb3VudF9hbmRfYndfc2V0OworCQlib29sIHRy YWluaW5nX3BhdHRlcm5fMV9zZXQ7CisJCWJvb2wgc3RhcnRlZF93aXRoX25vbl96ZXJvX2xldmVs czsKKwkJYm9vbCBjcl9kb25lOworCQlib29sIGNoYW5uZWxfZXFfZG9uZTsKKworCQl1aW50OF90 IGRwY2RbMHgzMDAwXTsKKwl9IGRhdGE7Cit9OworCisvKiBGYWtlIHNpbmsgZGV2aWNlIGltcGxl bWVudGF0aW9uICovCisKK3N0YXRpYyB1aW50OF90CitzaW5rX2RldmljZV9sYW5lX2NvdW50KHN0 cnVjdCBzaW5rX2RldmljZSAqc2luaykKK3sKKwlyZXR1cm4gc2luay0+ZGF0YS5kcGNkW0RQX0xB TkVfQ09VTlRfU0VUXTsKK30KKworc3RhdGljIHVpbnQ4X3QKK3NpbmtfZGV2aWNlX2dldF90cmFp bmluZ19wYXR0ZXJuKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaykKK3sKKwlyZXR1cm4gc2luay0+ ZGF0YS5kcGNkW0RQX1RSQUlOSU5HX1BBVFRFUk5fU0VUXSAmIERQX1RSQUlOSU5HX1BBVFRFUk5f TUFTSzsKK30KKworc3RhdGljIHVpbnQ4X3QKK3NpbmtfZGV2aWNlX2dldF92b2x0YWdlX3N3aW5n KHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgaW50IGxhbmUpCit7CisJcmV0dXJuIHNpbmstPmRh dGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9TRVQgKyBsYW5lXSAmCisJCURQX1RSQUlOX1ZPTFRB R0VfU1dJTkdfTUFTSzsKK30KKworc3RhdGljIHVpbnQ4X3QKK3NpbmtfZGV2aWNlX2dldF9wcmVf ZW1waGFzaXNfbGV2ZWwoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLCBpbnQgbGFuZSkKK3sKKwly ZXR1cm4gKHNpbmstPmRhdGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9TRVQgKyBsYW5lXSAmCisJ CSBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfTUFTSykgPj4gRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NI SUZUOworfQorCitzdGF0aWMgdm9pZAorc2lua19kZXZpY2VfY2hlY2tfbGFuZV9jb3VudF9hbmRf Yncoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQoreworCWlmIChzaW5rLT5kYXRhLmxhbmVfY291 bnRfYW5kX2J3X3NldCkKKwkJcmV0dXJuOworCisJaWd0X2Fzc2VydChzaW5rLT5kYXRhLmRwY2Rb RFBfVFJBSU5JTkdfUEFUVEVSTl9TRVRdID09IDApOworCisJaWYgKHNpbmstPmRhdGEuZHBjZFtE UF9MSU5LX0JXX1NFVF0gIT0gMCAmJgorCSAgICBzaW5rLT5kYXRhLmRwY2RbRFBfTEFORV9DT1VO VF9TRVRdICE9IDApCisJCXNpbmstPmRhdGEubGFuZV9jb3VudF9hbmRfYndfc2V0ID0gdHJ1ZTsK K30KKworc3RhdGljIHZvaWQKK3NpbmtfZGV2aWNlX2NoZWNrX3BhdHRlcm5fMV9zZXQoc3RydWN0 IHNpbmtfZGV2aWNlICpzaW5rKQoreworCWlmICghc2luay0+ZGF0YS5sYW5lX2NvdW50X2FuZF9i d19zZXQgfHwKKwkgICAgc2luay0+ZGF0YS50cmFpbmluZ19wYXR0ZXJuXzFfc2V0KQorCQlyZXR1 cm47CisKKwlpZ3RfYXNzZXJ0KHNpbmtfZGV2aWNlX2dldF90cmFpbmluZ19wYXR0ZXJuKHNpbmsp IDw9IERQX1RSQUlOSU5HX1BBVFRFUk5fMSk7CisKKwlpZiAoc2lua19kZXZpY2VfZ2V0X3RyYWlu aW5nX3BhdHRlcm4oc2luaykgIT0gRFBfVFJBSU5JTkdfUEFUVEVSTl8xKQorCQlyZXR1cm47CisK KwlpZ3RfYXNzZXJ0KHNpbmstPmRhdGEuZHBjZFtEUF9MSU5LX0JXX1NFVF0gPT0gRFBfTElOS19C V18xXzYyIHx8CisJICAgICAgIHNpbmstPmRhdGEuZHBjZFtEUF9MSU5LX0JXX1NFVF0gPT0gRFBf TElOS19CV18yXzcpOworCisJaWd0X2Fzc2VydChzaW5rLT5kYXRhLmRwY2RbRFBfTEFORV9DT1VO VF9TRVRdID09IDEgfHwKKwkJICAgc2luay0+ZGF0YS5kcGNkW0RQX0xBTkVfQ09VTlRfU0VUXSA9 PSAyIHx8CisJCSAgIHNpbmstPmRhdGEuZHBjZFtEUF9MQU5FX0NPVU5UX1NFVF0gPT0gNCk7CisK Kwlmb3IgKGludCBsYW5lID0gMDsgbGFuZSA8IHNpbmtfZGV2aWNlX2xhbmVfY291bnQoc2luayk7 IGxhbmUrKykgeworCQlpZiAoc2lua19kZXZpY2VfZ2V0X3ZvbHRhZ2Vfc3dpbmcoc2luaywgbGFu ZSkgIT0gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wIHx8CisJCSAgICBzaW5rX2Rldmlj ZV9nZXRfcHJlX2VtcGhhc2lzX2xldmVsKHNpbmssIGxhbmUpICE9IERQX1RSQUlOX1BSRV9FTVBI X0xFVkVMXzApCisJCQlzaW5rLT5kYXRhLnN0YXJ0ZWRfd2l0aF9ub25femVyb19sZXZlbHMgPSB0 cnVlOworCX0KKworCXNpbmstPmRhdGEudHJhaW5pbmdfcGF0dGVybl8xX3NldCA9IHRydWU7Cit9 CisKK3N0YXRpYyB2b2lkCitzaW5rX2RldmljZV9jaGVja19wYXR0ZXJuXzJfc2V0KHN0cnVjdCBz aW5rX2RldmljZSAqc2luaykKK3sKKwlpZiAoIXNpbmstPmRhdGEuY3JfZG9uZSkKKwkJcmV0dXJu OworCisJaWd0X2Fzc2VydChzaW5rX2RldmljZV9nZXRfdHJhaW5pbmdfcGF0dGVybihzaW5rKSA9 PSBEUF9UUkFJTklOR19QQVRURVJOXzIpOworfQorCitzdGF0aWMgdm9pZAorc2lua19kZXZpY2Vf Y2hlY2tfcGF0dGVybl9kaXNhYmxlKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaykKK3sKKwlpZiAo IXNpbmstPmRhdGEuY3JfZG9uZSB8fCAhIHNpbmstPmRhdGEuY2hhbm5lbF9lcV9kb25lKQorCQly ZXR1cm47CisKKwlpZ3RfYXNzZXJ0KHNpbmtfZGV2aWNlX2dldF90cmFpbmluZ19wYXR0ZXJuKHNp bmspID09IERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90 CitzaW5rX2RldmljZV9kcGNkX3dyaXRlKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgdW5zaWdu ZWQgaW50IG9mZnNldCwKKwkJICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJ bWVtY3B5KHNpbmstPmRhdGEuZHBjZCArIG9mZnNldCwgYnVmZmVyLCBzaXplKTsKKworCXNpbmtf ZGV2aWNlX2NoZWNrX2xhbmVfY291bnRfYW5kX2J3KHNpbmspOworCisJaWYgKCFzaW5rLT5kYXRh LmNyX2RvbmUpCisJCXNpbmtfZGV2aWNlX2NoZWNrX3BhdHRlcm5fMV9zZXQoc2luayk7CisJZWxz ZSBpZiAoIXNpbmstPmRhdGEuY2hhbm5lbF9lcV9kb25lKQorCQlzaW5rX2RldmljZV9jaGVja19w YXR0ZXJuXzJfc2V0KHNpbmspOworCWVsc2UKKwkJc2lua19kZXZpY2VfY2hlY2tfcGF0dGVybl9k aXNhYmxlKHNpbmspOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBib29sCitzaW5rX2Rl dmljZV9tYXhfdm9sdGFnZV9yZWFjaGVkKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgaW50IGxh bmUpCit7CisJcmV0dXJuIChzaW5rLT5kYXRhLmRwY2RbRFBfVFJBSU5JTkdfTEFORTBfU0VUICsg bGFuZV0gJiBEUF9UUkFJTl9NQVhfU1dJTkdfUkVBQ0hFRCkgPT0KKwkJRFBfVFJBSU5fTUFYX1NX SU5HX1JFQUNIRUQ7Cit9CisKK3N0YXRpYyBib29sCitzaW5rX2RldmljZV9tYXhfcHJlX2VtcGhh c2lzX3JlYWNoZWQoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLCBpbnQgbGFuZSkKK3sKKwlyZXR1 cm4gKHNpbmstPmRhdGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9TRVQgKyBsYW5lXSAmIERQX1RS QUlOX01BWF9QUkVfRU1QSEFTSVNfUkVBQ0hFRCkgPT0KKwkJRFBfVFJBSU5fTUFYX1BSRV9FTVBI QVNJU19SRUFDSEVEOworfQorCitzdGF0aWMgdm9pZAorc2lua19kZXZpY2Vfc2V0X2FkanVzdF92 b2x0YWdlKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywKKwkJCSAgICAgICBpbnQgbGFuZSwgdWlu dDhfdCBsZXZlbCkKK3sKKwlpbnQgc2hpZnQgPSBEUF9BREpVU1RfVk9MVEFHRV9TV0lOR19MQU5F MV9TSElGVCAqIChsYW5lICYgMSk7CisKKwlzaW5rLT5kYXRhLmRwY2RbRFBfQURKVVNUX1JFUVVF U1RfTEFORTBfMSArIChsYW5lID4+IDEpXSAmPQorCQl+KERQX0FESlVTVF9WT0xUQUdFX1NXSU5H X0xBTkUwX01BU0sgPDwgc2hpZnQpOworCXNpbmstPmRhdGEuZHBjZFtEUF9BREpVU1RfUkVRVUVT VF9MQU5FMF8xICsgKGxhbmUgPj4gMSldIHw9CisJCWxldmVsIDw8IHNoaWZ0OworfQorCitzdGF0 aWMgdm9pZAorc2lua19kZXZpY2Vfc2V0X2FkanVzdF9wcmVfZW1waGFzaXMoc3RydWN0IHNpbmtf ZGV2aWNlICpzaW5rLAorCQkJCSAgICBpbnQgbGFuZSwgdWludDhfdCBsZXZlbCkKK3sKKwlpbnQg c2hpZnQgPSBEUF9BREpVU1RfVk9MVEFHRV9TV0lOR19MQU5FMV9TSElGVCAqIChsYW5lICYgMSk7 CisKKwlzaW5rLT5kYXRhLmRwY2RbRFBfQURKVVNUX1JFUVVFU1RfTEFORTBfMSArIChsYW5lID4+ IDEpXSAmPQorCQl+KERQX0FESlVTVF9QUkVfRU1QSEFTSVNfTEFORTBfTUFTSyA8PCBzaGlmdCk7 CisJc2luay0+ZGF0YS5kcGNkW0RQX0FESlVTVF9SRVFVRVNUX0xBTkUwXzEgKyAobGFuZSA+PiAx KV0gfD0KKwkJbGV2ZWwgPDwgKERQX0FESlVTVF9QUkVfRU1QSEFTSVNfTEFORTBfU0hJRlQgKyBz aGlmdCk7Cit9CisKK3N0YXRpYyBib29sCitzaW5rX2RldmljZV9yZXF1ZXN0X2hpZ2hlcl92b2x0 YWdlX3N3aW5nKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaykKK3sKKwlib29sIG1heF9yZWFjaGVk ID0gZmFsc2U7CisKKwlmb3IgKGludCBsYW5lID0gMDsgbGFuZSA8IHNpbmtfZGV2aWNlX2xhbmVf Y291bnQoc2luayk7IGxhbmUrKykgeworCQlpZiAoc2lua19kZXZpY2VfbWF4X3ZvbHRhZ2VfcmVh Y2hlZChzaW5rLCBsYW5lKSkgeworCQkJbWF4X3JlYWNoZWQgPSB0cnVlOworCQkJYnJlYWs7CisJ CX0KKwl9CisKKwlpZiAobWF4X3JlYWNoZWQpCisJCXJldHVybiBmYWxzZTsKKworCWZvciAoaW50 IGxhbmUgPSAwOyBsYW5lIDwgc2lua19kZXZpY2VfbGFuZV9jb3VudChzaW5rKTsgbGFuZSsrKSB7 CisJCXVpbnQ4X3QgbmV3X3ZvbHRhZ2UgPQorCQkJc2lua19kZXZpY2VfZ2V0X3ZvbHRhZ2Vfc3dp bmcoc2luaywgbGFuZSkgKyAxOworCisJCXNpbmtfZGV2aWNlX3NldF9hZGp1c3Rfdm9sdGFnZShz aW5rLCBsYW5lLCBuZXdfdm9sdGFnZSk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyBib29sCitzaW5rX2RldmljZV9yZXF1ZXN0X2hpZ2hlcl9wcmVfZW1waGFzaXMoc3RydWN0IHNp bmtfZGV2aWNlICpzaW5rKQoreworCWJvb2wgbWF4X3JlYWNoZWQgPSBmYWxzZTsKKworCWZvciAo aW50IGxhbmUgPSAwOyBsYW5lIDwgc2lua19kZXZpY2VfbGFuZV9jb3VudChzaW5rKTsgbGFuZSsr KSB7CisJCWlmIChzaW5rX2RldmljZV9tYXhfcHJlX2VtcGhhc2lzX3JlYWNoZWQoc2luaywgbGFu ZSkpIHsKKwkJCW1heF9yZWFjaGVkID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYg KG1heF9yZWFjaGVkKQorCQlyZXR1cm4gZmFsc2U7CisKKwlmb3IgKGludCBsYW5lID0gMDsgbGFu ZSA8IHNpbmtfZGV2aWNlX2xhbmVfY291bnQoc2luayk7IGxhbmUrKykgeworCQl1aW50OF90IG5l d19wcmVfZW1waGFzaXMgPQorCQkJc2lua19kZXZpY2VfZ2V0X3ByZV9lbXBoYXNpc19sZXZlbChz aW5rLCBsYW5lKSArIDE7CisKKwkJc2lua19kZXZpY2Vfc2V0X2FkanVzdF9wcmVfZW1waGFzaXMo c2luaywgbGFuZSwgbmV3X3ByZV9lbXBoYXNpcyk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisK K3N0YXRpYyB2b2lkCitzaW5rX2RldmljZV9tYXJrX2NyX2RvbmUoc3RydWN0IHNpbmtfZGV2aWNl ICpzaW5rKQoreworCWZvciAoaW50IGxhbmUgPSAwOyBsYW5lIDwgc2lua19kZXZpY2VfbGFuZV9j b3VudChzaW5rKTsgbGFuZSsrKQorCQlzaW5rLT5kYXRhLmRwY2RbRFBfTEFORTBfMV9TVEFUVVMg KyAobGFuZSA+PiAxKV0gfD0KKwkJCURQX0xBTkVfQ1JfRE9ORSA8PCAoNCAqIChsYW5lICYgMSkp OworCisJc2luay0+ZGF0YS5jcl9kb25lID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK3Npbmtf ZGV2aWNlX21hcmtfY2hhbm5lbF9lcV9kb25lKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaykKK3sK Kwlmb3IgKGludCBsYW5lID0gMDsgbGFuZSA8IHNpbmtfZGV2aWNlX2xhbmVfY291bnQoc2luayk7 IGxhbmUrKykgeworCQl1aW50OF90IG1hc2sgPSAoRFBfTEFORV9DSEFOTkVMX0VRX0RPTkUgfCBE UF9MQU5FX1NZTUJPTF9MT0NLRUQpOworCQlzaW5rLT5kYXRhLmRwY2RbRFBfTEFORTBfMV9TVEFU VVMgKyAobGFuZSA+PiAxKV0gfD0KKwkJCW1hc2sgPDwgKDQgKiAobGFuZSAmIDEpKTsKKwl9CisK KwlzaW5rLT5kYXRhLmRwY2RbRFBfTEFORV9BTElHTl9TVEFUVVNfVVBEQVRFRF0gfD0gRFBfSU5U RVJMQU5FX0FMSUdOX0RPTkU7CisKKwlzaW5rLT5kYXRhLmNoYW5uZWxfZXFfZG9uZSA9IHRydWU7 Cit9CisKK3N0YXRpYyBib29sCitzaW5rX2RldmljZV9nZXRfbGlua19zdGF0dXMoc3RydWN0IHNp bmtfZGV2aWNlICpzaW5rLAorCQkJICAgIHVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19TVEFU VVNfU0laRV0pCit7CisJaWYgKCFzaW5rLT5kYXRhLmNyX2RvbmUpIHsKKwkJaWYgKCFzaW5rX2Rl dmljZV9yZXF1ZXN0X2hpZ2hlcl92b2x0YWdlX3N3aW5nKHNpbmspKQorCQkJc2lua19kZXZpY2Vf bWFya19jcl9kb25lKHNpbmspOworCX0gZWxzZSBpZiAoIXNpbmstPmRhdGEuY2hhbm5lbF9lcV9k b25lKSB7CisJCWlmICghc2lua19kZXZpY2VfcmVxdWVzdF9oaWdoZXJfcHJlX2VtcGhhc2lzKHNp bmspKQorCQkJc2lua19kZXZpY2VfbWFya19jaGFubmVsX2VxX2RvbmUoc2luayk7CisJfQorCisJ bWVtY3B5KGxpbmtfc3RhdHVzLCBzaW5rLT5kYXRhLmRwY2QgKyBEUF9MQU5FMF8xX1NUQVRVUywK KwkgICAgICAgRFBfTElOS19TVEFUVVNfU0laRSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3Rh dGljIHZvaWQKK3NpbmtfZGV2aWNlX3Jlc2V0KHN0cnVjdCBzaW5rX2RldmljZSAqc2luaywgaW50 IGxhbmVzLCB1aW50OF90IGxpbmtfYncpCit7CisJbWVtc2V0KCZzaW5rLT5kYXRhLCAwLCBzaXpl b2Ygc2luay0+ZGF0YSk7CisJc2luay0+ZGF0YS5kcGNkW0RQX01BWF9MSU5LX1JBVEVdID0gbGlu a19idzsKKwlzaW5rLT5kYXRhLmRwY2RbRFBfTUFYX0xBTkVfQ09VTlRdID0gbGFuZXM7Cit9CisK K3N0YXRpYyBzdHJ1Y3Qgc2lua19kZXZpY2Ugc2ltcGxlX3NpbmsgPSB7CisJLmdldF9saW5rX3N0 YXR1cyA9IHNpbmtfZGV2aWNlX2dldF9saW5rX3N0YXR1cywKKwkuZHBjZF93cml0ZSA9IHNpbmtf ZGV2aWNlX2RwY2Rfd3JpdGUsCit9OworCisvKiBHbHVlIGNvZGUgKi8KKworc3RydWN0IHRlc3Rf aW50ZWxfZHAgeworCXN0cnVjdCBpbnRlbF9kcCBkcDsKKwlzdHJ1Y3Qgc2lua19kZXZpY2UgKnNp bms7CisJdWludDhfdCBsaW5rX2J3OworCisJdWludDhfdCBtYXhfdm9sdGFnZTsKKwl1aW50OF90 IG1heF9wcmVfZW1waGFzaXM7Cit9OworCitzdGF0aWMgc3RydWN0IHRlc3RfaW50ZWxfZHAgKgor dG9fdGVzdF9pbnRlbF9kcChzdHJ1Y3QgaW50ZWxfZHAgKmRwKQoreworCXJldHVybiBjb250YWlu ZXJfb2YoZHAsIHN0cnVjdCB0ZXN0X2ludGVsX2RwLCBkcCk7Cit9CisKK3ZvaWQgaW50ZWxfZHBf c2V0X2lkbGVfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworfQorCiti b29sIGludGVsX2RwX3NvdXJjZV9zdXBwb3J0c19oYnIyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCit7CisJcmV0dXJuIGZhbHNlOworfQorCitib29sCitpbnRlbF9kcF9nZXRfbGlua19zdGF0 dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5L X1NUQVRVU19TSVpFXSkKK3sKKwlzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmsgPSB0b190ZXN0X2lu dGVsX2RwKGludGVsX2RwKS0+c2luazsKKwlyZXR1cm4gc2luay0+Z2V0X2xpbmtfc3RhdHVzKHNp bmssIGxpbmtfc3RhdHVzKTsKK30KKwordm9pZAoraW50ZWxfZHBfdXBkYXRlX3NpZ25hbF9sZXZl bHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKK3sKK30KKwordm9pZCBpbnRlbF9kcF9jb21w dXRlX3JhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IHBvcnRfY2xvY2ssCisJCQkg ICB1aW50OF90ICpsaW5rX2J3LCB1aW50OF90ICpyYXRlX3NlbGVjdCkKK3sKKwkqbGlua19idyA9 IHRvX3Rlc3RfaW50ZWxfZHAoaW50ZWxfZHApLT5saW5rX2J3OworCSpyYXRlX3NlbGVjdCA9IDA7 Cit9CisKK3ZvaWQKK2ludGVsX2RwX3Byb2dyYW1fbGlua190cmFpbmluZ19wYXR0ZXJuKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQkJICAgICAgIHVpbnQ4X3QgZHBfdHJhaW5fcGF0KQor eworfQorCit1aW50OF90CitpbnRlbF9kcF92b2x0YWdlX21heChzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQoreworCXJldHVybiB0b190ZXN0X2ludGVsX2RwKGludGVsX2RwKS0+bWF4X3ZvbHRh Z2UgPDwKKwkJRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19TSElGVDsKK30KKwordWludDhfdAoraW50 ZWxfZHBfcHJlX2VtcGhhc2lzX21heChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCB1aW50OF90 IHZvbHRhZ2Vfc3dpbmcpCit7CisJcmV0dXJuIHRvX3Rlc3RfaW50ZWxfZHAoaW50ZWxfZHApLT5t YXhfcHJlX2VtcGhhc2lzIDw8CisJCURQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVDsKK30KKwor c3NpemVfdCBkcm1fZHBfZHBjZF93cml0ZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCB1bnNpZ25l ZCBpbnQgb2Zmc2V0LAorCQkJICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHAgPQorCQljb250YWluZXJfb2YoYXV4LCBzdHJ1Y3QgaW50ZWxf ZHAsIGF1eCk7CisJc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rID0gdG9fdGVzdF9pbnRlbF9kcChp bnRlbF9kcCktPnNpbms7CisKKwlyZXR1cm4gc2luay0+ZHBjZF93cml0ZShzaW5rLCBvZmZzZXQs IGJ1ZmZlciwgc2l6ZSk7Cit9CisKKy8qIC0tLSAqLworCitzdGF0aWMgc3RydWN0IHRlc3RfaW50 ZWxfZHAgdGVzdF9kcDsKKworc3RhdGljIHZvaWQKK2RvX3Rlc3Qoc3RydWN0IHNpbmtfZGV2aWNl ICpzaW5rLCBpbnQgbGFuZXMsIHVpbnQ4X3QgbGlua19idywKKwkgICAgIHVpbnQ4X3QgbWF4X3Zv bHRhZ2UsIHVpbnQ4X3QgbWF4X3ByZV9lbXBoYXNpcykKK3sKKwltZW1zZXQoJnRlc3RfZHAsIDAs IHNpemVvZiB0ZXN0X2RwKTsKKwl0ZXN0X2RwLmRwLmxhbmVfY291bnQgPSBsYW5lczsKKwl0ZXN0 X2RwLmxpbmtfYncgPSBsaW5rX2J3OworCXRlc3RfZHAuc2luayA9IHNpbms7CisJdGVzdF9kcC5t YXhfdm9sdGFnZSA9CisJCW1heF92b2x0YWdlID4+IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfU0hJ RlQ7CisJdGVzdF9kcC5tYXhfcHJlX2VtcGhhc2lzID0KKwkJbWF4X3ByZV9lbXBoYXNpcyA+PiBE UF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7CisKKwlzaW5rX2RldmljZV9yZXNldChzaW5rLCBs YW5lcywgbGlua19idyk7CisKKwlpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKCZ0ZXN0X2RwLmRw KTsKKwlpbnRlbF9kcF9zdG9wX2xpbmtfdHJhaW4oJnRlc3RfZHAuZHApOworCisJaWd0X2Fzc2Vy dChzaW5rLT5kYXRhLmNyX2RvbmUpOworCWlndF9hc3NlcnQoc2luay0+ZGF0YS5jaGFubmVsX2Vx X2RvbmUpOworCisJZm9yIChpbnQgbGFuZSA9IDA7IGxhbmUgPCB0ZXN0X2RwLmRwLmxhbmVfY291 bnQ7IGxhbmUrKykgeworCQl1aW50OF90IGN1cl92ID0gc2lua19kZXZpY2VfZ2V0X3ZvbHRhZ2Vf c3dpbmcoc2luaywgbGFuZSk7CisJCXVpbnQ4X3QgY3VyX3AgPSBzaW5rX2RldmljZV9nZXRfcHJl X2VtcGhhc2lzX2xldmVsKHNpbmssIGxhbmUpOworCisJCWlndF9hc3NlcnRfZXEoY3VyX3YsIHRl c3RfZHAubWF4X3ZvbHRhZ2UpOworCQlpZ3RfYXNzZXJ0X2VxKGN1cl9wLCB0ZXN0X2RwLm1heF9w cmVfZW1waGFzaXMpOworCX0KK30KKworaW50IHRlc3RfbGFuZXNbXSA9IHsKKwkxLCAyLCA0LAor fTsKKwordWludDhfdCB0ZXN0X2J3W10gPSB7CisJRFBfTElOS19CV18xXzYyLAorCURQX0xJTktf QldfMl83LAorfTsKKwordWludDhfdCB0ZXN0X21heF92b2x0YWdlW10gPSB7CisJRFBfVFJBSU5f Vk9MVEFHRV9TV0lOR19MRVZFTF8wLAorCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSwK KwlEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzIsCisJRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19MRVZFTF8zLAorfTsKKwordWludDhfdCB0ZXN0X21heF9wcmVfZW1waGFzaXNbXSA9IHsKKwlE UF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wLAorCURQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzEsCisJ RFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMiwKKwlEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8zLAor fTsKKworaWd0X21haW4KK3sKKwlmb3IgKGludCBsYW5lID0gMDsgbGFuZSA8IEFSUkFZX1NJWkUo dGVzdF9sYW5lcyk7IGxhbmUrKykKKwlmb3IgKGludCBidyA9IDA7IGJ3IDwgQVJSQVlfU0laRSh0 ZXN0X2J3KTsgYncrKykKKwlmb3IgKGludCB2b2x0YWdlID0gMDsgdm9sdGFnZSA8IEFSUkFZX1NJ WkUodGVzdF9tYXhfdm9sdGFnZSk7IHZvbHRhZ2UrKykKKwlmb3IgKGludCBlbXBoID0gMDsgZW1w aCA8IEFSUkFZX1NJWkUodGVzdF9tYXhfcHJlX2VtcGhhc2lzKTsgZW1waCsrKQorCQlpZ3Rfc3Vi dGVzdF9mKCJsJWQtYnclZC12JWQtcGUlZCIsCisJCQkgICAgICB0ZXN0X2xhbmVzW2xhbmVdLAor CQkJICAgICAgdGVzdF9id1tid10sCisJCQkgICAgICB0ZXN0X21heF92b2x0YWdlW3ZvbHRhZ2Vd LAorCQkJICAgICAgdGVzdF9tYXhfcHJlX2VtcGhhc2lzW2VtcGhdKQorCQkJZG9fdGVzdCgmc2lt cGxlX3NpbmssCisJCQkJdGVzdF9sYW5lc1tsYW5lXSwKKwkJCQl0ZXN0X2J3W2J3XSwKKwkJCQl0 ZXN0X21heF92b2x0YWdlW3ZvbHRhZ2VdLAorCQkJCXRlc3RfbWF4X3ByZV9lbXBoYXNpc1tlbXBo XSk7Cit9CisKKy8qIFRPRE86IEdldCByaWQgb2YgdGhpcyBjb3B5IG9mIGRybV9kcF9oZWxwZXIg ZnVuY3Rpb25zLiAqLworCisvKgorICogQ29weXJpZ2h0IMKpIDIwMDkgS2VpdGggUGFja2FyZAor ICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBz ZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBv c2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGgg dGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBl YXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQKKyAqIHRoYXQgdGhlIG5hbWUgb2Yg dGhlIGNvcHlyaWdodCBob2xkZXJzIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBw dWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhv dXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaGUgY29weXJpZ2h0 IGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbnMKKyAqIGFib3V0IHRoZSBzdWl0YWJpbGl0 eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcwor ICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIFRIRSBD T1BZUklHSFQgSE9MREVSUyBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBU SElTIFNPRlRXQVJFLAorICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTworICogRVZFTlQgU0hBTEwgVEhFIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCisgKiBD T05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcg RlJPTSBMT1NTIE9GIFVTRSwKKyAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKKyAqIFRPUlRJT1VTIEFDVElPTiwg QVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFO Q0UKKyAqIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVs cGVyLmg+CisKK3N0YXRpYyB1OCBkcF9saW5rX3N0YXR1cyhjb25zdCB1OCBsaW5rX3N0YXR1c1tE UF9MSU5LX1NUQVRVU19TSVpFXSwgaW50IHIpCit7CisgICAgICAgIHJldHVybiBsaW5rX3N0YXR1 c1tyIC0gRFBfTEFORTBfMV9TVEFUVVNdOworfQorCitzdGF0aWMgdTggZHBfZ2V0X2xhbmVfc3Rh dHVzKGNvbnN0IHU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbGFuZSkKK3sKKyAgICAgICAgaW50IGkgPSBEUF9MQU5F MF8xX1NUQVRVUyArIChsYW5lID4+IDEpOworICAgICAgICBpbnQgcyA9IChsYW5lICYgMSkgKiA0 OworICAgICAgICB1OCBsID0gZHBfbGlua19zdGF0dXMobGlua19zdGF0dXMsIGkpOworICAgICAg ICByZXR1cm4gKGwgPj4gcykgJiAweGY7Cit9CisKK2Jvb2wgZHJtX2RwX2NoYW5uZWxfZXFfb2so Y29uc3QgdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBsYW5lX2NvdW50KQoreworICAgICAgICB1OCBsYW5lX2FsaWduOwor ICAgICAgICB1OCBsYW5lX3N0YXR1czsKKyAgICAgICAgaW50IGxhbmU7CisKKyAgICAgICAgbGFu ZV9hbGlnbiA9IGRwX2xpbmtfc3RhdHVzKGxpbmtfc3RhdHVzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFBfTEFORV9BTElHTl9TVEFUVVNfVVBEQVRFRCk7CisgICAgICAg IGlmICgobGFuZV9hbGlnbiAmIERQX0lOVEVSTEFORV9BTElHTl9ET05FKSA9PSAwKQorICAgICAg ICAgICAgICAgIHJldHVybiBmYWxzZTsgCisgICAgICAgIGZvciAobGFuZSA9IDA7IGxhbmUgPCBs YW5lX2NvdW50OyBsYW5lKyspIHsKKyAgICAgICAgICAgICAgICBsYW5lX3N0YXR1cyA9IGRwX2dl dF9sYW5lX3N0YXR1cyhsaW5rX3N0YXR1cywgbGFuZSk7CisgICAgICAgICAgICAgICAgaWYgKChs YW5lX3N0YXR1cyAmIERQX0NIQU5ORUxfRVFfQklUUykgIT0gRFBfQ0hBTk5FTF9FUV9CSVRTKQor ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg IHJldHVybiB0cnVlOworfQorCitib29sIGRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhjb25zdCB1 OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBsYW5lX2NvdW50KQoreworICAgICAgICBpbnQgbGFuZTsKKyAgICAgICAg dTggbGFuZV9zdGF0dXM7CisKKyAgICAgICAgZm9yIChsYW5lID0gMDsgbGFuZSA8IGxhbmVfY291 bnQ7IGxhbmUrKykgeworICAgICAgICAgICAgICAgIGxhbmVfc3RhdHVzID0gZHBfZ2V0X2xhbmVf c3RhdHVzKGxpbmtfc3RhdHVzLCBsYW5lKTsKKyAgICAgICAgICAgICAgICBpZiAoKGxhbmVfc3Rh dHVzICYgRFBfTEFORV9DUl9ET05FKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworfQorCit1OCBkcm1f ZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2UoY29uc3QgdTggbGlua19zdGF0dXNbRFBfTElO S19TVEFUVVNfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGxhbmUpCit7CisgICAgICAgIGludCBpID0gRFBfQURKVVNUX1JFUVVFU1RfTEFORTBfMSArIChs YW5lID4+IDEpOworICAgICAgICBpbnQgcyA9ICgobGFuZSAmIDEpID8KKyAgICAgICAgICAgICAg ICAgRFBfQURKVVNUX1ZPTFRBR0VfU1dJTkdfTEFORTFfU0hJRlQgOgorICAgICAgICAgICAgICAg ICBEUF9BREpVU1RfVk9MVEFHRV9TV0lOR19MQU5FMF9TSElGVCk7CisgICAgICAgIHU4IGwgPSBk cF9saW5rX3N0YXR1cyhsaW5rX3N0YXR1cywgaSk7CisKKyAgICAgICAgcmV0dXJuICgobCA+PiBz KSAmIDB4MykgPDwgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19TSElGVDsKK30KKwordTggZHJtX2Rw X2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMoY29uc3QgdTggbGlua19zdGF0dXNbRFBf TElOS19TVEFUVVNfU0laRV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgbGFuZSkKK3sKKyAgICAgICAgaW50IGkgPSBEUF9BREpVU1RfUkVRVUVTVF9MQU5F MF8xICsgKGxhbmUgPj4gMSk7CisgICAgICAgIGludCBzID0gKChsYW5lICYgMSkgPworICAgICAg ICAgICAgICAgICBEUF9BREpVU1RfUFJFX0VNUEhBU0lTX0xBTkUxX1NISUZUIDoKKyAgICAgICAg ICAgICAgICAgRFBfQURKVVNUX1BSRV9FTVBIQVNJU19MQU5FMF9TSElGVCk7CisgICAgICAgIHU4 IGwgPSBkcF9saW5rX3N0YXR1cyhsaW5rX3N0YXR1cywgaSk7CisKKyAgICAgICAgcmV0dXJuICgo bCA+PiBzKSAmIDB4MykgPDwgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NISUZUOworfQorCisvKiBG SVhNRTogKi8KK3N0YXRpYyB2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKSB7fQorc3Rh dGljIHZvaWQgbWRlbGF5KHVuc2lnbmVkIGxvbmcgbXNlY3MpIHt9CisKK3ZvaWQgZHJtX2RwX2xp bmtfdHJhaW5fY2xvY2tfcmVjb3ZlcnlfZGVsYXkoY29uc3QgdTggZHBjZFtEUF9SRUNFSVZFUl9D QVBfU0laRV0pIHsKKyAgICAgICAgaWYgKGRwY2RbRFBfVFJBSU5JTkdfQVVYX1JEX0lOVEVSVkFM XSA9PSAwKQorICAgICAgICAgICAgICAgIHVkZWxheSgxMDApOworICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgbWRlbGF5KGRwY2RbRFBfVFJBSU5JTkdfQVVYX1JEX0lOVEVSVkFMXSAqIDQp OworfQorCit2b2lkIGRybV9kcF9saW5rX3RyYWluX2NoYW5uZWxfZXFfZGVsYXkoY29uc3QgdTgg ZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRV0pIHsKKyAgICAgICAgaWYgKGRwY2RbRFBfVFJBSU5J TkdfQVVYX1JEX0lOVEVSVkFMXSA9PSAwKQorICAgICAgICAgICAgICAgIHVkZWxheSg0MDApOwor ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWRlbGF5KGRwY2RbRFBfVFJBSU5JTkdfQVVY X1JEX0lOVEVSVkFMXSAqIDQpOworfQorCmRpZmYgLS1naXQgYS91bml0LXRlc3QtaGVscGVyL01h a2VmaWxlLmFtIGIvdW5pdC10ZXN0LWhlbHBlci9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5jZjU0ZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pdC10ZXN0 LWhlbHBlci9NYWtlZmlsZS5hbQpAQCAtMCwwICsxIEBACitTVUJESVJTID0gaTkxNQpkaWZmIC0t Z2l0IGEvdW5pdC10ZXN0LWhlbHBlci9pOTE1L01ha2VmaWxlLmFtIGIvdW5pdC10ZXN0LWhlbHBl ci9pOTE1L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNj MTQyNjkKLS0tIC9kZXYvbnVsbAorKysgYi91bml0LXRlc3QtaGVscGVyL2k5MTUvTWFrZWZpbGUu YW0KQEAgLTAsMCArMSw5IEBACitpZiBIQVZFX0tFUk5FTF9TUkNfRElSCisKK0JVSUxUX1NPVVJD RVMgPSBcCisJaW50ZWxfZHBfbGlua190cmFpbmluZy5jCisKKyUuYzogJChJOTE1X1NSQ19ESVIp LyUuYworCWNwICQ8ICRACisKK2VuZGlmCmRpZmYgLS1naXQgYS91bml0LXRlc3QtaGVscGVyL2lu Y2x1ZGUvYnVpbGRfbWFnaWMuaCBiL3VuaXQtdGVzdC1oZWxwZXIvaW5jbHVkZS9idWlsZF9tYWdp Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTM4MzYKLS0tIC9kZXYv bnVsbAorKysgYi91bml0LXRlc3QtaGVscGVyL2luY2x1ZGUvYnVpbGRfbWFnaWMuaApAQCAtMCww ICsxLDI3IEBACisjaWZuZGVmIF9JR1RfQlVJTERfTUFHSUNfSAorI2RlZmluZSBfSUdUX0JVSUxE X01BR0lDX0gKKworI2lmbmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fS0VSTkVMX18KKyNlbmRp ZgorCisjaW5jbHVkZSAidW5pdC10ZXN0LWhlbHBlci9rZXJuZWwtc3JjL3Rvb2xzL2luY2x1ZGUv bGludXgvY29tcGlsZXIuaCIKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRp bnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordHlwZWRlZiB1aW50OF90IHU4OwordHlwZWRl ZiB1aW50MTZfdCB1MTY7Cit0eXBlZGVmIHVpbnQzMl90IHUzMjsKK3R5cGVkZWYgdWludDY0X3Qg dTY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpemVfdDsKK3R5cGVkZWYgbG9uZyBzc2l6ZV90 OworCitzdHJ1Y3QgZGVsYXllZF93b3JrIHsKK307CisKK3N0cnVjdCBub3RpZmllcl9ibG9jayB7 Cit9OworCisjZW5kaWYgLyogX0lHVF9CVUlMRF9NQUdJQ19IICovCmRpZmYgLS1naXQgYS91bml0 LXRlc3QtaGVscGVyL2luY2x1ZGUvZHJtL2RybVAuaCBiL3VuaXQtdGVzdC1oZWxwZXIvaW5jbHVk ZS9kcm0vZHJtUC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNDg1MTgK LS0tIC9kZXYvbnVsbAorKysgYi91bml0LXRlc3QtaGVscGVyL2luY2x1ZGUvZHJtL2RybVAuaApA QCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9JR1RfRFJNX1BfSF8KKyNkZWZpbmUgX0lHVF9EUk1f UF9IXworCisjaW5jbHVkZSAiaWd0X2NvcmUuaCIKKworc3RydWN0IGRybV9kZXZpY2UgeworfTsK Kworc3RydWN0IGRybV9jb25uZWN0b3IgeworfTsKKworc3RydWN0IGRybV9lbmNvZGVyIHsKK307 CisKK3N0cnVjdCBkcm1fY3J0YyB7Cit9OworCitzdHJ1Y3QgZHJtX3BsYW5lIHsKK307CisKKyNk ZWZpbmUgRFJNX0VSUk9SKHgpIGlndF93YXJuKHgpCisjZGVmaW5lIERSTV9ERUJVR19LTVMoeCkg aWd0X2RlYnVnKHgpCisKKyNlbmRpZiAvKiBfSUdUX0RSTV9QX0hfICovCmRpZmYgLS1naXQgYS91 bml0LXRlc3QtaGVscGVyL2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaCBiL3VuaXQtdGVzdC1o ZWxwZXIvaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjU0ZjI5N2UKLS0tIC9kZXYvbnVsbAorKysgYi91bml0LXRlc3QtaGVscGVy L2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9J R1RfRFJNX0RQX0hFTFBFUl9IXworI2RlZmluZSBfSUdUX0RSTV9EUF9IRUxQRVJfSF8KKworI2lu Y2x1ZGUgPGJ1aWxkX21hZ2ljLmg+CisKK3N0cnVjdCBpMmNfYWRhcHRlciB7Cit9OworCitzdHJ1 Y3QgbXV0ZXggeworfTsKKworI2luY2x1ZGUgInVuaXQtdGVzdC1oZWxwZXIva2VybmVsLXNyYy9p bmNsdWRlL2RybS9kcm1fZHBfaGVscGVyLmgiCisKKyNlbmRpZiAvKiBfSUdUX0RSTV9EUF9IRUxQ RVJfSF8gKi8KZGlmZiAtLWdpdCBhL3VuaXQtdGVzdC1oZWxwZXIvaW5jbHVkZS9kcm0vZHJtX2Rw X21zdF9oZWxwZXIuaCBiL3VuaXQtdGVzdC1oZWxwZXIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9o ZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzlkMzYyCi0tLSAv ZGV2L251bGwKKysrIGIvdW5pdC10ZXN0LWhlbHBlci9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hl bHBlci5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfSUdUX0RSTV9EUF9NU1RfSEVMUEVSX0hf CisjZGVmaW5lIF9JR1RfRFJNX0RQX01TVF9IRUxQRVJfSF8KKworc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyIHsKK307CisKKyNlbmRpZiAvKiBfSUdUX0RSTV9EUF9NU1RfSEVMUEVSX0hf ICovCmRpZmYgLS1naXQgYS91bml0LXRlc3QtaGVscGVyL2luY2x1ZGUvbGludXgvZGVsYXkuaCBi L3VuaXQtdGVzdC1oZWxwZXIvaW5jbHVkZS9saW51eC9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0gCjIuNC4zCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=