From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerome Anand Subject: [PATCH 3/7] ALSA: add shell for Intel HDMI LPE audio driver Date: Mon, 12 Dec 2016 23:40:39 +0530 Message-ID: <20161212181043.12512-4-jerome.anand@intel.com> References: <20161212181043.12512-1-jerome.anand@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161212181043.12512-1-jerome.anand@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, alsa-devel@alsa-project.org Cc: tiwai@suse.de, broonie@kernel.org, rakesh.a.ughreja@intel.com List-Id: alsa-devel@alsa-project.org T24gQmF5dHJhaWwgYW5kIENoZXJyeXRyYWlsLCBIRGF1ZGlvIG1heSBiZSBmdXNlZCBvdXQgb3Ig ZGlzYWJsZWQKYnkgdGhlIEJJT1MuIFRoaXMgZHJpdmVyIGVuYWJsZXMgYW4gYWx0ZXJuYXRlIHBh dGggdG8gdGhlIGk5MTUKZGlzcGxheSByZWdpc3RlcnMgYW5kIERNQS4KCkFsdGhvdWdoIHRoZXJl IGlzIG5vIGhhcmR3YXJlIHBhdGggYmV0d2VlbiBpOTE1IGRpc3BsYXkgYW5kIExQRS9TU1QKYXVk aW8gY2x1c3RlcnMsIHRoaXMgSERNSSBjYXBhYmlsaXR5IGlzIHJlZmVycmVkIHRvIGluIHRoZSBk b2N1bWVudGF0aW9uCmFzICJIRE1JIExQRSBBdWRpbyIgc28gd2Uga2VlcCB0aGUgbmFtZSBmb3Ig Y29uc2lzdGVuY3kuIFRoZXJlIGlzIG5vCmhhcmR3YXJlIHBhdGggb3IgY29udHJvbCBkZXBlbmRl bmNpZXMgd2l0aCB0aGUgTFBFL1NTVCBEU1AgZnVuY3Rpb25hbGl0eS4KClRoZSBoZG1pLWxwZS1h dWRpbyBkcml2ZXIgd2lsbCBiZSBwcm9iZWQgd2hlbiB0aGUgaTkxNSBkcml2ZXIgY3JlYXRlcwph IGNoaWxkIHBsYXRmb3JtIGRldmljZS4KClNpbmNlIHRoaXMgZHJpdmVyIGlzIG5laXRoZXIgU29D IG5vciBQQ0ksIGEgbmV3IHg4NiBmb2xkZXIgaXMgYWRkZWQKClNpZ25lZC1vZmYtYnk6IFBpZXJy ZS1Mb3VpcyBCb3NzYXJ0IDxwaWVycmUtbG91aXMuYm9zc2FydEBsaW51eC5pbnRlbC5jb20+ClNp Z25lZC1vZmYtYnk6IEplcm9tZSBBbmFuZCA8amVyb21lLmFuYW5kQGludGVsLmNvbT4KLS0tCiBz b3VuZC9LY29uZmlnICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBzb3VuZC9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICB8ICAgMiArLQogc291bmQveDg2L0tjb25maWcgICAgICAgICAgICAg ICAgfCAgMTYgKwogc291bmQveDg2L01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDggKwogc291 bmQveDg2L2ludGVsX2hkbWlfbHBlX2F1ZGlvLmMgfCA2MjIgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIHNvdW5kL3g4Ni9pbnRlbF9oZG1pX2xwZV9hdWRpby5oIHwgNjkyICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAx MzQxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3Vu ZC94ODYvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNvdW5kL3g4Ni9NYWtlZmlsZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNvdW5kL3g4Ni9pbnRlbF9oZG1pX2xwZV9hdWRpby5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgc291bmQveDg2L2ludGVsX2hkbWlfbHBlX2F1ZGlvLmgKCmRpZmYgLS1naXQg YS9zb3VuZC9LY29uZmlnIGIvc291bmQvS2NvbmZpZwppbmRleCA1YTI0MGUwLi5lZTJlNjlhIDEw MDY0NAotLS0gYS9zb3VuZC9LY29uZmlnCisrKyBiL3NvdW5kL0tjb25maWcKQEAgLTEwOCw2ICsx MDgsOCBAQCBzb3VyY2UgInNvdW5kL3BhcmlzYy9LY29uZmlnIgogCiBzb3VyY2UgInNvdW5kL3Nv Yy9LY29uZmlnIgogCitzb3VyY2UgInNvdW5kL3g4Ni9LY29uZmlnIgorCiBlbmRpZiAjIFNORAog CiBtZW51Y29uZmlnIFNPVU5EX1BSSU1FCmRpZmYgLS1naXQgYS9zb3VuZC9NYWtlZmlsZSBiL3Nv dW5kL01ha2VmaWxlCmluZGV4IGM0MWJkZjUuLjZkZTQ1ZDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL01h a2VmaWxlCisrKyBiL3NvdW5kL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQCBvYmotJChDT05GSUdf U09VTkQpICs9IHNvdW5kY29yZS5vCiBvYmotJChDT05GSUdfU09VTkRfUFJJTUUpICs9IG9zcy8K IG9iai0kKENPTkZJR19ETUFTT1VORCkgKz0gb3NzLwogb2JqLSQoQ09ORklHX1NORCkgKz0gY29y ZS8gaTJjLyBkcml2ZXJzLyBpc2EvIHBjaS8gcHBjLyBhcm0vIHNoLyBzeW50aC8gdXNiLyBcCi0J ZmlyZXdpcmUvIHNwYXJjLyBzcGkvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLyBzb2MvIGF0bWVsLyBo ZGEvCisJZmlyZXdpcmUvIHNwYXJjLyBzcGkvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLyBzb2MvIGF0 bWVsLyBoZGEvIHg4Ni8KIG9iai0kKENPTkZJR19TTkRfQU9BKSArPSBhb2EvCiAKICMgVGhpcyBv bmUgbXVzdCBiZSBjb21waWxhYmxlIGV2ZW4gaWYgc291bmQgaXMgY29uZmlndXJlZCBvdXQKZGlm ZiAtLWdpdCBhL3NvdW5kL3g4Ni9LY29uZmlnIGIvc291bmQveDg2L0tjb25maWcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyYWRmMwotLS0gL2Rldi9udWxsCisrKyBiL3Nv dW5kL3g4Ni9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKK21lbnVjb25maWcgU05EX1g4NgorCXRy aXN0YXRlICJYODYgc291bmQgZGV2aWNlcyIKKwktLS1oZWxwLS0tCisKKwkgIFg4NiBzb3VuZCBk ZXZpY2VzIHRoYXQgZG9uJ3QgZmFsbCB1bmRlciBTb0Mgb3IgUENJIGNhdGVnb3JpZXMKKworaWYg U05EX1g4NgorCitjb25maWcgSERNSV9MUEVfQVVESU8KKwl0cmlzdGF0ZSAiSERNSSBhdWRpbyB3 aXRob3V0IEhEYXVkaW8gb24gSW50ZWwgQXRvbSBwbGF0Zm9ybXMiCisJZGVwZW5kcyBvbiBEUk1f STkxNQorICAgICAgICBkZWZhdWx0IG4KKyAgICAgICAgaGVscAorICAgICAgICAgIENob29zZSB0 aGlzIG9wdGlvbiB0byBzdXBwb3J0IEhETUkgTFBFIEF1ZGlvIG1vZGUKKworZW5kaWYJIyBTTkRf WDg2CmRpZmYgLS1naXQgYS9zb3VuZC94ODYvTWFrZWZpbGUgYi9zb3VuZC94ODYvTWFrZWZpbGUK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiMmFlMQotLS0gL2Rldi9udWxs CisrKyBiL3NvdW5kL3g4Ni9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKK0RSSVZFUl9OQU1FIDo9 IGhkbWlfbHBlX2F1ZGlvCisKK2NjZmxhZ3MteSArPSAtSWRyaXZlcnMvZ3B1L2RybS9pOTE1CisK KyQoRFJJVkVSX05BTUUpLW9ianMgKz0gXAorCWludGVsX2hkbWlfbHBlX2F1ZGlvLm8KKworb2Jq LSQoQ09ORklHX0hETUlfTFBFX0FVRElPKSArPSAkKERSSVZFUl9OQU1FKS5vCmRpZmYgLS1naXQg YS9zb3VuZC94ODYvaW50ZWxfaGRtaV9scGVfYXVkaW8uYyBiL3NvdW5kL3g4Ni9pbnRlbF9oZG1p X2xwZV9hdWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMWFiNzIK LS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC94ODYvaW50ZWxfaGRtaV9scGVfYXVkaW8uYwpAQCAt MCwwICsxLDYyMiBAQAorLyoKKyAqICBpbnRlbF9oZG1pX2xwZV9hdWRpby5jIC0gSW50ZWwgSERN SSBMUEUgYXVkaW8gZHJpdmVyIGZvciBBdG9tIHBsYXRmb3JtcworICoKKyAqICBDb3B5cmlnaHQg KEMpIDIwMTYgSW50ZWwgQ29ycAorICogIEF1dGhvcnM6CisgKgkJSmVyb21lIEFuYW5kIDxqZXJv bWUuYW5hbmRAaW50ZWwuY29tPgorICoJCUFyYXZpbmQgU2lkZGFwcGFqaSA8YXJhdmluZHguc2lk ZGFwcGFqaUBpbnRlbC5jb20+CisgKiAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogIFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQorICogIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJImhk bWlfbHBlX2F1ZGlvOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ CisjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0 Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8 c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3Bj bV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQv Y29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxkcm0vaW50 ZWxfbHBlX2F1ZGlvLmg+CisjaW5jbHVkZSAiaW50ZWxfaGRtaV9scGVfYXVkaW8uaCIKKworLyog Z2xvYmFscyovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpncGRldjsKK2ludCBfaGRtaV9zdGF0 ZTsKK3VuaW9uIG90bV9oZG1pX2VsZF90IGhkbWlfZWxkOworCitzdHJ1Y3QgaGRtaV9scGVfYXVk aW9fY3R4IHsKKwlpbnQgaXJxOworCXZvaWQgX19pb21lbSAqbW1pb19zdGFydDsKKwloYWRfZXZl bnRfY2FsbF9iYWNrIGhhZF9ldmVudF9jYWxsYmFja3M7CisJc3RydWN0IHNuZF9pbnRlbF9oYWRf aW50ZXJmYWNlICpoYWRfaW50ZXJmYWNlOworCXZvaWQgKmhhZF9wdnRfZGF0YTsKKwlpbnQgdG1k c19jbG9ja19zcGVlZDsKKwl1bnNpZ25lZCBpbnQgaGFkX2NvbmZpZ19vZmZzZXQ7CisJaW50IGhk bWlfYXVkaW9faW50ZXJydXB0X21hc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IGhkbWlfYXVkaW9f d3E7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgaGRtaV9zZXRfZWxkKHZvaWQgKmVsZCkKK3sK KwlpbnQgc2l6ZSA9IChzaXplb2YoaGRtaV9lbGQpKSA+IEhETUlfTUFYX0VMRF9CWVRFUyA/CisJ CQkJSERNSV9NQVhfRUxEX0JZVEVTIDoKKwkJCQkoc2l6ZW9mKGhkbWlfZWxkKSk7CisKKwltZW1j cHkoKHZvaWQgKikmaGRtaV9lbGQsIGVsZCwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50 IGhkbWlfZ2V0X2VsZCh2b2lkICplbGQpCit7CisJbWVtY3B5KGVsZCwgKHZvaWQgKikmaGRtaV9l bGQsIHNpemVvZihoZG1pX2VsZCkpOworCisJeworCQlpbnQgaTsKKwkJdWludDhfdCAqZWxkX2Rh dGEgPSAodWludDhfdCAqKSZoZG1pX2VsZDsKKworCQlwcl9kZWJ1ZygiaGRtaV9nZXRfZWxkOlxu e3siKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGhkbWlfZWxkKTsgaSsrKQorCQkJcHJf ZGVidWcoIjB4JXgsICIsIGVsZF9kYXRhW2ldKTsKKworCQlwcl9kZWJ1ZygifX1cbiIpOworCX0K KwlyZXR1cm4gSEFEX1NVQ0NFU1M7Cit9CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaGRtaV9s cGVfYXVkaW9fY3R4ICpnZXRfaGRtaV9jb250ZXh0KHZvaWQpCit7CisJc3RydWN0IGhkbWlfbHBl X2F1ZGlvX2N0eCAqY3R4OworCisJY3R4ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZ3BkZXYpOwor CXJldHVybiBjdHg7Cit9CisKKy8qCisgKiByZXR1cm4gd2hldGhlciBIRE1JIGF1ZGlvIGRldmlj ZSBpcyBidXN5LgorICovCitib29sIG1pZF9oZG1pX2F1ZGlvX2lzX2J1c3kodm9pZCAqZGRldikK K3sKKwlzdHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7CisJaW50IGhkbWlfYXVkaW9fYnVz eSA9IDA7CisJc3RydWN0IGhkbWlfYXVkaW9fZXZlbnQgaGRtaV9hdWRpb19ldmVudDsKKworCXBy X2RlYnVnKCIlczogRW50ZXIiLCAgX19mdW5jX18pOworCisJY3R4ID0gcGxhdGZvcm1fZ2V0X2Ry dmRhdGEoZ3BkZXYpOworCisJaWYgKF9oZG1pX3N0YXRlID09IGhkbWlfY29ubmVjdG9yX3N0YXR1 c19kaXNjb25uZWN0ZWQpIHsKKwkJLyogSERNSSBpcyBub3QgY29ubmVjdGVkLCBhc3N1bWluZyBh dWRpbyBkZXZpY2UgaXMgaWRsZS4gKi8KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChjdHgt PmhhZF9pbnRlcmZhY2UpIHsKKwkJaGRtaV9hdWRpb19ldmVudC50eXBlID0gSEFEX0VWRU5UX1FV RVJZX0lTX0FVRElPX0JVU1k7CisJCWhkbWlfYXVkaW9fYnVzeSA9IGN0eC0+aGFkX2ludGVyZmFj ZS0+cXVlcnkoCisJCQkJY3R4LT5oYWRfcHZ0X2RhdGEsCisJCQkJaGRtaV9hdWRpb19ldmVudCk7 CisJCXJldHVybiBoZG1pX2F1ZGlvX2J1c3kgIT0gMDsKKwl9CisJcmV0dXJuIGZhbHNlOworfQor CisvKgorICogcmV0dXJuIHdoZXRoZXIgSERNSSBhdWRpbyBkZXZpY2UgaXMgc3VzcGVuZGVkLgor ICovCitib29sIG1pZF9oZG1pX2F1ZGlvX3N1c3BlbmQodm9pZCAqZGRldikKK3sKKwlzdHJ1Y3Qg aGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7CisJc3RydWN0IGhkbWlfYXVkaW9fZXZlbnQgaGRtaV9h dWRpb19ldmVudDsKKwlpbnQgcmV0ID0gMDsKKworCWN0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KGdwZGV2KTsKKworCWlmIChfaGRtaV9zdGF0ZSA9PSBoZG1pX2Nvbm5lY3Rvcl9zdGF0dXNfZGlz Y29ubmVjdGVkKSB7CisJCS8qIEhETUkgaXMgbm90IGNvbm5lY3RlZCwgYXNzdW1pbmcgYXVkaW8g ZGV2aWNlCisJCSAqIGlzIHN1c3BlbmRlZCBhbHJlYWR5LgorCQkgKi8KKwkJcmV0dXJuIHRydWU7 CisJfQorCisJcHJfZGVidWcoIiVzOiBfaGRtaV9zdGF0ZSAlZCIsICBfX2Z1bmNfXywKKwkJCV9o ZG1pX3N0YXRlKTsKKworCWlmIChjdHgtPmhhZF9pbnRlcmZhY2UpIHsKKwkJaGRtaV9hdWRpb19l dmVudC50eXBlID0gMDsKKwkJcmV0ID0gY3R4LT5oYWRfaW50ZXJmYWNlLT5zdXNwZW5kKGN0eC0+ aGFkX3B2dF9kYXRhLAorCQkJCWhkbWlfYXVkaW9fZXZlbnQpOworCQlyZXR1cm4gKHJldCA9PSAw KSA/IHRydWUgOiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgbWlkX2hkbWlf YXVkaW9fcmVzdW1lKHZvaWQgKmRkZXYpCit7CisJc3RydWN0IGhkbWlfbHBlX2F1ZGlvX2N0eCAq Y3R4OworCisJY3R4ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZ3BkZXYpOworCisJaWYgKF9oZG1p X3N0YXRlID09IGhkbWlfY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpIHsKKwkJLyogSERN SSBpcyBub3QgY29ubmVjdGVkLCB0aGVyZSBpcyBubyBuZWVkCisJCSAqIHRvIHJlc3VtZSBhdWRp byBkZXZpY2UuCisJCSAqLworCQlyZXR1cm47CisJfQorCisJcHJfZGVidWcoIiVzOiBfaGRtaV9z dGF0ZSAlZCIsICBfX2Z1bmNfXywgX2hkbWlfc3RhdGUpOworCisJaWYgKGN0eC0+aGFkX2ludGVy ZmFjZSkKKwkJY3R4LT5oYWRfaW50ZXJmYWNlLT5yZXN1bWUoY3R4LT5oYWRfcHZ0X2RhdGEpOwor fQorCit2b2lkIG1pZF9oZG1pX2F1ZGlvX3NpZ25hbF9ldmVudChlbnVtIGhhZF9ldmVudF90eXBl IGV2ZW50KQoreworCXN0cnVjdCBoZG1pX2xwZV9hdWRpb19jdHggKmN0eDsKKworCXByX2RlYnVn KCIlczogRW50ZXJcbiIsIF9fZnVuY19fKTsKKworCWN0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KGdwZGV2KTsKKworCWlmIChjdHgtPmhhZF9ldmVudF9jYWxsYmFja3MpCisJCSgqY3R4LT5oYWRf ZXZlbnRfY2FsbGJhY2tzKShldmVudCwKKwkJCWN0eC0+aGFkX3B2dF9kYXRhKTsKK30KKworLyoq CisgKiBoZG1pX2F1ZGlvX3dyaXRlOgorICogdXNlZCB0byB3cml0ZSBpbnRvIGRpc3BsYXkgY29u dHJvbGxlciBIRE1JIGF1ZGlvIHJlZ2lzdGVycy4KKyAqCisgKi8KK3N0YXRpYyBpbnQgaGRtaV9h dWRpb193cml0ZSh1aW50MzJfdCByZWcsIHVpbnQzMl90IHZhbCkKK3sKKwlzdHJ1Y3QgaGRtaV9s cGVfYXVkaW9fY3R4ICpjdHg7CisKKwljdHggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShncGRldik7 CisKKwlwcl9kZWJ1ZygiJXM6IHJlZ1sweCV4XSA9IDB4JXhcbiIsIF9fZnVuY19fLCByZWcsIHZh bCk7CisKKwlpb3dyaXRlMzIodmFsLCAoY3R4LT5tbWlvX3N0YXJ0K3JlZykpOworCisJcmV0dXJu IEhBRF9TVUNDRVNTOworfQorCisvKioKKyAqIGhkbWlfYXVkaW9fcmVhZDoKKyAqIHVzZWQgdG8g Z2V0IHRoZSByZWdpc3RlciB2YWx1ZSByZWFkIGZyb20KKyAqIGRpc3BsYXkgY29udHJvbGxlciBI RE1JIGF1ZGlvIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGludCBoZG1pX2F1ZGlvX3JlYWQodWlu dDMyX3QgcmVnLCB1aW50MzJfdCAqdmFsKQoreworCXN0cnVjdCBoZG1pX2xwZV9hdWRpb19jdHgg KmN0eDsKKworCWN0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGdwZGV2KTsKKwkqdmFsID0gaW9y ZWFkMzIoY3R4LT5tbWlvX3N0YXJ0K3JlZyk7CisJcHJfZGVidWcoIiVzOiByZWdbMHgleF0gPSAw eCV4XG4iLCBfX2Z1bmNfXywgcmVnLCAqdmFsKTsKKwlyZXR1cm4gSEFEX1NVQ0NFU1M7Cit9CisK Ky8qKgorICogaGRtaV9hdWRpb19ybXc6CisgKiB1c2VkIHRvIHVwZGF0ZSB0aGUgbWFza2VkIGJp dHMgaW4gZGlzcGxheSBjb250cm9sbGVyIEhETUkKKyAqIGF1ZGlvIHJlZ2lzdGVycy4KKyAqLwor c3RhdGljIGludCBoZG1pX2F1ZGlvX3Jtdyh1aW50MzJfdCByZWcsIHVpbnQzMl90IHZhbCwgdWlu dDMyX3QgbWFzaykKK3sKKwlzdHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7CisJdWludDMy X3QgdmFsX3RtcCA9IDA7CisKKwljdHggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShncGRldik7CisK Kwl2YWxfdG1wID0gKHZhbCAmIG1hc2spIHwKKwkJCSgoaW9yZWFkMzIoY3R4LT5tbWlvX3N0YXJ0 ICsgcmVnKSkgJiB+bWFzayk7CisKKwlpb3dyaXRlMzIodmFsX3RtcCwgKGN0eC0+bW1pb19zdGFy dCtyZWcpKTsKKwlwcl9kZWJ1ZygiJXM6IHJlZ1sweCV4XSA9IDB4JXhcbiIsIF9fZnVuY19fLCBy ZWcsIHZhbF90bXApOworCisJcmV0dXJuIEhBRF9TVUNDRVNTOworfQorCisvKioKKyAqIGhkbWlf YXVkaW9fZ2V0X2NhcHM6CisgKiB1c2VkIHRvIHJldHVybiB0aGUgSERNSSBhdWRpbyBjYXBhYmls aXRpZXMuCisgKiBlLmcuIHJlc29sdXRpb24sIGZyYW1lIHJhdGUuCisgKi8KK3N0YXRpYyBpbnQg aGRtaV9hdWRpb19nZXRfY2FwcyhlbnVtIGhhZF9jYXBzX2xpc3QgZ2V0X2VsZW1lbnQsCisJCQl2 b2lkICpjYXBhYmlsaXRpZXMpCit7CisJc3RydWN0IGhkbWlfbHBlX2F1ZGlvX2N0eCAqY3R4Owor CWludCByZXQgPSBIQURfU1VDQ0VTUzsKKworCWN0eCA9IGdldF9oZG1pX2NvbnRleHQoKTsKKwor CXByX2RlYnVnKCIlczogRW50ZXJcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoZ2V0X2VsZW1l bnQpIHsKKwljYXNlIEhBRF9HRVRfRUxEOgorCQlyZXQgPSBoZG1pX2dldF9lbGQoY2FwYWJpbGl0 aWVzKTsKKwkJYnJlYWs7CisJY2FzZSBIQURfR0VUX0RJU1BMQVlfUkFURToKKwkJLyogVG9Ebzog VmVyaWZ5IGlmIHNhbXBsaW5nIGZyZXEgbG9naWMgaXMgY29ycmVjdCAqLworCQltZW1jcHkoY2Fw YWJpbGl0aWVzLCAmKGN0eC0+dG1kc19jbG9ja19zcGVlZCksCisJCQlzaXplb2YodWludDMyX3Qp KTsKKwkJcHJfZGVidWcoIiVzOiB0bWRzX2Nsb2NrX3NwZWVkID0gMHgleFxuIiwgX19mdW5jX18s CisJCQkJY3R4LT50bWRzX2Nsb2NrX3NwZWVkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJl YWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBoZG1pX2F1ZGlvX2dldF9yZWdp c3Rlcl9iYXNlCisgKiB1c2VkIHRvIGdldCB0aGUgY3VycmVudCBoZG1pIGJhc2UgYWRkcmVzcwor ICovCitpbnQgaGRtaV9hdWRpb19nZXRfcmVnaXN0ZXJfYmFzZSh1aW50MzJfdCAqKnJlZ19iYXNl LAorCQl1aW50MzJfdCAqY29uZmlnX29mZnNldCkKK3sKKwlzdHJ1Y3QgaGRtaV9scGVfYXVkaW9f Y3R4ICpjdHg7CisKKwljdHggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShncGRldik7CisJKnJlZ19i YXNlID0gKHVpbnQzMl90ICopKGN0eC0+bW1pb19zdGFydCk7CisJKmNvbmZpZ19vZmZzZXQgPSBj dHgtPmhhZF9jb25maWdfb2Zmc2V0OworCXByX2RlYnVnKCIlczogcmVnX2Jhc2UgPSAweCVwLCBj Zmdfb2ZmID0gMHgleFxuIiwgX19mdW5jX18sCisJCQkqcmVnX2Jhc2UsICpjb25maWdfb2Zmc2V0 KTsKKwlyZXR1cm4gSEFEX1NVQ0NFU1M7Cit9CisKKy8qKgorICogaGRtaV9hdWRpb19zZXRfY2Fw czoKKyAqIHVzZWQgdG8gc2V0IHRoZSBIRE1JIGF1ZGlvIGNhcGFiaWxpdGllcy4KKyAqIGUuZy4g QXVkaW8gSU5ULgorICovCitpbnQgaGRtaV9hdWRpb19zZXRfY2FwcyhlbnVtIGhhZF9jYXBzX2xp c3Qgc2V0X2VsZW1lbnQsCisJCQl2b2lkICpjYXBhYmlsdGllcykKK3sKKwlzdHJ1Y3QgaGRtaV9s cGVfYXVkaW9fY3R4ICpjdHg7CisKKwljdHggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShncGRldik7 CisKKwlwcl9kZWJ1ZygiJXM6IGNhcF9pZCA9IDB4JXhcbiIsIF9fZnVuY19fLCBzZXRfZWxlbWVu dCk7CisKKwlzd2l0Y2ggKHNldF9lbGVtZW50KSB7CisJY2FzZSBIQURfU0VUX0VOQUJMRV9BVURJ T19JTlQ6CisJCXsKKwkJCXVpbnQzMl90IHN0YXR1c19yZWc7CisKKwkJCWhkbWlfYXVkaW9fcmVh ZChBVURfSERNSV9TVEFUVVNfdjIgKworCQkJCWN0eC0+aGFkX2NvbmZpZ19vZmZzZXQsICZzdGF0 dXNfcmVnKTsKKwkJCXN0YXR1c19yZWcgfD0KKwkJCQlIRE1JX0FVRElPX0JVRkZFUl9ET05FIHwg SERNSV9BVURJT19VTkRFUlJVTjsKKwkJCWhkbWlfYXVkaW9fd3JpdGUoQVVEX0hETUlfU1RBVFVT X3YyICsKKwkJCQljdHgtPmhhZF9jb25maWdfb2Zmc2V0LCBzdGF0dXNfcmVnKTsKKwkJCWhkbWlf YXVkaW9fcmVhZChBVURfSERNSV9TVEFUVVNfdjIgKworCQkJCWN0eC0+aGFkX2NvbmZpZ19vZmZz ZXQsICZzdGF0dXNfcmVnKTsKKworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwor CX0KKworCXJldHVybiBIQURfU1VDQ0VTUzsKK30KKworc3RhdGljIHN0cnVjdCAgaGRtaV9hdWRp b19yZWdpc3RlcnNfb3BzIGhkbWlfYXVkaW9fcmVnX29wcyA9IHsKKwkuaGRtaV9hdWRpb19nZXRf cmVnaXN0ZXJfYmFzZSA9IGhkbWlfYXVkaW9fZ2V0X3JlZ2lzdGVyX2Jhc2UsCisJLmhkbWlfYXVk aW9fcmVhZF9yZWdpc3RlciA9IGhkbWlfYXVkaW9fcmVhZCwKKwkuaGRtaV9hdWRpb193cml0ZV9y ZWdpc3RlciA9IGhkbWlfYXVkaW9fd3JpdGUsCisJLmhkbWlfYXVkaW9fcmVhZF9tb2RpZnkgPSBo ZG1pX2F1ZGlvX3JtdywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRtaV9hdWRpb19xdWVyeV9zZXRf b3BzIGhkbWlfYXVkaW9fZ2V0X3NldF9vcHMgPSB7CisJLmhkbWlfYXVkaW9fZ2V0X2NhcHMgPSBo ZG1pX2F1ZGlvX2dldF9jYXBzLAorCS5oZG1pX2F1ZGlvX3NldF9jYXBzID0gaGRtaV9hdWRpb19z ZXRfY2FwcywKK307CisKK2ludCBtaWRfaGRtaV9hdWRpb19zZXR1cCgKKwkJaGFkX2V2ZW50X2Nh bGxfYmFjayBhdWRpb19jYWxsYmFja3MsCisJCXN0cnVjdCBoZG1pX2F1ZGlvX3JlZ2lzdGVyc19v cHMgKnJlZ19vcHMsCisJCXN0cnVjdCBoZG1pX2F1ZGlvX3F1ZXJ5X3NldF9vcHMgKnF1ZXJ5X29w cykKK3sKKwlzdHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7CisKKwljdHggPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShncGRldik7CisKKwlwcl9kZWJ1ZygiJXM6IGNhbGxlZFxuIiwgIF9fZnVu Y19fKTsKKworCXJlZ19vcHMtPmhkbWlfYXVkaW9fZ2V0X3JlZ2lzdGVyX2Jhc2UgPQorCQkoaGRt aV9hdWRpb19yZWdfb3BzLmhkbWlfYXVkaW9fZ2V0X3JlZ2lzdGVyX2Jhc2UpOworCXJlZ19vcHMt PmhkbWlfYXVkaW9fcmVhZF9yZWdpc3RlciA9CisJCShoZG1pX2F1ZGlvX3JlZ19vcHMuaGRtaV9h dWRpb19yZWFkX3JlZ2lzdGVyKTsKKwlyZWdfb3BzLT5oZG1pX2F1ZGlvX3dyaXRlX3JlZ2lzdGVy ID0KKwkJKGhkbWlfYXVkaW9fcmVnX29wcy5oZG1pX2F1ZGlvX3dyaXRlX3JlZ2lzdGVyKTsKKwly ZWdfb3BzLT5oZG1pX2F1ZGlvX3JlYWRfbW9kaWZ5ID0KKwkJKGhkbWlfYXVkaW9fcmVnX29wcy5o ZG1pX2F1ZGlvX3JlYWRfbW9kaWZ5KTsKKwlxdWVyeV9vcHMtPmhkbWlfYXVkaW9fZ2V0X2NhcHMg PQorCQloZG1pX2F1ZGlvX2dldF9zZXRfb3BzLmhkbWlfYXVkaW9fZ2V0X2NhcHM7CisJcXVlcnlf b3BzLT5oZG1pX2F1ZGlvX3NldF9jYXBzID0KKwkJaGRtaV9hdWRpb19nZXRfc2V0X29wcy5oZG1p X2F1ZGlvX3NldF9jYXBzOworCisJY3R4LT5oYWRfZXZlbnRfY2FsbGJhY2tzID0gYXVkaW9fY2Fs bGJhY2tzOworCisJcmV0dXJuIEhBRF9TVUNDRVNTOworfQorCit2b2lkIF9oYWRfd3Eoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQoreworCW1pZF9oZG1pX2F1ZGlvX3NpZ25hbF9ldmVudChIQURf RVZFTlRfSE9UX1BMVUcpOworfQorCitpbnQgbWlkX2hkbWlfYXVkaW9fcmVnaXN0ZXIoc3RydWN0 IHNuZF9pbnRlbF9oYWRfaW50ZXJmYWNlICpkcml2ZXIsCisJCQkJdm9pZCAqaGFkX2RhdGEpCit7 CisJc3RydWN0IGhkbWlfbHBlX2F1ZGlvX2N0eCAqY3R4OworCisJY3R4ID0gcGxhdGZvcm1fZ2V0 X2RydmRhdGEoZ3BkZXYpOworCisJcHJfZGVidWcoIiVzOiBjYWxsZWRcbiIsIF9fZnVuY19fKTsK KworCWN0eC0+aGFkX3B2dF9kYXRhID0gaGFkX2RhdGE7CisJY3R4LT5oYWRfaW50ZXJmYWNlID0g ZHJpdmVyOworCisJLyogVGhlIEF1ZGlvIGRyaXZlciBpcyBsb2FkaW5nIG5vdyBhbmQgd2UgbmVl ZCB0byBub3RpZnkKKwkgKiBpdCBpZiB0aGVyZSBpcyBhbiBIRE1JIGRldmljZSBhdHRhY2hlZAor CSAqLworCUlOSVRfV09SSygmY3R4LT5oZG1pX2F1ZGlvX3dxLCBfaGFkX3dxKTsKKwlwcl9kZWJ1 ZygiJXM6IFNjaGVkdWxpbmcgSERNSSBhdWRpbyB3b3JrIHF1ZXVlXG4iLCBfX2Z1bmNfXyk7CisJ c2NoZWR1bGVfd29yaygmY3R4LT5oZG1pX2F1ZGlvX3dxKTsKKworCXJldHVybiBIQURfU1VDQ0VT UzsKK30KKworc3RhdGljIGlycXJldHVybl90IGRpc3BsYXlfcGlwZV9pbnRlcnJ1cHRfaGFuZGxl cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdTMyIGF1ZGlvX3N0YXQsIGF1ZGlvX3JlZzsK KworCXN0cnVjdCBoZG1pX2xwZV9hdWRpb19jdHggKmN0eDsKKworCXByX2RlYnVnKCIlczogRW50 ZXJcbiIsIF9fZnVuY19fKTsKKworCWN0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGdwZGV2KTsK KworCWF1ZGlvX3JlZyA9IGN0eC0+aGFkX2NvbmZpZ19vZmZzZXQgKyBBVURfSERNSV9TVEFUVVNf djI7CisJaGRtaV9hdWRpb19yZWFkKGF1ZGlvX3JlZywgJmF1ZGlvX3N0YXQpOworCisJaWYgKGF1 ZGlvX3N0YXQgJiBIRE1JX0FVRElPX1VOREVSUlVOKSB7CisJCWhkbWlfYXVkaW9fd3JpdGUoYXVk aW9fcmVnLCBIRE1JX0FVRElPX1VOREVSUlVOKTsKKwkJbWlkX2hkbWlfYXVkaW9fc2lnbmFsX2V2 ZW50KAorCQkJCUhBRF9FVkVOVF9BVURJT19CVUZGRVJfVU5ERVJSVU4pOworCX0KKworCWlmIChh dWRpb19zdGF0ICYgSERNSV9BVURJT19CVUZGRVJfRE9ORSkgeworCQloZG1pX2F1ZGlvX3dyaXRl KGF1ZGlvX3JlZywgSERNSV9BVURJT19CVUZGRVJfRE9ORSk7CisJCW1pZF9oZG1pX2F1ZGlvX3Np Z25hbF9ldmVudCgKKwkJCQlIQURfRVZFTlRfQVVESU9fQlVGRkVSX0RPTkUpOworCX0KKworCXJl dHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5X2F1ZGlvX2xwZSh2b2lk ICphdWRpb19wdHIpCit7CisJc3RydWN0IGhkbWlfbHBlX2F1ZGlvX2N0eCAqY3R4ID0gZ2V0X2hk bWlfY29udGV4dCgpOworCXN0cnVjdCBpbnRlbF9oZG1pX2xwZV9hdWRpb19wZGF0YSAqcGRhdGEg PSBncGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGludGVsX2hkbWlfbHBlX2F1ZGlv X2VsZCAqZWxkID0gYXVkaW9fcHRyOworCisJaWYgKHBkYXRhLT5oZG1pX2Nvbm5lY3RlZCAhPSB0 cnVlKSB7CisKKwkJcHJfZGVidWcoIiVzOiBFdmVudDogSEFEX05PVElGWV9IT1RfVU5QTFVHXG4i LAorCQkJX19mdW5jX18pOworCisJCWlmIChfaGRtaV9zdGF0ZSA9PSBoZG1pX2Nvbm5lY3Rvcl9z dGF0dXNfY29ubmVjdGVkKSB7CisKKwkJCV9oZG1pX3N0YXRlID0KKwkJCQloZG1pX2Nvbm5lY3Rv cl9zdGF0dXNfZGlzY29ubmVjdGVkOworCisJCQltaWRfaGRtaV9hdWRpb19zaWduYWxfZXZlbnQo CisJCQkJSEFEX0VWRU5UX0hPVF9VTlBMVUcpOworCQl9IGVsc2UKKwkJCXByX2RlYnVnKCIlczog QWxyZWFkeSBVbnBsdWdnZWQhXG4iLCBfX2Z1bmNfXyk7CisKKwl9IGVsc2UgaWYgKGVsZCAhPSBO VUxMKSB7CisKKwkJaGRtaV9zZXRfZWxkKGVsZC0+ZWxkX2RhdGEpOworCisJCW1pZF9oZG1pX2F1 ZGlvX3NpZ25hbF9ldmVudChIQURfRVZFTlRfSE9UX1BMVUcpOworCisJCV9oZG1pX3N0YXRlID0g aGRtaV9jb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKworCQlwcl9kZWJ1ZygiJXM6IEhBRF9O T1RJRllfRUxEIDogcG9ydCA9ICVkLCB0bWRzID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgZWxkLT5w b3J0X2lkLAorCQkJcGRhdGEtPnRtZHNfY2xvY2tfc3BlZWQpOworCisJCWlmIChwZGF0YS0+dG1k c19jbG9ja19zcGVlZCkgeworCQkJY3R4LT50bWRzX2Nsb2NrX3NwZWVkID0gcGRhdGEtPnRtZHNf Y2xvY2tfc3BlZWQ7CisJCQltaWRfaGRtaV9hdWRpb19zaWduYWxfZXZlbnQoSEFEX0VWRU5UX01P REVfQ0hBTkdJTkcpOworCQl9CisJfSBlbHNlCisJCXByX2RlYnVnKCIlczogRXZlbnQ6IE5VTEwg RURJRCEhXG4iLCBfX2Z1bmNfXyk7Cit9CisKKy8qKgorICogaGRtaV9scGVfYXVkaW9fcHJvYmUg LSBzdGFydCBicmlkZ2Ugd2l0aCBpOTE1CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg d2hlbiB0aGUgaTkxNSBkcml2ZXIgY3JlYXRlcyB0aGUgaGRtaS1scGUtYXVkaW8KKyAqIHBsYXRm b3JtIGRldmljZS4gQ2FyZCBjcmVhdGlvbiBpcyBkZWZlcnJlZCB1bnRpbCBhIGhvdCBwbHVnIGV2 ZW50IGlzCisgKiByZWNlaXZlZAorICovCitzdGF0aWMgaW50IGhkbWlfbHBlX2F1ZGlvX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGhkbWlfbHBlX2F1ZGlv X2N0eCAqY3R4OworCXN0cnVjdCBpbnRlbF9oZG1pX2xwZV9hdWRpb19wZGF0YSAqcGRhdGE7CisJ aW50IGlycTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc19tbWlvOworCXZvaWQgX19pb21lbSAqbW1p b19zdGFydDsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdfaXJxOworCWNvbnN0 IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNoZXJyeXZpZXdfaWRzW10gPSB7CisJCXtQQ0lfREVWSUNF KDB4ODA4NiwgMHgyMmIwKX0sCisJCXtQQ0lfREVWSUNFKDB4ODA4NiwgMHgyMmIxKX0sCisJCXtQ Q0lfREVWSUNFKDB4ODA4NiwgMHgyMmIyKX0sCisJCXtQQ0lfREVWSUNFKDB4ODA4NiwgMHgyMmIz KX0sCisJCXt9CisJfTsKKworCXByX2RlYnVnKCJFbnRlciAlc1xuIiwgX19mdW5jX18pOworCisJ LypUQkQ6cmVtb3ZlIGdsb2JhbHMqLworCWdwZGV2ID0gcGRldjsKKwlfaGRtaV9zdGF0ZSA9IGhk bWlfY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisKKwkvKiBnZXQgcmVzb3VyY2VzICov CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlw cl9lcnIoIkNvdWxkIG5vdCBnZXQgaXJxIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7 CisJfQorCisJcmVzX21taW8gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJD RV9NRU0sIDApOworCWlmICghcmVzX21taW8pIHsKKwkJcHJfZXJyKCJDb3VsZCBub3QgZ2V0IElP X01FTSByZXNvdXJjZXNcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXByX2RlYnVnKCIl czogbW1pb19zdGFydCA9IDB4JXgsIG1taW9fZW5kID0gMHgleFxuIiwgX19mdW5jX18sCisJCSh1 bnNpZ25lZCBpbnQpcmVzX21taW8tPnN0YXJ0LCAodW5zaWduZWQgaW50KXJlc19tbWlvLT5lbmQp OworCisJbW1pb19zdGFydCA9IGlvcmVtYXBfbm9jYWNoZShyZXNfbW1pby0+c3RhcnQsCisJCQkJ KHNpemVfdCkoKHJlc19tbWlvLT5lbmQgLSByZXNfbW1pby0+c3RhcnQpCisJCQkJCQkrIDEpKTsK KwlpZiAoIW1taW9fc3RhcnQpIHsKKwkJcHJfZXJyKCJDb3VsZCBub3QgZ2V0IGlvcmVtYXBcbiIp OworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwkvKiBzZXR1cCBpbnRlcnJ1cHQgaGFuZGxlciAq LworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgZGlzcGxheV9waXBlX2ludGVycnVwdF9oYW5kbGVy LAorCQkJMCwgLyogRklYTUU6IGlzIElSUUZfU0hBUkVEIG5lZWRlZCA/ICovCisJCQlwZGV2LT5u YW1lLAorCQkJTlVMTCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJfZXJyKCJyZXF1ZXN0X2lycSBm YWlsZWRcbiIpOworCQlpb3VubWFwKG1taW9fc3RhcnQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9 CisKKwkvKiBhbGxvYyBhbmQgc2F2ZSBjb250ZXh0ICovCisJY3R4ID0ga3phbGxvYyhzaXplb2Yo KmN0eCksIEdGUF9LRVJORUwpOworCWlmIChjdHggPT0gTlVMTCkgeworCQlmcmVlX2lycShpcnEs IE5VTEwpOworCQlpb3VubWFwKG1taW9fc3RhcnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisK KwljdHgtPmlycSA9IGlycTsKKwlwcl9kZWJ1ZygiaGRtaSBscGUgYXVkaW86IGlycSBudW0gPSAl ZFxuIiwgaXJxKTsKKwljdHgtPm1taW9fc3RhcnQgPSBtbWlvX3N0YXJ0OworCWN0eC0+dG1kc19j bG9ja19zcGVlZCA9IERJU19TQU1QTEVfUkFURV8xNDhfNTsKKworCWlmIChwY2lfZGV2X3ByZXNl bnQoY2hlcnJ5dmlld19pZHMpKSB7CisJCXByX2RlYnVnKCIlczogQ2hlcnJ5dHJhaWwgTFBFIC0g RGV0ZWN0ZWRcbiIsIF9fZnVuY19fKTsKKwkJY3R4LT5oYWRfY29uZmlnX29mZnNldCA9IEFVRElP X0hETUlfQ09ORklHX0M7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoIiVzOiBCYXl0cmFpbCBMUEUg LSBBc3N1bWVcbiIsIF9fZnVuY19fKTsKKwkJY3R4LT5oYWRfY29uZmlnX29mZnNldCA9IEFVRElP X0hETUlfQ09ORklHX0E7CisJfQorCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsK KworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCXByX2VycigiJXM6IHF1aXQ6IHBkYXRhIG5vdCBh bGxvY2F0ZWQgYnkgaTkxNSEhXG4iLCBfX2Z1bmNfXyk7CisJCWtmcmVlKGN0eCk7CisJCWZyZWVf aXJxKGlycSwgTlVMTCk7CisJCWlvdW5tYXAobW1pb19zdGFydCk7CisJCXJldHVybiAtRU5PTUVN OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGN0eCk7CisKKwlwcl9kZWJ1Zygi aGRtaSBscGUgYXVkaW86IHNldHRpbmcgcGluIGVsZCBub3RpZnkgY2FsbGJhY2tcbiIpOworCisJ c3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5scGVfYXVkaW9fc2xvY2ssIGZsYWdfaXJxKTsKKwlw ZGF0YS0+bm90aWZ5X2F1ZGlvX2xwZSA9IG5vdGlmeV9hdWRpb19scGU7CisKKwlpZiAocGRhdGEt Pm5vdGlmeV9wZW5kaW5nKSB7CisKKwkJcHJfZGVidWcoIiVzOiBoYW5kbGUgcGVuZGluZyBub3Rp ZmljYXRpb25cbiIsIF9fZnVuY19fKTsKKwkJbm90aWZ5X2F1ZGlvX2xwZSgmcGRhdGEtPmVsZCk7 CisJCXBkYXRhLT5ub3RpZnlfcGVuZGluZyA9IGZhbHNlOworCX0KKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZwZGF0YS0+bHBlX2F1ZGlvX3Nsb2NrLCBmbGFnX2lycSk7CisKKwlyZXR1cm4gcmV0 OworfQorCisvKioKKyAqIGhkbWlfbHBlX2F1ZGlvX3JlbW92ZSAtIHN0b3AgYnJpZGdlIHdpdGgg aTkxNQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHBsYXRmb3JtIGRl dmljZSBpcyBkZXN0cm95ZWQuIFRoZSBzb3VuZAorICogY2FyZCBzaG91bGQgaGF2ZSBiZWVuIHJl bW92ZWQgb24gaG90IHBsdWcgZXZlbnQuCisgKi8KK3N0YXRpYyBpbnQgaGRtaV9scGVfYXVkaW9f cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGhkbWlfbHBl X2F1ZGlvX2N0eCAqY3R4OworCisJcHJfZGVidWcoIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CisK KwkvKiBnZXQgY29udGV4dCwgcmVsZWFzZSByZXNvdXJjZXMgKi8KKwljdHggPSBwbGF0Zm9ybV9n ZXRfZHJ2ZGF0YShwZGV2KTsKKwlpb3VubWFwKGN0eC0+bW1pb19zdGFydCk7CisJZnJlZV9pcnEo Y3R4LT5pcnEsIE5VTEwpOworCWtmcmVlKGN0eCk7CisJcmV0dXJuIEhBRF9TVUNDRVNTOworfQor CitzdGF0aWMgaW50IGhkbWlfbHBlX2F1ZGlvX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcHRfZGV2LAorCQkJCXBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlwcl9kZWJ1ZygiRW50ZXIg JXNcbiIsIF9fZnVuY19fKTsKKwltaWRfaGRtaV9hdWRpb19zdXNwZW5kKE5VTEwpOworCXJldHVy biBIQURfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBoZG1pX2xwZV9hdWRpb19yZXN1bWUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcHRfZGV2KQoreworCXByX2RlYnVnKCJFbnRlciAlc1xuIiwg X19mdW5jX18pOworCW1pZF9oZG1pX2F1ZGlvX3Jlc3VtZShOVUxMKTsKKwlyZXR1cm4gSEFEX1NV Q0NFU1M7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhkbWlfbHBlX2F1ZGlv X2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUgID0gImhkbWktbHBlLWF1ZGlvIiwK Kwl9LAorCS5wcm9iZSAgICAgICAgICA9IGhkbWlfbHBlX2F1ZGlvX3Byb2JlLAorCS5yZW1vdmUJ CT0gaGRtaV9scGVfYXVkaW9fcmVtb3ZlLAorCS5zdXNwZW5kCT0gaGRtaV9scGVfYXVkaW9fc3Vz cGVuZCwKKwkucmVzdW1lCQk9IGhkbWlfbHBlX2F1ZGlvX3Jlc3VtZQorfTsKKworbW9kdWxlX3Bs YXRmb3JtX2RyaXZlcihoZG1pX2xwZV9hdWRpb19kcml2ZXIpOworTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpoZG1pX2xwZV9hdWRpbyIpOwpkaWZmIC0t Z2l0IGEvc291bmQveDg2L2ludGVsX2hkbWlfbHBlX2F1ZGlvLmggYi9zb3VuZC94ODYvaW50ZWxf aGRtaV9scGVfYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGI5 NGYwYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3g4Ni9pbnRlbF9oZG1pX2xwZV9hdWRpby5o CkBAIC0wLDAgKzEsNjkyIEBACisvKgorICogICBpbnRlbF9oZG1pX2xwZV9hdWRpby5oIC0gSW50 ZWwgSERNSSBMUEUgYXVkaW8gZHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAxNiBJbnRl bCBDb3JwCisgKiAgQXV0aG9yczoJU2FpbGFqYSBCYW5kYXJ1cGFsbGkgPHNhaWxhamEuYmFuZGFy dXBhbGxpQGludGVsLmNvbT4KKyAqCQlSYW1lc2ggQmFidSBLIFYgPHJhbWVzaC5iYWJ1QGludGVs LmNvbT4KKyAqCQlWYWliaGF2IEFnYXJ3YWwgPHZhaWJoYXYuYWdhcndhbEBpbnRlbC5jb20+Cisg KgkJSmVyb21lIEFuYW5kIDxqZXJvbWUuYW5hbmRAaW50ZWwuY29tPgorICoJCUFyYXZpbmQgU2lk ZGFwcGFqaSA8YXJhdmluZHguc2lkZGFwcGFqaUBpbnRlbC5jb20+CisgKiAgfn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4K KyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dAorICogIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqLworI2lmbmRlZiBfX0lOVEVM X0hETUlfTFBFX0FVRElPX0gKKyNkZWZpbmUgX19JTlRFTF9IRE1JX0xQRV9BVURJT19ICisKKyNp bmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNs dWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2lu Y2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2lu Y2x1ZGUgPHNvdW5kL3BjbS5oPgorCisjZGVmaW5lIEhNRElfTFBFX0FVRElPX0RSSVZFUl9OQU1F CQkiaW50ZWwtaGRtaS1scGUtYXVkaW8iCisjZGVmaW5lIEhBRF9EUklWRVJfVkVSU0lPTgkiMC4w MS4wMDMiCisjZGVmaW5lIEhBRF9NQVhfREVWSUNFUwkJMQorI2RlZmluZSBIQURfTUlOX0NIQU5O RUwJCTIKKyNkZWZpbmUgSEFEX01BWF9DSEFOTkVMCQk4CisjZGVmaW5lIEhBRF9OVU1fT0ZfUklO R19CVUZTCTQKKworLyogSERNSSBBdWRpbyBMUEUgRXJyb3IgQ29kZXMgKi8KKyNkZWZpbmUgSEFE X1NVQ0NFU1MJCTAKKyNkZWZpbmUgSEFEX0ZBSUwJCTEKKworLyogQXNzdW1lIDE5MktIeiwgOGNo YW5uZWwsIDI1bXNlYyBwZXJpb2QgKi8KKyNkZWZpbmUgSEFEX01BWF9CVUZGRVIJCSg2MDAqMTAy NCkKKyNkZWZpbmUgSEFEX01JTl9CVUZGRVIJCSgzMioxMDI0KQorI2RlZmluZSBIQURfTUFYX1BF UklPRFMJCTQKKyNkZWZpbmUgSEFEX01JTl9QRVJJT0RTCQk0CisjZGVmaW5lIEhBRF9NQVhfUEVS SU9EX0JZVEVTCShIQURfTUFYX0JVRkZFUi9IQURfTUlOX1BFUklPRFMpCisjZGVmaW5lIEhBRF9N SU5fUEVSSU9EX0JZVEVTCTI1NgorI2RlZmluZSBIQURfRklGT19TSVpFCQkwIC8qIGZpZm8gbm90 IGJlaW5nIHVzZWQgKi8KKyNkZWZpbmUgTUFYX1NQRUFLRVJTCQk4CisvKiBUT0RPOiBBZGQgb3du IHRsdiB3aGVuIGNoYW5uZWwgbWFwIGlzIHBvcnRlZCBmb3IgdXNlciBzcGFjZSAqLworI2RlZmlu ZSBVU0VfQUxTQV9ERUZBVUxUX1RMVgorCisjZGVmaW5lIEFVRF9TQU1QTEVfUkFURV8zMgkzMjAw MAorI2RlZmluZSBBVURfU0FNUExFX1JBVEVfNDRfMQk0NDEwMAorI2RlZmluZSBBVURfU0FNUExF X1JBVEVfNDgJNDgwMDAKKyNkZWZpbmUgQVVEX1NBTVBMRV9SQVRFXzg4XzIJODgyMDAKKyNkZWZp bmUgQVVEX1NBTVBMRV9SQVRFXzk2CTk2MDAwCisjZGVmaW5lIEFVRF9TQU1QTEVfUkFURV8xNzZf NAkxNzY0MDAKKyNkZWZpbmUgQVVEX1NBTVBMRV9SQVRFXzE5MgkxOTIwMDAKKworI2RlZmluZSBI QURfTUlOX1JBVEUJCUFVRF9TQU1QTEVfUkFURV8zMgorI2RlZmluZSBIQURfTUFYX1JBVEUJCUFV RF9TQU1QTEVfUkFURV8xOTIKKworI2RlZmluZSBESVNfU0FNUExFX1JBVEVfMjVfMgkyNTIwMAor I2RlZmluZSBESVNfU0FNUExFX1JBVEVfMjcJMjcwMDAKKyNkZWZpbmUgRElTX1NBTVBMRV9SQVRF XzU0CTU0MDAwCisjZGVmaW5lIERJU19TQU1QTEVfUkFURV83NF8yNQk3NDI1MAorI2RlZmluZSBE SVNfU0FNUExFX1JBVEVfMTQ4XzUJMTQ4NTAwCisjZGVmaW5lIEhBRF9SRUdfV0lEVEgJCTB4MDgK KyNkZWZpbmUgSEFEX01BWF9IV19CVUZTCQkweDA0CisjZGVmaW5lIEhBRF9NQVhfRElQX1dPUkRT CQkxNgorI2RlZmluZSBJTlRFTF9IQUQJCSJJbnRlbEhkbWlMcGVBdWRpbyIKKworLyogX0FVRF9D T05GSUcgcmVnaXN0ZXIgTUFTSyAqLworI2RlZmluZSBBVURfQ09ORklHX01BU0tfVU5ERVJSVU4J MHhDMDAwMDAwMAorI2RlZmluZSBBVURfQ09ORklHX01BU0tfU1JEQkcJCTB4MDAwMDAwMDIKKyNk ZWZpbmUgQVVEX0NPTkZJR19NQVNLX0ZVTkNSU1QJCTB4MDAwMDAwMDEKKworI2RlZmluZSBNQVhf Q05UCQkJMHhGRgorI2RlZmluZSBIQURfU1VTUEVORF9ERUxBWQkxMDAwCisKKyNkZWZpbmUgT1RN X0hETUlfRUxEX1NJWkUgMTI4CisKK3VuaW9uIG90bV9oZG1pX2VsZF90IHsKKwl1aW50OF90IGVs ZF9kYXRhW09UTV9IRE1JX0VMRF9TSVpFXTsKKwkjcHJhZ21hIHBhY2soMSkKKwlzdHJ1Y3Qgewor CQkvKiBCeXRlWzBdID0gRUxEIFZlcnNpb24gTnVtYmVyICovCisJCXVuaW9uIHsKKwkJCXVpbnQ4 X3QgICBieXRlMDsKKwkJCXN0cnVjdCB7CisJCQkJdWludDhfdCByZXNlcnZlZDozOyAvKiBSZXNl cmYgKi8KKwkJCQl1aW50OF90IGVsZF92ZXI6NTsgLyogRUxEIFZlcnNpb24gTnVtYmVyICovCisJ CQkJLyogMDAwMDBiIC0gcmVzZXJ2ZWQKKwkJCQkgKiAwMDAwMWIgLSBmaXJzdCByZXYsIG9ic29s ZXRlZAorCQkJCSAqIDAwMDEwYiAtIHZlcnNpb24gMiwgc3VwcG9ydGluZyBDRUEgdmVyc2lvbgor CQkJCSAqCQkJODYxRCBvciBiZWxvdworCQkJCSAqIDAwMDExYjoxMTExMWIgLSByZXNlcnZlZAor CQkJCSAqIGZvciBmdXR1cmUKKwkJCQkgKi8KKwkJCX07CisJCX07CisKKwkJLyogQnl0ZVsxXSA9 IFZlbmRvciBWZXJzaW9uIEZpZWxkICovCisJCXVuaW9uIHsKKwkJCXVpbnQ4X3QgdmVuZG9yX3Zl cnNpb247CisJCQlzdHJ1Y3QgeworCQkJCXVpbnQ4X3QgcmVzZXJ2ZWQxOjM7CisJCQkJdWludDhf dCB2ZWxkX3Zlcjo1OyAvKiBWZXJzaW9uIG51bWJlciBvZiB0aGUgRUxECisJCQkJCQkgICAgICog ZXh0ZW5zaW9uLiBUaGlzIHZhbHVlIGlzCisJCQkJCQkgICAgICogcHJvdmlzaW9uZWQgYW5kIHVu aXF1ZSB0bworCQkJCQkJICAgICAqIGVhY2ggdmVuZG9yLgorCQkJCQkJICAgICAqLworCQkJfTsK KwkJfTsKKworCQkvKiBCeXRlWzJdID0gQmFzZWxpbmUgTGVuZ3RoIGZpZWxkICovCisJCXVpbnQ4 X3QgYmFzZWxpbmVfZWxkX2xlbmd0aDsgLyogTGVuZ3RoIG9mIHRoZSBCYXNlbGluZSBzdHJ1Y3R1 cmUKKwkJCQkJICAgICAgKglkaXZpZGVkIGJ5IEZvdXIuCisJCQkJCSAgICAgICovCisKKwkJLyog Qnl0ZSBbM10gPSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworCQl1aW50OF90IGJ5dGUzOwor CisJCS8qIFN0YXJ0aW5nIG9mIHRoZSBCYXNlTGluZSBFRUxEIHN0cnVjdHVyZQorCQkgKiBCeXRl WzRdID0gTW9uaXRvciBOYW1lIExlbmd0aAorCQkgKi8KKwkJdW5pb24geworCQkJdWludDhfdCBi eXRlNDsKKwkJCXN0cnVjdCB7CisJCQkJdWludDhfdCBtbmw6NTsKKwkJCQl1aW50OF90IGNlYV9l ZGlkX3Jldl9pZDozOworCQkJfTsKKwkJfTsKKworCQkvKiBCeXRlWzVdID0gQ2FwYWJpbGl0aWVz ICovCisJCXVuaW9uIHsKKwkJCXVpbnQ4X3QgY2FwYWJpbGl0aWVzOworCQkJc3RydWN0IHsKKwkJ CQl1aW50OF90IGhkY3A6MTsgLyogSERDUCBzdXBwb3J0ICovCisJCQkJdWludDhfdCBhaV9zdXBw b3J0OjE7ICAgLyogQUkgc3VwcG9ydCAqLworCQkJCXVpbnQ4X3QgY29ubmVjdGlvbl90eXBlOjI7 IC8qIENvbm5lY3Rpb24gdHlwZQorCQkJCQkJCSAgICAqIDAwIC0gSERNSQorCQkJCQkJCSAgICAq IDAxIC0gRFAKKwkJCQkJCQkgICAgKiAxMCAtMTEgIFJlc2VydmVkCisJCQkJCQkJICAgICogZm9y IGZ1dHVyZQorCQkJCQkJCSAgICAqIGNvbm5lY3Rpb24gdHlwZXMKKwkJCQkJCQkgICAgKi8KKwkJ CQl1aW50OF90IHNhZGM6NDsgLyogSW5kaWNhdGVzIG51bWJlciBvZiAzIGJ5dGVzCisJCQkJCQkg KiBTaG9ydCBBdWRpbyBEZXNjcmlwdG9ycy4KKwkJCQkJCSAqLworCQkJfTsKKwkJfTsKKworCQkv KiBCeXRlWzZdID0gQXVkaW8gU3luY2ggRGVsYXkgKi8KKwkJdWludDhfdCBhdWRpb19zeW5jaF9k ZWxheTsgLyogQW1vdW50IG9mIHRpbWUgcmVwb3J0ZWQgYnkgdGhlCisJCQkJCSAgICAqIHNpbmsg dGhhdCB0aGUgdmlkZW8gdHJhaWxzIGF1ZGlvCisJCQkJCSAgICAqIGluIG1pbGxpc2Vjb25kcy4K KwkJCQkJICAgICovCisKKwkJLyogQnl0ZVs3XSA9IFNwZWFrZXIgQWxsb2NhdGlvbiBCbG9jayAq LworCQl1bmlvbiB7CisJCQl1aW50OF90IHNwZWFrZXJfYWxsb2NhdGlvbl9ibG9jazsKKwkJCXN0 cnVjdCB7CisJCQkJdWludDhfdCBmbHI6MTsgLypGcm9udCBMZWZ0IGFuZCBSaWdodCBjaGFubmVs cyovCisJCQkJdWludDhfdCBsZmU6MTsgLypMb3cgRnJlcXVlbmN5IEVmZmVjdCBjaGFubmVsKi8K KwkJCQl1aW50OF90IGZjOjE7ICAvKkNlbnRlciB0cmFuc21pc3Npb24gY2hhbm5lbCovCisJCQkJ dWludDhfdCBybHI6MTsgLypSZWFyIExlZnQgYW5kIFJpZ2h0IGNoYW5uZWxzKi8KKwkJCQl1aW50 OF90IHJjOjE7IC8qUmVhciBDZW50ZXIgY2hhbm5lbCovCisJCQkJdWludDhfdCBmbHJjOjE7IC8q RnJvbnQgbGVmdCBhbmQgUmlnaHQgb2YgQ2VudGVyCisJCQkJCQkgKnRyYW5zbWlzc2lvbiBjaGFu bmVscworCQkJCQkJICovCisJCQkJdWludDhfdCBybHJjOjE7IC8qUmVhciBsZWZ0IGFuZCBSaWdo dCBvZiBDZW50ZXIKKwkJCQkJCSAqdHJhbnNtaXNzaW9uIGNoYW5uZWxzCisJCQkJCQkgKi8KKwkJ CQl1aW50OF90IHJlc2VydmVkMzoxOyAvKiBSZXNlcnZlZCAqLworCQkJfTsKKwkJfTsKKworCQkv KiBCeXRlWzggLSAxNV0gLSA4IEJ5dGUgcG9ydCBpZGVudGlmaWNhdGlvbiB2YWx1ZSAqLworCQl1 aW50OF90IHBvcnRfaWRfdmFsdWVbOF07CisKKwkJLyogQnl0ZVsxNiAtIDE3XSAtIDIgQnl0ZSBN YW51ZmFjdHVyZXIgSUQgKi8KKwkJdWludDhfdCBtYW51ZmFjdHVyZXJfaWRbMl07CisKKwkJLyog Qnl0ZVsxOCAtIDE5XSAtIDIgQnl0ZSBQcm9kdWN0IElEICovCisJCXVpbnQ4X3QgcHJvZHVjdF9p ZFsyXTsKKworCQkvKiBCeXRlIFsyMC04M10gLSA2NCBCeXRlcyBvZiBCYXNlTGluZSBEYXRhICov CisJCXVpbnQ4X3QgbW5fc2FuZF9zYWRzWzY0XTsgLyogVGhpcyB3aWxsIGluY2x1ZGUKKwkJCQkJ ICAgKiAtIEFTQ0lJIHN0cmluZyBvZiBNb25pdG9yIG5hbWUKKwkJCQkJICAgKiAtIExpc3Qgb2Yg MyBieXRlIFNBRHMKKwkJCQkJICAgKiAtIFplcm8gcGFkZGluZworCQkJCQkgICAqLworCisJCS8q IFZlbmRvciBFTEQgQmxvY2sgc2hvdWxkIGNvbnRpbnVlIGhlcmUhCisJCSAqIE5vIFZlbmRvciBF TEQgYmxvY2sgZGVmaW5lZCBhcyBvZiBub3cuCisJCSAqLworCX07CisJI3ByYWdtYSBwYWNrKCkK K307CisKKy8qKgorICogZW51bSBoYWRfc3RhdHVzIC0gQXVkaW8gc3RyZWFtIHN0YXRlcworICoK KyAqIEBTVFJFQU1fSU5JVDogU3RyZWFtIGluaXRpYWxpemVkCisgKiBAU1RSRUFNX1JVTk5JTkc6 IFN0cmVhbSBydW5uaW5nCisgKiBAU1RSRUFNX1BBVVNFRDogU3RyZWFtIHBhdXNlZAorICogQFNU UkVBTV9EUk9QUEVEOiBTdHJlYW0gZHJvcHBlZAorICovCitlbnVtIGhhZF9zdHJlYW1fc3RhdHVz IHsKKwlTVFJFQU1fSU5JVCA9IDAsCisJU1RSRUFNX1JVTk5JTkcgPSAxLAorCVNUUkVBTV9QQVVT RUQgPSAyLAorCVNUUkVBTV9EUk9QUEVEID0gMworfTsKKworLyoqCisgKiBlbnVtIGhhZF9zdGF0 dXNfc3RyZWFtIC0gSEFEIHN0cmVhbSBzdGF0ZXMKKyAqLworZW51bSBoYWRfc3RhdHVzX3N0cmVh bSB7CisJSEFEX0lOSVQgPSAwLAorCUhBRF9SVU5OSU5HX1NUUkVBTSwKK307CisKK2VudW0gaGFk X2Rydl9zdGF0dXMgeworCUhBRF9EUlZfQ09OTkVDVEVELAorCUhBRF9EUlZfUlVOTklORywKKwlI QURfRFJWX0RJU0NPTk5FQ1RFRCwKKwlIQURfRFJWX1NVU1BFTkRFRCwKKwlIQURfRFJWX0VSUiwK K307CisKKy8qIGVudW0gaW50ZWxfaGFkX2F1ZF9idWZfdHlwZSAtIEhETUkgY29udHJvbGxlciBy aW5nIGJ1ZmZlciB0eXBlcyAqLworZW51bSBpbnRlbF9oYWRfYXVkX2J1Zl90eXBlIHsKKwlIQURf QlVGX1RZUEVfQSA9IDAsCisJSEFEX0JVRl9UWVBFX0IgPSAxLAorCUhBRF9CVUZfVFlQRV9DID0g MiwKKwlIQURfQlVGX1RZUEVfRCA9IDMsCit9OworCitlbnVtIG51bV9hdWRfY2ggeworCUNIX1NU RVJFTyA9IDAsCisJQ0hfVEhSRUVfRk9VUiA9IDEsCisJQ0hfRklWRV9TSVggPSAyLAorCUNIX1NF VkVOX0VJR0hUID0gMworfTsKKworLyogSERNSSBDb250cm9sbGVyIHJlZ2lzdGVyIG9mZnNldHMg LSBhdWRpbyBkb21haW4gY29tbW9uICovCisvKiBCYXNlIGFkZHJlc3MgZm9yIGJlbG93IHJlZ3Mg PSAweDY1MDAwICovCitlbnVtIGhkbWlfY3RybF9yZWdfb2Zmc2V0X2NvbW1vbiB7CisJQVVESU9f SERNSV9DT05GSUdfQQk9IDB4MDAwLAorCUFVRElPX0hETUlfQ09ORklHX0IgPSAweDgwMCwKKwlB VURJT19IRE1JX0NPTkZJR19DID0gMHg5MDAsCit9OworLyogSERNSSBjb250cm9sbGVyIHJlZ2lz dGVyIG9mZnNldHMgKi8KK2VudW0gaGRtaV9jdHJsX3JlZ19vZmZzZXRfdjEgeworCUFVRF9DT05G SUcJCT0gMHgwLAorCUFVRF9DSF9TVEFUVVNfMAkJPSAweDA4LAorCUFVRF9DSF9TVEFUVVNfMQkJ PSAweDBDLAorCUFVRF9IRE1JX0NUUwkJPSAweDEwLAorCUFVRF9OX0VOQUJMRQkJPSAweDE0LAor CUFVRF9TQU1QTEVfUkFURQkJPSAweDE4LAorCUFVRF9CVUZfQ09ORklHCQk9IDB4MjAsCisJQVVE X0JVRl9DSF9TV0FQCQk9IDB4MjQsCisJQVVEX0JVRl9BX0FERFIJCT0gMHg0MCwKKwlBVURfQlVG X0FfTEVOR1RICT0gMHg0NCwKKwlBVURfQlVGX0JfQUREUgkJPSAweDQ4LAorCUFVRF9CVUZfQl9M RU5HVEgJPSAweDRjLAorCUFVRF9CVUZfQ19BRERSCQk9IDB4NTAsCisJQVVEX0JVRl9DX0xFTkdU SAk9IDB4NTQsCisJQVVEX0JVRl9EX0FERFIJCT0gMHg1OCwKKwlBVURfQlVGX0RfTEVOR1RICT0g MHg1YywKKwlBVURfQ05UTF9TVAkJPSAweDYwLAorCUFVRF9IRE1JX1NUQVRVUwkJPSAweDY4LAor CUFVRF9IRE1JV19JTkZPRlIJPSAweDExNCwKK307CisKKy8qCisgKiBEZWx0YSBjaGFuZ2VzIGlu IEhETUkgY29udHJvbGxlciByZWdpc3RlciBvZmZzZXRzCisgKiBjb21wYXJlIHRvIHYxIHZlcnNp b24KKyAqLworCitlbnVtIGhkbWlfY3RybF9yZWdfb2Zmc2V0X3YyIHsKKwlBVURfSERNSV9TVEFU VVNfdjIJPSAweDY0LAorCUFVRF9IRE1JV19JTkZPRlJfdjIJPSAweDY4LAorfTsKKworLyoKKyAq CUNFQSBzcGVha2VyIHBsYWNlbWVudDoKKyAqCisgKglGTCAgRkxDICAgRkMgICBGUkMgICBGUgor ICoKKyAqCQkJCQkJTEZFCisgKgorICoJUkwgIFJMQyAgIFJDICAgUlJDICAgUlIKKyAqCisgKglU aGUgTGVmdC9SaWdodCBTdXJyb3VuZCBjaGFubmVsIF9ub3Rpb25zXyBMUy9SUyBpbiBTTVBURSAz MjBNCisgKgljb3JyZXNwb25kcyB0byBDRUEgUkwvUlI7IFRoZSBTTVBURSBjaGFubmVsIF9hc3Np Z25tZW50XyBDL0xGRSBpcworICoJc3dhcHBlZCB0byBDRUEgTEZFL0ZDLgorICovCitlbnVtIGNl YV9zcGVha2VyX3BsYWNlbWVudCB7CisJRkwgID0gKDEgPDwgIDApLCAgICAgICAgLyogRnJvbnQg TGVmdCAgICAgICAgICAgKi8KKwlGQyAgPSAoMSA8PCAgMSksICAgICAgICAvKiBGcm9udCBDZW50 ZXIgICAgICAgICAqLworCUZSICA9ICgxIDw8ICAyKSwgICAgICAgIC8qIEZyb250IFJpZ2h0ICAg ICAgICAgICovCisJRkxDID0gKDEgPDwgIDMpLCAgICAgICAgLyogRnJvbnQgTGVmdCBDZW50ZXIg ICAgKi8KKwlGUkMgPSAoMSA8PCAgNCksICAgICAgICAvKiBGcm9udCBSaWdodCBDZW50ZXIgICAq LworCVJMICA9ICgxIDw8ICA1KSwgICAgICAgIC8qIFJlYXIgTGVmdCAgICAgICAgICAgICovCisJ UkMgID0gKDEgPDwgIDYpLCAgICAgICAgLyogUmVhciBDZW50ZXIgICAgICAgICAgKi8KKwlSUiAg PSAoMSA8PCAgNyksICAgICAgICAvKiBSZWFyIFJpZ2h0ICAgICAgICAgICAqLworCVJMQyA9ICgx IDw8ICA4KSwgICAgICAgIC8qIFJlYXIgTGVmdCBDZW50ZXIgICAgICovCisJUlJDID0gKDEgPDwg IDkpLCAgICAgICAgLyogUmVhciBSaWdodCBDZW50ZXIgICAgKi8KKwlMRkUgPSAoMSA8PCAxMCks ICAgICAgICAvKiBMb3cgRnJlcXVlbmN5IEVmZmVjdCAqLworfTsKKworc3RydWN0IGNlYV9jaGFu bmVsX3NwZWFrZXJfYWxsb2NhdGlvbiB7CisJaW50IGNhX2luZGV4OworCWludCBzcGVha2Vyc1s4 XTsKKworCS8qIGRlcml2ZWQgdmFsdWVzLCBqdXN0IGZvciBjb252ZW5pZW5jZSAqLworCWludCBj aGFubmVsczsKKwlpbnQgc3BrX21hc2s7Cit9OworCitzdHJ1Y3QgY2hhbm5lbF9tYXBfdGFibGUg eworCXVuc2lnbmVkIGNoYXIgbWFwOyAgICAgICAgICAgICAgLyogQUxTQSBBUEkgY2hhbm5lbCBt YXAgcG9zaXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyIGNlYV9zbG90OyAgICAgICAgIC8qIENFQSBz bG90IHZhbHVlICovCisJaW50IHNwa19tYXNrOyAgICAgICAgICAgICAgICAgICAvKiBzcGVha2Vy IHBvc2l0aW9uIGJpdCBtYXNrICovCit9OworCisvKioKKyAqIHVuaW9uIGF1ZF9jZmcgLSBBdWRp byBjb25maWd1cmF0aW9uCisgKgorICogQGNmZ19yZWd4OiBpbmRpdmlkdWFsIHJlZ2lzdGVyIGJp dHMKKyAqIEBjZmdfcmVndmFsOiBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICovCit1bmlvbiBh dWRfY2ZnIHsKKwlzdHJ1Y3QgeworCQl1MzIgYXVkX2VuOjE7CisJCXUzMiBsYXlvdXQ6MTsKKwkJ dTMyIGZtdDoyOworCQl1MzIgbnVtX2NoOjI7CisJCXUzMiByc3ZkMDoxOworCQl1MzIgc2V0OjE7 CisJCXUzMiBmbGF0OjE7CisJCXUzMiB2YWxfYml0OjE7CisJCXUzMiB1c2VyX2JpdDoxOworCQl1 MzIgdW5kZXJydW46MTsKKwkJdTMyIHJzdmQxOjIwOworCX0gY2ZnX3JlZ3g7CisJc3RydWN0IHsK KwkJdTMyIGF1ZF9lbjoxOworCQl1MzIgbGF5b3V0OjE7CisJCXUzMiBmbXQ6MjsKKwkJdTMyIG51 bV9jaDozOworCQl1MzIgc2V0OjE7CisJCXUzMiBmbGF0OjE7CisJCXUzMiB2YWxfYml0OjE7CisJ CXUzMiB1c2VyX2JpdDoxOworCQl1MzIgdW5kZXJydW46MTsKKwkJdTMyIHBhY2tldF9tb2RlOjE7 CisJCXUzMiBsZWZ0X2FsaWduOjE7CisJCXUzMiBib2d1c19zYW1wbGU6MTsKKwkJdTMyIGRwX21v ZGVpOjE7CisJCXUzMiByc3ZkOjE2OworCX0gY2ZnX3JlZ3hfdjI7CisJdTMyIGNmZ19yZWd2YWw7 Cit9OworCisvKioKKyAqIHVuaW9uIGF1ZF9jaF9zdGF0dXNfMCAtIEF1ZGlvIENoYW5uZWwgU3Rh dHVzIDAgQXR0cmlidXRlcworICoKKyAqIEBzdGF0dXNfMF9yZWd4OmluZGl2aWR1YWwgcmVnaXN0 ZXIgYml0cworICogQHN0YXR1c18wX3JlZ3ZhbDpmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICov Cit1bmlvbiBhdWRfY2hfc3RhdHVzXzAgeworCXN0cnVjdCB7CisJCXUzMiBjaF9zdGF0dXM6MTsK KwkJdTMyIGxwY21faWQ6MTsKKwkJdTMyIGNwX2luZm86MTsKKwkJdTMyIGZvcm1hdDozOworCQl1 MzIgbW9kZToyOworCQl1MzIgY3RnX2NvZGU6ODsKKwkJdTMyIHNyY19udW06NDsKKwkJdTMyIGNo X251bTo0OworCQl1MzIgc2FtcF9mcmVxOjQ7CisJCXUzMiBjbGtfYWNjOjI7CisJCXUzMiByc3Zk OjI7CisJfSBzdGF0dXNfMF9yZWd4OworCXUzMiBzdGF0dXNfMF9yZWd2YWw7Cit9OworCisvKioK KyAqIHVuaW9uIGF1ZF9jaF9zdGF0dXNfMSAtIEF1ZGlvIENoYW5uZWwgU3RhdHVzIDEgQXR0cmli dXRlcworICoKKyAqIEBzdGF0dXNfMV9yZWd4OiBpbmRpdmlkdWFsIHJlZ2lzdGVyIGJpdHMKKyAq IEBzdGF0dXNfMV9yZWd2YWw6IGZ1bGwgcmVnaXN0ZXIgdmFsdWUKKyAqCisgKi8KK3VuaW9uIGF1 ZF9jaF9zdGF0dXNfMSB7CisJc3RydWN0IHsKKwkJdTMyIG1heF93cmRfbGVuOjE7CisJCXUzMiB3 cmRfbGVuOjM7CisJCXUzMiByc3ZkOjI4OworCQl9IHN0YXR1c18xX3JlZ3g7CisJdTMyIHN0YXR1 c18xX3JlZ3ZhbDsKK307CisKKy8qKgorICogdW5pb24gYXVkX2hkbWlfY3RzIC0gQ1RTIHJlZ2lz dGVyCisgKgorICogQGN0c19yZWd4OiBpbmRpdmlkdWFsIHJlZ2lzdGVyIGJpdHMKKyAqIEBjdHNf cmVndmFsOiBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICovCit1bmlvbiBhdWRfaGRtaV9jdHMg eworCXN0cnVjdCB7CisJCXUzMiBjdHNfdmFsOjIwOworCQl1MzIgZW5fY3RzX3Byb2c6MTsKKwkJ dTMyIHJzdmQ6MTE7CisJfSBjdHNfcmVneDsKKwlzdHJ1Y3QgeworCQl1MzIgY3RzX3ZhbDoyNDsK KwkJdTMyIGVuX2N0c19wcm9nOjE7CisJCXUzMiByc3ZkOjc7CisJfSBjdHNfcmVneF92MjsKKwl1 MzIgY3RzX3JlZ3ZhbDsKK307CisKKy8qKgorICogdW5pb24gYXVkX2hkbWlfbl9lbmFibGUgLSBO IHJlZ2lzdGVyCisgKgorICogQG5fcmVneDogaW5kaXZpZHVhbCByZWdpc3RlciBiaXRzCisgKiBA bl9yZWd2YWw6IGZ1bGwgcmVnaXN0ZXIgdmFsdWUKKyAqCisgKi8KK3VuaW9uIGF1ZF9oZG1pX25f ZW5hYmxlIHsKKwlzdHJ1Y3QgeworCQl1MzIgbl92YWw6MjA7CisJCXUzMiBlbl9uX3Byb2c6MTsK KwkJdTMyIHJzdmQ6MTE7CisJfSBuX3JlZ3g7CisJc3RydWN0IHsKKwkJdTMyIG5fdmFsOjI0Owor CQl1MzIgZW5fbl9wcm9nOjE7CisJCXUzMiByc3ZkOjc7CisJfSBuX3JlZ3hfdjI7CisJdTMyIG5f cmVndmFsOworfTsKKworLyoqCisgKiB1bmlvbiBhdWRfYnVmX2NvbmZpZyAtICBBdWRpbyBCdWZm ZXIgY29uZmlndXJhdGlvbnMKKyAqCisgKiBAYnVmX2NmZ19yZWd4OiBpbmRpdmlkdWFsIHJlZ2lz dGVyIGJpdHMKKyAqIEBidWZfY2ZndmFsOiBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICovCit1 bmlvbiBhdWRfYnVmX2NvbmZpZyB7CisJc3RydWN0IHsKKwkJdTMyIGZpZm9fd2lkdGg6ODsKKwkJ dTMyIHJzdmQwOjg7CisJCXUzMiBhdWRfZGVsYXk6ODsKKwkJdTMyIHJzdmQxOjg7CisJfSBidWZf Y2ZnX3JlZ3g7CisJc3RydWN0IHsKKwkJdTMyIGF1ZGlvX2ZpZm9fd2F0ZXJtYXJrOjg7CisJCXUz MiBkbWFfZmlmb193YXRlcm1hcms6MzsKKwkJdTMyIHJzdmQwOjU7CisJCXUzMiBhdWRfZGVsYXk6 ODsKKwkJdTMyIHJzdmQxOjg7CisJfSBidWZfY2ZnX3JlZ3hfdjI7CisJdTMyIGJ1Zl9jZmd2YWw7 Cit9OworCisvKioKKyAqIHVuaW9uIGF1ZF9idWZfY2hfc3dhcCAtIEF1ZGlvIFNhbXBsZSBTd2Fw cGluZyBvZmZzZXQKKyAqCisgKiBAYnVmX2NoX3N3YXBfcmVneDogaW5kaXZpZHVhbCByZWdpc3Rl ciBiaXRzCisgKiBAYnVmX2NoX3N3YXBfdmFsOiBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICov Cit1bmlvbiBhdWRfYnVmX2NoX3N3YXAgeworCXN0cnVjdCB7CisJCXUzMiBmaXJzdF8wOjM7CisJ CXUzMiBzZWNvbmRfMDozOworCQl1MzIgZmlyc3RfMTozOworCQl1MzIgc2Vjb25kXzE6MzsKKwkJ dTMyIGZpcnN0XzI6MzsKKwkJdTMyIHNlY29uZF8yOjM7CisJCXUzMiBmaXJzdF8zOjM7CisJCXUz MiBzZWNvbmRfMzozOworCQl1MzIgcnN2ZDo4OworCX0gYnVmX2NoX3N3YXBfcmVneDsKKwl1MzIg YnVmX2NoX3N3YXBfdmFsOworfTsKKworLyoqCisgKiB1bmlvbiBhdWRfYnVmX2FkZHIgLSBBZGRy ZXNzIGZvciBBdWRpbyBCdWZmZXIKKyAqCisgKiBAYnVmX2FkZHJfcmVneDogaW5kaXZpZHVhbCBy ZWdpc3RlciBiaXRzCisgKiBAYnVmX2FkZHJfdmFsOiBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgor ICovCit1bmlvbiBhdWRfYnVmX2FkZHIgeworCXN0cnVjdCB7CisJCXUzMiB2YWxpZDoxOworCQl1 MzIgaW50cl9lbjoxOworCQl1MzIgcnN2ZDo0OworCQl1MzIgYWRkcjoyNjsKKwl9IGJ1Zl9hZGRy X3JlZ3g7CisJdTMyIGJ1Zl9hZGRyX3ZhbDsKK307CisKKy8qKgorICogdW5pb24gYXVkX2J1Zl9s ZW4gLSBMZW5ndGggb2YgQXVkaW8gQnVmZmVyCisgKgorICogQGJ1Zl9sZW5fcmVneDogaW5kaXZp ZHVhbCByZWdpc3RlciBiaXRzCisgKiBAYnVmX2xlbl92YWw6IGZ1bGwgcmVnaXN0ZXIgdmFsdWUK KyAqCisgKi8KK3VuaW9uIGF1ZF9idWZfbGVuIHsKKwlzdHJ1Y3QgeworCQl1MzIgYnVmX2xlbjoy MDsKKwkJdTMyIHJzdmQ6MTI7CisJfSBidWZfbGVuX3JlZ3g7CisJdTMyIGJ1Zl9sZW5fdmFsOwor fTsKKworLyoqCisgKiB1bmlvbiBhdWRfY3RybF9zdCAtIEF1ZGlvIENvbnRyb2wgU3RhdGUgUmVn aXN0ZXIgb2Zmc2V0CisgKgorICogQGN0cmxfcmVneDogaW5kaXZpZHVhbCByZWdpc3RlciBiaXRz CisgKiBAY3RybF92YWw6IGZ1bGwgcmVnaXN0ZXIgdmFsdWUKKyAqCisgKi8KK3VuaW9uIGF1ZF9j dHJsX3N0IHsKKwlzdHJ1Y3QgeworCQl1MzIgcmFtX2FkZHI6NDsKKwkJdTMyIGVsZF9hY2s6MTsK KwkJdTMyIGVsZF9hZGRyOjQ7CisJCXUzMiBlbGRfYnVmX3NpemU6NTsKKwkJdTMyIGVsZF92YWxp ZDoxOworCQl1MzIgY3BfcmVhZHk6MTsKKwkJdTMyIGRpcF9mcmVxOjI7CisJCXUzMiBkaXBfaWR4 OjM7CisJCXUzMiBkaXBfZW5fc3RhOjQ7CisJCXUzMiByc3ZkOjc7CisJfSBjdHJsX3JlZ3g7CisJ dTMyIGN0cmxfdmFsOworfTsKKworLyoqCisgKiB1bmlvbiBhdWRfaW5mb19mcmFtZTEgLSBBdWRp byBIRE1JIFdpZGdldCBEYXRhIElzbGFuZCBQYWNrZXQgb2Zmc2V0CisgKgorICogQGZyMV9yZWd4 OiBpbmRpdmlkdWFsIHJlZ2lzdGVyIGJpdHMKKyAqIEBmcjFfdmFsOiBmdWxsIHJlZ2lzdGVyIHZh bHVlCisgKgorICovCit1bmlvbiBhdWRfaW5mb19mcmFtZTEgeworCXN0cnVjdCB7CisJCXUzMiBw a3RfdHlwZTo4OworCQl1MzIgdmVyX251bTo4OworCQl1MzIgbGVuOjU7CisJCXUzMiByc3ZkOjEx OworCX0gZnIxX3JlZ3g7CisJdTMyIGZyMV92YWw7Cit9OworCisvKioKKyAqIHVuaW9uIGF1ZF9p bmZvX2ZyYW1lMiAtIERJUCBmcmFtZSAyCisgKgorICogQGZyMl9yZWd4OiBpbmRpdmlkdWFsIHJl Z2lzdGVyIGJpdHMKKyAqIEBmcjJfdmFsOiBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICovCit1 bmlvbiBhdWRfaW5mb19mcmFtZTIgeworCXN0cnVjdCB7CisJCXUzMiBjaGtzdW06ODsKKwkJdTMy IGNobmxfY250OjM7CisJCXUzMiByc3ZkMDoxOworCQl1MzIgY29kaW5nX3R5cGU6NDsKKwkJdTMy IHNtcGxfc2l6ZToyOworCQl1MzIgc21wbF9mcmVxOjM7CisJCXUzMiByc3ZkMTozOworCQl1MzIg Zm9ybWF0Ojg7CisJfSBmcjJfcmVneDsKKwl1MzIgZnIyX3ZhbDsKK307CisKKy8qKgorICogdW5p b24gYXVkX2luZm9fZnJhbWUzIC0gRElQIGZyYW1lIDMKKyAqCisgKiBAZnIzX3JlZ3g6IGluZGl2 aWR1YWwgcmVnaXN0ZXIgYml0cworICogQGZyM192YWw6IGZ1bGwgcmVnaXN0ZXIgdmFsdWUKKyAq CisgKi8KK3VuaW9uIGF1ZF9pbmZvX2ZyYW1lMyB7CisJc3RydWN0IHsKKwkJdTMyIGNobmxfYWxs b2M6ODsKKwkJdTMyIHJzdmQwOjM7CisJCXUzMiBsc3Y6NDsKKwkJdTMyIGRtX2luaDoxOworCQl1 MzIgcnN2ZDE6MTY7CisJfSBmcjNfcmVneDsKKwl1MzIgZnIzX3ZhbDsKK307CisKK2VudW0gaGRt aV9jb25uZWN0b3Jfc3RhdHVzIHsKKwloZG1pX2Nvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkID0g MSwKKwloZG1pX2Nvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkID0gMiwKKwloZG1pX2Nvbm5l Y3Rvcl9zdGF0dXNfdW5rbm93biA9IDMsCit9OworCisjZGVmaW5lIEhETUlfQVVESU9fVU5ERVJS VU4gICAgICgxVUw8PDMxKQorI2RlZmluZSBIRE1JX0FVRElPX0JVRkZFUl9ET05FICAoMVVMPDwy OSkKKworCisjZGVmaW5lIFBPUlRfRU5BQkxFCQkJKDEgPDwgMzEpCisjZGVmaW5lIFNEVk9fQVVE SU9fRU5BQkxFCSgxIDw8IDYpCisKK2VudW0gaGFkX2NhcHNfbGlzdCB7CisJSEFEX0dFVF9FTEQg PSAxLAorCUhBRF9HRVRfRElTUExBWV9SQVRFLAorCUhBRF9TRVRfRU5BQkxFX0FVRElPLAorCUhB RF9TRVRfRElTQUJMRV9BVURJTywKKwlIQURfU0VUX0VOQUJMRV9BVURJT19JTlQsCisJSEFEX1NF VF9ESVNBQkxFX0FVRElPX0lOVCwKK307CisKK2VudW0gaGFkX2V2ZW50X3R5cGUgeworCUhBRF9F VkVOVF9IT1RfUExVRyA9IDEsCisJSEFEX0VWRU5UX0hPVF9VTlBMVUcsCisJSEFEX0VWRU5UX01P REVfQ0hBTkdJTkcsCisJSEFEX0VWRU5UX0FVRElPX0JVRkZFUl9ET05FLAorCUhBRF9FVkVOVF9B VURJT19CVUZGRVJfVU5ERVJSVU4sCisJSEFEX0VWRU5UX1FVRVJZX0lTX0FVRElPX0JVU1ksCisJ SEFEX0VWRU5UX1FVRVJZX0lTX0FVRElPX1NVU1BFTkRFRCwKK307CisKKy8qCisgKiBIRE1JIERp c3BsYXkgQ29udHJvbGxlciBBdWRpbyBJbnRlcmZhY2UKKyAqCisgKi8KK3R5cGVkZWYgaW50ICgq aGFkX2V2ZW50X2NhbGxfYmFjaykgKGVudW0gaGFkX2V2ZW50X3R5cGUgZXZlbnRfdHlwZSwKKwkJ dm9pZCAqY3R4dF9pbmZvKTsKKworc3RydWN0IGhkbWlfYXVkaW9fcmVnaXN0ZXJzX29wcyB7CisJ aW50ICgqaGRtaV9hdWRpb19nZXRfcmVnaXN0ZXJfYmFzZSkodWludDMyX3QgKipyZWdfYmFzZSwK KwkJCXVpbnQzMl90ICpjb25maWdfb2Zmc2V0KTsKKwlpbnQgKCpoZG1pX2F1ZGlvX3JlYWRfcmVn aXN0ZXIpKHVpbnQzMl90IHJlZ19hZGRyLCB1aW50MzJfdCAqZGF0YSk7CisJaW50ICgqaGRtaV9h dWRpb193cml0ZV9yZWdpc3RlcikodWludDMyX3QgcmVnX2FkZHIsIHVpbnQzMl90IGRhdGEpOwor CWludCAoKmhkbWlfYXVkaW9fcmVhZF9tb2RpZnkpKHVpbnQzMl90IHJlZ19hZGRyLCB1aW50MzJf dCBkYXRhLAorCQkJdWludDMyX3QgbWFzayk7Cit9OworCitzdHJ1Y3QgaGRtaV9hdWRpb19xdWVy eV9zZXRfb3BzIHsKKwlpbnQgKCpoZG1pX2F1ZGlvX2dldF9jYXBzKShlbnVtIGhhZF9jYXBzX2xp c3QgcXVlcnlfZWxlbWVudCwKKwkJCXZvaWQgKmNhcGFiaWx0aWVzKTsKKwlpbnQgKCpoZG1pX2F1 ZGlvX3NldF9jYXBzKShlbnVtIGhhZF9jYXBzX2xpc3Qgc2V0X2VsZW1lbnQsCisJCQl2b2lkICpj YXBhYmlsdGllcyk7Cit9OworCitzdHJ1Y3QgaGRtaV9hdWRpb19ldmVudCB7CisJaW50IHR5cGU7 Cit9OworCitzdHJ1Y3Qgc25kX2ludGVsX2hhZF9pbnRlcmZhY2UgeworCWNvbnN0IGNoYXIgKm5h bWU7CisJaW50ICgqcXVlcnkpKHZvaWQgKmhhZF9kYXRhLCBzdHJ1Y3QgaGRtaV9hdWRpb19ldmVu dCBldmVudCk7CisJaW50ICgqc3VzcGVuZCkodm9pZCAqaGFkX2RhdGEsIHN0cnVjdCBoZG1pX2F1 ZGlvX2V2ZW50IGV2ZW50KTsKKwlpbnQgKCpyZXN1bWUpKHZvaWQgKmhhZF9kYXRhKTsKK307CisK K2Jvb2wgbWlkX2hkbWlfYXVkaW9faXNfYnVzeSh2b2lkICpkZXYpOworYm9vbCBtaWRfaGRtaV9h dWRpb19zdXNwZW5kKHZvaWQgKmRldik7Cit2b2lkIG1pZF9oZG1pX2F1ZGlvX3Jlc3VtZSh2b2lk ICpkZXYpOwordm9pZCBtaWRfaGRtaV9hdWRpb19zaWduYWxfZXZlbnQoZW51bSBoYWRfZXZlbnRf dHlwZSBldmVudCk7CitpbnQgbWlkX2hkbWlfYXVkaW9fc2V0dXAoCisJaGFkX2V2ZW50X2NhbGxf YmFjayBhdWRpb19jYWxsYmFja3MsCisJc3RydWN0IGhkbWlfYXVkaW9fcmVnaXN0ZXJzX29wcyAq cmVnX29wcywKKwlzdHJ1Y3QgaGRtaV9hdWRpb19xdWVyeV9zZXRfb3BzICpxdWVyeV9vcHMpOwor aW50IG1pZF9oZG1pX2F1ZGlvX3JlZ2lzdGVyKAorCXN0cnVjdCBzbmRfaW50ZWxfaGFkX2ludGVy ZmFjZSAqZHJpdmVyLAorCXZvaWQgKmhhZF9kYXRhKTsKKworI2VuZGlmCi0tIAoyLjkuMwoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==