From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mauro Rossi Subject: [PATCH v2 02/10] drm/amd/display: dc/dce: add DCE6 support (v2) Date: Wed, 17 Oct 2018 10:35:05 +0200 Message-ID: <20181017083513.20913-3-issor.oruam@gmail.com> References: <20181017083513.20913-1-issor.oruam@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181017083513.20913-1-issor.oruam-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: mike-4+n8WJKc9ve9FHfhHBbuYA@public.gmane.org, ckoenig.leichtzumerken-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, Mauro Rossi , sylvain.bertrand-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, alexander.deucher-5C7GfCeVMHo@public.gmane.org, harry.wentland-5C7GfCeVMHo@public.gmane.org RENFNiB0YXJnZXRzIGFyZSBhZGRlZCByZXBsaWNhdGluZyBleGlzdGluZyBEQ0U4IGltcGxlbWVu dGF0aW9uLgoKTk9URTogZGNlXzhfMF97ZCxzaF9tYXNrfS5oIGhlYWRlcnMgdXNlZCBpbnN0ZWFk IG9mIGRjZV82XzBfe2Qsc2hfbWFza30uaApvbmx5IHRvIGJ1aWxkIGRjZTYwX3Jlc291cmNlLmMg ZHVlIHRvIG1pc3NpbmcgKl9EQ0U2MCBtYWNyb3MvcmVnaXN0ZXJzL21hc2tzCgpJTVBPUlRBTlQ6 IENvZGluZyBvZiBkY2U2MF9yZXNvdXJjZS5jIHJlcXVpcmVzIHJldmlldyB0byB1bmRlcnN0YW5k CmlmIGRjZV82XzBfe2Qsc2hfbWFza30uaCBzaG91bGQgYmUgdXBkYXRlZCB3aXRoIG1hY3Jvcy9y ZWdpc3RlcnMvbWFza3MKCih2MikgdXBkYXRlZCBkY2U2MF97aHdfc2VxdWVuY2VyLHJlc291cmNl c30uYyBhcyBwZXIgYW1kLXN0YWdpbmctZHJtLW5leHQKICAgICByZW1vdmVkIGRjZV92ZXJzaW9u IGNhc2VzIGluIGRjL2RjZS9kY2VfY2xvY2tfc291cmNlLmMKLS0tCiBkcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvZGMvTWFrZWZpbGUgICAgICAgfCAgICA0ICsKIGRyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9kY2U2MC9NYWtlZmlsZSB8ICAgMzQgKwogLi4uL2FtZC9kaXNwbGF5L2Rj L2RjZTYwL2RjZTYwX2h3X3NlcXVlbmNlci5jIHwgICA4MiArCiAuLi4vYW1kL2Rpc3BsYXkvZGMv ZGNlNjAvZGNlNjBfaHdfc2VxdWVuY2VyLmggfCAgIDM2ICsKIC4uLi9kcm0vYW1kL2Rpc3BsYXkv ZGMvZGNlNjAvZGNlNjBfcmVzb3VyY2UuYyB8IDE0NTggKysrKysrKysrKysrKysrKysKIC4uLi9k cm0vYW1kL2Rpc3BsYXkvZGMvZGNlNjAvZGNlNjBfcmVzb3VyY2UuaCB8ICAgNDcgKwogLi4uL2Rp c3BsYXkvZGMvZGNlNjAvZGNlNjBfdGltaW5nX2dlbmVyYXRvci5jIHwgIDI0MiArKysKIC4uLi9k aXNwbGF5L2RjL2RjZTYwL2RjZTYwX3RpbWluZ19nZW5lcmF0b3IuaCB8ICAgMzkgKwogLi4uL2lu Y2x1ZGUvYXNpY19yZWcvZGNlL2RjZV82XzBfc2hfbWFzay5oICAgIHwgICAgNCArCiA5IGZpbGVz IGNoYW5nZWQsIDE5NDYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2U2MC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2U2MC9kY2U2MF9od19zZXF1ZW5jZXIu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2U2 MC9kY2U2MF9od19zZXF1ZW5jZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9hbWQvZGlzcGxheS9kYy9kY2U2MC9kY2U2MF9yZXNvdXJjZS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZTYwL2RjZTYwX3Jlc291cmNlLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlNjAv ZGNlNjBfdGltaW5nX2dlbmVyYXRvci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2RjZTYwL2RjZTYwX3RpbWluZ19nZW5lcmF0b3IuaAoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9NYWtlZmlsZQppbmRleCBhZWQ1MzhhNGQxYmEuLmQ1ZDVh Y2Q1NzU1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9NYWtlZmlsZQpAQCAtMzYs NiArMzYsMTAgQEAgRENfTElCUyArPSBkY2UxMTAKIERDX0xJQlMgKz0gZGNlMTAwCiBEQ19MSUJT ICs9IGRjZTgwCiAKK2lmZGVmIENPTkZJR19EUk1fQU1EX0RDX1NJCitEQ19MSUJTICs9IGRjZTYw CitlbmRpZgorCiBBTURfREMgPSAkKGFkZHN1ZmZpeCAvTWFrZWZpbGUsICQoYWRkcHJlZml4ICQo RlVMTF9BTURfRElTUExBWV9QQVRIKS9kYy8sJChEQ19MSUJTKSkpCiAKIGluY2x1ZGUgJChBTURf REMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlNjAvTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlNjAvTWFrZWZpbGUKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zOWFmZDdjNTlhN2MKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlNjAvTWFrZWZp bGUKQEAgLTAsMCArMSwzNCBAQAorIworIyBDb3B5cmlnaHQgMjAxNyBBZHZhbmNlZCBNaWNybyBE ZXZpY2VzLCBJbmMuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisj IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisjIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorIyBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorIyBUSEUgQ09QWVJJR0hUIEhP TERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IK KyMgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsCisjIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorIyBPVEhFUiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuCisjCisjCisjIE1ha2VmaWxlIGZvciB0aGUgJ2NvbnRyb2xsZXInIHN1Yi1jb21w b25lbnQgb2YgREFMLgorIyBJdCBwcm92aWRlcyB0aGUgY29udHJvbCBhbmQgc3RhdHVzIG9mIEhX IENSVEMgYmxvY2suCisKK0RDRTYwID0gZGNlNjBfdGltaW5nX2dlbmVyYXRvci5vIGRjZTYwX2h3 X3NlcXVlbmNlci5vIFwKKwlkY2U2MF9yZXNvdXJjZS5vCisKK0FNRF9EQUxfRENFNjAgPSAkKGFk ZHByZWZpeCAkKEFNRERBTFBBVEgpL2RjL2RjZTYwLywkKERDRTYwKSkKKworQU1EX0RJU1BMQVlf RklMRVMgKz0gJChBTURfREFMX0RDRTYwKQorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2RjZTYwL2RjZTYwX2h3X3NlcXVlbmNlci5jIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZTYwL2RjZTYwX2h3X3NlcXVlbmNlci5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTAyMTcyYmY2MDk3Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZTYwL2RjZTYwX2h3X3Nl cXVlbmNlci5jCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNl ZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICog YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S CisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQU1E CisgKgorICovCisKKyNpbmNsdWRlICJkbV9zZXJ2aWNlcy5oIgorI2luY2x1ZGUgImRjLmgiCisj aW5jbHVkZSAiY29yZV90eXBlcy5oIgorI2luY2x1ZGUgImRjZTYwX2h3X3NlcXVlbmNlci5oIgor CisjaW5jbHVkZSAiZGNlL2RjZV9od3NlcS5oIgorI2luY2x1ZGUgImRjZTExMC9kY2UxMTBfaHdf c2VxdWVuY2VyLmgiCisjaW5jbHVkZSAiZGNlMTAwL2RjZTEwMF9od19zZXF1ZW5jZXIuaCIKKwor LyogaW5jbHVkZSBEQ0U4IHJlZ2lzdGVyIGhlYWRlciBmaWxlcyAqLworI2luY2x1ZGUgImRjZS9k Y2VfNl8wX2QuaCIKKyNpbmNsdWRlICJkY2UvZGNlXzZfMF9zaF9tYXNrLmgiCisKK3N0cnVjdCBk Y2U2MF9od19zZXFfcmVnX29mZnNldHMgeworCXVpbnQzMl90IGNydGM7Cit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRjZTYwX2h3X3NlcV9yZWdfb2Zmc2V0cyByZWdfb2Zmc2V0c1tdID0gewor eworCS5jcnRjID0gKG1tQ1JUQzBfQ1JUQ19HU0xfQ09OVFJPTCAtIG1tQ1JUQ19HU0xfQ09OVFJP TCksCit9LAoreworCS5jcnRjID0gKG1tQ1JUQzFfQ1JUQ19HU0xfQ09OVFJPTCAtIG1tQ1JUQ19H U0xfQ09OVFJPTCksCit9LAoreworCS5jcnRjID0gKG1tQ1JUQzJfQ1JUQ19HU0xfQ09OVFJPTCAt IG1tQ1JUQ19HU0xfQ09OVFJPTCksCit9LAoreworCS5jcnRjID0gKG1tQ1JUQzNfQ1JUQ19HU0xf Q09OVFJPTCAtIG1tQ1JUQ19HU0xfQ09OVFJPTCksCit9LAoreworCS5jcnRjID0gKG1tQ1JUQzRf Q1JUQ19HU0xfQ09OVFJPTCAtIG1tQ1JUQ19HU0xfQ09OVFJPTCksCit9LAoreworCS5jcnRjID0g KG1tQ1JUQzVfQ1JUQ19HU0xfQ09OVFJPTCAtIG1tQ1JUQ19HU0xfQ09OVFJPTCksCit9Cit9Owor CisjZGVmaW5lIEhXX1JFR19DUlRDKHJlZywgaWQpXAorCShyZWcgKyByZWdfb2Zmc2V0c1tpZF0u Y3J0YykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByaXZhdGUgZGVmaW5pdGlvbnMK KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKipQ SVBFX0NPTlRST0wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBk Y2U2MF9od19zZXF1ZW5jZXJfY29uc3RydWN0KHN0cnVjdCBkYyAqZGMpCit7CisJZGNlMTEwX2h3 X3NlcXVlbmNlcl9jb25zdHJ1Y3QoZGMpOworCisJZGMtPmh3c3MuZW5hYmxlX2Rpc3BsYXlfcG93 ZXJfZ2F0aW5nID0gZGNlMTAwX2VuYWJsZV9kaXNwbGF5X3Bvd2VyX2dhdGluZzsKKwlkYy0+aHdz cy5waXBlX2NvbnRyb2xfbG9jayA9IGRjZV9waXBlX2NvbnRyb2xfbG9jazsKKwlkYy0+aHdzcy5w cmVwYXJlX2JhbmR3aWR0aCA9IGRjZTEwMF9wcmVwYXJlX2JhbmR3aWR0aDsKKwlkYy0+aHdzcy5v cHRpbWl6ZV9iYW5kd2lkdGggPSBkY2UxMDBfcHJlcGFyZV9iYW5kd2lkdGg7Cit9CisKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2U2MC9kY2U2MF9od19zZXF1 ZW5jZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2U2MC9kY2U2MF9od19z ZXF1ZW5jZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU3Y2U2 M2IxZjc1YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9kY2U2MC9kY2U2MF9od19zZXF1ZW5jZXIuaApAQCAtMCwwICsxLDM2IEBACisvKgorKiBDb3B5 cmlnaHQgMjAxMi0xNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs bCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBB VVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu CisgKgorICogQXV0aG9yczogQU1ECisgKgorICovCisKKyNpZm5kZWYgX19EQ19IV1NTX0RDRTYw X0hfXworI2RlZmluZSBfX0RDX0hXU1NfRENFNjBfSF9fCisKKyNpbmNsdWRlICJjb3JlX3R5cGVz LmgiCisKK3N0cnVjdCBkYzsKKwordm9pZCBkY2U2MF9od19zZXF1ZW5jZXJfY29uc3RydWN0KHN0 cnVjdCBkYyAqZGMpOworCisjZW5kaWYgLyogX19EQ19IV1NTX0RDRTYwX0hfXyAqLworCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlNjAvZGNlNjBfcmVzb3Vy Y2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2U2MC9kY2U2MF9yZXNvdXJj ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjczMWYzMWNlOTk5 Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZTYw L2RjZTYwX3Jlc291cmNlLmMKQEAgLTAsMCArMSwxNDU4IEBACisvKgorICogQ29weXJpZ2h0IDIw MTItMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5j bHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMp IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAq IEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAq IEF1dGhvcnM6IEFNRAorICoKKyAqLworCisjaW5jbHVkZSAiZGNlL2RjZV84XzBfZC5oIgorI2lu Y2x1ZGUgImRjZS9kY2VfOF8wX3NoX21hc2suaCIKKworI2luY2x1ZGUgImRtX3NlcnZpY2VzLmgi CisKKyNpbmNsdWRlICJsaW5rX2VuY29kZXIuaCIKKyNpbmNsdWRlICJzdHJlYW1fZW5jb2Rlci5o IgorCisjaW5jbHVkZSAicmVzb3VyY2UuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2lycV9zZXJ2aWNl X2ludGVyZmFjZS5oIgorI2luY2x1ZGUgImlycS9kY2U2MC9pcnFfc2VydmljZV9kY2U2MC5oIgor I2luY2x1ZGUgImRjZTExMC9kY2UxMTBfdGltaW5nX2dlbmVyYXRvci5oIgorI2luY2x1ZGUgImRj ZTExMC9kY2UxMTBfcmVzb3VyY2UuaCIKKyNpbmNsdWRlICJkY2U2MC9kY2U2MF90aW1pbmdfZ2Vu ZXJhdG9yLmgiCisjaW5jbHVkZSAiZGNlL2RjZV9jbGtfbWdyLmgiCisjaW5jbHVkZSAiZGNlL2Rj ZV9tZW1faW5wdXQuaCIKKyNpbmNsdWRlICJkY2UvZGNlX2xpbmtfZW5jb2Rlci5oIgorI2luY2x1 ZGUgImRjZS9kY2Vfc3RyZWFtX2VuY29kZXIuaCIKKyNpbmNsdWRlICJkY2UvZGNlX21lbV9pbnB1 dC5oIgorI2luY2x1ZGUgImRjZS9kY2VfaXBwLmgiCisjaW5jbHVkZSAiZGNlL2RjZV90cmFuc2Zv cm0uaCIKKyNpbmNsdWRlICJkY2UvZGNlX29wcC5oIgorI2luY2x1ZGUgImRjZS9kY2VfY2xvY2tf c291cmNlLmgiCisjaW5jbHVkZSAiZGNlL2RjZV9hdWRpby5oIgorI2luY2x1ZGUgImRjZS9kY2Vf aHdzZXEuaCIKKyNpbmNsdWRlICJkY2U2MC9kY2U2MF9od19zZXF1ZW5jZXIuaCIKKyNpbmNsdWRl ICJkY2UxMDAvZGNlMTAwX3Jlc291cmNlLmgiCisKKyNpbmNsdWRlICJyZWdfaGVscGVyLmgiCisK KyNpbmNsdWRlICJkY2UvZGNlX2RtY3UuaCIKKyNpbmNsdWRlICJkY2UvZGNlX2F1eC5oIgorI2lu Y2x1ZGUgImRjZS9kY2VfYWJtLmgiCisjaW5jbHVkZSAiZGNlL2RjZV9pMmMuaCIKKy8qIFRPRE8g cmVtb3ZlIHRoaXMgaW5jbHVkZSAqLworCisjaWZuZGVmIG1tTUNfSFVCX1JEUkVRX0RNSUZfTElN SVQKKyNpbmNsdWRlICJnbWMvZ21jXzZfMF9kLmgiCisjaW5jbHVkZSAiZ21jL2dtY182XzBfc2hf bWFzay5oIgorI2VuZGlmCisKKyNpZm5kZWYgbW1EUF9EUEhZX0lOVEVSTkFMX0NUUkwKKyNkZWZp bmUgbW1EUF9EUEhZX0lOVEVSTkFMX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQ0RF CisjZGVmaW5lIG1tRFAwX0RQX0RQSFlfSU5URVJOQUxfQ1RSTCAgICAgICAgICAgICAgICAgICAg IDB4MUNERQorI2RlZmluZSBtbURQMV9EUF9EUEhZX0lOVEVSTkFMX0NUUkwgICAgICAgICAgICAg ICAgICAgICAweDFGREUKKyNkZWZpbmUgbW1EUDJfRFBfRFBIWV9JTlRFUk5BTF9DVFJMICAgICAg ICAgICAgICAgICAgICAgMHg0MkRFCisjZGVmaW5lIG1tRFAzX0RQX0RQSFlfSU5URVJOQUxfQ1RS TCAgICAgICAgICAgICAgICAgICAgIDB4NDVERQorI2RlZmluZSBtbURQNF9EUF9EUEhZX0lOVEVS TkFMX0NUUkwgICAgICAgICAgICAgICAgICAgICAweDQ4REUKKyNkZWZpbmUgbW1EUDVfRFBfRFBI WV9JTlRFUk5BTF9DVFJMICAgICAgICAgICAgICAgICAgICAgMHg0QkRFCisjZGVmaW5lIG1tRFA2 X0RQX0RQSFlfSU5URVJOQUxfQ1RSTCAgICAgICAgICAgICAgICAgICAgIDB4NEVERQorI2VuZGlm CisKKworI2lmbmRlZiBtbUJJT1NfU0NSQVRDSF8yCisJI2RlZmluZSBtbUJJT1NfU0NSQVRDSF8y IDB4MDVDQgorCSNkZWZpbmUgbW1CSU9TX1NDUkFUQ0hfNiAweDA1Q0YKKyNlbmRpZgorCisjaWZu ZGVmIG1tRFBfRFBIWV9GQVNUX1RSQUlOSU5HCisJI2RlZmluZSBtbURQX0RQSFlfRkFTVF9UUkFJ TklORyAgICAgICAgICAgICAgICAgICAgICAgICAweDFDQ0UKKwkjZGVmaW5lIG1tRFAwX0RQX0RQ SFlfRkFTVF9UUkFJTklORyAgICAgICAgICAgICAgICAgICAgIDB4MUNDRQorCSNkZWZpbmUgbW1E UDFfRFBfRFBIWV9GQVNUX1RSQUlOSU5HICAgICAgICAgICAgICAgICAgICAgMHgxRkNFCisJI2Rl ZmluZSBtbURQMl9EUF9EUEhZX0ZBU1RfVFJBSU5JTkcgICAgICAgICAgICAgICAgICAgICAweDQy Q0UKKwkjZGVmaW5lIG1tRFAzX0RQX0RQSFlfRkFTVF9UUkFJTklORyAgICAgICAgICAgICAgICAg ICAgIDB4NDVDRQorCSNkZWZpbmUgbW1EUDRfRFBfRFBIWV9GQVNUX1RSQUlOSU5HICAgICAgICAg ICAgICAgICAgICAgMHg0OENFCisJI2RlZmluZSBtbURQNV9EUF9EUEhZX0ZBU1RfVFJBSU5JTkcg ICAgICAgICAgICAgICAgICAgICAweDRCQ0UKKwkjZGVmaW5lIG1tRFA2X0RQX0RQSFlfRkFTVF9U UkFJTklORyAgICAgICAgICAgICAgICAgICAgIDB4NEVDRQorI2VuZGlmCisKKworI2lmbmRlZiBt bUhQRF9EQ19IUERfQ09OVFJPTAorCSNkZWZpbmUgbW1IUERfRENfSFBEX0NPTlRST0wgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgxODlBCisJI2RlZmluZSBtbUhQRDBfRENfSFBEX0NPTlRS T0wgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4OUEKKwkjZGVmaW5lIG1tSFBEMV9EQ19I UERfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MThBMgorCSNkZWZpbmUgbW1I UEQyX0RDX0hQRF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOEFBCisJI2Rl ZmluZSBtbUhQRDNfRENfSFBEX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4 QjIKKwkjZGVmaW5lIG1tSFBENF9EQ19IUERfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MThCQQorCSNkZWZpbmUgbW1IUEQ1X0RDX0hQRF9DT05UUk9MICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgxOEMyCisjZW5kaWYKKworI2RlZmluZSBEQ0UxMV9ESUdfRkVfQ05UTCAw eDRhMDAKKyNkZWZpbmUgRENFMTFfRElHX0JFX0NOVEwgMHg0YTQ3CisjZGVmaW5lIERDRTExX0RQ X1NFQyAweDRhYzMKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkY2UxMTBfdGltaW5nX2dlbmVyYXRv cl9vZmZzZXRzIGRjZTYwX3RnX29mZnNldHNbXSA9IHsKKwkJeworCQkJLmNydGMgPSAobW1DUlRD MF9DUlRDX0NPTlRST0wgLSBtbUNSVENfQ09OVFJPTCksCisJCQkuZGNwID0gIChtbUdSUEhfQ09O VFJPTCAtIG1tR1JQSF9DT05UUk9MKSwKKwkJCS5kbWlmID0gKG1tRE1JRl9QRzBfRFBHX1dBVEVS TUFSS19NQVNLX0NPTlRST0wKKwkJCQkJLSBtbURQR19XQVRFUk1BUktfTUFTS19DT05UUk9MKSwK KwkJfSwKKwkJeworCQkJLmNydGMgPSAobW1DUlRDMV9DUlRDX0NPTlRST0wgLSBtbUNSVENfQ09O VFJPTCksCisJCQkuZGNwID0gKG1tRENQMV9HUlBIX0NPTlRST0wgLSBtbUdSUEhfQ09OVFJPTCks CisJCQkuZG1pZiA9IChtbURNSUZfUEcxX0RQR19XQVRFUk1BUktfTUFTS19DT05UUk9MCisJCQkJ CS0gbW1EUEdfV0FURVJNQVJLX01BU0tfQ09OVFJPTCksCisJCX0sCisJCXsKKwkJCS5jcnRjID0g KG1tQ1JUQzJfQ1JUQ19DT05UUk9MIC0gbW1DUlRDX0NPTlRST0wpLAorCQkJLmRjcCA9IChtbURD UDJfR1JQSF9DT05UUk9MIC0gbW1HUlBIX0NPTlRST0wpLAorCQkJLmRtaWYgPSAobW1ETUlGX1BH Ml9EUEdfV0FURVJNQVJLX01BU0tfQ09OVFJPTAorCQkJCQktIG1tRFBHX1dBVEVSTUFSS19NQVNL X0NPTlRST0wpLAorCQl9LAorCQl7CisJCQkuY3J0YyA9IChtbUNSVEMzX0NSVENfQ09OVFJPTCAt IG1tQ1JUQ19DT05UUk9MKSwKKwkJCS5kY3AgPSAobW1EQ1AzX0dSUEhfQ09OVFJPTCAtIG1tR1JQ SF9DT05UUk9MKSwKKwkJCS5kbWlmID0gKG1tRE1JRl9QRzNfRFBHX1dBVEVSTUFSS19NQVNLX0NP TlRST0wKKwkJCQkJLSBtbURQR19XQVRFUk1BUktfTUFTS19DT05UUk9MKSwKKwkJfSwKKwkJewor CQkJLmNydGMgPSAobW1DUlRDNF9DUlRDX0NPTlRST0wgLSBtbUNSVENfQ09OVFJPTCksCisJCQku ZGNwID0gKG1tRENQNF9HUlBIX0NPTlRST0wgLSBtbUdSUEhfQ09OVFJPTCksCisJCQkuZG1pZiA9 IChtbURNSUZfUEc0X0RQR19XQVRFUk1BUktfTUFTS19DT05UUk9MCisJCQkJCS0gbW1EUEdfV0FU RVJNQVJLX01BU0tfQ09OVFJPTCksCisJCX0sCisJCXsKKwkJCS5jcnRjID0gKG1tQ1JUQzVfQ1JU Q19DT05UUk9MIC0gbW1DUlRDX0NPTlRST0wpLAorCQkJLmRjcCA9IChtbURDUDVfR1JQSF9DT05U Uk9MIC0gbW1HUlBIX0NPTlRST0wpLAorCQkJLmRtaWYgPSAobW1ETUlGX1BHNV9EUEdfV0FURVJN QVJLX01BU0tfQ09OVFJPTAorCQkJCQktIG1tRFBHX1dBVEVSTUFSS19NQVNLX0NPTlRST0wpLAor CQl9Cit9OworCisvKiBzZXQgcmVnaXN0ZXIgb2Zmc2V0ICovCisjZGVmaW5lIFNSKHJlZ19uYW1l KVwKKwkucmVnX25hbWUgPSBtbSAjIyByZWdfbmFtZQorCisvKiBzZXQgcmVnaXN0ZXIgb2Zmc2V0 IHdpdGggaW5zdGFuY2UgKi8KKyNkZWZpbmUgU1JJKHJlZ19uYW1lLCBibG9jaywgaWQpXAorCS5y ZWdfbmFtZSA9IG1tICMjIGJsb2NrICMjIGlkICMjIF8gIyMgcmVnX25hbWUKKworCitzdGF0aWMg Y29uc3Qgc3RydWN0IGNsa19tZ3JfcmVnaXN0ZXJzIGRpc3BfY2xrX3JlZ3MgPSB7CisJCUNMS19D T01NT05fUkVHX0xJU1RfRENFX0JBU0UoKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtf bWdyX3NoaWZ0IGRpc3BfY2xrX3NoaWZ0ID0geworCQlDTEtfQ09NTU9OX01BU0tfU0hfTElTVF9E Q0VfQ09NTU9OX0JBU0UoX19TSElGVCkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX21n cl9tYXNrIGRpc3BfY2xrX21hc2sgPSB7CisJCUNMS19DT01NT05fTUFTS19TSF9MSVNUX0RDRV9D T01NT05fQkFTRShfTUFTSykKK307CisKKyNkZWZpbmUgaXBwX3JlZ3MoaWQpXAorW2lkXSA9IHtc CisJCUlQUF9DT01NT05fUkVHX0xJU1RfRENFX0JBU0UoaWQpXAorfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRjZV9pcHBfcmVnaXN0ZXJzIGlwcF9yZWdzW10gPSB7CisJCWlwcF9yZWdzKDApLAor CQlpcHBfcmVncygxKSwKKwkJaXBwX3JlZ3MoMiksCisJCWlwcF9yZWdzKDMpLAorCQlpcHBfcmVn cyg0KSwKKwkJaXBwX3JlZ3MoNSkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNlX2lwcF9z aGlmdCBpcHBfc2hpZnQgPSB7CisJCUlQUF9DT01NT05fTUFTS19TSF9MSVNUX0RDRV9DT01NT05f QkFTRShfX1NISUZUKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkY2VfaXBwX21hc2sgaXBw X21hc2sgPSB7CisJCUlQUF9DT01NT05fTUFTS19TSF9MSVNUX0RDRV9DT01NT05fQkFTRShfTUFT SykKK307CisKKyNkZWZpbmUgdHJhbnNmb3JtX3JlZ3MoaWQpXAorW2lkXSA9IHtcCisJCVhGTV9D T01NT05fUkVHX0xJU1RfRENFODAoaWQpXAorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRjZV90 cmFuc2Zvcm1fcmVnaXN0ZXJzIHhmbV9yZWdzW10gPSB7CisJCXRyYW5zZm9ybV9yZWdzKDApLAor CQl0cmFuc2Zvcm1fcmVncygxKSwKKwkJdHJhbnNmb3JtX3JlZ3MoMiksCisJCXRyYW5zZm9ybV9y ZWdzKDMpLAorCQl0cmFuc2Zvcm1fcmVncyg0KSwKKwkJdHJhbnNmb3JtX3JlZ3MoNSkKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNlX3RyYW5zZm9ybV9zaGlmdCB4Zm1fc2hpZnQgPSB7CisJ CVhGTV9DT01NT05fTUFTS19TSF9MSVNUX0RDRTgwKF9fU0hJRlQpCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGRjZV90cmFuc2Zvcm1fbWFzayB4Zm1fbWFzayA9IHsKKwkJWEZNX0NPTU1PTl9N QVNLX1NIX0xJU1RfRENFODAoX01BU0spCit9OworCisjZGVmaW5lIGF1eF9yZWdzKGlkKVwKK1tp ZF0gPSB7XAorCUFVWF9SRUdfTElTVChpZClcCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNl MTEwX2xpbmtfZW5jX2F1eF9yZWdpc3RlcnMgbGlua19lbmNfYXV4X3JlZ3NbXSA9IHsKKwlhdXhf cmVncygwKSwKKwlhdXhfcmVncygxKSwKKwlhdXhfcmVncygyKSwKKwlhdXhfcmVncygzKSwKKwlh dXhfcmVncyg0KSwKKwlhdXhfcmVncyg1KQorfTsKKworI2RlZmluZSBocGRfcmVncyhpZClcCitb aWRdID0ge1wKKwlIUERfUkVHX0xJU1QoaWQpXAorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRj ZTExMF9saW5rX2VuY19ocGRfcmVnaXN0ZXJzIGxpbmtfZW5jX2hwZF9yZWdzW10gPSB7CisJCWhw ZF9yZWdzKDApLAorCQlocGRfcmVncygxKSwKKwkJaHBkX3JlZ3MoMiksCisJCWhwZF9yZWdzKDMp LAorCQlocGRfcmVncyg0KSwKKwkJaHBkX3JlZ3MoNSkKK307CisKKyNkZWZpbmUgbGlua19yZWdz KGlkKVwKK1tpZF0gPSB7XAorCUxFX0RDRTgwX1JFR19MSVNUKGlkKVwKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBkY2UxMTBfbGlua19lbmNfcmVnaXN0ZXJzIGxpbmtfZW5jX3JlZ3NbXSA9IHsK KwlsaW5rX3JlZ3MoMCksCisJbGlua19yZWdzKDEpLAorCWxpbmtfcmVncygyKSwKKwlsaW5rX3Jl Z3MoMyksCisJbGlua19yZWdzKDQpLAorCWxpbmtfcmVncyg1KSwKKwlsaW5rX3JlZ3MoNiksCit9 OworCisjZGVmaW5lIHN0cmVhbV9lbmNfcmVncyhpZClcCitbaWRdID0ge1wKKwlTRV9DT01NT05f UkVHX0xJU1RfRENFX0JBU0UoaWQpLFwKKwkuQUZNVF9DTlRMID0gMCxcCit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZGNlMTEwX3N0cmVhbV9lbmNfcmVnaXN0ZXJzIHN0cmVhbV9lbmNfcmVnc1td ID0geworCXN0cmVhbV9lbmNfcmVncygwKSwKKwlzdHJlYW1fZW5jX3JlZ3MoMSksCisJc3RyZWFt X2VuY19yZWdzKDIpLAorCXN0cmVhbV9lbmNfcmVncygzKSwKKwlzdHJlYW1fZW5jX3JlZ3MoNCks CisJc3RyZWFtX2VuY19yZWdzKDUpLAorCXN0cmVhbV9lbmNfcmVncyg2KQorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkY2Vfc3RyZWFtX2VuY29kZXJfc2hpZnQgc2Vfc2hpZnQgPSB7CisJCVNF X0NPTU1PTl9NQVNLX1NIX0xJU1RfRENFODBfMTAwKF9fU0hJRlQpCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGRjZV9zdHJlYW1fZW5jb2Rlcl9tYXNrIHNlX21hc2sgPSB7CisJCVNFX0NPTU1P Tl9NQVNLX1NIX0xJU1RfRENFODBfMTAwKF9NQVNLKQorfTsKKworI2RlZmluZSBvcHBfcmVncyhp ZClcCitbaWRdID0ge1wKKwlPUFBfRENFXzgwX1JFR19MSVNUKGlkKSxcCit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZGNlX29wcF9yZWdpc3RlcnMgb3BwX3JlZ3NbXSA9IHsKKwlvcHBfcmVncygw KSwKKwlvcHBfcmVncygxKSwKKwlvcHBfcmVncygyKSwKKwlvcHBfcmVncygzKSwKKwlvcHBfcmVn cyg0KSwKKwlvcHBfcmVncyg1KQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkY2Vfb3BwX3No aWZ0IG9wcF9zaGlmdCA9IHsKKwlPUFBfQ09NTU9OX01BU0tfU0hfTElTVF9EQ0VfODAoX19TSElG VCkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNlX29wcF9tYXNrIG9wcF9tYXNrID0gewor CU9QUF9DT01NT05fTUFTS19TSF9MSVNUX0RDRV84MChfTUFTSykKK307CisKKyNkZWZpbmUgYXV4 X2VuZ2luZV9yZWdzKGlkKVwKK1tpZF0gPSB7XAorCUFVWF9DT01NT05fUkVHX0xJU1QoaWQpLCBc CisJLkFVWF9SRVNFVF9NQVNLID0gMCBcCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNlMTEw X2F1eF9yZWdpc3RlcnMgYXV4X2VuZ2luZV9yZWdzW10gPSB7CisJCWF1eF9lbmdpbmVfcmVncygw KSwKKwkJYXV4X2VuZ2luZV9yZWdzKDEpLAorCQlhdXhfZW5naW5lX3JlZ3MoMiksCisJCWF1eF9l bmdpbmVfcmVncygzKSwKKwkJYXV4X2VuZ2luZV9yZWdzKDQpLAorCQlhdXhfZW5naW5lX3JlZ3Mo NSkKK307CisKKyNkZWZpbmUgYXVkaW9fcmVncyhpZClcCitbaWRdID0ge1wKKwlBVURfQ09NTU9O X1JFR19MSVNUKGlkKVwKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkY2VfYXVkaW9fcmVnaXN0 ZXJzIGF1ZGlvX3JlZ3NbXSA9IHsKKwlhdWRpb19yZWdzKDApLAorCWF1ZGlvX3JlZ3MoMSksCisJ YXVkaW9fcmVncygyKSwKKwlhdWRpb19yZWdzKDMpLAorCWF1ZGlvX3JlZ3MoNCksCisJYXVkaW9f cmVncyg1KSwKKwlhdWRpb19yZWdzKDYpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkY2Vf YXVkaW9fc2hpZnQgYXVkaW9fc2hpZnQgPSB7CisJCUFVRF9DT01NT05fTUFTS19TSF9MSVNUKF9f U0hJRlQpCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRjZV9hZHVpb19tYXNrIGF1ZGlvX21h c2sgPSB7CisJCUFVRF9DT01NT05fTUFTS19TSF9MSVNUKF9NQVNLKQorfTsKKworI2RlZmluZSBj bGtfc3JjX3JlZ3MoaWQpXAorW2lkXSA9IHtcCisJQ1NfQ09NTU9OX1JFR19MSVNUX0RDRV84MChp ZCksXAorfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNlMTEwX2Nsa19zcmNfcmVncyBjbGtf c3JjX3JlZ3NbXSA9IHsKKwljbGtfc3JjX3JlZ3MoMCksCisJY2xrX3NyY19yZWdzKDEpLAorCWNs a19zcmNfcmVncygyKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkY2UxMTBfY2xrX3NyY19z aGlmdCBjc19zaGlmdCA9IHsKKwkJQ1NfQ09NTU9OX01BU0tfU0hfTElTVF9EQ0VfQ09NTU9OX0JB U0UoX19TSElGVCkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNlMTEwX2Nsa19zcmNfbWFz ayBjc19tYXNrID0geworCQlDU19DT01NT05fTUFTS19TSF9MSVNUX0RDRV9DT01NT05fQkFTRShf TUFTSykKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmlvc19yZWdpc3RlcnMgYmlvc19yZWdz ID0geworCS5CSU9TX1NDUkFUQ0hfNiA9IG1tQklPU19TQ1JBVENIXzYKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgcmVzb3VyY2VfY2FwcyByZXNfY2FwID0geworCQkubnVtX3RpbWluZ19nZW5l cmF0b3IgPSA2LAorCQkubnVtX2F1ZGlvID0gNiwKKwkJLm51bV9zdHJlYW1fZW5jb2RlciA9IDYs CisJCS5udW1fcGxsID0gMiwKKwkJLm51bV9kZGMgPSA2LAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCByZXNvdXJjZV9jYXBzIHJlc19jYXBfNjEgPSB7CisJCS5udW1fdGltaW5nX2dlbmVyYXRv ciA9IDQsCisJCS5udW1fYXVkaW8gPSA2LAorCQkubnVtX3N0cmVhbV9lbmNvZGVyID0gNiwKKwkJ Lm51bV9wbGwgPSAyLAorCQkubnVtX2RkYyA9IDYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IHJlc291cmNlX2NhcHMgcmVzX2NhcF82NCA9IHsKKwkJLm51bV90aW1pbmdfZ2VuZXJhdG9yID0g MiwKKwkJLm51bV9hdWRpbyA9IDIsCisJCS5udW1fc3RyZWFtX2VuY29kZXIgPSAyLAorCQkubnVt X3BsbCA9IDIsCisJCS5udW1fZGRjID0gMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNl X2RtY3VfcmVnaXN0ZXJzIGRtY3VfcmVncyA9IHsKKwkJRE1DVV9EQ0U4MF9SRUdfTElTVCgpCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRjZV9kbWN1X3NoaWZ0IGRtY3Vfc2hpZnQgPSB7CisJ CURNQ1VfTUFTS19TSF9MSVNUX0RDRTgwKF9fU0hJRlQpCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRjZV9kbWN1X21hc2sgZG1jdV9tYXNrID0geworCQlETUNVX01BU0tfU0hfTElTVF9EQ0U4 MChfTUFTSykKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGRjZV9hYm1fcmVnaXN0ZXJzIGFibV9y ZWdzID0geworCQlBQk1fRENFMTEwX0NPTU1PTl9SRUdfTElTVCgpCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGRjZV9hYm1fc2hpZnQgYWJtX3NoaWZ0ID0geworCQlBQk1fTUFTS19TSF9MSVNU X0RDRTExMChfX1NISUZUKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkY2VfYWJtX21hc2sg YWJtX21hc2sgPSB7CisJCUFCTV9NQVNLX1NIX0xJU1RfRENFMTEwKF9NQVNLKQorfTsKKworI2Rl ZmluZSBDVFggIGN0eAorI2RlZmluZSBSRUcocmVnKSBtbSAjIyByZWcKKworI2lmbmRlZiBtbUND X0RDX0hETUlfU1RSQVBTCisjZGVmaW5lIG1tQ0NfRENfSERNSV9TVFJBUFMgMHgxOTE4CisjZGVm aW5lIENDX0RDX0hETUlfU1RSQVBTX19IRE1JX0RJU0FCTEVfTUFTSyAweDQwCisjZGVmaW5lIEND X0RDX0hETUlfU1RSQVBTX19IRE1JX0RJU0FCTEVfX1NISUZUIDB4NgorI2RlZmluZSBDQ19EQ19I RE1JX1NUUkFQU19fQVVESU9fU1RSRUFNX05VTUJFUl9NQVNLIDB4NzAwCisjZGVmaW5lIENDX0RD X0hETUlfU1RSQVBTX19BVURJT19TVFJFQU1fTlVNQkVSX19TSElGVCAweDgKKyNlbmRpZgorCitz dGF0aWMgdm9pZCByZWFkX2RjZV9zdHJhcHMoCisJc3RydWN0IGRjX2NvbnRleHQgKmN0eCwKKwlz dHJ1Y3QgcmVzb3VyY2Vfc3RyYXBzICpzdHJhcHMpCit7CisJUkVHX0dFVF8yKENDX0RDX0hETUlf U1RSQVBTLAorCQkJSERNSV9ESVNBQkxFLCAmc3RyYXBzLT5oZG1pX2Rpc2FibGUsCisJCQlBVURJ T19TVFJFQU1fTlVNQkVSLCAmc3RyYXBzLT5hdWRpb19zdHJlYW1fbnVtYmVyKTsKKworCVJFR19H RVQoRENfUElOU1RSQVBTLCBEQ19QSU5TVFJBUFNfQVVESU8sICZzdHJhcHMtPmRjX3BpbnN0cmFw c19hdWRpbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW8gKmNyZWF0ZV9hdWRpbygKKwkJc3Ry dWN0IGRjX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgaW50IGluc3QpCit7CisJcmV0dXJuIGRjZV9h dWRpb19jcmVhdGUoY3R4LCBpbnN0LAorCQkJJmF1ZGlvX3JlZ3NbaW5zdF0sICZhdWRpb19zaGlm dCwgJmF1ZGlvX21hc2spOworfQorCitzdGF0aWMgc3RydWN0IHRpbWluZ19nZW5lcmF0b3IgKmRj ZTYwX3RpbWluZ19nZW5lcmF0b3JfY3JlYXRlKAorCQlzdHJ1Y3QgZGNfY29udGV4dCAqY3R4LAor CQl1aW50MzJfdCBpbnN0YW5jZSwKKwkJY29uc3Qgc3RydWN0IGRjZTExMF90aW1pbmdfZ2VuZXJh dG9yX29mZnNldHMgKm9mZnNldHMpCit7CisJc3RydWN0IGRjZTExMF90aW1pbmdfZ2VuZXJhdG9y ICp0ZzExMCA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkY2UxMTBfdGltaW5nX2dlbmVyYXRv ciksIEdGUF9LRVJORUwpOworCisJaWYgKCF0ZzExMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkY2U2 MF90aW1pbmdfZ2VuZXJhdG9yX2NvbnN0cnVjdCh0ZzExMCwgY3R4LCBpbnN0YW5jZSwgb2Zmc2V0 cyk7CisJcmV0dXJuICZ0ZzExMC0+YmFzZTsKK30KKworc3RhdGljIHN0cnVjdCBvdXRwdXRfcGl4 ZWxfcHJvY2Vzc29yICpkY2U2MF9vcHBfY3JlYXRlKAorCXN0cnVjdCBkY19jb250ZXh0ICpjdHgs CisJdWludDMyX3QgaW5zdCkKK3sKKwlzdHJ1Y3QgZGNlMTEwX29wcCAqb3BwID0KKwkJa3phbGxv YyhzaXplb2Yoc3RydWN0IGRjZTExMF9vcHApLCBHRlBfS0VSTkVMKTsKKworCWlmICghb3BwKQor CQlyZXR1cm4gTlVMTDsKKworCWRjZTExMF9vcHBfY29uc3RydWN0KG9wcCwKKwkJCSAgICAgY3R4 LCBpbnN0LCAmb3BwX3JlZ3NbaW5zdF0sICZvcHBfc2hpZnQsICZvcHBfbWFzayk7CisJcmV0dXJu ICZvcHAtPmJhc2U7Cit9CisKK3N0cnVjdCBhdXhfZW5naW5lICpkY2U2MF9hdXhfZW5naW5lX2Ny ZWF0ZSgKKwlzdHJ1Y3QgZGNfY29udGV4dCAqY3R4LAorCXVpbnQzMl90IGluc3QpCit7CisJc3Ry dWN0IGF1eF9lbmdpbmVfZGNlMTEwICphdXhfZW5naW5lID0KKwkJa3phbGxvYyhzaXplb2Yoc3Ry dWN0IGF1eF9lbmdpbmVfZGNlMTEwKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWF1eF9lbmdpbmUp CisJCXJldHVybiBOVUxMOworCisJZGNlMTEwX2F1eF9lbmdpbmVfY29uc3RydWN0KGF1eF9lbmdp bmUsIGN0eCwgaW5zdCwKKwkJCQkgICAgU1dfQVVYX1RJTUVPVVRfUEVSSU9EX01VTFRJUExJRVIg KiBBVVhfVElNRU9VVF9QRVJJT0QsCisJCQkJICAgICZhdXhfZW5naW5lX3JlZ3NbaW5zdF0pOwor CisJcmV0dXJuICZhdXhfZW5naW5lLT5iYXNlOworfQorI2RlZmluZSBpMmNfaW5zdF9yZWdzKGlk KSB7IEkyQ19IV19FTkdJTkVfQ09NTU9OX1JFR19MSVNUKGlkKSB9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZGNlX2kyY19yZWdpc3RlcnMgaTJjX2h3X3JlZ3NbXSA9IHsKKwkJaTJjX2luc3RfcmVn cygxKSwKKwkJaTJjX2luc3RfcmVncygyKSwKKwkJaTJjX2luc3RfcmVncygzKSwKKwkJaTJjX2lu c3RfcmVncyg0KSwKKwkJaTJjX2luc3RfcmVncyg1KSwKKwkJaTJjX2luc3RfcmVncyg2KSwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNlX2kyY19zaGlmdCBpMmNfc2hpZnRzID0geworCQlJ MkNfQ09NTU9OX01BU0tfU0hfTElTVF9EQ0VfQ09NTU9OX0JBU0UoX19TSElGVCkKK307CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZGNlX2kyY19tYXNrIGkyY19tYXNrcyA9IHsKKwkJSTJDX0NPTU1P Tl9NQVNLX1NIX0xJU1RfRENFX0NPTU1PTl9CQVNFKF9NQVNLKQorfTsKKworc3RydWN0IGRjZV9p MmNfaHcgKmRjZTYwX2kyY19od19jcmVhdGUoCisJc3RydWN0IGRjX2NvbnRleHQgKmN0eCwKKwl1 aW50MzJfdCBpbnN0KQoreworCXN0cnVjdCBkY2VfaTJjX2h3ICpkY2VfaTJjX2h3ID0KKwkJa3ph bGxvYyhzaXplb2Yoc3RydWN0IGRjZV9pMmNfaHcpLCBHRlBfS0VSTkVMKTsKKworCWlmICghZGNl X2kyY19odykKKwkJcmV0dXJuIE5VTEw7CisKKwlkY2VfaTJjX2h3X2NvbnN0cnVjdChkY2VfaTJj X2h3LCBjdHgsIGluc3QsCisJCQkJICAgICZpMmNfaHdfcmVnc1tpbnN0XSwgJmkyY19zaGlmdHMs ICZpMmNfbWFza3MpOworCisJcmV0dXJuIGRjZV9pMmNfaHc7Cit9CisKK3N0cnVjdCBkY2VfaTJj X3N3ICpkY2U2MF9pMmNfc3dfY3JlYXRlKAorCXN0cnVjdCBkY19jb250ZXh0ICpjdHgpCit7CisJ c3RydWN0IGRjZV9pMmNfc3cgKmRjZV9pMmNfc3cgPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3Qg ZGNlX2kyY19zdyksIEdGUF9LRVJORUwpOworCisJaWYgKCFkY2VfaTJjX3N3KQorCQlyZXR1cm4g TlVMTDsKKworCWRjZV9pMmNfc3dfY29uc3RydWN0KGRjZV9pMmNfc3csIGN0eCk7CisKKwlyZXR1 cm4gZGNlX2kyY19zdzsKK30KK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2VuY29kZXIgKmRjZTYwX3N0 cmVhbV9lbmNvZGVyX2NyZWF0ZSgKKwllbnVtIGVuZ2luZV9pZCBlbmdfaWQsCisJc3RydWN0IGRj X2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgZGNlMTEwX3N0cmVhbV9lbmNvZGVyICplbmMxMTAg PQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgZGNlMTEwX3N0cmVhbV9lbmNvZGVyKSwgR0ZQX0tF Uk5FTCk7CisKKwlpZiAoIWVuYzExMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkY2UxMTBfc3RyZWFt X2VuY29kZXJfY29uc3RydWN0KGVuYzExMCwgY3R4LCBjdHgtPmRjX2Jpb3MsIGVuZ19pZCwKKwkJ CQkJJnN0cmVhbV9lbmNfcmVnc1tlbmdfaWRdLAorCQkJCQkmc2Vfc2hpZnQsICZzZV9tYXNrKTsK KwlyZXR1cm4gJmVuYzExMC0+YmFzZTsKK30KKworI2RlZmluZSBTUklJKHJlZ19uYW1lLCBibG9j aywgaWQpXAorCS5yZWdfbmFtZVtpZF0gPSBtbSAjIyBibG9jayAjIyBpZCAjIyBfICMjIHJlZ19u YW1lCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNlX2h3c2VxX3JlZ2lzdGVycyBod3NlcV9yZWcg PSB7CisJCUhXU0VRX0RDRThfUkVHX0xJU1QoKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBk Y2VfaHdzZXFfc2hpZnQgaHdzZXFfc2hpZnQgPSB7CisJCUhXU0VRX0RDRThfTUFTS19TSF9MSVNU KF9fU0hJRlQpCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRjZV9od3NlcV9tYXNrIGh3c2Vx X21hc2sgPSB7CisJCUhXU0VRX0RDRThfTUFTS19TSF9MSVNUKF9NQVNLKQorfTsKKworc3RhdGlj IHN0cnVjdCBkY2VfaHdzZXEgKmRjZTYwX2h3c2VxX2NyZWF0ZSgKKwlzdHJ1Y3QgZGNfY29udGV4 dCAqY3R4KQoreworCXN0cnVjdCBkY2VfaHdzZXEgKmh3cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVj dCBkY2VfaHdzZXEpLCBHRlBfS0VSTkVMKTsKKworCWlmIChod3MpIHsKKwkJaHdzLT5jdHggPSBj dHg7CisJCWh3cy0+cmVncyA9ICZod3NlcV9yZWc7CisJCWh3cy0+c2hpZnRzID0gJmh3c2VxX3No aWZ0OworCQlod3MtPm1hc2tzID0gJmh3c2VxX21hc2s7CisJfQorCXJldHVybiBod3M7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2VfY3JlYXRlX2Z1bmNzIHJlc19jcmVhdGVfZnVu Y3MgPSB7CisJLnJlYWRfZGNlX3N0cmFwcyA9IHJlYWRfZGNlX3N0cmFwcywKKwkuY3JlYXRlX2F1 ZGlvID0gY3JlYXRlX2F1ZGlvLAorCS5jcmVhdGVfc3RyZWFtX2VuY29kZXIgPSBkY2U2MF9zdHJl YW1fZW5jb2Rlcl9jcmVhdGUsCisJLmNyZWF0ZV9od3NlcSA9IGRjZTYwX2h3c2VxX2NyZWF0ZSwK K307CisKKyNkZWZpbmUgbWlfaW5zdF9yZWdzKGlkKSB7IFwKKwlNSV9EQ0U4X1JFR19MSVNUKGlk KSwgXAorCS5NQ19IVUJfUkRSRVFfRE1JRl9MSU1JVCA9IG1tTUNfSFVCX1JEUkVRX0RNSUZfTElN SVQgXAorfQorc3RhdGljIGNvbnN0IHN0cnVjdCBkY2VfbWVtX2lucHV0X3JlZ2lzdGVycyBtaV9y ZWdzW10gPSB7CisJCW1pX2luc3RfcmVncygwKSwKKwkJbWlfaW5zdF9yZWdzKDEpLAorCQltaV9p bnN0X3JlZ3MoMiksCisJCW1pX2luc3RfcmVncygzKSwKKwkJbWlfaW5zdF9yZWdzKDQpLAorCQlt aV9pbnN0X3JlZ3MoNSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRjZV9tZW1faW5wdXRf c2hpZnQgbWlfc2hpZnRzID0geworCQlNSV9EQ0U4X01BU0tfU0hfTElTVChfX1NISUZUKSwKKwkJ LkVOQUJMRSA9IE1DX0hVQl9SRFJFUV9ETUlGX0xJTUlUX19FTkFCTEVfX1NISUZUCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGRjZV9tZW1faW5wdXRfbWFzayBtaV9tYXNrcyA9IHsKKwkJTUlf RENFOF9NQVNLX1NIX0xJU1QoX01BU0spLAorCQkuRU5BQkxFID0gTUNfSFVCX1JEUkVRX0RNSUZf TElNSVRfX0VOQUJMRV9NQVNLCit9OworCitzdGF0aWMgc3RydWN0IG1lbV9pbnB1dCAqZGNlNjBf bWVtX2lucHV0X2NyZWF0ZSgKKwlzdHJ1Y3QgZGNfY29udGV4dCAqY3R4LAorCXVpbnQzMl90IGlu c3QpCit7CisJc3RydWN0IGRjZV9tZW1faW5wdXQgKmRjZV9taSA9IGt6YWxsb2Moc2l6ZW9mKHN0 cnVjdCBkY2VfbWVtX2lucHV0KSwKKwkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCisJaWYgKCFk Y2VfbWkpIHsKKwkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ ZGNlX21lbV9pbnB1dF9jb25zdHJ1Y3QoZGNlX21pLCBjdHgsIGluc3QsICZtaV9yZWdzW2luc3Rd LCAmbWlfc2hpZnRzLCAmbWlfbWFza3MpOworCWRjZV9taS0+d2Euc2luZ2xlX2hlYWRfcmRyZXFf ZG1pZl9saW1pdCA9IDI7CisJcmV0dXJuICZkY2VfbWktPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lk IGRjZTYwX3RyYW5zZm9ybV9kZXN0cm95KHN0cnVjdCB0cmFuc2Zvcm0gKip4Zm0pCit7CisJa2Zy ZWUoVE9fRENFX1RSQU5TRk9STSgqeGZtKSk7CisJKnhmbSA9IE5VTEw7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgdHJhbnNmb3JtICpkY2U2MF90cmFuc2Zvcm1fY3JlYXRlKAorCXN0cnVjdCBkY19jb250 ZXh0ICpjdHgsCisJdWludDMyX3QgaW5zdCkKK3sKKwlzdHJ1Y3QgZGNlX3RyYW5zZm9ybSAqdHJh bnNmb3JtID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGRjZV90cmFuc2Zvcm0pLCBHRlBfS0VS TkVMKTsKKworCWlmICghdHJhbnNmb3JtKQorCQlyZXR1cm4gTlVMTDsKKworCWRjZV90cmFuc2Zv cm1fY29uc3RydWN0KHRyYW5zZm9ybSwgY3R4LCBpbnN0LAorCQkJCSZ4Zm1fcmVnc1tpbnN0XSwg JnhmbV9zaGlmdCwgJnhmbV9tYXNrKTsKKwl0cmFuc2Zvcm0tPnByZXNjYWxlcl9vbiA9IGZhbHNl OworCXJldHVybiAmdHJhbnNmb3JtLT5iYXNlOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGVu Y29kZXJfZmVhdHVyZV9zdXBwb3J0IGxpbmtfZW5jX2ZlYXR1cmUgPSB7CisJCS5tYXhfaGRtaV9k ZWVwX2NvbG9yID0gQ09MT1JfREVQVEhfMTIxMjEyLAorCQkubWF4X2hkbWlfcGl4ZWxfY2xvY2sg PSAyOTcwMDAsCisJCS5mbGFncy5iaXRzLklTX0hCUjJfQ0FQQUJMRSA9IHRydWUsCisJCS5mbGFn cy5iaXRzLklTX1RQUzNfQ0FQQUJMRSA9IHRydWUKK307CisKK3N0cnVjdCBsaW5rX2VuY29kZXIg KmRjZTYwX2xpbmtfZW5jb2Rlcl9jcmVhdGUoCisJY29uc3Qgc3RydWN0IGVuY29kZXJfaW5pdF9k YXRhICplbmNfaW5pdF9kYXRhKQoreworCXN0cnVjdCBkY2UxMTBfbGlua19lbmNvZGVyICplbmMx MTAgPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgZGNlMTEwX2xpbmtfZW5jb2RlciksIEdGUF9L RVJORUwpOworCisJaWYgKCFlbmMxMTApCisJCXJldHVybiBOVUxMOworCisJZGNlMTEwX2xpbmtf ZW5jb2Rlcl9jb25zdHJ1Y3QoZW5jMTEwLAorCQkJCSAgICAgIGVuY19pbml0X2RhdGEsCisJCQkJ ICAgICAgJmxpbmtfZW5jX2ZlYXR1cmUsCisJCQkJICAgICAgJmxpbmtfZW5jX3JlZ3NbZW5jX2lu aXRfZGF0YS0+dHJhbnNtaXR0ZXJdLAorCQkJCSAgICAgICZsaW5rX2VuY19hdXhfcmVnc1tlbmNf aW5pdF9kYXRhLT5jaGFubmVsIC0gMV0sCisJCQkJICAgICAgJmxpbmtfZW5jX2hwZF9yZWdzW2Vu Y19pbml0X2RhdGEtPmhwZF9zb3VyY2VdKTsKKwlyZXR1cm4gJmVuYzExMC0+YmFzZTsKK30KKwor c3RydWN0IGNsb2NrX3NvdXJjZSAqZGNlNjBfY2xvY2tfc291cmNlX2NyZWF0ZSgKKwlzdHJ1Y3Qg ZGNfY29udGV4dCAqY3R4LAorCXN0cnVjdCBkY19iaW9zICpiaW9zLAorCWVudW0gY2xvY2tfc291 cmNlX2lkIGlkLAorCWNvbnN0IHN0cnVjdCBkY2UxMTBfY2xrX3NyY19yZWdzICpyZWdzLAorCWJv b2wgZHBfY2xrX3NyYykKK3sKKwlzdHJ1Y3QgZGNlMTEwX2Nsa19zcmMgKmNsa19zcmMgPQorCQlr emFsbG9jKHNpemVvZihzdHJ1Y3QgZGNlMTEwX2Nsa19zcmMpLCBHRlBfS0VSTkVMKTsKKworCWlm ICghY2xrX3NyYykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZGNlMTEwX2Nsa19zcmNfY29uc3Ry dWN0KGNsa19zcmMsIGN0eCwgYmlvcywgaWQsCisJCQlyZWdzLCAmY3Nfc2hpZnQsICZjc19tYXNr KSkgeworCQljbGtfc3JjLT5iYXNlLmRwX2Nsa19zcmMgPSBkcF9jbGtfc3JjOworCQlyZXR1cm4g JmNsa19zcmMtPmJhc2U7CisJfQorCisJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwlyZXR1cm4gTlVM TDsKK30KKwordm9pZCBkY2U2MF9jbG9ja19zb3VyY2VfZGVzdHJveShzdHJ1Y3QgY2xvY2tfc291 cmNlICoqY2xrX3NyYykKK3sKKwlrZnJlZShUT19EQ0UxMTBfQ0xLX1NSQygqY2xrX3NyYykpOwor CSpjbGtfc3JjID0gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBpbnB1dF9waXhlbF9wcm9jZXNz b3IgKmRjZTYwX2lwcF9jcmVhdGUoCisJc3RydWN0IGRjX2NvbnRleHQgKmN0eCwgdWludDMyX3Qg aW5zdCkKK3sKKwlzdHJ1Y3QgZGNlX2lwcCAqaXBwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRj ZV9pcHApLCBHRlBfS0VSTkVMKTsKKworCWlmICghaXBwKSB7CisJCUJSRUFLX1RPX0RFQlVHR0VS KCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWRjZV9pcHBfY29uc3RydWN0KGlwcCwgY3R4LCBp bnN0LAorCQkJJmlwcF9yZWdzW2luc3RdLCAmaXBwX3NoaWZ0LCAmaXBwX21hc2spOworCXJldHVy biAmaXBwLT5iYXNlOworfQorCitzdGF0aWMgdm9pZCBkZXN0cnVjdChzdHJ1Y3QgZGNlMTEwX3Jl c291cmNlX3Bvb2wgKnBvb2wpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgcG9vbC0+YmFzZS5waXBlX2NvdW50OyBpKyspIHsKKwkJaWYgKHBvb2wtPmJhc2Uub3Bwc1tp XSAhPSBOVUxMKQorCQkJZGNlMTEwX29wcF9kZXN0cm95KCZwb29sLT5iYXNlLm9wcHNbaV0pOwor CisJCWlmIChwb29sLT5iYXNlLnRyYW5zZm9ybXNbaV0gIT0gTlVMTCkKKwkJCWRjZTYwX3RyYW5z Zm9ybV9kZXN0cm95KCZwb29sLT5iYXNlLnRyYW5zZm9ybXNbaV0pOworCisJCWlmIChwb29sLT5i YXNlLmlwcHNbaV0gIT0gTlVMTCkKKwkJCWRjZV9pcHBfZGVzdHJveSgmcG9vbC0+YmFzZS5pcHBz W2ldKTsKKworCQlpZiAocG9vbC0+YmFzZS5taXNbaV0gIT0gTlVMTCkgeworCQkJa2ZyZWUoVE9f RENFX01FTV9JTlBVVChwb29sLT5iYXNlLm1pc1tpXSkpOworCQkJcG9vbC0+YmFzZS5taXNbaV0g PSBOVUxMOworCQl9CisKKwkJaWYgKHBvb2wtPmJhc2UudGltaW5nX2dlbmVyYXRvcnNbaV0gIT0g TlVMTCkJeworCQkJa2ZyZWUoRENFMTEwVEdfRlJPTV9URyhwb29sLT5iYXNlLnRpbWluZ19nZW5l cmF0b3JzW2ldKSk7CisJCQlwb29sLT5iYXNlLnRpbWluZ19nZW5lcmF0b3JzW2ldID0gTlVMTDsK KwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBwb29sLT5iYXNlLnJlc19jYXAtPm51bV9kZGM7 IGkrKykgeworCQlpZiAocG9vbC0+YmFzZS5lbmdpbmVzW2ldICE9IE5VTEwpCisJCQlkY2UxMTBf ZW5naW5lX2Rlc3Ryb3koJnBvb2wtPmJhc2UuZW5naW5lc1tpXSk7CisJCWlmIChwb29sLT5iYXNl Lmh3X2kyY3NbaV0gIT0gTlVMTCkgeworCQkJa2ZyZWUocG9vbC0+YmFzZS5od19pMmNzW2ldKTsK KwkJCXBvb2wtPmJhc2UuaHdfaTJjc1tpXSA9IE5VTEw7CisJCX0KKwkJaWYgKHBvb2wtPmJhc2Uu c3dfaTJjc1tpXSAhPSBOVUxMKSB7CisJCQlrZnJlZShwb29sLT5iYXNlLnN3X2kyY3NbaV0pOwor CQkJcG9vbC0+YmFzZS5zd19pMmNzW2ldID0gTlVMTDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7 IGkgPCBwb29sLT5iYXNlLnN0cmVhbV9lbmNfY291bnQ7IGkrKykgeworCQlpZiAocG9vbC0+YmFz ZS5zdHJlYW1fZW5jW2ldICE9IE5VTEwpCisJCQlrZnJlZShEQ0UxMTBTVFJFTkNfRlJPTV9TVFJF TkMocG9vbC0+YmFzZS5zdHJlYW1fZW5jW2ldKSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBv b2wtPmJhc2UuY2xrX3NyY19jb3VudDsgaSsrKSB7CisJCWlmIChwb29sLT5iYXNlLmNsb2NrX3Nv dXJjZXNbaV0gIT0gTlVMTCkgeworCQkJZGNlNjBfY2xvY2tfc291cmNlX2Rlc3Ryb3koJnBvb2wt PmJhc2UuY2xvY2tfc291cmNlc1tpXSk7CisJCX0KKwl9CisKKwlpZiAocG9vbC0+YmFzZS5hYm0g IT0gTlVMTCkKKwkJCWRjZV9hYm1fZGVzdHJveSgmcG9vbC0+YmFzZS5hYm0pOworCisJaWYgKHBv b2wtPmJhc2UuZG1jdSAhPSBOVUxMKQorCQkJZGNlX2RtY3VfZGVzdHJveSgmcG9vbC0+YmFzZS5k bWN1KTsKKworCWlmIChwb29sLT5iYXNlLmRwX2Nsb2NrX3NvdXJjZSAhPSBOVUxMKQorCQlkY2U2 MF9jbG9ja19zb3VyY2VfZGVzdHJveSgmcG9vbC0+YmFzZS5kcF9jbG9ja19zb3VyY2UpOworCisJ Zm9yIChpID0gMDsgaSA8IHBvb2wtPmJhc2UuYXVkaW9fY291bnQ7IGkrKykJeworCQlpZiAocG9v bC0+YmFzZS5hdWRpb3NbaV0gIT0gTlVMTCkgeworCQkJZGNlX2F1ZF9kZXN0cm95KCZwb29sLT5i YXNlLmF1ZGlvc1tpXSk7CisJCX0KKwl9CisKKwlpZiAocG9vbC0+YmFzZS5jbGtfbWdyICE9IE5V TEwpCisJCWRjZV9jbGtfbWdyX2Rlc3Ryb3koJnBvb2wtPmJhc2UuY2xrX21ncik7CisKKwlpZiAo cG9vbC0+YmFzZS5pcnFzICE9IE5VTEwpIHsKKwkJZGFsX2lycV9zZXJ2aWNlX2Rlc3Ryb3koJnBv b2wtPmJhc2UuaXJxcyk7CisJfQorfQorCitib29sIGRjZTYwX3ZhbGlkYXRlX2JhbmR3aWR0aCgK KwlzdHJ1Y3QgZGMgKmRjLAorCXN0cnVjdCBkY19zdGF0ZSAqY29udGV4dCkKK3sKKwkvKiBUT0RP IGltcGxlbWVudCB3aGVuIG5lZWRlZCBidXQgZm9yIG5vdyBoYXJkY29kZSBtYXggdmFsdWUqLwor CWNvbnRleHQtPmJ3LmRjZS5kaXNwY2xrX2toeiA9IDY4MTAwMDsKKwljb250ZXh0LT5idy5kY2Uu eWNsa19raHogPSAyNTAwMDAgKiBNRU1PUllfVFlQRV9NVUxUSVBMSUVSX0NaOworCisJcmV0dXJu IHRydWU7Cit9CisKK3N0YXRpYyBib29sIGRjZTYwX3ZhbGlkYXRlX3N1cmZhY2Vfc2V0cygKKwkJ c3RydWN0IGRjX3N0YXRlICpjb250ZXh0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8 IGNvbnRleHQtPnN0cmVhbV9jb3VudDsgaSsrKSB7CisJCWlmIChjb250ZXh0LT5zdHJlYW1fc3Rh dHVzW2ldLnBsYW5lX2NvdW50ID09IDApCisJCQljb250aW51ZTsKKworCQlpZiAoY29udGV4dC0+ c3RyZWFtX3N0YXR1c1tpXS5wbGFuZV9jb3VudCA+IDEpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJ aWYgKGNvbnRleHQtPnN0cmVhbV9zdGF0dXNbaV0ucGxhbmVfc3RhdGVzWzBdLT5mb3JtYXQKKwkJ CQk+PSBTVVJGQUNFX1BJWEVMX0ZPUk1BVF9WSURFT19CRUdJTikKKwkJCXJldHVybiBmYWxzZTsK Kwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworZW51bSBkY19zdGF0dXMgZGNlNjBfdmFsaWRhdGVf Z2xvYmFsKAorCQlzdHJ1Y3QgZGMgKmRjLAorCQlzdHJ1Y3QgZGNfc3RhdGUgKmNvbnRleHQpCit7 CisJaWYgKCFkY2U2MF92YWxpZGF0ZV9zdXJmYWNlX3NldHMoY29udGV4dCkpCisJCXJldHVybiBE Q19GQUlMX1NVUkZBQ0VfVkFMSURBVEU7CisKKwlyZXR1cm4gRENfT0s7Cit9CisKK3N0YXRpYyB2 b2lkIGRjZTYwX2Rlc3Ryb3lfcmVzb3VyY2VfcG9vbChzdHJ1Y3QgcmVzb3VyY2VfcG9vbCAqKnBv b2wpCit7CisJc3RydWN0IGRjZTExMF9yZXNvdXJjZV9wb29sICpkY2UxMTBfcG9vbCA9IFRPX0RD RTExMF9SRVNfUE9PTCgqcG9vbCk7CisKKwlkZXN0cnVjdChkY2UxMTBfcG9vbCk7CisJa2ZyZWUo ZGNlMTEwX3Bvb2wpOworCSpwb29sID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBy ZXNvdXJjZV9mdW5jcyBkY2U2MF9yZXNfcG9vbF9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRjZTYw X2Rlc3Ryb3lfcmVzb3VyY2VfcG9vbCwKKwkubGlua19lbmNfY3JlYXRlID0gZGNlNjBfbGlua19l bmNvZGVyX2NyZWF0ZSwKKwkudmFsaWRhdGVfYmFuZHdpZHRoID0gZGNlNjBfdmFsaWRhdGVfYmFu ZHdpZHRoLAorCS52YWxpZGF0ZV9wbGFuZSA9IGRjZTEwMF92YWxpZGF0ZV9wbGFuZSwKKwkuYWRk X3N0cmVhbV90b19jdHggPSBkY2UxMDBfYWRkX3N0cmVhbV90b19jdHgsCisJLnZhbGlkYXRlX2ds b2JhbCA9IGRjZTYwX3ZhbGlkYXRlX2dsb2JhbAorfTsKKworc3RhdGljIGJvb2wgZGNlNjBfY29u c3RydWN0KAorCXVpbnQ4X3QgbnVtX3ZpcnR1YWxfbGlua3MsCisJc3RydWN0IGRjICpkYywKKwlz dHJ1Y3QgZGNlMTEwX3Jlc291cmNlX3Bvb2wgKnBvb2wpCit7CisJdW5zaWduZWQgaW50IGk7CisJ c3RydWN0IGRjX2NvbnRleHQgKmN0eCA9IGRjLT5jdHg7CisJc3RydWN0IGRjX2Zpcm13YXJlX2lu Zm8gaW5mbzsKKwlzdHJ1Y3QgZGNfYmlvcyAqYnA7CisKKwljdHgtPmRjX2Jpb3MtPnJlZ3MgPSAm Ymlvc19yZWdzOworCisJcG9vbC0+YmFzZS5yZXNfY2FwID0gJnJlc19jYXA7CisJcG9vbC0+YmFz ZS5mdW5jcyA9ICZkY2U2MF9yZXNfcG9vbF9mdW5jczsKKworCisJLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiAgUmVzb3VyY2UgKyBhc2ljIGNh cCBoYXJjb2RpbmcgICAgICAgICAgICAgICAgKgorCSAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworCXBvb2wtPmJhc2UudW5kZXJsYXlfcGlwZV9pbmRl eCA9IE5PX1VOREVSTEFZX1BJUEU7CisJcG9vbC0+YmFzZS5waXBlX2NvdW50ID0gcmVzX2NhcC5u dW1fdGltaW5nX2dlbmVyYXRvcjsKKwlwb29sLT5iYXNlLnRpbWluZ19nZW5lcmF0b3JfY291bnQg PSByZXNfY2FwLm51bV90aW1pbmdfZ2VuZXJhdG9yOworCWRjLT5jYXBzLm1heF9kb3duc2NhbGVf cmF0aW8gPSAyMDA7CisJZGMtPmNhcHMuaTJjX3NwZWVkX2luX2toeiA9IDQwOworCWRjLT5jYXBz Lm1heF9jdXJzb3Jfc2l6ZSA9IDEyODsKKwlkYy0+Y2Fwcy5kdWFsX2xpbmtfZHZpID0gdHJ1ZTsK KworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJ ICogIENyZWF0ZSByZXNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWJwID0g Y3R4LT5kY19iaW9zOworCisJaWYgKChicC0+ZnVuY3MtPmdldF9maXJtd2FyZV9pbmZvKGJwLCAm aW5mbykgPT0gQlBfUkVTVUxUX09LKSAmJgorCQlpbmZvLmV4dGVybmFsX2Nsb2NrX3NvdXJjZV9m cmVxdWVuY3lfZm9yX2RwICE9IDApIHsKKwkJcG9vbC0+YmFzZS5kcF9jbG9ja19zb3VyY2UgPQor CQkJCWRjZTYwX2Nsb2NrX3NvdXJjZV9jcmVhdGUoY3R4LCBicCwgQ0xPQ0tfU09VUkNFX0lEX0VY VEVSTkFMLCBOVUxMLCB0cnVlKTsKKworCQlwb29sLT5iYXNlLmNsb2NrX3NvdXJjZXNbMF0gPQor CQkJCWRjZTYwX2Nsb2NrX3NvdXJjZV9jcmVhdGUoY3R4LCBicCwgQ0xPQ0tfU09VUkNFX0lEX1BM TDAsICZjbGtfc3JjX3JlZ3NbMF0sIGZhbHNlKTsKKwkJcG9vbC0+YmFzZS5jbG9ja19zb3VyY2Vz WzFdID0KKwkJCQlkY2U2MF9jbG9ja19zb3VyY2VfY3JlYXRlKGN0eCwgYnAsIENMT0NLX1NPVVJD RV9JRF9QTEwxLCAmY2xrX3NyY19yZWdzWzFdLCBmYWxzZSk7CisJCXBvb2wtPmJhc2UuY2xvY2tf c291cmNlc1syXSA9CisJCQkJZGNlNjBfY2xvY2tfc291cmNlX2NyZWF0ZShjdHgsIGJwLCBDTE9D S19TT1VSQ0VfSURfUExMMiwgJmNsa19zcmNfcmVnc1syXSwgZmFsc2UpOworCQlwb29sLT5iYXNl LmNsa19zcmNfY291bnQgPSAzOworCisJfSBlbHNlIHsKKwkJcG9vbC0+YmFzZS5kcF9jbG9ja19z b3VyY2UgPQorCQkJCWRjZTYwX2Nsb2NrX3NvdXJjZV9jcmVhdGUoY3R4LCBicCwgQ0xPQ0tfU09V UkNFX0lEX1BMTDAsICZjbGtfc3JjX3JlZ3NbMF0sIHRydWUpOworCisJCXBvb2wtPmJhc2UuY2xv Y2tfc291cmNlc1swXSA9CisJCQkJZGNlNjBfY2xvY2tfc291cmNlX2NyZWF0ZShjdHgsIGJwLCBD TE9DS19TT1VSQ0VfSURfUExMMSwgJmNsa19zcmNfcmVnc1sxXSwgZmFsc2UpOworCQlwb29sLT5i YXNlLmNsb2NrX3NvdXJjZXNbMV0gPQorCQkJCWRjZTYwX2Nsb2NrX3NvdXJjZV9jcmVhdGUoY3R4 LCBicCwgQ0xPQ0tfU09VUkNFX0lEX1BMTDIsICZjbGtfc3JjX3JlZ3NbMl0sIGZhbHNlKTsKKwkJ cG9vbC0+YmFzZS5jbGtfc3JjX2NvdW50ID0gMjsKKwl9CisKKwlpZiAocG9vbC0+YmFzZS5kcF9j bG9ja19zb3VyY2UgPT0gTlVMTCkgeworCQlkbV9lcnJvcigiREM6IGZhaWxlZCB0byBjcmVhdGUg ZHAgY2xvY2sgc291cmNlIVxuIik7CisJCUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCWdvdG8gcmVz X2NyZWF0ZV9mYWlsOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwb29sLT5iYXNlLmNsa19zcmNf Y291bnQ7IGkrKykgeworCQlpZiAocG9vbC0+YmFzZS5jbG9ja19zb3VyY2VzW2ldID09IE5VTEwp IHsKKwkJCWRtX2Vycm9yKCJEQzogZmFpbGVkIHRvIGNyZWF0ZSBjbG9jayBzb3VyY2VzIVxuIik7 CisJCQlCUkVBS19UT19ERUJVR0dFUigpOworCQkJZ290byByZXNfY3JlYXRlX2ZhaWw7CisJCX0K Kwl9CisKKwlwb29sLT5iYXNlLmNsa19tZ3IgPSBkY2VfY2xrX21ncl9jcmVhdGUoY3R4LAorCQkJ JmRpc3BfY2xrX3JlZ3MsCisJCQkmZGlzcF9jbGtfc2hpZnQsCisJCQkmZGlzcF9jbGtfbWFzayk7 CisJaWYgKHBvb2wtPmJhc2UuY2xrX21nciA9PSBOVUxMKSB7CisJCWRtX2Vycm9yKCJEQzogZmFp bGVkIHRvIGNyZWF0ZSBkaXNwbGF5IGNsb2NrIVxuIik7CisJCUJSRUFLX1RPX0RFQlVHR0VSKCk7 CisJCWdvdG8gcmVzX2NyZWF0ZV9mYWlsOworCX0KKworCXBvb2wtPmJhc2UuZG1jdSA9IGRjZV9k bWN1X2NyZWF0ZShjdHgsCisJCQkmZG1jdV9yZWdzLAorCQkJJmRtY3Vfc2hpZnQsCisJCQkmZG1j dV9tYXNrKTsKKwlpZiAocG9vbC0+YmFzZS5kbWN1ID09IE5VTEwpIHsKKwkJZG1fZXJyb3IoIkRD OiBmYWlsZWQgdG8gY3JlYXRlIGRtY3UhXG4iKTsKKwkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJ Z290byByZXNfY3JlYXRlX2ZhaWw7CisJfQorCisJcG9vbC0+YmFzZS5hYm0gPSBkY2VfYWJtX2Ny ZWF0ZShjdHgsCisJCQkmYWJtX3JlZ3MsCisJCQkmYWJtX3NoaWZ0LAorCQkJJmFibV9tYXNrKTsK KwlpZiAocG9vbC0+YmFzZS5hYm0gPT0gTlVMTCkgeworCQlkbV9lcnJvcigiREM6IGZhaWxlZCB0 byBjcmVhdGUgYWJtIVxuIik7CisJCUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCWdvdG8gcmVzX2Ny ZWF0ZV9mYWlsOworCX0KKworCXsKKwkJc3RydWN0IGlycV9zZXJ2aWNlX2luaXRfZGF0YSBpbml0 X2RhdGE7CisJCWluaXRfZGF0YS5jdHggPSBkYy0+Y3R4OworCQlwb29sLT5iYXNlLmlycXMgPSBk YWxfaXJxX3NlcnZpY2VfZGNlNjBfY3JlYXRlKCZpbml0X2RhdGEpOworCQlpZiAoIXBvb2wtPmJh c2UuaXJxcykKKwkJCWdvdG8gcmVzX2NyZWF0ZV9mYWlsOworCX0KKworCWZvciAoaSA9IDA7IGkg PCBwb29sLT5iYXNlLnBpcGVfY291bnQ7IGkrKykgeworCQlwb29sLT5iYXNlLnRpbWluZ19nZW5l cmF0b3JzW2ldID0gZGNlNjBfdGltaW5nX2dlbmVyYXRvcl9jcmVhdGUoCisJCQkJY3R4LCBpLCAm ZGNlNjBfdGdfb2Zmc2V0c1tpXSk7CisJCWlmIChwb29sLT5iYXNlLnRpbWluZ19nZW5lcmF0b3Jz W2ldID09IE5VTEwpIHsKKwkJCUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCQlkbV9lcnJvcigiREM6 IGZhaWxlZCB0byBjcmVhdGUgdGchXG4iKTsKKwkJCWdvdG8gcmVzX2NyZWF0ZV9mYWlsOworCQl9 CisKKwkJcG9vbC0+YmFzZS5taXNbaV0gPSBkY2U2MF9tZW1faW5wdXRfY3JlYXRlKGN0eCwgaSk7 CisJCWlmIChwb29sLT5iYXNlLm1pc1tpXSA9PSBOVUxMKSB7CisJCQlCUkVBS19UT19ERUJVR0dF UigpOworCQkJZG1fZXJyb3IoIkRDOiBmYWlsZWQgdG8gY3JlYXRlIG1lbW9yeSBpbnB1dCFcbiIp OworCQkJZ290byByZXNfY3JlYXRlX2ZhaWw7CisJCX0KKworCQlwb29sLT5iYXNlLmlwcHNbaV0g PSBkY2U2MF9pcHBfY3JlYXRlKGN0eCwgaSk7CisJCWlmIChwb29sLT5iYXNlLmlwcHNbaV0gPT0g TlVMTCkgeworCQkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJCWRtX2Vycm9yKCJEQzogZmFpbGVk IHRvIGNyZWF0ZSBpbnB1dCBwaXhlbCBwcm9jZXNzb3IhXG4iKTsKKwkJCWdvdG8gcmVzX2NyZWF0 ZV9mYWlsOworCQl9CisKKwkJcG9vbC0+YmFzZS50cmFuc2Zvcm1zW2ldID0gZGNlNjBfdHJhbnNm b3JtX2NyZWF0ZShjdHgsIGkpOworCQlpZiAocG9vbC0+YmFzZS50cmFuc2Zvcm1zW2ldID09IE5V TEwpIHsKKwkJCUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCQlkbV9lcnJvcigiREM6IGZhaWxlZCB0 byBjcmVhdGUgdHJhbnNmb3JtIVxuIik7CisJCQlnb3RvIHJlc19jcmVhdGVfZmFpbDsKKwkJfQor CisJCXBvb2wtPmJhc2Uub3Bwc1tpXSA9IGRjZTYwX29wcF9jcmVhdGUoY3R4LCBpKTsKKwkJaWYg KHBvb2wtPmJhc2Uub3Bwc1tpXSA9PSBOVUxMKSB7CisJCQlCUkVBS19UT19ERUJVR0dFUigpOwor CQkJZG1fZXJyb3IoIkRDOiBmYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBwaXhlbCBwcm9jZXNzb3Ih XG4iKTsKKwkJCWdvdG8gcmVzX2NyZWF0ZV9mYWlsOworCQl9CisJfQorCisJZm9yIChpID0gMDsg aSA8IHBvb2wtPmJhc2UucmVzX2NhcC0+bnVtX2RkYzsgaSsrKSB7CisJCXBvb2wtPmJhc2UuZW5n aW5lc1tpXSA9IGRjZTYwX2F1eF9lbmdpbmVfY3JlYXRlKGN0eCwgaSk7CisJCWlmIChwb29sLT5i YXNlLmVuZ2luZXNbaV0gPT0gTlVMTCkgeworCQkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJCWRt X2Vycm9yKAorCQkJCSJEQzpmYWlsZWQgdG8gY3JlYXRlIGF1eCBlbmdpbmUhIVxuIik7CisJCQln b3RvIHJlc19jcmVhdGVfZmFpbDsKKwkJfQorCQlwb29sLT5iYXNlLmh3X2kyY3NbaV0gPSBkY2U2 MF9pMmNfaHdfY3JlYXRlKGN0eCwgaSk7CisJCWlmIChwb29sLT5iYXNlLmh3X2kyY3NbaV0gPT0g TlVMTCkgeworCQkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJCWRtX2Vycm9yKAorCQkJCSJEQzpm YWlsZWQgdG8gY3JlYXRlIGkyYyBlbmdpbmUhIVxuIik7CisJCQlnb3RvIHJlc19jcmVhdGVfZmFp bDsKKwkJfQorCQlwb29sLT5iYXNlLnN3X2kyY3NbaV0gPSBkY2U2MF9pMmNfc3dfY3JlYXRlKGN0 eCk7CisJCWlmIChwb29sLT5iYXNlLnN3X2kyY3NbaV0gPT0gTlVMTCkgeworCQkJQlJFQUtfVE9f REVCVUdHRVIoKTsKKwkJCWRtX2Vycm9yKAorCQkJCSJEQzpmYWlsZWQgdG8gY3JlYXRlIHN3IGky YyEhXG4iKTsKKwkJCWdvdG8gcmVzX2NyZWF0ZV9mYWlsOworCQl9CisJfQorCisJZGMtPmNhcHMu bWF4X3BsYW5lcyA9ICBwb29sLT5iYXNlLnBpcGVfY291bnQ7CisJZGMtPmNhcHMuZGlzYWJsZV9k cF9jbGtfc2hhcmUgPSB0cnVlOworCisJaWYgKCFyZXNvdXJjZV9jb25zdHJ1Y3QobnVtX3ZpcnR1 YWxfbGlua3MsIGRjLCAmcG9vbC0+YmFzZSwKKwkJCSZyZXNfY3JlYXRlX2Z1bmNzKSkKKwkJZ290 byByZXNfY3JlYXRlX2ZhaWw7CisKKwkvKiBDcmVhdGUgaGFyZHdhcmUgc2VxdWVuY2VyICovCisJ ZGNlNjBfaHdfc2VxdWVuY2VyX2NvbnN0cnVjdChkYyk7CisKKwlyZXR1cm4gdHJ1ZTsKKworcmVz X2NyZWF0ZV9mYWlsOgorCWRlc3RydWN0KHBvb2wpOworCXJldHVybiBmYWxzZTsKK30KKworc3Ry dWN0IHJlc291cmNlX3Bvb2wgKmRjZTYwX2NyZWF0ZV9yZXNvdXJjZV9wb29sKAorCXVpbnQ4X3Qg bnVtX3ZpcnR1YWxfbGlua3MsCisJc3RydWN0IGRjICpkYykKK3sKKwlzdHJ1Y3QgZGNlMTEwX3Jl c291cmNlX3Bvb2wgKnBvb2wgPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgZGNlMTEwX3Jlc291 cmNlX3Bvb2wpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcG9vbCkKKwkJcmV0dXJuIE5VTEw7CisK KwlpZiAoZGNlNjBfY29uc3RydWN0KG51bV92aXJ0dWFsX2xpbmtzLCBkYywgcG9vbCkpCisJCXJl dHVybiAmcG9vbC0+YmFzZTsKKworCUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJcmV0dXJuIE5VTEw7 Cit9CisKK3N0YXRpYyBib29sIGRjZTYxX2NvbnN0cnVjdCgKKwl1aW50OF90IG51bV92aXJ0dWFs X2xpbmtzLAorCXN0cnVjdCBkYyAqZGMsCisJc3RydWN0IGRjZTExMF9yZXNvdXJjZV9wb29sICpw b29sKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBkY19jb250ZXh0ICpjdHggPSBkYy0+ Y3R4OworCXN0cnVjdCBkY19maXJtd2FyZV9pbmZvIGluZm87CisJc3RydWN0IGRjX2Jpb3MgKmJw OworCisJY3R4LT5kY19iaW9zLT5yZWdzID0gJmJpb3NfcmVnczsKKworCXBvb2wtPmJhc2UucmVz X2NhcCA9ICZyZXNfY2FwXzYxOworCXBvb2wtPmJhc2UuZnVuY3MgPSAmZGNlNjBfcmVzX3Bvb2xf ZnVuY3M7CisKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisJICogIFJlc291cmNlICsgYXNpYyBjYXAgaGFyY29kaW5nICAgICAgICAgICAgICAg ICoKKwkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K Kwlwb29sLT5iYXNlLnVuZGVybGF5X3BpcGVfaW5kZXggPSBOT19VTkRFUkxBWV9QSVBFOworCXBv b2wtPmJhc2UucGlwZV9jb3VudCA9IHJlc19jYXBfNjEubnVtX3RpbWluZ19nZW5lcmF0b3I7CisJ cG9vbC0+YmFzZS50aW1pbmdfZ2VuZXJhdG9yX2NvdW50ID0gcmVzX2NhcF82MS5udW1fdGltaW5n X2dlbmVyYXRvcjsKKwlkYy0+Y2Fwcy5tYXhfZG93bnNjYWxlX3JhdGlvID0gMjAwOworCWRjLT5j YXBzLmkyY19zcGVlZF9pbl9raHogPSA0MDsKKwlkYy0+Y2Fwcy5tYXhfY3Vyc29yX3NpemUgPSAx Mjg7CisJZGMtPmNhcHMuaXNfYXB1ID0gdHJ1ZTsKKworCS8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogIENyZWF0ZSByZXNvdXJjZXMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICoKKwkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKworCWJwID0gY3R4LT5kY19iaW9zOworCisJaWYgKChicC0+ ZnVuY3MtPmdldF9maXJtd2FyZV9pbmZvKGJwLCAmaW5mbykgPT0gQlBfUkVTVUxUX09LKSAmJgor CQlpbmZvLmV4dGVybmFsX2Nsb2NrX3NvdXJjZV9mcmVxdWVuY3lfZm9yX2RwICE9IDApIHsKKwkJ cG9vbC0+YmFzZS5kcF9jbG9ja19zb3VyY2UgPQorCQkJCWRjZTYwX2Nsb2NrX3NvdXJjZV9jcmVh dGUoY3R4LCBicCwgQ0xPQ0tfU09VUkNFX0lEX0VYVEVSTkFMLCBOVUxMLCB0cnVlKTsKKworCQlw b29sLT5iYXNlLmNsb2NrX3NvdXJjZXNbMF0gPQorCQkJCWRjZTYwX2Nsb2NrX3NvdXJjZV9jcmVh dGUoY3R4LCBicCwgQ0xPQ0tfU09VUkNFX0lEX1BMTDAsICZjbGtfc3JjX3JlZ3NbMF0sIGZhbHNl KTsKKwkJcG9vbC0+YmFzZS5jbG9ja19zb3VyY2VzWzFdID0KKwkJCQlkY2U2MF9jbG9ja19zb3Vy Y2VfY3JlYXRlKGN0eCwgYnAsIENMT0NLX1NPVVJDRV9JRF9QTEwxLCAmY2xrX3NyY19yZWdzWzFd LCBmYWxzZSk7CisJCXBvb2wtPmJhc2UuY2xvY2tfc291cmNlc1syXSA9CisJCQkJZGNlNjBfY2xv Y2tfc291cmNlX2NyZWF0ZShjdHgsIGJwLCBDTE9DS19TT1VSQ0VfSURfUExMMiwgJmNsa19zcmNf cmVnc1syXSwgZmFsc2UpOworCQlwb29sLT5iYXNlLmNsa19zcmNfY291bnQgPSAzOworCisJfSBl bHNlIHsKKwkJcG9vbC0+YmFzZS5kcF9jbG9ja19zb3VyY2UgPQorCQkJCWRjZTYwX2Nsb2NrX3Nv dXJjZV9jcmVhdGUoY3R4LCBicCwgQ0xPQ0tfU09VUkNFX0lEX1BMTDAsICZjbGtfc3JjX3JlZ3Nb MF0sIHRydWUpOworCisJCXBvb2wtPmJhc2UuY2xvY2tfc291cmNlc1swXSA9CisJCQkJZGNlNjBf Y2xvY2tfc291cmNlX2NyZWF0ZShjdHgsIGJwLCBDTE9DS19TT1VSQ0VfSURfUExMMSwgJmNsa19z cmNfcmVnc1sxXSwgZmFsc2UpOworCQlwb29sLT5iYXNlLmNsb2NrX3NvdXJjZXNbMV0gPQorCQkJ CWRjZTYwX2Nsb2NrX3NvdXJjZV9jcmVhdGUoY3R4LCBicCwgQ0xPQ0tfU09VUkNFX0lEX1BMTDIs ICZjbGtfc3JjX3JlZ3NbMl0sIGZhbHNlKTsKKwkJcG9vbC0+YmFzZS5jbGtfc3JjX2NvdW50ID0g MjsKKwl9CisKKwlpZiAocG9vbC0+YmFzZS5kcF9jbG9ja19zb3VyY2UgPT0gTlVMTCkgeworCQlk bV9lcnJvcigiREM6IGZhaWxlZCB0byBjcmVhdGUgZHAgY2xvY2sgc291cmNlIVxuIik7CisJCUJS RUFLX1RPX0RFQlVHR0VSKCk7CisJCWdvdG8gcmVzX2NyZWF0ZV9mYWlsOworCX0KKworCWZvciAo aSA9IDA7IGkgPCBwb29sLT5iYXNlLmNsa19zcmNfY291bnQ7IGkrKykgeworCQlpZiAocG9vbC0+ YmFzZS5jbG9ja19zb3VyY2VzW2ldID09IE5VTEwpIHsKKwkJCWRtX2Vycm9yKCJEQzogZmFpbGVk IHRvIGNyZWF0ZSBjbG9jayBzb3VyY2VzIVxuIik7CisJCQlCUkVBS19UT19ERUJVR0dFUigpOwor CQkJZ290byByZXNfY3JlYXRlX2ZhaWw7CisJCX0KKwl9CisKKwlwb29sLT5iYXNlLmNsa19tZ3Ig PSBkY2VfY2xrX21ncl9jcmVhdGUoY3R4LAorCQkJJmRpc3BfY2xrX3JlZ3MsCisJCQkmZGlzcF9j bGtfc2hpZnQsCisJCQkmZGlzcF9jbGtfbWFzayk7CisJaWYgKHBvb2wtPmJhc2UuY2xrX21nciA9 PSBOVUxMKSB7CisJCWRtX2Vycm9yKCJEQzogZmFpbGVkIHRvIGNyZWF0ZSBkaXNwbGF5IGNsb2Nr IVxuIik7CisJCUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCWdvdG8gcmVzX2NyZWF0ZV9mYWlsOwor CX0KKworCXBvb2wtPmJhc2UuZG1jdSA9IGRjZV9kbWN1X2NyZWF0ZShjdHgsCisJCQkmZG1jdV9y ZWdzLAorCQkJJmRtY3Vfc2hpZnQsCisJCQkmZG1jdV9tYXNrKTsKKwlpZiAocG9vbC0+YmFzZS5k bWN1ID09IE5VTEwpIHsKKwkJZG1fZXJyb3IoIkRDOiBmYWlsZWQgdG8gY3JlYXRlIGRtY3UhXG4i KTsKKwkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJZ290byByZXNfY3JlYXRlX2ZhaWw7CisJfQor CisJcG9vbC0+YmFzZS5hYm0gPSBkY2VfYWJtX2NyZWF0ZShjdHgsCisJCQkmYWJtX3JlZ3MsCisJ CQkmYWJtX3NoaWZ0LAorCQkJJmFibV9tYXNrKTsKKwlpZiAocG9vbC0+YmFzZS5hYm0gPT0gTlVM TCkgeworCQlkbV9lcnJvcigiREM6IGZhaWxlZCB0byBjcmVhdGUgYWJtIVxuIik7CisJCUJSRUFL X1RPX0RFQlVHR0VSKCk7CisJCWdvdG8gcmVzX2NyZWF0ZV9mYWlsOworCX0KKworCXsKKwkJc3Ry dWN0IGlycV9zZXJ2aWNlX2luaXRfZGF0YSBpbml0X2RhdGE7CisJCWluaXRfZGF0YS5jdHggPSBk Yy0+Y3R4OworCQlwb29sLT5iYXNlLmlycXMgPSBkYWxfaXJxX3NlcnZpY2VfZGNlNjBfY3JlYXRl KCZpbml0X2RhdGEpOworCQlpZiAoIXBvb2wtPmJhc2UuaXJxcykKKwkJCWdvdG8gcmVzX2NyZWF0 ZV9mYWlsOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwb29sLT5iYXNlLnBpcGVfY291bnQ7IGkr KykgeworCQlwb29sLT5iYXNlLnRpbWluZ19nZW5lcmF0b3JzW2ldID0gZGNlNjBfdGltaW5nX2dl bmVyYXRvcl9jcmVhdGUoCisJCQkJY3R4LCBpLCAmZGNlNjBfdGdfb2Zmc2V0c1tpXSk7CisJCWlm IChwb29sLT5iYXNlLnRpbWluZ19nZW5lcmF0b3JzW2ldID09IE5VTEwpIHsKKwkJCUJSRUFLX1RP X0RFQlVHR0VSKCk7CisJCQlkbV9lcnJvcigiREM6IGZhaWxlZCB0byBjcmVhdGUgdGchXG4iKTsK KwkJCWdvdG8gcmVzX2NyZWF0ZV9mYWlsOworCQl9CisKKwkJcG9vbC0+YmFzZS5taXNbaV0gPSBk Y2U2MF9tZW1faW5wdXRfY3JlYXRlKGN0eCwgaSk7CisJCWlmIChwb29sLT5iYXNlLm1pc1tpXSA9 PSBOVUxMKSB7CisJCQlCUkVBS19UT19ERUJVR0dFUigpOworCQkJZG1fZXJyb3IoIkRDOiBmYWls ZWQgdG8gY3JlYXRlIG1lbW9yeSBpbnB1dCFcbiIpOworCQkJZ290byByZXNfY3JlYXRlX2ZhaWw7 CisJCX0KKworCQlwb29sLT5iYXNlLmlwcHNbaV0gPSBkY2U2MF9pcHBfY3JlYXRlKGN0eCwgaSk7 CisJCWlmIChwb29sLT5iYXNlLmlwcHNbaV0gPT0gTlVMTCkgeworCQkJQlJFQUtfVE9fREVCVUdH RVIoKTsKKwkJCWRtX2Vycm9yKCJEQzogZmFpbGVkIHRvIGNyZWF0ZSBpbnB1dCBwaXhlbCBwcm9j ZXNzb3IhXG4iKTsKKwkJCWdvdG8gcmVzX2NyZWF0ZV9mYWlsOworCQl9CisKKwkJcG9vbC0+YmFz ZS50cmFuc2Zvcm1zW2ldID0gZGNlNjBfdHJhbnNmb3JtX2NyZWF0ZShjdHgsIGkpOworCQlpZiAo cG9vbC0+YmFzZS50cmFuc2Zvcm1zW2ldID09IE5VTEwpIHsKKwkJCUJSRUFLX1RPX0RFQlVHR0VS KCk7CisJCQlkbV9lcnJvcigiREM6IGZhaWxlZCB0byBjcmVhdGUgdHJhbnNmb3JtIVxuIik7CisJ CQlnb3RvIHJlc19jcmVhdGVfZmFpbDsKKwkJfQorCisJCXBvb2wtPmJhc2Uub3Bwc1tpXSA9IGRj ZTYwX29wcF9jcmVhdGUoY3R4LCBpKTsKKwkJaWYgKHBvb2wtPmJhc2Uub3Bwc1tpXSA9PSBOVUxM KSB7CisJCQlCUkVBS19UT19ERUJVR0dFUigpOworCQkJZG1fZXJyb3IoIkRDOiBmYWlsZWQgdG8g Y3JlYXRlIG91dHB1dCBwaXhlbCBwcm9jZXNzb3IhXG4iKTsKKwkJCWdvdG8gcmVzX2NyZWF0ZV9m YWlsOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBvb2wtPmJhc2UucmVzX2NhcC0+bnVt X2RkYzsgaSsrKSB7CisJCXBvb2wtPmJhc2UuZW5naW5lc1tpXSA9IGRjZTYwX2F1eF9lbmdpbmVf Y3JlYXRlKGN0eCwgaSk7CisJCWlmIChwb29sLT5iYXNlLmVuZ2luZXNbaV0gPT0gTlVMTCkgewor CQkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJCWRtX2Vycm9yKAorCQkJCSJEQzpmYWlsZWQgdG8g Y3JlYXRlIGF1eCBlbmdpbmUhIVxuIik7CisJCQlnb3RvIHJlc19jcmVhdGVfZmFpbDsKKwkJfQor CQlwb29sLT5iYXNlLmh3X2kyY3NbaV0gPSBkY2U2MF9pMmNfaHdfY3JlYXRlKGN0eCwgaSk7CisJ CWlmIChwb29sLT5iYXNlLmh3X2kyY3NbaV0gPT0gTlVMTCkgeworCQkJQlJFQUtfVE9fREVCVUdH RVIoKTsKKwkJCWRtX2Vycm9yKAorCQkJCSJEQzpmYWlsZWQgdG8gY3JlYXRlIGkyYyBlbmdpbmUh IVxuIik7CisJCQlnb3RvIHJlc19jcmVhdGVfZmFpbDsKKwkJfQorCQlwb29sLT5iYXNlLnN3X2ky Y3NbaV0gPSBkY2U2MF9pMmNfc3dfY3JlYXRlKGN0eCk7CisJCWlmIChwb29sLT5iYXNlLnN3X2ky Y3NbaV0gPT0gTlVMTCkgeworCQkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJCWRtX2Vycm9yKAor CQkJCSJEQzpmYWlsZWQgdG8gY3JlYXRlIHN3IGkyYyEhXG4iKTsKKwkJCWdvdG8gcmVzX2NyZWF0 ZV9mYWlsOworCQl9CisJfQorCisJZGMtPmNhcHMubWF4X3BsYW5lcyA9ICBwb29sLT5iYXNlLnBp cGVfY291bnQ7CisJZGMtPmNhcHMuZGlzYWJsZV9kcF9jbGtfc2hhcmUgPSB0cnVlOworCisJaWYg KCFyZXNvdXJjZV9jb25zdHJ1Y3QobnVtX3ZpcnR1YWxfbGlua3MsIGRjLCAmcG9vbC0+YmFzZSwK KwkJCSZyZXNfY3JlYXRlX2Z1bmNzKSkKKwkJZ290byByZXNfY3JlYXRlX2ZhaWw7CisKKwkvKiBD cmVhdGUgaGFyZHdhcmUgc2VxdWVuY2VyICovCisJZGNlNjBfaHdfc2VxdWVuY2VyX2NvbnN0cnVj dChkYyk7CisKKwlyZXR1cm4gdHJ1ZTsKKworcmVzX2NyZWF0ZV9mYWlsOgorCWRlc3RydWN0KHBv b2wpOworCXJldHVybiBmYWxzZTsKK30KKworc3RydWN0IHJlc291cmNlX3Bvb2wgKmRjZTYxX2Ny ZWF0ZV9yZXNvdXJjZV9wb29sKAorCXVpbnQ4X3QgbnVtX3ZpcnR1YWxfbGlua3MsCisJc3RydWN0 IGRjICpkYykKK3sKKwlzdHJ1Y3QgZGNlMTEwX3Jlc291cmNlX3Bvb2wgKnBvb2wgPQorCQlremFs bG9jKHNpemVvZihzdHJ1Y3QgZGNlMTEwX3Jlc291cmNlX3Bvb2wpLCBHRlBfS0VSTkVMKTsKKwor CWlmICghcG9vbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZGNlNjFfY29uc3RydWN0KG51bV92 aXJ0dWFsX2xpbmtzLCBkYywgcG9vbCkpCisJCXJldHVybiAmcG9vbC0+YmFzZTsKKworCUJSRUFL X1RPX0RFQlVHR0VSKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBib29sIGRjZTY0X2Nv bnN0cnVjdCgKKwl1aW50OF90IG51bV92aXJ0dWFsX2xpbmtzLAorCXN0cnVjdCBkYyAqZGMsCisJ c3RydWN0IGRjZTExMF9yZXNvdXJjZV9wb29sICpwb29sKQoreworCXVuc2lnbmVkIGludCBpOwor CXN0cnVjdCBkY19jb250ZXh0ICpjdHggPSBkYy0+Y3R4OworCXN0cnVjdCBkY19maXJtd2FyZV9p bmZvIGluZm87CisJc3RydWN0IGRjX2Jpb3MgKmJwOworCisJY3R4LT5kY19iaW9zLT5yZWdzID0g JmJpb3NfcmVnczsKKworCXBvb2wtPmJhc2UucmVzX2NhcCA9ICZyZXNfY2FwXzY0OworCXBvb2wt PmJhc2UuZnVuY3MgPSAmZGNlNjBfcmVzX3Bvb2xfZnVuY3M7CisKKworCS8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogIFJlc291cmNlICsgYXNp YyBjYXAgaGFyY29kaW5nICAgICAgICAgICAgICAgICoKKwkgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlwb29sLT5iYXNlLnVuZGVybGF5X3BpcGVf aW5kZXggPSBOT19VTkRFUkxBWV9QSVBFOworCXBvb2wtPmJhc2UucGlwZV9jb3VudCA9IHJlc19j YXBfNjQubnVtX3RpbWluZ19nZW5lcmF0b3I7CisJcG9vbC0+YmFzZS50aW1pbmdfZ2VuZXJhdG9y X2NvdW50ID0gcmVzX2NhcF82NC5udW1fdGltaW5nX2dlbmVyYXRvcjsKKwlkYy0+Y2Fwcy5tYXhf ZG93bnNjYWxlX3JhdGlvID0gMjAwOworCWRjLT5jYXBzLmkyY19zcGVlZF9pbl9raHogPSA0MDsK KwlkYy0+Y2Fwcy5tYXhfY3Vyc29yX3NpemUgPSAxMjg7CisJZGMtPmNhcHMuaXNfYXB1ID0gdHJ1 ZTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CisJICogIENyZWF0ZSByZXNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKwkg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWJw ID0gY3R4LT5kY19iaW9zOworCisJaWYgKChicC0+ZnVuY3MtPmdldF9maXJtd2FyZV9pbmZvKGJw LCAmaW5mbykgPT0gQlBfUkVTVUxUX09LKSAmJgorCQlpbmZvLmV4dGVybmFsX2Nsb2NrX3NvdXJj ZV9mcmVxdWVuY3lfZm9yX2RwICE9IDApIHsKKwkJcG9vbC0+YmFzZS5kcF9jbG9ja19zb3VyY2Ug PQorCQkJCWRjZTYwX2Nsb2NrX3NvdXJjZV9jcmVhdGUoY3R4LCBicCwgQ0xPQ0tfU09VUkNFX0lE X0VYVEVSTkFMLCBOVUxMLCB0cnVlKTsKKworCQlwb29sLT5iYXNlLmNsb2NrX3NvdXJjZXNbMF0g PQorCQkJCWRjZTYwX2Nsb2NrX3NvdXJjZV9jcmVhdGUoY3R4LCBicCwgQ0xPQ0tfU09VUkNFX0lE X1BMTDEsICZjbGtfc3JjX3JlZ3NbMF0sIGZhbHNlKTsKKwkJcG9vbC0+YmFzZS5jbG9ja19zb3Vy Y2VzWzFdID0KKwkJCQlkY2U2MF9jbG9ja19zb3VyY2VfY3JlYXRlKGN0eCwgYnAsIENMT0NLX1NP VVJDRV9JRF9QTEwyLCAmY2xrX3NyY19yZWdzWzFdLCBmYWxzZSk7CisJCXBvb2wtPmJhc2UuY2xr X3NyY19jb3VudCA9IDI7CisKKwl9IGVsc2UgeworCQlwb29sLT5iYXNlLmRwX2Nsb2NrX3NvdXJj ZSA9CisJCQkJZGNlNjBfY2xvY2tfc291cmNlX2NyZWF0ZShjdHgsIGJwLCBDTE9DS19TT1VSQ0Vf SURfUExMMSwgJmNsa19zcmNfcmVnc1swXSwgdHJ1ZSk7CisKKwkJcG9vbC0+YmFzZS5jbG9ja19z b3VyY2VzWzBdID0KKwkJCQlkY2U2MF9jbG9ja19zb3VyY2VfY3JlYXRlKGN0eCwgYnAsIENMT0NL X1NPVVJDRV9JRF9QTEwyLCAmY2xrX3NyY19yZWdzWzFdLCBmYWxzZSk7CisJCXBvb2wtPmJhc2Uu Y2xrX3NyY19jb3VudCA9IDE7CisJfQorCisJaWYgKHBvb2wtPmJhc2UuZHBfY2xvY2tfc291cmNl ID09IE5VTEwpIHsKKwkJZG1fZXJyb3IoIkRDOiBmYWlsZWQgdG8gY3JlYXRlIGRwIGNsb2NrIHNv dXJjZSFcbiIpOworCQlCUkVBS19UT19ERUJVR0dFUigpOworCQlnb3RvIHJlc19jcmVhdGVfZmFp bDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9vbC0+YmFzZS5jbGtfc3JjX2NvdW50OyBpKysp IHsKKwkJaWYgKHBvb2wtPmJhc2UuY2xvY2tfc291cmNlc1tpXSA9PSBOVUxMKSB7CisJCQlkbV9l cnJvcigiREM6IGZhaWxlZCB0byBjcmVhdGUgY2xvY2sgc291cmNlcyFcbiIpOworCQkJQlJFQUtf VE9fREVCVUdHRVIoKTsKKwkJCWdvdG8gcmVzX2NyZWF0ZV9mYWlsOworCQl9CisJfQorCisJcG9v bC0+YmFzZS5jbGtfbWdyID0gZGNlX2Nsa19tZ3JfY3JlYXRlKGN0eCwKKwkJCSZkaXNwX2Nsa19y ZWdzLAorCQkJJmRpc3BfY2xrX3NoaWZ0LAorCQkJJmRpc3BfY2xrX21hc2spOworCWlmIChwb29s LT5iYXNlLmNsa19tZ3IgPT0gTlVMTCkgeworCQlkbV9lcnJvcigiREM6IGZhaWxlZCB0byBjcmVh dGUgZGlzcGxheSBjbG9jayFcbiIpOworCQlCUkVBS19UT19ERUJVR0dFUigpOworCQlnb3RvIHJl c19jcmVhdGVfZmFpbDsKKwl9CisKKwlwb29sLT5iYXNlLmRtY3UgPSBkY2VfZG1jdV9jcmVhdGUo Y3R4LAorCQkJJmRtY3VfcmVncywKKwkJCSZkbWN1X3NoaWZ0LAorCQkJJmRtY3VfbWFzayk7CisJ aWYgKHBvb2wtPmJhc2UuZG1jdSA9PSBOVUxMKSB7CisJCWRtX2Vycm9yKCJEQzogZmFpbGVkIHRv IGNyZWF0ZSBkbWN1IVxuIik7CisJCUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCWdvdG8gcmVzX2Ny ZWF0ZV9mYWlsOworCX0KKworCXBvb2wtPmJhc2UuYWJtID0gZGNlX2FibV9jcmVhdGUoY3R4LAor CQkJJmFibV9yZWdzLAorCQkJJmFibV9zaGlmdCwKKwkJCSZhYm1fbWFzayk7CisJaWYgKHBvb2wt PmJhc2UuYWJtID09IE5VTEwpIHsKKwkJZG1fZXJyb3IoIkRDOiBmYWlsZWQgdG8gY3JlYXRlIGFi bSFcbiIpOworCQlCUkVBS19UT19ERUJVR0dFUigpOworCQlnb3RvIHJlc19jcmVhdGVfZmFpbDsK Kwl9CisKKwl7CisJCXN0cnVjdCBpcnFfc2VydmljZV9pbml0X2RhdGEgaW5pdF9kYXRhOworCQlp bml0X2RhdGEuY3R4ID0gZGMtPmN0eDsKKwkJcG9vbC0+YmFzZS5pcnFzID0gZGFsX2lycV9zZXJ2 aWNlX2RjZTYwX2NyZWF0ZSgmaW5pdF9kYXRhKTsKKwkJaWYgKCFwb29sLT5iYXNlLmlycXMpCisJ CQlnb3RvIHJlc19jcmVhdGVfZmFpbDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9vbC0+YmFz ZS5waXBlX2NvdW50OyBpKyspIHsKKwkJcG9vbC0+YmFzZS50aW1pbmdfZ2VuZXJhdG9yc1tpXSA9 IGRjZTYwX3RpbWluZ19nZW5lcmF0b3JfY3JlYXRlKAorCQkJCWN0eCwgaSwgJmRjZTYwX3RnX29m ZnNldHNbaV0pOworCQlpZiAocG9vbC0+YmFzZS50aW1pbmdfZ2VuZXJhdG9yc1tpXSA9PSBOVUxM KSB7CisJCQlCUkVBS19UT19ERUJVR0dFUigpOworCQkJZG1fZXJyb3IoIkRDOiBmYWlsZWQgdG8g Y3JlYXRlIHRnIVxuIik7CisJCQlnb3RvIHJlc19jcmVhdGVfZmFpbDsKKwkJfQorCisJCXBvb2wt PmJhc2UubWlzW2ldID0gZGNlNjBfbWVtX2lucHV0X2NyZWF0ZShjdHgsIGkpOworCQlpZiAocG9v bC0+YmFzZS5taXNbaV0gPT0gTlVMTCkgeworCQkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJCWRt X2Vycm9yKCJEQzogZmFpbGVkIHRvIGNyZWF0ZSBtZW1vcnkgaW5wdXQhXG4iKTsKKwkJCWdvdG8g cmVzX2NyZWF0ZV9mYWlsOworCQl9CisKKwkJcG9vbC0+YmFzZS5pcHBzW2ldID0gZGNlNjBfaXBw X2NyZWF0ZShjdHgsIGkpOworCQlpZiAocG9vbC0+YmFzZS5pcHBzW2ldID09IE5VTEwpIHsKKwkJ CUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCQlkbV9lcnJvcigiREM6IGZhaWxlZCB0byBjcmVhdGUg aW5wdXQgcGl4ZWwgcHJvY2Vzc29yIVxuIik7CisJCQlnb3RvIHJlc19jcmVhdGVfZmFpbDsKKwkJ fQorCisJCXBvb2wtPmJhc2UudHJhbnNmb3Jtc1tpXSA9IGRjZTYwX3RyYW5zZm9ybV9jcmVhdGUo Y3R4LCBpKTsKKwkJaWYgKHBvb2wtPmJhc2UudHJhbnNmb3Jtc1tpXSA9PSBOVUxMKSB7CisJCQlC UkVBS19UT19ERUJVR0dFUigpOworCQkJZG1fZXJyb3IoIkRDOiBmYWlsZWQgdG8gY3JlYXRlIHRy YW5zZm9ybSFcbiIpOworCQkJZ290byByZXNfY3JlYXRlX2ZhaWw7CisJCX0KKworCQlwb29sLT5i YXNlLm9wcHNbaV0gPSBkY2U2MF9vcHBfY3JlYXRlKGN0eCwgaSk7CisJCWlmIChwb29sLT5iYXNl Lm9wcHNbaV0gPT0gTlVMTCkgeworCQkJQlJFQUtfVE9fREVCVUdHRVIoKTsKKwkJCWRtX2Vycm9y KCJEQzogZmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgcGl4ZWwgcHJvY2Vzc29yIVxuIik7CisJCQln b3RvIHJlc19jcmVhdGVfZmFpbDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBwb29sLT5i YXNlLnJlc19jYXAtPm51bV9kZGM7IGkrKykgeworCQlwb29sLT5iYXNlLmVuZ2luZXNbaV0gPSBk Y2U2MF9hdXhfZW5naW5lX2NyZWF0ZShjdHgsIGkpOworCQlpZiAocG9vbC0+YmFzZS5lbmdpbmVz W2ldID09IE5VTEwpIHsKKwkJCUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCQlkbV9lcnJvcigKKwkJ CQkiREM6ZmFpbGVkIHRvIGNyZWF0ZSBhdXggZW5naW5lISFcbiIpOworCQkJZ290byByZXNfY3Jl YXRlX2ZhaWw7CisJCX0KKwkJcG9vbC0+YmFzZS5od19pMmNzW2ldID0gZGNlNjBfaTJjX2h3X2Ny ZWF0ZShjdHgsIGkpOworCQlpZiAocG9vbC0+YmFzZS5od19pMmNzW2ldID09IE5VTEwpIHsKKwkJ CUJSRUFLX1RPX0RFQlVHR0VSKCk7CisJCQlkbV9lcnJvcigKKwkJCQkiREM6ZmFpbGVkIHRvIGNy ZWF0ZSBpMmMgZW5naW5lISFcbiIpOworCQkJZ290byByZXNfY3JlYXRlX2ZhaWw7CisJCX0KKwkJ cG9vbC0+YmFzZS5zd19pMmNzW2ldID0gZGNlNjBfaTJjX3N3X2NyZWF0ZShjdHgpOworCQlpZiAo cG9vbC0+YmFzZS5zd19pMmNzW2ldID09IE5VTEwpIHsKKwkJCUJSRUFLX1RPX0RFQlVHR0VSKCk7 CisJCQlkbV9lcnJvcigKKwkJCQkiREM6ZmFpbGVkIHRvIGNyZWF0ZSBzdyBpMmMhIVxuIik7CisJ CQlnb3RvIHJlc19jcmVhdGVfZmFpbDsKKwkJfQorCX0KKworCWRjLT5jYXBzLm1heF9wbGFuZXMg PSAgcG9vbC0+YmFzZS5waXBlX2NvdW50OworCWRjLT5jYXBzLmRpc2FibGVfZHBfY2xrX3NoYXJl ID0gdHJ1ZTsKKworCWlmICghcmVzb3VyY2VfY29uc3RydWN0KG51bV92aXJ0dWFsX2xpbmtzLCBk YywgJnBvb2wtPmJhc2UsCisJCQkmcmVzX2NyZWF0ZV9mdW5jcykpCisJCWdvdG8gcmVzX2NyZWF0 ZV9mYWlsOworCisJLyogQ3JlYXRlIGhhcmR3YXJlIHNlcXVlbmNlciAqLworCWRjZTYwX2h3X3Nl cXVlbmNlcl9jb25zdHJ1Y3QoZGMpOworCisJcmV0dXJuIHRydWU7CisKK3Jlc19jcmVhdGVfZmFp bDoKKwlkZXN0cnVjdChwb29sKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0cnVjdCByZXNvdXJj ZV9wb29sICpkY2U2NF9jcmVhdGVfcmVzb3VyY2VfcG9vbCgKKwl1aW50OF90IG51bV92aXJ0dWFs X2xpbmtzLAorCXN0cnVjdCBkYyAqZGMpCit7CisJc3RydWN0IGRjZTExMF9yZXNvdXJjZV9wb29s ICpwb29sID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGRjZTExMF9yZXNvdXJjZV9wb29sKSwg R0ZQX0tFUk5FTCk7CisKKwlpZiAoIXBvb2wpCisJCXJldHVybiBOVUxMOworCisJaWYgKGRjZTY0 X2NvbnN0cnVjdChudW1fdmlydHVhbF9saW5rcywgZGMsIHBvb2wpKQorCQlyZXR1cm4gJnBvb2wt PmJhc2U7CisKKwlCUkVBS19UT19ERUJVR0dFUigpOworCXJldHVybiBOVUxMOworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZTYwL2RjZTYwX3Jlc291cmNl LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlNjAvZGNlNjBfcmVzb3VyY2Uu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIzMGU0ZTRlZDdjMAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2U2MC9k Y2U2MF9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisqIENvcHlyaWdodCAyMDEyLTE1 IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk IGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklT SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRo b3JzOiBBTUQKKyAqCisgKi8KKworI2lmbmRlZiBfX0RDX1JFU09VUkNFX0RDRTYwX0hfXworI2Rl ZmluZSBfX0RDX1JFU09VUkNFX0RDRTYwX0hfXworCisjaW5jbHVkZSAiY29yZV90eXBlcy5oIgor CitzdHJ1Y3QgZGM7CitzdHJ1Y3QgcmVzb3VyY2VfcG9vbDsKKworc3RydWN0IHJlc291cmNlX3Bv b2wgKmRjZTYwX2NyZWF0ZV9yZXNvdXJjZV9wb29sKAorCXVpbnQ4X3QgbnVtX3ZpcnR1YWxfbGlu a3MsCisJc3RydWN0IGRjICpkYyk7CisKK3N0cnVjdCByZXNvdXJjZV9wb29sICpkY2U2MV9jcmVh dGVfcmVzb3VyY2VfcG9vbCgKKwl1aW50OF90IG51bV92aXJ0dWFsX2xpbmtzLAorCXN0cnVjdCBk YyAqZGMpOworCitzdHJ1Y3QgcmVzb3VyY2VfcG9vbCAqZGNlNjRfY3JlYXRlX3Jlc291cmNlX3Bv b2woCisJdWludDhfdCBudW1fdmlydHVhbF9saW5rcywKKwlzdHJ1Y3QgZGMgKmRjKTsKKworI2Vu ZGlmIC8qIF9fRENfUkVTT1VSQ0VfRENFNjBfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2U2MC9kY2U2MF90aW1pbmdfZ2VuZXJhdG9yLmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNlNjAvZGNlNjBfdGltaW5nX2dlbmVyYXRv ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTBiNjEwMzY3YWY4 Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjZTYw L2RjZTYwX3RpbWluZ19nZW5lcmF0b3IuYwpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHly aWdodCAyMDEyLTE1IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFV VEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K KyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2luY2x1ZGUgImRtX3NlcnZpY2VzLmgi CisKKy8qIGluY2x1ZGUgRENFNiByZWdpc3RlciBoZWFkZXIgZmlsZXMgKi8KKyNpbmNsdWRlICJk Y2UvZGNlXzZfMF9kLmgiCisjaW5jbHVkZSAiZGNlL2RjZV82XzBfc2hfbWFzay5oIgorCisjaW5j bHVkZSAiZGNfdHlwZXMuaCIKKworI2luY2x1ZGUgImluY2x1ZGUvZ3JwaF9vYmplY3RfaWQuaCIK KyNpbmNsdWRlICJpbmNsdWRlL2xvZ2dlcl9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICIuLi9kY2Ux MTAvZGNlMTEwX3RpbWluZ19nZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJkY2U2MF90aW1pbmdfZ2Vu ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJ0aW1pbmdfZ2VuZXJhdG9yLmgiCisKK2VudW0gYmxhY2tf Y29sb3JfZm9ybWF0IHsKKwlCTEFDS19DT0xPUl9GT1JNQVRfUkdCX0ZVTExSQU5HRSA9IDAsCS8q IHVzZWQgYXMgaW5kZXggaW4gYXJyYXkgKi8KKwlCTEFDS19DT0xPUl9GT1JNQVRfUkdCX0xJTUlU RUQsCisJQkxBQ0tfQ09MT1JfRk9STUFUX1lVVl9UViwKKwlCTEFDS19DT0xPUl9GT1JNQVRfWVVW X0NWLAorCUJMQUNLX0NPTE9SX0ZPUk1BVF9ZVVZfU1VQRVJfQUEsCisKKwlCTEFDS19DT0xPUl9G T1JNQVRfQ09VTlQKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGNlMTEwX3RpbWluZ19nZW5l cmF0b3Jfb2Zmc2V0cyByZWdfb2Zmc2V0c1tdID0geworeworCS5jcnRjID0gKG1tQ1JUQzBfRENG RV9NRU1fTElHSFRfU0xFRVBfQ05UTCAtIG1tQ1JUQzBfRENGRV9NRU1fTElHSFRfU0xFRVBfQ05U TCksCisJLmRjcCA9IChtbURDUDBfR1JQSF9DT05UUk9MIC0gbW1EQ1AwX0dSUEhfQ09OVFJPTCks Cit9LAoreworCS5jcnRjID0gKG1tQ1JUQzFfRENGRV9NRU1fTElHSFRfU0xFRVBfQ05UTCAtIG1t Q1JUQzBfRENGRV9NRU1fTElHSFRfU0xFRVBfQ05UTCksCisJLmRjcCA9IChtbURDUDFfR1JQSF9D T05UUk9MIC0gbW1EQ1AwX0dSUEhfQ09OVFJPTCksCit9LAoreworCS5jcnRjID0gKG1tQ1JUQzJf RENGRV9NRU1fTElHSFRfU0xFRVBfQ05UTCAtIG1tQ1JUQzBfRENGRV9NRU1fTElHSFRfU0xFRVBf Q05UTCksCisJLmRjcCA9IChtbURDUDJfR1JQSF9DT05UUk9MIC0gbW1EQ1AwX0dSUEhfQ09OVFJP TCksCit9LAoreworCS5jcnRjID0gKG1tQ1JUQzNfRENGRV9NRU1fTElHSFRfU0xFRVBfQ05UTCAt IG1tQ1JUQzBfRENGRV9NRU1fTElHSFRfU0xFRVBfQ05UTCksCisJLmRjcCA9IChtbURDUDNfR1JQ SF9DT05UUk9MIC0gbW1EQ1AwX0dSUEhfQ09OVFJPTCksCit9LAoreworCS5jcnRjID0gKG1tQ1JU QzRfRENGRV9NRU1fTElHSFRfU0xFRVBfQ05UTCAtIG1tQ1JUQzBfRENGRV9NRU1fTElHSFRfU0xF RVBfQ05UTCksCisJLmRjcCA9IChtbURDUDRfR1JQSF9DT05UUk9MIC0gbW1EQ1AwX0dSUEhfQ09O VFJPTCksCit9LAoreworCS5jcnRjID0gKG1tQ1JUQzVfRENGRV9NRU1fTElHSFRfU0xFRVBfQ05U TCAtIG1tQ1JUQzBfRENGRV9NRU1fTElHSFRfU0xFRVBfQ05UTCksCisJLmRjcCA9IChtbURDUDVf R1JQSF9DT05UUk9MIC0gbW1EQ1AwX0dSUEhfQ09OVFJPTCksCit9Cit9OworCisjZGVmaW5lIE5V TUJFUl9PRl9GUkFNRV9UT19XQUlUX09OX1RSSUdHRVJFRF9SRVNFVCAxMAorCisjZGVmaW5lIE1B WF9IX1RPVEFMIChDUlRDX0hfVE9UQUxfX0NSVENfSF9UT1RBTF9NQVNLICsgMSkKKyNkZWZpbmUg TUFYX1ZfVE9UQUwgKENSVENfVl9UT1RBTF9fQ1JUQ19WX1RPVEFMX01BU0todyArIDEpCisKKyNk ZWZpbmUgQ1JUQ19SRUcocmVnKSAocmVnICsgdGcxMTAtPm9mZnNldHMuY3J0YykKKyNkZWZpbmUg RENQX1JFRyhyZWcpIChyZWcgKyB0ZzExMC0+b2Zmc2V0cy5kY3ApCisjZGVmaW5lIERNSUZfUkVH KHJlZykgKHJlZyArIHRnMTEwLT5vZmZzZXRzLmRtaWYpCisKK3N0YXRpYyB2b2lkIHByb2dyYW1f cGl4X2R1cihzdHJ1Y3QgdGltaW5nX2dlbmVyYXRvciAqdGcsIHVpbnQzMl90IHBpeF9jbGtfa2h6 KQoreworCXVpbnQ2NF90IHBpeF9kdXI7CisJdWludDMyX3QgYWRkciA9IG1tRE1JRl9QRzBfRFBH X1BJUEVfQVJCSVRSQVRJT05fQ09OVFJPTDEKKwkJCQkJKyBEQ0UxMTBUR19GUk9NX1RHKHRnKS0+ b2Zmc2V0cy5kbWlmOworCXVpbnQzMl90IHZhbHVlID0gZG1fcmVhZF9yZWcodGctPmN0eCwgYWRk cik7CisKKwlpZiAocGl4X2Nsa19raHogPT0gMCkKKwkJcmV0dXJuOworCisJcGl4X2R1ciA9IDEw MDAwMDAwMDAgLyBwaXhfY2xrX2toejsKKworCXNldF9yZWdfZmllbGRfdmFsdWUoCisJCXZhbHVl LAorCQlwaXhfZHVyLAorCQlEUEdfUElQRV9BUkJJVFJBVElPTl9DT05UUk9MMSwKKwkJUElYRUxf RFVSQVRJT04pOworCisJZG1fd3JpdGVfcmVnKHRnLT5jdHgsIGFkZHIsIHZhbHVlKTsKK30KKwor c3RhdGljIHZvaWQgcHJvZ3JhbV90aW1pbmcoc3RydWN0IHRpbWluZ19nZW5lcmF0b3IgKnRnLAor CWNvbnN0IHN0cnVjdCBkY19jcnRjX3RpbWluZyAqdGltaW5nLAorCWJvb2wgdXNlX3ZiaW9zKQor eworCWlmICghdXNlX3ZiaW9zKQorCQlwcm9ncmFtX3BpeF9kdXIodGcsIHRpbWluZy0+cGl4X2Ns a19raHopOworCisJZGNlMTEwX3RnX3Byb2dyYW1fdGltaW5nKHRnLCB0aW1pbmcsIHVzZV92Ymlv cyk7Cit9CisKK3N0YXRpYyB2b2lkIGRjZTYwX3RpbWluZ19nZW5lcmF0b3JfZW5hYmxlX2FkdmFu Y2VkX3JlcXVlc3QoCisJc3RydWN0IHRpbWluZ19nZW5lcmF0b3IgKnRnLAorCWJvb2wgZW5hYmxl LAorCWNvbnN0IHN0cnVjdCBkY19jcnRjX3RpbWluZyAqdGltaW5nKQoreworCXN0cnVjdCBkY2Ux MTBfdGltaW5nX2dlbmVyYXRvciAqdGcxMTAgPSBEQ0UxMTBUR19GUk9NX1RHKHRnKTsKKwl1aW50 MzJfdCBhZGRyID0gQ1JUQ19SRUcobW1DUlRDX1NUQVJUX0xJTkVfQ09OVFJPTCk7CisJdWludDMy X3QgdmFsdWUgPSBkbV9yZWFkX3JlZyh0Zy0+Y3R4LCBhZGRyKTsKKworCWlmIChlbmFibGUpIHsK KwkJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJCXZhbHVlLAorCQkJMCwKKwkJCUNSVENfU1RBUlRf TElORV9DT05UUk9MLAorCQkJQ1JUQ19MRUdBQ1lfUkVRVUVTVE9SX0VOKTsKKwl9IGVsc2Ugewor CQlzZXRfcmVnX2ZpZWxkX3ZhbHVlKAorCQkJdmFsdWUsCisJCQkxLAorCQkJQ1JUQ19TVEFSVF9M SU5FX0NPTlRST0wsCisJCQlDUlRDX0xFR0FDWV9SRVFVRVNUT1JfRU4pOworCX0KKworCWlmICgo dGltaW5nLT52X3N5bmNfd2lkdGggKyB0aW1pbmctPnZfZnJvbnRfcG9yY2gpIDw9IDMpIHsKKwkJ c2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJCXZhbHVlLAorCQkJMywKKwkJCUNSVENfU1RBUlRfTElO RV9DT05UUk9MLAorCQkJQ1JUQ19BRFZBTkNFRF9TVEFSVF9MSU5FX1BPU0lUSU9OKTsKKwkJc2V0 X3JlZ19maWVsZF92YWx1ZSgKKwkJCXZhbHVlLAorCQkJMCwKKwkJCUNSVENfU1RBUlRfTElORV9D T05UUk9MLAorCQkJQ1JUQ19QUkVGRVRDSF9FTik7CisJfSBlbHNlIHsKKwkJc2V0X3JlZ19maWVs ZF92YWx1ZSgKKwkJCXZhbHVlLAorCQkJNCwKKwkJCUNSVENfU1RBUlRfTElORV9DT05UUk9MLAor CQkJQ1JUQ19BRFZBTkNFRF9TVEFSVF9MSU5FX1BPU0lUSU9OKTsKKwkJc2V0X3JlZ19maWVsZF92 YWx1ZSgKKwkJCXZhbHVlLAorCQkJMSwKKwkJCUNSVENfU1RBUlRfTElORV9DT05UUk9MLAorCQkJ Q1JUQ19QUkVGRVRDSF9FTik7CisJfQorCisJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJdmFsdWUs CisJCTEsCisJCUNSVENfU1RBUlRfTElORV9DT05UUk9MLAorCQlDUlRDX1BST0dSRVNTSVZFX1NU QVJUX0xJTkVfRUFSTFkpOworCisJc2V0X3JlZ19maWVsZF92YWx1ZSgKKwkJdmFsdWUsCisJCTEs CisJCUNSVENfU1RBUlRfTElORV9DT05UUk9MLAorCQlDUlRDX0lOVEVSTEFDRV9TVEFSVF9MSU5F X0VBUkxZKTsKKworCWRtX3dyaXRlX3JlZyh0Zy0+Y3R4LCBhZGRyLCB2YWx1ZSk7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgdGltaW5nX2dlbmVyYXRvcl9mdW5jcyBkY2U2MF90Z19mdW5jcyA9 IHsKKwkJLnZhbGlkYXRlX3RpbWluZyA9IGRjZTExMF90Z192YWxpZGF0ZV90aW1pbmcsCisJCS5w cm9ncmFtX3RpbWluZyA9IHByb2dyYW1fdGltaW5nLAorCQkuZW5hYmxlX2NydGMgPSBkY2UxMTBf dGltaW5nX2dlbmVyYXRvcl9lbmFibGVfY3J0YywKKwkJLmRpc2FibGVfY3J0YyA9IGRjZTExMF90 aW1pbmdfZ2VuZXJhdG9yX2Rpc2FibGVfY3J0YywKKwkJLmlzX2NvdW50ZXJfbW92aW5nID0gZGNl MTEwX3RpbWluZ19nZW5lcmF0b3JfaXNfY291bnRlcl9tb3ZpbmcsCisJCS5nZXRfcG9zaXRpb24g PSBkY2UxMTBfdGltaW5nX2dlbmVyYXRvcl9nZXRfcG9zaXRpb24sCisJCS5nZXRfZnJhbWVfY291 bnQgPSBkY2UxMTBfdGltaW5nX2dlbmVyYXRvcl9nZXRfdmJsYW5rX2NvdW50ZXIsCisJCS5nZXRf c2Nhbm91dHBvcyA9IGRjZTExMF90aW1pbmdfZ2VuZXJhdG9yX2dldF9jcnRjX3NjYW5vdXRwb3Ms CisJCS5zZXRfZWFybHlfY29udHJvbCA9IGRjZTExMF90aW1pbmdfZ2VuZXJhdG9yX3NldF9lYXJs eV9jb250cm9sLAorCQkud2FpdF9mb3Jfc3RhdGUgPSBkY2UxMTBfdGdfd2FpdF9mb3Jfc3RhdGUs CisJCS5zZXRfYmxhbmsgPSBkY2UxMTBfdGdfc2V0X2JsYW5rLAorCQkuaXNfYmxhbmtlZCA9IGRj ZTExMF90Z19pc19ibGFua2VkLAorCQkuc2V0X2NvbG9ycyA9IGRjZTExMF90Z19zZXRfY29sb3Jz LAorCQkuc2V0X292ZXJzY2FuX2JsYW5rX2NvbG9yID0KKwkJCQlkY2UxMTBfdGltaW5nX2dlbmVy YXRvcl9zZXRfb3ZlcnNjYW5fY29sb3JfYmxhY2ssCisJCS5zZXRfYmxhbmtfY29sb3IgPSBkY2Ux MTBfdGltaW5nX2dlbmVyYXRvcl9wcm9ncmFtX2JsYW5rX2NvbG9yLAorCQkuZGlzYWJsZV92Z2Eg PSBkY2UxMTBfdGltaW5nX2dlbmVyYXRvcl9kaXNhYmxlX3ZnYSwKKwkJLmRpZF90cmlnZ2VyZWRf cmVzZXRfb2NjdXIgPQorCQkJCWRjZTExMF90aW1pbmdfZ2VuZXJhdG9yX2RpZF90cmlnZ2VyZWRf cmVzZXRfb2NjdXIsCisJCS5zZXR1cF9nbG9iYWxfc3dhcF9sb2NrID0KKwkJCQlkY2UxMTBfdGlt aW5nX2dlbmVyYXRvcl9zZXR1cF9nbG9iYWxfc3dhcF9sb2NrLAorCQkuZW5hYmxlX3Jlc2V0X3Ry aWdnZXIgPSBkY2UxMTBfdGltaW5nX2dlbmVyYXRvcl9lbmFibGVfcmVzZXRfdHJpZ2dlciwKKwkJ LmRpc2FibGVfcmVzZXRfdHJpZ2dlciA9IGRjZTExMF90aW1pbmdfZ2VuZXJhdG9yX2Rpc2FibGVf cmVzZXRfdHJpZ2dlciwKKwkJLnRlYXJfZG93bl9nbG9iYWxfc3dhcF9sb2NrID0KKwkJCQlkY2Ux MTBfdGltaW5nX2dlbmVyYXRvcl90ZWFyX2Rvd25fZ2xvYmFsX3N3YXBfbG9jaywKKwkJLnNldF9k cnIgPSBkY2UxMTBfdGltaW5nX2dlbmVyYXRvcl9zZXRfZHJyLAorCQkuc2V0X3N0YXRpY19zY3Jl ZW5fY29udHJvbCA9CisJCQlkY2UxMTBfdGltaW5nX2dlbmVyYXRvcl9zZXRfc3RhdGljX3NjcmVl bl9jb250cm9sLAorCQkuc2V0X3Rlc3RfcGF0dGVybiA9IGRjZTExMF90aW1pbmdfZ2VuZXJhdG9y X3NldF90ZXN0X3BhdHRlcm4sCisJCS5hcm1fdmVydF9pbnRyID0gZGNlMTEwX2FybV92ZXJ0X2lu dHIsCisKKwkJLyogRENFNi4wIG92ZXJyaWRlcyAqLworCQkuZW5hYmxlX2FkdmFuY2VkX3JlcXVl c3QgPQorCQkJCWRjZTYwX3RpbWluZ19nZW5lcmF0b3JfZW5hYmxlX2FkdmFuY2VkX3JlcXVlc3Qs CisJCS5jb25maWd1cmVfY3JjID0gZGNlMTEwX2NvbmZpZ3VyZV9jcmMsCisJCS5nZXRfY3JjID0g ZGNlMTEwX2dldF9jcmMsCit9OworCit2b2lkIGRjZTYwX3RpbWluZ19nZW5lcmF0b3JfY29uc3Ry dWN0KAorCXN0cnVjdCBkY2UxMTBfdGltaW5nX2dlbmVyYXRvciAqdGcxMTAsCisJc3RydWN0IGRj X2NvbnRleHQgKmN0eCwKKwl1aW50MzJfdCBpbnN0YW5jZSwKKwljb25zdCBzdHJ1Y3QgZGNlMTEw X3RpbWluZ19nZW5lcmF0b3Jfb2Zmc2V0cyAqb2Zmc2V0cykKK3sKKwl0ZzExMC0+Y29udHJvbGxl cl9pZCA9IENPTlRST0xMRVJfSURfRDAgKyBpbnN0YW5jZTsKKwl0ZzExMC0+YmFzZS5pbnN0ID0g aW5zdGFuY2U7CisJdGcxMTAtPm9mZnNldHMgPSAqb2Zmc2V0czsKKwl0ZzExMC0+ZGVyaXZlZF9v ZmZzZXRzID0gcmVnX29mZnNldHNbaW5zdGFuY2VdOworCisJdGcxMTAtPmJhc2UuZnVuY3MgPSAm ZGNlNjBfdGdfZnVuY3M7CisKKwl0ZzExMC0+YmFzZS5jdHggPSBjdHg7CisJdGcxMTAtPmJhc2Uu YnAgPSBjdHgtPmRjX2Jpb3M7CisKKwl0ZzExMC0+bWF4X2hfdG90YWwgPSBDUlRDX0hfVE9UQUxf X0NSVENfSF9UT1RBTF9NQVNLICsgMTsKKwl0ZzExMC0+bWF4X3ZfdG90YWwgPSBDUlRDX1ZfVE9U QUxfX0NSVENfVl9UT1RBTF9NQVNLICsgMTsKKworCXRnMTEwLT5taW5faF9ibGFuayA9IDU2Owor CXRnMTEwLT5taW5faF9mcm9udF9wb3JjaCA9IDQ7CisJdGcxMTAtPm1pbl9oX2JhY2tfcG9yY2gg PSA0OworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNl NjAvZGNlNjBfdGltaW5nX2dlbmVyYXRvci5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5 L2RjL2RjZTYwL2RjZTYwX3RpbWluZ19nZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjg5NzJjZDBkNTgxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kY2U2MC9kY2U2MF90aW1pbmdfZ2VuZXJhdG9yLmgK QEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyLTE1IEFkdmFuY2VkIE1pY3Jv IERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisg KiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBP VEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQU1ECisgKgor ICovCisKKyNpZm5kZWYgX19EQ19USU1JTkdfR0VORVJBVE9SX0RDRTYwX0hfXworI2RlZmluZSBf X0RDX1RJTUlOR19HRU5FUkFUT1JfRENFNjBfSF9fCisKKyNpbmNsdWRlICJ0aW1pbmdfZ2VuZXJh dG9yLmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9ncnBoX29iamVjdF9pZC5oIgorCisvKiBEQ0U2 LjAgaW1wbGVtZW50YXRpb24gaW5oZXJpdHMgZnJvbSBEQ0UxMS4wICovCit2b2lkIGRjZTYwX3Rp bWluZ19nZW5lcmF0b3JfY29uc3RydWN0KAorCXN0cnVjdCBkY2UxMTBfdGltaW5nX2dlbmVyYXRv ciAqdGcsCisJc3RydWN0IGRjX2NvbnRleHQgKmN0eCwKKwl1aW50MzJfdCBpbnN0YW5jZSwKKwlj b25zdCBzdHJ1Y3QgZGNlMTEwX3RpbWluZ19nZW5lcmF0b3Jfb2Zmc2V0cyAqb2Zmc2V0cyk7CisK KyNlbmRpZiAvKiBfX0RDX1RJTUlOR19HRU5FUkFUT1JfRENFNjBfSF9fICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvZGNlL2RjZV82XzBfc2hfbWFz ay5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL2RjZS9kY2VfNl8wX3No X21hc2suaAppbmRleCBhYmUwNWJjODA3NTIuLjU0OTJjNmI5ODUyNSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL2RjZS9kY2VfNl8wX3NoX21hc2suaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvZGNlL2RjZV82XzBfc2hf bWFzay5oCkBAIC0yMjY0LDYgKzIyNjQsMTAgQEAKICNkZWZpbmUgQ1JUQ19TVEFSVF9MSU5FX0NP TlRST0xfX0NSVENfQURWQU5DRURfU1RBUlRfTElORV9QT1NJVElPTl9fU0hJRlQgMHgwMDAwMDAx MAogI2RlZmluZSBDUlRDX1NUQVJUX0xJTkVfQ09OVFJPTF9fQ1JUQ19JTlRFUkxBQ0VfU1RBUlRf TElORV9FQVJMWV9NQVNLIDB4MDAwMDAxMDBMCiAjZGVmaW5lIENSVENfU1RBUlRfTElORV9DT05U Uk9MX19DUlRDX0lOVEVSTEFDRV9TVEFSVF9MSU5FX0VBUkxZX19TSElGVCAweDAwMDAwMDA4Cisj ZGVmaW5lIENSVENfU1RBUlRfTElORV9DT05UUk9MX19DUlRDX0xFR0FDWV9SRVFVRVNUT1JfRU5f TUFTSyAweDEwMDAwMAorI2RlZmluZSBDUlRDX1NUQVJUX0xJTkVfQ09OVFJPTF9fQ1JUQ19MRUdB Q1lfUkVRVUVTVE9SX0VOX19TSElGVCAweDE0CisjZGVmaW5lIENSVENfU1RBUlRfTElORV9DT05U Uk9MX19DUlRDX1BSRUZFVENIX0VOX01BU0sgMHgxMDAwMDAwMAorI2RlZmluZSBDUlRDX1NUQVJU X0xJTkVfQ09OVFJPTF9fQ1JUQ19QUkVGRVRDSF9FTl9fU0hJRlQgMHgxYwogI2RlZmluZSBDUlRD X1NUQVJUX0xJTkVfQ09OVFJPTF9fQ1JUQ19QUk9HUkVTU0lWRV9TVEFSVF9MSU5FX0VBUkxZX01B U0sgMHgwMDAwMDAwMUwKICNkZWZpbmUgQ1JUQ19TVEFSVF9MSU5FX0NPTlRST0xfX0NSVENfUFJP R1JFU1NJVkVfU1RBUlRfTElORV9FQVJMWV9fU0hJRlQgMHgwMDAwMDAwMAogI2RlZmluZSBDUlRD X1NUQVRVU19fQ1JUQ19IX0FDVElWRV9ESVNQX01BU0sgMHgwMDAyMDAwMEwKLS0gCjIuMTcuMQoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBt YWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==