From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 11/33] drm/i915: Split GEM object type definition to its own header Date: Mon, 20 May 2019 09:01:05 +0100 Message-ID: <20190520080127.18255-11-chris@chris-wilson.co.uk> References: <20190520080127.18255-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4B5428921C for ; Mon, 20 May 2019 08:02:03 +0000 (UTC) In-Reply-To: <20190520080127.18255-1-chris@chris-wilson.co.uk> 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 Cc: Matthew Auld List-Id: intel-gfx@lists.freedesktop.org Rm9yIGNvbnZlbmllbmNlIGluIGF2b2lkaW5nIGlubGluZSBzcGFnaGV0dGksIGtlZXAgdGhlIHR5 cGUgZGVmaW5pdGlvbgphcyBhIHNlcGFyYXRlIGhlYWRlci4KClNpZ25lZC1vZmYtYnk6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpSZXZpZXdlZC1ieTogTWF0dGhldyBB dWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v TWFrZWZpbGUgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL01h a2VmaWxlLmhlYWRlci10ZXN0IHwgIDE2ICsKIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X29iamVjdF90eXBlcy5oICB8IDI4NSArKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmggIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fYmF0Y2hfcG9vbC5oICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ndHQuaCAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fb2JqZWN0LmggICAgICAgIHwgMjk1ICstLS0tLS0tLS0tLS0tLS0tLQogOSBmaWxl cyBjaGFuZ2VkLCAzMTIgaW5zZXJ0aW9ucygrKSwgMjk0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9NYWtlZmlsZQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9NYWtlZmlsZS5oZWFkZXItdGVzdAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3Rf dHlwZXMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggNjgxMDZmZTM1YTA0Li45NjM0NGM5YTA3 MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC04NSw2ICs4NSw3IEBAIGd0LSQoQ09ORklHX0RS TV9JOTE1X1NFTEZURVNUKSArPSBcCiBpOTE1LXkgKz0gJChndC15KQogCiAjIEdFTSAoR3JhcGhp Y3MgRXhlY3V0aW9uIE1hbmFnZW1lbnQpIGNvZGUKK29iai15ICs9IGdlbS8KIGk5MTUteSArPSBc CiAJICBpOTE1X2FjdGl2ZS5vIFwKIAkgIGk5MTVfY21kX3BhcnNlci5vIFwKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA3 ZTdiOGI4NDBlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9N YWtlZmlsZQpAQCAtMCwwICsxIEBACitpbmNsdWRlICQoc3JjKS9NYWtlZmlsZS5oZWFkZXItdGVz dCAjIEV4dHJhIGhlYWRlciB0ZXN0cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL01ha2VmaWxlLmhlYWRlci10ZXN0IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL01ha2Vm aWxlLmhlYWRlci10ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u NjFlMDZjYmI0YjMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L01ha2VmaWxlLmhlYWRlci10ZXN0CkBAIC0wLDAgKzEsMTYgQEAKKyMgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IE1JVAorIyBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorCisj IFRlc3QgdGhlIGhlYWRlcnMgYXJlIGNvbXBpbGFibGUgYXMgc3RhbmRhbG9uZSB1bml0cworaGVh ZGVyX3Rlc3QgOj0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyYykvKi5oKSkKKworcXVpZXRfY21k X2hlYWRlcl90ZXN0ID0gSERSVEVTVCAkQAorICAgICAgY21kX2hlYWRlcl90ZXN0ID0gZWNobyAi XCNpbmNsdWRlIFwiJCg8RilcIiIgPiAkQAorCitoZWFkZXJfdGVzdF8lLmM6ICUuaAorCSQoY2Fs bCBjbWQsaGVhZGVyX3Rlc3QpCisKK2V4dHJhLSQoQ09ORklHX0RSTV9JOTE1X1dFUlJPUikgKz0g XAorCSQoZm9yZWFjaCBoLCQoaGVhZGVyX3Rlc3QpLCQocGF0c3Vic3QgJS5oLGhlYWRlcl90ZXN0 XyUubywkKGgpKSkKKworY2xlYW4tZmlsZXMgKz0gJChmb3JlYWNoIGgsJChoZWFkZXJfdGVzdCks JChwYXRzdWJzdCAlLmgsaGVhZGVyX3Rlc3RfJS5jLCQoaCkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uZmUzYjJhMjc3NWY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCkBAIC0wLDAgKzEs Mjg1IEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHly aWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0k5MTVfR0VN X09CSkVDVF9UWVBFU19IX18KKyNkZWZpbmUgX19JOTE1X0dFTV9PQkpFQ1RfVFlQRVNfSF9fCisK KyNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9nZW0u aD4KKworI2luY2x1ZGUgImk5MTVfYWN0aXZlLmgiCisjaW5jbHVkZSAiaTkxNV9zZWxmdGVzdC5o IgorCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKKworLyoKKyAqIHN0cnVjdCBpOTE1X2x1 dF9oYW5kbGUgdHJhY2tzIHRoZSBmYXN0IGxvb2t1cHMgZnJvbSBoYW5kbGUgdG8gdm1hIHVzZWQK KyAqIGZvciBleGVjYnVmLiBBbHRob3VnaCB3ZSB1c2UgYSByYWRpeHRyZWUgZm9yIHRoYXQgbWFw cGluZywgaW4gb3JkZXIgdG8KKyAqIHJlbW92ZSB0aGVtIGFzIHRoZSBvYmplY3Qgb3IgY29udGV4 dCBpcyBjbG9zZWQsIHdlIG5lZWQgYSBzZWNvbmRhcnkgbGlzdAorICogYW5kIGEgdHJhbnNsYXRp b24gZW50cnkgKGk5MTVfbHV0X2hhbmRsZSkuCisgKi8KK3N0cnVjdCBpOTE1X2x1dF9oYW5kbGUg eworCXN0cnVjdCBsaXN0X2hlYWQgb2JqX2xpbms7CisJc3RydWN0IGxpc3RfaGVhZCBjdHhfbGlu azsKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4OworCXUzMiBoYW5kbGU7Cit9OworCitz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgeworCXVuc2lnbmVkIGludCBmbGFnczsKKyNk ZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0hBU19TVFJVQ1RfUEFHRQlCSVQoMCkKKyNkZWZpbmUgSTkx NV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUJQklUKDEpCisjZGVmaW5lIEk5MTVfR0VNX09CSkVD VF9JU19QUk9YWQlCSVQoMikKKyNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0FTWU5DX0NBTkNFTAlC SVQoMykKKworCS8qIEludGVyZmFjZSBiZXR3ZWVuIHRoZSBHRU0gb2JqZWN0IGFuZCBpdHMgYmFj a2luZyBzdG9yYWdlLgorCSAqIGdldF9wYWdlcygpIGlzIGNhbGxlZCBvbmNlIHByaW9yIHRvIHRo ZSB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgc2V0CisJICogb2YgcGFnZXMgYmVmb3JlIHRvIGJpbmRp bmcgdGhlbSBpbnRvIHRoZSBHVFQsIGFuZCBwdXRfcGFnZXMoKSBpcworCSAqIGNhbGxlZCBhZnRl ciB3ZSBubyBsb25nZXIgbmVlZCB0aGVtLiBBcyB3ZSBleHBlY3QgdGhlcmUgdG8gYmUKKwkgKiBh c3NvY2lhdGVkIGNvc3Qgd2l0aCBtaWdyYXRpbmcgcGFnZXMgYmV0d2VlbiB0aGUgYmFja2luZyBz dG9yYWdlCisJICogYW5kIG1ha2luZyB0aGVtIGF2YWlsYWJsZSBmb3IgdGhlIEdQVSAoZS5nLiBj bGZsdXNoKSwgd2UgbWF5IGhvbGQKKwkgKiBvbnRvIHRoZSBwYWdlcyBhZnRlciB0aGV5IGFyZSBu byBsb25nZXIgcmVmZXJlbmNlZCBieSB0aGUgR1BVCisJICogaW4gY2FzZSB0aGV5IG1heSBiZSB1 c2VkIGFnYWluIHNob3J0bHkgKGZvciBleGFtcGxlIG1pZ3JhdGluZyB0aGUKKwkgKiBwYWdlcyB0 byBhIGRpZmZlcmVudCBtZW1vcnkgZG9tYWluIHdpdGhpbiB0aGUgR1RUKS4gcHV0X3BhZ2VzKCkK KwkgKiB3aWxsIHRoZXJlZm9yZSBtb3N0IGxpa2VseSBiZSBjYWxsZWQgd2hlbiB0aGUgb2JqZWN0 IGl0c2VsZiBpcworCSAqIGJlaW5nIHJlbGVhc2VkIG9yIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSAo d2hlcmUgd2UgYXR0ZW1wdCB0bworCSAqIHJlYXAgcGFnZXMgZm9yIHRoZSBzaHJpbmtlcikuCisJ ICovCisJaW50ICgqZ2V0X3BhZ2VzKShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsK Kwl2b2lkICgqcHV0X3BhZ2VzKShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJ ICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKTsKKworCWludCAoKnB3cml0ZSkoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9w d3JpdGUgKmFyZyk7CisKKwlpbnQgKCpkbWFidWZfZXhwb3J0KShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqKTsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaik7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7CisJc3RydWN0IGRy bV9nZW1fb2JqZWN0IGJhc2U7CisKKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9v cHMgKm9wczsKKworCXN0cnVjdCB7CisJCS8qKgorCQkgKiBAdm1hLmxvY2s6IHByb3RlY3QgdGhl IGxpc3QvdHJlZSBvZiB2bWFzCisJCSAqLworCQlzcGlubG9ja190IGxvY2s7CisKKwkJLyoqCisJ CSAqIEB2bWEubGlzdDogTGlzdCBvZiBWTUFzIGJhY2tlZCBieSB0aGlzIG9iamVjdAorCQkgKgor CQkgKiBUaGUgVk1BIG9uIHRoaXMgbGlzdCBhcmUgb3JkZXJlZCBieSB0eXBlLCBhbGwgR0dUVCB2 bWEgYXJlCisJCSAqIHBsYWNlZCBhdCB0aGUgaGVhZCBhbmQgYWxsIHBwR1RUIHZtYSBhcmUgcGxh Y2VkIGF0IHRoZSB0YWlsLgorCQkgKiBUaGUgZGlmZmVyZW50IHR5cGVzIG9mIEdHVFQgdm1hIGFy ZSB1bm9yZGVyZWQgYmV0d2VlbgorCQkgKiB0aGVtc2VsdmVzLCB1c2UgdGhlIEB2bWEudHJlZSAo d2hpY2ggaGFzIGEgZGVmaW5lZCBvcmRlcgorCQkgKiBiZXR3ZWVuIGFsbCBWTUEpIHRvIHF1aWNr bHkgZmluZCBhbiBleGFjdCBtYXRjaC4KKwkJICovCisJCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsK KworCQkvKioKKwkJICogQHZtYS50cmVlOiBPcmRlcmVkIHRyZWUgb2YgVk1BcyBiYWNrZWQgYnkg dGhpcyBvYmplY3QKKwkJICoKKwkJICogQWxsIFZNQSBjcmVhdGVkIGZvciB0aGlzIG9iamVjdCBh cmUgcGxhY2VkIGluIHRoZSBAdm1hLnRyZWUKKwkJICogZm9yIGZhc3QgcmV0cmlldmFsIHZpYSBh IGJpbmFyeSBzZWFyY2ggaW4KKwkJICogaTkxNV92bWFfaW5zdGFuY2UoKS4gVGhleSBhcmUgYWxz byBhZGRlZCB0byBAdm1hLmxpc3QgZm9yCisJCSAqIGVhc3kgaXRlcmF0aW9uLgorCQkgKi8KKwkJ c3RydWN0IHJiX3Jvb3QgdHJlZTsKKwl9IHZtYTsKKworCS8qKgorCSAqIEBsdXRfbGlzdDogTGlz dCBvZiB2bWEgbG9va3VwIGVudHJpZXMgaW4gdXNlIGZvciB0aGlzIG9iamVjdC4KKwkgKgorCSAq IElmIHRoaXMgb2JqZWN0IGlzIGNsb3NlZCwgd2UgbmVlZCB0byByZW1vdmUgYWxsIG9mIGl0cyBW TUEgZnJvbQorCSAqIHRoZSBmYXN0IGxvb2t1cCBpbmRleCBpbiBhc3NvY2lhdGVkIGNvbnRleHRz OyBAbHV0X2xpc3QgcHJvdmlkZXMKKwkgKiB0aGlzIHRyYW5zbGF0aW9uIGZyb20gb2JqZWN0IHRv IGNvbnRleHQtPmhhbmRsZXNfdm1hLgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbHV0X2xpc3Q7 CisKKwkvKiogU3RvbGVuIG1lbW9yeSBmb3IgdGhpcyBvYmplY3QsIGluc3RlYWQgb2YgYmVpbmcg YmFja2VkIGJ5IHNobWVtLiAqLworCXN0cnVjdCBkcm1fbW1fbm9kZSAqc3RvbGVuOworCXVuaW9u IHsKKwkJc3RydWN0IHJjdV9oZWFkIHJjdTsKKwkJc3RydWN0IGxsaXN0X25vZGUgZnJlZWQ7CisJ fTsKKworCS8qKgorCSAqIFdoZXRoZXIgdGhlIG9iamVjdCBpcyBjdXJyZW50bHkgaW4gdGhlIEdH VFQgbW1hcC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdXNlcmZhdWx0X2NvdW50OworCXN0cnVjdCBs aXN0X2hlYWQgdXNlcmZhdWx0X2xpbms7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJhdGNoX3Bvb2xf bGluazsKKwlJOTE1X1NFTEZURVNUX0RFQ0xBUkUoc3RydWN0IGxpc3RfaGVhZCBzdF9saW5rKTsK KworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKioKKwkgKiBIYXZlIHdlIHRha2VuIGEgcmVm ZXJlbmNlIGZvciB0aGUgb2JqZWN0IGZvciBpbmNvbXBsZXRlIEdQVQorCSAqIGFjdGl2aXR5Pwor CSAqLworI2RlZmluZSBJOTE1X0JPX0FDVElWRV9SRUYgMAorCisJLyoKKwkgKiBJcyB0aGUgb2Jq ZWN0IHRvIGJlIG1hcHBlZCBhcyByZWFkLW9ubHkgdG8gdGhlIEdQVQorCSAqIE9ubHkgaG9ub3Vy ZWQgaWYgaGFyZHdhcmUgaGFzIHJlbGV2YW50IHB0ZSBiaXQKKwkgKi8KKwl1bnNpZ25lZCBpbnQg Y2FjaGVfbGV2ZWw6MzsKKwl1bnNpZ25lZCBpbnQgY2FjaGVfY29oZXJlbnQ6MjsKKyNkZWZpbmUg STkxNV9CT19DQUNIRV9DT0hFUkVOVF9GT1JfUkVBRCBCSVQoMCkKKyNkZWZpbmUgSTkxNV9CT19D QUNIRV9DT0hFUkVOVF9GT1JfV1JJVEUgQklUKDEpCisJdW5zaWduZWQgaW50IGNhY2hlX2RpcnR5 OjE7CisKKwkvKioKKwkgKiBAcmVhZF9kb21haW5zOiBSZWFkIG1lbW9yeSBkb21haW5zLgorCSAq CisJICogVGhlc2UgbW9uaXRvciB3aGljaCBjYWNoZXMgY29udGFpbiByZWFkL3dyaXRlIGRhdGEg cmVsYXRlZCB0byB0aGUKKwkgKiBvYmplY3QuIFdoZW4gdHJhbnNpdGlvbmluZyBmcm9tIG9uZSBz ZXQgb2YgZG9tYWlucyB0byBhbm90aGVyLAorCSAqIHRoZSBkcml2ZXIgaXMgY2FsbGVkIHRvIGVu c3VyZSB0aGF0IGNhY2hlcyBhcmUgc3VpdGFibHkgZmx1c2hlZCBhbmQKKwkgKiBpbnZhbGlkYXRl ZC4KKwkgKi8KKwl1MTYgcmVhZF9kb21haW5zOworCisJLyoqCisJICogQHdyaXRlX2RvbWFpbjog Q29ycmVzcG9uZGluZyB1bmlxdWUgd3JpdGUgbWVtb3J5IGRvbWFpbi4KKwkgKi8KKwl1MTYgd3Jp dGVfZG9tYWluOworCisJYXRvbWljX3QgZnJvbnRidWZmZXJfYml0czsKKwl1bnNpZ25lZCBpbnQg ZnJvbnRidWZmZXJfZ2d0dF9vcmlnaW47IC8qIHdyaXRlIG9uY2UgKi8KKwlzdHJ1Y3QgaTkxNV9h Y3RpdmVfcmVxdWVzdCBmcm9udGJ1ZmZlcl93cml0ZTsKKworCS8qKiBDdXJyZW50IHRpbGluZyBz dHJpZGUgZm9yIHRoZSBvYmplY3QsIGlmIGl0J3MgdGlsZWQuICovCisJdW5zaWduZWQgaW50IHRp bGluZ19hbmRfc3RyaWRlOworI2RlZmluZSBGRU5DRV9NSU5JTVVNX1NUUklERSAxMjggLyogU2Vl IGk5MTVfdGlsaW5nX29rKCkgKi8KKyNkZWZpbmUgVElMSU5HX01BU0sgKEZFTkNFX01JTklNVU1f U1RSSURFIC0gMSkKKyNkZWZpbmUgU1RSSURFX01BU0sgKH5USUxJTkdfTUFTSykKKworCS8qKiBD b3VudCBvZiBWTUEgYWN0dWFsbHkgYm91bmQgYnkgdGhpcyBvYmplY3QgKi8KKwl1bnNpZ25lZCBp bnQgYmluZF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgYWN0aXZlX2NvdW50OworCS8qKiBDb3VudCBv ZiBob3cgbWFueSBnbG9iYWwgVk1BIGFyZSBjdXJyZW50bHkgcGlubmVkIGZvciB1c2UgYnkgSFcg Ki8KKwl1bnNpZ25lZCBpbnQgcGluX2dsb2JhbDsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBtdXRl eCBsb2NrOyAvKiBwcm90ZWN0cyB0aGUgcGFnZXMgYW5kIHRoZWlyIHVzZSAqLworCQlhdG9taWNf dCBwYWdlc19waW5fY291bnQ7CisKKwkJc3RydWN0IHNnX3RhYmxlICpwYWdlczsKKwkJdm9pZCAq bWFwcGluZzsKKworCQkvKiBUT0RPOiB3aGFjayBzb21lIG9mIHRoaXMgaW50byB0aGUgZXJyb3Ig c3RhdGUgKi8KKwkJc3RydWN0IGk5MTVfcGFnZV9zaXplcyB7CisJCQkvKioKKwkJCSAqIFRoZSBz ZyBtYXNrIG9mIHRoZSBwYWdlcyBzZ190YWJsZS4gaS5lIHRoZSBtYXNrIG9mCisJCQkgKiBvZiB0 aGUgbGVuZ3RocyBmb3IgZWFjaCBzZyBlbnRyeS4KKwkJCSAqLworCQkJdW5zaWduZWQgaW50IHBo eXM7CisKKwkJCS8qKgorCQkJICogVGhlIGd0dCBwYWdlIHNpemVzIHdlIGFyZSBhbGxvd2VkIHRv IHVzZSBnaXZlbiB0aGUKKwkJCSAqIHNnIG1hc2sgYW5kIHRoZSBzdXBwb3J0ZWQgcGFnZSBzaXpl cy4gVGhpcyB3aWxsCisJCQkgKiBleHByZXNzIHRoZSBzbWFsbGVzdCB1bml0IHdlIGNhbiB1c2Ug Zm9yIHRoZSB3aG9sZQorCQkJICogb2JqZWN0LCBhcyB3ZWxsIGFzIHRoZSBsYXJnZXIgc2l6ZXMg d2UgbWF5IGJlIGFibGUKKwkJCSAqIHRvIHVzZSBvcHBvcnR1bmlzdGljYWxseS4KKwkJCSAqLwor CQkJdW5zaWduZWQgaW50IHNnOworCisJCQkvKioKKwkJCSAqIFRoZSBhY3R1YWwgZ3R0IHBhZ2Ug c2l6ZSB1c2FnZS4gU2luY2Ugd2UgY2FuIGhhdmUKKwkJCSAqIG11bHRpcGxlIHZtYSBhc3NvY2lh dGVkIHdpdGggdGhpcyBvYmplY3Qgd2UgbmVlZCB0bworCQkJICogcHJldmVudCBhbnkgdHJhbXBs aW5nIG9mIHN0YXRlLCBoZW5jZSBhIGNvcHkgb2YgdGhpcworCQkJICogc3RydWN0IGFsc28gbGl2 ZXMgaW4gZWFjaCB2bWEsIHRoZXJlZm9yZSB0aGUgZ3R0CisJCQkgKiB2YWx1ZSBoZXJlIHNob3Vs ZCBvbmx5IGJlIHJlYWQvd3JpdGUgdGhyb3VnaCB0aGUgdm1hLgorCQkJICovCisJCQl1bnNpZ25l ZCBpbnQgZ3R0OworCQl9IHBhZ2Vfc2l6ZXM7CisKKwkJSTkxNV9TRUxGVEVTVF9ERUNMQVJFKHVu c2lnbmVkIGludCBwYWdlX21hc2spOworCisJCXN0cnVjdCBpOTE1X2dlbV9vYmplY3RfcGFnZV9p dGVyIHsKKwkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcG9zOworCQkJdW5zaWduZWQgaW50IHNn X2lkeDsgLyogaW4gcGFnZXMsIGJ1dCAzMmJpdCBlZWshICovCisKKwkJCXN0cnVjdCByYWRpeF90 cmVlX3Jvb3QgcmFkaXg7CisJCQlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgdGhpcyBj YWNoZSAqLworCQl9IGdldF9wYWdlOworCisJCS8qKgorCQkgKiBFbGVtZW50IHdpdGhpbiBpOTE1 LT5tbS51bmJvdW5kX2xpc3Qgb3IgaTkxNS0+bW0uYm91bmRfbGlzdCwKKwkJICogbG9ja2VkIGJ5 IGk5MTUtPm1tLm9ial9sb2NrLgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCisJ CS8qKgorCQkgKiBBZHZpY2U6IGFyZSB0aGUgYmFja2luZyBwYWdlcyBwdXJnZWFibGU/CisJCSAq LworCQl1bnNpZ25lZCBpbnQgbWFkdjoyOworCisJCS8qKgorCQkgKiBUaGlzIGlzIHNldCBpZiB0 aGUgb2JqZWN0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gc2luY2UgdGhlCisJCSAqIHBhZ2VzIHdlcmUg bGFzdCBhY3F1aXJlZC4KKwkJICovCisJCWJvb2wgZGlydHk6MTsKKworCQkvKioKKwkJICogVGhp cyBpcyBzZXQgaWYgdGhlIG9iamVjdCBoYXMgYmVlbiBwaW5uZWQgZHVlIHRvIHVua25vd24KKwkJ ICogc3dpenpsaW5nLgorCQkgKi8KKwkJYm9vbCBxdWlya2VkOjE7CisJfSBtbTsKKworCS8qKiBC cmVhZGNydW1iIG9mIGxhc3QgcmVuZGVyaW5nIHRvIHRoZSBidWZmZXIuCisJICogVGhlcmUgY2Fu IG9ubHkgYmUgb25lIHdyaXRlciwgYnV0IHdlIGFsbG93IGZvciBtdWx0aXBsZSByZWFkZXJzLgor CSAqIElmIHRoZXJlIGlzIGEgd3JpdGVyIHRoYXQgbmVjZXNzYXJpbHkgaW1wbGllcyB0aGF0IGFs bCBvdGhlcgorCSAqIHJlYWQgcmVxdWVzdHMgYXJlIGNvbXBsZXRlIC0gYnV0IHdlIG1heSBvbmx5 IGJlIGxhemlseSBjbGVhcmluZworCSAqIHRoZSByZWFkIHJlcXVlc3RzLiBBIHJlYWQgcmVxdWVz dCBpcyBuYXR1cmFsbHkgdGhlIG1vc3QgcmVjZW50CisJICogcmVxdWVzdCBvbiBhIHJpbmcsIHNv IHdlIG1heSBoYXZlIHR3byBkaWZmZXJlbnQgd3JpdGUgYW5kIHJlYWQKKwkgKiByZXF1ZXN0cyBv biBvbmUgcmluZyB3aGVyZSB0aGUgd3JpdGUgcmVxdWVzdCBpcyBvbGRlciB0aGFuIHRoZQorCSAq IHJlYWQgcmVxdWVzdC4gVGhpcyBhbGxvd3MgZm9yIHRoZSBDUFUgdG8gcmVhZCBmcm9tIGFuIGFj dGl2ZQorCSAqIGJ1ZmZlciBieSBvbmx5IHdhaXRpbmcgZm9yIHRoZSB3cml0ZSB0byBjb21wbGV0 ZS4KKwkgKi8KKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2OworCisJLyoqIFJlZmVy ZW5jZXMgZnJvbSBmcmFtZWJ1ZmZlcnMsIGxvY2tzIG91dCB0aWxpbmcgY2hhbmdlcy4gKi8KKwl1 bnNpZ25lZCBpbnQgZnJhbWVidWZmZXJfcmVmZXJlbmNlczsKKworCS8qKiBSZWNvcmQgb2YgYWRk cmVzcyBiaXQgMTcgb2YgZWFjaCBwYWdlIGF0IGxhc3QgdW5iaW5kLiAqLworCXVuc2lnbmVkIGxv bmcgKmJpdF8xNzsKKworCXVuaW9uIHsKKwkJc3RydWN0IGk5MTVfZ2VtX3VzZXJwdHIgeworCQkJ dWludHB0cl90IHB0cjsKKworCQkJc3RydWN0IGk5MTVfbW1fc3RydWN0ICptbTsKKwkJCXN0cnVj dCBpOTE1X21tdV9vYmplY3QgKm1tdV9vYmplY3Q7CisJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndv cms7CisJCX0gdXNlcnB0cjsKKworCQl1bnNpZ25lZCBsb25nIHNjcmF0Y2g7CisKKwkJdm9pZCAq Z3Z0X2luZm87CisJfTsKKworCS8qKiBmb3IgcGh5cyBhbGxvY2F0ZWQgb2JqZWN0cyAqLworCXN0 cnVjdCBkcm1fZG1hX2hhbmRsZSAqcGh5c19oYW5kbGU7CisKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25f b2JqZWN0IF9fYnVpbHRpbl9yZXN2OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqCit0b19pbnRlbF9ibyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSkK K3sKKwkvKiBBc3NlcnQgdGhhdCB0b19pbnRlbF9ibyhOVUxMKSA9PSBOVUxMICovCisJQlVJTERf QlVHX09OKG9mZnNldG9mKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LCBiYXNlKSk7CisKKwly ZXR1cm4gY29udGFpbmVyX29mKGdlbSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsIGJhc2Up OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2VuZ2luZV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5 cGVzLmgKaW5kZXggZjNmYzJlOGFjYzkwLi4yYzIzMjUwMWQ5NzMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVm aW5lIEk5MTVfQ01EX0hBU0hfT1JERVIgOQogCiBzdHJ1Y3QgZG1hX2ZlbmNlOworc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3Q7CiBzdHJ1Y3QgZHJtX2k5MTVfcmVnX3RhYmxlOwogc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQ7CiBzdHJ1Y3QgaTkxNV9yZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKaW5kZXggNTgwMWY1NDA3NTg5Li4wOTM0YWNlMDI5NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaApAQCAtODEsNyArODEsNiBAQAogI2luY2x1ZGUgImk5MTVfZ2VtLmgiCiAjaW5jbHVkZSAi aTkxNV9nZW1fY29udGV4dC5oIgogI2luY2x1ZGUgImk5MTVfZ2VtX2ZlbmNlX3JlZy5oIgotI2lu Y2x1ZGUgImk5MTVfZ2VtX29iamVjdC5oIgogI2luY2x1ZGUgImk5MTVfZ2VtX2d0dC5oIgogI2lu Y2x1ZGUgImk5MTVfZ3B1X2Vycm9yLmgiCiAjaW5jbHVkZSAiaTkxNV9yZXF1ZXN0LmgiCkBAIC0x MzYsNiArMTM1LDggQEAgYm9vbCBpOTE1X2Vycm9yX2luamVjdGVkKHZvaWQpOwogCV9faTkxNV9w cmludGsoaTkxNSwgaTkxNV9lcnJvcl9pbmplY3RlZCgpID8gS0VSTl9ERUJVRyA6IEtFUk5fRVJS LCBcCiAJCSAgICAgIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAorc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3Q7CisKIGVudW0gaHBkX3BpbiB7CiAJSFBEX05PTkUgPSAwLAogCUhQRF9UViA9IEhQRF9O T05FLCAgICAgLyogVFYgaXMga25vd24gdG8gYmUgdW5yZWxpYWJsZSAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fYmF0Y2hfcG9vbC5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fYmF0Y2hfcG9vbC5oCmluZGV4IDU2OTQ3ZGFhYWY2NS4uZmVlZWVl YWE1NGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9w b29sLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fYmF0Y2hfcG9vbC5oCkBA IC05LDYgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3Q7CiBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzOwogCiBzdHJ1Y3QgaTkxNV9n ZW1fYmF0Y2hfcG9vbCB7CkBAIC0xOSw3ICsyMCw3IEBAIHN0cnVjdCBpOTE1X2dlbV9iYXRjaF9w b29sIHsKIHZvaWQgaTkxNV9nZW1fYmF0Y2hfcG9vbF9pbml0KHN0cnVjdCBpOTE1X2dlbV9iYXRj aF9wb29sICpwb29sLAogCQkJICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsK IHZvaWQgaTkxNV9nZW1fYmF0Y2hfcG9vbF9maW5pKHN0cnVjdCBpOTE1X2dlbV9iYXRjaF9wb29s ICpwb29sKTsKLXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0Kgorc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKgogaTkxNV9nZW1fYmF0Y2hfcG9vbF9nZXQoc3RydWN0IGk5MTVfZ2VtX2JhdGNo X3Bvb2wgKnBvb2wsIHNpemVfdCBzaXplKTsKIAogI2VuZGlmIC8qIEk5MTVfR0VNX0JBVENIX1BP T0xfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAppbmRleCAyZmFmYTA0YzQ1ZWMu LjU5MzA3OWYzMGZiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKQEAgLTYxLDYg KzYxLDcgQEAKIAogc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZTsKIHN0cnVjdCBkcm1faTkx NV9mZW5jZV9yZWc7CitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKIHN0cnVjdCBpOTE1X3Zt YTsKIAogdHlwZWRlZiB1MzIgZ2VuNl9wdGVfdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f b2JqZWN0LmgKaW5kZXggY2E5M2E0MGMwYzg3Li4zNjY2YjBjNWY2Y2EgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCkBAIC0xLDMwOCArMSwxOSBAQAogLyoKLSAqIENvcHly aWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwot ICogSU4gVEhFIFNPRlRXQVJFLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogICoK KyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCiAgKi8KIAogI2lmbmRlZiBf X0k5MTVfR0VNX09CSkVDVF9IX18KICNkZWZpbmUgX19JOTE1X0dFTV9PQkpFQ1RfSF9fCiAKLSNp bmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgotCi0jaW5jbHVkZSA8ZHJtL2RybV92bWFfbWFu YWdlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9maWxl Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGRybS9pOTE1X2Ry bS5oPgogCi0jaW5jbHVkZSAiaTkxNV9yZXF1ZXN0LmgiCi0jaW5jbHVkZSAiaTkxNV9zZWxmdGVz dC5oIgotCi1zdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKLQotLyoKLSAqIHN0cnVjdCBpOTE1 X2x1dF9oYW5kbGUgdHJhY2tzIHRoZSBmYXN0IGxvb2t1cHMgZnJvbSBoYW5kbGUgdG8gdm1hIHVz ZWQKLSAqIGZvciBleGVjYnVmLiBBbHRob3VnaCB3ZSB1c2UgYSByYWRpeHRyZWUgZm9yIHRoYXQg bWFwcGluZywgaW4gb3JkZXIgdG8KLSAqIHJlbW92ZSB0aGVtIGFzIHRoZSBvYmplY3Qgb3IgY29u dGV4dCBpcyBjbG9zZWQsIHdlIG5lZWQgYSBzZWNvbmRhcnkgbGlzdAotICogYW5kIGEgdHJhbnNs YXRpb24gZW50cnkgKGk5MTVfbHV0X2hhbmRsZSkuCi0gKi8KLXN0cnVjdCBpOTE1X2x1dF9oYW5k bGUgewotCXN0cnVjdCBsaXN0X2hlYWQgb2JqX2xpbms7Ci0Jc3RydWN0IGxpc3RfaGVhZCBjdHhf bGluazsKLQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4OwotCXUzMiBoYW5kbGU7Ci19Owot Ci1zdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgewotCXVuc2lnbmVkIGludCBmbGFnczsK LSNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0hBU19TVFJVQ1RfUEFHRQlCSVQoMCkKLSNkZWZpbmUg STkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUJQklUKDEpCi0jZGVmaW5lIEk5MTVfR0VNX09C SkVDVF9JU19QUk9YWQlCSVQoMikKLSNkZWZpbmUgSTkxNV9HRU1fT0JKRUNUX0FTWU5DX0NBTkNF TAlCSVQoMykKLQotCS8qIEludGVyZmFjZSBiZXR3ZWVuIHRoZSBHRU0gb2JqZWN0IGFuZCBpdHMg YmFja2luZyBzdG9yYWdlLgotCSAqIGdldF9wYWdlcygpIGlzIGNhbGxlZCBvbmNlIHByaW9yIHRv IHRoZSB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgc2V0Ci0JICogb2YgcGFnZXMgYmVmb3JlIHRvIGJp bmRpbmcgdGhlbSBpbnRvIHRoZSBHVFQsIGFuZCBwdXRfcGFnZXMoKSBpcwotCSAqIGNhbGxlZCBh ZnRlciB3ZSBubyBsb25nZXIgbmVlZCB0aGVtLiBBcyB3ZSBleHBlY3QgdGhlcmUgdG8gYmUKLQkg KiBhc3NvY2lhdGVkIGNvc3Qgd2l0aCBtaWdyYXRpbmcgcGFnZXMgYmV0d2VlbiB0aGUgYmFja2lu ZyBzdG9yYWdlCi0JICogYW5kIG1ha2luZyB0aGVtIGF2YWlsYWJsZSBmb3IgdGhlIEdQVSAoZS5n LiBjbGZsdXNoKSwgd2UgbWF5IGhvbGQKLQkgKiBvbnRvIHRoZSBwYWdlcyBhZnRlciB0aGV5IGFy ZSBubyBsb25nZXIgcmVmZXJlbmNlZCBieSB0aGUgR1BVCi0JICogaW4gY2FzZSB0aGV5IG1heSBi ZSB1c2VkIGFnYWluIHNob3J0bHkgKGZvciBleGFtcGxlIG1pZ3JhdGluZyB0aGUKLQkgKiBwYWdl cyB0byBhIGRpZmZlcmVudCBtZW1vcnkgZG9tYWluIHdpdGhpbiB0aGUgR1RUKS4gcHV0X3BhZ2Vz KCkKLQkgKiB3aWxsIHRoZXJlZm9yZSBtb3N0IGxpa2VseSBiZSBjYWxsZWQgd2hlbiB0aGUgb2Jq ZWN0IGl0c2VsZiBpcwotCSAqIGJlaW5nIHJlbGVhc2VkIG9yIHVuZGVyIG1lbW9yeSBwcmVzc3Vy ZSAod2hlcmUgd2UgYXR0ZW1wdCB0bwotCSAqIHJlYXAgcGFnZXMgZm9yIHRoZSBzaHJpbmtlciku Ci0JICovCi0JaW50ICgqZ2V0X3BhZ2VzKShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqKTsK LQl2b2lkICgqcHV0X3BhZ2VzKShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqLCBzdHJ1Y3Qg c2dfdGFibGUgKik7Ci0KLQlpbnQgKCpwd3JpdGUpKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICosCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICopOwotCi0JaW50 ICgqZG1hYnVmX2V4cG9ydCkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKik7Ci0Jdm9pZCAo KnJlbGVhc2UpKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICopOwotfTsKLQotc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCBiYXNlOwotCi0JY29u c3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzICpvcHM7Ci0KLQlzdHJ1Y3QgewotCQkv KioKLQkJICogQHZtYS5sb2NrOiBwcm90ZWN0IHRoZSBsaXN0L3RyZWUgb2Ygdm1hcwotCQkgKi8K LQkJc3BpbmxvY2tfdCBsb2NrOwotCi0JCS8qKgotCQkgKiBAdm1hLmxpc3Q6IExpc3Qgb2YgVk1B cyBiYWNrZWQgYnkgdGhpcyBvYmplY3QKLQkJICoKLQkJICogVGhlIFZNQSBvbiB0aGlzIGxpc3Qg YXJlIG9yZGVyZWQgYnkgdHlwZSwgYWxsIEdHVFQgdm1hIGFyZQotCQkgKiBwbGFjZWQgYXQgdGhl IGhlYWQgYW5kIGFsbCBwcEdUVCB2bWEgYXJlIHBsYWNlZCBhdCB0aGUgdGFpbC4KLQkJICogVGhl IGRpZmZlcmVudCB0eXBlcyBvZiBHR1RUIHZtYSBhcmUgdW5vcmRlcmVkIGJldHdlZW4KLQkJICog dGhlbXNlbHZlcywgdXNlIHRoZSBAdm1hLnRyZWUgKHdoaWNoIGhhcyBhIGRlZmluZWQgb3JkZXIK LQkJICogYmV0d2VlbiBhbGwgVk1BKSB0byBxdWlja2x5IGZpbmQgYW4gZXhhY3QgbWF0Y2guCi0J CSAqLwotCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KLQkJLyoqCi0JCSAqIEB2bWEudHJlZTog T3JkZXJlZCB0cmVlIG9mIFZNQXMgYmFja2VkIGJ5IHRoaXMgb2JqZWN0Ci0JCSAqCi0JCSAqIEFs bCBWTUEgY3JlYXRlZCBmb3IgdGhpcyBvYmplY3QgYXJlIHBsYWNlZCBpbiB0aGUgQHZtYS50cmVl Ci0JCSAqIGZvciBmYXN0IHJldHJpZXZhbCB2aWEgYSBiaW5hcnkgc2VhcmNoIGluCi0JCSAqIGk5 MTVfdm1hX2luc3RhbmNlKCkuIFRoZXkgYXJlIGFsc28gYWRkZWQgdG8gQHZtYS5saXN0IGZvcgot CQkgKiBlYXN5IGl0ZXJhdGlvbi4KLQkJICovCi0JCXN0cnVjdCByYl9yb290IHRyZWU7Ci0JfSB2 bWE7Ci0KLQkvKioKLQkgKiBAbHV0X2xpc3Q6IExpc3Qgb2Ygdm1hIGxvb2t1cCBlbnRyaWVzIGlu IHVzZSBmb3IgdGhpcyBvYmplY3QuCi0JICoKLQkgKiBJZiB0aGlzIG9iamVjdCBpcyBjbG9zZWQs IHdlIG5lZWQgdG8gcmVtb3ZlIGFsbCBvZiBpdHMgVk1BIGZyb20KLQkgKiB0aGUgZmFzdCBsb29r dXAgaW5kZXggaW4gYXNzb2NpYXRlZCBjb250ZXh0czsgQGx1dF9saXN0IHByb3ZpZGVzCi0JICog dGhpcyB0cmFuc2xhdGlvbiBmcm9tIG9iamVjdCB0byBjb250ZXh0LT5oYW5kbGVzX3ZtYS4KLQkg Ki8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGx1dF9saXN0OwotCi0JLyoqIFN0b2xlbiBtZW1vcnkgZm9y IHRoaXMgb2JqZWN0LCBpbnN0ZWFkIG9mIGJlaW5nIGJhY2tlZCBieSBzaG1lbS4gKi8KLQlzdHJ1 Y3QgZHJtX21tX25vZGUgKnN0b2xlbjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCByY3VfaGVhZCByY3U7 Ci0JCXN0cnVjdCBsbGlzdF9ub2RlIGZyZWVkOwotCX07Ci0KLQkvKioKLQkgKiBXaGV0aGVyIHRo ZSBvYmplY3QgaXMgY3VycmVudGx5IGluIHRoZSBHR1RUIG1tYXAuCi0JICovCi0JdW5zaWduZWQg aW50IHVzZXJmYXVsdF9jb3VudDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHVzZXJmYXVsdF9saW5rOwot Ci0Jc3RydWN0IGxpc3RfaGVhZCBiYXRjaF9wb29sX2xpbms7Ci0JSTkxNV9TRUxGVEVTVF9ERUNM QVJFKHN0cnVjdCBsaXN0X2hlYWQgc3RfbGluayk7Ci0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwot Ci0JLyoqCi0JICogSGF2ZSB3ZSB0YWtlbiBhIHJlZmVyZW5jZSBmb3IgdGhlIG9iamVjdCBmb3Ig aW5jb21wbGV0ZSBHUFUKLQkgKiBhY3Rpdml0eT8KLQkgKi8KLSNkZWZpbmUgSTkxNV9CT19BQ1RJ VkVfUkVGIDAKLQotCS8qCi0JICogSXMgdGhlIG9iamVjdCB0byBiZSBtYXBwZWQgYXMgcmVhZC1v bmx5IHRvIHRoZSBHUFUKLQkgKiBPbmx5IGhvbm91cmVkIGlmIGhhcmR3YXJlIGhhcyByZWxldmFu dCBwdGUgYml0Ci0JICovCi0JdW5zaWduZWQgaW50IGNhY2hlX2xldmVsOjM7Ci0JdW5zaWduZWQg aW50IGNhY2hlX2NvaGVyZW50OjI7Ci0jZGVmaW5lIEk5MTVfQk9fQ0FDSEVfQ09IRVJFTlRfRk9S X1JFQUQgQklUKDApCi0jZGVmaW5lIEk5MTVfQk9fQ0FDSEVfQ09IRVJFTlRfRk9SX1dSSVRFIEJJ VCgxKQotCXVuc2lnbmVkIGludCBjYWNoZV9kaXJ0eToxOwotCi0JLyoqCi0JICogQHJlYWRfZG9t YWluczogUmVhZCBtZW1vcnkgZG9tYWlucy4KLQkgKgotCSAqIFRoZXNlIG1vbml0b3Igd2hpY2gg Y2FjaGVzIGNvbnRhaW4gcmVhZC93cml0ZSBkYXRhIHJlbGF0ZWQgdG8gdGhlCi0JICogb2JqZWN0 LiBXaGVuIHRyYW5zaXRpb25pbmcgZnJvbSBvbmUgc2V0IG9mIGRvbWFpbnMgdG8gYW5vdGhlciwK LQkgKiB0aGUgZHJpdmVyIGlzIGNhbGxlZCB0byBlbnN1cmUgdGhhdCBjYWNoZXMgYXJlIHN1aXRh Ymx5IGZsdXNoZWQgYW5kCi0JICogaW52YWxpZGF0ZWQuCi0JICovCi0JdTE2IHJlYWRfZG9tYWlu czsKLQotCS8qKgotCSAqIEB3cml0ZV9kb21haW46IENvcnJlc3BvbmRpbmcgdW5pcXVlIHdyaXRl IG1lbW9yeSBkb21haW4uCi0JICovCi0JdTE2IHdyaXRlX2RvbWFpbjsKLQotCWF0b21pY190IGZy b250YnVmZmVyX2JpdHM7Ci0JdW5zaWduZWQgaW50IGZyb250YnVmZmVyX2dndHRfb3JpZ2luOyAv KiB3cml0ZSBvbmNlICovCi0Jc3RydWN0IGk5MTVfYWN0aXZlX3JlcXVlc3QgZnJvbnRidWZmZXJf d3JpdGU7Ci0KLQkvKiogQ3VycmVudCB0aWxpbmcgc3RyaWRlIGZvciB0aGUgb2JqZWN0LCBpZiBp dCdzIHRpbGVkLiAqLwotCXVuc2lnbmVkIGludCB0aWxpbmdfYW5kX3N0cmlkZTsKLSNkZWZpbmUg RkVOQ0VfTUlOSU1VTV9TVFJJREUgMTI4IC8qIFNlZSBpOTE1X3RpbGluZ19vaygpICovCi0jZGVm aW5lIFRJTElOR19NQVNLIChGRU5DRV9NSU5JTVVNX1NUUklERS0xKQotI2RlZmluZSBTVFJJREVf TUFTSyAoflRJTElOR19NQVNLKQotCi0JLyoqIENvdW50IG9mIFZNQSBhY3R1YWxseSBib3VuZCBi eSB0aGlzIG9iamVjdCAqLwotCXVuc2lnbmVkIGludCBiaW5kX2NvdW50OwotCXVuc2lnbmVkIGlu dCBhY3RpdmVfY291bnQ7Ci0JLyoqIENvdW50IG9mIGhvdyBtYW55IGdsb2JhbCBWTUEgYXJlIGN1 cnJlbnRseSBwaW5uZWQgZm9yIHVzZSBieSBIVyAqLwotCXVuc2lnbmVkIGludCBwaW5fZ2xvYmFs OwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIHRoZSBwYWdl cyBhbmQgdGhlaXIgdXNlICovCi0JCWF0b21pY190IHBhZ2VzX3Bpbl9jb3VudDsKLQotCQlzdHJ1 Y3Qgc2dfdGFibGUgKnBhZ2VzOwotCQl2b2lkICptYXBwaW5nOwotCi0JCS8qIFRPRE86IHdoYWNr IHNvbWUgb2YgdGhpcyBpbnRvIHRoZSBlcnJvciBzdGF0ZSAqLwotCQlzdHJ1Y3QgaTkxNV9wYWdl X3NpemVzIHsKLQkJCS8qKgotCQkJICogVGhlIHNnIG1hc2sgb2YgdGhlIHBhZ2VzIHNnX3RhYmxl LiBpLmUgdGhlIG1hc2sgb2YKLQkJCSAqIG9mIHRoZSBsZW5ndGhzIGZvciBlYWNoIHNnIGVudHJ5 LgotCQkJICovCi0JCQl1bnNpZ25lZCBpbnQgcGh5czsKLQotCQkJLyoqCi0JCQkgKiBUaGUgZ3R0 IHBhZ2Ugc2l6ZXMgd2UgYXJlIGFsbG93ZWQgdG8gdXNlIGdpdmVuIHRoZQotCQkJICogc2cgbWFz ayBhbmQgdGhlIHN1cHBvcnRlZCBwYWdlIHNpemVzLiBUaGlzIHdpbGwKLQkJCSAqIGV4cHJlc3Mg dGhlIHNtYWxsZXN0IHVuaXQgd2UgY2FuIHVzZSBmb3IgdGhlIHdob2xlCi0JCQkgKiBvYmplY3Qs IGFzIHdlbGwgYXMgdGhlIGxhcmdlciBzaXplcyB3ZSBtYXkgYmUgYWJsZQotCQkJICogdG8gdXNl IG9wcG9ydHVuaXN0aWNhbGx5LgotCQkJICovCi0JCQl1bnNpZ25lZCBpbnQgc2c7Ci0KLQkJCS8q KgotCQkJICogVGhlIGFjdHVhbCBndHQgcGFnZSBzaXplIHVzYWdlLiBTaW5jZSB3ZSBjYW4gaGF2 ZQotCQkJICogbXVsdGlwbGUgdm1hIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdCB3ZSBuZWVk IHRvCi0JCQkgKiBwcmV2ZW50IGFueSB0cmFtcGxpbmcgb2Ygc3RhdGUsIGhlbmNlIGEgY29weSBv ZiB0aGlzCi0JCQkgKiBzdHJ1Y3QgYWxzbyBsaXZlcyBpbiBlYWNoIHZtYSwgdGhlcmVmb3JlIHRo ZSBndHQKLQkJCSAqIHZhbHVlIGhlcmUgc2hvdWxkIG9ubHkgYmUgcmVhZC93cml0ZSB0aHJvdWdo IHRoZSB2bWEuCi0JCQkgKi8KLQkJCXVuc2lnbmVkIGludCBndHQ7Ci0JCX0gcGFnZV9zaXplczsK LQotCQlJOTE1X1NFTEZURVNUX0RFQ0xBUkUodW5zaWduZWQgaW50IHBhZ2VfbWFzayk7Ci0KLQkJ c3RydWN0IGk5MTVfZ2VtX29iamVjdF9wYWdlX2l0ZXIgewotCQkJc3RydWN0IHNjYXR0ZXJsaXN0 ICpzZ19wb3M7Ci0JCQl1bnNpZ25lZCBpbnQgc2dfaWR4OyAvKiBpbiBwYWdlcywgYnV0IDMyYml0 IGVlayEgKi8KLQotCQkJc3RydWN0IHJhZGl4X3RyZWVfcm9vdCByYWRpeDsKLQkJCXN0cnVjdCBt dXRleCBsb2NrOyAvKiBwcm90ZWN0cyB0aGlzIGNhY2hlICovCi0JCX0gZ2V0X3BhZ2U7Ci0KLQkJ LyoqCi0JCSAqIEVsZW1lbnQgd2l0aGluIGk5MTUtPm1tLnVuYm91bmRfbGlzdCBvciBpOTE1LT5t bS5ib3VuZF9saXN0LAotCQkgKiBsb2NrZWQgYnkgaTkxNS0+bW0ub2JqX2xvY2suCi0JCSAqLwot CQlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Ci0KLQkJLyoqCi0JCSAqIEFkdmljZTogYXJlIHRoZSBi YWNraW5nIHBhZ2VzIHB1cmdlYWJsZT8KLQkJICovCi0JCXVuc2lnbmVkIGludCBtYWR2OjI7Ci0K LQkJLyoqCi0JCSAqIFRoaXMgaXMgc2V0IGlmIHRoZSBvYmplY3QgaGFzIGJlZW4gd3JpdHRlbiB0 byBzaW5jZSB0aGUKLQkJICogcGFnZXMgd2VyZSBsYXN0IGFjcXVpcmVkLgotCQkgKi8KLQkJYm9v bCBkaXJ0eToxOwotCi0JCS8qKgotCQkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0IGhhcyBi ZWVuIHBpbm5lZCBkdWUgdG8gdW5rbm93bgotCQkgKiBzd2l6emxpbmcuCi0JCSAqLwotCQlib29s IHF1aXJrZWQ6MTsKLQl9IG1tOwotCi0JLyoqIEJyZWFkY3J1bWIgb2YgbGFzdCByZW5kZXJpbmcg dG8gdGhlIGJ1ZmZlci4KLQkgKiBUaGVyZSBjYW4gb25seSBiZSBvbmUgd3JpdGVyLCBidXQgd2Ug YWxsb3cgZm9yIG11bHRpcGxlIHJlYWRlcnMuCi0JICogSWYgdGhlcmUgaXMgYSB3cml0ZXIgdGhh dCBuZWNlc3NhcmlseSBpbXBsaWVzIHRoYXQgYWxsIG90aGVyCi0JICogcmVhZCByZXF1ZXN0cyBh cmUgY29tcGxldGUgLSBidXQgd2UgbWF5IG9ubHkgYmUgbGF6aWx5IGNsZWFyaW5nCi0JICogdGhl IHJlYWQgcmVxdWVzdHMuIEEgcmVhZCByZXF1ZXN0IGlzIG5hdHVyYWxseSB0aGUgbW9zdCByZWNl bnQKLQkgKiByZXF1ZXN0IG9uIGEgcmluZywgc28gd2UgbWF5IGhhdmUgdHdvIGRpZmZlcmVudCB3 cml0ZSBhbmQgcmVhZAotCSAqIHJlcXVlc3RzIG9uIG9uZSByaW5nIHdoZXJlIHRoZSB3cml0ZSBy ZXF1ZXN0IGlzIG9sZGVyIHRoYW4gdGhlCi0JICogcmVhZCByZXF1ZXN0LiBUaGlzIGFsbG93cyBm b3IgdGhlIENQVSB0byByZWFkIGZyb20gYW4gYWN0aXZlCi0JICogYnVmZmVyIGJ5IG9ubHkgd2Fp dGluZyBmb3IgdGhlIHdyaXRlIHRvIGNvbXBsZXRlLgotCSAqLwotCXN0cnVjdCByZXNlcnZhdGlv bl9vYmplY3QgKnJlc3Y7Ci0KLQkvKiogUmVmZXJlbmNlcyBmcm9tIGZyYW1lYnVmZmVycywgbG9j a3Mgb3V0IHRpbGluZyBjaGFuZ2VzLiAqLwotCXVuc2lnbmVkIGludCBmcmFtZWJ1ZmZlcl9yZWZl cmVuY2VzOwotCi0JLyoqIFJlY29yZCBvZiBhZGRyZXNzIGJpdCAxNyBvZiBlYWNoIHBhZ2UgYXQg bGFzdCB1bmJpbmQuICovCi0JdW5zaWduZWQgbG9uZyAqYml0XzE3OwotCi0JdW5pb24gewotCQlz dHJ1Y3QgaTkxNV9nZW1fdXNlcnB0ciB7Ci0JCQl1aW50cHRyX3QgcHRyOwotCi0JCQlzdHJ1Y3Qg aTkxNV9tbV9zdHJ1Y3QgKm1tOwotCQkJc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW11X29iamVj dDsKLQkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsKLQkJfSB1c2VycHRyOwotCi0JCXVuc2ln bmVkIGxvbmcgc2NyYXRjaDsKLQotCQl2b2lkICpndnRfaW5mbzsKLQl9OwotCi0JLyoqIGZvciBw aHlzIGFsbG9jYXRlZCBvYmplY3RzICovCi0Jc3RydWN0IGRybV9kbWFfaGFuZGxlICpwaHlzX2hh bmRsZTsKLQotCXN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgX19idWlsdGluX3Jlc3Y7Ci19Owot Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKLXRvX2ludGVsX2Jv KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKQotewotCS8qIEFzc2VydCB0aGF0IHRvX2ludGVs X2JvKE5VTEwpID09IE5VTEwgKi8KLQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QsIGJhc2UpKTsKLQotCXJldHVybiBjb250YWluZXJfb2YoZ2VtLCBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwgYmFzZSk7Ci19CisjaW5jbHVkZSAiZ2VtL2k5MTVfZ2Vt X29iamVjdF90eXBlcy5oIgogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqaTkxNV9nZW1f b2JqZWN0X2FsbG9jKHZvaWQpOwogdm9pZCBpOTE1X2dlbV9vYmplY3RfZnJlZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4